Howto - zentrales Beschattungssteuerungsprogramm (zBSP) V2.3.2

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

Moderator: Co-Administratoren

dtp
Beiträge: 6793
Registriert: 21.09.2012, 08:09
Wohnort: Stuttgart
Hat sich bedankt: 5 Mal
Danksagung erhalten: 30 Mal

Howto - zentrales Beschattungssteuerungsprogramm (zBSP) V2.3.2

Beitrag von dtp » 13.01.2019, 11:34

Einleitung

Motivation

Nachdem ich irgendwie immer mehr genervt war von meinen zahlreichen Beschattungsprogrammen für jede einzelne Rolllade und Markise und dem damit verbundenen Problem der immer geringer werdenden Übersichtlichkeit, habe ich mich entschlossen, analog meinem zentralen Push-Nachrichten-Programm zPNP auch ein entsprechendes Beschattungsprogramm zBSP umzusetzen.

Was kann das zBSP?

Hier mal eine Feature-Liste:
  • Aufruf beliebiger Beschattungsgeräte mit beliebigen Behanghöhen bzw. Ausfahrwerten.
  • Unterstützung aller HM- und HMIP-Rollladenaktoren und -Fenstersensoren. Mit Einschränkungen werden auch EnOcean-Rollladenaktoren als CUxD-Geräte unterstützt. Eine lokale Bediensperre wird aktuell jedoch nur von HM-Rollladenaktoren unterstützt.
  • Gleichzeitiges Ansprechen von z.B. Rollläden und Markisen.
  • Optionale Berücksichtigung gekippter und geöffneter Fenster und Türen mit individuellen Korrekturwerten (relativ oder absolut).
  • Einfache Vermeidung von Schließvorgängen bei geöffneten und/oder gekippten Fenstern und Türen.
  • Möglichkeit zum Sperren und Entsperren der lokalen Bedienung am Aktor (nur HM).
  • Möglichkeit von Testläufen ohne Ansteuerung der Beschattungsgeräte im Life-Betrieb.
  • Möglichkeit zur Statusabfrage des vollständigen Beschattungsgewerks inkl. Verschlusszustand der zugehörigen Fenster und Türen.
  • Möglichkeit zum Ansteuern von Markisen mit inversen Werten (100 -> 0, 0 -> 100, 80 -> 20, etc.).
  • Optionale Definition unterschiedlicher Auslöseschwellen beim Soll-Ist-Vergleich.
  • Optionale Definition globaler Werte für alle angesteuerten Beschattungsgeräte.
  • Möglichkeit zum einfachen Ansprechen vollständiger Gewerke.
  • Möglichkeit zum Abspeichern einer Beschattungswerteliste und zum späteren Aufruf dieser Liste innerhalb eines festlegbaren Zeitfensters.
  • Möglichkeit zum Aufruf gespeicherter Listen mit einer abweichenden, globalen Auslösebedingung.
  • Absolute Unabhängigkeit von IDs und Seriennummern der einzelnen Geräte. Damit ist jederzeit ein einfacher Gerätetausch möglich.
  • Sehr einfache Integration neuer Beschattungsgeräte sowie Fenster- und Türsensoren.
  • Möglichkeit zur Benachrichtigung über die geänderten Werte und Status per Push-Nachricht.
  • Einfache Erkennung von Fenster- und Türzuständen per Farbcodierung (yellowgreen: geschlossen, royalblue: gekippt, orange: offen) in den Push-Nachrichten.
  • Möglichkeit zum ergänzenden Übertragen individueller Benachrichtungsinhalte, wie z.B. Auslösewerte durch $src$-Übergabe.
  • Möglichkeit zur vollständigen Unterdrückung von Push-Nachrichten (sinnvoll z.B. bei wiederkehrenden, zeitabhängigen Auslösungen).
Voraussetzungen

Eine wesentliche Voraussetzung für die automatische Berücksichtigung der Fenster- und Türenzustände ist die Benamung der ensprechenden Geräte. So dürfen sich die jeweiligen Fenster- und Türsensoren in ihrem Namen lediglich durch einen typischen Rollladen-Begriff von den Namen der zugehörigen Rollladen-Aktoren unterscheiden.

Ein Beispiel: Heißt der Fenstersensor für das Wohnzimmer-Fenster "Wohnzimmer Fenster", so sollte der zugehörige Rollladen-Aktor die Bezeichnung "Wohnzimmer Fenster Rollladen", "Rollladen Wohnzimmmer Fenster" oder "Wohnzimmer Rollladen Fenster" aufweisen. Dieser Namenszusatz kann im nachfolgenden, zentralen Beschattungssteuerungsskript zBSS frei definiert werden. Sämtliche Fenster- bzw. Tür-Sensoren und Beschattungsaktoren müssen dieser Nomenklatur folgen. Ansonsten kann das zBSS die Fenster- und Türzustände nicht automatisch berücksichtigen, und es wird stets von geschlossenen Fenstern und Türen ausgegangen.

Ich bin mir sehr wohl im Klaren darüber, dass dieses Skript kein Universalskript für jeden darstellt. Natürlich ist es jedem freigestellt, es an seine eigenen Bedürfnisse anzupassen. Ich kann dann jedoch keinen Support mehr liefern.

Zusatzsoftware

Für die Benachrichtung per Push-Nachricht muss das zentrale Push-Nachrichten-Programm (zPNP) installiert sein. Falls ihr das nicht habt oder wollt, dann kann man die Push-Benachrichtigung im zBSS auch einfach löschen bzw. durch eine eigene Lösung ersetzen. Aber dazu später mehr.

Das zBSP

Das zBSP selbst ist sehr simpel und besteht im Grunde genommen nur aus einem Dann-Zweig, der eine einzige Skriptzeile zum Aufruf des zBSS enthält. Zudem kann optional noch der Status der CCU im zugehörigen Wenn-Zweig abgefragt werden, um zu vermeiden, dass das zBSP unmittelbar nach einem Neustart der CCU ausgeführt wird.
zBSP.png
zBSP.png
Das zBSP trägt bei mir den kurzen Namen "CCU PRG Beschattung". Aufgerufen wird es durch ein Programm samt Skript, auf das ich in einem nachfolgenden Posting noch eingehen werde. Der Name des zBSP ist sehr wichtig, weil er in den aufrufenden Skripten verwendet wird. Natürlich kann er individuell gewählt werden.

Systemvariablen

Das zBSS erzeugt die benötigten Systemvariablen automatisch, sofern noch nicht vorhanden. Die Namen der Systemvariablen können im zBSS nach eigenen Wünschen angepasst werden. Der Einfachheit halber gehe ich im Folgenden von den im nachfolgenden Code-Block des zBSS verwendeten Namen aus.

Code: Alles auswählen

! +++++ Namen der für die Beschattung benötigten Systemvariablen +++++
string svBlindsList = "CCU SV Beschattung Liste"; ! Liste der Beschattungsgeräte und -werte, obligatorisch
string svBlindsListPrev = "CCU SV Beschattung Vorliste"; ! Liste der Beschattungsgeräte und -werte aus dem vorigen Durchlauf, optional
string svBlindsGlobalValues = "CCU SV Beschattung Globalwerte"; ! Globale Werte für Behanghöhen, Korrekturwerte und Auslösebedingungen , optional
string svBlindsMessage = "CCU SV Beschattung Nachricht"; ! Beschattung Nachricht, optional
Wie man sieht, ist im Wesentlichen nur eine einzige Systemvariable zwingend erforderlich. Die drei anderen sind optional. Möchte man sie nicht verwenden, setzt man sie einfach auf "". Dann werden sie nicht angelegt.

Mit der obligatorischen Systemvariablen "CCU SV Beschattung Liste" setzt man eine Liste aller zu steuernden Beschattungsgeräte. Zudem können hier für jedes Beschattungsgerät die jeweiligen Behanghöhen bzw. Ausfahrwerte für geschlossene sowie für geöffnete und gekippte Fenster und Türen in Verbindung mit einer individuellen Auslösebedingung für den Vergleich zwischen Soll- und Istwert definiert werden. Auch ist es möglich, ein Beschattungsgerät lokal zu sperren und wieder freizugeben, so dass man es nicht mehr vor Ort bedienen kann. Mehr dazu im nächsten Posting.

Die optionale Systemvariable "CCU SV Beschattung Vorliste" dient zum Abspeichern der aktuellen Sollwerte aus der Systemvariablen "CCU SV Beschattung Liste". Es werden jedoch nur die Werte der tatsächlich vorhandenen Beschattungsgeräte abgespeichert. Später können diese Sollwerte wieder eingelesen werden, sofern ihr Aufruf innerhalb eines festlegbaren Zeitfensters erfolgt. Auf diese Weise ist es z.B. möglich, das nachträgliche Schließen eines Verschlusses zu berücksichtigen. Ist z.B. während des Aufrufs des zBSP ein Fenster gekippt und der zugehörige Rollladen schließt nur auf 20 % statt der gewünschten 0 %, weil die Offset-Werte entsprechend vorgegeben sind, dann kann der Rollladen durch Aufruf des zBSP mit den zuvor gespeicherten Sollwerten beim nachträglichen Schließen des Fensters innerhalb des festgelegten Zeitfensters automatisch auf 0 % gefahren werden. Wird das Fenster innerhalb des Zeitfensters gekippt, fährt der Rollladen wiederum automatisch auf 20 %, sofern die zugehörige Auslösebedingung erfüllt ist. Nach Ablauf des Zeitfenster erfolgt keine Ansteuerung der Rollläden mehr.

Statt jedem Beschattungsgerät individuelle Werte mitzugeben, kann man auch über die Systemvariable "CCU SV Beschattung Globalwerte" globale Werte für alle Beschattungsgeräte festlegen. Sobald diese Systemvariable mit Inhalt befüllt wird, werden die in der Systemvariablen "CCU SV Beschattung Liste" gesetzten Werte automatische ignoriert. Zudem erlaubt diese Systemvariable das Starten eines Testlaufs, ohne dass die angesprochenen Beschattungsgeräte ausgelöst werden. Weiterhin wird hier das Speichern auf Aufrufen der Beschattungssollwerte festgelegt. Auch hierzu im nächsten Posting mehr.

Die vierte Sytemvariable "CCU SV Beschattung Nachricht" kann zum Übertragen zusätzlicher Informationen per Push-Nachricht dienen. So lassen sich z.B. bestimmte Auslösewerte oder andere Hinweise übertragen. Das zBSS ist so eingestellt, dass es standardmäßig eine Liste aller ausgelösten Beschattungsgeräte samt der zugehörigen Ist- und Sollbeschattungswerte per Push-Nachricht sendet. Diese Liste kann um den Inhalt von "CCU SV Beschattung Nachricht" erweitert werden. Weiterhin ist es mit dem Eintrag "--" möglich, sämtliche Push-Nachrichten zu unterdrücken.
zBSP_Systemvariablen.png
Ganz wichtig ist, dass für svBlindsList, svBlindsListPrev, svBlindsGlobalValues und svBlindsMessage im zBSS und in den aufrufenden Skripten jeweils immer dieselben Namen eingetragen sind!

