Howto - zentrale Beschattungssteuerung (zBSP) V1.0

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

Moderator: Co-Administratoren

Antworten
dtp
Beiträge: 5591
Registriert: 21.09.2012, 08:09
Wohnort: Stuttgart

Howto - zentrale Beschattungssteuerung (zBSP) V1.0

Beitrag von dtp » 13.01.2019, 11:34

Einleitung

Motivation

Nachdem ich irgendwie immer mehr genervt war von den 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 Pusch-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.
  • Gleichzeitiges Ansprechen von z.B. Rollläden und Markisen.
  • Optionale Berücksichtigung gekippter und geöffneter Fenster und Türen mit beliebigen Offset-Werten.
  • Einfache Vermeidung von Schließvorgängen bei geöffneten Fenstern und Türen.
  • 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.
  • 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 per Push-Nachricht.
  • Einfache Erkennung von Fenster- und Türzuständen per Farbcodierung 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 sollten 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" aufweisen. Dieser Namenszusatz kann im nachfolgenden zentralen Beschattungssteuerungsskript zBSS frei definiert werden. Sämtliche Fenster- bzw. Tür-Sensoren und Beschattungsaktoren sollten dieser Nomenklatur folgen. Ansonsten kann das zBSS die Fenster- und Türzustände nicht automatisch berücksichtigen.

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

Auf der CCU muss CUxD installiert und das Gerät "CUxD.CUX2801001:1.CMD_EXEC" eingerichtet sein. Hier eine Kurzanleitung zur Einrichtung des CUxD-Geräts:
  1. Unter CUxD-Gerätetyp das Gerät "(28) System-Exec" auswählen und den Rest am besten unverändert lassen (Seriennummer: 1, etc.).
  2. Anschließend auf "Gerät auf CCU erzeugen!" klicken.
  3. Danach in WebUI in den Posteingang für neue Geräte gehen und den neuen Gerätetyp bestätigen.
  4. Zur Sicherheit CCU neu booten.
Weitere Informationen zum Thema findet ihr an dieser Stelle. Wer mag, kann dem Gerätetyp unter Geräte auch noch einen neuen Namen geben. Bei mir heißt er z.B. "CCU CUxD Exec" bzw. der entsprechende Kanal 1 "CCU CUxD Exec 1". Das ist aber nicht notwendig. Man kann den Eintrag auch unverändert lassen, da der Aufruf stets mit dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC") erfolgt, also unabhängig vom vergebenen WebUI-Namen ist.

Weiterhin solltet ihr für die Benachrichtung per Push-Nachricht das zPNP installiert haben. 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 zPSB 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 wird noch der Status der CCU im zugehörigen Wenn-Zweig abgefragt, um zu vermeiden, dass das zBSP unmittelbar nach einem Neustart der CCU ausgeführt wird.
zBSP.png
Das zPSB 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 svBlindsGlobalValues = "CCU SV Beschattung Globalwerte"; ! Globale Werte für Behanghöhen, Ausfahrwerte und Offsets, optional
string svBlindsMessage = "CCU SV Beschattung Nachricht"; ! Beschattung Nachricht, optional 
Wie man sieht, ist im Wesentlichen nur eine einzige Systemvariable erforderlich. Die beiden anderen sind optional. Möchte man sie nicht verwenden, setzt man sie einfach auf "".

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 und Offset-Werte für geöffnete bzw. gekippte Fenster und Türen sowie eine Auslösebedingung für den Vergleich zwischen Soll- und Istwert definiert werden. Mehr dazu im nächsten Posting.

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. Auch hierzu im nächsten Posting mehr.

Die dritte 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öster Beschattungsgeräte samt der zugehörigen Behanghöhen 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, svBlindsGlobalValues und svBlindsMessage in allen 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 closureBlinds = "Rollladen"; 
string closureAwnings = "Markise";

! +++++ Ausfahrwert für Markisen invertieren (true: ja, false: nein) +++++
boolean invertAwnings = true;
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.
zBSS10.txt
(10.86 KiB) 10-mal heruntergeladen
Testen des zBSP bzw. zBSS

Möchte man die Funktion des zBSP bzw. zBSS nur testen, ohne ein Beschattungsgerät auszulösen, dann kann man dies am einfachsten durch Auskommentieren (Voranstellen eines Ausrufezeichens) der folgenden Zeile im zBSS tun:

Code: Alles auswählen

!(dom.GetObject(ID_CHANNELS).Get(blindName)).DPByHssDP("LEVEL").State(blindValueOffset/100);
Damit werden unter Berücksichtigung der Schließzustände von Fenstern und Türen sämtliche Werte berechnet und die Push-Nachrichten gesendet.

