Die Logik von WebUI - Programmen

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Benutzeravatar
Homoran
Beiträge: 8613
Registriert: 02.07.2013, 15:29
Wohnort: Köln
Danksagung erhalten: 4 Mal

Re: Die Logik von WebUI - Programmen

Beitrag von Homoran » 02.02.2014, 18:06

Hallo Paul,

so hätte ich das Programm auch aufgebaut: Wenn, dann, sonst,wenn,dann, sonst...
Thorsten hat 2x sonst,wenn...

Was mich bei seiner Logik irritiert ist folgendes (gehen wir beim FDK von offen nach geschlossen o. umgekehrt aus. - mit gekippt wird es noch komplizierter.)

Wenn der erste Trigger:Änderung der Variable ...14 von oder nach "gruen" auslösen müsste, müsste zeitgleich auch der 3. Trigger (2. sonst,wenn..-Zeile) Variable ...14 von oder nach "rot" auslösen, da ja die Variable ja von "rot" nach "gruen" (oder umgekehrt) und damit beide Trigger ausgelöst werden müssten.

In der Variante mit nur einer "sonst, wenn.." und einer weiteren "sonst..."-Zeile würde doch nur einmal getriggert, oder??

Liegt da der Hund begraben, dass zweimal (nahezu) zeitgleich getriggert wird?

Gruß
Rainer

Hoffentlich rede ich nicht zu konfus ;-)

[EDIT] sehe gerade vergleichbar wäre bei dir eine weitere multistate = 2 - "sonst,wenn Bedingung)
Alle meine Hinweise sind auf eigene Gefahr umzusetzen. Immer einen Fachmann zu Rate ziehen!

paul53
Beiträge: 2554
Registriert: 26.04.2012, 20:42
Wohnort: Berlin
Danksagung erhalten: 15 Mal

Re: Die Logik von WebUI - Programmen

Beitrag von paul53 » 02.02.2014, 18:21

Habe zum Test den letzten Programmzweig geändert von Sonst... in
Sonst Wenn...
Systemzustend Test_Multistate bei "Wert 2" (Auslösen auf Änderung)
Dann...
Systemzustend Test_String sofort "SV hat Wert 2"

Es funktioniert mit allen 3 Werten !
Versionen: HM-CC-TC 2.1, HM-LC-Sw1 1.9, HM-CC-RT-DN 1.1, HM-MOD-RPI-PCB 1.2.1 (keine CCU)

Benutzeravatar
Homoran
Beiträge: 8613
Registriert: 02.07.2013, 15:29
Wohnort: Köln
Danksagung erhalten: 4 Mal

Re: Die Logik von WebUI - Programmen

Beitrag von Homoran » 02.02.2014, 18:26

Dann kann es ja (fast) nur noch daran liegen:
paul53 hat geschrieben:Das kann ich für meine FW-Version (1.509) nicht bestätigen
oder ccu1, ccu2

Gruß
Rainer
Alle meine Hinweise sind auf eigene Gefahr umzusetzen. Immer einen Fachmann zu Rate ziehen!

paul53
Beiträge: 2554
Registriert: 26.04.2012, 20:42
Wohnort: Berlin
Danksagung erhalten: 15 Mal

Re: Die Logik von WebUI - Programmen

Beitrag von paul53 » 02.02.2014, 18:38

Das unterschiedliche Verhalten kann durchaus von der Firmware abhängen.
Dass der Zeitstempel der auslösenden SV korrekt aktualisiert wird, wurde gecheckt ?
Versionen: HM-CC-TC 2.1, HM-LC-Sw1 1.9, HM-CC-RT-DN 1.1, HM-MOD-RPI-PCB 1.2.1 (keine CCU)

Benutzeravatar
Homoran
Beiträge: 8613
Registriert: 02.07.2013, 15:29
Wohnort: Köln
Danksagung erhalten: 4 Mal

Re: Die Logik von WebUI - Programmen

Beitrag von Homoran » 02.02.2014, 18:40

paul53 hat geschrieben:Dass der Zeitstempel der auslösenden SV korrekt aktualisiert wird, wurde gecheckt ?
kam bisher trotz 2 Anfragen noch kein Feedback

Gruß
Rainer
Alle meine Hinweise sind auf eigene Gefahr umzusetzen. Immer einen Fachmann zu Rate ziehen!

Benutzeravatar
PaulchenPanther
Beiträge: 157
Registriert: 13.06.2015, 12:26
Danksagung erhalten: 1 Mal

Re: Die Logik von WebUI - Programmen

