Bekomme elif in homemode nicht zum laufen

Begonnen von patlabor, 19 Oktober 2019, 20:11:41

Vorheriges Thema - Nächstes Thema

patlabor

Hallo zusammen,

vermutlich stelle ich mich einfach nur doof an, aber momentan stehe ich total auf dem Schlauch.
Bin gerade dabei in meiner fhem Installation diverse DOIFs in homemode zu migrieren.
Ich habe ein DOIF, das lediglich die Tür zur Abstellkammer überwacht und sobald die Tür aufgeht, eine Lampe in der Abstllkammer einschaltet, diese wollte ich jetzt nach homemode umziehen.
Dort habe ich schon ein HomeCMDcontactOpen das momentan auf die Fenster reagiert und im entsprechenden Raum die soll Temperatur auf 10 Grad runterregelt. Dort wollte ich ansetzen und ebenfalls die Tür der Abstellkammer überwachen. Aber irgendwie tut sich nichts. Weder das Licht geht an, noch erscheint irgendetwas im Log oder im Eventmonitor.
Das Attribut schaut momentan so aus:
{
my $contact = "%SENSOR%";
if (substr($contact,0,2) eq "fk") {
fhem("set wt".substr($contact,2)." desiredTemperature 10")
}
elsif ("%SENSOR%" eq "tk_abstellkammer") {
fhem("set li_abstellkammer on")
}
}


Die Heizungen regeln wunderbar runter sobald ein Fenster auf ist, aber das Licht bleibt leider einfach aus.
Wo habe ich hier denn meinen Denkfehler?

amenomade

Warum elsif und nicht ein neues if?

elsif Zweig wird nur geprüft, wenn der if Zweig flasch ist.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

patlabor

ZitatWarum elsif und nicht ein neues if?

elsif Zweig wird nur geprüft, wenn der if Zweig flasch ist.

Das ist ja auch genau so gewollt.
Habe beim mir alle Fensterkontakte mit fk_[raum] alle Türkontakte mit tk_[raum] alle Wandthermostate mit wt_[raum] und alle Lampen mit li_[raum] benannt.
Im if Zweig frage ich ab ob es sich bei dem Sensor um einen Fensterkontakt (fk) handelt und setze dann das entsprechende Wandthermostat (wt) auf 10 Grad.
Nur wenn es kein Fenster ist, will ich prüfen ob es sich um den Türkontakt der Abstellkammer (tk_abstellkammer) handelt, und schalte dann das Liht in der Abstellkammer (li_abstellkammer) ein.

amenomade

Ok sorry, hatte nicht den Unterschied zwischen tk und fk gemerkt.

Ich würde zuerst mit  $contact statt "%SENSOR%" im elsif versuchen.
(Hast Du überigens in der Log mal geschaut, was er sagt?

Wenn es nicht geht, dann log  Befehle dazwischen einbauen, z.B.:
{
   my $contact = "%SENSOR%";
   Log3 $NAME, 1, "Sensor=".$sensor;
   if (substr($contact,0,2) eq "fk") {
      fhem("set wt".substr($contact,2)." desiredTemperature 10")
   }
   elsif ($sensor eq "tk_abstellkammer") {
      fhem("set li_abstellkammer on")
   }
}

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

patlabor

ZitatIch würde zuerst mit  $contact statt "%SENSOR%" im elsif versuchen.


Hatte ursprünglich $contact verwendet, aber da sich leider nichts getan hat, habe ich versuchsweise mal %SENSOR% versucht, leider auch ohne Erfolg.
Zitat(Hast Du überigens in der Log mal geschaut, was er sagt?
Das ist ja das verrückte, im Log taucht einfach GAR NICHTS auf.

Habe mal versucht irgendetwas mit Log3 zu erreichen, aber da scheitere ich schon beim anlegen:
Global symbol "$NAME" requires explicit package name (did you forget to declare "my $NAME"?) at (eval 21006) line 3.

patlabor

Langsam zweifele ich an mir.
Ich habe fast den ganzen Nachmittag an diesem Problem gebastelt und es einfach nicht hinbekommen. Jetzt habe ich einmal versucht das Log3 einzubauen, was allerdings nicht geklappt hat. Sonst habe ich nichts mehr gemacht seit meinem ersten Post. Bin jetzt nochmal zur Abstellkammer gelaufen, um irgend einen Logeintrag zu erzeugen, und plötzlich geht das Licht in der Abstellkammer an.
Ausser den Fehlermeldungen die ich durch meine Versuche mit dem Log3 erzeugt habe, ist nichts im Log passiert, aber das Licht geht an. Keine Ahnung warum es jetzt geht und den ganzen nachmittag über nicht.

amenomade

Ok, wenn homemode $NAME nicht akzeptiert, dann schreib einfach direkt den Name des Devices:

Log3 "myHomeModeDevice", 1, "Sensor=".$sensor;

Aber wenn es geht... ;) Wie sieht das Attribut jetzt aus?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

binford6000

Moin,
ich hatte eine Bewegungsmelder-Lichtsteuerung auch lange Zeit in HOMEMODE integriert.
Das wurde aber mit der Zeit so komplex (Tablet, IPCAM usw.) sodass ich teils nicht mehr durchgeblickt habe.

Und dann kam homezone https://forum.fhem.de/index.php/topic,98594.0.html
Damit habe ich alle meine BWM-Steueurung in HOMEMODE abgelöst.

VG Sebastian

patlabor

ZitatAber wenn es geht... ;) Wie sieht das Attribut jetzt aus?

Eigentlich immernoch wie ganz zu Anfang:

{
my $contact = "%SENSOR%";
if (substr($contact,0,2) eq "fk") {
fhem("set wt".substr($contact,2)." desiredTemperature 10")
}
elsif ("%SENSOR%" eq "tk_abstellkammer") {
fhem("set li_abstellkammer on")
}
}


Ich habe lediglich versucht das Log3 einzubauen, habe dann aber wegen der o.g. Fehlermeldung aufgegeben.
Hatte jedoch zwischenzeitlich den Container einmal neu gestartet, vielleicht hat sich fhem nur irgendwo verschluckt, und nach einem Reset lief alles wie es sollte.

ZitatMoin,
ich hatte eine Bewegungsmelder-Lichtsteuerung auch lange Zeit in HOMEMODE integriert.
Das wurde aber mit der Zeit so komplex (Tablet, IPCAM usw.) sodass ich teils nicht mehr durchgeblickt habe.

Und dann kam homezone https://forum.fhem.de/index.php/topic,98594.0.html
Damit habe ich alle meine BWM-Steueurung in HOMEMODE abgelöst.

Danke für den Tipp mit diesem Modul, ist wirklich super und auch hoffentlich bald offiziell in fhem zu finden. Benutze ich selbst auch ausgiebig und gerne. Aber an dieser Stelle passt es meiner Meinung nach nicht. Hier geht es nur um einen einfachen Schalter, Tür auf -> Licht an; Tür zu -> Licht aus. Es handelt sich nur um eine Abstellkammer, nicht viel größer als ein Wandschrank, reingehen und Tür hinter sich zu machen ist nicht.