[gelöst]Verkettung von Fhem-Befehlen getrennt durch ereignisgesteuertes sleep

Begonnen von frober, 22 Juni 2023, 10:08:07

Vorheriges Thema - Nächstes Thema

frober

Hallo zusammen,

die Beregnung meines Rasens (4 Kreise) habe ich durch MySensors realisiert. Die Beregnungszeit wird in der Node gesetzt und autark von dieser geregelt. Die Kreise werden nacheinander durch notifys getriggert, z.B. Kreis 1 aus -> notify -> Kreis 2 an usw.
In myUtils habe ich die Berechnung wann und wie lange Beregnet wird.
Damit das Wasser Zeit hat zu versickern, hatte ich bisher 2 Durchläufe. Das funktioniert einwandfrei seit Start 2021.

Da ich die Beregnungsmenge etwas angehoben habe, habe ich nun auf 3 Durchgänge erhöht, nur ist der 3. Durchgang nicht angelaufen, daher meine Frage:

Wie kann ich das besser umsetzten, bzw. wo liegt das Problem?

funktionierende Version mit 1 durch Event getriggerten sleep:
return fhem ("set MYSENSOR_2 percentage $Kreis1;\
        sleep 1 quiet; set MYSENSOR_2 percentage1 $Kreis2;\
sleep 1 quiet; set MYSENSOR_3 percentage1 $Kreis3;\
sleep 1 quiet; set MYSENSOR_3 percentage $Kreis4;\
sleep 5 quiet; set MYSENSOR_2 status on;\
setreading Beregnung Regenmenge_IST $Regenmenge;\
setreading Beregnung Beregnungsstand $BeregnungsZahl;\
setreading Beregnung Regenzaehler $Regenzaehler;\
setreading Beregnung Beregnungsdatum $Datum;\
sleep MYSENSOR_3:status:.off;\
set MYSENSOR_2 percentage $Kreis1;\
sleep 1 quiet; set MYSENSOR_2 percentage1 $Kreis2;\
sleep 1 quiet; set MYSENSOR_3 percentage1 $Kreis3;\
sleep 1 quiet; set MYSENSOR_3 percentage $Kreis4;\
sleep 5 quiet; set MYSENSOR_2 status on");

neue Version mit 2 durch Event getriggerten sleeps:
return fhem ("set MYSENSOR_2 percentage $Kreis1;\
sleep 1 quiet; set MYSENSOR_2 percentage1 $Kreis2;\
sleep 1 quiet; set MYSENSOR_3 percentage1 $Kreis3;\
sleep 1 quiet; set MYSENSOR_3 percentage $Kreis4;\
sleep 5 quiet; set MYSENSOR_2 status on;\
setreading Beregnung Regenmenge_IST $Regenmenge;\
setreading Beregnung Beregnungsstand $BeregnungsZahl;\
setreading Beregnung Regenzaehler $Regenzaehler;\
setreading Beregnung Beregnungsdatum $Datum;\
sleep MYSENSOR_3:status:.off;\
set MYSENSOR_2 percentage $Kreis1;\
sleep 1 quiet; set MYSENSOR_2 percentage1 $Kreis2;\
sleep 1 quiet; set MYSENSOR_3 percentage1 $Kreis3;\
sleep 1 quiet; set MYSENSOR_3 percentage $Kreis4;\
sleep 5 quiet; set MYSENSOR_2 status on\
sleep MYSENSOR_3:status:.off;\
set MYSENSOR_2 percentage $Kreis1;\
sleep 1 quiet; set MYSENSOR_2 percentage1 $Kreis2;\
sleep 1 quiet; set MYSENSOR_3 percentage1 $Kreis3;\
sleep 1 quiet; set MYSENSOR_3 percentage $Kreis4;\
sleep 5 quiet; set MYSENSOR_2 status on");

Die ersten beide Durchläufe (oder der erste und dritte?) haben funktioniert, danach kam nichts mehr, auch kein Logeintrag.
Muss ich die sleeps benennen? Gleiche sleeps werden überschrieben, aber kommt das zweite nicht erst zum tragen, wenn das erste ausgelöst hat (das würde dann die zeitgesteuerten sleeps auch betreffen)?

Die setreadings kann ich noch über readingsBulkUpdate setzen, das ist aber doch nicht die Ursache!?


Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

betateilchen

#1
Zitat von: frober am 22 Juni 2023, 10:08:07aber kommt das zweite nicht erst zum tragen, wenn das erste ausgelöst hat

Nein. sleep ist in diesem Fall ein FHEM Befehl, genau wie set oder setreading. Dieser Befehl sorgt dafür, dass sich FHEM intern "merkt" was nach Ablauf der angegebenen Zeit (oder Eintritt einer Bedingung) passieren soll.

Alles was in der Klammer fhem() steht, wird komplett nacheinander abgearbeitet.
Das sleep sorgt NICHT dafür, dass die Verarbeitung der einzel angegeben Befehle "unterbrochen" und erst nach Ablauf der Zeit weitergearbeitet wird.

Du kannst ein sleep mit nachfolgendem Befehl ein bisschen vergleichen mit einem automatisch angelegten at-device und dem zugehörigen Ausführungsteil.

Wo ich mir gerade nicht sicher bin, wie FHEM das handhabt, ist die Frage, wie FHEM eigentlich Dein Konstrukt behandelt, in dem quasi im Ausführungsteil nach dem ersten sleep weitere sleep definiert werden. Dazu müsste man nochmal in die fhem.pl schauen...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Otto123

Zitat von: frober am 22 Juni 2023, 10:08:07        sleep 5 quiet; set MYSENSOR_2 status on\
        sleep MYSENSOR_3:status:.off;\
Hier fehlt doch einfach ein ; ?
        sleep 5 quiet; set MYSENSOR_2 status on;\
        sleep MYSENSOR_3:status:.off;\

Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

frober

Zitat von: Otto123 am 22 Juni 2023, 11:03:45Hier fehlt doch einfach ein ;

Otto, danke. Trotz mehrfacher Kontrolle übersehen :(  Melde mich in ein paar Tagen, ob's so funktioniert.

Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

Otto123

Zitat von: frober am 22 Juni 2023, 10:08:07Muss ich die sleeps benennen?
Ich mache das bei den "event sleeps" meistens, ein zeit sleep läuft ja irgendwann ab, aber bei den event sleeps kann es bei "Problemen" zu Ansammlung kommen. Kommt dann der Event, kann es zu unklaren Abläufen kommen. Benannte sleeps werden ja überschrieben, wenn der Name gleich lautet.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

frober

Danke nochmals, immer wieder schön dass das 4-Augenprinzip funktioniert.

Fehler behoben, die "event sleeps" habe ich nun auch noch benannt.


Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...