Aktivität bei Änderung Systemvariable Typ Zeichenkette

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

BadenPower

Re: Aktivität bei Änderung Systemvariable Typ Zeichenkette

Beitrag von BadenPower » 17.09.2017, 19:04

almrausch hat geschrieben:Eine Änderung von 25 zu 30 würde das Programm zwar triggern, aber weder DANN noch SONST ausführen. Für mich ist das eindeutig ein BUG.
Nein, das ist kein Bug, denn der Wahrheitsgehalt Deiner Bedingungen wird eben dadurch nicht geändert.
Und nur wenn sich der Wahrheitsgehalt einer Bedingung ändert wird das Programm abgearbeitet.
almrausch hat geschrieben:Natürlich ist so eine Bedingungsliste keine Lösung, wenn man nicht alle vorkommenden Werte kennt (und dann kann man auch gleich eine Werteliste nehmen, mit der es dieses Problem wohl nicht gibt).
Hier ist es genau so.
Hast Du einer Wertelist mit 1, 2 und 3 und ein Programm

Code: Alles auswählen

WENN
  Werteliste bei 1
DANN
  Mache etwas
SONST
  Mache etwas anderes
dann wird das Programm auch nur ausgeführt, wenn sich der Wert von 1 weg oder auf 1 ändert, aber nicht, wenn sich der Wert von 2 auf 3 oder von 3 auf 2 ändert.

Das mit der Änderung per Skript wäre ein tatsächlich möglicher Ansatzpunkt. Allerdings müßtest Du nicht die RuleCondition(), sondern die entsprechende SingleCondition ändern.
.

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, 19:47

BadenPower hat geschrieben:
almrausch hat geschrieben:Eine Änderung von 25 zu 30 würde das Programm zwar triggern, aber weder DANN noch SONST ausführen. Für mich ist das eindeutig ein BUG.
Nein, das ist kein Bug, denn der Wahrheitsgehalt Deiner Bedingungen wird eben dadurch nicht geändert.
Und nur wenn sich der Wahrheitsgehalt einer Bedingung ändert wird das Programm abgearbeitet.
Das habe ich ja auch verstanden, aber ich wiederhole meine Frage von weiter oben: Warum wird dann trotzdem der Zeitpunkt der letzten Ausführung gesetzt?

Mein bisheriges Verständnis war, dass ein Programm zum Zeitpunkt "letzte Ausführung" auch ausgeführt wurde. Und dann muss entweder DANN oder SONST durchlaufen worden sein. Genau das ist hier aber nicht so. Falsches Verständnis oder Bug?
BadenPower hat geschrieben:dann wird das Programm auch nur ausgeführt, wenn sich der Wert von 1 weg oder auf 1 ändert, aber nicht, wenn sich der Wert von 2 auf 3 oder von 3 auf 2 ändert.
Also hätte ich das gleiche Problem auch bei einer SV vom Typ Zahl, wenn ich auf eine x-beliebige Änderung triggern wollte. Es handelt sich gar nicht um ein spezielles Problem beim Typ Zeichenkette.
Oder allgemein ausgedrückt: Es ist nicht möglich, mit einer einfachen Bedingung einen Trigger für eine beliebige Änderung (nicht Aktualisierung!) einer SV zu erstellen. Man müsste in der Bedingung jede mögliche Zustandsänderung berücksichtigen. Bei Logikwerten und einfachen Wertelisten kein Problem.
BadenPower hat geschrieben:Das mit der Änderung per Skript wäre ein tatsächlich möglicher Ansatzpunkt. Allerdings müßtest Du nicht die RuleCondition(), sondern die entsprechende SingleCondition ändern.
Danke. Bisher ist die Scriptsprache für mich noch überwiegend Theorie. Aber das wird sich ändern.
Gruß Ralf

alchy
Beiträge: 10752
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 672 Mal

Re: Aktivität bei Änderung Systemvariable Typ Zeichenkette

