Aktivität bei Änderung Systemvariable Typ Zeichenkette

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

almrausch
Beiträge: 255
Registriert: 10.12.2016, 21:20
Hat sich bedankt: 2 Mal
Danksagung erhalten: 1 Mal

Aktivität bei Änderung Systemvariable Typ Zeichenkette

Beitrag von almrausch » 17.09.2017, 10:44

Hallo liebe Forumsmitglieder,

ich scheitere gerade an der Aufgabe, bei Änderung (nicht Aktualisierung!) einer Systemvariablen vom Typ Zeichenkette eine Aktivität auszuführen.

Zu Testzwecken habe ich folgendes Programm definiert:
SV Zeichenkette.jpg
Die Variable SV.DateTime ist vom Typ Zeichenkette und wird durch ein anderes Programm jede Minute auf den aktuellen Wert von Datum/Uhrzeit gesetzt. Die Variable SV.DateTime.LOG wird protokolliert, um die Ausführung des Programms zu prüfen.

Unter Status und Bedienung -> Programme kann ich sehen, dass das Programm jede Minute ausgeführt wird, wenn sich der Wert von SV.DateTime geändert hat. Es wird aber weder der Dann noch der Sonst Zweig ausgeführt, was am fehlenden Protokolleintrag für die Variable SV.DateTime.LOG zu erkennen ist.

Führe ich per Start das Programm manuell aus, wird natürlich der Dann Zweig ausgeführt und das ist auch im Protokoll zu sehen.

Ändere ich das Programm für die Variable SV.DateTime auf "bei Aktualisierung auslösen", wird immer der Sonst Zweig ausgeführt.

Wie ist dieses Verhalten zu erklären? Ist es nach der "Logik von WebUI Programmen" plausibel oder handelt es sich um einen Bug oder ist es (ohne Script) schlichtweg nicht möglich, eine Aktivität bei Änderung einer Systemvariablen von Typ Zeichenkette auszuführen?

Bisher war ich davon ausgegangen, dass sich "bei Änderung auslösen" auf die Änderung des Inhalts der SV bezieht, aber das scheint nicht der Fall zu sein. Ich habe in das Feld "bei" nichts eingetragen, weil ich nicht auf einen bestimmten Wert prüfen möchte (es hilft auch nicht, dort irgend etwas einzutragen). Ich verstehe aber, dass es keine Änderung der Bedingung gibt, denn der Inhalt der SV ist immer unterschiedlich zum Inhalt von "bei".
Müsste dann aber nicht der Sonst Zweig ausgeführt werden, wie es auch "bei Aktualisierung auslösen" der Fall ist?

In diesem Testszenario könnte ich auch "bei Aktualisierung auslösen" nehmen, weil sich der Wert jedes Mal ändert. In einem anderen Fall wird aber eine Variable unregelmäßig geändert und dann möchte ich nur bei tatsächlicher Änderung eine Aktivität ausführen und nicht schon bei der regelmäßigen Aktualisierung.

Mir ist bewusst, dass es schon ein paar ältere Threads gibt, die in eine ähnliche Richtung gehen, aber entweder wurde die Problematik nicht klar herausgearbeitet oder es gab keine Lösung.

Kann mir jemand helfen oder mein ggf. fehlendes Verständnis erweitern?

Einen schönen Sonntag noch!
Gruß Ralf

Benutzeravatar
blackhole
Beiträge: 3730
Registriert: 21.07.2015, 14:03
System: CCU
Hat sich bedankt: 184 Mal
Danksagung erhalten: 587 Mal

Re: Aktivität bei Änderung Systemvariable Typ Zeichenkette

Beitrag von blackhole » 17.09.2017, 11:27

Der Trick ist, hier mit "ODER" und irgendeinem String ("EGAL") zu arbeiten:

Code: Alles auswählen

Bedingung: Wenn...
----------------------------------------------------------------------------
Systemzustand SV.CCU.Status bei NORMAL nur prüfen
ODER
Systemzustand SV.DateTime bei EGAL bei Änderung auslösen
----------------------------------------------------------------------------
SV.DateTime muss so nur irgendeine Änderung erfahren, damit das Programm getriggert wird. Da SV.CCU.Status bei NORMAL ist, ist durch die Oder-Verknüpfung die Bedingung völlig unabhängig vom Inhalt der Variable SV.CCU.Status erfüllt und der DANN-Abschnitt wird ausgeführt.