Damit die Systemvariablen nun automatisch erzeugt werden, muss das zBSP einmal per Klick auf den Start-Button unter "Status und Bedienung | Programme" ausgeführt werden.
zBSP_Initialisierung_Systemvariablen.png
Das zBSS

Kern des zBSP ist das zBSS. In diesem zentralen Skript werden sämtliche Zustände überprüft und gesetzt. Im zBSS müssen neben den obigen Systemvariablen noch folgende lokalen Variablen gesetzt werden:

Code: Alles auswählen

! +++++ Charakteristische Bezeichnung der Beschattungsgeräte +++++
string blindsIndicator = "Rollladen"; 
string anwningsIndicator = "Markise";

! +++++ Beschattungsgewerk (nur für Statusmeldung relevant) +++++
string blindsTrade = "Beschattung";

! +++++ Korrekturwerte im Falle gekippter oder geöffneter Fenster und Türen (true: als Offset, false: als Absolutwert) +++++
boolean offsetFlag = true;

! +++++ Erlaubtes Zeitfenster in Sekunden zum Laden der zuletzt in svBlindsListPrev gespeicherten Werte (0: kein Zeitfenster) +++++
integer loadPeriod = 1000;
sowie die Systemvariablennamen und der Programmname des zPNP.

Code: Alles auswählen

! +++++ Namen der verwendeten Systemvariablen zur Übertragung von Push-Nachrichten per zPNP +++++
string svPushText = "CCU SV Push Text"; ! gem. zPNS-xx, obligatorisch
string svPushPrio = "CCU SV Push Prio"; ! gem. zPNS-xx, obligatorisch
string svPushoverSound = "CCU SV Pushover Sound"; ! gem. zPNS-Po, optional

! +++++ Name des zentralen Push-Nachrichten-Programms zPNP +++++
string zPNP = "CCU PRG Push-Nachrichten"; ! obligatorisch
Wer das zPNP nicht verwendet oder verwenden möchte, der kann die obigen Codezeilen sowie die zugehörigen Zeilen am Ende des zBSS ab "! +++++ Senden der Push-Nachricht +++++" komplett löschen bzw. durch eigene Skriptzeilen ersetzen. Es ist aber auch möglich, sie unverändert im Skript zu belassen und dann die Sytemvariable "CCU SV Beschattung Nachricht" auf den Wert "--" zu setzen, um keine Fehlermeldung zu generieren.

Testen des zBSP bzw. zBSS und Statusbericht

Möchte man die Funktion des zBSP bzw. zBSS nur testen, ohne ein Beschattungsgerät auszulösen (das kann sowohl für die Aktoren, als auch für den Familienfrieden sehr wertvoll sein), dann kann man dies über die Systemvariable "CCU SV Beschattung Globalwerte" tun. Hierzu wird ihr einfach der string "TEST" übergeben. Somit werden unter Berücksichtigung der Schließzustände von Fenstern und Türen sämtliche Werte berechnet und nur die entsprechenden Push-Nachrichten gesendet.

Durch den string "STAT" kann man sich zudem einen Statusbericht über sämtliche Beschattungsgeräte und Verschlüsse per Push-Nachricht zusenden lassen.
  1. Setzen der Systemvariablen und lokalen Skriptvariablen.
  2. Beispiele für den Aufruf des zBSP sowie der per Pushover übertragenen Push-Nachrichten.
  3. Tägliches Schließen bestimmter Beschattungsgeräte bei Dunkelheit, sicheres Auslösen nach Timer-Ablauf und automatisches Auslösen nach Betätigung eines Verschlusses.
  4. Beschattung bei Hitze.
  5. Fehler- und Warnmeldungen des zBSS.


Gruß,

Thorsten

Versionshistorie
  1. Version 1.0 (Januar 2019)
    • Stabile Version des zBSP und zBSS.
  2. Version 1.1 (Januar 2019)
    • Möglichkeit zur Wahl zwischen relativen und absoluten Korrekturwerten für gekippte und geöffnete Fenster und Türen.
    • Möglichkeit zur Aktivierung eines Testlaufs ohne Auslösung der Beschattungsgeräte.
  3. Version 1.2 (Januar 2019)
    • Möglichkeit zum Starten von Testläufen direkt über das aufrufende Skript.
    • Möglichkeit zum Aktivieren und Deaktivieren einer lokalen Bediensperre.
    • Umstellung auf die Begriffe "tilt" und "open" statt "t" und "o".
  4. Version 2.1 (Mai 2019)
    • Berücksichtigung von HMIP-Rollladenaktoren und CUxD-Geräten (z.B. EnOcean).
    • Möglichkeit zum Abspeichern und Aufrufen von Beschattungssollwerten.
    • Änderung diverser Ausgaben für die Push-Nachrichten.
  5. Version 2.2 (Juni 2019)
    • Anzeige von Statusberichten des gesamten Beschattungsgewerks.
    • Individuelle Ansteuerung von Markisen mit inversen Beschattungswerten.
    • Überarbeitete Anzeige von Statuswerten in den Push-Nachrichten.
    • Umstellung der Steuerparameter auf Großschreibung.
    • Möglichkeit zur optionalen Trennung der Steuerparameter per Leerzeichen.
  6. Version 2.3 (Juni 2019)
    • Überarbeitete LOAD-Funktion mit abweichernder Auslösebedingung.
Dateianhänge
zBSS232.hsc
(20.74 KiB) 36-mal heruntergeladen
Zuletzt geändert von dtp am 10.10.2019, 07:57, insgesamt 54-mal geändert.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container, Homebridge auf Raspberry Pi 3B+;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

dtp
Beiträge: 6793
Registriert: 21.09.2012, 08:09
Wohnort: Stuttgart
Hat sich bedankt: 5 Mal
Danksagung erhalten: 30 Mal

Re: Howto - zentrale Beschattungssteuerung (zBSP) V2.3

Beitrag von dtp » 13.01.2019, 11:35

Setzen der Systemvariablen

CCU SV Beschattung Liste

Wie bereits im Ausgangsposting erwähnt, können sämtliche Parameter in einer Liste mittels der Systemvariablen "CCU SV Beschattung Liste" an das zBSP bzw. zBSS übergeben werden. Diese Liste muss folgendermaßen aufgebaut sein:

Code: Alles auswählen

Beschattungsgerät|Behanghöhe|Korrekturwert(TILTnnn OPENnnn) Bediensperre(LOCK/ULCK) Markiseninvertierung(INVA)|Auslösebedingung(ne/gt/ge/lt/le)\t
Beschattungsgerät|Behanghöhe|Korrekturwert(TILTnnn OPENnnn) Bediensperre(LOCK/ULCK) Markiseninvertierung(INVA)|Auslösebedingung(ne/gt/ge/lt/le)
Die Trennung der einzelnen Listeneinträge für die zugehörigen Beschattungsgeräte erfolgt per Tabulator "\t". Innerhalb eines Listeneintrags werden die einzelnen Parameter durch ein "|" getrennt. Dies kann ggf. im zBSS mit der lokalen Variablen "seperator" geändert werden. Ich empfehle aber, die Einstellung so zu belassen.

Die vier Parameter eines Listeneintrags sind folgendermaßen definiert:
  • Beschattungsgerät ist der in der CCU vergebene Klarname des jeweiligen Aktors, also z.B. "DG Schlafzimmer Rollladen Terrassentür".
  • Behanghöhe dürfte selbsterklärend sein und wird in Prozent zwischen 0 und 100 angegeben. Statt der Behanghöhe kann hier ebenso der Ausfahrwert einer Markise angegeben werden. Werte > 100 werden auf 100 begrenzt. Bei negativen Werten erfolgt keine Auslösung.
  • Korrekturwert ist ein Wert, der im Falle eines gekippten (TILT) oder offenen (OPEN) Fensters bzw. einer gekippten oder offenen Tür berücksichtigt wird. Dieser Wert kann wahlweise als Offset (relativ zur gesetzten Behanghöhe) oder als Absolutwert (statt der gesetzten Behanghöhe) gesetzt werden. Es können beide Werte mittels des vorangestellten Indikators, z.B. "TILT40" oder "OPEN100", gleichzeitig oder alternativ gesetzt werden. Wichtig ist, dass direkt hinter dem Indikator der Zahlenwert ohne Leerstelle angefügt wird. Wird kein Indikator vorangestellt, wird der Korrekturwert immer als OPEN interpretiert. Im Falle von gekippten Fenstern und Türen wird dann kein Korrekturwert berücksichtigt.

    Bei reinen Tür/Fensterkontakten kann der Indikator weggelassen werden. Im Falle relativer Korrekturwerte sind auch Negativwerte möglich, die dann von der Behanghöhe abgezogen werden. Dies macht aber aus meiner Sicht keinen großen Sinn. Achtung: sollte sich für die resultierende Behanghöhe ein negativer Wert ergeben, erfolgt keine Auslösung des Beschattungsgeräts. Werte über 100 werden auf 100 begrenzt. Will man also, dass ein Rollladen bei geöffnetem Fenster sicher vollständig geöffnet wird oder bleibt, dann setzt man den Korrekturwert (egal ob relativ oder absolut) einfach auf 100.

    Über den Korrekturwert lässt sich auch eine lokale Bediensperre des entsprechenden Beschattungsgeräts aktivieren und deaktivieren. Dazu fügt man einfach an beliebiger Stelle den Indikator "LOCK" oder "ULCK" ein. Sofern die Bediensperre geändert wurde, erhält man hierüber automatisch eine Info in der Push-Nachricht (falls diese nicht unterdrückt wurde).

    Mit der Markiseninvertierung "INVA" lassen sich schließlich die Ansteuerwerte für Markisen invertieren. Dies kann insbesondere dann sinnvoll sein, wenn man Markisen und Rollläden mit einem globalen Wert ansteuern möchte.

    Die Reihenfolge von TILT OPEN LOCK ULCK und INVA kann frei gewählt werden. Zur optischen Trennung dürfen beliebig viele Leerzeichen eingefügt werden. Alternativ kann auch vollständig auf Leerzeichen verzichtet werden.
  • Die Auslösebedingung gibt an, bei welchem Verhältnis zwischen Soll- und Ist-Wert der Behanghöhen bzw. Ausfahrwerte ein Beschattungsgerät angesteuert werden soll. Folgende Möglichkeiten stehen zur Verfügung:
    • ne: Soll <> Ist (Standardregel),
    • gt: Soll > Ist,
    • ge: Soll >= Ist,
    • lt: Soll < Ist,
    • le: Soll <= Ist.
    Es kann z.B. sinnvoll sein, einen gewünschten Schließvorgang erst einzuleiten, wenn die gewünschte Behanghöhe (Soll) die tatsächliche Behanghöhe (Ist) unterschritten hat (lt), während beim Öffnungsvorgang die gewünschte Behanghöhe (Soll) die tatsächliche Behanghöhe (Ist) überschritten haben sollte (gt). Andererseits kann man aber auch generell sagen, dass das Beschattungsgerät immer angesteuert werden soll, wenn sich Soll- und Ist-Wert unterscheiden (ne). Stimmt der Sollwert dagegen mit dem Istwert überein, erfolgt in der Regel keine Ansteuerung des Beschattungsgeräts, um den Duty Cycle gering zu halten und die Relais des Aktors zu schonen (Ausnahme: ge, le). Man erhält über die Auslösung eine entsprechende Info per Push-Nachricht (sofern diese nicht unterdrückt wurde).
