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 und ggf. Lamellenpositionen.
- Unterstützung aller HM- und HMIP-Rollladen- und -Jalousieaktoren sowie -Fenstersensoren (mit Einschränkungen werden auch EnOcean-Rollladenaktoren als CUxD-Geräte unterstützt).
- Sicheres Vermeiden von Aktoraufrufen zur Relaisschonung, wenn deren Soll-Zustand bereits vorliegt.
- Nahezu gleichzeitiges Ansprechen von z.B. Rollläden und/oder Markisen (rein optischer Effekt für synchrone Fahrprozesse).
- Möglichkeit zum zeitverzögerten Ansprechen der Beschattungsgeräte.
- Optionale Definition globaler Werte für alle angesteuerten Beschattungsgeräte.
- Optionale Berücksichtigung gekippter und geöffneter Fenster und Türen mit individuellen Korrekturwerten (relativ oder absolut).
- Optionale globale oder individuelle Frostschutzfunktion.
- Alternativ oder ergänzend zu den Hardware-Sensoren können auch Systemvariablen zur Berücksichtigung der Fenster- und Türzustände verwendet werden.
- 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 (HM und HMIP).
- Moglichkeit zum Setzen individueller Sperr- und Entsperrwerte für HMIP-Aktoren.
- Einfaches Setzen einer minimalen oder maximalen Behanghöhe bei HMIP-Aktoren, die auch für die lokale Tasterbedienung gilt (z.B. Frostschutzfunktion).
- 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 zur Priorisierung der Behanghöhe oder der Lamellenstellung für Jalousieaktoren.
- Einfache Möglichkeit zum Aufruf des gesamten Beschattungsgewerks inkl. oder exkl. Markisen.
- 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.
- Möglichkeit zum Abspeichern einer Beschattungswerteliste und zum späteren Aufruf dieser Liste innerhalb eines global oder individuell festlegbaren Zeitfensters.
- Möglichkeit zum Ergänzen der abgespeicherten Beschattungswerteliste innerhalb eines festlegbaren Zeitfensters.
- Möglichkeit zum Aufruf gespeicherter Listen mit einer abweichenden, globalen Auslösebedingung.
- Absolute Unabhängigkeit von IDs, Kanalnamen 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 ohne Änderung am zBSS.
- 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).
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 muss im nachfolgenden, zentralen Beschattungssteuerungsskript zBSS 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.
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
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 auf die 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 automatisch ignoriert. Zudem erlaubt diese Systemvariable das Starten eines Testlaufs, ohne dass die angesprochenen Beschattungsgeräte ausgelöst werden. Weiterhin wird hier das Speichern und Laden 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.
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.
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 (hierzu mehr im nächsten Teil):
Code: Alles auswählen
! +++++ Charakteristische Bezeichnung der Beschattungsgeräte (ggf. mit nachfolgendem Trennzeichen) +++++
string blindsIndicator = "Rollladen ";
string anwningsIndicator = "Markise ";
! +++++ Beschattungsgewerk (nur für Statusmeldung relevant) +++++
string blindsTrade = "Beschattung";
! +++++ Austauchtext für "blindsIndicator" (ggf. mit nachfolgendem Trennzeichen) +++++
string replaceDev = ""; ! falls Fenster- und/oder Türzustandserkennung über Sensoren erfolgt
string replaceSV = ""; ! falls Fenster- und/oder Türzustandserkennung über Systemvariablen erfolgt
! +++++ Korrekturwerte im Falle gekippter oder geöffneter Fenster und Türen +++++
boolean offsetFlag = true; ! true: als Offset bzw. Relativwert, false: als Absolutwert
! +++++ Priorisierung der Lamellenstellung oder der Behanghöhe bei zu öffnenden Jalousienaktoren +++++
! Hinweis: nur relevant für Jalousienaktoren.
boolean prefSlatFlag = true; ! true: Lamellenstellung hat Vorrang, false: Behanghöhe hat Vorrang
! +++++ Erlaubtes Zeitfenster zum Laden der zuletzt in svBlindsListPrev gespeicherten Werte +++++
! Hinweis: nur relevant, wenn "LOAD" in svBlindsGlobalValues ohne Zeitfensterwert gesetzt wird.
integer loadPeriod = 20; ! In Minuten als Ganzzahl (0: kein Zeitfenster)
! +++++ Zeitfenster, innerhalb dem ein Laden der gespeicherten Werte unterdrückt wird +++++
! Hinweis: nur relevant, wenn "LOAD" in svBlindsGlobalValues gesetzt wird.
integer exclPeriod = 0; ! In Minuten als Ganzzahl
! +++++ Zeitfenster, innerhalb dem nach dem letzten Speichern neue Werte zu svBlindsListPrev hinzugefügt werden +++++
! Hinweis: nur relevant, wenn "SFAD" in svBlindsGlobalValues ohne Zeitfensterwert gesetzt wird.
integer sfadPeriod = 0; ! In Minuten als Ganzzahl (0: kein Zeitfenster)
! +++++ Sperr- und Entsperrwert für die lokale Bediensperre von IP-Aktoren ++++
! Achtung: Einfluss ist abhängig von den logischen Verknüpfungen der virtuellen Kanäle
! Die Werte können durch LOCKnnn bzw. ULCKnnn überschrieben werden
real lockValueIP = 100.0; ! In Prozent mit einer Dezimalstelle
real ulckValueIP = 0.0; ! In Prozent mit einer Dezimalstelle
! +++++ Anzeigen von blindsIndicator im Beschattungsgerätenamen +++++
boolean blindsIndicatorFlag = true; ! true: anzeigen, false: ausblenden
! +++++ Frostschutzfunktion +++++
! Hinweis: nur wirksam, wenn unter tempSensName ein Wert eingebeben ist
! blindValueFrstMin kann für jedes Beschattungsgeräts durch Setzen von FRSTnnn individuell überschrieben werden
string tempSensName = "DG Dach Wettersensor"; ! Name des Temperatursensors bzw. einer Systemvariablen ("": keine Frostschutzfunktion)
real frstTMin = 1.0; ! Auslöseschwelle für Frostschutz in °C
real blindValueFrstMin = 20.0; ! Minimal erlaubte Behanghöhe bei aktivierten Frostschutz in Prozent mit einer Dezimalstelle
real blindValueFrstMax = 97.0; ! Maximal erlaubte Behanghöhe bei aktivierten Frostschutz in Prozent mit einer Dezimalstelle
! +++++ Dateilgrad der in den Push-Nachrichten angezeigten Informationen +++++
boolean fullMsgFlag = true; ! true: alle Informationen anzeigen, false: nur die geänderten Informationen anzeigen
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
! +++++ 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.
Update auf die neueste Version
Seit der Version 2 sind die aufrunden Skripte für das zBSP/zBSS aufwärtskompatibel. Sprich, sie funktionieren ohne Veränderung mit der aktuellsten Version des zBSS. Daher genügt es, das zBSS per Copy & Paste durch die jeweils neueste Version im zBSP zu ersetzen. Sollte dies einmal anders sein, werde ich explizit darauf hinweisen.
Beispiele für den Aufruf des zBSP
Bitte diesbezüglich auch unbedingt den nächsten Beitrag lesen.
- Setzen der Systemvariablen und lokalen Skriptvariablen.
- Beispiele für den Aufruf des zBSP sowie der per Pushover übertragenen Push-Nachrichten.
- Tägliches Schließen bestimmter Beschattungsgeräte bei Dunkelheit, sicheres Auslösen nach Timer-Ablauf und automatisches Auslösen nach Betätigung eines Verschlusses.
- Beschattung bei Hitze.
- Fehler- und Warnmeldungen des zBSS.
Fragt mich einfach. Ich schaue dann was geht.
![Cool 8)](./images/smilies/icon_cool.gif)
Gruß,
Thorsten
Versionshistorie
- Version 1.0 (Januar 2019)
- Stabile Version des zBSP und zBSS.
- 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.
- 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".
- 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 mittels der globalen Parameter "SAFE" und "LOAD".
- Änderung diverser Ausgaben für die Push-Nachrichten.
- Version 2.2 (Juni 2019)
- Anzeige von Statusberichten des gesamten Beschattungsgewerks mittels des globalen Paramters "STAT".
- Individuelle Ansteuerung von Markisen mit inversen Beschattungswerten mittels des Parameters "INVA".
- Überarbeitete Anzeige von Statuswerten in den Push-Nachrichten.
- Umstellung der Steuerparameter auf Großschreibung.
- Möglichkeit zur optionalen Trennung der Steuerparameter per Leerzeichen.
- Version 2.3 (Juni 2019)
- Überarbeitete LOAD-Funktion mit abweichender Auslösebedingung.
- Version 2.4 (November 2019)
- Anzeige von "Keine weitere Auslösung durchgeführt.", wenn die LOAD-Funktion bei keinem der angesprochenen Rollläden zu einer Änderung führt.
- Version 2.5 (März 2020)
- Lokale Bediensperre auch für HMIP-Aktoren mittels der virtuellen Kanäle 5 und 6.
- Version 3.0 (Mai 2020)
- Möglichkeit zum Setzen beliebiger Lock- und Unlock-Werte für HMIP-Aktoren im zBSS.
- Möglichkeit zum Setzen beliebiger Lock- und Unlock-Werte für HMIP-Aktoren im aufrundenen Skript per "LOCKnnn" bzw. "ULCKnnn" (sowohl global, als auch individuell).
- Vereinfachter Aufruf des gesamten im zBSS unter "blindsTrade" gesetzten Gewerks im aufrunden Skript mit dem globalen Parameter "TRAD".
- Möglichkeit zum Ausschluss von Markisen bei Nutzung von "TRAD" durch den globalen Parameter "EXCA".
- Invertierung von Markisenwerten nur noch mit dem globalen Parameter "INVA" (nicht mehr lokal möglich).
- Wird ein Gerätename nicht gefunden oder liegt ein unzulässiger Wert für die Behanghöhe vor, erfolgt kein Abspeichern des betreffenden Geräts in der Vorliste bei Verwendung des globalen Parameters "SAFE". Auf diese Weise können bei Verwendung von "LOAD" fehlerhafte Aufrufe vermieden werden.
- Verbesserte Anzeige in den Push-Nachrichten.
- Version 3.1 (Mai 2020)
- Möglichkeit zum Setzen von Lamellenpositionen für Jalousieaktoren mit dem Parameter "SLATnnn".
- Anzeige der Lamellenpositionen in den Push-Nachrichten.
- Version 3.2 (Juni 2020)
- Möglichkiet zum zeitversetzen Ansprechen von Beschattungsgeräten mit dem lokalen Parameter "DLAYnnn".
- Möglichkeit zum Ergänzen der abgespeicherten Beschattungswerteliste innerhalb eines festlegbaren Zeitfensters mit dem globalen Paramter "SFAD".
- Kleinere Verbesserungen der Anzeige in den Push-Nachrichten.
- Version 3.3 (Juni 2020)
- Es kann nun auch ein Mindestwert für das Lade-Zeitfenster festgesetzt werden, um ein frühzeitiges Auslösen zu verhindern.
- Version 3.4 (August 2020)
- Unterstützung von Systemvariablen für die Fenster- und Türzustände.
- Beseitigung einiger Fehler.
- Version 3.5 (Dezember 2020)
- Möglichkeit zur Priorisierung der Behanghöhe oder der Lamellenstellung für Jalousieaktoren.
- Wahlweise globale oder individuelle Frostschutzfunktion.
- Möglichkeit zum Festlegen individueller Lade- und Speicherzeiten für "LOAD" und "SFAD".
- Moglichkeit zum Setzen individueller Sperr- und Entsperrwerte für HMIP-Aktoren.
- Beseitigung einiger Fehler.
- Version 3.6 (Januar 2021)
- Optionales Unterbinden des Speicherns einzelner Beschattungsgeräte in die Vorliste.
- Möglichkeit zum Ausblenden der charakteristischen Bezeichnung der Beschattungsgeräte bei der Anzeige der Gerätenamen in den Push-Nachrichten.
- Etwas dezentere Farbdarstellung zur Reduzierung der Nachrichtenlänge. Es werden nur noch die Fensterzustände und ggf. spezielle Parameter farbig angezeigt.
- Möglichkeit, in Push-Nachrichten nur noch die Beschattungsgeräte mit Änderungen anzeigen zu lassen.