Hauptmenü

Variableninhalt falsch

Begonnen von Pimp.my.PC, 17 Februar 2017, 15:39:15

Vorheriges Thema - Nächstes Thema

Pimp.my.PC

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

igami

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
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Pimp.my.PC

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

Damian

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 ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Pimp.my.PC

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?