If Bedigung wird seltsam ausgeführt

Begonnen von Wuck, 19 März 2019, 23:30:35

Vorheriges Thema - Nächstes Thema

Wuck

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?

Benni

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 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#

Wuck

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 :)