Logikfrage Verschachteln UND / ODER

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

Antworten
cofh
Beiträge: 60
Registriert: 16.12.2017, 12:29

Logikfrage Verschachteln UND / ODER

Beitrag von cofh » 17.01.2019, 09:10

Hallo,

ich habe hier mal ein WebUI Programm was augenscheinlich erstmal funktioniert. Allerdings hat mich die CCU heute morgen kurz ausgesperrt ohne Schlüssel und ich möchte dem auf den Grund gehen.

Mein Ziel ist folgendes:
Wenn mein Fingerabdrucksensor "TürSchnittstelleEkey" das signal "öffnen" sendet UND mindestens eine der Bedingungen erfüllt ist (Keymatic status unbekannt, Keymatic abgeschlossen, Keiner Anwesend, Ein Zähler ist zu hoch) soll die Keymatic "Türöffner Haustür" angesteuert werden und die Tür entriegeln.

Passt die Logik so oder habe ich irgendwas übersehen bzw missachtet? Umlaute in den Geräten sind ein Problem?

Wie gesagt, ich möchte mich ungern aussperren. Ansonsten würde ich das einfach eine längere Zeit beobachten.
2019-01-17_09-02-22.jpg

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

Re: Logikfrage Verschachteln UND / ODER

Beitrag von Sven_A » 17.01.2019, 09:38

Von dem was du erzählst passt dein Programm... Einzig das mit dem Zähler ist Missverständlich. In deinem Programm steht "ist gleich 3", der muss also genau 3 sein, nicht 2, und nicht 4. Wenn das deiner Anforderung entspricht passt das eigentlich.

Aber es gibt ja auch den Zustand: Tüer ist nur ins Schloss gefallen. Keymatic ist dann "Auf". Du kommst aber trotzdem nichtmehr rein.
Den wird deine Keymatic gehabt haben, und der steht hier nicht.

Wenn alles andere also unwahr war ist klar das du nichtmehr reingekommen bist.

cofh
Beiträge: 60
Registriert: 16.12.2017, 12:29

Re: Logikfrage Verschachteln UND / ODER

Beitrag von cofh » 17.01.2019, 09:58

Danke für die schnelle Antwort.
Ich hab in der Tat nicht alle Randbedingungen erläutert weil sie für dieses eigentliche Problem nicht relevant sind, ich reiche das aber gerne nach:

Zähler:
Der Zähler wird über ein Skript gesteuert welches bei jedem Aufruf den Zähler inkrementiert. Wenn er größer als 3 wird wird er im Script wieder auf 0 zurückgesetzt.
Zusätzlich wird der Zähler auch zurückgesetzt wenn die Tür tatsächlich geöffnet wurde (Fensterkontakt).

Damit möchte ich erreichen daß in jedem Falle nach 3x erfolglosem Aufsperren die Keymatic angesprochen wird.

Keymatic Zustand:
Wenn die Tür nur ins Schloss gefallen ist reicht es wenn die Ekey Anlage nur das Relais für die Türfalle ansteuert. Das geschieht im Prinzip immer wenn der richtige Fingerabdruck eingelesen wurde. Dazu benötige ich dann keine Homematic. Damit möchte ich Duty Cycle und Keymatic Batterien sparen bzw. Verschleiß vorbeugen.

Was mir heute morgen passiert ist:
Tür war per Keymatic verschlossen, Keymatic wurde aber beim öffnen nicht angesprochen. Auch nicht beim mehrmaligen öffnen. Bis heute morgen war lediglich die Abfrage "verschlossen" oder "Zustand unbekannt" drin. In pocketcontrol konnte ich zum Glück nachvollziehen was Sache war: Homematic status für die Keymatic war "offen" statt verschlossen.
Den Zähler usw habe ich erst nach dem Vorfall implementiert. Die Idee ist, wie oben schon erklärt, nach 3 Erfolglosen Versuchen die Keymatic zwangszuöffnen.


edit: hab aber eben nochmal über den Zähler nachgedacht und in der Tat macht ein größer gleich hier mehr sinn. Das Zählerscript habe ich auch angepasst daß der Zähler nicht alleine Zurückgesetzt wird sondern nur durch den Türkontakt. Damit würde ich im Fehlerfalle ab dem dritten Fehlversuch jedesmal die Keymatic ansprechen anstatt wieder 2 Leerdurchgänge zu schalten.

cofh
Beiträge: 60
Registriert: 16.12.2017, 12:29

Re: Logikfrage Verschachteln UND / ODER

Beitrag von cofh » 17.01.2019, 17:28

Nochmal ein update:
Hab mich nach den o.g. Änderungen erneut ausgeschlossen.
Es scheint daß der Zweite mit UND verknüpfte Block und den Verschachtelten ODER doch nicht so abgearbeitet wird wie es logisch erscheint.

Hab den Block jetzt rausgenommen und die Entscheidung an eine neue Systemvariable gehangen die mit den gleichen Oder Bedingungen verknüpft ist.

Bratmaxe
Beiträge: 1573
Registriert: 28.05.2015, 12:48
Wohnort: Willich
Hat sich bedankt: 4 Mal
Danksagung erhalten: 10 Mal

Re: Logikfrage Verschachteln UND / ODER

Beitrag von Bratmaxe » 18.01.2019, 09:14

Wie und Wann setzt sich der Fingerabdrucksensor denn wieder zurück auf "schließen"?
Evtl. sollte im den Programm "bei aktualisierung Auslösen" gewählt werden, je nachdem wie wann und wer das zurück setzt
Gruß Carsten

