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

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

Vorheriges Thema - Nächstes Thema

raiderxxl

Hi,
ich komm leider nicht weiter... kann mir jemand helfen?

Ich habe ein Userreading das mir die Restzeit in Stunden und Minuten anzeigt.. funktioniert!

progress_printTimeLeftHMS {strftime('%H:%M:%S', gmtime(ReadingsNum($NAME, "progress_printTimeLeft", 0)))},



Jetzt hätte ich gerne diese Zeitangabe der Aktuellen Uhrzeit hinzugefügt damit ich sowas wie eine ETA bekomme...
Theoretisch könnte man auch die Sekunden des readings "progress_printTimeLeft" der Zeit hinzufügen...

Hat mir jemand nen Tip oder hat sowas bereits eingebaut?

Grüßle

Pascal
FHEM VM Ubuntu-Server auf Intel® NUC-Kit NUC6i5SYH ESXi 6.5
FHEM auf Raspberry2 OSMC Hyperion und TTS

Homematic,TradfriHub und Lampen,WIFILight,Fritzbox,FritzDECT,NanoCul433,IT Steckdosen,Diverse Nachbar-Sensoren,XiaomiZigbee,
ESP_Signalduino,ESPEasy,Amad,HarmonyHub,WLED,MQTT,Tasmota....

Christoph Morrison

Zitat von: raiderxxl am 07 Mai 2021, 14:37:46
Hat mir jemand nen Tip oder hat sowas bereits eingebaut?

Ich hab mir sowas gebaut. In meiner MyUtils:

sub remaining_time {
    my $name = shift // return q{[remaining_time] No device name given!};
    my $now = time;
    my $remaining_time = ::ReadingsVal($name, q{progress_printTimeLeft}, 0);
    return $now + $remaining_time;
}


Wird im Device in ein userReading geschrieben mit:

job_endtime:progress_printTimeLeft.* {
    remaining_time($name);
},


Und im stateFormat dann passend ausgegeben (auch eine Subroutine in MyUtils):

sub format_state {
    my $name  = shift // return q{[format_state] No device name given!};
    my $state = lc ::ReadingsVal($name, q{state}, q{});

    return q{Kein aktiver Druckvorgang} if ($state ne q{printing});

    return sprintf
        q{Drucke Objekt <strong>%s</strong>, abgeschlossen am <strong>%s</strong>, %s verbleibend},
        ::ReadingsVal($name, q{job_name}, q{mit unbekanntem Dateinamen}),
        POSIX::strftime(q{%A, den %d.%m.%Y, um %X}, localtime ::ReadingsVal($name, q{job_endtime}, 0)),
        ::ReadingsVal($name, q{job_time_left_hr}, q{keine Restlaufzeit kalkuliert})
    if ($state eq q{printing});
}


Relevant ist die Zeile mit job_endtime.

Lallysoft

Zitat von: Lallysoft am 03 Mai 2021, 19:26:53
Warum das im Modul nicht geht, ist weiterhin rätselhaft...

Kurzes Feedback: Mein Rätsel hat sich geklärt. Das Verhalten hing offenbar mit einem Thread zusammen, den ich in meiner myUtils erzeuge. Aus dem Thread heraus habe ich einen Lese-Zugriff auf ein $defs Reading ausgeführt. Die Codestrecke gibt es zwar schon seit vielen Jahren bei mir und die hat noch nie Probleme gemacht, aber eben jetzt im Zusammenhang mit dem JSON Modul. Ich habe jetzt den Zugriff eliminiert und keine Probleme mehr.

Ralf

JWRu

Habe gerade versucht, meinen neuen 3D-Drucker über das Modul in FHEM zu integrieren.
Bei der Definition des Device erhalte ich die Meldung: "Please install Perl XML::Simple to use module OctoPrint".
Ich wollte mich vor der Installation über das Modul informieren und finde in der Dokumentation folgendes
The use of this module in new code is strongly discouraged. Other modules are available which provide more straightforward and consistent interfaces. In particular, XML::LibXML is highly recommended and you can refer to Perl XML::LibXML by Example for a tutorial introduction.
Ich zögere deshalb, das Modul zu installieren. Funktioniert OctoPrint auch mit dem genannten XML::LibXML?
ZBox; RasPi 3B; RasPi Zero W; Homematic; Z-Wave; EnOcean, Shelly; DuoFern; Oregon-Sensoren; TFA-Sensoren; Steuerung Viessmann-Heizung; Arduinos für Strom-, Wasser-, Gaszähler, Rauchmelder und FI-Schutzschalter

