HomeMatic Register programmieren: Unterschied zwischen den Versionen

Aus FHEMWiki
(Überarbeitung, Umstrukturierung, Ergänzung, Feinkorrekturen)
Zeile 1: Zeile 1:
<!-- Bitte noch an geeigneten Stellen Links auf diese Seite einfügen -->
<!-- Bitte noch an geeigneten Stellen Links auf diese Seite einfügen -->
== Zeitschalter mit HomeMatic Aktoren ==
Anhand eines Beispiels wird gezeigt, wie man die Reaktion von internen Tasten an HomeMatic Aktoren beeinflussen kann. Eine normale Zeitschaltung innerhalb von FHEM sollte einfacher mit ''on-for-timer'' erfolgen!


=== Zustände ===
Ein HomeMatic-Gerät besitzt mehr oder weniger umfangreiche Registersätze, mit denen das Verhalten des Gerätes vielfältig feinkonfiguriert werden kann. Die damit erreichbare Funktionsvielfalt geht weit über die standardisierten Vorgaben einer einfachen Direktverknüpfung ([[Peering_(HomeMatic)|Peering]]) hinaus.
Die HomeMatic Aktoren (Schalter) schalten so, wie es der verknüpfte ([[Peering (HomeMatic)|peering]]) Sender vorgibt. Sie haben dazu Registersätze, die für jede Verknüpfung (peer) neu angelegt und gespeichert werden. Man kann also mit einem Taster ein- und ausschalten. Mit einem anderen Taster eine Zeitschaltung für 10 Sekunden starten. Dabei wird nicht der Taster oder der Schalter auf "Zeitschalter" programmiert, sondern die Verknüpfung Taster mit Schalter wird im Schalter entsprechend gespeichert. Der Schalter macht dabei das, was der letzte Tastendruck als Aktion hinterlegt hat.  
 
== Grundlagen ==
 
Im folgenden werden nur exemplarisch einige Grundlagen und einfache Beispiele benannt, ohne jeden Anspruch auf Vollständigkeit.
 
FHEM unterstützt die Programmierung der Register mit dem Befehl ''regSet''. <peer> entfällt bei rein gerätebezogenen Programmierungen.
:<code>set <device> regSet <register> <value> [<peer>] </code>
Darüberhinaus gibt es vor- oder selbstdefinierte [[HomeMatic_HmInfo_Templates_erstellen|Templates]] (Vorlagen), die alle erforderlichen Änderungen für standardisierte Anwendungen wie Treppenhauslichtschalter beinhalten. Die Anwendung von Templates auf Geräte wird protokolliert und der Registerzustand kann überprüft werden. Für viele Anwendungen genügt jedoch auch die einmalige Anwendung einer direkten Programmierung. Das genaue Verständnis der Vorgänge und Zusammenhänge ist nicht trivial, das Erlernen wird aber mit einer enormen erreichbaren Funktionsvielfalt belohnt. Viele wissenswerte Zusammenhänge sind im Homematic-Anhang der bekannten Einsteiger-Dokumentation erläutert, deren Lektüre zu Recht immer wieder empfohlen wird.
 
Die HomeMatic Aktoren (Schalter, Dimmer, ...) arbeiten so, wie es für verknüpften ([[Peering (HomeMatic)|peering]]) Sender vorgegeben ist. Sie nutzen Registersätze, die für jede Verknüpfung (peer) neu angelegt und gespeichert werden. Man kann also mit einem Taster ein- und ausschalten (toggeln), mit einem Tastenpaar gezielt ein- und ausschalten und mit einem weiteren Taster eine Zeitschaltung für 10 Sekunden starten. Dabei wird niemals der Taster oder der Schalter auf eine globale Aktion programmiert, sondern im Schalter (Aktor) die gewünschte Aktion für jeden verknüpften Taster separat gespeichert. Die auszulösende Aktion ist zudem abhängig vom aktuellen Zustand des Aktors und von der Länge des Tastendruckes (kurz oder länger - short or long).


Kleines Beispiel:
Kleines Beispiel:
  T1 schaltet S1 für 10 sec an   
  T1 schaltet S1 für 10 sec an
T2 schaltet S1 an oder aus  
  T3 schaltet S1 an   
  T3 schaltet S1 an   
  T4 schaltet S1 aus.   
  T4 schaltet S1 aus.   