Einzig die Namen der Beschattungsgeräte sind zwingend. Alle anderen Werte sind optional, wobei zumindest eine Behanghöhe bzw. ein Ausfahrwert angegeben sein muss, wenn man die nachfolgende Systemvariable "CCU SV Beschattung Globalwerte" zum Setzen globaler Werte nicht benutzt.

Wird für einen Listeneintrag, der dem ersten Listeneintrag folgt, kein weiterer Parameter übergeben, so wird der Parameter des vorhergehenden Listeneintrags übernommen. Eine Ausnahme ist die Auslösebedingung, die ohne lokale Definition für einen Listeneintrag immer auf "ne" gesetzt wird. Auch die lokale Bediensperre gilt nur für das jeweilige Beschattungsgerät.

Will man die Behanghöhe nur in Verbindung mit einer bestimmen Auslösebedingung ändern ohne Einfluss auf den Korrekturwert oder die lokale Bediensperre, so kann man dies z.B. durch eine Leerübergabe "Behanghöhe||Auslösebedingung" erzielen. Von hinten nach vorne kann man einzelne nicht benötigte Parameter einfach weglassen, z.B. "Behanghöhe|Bediensperre".

CCU SV Beschattung Globalwerte

Statt mit der obigen Systemvariablen "CCU SV Beschattung Liste" lokale Werte für jedes einzelne Beschattungsgerät zu übergeben, ist es auch möglich, über die Systemvariable "CCU SV Beschattung Globalwerte" globale Werte zu übergeben, die für sämtliche Beschattungsgeräte gleichermaßen gelten. Die Struktur und Logik der Globalwert entspricht dabei weitestgehend derjenigen der obigen Lokalwerte:

Code: Alles auswählen

Behanghöhe|Korrekturwert(TILTnnn OPENnnn) Bediensperre(LOCK/ULCK) Markiseninvertierung(INVA)|Auslösebedingung(ne/gt/ge/lt/le)
Sobald die Systemvariable "CCU SV Beschattung Globalwerte" mit einem Wert ungleich "" gefüllt ist, werden sämtliche lokalen Werte der Systemvariablen "CCU SV Beschattung Liste" ignoriert. Man kann also "CCU SV Beschattung Liste" unverändert lassen, wenn man statt der lokalen Werte die globalen Werte von "CCU SV Beschattung Globalwerte" verwenden möchte.

Es ist aber auch möglich, den Inhalt von "CCU SV Beschattung Liste" bei der Verwendung globaler Werte auf die reinen Namen der Beschattungsgeräte zu beschränken. Dies ermöglicht dann die einfache Abarbeitung eines gesamten Gewerks mit

Code: Alles auswählen

string blindsList = (dom.GetObject(ID_FUNCTIONS).Get("Beschattung")).EnumUsedNames();
Hierzu mehr bei den Beispielen im nachfolgenden Posting.

Gegenüber den lokalen Parametern in "CCU SV Beschattung Liste" ist es möglich, einen Testlauf zu starten. Hierzu wird einfach der Parameter Behanghöhe um den string "TEST" ergänzt. Dies kann unmittelbar vor oder nach dem Zahlenwert oder ganz ohne Zahlenwert erfolgen. Weiterhin kann man hier mit "SAFE" und "LOAD" eine Liste aller aktuellen Beschattungssollwerte in die Systemvariable "CCU SV Beschattung Vorliste" abspeichern und wieder aus ihr auslesen. Im Falle von "LOAD" werden etwaige Beschattungswerte der lokalen Variablen "blindsList" und "blindsGlobalValues" ignoriert. Die nachfolgenden Beispiele dürften die Funktionsweise veranschaulichen.

Mit STAT ist es zudem möglich, eine Übersicht über das gesamte Beschattungsgewerk inkl. der Verschlusswerte der zugehörigen Fenster und Türen per Push-Nachricht zu erhalten.

CCU SV Beschattung Nachricht

Mit dieser Systemvarialben können bestimmte Informationen, wie z.B. Auslösewerte, etc. in einer Push-Nachricht ausgegeben werden. Auch ist es möglich, hierüber sämtliche Push-Nachrichten zu unterdrücken. Dazu wird dann "CCU SV Beschattung Nachricht" auf "--" gesetzt. Der Doppelstrich ist bewusst gewählt, um Nachrichten, die einen einfachen Strich enthalten, nicht unbeabsichtigt zu unterdrücken. Wie man "CCU SV Beschattung Nachricht" sinnvoll nutzen kann, werde ich im nachfolgenden Posting anhand einige Beispiele zeigen. Im Falle von "STAT" ist keine Unterdrückung der Push-Nachricht möglich.

Setzen lokaler Skriptvariablen

Im zBSS sollten auch noch die folgenden lokalen Skriptvariablen definiert werden:

Code: Alles auswählen

! +++++ Charakteristische Bezeichnung der Beschattungsgeräte +++++
! +++++ Charakteristische Bezeichnung der Beschattungsgeräte +++++
string blindsIndicator = "Rollladen"; 
string anwningsIndicator = "Markise";

! +++++ Beschattungsgewerk (nur für Statusmeldung relevant) +++++
string blindsTrade = "Beschattung";

! +++++ Korrekturwerte im Falle gekippter oder geöffneter Fenster und Türen (true: als Offset, false: als Absolutwert) +++++
boolean offsetFlag = true;

! +++++ Erlaubtes Zeitfenster in Sekunden zum Laden der zuletzt in svBlindsListPrev gespeicherten Werte (0: kein Zeitfenster) +++++
integer loadPeriod = 1000;
blindsIndicator , anwningsIndicator

Mit "blindsIndicator " und "anwningsIndicator " setzt man die charakteristischen Gerätebezeichnungen für die Beschattungsgeräte. Diese Variablen werden benutzt, um die jeweiligen Beschattungsgeräte zu identifizieren und sie von den Fenster- und Tür-Sensoren zu unterscheiden. Wie bereits im Ausgangsposting geschrieben, ist es für das ordnungsgemäße Funktionieren des zBSS erforderlich, dass sich zur Berücksichtigung der Korrekturwert-Werte die Beschattungsnamen nur durch den Ausdruck "blindsIndicator" von den Namen der Fenster und Türen unterscheiden dürfen also z.B. Fenstername: "EG Wohnzimmer Fenster" <-> Rollladenname: "EG Wohnzimmer Rollladen Fenster". Ist dies nicht der Fall, werden sämtliche Korrekturwerte ignoriert.

"blindsIndicator" kann man beliebig setzen. Je nach verwendeten Beschattungsgeräten vor den Fenstern z.B. "Rollladen", "Jalousie", "Raffstore", "Rollo" oder dergleichen.

"anwningsIndicator" dürfte in der Regel mit dem Begriff "Markise" gesetzt werden. Aber auch hier kann man natürlich die individuell vergebene, charakteristische Bezeichnung, wie z.B. "Sonnensegel" oder "Schirm" verwenden. Bei dieser Art von Beschattungsgeräten werden keine Fenster- und Türenzustände berücksichtigt. Hat man keine Markise im Einsatz, so lässt man die Variable am besten trotzdem auf "Markise" stehen.

blindsTrade

"blindsTrade" definierrt das Beschattungsgewerk, das für die Statusabfrage herangezogen wird. Diese lokale Variable muss nur gesetzt sein, wenn mit "STAT" gearbeitet werden soll.

offsetFlag

Mittels "offsetFlag" kann man entscheiden, ob die Korrekturwerte bei gekippten (TILT) bzw. geöffneten (OPEN) Fenstern und Türen als Relativwerte (offsetFlag = true;) oder als Absolutwerte (offsetFlag = false;) berücksichtigt werden sollen. Was man hier bevorzugt, ist eine individuelle Entscheidung.

loadPeriod

Die lokale Variable "loadPeriod" dient zum Setzen eines Zeitfensters in Sekunden zum Laden der zuletzt in der Systemvariablen "CCU SV Beschattung Vorliste" gespeicherten Werte. Ist das Zeitfenster abgelaufen, erfolgt die Ansteuerung der Beschattungsgeräte mit den den in den Systemvariablen "CCU SV Beschattung Liste" bzw. "CCU SV Beschattung Globalwerte" hinterlegten Werten. Durch Setzen von

Code: Alles auswählen

loadPeriod = 0;
werden die in der Systemvariablen "CCU SV Beschattung Vorliste" gespeicherten Werte immer berücksichtigt, sprich, das Zeitfenster ist unendlich lang.

Das war's auch schon mit dem Setzen der zBSP-Parameter.

Aufruf des zBSP

Ein Basisbeispiel für das aufrufende Skript ist nachfolgend gezeigt. Es verwendet die Standardnamen der oben erläuterten Systemvariablen für das zBSP und des zPNP.

Code: Alles auswählen

! Beschattungsgeräte steuern durch Aufruf des zBSP

! +++++ Liste der Beschattungsgeräte, Behanghöhen bzw. Ausfahrwerte und Korrekturwert für geöffnete bzw. gekippte Fenster und Türen +++++
! Stets nach dem Muster 
! "Beschattungsgerät|Behanghöhe|Korrekturwert(TILTnnn OPENnnn) Bediensperre(LOCK/ULCK) Markiseninvertierung(INVA)|Auslösebedingung(ne/gt/ge/lt/le)\t
!  Beschattungsgerät|Behanghöhe|Korrekturwert(TILTnnn OPENnnn) Bediensperre(LOCK/ULCK) Markiseninvertierung(INVA)|Auslösebedingung(ne/gt/ge/lt/le)"; 
! ausfüllen (einzelne Beschattungsgeräte mit "\t" trennen). 
! TILTnnn (für gekippte Verschlüsse) bzw. OPENnnn (für offene Verschlüsse) können Ganzzahlenwerte zwischen 0 und 100 enthalten.
! INVA dient ausschließlich zur Invertierung von Markisenwerten: 100 -> 0, 0 -> 100, 80 -> 20, etc.
! Auslösebedingung für den Vergleich von Soll- und Ist-Wert, ne: Soll <> Ist | gt: Soll > Ist | ge: Soll >= Ist | lt: Soll < Ist | le: Soll <= Ist
! Für gesamtes Beschattungsgewerk Aufruf per blindsList = (dom.GetObject(ID_FUNCTIONS).Get("Beschattung")).EnumUsedNames();
! -> dann muss aber in blindsGlobalValues zumindest eine Behanghöhe gesetzt sein.
! Beispiel: blindsList = "EG Wohnzimmer Rollladen Fenster|70|OPEN100 LOCK|gt";
string blindsList = "";

