FHEM Forum

FHEM => Sonstiges => Thema gestartet von: Wuck am 19 März 2019, 23:30:35

Titel: If Bedigung wird seltsam ausgeführt
Beitrag von: Wuck am 19 März 2019, 23:30:35
Hallo mal wieder!

Ich habe folgende Funktion:

sub Sz_Tuer_2_Short(){

#Variablen definieren
my $sekunden_an = "1";
my $sekunden_aus = "3";

# --> Licht schalten
if(Value("Sz.RGBW.Bett") eq "off"){
#an
Licht_An("Sz.RGBW.Bett","$sekunden_an","weiss");
Licht_An("Sz.RGBW.Gardine","$sekunden_an","gelb");
Licht_An("Sz.Hue.Wuerfel")
}else{
#aus
Licht_Aus("Sz.RGBW.Bett","$sekunden_aus");
Licht_Aus("Sz.RGBW.Gardine","$sekunden_aus");
Licht_Aus("Sz.Hue.Wuerfel")
};

}


Das Licht geht kurz an und dann direkt wieder aus (Licht_An und Licht_Aus funktionieren einzeln wunderbar). Zum Zeitpunkt des Aufrufens der Funktion ist der abgefragte Status auf "off". Prüft die if-Abfrage bei dem else nochmal neu die Bedingung? Wäre ja doof. Ich glaube ich habe einfach nur ein Brett vor dem Kopf  :o . Wäre die Lösung vllt eine Sprungmarke nach dem "if"-Block, damit das "else" gar nicht mehr genutzt wird? Wie würde ich so eine Marke definieren?
Titel: Antw:If Bedigung wird seltsam ausgeführt
Beitrag von: Benni am 20 März 2019, 04:51:35
Hallo Wuck,

interessant wäre noch, wie wird die sub aufgerufen?
Ich nehme mal an, über ein notify. Von dem solltest du mal ein list (https://fhem.de/commandref_DE.html#list) hier posten.

Außerdem wäre es, auch wenn du sagst, dass sie einzeln funktionieren, auch der Code von Licht_An, bzw. Licht_Aus interessant.

Ich gehe mal davon aus, dass das notify, das die sub aufruft, mehrfach getriggert wird. Dazu mal beim Schaltvorgang den Eventmonitor beobachten, um zu sehen welche Events denn kommen, auf die dein notify eventuell reagiert.

Btw.: Sprungmarken sind auf jeden Fall nicht das Mittel der Wahl!

gb#
Titel: Antw:If Bedigung wird seltsam ausgeführt
Beitrag von: Wuck am 13 April 2019, 13:29:25
Ich Dussel hab's gefunden. Hat etwas gedauert, weil ich mich in letzter Zeit nicht mehr mit dem Beschäftigt habe. Wenn ich den Schalter drücke, setzt der mehrere Readings um und darauf reagiert auch das notify. Also führt es sich selber zwei mal aus. Nun habe ich mit addStateEvent 1 die Abfrage nur auf das "state"Reading begrenz und schon ging's :)