Im nachfolgenden Posting möchte ich nun den Aufruf des zBSS beschreiben.

Gruß,

Thorsten

Versionshistorie
  1. Version 1.0 (Januar 2019)
    • Stabile Version des zBSP und zBSS.
Zuletzt geändert von dtp am 15.01.2019, 08:47, insgesamt 8-mal geändert.

dtp
Beiträge: 5591
Registriert: 21.09.2012, 08:09
Wohnort: Stuttgart

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

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|Offset(t_o_)|Auslösebedingung\t
Beschattungsgerät|Behanghöhe|Offset(t_o_)|Auslösebedingung\t
Beschattungsgerät|Behanghöhe|Offset(t_o_)|Auslösebedingung
Die Trennung der einzelnen Listeneinträge erfolgt per Tabulator "\t". Innerhalb eines Listeneintrags werden die einzelnen Parameter durch ein "|" getrennt. Dies kann auf Wunsch 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 Name 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 Bahanghöhe kann hier ebenso der Ausfahrwert einer Markise angegeben werden.
  • Offset ist ein Wert, der im Falle eines gekippten (t - tilt) oder offenen (o - open) Fensters bzw. einer gekippten oder offenen Tür zur Behanghöhe addiert wird. Es können beide Werte mittels des vorangestellten Indikators "t" oder "o" gesetzt werden. Wird kein Indikator vorangestellt, wird der Offset immer als open interpretiert. Im Falle von gekippten Fenstern und Türen wird dann kein Offset addiert. Bei reinen Tür/Fensterkontakten kann der Indikator weggelassen werden. Es können auch Negativwerte benutzt werden, die dann von der Behanghöhe abgezogen werden. Dies macht aber aus meiner Sicht keinen großen Sinn. Sollte sich für die resultierende Behanghöhe ein negativer Wert ergeben, erfolgt keine Auslösung für das Beschattungsgerät. Behanghöhen ü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 Offset-Wert einfach auf 100.
  • 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,
    • gt: Soll > Ist,
    • ge: Soll >= Ist,
    • lt: Soll < Ist,
    • le: Soll <= Ist.
    Es kann z.B. sinnvoll sein, einen gewünschten Schließvorgang erst einzleiten, wenn die gewünschte Behanghöhe (Soll) die tatsächliche Behanghöhe (Ist) unterchritten 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 grundsätzlich keine Ansteuerung des Beschattungsgeräts, um den Duty Cycle gering zu halten und die Relais des Aktors zu schonen. Man erhält hierüber aber eine entsprechende Info per Push-Nachricht.
Einzig die Namen der Beschattungsgeräte sind zwingend. Alle anderen Werte sind optional, wobei zumindest eine Behanghöhe bzw. ein Ausfahrwert angegeben sein sollte, 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.

Die drei Parameter "Behanghöhe|Offset(t_o_)|Auslösebedingung" bauen aufeinander auf. Will man einen der nachfolgenden Parameter setzen, so muss immer der vorhergehende mit gesetzt werden. Sprich, um eine bestimmte Auslösebindung einzustellen, muss man auch die Behanghöhe und den Offset übergeben. Man kann also nur einzelne Parameter von hinten nach vorne weglassen.

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 derjenigen der obigen Lokalwerte:

Code: Alles auswählen

Behanghöhe|Offset(t_o_)|Auslösebedingung
Sobald die Systemvariable "CCU SV Beschattung Globalwerte" mit einem Wert ungleich "" gefüllt ist, werden die 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.

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.

Setzen lokaler Skriptvariablen

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

Code: Alles auswählen

! +++++ Charakteristische Bezeichnung der Beschattungsgeräte +++++
string closureBlinds = "Rollladen"; 
string closureAwnings = "Markise";

! +++++ Ausfahrwert für Markisen invertieren (true: ja, false: nein) +++++
boolean invertAwnings = false;
closureBlinds, closureAwnings

Mit "closureBlinds" und "closureAwnings" 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 Offset-Werte die Beschattungsnamen nur durch den Ausdruck "closureBlinds" 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 Offset-Werte ignoriert.

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

"closureAwnings" 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.

invertAwnings

"invertAwnings" dient zum Invertieren der Ansteuerwerte für Markisen. Sprich, aus 100 wird 0, aus 80 wird 20, etc. Dies kann sinnvoll sein, wenn man mit globalen Werten arbeitet und/oder die Ausfahrwerte im Markisenaktor anders definiert hat. Bei mir ist das z.B. der Fall, da es für mich deutlich logischer ist, wenn die Markise bei 0 % eingefahren und bei 100 % ausgefahren ist.

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

