Mehrere Wenn-Bedingungen werden nicht richtig geprüft?

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

pakka
Beiträge: 11
Registriert: 30.11.2016, 16:27

Mehrere Wenn-Bedingungen werden nicht richtig geprüft?

Beitrag von pakka » 09.03.2018, 09:44

Hallo,

ich nutze Homematic (mit Raspberry CCU) für die Steuerung eines Tormotors.
Dazu habe ich mehrere Bedingungen geschachtelt:

Wenn: Ein Zeitpunkt erreicht ist
UND
Das System auf auto-Betrieb steht (Systemvariable bool automatisch/manuell)
UND
Das Tor offen ist (Systemvariable bool Tor-offen)

ODER
Tasten gedrückt werden... (siehe Bild)

Dann: wird das Tor geschlossen, Systemvariable Tor-offen auf zu gesetzt.

Mein Problem ist jetzt, dass die erste Bedingung immer als WAHR eingestuft wird, egal ob meine Variable auf automatisch oder manuell steht.
Aber das kann doch eigentlich nicht sein!? Kann das jemand mal bei sich testen, oder erklären?? Ist die Angabe "nur prüfen" nicht das richtige?
Mein Verständnis von Logik ist jedenfalls hart erschüttert....
Danke schon mal vorab!
Dateianhänge
Unbenannt.PNG
Bedingungen

Sven_A
Beiträge: 4156
Registriert: 26.01.2016, 08:14
System: Alternative CCU (auf Basis OCCU)
Wohnort: Renningen
Hat sich bedankt: 348 Mal
Danksagung erhalten: 284 Mal

Re: Mehrere Wenn-Bedingungen werden nicht richtig geprüft?

Beitrag von Sven_A » 09.03.2018, 09:50

Und du bist dir sicher das der erste UND Block erkannt wird? Woher weißt du das das nicht einer der beiden anderen Blöcke ist? Die werden ja als nächstes geprüft wenn der erste UND Block ungültig ist.

Da du keinerlei Infos zum Zeitpunkt und Art deines Testfalls schilderst kann man dir auch keine klare Anwort geben. Und was im Zeitmodl drin steht verschweigst du uns auch.

Mein Tip: Schmeiß mal alles nach dem ersten ODER raus, so das nur der obere Block da steht, und teste nochmal.

Gruß,
Sven

=== Nachtrag ===
Ansonsten, wenn du wirklich meinst du bist dir zu 100% sicher: Programm komplett löschen, und komplett neu anlegen. Es gab schon Fälle da waren Programme durch nachträgliche Änderungen einfach kaputt, sahen gut aus, und haben NICHT das getan was drin stand.

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

Re: Mehrere Wenn-Bedingungen werden nicht richtig geprüft?

Beitrag von Sammy » 09.03.2018, 09:54

Oder wird das Programm einfach nur manuell gestartet und daher das erste Dann ausgeführt?
Hast Du wirklich um 22:30 auf die Auslösung des Programms gewartet?
Oder wurden Variablendefinitionen nach der Einbindung in das Programm nachträglich nochmal geändert?
Wenn alles unerklärlich bleibt, alles löschen und Programm neu anlegen.
Ich vermute allerdings, dass der Input_Tor_Öffner auf EIN steht, wenn Du testest. Das würde das Verhalten auch erklären.
Die Tipps für Anfänger hast Du gelesen?

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!

pakka
Beiträge: 11
Registriert: 30.11.2016, 16:27

Re: Mehrere Wenn-Bedingungen werden nicht richtig geprüft?

Beitrag von pakka » 09.03.2018, 10:36

Hallo Sammy,

