Hallo zusammen,
ich versuche für das comingHOME event zu Unterscheiden, ob ich von schlafen zu Home transitiere oder von außerhalb des Hauses komme. Je nachdem und Wetteraussicht sollen die Jalos anders laufen.
Allerdings macht er immer ALLE Befehle.
Residents:home.*
{
my $tempDay=(ReadingsVal("ProPlanta_Weather", "fc0_tempMax", 0));
if (Residents.lastState eq "asleep" && $tempDay < 20) {
fhem("set group=Blinds_Downstairs on; set IroningRoom_Blind on; set Office_Blind on;");;
}
elsif {
if (Residents.lastState eq "asleep" && $tempDay > 20) {
fhem("trigger SunProtection.East down; trigger SunProtection.West up; trigger SunProtection.South down; set group=Blinds_North on;");;
}
}
fhem("set BathRoomBOOM on;
set BedsideBOOM on;
set OfficePi on;
set KitchenBOOM favorites sunshine_live;");;
}
Wer kann mir helfen? Ich habe schon viele if und else Verschachtelungen probiert und auch mit und ohne DoppelSemikolon gearbeitet, aber nix half :(
Danke im Voraus!
if (ReadingsVal("Residents","lastState","home") eq "asleep" bla bla
Hi CoolTux,
danke für die schnelle Hilfe (um diese Zeit...)
my $tempDay=(ReadingsVal("ProPlanta_Weather", "fc0_tempMax", 0));;
my $resiState=(ReadingsVal("Residents","lastState","home"));;
if ($resiState eq "asleep" && $tempDay < 20) {
So habe ich es angepasst. Leider ist das Verhalten noch das gleiche...
if (ReadingsVal("Residents","lastState","home") eq "asleep" && ReadingsVal("ProPlanta_Weather","fc0_tempMax", 0) < 20) {
fhem("set group=Blinds_Downstairs on; set IroningRoom_Blind on; set Office_Blind on;");;
}
elsif ReadingsVal("Residents","lastState","home") eq "asleep" && ReadingsVal("ProPlanta_Weather","fc0_tempMax", 0) > 20) {
fhem("trigger SunProtection.East down; trigger SunProtection.West up; trigger SunProtection.South down; set group=Blinds_North on;");;
}
Bitte mal so versuche
Hi,
was mir auffällt:
elsif {
if (Residents.lastState eq "asleep" && $tempDay > 20) {
fhem("trigger SunProtection.East down; trigger SunProtection.West up; trigger SunProtection.South down; set group=Blinds_North on;");;
}
ist in der Form natürlich etwas umständlich
elsif ($resiState eq "asleep" && $tempDay < 20) {
fhem("trigger SunProtection.East down; trigger SunProtection.West up; trigger SunProtection.South down; set group=Blinds_North on;");;
}
würde ausreichen.
Insgesamt übersichtlicher wäre wahrscheinlich sowas:
if ($resiState eq "asleep") {
if ($tempDay > 20) {
# mach was
}
else {
# mach was anderes
}
}
2. Was machst du, wenn $tempDay = 20? ;-)
Das löst allerdings nicht deine ursprüngliche Frage... Ich gehe davon aus, dass du reload der 99_myUtils gemacht hast?
@KernSani
Bei Deinem elsif fehlt die Bedingung.
Grüße
Zitat von: CoolTux am 01 Oktober 2016, 23:10:48
@KernSani
Bei Deinem elsif fehlt die Bedingung.
oooops... korrigiert :-)
Danke für Eure Hilfe!!
Ich habe das Notify nicht in der 99_myUtils, sondern direkt im fhem als notify definiert.
Mit Eurer Hilfe konnte ich es jetzt hinbekommen.
Mein Problem liegt nun (nur noch) darin, dass if (ReadingsVal("Residents","lastState","home") eq "asleep") immer TRUE zurückgibt.
Ich muss mal schauen, wo da der Wurm in meinem Resident ist...
Gelöst!!!
Ich bin schockiert und erfreut zugleich...
Residents:home.* {
if
ist NICHT
Residents:home.*
{
if
Das Enter darf NICHT sein vor der Klammer. Zwar wird das notify getriggert, aber dann funktionert der Code nicht?!?!
In der myUtils hätte das vermutlich keine Rolle gespielt. Mangels ausreichendem Wissen um die Parameterübergabe habe ich diesen "Anfängerfehler" auch gemacht und verschiebe nun nach und nach den ganzen Code aus der CFG in Utils- Dateien. Hab auch das Gefühl, dass das stabiler läuft.
Ein "\" am Ende der Zeile "verbindet" Zeilen. Siehe http://fhem.de/commandref_DE.html#command. Macht es bei komplexerem Code aber auch nicht wirklich übersichtlich. Daher ist myUtils hier sicher der bessere Weg.