Hallo,
an einem Fenster sind zwei HM Fensterkontakte. Einer magnetisch, einer am Drehgriff.
Es sollen je nach Kombination der Zustände der beiden unterschiedliche Aktionen erfolgen, die in diesem Notify programmiert sind:
(FK.HM.Bad.unten.Sensor.*):.* {
if ( ReadingsVal('FK.HM.Bad.unten.Sensor.Dreh', 'state', 'undef') eq 'open'){
fhem ("set FK.HM.Bad.unten.Zustand.dummy openSchwenk");
}
if (( ReadingsVal('FK.HM.Bad.unten.Sensor.Dreh', 'state', 'undef') eq 'tilted') && ( ReadingsVal('FK.HM.Bad.unten.Sensor.Magnet', 'state', 'undef') eq 'open') && ( ReadingsVal('FK.HM.Bad.unten.OffenLang', 'state', 'undef') eq 'long')){
fhem ("set FK.HM.Bad.unten.Zustand.dummy openLong");
}
if (( ReadingsVal('FK.HM.Bad.unten.Sensor.Dreh', 'state', 'undef') eq 'tilted') && ( ReadingsVal('FK.HM.Bad.unten.Sensor.Magnet', 'state', 'undef') eq 'open') && ( ReadingsVal('FK.HM.Bad.unten.OffenLang', 'state', 'undef') eq 'off')){
fhem ("set FK.HM.Bad.unten.Zustand.dummy open");
}
if (( ReadingsVal('FK.HM.Bad.unten.Sensor.Dreh', 'state', 'undef') eq 'closed') && ( ReadingsVal('FK.HM.Bad.unten.Sensor.Magnet', 'state', 'undef') eq 'closed')){
fhem ("set FK.HM.Bad.unten.OffenLang off");
fhem ("set FK.HM.Bad.unten.Zustand.dummy closed");
}
if (( ReadingsVal('FK.HM.Bad.unten.Sensor.Magnet', 'state', 'undef') eq 'closed') && ( ReadingsVal('FK.HM.Bad.unten.Sensor.Dreh', 'state', 'undef') eq 'closed')){
fhem ("set FK.HM.Bad.unten.OffenLang off");
fhem ("set FK.HM.Bad.unten.Zustand.dummy closed");
}
}
Bedauerlicherweise funktioniert nur dieser Teil:
if ( ReadingsVal('FK.HM.Bad.unten.Sensor.Dreh', 'state', 'undef') eq 'open'){
fhem ("set FK.HM.Bad.unten.Zustand.dummy openSchwenk");
}
Weiß jemand warum? Wenn noch Infos fehlen --> ich liefere gerne nach!!!
Nebenfrage:
Wie kann ich
if (( ReadingsVal('FK.HM.Bad.unten.Sensor.Dreh', 'state', 'undef') eq 'tilted') && ( ReadingsVal('FK.HM.Bad.unten.Sensor.Magnet', 'state', 'undef') eq 'open') && ( ReadingsVal('FK.HM.Bad.unten.OffenLang', 'state', 'undef') eq 'long')){
mit Zeilenumbrüchen versehen?
Neugierige Grüße,
Andreas
Ich würde ja Logausgaben von den ganzen ReadingsVal-Abfragen einbauen bzw. die Werte 1x abfragen zu beginn und dann in Variablen schreiben, diese ausgeben (Log) und dann mit den abgefragten Werten (Variablen) arbeiten...
Gruß, Joachim
Wie bekommt man denn die RadingVals in eine Variable in dem Notify-Block? Könntest Du mir bitte ein Beispiel einer Variablenbelegung schreiben?
Du würdest dann die "kurzen" Variablen miteinander vergleichen statt der "langen" ReadingVals?
Dadurch wird aber auch noch nicht erreicht, dass der Code vollständig funktioniert...
ODER(!!) ich verstehe Dich nicht...
Zeilenumbrüche kannst Du eigentlich beliebig machen.
Gibt es ein Log für die Dummys? Werden die in Folge eventuell mehrfach gesetzt?
Hast Du den Eventmonitor beobachtet?
Ich würde den Code zusammenkürzen und die if Blöcke separat testen.
Gruß Otto
my $Variablenwert1 = ReadingsVal('FK.HM.Bad.unten.Sensor.Dreh', 'state', 'undef');
EDIT: und dann eben
if($Variablenwert1 eq 'open'){}
Gruß, Joachim
Hallo miteinander,
die Lösung des Problems ist, allem Voran, die Verwendung der richtigen Bezeichnungen für die Readings. Dann "klappts auch mit dem Nachbarn"...
Der Tipp mit den Variablen hat mir sehr geholfen und ich nehme den sehr gerne für die Zukunft ins Repertoire auf.
Auch der Hinweis, die Sache schrittweise zu machen war sehr gut.
DANKE Euch beiden!
Herzliche Grüße,
Andreas