danke, es war der Input_Tor_Öffner! Ich habe jetzt auf "Schaltzustand: aus" umgestellt. Damit scheint es zu klappen. Aber verstehen tu ich es nicht :(
Warum ist die Prüfung Input_Tor_Öffner bei Schaltzustand: ein, bei Änderung auslösen WAHR, wenn in dem oberen Block die Zeitsteuerung anspringt und es bei dem Schalter gar keine Änderung gab?

Benutzeravatar
JRiemann
Beiträge: 3903
Registriert: 12.11.2015, 21:05
Wohnort: Aurich
Danksagung erhalten: 3 Mal

Re: Mehrere Wenn-Bedingungen werden nicht richtig geprüft?

Beitrag von JRiemann » 09.03.2018, 10:50

Vor einigen Tagen habe ich bereits versucht einem anderen User den Ablauf zu erklären.
Darum antworte Ichhier einfach mit einer Kopie der damaligen Erklärung:

Programm laufen nur für die Dauer eines Durchlaufs nachdem sie ausgelöst wurden. Danach ruhen sie und warten auf das nächste triggern/auslösen.
Im Programm unterscheidet man zwischen Auslöser und Bedingung. Ein Programm kann per „bei Aktualisierung“ oder „bei Änderung“ ausgelöst werden. Bei Zeitmodulen gibt es noch „zum Zeitpunkt auslösen“ und bei Tasten „Tastendruck kurz/lang. Beispiel:

Code: Alles auswählen

WENN - Systemvariable - S10 PV-Produktion - größer 1000 Watt - bei Änderung auslösen
1000 Watt bei Änderung bildet hier die auslösende Option. Wenn sich der Wert von unter 1000 auf über 1000 oder von über 1000 auf unter 1000 ändert wird ein Programmdurchlauf ausgelöst.
Der Durchlauf startet IMMER in der 1. Zeile des Programms. Dabei werden der Reihe nach die Bedingungen geprüft. Eine gefundene erfüllte Bedingung sorgt dafür das das folgende DANN abgearbeitet und das Programm beendet wird. Dabei werden evtl. noch weitere enthaltene Bedingung und Blöcke nicht mehr geprüft!! Ohne erfüllte Bedingung wird ein evtl. vorhandenes SONST ausgeführt und der Durchlauf beendet. Ist weder eine erfüllte Bedingung noch ein SONST vorhanden endet der Durchlauf ohne ausgeführte Aktion.

größer 1000 Watt bildet in diesem Beispiel die Bedingung die bei einem Durchlauf geprüft wird.
Die Bedingung ist erfüllt wenn zu Zeitpunkt des Durchlaufs der Wert über 1000 Watt liegt. Liegt der Wert unter 1000 Watt ist die Bedingung folglich nicht erfüllt.
Das Prüfen der Bedingung erfolgt bei jedem Durchlauf ab der 1. Zeile im Programm abwärts, ganz egal welches Objekt in welcher Zeile den Durchlauf ausgelöst hat.

"Bei Aktualisierung auslösen" verhält sich identisch zu "bei Änderung auslösen". Zusätzlich wird aber auch ein Durchlauf ausgelöst wenn das auslösende Objekt seine Status aktualisiert. Es reicht also das der vorherrschenden Status nochmals bestätigt wird. Bei Geräten wie einem Temperatursensor erfolgt ca. alle 6 Minuten eine Statusmeldung. Das Programm würde also alle 6 Minuten durchlaufen werden.

"nur prüfen" löst nie einen Durchlauf aus. Die Bedingung dieser Zeile wird aber bei jedem Durchlauf geprüft wie alle anderen auch.
Viele Grüße!
Jörg

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

Re: Mehrere Wenn-Bedingungen werden nicht richtig geprüft?

Beitrag von Sammy » 09.03.2018, 10:56

Hättest Du die Tipps für Anfänger und insbesondere die Links zur Logik der CCU gelesen, wüsstest Du, warum das so ist.
Es haben sich schon mehrere Leute viel Mühe gemacht, das ausführlich und mit Bildern zu erklären. Es muss einfach nur gelesen werden. Daher wird quasi auch ständig auf das Lesen dieser Tipps hingewiesen.

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!

DrTob
Beiträge: 3426
Registriert: 29.10.2010, 08:24
Danksagung erhalten: 5 Mal

Re: Mehrere Wenn-Bedingungen werden nicht richtig geprüft?

Beitrag von DrTob » 09.03.2018, 11:13

pakka hat geschrieben: Warum ist die Prüfung Input_Tor_Öffner bei Schaltzustand: ein, bei Änderung auslösen WAHR, wenn in dem oberen Block die Zeitsteuerung anspringt und es bei dem Schalter gar keine Änderung gab?
Weil das „bei Änderung auslösen“ nicht Teil der Bedingung ist. Die Bedingung ist nur „Toroffner = ein“.

pakka
Beiträge: 11
Registriert: 30.11.2016, 16:27

Re: Mehrere Wenn-Bedingungen werden nicht richtig geprüft?

Beitrag von pakka » 09.03.2018, 11:57

Hallo zusammen,
ich habe die TIpps und Links zur Logik gelesen. Bin anscheinend nur zu doof es auf meinen Fall umzumünzen..
Im Programm unterscheidet man zwischen Auslöser und Bedingung
Das heißt für mich, dass der Taster (Input_Tor_Öffner) ein Auslöser ist (bei Änderung also korrekt nach den Beispielen), die zusätzliche Frage, ob das Tor offen ist, eine zusätzliche Bedingung (nur Prüfung, für mich auch richtig).
Aber dieser Part ist doch durch das ODER getrennt von dem Zeit-Auslöser.

Daher verstehe ich immer noch nicht die Verknüpfung zwischen den für mich logisch getrennten Bedingungen durch die ODER-Struktur.
Weil das „bei Änderung auslösen“ nicht Teil der Bedingung ist
Bedeutet das etwa, dass wenn der Zeitauslöser den Programmdruchlauf startet, der Taster abgefragt wird obwohl er nur bei Änderung auslösen soll? Mutiert hier der Auslöser zur Bedingung?

DrTob
Beiträge: 3426
Registriert: 29.10.2010, 08:24
Danksagung erhalten: 5 Mal

Mehrere Wenn-Bedingungen werden nicht richtig geprüft?

Beitrag von DrTob » 09.03.2018, 12:10

Nein, hier mutiert nichts. Es ist von Anfang an eine Bedingung, bei der du zusätzlich definiert hast „wenn sich das Ergebnis dieser Bedingung ändert, dann löse das Programm aus“. Dieser Zusatz hat aber nichts mit der Bedingung an sich zu tun. Er führt nur zur Auslösung des Programms.

Auslösen und abarbeiten sind zwei unabhängige Schritte.

Benutzeravatar
JRiemann
Beiträge: 3903
Registriert: 12.11.2015, 21:05
Wohnort: Aurich
Danksagung erhalten: 3 Mal

Re: Mehrere Wenn-Bedingungen werden nicht richtig geprüft?

Beitrag von JRiemann » 09.03.2018, 12:15

In Deinem Programm sind 3 Auslöser:
1: Uhrzeit 22:30
2: Tastendruck kurz
3: Input_Tor_öffner

Nehmen wir Dein Programm:

WENN - Geräteauswahl _ Input_Tor_Öffner - Schaltzustand EIN - bei Änderung auslösen

Der "Schaltzustand" ist der Auslöser. JEDER Wechsel von AUS zu EIN oder EIN zu AUS löst den Programmdurchlauf aus.
"Schaltzustand EIN" ist die Bedingung. EIN = erfüllt, AUS = falsch
Der Durchlauf startet IMMER in der ersten Zeile des Programms. Von oben nach unten werden jetzt der Reihe nach die Zeilen auf erfüllte Bedingungen überprüft bis eine erfüllte Bedingung gefunden wird oder die letzte Zeile erreicht ist.
Wird irgendwo im Programm eine erfüllte Bedingung gefunden, wird das folgende DANN ausgeführt. Ohne erfüllte Bedingungen wird ein vorhandenes SONST ausgeführt. Trifft beides nicht zu wird der Durchlauf ohne eine Aktion bei erreichen der letzten Zeile beendet.
Wird ein erfüllter Block gefunden endet damit auch die Überprüfung. Alle evtl. noch nicht überprüften Blöcke und Zeilen bleiben dann unbeachtet.

Die drei getrennten Blöcke bilden jeweils eine "Gemeinschaftsbedingung". Beide Zeile müssen erfüllt sein damit der gesamte Block erfüllt ist und dadurch ein DANN angestoßen wird. Aber egal aus welcher Zeile die Auslösung getriggert wird, auch die anderen Blöcke werden geprüft wie oben beschrieben. Damit jeder Block nur für sich arbeitet müsste aus jedem Block ein eigenes Programm erstellt werden.
Viele Grüße!
Jörg

Antworten

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