Aufruf des zBSP

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

Code: Alles auswählen

! Beschattung
! Version 1.0, Autor: dtp

! +++++ Liste der Beschattungsgeräte, Behanghöhen bzw. Ausfahrwerte und Offset-Werte für geöffnete bzw. gekippte Fenster und Türen +++++
! Stets nach dem Muster "Beschattungsgerät|Behanghöhe|Offset(t_o_)|Auslösebedingung\t
!                        Beschattungsgerät|Behanghöhe|Offset(t_o_)|Auslösebedingung" 
! ausfüllen (trennen mit "\t")
! Auslösebedingung für den Vergleich von Ist- und Soll-Wert +++++
! ne: Ist <> Soll | gt: Ist > Soll | ge: Ist >= Soll | lt: Ist < Soll | le: Ist <= Soll
! ----- Für gesamtes Beschattungsgewerk Aufruf per blindsList = (dom.GetObject(ID_FUNCTIONS).Get("Beschattung")).EnumUsedNames();
! ----- Dann sollte aber blindsGlobalValues gesetzt werden.
string blindsList = "";

! +++++ Globale Werte für Behanghöhen bzw. Ausfahrwerte und Offset-Werte für geöffnete bzw. gekippte Fenster und Türen +++++
! Wenn gesetzt, sind keine lokalen Werte in blindsList notwendig bzw. werden ignoriert 
! Stets nach dem Muster "Behanghöhe|Offset(t_o_)|Auslösebedingung\t
!                        Behanghöhe|Offset(t_o_)|Auslösebedingung"
! ausfüllen (trennen mit "\t")
! Auslösebedingung für den Vergleich von Ist- und Soll-Wert +++++
! ne: Ist <> Soll | gt: Ist > Soll | ge: Ist >= Soll | lt: Ist < Soll | le: Ist <= Soll
string blindsGlobalValues = ""; !"" 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. zeBeS +++++
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();
Zuletzt geändert von dtp am 15.01.2019, 08:48, insgesamt 6-mal geändert.

dtp
Beiträge: 5591
Registriert: 21.09.2012, 08:09
Wohnort: Stuttgart

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

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

! Beschattung
! Version 1.0, Autor: dtp

! +++++ Liste der Beschattungsgeräte, Behanghöhen bzw. Ausfahrwerte und Offset-Werte für geöffnete bzw. gekippte Fenster und Türen +++++
! Stets nach dem Muster "Beschattungsgerät|Behanghöhe|Offset(t_o_)|Auslösebedingung\t
!                        Beschattungsgerät|Behanghöhe|Offset(t_o_)|Auslösebedingung" 
! ausfüllen (trennen mit "\t")
! Auslösebedingung für den Vergleich von Ist- und Soll-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 sollte aber blindsGlobalValues gesetzt werden.
string blindsList = "DG Schlafzimmer Rollladen Terrassentür|0|t10o90|lt\t
                     OG Gästezimmer Rollladen Fenster|30|t0o50|lt\t
                     EG Wohnzimmer Rollladen Fenster|20|t10o50|ne\t
                     EG Wohnzimmer Rollladen Terrassentür|20|t10o100|ne\t
                     UG Büro Rollladen Fenster|0|t10o90";

! +++++ Globale Werte für Behanghöhen bzw. Ausfahrwerte und Offset-Werte für geöffnete bzw. gekippte Fenster und Türen +++++
! Wenn gesetzt, sind keine lokalen Werte in blindsList notwendig bzw. werden ignoriert 
! Stets nach dem Muster "Behanghöhe|Offset(t_o_)|Auslösebedingung\t
!                        Behanghöhe|Offset(t_o_)|Auslösebedingung"
! ausfüllen (trennen mit "\t")
! Auslösebedingung für den Vergleich von Ist- und Soll-Wert +++++
! ne: Soll <> Ist | gt: Soll > Ist | ge: Soll >= Ist | lt: Soll < Ist | le: Soll <= Ist
string blindsGlobalValues = ""; !"" zur Berücksichtigung der lokalen Werte in "blindsList"

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

! +++++ Namen der für die Beschattung benötigten Systemvariablen gem. zeBeS +++++
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:
zBSP_Pushover_01.PNG
Wie man sieht, erfolgte für die ersten beiden Beschattungsgeräte keine Auslösung, weil die gesetzte Auslösebedingung hier nicht erfüllt war. Die anderen drei 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.

Beispiel 2

Setzen globaler Werte für alle Beschattungsgeräte.

