readingsProxy

Aus FHEMWiki


readingsProxy
Zweck / Funktion
Aufsplitten von Mehrfachgeräten in einzelne FHEM-Devices
Allgemein
Typ Hilfsmodul
Details
Dokumentation EN / DE
Support (Forum) Automatisierung
Modulname 33_readingsProxy.pm
Ersteller Andre (Forum / Wiki)
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref!


Eventuell ist es nötig, die Readings eines Gerätes durch ein anderes, eigenständiges Gerät verwalten (auslesen, beschreiben) zu lassen. Auf diese Weise könnten auch neue Readings für ein Gerät (indirekt) erstellt werden, welches über diese Eigenschaften ursprünglich gar nicht verfügt. Auch können beispielsweise Mehrfachsensoren und Aktoren (1-Wire 2- oder 8-fach Schalter, EnOcean Serienschalter, ...) einzeln bedienbaren Geräte zugeordnet.

Hierzu dient das FHEM-Hilfsmodul readingsProxy. Sobald das Proxy Device on und off bereitstellt, stehen über die setExtentions auch on-for-timer, on-till, blink, usw. zur Verfügung.

Für das Proxy Device sind keine speziellen Voraussetzungen nötig.

Anwendung

Definition

Im Folgenden wird das Readingsproxy auch als Proxy Device bezeichnet.

Das Readingsproxy ist ein eigenständiges Gerät und wird durch den Befehl

define <name> readingsProxy <device>:<reading>

definiert. Dabei bezieht sich <device> auf das Gerät, dessen Reading durch den Proxy verwaltet werden soll, <reading> ist das zu verwaltende Reading. Sind Wildcards wie .* und RegEx möglich?

Attribute

Attribute mit spezieller Bedeutung für Proxy Devices:

readingFnAttributes
...
getFn
...
setFn

setFn führt die Übergabe eines set-Befehls an das übergeordnete Gerät durch. Hier handelt es sich typischerweise um einen Perl-Ausdruck. Verwendet werden können die folgenden Variablen: $CMD (das vom Proxy ausgelöste set-Kommando), $DEVICE (das parent-Gerät), $READING (das betreffende Reading) and $ARGS (unklar).

Das Argument von setFn ist der Set-Befehl des ReadingProxy, das Ergebnis von setFn wird an das übergeordnete Gerät übergeben.

valueFn
...

Anwendungsbeispiele

Achtung: Die Beispiele enthalten keine Maskierungen oder Verdoppelungen für ; und Zeilenende, sondern sind so angegeben, wie sie in FHEMWEB im Befehl-Eingabefeld oder nach Klick auf DEF eingegeben werden. Bei manuellem Einfügen in eine Konfigurationsdatei sind diese Maskierungen oder Verdoppelungen natürlich vorzunehmen.

1-Wire dual switch (DS2406) mit OWDevice als input (erster Kanal)

 define myProxy readingsProxy myDS2406:latch.A
 attr myProxy valueFn {($VALUE == 1)?"on":"off"}

1-Wire 8-fach switch (DS2408) mit OWSWITCH als Output (erster Kanal)

  define SchalterA readingsProxy OWX:xxx
  attr SchalterA setFn {($CMD eq "on")?"output A off":"output A on"}
  attr SchalterA setList on off
  attr SchalterA valueFn {($VALUE == 0)?"off":"on"}
  attr SchalterA webCmd on:off

on/off vertauschen

 define proxy readingsProxy meineLampe:state
 attr proxy setFn {($CMD eq "on")?"off":"on"}
 attr proxy valueFn {($VALUE eq "on")?"off":"on"}

EnOcean Serienschalter

Info green.pngAb Modulversion 11866/31.7.2016 von 10_EnOcean.pm besitzen auch virtuelle Schalter die Readings channel[A-D]. Ein readingsProxy sollte ab dieser Modulversion besser von diesen Readings, analog des Beispiels im EnOcean Starter Guide, abgeleitet werden. Auf Devices anderer Module ist das gezeigte Beispiel weiterhin übertragbar

Siehe auch EnOcean Starter Guide

 #Kanal A zur Steuerung mit on und off
 define Schalter_channelA readingsProxy Schalter:state
 attr Schalter_channelA setFn {($CMD eq "on")?"AI":"A0";;}
 attr Schalter_channelA setList on off
 attr Schalter_channelA valueFn {$LASTCMD}
 attr Schalter_channelA webCmd on:off

 #Kanal B zur Steuerung mit on und off
 define Schalter_channelB readingsProxy Schalter:state
 attr Schalter_channelB setFn {($CMD eq "on")?"BI":"B0";;}
 attr Schalter_channelB setList on off
 attr Schalter_channelB valueFn {$LASTCMD}
 attr Schalter_channelB webCmd on:off

setExtensions für Geräte implementieren

Wenn ein (Original-)Device von sich aus die setExtentions nicht unterstützt, kann das durch Verwendung eines Proxy Device behoben/implementiert werden. Sobald ein Proxy Device on und off bereitstellt, stehen über die setExtensions auch on-for-timer, on-till, blink, usw. zur Verfügung.

 define STECKD_TEST readingsProxy STECKD_BAUHS:state
 attr STECKD_TEST setFn {($CMD eq "on")?"angle 3874":"angle 3873";}
 attr STECKD_TEST setList on off
 attr STECKD_TEST valueFn {$LASTCMD}

Beispiel aus diesem Forenthread übernommen. (Anmerkung: Die im Forenthread noch verwendete Lösung über setFN mit "readingsSingleUpdate" sowie valueFn {} ist nach Einführung von $LASTCMD in readingsProxy nicht mehr notwendig. Dementsprechend wurde hier die neuere Variante mit $LASTCMD genutzt)


Shellkommando zum Schalten verwenden

 define <name> readingsProxy <name>
 attr <name> setList on off
 attr <name> setFn { fhem('"<shell command to execute> '. ($CMD eq 'on' ?'<on>':'<off>') .'"') }

Button für eine bestimmte Harmony Activity im Frontend und Homekit

siehe harmony

Links