cofh
Beiträge: 60
Registriert: 16.12.2017, 12:29

Re: Logikfrage Verschachteln UND / ODER

Beitrag von cofh » 18.01.2019, 17:45

Der Ekey Eingang wird zurückgesetzt wenn das Relais abfällt. ca. nach 5 Sekunden. Das passt aber soweit.
Nachdem es heute mittag meiner Frau auch passiert ist (Desaster!) hab Ichs mir eben nochmal angesehen und habe festgestellt daß die alberne Keymatic aus irgendeinem Grund beim Abschließen nur sporadisch die Endlage erreicht hat (Quittungston). Demnach hat sie den Status "entriegelt" beibehalten was natürlich völlig deppert ist. Es war ja verriegelt aber eben nicht bis in die Endlage. Ich habs in den Gerätesettings um 5° korrigiert und jetzt gehts wieder prima.
Werde wohl langfristig noch einen Mikroschalter einbauen um die Verriegelung zusätzlich zu überwachen wenn man sich d nicht drauf verlassen kan. Zum Glück habe ich noch ein paar Adern hinter dem Schloss liegen...

P4trick
Beiträge: 16
Registriert: 13.03.2018, 06:46

Re: Logikfrage Verschachteln UND / ODER

Beitrag von P4trick » 29.01.2019, 09:17

cofh hat geschrieben:
17.01.2019, 17:28

Es scheint daß der Zweite mit UND verknüpfte Block und den Verschachtelten ODER doch nicht so abgearbeitet wird wie es logisch erscheint.
Hallo cofh,

ich kann bestätigen dass auch ich hier ein Problem habe oder einfach zu doof bin. Ich hatte eine ähnliche Verschachtelung die so nicht geklappt hat. Ich musste dann aus einem, zwei Programme machen damit es geklappt hat wie ich es wollte.

Vielleicht gibts ja hier Pro´s die zu der Logik nochmal was sagen können was uns vielleicht hilft.

Gruß
Patrick

manfredh
Beiträge: 4155
Registriert: 09.09.2012, 10:41
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 78 Mal
Danksagung erhalten: 301 Mal

Re: Logikfrage Verschachteln UND / ODER

Beitrag von manfredh » 29.01.2019, 10:22

Der Knackpunkt ist, dass Programme nicht ständig laufen und die Bedingungen prüfen.

Sie werden vielmehr durch ein einzelnes, im Programm enthaltenes, Ereignis zum einmaligen Lauf gestartet und arbeiten erst dann die Bedingungen ab. Von oben nach unten, bis die erste passt. Dann geht's wieder in die Koje.

Und dieses einzelne Ereignis, das das Programm startet ist JEDE EINZELNE ZEILE des Programms, hinter der NICHT "nur prüfen" steht.

Betrachten wir uns mal die letzte Zeile der Bedingung, "Zaehler_Var_Tueroeffnungen gleich 3, "bei Änderung auslösen":

Ich habe "bei Änderung auslösen" deshalb fett geschrieben, weil das bestimmt, ob diese einzelne Zeile das Programm AUSLÖSEN kann. Und die Auslösung (zum oben beschriebenen einmaligen Durchlauf mit Prüfung der Bedingungen) geschieht, wenn sich der definierte Wert ÄNDERT (eben bei ÄNDERUNG AUSLÖSEN).

Also wird das Programm auch ausgelöst (zum einmaligen Lauf gestartet), wenn der Wert die 3 nach oben oder unten verlässt, also von 3 nach 2 oder von 3 nach 4 wechselt.

Gruß
Manfred
Es gibt 10 Arten von Menschen: solche die Binärcode verstehen und solche, die ihn nicht verstehen.

Xel66
Beiträge: 14148
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 583 Mal
Danksagung erhalten: 1497 Mal

Re: Logikfrage Verschachteln UND / ODER

Beitrag von Xel66 » 29.01.2019, 11:02

manfredh hat geschrieben:
29.01.2019, 10:22
Also wird das Programm auch ausgelöst (zum einmaligen Lauf gestartet), wenn der Wert die 3 nach oben oder unten verlässt, also von 3 nach 2 oder von 3 nach 4 wechselt.
An der Stelle würde ich sogar behaupten, dass eine Bedingungsprüfung bei jeder Änderung der Variable durchgeführt wird (also die Bedingungsprüfungen des "ganzen Programms durchlaufen"), weil ja erst bei der Prüfung der Bedingungen festgestellt werden kann, ob sich der Wert über die definierten Grenzen verändert hat.

Beispiel: Ich habe ein Programm, welches eine Systemvariable umschaltet (manuell/auto) in Abhängigkeit von dem Modus aller Thermostatventile (UND-Abfrage). Dieses Programm wird, obwohl sich kein Modus irgendeines der verknüpften Ventile geändert hat, mit jeder Übermittlung der aktuellen Daten getriggert (Zeitstempel). Die Variable wird hierbei jedoch nicht aktualisiert (Zeitstempel), weil sich ja keine Änderung ergeben hat. Ich habe extra dieses nachvollziehbare Beispiel gewählt, aber so ähnlich dürfte es sich auch bei Systemvariablen vom Typ "Zahl" verhalten. Wäre das nicht so, würde auch das SONST in Programmen (wenn vorhanden) nicht funktionieren.

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

Antworten

Zurück zu „HomeMatic allgemein“