Code: Alles auswählen

! Beschattung
! Version 1.0, Autor: dtp

! +++++ Liste der Beschattungsgeräte, Behanghöhen bzw. Ausfahrwerte und Offset-Werte für geöffnete bzw. gekippte Fenster und Türen +++++
! Stets nach dem Muster "Beschattungsgerät|Behanghöhe|Offset(t_o_)|Auslösebedingung\t
!                        Beschattungsgerät|Behanghöhe|Offset(t_o_)|Auslösebedingung" 
! ausfüllen (trennen mit "\t")
! Auslösebedingung für den Vergleich von Ist- und Soll-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 sollte aber blindsGlobalValues gesetzt werden.
string blindsList = "DG Schlafzimmer Rollladen Terrassentür|0|t10o90|lt\t
                     OG Gästezimmer Rollladen Fenster|30|t0o50|lt\t
                     EG Wohnzimmer Rollladen Fenster|20|t10o50|ne\t
                     EG Wohnzimmer Rollladen Terrassentür|20|t10o100|ne\t
                     UG Büro Rollladen Fenster|0|t10o90";

! +++++ Globale Werte für Behanghöhen bzw. Ausfahrwerte und Offset-Werte für geöffnete bzw. gekippte Fenster und Türen +++++
! Wenn gesetzt, sind keine lokalen Werte in blindsList notwendig bzw. werden ignoriert 
! Stets nach dem Muster "Behanghöhe|Offset(t_o_)|Auslösebedingung\t
!                        Behanghöhe|Offset(t_o_)|Auslösebedingung"
! ausfüllen (trennen mit "\t")
! Auslösebedingung für den Vergleich von Ist- und Soll-Wert +++++
! ne: Soll <> Ist | gt: Soll > Ist | ge: Soll >= Ist | lt: Soll < Ist | le: Soll <= Ist
string blindsGlobalValues = "40|0|ne"; !"" zur Berücksichtigung der lokalen Werte in "blindsList"

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

! +++++ Namen der für die Beschattung benötigten Systemvariablen gem. zeBeS +++++
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:
zBSP_Pushover_02.PNG
Hier wurden alle Beschattungsgeräte mit derselben Behanghöhe angesteuert. Der blau markierte Wert für das letzte Beschattungsgerät besagt, dass das zugehörige Fenster gekippt war. Allerdings hatte dies keinen Einfluss, weil der globale Offset auf 0 gesetzt war.

Beispiel 3

Setzen globaler Werte für alle Beschattungsgeräte des Gewerks "Beschattung".

Code: Alles auswählen

! Beschattung
! Version 1.0, Autor: dtp

! +++++ Liste der Beschattungsgeräte, Behanghöhen bzw. Ausfahrwerte und Offset-Werte für geöffnete bzw. gekippte Fenster und Türen +++++
! Stets nach dem Muster "Beschattungsgerät|Behanghöhe|Offset(t_o_)|Auslösebedingung\t
!                        Beschattungsgerät|Behanghöhe|Offset(t_o_)|Auslösebedingung" 
! ausfüllen (trennen mit "\t")
! Auslösebedingung für den Vergleich von Ist- und Soll-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 sollte aber blindsGlobalValues gesetzt werden.
string blindsList = (dom.GetObject(ID_FUNCTIONS).Get("Beschattung")).EnumUsedNames();

! +++++ Globale Werte für Behanghöhen bzw. Ausfahrwerte und Offset-Werte für geöffnete bzw. gekippte Fenster und Türen +++++
! Wenn gesetzt, sind keine lokalen Werte in blindsList notwendig bzw. werden ignoriert 
! Stets nach dem Muster "Behanghöhe|Offset(t_o_)|Auslösebedingung\t
!                        Behanghöhe|Offset(t_o_)|Auslösebedingung"
! ausfüllen (trennen mit "\t")
! Auslösebedingung für den Vergleich von Ist- und Soll-Wert +++++
! ne: Soll <> Ist | gt: Soll > Ist | ge: Soll >= Ist | lt: Soll < Ist | le: Soll <= Ist
string blindsGlobalValues = "20|0|gt"; !"" zur Berücksichtigung der lokalen Werte in "blindsList"

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

! +++++ Namen der für die Beschattung benötigten Systemvariablen gem. zeBeS +++++
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:
zBSP_Pushover_03.PNG
Hier wurde das gesamte Gewerk "Beschattung" mit einem einheitlichen globalen Wert angesteuert. Für die Markise erfolgte jedoch keine Auslösung, da die globale Auslösebedinung hier nicht erfüllt war.

