Hallo,
ich habe folgenden Code laufen:
define Zustand_Heizung dummy
attr Zustand_Heizung room Heizung
attr Zustand_Heizung setList An StandBy
define Hz_hoch DOIF ([Anwesenheit:state] eq "anwesend" and [Zustand_Heizung:state] eq "StandBy") ({ fhem "set Temp_Global 22;;set Zustand_Heizung An" })
attr Hz_hoch room Heizung
attr Hz_hoch wait 10
define Hz_runter DOIF ([Anwesenheit:state] eq "abwesend" and [Zustand_Heizung:state] eq "An") ({ fhem "set Temp_Global 20;;set Zustand_Heizung StandBy" })
attr Hz_runter room Heizung
attr Hz_runter wait 15
Die Variable von "Zustand_Heizung" ist entweder "StandBy" }" oder "An" }". Warum?
Ich verstehe es nicht und brauche bitte eine Erklärung, was ich falsch gemacht hab.
LG
Sebastian
du wechselst nicht vollständig in die perl ebene, muss in geschweiften und runden klammern geschrieben werden.
In deinem Fall kannst du aber auch komplett auf das fhem "..." verzichten und die beiden Befehle per Komma trennen
Zitat von: Pimp.my.PC am 17 Februar 2017, 15:39:15
Hallo,
ich habe folgenden Code laufen:
define Zustand_Heizung dummy
attr Zustand_Heizung room Heizung
attr Zustand_Heizung setList An StandBy
define Hz_hoch DOIF ([Anwesenheit:state] eq "anwesend" and [Zustand_Heizung:state] eq "StandBy") ({ fhem "set Temp_Global 22;;set Zustand_Heizung An" })
attr Hz_hoch room Heizung
attr Hz_hoch wait 10
define Hz_runter DOIF ([Anwesenheit:state] eq "abwesend" and [Zustand_Heizung:state] eq "An") ({ fhem "set Temp_Global 20;;set Zustand_Heizung StandBy" })
attr Hz_runter room Heizung
attr Hz_runter wait 15
Die Variable von "Zustand_Heizung" ist entweder "StandBy" }" oder "An" }". Warum?
Ich verstehe es nicht und brauche bitte eine Erklärung, was ich falsch gemacht hab.
LG
Sebastian
Weil du unnötig auf die Perlebene gehst und die Problematik des "Semikolon-Doppels" nicht beachtet hast. Daher bleib auf der FHEM-Ebene, wenn es nur um FHEM-Befehle geht.
Daher:
define Hz_runter DOIF ([Anwesenheit:state] eq "abwesend" and [Zustand_Heizung:state] eq "An") (set Temp_Global 20,set Zustand_Heizung StandBy)
P. S. dafür brauchst du eigentlich nur ein DOIF nicht zwei.
Achsooo, alles klar, jetzt hab ich es verstanden, danke!
Ich habe es jetzt auch in eine IF-Abfrage gebaut:
define Hz_hoch DOIF ([Anwesenheit:state] eq "anwesend" and [Zustand_Heizung:state] eq "StandBy") (set Temp_Global 22,set Zustand_Heizung An) DOELSEIF ([Anwesenheit:state] eq "abwesend" and [Zustand_Heizung:state] eq "An") (set Temp_Global 20,set Zustand_Heizung StandBy)
attr Hz_hoch room Heizung
attr Hz_hoch wait 10
Zitat von: Pimp.my.PC am 17 Februar 2017, 15:56:44
Achsooo, alles klar, jetzt hab ich es verstanden, danke!
Ich habe es jetzt auch in eine IF-Abfrage gebaut:
define Hz_hoch DOIF ([Anwesenheit:state] eq "anwesend" and [Zustand_Heizung:state] eq "StandBy") (set Temp_Global 22,set Zustand_Heizung An) DOELSEIF ([Anwesenheit:state] eq "abwesend" and [Zustand_Heizung:state] eq "An") (set Temp_Global 20,set Zustand_Heizung StandBy)
attr Hz_hoch room Heizung
attr Hz_hoch wait 10
und wenn du noch eine wait-Angabe für den DOELSEIF-Fall definierst und deine Definition - zwecks Übersicht - in mehrere Zeilen mit Einrückungen definierst, hast du länger was davon ;)
Zitat von: Damian am 17 Februar 2017, 16:03:16
und wenn du noch eine wait-Angabe für den DOELSEIF-Fall definierst
gillt das
attr Hz_hoch wait 10
nicht für beide? Wie stelle ich das an?
Zitat von: Damian am 17 Februar 2017, 16:03:16
und deine Definition - zwecks Übersicht - in mehrere Zeilen mit Einrückungen definierst, hast du länger was davon ;)
Wenn ich das mache, meckert er beim speichern der CFG und sagt "DOELSEIF" wäre kein gültiger Befehl. Wie löse ich das?