! +++++ Globale Werte für Behanghöhe bzw. Ausfahrwert, Korrekturwert, Bediensperre und Auslösebedingung +++++
! Wenn gesetzt, sind keine lokalen Werte in blindsList notwendig bzw. werden ignoriert 
! Stets nach dem Muster
! "Behanghöhe|Korrekturwert(TILTnnn OPENnnn) Bediensperre(LOCK/ULCK) Markiseninvertierung(INVA)|Auslösebedingung(ne/gt/ge/lt/le)";
! ausfüllen.
! Optionale Parameter in Behanghöhe:
! "TEST" -> Testlauf, es erfolgt keine Auslösung der Beschattungsgeräte.
! "STAT" -> Status des im zBSS mit der lokalen Variablen "blindsTrade" definierten Beschattungsgewerks.
! "SAFE" -> Abspeichern der aktuellen Werte in der mit "svBlindsListPrev" definierten Systemvariablen
! "LOAD" -> Laden zuvor gespeicherter Werte (Werte in "blindsList" und "blindsGlobalValues" werden ignoriert).
! Beispiel: blindsGlobalValues = "TEST SAFE 50|TILT20 OPEN100 INVA";
string blindsGlobalValues = ""; !"" zur Berücksichtigung der lokalen Werte in "blindsList"

! +++++ Zusatzinformation, die als Push-Nachricht versendet werden soll +++++ 
! Beispiel: blindsMessage = "Dies ist ein Test.";  
string blindsMessage = "--"; ! "--" zur Unterdrückung von Push-Nachrichten

! +++++ Namen der für die Beschattung benötigten Systemvariablen gem. zBSS +++++
string svBlindsList = "CCU SV Beschattung Liste"; ! Liste der Beschattungsgeräte, obligatorisch
string svBlindsGlobalValues = "CCU SV Beschattung Globalwerte"; ! Globale Werte für Behanghöhen, Ausfahrwerte und Offsets, optional
string svBlindsMessage = "CCU SV Beschattung Nachricht"; ! Beschattung Nachricht, optional

! +++++ Name des zentralen Programms zur Beschattungssteuerung zBSP +++++
string zBSP = "CCU PRG Beschattung";

! #####################################################################
! ##### ab hier bitte keine weiteren Einstellungen mehr vornehmen #####
! #####################################################################

(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsList)).State(blindsList);
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsGlobalValues)).State(blindsGlobalValues);
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsMessage)).State(blindsMessage);

! +++++ zBSP ausführen +++++
(dom.GetObject(ID_PROGRAMS).Get(zBSP)).ProgramExecute();
Nachfolgend möchte ich auf einige Beispiele zum Aufruf des zBSP/zBSS eingehen. Dabei habe ich der bessern Übersichtlichkeit wegen die Kommentare in den jeweiligen aufrufenden Skripten entfernt.
Zuletzt geändert von dtp am 29.06.2019, 08:05, insgesamt 24-mal geändert.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container, Homebridge auf Raspberry Pi 3B+;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

dtp
Beiträge: 6793
Registriert: 21.09.2012, 08:09
Wohnort: Stuttgart
Hat sich bedankt: 5 Mal
Danksagung erhalten: 30 Mal

Re: Howto - zentrale Beschattungssteuerung (zBSP) V2.3

Beitrag von dtp » 13.01.2019, 11:37

Beispiele für den Aufruf des zBSP sowie der per Pushover übertragenen Push-Nachrichten

Beispiel 1: Setzen einzelner Beschattungsgeräte mit individuellen Behanghöhen

Code: Alles auswählen

! Beschattungsgeräte steuern durch Aufruf des zBSP

! +++++ Liste der Beschattungsgeräte, Behanghöhen bzw. Ausfahrwerte und Korrekturwert für geöffnete bzw. gekippte Fenster und Türen +++++
string blindsList = "DG Schlafzimmer Rollladen Terrassentür|0|TILT10 OPEN90|lt\t
                     OG Gästezimmer Rollladen Fenster|30|TILT0 OPEN50|lt\t
                     EG Wohnzimmer Rollladen Fenster|20|TILT10 OPEN50|ne\t
                     EG Wohnzimmer Rollladen Terrassentür|20|TILT10 OPEN100|ne\t
                     UG Büro Rollladen Fenster|0|TILT10 OPEN90";

! +++++ Globale Werte für Behanghöhe bzw. Ausfahrwert, Korrekturwert, Bediensperre und Auslösebedingung +++++
string blindsGlobalValues = "TEST"; !"" zur Berücksichtigung der lokalen Werte in "blindsList"

! +++++ Zusatzinformation, die als Push-Nachricht versendet werden soll +++++ 
string blindsMessage = "Beispiel 1"; ! "--" zur Unterdrückung von Push-Nachrichten

! +++++ Namen der für die Beschattung benötigten Systemvariablen gem. zBSS +++++
string svBlindsList = "CCU SV Beschattung Liste"; ! Liste der Beschattungsgeräte, obligatorisch
string svBlindsGlobalValues = "CCU SV Beschattung Globalwerte"; ! Globale Werte für Behanghöhen, Ausfahrwerte und Offsets, optional
string svBlindsMessage = "CCU SV Beschattung Nachricht"; ! Beschattung Nachricht, optional

! +++++ Name des zentralen Programms zur Beschattungssteuerung zBSP +++++
string zBSP = "CCU PRG Beschattung";

! #####################################################################
! ##### ab hier bitte keine weiteren Einstellungen mehr vornehmen #####
! #####################################################################

(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsList)).State(blindsList);
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsGlobalValues)).State(blindsGlobalValues);
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsMessage)).State(blindsMessage);

! +++++ zBSP ausführen +++++
(dom.GetObject(ID_PROGRAMS).Get(zBSP)).ProgramExecute();
Empfangene Push-Nachricht:
zBSS_Beispiel1.PNG
Wie man sieht, erfolgte für das zweite Beschattungsgerät keine Auslösung, weil die gesetzte Auslösebedingung ("lt") hier nicht erfüllt war. Die restlichen Beschattungsgeräte wurden auf die eingestellten Behanghöhen gefahren. Die grüne Schrift deutet an, dass kein Offset berücksichtigt wurde, weil sämtliche Fenster und Türen geschlossen waren, während orange ein offenes Fenster bzw. eine offene Tür und blau ein gekipptes Fenster bzw. eine gekippte Tür kennzeichnen. Dies wird aber auch noch im Klartext in der jeweils nachfolgenden Klammer zusammen mit dem Soll-Beschattungswert für das geschlossene Fenster bzw. die geschlossene Tür angezeigt.

Beispiel 2: Setzen globaler Werte für alle Beschattungsgeräte

Code: Alles auswählen

! Beschattungsgeräte steuern durch Aufruf des zBSP

! +++++ Liste der Beschattungsgeräte, Behanghöhen bzw. Ausfahrwerte und Korrekturwert für geöffnete bzw. gekippte Fenster und Türen +++++
string blindsList = "DG Schlafzimmer Rollladen Terrassentür|0|TILT10 OPEN90|lt\t
                     OG Gästezimmer Rollladen Fenster|30|TILT0 OPEN50|lt\t
                     EG Wohnzimmer Rollladen Fenster|20|TILT10 OPEN50|ne\t
                     EG Wohnzimmer Rollladen Terrassentür|20|TILT10 OPEN100|ne\t
                     UG Büro Rollladen Fenster|0|TILT10 OPEN90";

! +++++ Globale Werte für Behanghöhe bzw. Ausfahrwert, Korrekturwert, Bediensperre und Auslösebedingung +++++
string blindsGlobalValues = "TEST40|TILT10|ne"; !"" zur Berücksichtigung der lokalen Werte in "blindsList"

! +++++ Zusatzinformation, die als Push-Nachricht versendet werden soll +++++ 
string blindsMessage = "Beispiel 2"; ! "--" zur Unterdrückung von Push-Nachrichten

! +++++ Namen der für die Beschattung benötigten Systemvariablen gem. zBSS +++++
string svBlindsList = "CCU SV Beschattung Liste"; ! Liste der Beschattungsgeräte, obligatorisch
string svBlindsGlobalValues = "CCU SV Beschattung Globalwerte"; ! Globale Werte für Behanghöhen, Ausfahrwerte und Offsets, optional
string svBlindsMessage = "CCU SV Beschattung Nachricht"; ! Beschattung Nachricht, optional

! +++++ Name des zentralen Programms zur Beschattungssteuerung zBSP +++++
string zBSP = "CCU PRG Beschattung";

! #####################################################################
! ##### ab hier bitte keine weiteren Einstellungen mehr vornehmen #####
! #####################################################################

(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsList)).State(blindsList);
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsGlobalValues)).State(blindsGlobalValues);
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsMessage)).State(blindsMessage);

! +++++ zBSP ausführen +++++
(dom.GetObject(ID_PROGRAMS).Get(zBSP)).ProgramExecute();
Empfangene Push-Nachricht:
zBSS_Beispiel2.PNG
Hier wurden alle Beschattungsgeräte mit derselben globalen Behanghöhe "40|TILT10" angesteuert. Wie man sieht, wurden die lokal gesetzten Korrekturwerte durch die globalen Korrekturwerte ersetzt. Der blau markierte Wert für das letzte Beschattungsgerät besagt, dass das zugehörige Fenster gekippt war. Daher wurden zum Sollwert von 40 % für das geschlossene Fenster 10 % addiert. Bei den offenen Fenstern und Türen erfolge keine Korrektur, weil dies nicht angegeben war.

Beispiel 3: Setzen globaler Werte für alle Beschattungsgeräte des Gewerks "Beschattung" und Abspeichern der Werte in einer Systemvariablen

Code: Alles auswählen

! Beschattungsgeräte steuern durch Aufruf des zBSP

! +++++ Liste der Beschattungsgeräte, Behanghöhen bzw. Ausfahrwerte und Korrekturwert für geöffnete bzw. gekippte Fenster und Türen +++++
string blindsList = (dom.GetObject(ID_FUNCTIONS).Get("Beschattung")).EnumUsedNames();

! +++++ Globale Werte für Behanghöhe bzw. Ausfahrwert, Korrekturwert, Bediensperre und Auslösebedingung +++++
string blindsGlobalValues = "TEST 30 SAFE|TILT10 OPEN30 INVA"; !"" zur Berücksichtigung der lokalen Werte in "blindsList"