Zeile 14: Zeile 22:


Schaltet man mit T3 den S1 an und drückt dann nach beliebiger Zeit kurz T1 geht S1 nach weiteren 10 sec aus. Schaltet man mit T1 kurz den S1 für 10 sec an, aber innerhalb dieser Zeit mit T3 nochmal an, dann bleibt S1 nach Ablauf der 10 sec an.
Schaltet man mit T3 den S1 an und drückt dann nach beliebiger Zeit kurz T1 geht S1 nach weiteren 10 sec aus. Schaltet man mit T1 kurz den S1 für 10 sec an, aber innerhalb dieser Zeit mit T3 nochmal an, dann bleibt S1 nach Ablauf der 10 sec an.
Die verfügbaren Register unterscheiden sich im Gerät und in den jeweiligen Kanälen.
Eine kurze Beschreibung der Register inklusive der erlaubten Werte erhält man durch:
:<code>get <device> regList </code>
Dabei kann <device> ein Gerät oder ein separater Gerätekanal sein.
== Beispiel: Lokal bedienbarer Zeitschalter mit HomeMatic Aktoren ==
Anhand eines Beispiels wird gezeigt, wie man die Reaktion von internen Tasten an HomeMatic Aktoren beeinflussen kann. Die gewünschten Aktionen laufen dann völlig ohne jedes Zutun von FHEM ab. Eine normale Zeitschaltung innerhalb von FHEM sollte einfacher mit ''on-for-timer'' erfolgen!


=== Tasten sichtbar machen ===
=== Tasten sichtbar machen ===
Jeder Schalter hat interne oder eigene Tasten. Die Steckdose z.B. den Knopf der als Toggle funktioniert. Der Lichtschalter für Markensysteme hat einen EIN und einen AUS Knopf.
Die internen "Tasten" eines Aktors (z.B. die Schaltwippe bei Wandschaltern/-tastern, der Bedienknopf bei Zwischensteckern, aber auch die angeschlossenen externen Taster bei Aktoren für Unterputzdosen oder die von außen zugängliche "Notbedientaste" etwa bei Zwischendecken-Dimmern) sind logisch ebenso mit dem Aktor verknüpft wie externe Bedienelemente wie Funkfernbedienungen oder per Funk verknüpfte Wandtaster. Ihre Betätigung wird (außer mit präparierter Firmware) zwar nicht gesendet (und kann daher von FHEM nicht "gelesen" werden), die vom Hersteller vorgesehenen Funktionen lassen sich aber genauso frei programmieren. Allerdings sind diese internen Verknüpfungen zur Vermeidung versehentlicher Programmierungen zunächst verborgen und müssen daher explizit sichtbar gemacht werden.  


Die internen Tasten kann man in FHEM sichtbar machen:
Dies geschieht mit
  set <device> regSet intKeyVisib visib   
  set <device> regSet intKeyVisib visib   
  attr <device> expert 1
  attr <device> expert 1
 
Anschließend sind der oder die internen Taste(n) mit der Bezeichnung self01 (self02, ...) sichtbar und ihre Aktionen können gezielt umprogrammiert werden.
Die internen Tasten müssen zunächst sichtbar gemacht werden, bevor man sie betreffende Eigenschaften umprogrammieren kann. Unsichtbar sind sie dafür vor versehentlichen Programmierungen geschützt.


=== Zeitschalter direkt ===
=== Zeitschalter direkt ===
Zeile 28: Zeile 43:
:<code>set <device> regSet shOnTime 10 self01 </code>
:<code>set <device> regSet shOnTime 10 self01 </code>


''shOnTime'' ist dabei das zuständige Register für kurzen (sh=short) Tastendruck. Es gibt auch Register für langen Tastendruck lg=long. Eine kurze Beschreibung der Register erhält man durch:
''shOnTime'' ist dabei das zuständige Register für die Einschaltzeit bei kurzem (sh=short) Tastendruck, entsprechend gilt ''lgOnTime'' für einen langen Tastendruck.  
:<code>get <device> regList </code>


In den Readings werden die Register mit dem jeweiligen verknüpften Taster angezeigt, in unserem Fall also:
In den Readings werden die Register mit dem jeweiligen verknüpften Taster angezeigt, in unserem Fall also:
:<code>R-self01-shOnTime </code>
:<code>R-self01-shOnTime </code>


