[70_OctoPrint.pm] zum Steuern von OctoPrint 3D Drucker

Begonnen von michael.winkler, 31 Dezember 2017, 16:56:28

Vorheriges Thema - Nächstes Thema

markus_fhem

Ich schließe mich dem an, beobachte bei mir die gleiche Thematik. Gleiche Error-Message und Online ist false, aber die anderen Readings werden normal aktualisiert.
Octoprint und Fhem sind erst seit zwei Tagen aktiv, weswegen ich nicht sagen kann, ob es vorher anders war.

Hab mir nun erstmal mit einem kleinen DOIF beholfen, das den online-Status auf true setzt, wenn er false ist und die Readings trotzdem events auslösen.

defmod di_3D_MegaSOnline DOIF (["^3D_MegaS$:^(job|progress|temperature).*"] and [3D_MegaS:online] eq "false") \
(setreading 3D_MegaS online true)
attr di_3D_MegaSOnline do always


Im Modul ist in Zeile 272 eine if-Abfrage auf $err drin. Wenn die einmal true geworden zu sein, springt der Online-Status richtigerweise auf false (warum hier eigentlich true und false und nicht online/offline?), kommt dann aber nicht mehr zurück in den richtigen Status.

markus_fhem

#196
Zitat von: raiderxxl am 10 Mai 2021, 14:25:53
Lösung für alle anderen:

eta {POSIX::strftime("%H:%M:%S",localtime(time+ ReadingsNum($NAME, "progress_printTimeLeft", 0)))}

Grüßle

Pascal

Vielen Dank für diese kompakte Lösung.
ich habe bei mir noch die Sekunden entfernt, damit sich das Reading nicht so häufig aktualisiert. Insbesondere wenn man zur Vorhersage nicht die OctoPrint-eigene Methode, sondern PrintTimeGenius verwendet, pendelt sich der Wert schon nach ganz kurzer Zeit stabil auf +/- wenige Minuten ein.

Edit: Noch um einen Trigger ergänzt, damit es nicht bei allen readings aktualisiert, denn sonst zählt es weiter, auch wenn der Druck schon zuende ist.

eta:progress_printTimeLeft.* {POSIX::strftime("%H:%M",localtime(time+ ReadingsNum($NAME, "progress_printTimeLeft", 0)))}

ERI

da ich  Octoprint nur beobachte, habe ich das Mqtt plugin im Octo installiert. So weit  so  gut.
Und  eben  ein device als  MQTT2  device  angelegt ....   Alles fast  schön
nur ich kommen mit diesen  Jason maps  nicht klar nicht nur  hier nicht  sonder auch  generell  ist das  irgendwie ....
ich empfange  über temparatur sowohl die  Bett als auch  die  Düsen Temperatur
sowohl target als auch aktuelle Werte
ich bin  irgend  wie  zu blöde  das  richtig mit  der  map aufzulösen
kann das mal wer erklären  weil ich habe auch im Forum und im wiki nichts gefunden, was mich weiter bringt,  dank im vorraus 
das  sind die readings :

_timestamp 1608938025 
actual 59.66
target 60.0
************************
die  werte enthalten    abwechselnd  die  Werte für  Bett und Düse  >:(

die readinglist 
...
hPgUeKvBOBDHp:octoPrint/temperature/tool0:.* { json2nameValue($EVENT) }
hPgUeKvBOBDHp:octoPrint/temperature/bed:.* { json2nameValue($EVENT) }
*****************************************************
Im  MQtt    browser  sehe  ich  die  werte 
unter  Octoprint/ temerature/

bed= {"_Timestamp":1234567890,"actual":60.03 ,"target" :60.00}
Tool0= {"_Timestamp":1234567890,"actual":200.13 ,"target" :200.00}

nur bekomme ich  es  nicht   hin  die Werte  bed.actual  und bed.target
bzw  das  gleich  fürs  tool aus zu filtern  so das
   
so das   das State  format
data_MACHINE_TYPE oparate data_FIRMWARE_NAME is state_id complete: progress %
<br>
mqtt
bed:actual -> bed:target °C
tool0:actual -> tool0:target °C

  sinnvoll gefüllt wird

Thyraz

Die Frage ist lange her, aber da es keine Reaktion auf die letzten Probleme gab, habe ich mich auch entschieden OctoPrint über MQTT2_Device anzubinden.

Hier mal eine erste Konfiguration, welche die Temperaturen, den PrinterStatus, den Druckfortschritt und den aktuellen Dateinamen in Readings verpackt.

Mehr folgt sicher noch.

Attribut readingList:

octoPrint/temperature/tool0:.* { json2nameValue($EVENT, 'TEMP_NOZZLE_', $JSONMAP) }
octoPrint/temperature/bed:.* { json2nameValue($EVENT, 'TEMP_BED_', $JSONMAP) }
octoPrint/event/PrinterStateChanged:.* { json2nameValue($EVENT, 'PRINTER_STATE_', $JSONMAP) }
octoPrint/progress/printing:.* { json2nameValue($EVENT, 'PROGRESS_', $JSONMAP) }


Attribut jsonMap:

TEMP_BED__timestamp:0
TEMP_BED_actual:TemperatureBedCurrent
TEMP_BED_target:TemperatureBedTarget
TEMP_NOZZLE__timestamp:0
TEMP_NOZZLE_actual:TemperatureNozzleCurrent
TEMP_NOZZLE_target:TemperatureNozzleTarget
PRINTER_STATE_state_id:PrinterState
PRINTER_STATE_state_string:0
PRINTER_STATE__event:0
PRINTER_STATE__timestamp:0
PROGRESS_progress:Progress
PROGRESS_location:0
PROGRESS_path:FileName
PROGRESS__timestamp:0

Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

romakrau

Zu dem Problem des Online Status habe ich ab Zeile 268  folgende Änderungen gemacht :


       readingsBeginUpdate($hash);

#Fehlerprüfung Octoprint erreichbar
if ($err ne "") {
readingsBulkUpdate($hash, "online", "false" ) ;
readingsBulkUpdate($hash, "error", $err ) ;
Log3 $name, 5, "OctoPrint $name [OctoPrint_ReceiveCommand] ERROR = $err";
}
else
{
readingsBulkUpdate($hash, "online", "true" ) ;
readingsBulkUpdate($hash, "error", $err ) ;
}

# Job Informationen
if ($dJSON eq "") {
Log3 $name, 5, "OctoPrint $name [OctoPrint_ReceiveCommand] [$service] JSON = NODATA";
}
elsif ($service eq "readings_job")


Vielleicht kann das jemand verifizieren. Es läuft zumindest bei mir. Bitte nicht vergessen in global "exclude_from_update" zu setzen.

Gruß
Roman

Nighthawk

Hallo,

wäre es möglich die Steuerung des Octoprintmodul WS281x LED Status in dieses Modul einzubauen?
https://cp2004.gitbook.io/ws281x-led-status/documentation/rest-api


ERI

Zitat von: Thyraz am 24 Februar 2022, 14:39:29Die Frage ist lange her, aber da es keine Reaktion auf die letzten Probleme gab, habe ich mich auch entschieden OctoPrint über MQTT2_Device anzubinden.

Hier mal eine erste Konfiguration, welche die Temperaturen, den PrinterStatus, den Druckfortschritt und den aktuellen Dateinamen in Readings verpackt.
.....



Danke dir   ich hatte etwas Unruhe und kann jetzt erst wieder mit dem Thema mich auseinandersetzen ----
und ich glaube, bei der Gelegenheit hast du noch ein Rätsel gelöst, dass ich nicht geknackt bekommen habe ... die JSon mappings..
 ;)  ;)