! +++++ Zusatzinformation, die als Push-Nachricht versendet werden soll +++++ 
string blindsMessage = "Beispiel 3"; ! "--" zur Unterdrückung von Push-Nachrichten

! +++++ Namen der für die Beschattung benötigten Systemvariablen gem. zBSS +++++
string svBlindsList = "CCU SV Beschattung Liste"; ! Liste der Beschattungsgeräte, obligatorisch
string svBlindsGlobalValues = "CCU SV Beschattung Globalwerte"; ! Globale Werte für Behanghöhen, Ausfahrwerte und Offsets, optional
string svBlindsMessage = "CCU SV Beschattung Nachricht"; ! Beschattung Nachricht, optional

! +++++ Name des zentralen Programms zur Beschattungssteuerung zBSP +++++
string zBSP = "CCU PRG Beschattung";

! #####################################################################
! ##### ab hier bitte keine weiteren Einstellungen mehr vornehmen #####
! #####################################################################

(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsList)).State(blindsList);
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsGlobalValues)).State(blindsGlobalValues);
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsMessage)).State(blindsMessage);

! +++++ zBSP ausführen +++++
(dom.GetObject(ID_PROGRAMS).Get(zBSP)).ProgramExecute();
Empfangene Push-Nachricht:
zBSS_Beispiel3a.PNG
Hier wurde das gesamte Gewerk "Beschattung" mit einem einheitlichen globalen Wert von 30 % angesteuert. Wegen des Setzens von "INVA" wurde der Ausfahrwert für die Markise allerdings auf 70 % invertiert. Für die gekippten Fenster und Türen wurde ein Offset von 10 % und für die offenen einer von 30 % addiert. Die weiße Schrift bei der Markise deutet darauf hin, dass hier kein Sensor vorhanden ist.

Durch das Setzen von "SAFE" wurden sämtliche Werte in der Systemvariablen "CCU SV Beschattung Vorliste" gespeichert. Auch dies wird in der Push-Nachricht angezeigt.
zBSP_Systemvariablen_Beispiel3.png
Die gespeicherten Werte können durch das Setzen von "LOAD" dann wieder geladen werden, sofern die in der lokalen Variablen "loadPeriod" des zBSS gesetzte Zeitdauer noch nicht abgelaufen ist.

Code: Alles auswählen

! Beschattungsgeräte steuern durch Aufruf des zBSP

! +++++ Liste der Beschattungsgeräte, Behanghöhen bzw. Ausfahrwerte und Korrekturwert für geöffnete bzw. gekippte Fenster und Türen +++++
string blindsList = "";

! +++++ Globale Werte für Behanghöhe bzw. Ausfahrwert, Korrekturwert, Bediensperre und Auslösebedingung +++++
string blindsGlobalValues = "TEST LOAD"; !"" zur Berücksichtigung der lokalen Werte in "blindsList"

! +++++ Zusatzinformation, die als Push-Nachricht versendet werden soll +++++ 
string blindsMessage = "Beispiel 3"; ! "--" zur Unterdrückung von Push-Nachrichten

! +++++ Namen der für die Beschattung benötigten Systemvariablen gem. zBSS +++++
string svBlindsList = "CCU SV Beschattung Liste"; ! Liste der Beschattungsgeräte, obligatorisch
string svBlindsGlobalValues = "CCU SV Beschattung Globalwerte"; ! Globale Werte für Behanghöhen, Ausfahrwerte und Offsets, optional
string svBlindsMessage = "CCU SV Beschattung Nachricht"; ! Beschattung Nachricht, optional

! +++++ Name des zentralen Programms zur Beschattungssteuerung zBSP +++++
string zBSP = "CCU PRG Beschattung";

! #####################################################################
! ##### ab hier bitte keine weiteren Einstellungen mehr vornehmen #####
! #####################################################################

(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsList)).State(blindsList);
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsGlobalValues)).State(blindsGlobalValues);
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsMessage)).State(blindsMessage);

! +++++ zBSP ausführen +++++
(dom.GetObject(ID_PROGRAMS).Get(zBSP)).ProgramExecute();
zBSS_Beispiel3b.PNG
Wie man sieht, wurde hier zwischenzeitlich das Fenster im Büro des UG gekippt.

Sollte das im zBSS unter "loadPeriod" gesetzte Zeitfenster abgelaufen sein, wird eine entsprechende Nachricht erstellt.
zBSS_Beispiel3c.PNG
Im Beispiel wurde das Zeitfenster auf 100 Sekunden gesetzt. Es empfehlen sich aber durchaus größere Werte. Der Standardwert im zBSS beträgt 1000 Sekunden.

Beispiel 4: Aktivieren und Deaktiveren der lokalen Bediensperre bestimmter Beschattungsgeräte

Code: Alles auswählen

! Beschattungsgeräte steuern durch Aufruf des zBSP

! +++++ Liste der Beschattungsgeräte, Behanghöhen bzw. Ausfahrwerte und Korrekturwert für geöffnete bzw. gekippte Fenster und Türen +++++
string blindsList = "EG Wohnzimmer Rollladen Fenster|50|LOCK|ne\t
                     EG Wohnzimmer Rollladen Terrassentür\t
                     UG Büro Rollladen Fenster|10|OPEN40 ULCK";

! +++++ Globale Werte für Behanghöhe bzw. Ausfahrwert, Korrekturwert, Bediensperre und Auslösebedingung +++++
string blindsGlobalValues = "TEST"; !"" zur Berücksichtigung der lokalen Werte in "blindsList"

! +++++ Zusatzinformation, die als Push-Nachricht versendet werden soll +++++ 
string blindsMessage = "Beispiel 4"; ! "--" zur Unterdrückung von Push-Nachrichten

! +++++ Namen der für die Beschattung benötigten Systemvariablen gem. zBSS +++++
string svBlindsList = "CCU SV Beschattung Liste"; ! Liste der Beschattungsgeräte, obligatorisch
string svBlindsGlobalValues = "CCU SV Beschattung Globalwerte"; ! Globale Werte für Behanghöhen, Ausfahrwerte und Offsets, optional
string svBlindsMessage = "CCU SV Beschattung Nachricht"; ! Beschattung Nachricht, optional

! +++++ Name des zentralen Programms zur Beschattungssteuerung zBSP +++++
string zBSP = "CCU PRG Beschattung";

! #####################################################################
! ##### ab hier bitte keine weiteren Einstellungen mehr vornehmen #####
! #####################################################################

(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsList)).State(blindsList);
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsGlobalValues)).State(blindsGlobalValues);
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsMessage)).State(blindsMessage);

! +++++ zBSP ausführen +++++
(dom.GetObject(ID_PROGRAMS).Get(zBSP)).ProgramExecute();
zBSS_Beispiel4.PNG
Hier wurde für das erste Beschattungsgerät die lokale Bediensperre aktiviert und für das letzte Beschattungsgerät deaktiviert. Da für das zweite Beschattungsgerät keine Korrekturwerte definiert wurden, erfolgte eine Übernahme der Korrekturwerte vom ersten Beschattungsgerät ohne jedoch die lokale Bediensperre zu setzen. Für dieses Beschattungsgerät wird der Wert in Orange angzeigt, weil die zugehörige Terrassentür geöffnet war. Ein Offsetwert wurde jedoch nicht addiert, da nicht gesetzt.

Beispiel 5: Globales Öffnen bestimmter Beschattungsgeräte zu definierten Zeitpunkten

Das nachfolgende Programm triggert das zBSP/zBSS täglich zu bestimmten Zeitpunkten.
Haus PRG Beschattung täglich Öffnung.png
Mit den beiden ersten Programmzweigen werden drei Rollläden unter der Woche um 06:20 Uhr und ein weiterer um 07:00 Uhr geöffnet. Über den dritten Zweig erfolgt ein Öffnen dieser vier Rollläden am Wochenende jeweils um 07:30 Uhr.

Code: Alles auswählen

! Beschattungsgeräte steuern durch Aufruf des zBSP

! +++++ Liste der Beschattungsgeräte, Behanghöhen bzw. Ausfahrwerte und Korrekturwert für geöffnete bzw. gekippte Fenster und Türen +++++
string blindsList = "EG Wohnzimmer Rollladen Fenster\t
                     EG Wohnzimmer Rollladen Terrassentür\t
                     UG Büro Rollladen Fenster";

! +++++ Globale Werte für Behanghöhe bzw. Ausfahrwert, Korrekturwert, Bediensperre und Auslösebedingung +++++
string blindsGlobalValues = "SAFE 100||gt"; !"" zur Berücksichtigung der lokalen Werte in "blindsList"

! +++++ Zusatzinformation, die als Push-Nachricht versendet werden soll +++++ 
string blindsMessage = "--"; ! "--" zur Unterdrückung von Push-Nachrichten

! +++++ Namen der für die Beschattung benötigten Systemvariablen gem. zBSS +++++
string svBlindsList = "CCU SV Beschattung Liste"; ! Liste der Beschattungsgeräte, obligatorisch
string svBlindsGlobalValues = "CCU SV Beschattung Globalwerte"; ! Globale Werte für Behanghöhen, Ausfahrwerte und Offsets, optional
string svBlindsMessage = "CCU SV Beschattung Nachricht"; ! Beschattung Nachricht, optional

! +++++ Name des zentralen Programms zur Beschattungssteuerung zBSP +++++
string zBSP = "CCU PRG Beschattung";

! #####################################################################
! ##### ab hier bitte keine weiteren Einstellungen mehr vornehmen #####
! #####################################################################

(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsList)).State(blindsList);
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsGlobalValues)).State(blindsGlobalValues);
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsMessage)).State(blindsMessage);

! +++++ zBSP ausführen +++++
(dom.GetObject(ID_PROGRAMS).Get(zBSP)).ProgramExecute();
Der vierte Programmzweig öffnet dann täglich sämtiche Rollläden des Gewerks Beschattung.

Code: Alles auswählen

! Beschattungsgeräte steuern durch Aufruf des zBSP

! +++++ Liste der Beschattungsgeräte, Behanghöhen bzw. Ausfahrwerte und Korrekturwert für geöffnete bzw. gekippte Fenster und Türen +++++
string blindsList = (dom.GetObject(ID_FUNCTIONS).Get("Beschattung")).EnumUsedNames();

! +++++ Globale Werte für Behanghöhe bzw. Ausfahrwert, Korrekturwert, Bediensperre und Auslösebedingung +++++
string blindsGlobalValues = "SAFE 100"; !"" zur Berücksichtigung der lokalen Werte in "blindsList"

! +++++ Zusatzinformation, die als Push-Nachricht versendet werden soll +++++ 
string blindsMessage = "--"; ! "--" zur Unterdrückung von Push-Nachrichten