michael.winkler

Zitat von: JWRu am 09 Mai 2021, 10:26:54
Habe gerade versucht, meinen neuen 3D-Drucker über das Modul in FHEM zu integrieren.
Bei der Definition des Device erhalte ich die Meldung: "Please install Perl XML::Simple to use module OctoPrint".
Ich wollte mich vor der Installation über das Modul informieren und finde in der Dokumentation folgendes
The use of this module in new code is strongly discouraged. Other modules are available which provide more straightforward and consistent interfaces. In particular, XML::LibXML is highly recommended and you can refer to Perl XML::LibXML by Example for a tutorial introduction.
Ich zögere deshalb, das Modul zu installieren. Funktioniert OctoPrint auch mit dem genannten XML::LibXML?
Doku findest du hier: https://mwinkler.jimdo.com/smarthome/eigene-module/octoprint/

JWRu

ZitatDoku findest du hier: https://mwinkler.jimdo.com/smarthome/eigene-module/octoprint/
Das habe ich zu allererst gelesen.
Ich finde darin aber nichts darüber, dass ich vor der Nutzung von OctoPrint ein Perl-Modul installieren muss.
ZBox; RasPi 3B; RasPi Zero W; Homematic; Z-Wave; EnOcean, Shelly; DuoFern; Oregon-Sensoren; TFA-Sensoren; Steuerung Viessmann-Heizung; Arduinos für Strom-, Wasser-, Gaszähler, Rauchmelder und FI-Schutzschalter

michael.winkler

Zitat von: JWRu am 10 Mai 2021, 13:29:02
Das habe ich zu allererst gelesen.
Ich finde darin aber nichts darüber, dass ich vor der Nutzung von OctoPrint ein Perl-Modul installieren muss.
Das Perl  XML::Simple wird vom Modul benötigt. Das musst du einfach nachinstallieren, dann kannst du das Modul ganz normal benutzen. Die Installation der Perl Modules hängt von Deinem eingesetzten Betriebssystem ab. Einfach mal Google fragen.

JWRu

Danke.
Die Antwort auf meine Frage ist also, dass es mit Perl XML::LibXML nicht funktioniert.
ZBox; RasPi 3B; RasPi Zero W; Homematic; Z-Wave; EnOcean, Shelly; DuoFern; Oregon-Sensoren; TFA-Sensoren; Steuerung Viessmann-Heizung; Arduinos für Strom-, Wasser-, Gaszähler, Rauchmelder und FI-Schutzschalter

raiderxxl

Zitat von: raiderxxl am 07 Mai 2021, 14:37:46
Hi,
ich komm leider nicht weiter... kann mir jemand helfen?

Ich habe ein Userreading das mir die Restzeit in Stunden und Minuten anzeigt.. funktioniert!

progress_printTimeLeftHMS {strftime('%H:%M:%S', gmtime(ReadingsNum($NAME, "progress_printTimeLeft", 0)))},



Jetzt hätte ich gerne diese Zeitangabe der Aktuellen Uhrzeit hinzugefügt damit ich sowas wie eine ETA bekomme...
Theoretisch könnte man auch die Sekunden des readings "progress_printTimeLeft" der Zeit hinzufügen...

Hat mir jemand nen Tip oder hat sowas bereits eingebaut?

Grüßle

Pascal

Lösung für alle anderen:

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

Grüßle

Pascal
FHEM VM Ubuntu-Server auf Intel® NUC-Kit NUC6i5SYH ESXi 6.5
FHEM auf Raspberry2 OSMC Hyperion und TTS

Homematic,TradfriHub und Lampen,WIFILight,Fritzbox,FritzDECT,NanoCul433,IT Steckdosen,Diverse Nachbar-Sensoren,XiaomiZigbee,
ESP_Signalduino,ESPEasy,Amad,HarmonyHub,WLED,MQTT,Tasmota....

Marlen

Hallo,

sehr schönes Modul.
Gibt es eine Möglichkeit einen Druck über Fhem zu starten?

Also, ich möchte das ganze System zeitgesteuert starten (Drucker & Octopi) und dann einen Druck anstoßen?
Geht das irgendwie?

LG
  Marlen

Joker82

#190
Hallo,

ich habe das Modul installiert. Allerdings habe ich time out Probleme? Was habe ich falsch gemacht?

