FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: zwockel am 21 Juli 2020, 11:29:12

Titel: Starting notify loop vor setstate
Beitrag von: zwockel am 21 Juli 2020, 11:29:12
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.
Titel: Antw:Starting notify loop vor setstate
Beitrag von: amenomade am 21 Juli 2020, 11:58:26
Verstehe die Frage nicht. Die setstate Befehle sind beim Start da, um die in der statefile (https://fhem.de/commandref_DE.html#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?
Titel: Antw:Starting notify loop vor setstate
Beitrag von: zwockel am 22 Juli 2020, 08:13:42
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.
Titel: Antw:Starting notify loop vor setstate
Beitrag 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.

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.
Titel: Antw:Starting notify loop vor setstate
Beitrag von: rudolfkoenig am 22 Juli 2020, 09:48:40
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.

Titel: Antw:Starting notify loop vor setstate
Beitrag von: zwockel am 22 Juli 2020, 12:39:59
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!
Titel: Antw:Starting notify loop vor setstate
Beitrag von: rudolfkoenig am 22 Juli 2020, 13:04:50
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.
Titel: Antw:Starting notify loop vor setstate
Beitrag von: betateilchen am 22 Juli 2020, 13:06:36
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.
Titel: Antw:Starting notify loop vor setstate
Beitrag von: betateilchen am 22 Juli 2020, 13:11:11
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)
Titel: Antw:Starting notify loop vor setstate
Beitrag von: zwockel am 22 Juli 2020, 13:49:18
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