Beitrag von alchy » 17.09.2017, 20:56

Ich bleibe bei meiner vorigen Aussage, spezifiziere jedoch.
BadenPower hat das ja aber schon geschrieben, was den Wahrheitsgehalt betrifft.

Ein Programm aka:
Prg_stringvergleich.jpg
führt zu einem erwartenden Log
Prg_stringvergleich_protokoll.jpg
wenn ich mittels

Code: Alles auswählen

dom.GetObject("Atest_string").State("Start");
die Variable mal auf Start mal auf Run setze usw.

Hätte ich nur einmal das Wenn drin, würde dem nicht so sein. (darum ging es mir)
Das es eventuelle auch ohne Verdopplung funktioniert, wenn es noch eine 2. Bedingung gibt, will ich nicht abstreiten, hab ich nie getestet.
almrausch hat geschrieben:Mein bisheriges Verständnis war, dass ein Programm zum Zeitpunkt "letzte Ausführung" auch ausgeführt wurde. Und dann muss entweder DANN oder SONST durchlaufen worden sein. Genau das ist hier aber nicht so. Falsches Verständnis oder Bug?
Und wenn man sich mein Systemprotokoll anschaut, sieht man am Ende das die Variable 2 x mit dem Wert Start protokolliert wird, jedoch das Programm weder im Dann noch im Sonst zweig landet.
Natürlich hatte ich die Variable da 2 x mittels Script von Start auf Start gesetzt.
Und das ist auch genau der Punkt, wo sich zwar der Zeitstempel der Programmausführung ebenfalls ändert, ohne das etwas getan wird.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

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, 21:13

alchy hat geschrieben:die Variable mal auf Start mal auf Run setze usw.
Das ist aber ein völlig anderes Szenario als das von mir gewünschte. Du hast explizit in der Bedingung die Abfrage auf "Start" drin und änderst lediglich zwischen "Start" und einem anderen Wert. Das funktioniert bei mir auch (letztes Beispiel mit den 10 expliziten Bedingungen).

Ich möchte einen Trigger, der auf jegliche Änderung einer Zeichenketten-SV anspricht, ohne dass ich vorher definieren muss, welche Werte dafür in Frage kommen.
alchy hat geschrieben:Hätte ich nur einmal das Wenn drin, würde dem nicht so sein. (darum ging es mir)
Das es eventuelle auch ohne Verdopplung funktioniert, wenn es noch eine 2. Bedingung gibt, will ich nicht abstreiten, hab ich nie getestet.
Funktioniert bei mir auch nur mit einem WENN. Hast du heute getestet, ob es auch nur mit einem WENN geht oder bist du aus Erfahrung davon ausgegangen, dass die Verdoppelung erforderlich ist?
Ist aber auch nur ein Nebenschauplatz ...
alchy hat geschrieben:Und wenn man sich mein Systemprotokoll anschaut, sieht man am Ende das die Variable 2 x mit dem Wert Start protokolliert wird, jedoch das Programm weder im Dann noch im Sonst zweig landet.
Natürlich hatte ich die Variable da 2 x mittels Script von Start auf Start gesetzt.
Und das ist auch genau der Punkt, wo sich zwar der Zeitstempel der Programmausführung ebenfalls ändert, ohne das etwas getan wird.
Du hast kontrolliert und festgestellt, dass sich der Zeitstempel der Ausführung geändert hat, obwohl es gar keine ÄNDERUNG der Variablen gegeben hat sondern lediglich eine AKTUALISIERUNG?

Was passiert in deinem Programm, wenn du von Start auf Run gesetzt hast und danach auf Stop setzt. Also eine Änderung der Variablen, die nicht die Bedingung ändert. Ändert sich dann auch zeitgleich der Zeitstempel der Ausführung und es wird weder DANN noch SONST ausgeführt?

