Hallo zusammen,
ich bin zur zeit an meinem ersten DOIF Modul und brauche nun eure Hilfe.
Es soll eine Überwachung der Waschmaschine/Trockner mithilfe eines Tasmota POW´s werden.
Wenn gestartet und beendet soll eine Nachricht wie TelegramBot auf mein Handy geschickt werden.
Readings vom POW und Telegram habe ich hinbekommen
Via
set teleBot msg <Nachricht>
bekomme ich auch Nachrichten vom FHEM aufs Handy.
Mein aktuelles DOIF_DEF
defmod DOIF.WK_Trockner DOIF ([WK_Trockner:ENERGY_Power] > 8)
(
set $SELF washState running,
set $SELF start_kWh {(ReadingsVal("$DEVICE","ENERGY_Total",0))},
(teleBot msg Der Trockner wurde gestartet.),
)
DOELSEIF ([WK_Trockner:ENERGY_Power] < 8)
(
set $SELF washState finish,
set $SELF end_kWh {(ReadingsVal("$DEVICE","ENERGY_Total",0))},
set $SELF lastRun_kWh {(sprintf ('%.3f',(ReadingsVal("$SELF","end_kWh",0) - ReadingsVal("$SELF","start_kWh",0))))},
(teleBot msg Der Trockner wurde gestartet. Und hat [$SELF:lastRun_kWh] kWh verbraucht.ðŸ'°),
Attribute:
attr DOIF.WK_Trockner readingList washState start_kWh end_kWh lastRun_kW
Funktioniert akuell aber leider noch nicht... Kommt keine Nachricht an
Zusätzlich möchte ich noch ein Wait Attribut einfügen.
Im Vorraus schon mal vielen Dank für eure Hilfe
DOIF ist zwar nicht meine Spezialität aber folgende Dinge würde ich anders machen:
statt:
set $SELF start_kWh {(ReadingsVal("$DEVICE","ENERGY_Total",0))},
würde ich ein Reading im DOIF Device setzen weil durch den 2ten set-Befehl überschreibst du ja den Status von running auf KW...
Evtl. solltest du auch den Status running in ein Reading schreiben, weiß nicht wie das DOIF reagirt, wenn du den Status desselben änderst...
Also statt set -> setreading DeviceName (wahrsch. $SELF) ReadingName (status oder Verbrauch) Wert (also running oder eben Verbrauchswert)
Beispiel:
setreading $SELF status running
bzw.
setreading $SELF start_kWh ReadingsNum("$DEVICE","ENERGY_Total",0)
Wobei beim 2ten Beispiel weiß ich nicht wie das in DOIF mit Perl etc. ist...
Und wenn du willst, dass eine Nachricht geschickt wird, dann muss das mindestens so heißen:
set teleBot msg Trockner wurde gestartet
also das set NICHT vergessen, wie in deinem Testaufruf, der nat. funktioniert... ;)
Ist bestimmt noch nicht alles, wie geschrieben: DOIF ist nicht meine Stärke... (ich nutze eher Notify und myUtils)...
EDIT: und es gibt schon ungefähr 1000 Waschmaschinen-/Trockner-/Geschirrspüler-DOIF im Forum ;)
Gruß, Joachim
Hi,
poste doch bitte anstatt des halben Codes (da fehlt am Ende was) bitte ein list von dem DOIF.
Gruß Otto
Du sagst, das Kommando wäre "set telebot xxx", aber Du schreibst (telebot xxx) ohne set?
Okay das mit dem set ist mir raus:
DEF
defmod DOIF.WK_Trockner DOIF ([WK_Trockner:ENERGY_Power] > 8)
(
set $SELF washState running,
set $SELF start_kWh {(ReadingsVal("$DEVICE","ENERGY_Total",0))},
(set teleBot msg Der Trockner wurde gestartet.),
)
DOELSEIF ([WK_Trockner:ENERGY_Power] < 8)
(
set $SELF washState finish,
set $SELF end_kWh {(ReadingsVal("$DEVICE","ENERGY_Total",0))},
set $SELF lastRun_kWh {(sprintf ('%.3f',(ReadingsVal("$SELF","end_kWh",0) - ReadingsVal("$SELF","start_kWh",0))))},
(set teleBot msg Der Trockner wurde gestartet. Und hat [$SELF:lastRun_kWh] kWh verbraucht.)\
Attribute
attr DOIF.WK_Trockner readingList washState start_kWh end_kWh lastRun_kWh
Wait Attribut will er mir nicht annehmen
attr DOIF.WK_Trockner wait 45:120
list DOIF.WK_Trockner
Internals:
DEF defmod DOIF.WK_Trockner DOIF ([WK_Trockner:ENERGY_Power] > 8)
(
set $SELF washState running,
set $SELF start_kWh {(ReadingsVal("$DEVICE","ENERGY_Total",0))},
(set teleBot msg Der Trockner wurde gestartet.),
)
DOELSEIF ([WK_Trockner:ENERGY_Power] < 8)
(
set $SELF washState finish,
set $SELF end_kWh {(ReadingsVal("$DEVICE","ENERGY_Total",0))},
set $SELF lastRun_kWh {(sprintf ('%.3f',(ReadingsVal("$SELF","end_kWh",0) - ReadingsVal("$SELF","start_kWh",0))))},
(set teleBot msg Der Trockner wurde gestartet. Und hat [$SELF:lastRun_kWh] kWh verbraucht.)\
MODEL Perl
NAME DOIF.WK_Trockner
NR 50
NTFY_ORDER 50-DOIF.WK_Trockner
STATE initialized
TYPE DOIF
READINGS:
2018-12-04 19:44:48 mode enabled
2018-12-04 19:38:26 state initialized
Regex:
condition:
0 (ReadingsVal("$DEVICE","ENERGY_Total",0))
1 (ReadingsVal("$DEVICE","ENERGY_Total",0))
2 (sprintf ('%.3f',(ReadingsVal("DOIF.WK_Trockner","end_kWh",0) - ReadingsVal("DOIF.WK_Trockner","start_kWh",0))))
3
devices:
helper:
globalinit 1
last_timer 0
sleeptimer -1
itimer:
perlblock:
0 start_kWh
1 end_kWh
2 lastRun_kWh
3
uiState:
uiTable:
Attributes:
readingList washState start_kWh end_kWh lastRun_kWh
room Keller
Du hast ja immer noch set statt setreading...
...um Status und Leistung/Verbrauch zu setzen...
Und wie geschrieben: ich weiß nicht wie (genau) das Aufrufen von Perl Funktionen (ReadingsVal bzw. ReadingsNum) in DOIF (an der Stelle) funktioniert...
Nur kurz aufgefallen...
Gruß, Joachim