! +++++ Namen der für die Beschattung benötigten Systemvariablen gem. zBSS +++++
string svBlindsList = "CCU SV Beschattung Liste"; ! Liste der Beschattungsgeräte, obligatorisch
string svBlindsGlobalValues = "CCU SV Beschattung Globalwerte"; ! Globale Werte für Behanghöhen, Ausfahrwerte und Offsets, optional
string svBlindsMessage = "CCU SV Beschattung Nachricht"; ! Beschattung Nachricht, optional

! +++++ Name des zentralen Programms zur Beschattungssteuerung zBSP +++++
string zBSP = "CCU PRG Beschattung";

! #####################################################################
! ##### ab hier bitte keine weiteren Einstellungen mehr vornehmen #####
! #####################################################################

(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsList)).State(blindsList);
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsGlobalValues)).State(blindsGlobalValues);
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsMessage)).State(blindsMessage);

! +++++ zBSP ausführen +++++
(dom.GetObject(ID_PROGRAMS).Get(zBSP)).ProgramExecute();

Da in den einzelnen aufrufenden Skripten eine Mitteilung per Push-Nachricht unterdrückt wurde, kann hier auch kein entsprechender Screenshot gezeigt werden.

Wie man erkennen kann, werden zusätzlich in sämtlichen Programmzweigen zwei Systemvariablen abgefragt. Eine Auslösung erfolgt daher nur, wenn sowohl "Haus SV Beschattung Hitze" als auch "Haus SV Anwesenheitssimulation" inaktiv gesetzt ist. Zur Systemvariable "Haus SV Beschattung Hitze" komme ich im nächsten Posting. "Haus SV Anwesenheitssimulation" dient, wie der Name schon sagt, zur Anwesenheitsimulation nach mindestens 48 Stunden Abwesenheit. Beide Systemvariablen sind nicht zwingend, aber durchaus sehr hilfreich.

Und nun wünsche ich viel Spaß beim Ausprobieren meines zBSP und zBSS.

Gruß,

Thorsten
Zuletzt geändert von dtp am 30.06.2019, 13:07, insgesamt 50-mal geändert.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container, Homebridge auf Raspberry Pi 3B+;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Saschag
Beiträge: 65
Registriert: 23.03.2015, 22:45

Re: Howto - zentrale Beschattungssteuerung (zBSP) V1.0

Beitrag von Saschag » 13.01.2019, 20:45

Hallo Thorsten,

tolle Arbeit!!! Danke. :!:
Nutze auch schon dein zPNP mit Begeisterung! Und glaub auch das dies nutzen werde :wink:

Die „Erkennung“ der TFK habe ich noch nicht ganz durchschaut, wie werden die Sensoren ausgelesen bzw. erkannt.

bei mir gibts folgende Beispiel:

- Rolladen Terrasentür und TFK Terrasentür
- Rolladen Esszimmer und TFK Esszimmer

Dass ich bei def. ein l weg nehmen muss „Rolladen“ statt „Rollladen“ habe ich gesehen.

Danke schon mal

Grüße
Sascha

dtp
Beiträge: 6793
Registriert: 21.09.2012, 08:09
Wohnort: Stuttgart
Hat sich bedankt: 5 Mal
Danksagung erhalten: 30 Mal

Re: Howto - zentrale Beschattungssteuerung (zBSP) V1.0

Beitrag von dtp » 14.01.2019, 07:25

Saschag hat geschrieben:
13.01.2019, 20:45
Die „Erkennung“ der TFK habe ich noch nicht ganz durchschaut, wie werden die Sensoren ausgelesen bzw. erkannt.
Hallo Sascha,

die TFKs werden anhand ihres Names erkannt, ebenso wie die Rollladenaktoren. Dabei gehe ich von folgender Logik aus:

Nehmen wir an, es geht um ein Fenster im Gästezimmer, dann dürfte der TFK die Bezeichnung "Gästezimmer Fenster 1" oder dergleichen tragen. Der zugehörige Rollladen sollte dann "Gästerzimmer Rollladen Fenster 1" oder "Gästezimmer Fenster 1 Rollladen" heißen. Das Skript kennt ja den Namen des Rollladen, weil man ihm diesen per Systemvariablen "CCU SV Beschattung Liste" übergeben hat. Nun löscht es automatisch aus "Gastezimmer Rollladen Fenster 1" oder "Gästezimmer Fenster 1 Rollladen" den mit der lokalen Skriptvariablen "closureBlinds" definierten Begriff "Rollladen" und geht davon aus, dass der TFK eben "Gästezimmer Fenster 1" heißt.

Blöd ist, wenn man dem TFK einen Namen, wie z.B. "Fenstersensor 1" gegeben hat. Dann funktioniert das obige Prinzip nicht. Aber warum sollte man den Sensor so nennen, wenn es doch um die Zustände des zugehörigen Fensters geht? ;)

Mir ist natürlich klar, dass das zBSS nicht für viel User interessant sein wird, aber bevor ich es für mich behalte... 8)

Und mich hat es einfach mit der Zeit genervt, wenn ich mal wieder einen Rollladenaktor dazu bekommen habe, und dann die mühevoll erstellte Reihenfolge des entsprechenden Rollladenprogramms dahin war, weil man ja im WebUI keine neuen Geräte an einer beliebigen Stelle einfügen kann. Außerdem hatte ich an mancher Stelle ein wenig die Übersicht verloren, wann denn nun welcher Rollladen auf wieviel Prozent gefahren wurde. Vor allen Dingen, weil ich sie für gekippte und geöffnete Fenster abweichend anfahren wollte.

Gruß,

Thorsten
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container, Homebridge auf Raspberry Pi 3B+;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

dtp
Beiträge: 6793
Registriert: 21.09.2012, 08:09
Wohnort: Stuttgart
Hat sich bedankt: 5 Mal
Danksagung erhalten: 30 Mal

Re: Howto - zentrale Beschattungssteuerung (zBSP) V2.3

Beitrag von dtp » 24.01.2019, 08:29

Tägliches Schließen bestimmter Beschattungsgeräte bei Dunkelheit

Nachfolgend ist der fünfte Programmzweig des im obigen Posting unter Beispiel 5 gezeigten Programms zu sehen. Er dient zum täglichen Schließen aller Markisen bei Dunkelheit.
Haus PRG Beschattung täglich Schließung.png
Neben der Helligkeitsschwelle wird auch noch das Astrozeitmodul abgefragt, um zu vermeiden, dass die Rollläden bei einem Gewitter (da muss es dann aber schon sehr dunkel werden) oder beim künstlichen Abdecken des Helligkeitssensors auslösen. Außerdem erfolgt eine Auslösung nur dann, wenn die Anwesenheitssimulation inaktiv ist.

Code: Alles auswählen

! Beschattungsgeräte steuern durch Aufruf des zBSP

! +++++ Liste der Beschattungsgeräte, Behanghöhen bzw. Ausfahrwerte und Korrekturwert für geöffnete bzw. gekippte Fenster und Türen +++++
string blindsList = "DG Schlafzimmer Rollladen Terrassentür|70|TILT0 OPEN100|lt\t
                     OG Gästezimmer Rollladen Fenster|45|TILT0 OPEN50|lt\t
                     OG Zimmer Lina Rollladen Fenster groß|45|TILT0 OPEN50|lt\t
                     OG Zimmer Jona Rollladen Fenster|45|TILT0 OPEN50|lt\t
                     EG Wohnzimmer Rollladen Fenster|20|TILT10 OPEN50|lt\t
                     EG Wohnzimmer Rollladen Terrassentür|20|TILT10 OPEN100|lt\t
                     EG Küche Rollladen Fenster|45|TILT0 OPEN50|lt\t
                     UG Büro Rollladen Fenster|0|TILT40 OPEN90|lt";

! +++++ Globale Werte für Behanghöhe bzw. Ausfahrwert, Korrekturwert, Bediensperre und Auslösebedingung +++++
string blindsGlobalValues = "SAFE"; !"" zur Berücksichtigung der lokalen Werte in "blindsList"

! +++++ Zusatzinformation, die als Push-Nachricht versendet werden soll +++++ 
string blindsMessage = "Helligkeit < 70"; ! "--" zur Unterdrückung von Push-Nachrichten

! +++++ Namen der für die Beschattung benötigten Systemvariablen gem. zBSS +++++
string svBlindsList = "CCU SV Beschattung Liste"; ! Liste der Beschattungsgeräte, obligatorisch
string svBlindsGlobalValues = "CCU SV Beschattung Globalwerte"; ! Globale Werte für Behanghöhen, Ausfahrwerte und Offsets, optional
string svBlindsMessage = "CCU SV Beschattung Nachricht"; ! Beschattung Nachricht, optional

! +++++ Name des zentralen Programms zur Beschattungssteuerung zBSP +++++
string zBSP = "CCU PRG Beschattung";

! #####################################################################
! ##### ab hier bitte keine weiteren Einstellungen mehr vornehmen #####
! #####################################################################

(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsList)).State(blindsList);
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsGlobalValues)).State(blindsGlobalValues);
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsMessage)).State(blindsMessage);

! +++++ zBSP ausführen +++++
(dom.GetObject(ID_PROGRAMS).Get(zBSP)).ProgramExecute();
Bei der u.g. Push-Nachricht möchte ich noch darauf hinweisen, dass es einen Unterschied bei den Klammerwerten gibt, je nachdem, ob eine Auslösung erfolgte oder nicht. Im Falle einer Auslösung bei geöffnetem oder gekippten Fenster wird in der Klammer der Sollwert für das geschlossene Fenster angezeigt. Erfolgt keine Auslösung, enthält die Klammer den Ist-Wert der Behanghöhe.
Push_Beschattung_Dunkelheit_01.png
Sicheres Auslösen nach Timer-Ablauf

Manchmal kann es vorkommen, dass nicht alle Rollläden ausgelöst wurden (bei mir bisher noch nie der Fall gewesen, aber andere User berichteten von derartigen Fällen, zum Beispiel bei ungünstigen Funk-Situationen oder dergleichen). Um sicherzustellen, dass alle Rollläden auslösen, kann man mit der SAFE- und LOAD-Funktion das zBSP/zBSS einfach nach Ablauf eines Timers erneut aufrufen. Dies soll anhand des obigen Beispiels 6 verdeutlicht werden.

Dazu sollte zunächst ein CUxD-Timer "CCU CUxD Timer Beschattung" angelegt werden. Wie das geht, steht im CUxD-Manual.
CCU CUxD Timer Beschattung.png
Nun kann man mit dem nachfolgenden Programm nach Ablauf des Timers (hier 2 Minuten) einfach das zBSP über die LOAD-Funktion aufrufen, sofern die Werte, wie im obigen Beispiel, zuvor mit der SAFE-Funktion des zBSS in der Vorliste gespeichert wurden.
Haus PRG Beschattung Timer Ablauf.png

Code: Alles auswählen

! Beschattungsgeräte steuern durch Aufruf des zBSP

! +++++ Liste der Beschattungsgeräte, Behanghöhen bzw. Ausfahrwerte und Korrekturwert für geöffnete bzw. gekippte Fenster und Türen +++++
string blindsList = "";

