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
Du musst die Ausgabe von list Drucker_Aus (Eingabe in der Kommandozeile) posten, damit man irgendeine konkrete Aussage treffen kann.
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 ;)
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
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.
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)) }
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.
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.
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.