Der Defaultwert für shOnTime ist übrigens 111600 und bedeutet unendlich. D.h. die maximale einstellbare Zeit ist 111599 sec (knapp 31 Stunden). So kann man die Zeit löschen:
Der Defaultwert für shOnTime ist übrigens 111600 und bedeutet unendlich (von FHEM mit "unused" dargestellt), d.h. die maximale einstellbare Zeit ist 111599 sec (knapp 31 Stunden). So kann man die Zeit löschen:
:<code>set <device> regSet shOnTime 111600 self01 </code>
:<code>set <device> regSet shOnTime 111600 self01 </code>
oder
oder
:<code>set <device> regSet shOnTime unused self01 </code>
:<code>set <device> regSet shOnTime unused self01 </code>


Einen Tastendruck kann man auch simulieren:
Übrigens: ein einmal konfigurierter Vorgang für eine Verknüpfung kann aus FHEM auch bequem fernausgelöst (bzw. simuliert) werden:
:<code>set <device> press short self01 </code>
:<code>set <device> press short self01 </code>


=== Kurz oder lang ===
=== Kurz oder lang und der Konfigurationsmodus ===
Die internen Taster (oder Tasteranschlüsse bei Unterputzaktoren) sind oft als Toggle- und config-Taster ausgelegt. Bei den Unterputz-Schaltaktoren z.B. versetzt ein langer Tastendruck (4 Sekunden) den Schalter in den config-/Anlern-Modus. Dieses Verhalten kann man mit den Register confBtnTime beeinflussen. Nach der dort einstellbaren Zeit (in Minuten) interpretiert der Aktor die Tastendrücke dann getrennt als kurz (short) oder lang (long). Beispiel:
Nicht immer sind die internen Tasten eines Gerätes ohne weiteres mit Aktionen für kurzen und langen Tastendruck programmierbar. Bei allen Hutschienen-Aktoren sowie den Zwischensteckern (mit nur einem Bedienknopf) versetzt ein langer Tastendruck (4 Sekunden) den Schalter normalerweise in den Konfigurations- bzw. Anlern-Modus, bei den in Unterputzdosen versenkbaren Schalt- und Dimmaktoren (-FM ohne PBU in der Bezeichnung) ohne eigenen Konfigurations-Button gilt dies sogar für die zur normalen Funktion extern angeschlossenen Taster. Dieses Verhalten kann man mit dem Register ''confBtnTime'' beeinflussen. Bis zum Ablauf der dort einstellbaren Zeit (in Minuten) nach dem Versorgen mit Strom (powerUp) erreicht man den Konfigurationsmodus wie bisher, danach interpretiert der Aktor die Tastendrücke stets als kurz (short) oder lang (long). Beispiel:
:<code>set <device> regSet confBtnTime 2</code>
:<code>set <device> regSet confBtnTime 2</code>
Mit dieser Programmierung erreicht man den Konfigurationsmodus (und ggf. einen Reset) 2 Minuten lang, nachdem man den Aktor (ausreichend lange) stromlos gemacht hat
Möchte man den Aktor später zurücksetzen oder lokal konfigurieren, so erreicht man das ursprüngliche Verhalten in diesem Beispiel für die ersten zwei Minuten, nachdem man den Aktor (ausreichend lange) stromlos gemacht hat.


=== Praktisches Beispiel: Pool für eine Stunde schalten ===
=== Praktisches Beispiel: Pool für eine Stunde schalten ===
Ich habe einen HM-LC-SW4-DR und der channel_01 schaltet die Poolzirkulationspumpe. Dies passiert zeitgesteuert zweimal am Tag. Manchmal möchte ich im Keller diese Pumpe einfach für eine Stunde aktivieren, der Aktor ist bequem erreichbar an der Wand.
Ich habe einen HM-LC-SW4-DR und der channel_01 schaltet die Poolzirkulationspumpe. Dies passiert zeitgesteuert zweimal am Tag. Manchmal möchte ich im Keller diese Pumpe einfach für eine Stunde aktivieren, der Aktor ist bequem erreichbar an der Wand.
Die internen Tasten vom Hauptdevice (der Aktor hat vier Channel die in FHEM einzeln dargestellt werden) sichtbar machen:
Die internen Tasten vom Hauptdevice (der Aktor hat vier Kanäle (channel), die in FHEM einzeln dargestellt werden) sichtbar machen:
  set LichtKeSW1 regSet intKeyVisib visib   
  set LichtKeSW1 regSet intKeyVisib visib   
  attr LichtKeSW1 expert 1   
  attr LichtKeSW1 expert 1   

Version vom 18. Oktober 2017, 19:22 Uhr


Ein HomeMatic-Gerät besitzt mehr oder weniger umfangreiche Registersätze, mit denen das Verhalten des Gerätes vielfältig feinkonfiguriert werden kann. Die damit erreichbare Funktionsvielfalt geht weit über die standardisierten Vorgaben einer einfachen Direktverknüpfung (Peering) hinaus.

Grundlagen

Im folgenden werden nur exemplarisch einige Grundlagen und einfache Beispiele benannt, ohne jeden Anspruch auf Vollständigkeit.

FHEM unterstützt die Programmierung der Register mit dem Befehl regSet. <peer> entfällt bei rein gerätebezogenen Programmierungen.

set <device> regSet <register> <value> [<peer>]

Darüberhinaus gibt es vor- oder selbstdefinierte Templates (Vorlagen), die alle erforderlichen Änderungen für standardisierte Anwendungen wie Treppenhauslichtschalter beinhalten. Die Anwendung von Templates auf Geräte wird protokolliert und der Registerzustand kann überprüft werden. Für viele Anwendungen genügt jedoch auch die einmalige Anwendung einer direkten Programmierung. Das genaue Verständnis der Vorgänge und Zusammenhänge ist nicht trivial, das Erlernen wird aber mit einer enormen erreichbaren Funktionsvielfalt belohnt. Viele wissenswerte Zusammenhänge sind im Homematic-Anhang der bekannten Einsteiger-Dokumentation erläutert, deren Lektüre zu Recht immer wieder empfohlen wird.

Die HomeMatic Aktoren (Schalter, Dimmer, ...) arbeiten so, wie es für verknüpften (peering) Sender vorgegeben ist. Sie nutzen Registersätze, die für jede Verknüpfung (peer) neu angelegt und gespeichert werden. Man kann also mit einem Taster ein- und ausschalten (toggeln), mit einem Tastenpaar gezielt ein- und ausschalten und mit einem weiteren Taster eine Zeitschaltung für 10 Sekunden starten. Dabei wird niemals der Taster oder der Schalter auf eine globale Aktion programmiert, sondern im Schalter (Aktor) die gewünschte Aktion für jeden verknüpften Taster separat gespeichert. Die auszulösende Aktion ist zudem abhängig vom aktuellen Zustand des Aktors und von der Länge des Tastendruckes (kurz oder länger - short or long).

Kleines Beispiel:

T1 schaltet S1 für 10 sec an
T2 schaltet S1 an oder aus  
T3 schaltet S1 an  
T4 schaltet S1 aus.  

Diese Tabelle ist im Schalter S1 gespeichert.

Schaltet man mit T3 den S1 an und drückt dann nach beliebiger Zeit kurz T1 geht S1 nach weiteren 10 sec aus. Schaltet man mit T1 kurz den S1 für 10 sec an, aber innerhalb dieser Zeit mit T3 nochmal an, dann bleibt S1 nach Ablauf der 10 sec an.

Die verfügbaren Register unterscheiden sich im Gerät und in den jeweiligen Kanälen. Eine kurze Beschreibung der Register inklusive der erlaubten Werte erhält man durch:

get <device> regList

Dabei kann <device> ein Gerät oder ein separater Gerätekanal sein.

Beispiel: Lokal bedienbarer Zeitschalter mit HomeMatic Aktoren

Anhand eines Beispiels wird gezeigt, wie man die Reaktion von internen Tasten an HomeMatic Aktoren beeinflussen kann. Die gewünschten Aktionen laufen dann völlig ohne jedes Zutun von FHEM ab. Eine normale Zeitschaltung innerhalb von FHEM sollte einfacher mit on-for-timer erfolgen!

Tasten sichtbar machen

