Fhem soll 3D Drucker nach druck ausschalten DOIF

Begonnen von Henky, 20 November 2019, 18:30:56

Vorheriges Thema - Nächstes Thema

Henky

Guten abend zusammen,

da mein erster Beitrag direkt eine Frage ist wollte ich mich erstmal vorstellen. Ich habe letzten winter mit Fhem angefangen. Ich schalte viel mit den günstigen Sonoff schaltern, Alexa habe ich über die Ha Bridge eingebunden das ganze läuft auch so wie es soll.

Nun würde ich gerne meinen 3D Drucker der mit Octoprint läuft nach dem druck mit einer Latenz ausschalten und ein reading vom im Fhem integrierten Octoprint überschreiben.Da wenn das reading auf 100% stehen bleibt würde der Drucker beim nächsten start ja wieder ausgeschaltet werden.

#DOIF Drucker_Aus
define Drucker_Aus DOIF ([WO_3DDrucker:progress_completion] > 100) (set WO_Drucker=on off)
attr Drucker_Aus wait 120
attr Drucker_Aus do always
attr Drucker_Aus group Schalten
attr Drucker_Aus room Schalten
set reading WO_3DDrucker progress_completion 0


Ich habe es leider nach etlichen stunden nicht hinbekommen und würde mich sehr über Hilfe freuen.

LG Marc

Damian

Du musst die Ausgabe von list Drucker_Aus (Eingabe in der  Kommandozeile) posten, damit man irgendeine konkrete Aussage treffen kann.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

amenomade

Zitat von: Damian am 20 November 2019, 20:36:37
Du musst die Ausgabe von list Drucker_Aus (Eingabe in der  Kommandozeile) posten, damit man irgendeine konkrete Aussage treffen kann.
Zustimmung.

Aber rein vom Lesen aus:
- Kann WO_3DDrucker:progress_completion wirklich grösser als 100 werden? Etwas 101% fertig?
- setreading schreibt man ohne Leerzeichen, und kann nicht so in der Luft hängen
- was soll "set WO_Drucker=on off" bewirken?

Na gut. Ein "list" möchte ich auch gerne sehen ;)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Henky

Danke für die Antworten, ich habe wie gesagt noch nicht viel mit DOIF gemacht, damals alles nach Tutorial gemacht.

Internals:
   DEF        ([WO_3DDrucker:progress_completion] > 100) (set WO_Drucker=on off)
   MODEL      FHEM
   NAME       Drucker_Aus
   NR         107
   NTFY_ORDER 50-Drucker_Aus
   STATE      ???
   TYPE       DOIF
   READINGS:
     2019-11-20 21:13:31   Device          WO_3DDrucker
   Regex:
   attr:
     wait:
       0:
         120
   condition:
     0          ::ReadingValDoIf($hash,'WO_3DDrucker','progress_completion') > 100
   devices:
     0           WO_3DDrucker
     all         WO_3DDrucker
   do:
     0:
       0          set WO_Drucker=on off
   helper:
     event      online: false,progress_completion_percent: 0
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev WO_3DDrucker
     triggerEvents:
       online: false
       progress_completion_percent: 0
     triggerEventsState:
       online: false
       progress_completion_percent: 0
   internals:
   itimer:
   perlblock:
   readings:
     0           WO_3DDrucker:progress_completion
     all         WO_3DDrucker:progress_completion
   trigger:
Attributes:
   do         always
   group      Schalten
   room       Schalten
   wait       120

Damian

Du hast das DOIF vor paar Minuten erst neu definiert - bisher sind keine Ereignisse angekommen, ohne Ereignis keine Aktion.

Als nächstes postest du bitte list WO_3DDrucker

Dein Drucker muss Ereignisse produzieren (siehe Event Monitor), sonst wird dein DOIF nichts machen.


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Henky

Das "progress_completion" hab ich schon von hand auf 0 gesetzt beim testen, und hier mal die list vom Octoprint list.


Internals:
   DEF        192.168.0.129 5000
   INTERVAL   45
   NAME       WO_3DDrucker
   NR         30
   STATE      Operational
   TYPE       OctoPrint
   READINGS:
     2019-01-15 10:02:32   job_averagePrintTime 18544.7279410362
     2019-01-15 10:02:32   job_estimatedPrintTime 13657.447282846
     2019-01-15 10:02:32   job_filament_tool0_length 19608.7719000028
     2019-01-15 10:02:32   job_filament_tool0_volume 0
     2019-01-15 12:39:24   job_file_date   1547542967
     2019-01-15 12:39:24   job_file_display wingL_2.gcode
     2019-01-15 12:39:24   job_file_name   wingL_2.gcode
     2019-01-15 12:39:24   job_file_origin local
     2019-01-15 12:39:24   job_file_path   wingL_2.gcode
     2019-01-15 12:39:24   job_file_size   5882990
     2019-01-15 10:02:32   job_lastPrintTime 18544.7279410362
     2019-01-15 12:39:24   job_user        Henky
     2019-11-20 21:55:31   online          false
     2019-11-20 19:11:14   progress_completion 0
     2019-11-20 21:55:31   progress_completion_percent 0
     2019-01-15 12:39:24   progress_filepos 3185764
     2019-01-15 12:39:24   progress_printTime 9212
     2019-01-15 12:39:24   progress_printTimeLeft 7803
     2019-01-15 12:39:24   progress_printTimeLeftOrigin estimate
     2019-01-15 13:36:26   state           Operational
     2019-01-15 13:36:26   temperature_bed_actual 20.56
     2019-01-15 13:36:26   temperature_bed_offset 0
     2019-01-15 13:36:26   temperature_bed_target 0
     2019-01-15 13:36:26   temperature_tool0_actual 20.14
     2019-01-15 13:36:26   temperature_tool0_offset 0
     2019-01-15 13:36:26   temperature_tool0_target 0
   helper:
     ADDRESS    192.168.0.129
     PORT       5000
     RUNNING_REQUEST 0
     CMD_QUEUE:
Attributes:
   apikey     1723CA835EB347768EED05565B269720
   icon       it_printer
   room       Wohnzimmer
   userReadings progress_completion_percent { sprintf("%d", ReadingsNum($NAME, "progress_completion", 0)) }

Damian

Jetzt muss nur noch das Reading progress_completion auf über 100 steigen (und dabei Events erzeugen), dann kannst du mit einer Aktion seitens deines DOIFs rechnen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Henky

Auf über 100% vom Druck geht ja nicht sollte ich dann auf 99% gehen und die Zeit erhöhen wäre ja blöd wenn der Drucker aus wäre wenn der Druck noch nicht fertig ist. Es ist ja egal ob der Drucker 5 oder 10 min länger läuft nur ebend nicht mehr die ganze Nacht.

Damian

Zitat von: Henky am 20 November 2019, 22:13:29
Auf über 100% vom Druck geht ja nicht sollte ich dann auf 99% gehen und die Zeit erhöhen wäre ja blöd wenn der Drucker aus wäre wenn der Druck noch nicht fertig ist. Es ist ja egal ob der Drucker 5 oder 10 min länger läuft nur ebend nicht mehr die ganze Nacht.

Ja, die Frage hast du dir also selbst beantwortet ;)

Wenn das Reading nicht > 100 werden kann, wie soll denn deiner Meinung nach die Bedingung wahr werden? Du kannst natürlich auch auf Gleichheit prüfen  == 100, wenn dieser Zustand immer eintritt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF