Variable aktualisiert sekündlich

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

Antworten
schubi82
Beiträge: 80
Registriert: 21.05.2017, 14:56
Hat sich bedankt: 4 Mal

Variable aktualisiert sekündlich

Beitrag von schubi82 » 16.08.2021, 12:25

Hallo zusammen!
Ich dachte eigentlich, dass ich die Logik von Homematic mittlerweile verstanden habe, irgendwie dann aber doch nicht. Zum Hintergrund: ich möchte, dass wenn die Haustür fünf Minuten offen ist, ich eine Benachrichtigung per Telegramm erhalte und Alexa mich darüber benachrichtigt. Letzteres klappt (über die Aktualisierung der Variable Türwarnung = wahr und NodeRed), dass mit Telegram hat auch schon einmal geklappt. Mir ist aber aufgefallen, dass die Variable Türwarnung = falsch sich bei geschlossener Tür mehrfach sekündlich aktualisiert und daraufhin wollte ich das Programm "überarbeiten". Jetzt hab ich weiterhin das Problem mit dem Log und die Benachrichtigung funktioniert auch nicht mehr 😅
Was habe ich falsch gemacht? Sollte das in zwei Programmen abgefrühstückt werden?
Screenshot_20210816_115951_com.microsoft.emmx.jpg

Xel66
Beiträge: 14165
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 585 Mal
Danksagung erhalten: 1500 Mal

Re: Variable aktualisiert sekündlich

Beitrag von Xel66 » 16.08.2021, 12:56

Du verwendest eine im Programm gesetzte Systemvariable wieder als Trigger in dem gleichen Programm. Ein Setzten einer Systemvariable stößt die Prüfung der definierten Bedingungen an, die Systemvariable wird wieder gesetzt, was die Prüfung der definierten Bedingungen des Programms anstößt, was die Systemvariable setzt, was wiederum die Prüfung der definierten Bedingungen triggert ..... uswusf.

Lösung: in zwei Programme aufteilen. Das letzte SONST WENN muss ein separates Programm werden.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

MichaelN
Beiträge: 9679
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 700 Mal
Danksagung erhalten: 1626 Mal

Re: Variable aktualisiert sekündlich

Beitrag von MichaelN » 16.08.2021, 13:08

Als Faustregel: verschiedene Trigger, verschiedene Programme (zumindest solange man nicht sehr genau weiß, was man tut)
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

schubi82
Beiträge: 80
Registriert: 21.05.2017, 14:56
Hat sich bedankt: 4 Mal

Re: Variable aktualisiert sekündlich

Beitrag von schubi82 » 16.08.2021, 13:14

Danke, verstehe ich trotzdem nicht 😏 Ich habe Türwarnung Haustür ja nur als Trigger, wenn die fünf Minuten um sind, aber der Logeintrag kommt ja bei Türwarnung falsch, also wenn die Tür zu ist. Und nach meinem Verständnis arbeitet er dann die Dann-Bedingung ab und macht dann Ende, da ja sonst nichts mehr zutrifft!?

Xel66
Beiträge: 14165
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 585 Mal
Danksagung erhalten: 1500 Mal

Re: Variable aktualisiert sekündlich

Beitrag von Xel66 » 16.08.2021, 13:20

schubi82 hat geschrieben:
16.08.2021, 13:14
...Ich habe Türwarnung Haustür ja nur als Trigger, wenn die fünf Minuten um sind,
Nein, hast Du nicht. Im dritten Abschnitt triggert die Systemvariable.
... und macht dann Ende, da ja sonst nichts mehr zutrifft!?
Nö macht es nicht. Die Systemvariable wird aktualisiert, was eine Bedingungsprüfung anstößt. Diese trifft auf eine WAHRe Bedingung und setzt die Variable wieder, was wieder eine Bedingungsprüfung triggert. Die CCU arbeitet ereignisgetriggert und auch das Aktualisieren einer Systemvariable ist ein Ereignis. Und dann prüft sie. Würdest Du eine Zusatzbedingung einbauen, die den Status der Variable prüft und diese dann nur setzt, wenn sie nicht dem Sollzustand entspricht, hättest Du das Problem nicht. Die Prüfung auf "bei Änderung" ist entgegen der Darstellung im Handbuch ein Teil der Bedingungsprüfung des Programms (vermutlich durch Vergleich mit .LastValue()) und wird nicht im Vorfeld gemacht. Hier liegt der Hase im Pfeffer.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