Hier ein Ausschnitt aus dem Log:

2021.09.05 21:44:45 5: OctoPrint Maskierung [OctoPrint_HD_HandleCmdQueue] - send command data =
2021.09.05 21:44:45 5: OctoPrint Maskierung [OctoPrint_HD_HandleCmdQueue] - send command head = Content-Type: application/json
2021.09.05 21:44:47 5: OctoPrint Maskierung [OctoPrint_ReceiveCommand] called function
2021.09.05 21:44:47 5: OctoPrint Maskierung [OctoPrint_ReceiveCommand] [readings_printer] Data =
2021.09.05 21:44:47 5: OctoPrint Maskierung [OctoPrint_ReceiveCommand] [readings_printer] JSON =
2021.09.05 21:44:47 5: OctoPrint Maskierung [OctoPrint_ReceiveCommand] [readings_printer] JSON = NODATA
2021.09.05 21:44:47 5: OctoPrint Maskierung [OctoPrint_ReceiveCommand] ERROR = connect to http://192.168.178.85:80 timed out


021.09.05 21:47:40 5: OctoPrint Maskierung [OctoPrint_HD_HandleCmdQueue] - send command data =
2021.09.05 21:47:40 5: OctoPrint Maskierung [OctoPrint_HD_HandleCmdQueue] - send command head = Content-Type: application/json
2021.09.05 21:47:42 5: OctoPrint Maskierung [OctoPrint_ReceiveCommand] called function
2021.09.05 21:47:42 5: OctoPrint Maskierung [OctoPrint_ReceiveCommand] [readings_printer] Data =
2021.09.05 21:47:42 5: OctoPrint Maskierung [OctoPrint_ReceiveCommand] [readings_printer] JSON =
2021.09.05 21:47:42 5: OctoPrint Maskierung [OctoPrint_ReceiveCommand] [readings_printer] JSON = NODATA
2021.09.05 21:47:42 5: OctoPrint Maskierung [OctoPrint_ReceiveCommand] ERROR = connect to http://192.168.178.85:80 timed out

Habe die neueste Octoprint Version, sowie die neueste Version vom Modul. Online Status steht auch als false. Ab und ab empfängt FHEM aber Daten. Verbunden ist Octoprint via WLAN...

mizu

Hallo

mir kommt die Adresse komisch vor.
Meine Octoprint Adresse ist XXX.XXX.XXX.XXX : 5000 60
X = IP Adresse,  5000 = OctoPrint Port,  60 = alle 60 Sek. refresch.

Gruß Mike

laberlaib

#192
Zitat von: Marlen am 25 August 2021, 11:42:20
Gibt es eine Möglichkeit einen Druck über Fhem zu starten?
https://www.mwinklerblog.de/smarthome/eigene-module/octoprint/
Zitatjob    

    cancel
    start

   Hier kann ein Druck der aktuell ausgewählten Datei gestartet, oder abgebrochen werden.

Allerdings müsstest Du das Laden der Datei wohl vorher direkt in OctoPrint machen (das Aktensymbol in der Liste ist mit "Laden" beschriftet).
Und dann halt per DOIF o.ä. Schaltsteckdose des Druckers anschalten, warten bis Octoprint da ist und drucken.
Probiert hab ichs nicht, würde sich aber zumindest so lesen.

Zitat von: Joker82 am 05 September 2021, 21:51:25
Hallo,

ich habe das Modul installiert. Allerdings habe ich time out Probleme? Was habe ich falsch gemacht?

Hier ein Ausschnitt aus dem Log:
[...]
Habe die neueste Octoprint Version, sowie die neueste Version vom Modul. Online Status steht auch als false. Ab und ab empfängt FHEM aber Daten. Verbunden ist Octoprint via WLAN...
Api-key und so alles eingetragen?

@michael.winkler:
Erstmal vielen Dank für das Modul - es ist ungemein praktisch sich via FHEM (Signal) über den Fortschritt unterrichten zu lassen und dann nach dem Druck alles automatisch abzuschalten - Fällt einem dann schon leichter, das DIng mal anzuschalten und kurz aus dem Haus zu gehen.
Ich hätte eine Featureanfrage: Kann man das Plugin GPIO-Control (https://plugins.octoprint.org/plugins/gpiocontrol/) irgendwie unterstützbar machen?
Hintergrund ist, dass mein drucker in einem dunkeln Raum steht und ich irgendwie Licht anschalten muss, um über die Kamera was zu sehen. Und dazu hab ich mir eine LED-Leiste an den Raspi gebastelt, die ich dann halt auch gerne direkt aus FHEM mitschalten würde z.B. vor dem Versenden von Fotos o.ä.

Edit:
Nach dem ich mir das Modul genauer angeschaut habe, denke ich, dass das Plugin ein API bereit stellen muss, was es nicht macht.
Allerdings gibt es andere GPIO-Kontrollen mit API, die werd ich mal angucken und dann mich nochmal melden.
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

Dracolein

Grüße zusammen,

Frage wegen folgenden Problems:
Das Modul läuft anfangs bei mir, wenn ein Druckprojekt läuft.
Aber nach einer Weile ändern sich die Readings

"error" --> "Printer is not operational"
"online" --> "false"

während andere Readings weiterhin im 45-Sek Takt aktualisiert werden. Alle Readings namens progress* oder oder temperature* werden weiterhin aktualisiert.

Zitat
Internals:
   CFGFN     
   DEF        192.168.178.158
   FUUID      6190d023-f33f-4dec-e83e-960a3d3ae1b5bb6f
   INTERVAL   45
   NAME       AnyCubicI3MegaS
   NR         7667
   STATE      Printing
   TYPE       OctoPrint
   READINGS:
     2021-11-14 13:54:13   error           Printer is not operational
     2021-11-14 12:49:52   job_averagePrintTime 10392.917468993
     2021-11-14 15:27:40   job_estimatedPrintTime 24766.5814502716
     2021-11-14 15:27:40   job_filament_tool0_length 34098.0580499921
     2021-11-14 15:27:40   job_filament_tool0_volume 0
     2021-11-14 15:27:40   job_file_date   1636893786
     2021-11-14 15:27:40   job_file_display Schleich_Torbogen.gcode
     2021-11-14 15:27:40   job_file_name   Schleich_Torbogen.gcode
     2021-11-14 15:27:40   job_file_origin local
     2021-11-14 15:27:40   job_file_path   Schleich_Torbogen.gcode
     2021-11-14 15:27:40   job_file_size   8515079
     2021-11-14 12:49:52   job_lastPrintTime 10392.917468993
     2021-11-14 15:27:40   job_user        d......o
     2021-11-14 15:26:55   online          false
     2021-11-14 15:27:40   progress_completion 18.4254661642012
     2021-11-14 15:27:40   progress_completion_percent 18
     2021-11-14 15:27:40   progress_filepos 1568943
     2021-11-14 15:27:40   progress_printTime 5329
     2021-11-14 15:27:40   progress_printTimeLeft 23856
     2021-11-14 15:27:40   progress_printTimeLeftOrigin linear
     2021-11-14 15:27:40   state           Printing
     2021-11-14 15:27:40   temperature_bed_actual 60.5
     2021-11-14 15:27:40   temperature_bed_offset 0
     2021-11-14 15:27:40   temperature_bed_target 60
     2021-11-14 15:27:40   temperature_tool0_actual 204.6
     2021-11-14 15:27:40   temperature_tool0_offset 0
     2021-11-14 15:27:40   temperature_tool0_target 205
   helper:
     ADDRESS    192.168.178.158
     PORT       80
     RUNNING_REQUEST 0
     CMD_QUEUE:
Attributes:
   apikey     658.............................94679B
   event-on-change-reading .*
   icon       it_printer
   room       3DDruck
   userReadings progress_completion_percent { sprintf("%d", ReadingsNum($NAME, "progress_completion", 0)) }
Raspberry Pi 4 mit FHEM; FTUI Dashboard auf Asus 15,6" VT168H Touchscreen; ZigBee mit ConBee2 USB-Stick; div. Shelly 2.5; integr. Gaszähler mit ESP8266 & ESPEasy;

Dracolein

Nochmal nachgefragt; bin ich der einzige mit der Problematik? Liegt das eventuell an meiner OctoPi / Octoprint Version ?(nutze es erst seit wenigen Tagen)
Bzgl. des sich nicht aktualisierenden Readings "online" habe ich zwischenzeitlich ältere Nachrichten in diesem Thread gesehen, konnte jedoch keinen Workaround finden.
Raspberry Pi 4 mit FHEM; FTUI Dashboard auf Asus 15,6" VT168H Touchscreen; ZigBee mit ConBee2 USB-Stick; div. Shelly 2.5; integr. Gaszähler mit ESP8266 & ESPEasy;