almrausch
Beiträge: 255
Registriert: 10.12.2016, 21:20
Hat sich bedankt: 2 Mal
Danksagung erhalten: 1 Mal

Re: Aktivität bei Änderung Systemvariable Typ Zeichenkette

Beitrag von almrausch » 17.09.2017, 11:43

Habe ich gemacht und dann wird das Programm gar nicht erst ausgeführt, was für mich auch logisch ist, weil beide Bedingungen auf "nur prüfen" stehen.

Ich möchte, dass eine Aktivität (Dann oder Sonst ist mir egal) NUR DANN ausgeführt wird, wenn sich der Inhalt der SV ändert.

Edit:
Wenn die die SV auf "bei Änderung" stelle, wird der DANN Zweig einmalig ausgeführt. Ist für mich erklärbar, wenn die interne Logik den Inhalt der SV mit "EGAL" vergleicht, was ja beim ersten Mal eine Änderung des Vergleichs ergibt, aber bei weiteren Ausführungen nicht mehr. Es wird dann aber auch nicht etwa der SONST Zweig ausgeführt.

Wie kann es sein, dass ein Programm zur Ausführung kommt, aber weder DANN noch SONST ausgeführt werden? Das sollte doch nicht sein?
Zuletzt geändert von almrausch am 17.09.2017, 11:50, insgesamt 1-mal geändert.
Gruß Ralf

Benutzeravatar
blackhole
Beiträge: 3730
Registriert: 21.07.2015, 14:03
System: CCU
Hat sich bedankt: 184 Mal
Danksagung erhalten: 587 Mal

Re: Aktivität bei Änderung Systemvariable Typ Zeichenkette

Beitrag von blackhole » 17.09.2017, 11:50

almrausch hat geschrieben:... weil beide Bedingungen auf "nur prüfen" stehen.
Ist das so?
almrausch hat geschrieben:Ich möchte, dass eine Aktivität (Dann oder Sonst ist mir egal) NUR DANN ausgeführt wird, wenn sich der Inhalt der SV ändert.
Genau das passiert, wenn Du es so wie von mir beschrieben machst.

almrausch
Beiträge: 255
Registriert: 10.12.2016, 21:20
Hat sich bedankt: 2 Mal
Danksagung erhalten: 1 Mal

Re: Aktivität bei Änderung Systemvariable Typ Zeichenkette

Beitrag von almrausch » 17.09.2017, 11:52

blackhole hat geschrieben:Ist das so?
Jetzt nicht mehr. Zum einen hattest du deinen Beitrag geändert und zum anderen habe ich selbst auf "bei Änderung" umgestellt und dann meinen Beitrag erweitert.

Meinem Ziel komme ich bisher nicht näher ...
blackhole hat geschrieben:Genau das passiert, wenn Du es so wie von mir beschrieben machst.
Eben nicht.

Zur Klarstellung: "bei Aktualisierung" führt zur Ausführung des DANN Zweigs, aber eben auch dann, wenn sich der Inhalt der SV nicht geändert hat, sondern mit gleichem Wert nur aktualisiert wurde.

Die Prüfung "bei Änderung" führt zur Ausführung des Programms, aber weder zur Ausführung von DANN noch von SONST. Und das darf doch eigentlich nicht sein.
Gruß Ralf

Benutzeravatar
blackhole
Beiträge: 3730
Registriert: 21.07.2015, 14:03
System: CCU
Hat sich bedankt: 184 Mal
Danksagung erhalten: 587 Mal

Re: Aktivität bei Änderung Systemvariable Typ Zeichenkette

Beitrag von blackhole » 17.09.2017, 12:02

