Nach Stromverbrauch schalten / Waittimer zurücksetzen

Begonnen von docb, 12 August 2018, 15:32:53

Vorheriges Thema - Nächstes Thema

docb

Grüß Euch, ich versuche gerade meinen 3D Drucker im Leerlauf auszuschalten. Dazu habe ich ein kleies Doif gebastelt:
([3D_Strom_Pwr:power] < 8 and [?3D_Strom_Sw] eq "on") (msg mail Schalte drucker ab)
Dazu ein do resetwait und ein wait 600, denn Ziel soll es sein, dass er wenn er 10 Minuten im Leerlauf ist (<8 Watt), dass er dann abgeschaltet wird. Aber eben keinesfalls, wenn der Verbrauch wieder hoch geht (weil ich eben einen neuen Druck angestoßen habe). Allerdings funktioniert das so nicht, er triggert zwar brav auf den Stromverbrauch, setzt das Doif aber nicht zurück, wenn der Stromverbrauch wieder höher geht. Soweit ich die Commandref verstanden habe, sollte das doch mit resetwait gehen?
Viele Grüße
doc
I love FHEM!

sash.sc

Dann versuche mal


Attr wait 600:20



Das besagt das dein leistungslevel für 600 Sekunden unter 8 Watt sein muss, dann wird der Drucker abgeschaltet.
Wenn der Drucker über 8 Watt ist, und das für 20 Sekunden in diesen Fall, dann bleibt der Drucker an.

Gruß Sascha

Gesendet von meinem E6653 mit Tapatalk

Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

docb

Hm, das scheint nicht zu  klappen - das gleiche wie vorher, er schickt die Nachricht los, obwohl der Drucker schon wieder druckt - im Ernstfall hätte er einfach den Druck abgebrochen ;-)
Ich glaube ich mache es einfach klassisch wie früher... mit einem notify ein at +00:05:00 anlegen und dann mit if fragen, ob der Verbrauch immer noch so niedrig ist... aber das müsste Doif doch auch können also ohne ein at zu definieren?!
I love FHEM!

Damian

Zitat von: docb am 12 August 2018, 18:43:16
Hm, das scheint nicht zu  klappen - das gleiche wie vorher, er schickt die Nachricht los, obwohl der Drucker schon wieder druckt - im Ernstfall hätte er einfach den Druck abgebrochen ;-)
Ich glaube ich mache es einfach klassisch wie früher... mit einem notify ein at +00:05:00 anlegen und dann mit if fragen, ob der Verbrauch immer noch so niedrig ist... aber das müsste Doif doch auch können also ohne ein at zu definieren?!

Poste mal Ausgabe von list deines DOIFs.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

docb

Guten Morgen,
das hier wäre der List - der Drucker läuft gerade ;-)