Beitrag von PaulchenPanther » 11.09.2015, 16:52

Hallo,
ich möchte mich hier mal an diesen Thread dran hängen und Euch bitten mir einmal ein Feedback zu geben ob ich die Logik richtig verstanden habe.
- ich glaube ich hab nämlich gerade einen "Knoten im Kopf" und ggf einen Fehler in meinem Progreamm :shock:

Es geht mir nochmal um das Verständnis, wann wird das Programm getriggert und was führt es mit welcher Bedingung dann aus.
CCU-Prog_Luefter_schalten.PNG
Hintergrund:
Das Prog schaltet abhängig von einem 2-Punkt-Regler "LE30(rel-HUM):2" und einer Systemvariablen "LUEFTEN" einen großen Ventilator (350 mm Axiallüfter mit Jalosie) ein oder aus.
Die SysVar "LUEFTEN" selbst wird ebenfalls über 2 andere 2-Punkt-Regler (abhängig von Außen- zu Innentemperatur [°C], und Außen- zu Innenfeuchte [g/cbm]) gesetzt. - sprich wenn es Außen trockner und kühler als Innen ist wird "LUEFTEN=1 bzw. true" gesetzt. -ist hier aber eher Nebensache.

mein aktuelles Problem:
Prinzipiell funzt meine Regelung derzeit einwandfrei, - vermutlich aufgrund der zeitlichen Konstellationen und noch keiner real eingetretener kritischen Wechselbeziehungen!?
Mich irritieren aber mir derzeit unerklärliche Log-Einträge bzgl. der Aktionen aus dem Programm heraus.

Als Beispiel 1:

Code: Alles auswählen

12:12:30	08.09.2015	| B62.Entfeuchtung_LUEFTEN				| NEIN
12:14:14	08.09.2015	| B62.Keller.Entfeuchtung.LE30(rel-HUM):2	| unbekannte Meldung (SET_INVERT=TRUE), Ventil öffnen
12:19:14	08.09.2015	| B62.Keller.Entfeuchtung.Lüfter.Jalosie:1		| Schaltzustand: aus
oder Bsp. 2:

Code: Alles auswählen

09:16:32	11.09.2015	| B62.Entfeuchtung_LUEFTEN				| JA
09:19:11	11.09.2015	| B62.Entfeuchtung_LUEFTEN				| NEIN
09:22:31	11.09.2015	| B62.Entfeuchtung_LUEFTEN				| NEIN
09:24:11	11.09.2015	| B62.Keller.Entfeuchtung.Lüfter.Jalosie:1		| Schaltzustand: aus
09:28:30	11.09.2015	| B62.Entfeuchtung_LUEFTEN				| NEIN
09:34:29	11.09.2015	| B62.Entfeuchtung_LUEFTEN				| NEIN
  • in beiden Bsp. ist der Zustand der SysVar "LUEFTEN=NEIN(false=0)"
  • in Bsp1 ist IMO der Trigger für die Prog-Auslösung das öffnen des Ventils vom 2-Punkt-Regler "LE30(rel-HUM):2".
    genau 5 Min. später kommt aber, was der eingestellten Verzögerungszeit entspricht, der Eintrag "Schaltzustand: aus" vom (oder an den) Aktor "Lüfter.Jalosie:1".
    verstehe ich nicht! - Warum?
    Die Ausführungsbedingung für die Dann-Aktivität an dieser Stelle lautet doch "bei Ventil schließen und bei Prüfung LUEFTEN=1" (also bei "JA").
    wieso erfolgt dann dennoch anscheinend die Aktivitätsausführung ?
  • im Bsp2 ist IMO der Trigger für die Prog-Auslösung der Wechsle des Zustands der SysVar "LUEFTEN" von 1 nach 0(also von true/JA nach false/NEIN) um 09:19:11 Uhr.
    - dass hier um 09:22:31 ein weiterer Eintrag mit "NEIN" (und danach noch weitere) existiert liegt daran, dass das Programm zum setzen der SysVar "LUEFTEN" Zusätzlich timer-gesteuert alle 351 Sec. ausgeführt wird. - sozusagen als Aorta :idea:
    Genau 5 Min. später kommt auch hier die Aktivitätsausführung des Aktors "Lüfter.Jalosie:1".
    Könnte ich mir ja ggf. noch erklären, da die zugehörige Ausführungsbedingung (also Wenn.../ODER) ja auf die SysVar "LUEFTEN" achtet.
    Was mir aber auch hier unklar ist, die Bedingung steht auf "bei Änderung auslösen" bei "NEIN".
    - die Änderung findet aber statt bei Ausgangssituation JA nach NEIN !?
