Hallo Leute,
ich stehe wieder vor meinem altbekannten Problem, was ich öfter habe, wenn ich ein neues DOIF anlege.
Ich möchte meine Waschmaschine und meine Spülmaschine automatisch starten..dazu habe ich folgendes DOIF:
defmod Geraeteautomatik DOIF ([Wechselrichter:AC.Power] > 1000) (set SX758X06TE requestSettings, set WAYH2841 requestSettings)
DOELSEIF ([Wechselrichter:AC.Power] > 1500 and [WAYH2841:BSH.Common.Status.RemoteControlStartAllowed] eq "1") (set WAYH2841 startProgram)
DOELSEIF ([Wechselrichter:AC.Power] > 1501 and [SX758X06TE:BSH.Common.Status.RemoteControlStartAllowed] eq "1") (set SX758X06TE startProgram)
attr Geraeteautomatik room Haus
Wie verwirkliche ich es jetzt, dass die Befehle nur 1 x am Tag ausgeführt werden? - der Wechselrichter schwankt ja täglich auch mal wieder unter die Werte und dann wieder drüber..mit doalways würde es ja jedes Mal wieder den ersten Teil ausführen, wenn der Wert von AC.Power neu geschrieben wird und über 1000 ist... - analgog auch die anderen beiden ab 1500 und 1501.
Kann ich da Wait benutzen? Schiebe ich mit ait nur den Ausführungsteil nach hinten oer bedeutet wait, dass ich nach der Ausführung des cmd0 cmd1 oder cmd3 dann einen waittimer habe, der die erneute Ausführung dann so lange blockiert wie ich den waitimer setze?
Hallo Stonemuc,
ich vermute das Attribut repeatsame im DOIf kann Deiner Lösung helfen. Hier kannst Du die maximale Anzahl hintereinander folgenden Ausführungen festlegen.
Grüße
Jens
Hallo Stonemuc
ich weiss nicht ob es da noch elegantere Lösungen gibt aber ich helfe mir da immer mit einen Reading weches ich mir beim auslösen eines DOIF Fall setzte dieses verhindert dann ein erneutes triggern dieses DOIF Zweiges.
z.b.:
defmod Geraeteautomatik DOIF ([Wechselrichter:AC.Power] > 1000 and [$SELF:nureinmal_cmd1] = 0) (set SX758X06TE requestSettings, set WAYH2841 requestSettings, setreading $SELF nureinmal_cmd1 1)
und dann dieses blockierende Reading wieder auf null setzten damit der Zweig am nächsten Tag wieder getriggert werden kann
DOELSEIF ([00:01]) (setreading $SELF nureinmal_cmd1 0)
vieleicht hilft Dir das weiter
Gruß
Stephan
Da du alles in einem DOIF hast, können die Zweige immer wechseln - das kannst du nicht durch Attribute verhindern. Entweder du definierst mehrere DOIFs ohne do always mit dem zusätzlichen Zweig DOELSEIF ([00:00]) oder du löst es, wie Stefen es vorgeschlagen hat.
Zitat von: Stelaku am 31 Juli 2022, 18:34:09
Hallo Stonemuc
ich weiss nicht ob es da noch elegantere Lösungen gibt aber ich helfe mir da immer mit einen Reading weches ich mir beim auslösen eines DOIF Fall setzte dieses verhindert dann ein erneutes triggern dieses DOIF Zweiges.
z.b.:
defmod Geraeteautomatik DOIF ([Wechselrichter:AC.Power] > 1000 and [$SELF:nureinmal_cmd1] = 0) (set SX758X06TE requestSettings, set WAYH2841 requestSettings, setreading $SELF nureinmal_cmd1 1)
und dann dieses blockierende Reading wieder auf null setzten damit der Zweig am nächsten Tag wieder getriggert werden kann
DOELSEIF ([00:01]) (setreading $SELF nureinmal_cmd1 0)
vieleicht hilft Dir das weiter
Gruß
Stephan
Und dann mit do always?
Ich hab das mal modifiziert, gibt mir aber einen Error aus...
Internals:
CFGFN
DEF ([Wechselrichter:AC.Power] > 500 and [$SELF:nureinmal_cmd1] = 0) (set SX758X06TE requestSettings, set WAYH2841 requestSettings, setreading $SELF nureinmal_cmd1 1) DOELSEIF ([Wechselrichter:AC.Power] > 1000 and [$SELF:nureinmal_cmd2] = 0 and [WAYH2841:BSH.Common.Status.RemoteControlStartAllowed] eq "0") (set Citylife500FHEM_Bot message Waschmaschine könnte gestartet werden, setreading $SELF nureinmal_cmd2 1) DOELSEIF ([Wechselrichter:AC.Power] > 1000 and [$SELF:nureinmal_cmd3] = 0[WAYH2841:BSH.Common.Status.RemoteControlStartAllowed] eq "1") (set WAYH2841 startProgram, set Citylife500FHEM_Bot message Waschmaschine automatisch gestartet, setreading $SELF nureinmal_cmd3 1) DOELSEIF ([Wechselrichter:AC.Power] > 1300 and [$SELF:nureinmal_cmd4] = 0[SX758X06TE:BSH.Common.Status.RemoteControlStartAllowed] eq "0") (set Citylife500FHEM_Bot message Geschirrspüler könnte gestartet werden, setreading $SELF nureinmal_cmd4 1) DOELSEIF ([Wechselrichter:AC.Power] > 1300 and [$SELF:nureinmal_cmd5] = 0 [SX758X06TE:BSH.Common.Status.RemoteControlStartAllowed] eq "1") (set SX758X06TE startProgram, set Citylife500FHEM_Bot message Geschirrspüler automatisch gestartet, setreading $SELF nureinmal_cmd5 1) DOELSEIF ([00:01]) (setreading $SELF nureinmal_cmd1 0, setreading $SELF nureinmal_cmd2 0, setreading $SELF nureinmal_cmd3 0, setreading $SELF nureinmal_cmd4 0, setreading $SELF nureinmal_cmd5 0)
FUUID 62e65f3b-f33f-37e6-6a7a-f9a7d9d3888158db
MODEL FHEM
NAME Geraeteautomatik
NOTIFYDEV global,Geraeteautomatik,SX758X06TE,WAYH2841,Wechselrichter
NR 59178
NTFY_ORDER 50-Geraeteautomatik
STATE initialized
TYPE DOIF
VERSION 26182 2022-06-29 18:57:26
eventCount 17
READINGS:
2022-08-01 14:03:35 Device Wechselrichter
2022-08-01 13:59:50 cmd 0
2022-07-31 19:19:44 e_SX758X06TE_BSH.Common.Status.RemoteControlStartAllowed 0
2022-08-01 14:03:35 e_Wechselrichter_AC.Power 2308
2022-08-01 14:03:35 error condition c01: Can't modify non-lvalue subroutine call of &main::ReadingValDoIf in scalar assignment, line 1, at EOF
2022-08-01 13:59:50 mode enabled
2022-08-01 13:59:50 state initialized
2022-08-01 13:59:50 timer_01_c06 02.08.2022 00:01:00
Regex:
accu:
collect:
cond:
Geraeteautomatik:
0:
nureinmal_cmd1 ^Geraeteautomatik$:^nureinmal_cmd1:
1:
nureinmal_cmd2 ^Geraeteautomatik$:^nureinmal_cmd2:
2:
nureinmal_cmd3 ^Geraeteautomatik$:^nureinmal_cmd3:
3:
nureinmal_cmd4 ^Geraeteautomatik$:^nureinmal_cmd4:
4:
nureinmal_cmd5 ^Geraeteautomatik$:^nureinmal_cmd5:
SX758X06TE:
3:
BSH.Common.Status.RemoteControlStartAllowed ^SX758X06TE$:^BSH.Common.Status.RemoteControlStartAllowed:
4:
BSH.Common.Status.RemoteControlStartAllowed ^SX758X06TE$:^BSH.Common.Status.RemoteControlStartAllowed:
WAYH2841:
1:
BSH.Common.Status.RemoteControlStartAllowed ^WAYH2841$:^BSH.Common.Status.RemoteControlStartAllowed:
2:
BSH.Common.Status.RemoteControlStartAllowed ^WAYH2841$:^BSH.Common.Status.RemoteControlStartAllowed:
Wechselrichter:
0:
AC.Power ^Wechselrichter$:^AC.Power:
1:
AC.Power ^Wechselrichter$:^AC.Power:
2:
AC.Power ^Wechselrichter$:^AC.Power:
3:
AC.Power ^Wechselrichter$:^AC.Power:
4:
AC.Power ^Wechselrichter$:^AC.Power:
attr:
cmdState:
cmdpause:
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'Wechselrichter','AC.Power') > 500 and ::ReadingValDoIf($hash,'Geraeteautomatik','nureinmal_cmd1') = 0
1 ::ReadingValDoIf($hash,'Wechselrichter','AC.Power') > 1000 and ::ReadingValDoIf($hash,'Geraeteautomatik','nureinmal_cmd2') = 0 and ::ReadingValDoIf($hash,'WAYH2841','BSH.Common.Status.RemoteControlStartAllowed') eq "0"
2 ::ReadingValDoIf($hash,'Wechselrichter','AC.Power') > 1000 and ::ReadingValDoIf($hash,'Geraeteautomatik','nureinmal_cmd3') = 0::ReadingValDoIf($hash,'WAYH2841','BSH.Common.Status.RemoteControlStartAllowed') eq "1"
3 ::ReadingValDoIf($hash,'Wechselrichter','AC.Power') > 1300 and ::ReadingValDoIf($hash,'Geraeteautomatik','nureinmal_cmd4') = 0::ReadingValDoIf($hash,'SX758X06TE','BSH.Common.Status.RemoteControlStartAllowed') eq "0"
4 ::ReadingValDoIf($hash,'Wechselrichter','AC.Power') > 1300 and ::ReadingValDoIf($hash,'Geraeteautomatik','nureinmal_cmd5') = 0 ::ReadingValDoIf($hash,'SX758X06TE','BSH.Common.Status.RemoteControlStartAllowed') eq "1"
5 ::DOIF_time_once($hash,0,$wday)
days:
do:
0:
0 set SX758X06TE requestSettings, set WAYH2841 requestSettings, setreading Geraeteautomatik nureinmal_cmd1 1
1:
0 set Citylife500FHEM_Bot message Waschmaschine könnte gestartet werden, setreading Geraeteautomatik nureinmal_cmd2 1
2:
0 set WAYH2841 startProgram, set Citylife500FHEM_Bot message Waschmaschine automatisch gestartet, setreading Geraeteautomatik nureinmal_cmd3 1
3:
0 set Citylife500FHEM_Bot message Geschirrspüler könnte gestartet werden, setreading Geraeteautomatik nureinmal_cmd4 1
4:
0 set SX758X06TE startProgram, set Citylife500FHEM_Bot message Geschirrspüler automatisch gestartet, setreading Geraeteautomatik nureinmal_cmd5 1
5:
0 setreading Geraeteautomatik nureinmal_cmd1 0, setreading Geraeteautomatik nureinmal_cmd2 0, setreading Geraeteautomatik nureinmal_cmd3 0, setreading Geraeteautomatik nureinmal_cmd4 0, setreading Geraeteautomatik nureinmal_cmd5 0
6:
helper:
NOTIFYDEV global,Geraeteautomatik,SX758X06TE,WAYH2841,Wechselrichter
event AC.Power: 2308,AC.Power.Fast: 2308,Daily.Energy: 3.93,generator.1.current: 10.09,generator.1.voltage: 350,output.1.power: 764,output.1.voltage: 229,output.2.power: 773,output.2.voltage: 240,output.3.power: 771,output.3.voltage: 236,sensor.3: 0.01,W: 2308 - Einspeisen (MPP),EnergyExpected: 10.305092
globalinit 1
last_timer 1
sleeptimer -1
triggerDev Wechselrichter
triggerEvents:
AC.Power: 2308
AC.Power.Fast: 2308
Daily.Energy: 3.93
generator.1.current: 10.09
generator.1.voltage: 350
output.1.power: 764
output.1.voltage: 229
output.2.power: 773
output.2.voltage: 240
output.3.power: 771
output.3.voltage: 236
sensor.3: 0.01
W: 2308 - Einspeisen (MPP)
EnergyExpected: 10.305092
triggerEventsState:
AC.Power: 2308
AC.Power.Fast: 2308
Daily.Energy: 3.93
generator.1.current: 10.09
generator.1.voltage: 350
output.1.power: 764
output.1.voltage: 229
output.2.power: 773
output.2.voltage: 240
output.3.power: 771
output.3.voltage: 236
sensor.3: 0.01
state: W: 2308 - Einspeisen (MPP)
EnergyExpected: 10.305092
internals:
intervalfunc:
localtime:
0 1659391260
readings:
all Wechselrichter:AC.Power Geraeteautomatik:nureinmal_cmd1 Geraeteautomatik:nureinmal_cmd2 WAYH2841:BSH.Common.Status.RemoteControlStartAllowed Geraeteautomatik:nureinmal_cmd3 Geraeteautomatik:nureinmal_cmd4 SX758X06TE:BSH.Common.Status.RemoteControlStartAllowed Geraeteautomatik:nureinmal_cmd5
realtime:
0 00:01:00
time:
0 00:01:00
timeCond:
0 5
timer:
0 0
timers:
5 0
trigger:
triggertime:
1659391260:
localtime 1659391260
hash:
uiState:
uiTable:
Attributes:
room Haus
Hallo Stonemuc
Die Fehlermeldung kommt daher weil die Readings nureinmal_cmd1 bis 5 noch nicht existieren. Die werden ja erst um [00:01]
das erste mal geschrieben. Oder du legst eine setlist mit den einzelnen Readings an.
Dann fehlen noch mehrere and in den zweigen 3,4 und 5.
Ein do always brauchst Du eigentlich nicht da ja Deine Zweige nur einmal pro Tag getriggert werden sollen.
Gruß
Stephan
ups... die and habe ich ergänzt.
Dann schau ich morgen mal...
Vielen Dank
mir ist da noch ein fehler in meinem Beispiel aufgefallen bei der Abfrage auf Zahlen muss es == 0 lauten sonst kommt auch diese Fehlermeldung.
([Wechselrichter:AC.Power] > 500 and [$SELF:nureinmal_cmd1] == 0)
(set SX758X06TE requestSettings,
set WAYH2841 requestSettings,
setreading $SELF nureinmal_cmd1 1)
DOELSEIF ( [Wechselrichter:AC.Power] > 1000 and
[$SELF:nureinmal_cmd2] == 0 and
[WAYH2841:BSH.Common.Status.RemoteControlStartAllowed] eq "0")
(set Citylife500FHEM_Bot message Waschmaschine könnte gestartet werden,
setreading $SELF nureinmal_cmd2 1)
DOELSEIF ( [Wechselrichter:AC.Power] > 1000 and
[$SELF:nureinmal_cmd3] == 0 and
[WAYH2841:BSH.Common.Status.RemoteControlStartAllowed] eq "1")
(set WAYH2841 startProgram,
set Citylife500FHEM_Bot message Waschmaschine automatisch gestartet,
setreading $SELF nureinmal_cmd3 1)
DOELSEIF ( [Wechselrichter:AC.Power] > 1300 and
[$SELF:nureinmal_cmd4] == 0 and
[SX758X06TE:BSH.Common.Status.RemoteControlStartAllowed] eq "0")
(set Citylife500FHEM_Bot message Geschirrspüler könnte gestartet werden,
setreading $SELF nureinmal_cmd4 1)
DOELSEIF ( [Wechselrichter:AC.Power] > 1300 and
[$SELF:nureinmal_cmd5] == 0 and
[SX758X06TE:BSH.Common.Status.RemoteControlStartAllowed] eq "1")
(set SX758X06TE startProgram,
set Citylife500FHEM_Bot message Geschirrspüler automatisch gestartet,
setreading $SELF nureinmal_cmd5 1)
DOELSEIF ([00:01])
(setreading $SELF nureinmal_cmd1 0,
setreading $SELF nureinmal_cmd2 0,
setreading $SELF nureinmal_cmd3 0,
setreading $SELF nureinmal_cmd4 0,
setreading $SELF nureinmal_cmd5 0)
Gruß
Stephan
Hab die = in == geändert...trotzdem bleibt der Error bei mir da..mal schauen ob das DOIF trotzdem läuft...
EDIT:
DOIF läuft, Error ist jetzt auch weg..
Vielen Dank fr den Hinweis mit dem reading...
Ich hab noch ne allgemeine Frage zu meinem DOIF...
Meine Waschmaschine startet nur, wenn ich das aktuell ausgewählte Programm zusammen mit dem Start Befehl angebestartProgram XXX
.
Wie kann ich das in einen Set Befehl aus dem Waschmaschinen reading umwandeln? Das Reading der Waschmaschine WAYH2841 lautet z.B., kann aber auch mit anderem Programm anders ausshehen...da steht an anstelle von "Mix" etwas anderes...:
BSH.Common.Root.SelectedProgram Mix 2022-08-08 09:38:38
Das reading lasse ich vor dem Programmstart abfragen und ist dann immer aktuell, wie an der Maschine von Hand eingestellt...