! +++++ Globale Werte für Behanghöhe bzw. Ausfahrwert, Korrekturwert, Bediensperre und Auslösebedingung +++++
string blindsGlobalValues = "LOAD"; !"" zur Berücksichtigung der lokalen Werte in "blindsList"

! +++++ Zusatzinformation, die als Push-Nachricht versendet werden soll +++++ 
string blindsMessage = "Beschattungstimer abgelaufen."; ! "--" zur Unterdrückung von Push-Nachrichten

! +++++ Namen der für die Beschattung benötigten Systemvariablen gem. zBSS +++++
string svBlindsList = "CCU SV Beschattung Liste"; ! Liste der Beschattungsgeräte, obligatorisch
string svBlindsGlobalValues = "CCU SV Beschattung Globalwerte"; ! Globale Werte für Behanghöhen, Ausfahrwerte und Offsets, optional
string svBlindsMessage = "CCU SV Beschattung Nachricht"; ! Beschattung Nachricht, optional

! +++++ Name des zentralen Programms zur Beschattungssteuerung zBSP +++++
string zBSP = "CCU PRG Beschattung";

! #####################################################################
! ##### ab hier bitte keine weiteren Einstellungen mehr vornehmen #####
! #####################################################################

(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsList)).State(blindsList);
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsGlobalValues)).State(blindsGlobalValues);
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsMessage)).State(blindsMessage);

! +++++ zBSP ausführen +++++
(dom.GetObject(ID_PROGRAMS).Get(zBSP)).ProgramExecute();
Neben dem reinen Timer-Ablauf kann man den Timer auch noch zusätzlich sperren und mit Verzögerung freigeben, was dann durchaus in einigen Situationen das Handling erleichtert.

Die nachfolgende Push-Meldung zeigt, dass kein Beschattungsgerät ausgelöst wurde. Daher war der Aufruf redundant. Aber insbesondere bei sicherheitskritischen Anwendungen kann es durchaus hilfreich sein, die Auslösung wiederholt zu überprüfen und ggf. vorzunehmen.
Push_Beschattung_Dunkelheit_03.png
Automatisches Auslösen nach Betätigung eines Verschlusses

Gelegentlich kommt es vor, dass beim automatischen Schließen der Rollläden einzelne Fenster oder Türen einen ungünstigen Verschlusszustand aufweisen. Primär für diesen Fall wurde die SAFE- und LOAD-Funktion in das zBSS implementiert.

Mit dem nachfolgenden Programm "Haus PRG Beschattung Verschlüsse" wird nun bei jeder Betätigung eines Fensters oder einer Tür, die über einen Rollladen verfügt, das Skript zum Laden der zuvor gespeicherten Beschattungsvorliste aufgerufen.
Haus PRG Beschattung Verschlüsse.png

Code: Alles auswählen

! Beschattungsgeräte steuern durch Aufruf des zBSP

! +++++ Liste der Beschattungsgeräte, Behanghöhen bzw. Ausfahrwerte und Korrekturwert für geöffnete bzw. gekippte Fenster und Türen +++++
string blindsList = "";

! +++++ Globale Werte für Behanghöhe bzw. Ausfahrwert, Korrekturwert, Bediensperre und Auslösebedingung +++++
string blindsGlobalValues = "LOAD||ne"; !"" zur Berücksichtigung der lokalen Werte in "blindsList"

! +++++ Zusatzinformation, die als Push-Nachricht versendet werden soll +++++ 
string blindsMessage = "Verschluss "#(dom.GetObject(dom.GetObject(dom.GetObject("$src$"))).Channel()).Name()#" betätigt."; ! "--" zur Unterdrückung von Push-Nachrichten

! +++++ Namen der für die Beschattung benötigten Systemvariablen gem. zBSS +++++
string svBlindsList = "CCU SV Beschattung Liste"; ! Liste der Beschattungsgeräte, obligatorisch
string svBlindsGlobalValues = "CCU SV Beschattung Globalwerte"; ! Globale Werte für Behanghöhen, Ausfahrwerte und Offsets, optional
string svBlindsMessage = "CCU SV Beschattung Nachricht"; ! Beschattung Nachricht, optional

! +++++ Name des zentralen Programms zur Beschattungssteuerung zBSP +++++
string zBSP = "CCU PRG Beschattung";

! #####################################################################
! ##### ab hier bitte keine weiteren Einstellungen mehr vornehmen #####
! #####################################################################

(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsList)).State(blindsList);
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsGlobalValues)).State(blindsGlobalValues);
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsMessage)).State(blindsMessage);

! +++++ zBSP ausführen +++++
(dom.GetObject(ID_PROGRAMS).Get(zBSP)).ProgramExecute();
Ein Problem war zunächst, dass durch das Setzen einer ungünstigen Auslöseschwelle ein Hoch- oder Runterfahren der Rollläden infolge eines nachträglich geöffneten oder gekippten Fensters unterdrückt wurde. Daher habe ich mit Version 2.3 die Möglichkeit implementiert, mit dem LOAD-Befehl zusammen eine abweichende Auslöseschwelle über

Code: Alles auswählen

 blindsGlobalValues = "LOAD||ne";
zu definieren. Selbstverständlich kann man bei Bedarf auch jede andere Auslöseschwelle setzen. Allerdings nur global für alle Beschattungsgeräte.

Ein Vorteil der CUxD-Timer ist, dass man nicht nur ihre Dauer definieren kann, sondern sie auch noch aktiv und inaktiv setzen kann. Und genau das wird im obigen Programm "Haus PRG Beschattung täglich" gemacht. So kann ich mir hier eine zusätzliche Systemvariable sparen.

Wie man sehen kann, wurde der Timer mit Aufruf des Programms "Haus PRG Beschattung täglich" auf aktiv und mit einer Verzögerung von 10 Minuten wieder auf inaktiv gesetzt. Betätigt man nun innerhalb dieser Zeit ein Fenster, werden die in der Vorliste gespeicherten Beschattungswerte ausgelesen und automatisch die entsprechenden Rollläden angesteuert. Ansonsten erfolgt keine Auslösung des Programms "Haus PRG Beschattung Verschlüsse". Nachfolgend ist dies für den Rollladen vor der Terrassentür im Wohnzimmer gezeigt.
Push_Beschattung_Dunkelheit_02.png
Zuletzt geändert von dtp am 30.06.2019, 14:16, insgesamt 8-mal geändert.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container, Homebridge auf Raspberry Pi 3B+;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Saschag
Beiträge: 65
Registriert: 23.03.2015, 22:45

Re: Howto - zentrale Beschattungssteuerung (zBSP) V1.2

Beitrag von Saschag » 24.01.2019, 10:43

Hallo Thorsten,

ich denk ich werde bei Gelegenheit dein zBSS einbauen. Find es echt super. (Wenn wieder Zeit ist :-) )

Aber eins muss ich noch fragen ;-)

Wie machst du des mit dem TFK bei einer Tür (Schiebetür), das Programm unterscheidet ja auch die Bezeichnung „Fenster“

Grüße und Danke für die Bereitstellung und die Super Anleitung!!

dtp
Beiträge: 6793
Registriert: 21.09.2012, 08:09
Wohnort: Stuttgart
Hat sich bedankt: 5 Mal
Danksagung erhalten: 30 Mal

Re: Howto - zentrale Beschattungssteuerung (zBSP) V1.2

Beitrag von dtp » 24.01.2019, 12:51

Es ist eigentlich egal, wie du den TFK an der Tür oder dem Fenster nennst, solange er sich im Namen nur durch den unter der lokalen Skriptvariablen "closureBlinds" definierten Begriff (also z.B. Rollladen, Jalousie, Raffstore oder dergleichen) vom zugehörigen Beschattungsaktor unterscheidet.

Nehmen wir also mal an, du hast einen TFK vom Typ HM-Sec-SC, HM-Sec-SC-2, HM-Sec-SCo, HMiP-SWDO oder HMiP-SWDO-I an deiner Schiebetür im Einsatz und das Teil trägt den Namen "Wohnzimmer Schiebetür", dann sollte der zugehörige Rollladenaktor "Wohnzimmer Schiebetür Rollladen" oder "Wohnzimmer Rollladen Schiebetür" oder "Rollladen Wohnzimmer Schiebetür" heißen. Dabei ist es egal, wo du den Begriff "Rollladen" platzierst, wichtig ist lediglich, dass sich der TFK und der Rollladenaktor nur durch den unter "closureBlinds" definierten Begriff, also "Rollladen" unterscheiden.

Das Skript sucht nun zum Einen nach einer HM-Komponente, die "Wohnzimmer Schiebetür" heißt (die Reihenfolge von "Wohnzimmer" und "Schiebetür" muss aber zwingend derjenigen des Namens des zugehörigen Rollladenaktors entsprechen) und zum Anderen, um welchen Typ von Sensor es sich handelt. Findet es nichts Entsprechendes, wird einfach immer die eingestellte Behanghöhe verwendet. Sprich, das zBSS wird auf alle Fälle ausgeführt, es geht aber dann stets von einem geschlossenen Fenster- oder Tür-Zustand aus.

Hast du für einen TFK einen tilt-Wert gesetzt (der TFK kann aber ja nur zwischen offen und geschlossen unterscheiden), dann wird auch dieser ignoriert. Hast du dem Wert weder ein "tilt" noch ein "open" vorangestellt, dann wird der Wert immer als "open" interpretiert.

Ob das Fenster bzw. die Tür geschlossen, gekippt oder geöffnet war, siehst du in der gesendeten Push-Nachricht anhand der Farbe der angezeigten Behanghöhe. Grün (bzw. yellowgreen) zeigt einen geschlossenen, Blau (bzw. royalblue) einen gekippten und Orange einen geöffneten Zustand an. Falls gewünscht, kann ich die Farben auch noch über entsprechende Skriptvariablen im Kopf des Skripts einstellbar machen. Ich habe sie an meine ioBroker-Visualisierung angepasst.

Ich hoffe, nun ist das Prinzip klarer geworden.

Gruß,

Thorsten

PS.: Wir haben im Haus derzeit acht Rollladenaktoren im Einsatz. Ich habe das zBSP/zBSS natürlich auch mal über das gesamte Beschattungsgewerk laufen lassen. Dabei wurden alle Rollladenaktoren nahezu zeitgleich ausgelöst. Trotzdem wären da mal eure Erfahrungswerte hilfreich, ob und falls ja, ab wann es hier zu Problemen kommt. Wobei das natürlich maßgeblich von der persönlichen Funk- und DC-Situation abhängt.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container, Homebridge auf Raspberry Pi 3B+;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Saschag
Beiträge: 65
Registriert: 23.03.2015, 22:45

Re: Howto - zentrale Beschattungssteuerung (zBSP) V1.2

Beitrag von Saschag » 24.01.2019, 14:40

Super! Habe es jetzt verstanden !!

Vielen Dank noch mal

dtp
Beiträge: 6793
Registriert: 21.09.2012, 08:09
Wohnort: Stuttgart
Hat sich bedankt: 5 Mal
Danksagung erhalten: 30 Mal

Re: Howto - zentrale Beschattungssteuerung (zBSP) V2.3

Beitrag von dtp » 26.01.2019, 14:16

Beschattung bei Hitze

Programm und Skripte

Hier noch ein Beispiel zum vorsorglichen Schließen der Rollläden und Ausfahren der Markise bei zu erwartender Hitze.
Haus PRG Beschattung Hitze.png
Wie man sehen kann, ist die Auslösung der Beschattungsgeräte lediglich von der Systemvariablen "Haus SV Beschattung Hitze" abhängig. Nur, wenn sich diese auf "aktiv" ändert, wird das nachfolgende Skript ausgeführt.

Code: Alles auswählen

! Beschattungsgeräte steuern durch Aufruf des zBSP

! +++++ Liste der Beschattungsgeräte, Behanghöhen bzw. Ausfahrwerte und Korrekturwert für geöffnete bzw. gekippte Fenster und Türen +++++
string blindsList = "DG Terrasse Markise Schlafzimmer|100|gt\t
                     DG Schlafzimmer Rollladen Terrassentür|26|TILT20 OPEN100|lt\t
                     OG Gästezimmer Rollladen Fenster|16|TILT20 OPEN50|lt\t
                     OG Zimmer Lina Rollladen Fenster groß|15|TILT20 OPEN50|lt\t
                     EG Wohnzimmer Rollladen Fenster|15|TILT20 OPEN50|lt\t
                     EG Wohnzimmer Rollladen Terrassentür|23|TILT20 OPEN100|lt\t
                     UG Büro Rollladen Fenster|60|OPEN100|lt";

! +++++ Globale Werte für Behanghöhe bzw. Ausfahrwert, Korrekturwert, Bediensperre und Auslösebedingung +++++
string blindsGlobalValues = "SAFE"; !"" zur Berücksichtigung der lokalen Werte in "blindsList"

! +++++ Zusatzinformation, die als Push-Nachricht versendet werden soll +++++ 
string blindsMessage = "<font color=orange>Hitzerisiko mit "#dom.GetObject(ID_SYSTEM_VARIABLES).Get("Haus SV Höchsttemperatur Tag").Value().ToString(1)#" °C Tageshöchsttemperatur!</font>"; ! "--" zur Unterdrückung von Push-Nachrichten

! +++++ Namen der für die Beschattung benötigten Systemvariablen gem. zBSS +++++
string svBlindsList = "CCU SV Beschattung Liste"; ! Liste der Beschattungsgeräte, obligatorisch
string svBlindsGlobalValues = "CCU SV Beschattung Globalwerte"; ! Globale Werte für Behanghöhen, Ausfahrwerte und Offsets, optional
string svBlindsMessage = "CCU SV Beschattung Nachricht"; ! Beschattung Nachricht, optional

! +++++ Name des zentralen Programms zur Beschattungssteuerung zBSP +++++
string zBSP = "CCU PRG Beschattung";

! #####################################################################
! ##### ab hier bitte keine weiteren Einstellungen mehr vornehmen #####
! #####################################################################

(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsList)).State(blindsList);
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsGlobalValues)).State(blindsGlobalValues);
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsMessage)).State(blindsMessage);

! +++++ zBSP ausführen +++++
(dom.GetObject(ID_PROGRAMS).Get(zBSP)).ProgramExecute();
Damit werden sämtliche Rollläden auf der Südseite des Hauses derart geschlossen, dass die Zwischenräume zwischen den Lamellen noch offen bleiben, um ein wenig Licht in die entsprechenden Räume zu lassen. Ist ein zugehöriges Fenster gekippt, werden die Rollläden um 20 % weniger geschlossen, damit ein besserer Luftaustausch gewährleistet ist. Bei geöffnetem Fenster, werden die Rollläden lediglich mit einm Offset von 50 % herunter gefahren. Die Rolllöäden vor den Terrassentüren bleiben oben, so dass man noch problemlos ein- und austreten kann. Eine Auslösung der Rollläden erfolgt nur, wenn der Soll-Wert unterhalb des Ist-Wertes liegt (lt), um zu vermeiden, dass Rollläden die zuvor manuell weiter geschlossen wurden, wieder hoch gefahren werden. Schließlich wird noch die Markise der Dachterrasse auf 100 % ausgefahren, wenn sie nicht bereits voll ausgefahren war. Hier wird natürlich statt "lt" die Auslösebedingung "gt" gesetzt, da der Sollwert nun größer, als der Istwert sein muss, damit die Markise betätigt wird.
PushNachricht_Hitzerisiko.PNG
Mit dem globalen Parameter "SAFE" werden sämtliche Sollwerte gespeichert, um sie ggf. mit "LOAD" (z.B. beim späteren Schließen, Kippen oder Öffnen der Fenster und Türen) wieder aufrufen zu können. Dazu später mehr.

Ändert die Systemvariable "Haus SV Beschattung Hitze" ihren Zustand auf inaktiv, werden die Rollläden wieder geöffnet und die Markise eingefahren. Da der Aufruf mit einem globalen Beschattungswert von 100 erfolgen kann, muss der Markisenwert entsprechend mit "INVA" zu 0 invertiert werden.

Code: Alles auswählen

! Beschattungsgeräte steuern durch Aufruf des zBSP

! +++++ Liste der Beschattungsgeräte, Behanghöhen bzw. Ausfahrwerte und Korrekturwert für geöffnete bzw. gekippte Fenster und Türen +++++
string blindsList = "DG Terrasse Markise Schlafzimmer\t
                     DG Schlafzimmer Rollladen Terrassentür\t
                     OG Gästezimmer Rollladen Fenster\t
                     OG Zimmer Lina Rollladen Fenster groß\t
                     EG Wohnzimmer Rollladen Fenster\t
                     EG Wohnzimmer Rollladen Terrassentür\t
                     UG Büro Rollladen Fenster";

! +++++ Globale Werte für Behanghöhe bzw. Ausfahrwert, Korrekturwert, Bediensperre und Auslösebedingung +++++
string blindsGlobalValues = "SAFE 100|INVA"; !"" zur Berücksichtigung der lokalen Werte in "blindsList"

! +++++ Zusatzinformation, die als Push-Nachricht versendet werden soll +++++ 
string blindsMessage = "<font color=royalblue>Hitzerisiko beendet ("#dom.GetObject("$src$")#")</font>"; ! "--" zur Unterdrückung von Push-Nachrichten

! +++++ Namen der für die Beschattung benötigten Systemvariablen gem. zBSS +++++
string svBlindsList = "CCU SV Beschattung Liste"; ! Liste der Beschattungsgeräte, obligatorisch
string svBlindsGlobalValues = "CCU SV Beschattung Globalwerte"; ! Globale Werte für Behanghöhen, Ausfahrwerte und Offsets, optional
string svBlindsMessage = "CCU SV Beschattung Nachricht"; ! Beschattung Nachricht, optional

! +++++ Name des zentralen Programms zur Beschattungssteuerung zBSP +++++
string zBSP = "CCU PRG Beschattung";

! #####################################################################
! ##### ab hier bitte keine weiteren Einstellungen mehr vornehmen #####
! #####################################################################

(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsList)).State(blindsList);
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsGlobalValues)).State(blindsGlobalValues);
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svBlindsMessage)).State(blindsMessage);

! +++++ zBSP ausführen +++++
(dom.GetObject(ID_PROGRAMS).Get(zBSP)).ProgramExecute();
Die Systemvariablen "Haus SV Beschattung Hitze" und "Haus SV Höchsttemperatur Tag"

Die Systemvariable "Haus SV Beschattung Hitze" wird mit dem nachfolgenden Programm "Haus PRG SV Beschattung Hitze" auf aktiv oder inaktiv gesetzt.
Haus PRG SV Beschattung Hitze.png
Aktiv ist sie nur dann, wenn die Vorhersage für die Tageshöchsttemperatur mindestens 28°C beträgt, wenn die Ist-Temperatur 25°C übersteigt und die Helligkeit mindestens 226 dig beträgt.

Da die beiden letztgenannten Parameter zu einer Auslösung bei Änderung führen, genügt es, wenn sich einer der beiden Werte entsprechend der Bedingung ändert und der jeweils andere die Bedingung erfüllt. Sprich, das Programm löst aus, wenn für den Tag mindestens 28°C vorhergesagt sind und wenn sich bei einer Helligkeit von mindesten 226 dig die Ist-Temperatur auf über 25°C ändert oder wenn bei einer Ist-Temperatur von über 25°C die Helligkeit 225 dig übersteigt.

Die Systemvariable "Haus SV Beschattung Hitze" wird mit 10 Minuten Verzögerung wieder auf inaktiv gesetzt, wenn die Helligkeit einen Wert von 217 dig unterschreitet. Das nachfolgende Diagramm sollte die Zusammenhänge für die unterschiedlichen Fälle ganz gut verdeutlichen. Die roten Pfeile kennzeichnen das Umschalten auf "Haus SV Beschattung Hitze" aktiv (1), die blauen auf "Haus SV Beschattung Hitze" inaktiv (0). Bisher haben sich diese als sehr praktikabel für uns erwiesen.
Beschattung Hitze.png
Neben der Systemvariablen "Haus SV Beschattung Hitze" gibt es noch die Systemvariable "Haus SV Höchsttemperatur Tag", die den Wert für die vorhergesagte Tageshöchsttemperatur enthält.
Systemvariablen_Beschattung.png
"Haus SV Höchsttemperatur Tag" erhält seinen Wert über den ioBroker. Dort lese ich per Javaskript den entsprechenden Wert des ioBroker-Adapters "DasWetter.com" aus und schreibe ihn um 04:00 Uhr morgens in die Systemvariable der CCU.
daswetter_Tageshöchst.png

Code: Alles auswählen

var tempDayHigh;

schedule('00 00 04 * * *', function(){
  tempDayHigh = getState("daswetter.0.NextDays.Location_1.Day_1.Maximale_Temperatur_value").val;
  setState("hm-rega.0.3298", tempDayHigh);
});
Nachträgliche Betätigung von Fenstern oder Türen

Auch hier wurde, wie bereits im letzten Beispiel-Posting erläutert, der Timer mit Aufruf des Programms "Haus PRG Beschattung Hitze" auf aktiv und mit einer Verzögerung von 10 Minuten wieder auf inaktiv gesetzt. Die nachfolgende Push-Nachricht zeigt dies für den Rollladen im Büro.
PushNachricht_VerchlussHitze.PNG
Gruß,

Thorsten
Zuletzt geändert von dtp am 30.06.2019, 14:19, insgesamt 22-mal geändert.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container, Homebridge auf Raspberry Pi 3B+;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Antworten

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