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?
Variable aktualisiert sekündlich
Moderator: Co-Administratoren
-
- 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
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
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
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
-
- 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
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 +++
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 +++
Re: Variable aktualisiert sekündlich
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!?
-
- 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
Nein, hast Du nicht. Im dritten Abschnitt triggert die Systemvariable.
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.... und macht dann Ende, da ja sonst nichts mehr zutrifft!?
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
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
-
- 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
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.
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 +++
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 +++
-
- 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
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
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
Re: Variable aktualisiert sekündlich
Danke für die Erläuterungen, dann teile ich das Programm lieber mal auf