ProgramExecute Bedingungen

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

MichaelN
Beiträge: 9655
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 697 Mal
Danksagung erhalten: 1617 Mal

Re: ProgramExecute Bedingungen

Beitrag von MichaelN » 07.07.2021, 08:37

MichaelN hat geschrieben:
02.07.2021, 10:57
Prinzip: Du setzt in Programm A eine Systemvariable auf einen Wert und reagierst in Programm B auf diese Systemvariable.
Da ich das Problem gerade selber hatte, das ich ein Programm mit Bedingungsprüfung nach einem anderen starten wollte und die Bedingungen in diesem Programm nicht sicher zum Auslösen geführt hätten (ich hätte von "bei Änderung" auf "bei Aktualisierung" umstellen müssen, was ich aber aus naheliegenden Gründen auch nicht wollte), habe ich mal ein paar Lösungswege ausprobiert.

Vorraussetzung: es gibt es bestehendes Programm mit diversen Bedingungen, die auch weiterhin so zutreffen sollen. Ich erzeuge nun eine Systemvariable Typ Logik, z. B mit dem Namen "Auslöser". Die baue ich mit in den Bedingungsblock ein:

Code: Alles auswählen

WENN
Bedingung 1
UND
Bedingung 2
UND 
... 
UND 
Systemvariable Auslöser ist wahr bei Änderung
Wichtig ist, daß die SV Auslöser normalerweise auf WAHR steht.
Jetzt kann ich in einem anderen Programm folgende Aktion einfügen:

Code: Alles auswählen

Systemvariable Auslöser auf falsch
Systemvariable Auslöser verzögert um 1 Sekunde auf wahr
Der Wechsel von wahr auf falsch triggert das 1. Beispiel Programm, der Bedingungsblock ist aber nciht wahr, das DANN wird nicht ausgeführt.
ACHTUNG: das Programm darf kein bedingungsloses SONST haben, das käme dann nämlich zur Ausführung. Und bei einem SONST-WENN muss man auch genau hinsehen!

Der anschließende Wechsel von falsch auf wahr triggert das Programm wieder, diesmal ist die Bedingung WAHR und abhängig von den anderen Bedingungen wird das DANN ausgeführt - oder eben nicht. So wie es die Bedingungsprüfung eben ergibt.

Man kann die Logik auch umdrehen - dann ist die SV Auslöser normalerweise FALSCH und wird nur zum Auslösen auf WAHR geschaltet:

Code: Alles auswählen

Systemvariable Auslöser auf wahr
Systemvariable Auslöser verzögert um 1 Sekunde auf falsch
Das aufgerufene Programm sieht dann so aus:

Code: Alles auswählen

WENN
{Bedingung 1
 UND
 Bedienung 2
 UND
  ... 
} 
ODER
{ Systemvariable Auslöser bei wahr bei Änderung auslösen
  UND
  Systemvariable Auslöser bei falsch nur prüfen
}
   
Das führt bei jedem Wechsel des Status der SV Auslöser zum Triggern des Programms. Aber egal wie die SV gerade steht - deren Bedingungsblock ist immer falsch, durch das ODER beeinflusst das aber nicht die restliche Bedingungsprüfung.
Unterschied zur 1. Lösung: das Programm wird 2x ausgeführt. Ist aber eine Lösung, wenn man Bedingungen mit ODER verknüpft hat. Sonst müsste man in jeden ODER Block die SV Auslöser mit ver-und-den.
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

meiland
Beiträge: 18
Registriert: 12.12.2020, 11:10
System: CCU

Re: ProgramExecute Bedingungen

Beitrag von meiland » 07.07.2021, 09:42

MichaelN hat geschrieben:
07.07.2021, 08:37
Da ich das Problem gerade selber hatte,... habe ich mal ein paar Lösungswege ausprobiert.
Ja, genauso habe ich es jetzt gemacht. Danke für die Hinweise.
Auch habe ich meine erst angedachten SONST-WENN-Zweige in ein neues Programm mit umgekehrter Logik geschrieben. Also für jede Aktivität(oder zusammengehörende) ein extra Programm erstellt.
Klappt alles.

Gruß Frank

Antworten

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