Bitte helft mir beim Verständnis :roll:
Ich hab es anscheinend und leider trotz umfangreicher Treads und Lesen hier im Forum (und anderen Stellen im Netz und ...) immer noch nicht verstanden :(

Viel Dank im Voraus
Zuletzt geändert von PaulchenPanther am 12.09.2015, 23:07, insgesamt 2-mal geändert.
v.G./PP

paul53
Beiträge: 2554
Registriert: 26.04.2012, 20:42
Wohnort: Berlin
Danksagung erhalten: 15 Mal

Re: Die Logik von WebUI - Programmen

Beitrag von paul53 » 11.09.2015, 17:27

Die Auslösung erfolgt bei jeder Änderung der SV "LUEFTEN" oder des 2-Punkt-Reglers "LE30(rel-HUM):2".
Es ist allerdings etwas umständlich programmiert. Dies tut das gleiche:

Code: Alles auswählen

Wenn...
Regler bei Ventil schließen (bei Änderung auslösen)
ODER
SV "LUEFTEN" bei NEIN (bei Änderung auslösen)
Dann...
Lüfter verzögert aus
Sonst...
Lüfter verzögert ein
Versionen: HM-CC-TC 2.1, HM-LC-Sw1 1.9, HM-CC-RT-DN 1.1, HM-MOD-RPI-PCB 1.2.1 (keine CCU)

Benutzeravatar
Sammy
Beiträge: 9172
Registriert: 09.09.2008, 20:47
Hat sich bedankt: 15 Mal
Danksagung erhalten: 174 Mal

Re: Die Logik von WebUI - Programmen

Beitrag von Sammy » 12.09.2015, 11:37

"bei Änderung" und "bei Aktualisierung" lösen immer aus, wenn sich der Wahrheitsgehalt der Programmzeile ändert oder aktualisiert wird, unabhängig davon, ob die Bedingungszeile erfüllt ist oder nicht!
Nachdem dadurch das ganze Programm getriggert wird, werden die Bedingungen von oben beginnend STATISCH analysiert, d.h. es zählt nur der Zustand der Bedingung, unabhängig von Änderung oder Aktualisierung.
Eine Bedingungszeile "bei Änderung Fenster offen" löst also beim Öffnen und beim Schließen aus, ist aber nur nach dem Öffnen wahr.

Dein Beispiel 1 wird bereits durch die erste Zeile (Lüften = Nein) getriggert und die 5 Minuten Verzögerung beginnen zu laufen.
Durch das Schließen des Ventils wird das Programm erneut getriggert, der erste ODER-Block ist zwar falsch, aber der zweite ODER-Teil immer noch erfüllt, weshalb die Verzögerungszeit neu gestartet wird (Häkchen im DANN ist gesetzt).

Das steht aber auch alles so in den Erklärungs-Threads zur Programmlogik beschrieben.

Gruß Sammy
Links: CCU-Logik, Tipps für Anfänger, WebUI-Doku, Expertenparameter, virtuelle Aktorkanäle
Inventur vom 22.01.14: 516 Kanäle in 165 Geräten, 132 Programme, 270 Direkte Verknüpfungen
Ich übernehme für alle von mir gegebenen Hinweise, Tipps und Links keine Haftung! Das Befolgen meiner Tipps ist nur für Fachkundige gedacht und erfolgt auf eigene Gefahr!

Benutzeravatar
PaulchenPanther
Beiträge: 157
Registriert: 13.06.2015, 12:26
Danksagung erhalten: 1 Mal

Re: Die Logik von WebUI - Programmen

Beitrag von PaulchenPanther » 12.09.2015, 17:23

Hallo paul53 / Sammy,
zunächst 1-k Dank für die schnelle AW.

@ paul53, bist Du sicher dass ...
paul53 hat geschrieben:Es ist allerdings etwas umständlich programmiert. Dies tut das gleiche:

Code: Alles auswählen

Wenn...
Regler bei Ventil schließen (bei Änderung auslösen)
ODER 
SV "LUEFTEN" bei NEIN (bei Änderung auslösen)
Dann...
Lüfter verzögert aus
Sonst...
Lüfter verzögert ein

das gleich ist wie (mein Prog.)

Code: Alles auswählen

Wenn...
   Regler bei Ventil schließen (bei Änderung auslösen)
   UND
   SV "LUEFTEN" bei JA (nur prüfen)
ODER 
   SV "LUEFTEN" bei NEIN (bei Änderung auslösen)
Dann...
   Lüfter verzögert aus
Sonst, wenn...
   ...
IMO Sinn der ersten Wenn-Bedingung soll sein, dass der Lüfter ausgeschaltet wird wenn
  1. einerseits die SysVar "LUEFTEN" von 1 nach 0, also von "JA" nach "NEIN" wechselt,
  2. oder andererseits der Regler das Ventil schließt und in dieser Situation die SV "LUEFTEN" auf "JA" steht (also = 1 ist).
    Wenn die SV "LUEFTEN" allerdings auf "NEIN" steht, dann soll diese Aktivität nicht ausgeführt werden.
    - deshalb hatte ich dort die Prüfbedingung vorgesehen.
    oder hab ich da was falsch verstanden ?
@ Sammy, ggf. habe ich (aufgrund Übersichtlichkeit) zu viel Log-Text weggelassen :oops:

Beim Bsp1 sind vor 12:12:30 Uhr noch eine ganze Menge mehr Einträge mit "| B62.Entfeuchtung_LUEFTEN | NEIN".
- nämlich genau wie gesagt im Abstand von 351 Sec. - also meine Aorta.
- jedoch führt keiner dieser Aufrufe zu einem 5 Min. späteren Eintrag von "B62.Keller.Entfeuchtung.Lüfter.Jalosie:1".
- was ja auch (IMO) korrekt ist, da die SV "LUEFTEN" ja die ganze Zeit im Zustand "NEIN" ist und sich nicht geändert hat.
- demnach kein Trigger für einen Prog.-Start und auch keine Aktivität.

Um es nochmal deutlicher zu machen hab ich nachfolgend eine längere Sequenz aus dem Log ausgeschnitten...
(musste leider einen anderen Zeit-Bereich nehmen, glaube aber das ist egal)

Code: Alles auswählen

06:58:55	12.09.2015	|	B62.Entfeuchtung_LUEFTEN	|	NEIN
07:04:55	12.09.2015	|	B62.Entfeuchtung_LUEFTEN	|	NEIN
07:10:53	12.09.2015	|	B62.Entfeuchtung_LUEFTEN	|	NEIN
07:16:52	12.09.2015	|	B62.Entfeuchtung_LUEFTEN	|	NEIN
07:22:51	12.09.2015	|	B62.Entfeuchtung_LUEFTEN	|	NEIN
07:23:23	12.09.2015	|	B62.Keller.Entfeuchtung.LE30(rel-HUM):2	|	unbekannte Meldung (SET_INVERT=TRUE), Ventil schließen
07:28:23	12.09.2015	|	FunkZwSt-01 (LEQ0410320:1)	|	Schaltzustand: aus
07:28:23	12.09.2015	|	B62.Keller.Entfeuchtung.Lüfter.Jalosie:1	|	Schaltzustand: aus
07:28:50	12.09.2015	|	B62.Entfeuchtung_LUEFTEN	|	NEIN
07:34:49	12.09.2015	|	B62.Entfeuchtung_LUEFTEN	|	NEIN
07:40:48	12.09.2015	|	B62.Entfeuchtung_LUEFTEN	|	NEIN
07:46:47	12.09.2015	|	B62.Entfeuchtung_LUEFTEN	|	NEIN
07:52:46	12.09.2015	|	B62.Entfeuchtung_LUEFTEN	|	NEIN
   (25 Zeilen gelöscht)
10:28:20	12.09.2015	|	B62.Entfeuchtung_LUEFTEN	|	NEIN
10:34:19	12.09.2015	|	B62.Entfeuchtung_LUEFTEN	|	NEIN
10:40:18	12.09.2015	|	B62.Entfeuchtung_LUEFTEN	|	NEIN
10:46:17	12.09.2015	|	B62.Entfeuchtung_LUEFTEN	|	NEIN
10:52:17	12.09.2015	|	B62.Entfeuchtung_LUEFTEN	|	NEIN
10:54:40	12.09.2015	|	B62.Keller.Entfeuchtung.LE30(rel-HUM):2	|	unbekannte Meldung (SET_INVERT=TRUE), Ventil öffnen
10:54:45	12.09.2015	|	FunkZwSt-01 (LEQ0410320:1)	|	Schaltzustand: ein
10:58:15	12.09.2015	|	B62.Entfeuchtung_LUEFTEN	|	NEIN
10:59:40	12.09.2015	|	B62.Keller.Entfeuchtung.Lüfter.Jalosie:1	|	Schaltzustand: aus
11:04:14	12.09.2015	|	B62.Entfeuchtung_LUEFTEN	|	NEIN
11:07:53	12.09.2015	|	B62.Entfeuchtung_LUEFTEN	|	NEIN
11:10:13	12.09.2015	|	B62.Entfeuchtung_LUEFTEN	|	NEIN
11:16:12	12.09.2015	|	B62.Entfeuchtung_LUEFTEN	|	NEIN
@Beide, um mein Verständnisproblem noch mal zu präzisieren:
  • ich verstehe nicht, warum hier (s. o. im Log) die Aktivität "B62.Keller.Entfeuchtung.Lüfter.Jalosie:1" ausgeführt wird, wo die Bedingung doch eigentlich besagt, - mache das nur

    Code: Alles auswählen

    Wenn...
       Regler bei Ventil schließen (bei Änderung auslösen)
       UND
       SV "LUEFTEN" bei JA (nur prüfen)
    
  • dass das Prog vom Schließen (um 07:23:23) bzw. vom Öffnen (um 10:54:40) des Ventils getriggert wird ist mir klar.
  • dass daraufhin auch der "FunkZwSt-01" aus-, bzw. eingeschaltet wird, ist I.O. und wird aus einem anderen Prog. gesteuert, was ähnlich aufgebaut ist wie dieses hier (falls es interessiert s. Anhang)
  • dass aber trotzdem die Aktivität "B62.Keller.Entfeuchtung.Lüfter.Jalosie:1 | Schaltzustand: aus" anscheinend ausgeführt wird, das ist mir vollkommen unklar :shock:
Ich hatte es so verstanden, dass durch die Und-Verknüpfung der ersten Wenn-Bedingung beide Ereignisse zutreffen müssen, - also das Ventil auf Schließen schaltet und die SV "LUEFTEN" auf "JA" steht, damit im Prog.-Ablauf die Dann-Aktivität ausgeführt wird.
- trifft das nicht zu, dann wird (würde) die Sonst-Aktivität ausgeführt.
- da es aber keine reine Sonst-Aktivität in diesem Prog. gibt, wird auch nichts ausgeführt (sollte jedenfalls nicht :? ).

Was habe ich da jetzt falsch oder nicht verstanden ?!?
- sorry, ich hoffe ich hab mein Problem jetzt verständlicher dargestellt. - ist aber schon ganz schön tricky diese Logik :|

Dank schon mal im Voraus für Eure Hilfe
Dateianhänge
CCU-Prog_LE30_schalten.jpg
auslösendes Prog. für "FunkZwSt-01"
v.G./PP

Benutzeravatar
Sammy
Beiträge: 9172
Registriert: 09.09.2008, 20:47
Hat sich bedankt: 15 Mal
Danksagung erhalten: 174 Mal

Re: Die Logik von WebUI - Programmen

Beitrag von Sammy » 13.09.2015, 13:55

Die Lüften=NEIN Einträge triggern das Programm nicht, weil keine Aänderung vorliegt.
Die Entfeuchtung Ventil schließen Meldung scheint aber sehr wohl ein Änderung zu sein und triggert deshalb das Programm. Dabei ist es völlig egal, in welcher Bedingung oder Verschachtelung die Bedingungszeile steht und ob sie selbst oder das ganze Konstrukt erfüllt ist. Die Änderung triggert das Programm als Ganzes!!!
Jetzt wo es getriggert ist, folgt die Bedingungsprüfung:
Der erste ODER-Block mit dem UND ist zwar nicht erfüllt, aber das "Lüften = NEIN" (Auslösen auf Änderung) ist doch erfüllt! Deshlab wird das DANN ausgeführt.
Du scheinst immer noch nicht verstanden zu haben dass Triggerung und Bedingungsauswertung komplett getrennt zu betrachten sind und die Zusätze in den Zeilen (auf Änderung) überhaupt nichts mit der Bedingung selbst zu haben.

Du solltest die Erklärungen etwas genauer lesen...

Gruß Sammy
Links: CCU-Logik, Tipps für Anfänger, WebUI-Doku, Expertenparameter, virtuelle Aktorkanäle
Inventur vom 22.01.14: 516 Kanäle in 165 Geräten, 132 Programme, 270 Direkte Verknüpfungen
Ich übernehme für alle von mir gegebenen Hinweise, Tipps und Links keine Haftung! Das Befolgen meiner Tipps ist nur für Fachkundige gedacht und erfolgt auf eigene Gefahr!

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“