Die internen "Tasten" eines Aktors (z.B. die Schaltwippe bei Wandschaltern/-tastern, der Bedienknopf bei Zwischensteckern, aber auch die angeschlossenen externen Taster bei Aktoren für Unterputzdosen oder die von außen zugängliche "Notbedientaste" etwa bei Zwischendecken-Dimmern) sind logisch ebenso mit dem Aktor verknüpft wie externe Bedienelemente wie Funkfernbedienungen oder per Funk verknüpfte Wandtaster. Ihre Betätigung wird (außer mit präparierter Firmware) zwar nicht gesendet (und kann daher von FHEM nicht "gelesen" werden), die vom Hersteller vorgesehenen Funktionen lassen sich aber genauso frei programmieren. Allerdings sind diese internen Verknüpfungen zur Vermeidung versehentlicher Programmierungen zunächst verborgen und müssen daher explizit sichtbar gemacht werden.

Dies geschieht mit

set <device> regSet intKeyVisib visib  
attr <device> expert 1

Anschließend sind der oder die internen Taste(n) mit der Bezeichnung self01 (self02, ...) sichtbar und ihre Aktionen können gezielt umprogrammiert werden.

Zeitschalter direkt

Um z.B. eine Steckdose für 10 sec bei Knopfdruck lokal einzuschalten kann man folgendes programmieren:

set <device> regSet shOnTime 10 self01

shOnTime ist dabei das zuständige Register für die Einschaltzeit bei kurzem (sh=short) Tastendruck, entsprechend gilt lgOnTime für einen langen Tastendruck.

In den Readings werden die Register mit dem jeweiligen verknüpften Taster angezeigt, in unserem Fall also:

R-self01-shOnTime

Der Defaultwert für shOnTime ist übrigens 111600 und bedeutet unendlich (von FHEM mit "unused" dargestellt), d.h. die maximale einstellbare Zeit ist 111599 sec (knapp 31 Stunden). So kann man die Zeit löschen:

set <device> regSet shOnTime 111600 self01

oder

set <device> regSet shOnTime unused self01

Übrigens: ein einmal konfigurierter Vorgang für eine Verknüpfung kann aus FHEM auch bequem fernausgelöst (bzw. simuliert) werden:

set <device> press short self01

Kurz oder lang und der Konfigurationsmodus

Nicht immer sind die internen Tasten eines Gerätes ohne weiteres mit Aktionen für kurzen und langen Tastendruck programmierbar. Bei allen Hutschienen-Aktoren sowie den Zwischensteckern (mit nur einem Bedienknopf) versetzt ein langer Tastendruck (4 Sekunden) den Schalter normalerweise in den Konfigurations- bzw. Anlern-Modus, bei den in Unterputzdosen versenkbaren Schalt- und Dimmaktoren (-FM ohne PBU in der Bezeichnung) ohne eigenen Konfigurations-Button gilt dies sogar für die zur normalen Funktion extern angeschlossenen Taster. Dieses Verhalten kann man mit dem Register confBtnTime beeinflussen. Bis zum Ablauf der dort einstellbaren Zeit (in Minuten) nach dem Versorgen mit Strom (powerUp) erreicht man den Konfigurationsmodus wie bisher, danach interpretiert der Aktor die Tastendrücke stets als kurz (short) oder lang (long). Beispiel:

set <device> regSet confBtnTime 2

Möchte man den Aktor später zurücksetzen oder lokal konfigurieren, so erreicht man das ursprüngliche Verhalten in diesem Beispiel für die ersten zwei Minuten, nachdem man den Aktor (ausreichend lange) stromlos gemacht hat.

Praktisches Beispiel: Pool für eine Stunde schalten

Ich habe einen HM-LC-SW4-DR und der channel_01 schaltet die Poolzirkulationspumpe. Dies passiert zeitgesteuert zweimal am Tag. Manchmal möchte ich im Keller diese Pumpe einfach für eine Stunde aktivieren, der Aktor ist bequem erreichbar an der Wand. Die internen Tasten vom Hauptdevice (der Aktor hat vier Kanäle (channel), die in FHEM einzeln dargestellt werden) sichtbar machen:

set LichtKeSW1 regSet intKeyVisib visib  
attr LichtKeSW1 expert 1  

Jetzt sieht man im Channel 01 - LichtKeSW1_Sw01 den internen peer self01. (Channel 02 ist self02 usw.) Also jetzt einfach die Zeit eintragen:

set LichtKeSW1 regSet shOnTime 3600 self01  

Die Toggle Funktion der Taste bleibt erhalten. Ein zweiter Tastendruck schaltet die Pumpe auch sofort wieder aus. Während die Zeit läuft, blinkt die Status LED des Kanals.