Starting notify loop vor setstate

Begonnen von zwockel, 21 Juli 2020, 11:29:12

Vorheriges Thema - Nächstes Thema

zwockel

Ist es möglich beim Start des Servers erst die notify loop zu starten und anschließend setstate?
Ich habe das Problem das sich nach dem Starten durch die notify loop sich die states verändern.

amenomade

#1
Verstehe die Frage nicht. Die setstate Befehle sind beim Start da, um die in der statefile gespeicherte Stati wieder herzustellen.

setstate generiert kein Event, das die notifies triggern könnte.

Was danach deine notifies machen, ist dir überlassen.

Kannst Du nach dem Lesen von https://forum.fhem.de/index.php/topic,71806.0.html konkreter werden? Was ist genau dein Problem?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

zwockel

#2
Hallo Annemomade,
Hier ein Auszug der fhem.llog
Bis hier passt es
2020.07.21 08:41:37 5: Cmd: >setstate Alarmanlage off<
Dann aber:
2020.07.21 08:42:09 5: Cmd: >{if (Value("Alarmanlage") eq "on"){fhem ("set Alarmanlage off")}}<
2020.07.21 08:42:09 5: End notify loop for HM_1791CF_Btn_05
2020.07.21 08:42:09 5: Starting notify loop for HM_1791CF_Btn_06, 1 event(s), first is cfgState: ok
2020.07.21 08:42:09 5: Triggering nAlamanlage_ueber_4DIS_WM_EIN_schalten
2020.07.21 08:42:09 4: nAlamanlage_ueber_4DIS_WM_EIN_schalten exec {if (Value("Alarmanlage") eq "off"){fhem("set Alarmanlage on")}}
2020.07.21 08:42:09 5: Cmd: >{if (Value("Alarmanlage") eq "off"){fhem("set Alarmanlage on")}}<
2020.07.21 08:42:09 5: Cmd: >set Alarmanlage on<
2020.07.21 08:42:09 4: dummy set Alarmanlage on

Nach Serverstart setzten alle so konzipierte notifys die Dummys auf on. Ich weis ist nicht gerade elegant. Aber es funktioniert im Betrieb bestens.

amenomade

#3
Deine notifies wie nAlamanlage_ueber_4DIS_WM_EIN_schalten musst Du so anpassen, dass die auf cfgState: nicht reagieren, sondern NUR auf die gewünschte Events, wie z.B. "pressed" für ein Button.

Um so wichtiger für die Steuerung einer Alarmanlage !!

Und das hat nichts mit den "setstates" zu tun. Die triggern gar nichts.

Ein notify loop (pro triggerndes Device) wird erst gestartet, wenn ein Event (hier "cfgState: ok") ein notify (hier nAlamanlage_ueber_4DIS_WM_EIN_schalten) oder irgendein zu notifierendes Device betrifft. Auch nichts mit dem Startprozess zu tun.

Deine Dinge funktionieren nicht (mehr) weil vor kurzem neue Events (cfgState) bei CUL_HM generiert werden, und deine notifies nicht selektiv genug sind.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

rudolfkoenig

ZitatIst es möglich beim Start des Servers erst die notify loop zu starten und anschließend setstate?
Nein.

Erklaerung:

- setstate ist dafuer da, um bei FHEM-Start die gespeicherten Readings und STATE zu setzen. setstate generiert keine Events, die man per notify/FileLog/etc auswerten koennte, dafuer verwendet man setreading.

- beim FHEM-Start wird erst die Config-Datei eingelesen (der aus define und attr Zeilen besteht, und eher "statisch" ist), dann das statefile mit den setstate Zeilen, die den aktuellen Zustand der Geraete abbilden. Danach wird das Event "global:INITIALIZED" generiert, und erst ab diesem Zeitpunkt werden Events ueberhaupt verschickt/verarbeitet. D.h. selbst ein set oder setreading aus dem config/statefile wird kein Event ausloesen, danach aber schon.


zwockel

Zitat von: amenomade am 22 Juli 2020, 09:13:38
Deine notifies wie nAlamanlage_ueber_4DIS_WM_EIN_schalten musst Du so anpassen, dass die auf cfgState: nicht reagieren, sondern NUR auf die gewünschte Events, wie z.B. "pressed" für ein Button.
Wenn ich das Notify folgend geändert habe wird es aber nicht ausgeführt wenn ich die Taste betätige.
HM_1791CF_Btn_06:pressed {if (Value("Alarmanlage") eq "off"){fhem("set Alarmanlage on")}}

Was mache ich falsch?
Besten Dank für die Hilfe!

rudolfkoenig

Falls man unsicher ist beim Anlegen eines notifies:
- Event-Monitor aufrufen
- Event erzeugen (d.h. Taste druecken)
- Event-Zeile markieren, auf Create/Modify device klicken, Notify anlegen
- In der notify Detailansicht, per Wizard (im Abschnitt "Change the executed command:") den gewuenschten Befehl aussuchen, und auf "modify" klicken.

betateilchen

Zitat von: zwockel am 22 Juli 2020, 12:39:59
Was mache ich falsch?

Homematic Buttons liefern kein "pressed" sondern Short.* oder Long.* als event.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Und mit Value() zu arbeiten, ist in den seltensten Fällen eine gute Idee.
Es ist aber in diesem Fall nicht die Ursache für Dein Problem. (die notify loop selbst übrigens auch nicht)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

zwockel

Zitat von: betateilchen am 22 Juli 2020, 13:06:36
Homematic Buttons liefern kein "pressed" sondern Short.* oder Long.* als event.

Besten Dank!
Das war die Lösung