Internals:
   DEF        ([3D_Strom_Pwr:power] < 8 and [?3D_Strom_Sw] eq "on") (msg mail Schalte drucker ab)
   MODEL      FHEM
   NAME       do3D_Ruhe_aus
   NR         1236
   NTFY_ORDER 50-do3D_Ruhe_aus
   STATE      cmd_1
   TYPE       DOIF
   READINGS:
     2018-08-13 08:21:59   Device          3D_Strom_Pwr
     2018-08-12 21:12:06   cmd             1
     2018-08-12 21:12:06   cmd_event       3D_Strom_Pwr
     2018-08-12 21:12:06   cmd_nr          1
     2018-08-13 08:21:59   e_3D_Strom_Pwr_power 149.32
     2018-08-12 13:26:12   mode            enabled
     2018-08-12 21:12:06   state           cmd_1
     2018-08-12 21:12:04   wait_timer      no timer
   Regex:
   attr:
     cmdState:
     wait:
       0:
         300
       1:
         20
     waitdel:
   condition:
     0          ReadingValDoIf($hash,'3D_Strom_Pwr','power') < 8 and InternalDoIf($hash,'3D_Strom_Sw','STATE') eq "on"
   devices:
     0           3D_Strom_Pwr
     all         3D_Strom_Pwr
   do:
     0:
       0          msg mail Schalte drucker ab
     1:
   helper:
     event      boot: off,current: 1092,eState: E: 275.2 P: 149.32 I: 1092 U: 228.2 f: 49.99,energy: 275.2,energyCalc: 7892.5,frequency: 49.99,power: 149.32,275.2,voltage: 228.2,zaehler: 7882.10000000034
     globalinit 1
     last_timer 0
     sleepdevice 3D_Strom_Pwr
     sleepsubtimer -1
     sleeptimer -1
     timerdev   3D_Strom_Pwr
     timerevent boot: off,current: 69,eState: E: 270.9 P: 7.26 I: 69 U: 230.3 f: 49.99,energy: 270.9,energyCalc: 7888.2,frequency: 49.99,power: 7.26,270.9,voltage: 230.3,zaehler: 7877.80000000034
     triggerDev 3D_Strom_Pwr
     DOIF_eventas:
       cmd_nr: 1
       cmd: 1
       cmd_event: 3D_Strom_Pwr
       state: cmd_1
     timerevents:
       boot: off
       current: 69
       eState: E: 270.9 P: 7.26 I: 69 U: 230.3 f: 49.99
       energy: 270.9
       energyCalc: 7888.2
       frequency: 49.99
       power: 7.26
       270.9
       voltage: 230.3
       zaehler: 7877.80000000034
     timereventsState:
       boot: off
       current: 69
       eState: E: 270.9 P: 7.26 I: 69 U: 230.3 f: 49.99
       energy: 270.9
       energyCalc: 7888.2
       frequency: 49.99
       power: 7.26
       state: 270.9
       voltage: 230.3
       zaehler: 7877.80000000034
     triggerEvents:
       boot: off
       current: 1092
       eState: E: 275.2 P: 149.32 I: 1092 U: 228.2 f: 49.99
       energy: 275.2
       energyCalc: 7892.5
       frequency: 49.99
       power: 149.32
       275.2
       voltage: 228.2
       zaehler: 7882.10000000034
     triggerEventsState:
       boot: off
       current: 1092
       eState: E: 275.2 P: 149.32 I: 1092 U: 228.2 f: 49.99
       energy: 275.2
       energyCalc: 7892.5
       frequency: 49.99
       power: 149.32
       state: 275.2
       voltage: 228.2
       zaehler: 7882.10000000034
   internals:
     0           3D_Strom_Sw:STATE
     all         3D_Strom_Sw:STATE
   itimer:
   readings:
     0           3D_Strom_Pwr:power
     all         3D_Strom_Pwr:power
   trigger:
   uiState:
   uiTable:
Attributes:
   do         resetwait
   wait       300:20
I love FHEM!

Otto123

Moin,

bist Du sicher das in 3D_Strom_Sw im STATE wirklich "on" steht?

Vielleicht musst Du 3D_Strom_Sw:state nehmen?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

amenomade

Mit nur "wait 600" und kein "do resetwait" sollte es gehen.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

ZitatAllerdings funktioniert das so nicht, er triggert zwar brav auf den Stromverbrauch, setzt das Doif aber nicht zurück, wenn der Stromverbrauch wieder höher geht. Soweit ich die Commandref verstanden habe, sollte das doch mit resetwait gehen?

Da hast Du die Commandref falsch verstanden. Wenn der Stromverbrauch wieder höher geht, ändert sich der Zustand deines DOIFs auf cmd_2. Dein resetwait führt nur dazu, dass bei jedem neuen Event pwr, wo pwr < 8, er wiederum von 0 zählt.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

gloob

So überwache ich meine Waschmaschine und meinen Drucker.

defmod Waschmaschine_Fertig DOIF ([HM_325D5B_Pwr:power] > 5 and [?Waschmaschine_Fertig] =~ "cmd_4|initialized")(set teleBot message "Waschmaschine ist an.")\
DOELSEIF ([HM_325D5B_Pwr:power] > 20 and [?Waschmaschine_Fertig] eq "cmd_1")(set teleBot message "Waschmaschine läuft.")\
DOELSEIF ([HM_325D5B_Pwr:power] > 20 and [?Waschmaschine_Fertig] eq "cmd_2")(set teleBot message "Waschmaschine ist fertig.")\
DOELSEIF ([HM_325D5B_Pwr:power] < 5 and [?Waschmaschine_Fertig] =~ "cmd_3|cmd_1")(set teleBot message "Waschmaschine ist aus.",set HM_325D5B_Sw off)
attr Waschmaschine_Fertig do resetwait
attr Waschmaschine_Fertig room Bad
attr Waschmaschine_Fertig wait 0:0:300:0


Über den Wait befehl kannst du die Wartezeiten einstellen, wann in einen neuen Status gewechselt wird. Bei mir muss der Verbrauchswert für 6 Minuten unter 20 Watt liegen, damit abgeschaltet wird bzw ich eine Message bekomme.
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

Per

