Snapmaker: Unterschied zwischen den Versionen

Aus FHEMWiki
(Die Seite wurde neu angelegt: „Achtung: Work in Progress, wird laufend erweitert. Der Snapmaker ist eine Kombination aus 3D-Drucker, Lasercutter und CNC-Fräser des gleichnamigen Herstellers in verschiedenen Ausführungen. Ziel der Anbindung an FHEM ist nicht die komplette Steuerung des Druckers - dafür gibt es Luban (Anwendungssoftware für alle drei Teilsysteme), Cura (als Slicer und Frontend für den 3D-Druck), LightBurn (für Laserschneiden) sowie ggf. Octoprint (zur Jobsteuer…“)
 
 
(7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 6: Zeile 6:
==Überwachung mit FHEM==
==Überwachung mit FHEM==
Für die Überwachung empfiehlt sich die Verwendung des Moduls HTTPMOD, mit einem Überwachungsintervall von zunächst 60 Sekunden
Für die Überwachung empfiehlt sich die Verwendung des Moduls HTTPMOD, mit einem Überwachungsintervall von zunächst 60 Sekunden
  define UltiMaker HTTPMOD http://192.168.0.xxx/api/v1/print_job 60   
  define SnapMaker HTTPMOD http://192.168.0.xxx/api/v1/print_job 60   
  attr UltiMaker bodyEncode utf8
  attr SnapMaker bodyEncode utf8
  attr UltiMaker devStateIcon .*ffline.*:it_printer@red Opening.*:it_printer@yellow Operational:it_printer@blue Printing.*:it_printer@green
  attr SnapMaker devStateIcon .*ffline.*:it_printer@red Opening.*:it_printer@yellow Operational:it_printer@blue Printing.*:it_printer@green
  attr UltiMaker extractAllJSON 0
  attr SnapMaker extractAllJSON 0
Das FHEM-Device kennt nur zwei set-Befehle. Diese dienen nicht der Steuerung des Druckers, sondern dem Ein- und Ausschalten einer Funksteckdose für die Stromversorgung (Power Supply Unit = PSU)des Ultimakers. Im Beispiel ist das ein Shelly-Device mit der Bezeichnung UltiMaker.Power, falls man eine andere Funksteckdose verwendet, kann als set0xURL auch ein REST-Call an FHEM abgesetzt werden. Für das Anschalten gibt es ein Icon in der Übersichtszeile.
===set-Befehle===
  attr UltiMaker set01Name  turnPSUOn
Das FHEM-Device kennt nur vier set-Befehle. Die beiden ersten dienen nicht der Steuerung des Druckers, sondern dem Ein- und Ausschalten einer Funksteckdose für die Stromversorgung (Power Supply Unit = PSU)des Snapmakers. Im Beispiel ist das ein Shelly-Device mit der Bezeichnung SnapMaker.Power, falls man eine andere Funksteckdose verwendet, kann als set0xURL auch ein REST-Call an FHEM abgesetzt werden. Für das Anschalten gibt es ein Icon in der Übersichtszeile.
  attr UltiMaker set01NoArg 1
  attr SnapMaker set01Name  turnPSUOn
  attr UltiMaker set01URL  http://192.168.0.yyy/relay/0?turn=on
  attr SnapMaker set01NoArg 1
  attr UltiMaker set02Name  turnPSUOff
  attr SnapMaker set01URL  http://192.168.0.yyy/relay/0?turn=on
  attr UltiMaker set02NoArg 1
  attr SnapMaker set02Name  turnPSUOff
  attr UltiMaker set02URL  http://192.168.0.yyy/relay/0?turn=off
  attr SnapMaker set02NoArg 1
  attr UltiMaker webCmd    turnPSUOn
  attr SnapMaker set02URL  http://192.168.0.yyy/relay/0?turn=off
  attr UltiMaker cmdIcon    turnPSUOn:general_an
  attr SnapMaker webCmd    turnPSUOn
  attr SnapMaker cmdIcon    turnPSUOn:general_an
Damit FHEM die Verbindung zum Snapmaker überhaupt öffnet, und am Leben erhält, muss als erstes ein set Snapmaker connect ausgeführt werden. Dafür benötigt man die Attribute
attr SnapMaker set03Name  connect
attr SnapMaker set03NoArg 1
attr SnapMaker set03URL  http://192.168.0.xxx:8080/api/v1/connect?token=$sid
attr SnapMaker set04Name  disconnect
attr SnapMaker set04NoArg 1
attr SnapMaker set04URL  none
attr SnapMaker showBody  1
attr SnapMaker showError  1
attr SnapMaker sid01Data  token
attr SnapMaker sid01Header1 Content-Type: application/json
attr SnapMaker sid01Header2 Accept: */*
attr SnapMaker sid01URL  http://192.168.0.xxx:8080/api/v1/connect
===get-Befehle===
Das FHEM-Device kennt nur einen get-Befehl, mit dem der Status des Druckers abgefragt wird
Das FHEM-Device kennt nur einen get-Befehl, mit dem der Status des Druckers abgefragt wird
  attr UltiMaker get01Name  printer_status
  attr SnapMaker get01Name  printer_status
  attr UltiMaker get01URL  http://192.168.0.xxx/api/v1/printer
  attr SnapMaker get01URL  http://192.168.0.xxx/api/v1/printer
  attr UltiMaker getHeader1 Content-Type: application/json
  attr SnapMaker getHeader1 Content-Type: application/json
  attr UltiMaker getHeader2 Accept: */*
  attr SnapMaker getHeader2 Accept: */*
===Readings===
===Readings===
Bei den Readings gibt es diverse Daten, die vom Ultimaker geliefert werden - andere werden als userReadings aus diesen zusammengebaut oder als elektrische Leistung von der Funksteckdose UltiMaker.Power geholt.
Bei den Readings gibt es diverse Daten, die vom Snapmaker geliefert werden - andere werden als userReadings aus diesen zusammengebaut oder als elektrische Leistung von der Funksteckdose SnapMaker.Power geholt.
  attr UltiMaker reading01JSON name
  attr Snapmaker reading01JSON fileName
  attr UltiMaker reading01Name job_file_name
  attr Snapmaker reading01Name job_file_name
  attr UltiMaker reading02JSON progress
  attr Snapmaker reading02JSON progress
  attr UltiMaker reading02Name progress_completion
  attr Snapmaker reading02Name progress_completion  
  attr UltiMaker reading02OExpr int($val*100)
  attr Snapmaker reading02OExpr int($val*100)."%"
  attr UltiMaker reading03JSON time_total
  attr Snapmaker reading03JSON estimatedTime
  attr UltiMaker reading03Name progress_printTime
  attr Snapmaker reading03Name progress_printTime
  attr UltiMaker reading03OExpr sprintf("%02d:%02d:%02d",int($val/3600),int($val/60-60*int($val/3600)),$val%60)
  attr Snapmaker reading03OExpr sprintf("%02d:%02d:%02d",int($val/3600),int($val/60-60*int($val/3600)),int($val%60))  
  attr UltiMaker reading04JSON time_elapsed
  attr Snapmaker reading04JSON elapsedTime
  attr UltiMaker reading04Name progress_printTimeElapsed
  attr Snapmaker reading04Name progress_printTimeElapsed
  attr UltiMaker reading04OExpr sprintf("%02d:%02d:%02d",int($val/3600),int($val/60-60*int($val/3600)),$val%60)
  attr Snapmaker reading04OExpr sprintf("%02d:%02d:%02d",int($val/3600),int($val/60-60*int($val/3600)),int($val%60))
  attr UltiMaker reading05JSON status
  attr Snapmaker reading05JSON remainingTime
  attr UltiMaker reading05Name status
  attr Snapmaker reading05Name progress_printTimeRemaining
  attr UltiMaker reading06JSON datetime_started
attr Snapmaker reading05OExpr sprintf("%02d:%02d:%02d",int($val/3600),int($val/60-60*int($val/3600)),int($val%60))
  attr UltiMaker reading06Name job_startTime
  attr Snapmaker reading06JSON printStatus
  attr UltiMaker reading07JSON source
  attr Snapmaker reading06Name status
  attr UltiMaker reading07Name job_origin
  attr Snapmaker reading07JSON status
  attr UltiMaker reading08JSON result
  attr Snapmaker reading07Name status2
  attr UltiMaker reading08Name job_result
  attr Snapmaker reading08JSON series
  attr UltiMaker reading09JSON bed_temperature_current
  attr Snapmaker reading08Name model
  attr UltiMaker reading09Name temperature_bed_actual
  attr Snapmaker reading09JSON bed_temperature_current
  attr UltiMaker reading10JSON bed_temperature_target
  attr Snapmaker reading09Name temperature_bed_actual
  attr UltiMaker reading10Name temperature_bed_target
  attr Snapmaker reading10JSON bed_temperature_target
  attr UltiMaker reading11JSON heads_01_extruders_01_hotend_temperature_current
  attr Snapmaker reading10Name temperature_bed_target
  attr UltiMaker reading11Name temperature_tool0_actual
  attr Snapmaker reading11JSON heads_01_extruders_01_hotend_temperature_current
  attr UltiMaker reading12JSON heads_01_extruders_01_hotend_temperature_target
  attr Snapmaker reading11Name temperature_tool0_actual
  attr UltiMaker reading12Name temperature_tool0_target
  attr Snapmaker reading12JSON heads_01_extruders_01_hotend_temperature_target
  attr UltiMaker reading13JSON heads_01_extruders_02_hotend_temperature_current
  attr Snapmaker reading12Name temperature_tool0_target
  attr UltiMaker reading13Name temperature_tool1_actual
  attr Snapmaker reading13JSON heads_01_extruders_02_hotend_temperature_current
  attr UltiMaker reading14JSON heads_01_extruders_02_hotend_temperature_target
  attr Snapmaker reading13Name temperature_tool1_actual
  attr UltiMaker reading14Name temperature_tool1_target
  attr Snapmaker reading14JSON heads_01_extruders_02_hotend_temperature_target
  [[Datei:Ultimaker2.png|links|mini|480x480px]]
  attr Snapmaker reading14Name temperature_tool1_target
  attr UltiMaker userReadings printer_status:progress_completion.* {fhem("get UltiMaker printer_status")},\
attr Snapmaker reading15JSON spindleSpeed
  state:status.* {my $x=ReadingsVal("UltiMaker","status","offline");\
attr Snapmaker reading15Name spindle_speed
  (($x eq "printing")?"Printing":(($x eq "idle")?"Operational":(($x eq "offline")?"Offline":$x)))},\
attr Snapmaker reading16JSON workSpeed
  printer_power:.* {sprintf("%3.0f W",ReadingsVal("UltiMaker.Power","power",0))},\
attr Snapmaker reading16Name head_speed
   progress_printTimeLeft:progress_printTimeElapsed.* {my $e=ReadingsVal("UltiMaker","progress_printTimeElapsed","");\
attr Snapmaker reading17JSON token
   $e=~/(\d\d)\:(\d\d)\:(\d\d)/;my $es=$1*3600+$2*60+$3;\
attr Snapmaker reading17Name token
  my $t=ReadingsVal("UltiMaker","progress_printTime","");$t=~/(\d\d)\:(\d\d)\:(\d\d)/;\
attr Snapmaker reading18JSON toolHead
  my $ts=$1*3600+$2*60+$3;my $val=$ts-$es;\
attr Snapmaker reading18Name toolHead
   sprintf("%02d:%02d:%02d",int($val/3600),int($val/60-60*int($val/3600)),$val%60)},\
attr Snapmaker reading22JSON laser10WErrorState
  progress_printTimeEnding:progress_printTimeElapsed.* {my $e=ReadingsVal("UltiMaker","progress_printTimeElapsed","");\
attr Snapmaker reading22Name laser_10W_ErrorState
  $e=~/(\d\d)\:(\d\d)\:(\d\d)/;my $es=$1*3600+$2*60+$3;\ 
attr Snapmaker reading23JSON laserCamera
  my $t=ReadingsVal("UltiMaker","progress_printTime","");$t=~/(\d\d)\:(\d\d)\:(\d\d)/;\
attr Snapmaker reading23Name laser_Camera
  my $ts=$1*3600+$2*60+$3;my $val=$ts-$es;POSIX::strftime("%H:%M:%S",localtime(time+$val))}
attr Snapmaker reading24JSON laserFocalLength
attr Snapmaker reading24Name laser_FocalLength
attr Snapmaker reading25JSON laserPower
attr Snapmaker reading25Name laser_Power
  [[Datei:Snapmaker2.png|links|mini|480x480px]]
  attr SnapMaker userReadings printer_power:.* {sprintf("%3.0f W",ReadingsVal("SnapMaker.Power","power_0",0))},
   progress_printTimeEnding:progress_printTimeElapsed.* {my $e=ReadingsVal("SnapMaker","progress_printTimeElapsed","");
   $e=~/(\d\d)\:(\d\d)\:(\d\d)/;my $es=$1*3600+$2*60+$3;my $t=ReadingsVal("SnapMaker","progress_printTime","");
  $t=~/(\d\d)\:(\d\d)\:(\d\d)/;my $ts=$1*3600+$2*60+$3;my $val=$ts-$es;
   POSIX::strftime("%H:%M: %S",localtime(time+$val))}


Damit ergeben sich die nebenstehenden Readings, die ein deutliches Bild des Druckjobs geben.
Damit ergeben sich die nebenstehenden Readings, die ein deutliches Bild des Druckjobs geben.
===Zustandsanzeige===
===Zustandsanzeige===
Die Zustandsanzeige ist komplex und mehrzeilig
Die Zustandsanzeige ist komplex und mehrzeilig
[[Datei:Ultimaker1.png|links|mini|480x480px]]
[[Datei:Snapmaker1.png|links|mini|480x480px]]
<pre>
<pre>
attr UltiMaker stateFormat {my $v=ReadingsVal("UltiMaker","state","");\
attr Snapmaker stateFormat {my $v=ReadingsVal("SnapMaker","status","");\
  my $w=ReadingsVal("UltiMaker","job_file_name","");\  
my $w=ReadingsVal("SnapMaker","job_file_name",""); \
  $w=~s/.gcode//;\  
$w=~s/.gcode//; \
  my $x=ReadingsVal("UltiMaker","progress_completion","");\
my $x=ReadingsVal("SnapMaker","progress_completion","");\
  my $u=ReadingsVal("UltiMaker","progress_printTimeEnding","");\
my $y="";\
  my $y="";\
if($v eq "Printing"){\
  if($v eq "Printing"){\
  $y=sprintf("3D-Druck (%d %%)\n</br>%s",$x,$w);\
    $y=sprintf("3D-Druck (%d %% -> %s)\n</br>%s",$x,$u,,$w);\
}elsif($v eq "Idle"){\
  }elsif($v eq "Operational"){\
  $y=sprintf("Bereit");\
    $y=sprintf("Bereit")};\
};\
  my $z=ReadingsVal("UltiMaker","printer_power",0);\
my $z=ReadingsVal("SnapMaker","printer_power",0);\
  sprintf("<p align=\"left\">\n%s\n%s\n<br/>%s</p>",$v,$z,$y)}</pre>
sprintf("<p align=\"left\">\n%s\n%s\n<br/>%s</p>",$v,$z,$y)}</pre>
(to be continued)
(to be continued)
[[Kategorie:Maker-Hardware]]
[[Kategorie:Maker-Hardware]]

Aktuelle Version vom 13. September 2023, 10:30 Uhr

Achtung: Work in Progress, wird laufend erweitert.

Der Snapmaker ist eine Kombination aus 3D-Drucker, Lasercutter und CNC-Fräser des gleichnamigen Herstellers in verschiedenen Ausführungen.

Ziel der Anbindung an FHEM ist nicht die komplette Steuerung des Druckers - dafür gibt es Luban (Anwendungssoftware für alle drei Teilsysteme), Cura (als Slicer und Frontend für den 3D-Druck), LightBurn (für Laserschneiden) sowie ggf. Octoprint (zur Jobsteuerung), Für Octoprint gibt es auch ein FHEM-Modul, allerdings nutzt nicht jeder Octoprint. Sondern hier geht es um die direkte Überwachung des Druckers in FHEM.

Überwachung mit FHEM

Für die Überwachung empfiehlt sich die Verwendung des Moduls HTTPMOD, mit einem Überwachungsintervall von zunächst 60 Sekunden

define SnapMaker HTTPMOD http://192.168.0.xxx/api/v1/print_job 60  
attr SnapMaker bodyEncode utf8
attr SnapMaker devStateIcon .*ffline.*:it_printer@red Opening.*:it_printer@yellow Operational:it_printer@blue Printing.*:it_printer@green
attr SnapMaker extractAllJSON 0

set-Befehle

Das FHEM-Device kennt nur vier set-Befehle. Die beiden ersten dienen nicht der Steuerung des Druckers, sondern dem Ein- und Ausschalten einer Funksteckdose für die Stromversorgung (Power Supply Unit = PSU)des Snapmakers. Im Beispiel ist das ein Shelly-Device mit der Bezeichnung SnapMaker.Power, falls man eine andere Funksteckdose verwendet, kann als set0xURL auch ein REST-Call an FHEM abgesetzt werden. Für das Anschalten gibt es ein Icon in der Übersichtszeile.

attr SnapMaker set01Name  turnPSUOn
attr SnapMaker set01NoArg 1
attr SnapMaker set01URL   http://192.168.0.yyy/relay/0?turn=on
attr SnapMaker set02Name  turnPSUOff
attr SnapMaker set02NoArg 1
attr SnapMaker set02URL   http://192.168.0.yyy/relay/0?turn=off
attr SnapMaker webCmd     turnPSUOn
attr SnapMaker cmdIcon    turnPSUOn:general_an

Damit FHEM die Verbindung zum Snapmaker überhaupt öffnet, und am Leben erhält, muss als erstes ein set Snapmaker connect ausgeführt werden. Dafür benötigt man die Attribute

attr SnapMaker set03Name  connect
attr SnapMaker set03NoArg 1
attr SnapMaker set03URL   http://192.168.0.xxx:8080/api/v1/connect?token=$sid
attr SnapMaker set04Name  disconnect
attr SnapMaker set04NoArg 1
attr SnapMaker set04URL   none
attr SnapMaker showBody   1
attr SnapMaker showError  1
attr SnapMaker sid01Data  token
attr SnapMaker sid01Header1 Content-Type: application/json
attr SnapMaker sid01Header2 Accept: */*
attr SnapMaker sid01URL   http://192.168.0.xxx:8080/api/v1/connect

get-Befehle

Das FHEM-Device kennt nur einen get-Befehl, mit dem der Status des Druckers abgefragt wird

attr SnapMaker get01Name  printer_status
attr SnapMaker get01URL   http://192.168.0.xxx/api/v1/printer
attr SnapMaker getHeader1 Content-Type: application/json
attr SnapMaker getHeader2 Accept: */*

Readings

Bei den Readings gibt es diverse Daten, die vom Snapmaker geliefert werden - andere werden als userReadings aus diesen zusammengebaut oder als elektrische Leistung von der Funksteckdose SnapMaker.Power geholt.

attr Snapmaker reading01JSON fileName
attr Snapmaker reading01Name job_file_name
attr Snapmaker reading02JSON progress
attr Snapmaker reading02Name progress_completion 
attr Snapmaker reading02OExpr int($val*100)."%"
attr Snapmaker reading03JSON estimatedTime
attr Snapmaker reading03Name progress_printTime
attr Snapmaker reading03OExpr sprintf("%02d:%02d:%02d",int($val/3600),int($val/60-60*int($val/3600)),int($val%60)) 
attr Snapmaker reading04JSON elapsedTime
attr Snapmaker reading04Name progress_printTimeElapsed
attr Snapmaker reading04OExpr sprintf("%02d:%02d:%02d",int($val/3600),int($val/60-60*int($val/3600)),int($val%60))
attr Snapmaker reading05JSON remainingTime
attr Snapmaker reading05Name progress_printTimeRemaining
attr Snapmaker reading05OExpr sprintf("%02d:%02d:%02d",int($val/3600),int($val/60-60*int($val/3600)),int($val%60))
attr Snapmaker reading06JSON printStatus
attr Snapmaker reading06Name status 
attr Snapmaker reading07JSON status
attr Snapmaker reading07Name status2
attr Snapmaker reading08JSON series
attr Snapmaker reading08Name model
attr Snapmaker reading09JSON bed_temperature_current
attr Snapmaker reading09Name temperature_bed_actual
attr Snapmaker reading10JSON bed_temperature_target
attr Snapmaker reading10Name temperature_bed_target
attr Snapmaker reading11JSON heads_01_extruders_01_hotend_temperature_current
attr Snapmaker reading11Name temperature_tool0_actual
attr Snapmaker reading12JSON heads_01_extruders_01_hotend_temperature_target
attr Snapmaker reading12Name temperature_tool0_target
attr Snapmaker reading13JSON heads_01_extruders_02_hotend_temperature_current
attr Snapmaker reading13Name temperature_tool1_actual
attr Snapmaker reading14JSON heads_01_extruders_02_hotend_temperature_target
attr Snapmaker reading14Name temperature_tool1_target
attr Snapmaker reading15JSON spindleSpeed
attr Snapmaker reading15Name spindle_speed
attr Snapmaker reading16JSON workSpeed
attr Snapmaker reading16Name head_speed
attr Snapmaker reading17JSON token
attr Snapmaker reading17Name token
attr Snapmaker reading18JSON toolHead
attr Snapmaker reading18Name toolHead
attr Snapmaker reading22JSON laser10WErrorState
attr Snapmaker reading22Name laser_10W_ErrorState
attr Snapmaker reading23JSON laserCamera
attr Snapmaker reading23Name laser_Camera
attr Snapmaker reading24JSON laserFocalLength
attr Snapmaker reading24Name laser_FocalLength
attr Snapmaker reading25JSON laserPower
attr Snapmaker reading25Name laser_Power
attr SnapMaker userReadings printer_power:.* {sprintf("%3.0f W",ReadingsVal("SnapMaker.Power","power_0",0))},
  progress_printTimeEnding:progress_printTimeElapsed.* {my $e=ReadingsVal("SnapMaker","progress_printTimeElapsed","");
  $e=~/(\d\d)\:(\d\d)\:(\d\d)/;my $es=$1*3600+$2*60+$3;my $t=ReadingsVal("SnapMaker","progress_printTime","");
  $t=~/(\d\d)\:(\d\d)\:(\d\d)/;my $ts=$1*3600+$2*60+$3;my $val=$ts-$es;
  POSIX::strftime("%H:%M:  %S",localtime(time+$val))}

Damit ergeben sich die nebenstehenden Readings, die ein deutliches Bild des Druckjobs geben.

Zustandsanzeige

Die Zustandsanzeige ist komplex und mehrzeilig

attr Snapmaker stateFormat {my $v=ReadingsVal("SnapMaker","status","");\
 my $w=ReadingsVal("SnapMaker","job_file_name",""); \
 $w=~s/.gcode//; \
 my $x=ReadingsVal("SnapMaker","progress_completion","");\
 my $y="";\
 if($v eq "Printing"){\
  $y=sprintf("3D-Druck (%d %%)\n</br>%s",$x,$w);\
 }elsif($v eq "Idle"){\
  $y=sprintf("Bereit");\
 };\
my $z=ReadingsVal("SnapMaker","printer_power",0);\
sprintf("<p align=\"left\">\n%s\n%s\n<br/>%s</p>",$v,$z,$y)}

(to be continued)