Servus!
Immer wenn man denkt, man hat's endlich kapiert :'(
Ich habe meinen Backofen an einer schaltbaren Steckdose, die den Stromverbrauch mitliest. Ich möchte eine Nachricht bekommen, wenn der Backofen vorgeheitzt ist. Zusatzproblem: beim Einschalten gibt der Backofen nicht gleich "vollgas", sondern braucht erst mal in kurzen Intervallen Strom, bis er dann durchheitzt. Das dauert ein paar Sekunden.
Mein Ansatz war: Wenn der Ofen 8 Minuten durchgehend >1kW braucht ist er sicher beim Vorheizen
Wenn der Ofen 30 Sekunden <100W braucht und er gerade beim Vorheizen ist, ist er mit dem Vorheizen fertig. Jetzt könnte ich eine Nachricht schicken.
Ansonsten ist mir der Zustand egal.
So wollte ich das lösen:
defmod Kueche.Backofen.Nachricht DOIF ([Kueche.Backofen:power:d]>1000)\
(set $SELF:Status vorheizen)\
DOELSEIF (["$SELF:Status: vorheizen"] and [Kueche.Backofen:power:d]<100)\
(set $SELF:Status fertig) \
DOELSE (set $SELF:Status nix)
attr Kueche.Backofen.Nachricht alias Küche: Backofennachricht
attr Kueche.Backofen.Nachricht readingList Status
attr Kueche.Backofen.Nachricht room Küche
attr Kueche.Backofen.Nachricht setList Status:vorheizen,fertig,nix
attr Kueche.Backofen.Nachricht verbose 5
attr Kueche.Backofen.Nachricht waitsame 480,60,0
setstate Kueche.Backofen.Nachricht cmd_3
setstate Kueche.Backofen.Nachricht 2019-09-06 21:50:17 Device Kueche.Backofen
setstate Kueche.Backofen.Nachricht 2019-09-06 21:50:17 cmd 3
setstate Kueche.Backofen.Nachricht 2019-09-06 21:50:17 cmd_event Kueche.Backofen
setstate Kueche.Backofen.Nachricht 2019-09-06 21:50:17 cmd_nr 3
setstate Kueche.Backofen.Nachricht 2019-09-06 21:50:17 e_Kueche.Backofen_power 0.0 W
setstate Kueche.Backofen.Nachricht 2019-09-06 21:50:17 error set Kueche.Backofen.Nachricht:Status nix: Please define Kueche.Backofen.Nachricht:Status first
setstate Kueche.Backofen.Nachricht 2019-09-06 19:35:10 mode enabled
setstate Kueche.Backofen.Nachricht 2019-09-06 21:50:17 state cmd_3
Erstes Problem:
error set Kueche.Backofen.Nachricht:Status nix: Please define Kueche.Backofen.Nachricht:Status first
Ich dachte, das hätte ich mit readingList und setList gemacht?
Zweites Problem: Sobald sich die Leistungsaufnahme ändert, kommt sofort cmd_n. Ich dachte, mit waitsame 480,60,0 passiert z.B. cmd_1 erst nach 480s mit power>1000?
Was mache ich jetzt mal wieder falsch?
Schönes Wochenende,
Markus
set $SELF Status vorheizen
ZitatZweites Problem: Sobald sich die Leistungsaufnahme ändert, kommt sofort cmd_n. Ich dachte, mit waitsame 480,60,0 passiert z.B. cmd_1 erst nach 480s mit power>1000?
["$SELF:Status: vorheizen"]
ist keine Status Abfrage sondern eine Ereignissteuerung. Wird in deinem Fall nicht funktionieren, das das DOIF sich nicht selbst triggern kann.
Ausserdem ist waitsame uneffizient, wenn der Status sich inzwischen so ändert, dass ein anderer DOIF Zweig wahr wird. Ein normales wait (und eine Status Abfrage im 2. Zweig) würde hier besser funktionieren.
Hallo amenomade,
danke für Deine Hilfe! Den Doppelpunkt beim set habe ich Blindfuchs mal wieder übersehen.
Die Abfrage beim Doif scheitert bei mir fast immer an Event vs. Statusabfrage. Habe ich das jetzt richtig verstanden: Der Syntax mit regulärem Ausdruck ist eine Statusabfrage, alles andere nicht? Gibt es da irgendwo eine kurze, prägnante Definition? Ich finde die Doku zu DOIF in der Hinsicht sehr schwer zu verstehen.
Also sollte das hier jetzt besser sein, oder (noch mit waitsame):
defmod Kueche.Backofen.Nachricht DOIF ([Kueche.Backofen:power:d]>1000)\
(set $SELF Status vorheizen)\
DOELSEIF (["^Kueche.Backofen.Nachricht$:^Status: vorheizen$"] and [Kueche.Backofen:power:d]<100)\
(set $SELF Status fertig) \
DOELSE (set $SELF Status nix)
attr Kueche.Backofen.Nachricht alias Küche: Backofennachricht
attr Kueche.Backofen.Nachricht readingList Status
attr Kueche.Backofen.Nachricht room Küche
attr Kueche.Backofen.Nachricht setList Status:vorheizen,fertig,nix
attr Kueche.Backofen.Nachricht verbose 5
attr Kueche.Backofen.Nachricht waitsame 480,60,0
setstate Kueche.Backofen.Nachricht cmd_3
setstate Kueche.Backofen.Nachricht 2019-09-07 12:08:35 Device Kueche.Backofen
setstate Kueche.Backofen.Nachricht 2019-09-07 12:08:35 Status nix
setstate Kueche.Backofen.Nachricht 2019-09-07 12:08:35 cmd 3
setstate Kueche.Backofen.Nachricht 2019-09-07 12:08:35 cmd_event Kueche.Backofen
setstate Kueche.Backofen.Nachricht 2019-09-07 12:08:35 cmd_nr 3
setstate Kueche.Backofen.Nachricht 2019-09-07 12:08:35 e_Kueche.Backofen_power 0.9 W
setstate Kueche.Backofen.Nachricht 2019-09-07 12:08:03 mode enabled
setstate Kueche.Backofen.Nachricht 2019-09-07 12:08:35 state cmd_3
Nein, funktioniert nicht :(
Der Status geht von cmd_1 direkt zu cmd_3. cmd_2 wird nie erreicht - hab' ich noch was falsch bzw. Event vs. Statusabfrage?
cu
Markus
Zitathab' ich noch was falsch
Mit welchen Änderungen funktioniert es nicht, die in #2?
Hast Du den Hinweis zu waitsame zur Kenntnis genommen?
Zitat von: The Grue am 07 September 2019, 12:13:47
Der Syntax mit regulärem Ausdruck ist eine Statusabfrage, alles andere nicht?
Eher das Gegenteil:
["Regex"] ist eine Ereignissteuerung
[Device] eq "status"
[Device] > Wert
[Device:Reading] == 25
sind Statusabfragen
Servus amenomade,
Danke, diese kleine Tabelle hat mir sehr weitergeholfen!
Trotzdem habe ich mein Problem jetzt total anders gelöst: Ich habe den Fibaro Plug durch einen Qubino 16A ausgetauscht, der den Backofen ordentlich schalten kann. Dann reicht das hier:
define Kueche.Backofen.StateOnHandler DOIF ([Kueche.Backofen:reportedState] eq "on") (set Kueche.Backofen.ReadyMessage enable)
define Kueche.Backofen.ReadyMessage DOIF ([Kueche.Backofen:power:d] < 1000) (msg "Der Backofen ist vorgeheizt", set $SELF disable)
Danke für Eure Hilfe!
cu
Markus