Es gibt also Programmausführungen ohne Aktivität, obwohl sowohl bei DANN als auch bei SONST Aktivitäten definiert sind? Setzt eine Programmausführung nicht die Erfüllung einer Bedingung voraus? Von manueller Ausführung und ProgramExecute() mal abgesehen ...
Gruß Ralf

alchy
Beiträge: 10752
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 672 Mal

Re: Aktivität bei Änderung Systemvariable Typ Zeichenkette

Beitrag von alchy » 17.09.2017, 21:28

almrausch hat geschrieben: Hast du heute getestet, ob es auch nur mit einem WENN geht oder bist du aus Erfahrung davon ausgegangen, dass die Verdoppelung erforderlich ist?
natürlich heute Test wiederholt.

almrausch hat geschrieben: Was passiert in deinem Programm, wenn du von Start auf Run gesetzt hast und danach auf Stop setzt.
Na was wohl. :wink:
Wenn ich von Start auf Run ändere wird das Sonst ausgeführt
Wenn ich von Run auf Stop ändere wird das Programm zwar getriggert, aber weder Dann noch Sonst ausgeführt, da sich ja das Ergebnis des Vergleiches nicht ändert.
Der Wert der Variablen ist nicht Start, egal ob da Run drin steht oder Stop.
almrausch hat geschrieben: Es gibt also Programmausführungen ohne Aktivität
ja.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

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, 21:47

alchy hat geschrieben:
almrausch hat geschrieben: Es gibt also Programmausführungen ohne Aktivität
ja.
Danke. Das ist für mich eine neue Erfahrung. Ich war bisher davon ausgegangen, dass keine Ausführung erfolgt (und dann auch nicht als letzte Ausführung angezeigt wird), wenn keine Bedingung erfüllt ist. Ich hatte das bisher auch hier im Forum immer so verstanden.

Fazit: Es ist nicht möglich, per Programm auf Änderungen von Variablen zu triggern, wenn nicht explizit auf mögliche Werte abgefragt wird.

Jetzt verstehe ich auch den Sinn dahinter, dass Variablen zunächst auf leer gesetzt werden, wenn man danach auf Änderung triggern will.
Gruß Ralf

Benutzeravatar
fairtv
Beiträge: 220
Registriert: 08.08.2014, 16:57
Wohnort: Bei Erding
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Aktivität bei Änderung Systemvariable Typ Zeichenkette

Beitrag von fairtv » 07.10.2017, 05:33

blackhole hat geschrieben:
alchy hat geschrieben:Ein Stringvergleich funktioniert nur sicher als Trigger, wenn man es doppelt macht.
Diese Aussage ist meines Erachtens nicht ganz korrekt.
Richtig wäre: Ein Stringvergleich funktioniert nur dann als Trigger, wenn er nicht als erste Bedingung in einem Programm aufgeführt ist.
Bei almrausch (und auch in meinen Programmen) ist das gegeben indem als erste Bedingung geprüft wird ob die CCU2 bereit ist.
Beides geht bei mir, allerdings die Variante "als Zweites" nur, wenn dazwischen ein ODER steht. Ein UND, selbst wenn die erste Bedingung true erfüllt, geht nicht.
BadenPower hat geschrieben: 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.
Das wäre ja schön, aber genau das 1. geht bei mir eben nicht. Das Zurücksetzen auf einen Leerstring triggert korrekt, jedoch das Wegsetzen von einem Leerstring triggert das Programm nicht, was bei unbekannten Werten aber erforderlich wäre. Also eine Art Bedingung: !=""
BadenPower hat geschrieben: Der Wahrheitgehalt der Bedingung ändert sich nicht, wenn sich der Inhalt von z.B. "01.01.2018" auf "02.01.2018" ändert.
Das würden wir uns aber wünschen.
Viele Grüße,
fairtv

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 » 07.10.2017, 07:56

Musst du mal an Jens melden. Vielleicht kann er bei einer der folgenden RegaHss Versionen was machen.
sehr selten im Forum

Antworten

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