Zäum das Pferd andersrum auf:

([3D_Strom_Pwr:power] < 8) (msg mail Schalte drucker ab)DOELSE
+ wait 600:0

Mit Resetwait startet du den Timer ja jedesmal neu, das willst du doch gar nicht.

Damian

Zitat von: gloob am 13 August 2018, 11:53:37
So überwache ich meine Waschmaschine und meinen Drucker.

defmod Waschmaschine_Fertig DOIF ([HM_325D5B_Pwr:power] > 5 and [?Waschmaschine_Fertig] =~ "cmd_4|initialized")(set teleBot message "Waschmaschine ist an.")\
DOELSEIF ([HM_325D5B_Pwr:power] > 20 and [?Waschmaschine_Fertig] eq "cmd_1")(set teleBot message "Waschmaschine läuft.")\
DOELSEIF ([HM_325D5B_Pwr:power] > 20 and [?Waschmaschine_Fertig] eq "cmd_2")(set teleBot message "Waschmaschine ist fertig.")\
DOELSEIF ([HM_325D5B_Pwr:power] < 5 and [?Waschmaschine_Fertig] =~ "cmd_3|cmd_1")(set teleBot message "Waschmaschine ist aus.",set HM_325D5B_Sw off)
attr Waschmaschine_Fertig do resetwait
attr Waschmaschine_Fertig room Bad
attr Waschmaschine_Fertig wait 0:0:300:0


Über den Wait befehl kannst du die Wartezeiten einstellen, wann in einen neuen Status gewechselt wird. Bei mir muss der Verbrauchswert für 6 Minuten unter 20 Watt liegen, damit abgeschaltet wird bzw ich eine Message bekomme.
Was soll resetwait hier bewirken? Es funktioniert mit resetwait hier nur deswegen, weil das Sendeintervall von HM_325D5B_Pwr über 6 Minuten liegt, ansonsten würde der Timer nie zum tragen kommen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

gloob

Keine Ahnung. hatte das ganze mal so hier im Forum gefunden und es funktioniert.
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

Damian

Zitat von: gloob am 13 August 2018, 14:48:07
Keine Ahnung. hatte das ganze mal so hier im Forum gefunden und es funktioniert.
ja, es wäre allerdings logischer do always zu verwenden (Wiederholungen werden durch Zustandsabfragen in der Definition mit cmd... unterbunden) damit es auch dann funktioniert, wenn die Wartezeit länger ist als das Sendeintervall vom Device.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

docb

 :D Vielen Dank für die ganzen Antworten.
@Otto: Danke, sowohl state als auch STATE sind on, das habe ich geprüft
@per und amenomade: ich versuche jetzt Eure Variante. Rein logisch (ich versuche immer gerne zu verstehen, was ich so treibe) läuft dann folgendes ab: Wert unter 8 Watter -> triggert (und prüft noch ob der Drucker an ist) dann geht der Waittimer los. Wenn die Werte unter 8 Watt bleiben -> Drucker aus. Wenn nicht, springt Doif ins cmd2 (was es ja nicht gibt -> also passiert nix). Wenn wieder unter 8 Watt beginnt der Kreislauf von Neuem. Habe ich das richtig gecheckt?
Viele Grüße
doc
I love FHEM!

amenomade

Zitat von: docb am 13 August 2018, 20:25:00
:D Vielen Dank für die ganzen Antworten.
@Otto: Danke, sowohl state als auch STATE sind on, das habe ich geprüft
@per und amenomade: ich versuche jetzt Eure Variante. Rein logisch (ich versuche immer gerne zu verstehen, was ich so treibe) läuft dann folgendes ab: Wert unter 8 Watter -> triggert (und prüft noch ob der Drucker an ist) dann geht der Waittimer los. Wenn die Werte unter 8 Watt bleiben -> Drucker aus. Wenn nicht, springt Doif ins cmd2 (was es ja nicht gibt -> also passiert nix). Wenn wieder unter 8 Watt beginnt der Kreislauf von Neuem. Habe ich das richtig gecheckt?
Viele Grüße
doc
Richtig. cmd2 gibt es aber implizit. Das ist der Zustand wenn pwr über 8 ist. Das DOELSE ist implizit (Per hat es geschrieben, ist aber nicht nötig) und das Kommando ist leer => macht nichts.

DOIF (Bedingung1) (Kommando1)
ist gleich wie
DOIF (Bedingung1) (Kommando1) DOELSE (mach nix)
so lange "do always" o.ä. nicht benutzt wird.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus