Hallo zusammen,
gerade habe ich einen neuen, universellen Szenencontroller ins Wiregate-Plugin-SVN eingecheckt.
Das neue Plugin legt die Szenendaten wahlweise im plugin_info oder in seinem eigenen Konfigurationsfile ab (wird einfach angehängt) und funktioniert nach folgendem einfachen Schema: Für jeden Szenentyp (Raum, Taster, etc., z.B. "Wohnzimmer") wird spezifiziert, welche GA die Szene speichert und welche sie aufruft - das darf beim ETS-Typ "Szene" auch die gleiche GA sein. Dann wird noch aufgezählt, welche GAs beim Speichern der Szene ausgelesen werden sollen und welche beim Aufrufen mit den gespeicherten Werten beschrieben - fertig.
Der ab sofort im SVN verfügbare Szenencontroller ist im Detail am besten durch seine Konfigurationsdatei vorgestellt:
Das folgende Beispiel konfiguriert Szenen fuer ein Zimmer (Schlafzimmer).
Die GA zum Aufrufen "Recall" einer Szene (zB kurzer Tastendruck am Taster) ist 0/1/3, die GA zum Speichern "Store" einer Szene (langer Druck) ist 0/1/2. Beim Speichern werden die Werte aus 1/2/3 und 1/2/4 ausgelesen und in die entsprechende Szenennummer abgelegt, beim Abrufen dieser Szenennummer werden genau diese Werte wieder in 1/2/3 und 1/2/5 zurueckgeschrieben.
(Die Zuordnungen unter gas enthalten immer ein Paar: die erste GA wird beim Speichern (Store) der Szene ausgelesen und ihr Wert gespeichert, die zweite GA wird beim Aufrufen (Recall) mit dem gespeicherten Wert beschrieben.)
So weit, so einfach.
Noch einige Details, die vor allem aus der Komplexität der ETS mit seinen vielen Datentypen und der "strengen Typisierung" resultieren:
1. Szenennummer bei "Wert uebermitteln"-Taster (DPTSubId 5.010, in ETS als "Wert" konfiguriert):
Sowohl bei Store als auch bei Recall wird der Inhalt des Bustelegramms als Index der Szene verwendet.
Geschickterweise konfiguriert man das so, dass jeder Taster einen eindeutigen, festen Wert uebermittelt.
So kann jede Taste im Raum jeweils eine Szene speichern und wieder aufrufen, sie muss dafuer einfach eine
Zahl (sinnvollerweise einen 8bit-Wert, DPTSubId 5.010), uebermitteln.
2. Szene abrufen/speichern bei "Szenen"-Tastern (in ETS als "Szene" konfiguriert):
Hier wird die Szenennummer wie oben im Taster konfiguriert, dieselbe (!) GA fuer store und recall
gesetzt und wieder die DPTSubId 5.010 in /etc/wiregate/eibga.conf konfiguriert.
In diesem Fall wird die Unterscheidung zwischen Store und Recall durch das 7. Bit des Wertes getroffen,
was kompatibel mit "Szenen"-Tastern ist (zumindest klappt es mit meinen MDTs).
3. Szenennummer bei "Schalten"-Taster (DPTSubId 1.017, in ETS als einfaches "Schalten" ohne Wert konfiguriert):
Falls die DPTSubId 1.017 ist (Trigger) - typisch fuer "Schalten"-Taster, kann der Inhalt des Telegramms
keine Szenennummer uebermitteln. Dann wird als Szenennummer einfach die physikalische Adresse des Tasters
genommen. So koennen auch Taster, die ueber eine lang-kurz-Schaltung verfuegen aber keine Werte senden,
jeweils eine eigene Szene ablegen.
Have fun, Fry
Hier die komplette Konfigurationsdatei als Beispiel:
gerade habe ich einen neuen, universellen Szenencontroller ins Wiregate-Plugin-SVN eingecheckt.
Das neue Plugin legt die Szenendaten wahlweise im plugin_info oder in seinem eigenen Konfigurationsfile ab (wird einfach angehängt) und funktioniert nach folgendem einfachen Schema: Für jeden Szenentyp (Raum, Taster, etc., z.B. "Wohnzimmer") wird spezifiziert, welche GA die Szene speichert und welche sie aufruft - das darf beim ETS-Typ "Szene" auch die gleiche GA sein. Dann wird noch aufgezählt, welche GAs beim Speichern der Szene ausgelesen werden sollen und welche beim Aufrufen mit den gespeicherten Werten beschrieben - fertig.
Der ab sofort im SVN verfügbare Szenencontroller ist im Detail am besten durch seine Konfigurationsdatei vorgestellt:
Das folgende Beispiel konfiguriert Szenen fuer ein Zimmer (Schlafzimmer).
Code:
%scene=( Schlafzimmer => {store=>'0/1/2', recall=>'0/1/3', gas=>{'1/2/3'=>'1/2/3', '1/2/4'=>'1/2/5'}}, );
(Die Zuordnungen unter gas enthalten immer ein Paar: die erste GA wird beim Speichern (Store) der Szene ausgelesen und ihr Wert gespeichert, die zweite GA wird beim Aufrufen (Recall) mit dem gespeicherten Wert beschrieben.)
So weit, so einfach.
Noch einige Details, die vor allem aus der Komplexität der ETS mit seinen vielen Datentypen und der "strengen Typisierung" resultieren:
1. Szenennummer bei "Wert uebermitteln"-Taster (DPTSubId 5.010, in ETS als "Wert" konfiguriert):
Sowohl bei Store als auch bei Recall wird der Inhalt des Bustelegramms als Index der Szene verwendet.
Geschickterweise konfiguriert man das so, dass jeder Taster einen eindeutigen, festen Wert uebermittelt.
So kann jede Taste im Raum jeweils eine Szene speichern und wieder aufrufen, sie muss dafuer einfach eine
Zahl (sinnvollerweise einen 8bit-Wert, DPTSubId 5.010), uebermitteln.
2. Szene abrufen/speichern bei "Szenen"-Tastern (in ETS als "Szene" konfiguriert):
Hier wird die Szenennummer wie oben im Taster konfiguriert, dieselbe (!) GA fuer store und recall
gesetzt und wieder die DPTSubId 5.010 in /etc/wiregate/eibga.conf konfiguriert.
In diesem Fall wird die Unterscheidung zwischen Store und Recall durch das 7. Bit des Wertes getroffen,
was kompatibel mit "Szenen"-Tastern ist (zumindest klappt es mit meinen MDTs).
3. Szenennummer bei "Schalten"-Taster (DPTSubId 1.017, in ETS als einfaches "Schalten" ohne Wert konfiguriert):
Falls die DPTSubId 1.017 ist (Trigger) - typisch fuer "Schalten"-Taster, kann der Inhalt des Telegramms
keine Szenennummer uebermitteln. Dann wird als Szenennummer einfach die physikalische Adresse des Tasters
genommen. So koennen auch Taster, die ueber eine lang-kurz-Schaltung verfuegen aber keine Werte senden,
jeweils eine eigene Szene ablegen.
Have fun, Fry
Hier die komplette Konfigurationsdatei als Beispiel:
Code:
#!/usr/bin/perl # # Konfiguration Szenencontroller ###################################### # %scene=( # Storage auf 'configfile' setzen, wenn die Szenen hier im Konfigfile gespeichert werden sollen. # Sie ueberleben in diesem Fall sogar das Loeschen des plugin_info und gelten somit als "fest verdrahtet". # Ansonsten 'plugin_info' setzen, dann werden die Szenen im %plugin_info gespeichert. # 'configfile' hat allerdings noch die Vorteile, dass die Werte hier editierbar werden und dass plugin_info # nicht so "zugemuellt" wird. storage=>'configfile', # 'plugin_info' oder 'configfile' # Das folgende Beispiel konfiguriert Szenen fuer ein Zimmer (Schlafzimmer). # Schlafzimmer => {store=>'0/1/2', recall=>'0/1/3', gas=>{'1/2/3'=>'1/2/3', '1/2/4'=>'1/2/5'}}, # # Die GA zum Aufrufen "Recall" einer Szene (zB kurzer Tastendruck am Taster) ist 0/1/3, # die GA zum Speichern "Store" einer Szene (langer Druck) ist 0/1/2. # Beim Speichern werden die Werte aus 1/2/3 und 1/2/4 ausgelesen und in die entsprechende Szenennummer # abgelegt, beim Abrufen dieser Szenennummer werden genau diese Werte wieder in 1/2/3 und 1/2/5 zurueck- # geschrieben. # # (Die Zuordnungen unter gas enthalten immer ein Paar: die erste GA wird beim Speichern (Store) der Szene # ausgelesen und ihr Wert gespeichert, die zweite GA wird beim Aufrufen (Recall) mit dem gespeicherten Wert # beschrieben.) # # Noch einige Details: # # 1. Szenennummer bei "Wert uebermitteln"-Taster (DPTSubId 5.010, in ETS als "Wert" konfiguriert): # Sowohl bei Store als auch bei Recall wird der Inhalt des Bustelegramms als Index der Szene verwendet. # Geschickterweise konfiguriert man das so, dass jeder Taster einen eindeutigen, festen Wert uebermittelt. # So kann jede Taste im Raum jeweils eine Szene speichern und wieder aufrufen, sie muss dafuer einfach eine # Zahl (sinnvollerweise einen 8bit-Wert, DPTSubId 5.010), uebermitteln. # # 2. Szene abrufen/speichern bei "Szenen"-Tastern (in ETS als "Szene" konfiguriert): # Hier wird die Szenennummer wie oben im Taster konfiguriert, dieselbe (!) GA fuer store und recall # gesetzt und wieder die DPTSubId 5.010 in /etc/wiregate/eibga.conf konfiguriert. # In diesem Fall wird die Unterscheidung zwischen Store und Recall durch das 7. Bit des Wertes getroffen, # was kompatibel mit "Szenen"-Tastern ist (zumindest klappt es mit meinen MDTs). # # 3. Szenennummer bei "Schalten"-Taster (DPTSubId 1.017, in ETS als einfaches "Schalten" ohne Wert konfiguriert): # Falls die DPTSubId 1.017 ist (Trigger) - typisch fuer "Schalten"-Taster, kann der Inhalt des Telegramms # keine Szenennummer uebermitteln. Dann wird als Szenennummer einfach die physikalische Adresse des Tasters # genommen. So koennen auch Taster, die ueber eine lang-kurz-Schaltung verfuegen aber keine Werte senden, # jeweils eine eigene Szene ablegen. # # 4. Schlussendlich wieder mal Werbung fuer die GA-Kurznamen. Setzt man im Skript Translator.pl $use_short_names=1 # und verwendet GA-Namen mit eindeutigem Kuerzel (=erstes Wort des Namens), so funktioniert auch das folgende: Schlafzimmer2 => {store=>'ZS_SZ', recall=>'ZA_SZ', gas=>{'LI_SZ'=>'LI_SZ', 'JX_SZ'=>'JW_SZ', 'JQ_SZ'=>'JP_SZ'}}, # ist doch leserlicher, oder? SZ=Schlafzimmer, ZA=Szene abrufen, ZS=Szene speichern, LI=Licht, # JX=Jalousiewinkel abfragen, JW=Jalousiewinkel einstellen, JQ=Jalousieposition abfragen, JP=Jalousie positionieren );
Kommentar