Beispiel 4

Globales Öffnen bestimmter Beschattungsgeräte.
Haus PRG Beschattung Öffnung.png

Code: Alles auswählen

! Beschattung
! Version 1.0, Autor: dtp

! +++++ Liste der Beschattungsgeräte, Behanghöhen bzw. Ausfahrwerte und Offset-Werte für geöffnete bzw. gekippte Fenster und Türen +++++
! Stets nach dem Muster "Beschattungsgerät|Behanghöhe|Offset(t_o_)|Auslösebedingung\t
!                        Beschattungsgerät|Behanghöhe|Offset(t_o_)|Auslösebedingung" 
! ausfüllen (trennen mit "\t")
! Auslösebedingung für den Vergleich von Ist- und Soll-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 sollte aber blindsGlobalValues gesetzt werden.
string blindsList = "EG Wohnzimmer Rollladen Fenster\t
                     EG Wohnzimmer Rollladen Terrassentür\t
                     UG Büro Rollladen Fenster";
                     
! +++++ Globale Werte für Behanghöhen bzw. Ausfahrwerte und Offset-Werte für geöffnete bzw. gekippte Fenster und Türen +++++
! Wenn gesetzt, sind keine lokalen Werte in blindsList notwendig bzw. werden ignoriert 
! Stets nach dem Muster "Behanghöhe|Offset(t_o_)|Auslösebedingung\t
!                        Behanghöhe|Offset(t_o_)|Auslösebedingung"
! ausfüllen (trennen mit "\t")
! Auslösebedingung für den Vergleich von Ist- und Soll-Wert +++++
! ne: Soll <> Ist | gt: Soll > Ist | ge: Soll >= Ist | lt: Soll < Ist | le: Soll <= Ist
string blindsGlobalValues = "100";

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

! +++++ Namen der für die Beschattung benötigten Systemvariablen gem. zeBeS +++++
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();
zBSP_Pushover_04.PNG
Hier wurden einzelne Beschattungsgeräte zur vollständigen Öffnung angesteuert. Es erfolgte jedoch keine Auslösung, weil sie bereits geöffnet waren.

Beispiel 5

Globales Schließen bestimmter Beschattungsgeräte.
Haus PRG Beschattung Schließung.png

Code: Alles auswählen

! Beschattung
! Version 1.0, Autor: dtp

! +++++ Liste der Beschattungsgeräte, Behanghöhen bzw. Ausfahrwerte und Offset-Werte für geöffnete bzw. gekippte Fenster und Türen +++++
! Stets nach dem Muster "Beschattungsgerät|Behanghöhe|Offset(t_o_)|Auslösebedingung\t
!                        Beschattungsgerät|Behanghöhe|Offset(t_o_)|Auslösebedingung" 
! ausfüllen (trennen mit "\t")
! Auslösebedingung für den Vergleich von Ist- und Soll-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 sollte aber blindsGlobalValues gesetzt werden.
string blindsList = "EG Wohnzimmer Rollladen Fenster\t
                     EG Wohnzimmer Rollladen Terrassentür\t
                     UG Büro Rollladen Fenster";
                     
! +++++ Globale Werte für Behanghöhen bzw. Ausfahrwerte und Offset-Werte für geöffnete bzw. gekippte Fenster und Türen +++++
! Wenn gesetzt, sind keine lokalen Werte in blindsList notwendig bzw. werden ignoriert 
! Stets nach dem Muster "Behanghöhe|Offset(t_o_)|Auslösebedingung\t
!                        Behanghöhe|Offset(t_o_)|Auslösebedingung"
! ausfüllen (trennen mit "\t")
! Auslösebedingung für den Vergleich von Ist- und Soll-Wert +++++
! ne: Soll <> Ist | gt: Soll > Ist | ge: Soll >= Ist | lt: Soll < Ist | le: Soll <= Ist
string blindsGlobalValues = "0";

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

! +++++ Namen der für die Beschattung benötigten Systemvariablen gem. zeBeS +++++
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();
zBSP_Pushover_05.PNG
Das obige Programm zeigte in Beispiel zum Schließen einzelner Beschattungsgeräte bei Hitze oder Dunkelheit. Der Wert für das Beschattungsgerät im Büro des Kellers ist orange markiert, weil das zugehörige Fenster geöffnet war.

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

Gruß,

Thorsten
Zuletzt geändert von dtp am 15.01.2019, 08:49, insgesamt 1-mal geändert.

Saschag
Beiträge: 41
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: 5591
Registriert: 21.09.2012, 08:09
Wohnort: Stuttgart

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

Antworten

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