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

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

Vorheriges Thema - Nächstes Thema

Christoph Morrison

Zitat von: Keichi am 12 Juni 2020, 21:49:18
Und was genau is nun das Problem das noch über das Modul wählbar zu machen wie das ganze formatiert wird? Für mich wäre das ganze dann nur noch ein einzelner Befehl den ich im Modul über eine liste auswählen könnte. Funktioniert bei attribute doch auch prima.

Mach doch einfach einen Patch und schick ihn an Michael. Er freut sich sicher über deinen Input.

masterpete23

Guten Morgen,

nach einem Update auf die neueste Octoprint Version werden meine Drucker nur noch als offline angezeigt.
Hat jemand ähnliche Probleme und ggf. eine Lösung?

Icinger

Lösung: Statt dem Octoprint-Modul einfach MQTT nehmen :)
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

masterpete23

Zitat von: Icinger am 09 Dezember 2020, 17:42:44
Lösung: Statt dem Octoprint-Modul einfach MQTT nehmen :)
Klingt interessant - wo kann ich mich einlesen?

Icinger

Für Octoprint gibts ein MQTT-Plugin.
Da bekommst du dann tonnenweise Daten, die du dir dann mit dem MQTT2-Device rausfiltern kannst.
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

michael.winkler

Zitat von: masterpete23 am 09 Dezember 2020, 11:16:09
Guten Morgen,

nach einem Update auf die neueste Octoprint Version werden meine Drucker nur noch als offline angezeigt.
Hat jemand ähnliche Probleme und ggf. eine Lösung?
Was sagt denn das LOG dazu?

hanswerner1

Zitat von: masterpete23 am 09 Dezember 2020, 11:16:09
nach einem Update auf die neueste Octoprint Version werden meine Drucker nur noch als offline angezeigt.
Hat jemand ähnliche Probleme und ggf. eine Lösung?

Ich habe auch das Problem, denke es liegt daran, das man sich auf Octoprint jetzt nur noch über Nutzerkonto einloggen kann.


michael.winkler

Zitat von: hanswerner1 am 10 Dezember 2020, 10:38:56
Ich habe auch das Problem, denke es liegt daran, das man sich auf Octoprint jetzt nur noch über Nutzerkonto einloggen kann.
ok, dann muss ich mir das mal anschauen

masterpete23

Nach einiger Zeit hat er sich wieder berappelt. Es "meldet" sich wieder. Irgendwie etwas verzögert - aber es geht.

@Icinger: Gibt es dazu schon irgendwas mqtt2 fhem fertiges? Ich bin da noch nicht so fit und würde es mir gerne mal anschauen.

michael.winkler

Zitat von: masterpete23 am 09 Dezember 2020, 11:16:09
Guten Morgen,

nach einem Update auf die neueste Octoprint Version werden meine Drucker nur noch als offline angezeigt.
Hat jemand ähnliche Probleme und ggf. eine Lösung?
Habe jetzt mein Octoprint auf die Version 1.5.1 aktualisiert. Habe immer noch eine Verbindung über das Modul.

Kann es sein, dass sich Dein API Key geändert hat? Wie hast du das Update durchgeführt?

rcmcronny

FYI: Bei mir läuft es mit 1.5.1 auch mit dem alten APIKey weiterhin, keine Probleme

KernSani

Hi Michael,
Schönes Modul :-)
ich nutze das Octoprint-Plugin USBControl, um die Stromversorgung (über den USB) zu meinem Ender zu unterbrechen, bzw. wieder zu aktivieren. Das Plugin ist über API steuerbar, daher habe ich mir eine kleine myUtils-Routine dafür gebastelt. Vielleicht nutzt ja der ein oder andere auch das Plugin, daher packe ich die myUtils mal hier rein (und vielleicht magst du es ja - über Attribut einschaltbar) in das Octoprint Modul integrieren...
Schön fände ich auch noch eine "Preheat" Funktion (habe ich über set gcode realisiert, aber könnte man ja vielleicht auch über das Modul bereitstellen).



sub myUtils_usbcontrol {
my $state = shift;

my $header = {
        "Content-Type"     => "application/json",
        "X-Api-Key" => "<APIKEY>"
    };

my $data = qq({"command": "usb2","arg2": "$state"});
my $param = {
        header      => $header,
        method      => "POST",
        url         => "http://octopi.lan/api/plugin/usbcontrol",
        callback => \&myUtils_usbcontrolCb,
        data     => $data
    };
    HttpUtils_NonblockingGet($param);
    return;
}

sub myUtils_usbcontrolCb {
return; ## API doesn't return any values so far
}



Grüße,

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Lallysoft

Hallo Michael,

ich möchte gern dein sehr hilfreiches Modul einsetzen. Die reinkommenden JSON Daten werden aber laut verbose=5 Log nicht verstanden.
Ich arbeite mit

  • deinem Modul V 0.0.11
  • OctoPrint V 1.5.3
  • libjson-perl V 2.90-1

Hier das Log:

2021.05.01 08:31:04 5: OctoPrint Ender3 [OctoPrint_GetStatus] called function
2021.05.01 08:31:04 5: OctoPrint Ender3 [OctoPrint_SendCommand] called function CMD = 
2021.05.01 08:31:04 5: OctoPrint Ender3 [OctoPrint_SendCommand] using unencrypted connection via HTTP
2021.05.01 08:31:04 5: OctoPrint Ender3 [OctoPrint_HD_SendCommand] - append to queue http://192.168.100.122:80/api/job?&apikey=XXX
2021.05.01 08:31:04 5: OctoPrint Ender3 [OctoPrint_HD_HandleCmdQueue] - send command url  = http://192.168.100.122:80/api/job?&apikey=XXX
2021.05.01 08:31:04 5: OctoPrint Ender3 [OctoPrint_HD_HandleCmdQueue] - send command data =
2021.05.01 08:31:04 5: OctoPrint Ender3 [OctoPrint_HD_HandleCmdQueue] - send command head = Content-Type: application/json
2021.05.01 08:31:04 5: OctoPrint Ender3 [OctoPrint_SendCommand] called function CMD = 
2021.05.01 08:31:04 5: OctoPrint Ender3 [OctoPrint_SendCommand] using unencrypted connection via HTTP
2021.05.01 08:31:04 5: OctoPrint Ender3 [OctoPrint_HD_SendCommand] - append to queue http://192.168.100.122:80/api/printer?exclude=state,sd&apikey=XXX
2021.05.01 08:31:04 5: OctoPrint Ender3 [OctoPrint_ReceiveCommand] called function
2021.05.01 08:31:04 5: OctoPrint Ender3 [OctoPrint_ReceiveCommand] [readings_job] Data = {"job":{"averagePrintTime":null,"estimatedPrintTime":49750.06166679456,"filament":{"tool0":{"length":51249.402740002086,"volume":0.0}},"file":{"date":1619801450,"display":"halter_blaue_tonne.gcode","name":"halter_blaue_tonne.gcode","origin":"local","path":"halter_blaue_tonne.gcode","size":23113827},"lastPrintTime":null,"user":"admin"},"progress":{"completion":0.5481524111087273,"filepos":126699,"printTime":1285,"printTimeLeft":48784,"printTimeLeftOrigin":"analysis"},"state":"Printing"}

2021.05.01 08:31:04 5: OctoPrint Ender3 [OctoPrint_ReceiveCommand] [readings_job] JSON =
2021.05.01 08:31:04 5: OctoPrint Ender3 [OctoPrint_ReceiveCommand] [readings_job] JSON = NODATA
2021.05.01 08:31:04 5: OctoPrint Ender3 [OctoPrint_HD_HandleCmdQueue] - send command url  = http://192.168.100.122:80/api/printer?exclude=state,sd&apikey=XXX
2021.05.01 08:31:04 5: OctoPrint Ender3 [OctoPrint_HD_HandleCmdQueue] - send command data =
2021.05.01 08:31:04 5: OctoPrint Ender3 [OctoPrint_HD_HandleCmdQueue] - send command head = Content-Type: application/json
2021.05.01 08:31:04 5: OctoPrint Ender3 [OctoPrint_ReceiveCommand] called function
2021.05.01 08:31:04 5: OctoPrint Ender3 [OctoPrint_ReceiveCommand] [readings_printer] Data = {"temperature":{"bed":{"actual":70.0,"offset":0,"target":70.0},"tool0":{"actual":210.0,"offset":0,"target":210.0}}}

2021.05.01 08:31:04 5: OctoPrint Ender3 [OctoPrint_ReceiveCommand] [readings_printer] JSON =
2021.05.01 08:31:04 5: OctoPrint Ender3 [OctoPrint_ReceiveCommand] [readings_printer] JSON = NODATA


Und hier meine Device Internals

Internals:
   DEF        192.168.100.122 80
   FUUID      608ce592-f33f-5864-17d7-ef6d89c822efd5f2
   INTERVAL   45
   NAME       Ender3
   NR         402
   STATE      ???
   TYPE       OctoPrint
   READINGS:
     2021-05-01 08:54:01   online          true
   helper:
     ADDRESS    192.168.100.122
     PORT       80
     RUNNING_REQUEST 0
     CMD_QUEUE:
Attributes:
   apikey     XXX
   icon       it_printer
   room       HAR


Kannst du mit einen Tipp geben, woran es liegen könnte?

michael.winkler

kann keinen Fehler erkennen. Könntest Du das Octoprint mal auf die 1.6er Version aktualisieren?

Lallysoft

Hallo Michael,

danke für deine Hilfe! Die Aktualisierung von Octoprint habe ich gleich ausprobiert, hat jedoch leider nichts geändert.
Ich habe dann mal im Modul-Quelltext nachgeschaut und vermutet, dass der Aufruf

my $dJSON = eval { JSON->new->utf8(0)->decode($data) };

wohl keine Daten zurück liefert, obwohl $data ja Daten enthält, wie das Log zeigt. Das JSON Modul muss allerdings
ja auch da sein, weil das zuvor im Code geprüft wird.

Ich habe ein kleines Perl Testprogramm auf dem FHEM-Rechner geschrieben und das Kommando geprüft. Da funktioniert
es und es kommt bei $dJSON etwas wie "HASH(0x2a4448)" zurück:


#!/usr/bin/perl -w
if  (eval {require JSON;1;} ne 1) {print "No JSON";};
my $indata = '{"temperature":{"bed":{"actual":60.0,"offset":0,"target":60.0},"tool0":{"actual":206.25,"offset":0,"target":205.0}}}';
my $outdata = eval{JSON->new->utf8(0)->decode($indata)};
print "$indata\n";
print "$outdata\n";


Warum das im Modul nicht geht, ist weiterhin rätselhaft...

Viele Grüße,
Ralf