MichaelN
Beiträge: 9679
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 700 Mal
Danksagung erhalten: 1626 Mal

Re: Variable aktualisiert sekündlich

Beitrag von MichaelN » 16.08.2021, 13:23

Ich setze mal voraus, daß "Türkontakt" immer entweder offen oder geschlossen ist. D. H. Eine der beiden ersten Bedingungen ist immer wahr.
Es wird dann also jedesmal "Tür Warnung" geändert. Was im SONST-WENN wieder das Programm triggert, was dann auf eine der ersten beiden wahren Bedingungen trifft. Was die SV "Türwarnugn" ändert, was das Programm triggert, was dann auf eine der ersten beiden wahren Bedingungen trifft. Was die SV "Türwarnugn" ändert, was das Programm triggert, was dann auf eine der ersten beiden wahren Bedingungen trifft. Was die SV "Türwarnugn" ändert, was das Programm triggert, was dann auf eine der ersten beiden wahren Bedingungen trifft. Was die SV "Türwarnugn" ändert, was das Programm triggert, was dann auf eine der ersten beiden wahren Bedingungen trifft. Was die SV "Türwarnugn" ändert, was das Programm triggert, was dann auf eine der ersten beiden wahren Bedingungen trifft. Was die SV "Türwarnugn" ändert, was das Programm triggert, was dann auf eine der ersten beiden wahren Bedingungen trifft. Was die SV "Türwarnugn" ändert, was das Programm triggert, was dann auf eine der ersten beiden wahren Bedingungen trifft. Was die SV "Türwarnugn" ändert, was das Programm triggert, was dann auf eine der ersten beiden wahren Bedingungen trifft. Was die SV "Türwarnugn" ändert, was das Programm triggert, was dann auf eine der ersten beiden wahren Bedingungen trifft. Was die SV "Türwarnugn" ändert, was das Programm triggert, was dann auf eine der ersten beiden wahren Bedingungen trifft. Was die SV "Türwarnugn" ändert, was das Programm triggert, was dann auf eine der ersten beiden wahren Bedingungen trifft. Was die SV "Türwarnugn" ändert, was das Programm triggert, was dann auf eine der ersten beiden wahren Bedingungen trifft. Was die SV "Türwarnugn" ändert, was das Programm triggert, usw.
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

Xel66
Beiträge: 14165
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 585 Mal
Danksagung erhalten: 1500 Mal

Re: Variable aktualisiert sekündlich

Beitrag von Xel66 » 16.08.2021, 13:38

MichaelN hat geschrieben:
16.08.2021, 13:23
Es wird dann also jedesmal "Tür Warnung" geändert.
Nicht ganz - nur bei einem Statuswechsel. Ändert sich dieser nicht, wird die Variable mit ihrem aktuellen Status überschrieben (also aktualisiert), was wieder eben eine Bedingungsprüfung anstößt. Und so kommt es eben, dass sich das Programm quasi immer wieder selbst aufruft. Das kann man eben nur umgehen, wenn man zwei separate Programme draus macht oder eben das Setzen nur zulässt, wenn die Systemvariable den falschen Status hat. Dazu muss man einfach nur eine zusätzliche Prüfung ihres aktuellen Status einbauen (natürlich auf "nur prüfen").

Das beschriebene Verhalten ist mir auch untergekommen und da habe ich der (Test-)CCU mal etwas genauer beim Arbeiten zugeschaut, weil ich genau wissen wollte, wie die Logik der CCU arbeitet, damit ich eben die Programmläufe nachvollziehen kann. Und daher bin ich auch zu der oben beschriebenen Einschätzung gekommen, dass eben die Prüfung auf "bei Änderung" ein Teil der Bedingungsprüfung des Programms sein muss. Einblich in den Quellcode der Logigkengine habe ich natürlich auch nicht - könnte auch nicht wirklich viel damit anfangen.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

schubi82
Beiträge: 80
Registriert: 21.05.2017, 14:56
Hat sich bedankt: 4 Mal

Re: Variable aktualisiert sekündlich

Beitrag von schubi82 » 17.08.2021, 09:21

Danke für die Erläuterungen, dann teile ich das Programm lieber mal auf 😎

Antworten

Zurück zu „HomeMatic allgemein“