almrausch hat geschrieben:Zur Klarstellung: "bei Aktualisierung" führt zur Ausführung des DANN Zweigs, aber eben auch dann, wenn sich der Inhalt der SV nicht geändert hat, sondern mit gleichem Wert nur aktualisiert wurde.
Das ist korrekt.
almrausch hat geschrieben:Die Prüfung "bei Änderung" führt zur Ausführung des Programms, aber weder zur Ausführung von DANN noch von SONST. Und das darf doch eigentlich nicht sein.
Bei dem von mir geposteten Programm wird das funktionieren. Das habe ich mehrfach so im Einsatz.
Warum das so ist, habe ich im gleichen Beitrag beschrieben.

almrausch
Beiträge: 255
Registriert: 10.12.2016, 21:20
Hat sich bedankt: 2 Mal
Danksagung erhalten: 1 Mal

Re: Aktivität bei Änderung Systemvariable Typ Zeichenkette

Beitrag von almrausch » 17.09.2017, 12:10

blackhole hat geschrieben:Bei dem von mir geposteten Programm wird das funktionieren. Das habe ich mehrfach so im Einsatz.
Warum das so ist, habe ich im gleichen Beitrag beschrieben.
Das Programm sieht jetzt so aus:
SV Zeichenkette2.jpg
Sowohl SV.DateTime als auch SV.DateTime.LOG werden protokolliert. Im Systemprotokoll sehe ich die Änderungen von SV.DateTime und zeitgleich wird auch lt. Status "letzte Ausführung" das Programm ausgeführt. Aber es gibt keinen Eintrag für SV.DateTime.LOG

Was kan ich noch ändern, prüfen, loggen oder was auch immer? Liegt es evtl. an der 2.27.8?
Gruß Ralf

Benutzeravatar
blackhole
Beiträge: 3730
Registriert: 21.07.2015, 14:03
System: CCU
Hat sich bedankt: 184 Mal
Danksagung erhalten: 587 Mal

Re: Aktivität bei Änderung Systemvariable Typ Zeichenkette

Beitrag von blackhole » 17.09.2017, 12:26

almrausch hat geschrieben:Liegt es evtl. an der 2.27.8?
Ich habe keine Idee warum das bei dir nicht funktioniert. Programm komplett neu anlegen wirst Du ja sicherlich schon versucht haben.
Ansonsten kann ich dir nur sagen, dass es nicht an Firmware 2.27.8 liegt, zu der Zeit hatte ich das schon im Einsatz.

robsdobs
Beiträge: 510
Registriert: 08.08.2015, 22:52
Danksagung erhalten: 1 Mal

Re: Aktivität bei Änderung Systemvariable Typ Zeichenkette

Beitrag von robsdobs » 17.09.2017, 13:13

Kann ich so bestätigen wie Blackhole. Funktioniert bei mir so auch einwandfrei.

Das einzige, was ich anders habe, ist keine Punkte in dem Namen der Systemvariablen.

Es sollten nicht zu viele Programme gleichzeitig auf die selbe Änderung triggern oder parallel ein Programm im Sekundentakt loslaufen. Wenn die CCU am Limit ist, hatte ich es auch schon mal, dass einzelne Programme nicht ordnungsgemäß starteten.

Ein Klassiker ist auch auf Aktualisierung einer Variablen zu triggern, die man im Programm selbst ändert. :)
sehr selten im Forum

BadenPower

Re: Aktivität bei Änderung Systemvariable Typ Zeichenkette

Beitrag von BadenPower » 17.09.2017, 13:25

almrausch hat geschrieben:Bisher war ich davon ausgegangen, dass sich "bei Änderung auslösen" auf die Änderung des Inhalts der SV bezieht,
Nein, nein und immer wieder nein.

Bei "Änderung auslösen" heißt, dass das Programm gestartet wird, wenn sich der Wahrheitsgehalt der Bedingung ändert, also wenn sich in Deinem Beispiel der Wert der Systemvariable:
1. von "" (leere Zeichenkette) auf irgendetwas ändert
2. von irgendetwas auf "" (leere Zeichenkette) ändert.

Der Wahrheitgehalt der Bedingung ändert sich nicht, wenn sich der Inhalt von z.B. "01.01.2018" auf "02.01.2018" ändert.

Somit wird das Programm selbstverständlich nicht gestartet.
.

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“