fhem.pl Referenz



Zum Anfang

Alles laden

Deutsche Englische Doku für laden

Inhalt

    Einleitung
    FHEM Befehls-Typen
    Geräte-Spezifikation
    Attribute

    FHEM-Befehle
      apptime   attr   backup   cancel   cmdalias   configdb   copy   count   createlog   CULflash   define   defmod   delete   deleteattr   deletereading   displayattr   fhemdebug   fheminfo   get   help   HMtemplate   IF   include   inform   JsonList2   KNX_scan   list   modify   MSG   notice   quit   reload   rename   rereadcfg   restore   save   search   set   setdefaultattr   setreading   setstate   setuuid   show   shutdown   sleep   template   trigger   update   uptime   usb   version   XmlList  

    Gerätemodule
      global
      AirUnit   alexa   ALL4027   allergy   AMADCommBridge   AMADDevice   AndroidDB   AndroidDBHost   AptToDate   Aqicn   ArduCounter   Arlo   Aurora   AutomowerConnect   AutoShuttersControl   BDKM   BEOK   BlinkCamera   BOSEST   BOTVAC   BRAVIA   Broadlink   BS   Calendar   CALVIEW   CanOverEthernet   CDCOpenData   CM11   CO20   COE_Node   ComfoAir   CUL   CUL_EM   CUL_FHTTK   CUL_HM   CUL_HOERMANN   CUL_IR   CUL_MAX   CUL_REDIRECT   CUL_RFR   CUL_TCM97001   CUL_TX   CUL_WS   dash_dhcp   DENON_AVR   DENON_AVR_ZONE   DFPlayerMini   DLNARenderer   DoorBird   Dooya   DUOFERN   DUOFERNSTICK   DWD_OpenData   EC3000   echodevice   ECMD   ECMDDevice   EGPM   EGPM2LAN   EleroDrive   EleroStick   EleroSwitch   ElsnerWS   EM   EMEM   EMGZ   EMT7110   EMWZ   ENECSYSGW   ENECSYSINV   ENIGMA2   EnOcean   EQ3BT   ESA2000   ESCVP21net   EseraAnalogInOut   EseraCount   EseraDigitalInOut   EseraDimmer   EseraIButton   EseraMulti   EseraOneWire   EseraShutter   EseraTemp   ESPEasy   ESPEInk   fakeRoku   FBAHA   FBAHAHTTP   FBDECT   FHT   FHT8V   FHZ   FLAMINGO   FRAMEBUFFER   FReplacer   FRITZBOX   FRM   FRM_AD   FRM_I2C   FRM_IN   FRM_OUT   FRM_PWM   FRM_RGB   FRM_ROTENC   FRM_SERVO   FRM_STEPPER   FS10   FS20   FTUISRV   FULLY   GAEBUS   GardenaSmartBridge   GardenaSmartDevice   gassistant   GFPROBT   GHoma   GOOGLECAST   harmony   HEATRONIC   HEOSGroup   HEOSMaster   HEOSPlayer   Hideki   HMCCU   HMCCUCHN   HMCCUDEV   HMCCURPCPROC   HMLAN   HMS   HMUARTLGW   holiday   HOMBOT   HP1000   HProtocolGateway   HProtocolTank   HTTPAPI   HTTPMOD   HTTPSRV   HUEBridge   HUEDevice   HusqvarnaAutomower   HVAC_DaikinAC   HXB   HXBDevice   HYDRAWISE   Hyperion   I2C_ADS1x1x   I2C_BH1750   I2C_BME280   I2C_BMP180   I2C_DS1307   I2C_EEPROM   I2C_EMC1001   I2C_HDC1008   I2C_K30   I2C_LCD   I2C_LM75A   I2C_MCP23008   I2C_MCP23017   I2C_MCP342x   I2C_MMA845X   I2C_PCA9532   I2C_PCA9685   I2C_PCF8574   I2C_SHT21   I2C_SHT3x   I2C_TSL2561   Iluminize   IOhomecontrol   IOhomecontrolDevice   IPCAM   IPWE   IT   Itach_IR   Itach_IRDevice   Jabber   JawboneUp   JeeLink   JSONMETER   JsonMod   KeyValueProtocol   Klafs   km200   KM273   KNX   KNXIO   KNXTUL   KODI   KOPP_FC   KOSTALPIKO   KS300   LaCrosse   LaCrosseGateway   LaMetric2   Level   LGTV_IP12   LGTV_WebOS   LIGHTIFY   LIRC   livetracking   LuftdatenInfo   LUXTRONIK2   M232   M232Counter   M232Voltage   mailcheck   MAX   MAX_Temperature   MAXLAN   MEDIAPORTAL   MieleAtHome   MilightBridge   MilightDevice   MOBILEALERTS   MOBILEALERTSGW   Modbus   ModbusAttr   ModbusElsnerWS   ModbusSET   ModbusTrovis5576   MPD   MQTT   MQTT2_CLIENT   MQTT2_DEVICE   MQTT2_SERVER   MQTT_DEVICE   MQTT_GENERIC_BRIDGE   MSGFile   MSGMail   MYSENSORS   MYSENSORS_DEVICE   N4HBUS   N4HMODULE   Nello   netatmo   NetIO230B   Netzer   NetzerI2C   Netzfrequenz   Neuron   NeuronPin   NEUTRINO   Nextion   Nmap   NotifyAndroidTV   npmjs   NUKIBridge   NUKIDevice   NUT   OBIS   OctoPrint   OilFox   ONKYO_AVR   ONKYO_AVR_ZONE   OPENWEATHER   OREGON   OW2S0SMSGUARD   OWAD   OWCOUNT   OWDevice   OWID   OWLCD   OWMULTI   OWServer   OWSWITCH   OWTHERM   OWVAR   OWX   OWX_ASYNC   OWX_CCC   OWX_FRM   OWX_SER   OWX_TCP   panStamp   PCA301   PHC   PHILIPS_AUDIO   PHTV   PIFACE   pilight   pilight_contact   pilight_ctrl   pilight_dimmer   pilight_raw   pilight_smoke   pilight_switch   pilight_temp   ping   PIONEERAVR   PIONEERAVRZONE   PiXtendV2   plex   Plugwise   POKEYS   PrecipitationSensor   PROPLANTA   Pushbullet   PushNotifier   Pushover   Pushsafer   PW_Circle   PW_Scan   PW_Sense   PW_Switch   PWM   PWMR   PylonLowVoltage   QRCode   Revolt   RFXCOM   RFXMETER   RFXX10REC   RHASSPY   Robonect   RPI_1Wire   RPI_GPIO   RPII2C   rssFeed   S7   S7_ARead   S7_AWrite   S7_Client   S7_DRead   S7_DWrite   S7_S5Client   S7_S7Client   SamsungAV   Schellenberg   SchellenbergHandle   SCIVT   SD_BELL   SD_GT   SD_RSL   SD_UT   SD_WS   SD_WS07   SD_WS09   SD_WS_Maverick   serviced   ShareMaster   Shares   SHC   SHCdev   Shelly   ShellyMonitor   Signalbot   SIGNALduino   SIGNALduino_un   siri   SIS_PMS   SISPM   SMAEM   SMAEVCharger   SMAInverter   SmartMeterP1   SMARTMON   SmartPi   SMASTP   SML   Snapcast   SolarEdgeAPI   SolarForecast   SOMFY   SONOS   SONOSPLAYER   speedtest   Spotify   SSCal   SSCam   SSCamSTRM   SSChatBot   SSFile   STACKABLE   STACKABLE_CC   STV   SVDRP   SWAP   SWAP_0000002200000003   SWAP_0000002200000008   SYSMON   SYSSTAT   systemd_watchdog   TA_CMI_JSON   tahoma   TBot_List   TCM   TechemHKV   TechemWZ   TEK603   TelegramBot   TellStick   TeslaPowerwall2AC   THINKINGCLEANER   THZ   Timer   todoist   TPLinkHS110   tradfri   TRAFFIC   TRX   TRX_ELSE   TRX_LIGHT   TRX_SECURITY   TRX_WEATHER   TUL   UbiquitiMP   UbiquitiOut   UBUS_CALL   UBUS_CLIENT   Unifi   UnifiClient   UnifiProtect   UnifiSwitch   UnifiVideo   UNIRoll   USBWX   USF1000   UWZ   Vallox   VBUSDEV   VBUSIF   VCLIENT   VCONTROL   Verkehrsinfo   VIERA   vitoconnect   VolumeLink   Weather   WifiLight   WINCONNECT   withings   WMBUS   WS2000   WS300   WS3600   WS980   Wunderground   WWO   X10   XiaomiBTLESens   XiaomiDevice   xs1Bridge   xs1Dev   YAMAHA_AVR   YAMAHA_BD   YAMAHA_MC   YAMAHA_NP   yowsup   ZM_Monitor   ZoneMinder   ZWave   ZWCUL   ZWDongle  

    Hilfs (Erweiterungs-) Module
      Alarm   alarmclock   allowed   archetype   Astro   at   autocreate   average   Babble   cloneDummy   configDB   CustomReadings   Dashboard   DbLog   DbRep   dewpoint   DOIF   DOIFtools   DSBMobile   dummy   ElectricityCalculator   eventTypes   expandJSON   FB_CALLLIST   FB_CALLMONITOR   feels_like   FHEM2FHEM   FhemTestUtils   FHEMWEB   FileLog   FLOORPLAN   freezemon   GasCalculator   GEOFANCY   GoogleAuth   GSI   GUEST   HCS   Heating_Control   HMinfo   HOMEMODE   HourCounter   InfluxDBLogger   InfoPanel   inotify   Installer   KM271   LightScene   Log2Syslog   logProxy   MaxScanner   MediaList   monitoring   msgConfig   msgDialog   notify   PachLog   PET   PID20   PostMe   powerMap   PRESENCE   rain   RandomTimer   readingsChange   readingsGroup   readingsHistory   readingsProxy   readingsWatcher   remotecontrol   RESIDENTS   ROLLO   ROOMMATE   RSS   sequence   SingleFileLog   SIP   SoftliqCloud   statistics   structure   SUNRISE_EL   SVG   Talk2Fhem   telnet   Text2Speech   THRESHOLD   TrashCal   Twilight   Utils   watchdog   Watches   WaterCalculator   weblink   WeekdayTimer   weekprofile   WOL   WUup   YAAHM  

    PERL Besonderheiten
    gnuplot file Syntax

Einleitung

[EN DE]

    FHEM wird hauptsächlich zur Heimautomatisierung benutzt, ist aber ebenso für andere Aufgaben einsetzbar wo Benachrichtigungen, Zeitschaltungen und Datensammlungen eine wichtige Rolle spielen.

    FHEM unterstützt verschiedene Hardwaregeräte die eine Verbindung mittels unterschiedlicher Protokolle (z.B. FHZ1000 mit Interfaces vom Typ FS20 und HMS, CM11 um mit X10 zu arbeiten) sowie logischer Geräte wie FS20 oder FHT die einen Nachrichtenaustausch mit verschiedensten Geräten die diese Protokolle verwenden ermöglichen.

    FHEM ist modular. Abhängig von den unterschiedlichen Geräten werden in den Modulen verschiedene Funktionen (z.B. define, get, set) realisiert. FHEM enthält weitere Funktionen wie Trigger (notify), Zeitabhängige Funktionen (at) die die Funktionalität erweitern.

    FHEM wird entweder über einfache ASCII-Kommandozeilen gesteuert die in Dateien wie z.B. der Konfigurationsdatei fhem.cfg gespeichert sind oder über eine TCP/IP Verbindung, entweder direkt in einer "telnet"-Sitzung, oder per fhem.pl im Client-Modus oder über eines der Webfrontends.
     

    Wenn Sie den FHEM-Server starten, müssen Sie eine Konfigurationsdatei auswählen:

      perl fhem.pl fhem.cfg
     

    Nachstehend eine Minimal-Konfiguration Datei:

        attr global logfile log/fhem.log
        attr global modpath .
        attr global statefile log/fhem.save
        attr global verbose 3
        define telnetPort telnet 7072 global
        define WEB FHEMWEB 8083 global
    Die letzten zwei Zeilen definieren einen telnet und einen WEB Zugang, beide können aber bei Bedarf auch abgeschaltet werden.

    Die WEB Schnittstelle kann über
      http://<fhemhost>:8083
    erreicht werden.

    Die Kommunikation mit FHEM kann entweder in einer "session" (über telnet) oder über einzelne Klient-Kommandos (über fhem.pl) erfolgen. Beispiel:
      telnet <fhemhost> 7072
      <NL>
      (Die Betätigung der "Enter"-Taste schaltet in den  "prompt" Modus)
      <command>...
      quit

    oder
      fhem.pl <fhemhost>:7072 "<command>..."

    Falls FHEM als root gestartet wurde, und ein OS-Benutzer fhem existiert, dann wechselt FHEM nach dem start zu diesem Benutzer (via setuid).

    Falls FHEM mit der -d Koommandozeilenoption gestartet wurde (perl fhem.pl -d fhem.cfg), dann wird verbose auf 5 gesetzt und die Logs werden auf STDOUT geschrieben.

    Die Umgebungsvariable FHEM_GLOBALATTR wird ausgewertet: sie enthält Leerzeichengetrennte Name=Wert Paare, wobei Name ein global Attribut ist. So gesetzte Werte überschreiben die Werte aus der Konfigurationsdatei.

FHEM Befehlstypen

[EN DE]

    Es gibt drei Arten von Befehlen: "FHEM" Befehle (werden in diesem Dokument beschrieben), Shell-Befehle (diese müssen von doppelten Anführungszeichen "" eingeschlossen werden) und perl-Ausdrücken (von geschwungenen Klammern {} eingeschlossen). Shell-Befehle oder perl-Ausdrücke werden für komplexe at oder notify Ausdrücke benötigt, können aber auch als "normale" Befehle angewendet werden.

    Die folgenden drei Befehle bewirken z.B. dasselbe Ergebnis, wenn sie am telnet-Prompt eingegeben werden:

      set lamp off
      "fhem.pl 7072 "set lamp off""
      {fhem("set lamp off")}

    Shell-Kommandos werden im Hintergrund ausgeführt, perl-Ausdrücke und FHEM-Kommandos werden im Haupt-"thread" ausgeführt. Um perl-Ausdrücke leichter eingeben zu können, sind einige Spezialfunktionen und Variablen verfügbar. Lesen Sie sich bitte die Abschnitte Perl special zum besseren Verständnis durch.

    Um FHEM-Befehle in einen Shell-Script zu triggern (dies ist eine "andere" Möglichkeit), benutzen Sie bitte die oben beschriebene Client-Form der fhem.pl.

    Mehrere FHEM-Kommandos hintereinander werden mittels Semikolon (;) getrennt. Weil Semikola auch in perl-Code oder Shell-Programmen benutzt werden, müssen sie mittels doppelten Semikola geschützt werden. Lesen Sie sich bitte die Bemerkungen des notify-Abschnittes zu Kommandoparametern und Regeln durch.

    Z.B. schaltet die erste der folgenden Befehlszeilen die Lampe 1 nur/erst zur Uhrzeit 07:00 Uhr aus, die Lampe 2 aber sofort und die zweite Befehlszeile schaltet Lampe 1 und 2 um 7:00 Uhr gleichzeitig aus.

      define lampoff at 07:00 set Lamp1 off; set Lamp2 off
      define lampoff at 07:00 set Lamp1 off;; set Lamp2 off

    Für jede weitere Indirektion muss man die Strichpunkte verdoppeln. Um also die beiden Lampen um 7:00 für 10 Minuten einzuschalten schreibt man:

      define onAt at 07:00 set Lamp1 on;;set Lamp2 on;; define offAt at +00:10 set Lamp1 off;;;;set Lamp2 off

    Keine Angst, das Vorherige kann in FHEM auch deutlich einfacher formuliert werden als:

      define onAt at 07:00 set Lamp1,Lamp2 on-for-timer 600

    Befehle können entweder direkt eingegeben oder aus einer Datei (z.B. am Start von FHEM aus der Konfugurationsdatei) eingelesen werden. Die Befehle werden entweder direkt ausgeführt oder später wenn sie als Argumente eines at oder notify-Befehles verwendet werden.

    Eine mit einem \ abgeschlossene Zeile wird mit der nachfolgenden Zeile verbunden. Somit können lange Befehlszeilen (die z.B. aus mehreren perl-Befehlen bestehen) auf mehrere Zeilen aufgteilt werden. Einige Web-Frontends (z.B. webpgm2) erleichtern die Eingabe von sich über mehrere Zeilen erstreckende Befehle, indem man keine \ am Zeilenende eingeben muss.

    Achtung: unterschiedlicher Befehlsarten (FHEM/Shell/perl) in einer Kommandozeile sind nicht unterstützt, auch wenn es in manchen Fällen funktioniert.

Geräte-Spezifikation (devspec)

[EN DE]
    Die Befehle attr, set, get, usw. attr, deleteattr, displayattr, delete, get, list, set, setreading, setstate, trigger können eine komplexere Gerätespezifikation als Argumente enthalten, die auch eine Anzahl von Geräten betreffen kann. Eine Gerätespezifikation kann folgendes sein:
    • ein einzelner Gerätename. Dies ist der Normalfall
    • eine durch Komma(,) getrennte Liste von Gerätenamen
    • ein regulärer Ausdruck
    • ein NAME=WERT Ausdruck, wo NAME ein "Internal" Wert wie TYPE ist, ein Reading-Name oder ein Attribut. WERT ist ein regulärer Ausdruck. Um die Bedingung zu negieren, muss NAME!=WERT verwendet werden. Um die Suche einzugrenzen, kann man als Praefix i: für internal Werte, r: für Reading-Namen und a: für Attribute verwenden, siehe das Beispiel unten. Groß-/Kleinschreibung wird durch die Verwendung von ~ oder !~ ignoriert.
    • Falls die Spezifikation von :FILTER=NAME=WERT gefolgt wird, dann wird die zuvor gefundene Liste durch diesen neuen Ausdruck gefiltert.
    Beispiele:
      set lamp1 on
      set lamp1,lamp2,lamp3 on
      set lamp.* on
      set room=kitchen off
      set room=kitchen:FILTER=STATE=on off
      set room=kitchen:FILTER=STATE!=off off
      list disabled=
      list room~office
      list TYPE=FS20 STATE
      list i:TYPE=FS20 STATE
    Bemerkungen:
    • die Spezifikation kann keine Leerzeichen enthalten.
    • falls ein Gerätename exakt dem Spezifikation entspricht, dann werden keine reguläre Ausdrücke oder Filter ausgewertet.
    • zuerst wird die durch Komma getrennte Spezifikation abgearbeitet, dann folgen die regulären Ausdrücke und die Filter
    • die Befehlszeile kann die selbe Gerätebezeichnung mehrfach enthalten z.B.: "set lamp3,lamp3 on". Lamp3 wird hier zwei Mal eingeschalten.
    • um Strukturen mit komplexeren Anforderungen zu realisieren lesen Sie bitte den Abschnitt zu structure.

Attribute

[EN DE]
Alle Geräte haben Attribute. Diese werden mittels des Befehls attr gesetzt, angezeigt mit dem Befehl displayattr, und mit dem Kommando deleteattr entfernt.

Es gibt globale Attribute, die von allen Geräten genutzt werden, und lokale Attribute, die nur auf individuelle Geräteklassen zutreffen.

Manche Geräte (wie FHEMWEB) definieren automatisch neue globale Attribute bei der ersten Definition eines Gerätes dieses Typs.

Sie können den Befehl

attr global userattr <attributelist>

für das Gerät global verwenden, um neue globale Attribute zu deklarieren, und

attr <devicespec> userattr <attributelist>,

um neue lokale Attribute für bestimmte individuelle Geräte gemäß devspec zu deklarieren. <attributelist> ist eine durch Leerzeichen getrennte Liste, die die Namen der zusätzlichen Attribute enthält. In der Dokumentation zum Befehl attr sind Beispiele.

Seien Sie vorsichtig und überschreiben Sie keine zusätzlichen globale Attribute, die bereits zuvor durch Sie selbst oder ein Gerät definiert wurden. attr global userattr <attributelist> sollte so früh wie möglich in der Konfiguration erscheinen.

Gerätespezifische Attribute

Gerätespezifische Attribute sind in dem jeweiligen Abschnitt zum Gerät dokumentiert.

Globale Attribute für alle Geräte

  • alias
    Wird in FHEMWEB benutzt, um ein en anderen Namen für ein Gerät anzuzeigen z.B. wenn Sonderzeichen/Leerzeichen nicht in der Gerätedefinition verwendet werden können.

  • comment
    Fügt einen beliebigen Kommentar hinzu.

  • eventMap
    Ersetze Event Namen und setze Argumente. Der Wert dieses Attributes besteht aus einer Liste von durch Leerzeichen getrennte Werten. Jeder Wert ist ein durch Doppelpunkt getrenntes Paar. Der erste Teil stellt den "alten" Wert, der zweite Teil den "neuen" Wert dar. Wenn der erste Wert ein Slash (/) oder ein Komma (,) ist, dann wird nicht durch Leerzeichen sondern durch das vorgestellte Zeichen getrennt. Optional kann man auch ein widgetOverride angeben (angehängt nach einem Doppelpunkt (z.Bsp. on-for-timer:OnFor:texField). Die Voreinstellung ist :noArg, um das Input Feld bei cmdList zu vermeiden. Beispiele:
      attr store eventMap on:open off:closed
      attr store eventMap /on-for-timer 10:open/off:closed/
      set store open
    Die explizite Variante dieses Attributes hat folgenden Syntax:
      attr store eventMap { dev=>{'on'=>'open'}, usr=>{'open'=>'on'} }
      attr store eventMap { dev=>{'^on(-for-timer)?(.*)'=>'open$2'}, usr=>{'^open(.*)'=>'on$1'}, fw=>{'^open(.*)'=>'open'} }
    Diese Variante muss dann verwendet werden, falls das Mapping nicht symmetrisch ist. Der erste Teil (dev) spezifiziert dabei die Richtung Gerät zu Benutzer, d.h. falls das Gerät on 100 oder on-for-timer 100 meldet, dann wird der Benutzer open 100 zu sehen bekommen. Der zweite Teil (usr) spezifiziert die Richtung Benutzer zu Gerät, d.h. wenn man "set XX open 100" eingibt, dann wird das Kommando "on 100" an das Gerät gesendet. In beiden Fällen wird der Schlüssel zuerst direkt, und dann als Regexp mit dem Wert verglichen. Falls man Regexps mit Wildcards im usr Teil verwendet, dann muss man den fw Teil mit dem exakt gleichen Schlüsseln ausfüllen, damit FHEMWEB in der Detail-Ansicht den set-Auswahl richtig anzeigen kann.

  • genericDisplayType
    Wird von bestimmten Frontends (aber nicht FHEMWEB) verwendet, um für das Gerät passende Voreinstellungen (Bild/Befehle/etc) anzubieten. Z.Zt werden folgende Werte unterstützt: switch,outlet,light,blind,speaker,thermostat

  • group
    Gerätegruppen. FHEMWEB zeigt Geräte die in die gleiche Gruppe gehören auch in einer gemeinsamen Box an. Ein Gerät kann zu mehr als einer Gruppe gehören. In diesem Fall müssen die entsprechenden Gruppen durch Kommata getrennt eingetragen werden. Wenn dieses Attribut nicht gesetzt ist, wird der in der Gerätegruppe gesetzte Gerätetyp verwendet.

  • overrideNotifydev
    falls gesetzt (das Argument ist ein devspec), dann verwendet die Optimierung der Benachrichtigungen diesen Wert, statt das vom Modul gesetzte Internal NOTIFYDEV. Man sollte es nur dann setzen, falls man es besser weiss, als der Modul Maintainer. Damit es setzbar ist, muss vorher das global oder Geräte spezifische userattr Attribut ergänzt werden.

  • room
    Filtert/gruppiert Geräte. Ein Gerät kann zu mehr als einem Raum zugeordnet werden. In diesem Fall müssen die Raumzuordnungen durch Kommata getrennt angegeben werden.
    Geräte, die dem Raum mit der Bezeichnung "hidden" zugeordnet werden, erscheinen nicht auf der Webseite. Mit -> werden Räume strukturiert, z.Bsp. OG->Schlafzimmer

  • showtime
    Wird im FHEMWEB verwendet, um die Zeit der letzten Aktivität anstelle des Status in der Gesamtansicht anzuzeigen. Nützlich z.B. für FS20 PIRI Geräte.

  • suppressReading
    Wird verwendet, um nicht gewollte Readings zu entfernen. Der Wert ist ein Regular Expression, ergänzt mit ^ und $. Wird nur in Ausnahmefällen benötigt.

  • verbose
    Setzt den Schwellwert für die Logfile-Meldungen. Mögliche Werte sind:
    • 0 - Server start/stop
    • 1 - Fehlermeldungen oder unbekannte Pakete
    • 2 - bedeutende Ereigbisse/Alarme.
    • 3 - ausgesendete Kommandos werden gelogged.
    • 4 - von den einzelnen Geräten empfangene Daten.
    • 5 - Fehlersuche.
    Der für die global Instanz gesetzte Wert gilt als Voreinstellung für die Instanzen, die dieses Attribut nicht gesetzt haben.

readingFnAttribute

Die folgenden Attribute werden bei Modulen verwendet, die standardisierte Readings Aktualisierung der fhem.pl benutzen. Informieren Sie sich in der Liste der Modulattribute wenn Sie wissen möchten ob dies unterstützt wird.

  • stateFormat
    Ändert den Gerätestatus, dies ist z.Bsp. in der Ausgabe des list Kommandos zu sehen, oder in der Raumübersicht von FHEMWEB. Falls nicht gesetzt, dann wird das state Reading übernommen. Sonst werden alle Wörter im Wert des Attributes durch das entsprechende Reading des Gerätes ersetzt (soweit vorhanden). Falls der Wert in {} eingeschlossen ist, dann wird es als Perl Ausdruck ausgewertet. Die Auswertung passiert bei jeder Änderung eines Readings.
    Die hier beschriebene "set magic" wird auch angewendet.
    Hinweis: Manche Module aktualisieren STATE ganz oder teilweise direkt. In diesen Fällen kann es zu abweichenden Anzeigen kommen.
  • event-on-update-reading
    Wenn nicht gesetzt, erzeugt jede Veränderung eines Readings ein Ereignis, welches z.B. von notify oder FileLog berücksichtigt wird. Wenn gesetzt erzeugen nur Aktualisierungen der eingetragenen Readings ein Ereignis.
  • event-on-change-reading
    Dieses Attribut enthält eine durch Kommata getrennte Liste von Readings. Statt Reading kann auch ein regulärer Ausdruck verwendet werden. Wenn gesetzt, erzeugen nur Veränderungen der gelisteten Readings ein Ereignis. Wenn die aktualiserten Werte der gelisteten Readings identisch sind, wird kein Ereignis generiert.
    Wenn hinter dem Namen eines Readings eine :Schwelle angegeben ist, wird das Event nur getriggert wenn die Änderung grösser als diese Schwelle ist.
  • Die unterschiedlichen Bedeutungen von event-on-update-reading und event-on-change-reading sind folgende:
    1. Wenn beide Attribute nicht gesetzt sind erzeugt jede Aktualisierung eines jeden Readings eines Gerätes ein Ereignis.
    2. Wenn eines der Attribute gesetzt ist, erzeugen nur Updates oder änderungen von Readings die in einem der Attribute gesetzt sind ein Ereignis.
    3. Wenn ein Reading in event-on-update-reading aufgeführt ist, erzeugt eine Aktualisierung ein Ereignis unabhängig ob das Reading auch in event-on-change-reading aufgelistet ist.
  • timestamp-on-change-reading
    Dieses Attribut enthält eine durch Kommata getrennte Liste von Readings. Wenn gesetzt, werden die gelisteten Readings nicht aktualisiert (oder angelegt) wenn durch ein ebenfalls gesetztes event-on-change-reading für dieses Reading kein Ereignis erzeugen würde.
  • event-aggregator The primary uses of this attribute are to calculate (time-weighted) averages of readings over time periods and to throttle the update rate of readings and thus the amount of data written to the logs.

    This attribute takes a comma-separated list of reading:interval:method:function:holdTime quintuples. You may use regular expressions for reading. If set, updates for the listed readings are ignored and associated events are suppressed for a black-out period of at least interval seconds (downsampling). After the black-out period has expired, the reading is updated with a value that is calculated from the values and timestamps of the previously ignored updates within the black-out period as follows:

    functiondescription
    vthe last value encountered
    v0the first value encountered
    minthe smallest value encountered
    maxthe largest value encountered
    meanthe arithmetic mean of all values
    sdthe standard deviation from the mean
    medianthe median of all values (requires holdTime and function none)
    integralthe arithmetic sum (if not time-weighted) or integral area (if time-weighted) of all values
    nnumber of samples
    ttimestamp of the last value
    t0timestamp of the first value

    If method is none, then that's all there is. If method is const or linear, the time-weighted series of values is taken into account instead. The weight is the timespan between two subsequent updates. With the const method, the value is the value of the reading at the beginning of the timespan; with the linear method, the value is the arithmetic average of the values at the beginning and the end of the timespan. Rollovers of black-out periods are handled as one would expect it.

    One would typically use the linear method with the mean function for quantities continuously varying over time like electric power consumption, temperature or speed. For cumulative quantities like energy consumed, rain fallen or distance covered, the none method with the v function is used. The constant method is for discrete quantities that stay constant until the corresponding reading is updated, e.g. counters, switches and the like.

    If the holdTime in seconds is defined, the samples will be kept in memory allowing the calculation of floating statistics instead of blocked statistics. With holdTime defined the interval can be kept undefined so that the readings update rate is unchanged or it can be set to a value less then holdTime for downsampling as described above with a full history of the readings in memory. Note that the historic samples are not persistent and will be lost when restarting FHEM.

    The event aggregator only takes into consideration those updates that remain after preprocessing according to the event-on-update-reading and event-on-change-reading directives. Besides which, any update of a reading that occurs within a timespan from the preceding update that is smaller than the resolution of FHEM's time granularity is ditched.

    When more than one function should be calculated for the same reading, the original reading must be multiplied (e.g. by using a notify) before applying the event-aggregator to the derived readings.

    Examples:
    attr myPowerMeter event-aggregator EP_POWER_METER:300:linear:mean,EP_ENERGY_METER:300:none:v
    attr myBadSensor event-aggregator TEMP::none:median:300
    attr mySunMeter event-aggregator SUN_INTENSITY_24H::const:integral:86400

  • event-min-interval
    Dieses Attribut enthält eine durch Kommata getrennte Liste von "readings:minInterval" Paare. readings kann ein regexp sein. Ein Event wird nur dann generiert, falls seit dem letzten Auftreten des gleichen Events mindestens minInterval Sekunden vergangen sind. Falls event-on-change-reading auch spezifiziert ist, dann werden sie mit ODER kombiniert, d.h. wenn einer der beiden Bedingungen wahr ist.
  • oldreadings
    Dieses Attribut enthält eine durch Kommata getrennte Liste von Readings. regex sind erlaubt. Für jedes Reading aus der Liste speichert FHEM intern den vorherigen Wert wenn sich das Reading ändert. Zum Zugriff auf die Werte gibt es die OldReadings.* Routinen. Falls der vorherige Wert immer, d.h. auch wenn es sich nicht ändert, gespeichert werden soll, dann muss der letzte Werte der Komma getrennten Liste oldreadingsAlways sein.
  • userReadings
    Komma getrennte Liste von benutzerdefinierten Readings. Jede Definition hat folgendes Format:
      <reading>[:<trigger>] [<modifier>] { <perl code> }
    Diese benutzerdefinierte Readings werden bei jeder Aktualisierung der Gerätereadings gesetzt, indem das spezifizierte perl code { <perl code> } ausgeführt wird, und dessen Wert dem Reading zugewiesen wird. Falls <trigger> spezifiziert ist, dann findet diese Ausführung nur dann statt, falls einer der aktualisierten Readings dem regexp <trigger> entspricht (matched).
    Beispiele:
      attr myEnergyMeter userReadings energy { ReadingsVal("myEnergyMeter","counters.A",0)/1250.0;; }
      attr myMultiMeter userReadings energy1:counters.A.* {ReadingsVal("myMultiMeter","counters.A",0)/1250.0}, energy2:counters.B.* {ReadingsVal("myMultiMeter","counters.B",0)/1250.0}
    <modifier> kann die folgenden Werte haben:
    • none: als ob man es gar nicht spezifiziert hätte.
    • difference: das Reading wird auf die Differenz zw. dem aktuellen und dem vorherigen Wert gesetzt.
    • differential: das Reading wird auf die Differenz zw. dem aktuellen und dem vorherigen Wert, geteilt durch die Sekunden zw. der aktuellen Zeit und der letzten Auswertung, sekundengenau. Kein Wert wird berechnet, falls der Unterschied unter eine Sekunde liegt.
    • integral: das Gegenteil von differential. Das Ergebnis wird um das Produkt aus der Zeit-Differenz und der Durschnittswert der letzten zwei Readings erhöht.
      result += (time - timeold) * (oldval + value) / 2
    • offset: wenn der aktuellen Wert kleiner als der vorherige Wert ist wird der vorherige Wert zum Reading addiert. Das Reading kann dann als offset verwendet werden um einen Zähler der durch Sromverlust zurückgesetzt wird zu korrigieren.
    • monotonic: wenn die Differenz zw. dem aktuellen und dem vorherigen Wert positiv ist wird diese Differenz zum Reading addiert. Damit lässt sich von einem Zähler der bei Stromverlust zurückgesetzt wird ein monoton wachsender Zähler ableiten.
    Beispiel:
      attr myPowerMeter userReadings power differential { ReadingsVal("myPowerMeter","counters.A",0)/1250.0}
    Achtung:
    • Falls difference oder differential spezifiziert ist, dann werden für die Berechnung ältere Werte benötigt, d.h. der Wert wird frühestens beim zweiten Änderung gesetzt.
    • der Name der definierten Readings besteht aus alphanumerischen Zeichen, Unterstrich (_) und Minus-Zeichen (-).

Allgemeine Attribute

Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
  • IODev
    Setzt das IO oder das physische Device, welches zum Senden der Signale an dieses logische Device verwendet werden soll (Beispielsweise FHZ oder CUL). Hinweis: Beim Start weist FHEM jedem logischen Device das letzte physische Device zu, das Daten von diesem Typ empfangen kann. Das Attribut IODev muss nur gesetzt werden, wenn mehr als ein physisches Device fähig ist, Signale von diesem logischen Device zu empfangen.

  • disable
    Deaktiviert das entsprechende Gerät.
    Kann mit folgendem Befehl einfach umgeschaltet werden:
    attr <device> disable toggle

  • disabledForIntervals HH:MM-HH:MM HH:MM-HH:MM ...
    Das Argument ist eine Leerzeichengetrennte Liste von Minuszeichen- getrennten HH:MM oder D@HH:MM Paaren. Falls die aktuelle Uhrzeit zwischen diesen Werten fällt, dann wird die Ausführung, wie beim disable, ausgesetzt. Statt HH:MM kann man auch HH oder HH:MM:SS angeben. D ist der Tag der Woche, mit 0 als Sonntag and 3 als Mittwoch. Die Angabe des Wochentags für den "von" Wert impliziert _nicht_ den gleichen Tag für den "bis" Wert, z.Bsp. deaktiviert 1@00-24 die Asführung von Montag bis Ende der Woche, aber nicht Sonntag (da alle Zeitangaben am Montag vor 1@00 liegen). Um einen Intervall um Mitternacht zu spezifizieren, muss man zwei einzelne angeben, z.Bsp.:
      23:00-24:00 00:00-01:00
    Falls Teile des Wertes in {} eingeschlossen sind, dann werden sie als ein Perl Ausdruck ausgewertet:
      {sunset_abs()}-24 {sunrise_abs()}-08



attr

[EN DE]
    attr [-a|-r|-silent] <devspec> <attrname> [<value>]

    Dieser Befehl setzt ein Attribut für ein Gerät welches mit define definiert wurde. value ist optional, und ist 1 falls nicht spezifiziert. Sie können auch Ihre eigenen Attribute definieren, um sie in anderen Applikationen anzuwenden. Geben Sie "<attr <name> ?" ein, um eine Liste verfügbarer Attribute anzuzeigen. Siehe den Abschnitt über Geräte-Spezifikation für Details der <devspec>.
    Gerätespezifische Attribute sind in der Beschreibung zum jeweiligen Gerät aufgeführt. Nach der Durchführung das globale Ereignis "ATTR" wird generiert.
    Falls die Option -a spezifiziert ist, dann wird value zum aktuellen Wert hinzugefügt. Achtung: falls value nicht mit einem Komma (,) anfängt, dann wird es mit einem Leerzeichen angehängt.
    Mit der -r Option kann man Teile eines Attributes wieder entfernen.
    Mit der silent Option wird der Befehl nicht in die "save -?" Liste eingetragen.

    Beispiele:
      attr global verbose 3
      attr lamp room kitchen
      attr lamp group lights
      attr lamp loglevel 6
      attr weatherstation event-on-update-reading wind,temperature,humidity
      attr weatherstation event-on-change-reading israining
      attr weatherstation event-on-change-reading israining,state
      attr heating stateFormat Temp:measured-temp, Valve:actuator
      attr -a TYPE=SVG room ,SvgRoom
      attr -r TYPE=SVG room ,SvgRoom

    Bemerkungen:
    • Lesen Sie unter deleteattr nach um Attribute zu löschen.

cancel

[EN DE]
    cancel [<id> [quiet]]

    Listet benannte sleeps oder entfernt ein benanntes sleep.

define

[EN DE]
    define [option] <name> <type> <type-specific>

    Definiert ein Gerät. Sie müssen Geräte einrichten um sie zu beeinflussen (z.B. das Kommando set on/off auszuführen). Gleichfalls ist das Logfile besser lesbar wenn es z.B. "lamp off" anstatt "Device 5673, Button 00, Code 00 (off)" als Text enthält.
    Nach der Durchführung wird das globale Ereignis "DEFINED" generiert.

    Je nach Typ benötigt man unterscheidliche Argumente, lesen Sie sich bitte die zu dem jeweiligen Gerät gehörenden Abschnitte durch.

    Optionen:
    • -temporary
      Setzt den TEMPORARY Marker, was das Abspeichern dieser Definition in fhem.cfg verhindert.

    • -ignoreErr
      Reduziert die Anzahl der Fehlermeldungen, falls ein FHEM-Modul nicht geladen werden kann. Wird in fhem.cfg.demo verwendet, da das RSS Beispiel etliche, normalerweise nicht installierte perl-Module benötigt.

    • -silent
      Der Befehl wird nicht in die "save -?" Liste eingetragen.

defmod

[EN DE]
    defmod [option] <name> <type> <type-specific>

    Definiert ein Gerät, oder ändert es, falls es exisitiert. Um z.Bsp. eine Lampe 10 Minuten nach der letzten Meldung eines Bewegungsmelders abzuschalten, könnte man folgendes definieren:
      define mdNtfy notify motionDetector defmod mdOff at +00:10 set lamp off
    Falls man statt defmod ein define verwenden würde, dann würde eine Meldung innerhalb von 10 Minuten nach der letzten Meldung zu einem Fehler führen, da mdOff noch existiert.
    Für die Optionen siehe die define Dokumentation.

delete

[EN DE]
    delete <devspec>

    Löscht etwas was mit dem define Befehl erstellt worden ist.
    Siehe den Abschnitt über Geräte-Spezifikation für Details der <devspec>.
    Nach dem löschen, wird das globale Ereignis "DELETED" erzeugt.
    Beispiel:
      delete lamp

deleteattr

[EN DE]
    deleteattr [-silent] <devspec> [<attrname>]

    Löscht entweder ein einzelnes Attribut (siehe Abschnitt attr ) oder alle Attribute eines Gerätes (falls kein <attrname> angegeben wird).
    Siehe den Abschnitt über Geräte-Spezifikation für Details der <devspec>.
    <attrname> ist ein Regexp, ergänzt mit ^ und $, damit eine Menge von Attributen mit einem Befehl gelöscht werden kann.
    Nach der Durchführung das globale Ereignis "DELETEATTR" wird generiert.
    Beispiele:
      deleteattr lamp follow-on-for-timer
      deleteattr lamp

deletereading

[EN DE]
    deletereading <devspec> <readingname> [<older-than-seconds>]

    Entfernt das Reading <readingname> für das spezifizierte Gerät. <readingname> ist ein perl Regular-Expression, was den vollständigen Namen des Readings erfassen muss. Falls <older-than-seconds> spezifiziert ist, werden nur readings entfernt, die aelter als dieser Zahl (in Sekunden) sind.
    Mit größter Sorgfalt verwenden! FHEM kann abstürzen, falls man lebenswichtige Readings entfernt.
    Siehe den Abschnitt über Geräte-Spezifikation für Details der <devspec>.

    Beispiele:
      deletereading mySensor temp1
      deletereading mySensor temp\d+

displayattr

[EN DE]
    displayattr <devspec> [<attrname>]

    Zeigt entweder den Wert eines Attributes an (falls <attrname> spezifiziert wurde) oder alle Attribute eines Gerätes. Siehe den Abschnitt über Geräte-Spezifikation für Details der <devspec>.
    Falls mehrere Geräte spezifiziert wurden, dann enthält die Ausgabe den Namen der Geräte.
    Beispiele:
      fhem> di WEB
      menuEntries AlarmOn,/fhem?cmd=set%20alarm%20on
      room Misc.
      fhem> di WEB room
      Misc.

get

[EN DE]
    get <devspec> <type-specific>

    Fragt einen Wert direkt  (aktuell) vom Gerät ab und wartet auf eine Antwort. Eine allgemeine Liste möglicher Paramter erhalten Sie mit
      get <device> ?
    Siehe den Abschnitt über Geräte-Spezifikation für Details der <devspec>.
    Jedes Gerät hat unterschiedliche "get"-Parameter. Lesen Sie Details bitte im zugehörigen Abschnitt nach.

getstate

[EN DE]
    getstate <devspec>

    Gibt einen kurzen, durch Leerzeichen getrennte Statusliste für <devspec> aus . Dies ist nützlich, um das Gerät in z.B. Cacti zu beobachten.
    Beispiel:
      getstate lamp
      state:1

      getstate fl
      ack:0 actuator:2 day-temp:21.5 desired-temp:22.5 [...] measured-temp:22.9 [...]
    Bemerkung: Um diesen Befehl nutzen zu können, kopieren Sie bitte  die Datei 99_getstate.pm aus dem Verzeichnis contrib/getstate/ in Ihr FHEM Verzeichnis.

include

[EN DE]
    include <filename>

    Liest (z.B. als Befehlszeile in der fhem.cfg) die in <filename> angegebene Datei in FHEM ein und interpretiert jede Dateizeile als FHEM Befehl. Dieses Befehl sollte nur von Experten verwendet werden.

inform

[EN DE]
    inform {on|off|timer|raw} [regexp]

    Ermöglicht Event-Verfolgung über das telnet Interface. Es ist das telnet Equivalent des FHEMWEB Event-Monitors, es kann aber auch von weiteren Programmen zur Benachrichtigung verwendet werden. Optionen:
    • on
      aktiviert die Benachrichtigung.
    • onWithState
      zeigt auch das zusätzliche state Event
    • off
      deaktiviert die Benachrichtigung (sowohl Events wie auch Logs, s.u.)
    • raw
      zeigt (nur) die raw Events der physikalischen Module
    • timer
      stellt der Daten ein Zeitstempel vor
    • log
      zeigt die vom FHEM Log Interface protokollierten Daten
    • status
      zeigt den aktuellen Status

list

[EN DE]
    list [devspec] [value ...]
    oder
    list {-r|-R} devspec


    Auflistung aller "definitions", "notify" und "at"-Definitionen. Dies ist eines der wenigen Befehle, die im Normalfall eine Zeichenkette ausgeben.
    Siehe den Abschnitt über Geräte-Spezifikation für Details der <devspec>.

    Wenn <value> angegeben ist, dann wird dieses Wert (Internal, Reading oder Attribut) ausgegeben, soweit es vorhanden ist. Die Werte können mit einem Präfix eingeschränkt werden: i: für Internals, r: für Readings und a: für Attribute.

    Beispiel:
    fhem> list
    
      Type list  for detailed info.
    
      Internal:
        global               (Internal)
    
      FHZ:
        FHZ                  (fhtbuf: 23)
    
      FS20:
        Btn4                 (on-old-for-timer)
        Roll1                (on)
        Stehlampe            (off)
    
      FHT:
        fl                   (measured-temp: 21.1 (Celsius))
    
      KS300:
        out1                 (T: 2.9  H: 74  W: 2.2  R: 8.2  IR: no)
    
      at:
        at_rollup            (Next: 07:00:00)
    
      notify:
        ntfy_btn4            (active)
    
      FileLog:
        avglog               (active)
    
      
    Wenn Sie für name einen Gerätenamen eingeben, dann erhalten Sie einen genauen Status für das in name angegebene Gerät angezeigt, z.B.:
      fhem> list fl
    
      Internals:
        CODE       5102
        DEF        5102
        NAME       fl
        NR         15
        STATE      measured-temp: 21.1 (Celsius)
        TYPE       FHT
        IODev      FHZ
      Attributes:
        room       Heizung
      Readings:
        2006-11-02 09:45:56   actuator        19%
        [...]
      
    Mit der -r (raw) Option werden die Daten in einem für fhem.cfg bzw. fhem.state passenden Format generiert. -R liefert diese Daten auch für alle von diesem Gerät vermutlich benögten Geräte. Achtung: die Bestimmung dieser Liste ist ungenau.

modify

[EN DE]
    modify [-silent] <name> <type-dependent-options>

    Dieser Befehl wird benutzt, um Definitionen zu verändern. Er ist nützlich, um at oder notify Definitionen zu verändern. Wenn Sie einen Wert einer an Definition verändern, dann wird nur der für die Zeit zuständige Teil geändert. Im Falle der Veränderung einer Definition vom Typ "notify" wird nur der  regex Teil geändert. Alle anderen Werte (Stati, Attribute,  etc) bleiben erhalten.
    Nach modify wird das global MODIFIED Event erzeugt.
    Nach der Durchführung das globale Ereignis "MODIFIED" wird generiert.
    Mit der silent Option wird der Befehl nicht in die "save -?" Liste eingetragen.

    Beispiel:
      define lampon at 19:00 set lamp on
      modify lampon *19:00
      modify lampon 19:00 set lamp on-for-timer 16

quit

[EN DE]
    quit

    Dieser Befehl wird in einer TCP/IP Session benutzt um die Client-Sitzung zu beenden.
    Wird dieser Befehl in einem Skript benutzt, wird das abarbeiten des Skriptes beendet.

    Beispiel:
      quit

reload

[EN DE]
    reload <module>

    Reload the given module from the module directory. It is a convenient way to test modules whithout restarting the program.

    Example:
      reload 99_PRIV

rename

[EN DE]
    rename <oldname> <newname>

    Benennt ein Gerät von <oldname> in <newname>, einschliesslich der Attribute, um. Das globale Ereignis "RENAMED" wird erstellt, Lesen Sie bitte den Abschnitt "notify" durch um Details zu erfahren.

    Beispiel:
      rename FHT_1234 fht.kitchen

rereadcfg

[EN DE]
    rereadcfg [fhem-config-file]

    Liest entweder die aktuelle Konfigurationsdatei oder die angegebene Datei ein.
    Der Ablauf ist dabei wie folgt:  Zuerst wird das statefile gesichert. Dann werden alle Geräte gelöscht. Dann wird die aktuelle Konfigurationsdatei (oder die angegebene Datei) eingelesen zuletzt wird das statefile neu eingelesen.
    Wenn dieser Ablauf abgeschlossen ist, wird das globale REREADCFG Ereignis ausgelöst. Alle existierenden Verbindungenwerden bis zum "rereadcfg" Ereignis getrennt.

    Beipiel:
      rereadcfg

save

[EN DE]
    save [<configfile>]

    Sichert zuerst das statefile und dann das configfile. Wenn ein Parameter angegeben wird dieser anstelle der allgemeinen Konfigurationsdatei benutzt.

    Hinweise:
    • Der Befehl speichert nur "definitions" und "attributes" aber keine (set/get) Befehle die vorher Teil der Konfigurationsdatei waren. Wenn Sie solche Befehle nach der Initialisierung (z.B. FHTcode) benötigen,dann müssen Sie sie mit notify triggern wenn das INITIALIZED Ereignis eintritt.
    • Der Befehl "save" versucht Kommentarzeilen  (Zeilen die mit # beginnen) und "include"-Zeilen zu erhalten, aber arbeitet nicht korrekt wenn FHEM für diese Dateien keine Schreibrechte besitzt.
    • Vor dem Überschreiben der Dateien wird die alte Version gesichert, siehe restoreDirs für Einzelheiten.

set

[EN DE]
    set <devspec> <type-specific>

    Der Befehl setzt Geräteparameter/sendet Signale an ein Gerät. Sie erhalten eine Liste verfügbarer Parameter wenn Sie folgendes eingeben:
      set <name> ?
    Siehe den Abschnitt über Geräte-Spezifikation für Details der <devspec>.
    Der "set"-Befehl gibt nur bei Fehler einen Wert zurück.

    Jedes Gerät hat verschiedene Parameter die mit "set" gesetzt werden können. Lesen Sie bitte den entsprechenden Abschnitt für das Gerät für Details durch.

    Ab featurelevel 5.7 ersetzt der set und setreading Befehl
    • [device:name] mit dem Wert des Readings, Internals oder Attributes für device, falls sowohl device, als auch Reading, Internal oder Attribut existiert, und nicht leer ist.
      • Man kann einen der Präfixe r:, i: oder a: verwenden, um die Suche einzuschränken, genau wie im devspec.
      • Das Suffix :d extrahiert die erste Zahl.
      • Das Suffix :i extrahiert die erste Zahl als Ganzzahl.
      • Das Suffix :r<n> extrahiert die erste Zahl, und rundet sie auf <n> Dezimalstellen. Falls <n> fehlt, dann wird auf eine Dezimalstelle gerundet.
      • Das Suffix :t liefert den Zeitstempel des Readings
      • Das Suffix :sec liefert Anzahl der Sekunden seit Änderung des Readings.
      Beispiel:
        set Lamp blink [blinkDummy:number] [r:blinkDummy:duration:d]
    • {(perlExpression)} mit dem Ergebnis der perlExpression. $DEV wird dabei mit dem Namen des vom set betroffenen Gerätes ersetzt.
    Diese Ersetzungen sind unter dem Namen "set magic" bekannt.

    Manche Module unterstützen die sog. set extensions, und in der entsprechenden Dokumentation ist ein Link auf diesem Text zu finden. Falls im Modul selber einer der unten aufgeführten Befehle implementiert ist, dann wird die Modul-Implementation verwendet.
    • on-for-timer <sekunden>
      Das Gerät wird per "on" eingeschaltet, und ein interner Zeitgeber wird erstellt, um nach <sekunden> ein "off" Kommando auszuführen. Um diesen Zeitgeber zu entfernen sollte man das Kommando mit dem Argument 0 erneut aufrufen. Achtung: dieser Zeitgeber wird bei einem restart nicht gespeichert.
    • off-for-timer <sekunden>
      siehe on-for-timer.
    • on-till <timedet>
      Das Gerät wird per "on" eingeschaltet, und ein at Instanz wird definiert, um es um <timedet> (Format: HH:MM[:SS]) per off auszuschalten. Diese at Instanz ist sichtbar unter dem Namen geräteName+"_till". Um das Ausschalten zu deaktivieren löscht man diese at Definition. Achtung: das Ein/Ausschalten wird nicht durchgeführt, falls die aktuelle Uhrzeit nach der spezifizierten Zeit ist, um folgende Szenarien zu vereinfachen:
        define morningLight at *06:00 set Lamp on-till {sunrise()}
    • on-till-overnight <timedet>
      Wie on-till, aber die aktuelle Uhrzeit wird nicht mit der Spezifizierten verglichen, damit folgendes funktioniert:
        define nightLight at *{sunset()} set Lamp on-till-overnight 01:00
    • off-till <timedet>
      siehe on-till.
    • off-till-overnight <timedet>
      siehe on-till-overnight.
    • blink <anzahl> <blink-periode>
      Das Gerät wird mit "on" für die <blink-periode> eingeschaltet, und das wird nach <blink-periode> wiederholt. Um das Blinken vorzeitig zu stoppen spezifiziert man "0 0" als Argument.
    • intervals <from1>-<till1> <from2>-<till2>...
      Das Gerät wird für die spezifizierten Intervalle eingeschaltet. Die einzelnen Intervalle sind Leerzeichen getrennt, und ein Intervall besteht aus zwei Zeitspezifikationen, die mit einem "-" getrennt sind.
    • toggle
      Das Gerät wird mit "on" eingeschaltet, falls STATE "off" ist (oder dim 0), sonst wird es mit "off" ausgeschaltet.
    Beispiele:
      set switch on-for-timer 12.5
      set switch on-till {sunset()}
      set switch blink 3 1
      set switch intervals 08:00-12:00 13:00-18:00


    attrTemplate
    mit diesem Befehl kann man eine Menge an vordefinierten Attributen setzen. Die Einträge befinden sich in Dateien im FHEM/lib/AttrTemplate Verzeichnis. Einträge können modul-spezifisch sein, und möglicherweise erfordern weitere Parameter.

setdefaultattr

[EN DE]
    setdefaultattr [<attrname> [<value>]]

    Fügt Sie ein Standardattribut hinzu. Jedem nach dieser Zuweisung definierte Gerät wird dieses Attribut zugewiesen. Wenn kein "attrname" angegeben wird, dann wird die Liste der Standardattribute gelöscht.

    Beispiel, um das Attribut "room kitchen" und "loglevel 4" allen Lampen zuzuweisen:
      setdefaultattr room kitchen
      setdefaultattr loglevel 4
      define lamp1 FS20 1234 11
      define lamp2 FS20 1234 12
      define lamp3 FS20 1234 13
      setdefaultattr

    Anmerkungen:
    • es gibt keine Möglichkeit, ein einzelnes Standardattribut aus der Liste tu löschen.

setreading

[EN DE]
    setreading <devspec> [YYYY-MM-DD HH:MM:SS] <reading> <value>

    Der Befehl setzt das Reading <reading> auf den Wert <value> ohne Signale an das betroffene Gerät zu senden, generiert aber Ereignisse und die übliche eventMap und stateFormat Umwandlung wird auch durchgeführt.
    Falls keine Zeit spezifiziert wurde, wird die aktuelle Uhrzeit verwendet.
    Siehe den Abschnitt über Geräte-Spezifikation für Details der <devspec> und die Beschreibung des set Befehls für Ersetzung.

    Beispiel:
      setreading lampe state on
    Achtung: setreading generiert kein Event für ein Gerät X, falls es aus einem notify für Gerät X aufgerufen wurde. In so einem Fall könnte man auf "sleep 0.1; setreading X Y Z" ausweichen.

setstate

[EN DE]
    setstate <devspec> <value>

    Der Befehl setzt den STATE Eintrag des Gerätes direkt, ohne Ereignisse zu generieren oder ein Signal an das Gerät zu senden. Dieser Eintrag ist maßgebend für die Status-Anzeige in diversen Frontends. Dieser Befehl wird auch im statefile benutzt.
    Siehe den Abschnitt über Geräte-Spezifikation für Details der <devspec>.

    Beispiel:
      setstate lampe An
    Achtung: setstate wird verwendet, um Readings im statefile zu speichern, in diesem Fall wird vor dem Wert ein Zeitstempel geschrieben. Als Seiteneffekt ist es nicht möglich, ein Status, was mit einem Zeitstempel der Form YYYY-MM-DD HH:MM:SS beginnt, korrekt zu speichern.

setuuid

[EN DE]
    setuuid <device> <uuid>

    Systembefehl, um den FUUID internen Wert zu setzen. Ist nicht vom Benutzer zu verwenden.

show

[EN DE]
    show <devspec>

    Zeigt einen temporären Raum mit Geräten aus <devspec>, verfügbar nur über FHEMWEB.
    Siehe den Abschnitt über Geräte-Spezifikation für Details der <devspec>.


    Example:
      show TYPE=CUL_HM

shutdown

[EN DE]

    shutdown [restart] [exitValue]

    Der Befehl fährt FHEM herunter (nach dem Sichern aller Gerätestatus). Er triggert den global:SHUTDOWN-Event. Mit dem optionalen Parameter restart startet FHEM danach neu. Der exitValue ist möglicherweise bei bestimmten Start-Skripten zur korrekten Funktion vonnöten bzw. wichtig.

    Beispiel:
      shutdown
      shutdown restart
      shutdown 1

sleep

[EN DE]
    sleep <sec|timespec|suchmuster> [<id>] [quiet]

    sleep gefolgt von weiteren Befehlen ist vergleichbar mit einem namenlosen at oder notify Kommando, es führt die nachfolgenden Befehle aus, nachdem es die spezifizierte Zeitspanne gewartet hat bzw. ein Event welches dem <suchmuster> entspricht aufgetreten ist. Die verzögerung kann
    • in Sekunden (Millisekunden genau, da man Nachkommastellen spezifizieren kann)
    • als timespec (HH:MM or HH:MM:SS oder {perlfunc})
    • oder als suchmuster (Gerätename oder Gerätename:Event)
    angegeben werden.
    Ein sleep mit einer <id> ersetzt ein sleep mit der gleichen <id> and can mit cancel entfernt werden. Falls sleep in at/notify/etc aufgerufen wurde, und die nachfolgenden Kommandos einen nicht leeren Text zurückgeliefert haben, dann wird dieser Text mit loglevel 2 protokolliert.
    quiet vermeidet diese Protokollierung.

    Beispiele:
      sleep 0.5
      define n3 notify btn3.* set lamp toggle;;sleep 0.5;;set lamp toggle
      define a3 at +*00:05 set Windsensor 1w_measure;; sleep 2 quiet;; get Windsensor 1w_temp

    Bemerkung: falls sleep von keinem Befehl gefolgt wird, dann wird FHEM blockiert. Das ist unerwünscht, und im FHEM-Log wird eine Warnung protokolliert.

trigger

[EN DE]
    trigger <devspec> <event>

    Generiert das Ereignis <event>, was z.Bsp. ein notify anstoßen kann, oder den FileLog zum protokollieren dieser Zeile bewegen kann.
    Siehe den Abschnitt über Geräte-Spezifikation für Details der <devspec>.

    Beispiel:
      trigger btn3 on

global

[EN DE]
    Das "global" Gerät wird benutzt, um allgemeingültige Attribute zu setzen. Es wird automatisch erstellt und kann nicht gelöscht oder umbenannt werden. Es hat keine "set" oder "get" Parameter.

    Define
      N/A

    Set
      N/A

    Get
      N/A

    Internals
    • init_errors
      Konfigurations Fehlermeldungen beim FHEM Start und Security Meldungen werden hier gesammelt.


    Attributes
    • altitude
      Höhe in Metern über dem Meeresspiegel, Voreinstellung ist 0.

    • archivedir
    • archivecmd
    • nrarchive
    • archivesort
      archivesort kann auf dem (voreingestellten) Wert alphanum oder timestamp gesetzt werden, und bestimmt die Methode für die Reihenfolgenberechnung der Dateien für nrarchive.

    • autoload_undefined_devices
      wenn dieses Attribut gesetzt ist, werden die zu einer neu empfangenen Nachricht zugehörigen Module automatisch geladen.  Dies erfolgt vom autocreate Gerät, um so automatisch ein FHEM-Gerät bei erreichen einer entsprechenden Nachricht zu erstellen.

    • autosave
      Der Standardwert 1 aktiviert einige Module nach einer Konfigurationsänderung automatisch zu speichern z.B. wenn ein neues Gerät erstellt wurde. Treten beim FHEM Start Konfigurationsfehler auf wird diese Funktion automatisch deaktiviert (0).

    • backupcmd
      Sie können das Update durch Ihre eigenen Befehle/Skripts durchführen indem Sie dieses Attribut setzen. Wenn dieses Attribut gesetzt ist, dann startet es als ein SHELL-Befehl und erstellt eine durch Leerzeichen getrennte Liste von Dateien/Verzeichnissen als ein Argument zum Befehl, z.B.:
        "/etc/fhem.cfg /var/log/fhem/fhem.save /usr/share/fhem/contrib /usr/share/fhem/FHEM /usr/share/fhem/foo /usr/share/fhem/foobar /usr/share/fhem/www"
      Bemerkung: Ihr Befehl/Skript muss die Zeichenkette "backup done" zurückgeben oder eine entsprechende Zeichenkette um Fehlermeldungen auszugeben, damit die Zusammenarbeit mit update funktioniert!
      Dieses Attribut wird vom backup Befehl benutzt.
      Beispiel:
        attr global backupcmd /usr/local/bin/myBackupScript.sh

    • backupdir
      Ein Ordner um die komprimierten Sicherheitsdateien zu speichern. Dieses Attribut wird vom backup Befehl benutzt.
      Beispiel:
        attr global backupdir /Volumes/BigHD

    • backupsymlink
      Wenn dieses Attribut auf etwas anderes als "no", dann unterstützt der Archviierungsbefehl "tar" symbolische Links in Ihrem Backup. Andererseits, wenn dieses Attribut auf "no" gesetzt ist werden symbolische Links vom Befehl "tar" ignoriert. Dieses Attribut wird vom backup Befehl benutzt.
      Beispiel:
        attr global backupsymlink yes

    • blockingCallMax
      Begrenzt die Anzahl der parallel laufenden Prozesse, die von der BlockingCall FHEM Hilfsroutine gestartet wurden. Sinnvoll auf weniger leistungsfaehigen Hardware, die Voreinstellung ist 32. Nach erreichen dieser Grenze werden weitere Aufrufe verzögert.

    • configfile
      Enthält den Namen der FHEM Konfigurationsdatei. Wenn save ohne Argumente aufgerufen wird dann wird die Ausgabedatei unter diesem Dateinamen gespeichert.

    • commandref
      Falls der Wert "full" ist, dann wird nach jedem update ein komplettes commandref.html generiert. Falls der Wert "modular" ist (voreingestellt seit FHEM 6.1), dann wird die Moduldokumentation erst nach Bedarf waehrend der Laufzeit per JavaScript geladen.

    • dnsHostsFile
      Falls dnsServer gesetzt ist, wird die angegebene Datei nach dem Hostnamen durchsucht. Um die vom System verwendete Datei zu benutzen, ist es unter Linux/Unix/OSX auf /etc/hosts und unter Windows auf C:\windows\system32\drivers\etc\hosts zu setzen. Achtung: es wird nur IPv4 unterstützt.

    • disableFeatures
      Komma separierte Liste von Werten. Z.Zt. werden Folgende erkannt:
      • attrTemplate: um das Laden der AttrTemplates zu vermeiden.
      • securityCheck: um bei fehlenden Benutzer/Passwort bei den aktivierten Netzwerk-Server keine Warnmeldung zu generieren.

    • dnsServer
      Enthält die IP Adresse des DNS Servers. Die von bestimmten Modulen (oder eigenen Code) aufgerufene HttpUtils_NonblockingGet wird auch bei der DNS Auflösung nicht mehr blockieren, falls dieses Attribut gesetzt ist, da es in diesem Fall FHEM eigene Routinen aufgerufen werden. Sonst werden die OS-eigenen, blockierenden Routinen inet_aton bzw gethostbyname aufgerufen.

    • encoding
      Wählt das perl-interne Format, mit dem Strings kodiert sind. Mögliche Werte sind: bytestream (Voreinstellung) und unicode.
      Achtung:
      • der Wert unicode ist experimentell, da nicht alle FHEM-Module mit dieser Variante geprüft wurden.
      • ändern des Wertes bewirkt ein save und ein shutdown restart.

    • featurelevel
      Aktiviere bzw. deaktiviere bestimmte alte oder neue Funktionen, basierend auf die FHEM Version. Z.Bsp. das $value hash für notify wird nur bis featurelevel 5.6 befüllt, da es unerwünscht ist. Stattdessen sollte man die Value() Funktion verwenden.

    • holiday2we
      Wenn dieses Attribut gesetzt wurde, dann wird die $we Variable als "true" betrachtet, wenn heute entweder Samstag/Sonntag ist, oder der Wert der holiday Variable zu diesem Attribut nicht "none" ist.
      Falls es eine Komma getrennte Liste ist, dann ist es wahr, falls einer der referenzierten Instanzen nicht "none" ist.
      Beispiel:
        attr global holiday2we hessen
      Falls sich einer der Elemente dieser Liste weekEnd nennt, dann wird nicht auf Samstag/Sonntag geprüft. Falls einer der Elemente noWeekEnd ist, und nicht "none" zurückliefert, dann ist $we 0.

    • httpcompress
      das HttpUtils Modul wird von etlichen FHEM modulen verwendet und aktiviert Komprimierung in der Voreinstellung. Falls man httpcompress auf 0 setzt, wird die Komprimierung deaktiviert.

    • ignoreRegexp
      Texte, wo dieses Regexp matcht, werden nicht geloggt. ^ und $ wird zum Regexp hinzugefügt, wie bei notify und FileLog.

    • keyFileName
      FHEM Module speichern Passwörter und IDs in der Datei FHEM/FhemUtils/uniqueID. Um mehrere FHEM-Instanzen im gleichen Verzeichnis starten zu können, kann man dieses Attribut setzen, dessen Wert an FHEM/FhemUtils/ angehängt wird.

    • latitude
      Geographische Breite in Dezimalgrad, Voreinstellung ist 50.112, Frankfurt am Main.

    • longitude
      Geographische Länge in Dezimalgrad, Voreinstellung ist 8.686, Frankfurt am Main.

    • logdir
      Falls gesetzt, wird %L in dem logfile Attribut (oder in der Dateinamen Spezifikation des FileLog Moduls) durch den Wert des Attributes ersetzt. Achtung: ändern des Wertes bewirkt nicht das Verschieben bereits erstellter Dateien, und kann zu diversen Problemen führen.

    • logfile
      Gibt das Logfile an, in welches gespeichert werden soll.  Sie können "-" für die Ausgabe in das stdout-Gerät. In diesem Fall stellt sich der Server nicht selbst in den Hintergrund.
      Der Name der Logdatei kann auch "wildcards" enthalten, um eine einfachere Abfolge für die Dateien zu erreichen. Lesen Sie bitte den Abschnitt FileLog. Fügen Sie die Attribute archivecmd / archivedir / nrarchive zum global Gerät hinzu wie Sie es auch bei einem FileLog device tun könnten.
      Sie können den Namen der Logdatei mit  { $currlogfile }festlegen.

    • maxChangeLog
      FHEM speichert Strukturänderungen, diese Daten kann man mit "save ?" oder mittels Klick auf das rote Fragezeichen in FHEMWEB anzeigen. Per Voreinstellung ist diese Liste auf 10 Einträge begrenzt, mit diesem Attribut kann man diesen Wert ändern.

    • maxShutdownDelay
      Einige Module benötigen Zeit zum Aufräumen beim shutdown, aber FHEM begrenzt diese Zeit auf 10 Sekunden. Mit diesem Attribut kann man sie anpassen.

    • modpath
      Mit modpath geben Sie den Pfad zu dem Verzeichnis der FHEM Module an. Der Pfad enthält nicht das Verzeichnis FHEM. Durch das setzen der Attribute, wird das Verzeichnis nach Dateinamen in der Form NN_<NAME>.pm durchsucht, und sie werden für die Definition von Geräten unter dem Namen <NAME> verfügbar gemacht. Wenn das erste Gerät des Typs <NAME> definiert wird, werden die entsprechenden Module geladen und in dem Modul die entsprechende Funktion mit dem Namen <NAME>_Initialize wird aufgerufen. Eine Ausnahme bilden Module die mit der Nummer 99 im Dateinamen beginnen. Diese enthalten PERL-Hilfsfunktionen und werden zur Startzeit geladen.

    • motd
      Nachricht des Tages. Wird im Begrüßungsbildschirm von FHEM angezeigt, oder direkt beim Start einer "telnet" Sitzung, bevor der fhem> Prompt erscheint. Zusätzlich wird der Inhalt des Internals init_errors angezeigt. Die Anzeige der gesamten Meldung wird durch attr global motd none abgeschaltet.

    • mseclog
      Wenn dieses Attribut gesetzt ist, enthalten Datums/Zeiteinträge (timestamp) in der Logdatei einen Millisekunden-Eintrag.

    • nofork
      Wenn dieses Attribut oder "attr global logfile -" gesetzt ist, dann wird FHEM nicht im Hintergrund abgearbeitet. Dieses Attribut ist bei einigen FHEM Installationen auf FRITZ!-Boxen notwendig, und wid fuer Windows automatisch gesetzt.

    • perlSyntaxCheck
      nach setzen des global Attributes perlSyntaxCheck wird eine Syntax-Prüfung der Anweisung durchgeführt bei jeder Änderung (define oder modify), falls die Anweisung Perl ist, und FHEM bereits gestartet ist.

    • pidfilename
      Schreibt die PERL Prozess-ID in die angegebene Datei. Der Server läuft als Daemon und einige Distributionen wollen anhand der PID testen, ob der FHEM Prozess läuft. Die Datei wird bei Ausführung des "shutdown"-Kommandos gelöscht.

    • proxy
      IP:PORT des proxy Servers, wird von HttpUtils benutzt.

    • proxyAuth
      Base64 kodiertes Benutzername:Passwort

    • proxyExclude
      Regexp, um bestimmte Hosts nicht via proxy zu kontaktieren.

    • restoreDirs
      update sichert jede Datei vor dem Überschreiben mit der neuen Version aus dem Web. Für diesen Zweck wird zuerst ein restoreDir/update Verzeichnis in der global modpath Verzeichnis angelegt, und danach ein Unterverzeichnis mit dem aktuellen Datum. In diesem Verzeichnis werden vor dem Überschreiben die alten Versionen der Dateien gerettet. Die Voreinstellung ist 3, d.h. die letzten 3 Datums-Verzeichnisse werden aufgehoben, und die älteren entfernt.
      Auch fhem.cfg und fhem.state wird auf diese Weise vor dem ausfüren von save gesichert, diesmal in das restoreDir/save Verzeichnis. Zum restaurieren der alten Dateien kann man das restore Befehl verwenden.
      Falls man den Wert auf 0 setzt, dann ist dieses Feature deaktiviert.

    • sendStatistics
    • statefile
      Dieses Attribut legt den Namen der Datei fest, in die Statusinformationen aller Geräte gespeichert werden  bevor der Server heruntergefahren wird. Falls diese Datei nicht angegeben wird, so werden keinerlei Informationen gesichert.

    • title
    • useInet6
      Die HttpUtils Routinen verwenden IPv6 für die Kommunikation, falls der Server eine IPv6 Adresse hat. Achtung: das Perl-Modul IO::Socket::INET6 wird benötigt.

    • userattr
      Enthält eine durch Leerzeichen getrennte Liste in welcher die Namen zusätzlicher Attribute aufgeführt sind. Diese müssen zuerst in dieser Liste definiert werden, bevor sie (bei allen Geräten) angewendet werden können.
      userattr kann auch für einzelne Geräte spezifiziert werden, um weitere Attribute für diese Geräte zu definieren.

    • dupTimeout
      Definert die Wartezeit, nach der 2 identische Ereignisse zweier Empfänger als Duplikat angesehen werden. Voreingestellt sind 0,5 Sekunden. 

    • showInternalValues
      Attribute/Geräte-Eintraege/Readings die mit Punkt (.) anfangen werden nicht angezeigt, es sei denn das globale Attribut showInternalValues ist gesetzt. Diese Variable wird bei dem list und xmllist Befehl, und bei der FHEMWEB Raumansicht geprüft.

    • sslVersion
      Setzt die akzeptierten Crypto-Algorithmen im TcpServices Hilfsmodul. Die Voreinstellung TLSv12:!SSLv3 wird als sicherer erachtet als die vorherige SSLv23:!SSLv3:!SSLv2, aber sie kann Probleme mit nicht ausreichend aktualisierten Netzwerk-Diensten verursachen.

    • stacktrace
      Falls gesetzt (auf 1), schreibt ins FHEM-Log zusätzlich zu jedem "PERL WARNING" den stacktrace.

    • restartDelay
      Setzt die Verzögerung beim Neustart mit shutdown restart, die Voreinstellung ist 2 (Sekunden).



    Events
    • INITIALIZED
      sobald die Initialization vollständig ist.
    • REREADCFG
      nachdem die Konfiguration erneut eingelesen wurde.
    • SAVE
      bevor die Konfiguration gespeichert wird.
    • SHUTDOWN
      bevor FHEM heruntergefahren wird.
    • DEFINED <devname>
      nach dem Definieren eines Gerätes.
    • DELETED <devname>
      nach dem Löschen eines Gerätes.
    • RENAMED <old> <new>
      nach dem Umbenennen eines Gerätes.
    • UNDEFINED <defspec>
      beim Auftreten einer Nachricht für ein undefiniertes Gerät.
    • MODIFIED <defspec>
      nach Änderung einer Gerätedefinition.
    • UPDATE
      nach Abschluss eines Updates.
    • CANNOT_FORK
      falls in BlockingCall dieses Problem auftritt.

ALL4027

    Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: ALL4027

AMADCommBridge

[EN DE]
    AMAD - Automagic Android Device

    AMADCommBridge - Kommunikationsbrücke für alle AMAD Geräte
    Dieses Modul ist das Ausgangsmodul zur erfolgreichen Integration von Androidgeräten in FHEM. Es stellt ferner eine Verbindungsebene zwischen AMAD unterstützten Geräten und FHEM zur Verfügung. Alle Kommunikation zwischen AMAD Android und FHEM läuft über diese Schnittstelle.
    Daher erfolgt die Ersteinrichtung eines AMAD Devices auch genau über diese Modulinstanz.

    Damit erfolgreich ein Androidgerät in FHEM eingerichtet werden kann, muss im ersten Schritt ein AMADCommBridge Device angelegt werden.

    Define

      define <name> AMADCommBridge

      Beispiel:

        define AMADBridge AMADCommBridge

      Diese Anweisung erstellt ein neues AMADCommBridge Device Namens AMADBridge.

    Es kann wahlweise die APP Automagic oder Tasker auf dem Android Gerät verwendet werden.
    Für Autoremote:
    Im folgenden muß lediglich das Flowset auf dem Android Gerät installiert werden und der Flow 'First Run Assistent' ausgeführt werden. (einfach den Homebutton drücken)
    Der Assistent geleitet Dich dann durch die Einrichtung Deines AMAD Gerätes und sorgt dafür das am Ende des Installationsprozess das Androidgerät als AMAD Device in FHEM angelegt wird.

    Für Tasker:
    Bei Verwendung von Tasker muss das Tasker-Projekt auf das Android Gerät geladen und in Tasker über die Import Funktion importiert werden.
    Für die Ersteinrichtung auf dem Android Gerät gibt es eine Eingabemaske (Scene), in der die benötigten Parameter (Device Name, Device IP, Bridgeport usw.)
    eingegeben werden können, diese Felder werden (soweit möglich) automatisch befüllt, können aber auch manuell angepasst werden.
    Hierfür den Task "AMAD" ausführen.
    Für schnellen Zugriff kann für diesen Task auch ein Tasker-Shortcut auf dem Homescreen angelegt werden.
    Infos zu den einzelnen Einstellungen erhält man durch einen Touch auf das jeweiligen Textfeld.
    Sind alle Eingaben vollständig, kann das AMAD Device über die Schaltfläche "create Device" erstellt werden.
    Damit Steuerbefehle von FHEM zu Tasker funktionieren wird zusätzlich noch die APP "Autoremote" oder "Tasker Network Event Server (TNES)" benötigt.

    Readings

    • JSON_ERROR - JSON Fehlermeldung welche von Perl gemeldet wird
    • JSON_ERROR_STRING - der String welcher die JSON Fehlermeldung verursacht hat
    • receiveFhemCommand - ist das Attribut fhemControlMode auf trigger gestellt, wird das Reading gesetzt sobald ein FHEM Befehl übersendet wird. Hierauf kann dann ein Notify triggern.
      Wird anstelle von trigger setControl als Wert für fhemControlMode eingestellt, wird das Reading nicht gestzt sondern der set Befehl sofort ausgeführt.
    • receiveVoiceCommand - wird die Sprachsteuerung von AMAD aktiviert (set DEVICE activateVoiceInput) so wird der letzte erkannten Sprachbefehle in dieses Reading geschrieben.
    • receiveVoiceDevice - Name des Devices von wo aus der letzte erkannte Sprachbefehl gesendet wurde
    • state - Status der Bridge, open, closed


    Attribute

    • allowFrom - Regexp der erlaubten IP-Adressen oder Hostnamen. Wenn dieses Attribut gesetzt wurde, werden ausschließlich Verbindungen von diesen Adressen akzeptiert.
      Achtung: falls allowfrom nicht gesetzt ist, und keine gütige allowed Instanz definiert ist, und die Gegenstelle eine nicht lokale Adresse hat, dann wird die Verbindung abgewiesen. Folgende Adressen werden als local betrachtet:
      IPV4: 127/8, 10/8, 192.168/16, 172.16/10, 169.254/16
      IPV6: ::1, fe80/10
    • debugJSON - wenn auf 1 gesetzt, werden JSON Fehlermeldungen in Readings geschrieben. Siehe hierzu JSON_ERROR* unter Readings
    • fhemControlMode - steuert die zulässige Art der Kontrolle von FHEM Devices. Du kannst über die Bridge auf 2 Arten FHEM Devices steuern. Entweder per direktem FHEM Befehl aus einem Flow heraus, oder als Sprachbefehl mittels Sprachsteuerung (set DEVICE activateVoiceInput)
      • trigger - ist der Wert trigger gesetzt, werden alle an die Bridge gesendeten FHEM set Befehle in das Reading receiveFhemCommand geschrieben und können so mittels notify ausgeführt werden. Sprachsteuerung ist möglich, es werden Readings receiveVoice* gesetzt. Auf dem Androidgerät können bei Sprachsteuerung mehrere Sprachbefehle mittels "und" verknüpft/aneinander gereiht werden. Bsp: schalte die Lichtszene Abends an und schalte den Fernsehr an
      • setControl - alle set Befehle welche mittels eines Flows über die Bridge gesendet werden, werden automatisch ausgeführt. Das triggern eines Readings ist nicht nötig. Die Steuerung mittels Sprache verhält sich wie beim Wert trigger
      • thirdPartControl - verhält sich wie trigger, bei der Sprachsteuerung ist jedoch ein anreihen von Sprachbefehlen mittels "und" nicht möglich. Dient der Sprachsteuerung über Module anderer Modulautoren ((z.B. 39_TEERKO.pm)


    Wie man bei Problemen mit dem Assistenten ein Androidgerät auch von Hand anlegen kann, erfährst Du in der Commandref zum AMADDevice Modul.

AMADDevice

[EN DE]
    AMADDevice - Automagic Android Device
    Dieses Modul liefert, in Verbindung mit der Android APP Automagic oder Tasker, diverse Informationen von Android Geräten. Die Android APP Automagic (welche nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem User freundlicher.
    Mit etwas Einarbeitung können jegliche Informationen welche Automagic/Tasker bereit stellt in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows/Task welcher seine Daten an die AMADDeviceCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern.
    Für all diese Aktionen und Informationen wird auf dem Androidgerät "Automagic/Tasker" und ein so genannter Flow/Task benötigt. Die App ist über den Google PlayStore zu beziehen. Das benötigte Flowset/Tasker-Projekt bekommt man aus dem FHEM Verzeichnis.

    Wie genau verwendet man nun AMADDevice?
    • stelle sicher das als aller erstes die AMADCommBridge in FHEM definiert wurde
    • Bei verwendung von Automagic
      • installiere die App "Automagic Premium" aus dem PlayStore.
      • installiere das Flowset 74_AMADDeviceautomagicFlowset$VERSION.xml aus dem Ordner $INSTALLFHEM/FHEM/lib/ auf dem Androidgerät
      • aktiviere den Installationsassistanten Flow in Automagic. Wenn man nun Automagic in den Hintergrund schickt, z.B. Hometaste drücken, startet der Assistant und legt automatisch ein Device für das Androidgerät an.
    • Bei verwendung von Tasker
      • installiere die App "Tasker" aus dem PlayStore.
      • installiere das Tasker Projekt 74_AMADtaskerset_$VERSION.prj.xml aus dem Ordner $INSTALLFHEM/FHEM/lib/ auf dem Androidgerät
      • Starte den Task "AMAD", es erscheint eine Eingabemaske in der alle Einstellungen vorgenommen werden können, durch einen Klick auf "create Device" wird das Gerät in FHEM erstellt.


    Ein AMADDevice Gerät von Hand anlegen.

    Define

      define <name> AMADDevice <IP-ADRESSE> <AMAD_ID> <REMOTESERVER>

      Beispiel:

        define WandTabletWohnzimmer AMADDevice 192.168.0.23 123456 Automagic

      In diesem Fall wird ein AMADDevice von Hand angelegt. Die AMAD_ID, hier 123456, muß auch exakt so als globale Variable in Automagic/Tasker eingetragen sein.



    Readings
    • airplanemode - Status des Flugmodus
    • androidVersion - aktuell installierte Androidversion
    • automagicState - Statusmeldungen von der Automagic oder Tasker App (Voraussetzung Android >4.3). Ist Android größer 4.3 vorhanden und im Reading steht "wird nicht unterstützt", muß in den Androideinstellungen unter Ton und Benachrichtigungen -> Benachrichtigungszugriff ein Haken für Automagic/Tasker gesetzt werden
    • batteryHealth - Zustand der Battery (1=unbekannt, 2=gut, 3=Überhitzt, 4=tot, 5=Überspannung, 6=unbekannter Fehler, 7=kalt) (nur Automagic)
    • powerPercent - Status der Batterie in %
    • batterytemperature - Temperatur der Batterie (nur Automagic)
    • bluetooth - on/off, Bluetooth Status an oder aus
    • checkActiveTask - Zustand einer zuvor definierten APP. 0=nicht aktiv oder nicht aktiv im Vordergrund, 1=aktiv im Vordergrund, siehe Hinweis unten (nur Automagic)
    • connectedBTdevices - eine Liste der verbundenen Gerät (nur Automagic)
    • connectedBTdevicesMAC - eine Liste der MAC Adressen aller verbundender BT Geräte (nur Automagic)
    • currentMusicAlbum - aktuell abgespieltes Musikalbum des verwendeten Mediaplayers (nur Automagic)
    • currentMusicApp - aktuell verwendeter Mediaplayer (Amazon Music, Google Play Music, Google Play Video, Spotify, YouTube, TuneIn Player, Aldi Life Music) (nur Automagic)
    • currentMusicArtist - aktuell abgespielter Musikinterpret des verwendeten Mediaplayers (nur Automagic)
    • currentMusicIcon - Cover vom aktuell abgespielten Album Noch nicht fertig implementiert (nur Automagic)
    • currentMusicState - Status des aktuellen/zuletzt verwendeten Mediaplayers (nur Automagic)
    • currentMusicTrack - aktuell abgespielter Musiktitel des verwendeten Mediaplayers (nur Automagic)
    • daydream - on/off, Daydream gestartet oder nicht
    • deviceState - Status des Androidgerätes. unknown, online, offline.
    • doNotDisturb - aktueller Status des nicht stören Modus
    • dockingState - undocked/docked Status ob sich das Gerät in einer Dockinstation befindet.
    • flow_SetCommands - active/inactive, Status des SetCommands Flow
    • flow_informations - active/inactive, Status des Informations Flow
    • flowsetVersionAtDevice - aktuell installierte Flowsetversion auf dem Device
    • incomingCallerName - Anrufername des eingehenden Anrufes
    • incomingCallerNumber - Anrufernummer des eingehenden Anrufes
    • incomingWhatsAppMessage - letzte WhatsApp Nachricht
    • incomingTelegramMessage - letzte Telegram Nachricht
    • incomingSmsMessage - letzte SMS Nachricht
    • intentRadioName - zuletzt gesrreamter Intent Radio Name
    • intentRadioState - Status des IntentRadio Players
    • keyguardSet - 0/1 Displaysperre gesetzt 0=nein 1=ja, bedeutet nicht das sie gerade aktiv ist
    • lastSetCommandError - letzte Fehlermeldung vom set Befehl
    • lastSetCommandState - letzter Status vom set Befehl, Befehl erfolgreich/nicht erfolgreich gesendet
    • lastStatusRequestError - letzte Fehlermeldung vom statusRequest Befehl
    • lastStatusRequestState - letzter Status vom statusRequest Befehl, Befehl erfolgreich/nicht erfolgreich gesendet
    • nextAlarmDay - aktiver Alarmtag
    • nextAlarmState - aktueller Status des "Androidinternen" Weckers
    • nextAlarmTime - aktive Alarmzeit
    • nfc - Status des NFC on/off
    • nfcLastTagID - nfc_id des zu letzt gescannten Tag's / Damit die ID korrekt erkannt wird muss im Flow NFC Tag Support der Trigger NFC TagIDs bearbeitet werden und die TagId's Kommasepariert eingetragen werden. (nur Automagic)
    • powerPlugged - Netzteil angeschlossen? 0=NEIN, 1|2=JA
    • screen - on locked/unlocked, off locked/unlocked gibt an ob der Bildschirm an oder aus ist und gleichzeitig gesperrt oder nicht gesperrt
    • screenBrightness - Bildschirmhelligkeit von 0-255
    • screenBrightnessMode - Adaptive Helligkeit on,off
    • screenFullscreen - on/off, Vollbildmodus (An,Aus)
    • screenOrientation - Landscape,Portrait, Bildschirmausrichtung (Horizontal,Vertikal)
    • screenOrientationMode - auto/manual, Modus für die Ausrichtung (Automatisch, Manuell)
    • state - aktueller Status
    • userFlowState - aktueller Status eines Flows, festgelegt unter dem setUserFlowState Attribut (nur Automagic)
    • volume - Media Lautstärkewert
    • volumeNotification - Benachrichtigungs Lautstärke
    • wiredHeadsetPlugged - 0/1 gibt an ob ein Headset eingesteckt ist oder nicht

    • Beim Reading checkActivTask muß zuvor der Packagename der zu prüfenden App als Attribut checkActiveTask angegeben werden. Beispiel: attr Nexus10Wohnzimmer checkActiveTask com.android.chrome für den Chrome Browser.



    Set
    • activateVoiceInput - aktiviert die Spracheingabe
    • bluetooth - on/off, aktiviert/deaktiviert Bluetooth
    • clearNotificationBar - All,Automagic, löscht alle Meldungen oder nur die Automagic/Tasker Meldungen in der Statusleiste
    • closeCall - beendet einen laufenden Anruf
    • currentFlowsetUpdate - fürt ein Flowset/Tasker-Projekt update auf dem Device durch
    • doNotDisturb - schaltet den nicht stören Modus, always immer stören, never niemals stören, alarmClockOnly nur Wecker darf stören, onlyImportant nur wichtige Störungen
    • installFlowSource - installiert einen Flow auf dem Device, das XML File muss unter /tmp/ liegen und die Endung xml haben. Bsp: set TabletWohnzimmer installFlowSource WlanUebwerwachen.xml (nur Automagic)
    • mediaPlay - play Befehl zur Media App
    • mediaStop - stop Befehl zur Media App
    • mediaNext - nächster Titel Befehl zur Media App
    • mediaBack - vorheriger Titel zur Media App
    • nextAlarmTime - setzt die Alarmzeit. gilt aber nur innerhalb der nächsten 24Std.
    • openCall - ruft eine Nummer an und legt optional nach X Sekunden auf / set DEVICE openCall 01736458 10 / ruft die Nummer an und beendet den Anruf nach 10s
    • screenBrightness - setzt die Bildschirmhelligkeit, von 0-255.
    • screenBrightnessMode - schaltet die Adaptive Helligkeit on,off
    • screenMsg - versendet eine Bildschirmnachricht
    • sendintent - sendet einen Intentstring Bsp: set $AMADDeviceDEVICE sendIntent org.smblott.intentradio.PLAY url http://stream.klassikradio.de/live/mp3-192/stream.klassikradio.de/play.m3u name Klassikradio, der erste Befehl ist die Aktion und der zweite das Extra. Es können immer zwei Extras mitgegeben werden.
    • sendSMS - sendet eine SMS an eine bestimmte Telefonnummer. Bsp.: sendSMS Dies ist ein Test|555487263
    • startDaydream - startet den Daydream
    • statusRequest - Fordert einen neuen Statusreport beim Device an. Es können nicht von allen Readings per statusRequest die Daten geholt werden. Einige wenige geben nur bei Statusänderung ihren Status wieder.
    • timer - setzt einen Timer innerhalb der als Standard definierten ClockAPP auf dem Device. Es können nur Minuten angegeben werden.
    • ttsMsg - versendet eine Nachricht welche als Sprachnachricht ausgegeben wird (um die Sprache für diese eine Durchsage zu ändern setze vor Deinem eigentlichen Text &en; oder &de;)
    • userFlowState - aktiviert oder deaktiviert einen oder mehrere Flows/Tasker-Profile,set Nexus7Wohnzimmer Badezimmer vorheizen:inactive oder set Nexus7Wohnzimmer Badezimmer vorheizen,Nachtlicht Steven:inactive
    • userFlowRun - führt den angegebenen Flow/Task aus
    • vibrate - lässt das Androidgerät vibrieren
    • volume - setzt die Medialautstärke. Entweder die internen Lautsprecher oder sofern angeschlossen die Bluetoothlautsprecher und per Klinkenstecker angeschlossene Lautsprecher, + oder - vor dem Wert reduziert die aktuelle Lautstärke um den Wert. Der maximale Sliderwert kann über das Attribut setVolMax geregelt werden.
    • volumeUp - erhöht die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.
    • volumeDown - reduziert die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.
    • volumeNotification - setzt die Benachrichtigungslautstärke.

    Set abhängig von gesetzten Attributen
    • changetoBtDevice - wechselt zu einem anderen Bluetooth Gerät. Attribut setBluetoothDevice muß gesetzt sein. Siehe Hinweis unten! (nur Automagic)
    • notifySndFile - spielt die angegebene Mediadatei auf dem Androidgerät ab. Die aufzurufende Mediadatei sollte sich im Ordner /storage/emulated/0/Notifications/ befinden. Ist dies nicht der Fall kann man über das Attribut setNotifySndFilePath einen Pfad vorgeben.
    • nfc - schaltet nfc an oder aus /on/offAttribut root
    • openApp - öffnet eine ausgewählte App. Attribut setOpenApp
    • openURL - öffnet eine URL im Standardbrowser, sofern kein anderer Browser über das Attribut setOpenUrlBrowser ausgewählt wurde. Bsp: attr Tablet setOpenUrlBrowser de.ozerov.fully|de.ozerov.fully.MainActivity, das erste ist der Package Name und das zweite der Class Name
    • screen - on/off/lock/unlock schaltet den Bildschirm ein/aus oder sperrt/entsperrt ihn, in den Automagic Einstellungen muss "Admin Funktion" gesetzt werden sonst funktioniert "Screen off" nicht. Attribut setScreenOnForTimer ändert die Zeit wie lange das Display an bleiben soll! (Tasker unterstützt nur "screen on/off")
    • screenFullscreen - on/off, (aktiviert/deaktiviert) den Vollbildmodus. Attribut setFullscreen
    • screenLock - Sperrt den Bildschirm mit Pinabfrage. Attribut setScreenlockPIN - hier die Pin dafür eingeben. Erlaubt sind nur Zahlen. Es müßen mindestens 4, bis max 16 Zeichen verwendet werden.
    • screenOrientation - Auto,Landscape,Portait, aktiviert die Bildschirmausrichtung (Automatisch,Horizontal,Vertikal). Attribut setScreenOrientation
    • system - setzt Systembefehle ab (nur bei gerootetet Geräen). reboot,shutdown,airplanemodeON (kann nur aktiviert werden) Attribut root, in den Automagic Einstellungen muss "Root Funktion" gesetzt werden
    • takePicture - löst die Kamera aus für ein Foto Attribut setTakePictureResolution
    • takeScreenshot - macht ein Screenshot Attribut setTakeScreenshotResolution


    Attribute
    • setNotifySndFilePath - setzt den korrekten Systempfad zur Notifydatei (default ist /storage/emulated/0/Notifications/
    • setTtsMsgSpeed - setzt die Sprachgeschwindigkeit bei der Sprachausgabe(Für Automagic: Werte zwischen 0.5 bis 4.0 in 0.5er Schritten, default:1.0)(Für Tasker: Werte zwischen 1 bis 10 in 1er Schritten, default:5)
    • setTtsMsgLang - setzt die Sprache bei der Sprachausgabe, de oder en (default ist de)
    • setTtsMsgVol - wenn gesetzt wird der Wert als neues Media Volume fü die Sprachansage verwendet und danach wieder der alte Wert eingestellt
    • setVolUpDownStep - setzt den Step für volumeUp und volumeDown
    • setVolMax - setzt die maximale Volume Gr&uoml;e für den Slider
    • setNotifyVolMax - setzt den maximalen Lautstärkewert für Benachrichtigungslautstärke für den Slider
    • setRingSoundVolMax - setzt den maximalen Lautstärkewert für Klingellautstärke für den Slider
    • setAPSSID - setzt die AccessPoint SSID('s) um ein WLAN sleep zu verhindern (nur Automagic), mehrere SSIDs können durch Komma getrennt angegeben werden.
    • setTakePictureResolution - welche Kameraauflösung soll verwendet werden? (800x600,1024x768,1280x720,1600x1200,1920x1080)
    • setTakePictureCamera - welche Kamera soll verwendet werden (Back,Front).

    • Um openApp verwenden zu können, muss als Attribut der Package Name der App angegeben werden.

      Um zwischen Bluetoothgeräten wechseln zu können, muß das Attribut setBluetoothDevice mit folgender Syntax gesetzt werden. attr <DEVICE> BTdeviceName1|MAC,BTDeviceName2|MAC Es muss zwingend darauf geachtet werden das beim BTdeviceName kein Leerzeichen vorhanden ist. Am besten zusammen oder mit Unterstrich. Achtet bei der MAC darauf das Ihr wirklich nach jeder zweiten Zahl auch einen : drin habt
      Beispiel: attr Nexus10Wohnzimmer setBluetoothDevice Logitech_BT_Adapter|AB:12:CD:34:EF:32,Anker_A3565|GH:56:IJ:78:KL:76


    state
    • initialized - Ist der Status kurz nach einem define.
    • active - die Geräteinstanz ist im aktiven Status.
    • disabled - die Geräteinstanz wurde über das Attribut disable deaktiviert



    Anwendungsbeispiele:

      Hier verweise ich auf den gut gepflegten Wikieintrag



AirUnit

    Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: AirUnit

Alarm

[EN DE]
    Deutsche Dokumentation im Wiki vorhanden, die englische Version gibt es hier: Alarm

AndroidDB

    Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: AndroidDB

AndroidDBHost

    Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: AndroidDBHost

Apt Update Information

[EN DE]
    AptToDate - Stellt aktuelle Update Informationen von apt Debian Systemen bereit
    Das Modul synct alle Repositotys und stellt dann Informationen über zu aktualisierende Packete bereit.
    Es ist Voraussetzung das folgende Zeile via "visudo" eingefügt wird: "fhem ALL=NOPASSWD: /usr/bin/apt-get".

    Define

      define <name> AptToDate <HOST>

      Beispiel:

        define fhemServer AptToDate localhost

      Der Befehl erstellt eine AptToDate Instanz mit dem Namen fhemServer und dem Host localhost.
      Nachdem die Instanz erstellt wurde werden die benötigten Informationen geholt und als Readings angezeigt. Dies kann einen Moment dauern.


    Readings
    • state - update Status des Servers, liegen neue Updates an oder nicht
    • os-release_ - alle Informationen aus /etc/os-release
    • repoSync - status des letzten repository sync.
    • toUpgrade - status des letzten upgrade Befehles
    • updatesAvailable - Anzahl der verfügbaren Paketupdates


    Set
    • repoSync - holt aktuelle Informationen über den Updatestatus
    • toUpgrade - führt den upgrade prozess aus.



    Get
    • showUpgradeList - Paketiste aller zur Verfügung stehender Updates
    • showUpdatedList - Liste aller als letztes aktualisierter Pakete, von der alten Version zur neuen Version
    • showWarningList - Liste der letzten Warnings
    • showErrorList - Liste der letzten Fehler
    • getDistribution - fetch new distribution information



    Attributes
    • disable - Deaktiviert das Device
    • upgradeListReading - fügt die Upgrade Liste als ein zusäiches Reading im JSON Format ein.
    • distupgrade - wechselt den upgrade Prozess nach dist-upgrade
    • disabledForIntervals - Deaktiviert das Device für eine bestimmte Zeit (13:00-18:30 or 13:00-18:30 22:00-23:00)

Air Quality Index

[EN DE]

ArduCounter

    Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: ArduCounter

Arlo

[EN DE]

    Arlo Sicherheitskameras werden über eine Basisstation an die Arlo Cloud angebunden. Diese kann über eine REST-API angesprochen werden und liefert Ereignisse (wie z.B. erkannte Bewegungen oder sonstige Statusänderungen) über Server-Sent Events (SSE) zurück.

    Define

      define Arlo_Cloud Arlo ACCOUNT <hans.mustermann@xyz.de> <meinArloPasswort> <meinEmailPasswort> <meinEmailBenutzername>

      hans.mustermann@xyz.de durch die E-Mail-Adresse ersetzen, mit der man bei Arlo registriert ist, meinArloPasswort durch das Passwort bei Arlo. Für die 2-Faktor-Authentifizierung wird zusätzlich das Passwort des E-Mail-Accounts benötigt. Der E-Mail-Server, von dem die Arlo-Mails abgerufen werden sollen, muss mit attr Arlo_Cloud mailServer imap.gmx.net angegeben werden, wobei imap.gmx.net durch den IMAP-Mailserver des Providers ersetzt werden muss, bei dem das E-Mail-Konto liegt. Es wird ausschließlich IMAP mit Verschlüsselung unterstützt. Der Parameter meinEmailBenutzername muss nur angegeben werden, falls der Benutzernamen, mit dem man sich am Mailserver anmeldet, von der E-Mail-Adresse abweicht.

      Nach der erfolgreichen Definition des Account kann auf dem neu erzeugten Device set Arlo_Cloud autocreate aufgerufen werden. Dies legt die Basistation(en) und Kameras an, die zu dem Arlo Account zugeordnet sind. Die neuen Devices befinden sich initial im Raum Arlo.

      Aufgrund der SSE-Schnittstelle ist es notwendig, dass dauerhaft im Hintergrund eine Verbindung zum Arlo-Server gehalten wird. Falls dies nicht gewünscht ist, da Arlo z.B. vorübergehend nicht genutzt wird, kann der Hintergrund-Job verhindert werden, indem das Attribut "disable" des Arlo_Cloud-Device auf 1 gesetzt wird.

    Set

    • autocreate (Subtype ACCOUNT)
      Liest alle dem Arlo-Account zugeordneten Geräte und legt dafür FHEM-Devices an, falls es diese nicht schon gibt.
    • reconnect (Subtype ACCOUNT)
      Neuaufbau der Verbindung zum Arlo-Server. Zunächst loggt sich FHEM neu bei Arlo ein, danach wird die SSE-Verbindung aufgebaut. Wird nur benötigt, falls unerwartete Verbindungsabbrüche auftreten.
    • readModes (Subtype ACCOUNT)
      Liest die Modes der Basisstationen (inkl. Custom Modes). Wird automatisch aufgerufen, daher normalerweise kein manueller Aufruf notwendig.
    • updateReadings (Subtype ACCOUNT)
      Aktuelle Daten aller Basisstationen und Kameras aus der Cloud abrufen. Dies passiert einmal stündlich automatisch, falls dies nicht durch Setzen des Attributes disabled=1 am Cloud-Device unterbunden wird. Den Abruf-Intervall kann man durch Setzen des Attributs updateInterval anpassen (Angabe von Sekunden, also z.B. 600 für Abruf alle 10 Minuten oder 7200 für Abruf alle 2 Stunden).
    • arm (Subtypes BASESTATION, BRIDGE, ARLOQ und BABYCAM)
      Aktivieren der Bewegungserkennung.
    • disarm (Subtype BASESTATION, BRIDGE, ARLOQ und BABYCAM)
      Deaktivieren der Bewegungserkennung.
    • mode (Subtype BASESTATION und BRIDGE)
      Setzen eines benutzerdefinierten Modus (Parameter: Name des Modus).
    • siren (Subtype BASESTATION)
      Schaltet die Siren der Basisstation an oder aus (Achtung: laut!!).
    • subscribe (Subtype BASESTATION, ARLOQ und BABYCAM)
      Basisstation für die SSE-Schnittstelle registrieren. Muss normalerweise nie manuell aufgerufen werden, da dies beim Login automatisch passiert.
    • unsubscribe (Subtype BASESTATION, ARLOQ und BABYCAM)
      Registrierung einer Basisstation für die SSE-Schnittstelle rückgängig machen.
    • brightness (Subtype CAMERA, ARLOQ und BABYCAM)
      Helligkeit der Kamera anpassen (mögliche Werte: -2 bis +2).
    • on (Subtype CAMERA und LIGHT)
      Kamera/Licht einschalten.
    • off (Subtype CAMERA und LIGHT)
      Kamera/Licht ausschalten.
    • snapshot (Subtype CAMERA, ARLOQ und BABYCAM)
      Ein Standbild aufnehmen. Dieses kann danach über die URL aus dem Reading snapshotUrl aufgerufen werden. Damit der Befehl funktioniert, muss die Kamera den Status on haben.
    • startRecording (Subtype CAMERA, ARLOQ und BABYCAM)
      Aufnahme starten. Damit der Befehl funktioniert, muss die Kamera den Status on haben.
    • stopRecording (Subtype CAMERA, ARLOQ und BABYCAM)
      Aufnahme stoppen. Die Aufnahme kann danach über lastVideoUrl abgerufen werden, das Standbild dazu unter lastVideoImageUrl und lastVideoThumbnailUrl (klein).
    • nightlight (Subtype BABYCAM)
      Nachtlicht ein-/ausschalten (on/off).
    • nightlight-brightness (Subtype BABYCAM)
      Helligkeit des Nachtlichts anpassen.
    • nightlight-color (Subtype BABYCAM)
      Farbe des Nachtlichts anpassen.

    Attribute

      Allgemeine Attribute:
      DbLogInclude
      DbLogExclude
      alias
      comment
      devStateIcon
      devStateStyle
      event-aggregator
      event-min-interval
      event-on-change-reading
      event-on-update-reading
      eventMap
      group
      icon
      room
      sortby
      stateFormat
      userReadings
      userattr
      verbose
      webCmd
      widgetOverride

    downloadDir

      Falls dieses Attribut am Cloud-Device (Subtype ACCOUNT) gesetzt ist, werden Dateien, die in der Arlo Cloud erzeugt werden (Videos / Bilder) in das hier angegebene Verzeichnis heruntergeladen. Damit man auf die Dateien über http zugreifen kann, muss ein Verzeichnis unterhalb /opt/fhem/www angegeben werden (oder dieses selbst). Wichtig: der fhem-User muss in in diesem Verzeichnis Schreibrechte haben.

    downloadLink

      Falls über das Attribut downloadDir die Dateien ins lokale Verzeichnis heruntergeladen werden, kann über dieses Attribut am Cloud-Device angegeben werden, dass die in den Kameras gesetzten Links auf die lokale Kopie zeigen sollen. Die Angabe des Links muss in der Form http://hostname:8083/fhem/unterverzeichnis-unter-www angegeben werden.

    disable

      Subtype ACCOUNT: Deaktiviert die Verbindung zur Arlo-Cloud.

      Subtype BASESTATION: Deaktiviert die regelmäßige Abfrage der Readings aus der Arlo Cloud.

    expiryTime

      Subtype ACCOUNT: Wenn alle Basisstation auf "disarmed" stehen, wird die Verbindung zur Cloud nach der hier angegebenen Zeit beendet. Bei einer Aktion mit einem Arlo-Gerät wird eine neue Verbindung aufgebaut. Angabe in Sekunden, Standard ist 600 (10 Minuten). Durch Angabe von 0 kann die Verbindung dauerhaft bestehen bleiben.

    mailServer

      Subtype ACCOUNT: Name des IMAP Mailservers, an den Arlo den Code für die 2-Faktor-Authentifizierung sendet. Das Passwort muss beim define des Arlo_Cloud-Devices angegeben werden.

    videoDownloadFix

      Subtype ACCOUNT: Dieser Wert muss auf 1 gesetzt werden, falls Videos nach der Aufnahme nicht automatisch heruntergeladen werden. Normalerweise werden Events vom Server gesendet, sobald eine neue Aufnahme vorhanden ist, aber manchmal funktioniert das nicht. Standard ist 0 (ausgeschaltet).

    pingInterval

      Subtype ACCOUNT: Setzt das Intervall in Sekunden, wie häfuig ein Heartbeat-Ping gesendet wird. Ohne den Heartbeat-Ping würde die Session ablaufen und es könnten keine Events mehr empfangen werden. Standard ist 90.

    updateInterval

      Subtype ACCOUNT: Setzt das Intervall in Sekunden, wie häufig die Readings der Basisstationen und Kameras abgefragt werden. Standard ist 3600 = 1 Stunde.

    ssePollingInterval

      Subtype ACCOUNT: Setzt das Intervall in Sekunden, wie häufig die SSE Events abgefragt werden sollen. Standard ist 2 Sekunden.

Astro

[EN DE]
    Deutsche Dokumentation im Wiki vorhanden, die englische Version gibt es hier: Astro

Aurora

    Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: Aurora

AutoShuttersControl

    AutoShuttersControl (ASC) ermöglicht eine vollständige Automatisierung der vorhandenen Rollläden. Das Modul bietet umfangreiche Konfigurationsmöglichkeiten, um Rollläden bspw. nach Sonnenauf- und untergangszeiten, nach Helligkeitswerten oder rein zeitgesteuert zu steuern.
    Damit ASC auf Basis der astronomischen Zeiten die Rollos fahren kann, ist es ganz wichtig im Device "global" die Location (Latitude,Longitude) korrekt zu setzen.

    Man kann festlegen, welche Rollläden von ASC in die Automatisierung mit aufgenommen werden sollen. Daraufhin stehen diverse Attribute zur Feinkonfiguration zur Verfügung. So sind unter anderem komplexe Lösungen wie Fahrten in Abhängigkeit des Bewohnerstatus einfach umsetzbar. Beispiel: Hochfahren von Rollläden, wenn der Bewohner erwacht ist und draußen bereits die Sonne aufgegangen ist. Weiterhin ist es möglich, dass der geschlossene Rollladen z.B. nach dem Ankippen eines Fensters in eine Lüftungsposition fährt. Und vieles mehr.

    Define
      define <name> AutoShuttersControl

      Beispiel:

        define myASControl AutoShuttersControl

      Der Befehl erstellt ein AutoShuttersControl Device mit Namen myASControl.
      Nachdem das Device angelegt wurde, muss in allen Rollläden Devices, welche gesteuert werden sollen, das Attribut ASC mit Wert 1 oder 2 gesetzt werden. Dabei bedeutet 1 = "Prozent geschlossen" (z.B. ROLLO oder Siro Modul) - Rollo Oben 0, Rollo Unten 100, 2 = "Prozent geöffnet" (z.B. Homematic) - Rollo Oben 100, Rollo Unten 0. Die Voreinstellung für den Befehl zum prozentualen Fahren ist in beiden Fällen unterschiedlich. 1="position" und 2="pct". Dies kann, soweit erforderlich, zu späterer Zeit noch angepasst werden. Habt Ihr das Attribut gesetzt, könnt Ihr den automatischen Scan nach den Devices anstoßen.

    Readings
      Im ASC-Device
      • ..._nextAstroTimeEvent - Uhrzeit des nächsten Astro-Events: Sonnenauf- oder Sonnenuntergang oder feste Zeit
      • ..._PosValue - aktuelle Position des Rollladens
      • ..._lastPosValue - letzte Position des Rollladens
      • ..._lastDelayPosValue - letzter abgesetzter Fahrbefehl, welcher beim nächsten zulässigen Event ausgeführt wird.
      • partyMode - on/off - Partymodus-Status
      • ascEnable - on/off - globale ASC Steuerung bei den Rollläden aktiv oder inaktiv
      • controlShading - on/off - globale Beschattungsfunktion aktiv oder inaktiv
      • hardLockOut - on/off - Status des hardwareseitigen Aussperrschutzes / gilt nur für Rolläden mit dem Attribut bei denen das Attributs ASC_LockOut entsprechend auf hard gesetzt ist
      • room_... - Auflistung aller Rollläden, die in den jeweiligen Rämen gefunden wurde. Beispiel: room_Schlafzimmer: Terrasse
      • selfDefense - Selbstschutz-Status
      • state - Status des ASC-Devices: active, enabled, disabled oder weitere Statusinformationen
      • sunriseTimeWeHoliday - on/off - Status der Wochenendunterstützung
      • userAttrList - Das ASC-Modul verteilt an die gesteuerten Rollladen-Geräte diverse Benutzerattribute (userattr). In diesem Reading kann der Status dieser Verteilung geprüft werden.

      In den Rollläden-Geräten
      • ASC_Enable - on/off - wird der Rollladen über ASC gesteuert oder nicht
      • ASC_Time_DriveUp - Im Astro-Modus ist hier die Sonnenaufgangszeit für das Rollo gespeichert. Im Brightnessmodus ist hier der Zeitpunkt aus dem Attribut ASC_Time_Up_Late gespeichert. Im Timemodus ist hier der Zeitpunkt aus dem Attribut ASC_Time_Up_Early gespeichert.
      • ASC_Time_DriveDown - Im Astro-Modus ist hier die Sonnenuntergangszeit für das Rollo gespeichert. Im Brightnessmodus ist hier der Zeitpunkt aus dem Attribut ASC_Time_Down_Late gespeichert. Im Timemodus ist hier der Zeitpunkt aus dem Attribut ASC_Time_Down_Early gespeichert.
      • ASC_ShuttersLastDrive - Grund der letzten Fahrt vom Rollladen
      • ASC_ShadingMessage -
      • ASC_Time_PrivacyDriveDown -
      • ASC_Time_PrivacyDriveUp -


    Set
    • advDriveDown - holt bei allen Rollläden durch ASC_Adv on ausgesetzte Fahrten nach.
    • ascEnable - on/off - Aktivieren oder deaktivieren der globalen ASC Steuerung
    • controlShading - on/off - Aktiviert oder deaktiviert die globale Beschattungssteuerung
    • createNewNotifyDev - Legt die interne Struktur für NOTIFYDEV neu an. Diese Funktion steht nur zur Verfügung, wenn Attribut ASC_expert auf 1 gesetzt ist.
    • hardLockOut - on/off - Aktiviert den hardwareseitigen Aussperrschutz für die Rollläden, bei denen das Attributs ASC_LockOut entsprechend auf hard gesetzt ist. Mehr Informationen in der Beschreibung bei den Attributen für die Rollladengeräten.
    • partyMode - on/off - Aktiviert den globalen Partymodus. Alle Rollladen-Geräten, in welchen das Attribut ASC_Partymode auf on gesetzt ist, werden durch ASC nicht mehr gesteuert. Der letzte Schaltbefehl, der bspw. durch ein Fensterevent oder Wechsel des Bewohnerstatus an die Rollläden gesendet wurde, wird beim Deaktivieren des Partymodus ausgeführt
    • renewTimer - erneuert beim ausgewählten Rollladen die Zeiten für Sonnenauf- und -untergang und setzt die internen Timer neu.
    • renewAllTimer - erneuert bei allen Rollläden die Zeiten für Sonnenauf- und -untergang und setzt die internen Timer neu.
    • scanForShutters - Durchsucht das System nach GerätenRo mit dem Attribut ASC = 1 oder ASC = 2
    • selfDefense - on/off - Aktiviert bzw. deaktiviert die Selbstschutzfunktion. Beispiel: Wenn das Residents-Gerät absent meldet, die Selbstschutzfunktion aktiviert wurde und ein Fenster im Haus noch geöffnet ist, so wird an diesem Fenster der Rollladen deaktivieren dann heruntergefahren.
    • shutterASCenableToggle - on/off - Aktivieren oder deaktivieren der ASC Kontrolle beim einzelnen Rollladens
    • sunriseTimeWeHoliday - on/off - Aktiviert die Wochenendunterstützung und somit, ob im Rollladengerät das Attribut ASC_Time_Up_WE_Holiday beachtet werden soll oder nicht.
    • wiggle - bewegt einen oder mehrere Rollläden um einen definierten Wert (Default: 5%) und nach einer Minute wieder zurück in die Ursprungsposition. Diese Funktion könnte bspw. zur Abschreckung in einem Alarmsystem eingesetzt werden.


    Get
    • showNotifyDevsInformations - zeigt eine Übersicht der abgelegten NOTIFYDEV Struktur. Diese Funktion wird primär fürs Debugging genutzt. Hierzu ist das Attribut ASC_expert = 1 zu setzen.


    Attributes
      Im ASC-Device
      • ASC_autoAstroModeEvening - REAL, CIVIL, NAUTIC, ASTRONOMIC oder HORIZON
      • ASC_autoAstroModeEveningHorizon - Höhe über dem Horizont. Wird nur berücksichtigt, wenn im Attribut ASC_autoAstroModeEvening der Wert HORIZON ausgewählt wurde. (default: 0)
      • ASC_autoAstroModeMorning - REAL, CIVIL, NAUTIC, ASTRONOMIC oder HORIZON
      • ASC_autoAstroModeMorningHorizon - Höhe über dem Horizont. Wird nur berücksichtigt, wenn im Attribut ASC_autoAstroModeMorning der Wert HORIZON ausgewählt wurde. (default: 0)
      • ASC_autoShuttersControlComfort - on/off - schaltet die Komfortfunktion an. Bedeutet, dass ein Rollladen mit einem threestate-Sensor am Fenster beim Öffnen in eine Offenposition fährt. Hierzu muss beim Rollladen das Attribut ASC_ComfortOpen_Pos entsprechend konfiguriert sein. (default: off)
      • ASC_autoShuttersControlEvening - on/off - Aktiviert die automatische Steuerung durch das ASC-Modul am Abend.
      • ASC_autoShuttersControlMorning - on/off - Aktiviert die automatische Steuerung durch das ASC-Modul am Morgen.
      • ASC_blockAscDrivesAfterManual - 0,1 - wenn dieser Wert auf 1 gesetzt ist, dann werden Rollläden vom ASC-Modul nicht mehr gesteuert, wenn zuvor manuell eingegriffen wurde. Voraussetzung hierfür ist jedoch, dass im Reading ASC_ShuttersLastDrive der Status manual enthalten ist und sich der Rollladen auf eine unbekannte (nicht in den Attributen anderweitig konfigurierte) Position befindet.
      • ASC_brightnessDriveUpDown - WERT-MORGENS:WERT-ABENDS - Werte bei dem Schaltbedingungen für Sonnenauf- und -untergang geprüft werden sollen. Diese globale Einstellung kann durch die WERT-MORGENS:WERT-ABENDS Einstellung von ASC_BrightnessSensor im Rollladen selbst überschrieben werden.
      • ASC_debug - Aktiviert die erweiterte Logausgabe für Debugausgaben
      • ASC_expert - ist der Wert 1, so werden erweiterte Informationen bezüglich des NotifyDevs unter set und get angezeigt
      • ASC_freezeTemp - Temperatur, ab welcher der Frostschutz greifen soll und der Rollladen nicht mehr fährt. Der letzte Fahrbefehl wird gespeichert.
      • ASC_advStartDate - Start der Adventszeit, Auswahl ab wann die Adventszeit beginnen soll. 1. Advent oder Totensonntag
      • ASC_advEndDate - Ende der Adventszeit, Auswahl ab wann die Adventszeit Enden soll. EpiphanyDay 6. Januar oder CandlemasDay 2. Februar
      • ASC_rainSensor - DEVICENAME[:READINGNAME] MAXTRIGGER[:HYSTERESE] [CLOSEDPOS:[WAITINGTIME]] - der Inhalt ist eine Kombination aus Devicename, Readingname, Wert ab dem getriggert werden soll, Hysterese Wert ab dem der Status Regenschutz aufgehoben werden soll und der "wegen Regen geschlossen Position", sowie der Wartezeit bis dann tatsächlich die aktion ausgeführt wird.
      • ASC_residentsDev - DEVICENAME[:READINGNAME] - der Inhalt ist eine Kombination aus Devicenamen und Readingnamen des Residents-Device der obersten Ebene (z.B. rgr_Residents:state)
      • ASC_shuttersDriveDelay - maximale Zufallsverzögerung in Sekunden bei der Berechnung der Fahrzeiten. 0 bedeutet keine Verzögerung
      • ASC_TempSensor - DEVICENAME[:READINGNAME] - der Inhalt ist eine Kombination aus Device und Reading für die Außentemperatur
      • ASC_twilightDevice - das Device, welches die Informationen zum Sonnenstand liefert. Wird unter anderem für die Beschattung verwendet.
      • ASC_windSensor - DEVICE[:READING] - Sensor für die Windgeschwindigkeit. Kombination aus Device und Reading.


      In den Rollläden-Geräten
      • ASC - 0/1/2 0 = "kein Anlegen der Attribute beim ersten Scan bzw. keine Beachtung eines Fahrbefehles",1 = "Inverse oder Rollo - Bsp.: Rollo oben 0, Rollo unten 100 und der Befehl zum prozentualen Fahren ist position",2 = "Homematic Style - Bsp.: Rollo oben 100, Rollo unten 0 und der Befehl zum prozentualen Fahren ist pct
      • ASC_Antifreeze - soft/am/pm/hard/off - Frostschutz, wenn soft fährt der Rollladen in die ASC_Antifreeze_Pos und wenn hard/am/pm wird gar nicht oder innerhalb der entsprechenden Tageszeit nicht gefahren (default: off)
      • ASC_Antifreeze_Pos - Position die angefahren werden soll, wenn der Fahrbefehl komplett schließen lautet, aber der Frostschutz aktiv ist (Default: ist abhängig vom AttributASC 85/15) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!
      • ASC_AutoAstroModeEvening - aktuell REAL,CIVIL,NAUTIC,ASTRONOMIC oder HORIZON (default: none)
      • ASC_AutoAstroModeEveningHorizon - Höhe über Horizont, wenn beim Attribut ASC_autoAstroModeEvening HORIZON ausgewählt (default: none)
      • ASC_AutoAstroModeMorning - aktuell REAL,CIVIL,NAUTIC,ASTRONOMIC oder HORIZON (default: none)
      • ASC_AutoAstroModeMorningHorizon - Höhe über Horizont,a wenn beim Attribut ASC_autoAstroModeMorning HORIZON ausgewählt (default: none)
      • ASC_BlockingTime_afterManual - wie viel Sekunden soll die Automatik nach einer manuellen Fahrt aussetzen. (default: 1200)
      • ASC_BlockingTime_beforDayOpen - wie viel Sekunden vor dem morgendlichen öffnen soll keine schließen Fahrt mehr stattfinden. (default: 3600)
      • ASC_BlockingTime_beforNightClose - wie viel Sekunden vor dem nächtlichen schließen soll keine öffnen Fahrt mehr stattfinden. (default: 3600)
      • ASC_BrightnessSensor - DEVICE[:READING] WERT-MORGENS:WERT-ABENDS / 'Sensorname[:brightness [400:800]]' Angaben zum Helligkeitssensor mit (Readingname, optional) für die Beschattung und dem Fahren der Rollladen nach brightness und den optionalen Brightnesswerten für Sonnenauf- und Sonnenuntergang. (default: none)
      • ASC_Down - astro/time/brightness/roommate - bei astro wird Sonnenuntergang berechnet, bei time wird der Wert aus ASC_Time_Down_Early als Fahrzeit verwendet und bei brightness muss ASC_Time_Down_Early und ASC_Time_Down_Late korrekt gesetzt werden. Der Timer läuft dann nach ASC_Time_Down_Late Zeit, es wird aber in der Zeit zwischen ASC_Time_Down_Early und ASC_Time_Down_Late geschaut, ob die als Attribut im Moduldevice hinterlegte ASC_brightnessDriveUpDown der Down Wert erreicht wurde. Wenn ja, wird der Rollladen runter gefahren (default: astro)
        • Beschreibung der besonderen Positionsattribute
        • ASC_Closed_Pos - in 10 Schritten von 0 bis 100 (Default: ist abhängig vom AttributASC 0/100)
        • ASC_Open_Pos - in 10 Schritten von 0 bis 100 (default: ist abhängig vom AttributASC 100/0)
        • ASC_Sleep_Pos - in 10 Schritten von 0 bis 100 (default: ist abhängig vom AttributASC 75/25) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!
        • ASC_ComfortOpen_Pos - in 10 Schritten von 0 bis 100 (Default: ist abhängig vom AttributASC 20/80) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!
        • ASC_Shading_Pos - Position des Rollladens für die Beschattung (Default: ist abhängig vom AttributASC 80/20) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!
        • ASC_Ventilate_Pos - in 10 Schritten von 0 bis 100 (default: ist abhängig vom Attribut ASC 70/30) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!
        • In Bezug auf die Verwendung mit Lamellen gibt es folgende ergänzende Parameter.
          • Wird die gesamte Position inklusive der Lamellen mit Hilfe einer "festen Zurdnung" angefahren, so z.B. set ROLLONAME Beschattung dann wird hinter dem Positionswert mittels : getrennt die "feste Zuordnung" geschrieben. Beispiel: attr ROLLONAME ASC_Shading_Pos 30:Beschattung
          • Wird hingegen ein ander Command verwendet z.B. slatPct oder ähnliches dann muss hinter der normalen Positionsangebe noch die Position für die Lamellen mit angegeb werden. Beispiel: attr ROLLONAME ASC_Shading_Pos 30:75. Bitte beachtet in diesem Zusammenhang auch das Attribut ASC_SlatPosCmd_SlatDevice wo mindesten die Angabe des SlatPosCMD Voraussetzung ist.

      • ASC_Shutter_IdleDetection - READING:VALUE gibt das Reading an welches Auskunft über den Fahrstatus des Rollos gibt, sowie als zweites den Wert im Reading welcher aus sagt das das Rollo nicht fährt
      • ASC_DriveUpMaxDuration - die Dauer des Hochfahrens des Rollladens plus 5 Sekunden (default: 60)
      • ASC_Drive_Delay - maximaler Wert für einen zufällig ermittelte Verzögerungswert in Sekunden bei der Berechnung der Fahrzeiten.
      • ASC_Drive_DelayStart - in Sekunden verzögerter Wert ab welchen das Rollo gefahren werden soll.
      • ASC_LockOut - soft/hard/off - stellt entsprechend den Aussperrschutz ein. Bei global aktivem Aussperrschutz (set ASC-Device lockOut soft) und einem Fensterkontakt open bleibt dann der Rollladen oben. Dies gilt nur bei Steuerbefehlen über das ASC Modul. Stellt man global auf hard, wird bei entsprechender Möglichkeit versucht den Rollladen hardwareseitig zu blockieren. Dann ist auch ein Fahren über die Taster nicht mehr möglich. (default: off)
      • ASC_LockOut_Cmd - inhibit/blocked/protection - set Befehl für das Rollladen-Device zum Hardware sperren. Dieser Befehl wird gesetzt werden, wenn man "ASC_LockOut" auf hard setzt (default: none)
      • ASC_Mode_Down - always/home/absent/off - Wann darf die Automatik steuern. immer, niemals, bei Abwesenheit des Roommate (ist kein Roommate und absent eingestellt, wird gar nicht gesteuert) (default: always)
      • ASC_Mode_Up - always/home/absent/off - Wann darf die Automatik steuern. immer, niemals, bei Abwesenheit des Roommate (ist kein Roommate und absent eingestellt, wird gar nicht gesteuert) (default: always)
      • ASC_Partymode - on/off - schaltet den Partymodus an oder aus. Wird am ASC Device set ASC-DEVICE partyMode on geschalten, werden alle Fahrbefehle an den Rollläden, welche das Attribut auf on haben, zwischengespeichert und später erst ausgeführt (default: off)
      • ASC_Pos_Reading - Name des Readings, welches die Position des Rollladen in Prozent an gibt; wird bei unbekannten Device Typen auch als set Befehl zum fahren verwendet
      • ASC_PrivacyUpValue_beforeDayOpen - wie viele Sekunden vor dem morgendlichen öffnen soll der Rollladen in die Sichtschutzposition fahren, oder bei Brightness ab welchem minimum Brightnesswert soll das Rollo in die Privacy Position fahren. Bei Brightness muss zusätzlich zum Zeitwert der Brightnesswert mit angegeben werden 1800:600 bedeutet 30 min vor day open oder bei über einem Brightnesswert von 600 (default: -1)
      • ASC_PrivacyDownValue_beforeNightClose - wie viele Sekunden vor dem abendlichen schließen soll der Rollladen in die Sichtschutzposition fahren, oder bei Brightness ab welchem minimum Brightnesswert soll das Rollo in die Privacy Position fahren. Bei Brightness muss zusätzlich zum Zeitwert der Brightnesswert mit angegeben werden 1800:300 bedeutet 30 min vor night close oder bei unter einem Brightnesswert von 300 (default: -1)
      • ASC_PrivacyUp_Pos - Position den Rollladens für den morgendlichen Sichtschutz (default: 50) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!
      • ASC_PrivacyDown_Pos - Position den Rollladens für den abendlichen Sichtschutz (default: 50) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!
      • ASC_ExternalTrigger - DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:[POSINACTIVE VALUEACTIVE2:POSACTIVE2], Beispiel: "WohnzimmerTV:state on:off 66:100" bedeutet das wenn ein "state:on" Event kommt soll das Rollo in Position 66 fahren, kommt ein "state:off" Event soll es in Position 100 fahren. Es ist möglich die POSINACTIVE weg zu lassen dann fährt das Rollo in LastStatus Position.
      • ASC_WindProtection - on/off - soll der Rollladen beim Windschutz beachtet werden. on=JA, off=NEIN. (default off)
      • ASC_RainProtection - on/off - soll der Rollladen beim Regenschutz beachtet werden. on=JA, off=NEIN. (default off)
      • ASC_Roommate_Device - mit Komma getrennte Namen des/der Roommate Device/s, welche den/die Bewohner des Raumes vom Rollladen wiedergibt. Es macht nur Sinn in Schlaf- oder Kinderzimmern (default: none)
      • ASC_Roommate_Reading - das Reading zum Roommate Device, welches den Status wieder gibt (default: state)
      • ASC_GuestRoom on|off - (not functionality implemented yet?).
      • ASC_Adv - on/off bei on wird das runterfahren des Rollos während der Weihnachtszeit (1. Advent bis 6. Januar) ausgesetzt! Durch set ASCDEVICE advDriveDown werden alle ausgesetzten Fahrten nachgeholt.
      • ASC_Self_Defense_Mode - absent/gone/off - ab welchen Residents Status soll Selfdefense aktiv werden ohne das Fenster auf sind. (default: gone)
      • ASC_Self_Defense_AbsentDelay - um wie viele Sekunden soll das fahren in Selfdefense bei Residents absent verzögert werden. (default: 300)
      • ASC_Self_Defense_Exclude - on/off - bei on Wert wird dieser Rollladen bei aktiven Self Defense und offenen Fenster nicht runter gefahren, wenn Residents absent ist. (default: off), off bedeutet das es ausgeschlossen ist vom Self Defense
        • Beschreibung der Beschattungsfunktion
          Damit die Beschattung Funktion hat, müssen folgende Anforderungen erfüllt sein.
          Im ASC Device das Reading "controlShading" mit dem Wert on, sowie ein Astro/Twilight Device im Attribut "ASC_twilightDevice" und das Attribut "ASC_tempSensor".
          In den Rollladendevices benötigt ihr ein Helligkeitssensor als Attribut "ASC_BrightnessSensor", sofern noch nicht vorhanden. Findet der Sensor nur für die Beschattung Verwendung ist der Wert DEVICENAME[:READING] ausreichend.
          Alle weiteren Attribute sind optional und wenn nicht gesetzt mit Default-Werten belegt. Ihr solltet sie dennoch einmal anschauen und entsprechend Euren Gegebenheiten setzen. Die Werte für die Fensterposition und den Vor- Nachlaufwinkel sowie die Grenzwerte für die StateChange_Cloudy und StateChange_Sunny solltet ihr besondere Beachtung dabei schenken.
        • ASC_Shading_InOutAzimuth - Azimut Wert ab dem bei Überschreiten Beschattet und bei Unterschreiten Endschattet werden soll. (default: 95:265)
        • ASC_Shading_MinMax_Elevation - ab welcher min Höhe des Sonnenstandes soll beschattet und ab welcher max Höhe wieder beendet werden, immer in Abhängigkeit der anderen einbezogenen Sensorwerte (default: 25.0:100.0)
        • ASC_Shading_Min_OutsideTemperature - ab welcher Temperatur soll Beschattet werden, immer in Abhängigkeit der anderen einbezogenen Sensorwerte (default: 18)
        • ASC_Shading_Mode - absent,always,off,home / wann soll die Beschattung nur stattfinden. (default: off)
        • ASC_Shading_Pos - Position des Rollladens für die Beschattung (Default: ist abhängig vom AttributASC 80/20) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!
        • ASC_Shading_StateChange_SunnyCloudy - Brightness Wert ab welchen die Beschattung stattfinden und aufgehoben werden soll, immer in Abhängigkeit der anderen einbezogenen Sensorwerte. Ein optionaler dritter Wert gibt an wie, viele Brightnesswerte für den aktuellen Brightness-Durchschnitt berücksichtigt werden. Standard ist 3, es sollten nicht mehr als 5 berücksichtigt werden. (default: 35000:20000 [3])
        • ASC_Shading_WaitingPeriod - wie viele Sekunden soll gewartet werden bevor eine weitere Auswertung der Sensordaten für die Beschattung stattfinden soll (default: 1200)
        • ASC_Shading_BetweenTheTime - das Fahren in die Beschattung erfolgt bei Angabe nur innerhalb des Zeitraumes, Bsp: 09:00-13:00 11:25-15:30

      • ASC_ShuttersPlace - window/terrace/awning - Wenn dieses Attribut auf terrace gesetzt ist, das Residence Device in den Status "gone" geht und SelfDefense aktiv ist (ohne das das Reading selfDefense gesetzt sein muss), wird das Rollo geschlossen. awning steht für Markise und wirkt sich auf die Beschattungssteuerung aus. (default: window)
      • ASC_Time_Down_Early - Sonnenuntergang frühste Zeit zum Runterfahren (default: 16:00) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss ein Zeitformat in Form HH:MM[:SS] sein!!!
      • ASC_Time_Down_Late - Sonnenuntergang späteste Zeit zum Runterfahren (default: 22:00) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss ein Zeitformat in Form HH:MM[:SS] sein!!!
      • ASC_Time_Up_Early - Sonnenaufgang frühste Zeit zum Hochfahren (default: 05:00) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss ein Zeitformat in Form HH:MM[:SS] sein!!!
      • ASC_Time_Up_Late - Sonnenaufgang späteste Zeit zum Hochfahren (default: 08:30) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss ein Zeitformat in Form HH:MM[:SS] sein!!!
      • ASC_Time_Up_WE_Holiday - Sonnenaufgang frühste Zeit zum Hochfahren am Wochenende und/oder Urlaub (holiday2we wird beachtet). (default: 08:00) ACHTUNG!!! in Verbindung mit Brightness für ASC_Up muss die Uhrzeit kleiner sein wie die Uhrzeit aus ASC_Time_Up_Late !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss ein Zeitformat in Form HH:MM[:SS] sein!!!
      • ASC_Up - astro/time/brightness/roommate - bei astro wird Sonnenaufgang berechnet, bei time wird der Wert aus ASC_Time_Up_Early als Fahrzeit verwendet und bei brightness muss ASC_Time_Up_Early und ASC_Time_Up_Late korrekt gesetzt werden. Der Timer läuft dann nach ASC_Time_Up_Late Zeit, es wird aber in der Zeit zwischen ASC_Time_Up_Early und ASC_Time_Up_Late geschaut, ob die als Attribut im Moduldevice hinterlegte Down Wert von ASC_brightnessDriveUpDown erreicht wurde. Wenn ja, wird der Rollladen hoch gefahren (default: astro)
      • ASC_Ventilate_Window_Open - auf lüften, wenn das Fenster gekippt/geöffnet wird und aktuelle Position unterhalb der Lüften-Position ist (default: on)
      • ASC_WiggleValue - Wert um welchen sich die Position des Rollladens ändern soll (default: 5)
      • ASC_WindParameters - TRIGGERMAX[:HYSTERESE] [DRIVEPOSITION] / ACHTUNG! Wird nur beachtet wenn ASC_WindProtection auf on gesetzt ist. - Angabe von Max Wert ab dem für Wind getriggert werden soll, Hytsrese Wert ab dem der Windschutz aufgehoben werden soll TRIGGERMAX - HYSTERESE / Ist es bei einigen Rollläden nicht gewünscht das gefahren werden soll, so ist der TRIGGERMAX Wert mit -1 an zu geben. (default: '50:20 ASC_Closed_Pos')
      • ASC_WindowRec_PosAfterDayClosed - open,lastManual / auf welche Position soll das Rollo nach dem schließen am Tag fahren. Open Position oder letzte gespeicherte manuelle Position (default: open)
      • ASC_WindowRec - WINDOWREC:[READING], Name des Fensterkontaktes, an dessen Fenster der Rollladen angebracht ist (default: none). Reading ist optional
      • ASC_WindowRec_subType - Typ des verwendeten Fensterkontaktes: twostate (optisch oder magnetisch) oder threestate (Drehgriffkontakt) (default: twostate)
      • ASC_SlatPosCmd_SlatDevice - Angaben zu einem Slat (Lamellen) CMD und - sofern diese Lamellen über ein anderes Device gesteuert werden - zum Slat Device. Beispiele: attr ROLLO ASC_SlatPosCmd_SlatDevice slatPct oder attr ROLLO ASC_SlatPosCmd_SlatDevice dim:ROLLOSLATDEVICE. Die Angabe des Devices ist nur erforderlich, wenn zur Steuerung der Lamellen ein anderes Device verwendet wird. Damit das ganze dann auch greift, muss in den 6 Positionsangaben ASC_Open_Pos, ASC_Closed_Pos, ASC_Ventilate_Pos, ASC_ComfortOpen_Pos, ASC_Shading_Pos und ASC_Sleep_Pos ein weiterer Parameter für die Lamellenstellung mit angegeben werden.
      • ASC_CommandTemplate - FHEM-Kommando(s) oder Perl-Anweisung (in geschweiften Klammern unter Beachtung der üblichen Regeln für das escapen von Semicolons etc.).
        Dieses Attribut übersteuert das sonst intern ermittelte Fahrkommando und ist für seltene und spezielle Fälle gedacht. In der Regel ist es nicht erforderlich, dieses Attribut zu setzen!
        Die Variablen $name (der Name des Rollladen-Devices), $pos (die Zielposition des Fahrbefehls), $slatPos (die Zielposition des Fahrbefehls für eventuelle Lamellen) und $cause (die interne Benennung des Fahranlasses) werden durch die ermittelten Werte ersetzt, es muss selbst dafür gesorgt werden, dass eventuell unnötige Fahrbefehle aussortiert werden. Beispiele:
        • attr ROLLO ASC_CommandTemplate set $name $pos - Positionsbefehl direkt an Gerät setzen
        • attr ROLLO ASC_CommandTemplate set $name pct $pos - Positionsbefehl auf den setter pct absetzen
        • attr ROLLO ASC_CommandTemplate set $name datapoint 4.LEVEL_2 $slatPos 4.LEVEL $pos - Positionsbefehl und Lamellen-Ansteuerung für HM-IP-Jalousieaktoren
        • attr ROLLO ASC_CommandTemplate { fhem("set $name ".($pos+1024)).";set $name 0")} - Positionsbefehl für eine SPS in Perl umrechnen
        • attr ROLLO ASC_CommandTemplate { myPerlFn("$name",$pos,$slatPos,"$cause")} - eigene Perl-Funktion (z.B. in 99_myUtils.pm) aufrufen
        Hinweis: ASC_CommandTemplate ist für seltene und spezielle Fälle gedacht. In der Regel ist es nicht erforderlich, dieses Attribut zu setzen!

    Beschreibung der AutoShuttersControl API
    Mit dem Aufruf der API Funktion und Übergabe der entsprechenden Parameter ist es möglich auf interne Daten zu zu greifen.

    Übersicht für das Rollladen-Device Getter
      { ascAPIget('GETTER','ROLLODEVICENAME') }
    GetterErläuterung
    FreezeStatus1=soft, 2=Daytime, 3=hard
    AntiFreezePoskonfigurierte Position beim AntiFreeze Status
    AntiFreezePosAssignmentkonfigurierte Lamellen Position bei der AntiFreeze Position
    AntiFreezeaktuelle Konfiguration für AntiFreeze
    ShuttersPlaceaktuelle Konfiguration an welchem Platz sich das Rollo befindet, Fenster oder Terrasse
    SlatPosCmdwelcher PosCmd ist aktuell für den Lamellen Befehl konfiguriert
    SlatDevicewelches Device aktuell für die Lamellen Steuerung konfiguriert ist
    PrivacyUpTimePrivacy Zeit in Sekunden zum fahren in die Privacy Pos vor dem vollen öffnen
    PrivacyUpBrightnessValPrivacy Brightness Wert zum fahren in die Privacy Pos
    PrivacyUpPosPosition für die Privacy Up Fahrt
    PrivacyUpPositionAssignmentPosition für die Lamellenfahrt von Privacy Up
    PrivacyDownTimePrivacy Zeit in Sekunden zum fahren in die Privacy Pos vor dem vollen schließ
    PrivacyDownBrightnessValPrivacy Brightness Wert zum fahren in die Privacy Pos
    PrivacyDownPosPosition für die Privacy Down Fahrt
    PrivacyDownPositionAssignmentPosition für die Lamellenfahrt von Privacy Down
    SelfDefenseModeModus für den SelfDefense
    SelfDefenseAbsentDelayVerzögerungszeit der SelfDefense Fahrt bei absent
    WiggleValueum welchen Wert soll das Rollo bei einer wiggle Fahrt fahren
    AdvIst es in der definierten Weihnachtszeit
    ShadingPoskonfigurierte Position für die Beschattungsfahrt
    ShadingPositionAssignmentPosition für die Lamellenfahrt für die Beschattungsfahrt
    ShadingModewelcher aktuelle Modus für das Beschatten ist konfiguriert
    IdleDetectionValuewelcher Wert im IdleDetectionRading zeigt an dass das Rollo aktuell nicht in Bewegung ist
    ShadingAzimuthLeftab welchem Azimut beginnt die Beschattung
    ShadingAzimuthRightab welchem Azimut endet die Beschattung
    ShadingMinOutsideTemperatureüber welchem Temperaturwert beginnt die Beschattung
    ShadingMinElevationüber welchem Elevationwert beginnt die Beschattung
    ShadingMaxElevationüber welchem Elevationwert endet die Beschattung
    ShadingStateChangeSunnyüber welchem Brightnesswert beginnt die Beschattung
    ShadingStateChangeCloudyunter welchem Brightnesswert endet die Beschattung
    ShadingWaitingPeriodnach welcher Wartezeit werden Beschattungsrelevante Sensorwerte wieder beachtet und die Beschattungsroutine abgearbeitet
    ExternalTriggerDevicekonfiguriertes Triggerdevice
    ExternalTriggerReadingkofiguriertes Triggerdevice Reading
    ExternalTriggerValueActiveWert mit welchen der externe Trigger Prozess ausgel&uoml;st werden soll.
    ExternalTriggerValueActive2weiterer Wert mit welchen der externe zweite Trigger Prozess ausgel&uoml;st werden soll.
    ExternalTriggerValueInactiveWert mit welchen der externe Trigger Prozess beendet werden soll
    ExternalTriggerPosActiveRolloposition welche angefahren werden soll wenn der erste externe Trigger aktiv wird.
    ExternalTriggerPosActive2Rolloposition welche angefahren werden soll wenn der zweite externe Trigger aktiv wird.
    ExternalTriggerPosInactiveRolloposition welche angefahren werden soll wenn der externe Trigger inaktiv wird.
    ExternalTriggerStatusaktueller Status des externen Triggers, 0 oder 1
    Delaykonfigurierte Verzögerungswert welcher für die Zufallsberechnung werwendet werden soll
    DelayStartkonfigurierter fester Verzögerungswert
    BlockingTimeAfterManualkonfigurierte Blockzeit nach einer manuellen Fahrt
    BlockingTimeBeforNightClosekonfigurierte Blockzeit vor dem nächtlichen schließen
    BlockingTimeBeforDayOpenkonfigurierte Blockzeit vor dem morgendlichen öffnen
    PosCmdwelches Kommando wird zum fahren der Rollos verwendet (pct, position?)
    OpenPosPosition für Rollo ganz auf
    OpenPositionAssignmentSlat-Position für Rollo ganz auf
    VentilatePosLüften Position
    VentilatePositionAssignmentLüften Slat-Position
    VentilatePosAfterDayClosedPosition des Rollos beim schließen des Fensters am Tag
    ClosedPosPosition für Rollo ganz geschlossen
    ClosedPositionAssignmentSlat-Position für Rollo ganz geschlossen
    SleepPosPosition für schlafen
    SleepPositionAssignmentSlat-Position für schlafen
    VentilateOpenLüften aktiv?
    ComfortOpenPosComfort Position
    ComfortOpenPositionAssignmentSlat-Comfort Position
    PartyModeAbfrage Party Mode
    RoommatesAbfrage Roommates / Antwort als String
    RoommatesReadingRoommates Reading
    RoommatesStatusRoommates Status unter Berücksichtigung aller Roommates und dessen Status
    RoommatesLastStatusRoommates letzter Status unter Berücksichtigung aller Roommates und dessen letzten Status
    WindPosRollo Position bei Windtrigger
    WindMaxWert über dem die Windprotection aktiviert werden soll
    WindMinWert unter dem die Windprotection aufgehoben werden soll
    WindProtectionWindprotection soll aktiv sein oder nicht
    WindProtectionStatusaktueller Status der Wind Protection „protected“ oder „unprotected“
    RainProtectionRain Protection soll aktiv sein oder nicht
    RainProtectionStatusaktueller Status der Regen Protection „unprotected“ oder „unprotected“
    ModeUpaktuelle Einstellung für den Modus des Morgens hoch fahren
    ModeDownaktuelle Einstellung für den Modus des Abends runter fahren
    LockOutaktuelle Einstellung für den Aussperrschutz
    LockOutCmdAussperrschutz Kommando am Aktor
    AutoAstroModeMorningaktuell engestellter Wert für Astro Morgens
    AutoAstroModeEveningaktuell engestellter Wert für Astro Abends
    AutoAstroModeMorningHorizonHORIZON Wert Morgens
    AutoAstroModeEveningHorizonHORIZON Wert Abends
    Upaktueller Wert für Morgenfahrten
    Downaktueller Wert für Abendfahrten
    TimeUpEarlyaktueller Wert für frühste Morgenfahrt
    TimeUpLateaktueller Wert für späteste Morgenfahrt
    TimeDownEarlyaktueller Wert für frühste Abendfahrt
    TimeDownLateaktueller Wert für späteste Abendfahrt
    TimeUpWeHolidayaktueller Wert für Wochenende und Feiertags Morgenfahrten
    BrightnessMinVal
    BrightnessMaxVal
    DriveUpMaxDuration
    Homemode
    PrivacyDownStatus
    PrivacyUpStatus
    IsDay
    SelfDefenseState
    LastDrive
    LastPos
    Sunset
    Sunrise
    OutTemp
    IdleDetection
    BrightnessAverageNur für die Beschattung relevant
    ShadingStatus
    ShadingLastStatus
    ShadingManualDriveStatus
    IfInShading
    WindProtectionStatus
    RainProtectionStatus
    Brightness
    WindStatus
    Statusaktuelle Position des Rollos
    DelayCmdStatus der Query von ausgesetzten Fahrten wegen PartyMod oder offnen Fenster
    ASCenableStatus der ASC Steuerung vom Rollo
    SubTypSubtype vom Rollo
    WinDevReading
    WinDev
    WinStatus
    NoDelayWurde die Behandlung von Offset deaktiviert (Beispiel bei Fahrten über Fensterevents)
    LastDriveGrund des letzten Fahrens
    LastPosdie letzte Position des Rollladens
    LastPosTimestampTimestamp der letzten festgestellten Position
    LastManPosPosition der letzten manuellen Fahrt
    LastManPosTimestampTimestamp der letzten manuellen Position
    SunsetUnixTimeberechnete Unixzeit für Abends (Sonnenuntergang)
    Sunset1=Abendfahrt wurde durchgeführt, 0=noch keine Abendfahrt durchgeführt
    SunriseUnixTimeberechnete Unixzeit für Morgens (Sonnenaufgang)
    Sunrise1=Morgenfahrt wurde durchgeführt, 0=noch keine Morgenfahrt durchgeführt
    RoommatesStatusaktueller Status der/des Roommate/s für den Rollladen
    RoommatesLastStatusletzter Status der/des Roommate/s für den Rollladen
    ShadingStatusAusgabe des aktuellen Shading Status, ���in“, �����out“, „in reserved“, „out reserved“
    ShadingStatusTimestampTimestamp des letzten Beschattungsstatus
    IfInShadingBefindet sich der Rollladen, in Abhängigkeit des Shading Mode, in der Beschattung
    DelayCmdletzter Fahrbefehl welcher in die Warteschlange kam. Grund z.B. Partymodus.
    StatusPosition des Rollladens
    ASCenableAbfrage ob für den Rollladen die ASC Steuerung aktiv ist.
    IsDayAbfrage ob das Rollo im Tag oder Nachtmodus ist. Also nach Sunset oder nach Sunrise
    PrivacyDownStatusAbfrage ob das Rollo aktuell im PrivacyDown Status steht
    OutTempaktuelle Außentemperatur sofern ein Sensor definiert ist, wenn nicht kommt -100 als Wert zurück
    ShadingBetweenTheTimeKonfiguration für die Zeit der Beschattung

    Übersicht für das Rollladen-Device mit Parameterübergabe Getter
      { ascAPIget('GETTER','ROLLODEVICENAME',VALUE) }
    GetterErläuterung
    QueryShuttersPosRückgabewert 1 bedeutet das die aktuelle Position des Rollos unterhalb der Valueposition ist. 0 oder nichts bedeutet oberhalb der Valueposition.

    Übersicht für das Rollladen-Device Setter
      { ascAPIset('SETTER','ROLLODEVICENAME','VALUE') }
    SetterErläuterung
    AntiFreezePossetzt die Position für Antifreeze
    AntiFreezesetzt den Wert für Antifreeze - off/soft/hard/am/pm
    ShuttersPlacesetzt den Standort des Rollos - window/terrace
    SlatPosCmdsetzt Command für das fahren der Lamellen
    PrivacyUpTimesetzt die Zeit für die morgendliche privacy Fahrt
    PrivacyDownTimeetzt die Zeit für die abendliche privacy Fahrt
    PrivacyDownPossetzt die Position für eine abendliche privacy Fahrt
    PrivacyUpPossetzt die Position für eine morgendliche privacy Fahrt
    SelfDefenseModesetzt den Modus für SelfDefense
    SelfDefenseAbsentDelaysetzt den Verzögerungswert für SelfDefense
    WiggleValuesetzen der Werte für Wiggle
    Advsetzt die Unterstützung für Weihnachten - on/off
    ShadingPossetzt den Wert der Beschattungsposition
    ShadingModesetzt den Modus der Beschattung - absent/always/off/home
    ShadingMinOutsideTemperaturesetzt den mininmal Temperaturwert zur Beschattung
    ShadingWaitingPeriodsetzt den Wert der Beschattungswartezeit
    Delaysetzt den Zufallswert zur verzögerten Fahrt
    DelayStartsetzen den festen Wert zur verzögerten Fahrt
    BlockingTimeAfterManualsetzt den Wert in Sekunden zur Blockade nach einer manuellen Fahrt
    BlockingTimeBeforNightClosesetzt den Wert in Sekunden zur Blockade vor der Nachtfahrt
    BlockingTimeBeforDayOpensetzt den Wert in Sekunden zur Blockade vor der Tagfahrt
    PosCmdsetzt den Readingnamen zur Positionserkennung des Rollos
    OpenPossetzt den Wert für die offen Position
    VentilatePossetzt den Wert für die ventilate Position
    VentilatePosAfterDayClosedwas soll passieren wenn am Tag das Fenster geschlossen wird - open/lastManual
    ClosedPossetzt den Wert für die geschlossen Position
    SleepPossetzt den Wert für die schlafen Position
    VentilateOpensetzt den Wert für VentilateOpen Position
    ComfortOpenPossetzt den Wert für ComfortOpen Position
    PartyModeWert für den PartyMode - on/off
    Roommatessetzt den Wert für Roommates als String, mehrere Roommates durch Komma getrennt
    RoommatesReadingsetzt das Reading für die Roommates
    WindProtectionsetzt/überschreibt die WindProtection - protected/unprotected
    RainProtectionsetzt/überschreibt die RainProtection - protected/unprotected
    ModeUpsetzt den Modus für die morgendliche Fahrt - absent/always/off/home
    ModeDownsetzt den Modus für die abendliche Fahrt - absent/always/off/home
    LockOutsetzt den zu berücksichtigen LockOut Modus - off/soft/hard
    LockOutCmdsetzt das Kommando für den LockOut des Rollos
    AutoAstroModeMorning
    AutoAstroModeEvening
    AutoAstroModeMorningHorizon
    AutoAstroModeEveningHorizon
    Up
    Down
    TimeUpEarly
    TimeUpLate
    TimeDownEarly
    TimeDownLate
    TimeUpWeHoliday
    DriveUpMaxDuration
    SubTyp
    WinDev
    ShadingBetweenTheTimeKonfiguration für die Zeit der Beschattung, Beispiel: 09:00-13:00 WICHTIG!!!! Immer bei einstelligen Stunden die 0 davor setzen

    Übersicht für das ASC Device Getter
      { ascAPIget('GETTER') }
    GetterErläuterung
    OutTemp aktuelle Außentemperatur sofern ein Sensor definiert ist, wenn nicht kommt -100 als Wert zurück
    ResidentsStatusaktueller Status des Residents Devices
    ResidentsLastStatusletzter Status des Residents Devices
    AzimuthAzimut Wert
    ElevationElevation Wert
    ASCenableist die ASC Steuerung global aktiv?
    PartyModeParty Mode Reading
    HardLockOutHard Lock Out Reading
    SunriseTimeWeHolidayFeiertags und Wochenend Sunrise Zeiten beachten
    AutoShuttersControlShadingglobale Beschattung on/off
    SelfDefenseglobal Self Defense on/off
    ShuttersOffsetglobales Drive Delay
    BrightnessMinValBrightness Wert für Sonnenuntergang
    BrightnessMaxValBrightness Wert für Sonnenaufgang
    AutoAstroModeEvening
    AutoAstroModeEveningHorizon
    AutoAstroModeMorning
    AutoAstroModeMorningHorizon
    AutoShuttersControlMorning
    AutoShuttersControlEvening
    AutoShuttersControlComfort
    FreezeTemp
    RainTriggerMax
    RainTriggerMin
    RainSensorShuttersClosedPos
    RainWaitingTime
    BlockAscDrivesAfterManual

AutomowerConnect

    FHEM-FORUM: AutomowerConnect
    FHEM-Wiki: AutomowerConnect: Wie erstellt man eine Karte des Mähbereiches?

    Einleitung

    • Dieses Modul etabliert eine Kommunikation zwischen der Husqvarna Cloud and FHEM, um einen Husqvarna Automower zu steuern, der mit einem Connect Modul (SIM) ausgerüstet ist.
    • Es arbeitet als Device für einen Mähroboter. Für jeden in der API registrierten Mähroboter ist ein extra Appilcation Key mit Application Secret zu verwenden.
    • Der Pfad des Mähroboters wird in der Detailansicht des FHEMWEB Frontends angezeigt.
    • Der Pfad kann mit einer beliebigen Karte hinterlegt werden.
    • Die Karte muss als Rasterbild im webp, png oder jpg Format vorliegen.
    • Es ist möglich alles was die API anbietet zu steuern, z.B. Mähplan,Scheinwerfer, Schnitthöhe und Aktionen wie, Start, Pause, Parken usw.
    • Zonen können selbst definiert werden.
    • Die Schnitthöhe kann je selbstdefinierter Zone eingestellt werden.
    • Die Daten aus der API sind im Gerätehash gespeichert, Mit {Dumper $defs{<device name>}} in der Befehlezeile können die Daten angezeigt werden und daraus userReadings erstellt werden.

    Anforderungen

    • Für den Zugriff auf die API muss eine Application angelegt werden, im Husqvarna Developer Portalangelegt und mit der Automower Connect API verbunden werden.
    • Währenddessen wird ein Application Key (client_id) und ein Application Secret (client secret) bereitgestellt. Diese sind für dieses Modul zu nutzen.
    • Das Modul nutzt Client Credentials als Granttype zur Authorisierung.


    Define
      define <device name> AutomowerConnect <application key> [<mower number>]
      Beispiel:
      define myMower AutomowerConnect 123456789012345678901234567890123456 Erstes Gerät: die Defaultmähernummer ist 0.
      Es muss ein client_secret gesetzt werden. Es ist das Application Secret vom Husqvarna Developer Portal.
      set myMower <client secret>


    Set
    • Park
      set <name> Park <number of minutes>
      Parkt den Mäher in der Ladestation (LS) für <number of minutes>
    • ParkUntilFurtherNotice
      set <name> ParkUntilFurtherNotice
      Parkt den Mäher bis auf Weiteres in der LS
    • ParkUntilNextSchedule
      set <name> ParkUntilNextSchedule
      Parkt den Mäher bis auf Weiteres in der LS und startet zum nächsten geplanten Zeitpunkt
    • Pause
      set <name> Pause
      Pausiert den Mäher sofort am aktuellen Standort
    • ResumeSchedule
      set <name> ResumeSchedule
      Startet im geplanten Interval den Mäher sofort, sonst zum nächsten geplanten Zeitpunkt
    • Start
      set <name> Start <number of minutes>
      Startet sofort für <number of minutes>
    • StartInWorkArea
      set <name> StartInWorkArea <workAreaId|zone name> [<number of minutes>]
      Testing: Startet sofort in <workAreaId|name> für <number of minutes>
      Der Name der Zone darf keine Leerzeichen beinhalten und muss mindestens einen Buchstaben enthalten.
    • chargingStationPositionToAttribute
      set <name> chargingStationPositionToAttribute
      Setzt die berechneten Koordinaten der LS in das entsprechende Attribut.
    • client_secret
      set <name> client_secret <application secret>
      Setzt das erforderliche Application Secret (client secret)
    • cuttingHeight
      set <name> cuttingHeight <1..9>
      Setzt die Schnitthöhe. HINWEIS: Nicht für 550 EPOS und Ceora geeignet.
    • stayOutZone_enable
      set <name> stayOutZone_enable <Id|zone name>
      Testing: Enabled stayOutZone für die Id oder den Namen der Zone, er darf keine Leerzeichen beinhalten und muss mindestens einen Buchstaben enthalten.
    • stayOutZone_disable
      set <name> stayOutZone_disable <Id|zone name>
      Testing: Disabled stayOutZone für die Id oder den Namen der Zone, er darf keine Leerzeichen beinhalten und muss mindestens einen Buchstaben enthalten.
    • getNewAccessToken
      set <name> getNewAccessToken
      Nur zur Fehlerbehebung.
    • getUpdate
      set <name> getUpdate
      Nur zur Fehlerbehebung.
    • headlight
      set <name> headlight <ALWAYS_OFF|ALWAYS_ON|EVENIG_ONLY|EVENING_AND_NIGHT>
      Setzt den Scheinwerfermode
    • mowerScheduleToAttribute
      set <name> mowerScheduleToAttribute
      Schreibt den Mähplan ins Attribut moverSchedule.
    • sendScheduleFromAttributeToMower
      set <name> sendScheduleFromAttributeToMower
      Sendet den Mähplan zum Mäher. HINWEIS: Nicht für 550 EPOS und Ceora geeignet.
    • mapZonesTemplateToAttribute
      set <name> mapZonesTemplateToAttribute
      Läd das Beispiel aus der Befehlsreferenz in das Attribut mapZones.
    • defaultDesignAttributesToAttribute
      set <name> defaultDesignAttributesToAttribute
      Läd die Standartdesignattribute.


    Get
    • html
      get <name> html
      Gibt das Bild des Mäherbereiches html kodiert zurück, zur Verwendung in uiTable, TabletUI, Floorplan, readingsGroup, weblink usw.
    • errorCodes
      get <name> errorCodes
      Listet die Statuscode der API-Anfrage und die Fehlercodes des Mähroboters auf.
    • InternalData
      get <name> InternalData
      Listet einige Daten des FHEM-Gerätes auf.
    • MowerData
      get <name> MowerData
      Listet alle Daten des Mähers einschließlich Hashpfad auf ausgenommen das Positonsarray. Der Hashpfad kann zur Erzeugung von userReadings genutzt werden, getriggert wird durch e.g. device_state: connected oder mower_wsEvent: <status-event|positions-event|settings-event>.
      Beispiel: erzeugen des Reading serialnumber mit dem Hashpfad $hash->{helper}{mower}{attributes}{system}{serialNumber}

      attr <name> userReadings serialnumber:connected {$defs{$name}->{helper}{mower}{attributes}{system}{serialNumber}}
    • StatisticsData
      get <name> StatisticsData
      Listet statistische Daten mit ihrem Hashpfad auf. Der Hashpfad kann zur Erzeugung von userReadings genutzt werden, getriggert wird z.B. durch device_state: connected oder mower_wsEvent: <status-event|positions-event|settings-event>
    • errorStack
      get <name> errorStack
      Listet die gespeicherten Fehler auf.


    Attributes
    • mapImagePath
      attr <name> mapImagePath <path to image>
      Pfad zur Bilddatei. Auf das Bild werden Pfad, Anfangs- u. Endpunkte gezeichnet.
      Wenn der Bildname die Bildgröße impliziert indem er zu dem regulären Ausdruck /(\d+)x(\d+)/ passt,
      wird das zugehörige Attribut gesetzt mapImageWidthHeight = '$1 $2'
      Beispiel Bildname: map740x1300.webp
    • mapImageWidthHeight
      attr <name> mapImageWidthHeight <width in pixel><separator><height in pixel>
      Bildbreite in Pixel des Bildes auf das Pfad, Anfangs- u. Endpunkte gezeichnet werden. <separator> ist 1 Leerzeichen.
    • mapImageZoom
      attr <name> mapImageZoom <zoom factor>
      Zoomfaktor zur Salierung des Bildes auf das Pfad, Anfangs- u. Endpunkte gezeichnet werden. Standard: 0.5
    • mapBackgroundColor
      attr <name> mapBackgroundColor <color value>
      Der Wert wird als Hintergrungfarbe benutzt.
    • mapDesignAttributes
      attr <name> mapDesignAttributes <complete list of design-attributes>
      Lade die Attributliste mit set <name> defaultDesignAttributesToAttribute um die Werte zu ändern. Einige Vorgabewerte:
      • Pfad beim mähen, Aktivität MOWING: rot
      • In der Ladestation, Aktivität CHARGING,PARKED_IN_CS: grau
      • Pfad für die Aktivität LEAVING: grün
      • Pfad für Aktivität GOING_HOME: blau
      • Pfad eines Intervalls mit Fehler (alle Aktivitäten with error): Eine Art Magenta
      • Pfad aller anderen Aktivitäten: grau
    • mapImageCoordinatesToRegister
      attr <name> mapImageCoordinatesToRegister <upper left longitude><space><upper left latitude><line feed><lower right longitude><space><lower right latitude>
      Obere linke und untere rechte Ecke der Fläche auf der Erde, die durch das Bild dargestellt wird um das Bild auf der Fläche zu registrieren (oder einzupassen).
      Format: Zeilenweise Paare von Longitude- u. Latitudewerten getrennt durch 1 Leerzeichen. Die Zeilen werden aufgeteilt durch (/\s|\R$/).
      Angabe der WGS84 (GPS) Koordinaten muss als Dezimalgrad erfolgen.
    • mapImageCoordinatesUTM
      attr <name> mapImageCoordinatesUTM <upper left longitude><space><upper left latitude><line feed><lower right longitude><space><lower right latitude>
      Obere linke und untere rechte Ecke der Fläche auf der Erde, die durch das Bild dargestellt wird um das Bild auf der Fläche zu registrieren (oder einzupassen).
      Format: Zeilenweise Paare von Longitude- u. Latitudewerten getrennt durch 1 Leerzeichen. Die Zeilen werden aufgeteilt durch (/\s|\R$/).
      Die Angabe der UTM Koordinaten muss als Dezimalzahl in Meter erfolgen.
      Das Attribut muss nach dem Attribut mapImageCoordinatesToRegister gesetzt werden.
      Dieses Attribut berechnet die Skalierungsfaktoren. Das Attribut scaleToMeterXY wird entsprechend gesetzt.
    • showMap
      attr <name> showMap <1,0>
      Zeigt die Karte an (1 default) oder nicht (0).
    • chargingStationCoordinates
      attr <name> chargingStationCoordinates <longitude><separator><latitude>
      Longitude und Latitude der Ladestation als WGS84 (GPS) Koordinaten als Deimalzahl. <separator> ist 1 Leerzeichen.
    • chargingStationImagePosition
      attr <name> chargingStationImagePosition <right, bottom, left, top, center>
      Position der Ladestation relativ zu ihren Koordinaten.
    • mowerCuttingWidth
      attr <name> mowerCuttingWidth <cutting width>
      Schnittbreite in Meter zur Berechnung der gemähten Fläche. default: 0.24
    • mowerSchedule
      attr <name> mowerSchedule <schedule array>
      Dieses Attribut bietet die Möglichkeit den Mähplan zu ändern, er liegt als JSON Array vor.
      Der aktuelleMähplan kann mit dem Befehl set <name> mowerScheduleToAttrbute ins Attribut geschrieben werden.
      Der Befehl set <name> sendScheduleFromAttributeToMower sendet den Mähplan an den Mäher. Das Maximum der Arrayelemente beträgt 14, 2 für jeden Tag, so daß jeden Tag zwei Intervalle geplant werden können. Jedes Arrayelement besteht aus 7 unsortierten Tageswerten (monday bis sunday) die auf true oder false gesetzt werden können, einen start Wert und einen duration Wert in Minuten. Die Startzeit start wird von Mitternacht an gezählt. HINWEIS: Nicht für 550 EPOS und Ceora geeignet.
    • mowingAreaLimits
      attr <name> mowingAreaLimits <positions list>
      Liste von Positionen, die den Mähbereich beschreiben. Format: Zeilenweise Paare von Longitude- u. Latitudewerten getrennt durch 1 Leerzeichen. Die Zeilen werden aufgeteilt durch (/\s|\R$/).
      Die Liste der Positionen kann aus einer mit Google Earth erzeugten KML-Datei entnommen werden, aber ohne Höhenangaben.
    • propertyLimits
      attr <name> propertyLimits <positions list>
      Liste von Positionen, um die Grundstücksgrenze zu beschreiben. Format: Zeilenweise Paare von Longitude- u. Latitudewerten getrennt durch 1 Leerzeichen. Eine Zeile wird aufgeteilt durch (/\s|\R$/).
      Die genaue Position der Grenzpunkte kann man über die Geoportale der Länder finden. Eine Umrechnung der UTM32 Daten in Meter nach ETRS89 in Dezimalgrad kann über das BKG-Geodatenzentrum erfolgen.
    • numberOfWayPointsToDisplay
      attr <name> numberOfWayPointsToDisplay <number of way points>
      Legt die Anzahl der gespeicherten und und anzuzeigenden Wegpunkte fest, Standartwert ist 5000 und Mindestwert ist 100. Die Wegpunkte werden durch den zugeteilten Wegpunktspeicher geschoben.
    • weekdaysToResetWayPoints
      attr <name> weekdaysToResetWayPoints <any combination of weekday numbers, space or minus [0123456 -]>
      Eine Kombination von Wochentagnummern an denen der Wegpunktspeicher gelöscht wird. Keine Löschung bei Leer- oder Minuszeichen, Standard 1.
    • scaleToMeterXY
      attr <name> scaleToMeterXY <scale factor longitude><seperator><scale factor latitude>
      Der Skalierfaktor hängt vom Standort ab und muss daher für kurze Strecken berechnet werden. <seperator> ist 1 Leerzeichen.
      Longitude: (LongitudeMeter_1 - LongitudeMeter_2) / (LongitudeDegree_1 - LongitudeDegree _2)
      Latitude: (LatitudeMeter_1 - LatitudeMeter_2) / (LatitudeDegree_1 - LatitudeDegree _2)
    • mapZones
      attr <name> mapZones <JSON string with zone names in alpabetical order and valid perl condition to seperate the zones>
      Die Wegpunkte stehen über die Perlvariablen $longitude und $latitude zur Verfügung.
      Die Zonennamen und Bedingungen müssen als JSON-String angegeben werden.
      Die Zonennamen müssen in alphabetischer Reihenfolge durch Bedingungen abgegrenzt werden.
      Die letzte Zone ergibt sich aus den übrig gebliebenen Wegpunkten.
      Syntaxbeispiel:
      '{
          "<name_1>" : {
            "condition" : "<condition to separate name_1 from other zones>",
            "cuttingHeight" : "<cutting height for the first zone>"
        },
          "<name_2>" : {
            "condition" : "<condition to separate name_2 from other zones, except name_1>",
            "cuttingHeight" : "<cutting height for the second zone>"
        },
          "<name_3>" : {
            "condition" : "<condition to separate name_3 from other zones, except name_1 and name_2>",
            "cuttingHeight" : "<cutting height for the third zone>"
        },
          "<name_n-1>" : {
            "condition" : "<condition to separate name_n-1 from other zones ,except the zones already seperated>",
            "cuttingHeight" : "<cutting height for the nth-1 zone>"
        },
          "<name n>" : {
            "condition" : "Use 'undef' because the last zone remains.",
            "cuttingHeight" : "<cutting height for the nth zone>"
        }
      }'

      Beispiel mit zwei Zonen und gedachten Linien bestimmt durch die Punkte Latitude 52.6484600648553, 52.64839739580418 (horizontal) und 9.54799477359984 (vertikal). Alle Wegpunkte deren Latitude über einer horizontalen Linie mit der Latitude 52.6484600648553 liegen oder alle Wegpunkte deren Latitude über einer horizontalen Linie mit der Latitude 52.64839739580418 liegen und deren Longitude rechts von einer vertikale Linie mit der Longitude 9.54799477359984 liegen, gehören zur Zone 01_oben. Alle anderen Wegpunkte gehören zur Zone 02_unten.
      In den Zonen sind unterschiedliche Schnitthöhen eingestellt.
      '{
          "01_oben" : {
            "condition" : "$latitude > 52.6484600648553 || $longitude > 9.54799477359984 && $latitude > 52.64839739580418",
            "cuttingHeight" : "7"
        },
          "02_unten" : {
            "condition" : "undef",
            "cuttingHeight" : "3"
        }
      }'
    • addPollingMinInterval
      attr <name> addPollingMinInterval <interval in seconds>
      Setzt das Mindestintervall für zusätzliches Polling der API nach einem status-event, default 0 (kein Polling). Liest periodisch zusätzlich statistische Daten vom Mäher. Es muss sichergestellt werden, das die API Begrenzung (10000 Anfragen pro Monat) eingehalten wird.
    • addPositionPolling
      attr <name> addPositionPolling <[1|0]>
      Setzt das Positionspolling, default 0 (kein Positionpolling). Liest periodisch Positiondaten des Mähers, an Stelle der über Websocket gelieferten Daten. Das Attribut ist nur wirksam, wenn durch das Attribut addPollingMinInterval das Polling eingeschaltet ist.
    • disable
    • disabledForIntervals


    userattr
      Die folgenden Benutzerattribute werden unterstützt.
    • loglevelDevIo
      attr <name> loglevelDevIo <[012345]>
      Setzt das Internal deviologlevel, DevIo: Wichtige_Internals_zur_Konfiguration
    • timeoutGetMower
      attr <name> timeoutGetMower <[6 to 60]>
      Setzt den Timeout für das Lesen der Mäherdaten, default 5 s.
    • timeoutApiAuth
      attr <name> timeoutApiAuth <[6 to 60]>
      Setzt den Timeout für die Authentifikation, default 5 s.
    • timeoutCMD
      attr <name> timeoutCMD <[6 to 60]>
      Setzt den Timeout für Befehl senden, default 15 s.

    • Wird ein Timeout auf 60 s gesetzt, wird die Antwortzeit gemessen und geloggt.
    • testing
      attr <name> testing 1
      Macht Befehle verfügbar, die mit Testing markiert sind.



    Readings
    • api_MowerFound - Alle Mähroboter, die unter dem genutzten Application Key (client_id) registriert sind.
    • api_callsThisMonth - Zählt die im Monat erfolgten API Aufrufe, wenn das Attribut addPollingMinInterval gesetzt ist.
    • api_token_expires - Datum wann die Session der Husqvarna Cloud abläuft
    • batteryPercent - Batterieladung in Prozent
    • mower_activity - aktuelle Aktivität "UNKNOWN" | "NOT_APPLICABLE" | "MOWING" | "GOING_HOME" | "CHARGING" | "LEAVING" | "PARKED_IN_CS" | "STOPPED_IN_GARDEN"
    • mower_commandSend - Letzter erfolgreich gesendeter Befehl.
    • mower_commandStatus - Status des letzten uebermittelten Kommandos wird duch Statusupdate zurückgesetzt.
    • mower_currentZone - Name der Zone im aktuell abgefragten Intervall der Statuszeitstempel , in der der Mäher gemäht hat und Anzahl der Wegpunkte in der Zone in Klammern.
    • mower_wsEvent - Events der Websocketverbindung (status-event, positions-event, settings-event)
    • mower_errorCode - last error code
    • mower_errorCodeTimestamp - last error code time stamp
    • mower_errorDescription - error description
    • mower_mode - aktueller Arbeitsmodus "MAIN_AREA" | "SECONDARY_AREA" | "HOME" | "DEMO" | "UNKNOWN"
    • mower_state - aktueller Status "UNKNOWN" | "NOT_APPLICABLE" | "PAUSED" | "IN_OPERATION" | "WAIT_UPDATING" | "WAIT_POWER_UP" | "RESTRICTED" | "OFF" | "STOPPED" | "ERROR" | "FATAL_ERROR" |"ERROR_AT_POWER_UP"
    • planner_nextStart - nächste Startzeit
    • planner_restrictedReason - Grund für Parken NOT_APPLICABLE, NONE, WEEK_SCHEDULE, PARK_OVERRIDE, SENSOR, DAILY_LIMIT, FOTA, FROST
    • planner_overrideAction - Grund für vorrangige Aktion NOT_ACTIVE, FORCE_PARK, FORCE_MOW
    • state - Status der Websocketverbindung der Husqvarna API.
    • device_state - Status der Verbindung des FHEM-Gerätes zur Husqvarna Cloud API (defined, authentification, authentified, connected, error, update).
    • settings_cuttingHeight - aktuelle Schnitthöhe aus der API
    • settings_headlight - aktueller Scheinwerfermode aus der API
    • statistics_newGeoDataSets - Anzahl der neuen Datensätze zwischen den letzten zwei unterschiedlichen Zeitstempeln
    • statistics_numberOfCollisions - Anzahl der Kollisionen (laufender Tag/letzter Tag/alle Tage)
    • status_connected - Status der Verbindung zwischen dem Automower und der Husqvarna Cloud.
    • status_statusTimestamp - Lokalzeit des letzten Statusupdates in der API
    • status_statusTimestampDiff - Zeitdifferenz zwischen dem letzten und vorletzten Statusupdate.
    • system_name - Name des Automowers

BDKM

    Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: BDKM

BEOK

[EN DE]
    BEOK implementiert die Verbindung zu einem BEOK / Floureon / Hysen WiFi Raum Thermostaten
    Wiki : https://wiki.fhem.de/wiki/BEOK

    Da das Modul AES-Verschlüsselung benötigt müssen ggf. noch zusätzliche Perl Module installiert werden.
    Bsp. für Debian/Raspian :
    sudo apt-get install libcrypt-cbc-perl
    sudo apt-get install libcrypt-rijndael-perl
    sudo apt-get install libssl-dev
    sudo cpan Crypt/OpenSSL/AES.pm



    Define
      define <name> BEOK <ip> [mac]

      Beispiel: define WT BEOK 192.178.1.100
      define WT BEOK 192.178.1.100 01:02:03:04:05:06
      Es wird empfohlen die MAC Adresse mit anzugeben. Z.z ist noch nicht geklärt ob sonst eventuell vermehrte Timeouts die Folge sind.


    Set

    • mode <auto manual>

    • loop <12345.67 123456.7 1234567>
      12345.67 Montag - Freitag Werktag, Samstag & Sonntag sind Wochenende
      123456.7 Montag - Samstag Werktag, nur Sonntag ist Wochendende
      1234567 jeder Tag (inklusive Samstag & Sonntag) ist ein Werktag, kein Wochenende

    • sensor <external internal both>
      both = internal control temperature, external limit temperature

    • time
      setzt Uhrzeit und Wochentag

    • lock <on off>

    • power-on-memory <on off>

    • fre <open close>
      Frostschutz Funktion

    • room-temp-adj <-5 - +5>
      Korrekturwert (Offset) Raumtemperatur

    • osv <5 - 99>
      Maximum Temperatur für externen Sensor

    • svh <5 - 99>
      Raumtemperatur Maximum

    • svl <5 - 99>
      Raumtemperatur Minimum

    • dif <1 - 9>
      difference of limit temperature value of external sensor

    • day-profil[1-6]-temp <5 - 99>
      Werktagprofil Temperatur

    • day-profil[1-6]-time <00:00 - 23:59>
      Werktagprofil Zeit

    • we-profile[7-8]-temp <5 - 99>
      Wochenendprofil Temperatur

    • we-profile[7-8]-time <00:00 - 23:59>
      Wochenendprofil Zeit

    • weekprofile
      Setzt alle Wochentag Schaltzeiten und Temperaturen mit Werten aus einem Profil des Moduls weekprofile.
      Syntax : set weekprofile <weekprofile_device:profil_name[:Wochentag]>
      siehe auch Erklärung im Forum bzw. im Wiki.

    Attribute
    • display
      auto | always_on , default auto
      Displaybeleuchtung bei jeder Statusabfrage einschalten (always_on). Wird ausserdem das Attribut interval auf eine Zeit kleiner 9 Sekunden gesetzt, so leuchtet das Display dauerhaft.
      ACHTUNG dies hat eine wesentlich höhere Funklast zur Folge !
      D.h. die Wahrscheinlichkeit von gelegentlichen Timeouts wird stark zunehmen, siehe auch Attribut skipTimeouts.

    • interval
      Poll Intevall in Sekunden, 0 = kein Polling , default 60

    • keepAuto
      0 | 1 , default 0 (aus)
      Schaltet das Thermostat kurz vor Ende eines Tages in den Mode auto sollte es sich zu diesem Zeitpunkt im Mode manu befinden.

    • language
      DE für deutsche Bezeichnungen in der Übersicht, z.B. Raum statt Room , usw.

    • maxErrorLog
      Default : 10
      maximale Anzahl wie oft die gleiche Fehlermeldung in die Log Datei geschrieben wird.

    • model
      nur für die FHEM Modul Statistik unter https://fhem.de/stats/statistics.html

    • skipTimeouts
      0 - 9 , default 1
      Anzahl der max. zulässigen Timeouts in Folge ohne das ein Logeintrag bzw. eine Fehlermeldung erfolgt (default 1)

    • timeout
      Timeout in Sekunden für die Wlan Kommunikation, default 5
      ACHTUNG in Verbindung mit dem Attribut display = alaways_on darf diese Wert niemals grösser als als das Attribut interval sein !

    • timesync
      Uhrzeit und Wochentag automatisch mit FHEM synchronisieren, default 1 (an)
      Setzt automatisch FHEM Zeit und Wochentag im Thermostsat.

BOSEST

[EN DE]
    BOSEST ist ein Modul um ein BOSE SoundTouch System zu steuern, (ein oder mehrere SoundTouch 10, 20 30, 300 oder Portable Geräte)

    Hinweis: Für das BOEST Modul sind folgende Bibliotheken erforderlich:
    • libwww-perl
    • libmojolicious-perl
    • libxml-simple-perl
    • libnet-bonjour-perl
    • libev-perl
    • liburi-escape-xs-perl
    • sox
    • libsox-fmt-mp3

    • Rufe sudo apt-get install libwww-perl libmojolicious-perl libxml-simple-perl libnet-bonjour-perl libev-perl liburi-escape-xs-perl auf, um diese Bibliotheken zu installieren.
      Hinweis:libmojolicious-perl muss mindestens die Version 5.54 haben.
      Rufe sudo apt-get install cpanminus and sudo cpanm Mojolicious auf, um auf die aktuelle Version zu updaten.

      Die Konfiguration von TTS (TextToSpeech) ist in diesem FHEM Forum Beitrag beschrieben: Link
      Fragen und Feedback bitte über das FHEM Forum: Link

    Define
      define <name> BOSEST

      Beispiel:
        define bosesystem BOSEST
        Definiert das BOSE SoundTouch System. Alle Lautsprecher erscheinen innerhalb von ca. 60 s unter "Unsorted" in FHEM.

    Set
      set <name> <command> [<parameter>]

      Die folgenden SET-Kommandos gelten für Lautsprecher (Ausnahme: autoAddDLNAServers ist nur für das Hauptmodul BOSEST) :

        Allgemein
      • on   -   Lautsprecher einschalten
      • off   -   Lautsprecher ausschalten
      • power   -   Wechselt zw. on und off
      • volume [0...100] [+x|-x]   -   Lautstärke setzen (direkt oder als ±x Differenz zur aktuellen Lautstärke)
      • channel 0...20   -   Present auswählen
      • saveChannel 07...20   -   Aktuelle Wiedergabe als Present 07 bis 20 speichern
      • play   -   Startet die Wiedergabe
      • pause   -   Pausiert die Wiedergabe
      • playpause   -   Wechselt zw. play und pause
      • stop   -   Stoppt die Wiedergabe
      • nextTrack   -   Nächsten Titel spielen
      • prevTrack   -   Vorherigen Titel spielen
      • playTrack name|location|source[|sourceAccount]   -   Sucht per DNLA nach dem Titel und spielt ihn ab
        Weitere Informationen:
        1. "Es ist immer nur eine Suche und die ist nach trackTitle, trackAlbum, trackArtist möglich, so wie in der SoundTouch App" (FHEM Forum Beitrag)
        2. "Einfach in der SoundTouch APP auf die Suche klicken und schauen, ob Playlists gefunden und abgespielt werden können." (FHEM Forum Beitrag)
      • mute on|off|toggle   -   Stummschaltung
      • shuffle on|off   -   Zufallswiedergabe
      • repeat all|one|off   -   Wiederholung
      • bass 0...10   -   Basseinstellung
      • recent 0...15   -   Anzahl der Namen, die in der recent list in readings aufgeführt werden
      • source bluetooth,bt-discover,aux mode, airplay   -   lokale Quelle auswählen

      • addDLNAServer Name1 [Name2] [Namex]   -   DLNA server Name1 (und Name2 bis Namex) zur BOSE Bibliothek hinzufügen
      • removeDLNAServer Name1 [Name2] [Namex]   -   DLNA server Name1 (und Name2 bis Namex) aus der BOSE Bibliothek entfernen

      Beispiel: set BOSE_1234567890AB volume 25  Setzt die Lautstärke des Lautsprechers BOSE_1234567890AB auf 25.


        Zeiten:
      • on-for-timer 1...x   -   Schaltet den Lautsprecher für x Sekunden ein
      • off-for-timer 1...x   -   Schaltet den Lautsprecher für x Sekunden aus
      • on-till hh:mm:ss   -   Schaltet den Lautsprecher bis zur angegebenen Zeit ein
      • off-till hh:mm:ss   -   Schaltet den Lautsprecher bis und zur angegebenen Zeit aus
      • on-till-overneight hh:mm:ss   -   Schaltet den Lautsprecher bis zur angegebenen Zeit am nächsten Tag ein
      • off-till-overneight hh:mm:ss   -   Schaltet den Lautsprecher bis zur angegebenen Zeit am nächsten Tag aus

      Beispiel: set BOSE_1234567890AB on-till 23:00:00  Schaltet den Lautsprecher BOSE_1234567890AB ein und um 23:00:00 Uhr aus.


        Multiroom:
      • createZone deviceID[,deviceID]   -   Legt eine Wiedergabe-Zone an und fügt einen oder mehrere Lautsprecher der Wiedergabezone hinzu
      • addToZone deviceID   -   Fügt einen Lautsprecher einer bestehenden Wiedergabe-Zone zu
      • removeFromZone deviceID   -   Entfernt einen Lautsprecher aus einer Wiedergabe-Zone
      • playEverywhere   -   Startet "Überall wiedergeben"
      • stopPlayEverywhere   -   Beendet "Überall wiedergeben"

      Beispiel 1: set BOSE_1234567890AB playEverywhere  Startet die Überall-Wiedergabe (Mit dem Lautsprecher BOSE_1234567890AB als Master-Lautsprecher).

      Beispiel 2: set BOSE_1234567890AB createZone AB1234567890,12AB34567890  Definiert BOSE_1234567890AB als Master-Lautsprecher und fügt BOSE_AB1234567890 und BOSE_12AB34567890 der Wiedergabe-Zone hinzu

      Hinweis: Drücken Sie 2x ein Present (innerhalb einer Sekunde) am Lautsprecher oder auf der Fernbedienung, wird "Überall Wiedergeben" ein oder ausgeschaltet.


        Uhr Anzeige (nur für ST20/30):
      • clock enable/disable   -   Schaltet die Uhrenanzeige im Standby um

      Beispiel: set BOSE_1234567890AB clock enable  Zeigt die Uhr im Standby auf dem Display des ST20/30 an.


        TextToSpeach (benötigt Google Translate):
      • speak "message" [0...100] [+x|-x] [en|de|xx]   -   Text den der Lautsprecher sagen soll, ggf. mit Lautstärkeangabe, die für diese Ansage verwendet werden soll. Nach der Ansage setzt der Lautsprecher die Wiedergabe fort.
      • speakOff "message" [0...100] [+x|-x] [en|de|xx]   -   Text den der Lautsprecher sagen soll, ggf. mit Lautstärkeangabe, die für diese Ansage verwendet werden soll. Nach der Ansage schaltet der Lautsprecher ab.

      Beispiel: set BOSE_1234567890AB speakOff "Ab isn Bett." 30 en  Spricht die Meldung mit Lautstärke 30 und schaltet den Lautsprecher dann aus.


        DNLA Server:
      • autoAddDLNAServers 0|1   -   1=automatisch alle DLNA servers zur BOSE Bibliothek hinzufügen. Dieser Parameter ist nur für das Hauptmodul BOSEST, nicht für die Lautsprecher!

    Get
      n/a

    Attribute
      • staticIPs IP-Address [,IP-Address]  -   Manuelle Angabe der IP Adresse(n). Sollte nur verwendet werden, wenn die automatiche Erkennung nicht funktioniert. (z.B. bei mehreren Sub-Netzwerken oder wenn Teile des Netzwerks manuell verbunden werden, ...)
        Beispiel: attr bosesystem staticIPs 192.168.1.52,192.168.1.53
      • speakChannel channel(s)   -   Ansage des aktuellen Present vor der Wiedergabe, sinnvoll für SoundTouch Lautsprecher ohne Display (Angabe komma-separiert oder als Bereich: z.B. 2,3,5,6 oder 1-6 ). TTS muss eingerichtet sein.
      • auto-zone on|off   -   "Überall Wiedergabe" automatisch starten, wenn Lautsprecher das gleiche wiedergeben ("contentItemLocation" ist identisch); (Standardwert: off)
      • ttsDirectory "directory"   -   Angabe des DLNA TTS Verzeichnisses. Der FHEM user muss Schreibrechte in diesem Verzeichnis haben.
      • ttsLanguage en|de|xx   -   Standardsprache für TTS setzen (default: en)
      • ttsSpeakOnError 0|1   -   0= Ansage "not available" unterdrücken
      • ttsVolume [0...100] [+x|-x]   -   Lautstärke setzen (direkt oder als ±x Differnez zur aktuellen Lautstärke)
      • Channel_07 to Channel_20 name|location|source|[sourceAccount]   -   Festlegen der Present 07 bis 20
        Bei Wiedergabe kann in den readings "ContentItemLocationName, ContentItemLocation, etc. " ausgelesen werden. Dies Daten können dann verwendet werden, um die Presents zu belegen.

BOTVAC

    Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: BOTVAC

BRAVIA

[EN DE]
    Diese Module dient zur Steuerung von Sony TVs der BRAVIA-Serien beginnend mit dem Modelljahr 2011.

    Define
      define <name> BRAVIA <ip-or-hostname> [<poll-interval>]

      Bei der Definition eines BRAVIA Gerätes wird ein interner Task eingeplant, der regelmäßig den Status des TV prüft und weitere Informationen abruft.
      Das Intervall des Tasks kann durch den optionalen Parameter <poll-intervall> in Sekunden gesetzt werden. Ansonsten wird der Task mit 45 Sekunden als Intervall definiert.

      Nach der Definition eines Gerätes muss dieses einmalig im TV als Fernbedienung registriert werden (set register).

      Soweit die Readings nicht den allgemeinen AV Readings entsprechen, sind sie gruppiert:
      s_*: Status
      ci_*: Inhaltsinfo


      Das Modul enthält vorgefertigte Layouts für remotecontrol mit PNG und SVG.

    Set
      set <name> <option> <value>

      Optionen:
      • application
        Liste der Anwendungen. Anwendungen sind ab Modelljahr 2013 verfügbar.
      • channel
        Liste aller bekannten Kanäle. Das Modul merkt sich alle aufgerufenen Kanäle. Ab Modelljahr 2013 werden die Kanäle automatisch geladen (Anzahl siehe channelsMax).
      • channelDown
        Einen Kanal zurück schalten.
      • channelUp
        Einen Kanal weiter schalten.
      • input
        Liste der Eingänge. Eingänge sind ab Modelljahr 2013 verfügbar.
      • mute
        Direkte Stummschaltung erfolgt nur per aktiviertem Upnp.
      • off
        Schaltet den TV aus. Der State des Gerätes wird auf "set_off" gesetzt. Dieser Wert wird nach 60 Sekunden wieder überschrieben oder sobald der TV entsprechend "off" meldet.
      • on
        Einschalten des TV, ab Modelljahr 2013 per WOL. Der State des Gerätes wird auf "set_on" gesetzt. Dieser Wert wird nach 60 Sekunden wieder überschrieben oder sobald der TV entsprechend "on" meldet.
      • openUrl
        Öffnet eine URL auf dem Bildschirm. Diese Funktion ist ab Modelljahr 2013 verfügbar.
      • pause
        Pausiert die Wiedergabe einer Aufnahme, einer internen App, etc.
      • play
        Startet die Wiedergabe einer Aufnahme, einer internen App, etc.
      • record
        Startet die Aufnahme des aktuellen Inhalts.
      • register
        Einmalige Registrierung von FHEM als Fernbedienung im TV.
        Bei requestFormat = "xml" erfolgt die Registrierung ohne Parameter.
        Bei requestFormat = "json" ist die Registrierung zweistufig.
        Beim Aufruf des Setter gibt es ein Eingabefeld:
        1. Aufruf mit leerem Eingabefeld. Auf dem TV sollte eine PIN zur Registrierung erscheinen.
        2. PIN im Eingabefeld eintragen und Registrierung noch mal ausführen
      • requestFormat
        "xml" für xml-basierte Kommunikation 2011er/2012er Geräte
        "json" für die Kommunikation seit der 2013er Generation
      • requestReboot
        Startet den TV direkt neu. Diese Funktion ist ab Modelljahr 2013 verfügbar.
      • remoteControl
        Direktes Senden von Kommandos an den TV.
      • statusRequest
        Ruft die aktuellen Statusinformationen vom TV ab.
      • stop
        Stoppt die Wiedergabe einer Aufnahme, einer internen App, etc.
      • text
        Überträgt den eingegebenen Text in ein Textfeld der Anzeige.
      • toggle
        Wechselt den Einschaltstatus des TV.
      • tvpause
        Aktiviert den Timeshift-Modus.
      • upnp
        Aktiviert Upnp zum Abfragen und Einstellen der Lautstärke.
      • volume
        Direktes Setzen der Lautstärke erfolgt nur per aktiviertem Upnp.
      • volumeDown
        Verringert die Lautstärke.
      • volumeUp
        Erhöht die Lautstärke.

    Attributes
      attr <name> <attribute> <value>

      Attribute:
      • channelsMax
        Maximale Anzahl der im FHEMWEB angezeigten Kanäle. Der Standartwert ist 50.
      • macaddr
        Ermöglicht das Einschalten des TV per Wake-On-Lan.
      • wolBroadcast
        Broadcast-Adresse für die Wake-On-Lan Magic Packets. Der Standartwert ist 255.255.255.255.

BS

    Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: BS

Babble

[EN DE]
    Deutsche Dokumentation im Wiki vorhanden, die englische Version gibt es hier: Babble

BlinkCamera

    Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: BlinkCamera

Broadlink

[EN DE]
    Broadlink implementiert die Verbindung zu Broadlink Geräten - aktuell mit Broadlink RM Pro, welcher sowohl Infrarot als auch 433MHz aufnehmen und anschließend versenden kann. Zusätzlich werden RMMinis und die Wlan Steckdosen SP3 und SP3S unterstützt
    Das Modul benötigt AES-Verschlüsslung.
    In Windows installiert man die Untersützung mit:
    ppm install Crypt-CBC
    ppm install Crypt-OpenSSL-AES

    Auf Linux/Raspberry: sudo apt-get install libcrypt-cbc-perl
    sudo apt-get install libcrypt-rijndael-perl
    sudo cpan Crypt/OpenSSL/AES.pm


    Define
      define <name> Broadlink <ip/host> <mac> <type=rmpro or rmmini or sp3 or sp3s>

      Beispiel: define broadlinkWZ Broadlink 10.23.11.85 34:EA:34:F4:77:7B rmpro

      Die mac-Adresse des Gerätes muss im folgenden Format eingegeben werden: xx:xx:xx:xx:xx
      Der Typ sp3 wird für schaltbare Steckdosen genutzt. rmpro für alle anderen Geräte.

    Set für rmpro
    • set <name> <commandSend> <command name>

      Sendet ein vorher aufgenommenen Befehl
    • set <name> recordNewCommand <command name>

      Nimmt ein neuen Befehl auf. Man muss einen Befehlnamen angeben.
    • set <name> remove <command name>

      Löscht einen vorher aufgezeichneten Befehl.
    • set <name> rename <old command name> <new command name>

      Benennt einen vorher aufgezeichneten Befehl um.
    • set <name> getTemperature

      Ermittelt die aktuelle Temperatur die am Gerät gemessen wird.

    Set für rmmini
    • set <name> <commandSend> <command name>

      Sendet ein vorher aufgenommenen Befehl
    • set <name> recordNewCommand <command name>

      Nimmt ein neuen Befehl auf. Man muss einen Befehlnamen angeben.
    • set <name> remove <command name>

      Löscht einen vorher aufgezeichneten Befehl.
    • set <name> rename <old command name> <new command name>

      Benennt einen vorher aufgezeichneten Befehl um.

    Set für sp3
    • set <name> on

      Schaltet das Gerät an.
    • set <name> off

      Schaltet das Gerät aus.
    • set <name> toggle

      Schaltet das Gerät entweder ein oder aus.
    • set <name> getStatus

      Ermittelt den aktuellen Status des Gerätes.

    Set für sp3s
    • set <name> on

      Schaltet das Gerät an.
    • set <name> off

      Schaltet das Gerät aus.
    • set <name> toggle

      Schaltet das Gerät entweder ein oder aus.
    • set <name> getStatus

      Ermittelt den aktuellen Status des Gerätes.
    • set <name> getEnergy

      Ermittelt den aktuellen Stromverbrauch des angeschlossenen Gerätes.

    Attribute für alle Broadlink Gräte
    • socket_timeout

      Setzt den Timeout für die Gerätekommunikation.

CALVIEW

[EN DE]
    Dieses Modul erstellt ein Device welches als Readings Termine eines oder mehrere Kalender(s), basierend auf dem 57_Calendar.pm Modul, besitzt. Ihr müsst das Perl-Modul Date::Parse installieren!
    Bitte setzt das Attribut HideOlderThen in eurem CALENDAR_Device, da sonst auch vergangene Termine gezeigt werden.
Define
    define <Name> CALVIEW <Kalendername(n) getrennt durch ','> <next> <updateintervall in sek (default 43200)>
    define myView CALVIEW Googlekalender next
    define myView CALVIEW Googlekalender,holiday next 900
    - die Einstellung des Aktualisierungsintervalls wird normalerweise nicht benötigt, da jede Kalenderaktualisierung ein Caview-Update auslöst
Set
    update readings:
    set <Name> update
    set myView update

Attributes
  • datestyle
    nicht gesetzt - Standard, Readings bdatetimeiso / edatetimeiso werden nicht gezeigt
    ISO8601 - aktiviert die readings bdatetimeiso / edatetimeiso (zeigen Terminstart und Ende im ISO8601 Format zB. 2017-02-27T00:00:00)

  • disable
    0 / nicht gesetzt - aktiviert die interne Notify-Funktion (Standard)
    1 - deaktiviert die interne Notify-Funktion welche ausgelöst wird wenn sich einer der Kalender aktualisiert hat

  • filterSummary <filtersouce>:<filtersummary>[,<filtersouce>:<filtersummary>]
    not set - zeigt alle Termine (Standard)
    <filtersouce>:<filtersummary>[,<filtersouce>:<filtersummary>] - CALVIEW filtert Termine die <filtersquelle>:<filtertitel> entsprechen, mehrere Filter sind durch Komma (,) zu trennen. zb.: filterSummary Kalender_Abfall:Leichtverpackungen,Kalender_Abfall:Bioabfall filterSummary Kalender_Abfall:Leichtverpackungen,Kalender_Feiertage:.*,Kalender_Christian:.*,Kalender_Geburtstage:.*

  • fulldaytext [text]
    Dieser Text wird bei ganztägigen Terminen in _timeshort Readings genutzt (default ganztägig)

  • isbirthday
    0 / nicht gesetzt - keine Altersberechnung (Standard)
    1 - aktiviert die Altersberechnung im Modul. Das Alter wird aus der in der Terminbeschreibung (description) angegebenen Jahreszahl (Geburtsjahr) berechnet. (siehe Attribut yobfield)

  • maxreadings
    bestimmt die Anzahl der Termine als Readings

  • modes
    hier können die CALENDAR modi gewählt werden, welche in der View angezeigt werden sollen

  • oldStyledReadings
    0 die Standarddarstellung für Readings
    1 aktiviert die Termindarstellung im "alten" Format "2015.06.21-00:00" mit Wert "Start of Summer"

  • sourcecolor <calendername>:<colorcode>[,<calendername>:<colorcode>]
    Hier kann man die Farben für die einzelnen Calendar definieren die dann zb im Tabletui widget genutzt werden kann. Die calendar:color Elemente sind durch Komma zu trennen. So kann man zb die google-Kalender Farben auch in der TUI für eine gewohnte Anzeige nutzen.

  • timeshort
    0 Zeit in _timeshort Readings im Format 00:00:00 - 00:00:00
    1 Zeit in _timeshort Readings im Format 00:00 - 00:00

  • yobfield
    _description - (der Standard) Geburtsjahr wird aus der Terminbechreibung gelesen
    _location - Geburtsjahr wird aus dem Terminort gelesen
    _summary - Geburtsjahr wird aus dem Termintiele gelesen (verwendet wird die erste folge von 4 Ziffern im String))

  • weekdayformat
    formatiert den Namen im Reading weekdayname
    - de-long - (default) Deutsch, lang zb Dienstag
    - de-short - Deutsch, kurze zb Di
    - en-long - English, lang zb Tuesday
    - en-short - English, kurze zb Tue

  • CDCOpenData

    [EN DE]
      Der DWD stellt Werte der pro Tag gefallenen Regenmengen zur Verfügung, die auf Regenradar-Messungen beruhen und deren Werte an die gemessenen Mengen der Wetterstation angeeicht wurden. Die räumliche Auflösung beträgt dabei 1 km, was die Daten für diejenigen interessant macht, die keine eigene Regenmengenmessung zur Verfügung haben.

      Define

        define <name> CDCOpenData [<name>:]latitude,longitude>
        Die Parameter latitude,longitude definieren die Lokation.
        [<name>:] ist ein optionaler sprechender Name für die Lokation.
        Werden die Parameter nicht angegeben wird die Lokation aus den globalen Attribute latitude,longitude ermittelt.
        Sind diese nicht definiert wird die Standardlokation 49.473067,6.3851 für Deutschland herangezogen.

        Beispiel: define DWDRegen CDCOpenData ...

      Set
      • set <name> update

        Startet eine Aktualisierung der Daten.

      • set <name> htmlBarAsStateFormat <on|off>

        Definiert eine HTML Bar zur Anzeige des Regen Radars im Attribut stateFormat.
        Um die Änderung zu persistieren muss sie durch klicken auf 'Save config' gesichert werden.
        Die Funktion zur Generierung kann auch für die Defintion eines weblink Device genutzt werden.
        defmod <barName> weblink htmlCode {CDCOpenData_radar2html('<nameCDCDevice>', '<readingName_rain_radar>')}

      Get
      • get <name> rainbyLatLongDate [latitude,longitude] [date]

        <latitude,longitude> Wert-Latitude,Wert-Longitude <date> Datum in der Formatierung yyyy-mm-dd

      • get <name> rainSinceMidnight [latitude,longitude]

        <latitude,longitude> Wert-Latitude,Wert-Longitude

      • get <name> rainRadar [latitude,longitude]

        <latitude,longitude> Wert-Latitude,Wert-Longitude

      Attributes

      • INTERVAL <seconds>

        Abfrage-Interval. Standard ist 300 (Sekunden). Der kleinste mögliche Wert ist 60.
        Wird das Attribut cronTime gesetzt, dann ist INTERVAL deaktiviert.

      • attr <name> verbose <0 .. 5>
        Wird verbose auf den Wert 5 gesetzt, so werden alle Log-Daten in eine eigene Log-Datei geschrieben.
        Name der Log-Datei:deviceName_debugLog.dlog
        Im INTERNAL Reading DEBUGLOG wird ein Link <DEBUG Log kann hier eingesehen werden> zur direkten Ansicht des Logs angezeigt.
        Weiterhin wird ein FileLog Device:deviceName_debugLog im selben Raum und der selben Gruppe wie das CDCOpenData Device erzeugt.
        Wird verbose auf kleiner 5 gesetzt, so wird das FileLog Device gelöscht, die Log-Datei bleibt erhalten. Wird verbose gelöscht, so werden das FileLog Device und die Log-Datei gelöscht.

      • attr <name> FhemLog3Std <0 | 1>
        Wenn gesetzt, werden die Log Informationen im Standard Fhem Format geschrieben.
        Sofern durch ein verbose 5 die Ausgabe in eine seperate Log-Datei aktiviert wurde, wird diese beendet.
        Die seperate Log-Datei und das zugehörige FileLog Device werden gelöscht.
        Wird das Attribut auf 0 gesetzt oder gelöscht und ist das Device verbose auf 5 gesetzt, so werden alle Log-Daten in eine eigene Log-Datei geschrieben.
        Name der Log-Datei:deviceName_debugLog.dlog
        Im INTERNAL Reading DEBUGLOG wird ein Link <DEBUG Log kann hier eingesehen werden> zur direkten Ansicht des Logs angezeigt.

      • attr <name> clearRadarFileLog <name of FileLog device>
        Wenn gesetzt wird das FileLog des FileLog Device bei einem Update Regen Radar geleert.
        Macht nur Sinn für FileLogs, die die Daten des Regen Radars für eine Grafik verwenden.

      • attr <name> RainRadarFileLog <name of FileLog device>
        Wenn gesetzt, wird ein FileLog Device angelegt.
        Das FileLog des FileLog Device wird bei jedem Update Regen Radar geleert.
        Macht nur Sinn für FileLogs, die die Daten des Regen Radars für eine Grafik verwenden.

      • attr <name> ownRadarFileLog <0 | 1>
        Wenn gesetzt, wird eine Log Datei: deviceName_rainLog.log direkt über das Modul erzeugt.
        Die Log Datei beinhaltet immer nur die aktuellen Werte.
        Zusätzlich wird ein FileLog Device mit dem Namen deviceName_rainLog im selben Raum und der selben Gruppe erzeugt.

      • attr <name> cronTime <* * * * *>
        CRON Regel. Wenn gesetzt, dann wird die Ausführung über diese Regel gesteuert.
        Standard ist jede Stunde.

      • attr <name> enableDWDdata <rainByDay, rainSinceMidnight, rainRadarbyLocation>

        Anwählen, welche Daten periodisch abgeholt werden. In der Standardeinstellung werden keine Daten vom DWD abgeholt.

      • attr <name> locations <[name:]latitude,longitude> [[name:]<latitude,longitude>] ...

        Durch Leerzeichen getrennte Liste von Lokationen, die zusätzlich zur Standard-Lokation abgefragt werden sollen.
        <name[:]> ist ein optionaler sprechender Name für die Lokation.

      • attr <name> nonblockingTimeOut <50|75|100|125>

        Timeout für das regelmäßige Holen der Daten. Standard ist 55 (Sekunden).

      • attr <name> numberOfDays <0..9>

        Anzahl der Tage, für die Daten *_day_rain als Reading vorgehalten werden. Standard sind 5 Readings.

      • attr <name> updateOnStart <0 | 1>

        Wenn gesetzt und der CRON Timer ist aktiv, dann werden die Daten direkt nach der Definition oder Start von Fhem geholt. Ansonsten mit Ablauf des Timers.


      Readings
      • name | loc0..n_day_rain/nn - Regenmenge der Lokation name | n
      • name | loc0..n_since_midnight - Regenmenge der Lokation name | n
      • name | loc0..n_rain_radar/nn - Regenmenge der Lokation name | n

    CM11

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: CM11

    CO20

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: CO20

    COE_Node

    [EN DE]
    Define
      define <name> COE_Node <CAN-Node ID>

      Repräsentiert einen einzelnen CanOverEthernet Node. Wird normalerweise automatisch erstellt.
      Beispiel:
        define COE_Node_coe_2 COE_Node 2
      Die eintreffenden Werte müssen noch im Attribut 'readingsConfig' einem Reading zugewiesen werden.


    Attributes

    • readingsConfigAnalog {index=reading-name}
      Ordnet analoge Werte einem Reading zu. zB 1=Durchfluss_Solar 2=T.Solar_Rücklauf
    • readingsConfigDigital {index=reading-name}
      Ordnet digitale Werte einem Reading zu. zB 1=Solarpumpe_Status 2=Wasserpumpe_Status

    CUL

    [EN DE]
      Der CUL/CUN(O) ist eine Familie von Funkempfängern, die von der Firma Busware verkauft wird. Mit der OpenSource Firmware culfw können sie verschiedene 868 MHz Funkprotokolle empfangen bzw. senden (FS20/FHT/S300/EM/HMS/MAX!). Man kann diese Geräte auch zur Reichweitenverlängerung, siehe CUL_RFR einsetzen.

      Einige Protokolle (FS20, FHT und KS300) werden von diesem Modul in das FHZ Format konvertiert, daher kann dasselbe logische Gerät verwendet werden, egal ob das Funktelegramm von einem CUL oder einem FHZ Gerät empfangen wird.
      Andere Protokolle (S300/EM) benötigen ihre eigenen Module. S300 Geräte werden vom Modul CUL_WS verarbeitet, wenn das Signal von einem CUL empfangen wurde, ähnliches gilt für EMWZ/EMGZ/EMEM: diese werden vom CUL_EM Modul verarbeitet.

      Es ist möglich mehr als ein Gerät zu verwenden, um einen besseren Empfang zu erhalten, FHEM filtert doppelte Funktelegramme aus.

      Bemerkung: Dieses Modul benötigt unter Umständen das Device::SerialPort bzw. Win32::SerialPort Modul, wenn Sie das Gerät über USB anschließen und das Betriebssystem unübliche Parameter für serielle Schnittstellen setzt.

      Define
        define <name> CUL <device> <FHTID>

        Geräte, die an USB angeschlossen sind (CUL/CUN):
          <device> gibt die serielle Schnittstelle an, mit der der CUL kommuniziert. Der Name der seriellen Schnittstelle hängt von der gewählten Distribution und USB-Treiber ab, unter Linux ist dies das Kernel Modul cdc_acm und üblicherweise wird die Schnittstelle /dev/ttyACM0 genannt. Wenn die Linux Distribution über kein Kernel Modul cdc_acm verfügt, dann kann die Schnittstelle über usbserial mit dem folgenden Befehl erzeugt werden:
            modprobe usbserial vendor=0x03eb product=0x204b
          In diesem Fall ist diese Schnittstelle dann wahrscheinlich /dev/ttyUSB0.

          Wenn der Name der Schnittstelle ein @ enthält, kann nachfolgend die verwendete Baudrate angegeben werden, z.B.: /dev/ttyACM0@38400.

          Wenn die Baudrate mit "directio" angegeben wird (z.B.: /dev/ttyACM0@directio), wird das Perl Modul Device::SerialPort nicht benötigt und FHEM öffnet die Schnittstelle mit einfachem Dateizugriff. Dies sollte dann funktionieren, wenn das Betriebssystem vernünftige Standardwerte für die serielle Schnittstelle verwendet, wie z.B. einige Linux Distributionen oder OSX.

        Geräte, die mit dem Netzwerk verbunden sind (CUN(O)):
          <device> gibt die Hostadresse:Port des Gerätes an, z.B. 192.168.0.244:2323

        Wenn das Gerät mit none bezeichnet wird, wird keine Schnittstelle geöffnet und man kann ohne angeschlossene Hardware experimentieren.
        Die FHTID ist eine 4-stellige hexadezimale Zahl und wird verwendet, wenn der CUL FHT Telegramme sendet bzw. Daten anfragt. Diese sollte als 0000 gewählt werden, wenn man FHT80b Anfragen durch den CUL vermeiden will.

      Set
      • reopen
        Öffnet die Verbindung zum Gerät neu und initialisiert es.

      • raw
        Sendet einen CUL Firmware Befehl. Siehe auch hier für nähere Erläuterungen der CUL Befehle.

      • freq / bWidth / rAmpl / sens
        Nur in der Betriebsart SlowRF.
        Bestimmt die CUL Frequenz / Bandbreite / Empfänger Amplitude / Empfindlichkeit
        Bitte mit Vorsicht verwenden, da es die verwendete Hardware zerstören kann bzw. es zu illegalen Funkzuständen kommen kann.
        Bemerkung: Die Parameter für die RFR Übermittlung werden hierdurch nicht beeinflußt.
        • freq bestimmt sowohl die Empfangs- als auch die Sendefrequenz.
          Bemerkung: Auch wenn der CC1101 zwischen den Frequenzen 315 und 915 MHz eingestellt werden kann, ist die Antennenanbindung bzw. die Antenne des CUL exakt auf eine Frequenz eingestellt. Standard ist 868.3 MHz (bzw. 433 MHz).
        • bWidth kann zwischen 58 kHz und 812 kHz variiert werden. Große Werte sind empfindlicher gegen Interferencen, aber machen es möglich, nicht genau kalbrierte Signale zu empfangen. Die Einstellung beeinflusst ebenso die Übertragung. Standardwert ist 325 kHz.
        • rAmpl ist die Verstärkung des Empfängers mit Werten zwischen 24 and 42 dB. Größere Werte erlauben den Empfang von schwachen Signalen. Standardwert ist 42.
        • sens ist die Entscheidungsgrenze zwischen "on" und "off" Zuständen und kann 4, 8, 12 oder 16 dB sein. Kleinere Werte erlauben den Empfang von undeutlicheren Signalen. Standard ist 4 dB.

      • hmPairForSec
        Nur in der Betriebsart HomeMatic.
        Versetzt den CUL für die angegebene Zeit in Sekunden in den Anlern-Modus. Jedes HM Gerät, das sich im Anlern-Modus befindet, wird an FHEM angelernt.

      • hmPairSerial
        Nur in der Betriebsart HomeMatic.
        Versucht, das angegebene Gerät anzulernen (zu "pairen"). Der Parameter ist eine 10-stellige Zeichenfolge, die normalerweise mit Buchstaben beginnt und mit Ziffern endet; diese sind auf der Rückseite der Geräte aufgedruckt. Wenn das Gerät ein Empfänger ist, ist es nicht notwendig, das angegebene Gerät in den Anlern-Modus zu versetzen.

      • led
        Schaltet die LED des CUL: aus (00), an (01) oder blinkend (02).

      • ITClock
        Setzt die IT clock fü Intertechno V1 Protokoll. Default 250.

      Get
      • version
        gibt die Version der CUL Firmware zurück

      • uptime
        gibt die Betriebszeit des CULs zurück (Zeit seit dem letzten Reset des CULs)

      • raw
        Sendet einen CUL Firmware Befehl und wartet auf eine Rückgabe des CULs. Siehe auch README der Firmware für nähere Erläuterungen zu den CUL Befehlen.

      • fhtbuf
        Der CUL hat einen Puffer für Nachrichten für FHT. Wenn der Puffer voll ist, werden neu empfangene Telegramme ignoriert und eine "EOB" Meldung wird in die FHEM Logdatei geschrieben. fhtbuf gibt den freien Speicher dieses Puffers (in hex) zurück, ein leerer Puffer im CUL V2 hat 74 Byte, im CUL V3/CUN(O) hat 200 Byte. Eine Telegramm benötigt 3 + 2x(Anzahl der FHT Befehle) Byte, dies ist ein Grund, warum man mehrere FHT Befehle mit einem set senden sollte. Ein weiterer Grund ist, dass diese FHT Befehle in einem "Paket" zum FHT Gerät gesendet werden.

      • ccconf
        Liest einige CUL Register des CC1101 (Sende- und Empfängerchips) aus (Frequenz, Bandbreite, etc.) und stellt diese in lesbarer Form dar.

      • cmds
        In abhägigkeit der installierten Firmware hat der CUL/CUN(O) unterschiedliche Befehlssätze. Nähere Informationen über die Befehle bzw. deren Interpretation siehe README Datei der verwendeten CUL Firmware. Siehe auch Anmerkungen beim raw Befehl.

      • credit10ms
        Der Funkraum darf für eine Dauer von credit10ms*10 ms belegt werden, bevor die gesetzliche 1% Grenze erreicht ist und eine LOVF Meldung ausgegeben wird.

      Attribute
      • addvaltrigger
        Generiert Trigger für zusätzliche Werte. Momentan sind dies RSSI und RAWMSG für die CUL Familie und RAWMSG für FHZ.

      • connectCommand
        culfw Befehl, was nach dem Verbindungsaufbau mit dem USB-Gerät, nach Senden der zum Initialisieren der konfigurierten rfmode benötigten Befehle gesendet wird.
      • do_not_notify
      • dummy
      • hmId
        Setzt die HomeMatic ID des Gerätes. Wenn dieses Attribut fehlt, wird die ID zu F1<FHTID> gesetzt. Bemerkung 1: Nach dem Setzen bzw. Verändern dieses Attributes müssen alle HomeMatic Geräte neu angelernt werden. Bemerkung 2: Der Wert muss eine 6-stellige Hexadezimalzahl sein, 000000 ist ungültig. FHEM überprüft nicht, ob die ID korrekt ist, im Zweifelsfall funktioniert die Kommunikation nicht.

      • hmProtocolEvents
        Generiert Ereignisse für HomeMatic Telegramme. Diese werden normalerweise für die Fehlersuche verwendet, z.B. durch Aktivieren von inform timer in einer telnet Sitzung bzw. im Event Monitor Fenster im FHEMWEB Frontend.
        Beispiel:
          2012-05-17 09:44:22.515 CUL CULHM RCV L:0B N:81 CMD:A258 SRC:...... DST:...... 0000 (TYPE=88,WAKEMEUP,BIDI,RPTEN)

      • longids
        Durch Kommata getrennte Liste von Device-Typen für Empfang von langen IDs mit den CUL. Diese zusätzliche ID erlaubt es Wettersensoren, welche auf dem gleichen Kanal senden zu unterscheiden. Hierzu wird eine zufällig generierte ID hinzugefügt. Wenn Sie longids verwenden, dann wird in den meisten Fällen nach einem Batteriewechsel ein neuer Sensor angelegt. Standardmäßig werden keine langen IDs verwendet.
        Folgende Module verwenden diese Funktionalität: 14_Hideki, 41_OREGON, 14_CUL_TCM97001, 14_SD_WS07.
        Beispiele:
          # Keine langen IDs verwenden (Default Einstellung):
          attr cul longids 0
          # Immer lange IDs verwenden:
          attr cul longids 1
          # Verwende lange IDs für SD_WS07 Devices.
          # Device Namen sehen z.B. so aus: SD_WS07_TH_3 for channel 3.
          attr cul longids SD_WS07

      • model (CUL,CUN)

      • rfmode
        Konfiguriert den RF Transceiver des CULs (CC1101). Verfügbare Argumente sind:
        • SlowRF
          Für die Kommunikation mit FS20/FHT/HMS/EM1010/S300/Hoermann Geräten @1 kHz Datenrate (Standardeinstellung).
        • HomeMatic
          Für die Kommunikation mit HomeMatic Geräten @10 kHz Datenrate.
        • MAX
          Für die Kommunikation mit MAX! Geräten @10 kHz Datenrate.
        • WMBus_S
        • WMBus_T
        • WMBus_C
          Für die Kommunikation mit Wireless M-Bus Geräten wie Wasser-, Gas- oder Elektrozählern. Wireless M-Bus verwendet drei unterschiedliche Kommunikationsarten, S-Mode, T-Mode und C-Mode. In diesem Modus ist der Empfang von anderen Protokollen wie SlowRF oder HomeMatic nicht möglich.

      • noRawReadLog
        In manchen Fällen ist der Empfang von verbose 5 / raw Logmeldungen störend, mit diesem Attribut kann man diese Ausgabe deaktivieren (Forum #122160)

      • sendpool
        Wenn mehr als ein CUL verwendet wird, um einen größeren Bereich abzudecken, können diese sich gegenseitig beeinflussen. Dieses Phänomen wird auch Palm-Beach-Resort Effekt genannt. Wenn man diese zu einen gemeinsamen Sende"pool" zusammenschließt, wird das Senden der einzelnen Telegramme seriell (d.h. hintereinander) durchgeführt. Wenn z.B. drei CUN's zur Verfügung stehen, werden folgende Attribute gesetzt:
        attr CUN1 sendpool CUN1,CUN2,CUN3
        attr CUN2 sendpool CUN1,CUN2,CUN3
        attr CUN3 sendpool CUN1,CUN2,CUN3


      • showtime
      • readingFnAttributes

    CUL_EM

    [EN DE]
      Das Modul CUL_EM wertet von einem CUL empfange Botschaften des Typs EM aus, dies sind aktuell Botschaften von EMEM, EMWZ bzw. EMGZ Geräten.

      Define
        define <name> CUL_EM <code> [corr1 corr2 CostPerUnit BasicFeePerMonth]

        <code> ist der Code, der am EM Gerät eingestellt wird. Gütige Werte sind 1 bis 12. 1-4 gilt für EMWZ, 5-8 für EMEM und 9-12 für EMGZ Geräte.

        corr1 ist der Kalibrierfaktor für den Momentanverbrauch, corr2 für den Gesamtverbrauch.
        • für EMWZ Geräte wird die Umdrehungsgeschwindigkeit (U/kW) des verwendeten Stromzählers (z.B. 150) für corr1 und 12 mal diesen Wert für corr2 verwendet
        • für EMEM devices ist corr1 mit 0.01 und corr2 mit 0.001 anzugeben

        CostPerUnit und BasicFeePerMonth werden dazu verwendet, die tägliche bzw. monatliche Kosten zu berechnen. Die Kosten werden in der Logdatei einmal täglich (ohne Fixkosten) bzw. monatlich (mit Fixkosten) generiert und angezeigt. Die Definition sollte in etwa so aussehen:
          define emwz CUL_EM 1 75 900 0.15 12.50
        und in der Logdatei sollten diese Zeilen erscheinen:
          CUM_DAY: 6.849 CUM: 60123.4 COST: 1.02
          CUM_MONTH: 212.319 CUM: 60123.4 COST: 44.34
        Tipp: Das EMWZ Gerät kann so konfiguriert werden, dass es in der CUM Spalte des STATE Wertes den aktuellen Wert des Stromzählers anzeigt. Hierfür muss der aktuell am Stromzähler abgelesene Wert mit corr1 (U/kW) multipliziert werden und der CUM Rohwert aus der aktuellen fhem Messung ('reading') davon abgezogen werden. Dann muss dieser Wert als Basiswert des EMWZ Gerätes (im Beispiel emwz) gesetzt werden.

      Set
        N/A

      Get
        N/A

      Attributes
      • ignore

      • do_not_notify

      • showtime

      • model (EMEM,EMWZ,EMGZ)

      • IODev

      • eventMap

      • readingFnAttributes

      • maxPeak <number>
        Gibt den maximal möglichen Spitzenwert für das EM-Meter an ("TOP:"-Wert in Logdatei). Spitzenwerte größer als dieser Wert gelten als EM-Lesefehler und werden ignoriert. Wenn es z.B. nicht möglich ist mehr zu 40kW Leistung zu beziehen setzt man maxPeak auf 40 um das Auslesen des Stromzählers robuster zu machen.

      • CounterOffset
        Gibt den Unterschied zwischen dem tatsächlichen Zählerstand und dem vom EMGZ gemeldeten Wert an.
        CounterOffset = tatsächlicher Zählerstand - Reading "total"
        Beispiel:
          attr Gaszaehler CounterOffset 15427.434

    CUL_FHTTK

    [EN DE]
      Dieses Modul hantiert die empfangen Daten von FHT80 TF "Fenster-Tür-Kontakt" Sensoren, welche normalerweise nur mit den FHT80B Geräten kommunizieren. Mit diesen Modul können FHT80 TFs in eingeschränkter Weise ähnlich wie HMS TFK Sensoren benutzt werden (weitere Informationen sind unter Wiki zu lesen). Der name des FHEM Moduls wurde so gewählt, weil a) nur der CUL die Daten empfangen kann und b) "TF" normalerweise Temperatur- und Feuchtigkeitssensoren suggeriert. (Keine Ahnung, warum ELV diesen Sensor nicht TFK genannt hat, wie die Sensoren von FS20 und HMS).

      CUL device muss vorhr definiert sein.

      Mit dem letzten Build auf SVN oder mit der nächsten offiziellen Version 1.62 oder höher, ist es möglich, FHT80 TF Daten zu senden. Möglich mit einem CUL oder ähnlichen Geräten. So können bis zu vier Fenstersensoren mit einem Gerät simuliert werden (siehe FHEM Wiki). Es muss lediglich das Attribut model mit dem Wert "virtual" hinzugefügt oder geändert werden. Wichtig: Der Devicecode sollte nicht der FHTID entsprechen.

      D
        define <name> CUL_FHTTK <devicecode>

        <devicecode> Ist eine sechstellige Hexadezimalzahl, welche zum Zeitpunkt der Produktion des FHT80 TF gegeben wurde. Somit ist diese auch nicht mehr änderbar und bleibt auch nach einem Batteriewechsel erhalten.
        Examples:
          define TK_TEST CUL_FHTTK 965AB0

      Set
        Nur vorhanden, wenn das Attribut model mit virtual definiert wurde.

        set <name> <value>

        wobei value folgendes sein kann:
        • Closed
          setzt den Fensterstatus zu Closed

        • Open
          setzt den Fensterstatus zu Open

        • Pair
          startet das Anlernen an das FHT80B (FHT80B muss sich im Sync mode befinden) - danach wird der state auf "Closed" gesetzt

        • ReSync
          neu synchronisieren des virtuellen Sensor mit dem FHT80b Module. Damit wird ein virtueller Batteriewechsel simuliert und der angelernte Sensor wieder aufsynchronisiert. (aktuell nur mit Prototyp CUL FW verfügbar Forum 55774)


      Spezielles zum "ReSync" von vorhanden FHT80TFs nach einem CUL Firmware Reset:
      Nach einem Reset bzw. Neustart eines CUL Devices ist die Verbindung zwischen dem FHT80B und den virtuellen FHT80TFs unterbrochen. Dies kommt einem Batteriewechsel gleich. Die Kontakte sind weiterhin am FHT80B angelernt. Ein neues Pairen entfällt. Wenn mehrere vitruelle Kontakte verwendet werden, empfiehlt es sich diese in großen Abständen wieder zu synchronisieren!
      Mithilfe des Aufrufes der Funktion CUL_FHTTK_ReSyncAll() werden alle virtuellen Fensterkontakte nacheinander mit den FHT80B wieder synchronisiert. Der Abstand beträgt zwischen den einzelnen Sensoren 1 Stunde. Dies wird durch die 1% Regeln bestimmt, da pro Kontakt 480 credits innerhalb von 64 Sekunden verbraucht werden!

      Get
        N/A

      Attributes
      • do_not_notify

      • verbose

      • model
        Mögliche Werte sind: FHT80TF, FHT80TF-2, virtual (zum simulieren eines Fensterkontaktes)

      • showtime

      • IODev

      • ignore

      • eventMap

      • readingFnAttributes

    CUL_HM

    [EN DE]
      Unterstützung für eQ-3 HomeMatic Geräte via CUL oder HMLAN.

      Define
        define <name> CUL_HM <6-digit-hex-code|8-digit-hex-code>

        Eine korrekte Gerätedefinition ist der Schlüssel zur einfachen Handhabung der HM-Umgebung.
        Hintergrund zur Definition:
        HM-Geräte haben eine 3 Byte (6 stelliger HEX-Wert) lange HMid - diese ist Grundlage der Adressierung. Jedes Gerät besteht aus einem oder mehreren Kanälen. Die HMid für einen Kanal ist die HMid des Gerätes plus die Kanalnummer (1 Byte, 2 Stellen) in hexadezimaler Notation. Kanäle sollten für alle mehrkanaligen Geräte definiert werden. Einträge für Kanäle können nicht angelegt werden wenn das zugehörige Gerät nicht existiert.
        Hinweis: FHEM belegt das Gerät automatisch mit Kanal 1 falls dieser nicht explizit angegeben wird. Daher ist bei einkanaligen Geräten keine Definition nötig.
        Hinweis: Wird ein Gerät gelöscht werden auch die zugehörigen Kanäle entfernt.
        Beispiel einer vollständigen Definition eines Gerätes mit 2 Kanälen:
          define livingRoomSwitch CUL_HM 123456
          define LivingroomMainLight CUL_HM 12345601
          define LivingroomBackLight CUL_HM 12345602

        livingRoomSwitch bezeichnet das zur Kommunikation verwendete Gerät. Dieses wird vor den Kanälen definiert um entsprechende Verweise einstellen zu können.
        LivingroomMainLight hat Kanal 01 und behandelt den Lichtstatus, Kanal-Peers sowie zugehörige Kanalregister. Falls nicht definiert wird Kanal 01 durch die Geräteinstanz abgedeckt.
        LivingRoomBackLight ist der zweite "Kanal", Kanal 02. Seine Definition ist verpflichtend um die Funktion ausführen zu können.

        Sonderfall Sender: HM behandelt jeden Knopf einer Fernbedienung, Drucktaster und ähnliches als Kanal . Es ist möglich (nicht notwendig) einen Kanal pro Knopf zu definieren. Wenn alle Kanäle definiert sind ist der Zugriff auf Pairing-Informationen sowie auf Kanalregister möglich. Weiterhin werden Verknüpfungen durch Namen besser lesbar.

        define kann auch durch das autocreate Modul aufgerufen werden, zusammen mit dem notwendigen subType Attribut. Normalerweise erstellt man hmPairForSec und drückt dann den zugehörigen Knopf am Gerät um die Verknüpfung herzustellen oder man verwendet hmPairSerial falls das Gerät ein Empfänger und die Seriennummer bekannt ist. Autocreate wird dann ein FHEM-Gerät mit allen notwendigen Attributen anlegen. Ohne Pairing wird das Gerät keine Befehle von FHEM akzeptieren. Selbst wenn das Pairing scheitert legt FHEM möglicherweise das Gerät an. Erfolgreiches Pairen wird durch den Eintrag CommandAccepted in den Details zum CUL_HM Gerät angezeigt.

        Falls autocreate nicht verwendet werden kann muss folgendes spezifiziert werden:
        • Der <6-stellige-Hex-Code>oder HMid+ch <8-stelliger-Hex-Code>
          Das ist eine einzigartige, festgelegte Geräteadresse die nicht geändert werden kann (nein, man kann sie nicht willkürlich auswählen wie z.B. bei FS20 Geräten). Man kann sie feststellen indem man das FHEM-Log durchsucht.
        • Das subType Attribut
          Dieses lautet: switch dimmer blindActuator remote sensor swi pushButton threeStateSensor motionDetector keyMatic winMatic smokeDetector
        • Das model Attribut
          ist entsprechend der HM Nomenklatur zu vergeben
        Ohne diese Angaben kann FHEM nicht korrekt mit dem Gerät arbeiten.

        Hinweise
        • Falls das Interface ein Gerät vom Typ CUL ist muss rfmode des zugehörigen CUL/CUN Gerätes auf HomeMatic gesetzt werden. Achtung: Dieser Modus ist nur für BidCos/Homematic. Nachrichten von FS20/HMS/EM/S300 werden durch diese Gerät nicht empfangen. Bereits definierte FS20/HMS Geräte müssen anderen Eingängen zugeordnet werden (CUL/FHZ/etc).
        • Nachrichten eines Geräts werden nur richtig interpretiert wenn der Gerätetyp bekannt ist. FHEM erhält den Gerätetyp aus einer"pairing request" Nachricht, selbst wenn es darauf keine Antwort erhält (siehe hmPairSerial und hmPairForSec um Parinig zu ermöglichen).
        • Die sogenannte "AES-Verschlüsselung" ist eigentlich eine Signaturanforderung: Ist sie aktiviert wird ein Aktor den erhaltenen Befehl nur ausführen falls er die korrekte Antwort auf eine zuvor durch den Aktor gestellte Anfrage erhält. Das bedeutet:
          • Die Reaktion auf Befehle ist merklich langsamer, da 3 Nachrichten anstatt einer übertragen werden bevor der Befehl vom Aktor ausgeführt wird.
          • Jeder Befehl sowie seine Bestätigung durch das Gerät wird in Klartext übertragen, ein externer Beobachter kennt somit den Status jedes Geräts.
          • Die eingebaute Firmware ist fehlerhaft: Ein "toggle" Befehl wir ausgeführt bevor die entsprechende Antwort auf die Signaturanforderung empfangen wurde, zumindest bei einigen Schaltern (HM-LC-SW1-PL und HM-LC-SW2-PB-FM).
          • Der HMLAN Konfigurator beantwortet Signaturanforderungen selbstständig, ist dabei die 3-Byte-Adresse einer anderen CCU eingestellt welche noch immer das Standardpasswort hat, kann dieser Signaturanfragen korrekt beantworten.
          • AES-Verschlüsselung wird durch HMLAN und CUL unterstützt. Bei Einsatz eines CUL ist das Perl-Modul Crypt::Rijndael notwendig. Aufgrund dieser Einschränkungen ist der Einsatz der Homematic-Verschlüsselung nicht zu empfehlen!

      Set
        Hinweis: Geräte die normalerweise nur senden (Fernbedienung/Sensor/etc.) müssen in den Pairing/Lern-Modus gebracht werden um die folgenden Befehle zu empfangen.

        Allgemeine Befehle (verfügbar für die meisten HM-Geräte):
        • clear <[rssi|readings|register|msgEvents|attack|all]>
          Eine Reihe von Variablen kann entfernt werden.
            readings: Alle Messwerte werden gelöscht, neue Werte werden normal hinzugefügt. Kann benutzt werden um alte Daten zu entfernen
            register: Alle in FHEM aufgezeichneten Registerwerte werden entfernt. Dies hat KEINEN Einfluss auf Werte im Gerät.
            msgEvents: Alle Anchrichtenzähler werden gelöscht. Ebenso wird der Befehlsspeicher zurückgesetzt.
            rssi: gesammelte RSSI-Werte werden gelöscht.
            attack: Einträge bezüglich einer Attack werden gelöscht.
            all: alles oben genannte.
        • getConfig
          Liest die Hauptkonfiguration eines HM_Gerätes aus. Angewendet auf einen Kanal erhält man Pairing-Information, List0, List1 und List3 des ersten internen Peers. Außerdem erhält man die Liste der Peers für den gegebenen Kanal. Wenn auf ein Gerät angewendet so bekommt man mit diesem Befehl die vorherigen Informationen für alle zugeordneten Kanäle. Ausgeschlossen davon sind Konfigurationen zusätzlicher Peers.
          Der Befehl ist eine Abkürzung für eine Reihe anderer Befehle.
        • getRegRaw [List0|List1|List2|List3|List4|List5|List6|List7]<peerChannel>
          Auslesen der Rohdaten des Registersatzes. Eine Beschreibung der Register sprengt den Rahmen dieses Dokuments.
          Die Register sind in sog. Listen strukturiert welche einen Satz Register enthalten.
          List0: Geräteeinstellungen z.B: Einstellungen für CUL-Pairing Temperaturlimit eines Dimmers.
          List1: Kanaleinstellungen z.B. benötigte Zeit um Rollo hoch und runter zu fahren.
          List3: "link" Einstellungen - d.h. Einstellungen für Peer-Kanal. Das ist eine große Datenmenge! Steuert Aktionen bei Empfang eines Triggers vom Peer.
          List4: Einstellungen für den Kanal (Taster) einer Fernbedienung.

          <PeerChannel> verknüpfte HMid+ch, z.B. 4 byte (8 stellige) Zahl wie '12345601'. Ist verpflichtend für List3 und List4 und kann ausgelassen werden für List0 und 1.
          'all' kann verwendet werden um Daten von jedem mit einem Kanal verknüpften Link zu bekommen.
          'selfxx' wird verwendet um interne Kanäle zu adressieren (verbunden mit den eingebauten Schaltern falls vorhanden). xx ist die Kanalnummer in dezimaler Notation.
          Hinweis 1: Ausführung ist abhängig vom Entity. Wenn List1 für ein Gerät statt einem Kanal abgefragt wird gibt der Befehl List1 für alle zugehörigen Kanäle aus. List3 mit 'peerChannel = all' gibt alle Verbindungen für alle Kanäle eines Gerätes zurück.
          Hinweis 2: für 'Sender' siehe auch remote
          Hinweis 3: Das Abrufen von Informationen kann dauern - besonders für Geräte mit vielen Kanälen und Verknüpfungen. Es kann nötig sein das Webinterface manuell neu zu laden um die Ergebnisse angezeigt zu bekommen.
          Hinweis 4: Direkte Schalter eines HM-Geräts sind standardmäßig ausgeblendet. Dennoch sind sie genauso als Verknüpfungen implemetiert. Um Zugriff auf 'internal links' zu bekommen ist es notwendig folgendes zu erstellen:
          'set <name> regSet intKeyVisib visib'
          oder
          'set <name> regBulk RegL_0. 2:81'
          Zurücksetzen lässt es sich indem '81' mit '01' ersetzt wird.
          example:
            set mydimmer getRegRaw List1
            set mydimmer getRegRaw List3 all
        • getSerial
          Auslesen der Seriennummer eines geräts und speichern in Attribut serialNr.
        • inhibit [on|off]
          Blockieren/Zulassen aller Kanaländerungen eines Aktors, d.h. Zustand des Aktors ist eingefroren bis 'inhibit' wieder deaktiviert wird. 'Inhibit' kann für jeden Aktorkanal ausgeführt werden aber natürlich nicht für Sensoren - würde auch keinen Sinn machen.
          Damit ist es praktischerweise möglich Nachrichten ebenso wie verknüpfte Kanalaktionen temporär zu unterdrücken ohne sie löschen zu müssen.
          Beispiele:
            # Ausführung blockieren
            set keymatic inhibit on

        • pair
          Verbinden eines Geräts bekannter Seriennummer (z.b. nach einem Reset) mit einer FHEM-Zentrale. Diese Zentrale wird normalerweise durch CUL/CUNO, HMLAN,... hergestellt. Wenn verbunden melden Geräte ihren Status and FHEM. Wenn nicht verbunden wird das Gerät auf bestimmte Anfragen nicht reagieren und auch bestimmte Statusinformationen nicht melden. Pairing geschieht auf Geräteebene. Kanäle können nicht unabhängig von einem Gerät mit der Zentrale verbunden werden. Siehe auch getPair und unpair.
          Nicht das Verbinden (mit einer Zentrale) mit verknüpfen (Kanal zu Kanal) oder peerChan verwechseln.
        • peerBulk <peerch1,peerch2,...> [set|unset]
          peerBulk fügt Peer-Kanäle zu einem Kanal hinzu. Alle Peers einer Liste werden dabei hinzugefügt.
          Peering setzt die Einstellungen einer Verknüpfung auf Standardwerte. Da Peers nicht in Gruppen hinzugefügt werden werden sie durch HM standardmäßig als'single' für dieses Gerät angelegt.
          Eine ausgeklügeltere Funktion wird gegeben durch peerChan.
          peerBulk löscht keine vorhandenen Peers sondern bearbeitet nur die Peerliste. Andere bereits angelegt Peers werden nicht verändert.
          peerBulk kann verwendet werden um Peers zu löschen indem die unset Option mit Standardeinstellungen aufgerufen wird.
          Verwendungszweck dieses Befehls ist hauptsächlich das Wiederherstellen von Daten eines Geräts. Empfehlenswert ist das anschließende Wiederherstellen der Registereinstellung mit regBulk.
          Beispiel:
            set myChannel peerBulk 12345601,
            set myChannel peerBulk self01,self02,FB_Btn_04,FB_Btn_03,
            set myChannel peerBulk 12345601 unset # entferne Peer 123456 Kanal 01
        • regBulk <reg List>.<peer> <addr1:data1> <addr2:data2>...
          Dieser Befehl ersetzt das bisherige regRaw. Er erlaubt Register mit Rohdaten zu beschreiben. Hauptzweck ist das komplette Wiederherstellen eines zuvor gesicherten Registers.
          Werte können mit getConfig ausgelesen werden. Die zurückgegebenen Werte können direkt für diesen Befehl verwendet werden.
          <reg List> bezeichnet die Liste in die geschrieben werden soll. Mögliches Format '00', 'RegL_00', '01'...
          <peer> ist eine optionale Angabe falls die Liste ein Peer benötigt. Der Peer kann als Kanalname oder als 4-Byte (8 chars) HM-Kanal ID angegeben werden.
          <addr1:data1> ist die Liste der Register im Hex-Format.
          Beispiel:
            set myChannel regBulk RegL_00. 02:01 0A:17 0B:43 0C:BF 15:FF 00:00
            RegL_03.FB_Btn_07 01:00 02:00 03:00 04:32 05:64 06:00 07:FF 08:00 09:FF 0A:01 0B:44 0C:54 0D:93 0E:00 0F:00 11:C8 12:00 13:00 14:00 15:00 16:00 17:00 18:00 19:00 1A:00 1B:00 1C:00 1D:FF 1E:93 1F:00 81:00 82:00 83:00 84:32 85:64 86:00 87:FF 88:00 89:FF 8A:21 8B:44 8C:54 8D:93 8E:00 8F:00 91:C8 92:00 93:00 94:00 95:00 96:00 97:00 98:00 99:00 9A:00 9B:00 9C:00 9D:05 9E:93 9F:00 00:00
            set myblind regBulk 01 0B:10
            set myblind regBulk 01 0C:00
          myblind setzt die maximale Zeit für das Hochfahren der Rollos auf 25,6 Sekunden
        • regSet [prep|exec] <regName> <value> <peerChannel>
          Für einige Hauptregister gibt es eine lesbarere Version die Registernamen <regName> und Wandlung der Werte enthält. Nur ein Teil der Register wird davon unterstützt.
          Der optionale Parameter [prep|exec] erlaubt das Packen von Nachrichten und verbessert damit deutlich die Datenübertragung. Benutzung durch senden der Befehle mit Parameter "prep". Daten werden dann für das Senden gesammelt. Der letzte Befehl muss den Parameter "exec" habe um die Information zu übertragen.
          <value> enthält die Daten in menschenlesbarer Form die in das Register geschrieben werden.
          <peerChannel> wird benötigt falls das Register 'peerChan' basiert definiert wird. Kann ansonsten auf '0' gesetzt werden. Siehe getRegRaw für komplette Definition.
          Unterstützte Register eines Geräts können wie folgt bestimmt werden:
            set regSet ? 0 0
          Eine verkürzte Beschreibung der Register wird zurückgegeben mit:
            set regSet <regname> ? 0
        • reset
          Rücksetzen des Geräts auf Werkseinstellungen. Muss danach erneut verbunden werden um es mit FHEM zu nutzen.
        • sign [on|off]
          Ein- oder ausschalten der Signierung (auch "AES-Verschlüsselung" genannt, siehe note). Achtung: Wird das Gerät über einen CUL eingebunden, ist schalten (oder deaktivieren der Signierung) nur möglich, wenn das Perl-Modul Crypt::Rijndael installiert ist.
        • statusRequest
          Aktualisieren des Gerätestatus. Für mehrkanalige Geräte sollte dies kanalbasiert erfolgen.
        • unpair
          Aufheben des "Pairings", z.B. um das verbinden mit einem anderen Master zu ermöglichen. Siehe pair für eine Beschreibung.
        • virtual <Anzahl an Knöpfen>
          Konfiguriert eine vorhandene Schaltung als virtuelle Fernbedienung. Die Anzahl der anlegbaren Knöpfe ist 1 - 255. Wird der Befehl für die selbe Instanz erneut aufgerufen werden Knöpfe hinzugefügt.
          Beispiel für die Anwendung:
            define vRemote CUL_HM 100000 # die gewählte HMid darf nicht in Benutzung sein
            set vRemote virtual 20 # definiere eine Fernbedienung mit 20 Knöpfen
            set vRemote_Btn4 peerChan 0 <actorchannel> # verknüpft Knopf 4 und 5 mit dem gewählten Kanal
            set vRemote_Btn4 press
            set vRemote_Btn5 press long
          siehe auch press
        • deviceRename <newName>
          benennt das Device und alle seine Kanäle um.
        • fwUpdate [onlyEnterBootLoader] <filename> [<waitTime>]
          update Fw des Device. Der User muss das passende FW file bereitstellen. waitTime ist optional. Es ist die Wartezeit, um das Device manuell in den FW-update-mode zu versetzen.
          "onlyEnterBootLoader" schickt das Device in den Booloader so dass es vom eq3 Firmware Update Tool geflashed werden kann. Hauptsächlich für Unterputz-Aktoren in Verbindung mit FHEM Installationen die ausschliesslich HM-LANs nutzen interessant.
        • assignIO <IOname> <set|unset>
          IO-Gerät zur Liste der IO's hinzufügen oder aus dieser Löschen. Ändert das Attribut IOList entsprechend.

        subType abhängige Befehle:

        • switch
          • on - setzt Wert auf 100%
          • off - setzt Wert auf 0%
          • on-for-timer <sec> - Schaltet das Gerät für die gewählte Zeit in Sekunden [0-85825945] an.
            Hinweis: off-for-timer wie bei FS20 wird nicht unterstützt. Kann aber über Kanalregister programmiert werden.
          • on-till <time> - einschalten bis zum angegebenen Zeitpunkt.
              set <name> on-till 20:32:10
            Das momentane Maximum für eine Endzeit liegt bei 24 Stunden.
          • pressL <peer> [<repCount>] [<repDelay>]
            simuliert einen Tastendruck eines lokalen oder anderen peers.
            <peer> peer auf den der Tastendruck bezogen wird.
            <repCount> automatische Wiederholungen des long press.
            <repDelay> timer zwischen den Wiederholungen.
            Beispiel: set actor pressL FB_Btn01 # trigger long peer FB button 01
            set actor pressL FB_chn-8 # trigger long peer FB button 08
            set actor pressL self01 # trigger short des internen peers 01
            set actor pressL fhem02 # trigger short des FHEM channel 2
          • pressS <peer>
            simuliert einen kurzen Tastendruck entsprechend peerL
          • eventL <peer> <condition> [<repCount>] [<repDelay>]
            simuliert einen Event mit zusätzlichem Wert.
            <peer> peer auf den der Tastendruck bezogen wird.
            <codition>wert des Events, 0..255
            Beispiel: set actor eventL md 30 # trigger vom Bewegungsmelder mit Wert 30
          • eventS <peer> <condition>
            simuliert einen kurzen Event eines Peers des actors. Typisch senden Sensoren nur short Events.

        • dimmer, blindActuator
          Dimmer können virtuelle Kanäle unterstützen. Diese werden automatisch angelegt falls vorhanden. Normalerweise gibt es 2 virtuelle Kanäle zusätzlich zum primären Kanal. Virtuelle Dimmerkanäle sind standardmäßig deaktiviert, können aber parallel zum ersten Kanal benutzt werden um das Licht zu steuern.
          Die virtuellen Kanäle haben Standardnamen SW<channel>_V<nr> z.B. Dimmer_SW1_V1 and Dimmer_SW1_V2.
          Virtuelle Dimmerkanäle unterscheiden sich komplett von virtuellen Knöpfen und Aktoren in FHEM, sind aber Teil des HM-Geräts. Dokumentation und Möglichkeiten würde hier aber zu weit führen.
          • 0 - 100 [on-time] [ramp-time]
            Setzt den Aktor auf den gegeben Wert (In Prozent) mit einer Auflösung von 0.5.
            Bei Dimmern ist optional die Angabe von "on-time" und "ramp-time" möglich, beide in Sekunden mit 0.1s Abstufung.
            "On-time" verhält sich analog dem "on-for-timer".
            "Ramp-time" beträgt standardmäßig 2.5s, 0 bedeutet umgehend.
          • on
          • off
          • press <[short|long]><[on|off]>
          • toggle
          • toggleDir - toggelt die fahrtrichtung des Rollo-Aktors. Es wird umgeschaltet zwischen auf/stop/ab/stop
          • on-for-timer <sec> - Nur Dimmer!
          • on-till <time> - Nur Dimmer!
          • stop - Stopt Bewegung (Rollo) oder Dimmerrampe
          • old - schaltet auf den vorigen Wert zurück. Nur dimmer.
          • pct <level> [<ontime>] [<ramptime>] - setzt Aktor auf gewünschten absolut Wert.
            Optional können für Dimmer "ontime" und "ramptime" angegeben werden.
            "Ontime" kann dabei in Sekunden angegeben werden. Kann auch als Endzeit angegeben werden im Format hh:mm:ss
          • up [changeValue] [<ontime>] [<ramptime>] Einen Schritt hochdimmen.
          • down [changeValue] [<ontime>] [<ramptime>] Einen Schritt runterdimmen.
            "changeValue" ist optional und gibt den zu ändernden Wert in Prozent an. Mögliche Abstufung dabei ist 0.5%, Standard ist 10%.
            "ontime" ist optional und gibt an wielange der Wert gehalten werden soll. '0' bedeutet endlos und ist Standard.
            "ramptime" ist optional und definiert die Zeit bis eine änderung den neuen Wert erreicht. Hat nur für Dimmer Bedeutung.

        • remotes, pushButton
          Diese Geräteart reagiert nicht auf Anfragen, außer sie befinden sich im Lernmodus. FHEM reagiert darauf indem alle Anfragen gesammelt werden bis der Lernmodus detektiert wird. Manuelles Eingreifen durch den Benutzer ist dazu nötig. Ob Befehle auf Ausführung warten kann auf Geräteebene mit dem Parameter 'protCmdPend' abgefragt werden.
          • trgEventS [all|<peer>] <condition>
            Initiiert ein eventS fuer die peer entity. Wenn all ausgewählt ist wird das Kommando bei jedem der Peers ausgeführt. Siehe auch eventS
            <condition>: Ist der Wert welcher mit dem Event versendet wird. Bei einem Bewegungsmelder ist das bspw. die Helligkeit.
          • trgEventL [all|<peer>] <condition>
            Initiiert ein eventL fuer die peer entity. Wenn all ausgewählt ist wird das Kommando bei jedem der Peers ausgeführt. Siehe auch eventL
            <condition>: is the condition being transmitted with the event. E.g. the brightness in case of a motion detector.
          • trgPressS [all|<peer>]
            Initiiert ein pressS fuer die peer entity. Wenn all ausgewählt ist wird das Kommando bei jedem der Peers ausgeführt. Siehe auch pressS
          • trgPressL [all|<peer>]
            Initiiert ein pressL fuer die peer entity. Wenn all ausgewählt ist wird das Kommando bei jedem der Peers ausgeführt. Siehe auch pressL
          • peerSmart [<peer>]
            Das Kommando ist aehnlich peerChan mit reduzierten Optionen.
            peerSmart peert immer single mode (siehe peerChan). Die Funktionalitaet über das setzen der Register erstellt (kein grosser Unterschied zu peerChan).
            Smartes Registersetzen unterstützt bspw hmTemplate.
          • peerChan <btn_no> <actChan> [single|dual|reverse] [set|unset] [both|actor|remote]
            "peerChan" richtet eine Verbindung zwischen Sender-Kanal und Aktor-Kanal ein, bei HM "link" genannt. "Peering" darf dabei nicht mit "pairing" verwechselt werden.
            Pairing bezeichnet das Zuordnen eines Geräts zu einer Zentrale.
            Peering bezeichnet das faktische Verbinden von Kanälen.
            Peering erlaubt die direkte Interaktion zwischen Sender und Aktor ohne den Einsatz einer CCU
            Peering eines Senderkanals veranlaßt den Sender nach dem Senden eines Triggers auf die Bestätigung eines - jeden - Peers zu warten. Positives Feedback (z.B. grüne LED) gibt es dabei nur wenn alle Peers den Befehl bestätigt haben.
            Peering eines Aktorkanals richtet dabei einen Satz von Parametern ein welche die auszuführenden Aktionen definieren wenn ein Trigger dieses Peers empfangen wird. Dies bedeutet:
            - nur Trigger von Peers werden ausgeführt
            - die auszuführende Aktion muss für den zugehörigen Trigger eines Peers definiert werden
            Ein Aktorkanal richtet dabei eine Standardaktion beim Peering ein - diese hängt vom Aktor ab. Sie kann ebenfalls davon abhängen ob ein oder zwei Tasten ein einem Befehl gepeert werden. Peert man einen Schalter mit 2 Tasten kann eine Taste für 'on' und eine andere für 'off' angelegt werden. Wenn nur eine Taste definiert wird ist die Funktion wahrscheinlich 'toggle'.
            Die Funktion kann durch programmieren des Register (vom Aktor abhängig) geändert werden.
            Auch wenn der Befehl von einer Fernbedienung oder einem Taster kommt hat er direkten Effekt auf den Aktor. Das Peering beider Seiten ist quasi unabhängig und hat unterschiedlich Einfluss auf Sender und Empfänger.
            Peering eines Aktorkanals mit mehreren Senderkanälen ist ebenso möglich wie das eines Senderkanals mit mehreren Empfängerkanälen.
            <actChan> ist der zu verknüpfende Aktorkanal.
            <btn_no> ist der zu verknüpfende Senderkanal (Knopf). Wird 'single' gewählt werden die Tasten von 1 an gezählt. Für 'dual' ist btn_no die Nummer des zu verwendenden Tasterpaares. Z.B. ist '3' iim Dualmodus das dritte Tasterpaar welches mit Tasten 5 und 6 im Singlemodus übereinstimmt.
            Wird der Befehl auf einen Kanal angewendet wird btn_no igroriert. Muss gesetzt sein, sollte dabei 0 sein.
            [single|dual]: Dieser Modus bewirkt das Standardverhalten des Aktors bei Benutzung eines Tasters. Ein Dimmer kann z.B. an einen einzelnen oder ein Paar von Tastern angelernt werden.
            Standardeinstellung ist "dual".
            'dual' (default) Schalter verknüpft zwei Taster mit einem Aktor. Bei einem Dimmer bedeutet das ein Taster für hoch- und einer für runterdimmen.
            'reverse' identisch zu dual - nur die Reihenfolge der Buttons ist gedreht
            'single' benutzt nur einen Taster des Senders. Ist z.B. nützlich für einen einfachen Schalter der nur zwischen an/aus toggled. Aber auch ein Dimmer kann an nur einen Taster angelernt werden.
            [set|unset]: Wählt aus ob Peer hinzugefügt oder entfernt werden soll.
            Hinzufügen ist Standard.
            'set' stellt Peers für einen Kanal ein.
            'unset' entfernt Peer für einen Kanal.
            [actor|remote|both] beschränkt die Ausführung auf Aktor oder Fernbedienung. Das ermöglicht dem Benutzer das entfernen des Peers vom Fernbedienungskanal ohne die Einstellungen am Aktor zu entfernen.
            Standardmäßig gewählt ist "both" für beides.
            Example:
              set myRemote peerChan 2 mySwActChn single set #Peer zweiten Knopf mit Aktorkanal
              set myRmtBtn peerChan 0 mySwActChn single set #myRmtBtn ist ein Knopf der Fernbedienung. '0' wird hier nicht verarbeitet
              set myRemote peerChan 2 mySwActChn dual set #Verknüpfe Knöpfe 3 und 4
              set myRemote peerChan 3 mySwActChn dual unset #Entferne Peering für Knöpfe 5 und 6
              set myRemote peerChan 3 mySwActChn dual unset aktor #Entferne Peering für Knöpfe 5 und 6 nur im Aktor
              set myRemote peerChan 3 mySwActChn dual set remote #Verknüpfe Knöpfe 5 und 6 nur mit Fernbedienung. Linkeinstellungen mySwActChn werden beibehalten.
        • virtual
          • peerChan siehe remote
          • press [long|short] [<peer>] [<repCount>] [<repDelay>]
              Simuliert den Tastendruck am Aktor eines gepeerted Sensors
            • [long|short] soll ein langer oder kurzer Taastendrucl simuliert werden? Default ist kurz.
            • [<peer>] legt fest, wessen peer's trigger simuliert werden soll.Default ist self(channelNo).
            • [<repCount>] nur gueltig fuer long. wie viele messages sollen gesendet werden? (Laenge des Button press). Default ist 1.
            • [<repDelay>] nur gueltig fuer long. definiert die Zeit zwischen den einzelnen Messages.
          • virtTemp <[off -10..50]> Simuliert ein Thermostat. Wenn mit einem Gerät gepeert wird periodisch eine Temperatur gesendet, solange bis "off" gewählt wird. Siehe auch virtHum
          • virtHum <[off -10..50]> Simuliert den Feuchtigkeitswert eines Thermostats. Wenn mit einem Gerät verknüpft werden periodisch Luftfeuchtigkeit undTemperatur gesendet, solange bis "off" gewählt wird. Siehe auch virtTemp
          • valvePos <[off 0..100]> steuert einen Ventilantrieb
        • smokeDetector
          Hinweis: All diese Befehle funktionieren momentan nur wenn mehr als ein Rauchmelder vorhanden ist, und diese gepeert wurden um eine Gruppe zu bilden. Um die Befehle abzusetzen muss der Master dieser gruppe verwendet werden, und momentan muss man raten welcher der Master ist.
          smokeDetector kann folgendermaßen in Gruppen eingeteilt werden: peerChan. Alle Mitglieder müssen mit dem Master verknüpft werden. Auch der Master muss mit peerChan zur Gruppe zugefügt werden - z.B. mit sich selbst verknüpft! Dadurch hat man volle Kontrolle über die Gruppe und muss nicht raten.
          • teamCall - führt einen Netzwerktest unter allen Gruppenmitgliedern aus
          • teamCallBat - Simuliert einen low-battery alarm
          • alarmOn - löst einen Alarm aus
          • alarmOff - schaltet den Alarm aus
        • 4Dis (HM-PB-4DIS-WM|HM-PB-4DIS-WM|HM-RC-DIS-H-X-EU|ROTO_ZEL-STG-RM-DWT-10)
          • text <btn_no> [on|off] <text1> <text2>
            Zeigt Text auf dem Display eines Geräts an. Für diesen Zweck muss zuerst ein set-Befehl (oder eine Anzahl davon) abgegeben werden, dann können im "teach-in" Menü des 4Dis mit "Central" Daten übertragen werden.
            Falls auf einen Kanal angewendet dürfen btn_no und on|off nicht verwendet werden, nur reiner Text.
            \_ wird durch ein Leerzeichen ersetzt.
            Beispiel:
              set 4Dis text 1 on On Lamp
              set 4Dis text 1 off Kitchen Off

              set 4Dis_chn4 text Kitchen Off

        • Climate-Control (HM-CC-TC)
          • desired-temp <temp>
            Setzt verschiedene Temperaturen. <temp> muss zwischen 6°C und 30°C liegen, die Auflösung beträgt 0.5°C.
          • tempListSat [prep|exec] HH:MM temp ... 24:00 temp
          • tempListSun [prep|exec] HH:MM temp ... 24:00 temp
          • tempListMon [prep|exec] HH:MM temp ... 24:00 temp
          • tempListTue [prep|exec] HH:MM temp ... 24:00 temp
          • tempListThu [prep|exec] HH:MM temp ... 24:00 temp
          • tempListWed [prep|exec] HH:MM temp ... 24:00 temp
          • tempListFri [prep|exec] HH:MM temp ... 24:00 temp
            Gibt eine Liste mit Temperaturintervallen an. Bis zu 24 Intervall können pro Wochentag definiert werden, die Auflösung dabei sind 10 Minuten. Die letzte Zeitangabe muss 24:00 Uhr sein.
            Beispiel: bis 6:00 soll die Temperatur 19°C sein, dann bis 23:00 Uhr 22.5°C, anschließend werden bis Mitternacht 19°C gewünscht.
            set th tempListSat 06:00 19 23:00 22.5 24:00 19
          • partyMode <HH:MM><durationDays>
            setzt die Steuerung für die angegebene Zeit in den Partymodus. Dazu ist die Endzeit sowie Anzahl an Tagen die er dauern soll anzugeben. Falls er am nächsten Tag enden soll ist '1' anzugeben
          • sysTime
            setzt Zeit des Klimakanals auf die Systemzeit

        • Climate-Control (HM-CC-RT-DN|HM-CC-RT-DN-BoM)
          • controlMode <auto|boost|day|night>
          • controlManu <temp>
          • controlParty <temp><startDate><startTime><endDate><endTime>
            setzt die Steuerung in den Partymodus, definiert Temperatur und Zeitrahmen.
            Beispiel:
            set controlParty 15 03-8-13 20:30 5-8-13 11:30
          • sysTime
            setzt Zeit des Klimakanals auf die Systemzeit
          • desired-temp <temp>
            Setzt verschiedene Temperaturen. <temp> muss zwischen 6°C und 30°C liegen, die Auflösung beträgt 0.5°C.
          • tempListSat [prep|exec] HH:MM temp ... 24:00 temp
          • tempListSun [prep|exec] HH:MM temp ... 24:00 temp
          • tempListMon [prep|exec] HH:MM temp ... 24:00 temp
          • tempListTue [prep|exec] HH:MM temp ... 24:00 temp
          • tempListThu [prep|exec] HH:MM temp ... 24:00 temp
          • tempListWed [prep|exec] HH:MM temp ... 24:00 temp
          • tempListFri [prep|exec] HH:MM temp ... 24:00 temp
            Gibt eine Liste mit Temperaturintervallen an. Bis zu 24 Intervall können pro Wochentag definiert werden, die Auflösung dabei sind 10 Minuten. Die letzte Zeitangabe muss immer 24:00 Uhr sein.
            Der optionale Parameter [prep|exec] erlaubt das packen der Nachrichten und verbessert damit deutlich die Datenübertragung. Besonders nützlich wenn das Gerät im "Wakeup"-modus betrieben wird. Benutzung durch senden der Befehle mit Parameter "prep". Daten werden dann für das Senden gesammelt. Der letzte Befehl muss den Parameter "exec" habe um die Information zu übertragen.
            Beispiel: bis 6:00 soll die Temperatur 19°C sein, dann bis 23:00 Uhr 22.5°C, anschließend werden bis Mitternacht 19°C gewünscht.
            set th tempListSat 06:00 19 23:00 22.5 24:00 19

            set th tempListSat prep 06:00 19 23:00 22.5 24:00 19
            set th tempListSun prep 06:00 19 23:00 22.5 24:00 19
            set th tempListMon prep 06:00 19 23:00 22.5 24:00 19
            set th tempListTue exec 06:00 19 23:00 22.5 24:00 19
          • tempListTmpl =>"[verify|restore] [[<file>:]templateName] ...
            Die Temperaturlisten für ein oder mehrere Devices können in einem File hinterlegt werden. Es wird ein template für eine Woche hinterlegt. Der User kann dieses template in ein Device schreiben lassen (restore). Er kann auch prüfen, ob das Device korrekt nach dieser Templist programmiert ist (verify). Default Opeartion ist verify.
            Default File ist tempList.cfg.
            Default templateName ist der name der Entity
            Default für file und templateName kann mit dem Attribut tempListTmpl gesetzt werden.
            Beispiel für ein templist File. room1 und room2 sind die Namen 2er Tempaltes:
            entities:room1 tempListSat>08:00 16.0 15:00 18.0 21:30 19.0 24:00 14.0 tempListSun>08:00 16.0 15:00 18.0 21:30 19.0 24:00 14.0 tempListMon>07:00 16.0 16:00 18.0 21:00 19.0 24:00 14.0 tempListTue>07:00 16.0 13:00 16.0 16:00 18.0 21:00 19.0 24:00 15.0 tempListWed>07:00 16.0 16:00 18.0 21:00 19.0 24:00 14.0 tempListThu>07:00 16.0 16:00 18.0 21:00 19.0 24:00 14.0 tempListFri>07:00 16.0 13:00 16.0 16:00 18.0 21:00 19.0 24:00 14.0 entities:room2 tempListSat>08:00 14.0 15:00 18.0 21:30 19.0 24:00 14.0 tempListSun>08:00 14.0 15:00 18.0 21:30 19.0 24:00 14.0 tempListMon>07:00 14.0 16:00 18.0 21:00 19.0 24:00 14.0 tempListTue>07:00 14.0 13:00 16.0 16:00 18.0 21:00 19.0 24:00 15.0 tempListWed>07:00 14.0 16:00 18.0 21:00 19.0 24:00 14.0 tempListThu>07:00 14.0 16:00 18.0 21:00 19.0 24:00 14.0 tempListFri>07:00 14.0 13:00 16.0 16:00 18.0 21:00 19.0 24:00 14.0 Specials:
          • none: das Template wird ignoriert
          • defaultWeekplan: Es wird als Default jeden Tag 18.0 Grad eingestellt. Sinnvoll nutzbar wenn man einen TC als Kontroller nutzt. Der Wochenplan des TC wird dann imlizit genutzt
          • tempTmplSet =>"[[ <file> :]templateName]
            Setzt das Attribut und sendet die Änderungen an das Device.
          • tplDel =>" <template>
            Löscht eine Template Eintrag dieser entity.
          • tplSet_<peer> =>" <template>
            setzt ein Template für einen Peer der Entity. Mögliche Parameter des Templates werde auf den aktuellen Wert der Register gesetzt. Die Parameter können danach mit dem Kommando tplPara* geaendert werden.
            Das Kommando steht nur zu Verfügung wenn HMinfo definiert ist und ein passendes Template erstellt ist.
            Sollte das Template dediziert einem langen (long) oder kurzen (short) Trigger zugeordnet werden wird je ein Kommando zu Verfügung gestellt - siehe long oder short am Ende des Kommandos.
          • tplParaxxx_<peer>_<tpl>_<param> =>" <template>
            Ein Parameter eines zugewiesenen Templates kann geaendert werden. Das Kommando bezieht sich auf genau einen Parameter eines Templates.

        • OutputUnit (HM-OU-LED16)
          • led [off|red|green|yellow]
            schaltet die LED des Kanals auf die gewünschte Farbe. Wird der Befehl auf ein Gerät angewandt so werden alle LEDs auf diese Farbe gesetzt.
            Experten können die LEDs separat durch eine 8-stellige Hex-Zahl ansteuern.
          • ilum <Helligkeit><Dauer>
            <Helligkeit> [0-15] der Beleuchtung.
            <Dauer> [0-127] in Sekunden, 0 bedeutet dauernd an.

        • OutputUnit (HM-OU-CFM-PL)
          • led <color>[,<color>..] [<repeat>..]
            Mögliche Farben sind [redL|greenL|yellowL|redS|greenS|yellowS|pause]. Eine Folge von Farben kann durch trennen der Farbeinträge mit ',' eingestellt werden. Leerzeichen dürfen in der Liste nicht benutzt werden. 'S' bezeichnet kurze und 'L' lange Beleuchtungsdauer.
            repeat definiert wie oft die Sequenz ausgeführt werden soll. Standard ist 1.
          • playTone <MP3No>[,<MP3No>..] [<repeat>] [<volume>]
            Spielt eine Reihe von Tönen. Die Liste muss mit ',' getrennt werden. Leerzeichen dürfen in der Liste nicht benutzt werden.
            replay kann verwendet werden um den zuletzt gespielten Klang zu wiederholen.
            repeat definiert wie oft die Sequenz ausgeführt werden soll. Standard ist 1.
            volume kann im Bereich 0..10 liegen. 0 stoppt jeden aktuell gespielten Sound. Standard ist 10 (100%.
            Beispiel:
              set cfm_Mp3 playTone 3 # MP3 Titel 3 einmal
              set cfm_Mp3 playTone 3 3 # MP3 Titel 3 dreimal
              set cfm_Mp3 playTone 3 1 5 # MP3 Titel 3 mit halber Lautstärke
              set cfm_Mp3 playTone 3,6,8,3,4 # MP3 Titelfolge 3,6,8,3,4 einmal
              set cfm_Mp3 playTone 3,6,8,3,4 255# MP3 Titelfolge 3,6,8,3,4 255 mal
              set cfm_Mp3 playTone replay # Wiederhole letzte Sequenz

              set cfm_Led led redL 4 # rote LED dreimal lang blinken
              set cfm_Led led redS,redS,redS,redL,redL,redL,redS,redS,redS 255 # SOS 255 mal

        • HM-RC-19xxx
          • alarm <count>
            sendet eine Alarmnachricht an die Steuerung
          • service <count>
            sendet eine Servicenachricht an die Steuerung
          • symbol <symbol> [set|unset]
            aktiviert ein verfügbares Symbol auf der Steuerung
          • beep [off|1|2|3]
            aktiviert Töne
          • backlight [off|on|slow|fast]
            aktiviert Hintergrundbeleuchtung
          • display <text> comma unit tone backlight <symbol(s)>
            Steuert das Display der Steuerung
            <text> : bis zu 5 Zeichen
            comma : 'comma' aktiviert das Komma, 'no' läßt es aus
            [unit] : setzt Einheitensymbole. [off|Proz|Watt|x3|C|x5|x6|x7|F|x9|x10|x11|x12|x13|x14|x15]. Momentan sind x3..x15 nicht getestet.
            tone : aktiviert einen von 3 Tönen [off|1|2|3]
            backlight: läßt die Hintergrundbeleuchtung aufblinken [off|on|slow|fast]
            <symbol(s)> aktiviert die Anzeige von Symbolen. Mehrere Symbole können zu selben Zeit aktiv sein, Verknüpfung erfolgt komma-getrennt. Dabei keine Leerzeichen verwenden. Mögliche Symbole: [bulb|switch|window|door|blind|scene|phone|bell|clock|arrowUp|arrowDown]

            Beispiel:
              # "Hello" auf dem Display, Symbol bulb an, Hintergrundbeleuchtung, Ton ausgeben
              set FB1 display Hello no off 1 on bulb
              # "1234,5" anzeigen mit Einheit 'W'. Symbole scene,phone,bell und # clock sind aktiv. Hintergrundbeleuchtung blinikt schnell, Ausgabe von Ton 2
              set FB1 display 12345 comma Watt 2 fast scene,phone,bell,clock

        • HM-DIS-WM55
          • displayWM help
            displayWM [long|short] <text1> <color1> <icon1> ... <text6> <color6> <icon6>
            displayWM [long|short] <lineX> <text> <color> <icon>
            es können bis zu 6 Zeilen programmiert werden.
            lineX legt die zu ändernde Zeilennummer fest. Es können die 3 Parameter der Zeile geändert werden.
            textNo ist der anzuzeigende Text. Der Inhalt des Texts wird in den Buttonds definiert. txt<BtnNo>_<lineNo> referenziert den Button und dessn jeweiligen Zeile. Alternativ kann ein bis zu 12 Zeichen langer Freitext angegeben werden
            color kann sein white, red, orange, yellow, green, blue
            icon kann sein off, on, open, closed, error, ok, noIcon
            Example:
              set disp01 displayWM short txt02_2 green noIcon txt10_1 red error txt05_2 yellow closed txt02_2 orange open
              set disp01 displayWM long line3 txt02_2 green noIcon
              set disp01 displayWM long line2 nc yellow noIcon
              set disp01 displayWM long line6 txt02_2
              set disp01 displayWM long line1 nc nc closed

        • HM-DIS-EP-WM55
          • displayEP help
            displayEP <text1,icon1:text2,icon2:text3,icon3> <sound> <repetition> <pause> <signal>
            bis zu 3 Zeilen werden adressiert.
            Wenn help eingegeben wird wird eine hilfe zum Kommando ausgegeben. Optionen der Parameter werden ausgegeben.
            textx 12 char text für die Zeile. Wenn leer wird der Wert gemäß Reading genutzt. Typisch bedeuted es, dass keine Änderung stattfindet. text0-9 zeigt den vordefinierten Wert der Kanäle 4 bis 8 an. 0xHH erlaubt die anzeige eines hex Zeichens.
            iconx Icon der Zeile. Typisch bedeuted es, dass keine Änderung stattfindet.
            sound sound zum Abspielen.
            repetition 0..15
            pause 1..160
            signal Signalfarbe zum Anzeigen

            Note: param reWriteDisplayxx
          • Beim Druck einer Taste ueberschreibt das Geraet diemittleren 3 Zeilen. Wenn da Attribut
            attr chan param reWriteDisplayxx
            gesetzt ist werden die 3 Zeilen nach xx Sekunden auf den Orginalwert zurück geschrieben.

        • keyMatic

            Keymatic verwendet eine AES-signierte Kommunikation. Die Steuerung von KeyMatic ist mit HMLAN und mit CUL möglich. Um die Keymatic mit einem CUL zu steuern, muss das Perl-Modul Crypt::Rijndael installiert sein.

          • lock
            Schließbolzen fährt in Zu-Position
          • unlock [sec]
            Schließbolzen fährt in Auf-Position.
            [sec]: Stellt die Verzögerung ein nach der sich das Schloss automatisch wieder verschließt.
            0 - 65535 Sekunden
          • open [sec]
            Entriegelt die Tür sodass diese geöffnet werden kann.
            [sec]: Stellt die Verzögerung ein nach der sich das Schloss automatisch wieder verschließt.
            0 - 65535 Sekunden
        • winMatic

            winMatic arbeitet mit 2 Kanälen, einem für die Fenstersteuerung und einem für den Akku.

          • level <level> <relockDelay> <speed>
            stellt den Wert ein.
            <level>: Bereich ist 0% bis 100%
            <relockDelay>: Spanne reicht von 0 bis 65535 Sekunden. 'ignore' kann verwendet werden um den Wert zu ignorieren.
            <speed>: Bereich ist 0% bis 100%
          • stop
            stopt die Bewegung
        • CCU_FHEM
          • defIgnUnknown
            Definieren die unbekannten Devices und setze das Attribut ignore. Ddann loesche die Readings.
        • HM-SYS-SRP-PL
          legt Einträge für den Repeater an. Bis zu 36 Einträge können angelegt werden.
          • setRepeat <entry> <sender> <receiver> <broadcast>
            <entry> [1..36] Nummer des Eintrags in der Tabelle.
            <sender> Name oder HMid des Senders oder der Quelle die weitergeleitet werden soll
            <receiver> Name oder HMid des Empfängers oder Ziels an das weitergeleitet werden soll
            <broadcast> [yes|no] definiert ob Broadcasts von einer ID weitergeleitet werden sollen.

            Kurzanwendung:
            setRepeat setAll 0 0 0
            schreibt die gesamte Liste der Geräte neu. Daten kommen vom Attribut repPeers.
            Das Attribut repPeers hat folgendes Format:
            src1:dst1:[y/n],src2:dst2:[y/n],src2:dst2:[y/n],...

            Formatierte Werte von repPeer:
              Number src dst broadcast verify
              number: Nummer des Eintrags in der Liste
              src: Ursprungsgerät der Nachricht - aus Repeater ausgelesen
              dst: Zielgerät der Nachricht - aus den Attributen abgeleitet
              broadcast: sollen Broadcasts weitergeleitet werden - aus Repeater ausgelesen
              verify: stimmen Attribute und ausgelesen Werte überein?

        Debugging:
        • raw <data> ...
          nur für Experimente benötigt. Sendet einen "Roh"-Befehlen. Die Länge wird automatisch berechnet und der Nachrichtenzähler wird erhöht wenn die ersten beiden Zeichen ++ sind. Beispiel (AES aktivieren):
                      set hm1 raw ++A001F100001234560105000000001

      Get


      • configSave <filename>
        Sichert die Einstellungen eines Eintrags in einer Datei. Die Daten werden in einem von der FHEM-Befehlszeile ausführbaren Format gespeichert.
        Die Datei liegt im FHEM Home-Verzeichnis neben der fhem.cfg. Gespeichert wird kumulativ- d.h. neue Daten werden an die Datei angehängt. Es liegt am Benutzer das doppelte speichern von Einträgen zu vermeiden.
        Ziel der Daten ist NUR die Information eines HM-Gerätes welche IM Gerät gespeichert ist. Im Deteil sind das nur die Peer-Liste sowie die Register. Durch die Register wird also das Peering eingeschlossen.
        Die Datei ist vom Benutzer les- und editierbar. Zusätzlich gespeicherte Zeitstempel helfen dem Nutzer bei der Validierung.
        Einschränkungen:
        Auch wenn alle Daten eines Eintrags in eine Datei gesichert werden so sichert FHEM nur die zum Zeitpunkt des Speicherns verfügbaren Daten! Der Nutzer muss also die Daten der HM-Hardware auslesen bevor dieser Befehl ausgeführt wird. Siehe empfohlenen Ablauf unten.
        Dieser Befehl speichert keine FHEM-Attribute oder Gerätedefinitionen. Diese verbleiben in der fhem.cfg.
        Desweiteren werden gesicherte Daten nicht automatisch zurück auf die HM-Hardware geladen. Der Benutzer muss die Wiederherstellung auslösen.

        Ebenso wie ander Befehle wird 'configSave' am besten auf ein Gerät und nicht auf einen Kanal ausgeführt. Wenn auf ein Gerät angewendet werden auch die damit verbundenen Kanäle gesichert.

        Empfohlene Arbeitsfolge für ein Gerät 'HMdev':
        set HMdev clear msgEvents # alte Events löschen um Daten besser kontrollieren zu können
        set HMdev getConfig # Geräte- und Kanalinformation auslesen
        # warten bis Ausführung abgeschlossen ist
        # "protState" sollte dann "CMDs_done" sein
        # es sollten keine Warnungen zwischen "prot" und den Variablen auftauchen
        get configSave myActorFile
      • param <paramName>
        Gibt den Inhalt der relevanten Parameter eines Eintrags zurück.
        Hinweis: wird der Befehl auf einen Kanal angewandt und 'model' abgefragt so wird das Model des inhalteanbietenden Geräts zurückgegeben.
      • reg <addr> <list> <peerID>
        liefert den Wert eines Registers zurück. Daten werden aus dem Speicher von FHEM und nicht direkt vom Gerät geholt. Falls der Registerinhalt nicht verfügbar ist muss "getConfig" sowie anschließend "getReg" verwendet werden.
        <addr> Adresse des Registers in HEX. Registername kann alternativ verwendet werden falls in FHEM bekannt. "all" gibt alle dekodierten Register eines Eintrags in einer Liste zurück.
        <list> Liste aus der das Register gewählt wird. Wird der Registername verwendet wird "list" ignoriert und kann auf '0' gesetzt werden.
        <peerID> identifiziert die Registerbänke für "list3" und "list4". Kann als Dummy gesetzt werden wenn nicht benötigt.
      • regList
        gibt eine Liste der von FHEM für dieses Gerät dekodierten Register zurück.
        Beachten dass noch mehr Register für ein Gerät implemetiert sein können.
      • saveConfig <file>
        speichert Peers und Register in einer Datei.
        Gespeichert werden die Daten wie sie in FHEM verfügbar sind. Es ist daher notwendig vor dem Speichern die Daten auszulesen.
        Der Befehl unterstützt Aktionen auf Geräteebene. D.h. wird der Befehl auf ein Gerät angewendet werden auch alle verbundenen Kanaleinträge gesichert.
        Das Speichern der Datei erfolgt kumulativ. Wird ein Eintrag mehrfach in der selben Datei gespeichert so werden die Daten an diese angehängt. Der Nutzer kann den Zeitpunkt des Speichern bei Bedarf auslesen.
        Der Inhalt der Datei kann verwendet werden um die Geräteeinstellungen wiederherzustellen. Er stellt alle Peers und Register des Eintrags wieder her.
        Zwänge/Beschränkungen:
        vor dem zurückschreiben der Daten eines Eintrags muss das Gerät mit FHEM verbunden werden.
        "restore" löscht keine verknüpften Kanäle, es fügt nur neue Peers hinzu.
      • list (normal|hidden);
        triggern des list commandos fuer die entity normal oder inclusive der verborgenen parameter
      • listDevice
        • bei einer CCU gibt es eine Liste der Devices, welche den ccu service zum zuweisen der IOs zurück
        • beim ActionDetector wird eine Komma geteilte Liste der Entities zurückgegeben
          get ActionDetector listDevice # returns alle assigned entities
          get ActionDetector listDevice notActive# returns entities ohne status alive
          get ActionDetector listDevice alive # returns entities mit status alive
          get ActionDetector listDevice unknown # returns entities mit status unknown
          get ActionDetector listDevice dead # returns entities mit status dead

      Attribute

      • eventMap
      • do_not_notify
      • ignore
      • dummy
      • showtime
      • readingFnAttributes
      • readingOnDead
        definiert wie readings behandelt werden sollten wenn das Device als 'dead' mariert wird.
        Das Attribut ist nur auf Devices anwendbar. Es ändert die Readings wenn das Device nach dead geht. Beim Verlasen des Zustandes 'dead' werden die ausgewählten Readings nach 'notDead' geändert. Es kann erwartet werden, dass sinnvolle Werte vom Device eingetragen werden.
        Optionen sind:
        noChange: keine Readings ausser Actvity werden geändert. Andere Einträge werden ignoriert.
        state: das Reading 'state' wird auf 'dead' gesetzt.
        periodValues: periodische numerische Readings des Device werden auf '0' gesetzt.
        periodString: periodische string Readings des Device werden auf 'dead' gesetzt.
        channels: die Readings der Kanäle werden ebenso wie die des Device behandelt und auch geaendert.
        custom readings: der Anwender kann weitere Readingnamen eintragen, welche ggf. auf 'dead' zu setzen sind.

        Beispiel:
          attr myDevice readingOnDead noChange,state # kein dead marking - noChange hat Prioritaet
          attr myDevice readingOnDead state,periodValues,channels # Empfohlen. Reading state des device und aller seiner Kanäle werden auf 'dead' gesetzt. Periodische nummerische werden werden auf 0 gesetzt was Auswirkungen auf die Grafiken hat.
          attr myDevice readingOnDead state,channels # Reading state des device und aller seiner Kanäle werden auf 'dead' gesetzt.
          attr myDevice readingOnDead periodValues,channels # Numerische periodische Readings des Device und der Kanaele werden auf '0' gesetzt
          attr myDevice readingOnDead state,deviceMsg,CommandAccepted # beim Eintreten in dead state,deviceMsg und CommandAccepted des Device werden, wenn verfuegbar, auf 'dead' gesetzt.
      • aesCommReq
        wenn gesetzt wird IO AES signature anfordern bevor ACK zum Device gesendet wird.
      • actAutoTry
        actAutoTry 0_off,1_on
        setzen erlaubt dem ActionDetector ein statusrequest zu senden falls das Device dead markiert werden soll. Das Attribut kann für Devices nützlich sein, welche sich nicht von selbst zyklisch melden.
      • actCycle
        actCycle <[hhh:mm]|off>
        Bietet eine 'alive' oder besser 'not alive' Erkennung für Geräte. [hhh:mm] ist die maximale Zeit ohne Nachricht eines Geräts. Wenn innerhalb dieser Zeit keine Nachricht empfangen wird so wird das Event"<device> is dead" generiert. Sendet das Gerät wieder so wird die Nachricht"<device> is alive" ausgegeben.
        Diese Erkennung wird durch 'autocreate' für jedes Gerät mit zyklischer Statusmeldung angelegt.
        Die Kontrollinstanz ist ein Pseudo-Gerät "ActionDetector" mit der HMId "000000".
        Aufgrund von Performanceüberlegungen liegt die Antwortverzögerung bei 600 Sekunden (10min). Kann über das Attribut "actCycle" des "ActionDetector" kontrolliert werden.
        Sobald die Überwachung aktiviert wurde hat das HM-Gerät 2 Attribute:
          actStatus: Aktivitätsstatus des Geräts
          actCycle: Detektionsspanne [hhh:mm]
        Die gesamte Funktion kann über den "ActionDetector"-Eintrag überprüft werden. Der Status aller Instanzen liegt im READING-Bereich.
        Hinweis: Diese Funktion kann ebenfalls für Geräte ohne zyklische Übertragung aktiviert werden. Es obliegt dem Nutzer eine vernünftige Zeitspanne festzulegen.
      • aesKey
        Spezifiziert, welcher aes key verwendet wird, falls aesCommReq aktiviert wird.
      • autoReadReg
        '0' autoReadReg wird ignorert.
        '1' wird automatisch in getConfig ausgeführt für das Device nach jedem reboot von FHEM.
        '2' wie '1' plus nach Power on.
        '3' wie '2' plus update wenn auf das Device geschreiben wird.
        '4' wie '3' plus fordert Status an, wenn es nicht korrekt erscheint
        '5' prüft Registerlisten und peerlisten. Wenn diese nicht komplett sind wird ein update angefordert
        '8_stateOnly' es wird nur der Status geprüft, updates für Register werden nicht gemacht.
        Ausführung wird verzögert ausgeführt. Wenn das IO eine gewisse Last erreicht hat wird das Kommando weiter verzögert um eine Überlast zu vermeiden.
        Empfohlene Zusammenhänge bei Nutzung:
          Benutze das Attribut für das Device, nicht für jeden einzelnen Kanal
          Das Setzen auf Level 5 wird für alle Devices und Typen empfohlen, auch wakeup Devices.
      • burstAccess
        kann für eine Geräteinstanz gesetzt werden falls das Model bedingte Bursts erlaubt. Das Attribut deaktiviert den Burstbetrieb (0_off) was die Nachrichtenmenge des HMLAN reduziert und damit die Wahrscheinlichkeit einer Überlast von HMLAN verringert.
        Einschalten (1_auto) erlaubt kürzere Reaktionszeiten eines Geräts. Der Nutzer muss nicht warten bis das Gerät wach ist.
        Zu beachten ist, dass das Register "burstRx" im Gerät ebenfalls gesetzt werden muss.
      • expert
        Dieses Attribut steuert die Sichtbarkeit der Register Readngs. Damit wird die Darstellung der Geräteparameter kontrolliert.
        Es handdelt sich um einen binaer kodierten Wert mit folgenden Empfehlungen:
          0_defReg : default Register
          1_allReg : all Register
          2_defReg+raw : default Register und raw Register
          3_allReg+raw : alle Register und raw reading
          4_off : no Register
          8_templ+default: templates und default Register
          12_templOnly : nur templates
          251_anything : alles verfügbare
        Wird 'expert' auf ein Gerät angewendet so gilt dies auch für alle verknüpften Kanäle. Kann übergangen werden indem das Attribut ' expert' auch für den Gerätekanal gesetzt wird.
        Das Attribut "showInternalValues" bei den globalen Werten muss ebenfalls überprüft werden. "expert" macht sich diese Implementierung zu Nutze. Gleichwohl setzt "showInternalValues" - bei Definition - 'expert' außer Kraft .
      • readOnly
        beschränkt kommandos auf Lesen und Beobachten.
      • IOgrp
        kann an Devices vergeben werden und zeigt auf eine virtuelle VCCU. Das Setzen des Attributs führt zum Löschen des Attributs IODev da sich diese ausschliessen. Danach wird die VCCU beim Senden das passende IO für das Device auswählen. Es ist notwendig, dass die virtuelle VCCU definiert und alle erlaubten IOs eingetragen sind. Beim Senden wird die VCCU prüfen welches IO operational ist und welches den besten rssi-faktor für das Device hat.
        Optional kann ein bevorzugtes IO definiert werden. In diesem Fall wird es, wenn operational, genutzt - unabhängig von den rssi Werten.
        wenn kein IO aus VCCU's IOList verfügbar ist wird der Mechanismus gestoppt und nichts gesendet.
        Beispiel:
          attr myDevice1 IOgrp vccu
          attr myDevice2 IOgrp vccu:prefIO1,prefIO2,prefIO3
          attr myDevice2 IOgrp vccu:prefIO1,prefIO2,none
      • levelRange
        nur für Dimmer! Der Dimmbereich wird eingeschränkt. Es ist gedacht um z.B. LED Lichter unterstützen welche mit 10% beginnen und bei 40% bereits das Maximum haben. levelrange normalisiert den Bereich entsprechend. D.h. set 100 wird physikalisch den Dimmer auf 40%, 1% auf 10% setzen. 0% schaltet physikalisch aus.
        Beeinflusst werdne Kommndos on, up, down, toggle und pct. Nicht beeinflusst werden Kommandos die den Wert physikalisch setzen.
        Zu beachten:
        dimmer level von Peers gesetzt wird nicht beeinflusst. Dies wird durch Register konfiguriert.
        Readings level könnte negative werden oder über 100%. Das kommt daher, dass physikalisch der Bereich 0-100% ist aber auf den logischen bereicht normiert wird.
        Sind virtuelle Dimmer Kanäle verfügbar muss das Attribut für jeden Kanal gesetzt werden
        Beispiel:
          attr myChannel levelRange 0,40
          attr myChannel levelRange 10,80
      • tempListTmpl
        Setzt das Default für Heizungskontroller. Ist es nicht gesetzt wird der default filename genutzt und der name der entity als templatename. Z.B. ./tempList.cfg:RT_Clima
        Um das template nicht zu nutzen kann man es auf 'none' oder '0'setzen.
        Format ist <file>:<templatename>.
      • modelForce
        modelForce überschreibt das model attribut. Dabei wird das Device und seine Kanäle reconfguriert.
        Grund für dieses Attribut ist ein eQ3 bug bei welchen Devices mit falscher ID ausgeliefert werden. Das Attribut erlaubt dies zu ueberschreiben
        ACHTUNG: Durch das Eintragen eines anderen model werden die Entites modifiziert, ggf. neu angelegt oder gelöscht.
      • model
        wird automatisch gesetzt.
      • subType
        wird automatisch gesetzt.
      • msgRepeat
        Definiert die Nummer an Wiederholungen falls ein Gerät nicht rechtzeitig antwortet.
        Für Geräte die nur den "Config"-Modus unterstützen sind Wiederholungen nicht erlaubt.
        Bei Geräte mit wakeup-Modus wartet das Gerät bis zum nächsten Aufwachen. Eine längere Verzögerung sollte in diesem Fall angedacht werden.
        Wiederholen von Bursts hat Auswirkungen auf die HMLAN Übertragungskapazität.
      • rawToReadable
        Wird verwendet um Rohdaten von KFM100 in ein lesbares Fomrat zu bringen, basierend auf den gemessenen Werten. Z.B. langsames Füllen eines Tanks, während die Werte mit inform angezeigt werden. Man sieht:
          10 (bei 0%)
          50 (bei 20%)
          79 (bei 40%)
          270 (bei 100%)
        Anwenden dieser Werte: "attr KFM100 rawToReadable 10:0 50:20 79:40 270:100". FHEM für damit eine lineare Interpolation der Werte in den gegebenen Grenzen aus.
      • unit
        setzt die gemeldete Einheit des KFM100 falls 'rawToReadable' aktiviert ist. Z.B.
        attr KFM100 unit Liter
      • autoReadReg
        '0' autoReadReg wird ignoriert.
        '1' führt ein "getConfig" für ein Gerät automatisch nach jedem Neustart von FHEM aus.
        '2' verhält sich wie '1',zusätzlich nach jedem power_on.
        '3' wie '2', zusätzlich bei jedem Schreiben auf das Gerät
        '4' wie '3' und versucht außerdem den Status abzufragen falls dieser nicht verfügbar erscheint.
        '5' kontrolliert 'reglist' und 'peerlist'. Falls das Auslesen unvollständig ist wird 'getConfig' ausgeführt
        '8_stateOnly' aktualisiert nur Statusinformationen aber keine Konfigurationen wie Daten- oder Peerregister.
        Ausführung wird verzögert um eine Überlastung beim Start zu vermeiden . Daher werden Aktualisierung und Anzeige von Werten abhängig von der Größe der Datenbank verzögert geschehen.
        Empfehlungen und Einschränkungen bei Benutzung:
          Dieses Attribut nur auf ein Gerät oder Kanal 01 anwenden. Nicht auf einzelne Kanäle eines mehrkanaligen Geräts anwenden um eine doppelte Ausführung zu vermeiden.
          Verwendung bei Geräten die nur auf den 'config'-Modus reagieren wird nicht empfohlen da die Ausführung erst starten wird wenn der Nutzer die Konfiguration vornimmt
          Anwenden auf Geräte mit 'wakeup'-Modus ist nützlich. Zu bedenken ist aber dass die Ausführung bis zm "aufwachen" verzögert wird.

    • 'param' definiert modelspezifische Verhalten oder Funktionen. Verfügbare Parameter für "param" (Modell-abhängig):
      • HM-SEN-RD-O
        offAtPon: nur Heizkanäle: erzwingt Ausschalten der Heizung nach einem powerOn
        onAtRain: nur Heizkanäle: erzwingt Einschalten der Heizung bei Status 'rain' und Ausschalten bei Status 'dry'
      • virtuals
        noOnOff: eine virtuelle Instanz wird den Status nicht ändern wenn ein Trigger empfangen wird. Ist dieser Paramter nicht gegeben so toggled die Instanz ihren Status mit jedem trigger zwischen An und Aus
        msgReduce: falls gesetzt und der Kanal wird für valvePos genutzt wird jede Nachricht außer die der Ventilstellung verworfen um die Nachrichtenmenge zu reduzieren
      • blind
        levelInverse: während HM 100% als offen und 0% als geschlossen behandelt ist dies evtl. nicht intuitiv für den Nutzer. Defaut für 100% ist offen und wird als 'on'angezeigt. Das Setzen des Parameters invertiert die Anzeige - 0% wird also offen und 100% ist geschlossen.
        ACHTUNG: Die Anpassung betrifft nur Readings und Kommandos. Register sind nicht betroffen.
        ponRestoreSmart: bei powerup des Device fährt das Rollo in die vermeintlich nächstgelegene Endposition und anschliessend in die ursprüngliche Position.
        ponRestoreForce: bei powerup des Device fährt das Rollo auf Level 0, dann auf Level 100 und anschliessend in die ursprüngliche Position.
      • switch
        levelInverse: siehe oben bei blind
      • sensRain
        siren
        powerMeter
        dimmer
        rgb
        showTimed wenn timedOn running ist wird -till an state gehängt. Dies führt dazu, dass ggf. on-till im State steht was das stateIcon handling verbessert.

    • Erzeugte Events:
      • Allgemein
        recentStateType:[ack|info] # kann nicht verwendet werden um Nachrichten zu triggern
        • ack zeigt an das eine Statusinformation aus einer Bestätigung abgeleitet wurde
        • info zeigt eine automatische Nachricht eines Geräts an
        • sabotageAttackId
          Alarmiert bei Konfiguration des Geräts durch unbekannte Quelle
        • sabotageAttack
          Alarmiert bei Konfiguration des Geräts welche nicht durch das System ausgelöst wurde
        • trigDst_<name>: noConfig
          Ein Sensor triggert ein Device welches nicht in seiner Peerliste steht. Die Peerliste ist nicht akuell
      • HM-CC-TC,ROTO_ZEL-STG-RM-FWT
        T: $t H: $h
        battery:[low|ok]
        measured-temp $t
        humidity $h
        actuator $vp %
        desired-temp $dTemp
        desired-temp-manu $dTemp #Temperatur falls im manuellen Modus
        desired-temp-cent $dTemp #Temperatur falls im Zentrale-Modus
        windowopen-temp-%d %.1f (sensor:%s)
        tempList$wd hh:mm $t hh:mm $t ...
        displayMode temp-[hum|only]
        displayTemp [setpoint|actual]
        displayTempUnit [fahrenheit|celsius]
        controlMode [auto|manual|central|party]
        tempValveMode [Auto|Closed|Open|unknown]
        param-change offset=$o1, value=$v1
        ValveErrorPosition_for_$dname $vep %
        ValveOffset_for_$dname : $of %
        ValveErrorPosition $vep %
        ValveOffset $of %
        time-request
        trig_<src> <value> #channel was triggered by <src> channel. Dieses Event hängt vom kompletten Auslesen der Kanalkonfiguration ab, anderenfalls können Daten unvollständig oder fehlerhaft sein.
        trigLast <channel> #letzter empfangener Trigger
      • HM-CC-RT-DN and HM-CC-RT-DN-BOM
        state:T: $actTemp desired: $setTemp valve: $vp %
        motorErr: [ok|ValveTight|adjustRangeTooLarge|adjustRangeTooSmall|communicationERR|unknown|lowBat|ValveErrorPosition] measured-temp $actTemp
        desired-temp $setTemp
        ValvePosition $vp %
        mode [auto|manual|party|boost]
        battery [low|ok]
        batteryLevel $bat V
        measured-temp $actTemp
        desired-temp $setTemp
        actuator $vp %
        time-request
        trig_<src> <value> #Kanal wurde durch <src> Kanal ausgelößt.
      • HM-CC-VD,ROTO_ZEL-STG-RM-FSA
        $vp %
        battery:[critical|low|ok]
        motorErr:[ok|blocked|loose|adjusting range too small|opening|closing|stop]
        ValvePosition:$vp %
        ValveErrorPosition:$vep %
        ValveOffset:$of %
        ValveDesired:$vp % # durch Temperatursteuerung gesetzt
        operState:[errorTargetNotMet|onTarget|adjusting|changed] # operative Bedingung
        operStateErrCnt:$cnt # Anzahl fehlgeschlagener Einstellungen
      • HM-CC-SCD
        [normal|added|addedStrong]
        battery [low|ok]
      • HM-SEC-SFA-SM
        powerError [on|off]
        sabotageError [on|off]
        battery: [critical|low|ok]
      • HM-LC-BL1-PB-FM
        motor: [opening|closing]
      • HM-LC-SW1-BA-PCB
        battery: [low|ok]
      • HM-OU-LED16
        color $value # in Hex - nur für Gerät
        $value # in Hex - nur für Gerät
        color [off|red|green|orange] # für Kanal
        [off|red|green|orange] # für Kanal
      • HM-OU-CFM-PL
        [on|off|$val]
      • HM-SEN-WA-OD
        $level%
        level $level%
      • KFM100
        $v
        $cv,$unit
        rawValue:$v
        Sequence:$seq
        content:$cv,$unit
      • KS550/HM-WDS100-C6-O
        T: $t H: $h W: $w R: $r IR: $ir WD: $wd WDR: $wdr S: $s B: $b
        temperature $t
        humidity $h
        windSpeed $w
        windDirection $wd
        windDirRange $wdr
        rain $r
        isRaining $ir
        sunshine $s
        brightness $b
        unknown $p
      • HM-SEN-RD-O
        lastRain: timestamp # kein Trigger wird erzeugt. Anfang des vorherigen Regen-Zeitstempels des Messwerts ist Ende des Regens.
      • THSensor und HM-WDC7000
        T: $t H: $h AP: $ap
        temperature $t
        humidity $h
        airpress $ap #nur HM-WDC7000
      • dimmer
        overload [on|off]
        overheat [on|off]
        reduced [on|off]
        dim: [up|down|stop]
      • motionDetector
        brightness:$b
        alive
        motion on (to $dest)
        motionCount $cnt _next:$nextTr"-"[0x0|0x1|0x2|0x3|15|30|60|120|240|0x9|0xa|0xb|0xc|0xd|0xe|0xf]
        cover [closed|open] # nicht bei HM-SEC-MDIR
        sabotageError [on|off] # nur bei HM-SEC-MDIR
        battery [low|ok]
        devState_raw.$d1 $d2
      • remote/pushButton/outputUnit
          (to $dest) wird hinzugefügt wenn der Knopf gepeert ist und keinen Broadcast sendet
          Freigabe ist nur für verknüpfte Kanäle verfügbar
        Btn$x onShort
        Btn$x offShort
        Btn$x onLong $counter
        Btn$x offLong $counter
        Btn$x onLongRelease $counter
        Btn$x offLongRelease $counter
        Btn$x onShort (to $dest)
        Btn$x offShort (to $dest)
        Btn$x onLong $counter (to $dest)
        Btn$x offLong $counter (to $dest)
        Btn$x onLongRelease $counter (to $dest)
        Btn$x offLongRelease $counter (to $dest)
      • remote/pushButton
        battery [low|ok]
        trigger [Long|Short]_$no trigger event from channel
      • swi
        Btn$x Short
        Btn$x Short (to $dest)
        battery: [low|ok]
      • switch/dimmer/blindActuator
        $val
        powerOn [on|off|$val]
        [unknown|motor|dim] [up|down|stop]:$val
        timedOn [running|off]
        # "An" ist temporär - z.B. mit dem 'on-for-timer' gestartet
      • sensRain
        $val
        powerOn
        level <val≥
        timedOn [running|off]
        # "An" ist temporär - z.B. mit dem 'on-for-timer' gestartet trigger [Long|Short]_$no trigger event from channel
      • smokeDetector
        [off|smoke-Alarm|alive] # für Gruppen-Master
        [off|smoke-forward|smoke-alarm] # für Gruppenmitglieder
        [normal|added|addedStrong] #HM-CC-SCD
        SDteam [add|remove]_$dname
        battery [low|ok]
        smoke_detect [none|<src>]
        teamCall:from $src
      • threeStateSensor
        [open|tilted|closed]
        [wet|damp|dry] #nur HM-SEC-WDS
        cover [open|closed] #HM-SEC-WDS und HM-SEC-RHS
        alive yes
        battery [low|ok]
        contact [open|tilted|closed]
        contact [wet|damp|dry] #nur HM-SEC-WDS
        sabotageError [on|off] #nur HM-SEC-SC
      • winMatic
        [locked|$value]
        motorErr [ok|TurnError|TiltError]
        direction [no|up|down|undefined]
        charge [trickleCharge|charge|dischange|unknown]
        airing [inactiv|$air]
        course [tilt|close]
        airing [inactiv|$value]
        contact tesed
      • keyMatic
        unknown:40
        battery [low|ok]
        uncertain [yes|no]
        error [unknown|motor aborted|clutch failure|none']
        lock [unlocked|locked]
        [unlocked|locked|uncertain]
      Internals
      • aesCommToDev
        Information über Erfolg und Fehler der AES Kommunikation zwischen IO-device und HM-Device


    CUL_HOERMANN

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: CUL_HOERMANN

    CUL_IR

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: CUL_IR

    CUL_MAX

    [EN DE]
      Das Modul CUL_MAX wertet von einem CUL empfangene MAX! Botschaften aus. Es wird mit Hilfe von autocreate automatisch generiert, es muss nur sichergestellt werden, dass der richtige rfmode gesetzt wird, z.B. attr CUL0 rfmode MAX.

      Define
        define <name> CUL_MAX <addr>

        Definiert ein CUL_MAX Gerät des Typs <type> und der Adresse <addr>. Die Adresse darf nicht schon von einem anderen MAX! Gerät verwendet werden.

      Set
      • pairmode
        Versetzt den CUL_MAX für 60 Sekunden in den Pairing Modus, während dieser Zeit kann das Gerät mit anderen Geräten gepaart werden (Heizkörperthermostate, Eco-Taster, etc.). Auch das zu paarende Gerät muss manuell in den Pairing Modus versetzt werden (z.B. beim Heizkörperthermostat durch Drücken der "Boost" Taste für 3 Sekunden).
      • fakeSC <device> <open>
        Sendet eine fingierte ShutterContactState Meldung <open>, dies muss 0 bzw. 1 für "Fenster geschlossen" bzw. "Fenster offen" sein. Wenn das <device> eine Gruppen-ID ungleich Null hat, beeinflusst diese fingierte ShutterContactState Meldung alle Geräte mit dieser Gruppen-ID. Es muss sichergestellt werden, dass vorher alle Zielgeräte mit fakeShutterContact verbunden werden.
      • fakeWT <device> <desiredTemperature> <measuredTemperature>
        Sendet eine fingierte WallThermostatControl Meldung (beide Parameter können eine Nachkommastelle haben, für desiredTemperature darf die Nachkommastelle nur 0 bzw. 5 sein). Wenn das <device> eine Gruppen-ID ungleich Null hat, beeinflusst diese fingierte WallThermostatControl Meldung alle Geräte mit dieser Gruppen-ID. Es muss sichergestellt werden, dass vorher alle Zielgeräte mit fakeWallThermostat verbunden werden.

      Get
        N/A

      Attributes
      • dummy

      • debug

      • do_not_notify

      • ignore

      • showtime

      • readingFnAttributes

      Events
        N/A

    CUL_REDIRECT

    [EN DE]
      Das CUL_REDIRECT Modul empfängt weitere Protokolle vom CUL
      und leitet diese an die entsprechenden Module weiter.

    CUL_RFR

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: CUL_RFR

    CUL_TCM97001

    [EN DE]
      Das CUL_TCM97001 Modul verarbeitet von einem IO Gerät (CUL, CUN, SIGNALDuino, etc.) empfangene Nachrichten von Temperatur \ Wind \ Rain - Sensoren.

      Unterstützte Modelle:
      • ABS700
      • AURIOL (ältere Sensoren mit nur Temperatur)
      • Auriol_IAN (NC-3982, ADE WS 1503, Tchibo 65 722)
      • Auriol_Z31743B
      • Eurochron
      • GT_WT_02
      • KW9010
      • KW9015 (TFA 30.3161)
      • Mebus
      • Mebus7312
      • NC_WS (PEARL NC7159)
      • TCM21....
      • TCM218943
      • TCM97...
      • Type1
      • PFR-130 (rain)
      • Prologue (GT-WT-01)
      • Rubicson
      • Ventus W155(Auriol): W044(temp/hum) W132(wind) W174(rain)

      Neu empfangene Sensoren werden in der fhem Kategory CUL_TCM97001 per autocreate angelegt.

      Define
        Die empfangenen Sensoren werden automatisch angelegt.
        Die ID der angelegten Sensoren sind die ersten zwei HEX Werte des empfangenen Paketes in dezimaler Schreibweise.

      Generierte Events:
      • temperature: Die aktuelle Temperatur
      • humidity: Die aktuelle Luftfeutigkeit (falls verfügbar)
      • battery: Der Batteriestatus: low oder ok (falls verfügbar)
      • channel: Kanalnummer (falls verfügbar)
      • trend: Der Temperaturtrend (falls verfügbar)
      • israining: Aussage Regen zwichen zwei Messungen (falls verfügbar)
      • rain: Der Regenwert, eine fortlaufende Zahl bis zum Batteriewechsel (falls verfügbar)
      • winddir: Die aktuelle Windrichtung
      • windgrad: Die aktuelle Windrichtung in Grad
      • windspeed: Die aktuelle Windgeschwindigkeit
      • windgust: Windböe

      Attribute
      • IODev Spezifiziert das physische Gerät, das die Ausstrahlung der Befehle für das "logische" Gerät ausführt. Ein Beispiel für ein physisches Gerät ist ein CUL.
      • disableCreateUndefDevice
        damit kann das Anlegen neuer Devices deaktiviert werden
        die neuen Devices (Modell + ID, ioname, Anzahl) werden im Device Unknown in den readings "undefModel_a" und "undefModel_b" gespeichert
      • disableUnknownEvents
        damit können die events bei unbekannten Nachrichten deaktiviert werden
      • do_not_notify
      • ignore
      • model (ABS700, AURIOL, Auriol_IAN, GT_WT_02, KW9010, NC_WS, PFR-130, Prologue, Rubicson, TCM21...., TCM218943, TCM97…, Unknown, W044, W132, W174)
      • max-deviation-temp: (Default:1, erlaubte Werte: 1,2,3,4,5,6,7,8,9,10,15,20,25,30,35,40,45,50)
        Maximal erlaubte Abweichung der gemessenen Temperatur zum vorhergehenden Wert in Kelvin.
      • max-diff-rain: Default:0 (deaktiviert)
        Maximal erlaubte Abweichung der Regenmenge zum vorhergehenden Wert in l/qm.
      • negation-batt: Battery reading invertieren
      • showtime
      • readingFnAttributes
      • windDirectionInverse: Wenn der Windmesser auf dem Kopf montiert wurde, kann damit die Windrichtung herumgedreht werden.

    CUL_TX

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: CUL_TX

    CUL_WS

    [EN DE]
      Das CUL_WS-Modul entschlüsselt die Nachrichten des Types S300, die von dem CUL empfangen wurden.

      Define
        define <name> CUL_WS <code> [corr1...corr4]

        <code> ist der Code, der an dem S300 eingestellt werden muss. Gültige Werte sind 1 bis 8
        corr1..corr4 entsprechen vier möglichen Korrekturwerten, die den jeweiligen Werten hinzuaddiert werden, um die Geräte zu kalibrieren. Hinweis: Bei den Werten für Regenmengen werden die Korrekturwerte nicht hinzuaddiert, sondern als Faktor mit dem Regenwert multipliziert.

      Set
        N/A

      Get
        N/A

      Attribute
      • IODev (!) Achtung: mit diesem Attribut ist es möglich mehrere 8-er Sets an S300-er in FHEM zu definieren. Wichtige Voraussetzung allerdings ist, dass nur das spezifizierte CUL das S300 empfangen kann, z.Bsp. durch Frequenztrennung (433MHz vs. 868MHz).
      • do_not_notify
      • eventMap
      • ignore
      • model (S300,KS300,ASH2200)
      • showtime
      • readingFnAttributes
      • strangeTempDiff DIFFVAL
        Falls gesetzt, werden nur solche Temperaturen akzeptiert, wo der Unterschied bei der gemeldeten Temperatur zum letzten Wert weniger als DIFFVAL ist.

    CULflash

    [EN DE]
      CULflash [fhem-device|none]; <TYPE>

      Lädt die spezifizierte Firmware von fhem.de und programmiert das angeschlossene Gerät. Z.Zt unterstützt wird das CUL und folgende Versionen: CUL_V2, CUL_V2_HM, CUL_V3, CUL_V3_ZWAVE, CUL_V4.
      Falls als fhem-device none angegeben wurde, dann muss sich das angeschlossene Gerät bereits in flash-mode befinden.
      Achtung:Für CUL flashen muss dfu-programmer installiert und im Pfad auffindbar sein, das ist der Fall bei dem Fritz!BOX 7390 Paket von fhem.de
      Beispiele:
        CULflash CUL CUL_V3
        CULflash none CUL_V3
      Achtung: die Meldung "dfu-programmer: failed to release interface 0." ist auf der FB7390 "normal".

    Calendar

    [EN DE]
      Define
        define <name> Calendar ical url <URL> [<interval>]
        define <name> Calendar ical file <FILENAME> [<interval>]

        Definiert ein Kalender-Device.

        Ein Kalender-Device ermittelt (Serien-)Termine aus einem Quell-Kalender. Dieser kann eine URL oder eine Datei sein. Die Datei muss im iCal-Format vorliegen.

        Beginnt die URL mit https://, muss das Perl-Modul IO::Socket::SSL installiert sein (use cpan -i IO::Socket::SSL).

        Die <URL> kann %-wildcards der POSIX strftime-Funktion des darunterliegenden OS enthalten (siehe auch strftime Beschreibung). Allgemein gebräuchliche Wildcards sind:
        • %d Tag des Monats (01..31)
        • %m Monat (01..12)
        • %Y Jahr (1970...)
        • %w Wochentag (0..6); beginnend mit Sonntag (0)
        • %j Tag des Jahres (001..366)
        • %U Wochennummer des Jahres, wobei Wochenbeginn = Sonntag (00..53)
        • %W Wochennummer des Jahres, wobei Wochenbeginn = Montag (00..53)

        -Die wildcards werden bei jedem Kalenderupdate ausgewertet.
        -Die Auswertung von wildcards kann bei Bedarf fü einen Kalender deaktiviert werden, indem das Schlüsselwort 'noWildcards' dem Attribut 'quirks' hinzugefügt wird. Das ist nützlich bei url die bereits ein % enthalten, ohne damit ein wildcard zu kennzeichnen.

        Hinweise für Nutzer des Google-Kalenders:
        • Wildcards dürfen in Google Kalender URL nicht verwendet werden!
        • Du kannst direkt die private iCal-URL des Google-Kalenders nutzen.
        • Sollte deine Google-Kalender-URL mit https:// beginnen und das Perl-Modul IO::Socket::SSL ist nicht auf deinem System installiert, kannst Du in der URL https:// durch http:// ersetzen, falls keine automatische Umleitung auf die https:// URL erfolgt. Solltest Du unsicher sein, ob dies der Fall ist, überprüfe es bitte zuerst mit deinem Browser.
        Hinweis für Nutzer des Nextcloud-Kalenders: Du kannst eine URL der folgenden Form benutzen: https://admin:admin@demo.nextcloud.com/wid0ohgh/remote.php/dav/calendars/admin/personal/?export.

        Der optionale Parameter interval bestimmt die Zeit in Sekunden zwischen den Updates. Default-Wert ist 3600 (1 Stunde).
        Eine Intervallangabe von 0 ist nicht erlaubt. Diese wird automatisch durch den Standardwert 3600 ersetzt und im Log protokolliert.

        Beispiele:

              define MeinKalender Calendar ical url https://www.google.com­/calendar/ical/john.doe%40example.com­/private-foo4711/basic.ics
              define DeinKalender Calendar ical url http://www.google.com­/calendar/ical/jane.doe%40example.com­/private-bar0815/basic.ics 86400
              define IrgendeinKalender Calendar ical file /home/johndoe/calendar.ics
              

        Hinweis zur Erzeugung von Terminen:
        • Termine, die zum Zeitpunkt ihrer Erstellung mehr als 400 Tage in der Vergangenheit oder in der Zukunft liegen, werden ausgelassen. Dieses Zeitfenster kann durch die Attribute cutoffOlderThan und cutoffLaterThan noch verkleinert werden. Dies kann zur Folge haben, dass Termine jenseits dieses Horizonts niemals erstellt werden, solange der Kalender nicht neu initialisiert wird (set ... reload oder Neustart von FHEM) oder der VEVENT-Datensatz nicht verändert wird. Daher sollte ab und zu ein erzwungenes Neuladen eingeplant werden.

      Set

        set <name> update
        Erzwingt das Einlesen des Kalenders von der definierten URL. Das nächste automatische Einlesen erfolgt in interval Sekunden später.

        set <name> reload
        Dasselbe wie update, jedoch werden zuerst alle Termine entfernt.


      Get

        get <name> update
        Entspricht set <name> update

        get <name> reload
        Entspricht set <name> reload

      • get <name> events [format:<formatSpec>] [timeFormat:<timeFormatSpec>] [filter:<filterSpecs>] [series:next[=<max>]] [limit:<limitSpecs>] [include:<names>] [returnType:<returnTypeSpec>]

        Das Schweizer Taschenmesser für die Anzeige von Terminen. Die Termine des Kalenders <name> werden Zeile für Zeile entsprechend der Format- und Filterangaben ausgegeben. Keiner, einer oder mehrere der Parameter format, timeFormat, filter, series und limit können angegeben werden, weiterhin ist es sinnvoll, den Parameter filter mehrere Male anzugeben.

        Der Parameter format legt den zurückgegeben Inhalt fest.

        Folgende Formatspezifikationen stehen zur Verfügung:

        <formatSpec>Beschreibung
        defaultStandardformat (siehe unten)
        fullentspricht custom="$U $M $A $T1-$T2 $S $CA $L"
        textentspricht custom="$T1 $S"
        custom="<formatString>"ein spezifisches Format (siehe unten)
        custom="{ <perl-code> }"ein spezifisches Format (siehe unten)

        Einzelne Anführungszeichen (') können anstelle von doppelten Anführungszeichen (") innerhalb eines spezifischen Formats benutzt werden. Folgende Variablen können in <formatString> und in <perl-code> verwendet werden:

        variableBedeutung
        $t1Startzeit in Sekunden
        $T1Startzeit entsprechend Zeitformat
        $t2Endzeit in Sekunden
        $T2Endzeit entsprechend Zeitformat
        $aAlarmzeit in Sekunden
        $AAlarmzeit entsprechend Zeitformat
        $dDauer in Sekunden
        $DDauer in menschenlesbarer Form
        $SZusammenfassung
        $LOrtsangabe
        $CAKategorien
        $CLKlassifizierung
        $DSBeschreibung
        $UUID
        $MModus

        \, (maskiertes Komma) in Zusammenfassung, Ortsangabe und Beschreibung werden durch ein Komma ersetzt, aber \n (kennzeichnet Absatz) bleibt unberührt.

        Wird der Parameter format ausgelassen, dann wird die Formatierung aus defaultFormat benutzt. Ist dieses Attribut nicht gesetzt, wird "$T1 $D $S" als Formatierung benutzt. Das letzte Auftreten von format gewinnt bei mehrfacher Angabe.

        Examples:
        get MyCalendar events format:full
        get MyCalendar events format:custom="$T1-$T2 $S \@ $L"
        get MyCalendar events format:custom={ sprintf("%20s %8s", $S, $D) }

        Der Parameter timeFormat legt das Format für die Start-, End- und Alarmzeiten fest.

        In <timeFormatSpec> kann die POSIX-Spezifikation verwendet werden. Auf strftime.net gibt es ein Tool zum Erstellen von <timeFormatSpec>.

        Wenn der Parameter timeFormat ausgelassen, dann wird die Formatierung aus defaultTimeFormat benutzt. Ist dieses Attribut nicht gesetzt, dann wird "%d.%m.%Y %H:%M" als Formatierung benutzt. Zum Umschließen der Formatangabe können einfache (') oder doppelte (") Anführungszeichen verwendet werden.

        Das letzte Auftreten von timeFormat gewinnt bei mehrfacher Angabe.

        Example:
        get MyCalendar events timeFormat:"%e-%b-%Y" format:full

        Der Parameter filter schränkt die Anzeige der Termine ein. <filterSpecs> ist eine kommaseparierte Liste von <filterSpec>-Angaben. Alle Filterangaben müssen zutreffen, damit ein Termin angezeigt wird. Die Angabe ist kumulativ: jeder angegebene Filter wird zur Filterliste hinzugef&uum;gt und ber&uum;cksichtigt.

        <filterSpec>Beschreibung
        uid=="<uid>"UID ist <uid>
        entspricht field(uid)=="<uid>"
        uid=~"<regex>"Der reguläre Ausdruck <regex> entspricht der UID
        entspricht field(uid)=~"<regex>"
        mode=="<mode>"Modus ist <mode>
        entspricht field(mode)=="<mode>"
        mode=~"<regex>"Der reguläre Ausdruck <regex> entspricht mode
        entspricht field(mode)=~"<regex>"
        field(<field>)=="<value>"Inhalt von <field> ist <value>
        <field> ist eines von uid, mode, summary, location, description, categories, classification
        field(<field>)=~"<regex>"Inhalt von <field> entspricht dem regulären Ausdruck <regex>
        <field> ist eines von uid, mode, summary, location, description, categories, classification

        Die doppelten Anführungszeichen auf der rechten Seite von <filterSpec> sind nicht Teil des regulären Ausdrucks. Es können stattdessen einfache Anführungszeichen verwendet werden.

        Examples:
        get MyCalendar events filter:uid=="432dsafweq64yehdbwqhkd"
        get MyCalendar events filter:uid=~"^7"
        get MyCalendar events filter:mode=="alarm"
        get MyCalendar events filter:mode=~"alarm|upcoming"
        get MyCalendar events filter:field(summary)=~"Mama"
        get MyCalendar events filter:field(classification)=="PUBLIC"
        get MyCalendar events filter:field(summary)=~"Gelber Sack",mode=~"upcoming|start"
        get MyCalendar events filter:field(summary)=~"Gelber Sack" filter:mode=~"upcoming|start"

        Der Parameter series bestimmt die Anzeige von wiederkehrenden Terminen. series:next begrenzt die Anzeige auf den nächsten Termin der noch nicht beendeten Termine innerhalb der Serie. series:next=<max> zeigt die nächsten <max> Termine der Serie. Dies gilt pro Serie. Zur Begrenzung der Anzeige siehe den limit-Parameter.

        Der Parameter limit begrenzt die Anzeige der Termine. <limitSpecs> ist eine kommaseparierte Liste von <limitSpec> Angaben.

        <limitSpec>Beschreibung
        count=<n>zeigt <n> Termine, wobei <n> eine positive Ganzzahl (integer) ist
        from=[+|-]<timespec>zeigt nur Termine die nach einer Zeitspanne <timespec> ab jetzt enden; Minuszeichen für Termine in der Vergangenheit benutzen; <timespec> wird weiter unten im Attribut-Abschnitt beschrieben.
        to=[+|-]<timespec> zeigt nur Termine die vor einer Zeitspanne <timespec> ab jetzt starten; Minuszeichen für Termine in der Vergangenheit benutzen; <timespec> wird weiter unten im Attribut-Abschnitt beschrieben.
        when=today|tomorrowzeigt anstehende Termin für heute oder morgen an
        when=<D1>zeigt Termine für Tag <D1> von heute an, <D1>= 0 steht für heute, negative Werte sind erlaubt
        when=<D1>..<D2>zeigt Termine für den Tagesbereich von Tag <D1> bis Tag <D2> von heute an

        Examples:
        get MyCalendar events limit:count=10
        get MyCalendar events limit:from=-2d
        get MyCalendar events limit:when=today
        get MyCalendar events limit:count=10,from=0,to=+10d


        Der include Parameter schließt Termine aus anderen Kalendern ein. Das ist nützlich, um Termine aus anderen Kalendern in einer kombimierten Ausgabe anzuzeigen. <names> ist eine mit Kommas getrennte Liste der Namen von Calendar-Geräten. Der Name des Kalenders selbst sowie Duplikate werden stillschweigend ignoriert. Namen von Geräten, die es nicht gibt oder keine Calendar-Geräte sind, werden ignoriert und es wird eine Fehlermeldung ins Log geschrieben.

        Example:
        get MyCalendar events include:Feiertage,Müllabfuhr


        Der Parameter returnType wird verwendet, um die Termine als ein bestimmter Typ zurückzugeben. Das ist nützlich für Perl-Skripte.

        <returnTypeSpec>Beschreibung
        $textein mehrzeiliger String in menschenlesbarer Darstellung (Vorgabe)
        @textsein Array von Strings in menschenlesbarer Darstellung
        @eventsein Array von Calendar::Event-Hashs


      • get <name> find <regexp>
        Gibt zeilenweise die UID von allen Terminen aus, deren Zusammenfassung dem regulären Ausdruck <regexp> entspricht.

      • get <name> vcalendar
        Gibt den Kalender im ICal-Format aus, so wie er von der Quelle abgerufen wurde.

      • get <name> vevents
        Gibt eine Liste aller VEVENT-Einträge mit weiteren Informationen für Debugzwecke zurück. Nur Eigenschaften, die bei der Verarbeitung des Kalenders behalten wurden, werden gezeigt. Die Liste, der aus jedem VEVENT-Eintrag erstellten Termine, wird, ebenso wie die ausgelassenen Termine, gezeigt.

      Attribute

      • defaultFormat <formatSpec>
        Setzt das Standardformat für get <name> events. Der Aufbau wird dort erklät. <formatSpec> muss in doppelte Anführungszeichen (") gesetzt werden, wie z.B. attr myCalendar defaultFormat "$T1 $D $S".
      • defaultTimeFormat <timeFormatSpec>
        Setzt das Standardzeitformat für get <name> events. Der Aufbau wird dort erklät. <timeFormatSpec> nicht in Anführungszeichen setzten.
      • synchronousUpdate 0|1
        Wenn dieses Attribut nicht oder auf 0 gesetzt ist, findet die Verarbeitung im Hintergrund statt und FHEM wird während der Verarbeitung nicht blockieren.
        Wird dieses Attribut auf 1 gesetzt, findet die Verarbeitung des Kalenders im Vordergrund statt. Umfangreiche Kalender werden FHEM auf langsamen Systemen blockieren.

        Das Attribut wird ignoriert, falls FHEM unter Windows betrieben wird. In diesem Fall erfolgt die Verarbeitung immer synchron.
      • update none|onUrlChanged
        Wird dieses Attribut auf none gesetzt ist, wird der Kalender überhaupt nicht aktualisiert.
        Wird dieses Attribut auf onUrlChanged gesetzt ist, wird der Kalender nur dann aktualisiert, wenn sich die URL seit dem letzten Aufruf verändert hat, insbesondere nach der Auswertung von wildcards im define.
      • delay <time>
        Wartezeit in Sekunden nach der Initialisierung von FHEM oder einer Konfigurationsänderung bevor der Kalender tatsächlich von der Quelle geladen wird. Wenn nicht gesetzt wird eine Zufallszeit zwischen 10 und 29 Sekunden gewählt. Wenn mehrere Kalender definiert sind, führen gestaffelte Wartezeiten zu einer Verminderung der Ladefehleranfälligkeit.
      • timeout <time>
        Der Timeout in Sekunden um einen Kalender von seiner Quelle zu holen. Standard ist 30. Erhöhen für sehr große Kalender, bei denen es eine Weile dauert, sie an der Quelle zusammenzustellen und herunterzuladen.
      • removevcalendar 0|1
        Wenn dieses Attribut auf 1 gesetzt ist, wird der vCalendar nach der Verarbeitung verworfen, gleichzeitig reduziert sich der Speicherverbrauch des Moduls. Ein Abruf über get <name> vcalendar ist dann nicht mehr möglich.
      • hideOlderThan <timespec>
        hideLaterThan <timespec>

        Dieses Attribut grenzt die Liste der durch get <name> full|debug|text|summary|location|alarm|start|end ... gezeigten Termine ein. Die Zeit wird relativ zur aktuellen Zeit t angegeben.
        Wenn <hideOlderThan> gesetzt ist, werden Termine, die vor <t-hideOlderThan> enden, ingnoriert.
        Wenn <hideLaterThan> gesetzt ist, werden Termine, die nach <t+hideLaterThan> anfangen, ignoriert.

        Bitte beachte, dass eine Aktion, die durch einen Wechsel in den Modus "end" ausgelöst wird, nicht auf den Termin zugreifen kann, wenn hideOlderThan 0 ist, denn der Termin ist dann schon versteckt. Setze hideOlderThan besser auf 10.

        <timespec> muss; einem der folgenden Formate entsprechen:

        FormatBeschreibungBeispiel
        SSSSekunden3600
        SSSsSekunden3600s
        HH:MMStunden:Minuten02:30
        HH:MM:SSStunden:Minuten:Sekunden00:01:30
        D:HH:MM:SSTage:Stunden:Minuten:Sekunden122:10:00:00
        DDDdTage100d
      • cutoffOlderThan <timespec>
        cutoffLaterThan <timespec>
        Diese Attribut schneidem alle Termine weg, die eine Zeitspanne cutoffOlderThan vor bzw. cutoffLaterThan nach der letzten Aktualisierung des Kalenders enden. Der Zweck dieses Attributs ist es Speicher und Verarbeitungszeit zu sparen. Auf solche Termine kann gar nicht mehr aus FHEM heraus zugegriffen werden.
      • onCreateEvent <perl-code>
        Dieses Attribut führt ein Perlprogramm <perl-code> für jeden erzeugten Termin aus. Weitere Informationen unter Plug-ins im Text.
      • SSLVerify
        Dieses Attribut setzt die Art der Überprüfung des Zertifikats des Partners bei mit SSL gesicherten Verbindungen. Entweder auf 0 setzen für SSL_VERIFY_NONE (keine Überprüfung des Zertifikats) oder auf 1 für SSL_VERIFY_PEER (Überprüfung des Zertifikats). Die Überprüfung auszuschalten ist nützlich für lokale Kalenderinstallationen(e.g. OwnCloud, NextCloud) ohne gütiges SSL-Zertifikat.
      • ignoreCancelled
        Wenn dieses Attribut auf 1 gesetzt ist, werden Termine im Status "CANCELLED" ignoriert. Dieses Attribut auf 1 setzen, falls Termine in einer Serie zurückgegeben werden, die gelöscht sind.
      • hasModeReadings
        Auf 1 setzen, um die veralteten mode-Readings zu benutzen.
      • quirks <values>
        Parameter für spezielle Situationen. <values> ist eine kommaseparierte Liste der folgenden Schlüsselwörter:
        • ignoreDtStamp: wenn gesetzt, dann zeigt ein verändertes DTSTAMP Attribut eines Termins nicht an, dass; der Termin verändert wurde.
        • noWildcards: wenn gesetzt, werden Wildcards in der URL des Kalenders nicht ersetzt.
      • readingFnAttributes

      Beschreibung

        Ein Kalender ist eine Menge von Terminen. Ein Termin hat eine Zusammenfassg;ung (normalerweise der Titel, welcher im Quell-Kalender angezeigt wird), eine Startzeit, eine Endzeit und keine, eine oder mehrere Alarmzeiten. Die Termine werden aus dem Quellkalender ermittelt, welcher über die URL angegeben wird. Sollten mehrere Alarmzeiten für einen Termin existieren, wird nur der früheste Alarmzeitpunkt beibehalten. Wiederkehrende Kalendereinträge werden in einem gewiss;en Umfang unterstützt: FREQ INTERVAL UNTIL COUNT werden ausgewertet, BYMONTHDAY BYMONTH WKST werden erkannt aber nicht ausgewertet. BYDAY wird für wöchentliche und monatliche Termine korrekt behandelt. Das Modul wird es sehr wahrscheinlich falsch machen, wenn Du wiederkehrende Termine mit unerkannten oder nicht ausgewerteten Schlüsselwörtern hast.

        Termine werden erzeugt, wenn FHEM gestartet wird oder der betreffende Eintrag im Quell-Kalender verändert wurde oder der Kalender mit get <name> reload neu geladen wird. Es werden nur Termine innerhalb ±400 Tage um die Erzeugungs des Termins herum erzeugt. Ziehe in Betracht, den Kalender von Zeit zu Zeit neu zu laden, um zu vermeiden, dass; FHEM die künftigen Termine ausgehen. Du kann so etwas wie define reloadCalendar at +*240:00:00 set MyCalendar reload dafür verwenden.

        Manche dumme Kalender benutzen LAST-MODIFIED nicht. Das kann dazu führen, dass Veränderungen im Quell-Kalender unbemerkt bleiben. Lade den Kalender neu, wenn Du dieses Problem hast.

        Ein Termin wird durch seine UID identifiziert. Die UID wird vom Quellkalender bezogen. Um das Leben leichter zu machen, werden alle nicht-alphanumerischen Zeichen automatisch aus der UID entfernt.

        Ein Termin kann sich in einem der folgenden Modi befinden:

        upcomingWeder die Alarmzeit noch die Startzeit des Kalendereintrags ist erreicht.
        alarmDie Alarmzeit ist überschritten, aber die Startzeit des Kalender-Ereignisses ist noch nicht erreicht.
        startDie Startzeit ist überschritten, aber die Ende-Zeit des Kalender-Ereignisses ist noch nicht erreicht.
        endDie Endzeit des Kalender-Ereignisses wurde überschritten.

        Ein Kalender-Ereignis wechselt umgehend von einem Modus zum anderen, wenn die Zeit für eine Änderung erreicht wurde. Dies wird dadurch erreicht, dass auf die früheste zukünftige Zeit aller Alarme, Start- oder Endzeiten aller Kalender-Ereignisse gewartet wird.

        Aus Gründen der Abwärtskompatibilität werden mode-Readings gefüllt, wenn das Attribut hasModeReadings gesetzt ist. Der Rest dieser Beschreibung bezieht sich auf diese veralteten mode-Readings.

        Ein Kalender-Device hat verschiedene mode-Readings. Jedes mode-Reading stellt eine semikolonseparierte Liste aus UID von Kalender-Ereignisse dar, welche bestimmte Zustände haben:

        calnameName des Kalenders
        modeAlarmEreignisse im Alarm-Modus
        modeAlarmOrStartEreignisse im Alarm- oder Startmodus
        modeAlarmedEreignisse, welche gerade in den Alarmmodus gewechselt haben
        modeChangedEreignisse, welche gerade in irgendeiner Form ihren Modus gewechselt haben
        modeEndEreignisse im Endmodus
        modeEndedEreignisse, welche gerade vom Start- in den Endmodus gewechselt haben
        modeStartEreignisse im Startmodus
        modeStartedEreignisse, welche gerade in den Startmodus gewechselt haben
        modeUpcomingEreignisse im zukünftigen Modus

        Für Serientermine werden mehrere Termine mit identischer UID erzeugt. In diesem Fall wird die UID nur im interessantesten gelesenen Modus-Reading angezeigt. Der interessanteste Modus ist der erste zutreffende Modus aus der Liste der Modi start, alarm, upcoming, end.

        Die UID eines Serientermins wird nicht angezeigt, solange sich der Termin im Modus: modeEnd oder modeEnded befindet und die Serie nicht beendet ist. Die UID befindet sich in einem der anderen mode... Readings. Hieraus ergibts sich, das FHEM-Events nicht auf einem mode... Reading basieren sollten. Weiter unten im Text gibt es hierzu eine Empfehlung.

      Events

        Wenn der Kalendar neu geladen oder aktualisiert oder eine Alarm-, Start- oder Endzeit erreicht wurde, wird ein FHEM-Event erzeugt:

        triggered

        Man kann sich darauf verlassen, dass alle Readings des Kalenders in einem konsistenten und aktuellen Zustand befinden, wenn dieses Event empfangen wird.

        Wenn ein Termin geändert wurde, werden zwei FHEM-Events erzeugt:

        changed: UID <mode>
        <mode>: UID

        <mode> ist der aktuelle Modus des Termins nach der änderung. Bitte beachten: Im FHEM-Event befindet sich ein Doppelpunkt gefolgt von einem Leerzeichen.

        FHEM-Events sollten nur auf den vorgenannten Events basieren und nicht auf FHEM-Events, die durch ändern eines mode... Readings ausgelöst werden.

      Plug-ins

        Experimentell, bitte mit Vorsicht nutzen.

        Ein Plug-In ist ein kleines Perl-Programm, das Termine nebenher verändern kann. Das Perl-Programm arbeitet mit der Hash-Referenz $e.
        Die wichtigsten Elemente sind:

        codeBeschreibung
        $e->{start}Startzeit des Termins, in Sekunden seit 1.1.1970
        $e->{end}Endezeit des Termins, in Sekunden seit 1.1.1970
        $e->{alarm}Alarmzeit des Termins, in Sekunden seit 1.1.1970
        $e->{summary}die Zusammenfassung (Betreff, Titel) des Termins
        $e->{location}Der Ort des Termins

        Um für alle Termine mit dem Text "Tonne" in der Zusammenfassung die Alarmzeit zu ergänzen / zu ändern, kann folgendes Plug-In benutzt werden:

        attr MyCalendar onCreateEvent { $e->{alarm}= $e->{start}-86400 if($e->{summary} =~ /Tonne/);; }

        Das doppelte Semikolon maskiert das Semikolon. Perl specials können nicht genutzt werden.

        Zum Ergänzen einer fehlenden Endezeit, kann folgendes Plug-In benutzt werden:

        attr MyCalendar onCreateEvent { $e->{end}= $e->{start}+86400 unless(defined($e->{end})) }


      Anwendungsbeispiele

        Alle Termine inkl. Details anzeigen

          get MyCalendar events format:full
          2767324dsfretfvds7dsfn3e4­dsa234r234sdfds6bh874­googlecom alarm 31.05.2012 17:00:00 07.06.2012 16:30:00-07.06.2012 18:00:00 Erna for coffee
          992hydf4y44awer5466lhfdsr­gl7tin6b6mckf8glmhui4­googlecom upcoming 08.06.2012 00:00:00-09.06.2012 00:00:00 Vacation


        Zeige Termine in Deinem Bilderrahmen

          Füge eine Zeile in die layout description ein, um Termine im Alarm- oder Startmodus anzuzeigen:

          text 20 60 { fhem("get MyCalendar events timeFormat:'%d.%m.%Y %H:%M' format:custom='$T1 $S' filter:mode=~'alarm|start') }

          Dies kann dann z.B. so aussehen:

          07.06.12 16:30 Erna zum Kaffee
          08.06.12 00:00 Urlaub


        Schalte das Licht ein, wenn Erna kommt

          Finde zuerst die UID des Termins:

          get MyCalendar find .*Erna.*
          2767324dsfretfvds7dsfn3e4­dsa234r234sdfds6bh874­googlecom


          Definiere dann ein notif (der Punkt nach dem zweiten Doppelpunkt steht für ein Leerzeichen)

          define ErnaComes notify MyCalendar:start:.2767324dsfretfvds7dsfn3e4­dsa234r234sdfds6bh874­googlecom.* set MyLight on

          Du kannst auch ein Logging aufsetzen:

          define LogErna notify MyCalendar:alarm:.2767324dsfretfvds7dsfn3e4­dsa234r234sdfds6bh874­googlecom.* { Log3 $NAME, 1, "ALARM name=$NAME event=$EVENT part1=$EVTPART0 part2=$EVTPART1" }

        Schalte Aktoren an und aus

          Stell Dir einen Kalender vor, dessen Zusammenfassungen (Betreff, Titel) die Namen von Devices in Deiner FHEM-Installation sind. Du willst nun die entsprechenden Devices an- und ausschalten, wenn das Kalender-Ereignis beginnt bzw. endet.

          define SwitchActorOn notify MyCalendar:start:.* { \
          my $reading="$EVTPART0";; \
          my $uid= "$EVTPART1";; \
          my $actor= fhem('get MyCalendar events filter:uid=="'.$uid.'" format:custom="$S"');; \
          if(defined $actor) { fhem("set $actor on") } \
          }

          define SwitchActorOff notify MyCalendar:end:.* { \
          my $reading="$EVTPART0";; \
          my $uid= "$EVTPART1";; \
          my $actor= fhem('get MyCalendar events filter:uid=="'.$uid.'" format:custom="$S"');; \
          if(defined $actor) { fhem("set $actor off") } \
          }


          Auch hier kannst du Aktionen mitloggen:

          define LogActors notify MyCalendar:(start|end):.* { my $reading= "$EVTPART0";; my $uid= "$EVTPART1";; \
          my $actor= fhem('get MyCalendar events filter:uid=="'.$uid.'" format:custom="$S"');; \
          Log3 $NAME, 1, "Actor: $actor, Reading $reading" }


        Benachrichtigen über Müllabholung

          Nehmen wir an der GarbageCalendar beinhaltet alle Termine der Müllabholung mit der Art des Mülls innerhalb der Zusammenfassung (summary). Das folgende notify kann zur Benachrichtigung über die Müllabholung benutzt werden:

          define GarbageCollectionNotifier notify GarbageCalendar:alarm:.* { \
          my $uid= "$EVTPART1";; \
          my $summary= fhem('get GarbageCalendar events filter:uid=="'.$uid.'" format:custom="$S"');; \
          # e.g. mail $summary to someone \
          }


          Wenn der Müllkalender keine Erinnerungen hat, dann kannst du sie auf auf einen Tag vor das Datum der Abholung setzen:

          attr GarbageCalendar onCreateEvent { $e->{alarm}= $e->{start}-86400 }

          Das folgende realisiert eine HTML Anzeige für die n&aauml;chsten Abholungstermine:

          { CalendarEventsAsHtml('GarbageCalendar','format:text filter:mode=~"alarm|start"') }
      Eingebettetes HTML

        Das Modul definiert zwei Funktionen an, die HTML-Code zurückliefern.

        CalendarAsHtml(<name>,<parameter>) liefert eine Liste von Kalendereinträgen als HTML zurück. <name> ist der Name des Kalender-Devices; <parameter> würdest Du nach get <name> text ... schreiben. Diese Funktion ist veraltert und sollte nicht mehr genutzt werden!.

        Beispiel define MyCalendarWeblink weblink htmlCode { CalendarAsHtml("MyCalendar","next 3") }

        CalendarEventsAsHtml(<name>,<parameter>) liefert eine Liste von Kalender-Events zurück; zu name und parameters siehe oben.

        Beispiel

        define MyCalendarWeblink weblink htmlCode { CalendarEventsAsHtml('F','format:custom="$T1 $D $S" timeFormat:"%d.%m" series:next=3') }

        Empfehlung: Benutze einfache Anführungszeichen als äußere Anführungszeichen.

    CanOverEthernet

    [EN DE]
    Define
      define <name> CanOverEthernet

      Erstellt ein CanOverEthernet device. FHEM empfängt auf Port 5441 UDP broadcasts.
      Beispiel:
        define coe CanOverEthernet
      Die eingehenden Daten werden als readings in eigenen COE_Node devices gespeichert. Diese devices werden automatisch angelegt, sobald Daten dafür empfangen werden.
    Set
    • sendDataAnalog
      Veröffentlicht analoge Werte.
      Beispiel: set sendDataAnalog <Target-IP> <CAN-Channel> <Index>=<Value>;<Type>
      set coe sendDataAnalog 192.168.1.1 3 1=22.7;1 2=18.0;1
    • sendDataDigital
      Veröffentlicht digitale Werte. Also nur 0 oder 1.
      Beispiel: set sendDataDigital <Target-IP> <CAN-Channel> <Index>=<Value>
      set coe sendDataDigital 192.168.1.1 3 1=1 2=0

    ComfoAir

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: ComfoAir

    CustomReadings

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: CustomReadings

    DENON_AVR

    [EN DE]
      Define
        define <name> DENON_AVR <ip-address-or-hostname[:PORT]>
        define <name> DENON_AVR <devicename[@baudrate]>

        Dieses Modul steuert DENON (Marantz) A/V-Receiver über das Netzwerk.

        Anstatt der IP-Addresse oder dem Hostnamen kann eine serielle Schnittstelle angegeben werden.

        Beispiele:

          define avr DENON_AVR 192.168.0.10

          # Unter Angabe eines bestimmten Ports
          define avr DENON_AVR 192.168.0.10:23

          # Mit serieller Schnittstelle
          define avr DENON_AVR /dev/ttyUSB0@9600


      Set
        set <name> <command> [<parameter>]

        Momentan sind folgende Befehle verfügbar:
        • allZoneStereo   -   allZoneStereo an/aus
        • audioRestorer   -   set audioRestorer off/low/medium/high
        • audysseyLFC   -   audysseyLFC an/aus
        • audysseyLFCAmount   -   set audysseyLFCAmount (1 - 7)
        • autoStandby   -   Zeit für den Auto-Standby setzen
        • bass   -   Bass-Pegel einstellen
        • channelVolume   -   Lautstärkepegel der aktiven Lautsprecher schrittweise setzen (up/down)
           Um alle Einstellungen zurückzusetzen, kann FactoryDefaults verwendet werden.
           Beispiel, wie der Lautstärkepegel direkt über die Kommandozeile gesetzt wird: set avr channelVolume FrontLeft -1
           (mögliche Werte sind -12 bis 12)
        • cinemaEQ   -   cinemaEQ an/aus
        • display   -   zur Auswahl der "Dim-Modi" des Displays
        • dynamicEQ   -   dynamicEQ an/aus
        • dynamicEQRefLevelOffset   -   set dynamicEQRefLevelOffset (0, 5, 10, 15)
        • dynamicVolume   -   Wert für dynamicEQ setzen (off/light/medium/heavy)
        • eco   -   zur Auswahl des Eco-Modus
        • favorite   -   zur Auswahl der Favoriten (nur alte Modelle)
        • favoriteList   -   zur Auswahl der Favoriten aus der Listenansicht (Workaround für Modelle >= 2014)
           Es wird emfohlen den Set-Befehl stream in Kombination mit dem Modul 98_DLNARenderer zu verwenden!
        • input   -   zur Auswahl der Eingänge
        • loudness   -   Loudness an/aus
        • lowFrequencyEffect   -   LFE-Pegel einstellen (-10 to 0)
        • multiEQ   -   Wert für multiEQ setzen (off/reference/bypassLR...)
        • mute on,off   -   AV-Receiver laut/stumm schalten
        • muteT   -   zwischen laut und stumm wechseln
        • off   -   Standby AV-Receiver
        • on   -   AV-Receiver anschalten
        • preset   -   zwischen Voreinstellungen (1-3, nur alte Modelle) wechseln
        • presetCall   -   zwischen Voreinstellungen (00-35, 00-55 alte Modelle) wechseln
        • presetMemory   -   Voreinstellungen speichern (00-35, 00-55 alte Modelle, für Aktivierung der alphanumerschen Liste A1-G8 das Attribut presetMode auf alphanumeric setzen)
        • quickselect   -   zur Auswahl der "Quick-Select" Modi (1-5, nur neue Modelle)
        • rawCommand   -   schickt ein "raw command" zum AV-Receiver
        • reconnect   -   stellt die Verbindung zum AV-Receivers wieder her
        • remoteControl   -   Fernbedienungsbefehle (play, stop, pause,...)
        • setup   -   Anzeige Onscreen-Setup an/aus
        • sleep   -   Sleep-Timer (aus/10 bis 120 min)
        • smartselect   -   Smart-Select Modus wählen (1-5, nur Marantz, für Aktivierung das Attribut brand auf Marantz setzen)
        • stream   -   Aufruf von Streams über Modul 98_DLNARenderer; eine Datei "Denon.streams" mit einer Liste von Streams muss im Ordner "fhem/FHEM" selbst angelegt werden.

          Format der Liste:
          Rockantenne<>http://mp3channels.webradio.antenne.de/rockantenne
          Bayern3<>http://streams.br.de/bayern3_2.m3u
          JamFM<>http://www.jam.fm/streams/jam-nmr-mp3.m3u

          Der Name des Recievers aus dem DLNARenderer-Modul muss als Attribut "dlnaName" im Denon-Modul gesetzt werden.
        • surroundMode   -   zur Auswahl der Surround-Modi
        • toggle   -   AV-Receiver an/aus
        • treble   -   Höhen-Pegel einstellen
        • trigger1   -   trigger1 an/aus
        • trigger2   -   trigger2 an/aus
        • tuner   -   zwischen AM und FM wechseln
        • tunerPreset   -   zwischen Radio Voreinstellungen (1-56) wechseln
        • tunerPresetMemory   -   Radio Voreinstellungen (1-56) speichern
        • usedInputs   -   zur manuellen Auswahl der genutzten Eingänge (z.B. AUX-Ausgänge hinzufügen/enfernen)
        • volume 0...98   -   Lautstärke in Prozent
        • volumeStraight -80...18   -   absolute Lautstärke in dB
        • volumeUp   -   erhöht Lautstärke
        • volumeDown   -   verringert Lautstärke


      Get
        get <name> <what>

        Momentan sind folgende Befehle verfügbar:
        • disconnect   -   Verbindung zum AV receiver trennen
        • mediaInfo   -   aktuelle Medieninformationen abrufen
        • reconnect   -   Verbindung zum AV receiver wiederherstellen
        • remoteControl   -   Fernbedienung automatisch erzeugen lassen
        • statusRequest   -   Status neu laden
        • diverse Readings   -   siehe Liste unten
        • zone   -   Zonen automatisch erzeugen lassen

        Erzeugte Readings/Events:

        Einige Statusmeldungen werden vom AV-Reciever nur gesendet, wenn die entsprechende
        Einstellung (z.B. ampAssign) geändert wird oder der Reciever wieder ans Stromnetz
        angeschlossen wird (muss ca. 5 min vom Strom getrennt sein!).

        • ampAssign   -   Endstufenzuweisung des AV-Receiver (5.1, 7.1, 9.1,...)
        • audioRestorer   -   audioRestorer Level (off, low, medium, high)
        • autoStandby   -   Standbyzustand des AV-Recievers
        • bass   -   Bass-Level in dB
        • currentAlbum   -   aktuelles Album (Mediaplayer, Online Music,...)
        • currentArtist   -   aktueller Künstler (Mediaplayer, Online Music,...)
        • currentBitrate   -   aktuelle Bitrate (Mediaplayer, Online Music,...)
        • currentMedia   -   aktuelle Quelle (Mediaplayer, Online Music,...)
        • currentStation   -   aktueller Sender (Online Radio)
        • currentTitle   -   aktueller Titel (Mediaplayer, Online Music,...)
        • display   -   Dim-Status des Displays
        • dynamicCompression   -   Status der dynamischen Kompression
        • eco   -   Eco-Status
        • input   -   gewählte Eingangsquelle
        • levelFrontLeft   -   Pegel des linken Frontlautsprechers in dB
        • levelFrontRight   -   Pegel des rechten Frontlautsprechers in dB
        • lowFrequencyEffects   -   LFE-Status (low frequency effect)
        • mute   -   Status der Stummschaltung
        • power   -   Einschaltzustand des AV-Recievers
        • samplingRate   -   aktuelle Sampling-Rate
        • signal   -   aktuell anliegendes Eingangssignal
        • sound   -   aktueller Sound-Modus
        • state   -   Status des AV-Recievers (on,off,disconnected)
        • stateAV   -   stateAV-Status des AV-Recievers (on,off,mute,absent)
        • surroundMode   -   gewählter Surround-Modus (Auto, Stereo, Music,...)
        • toneControl   -   Status der Klangkontrolle
        • treble   -   Höhen-Level in dB
        • videoSelect   -   gewählter Videoselect-Modus
        • volume   -   aktuelle Lautstärke in Prozent
        • volumeMax   -   maximale Lautstärke in Prozent
        • volumeStraight   -   aktuelle absolute Lautstärke in dB

        Attribute

        • brand   -   Marke des Recievers (Denon oder Marantz) - um smartselect zu aktivieren Attribut brand auf Marantz setzen
        • connectionCheck   -   Zeitintervall für die Übeprüfung der Verbindung
        • disable   -   definiertes Gerät vorübergehend deaktivieren
        • dlnaName   -   Name des Recievers im DLNARenderer-Modul
        • favorites   -   maximale Anzahl der Favoriten
        • maxFavorites   -   maximale Anzahl der Einträge in der Favoritenliste für die Verwendung mit "set favoriteList"
        • maxPreset   -   maximale Anzahl der Einträge in der Liste für die Voreinstellungen
        • playTime   -   Zeitintervall für die Abfrage der Spielzeit bei Online-Medien (off, 1-60 sec)
        • presetMode   -   Verhalten der Liste für die Voreinstellungen (numerisch [00-55] oder alphanumerisch [A1-G8])
        • sleep   -   Pause zwischen den Befehlen zum Aufruf der Favoritenliste mit "set favoriteList"
        • timeout   -   Anzahl der Versuch für den Verbindungsaufbau
        • type   -   Verstärkertyp (AVR oder Ceol), legt Schrittweite der Lautstärkeslider fest (0.5 oder 1)
        • unit   -   Einheiten für Readings de-/aktivieren (on oder off)

    DENON_AVR_ZONE

    [EN DE]
      Define
        define <name> DENON_AVR_ZONE <zonename[:PORT]>

        Dieses Modul steuert DENON A/V Receiver über das Netzwerk.


        Beispiele:

          define avr_zone2 DENON_AVR_ZONE 2

          define avr_zone3 DENON_AVR_ZONE 3



      Set
        set <name> <command> [<parameter>]

        Momentan sind folgende Befehle verfügbar:
        • autoStandby   -   Zeit für den Auto-Standby setzen
        • favorite   -   zur Auswahl der Favoriten (nur alte Modelle)
        • input   -   zur Auswahl der Eingänge
        • mute an,aus   -   AV-Receiver laut/stumm schalten
        • muteT   -   zwischen laut und stumm wechseln
        • off   -   Standby AV-Receiver
        • on   -   AV-Receiver anschalten
        • quickselect   -   zur Auswahl der "Quick-Select" Modi (1-5, nur neue Modelle)
        • rawCommand   -   schickt ein "raw command" zum AV-Receiver
        • remote   -   Fernbedienungsbefehle (play, stop, pause,...)
        • surroundMode   -   zur Auswahl der Surround-Modi
        • toggle   -   AV-Receiver an/aus
        • volume 0...98   -   Lautstärke in Prozent
        • volumeStraight -80...18   -   absolute Lautstärke in dB
        • volumeUp   -   erhöht Lautstärke
        • volumeDown   -   erniedrigt Lautstärke


      Get
        get <name> <what>

        Momentan sind folgende Befehle verfügbar:

        • remoteControl   -   Fernbedienung automatisch erzeugen
        • diverse Readings   -   siehe Liste unten


      Erzeugte Readings/Events:

      • autoStandby   -   Standbyzustand des AV-Recievers
      • bass   -   Bass-Level in dB
      • display   -   Dim-Status des Displays
      • input   -   gewählte Eingangsquelle
      • levelFrontLeft   -   Pegel des linken Frontlautsprechers in dB
      • levelFrontRight   -   Pegel des rechten Frontlautsprechers in dB
      • mute   -   Status der Stummschaltung
      • power   -   Einschaltzustand des AV-Recievers
      • sound   -   aktueller Sound-Modus
      • state   -   Status des AV-Recievers (on,off,disconnected)
      • stateAV   -   stateAV-Status des AV-Recievers (on,off,mute,absent)
      • toneControl   -   Status der Klangkontrolle
      • treble   -   Höhen-Level in dB
      • videoSelect   -   gewählter Videoselect-Modus
      • volume   -   aktuelle Lautstärke in Prozent
      • volumeMax   -   maximale Lautstärke in Prozent
      • volumeStraight   -   aktuelle absolute Lautstärke in dB

      Attribute

      • IODev   -   Input/Output Device

    DFPlayerMini - FN-M16P Embedded MP3 Audio Module

    [EN DE]
    Dieses Modul integriert den DFPlayerMini - FN-M16P Embedded MP3 Audio Modul in fhem. Siehe auch das Datenblatt des Moduls für technische Details.
    Der MP3-Spieler kann direkt mit einer seriellen Schnittstelle verbunden werden oder per Ethernet/WiFi mittels einer Hardware die eine transparente serielle Übertragung per TCP/IP zur Verfügung stellt, z. B. ESPEasy Ser2Net.

    Es ist auch möglich ein anderes fhem Device für den Datentransport zu nutzen, z. B. MYSENSORS.

    Das Modul unterstützt alle Kommandos des DFPlayers und bietet weitere Funktionen wie
    • Integration von Text2Speech um einfach Sprach-MP3-Dateien herunterzuladen
    • einfachere Kontrolle darüber welche Dateien abgespielt werden sollen
    • Verwaltung aller Dateien die der DFPlayer abspielen kann
    • Abspielen mehrerer Dateien hintereinander (playlist)
    • Erzeugung und Abspielen von Sprachschnipseln um beliebige Zahlen per Sprache auszugeben

    Define
    define <name> DFPlayerMini {none | devicename[\@baudrate] | devicename\@directio | hostname:port}
    • Wenn der Player direkt angeschlossen ist wird per <devicename> der Name der seriellen Schnittstelle angegeben an die der DFPlayer Mini angeschlossen ist. Der Name der seriellen Schnittstelle hängt von der Betriebssystemdistribution ab, unter Linux ist das cdc_acm kernel Modul verantwortlich, und normalerweise wird ein /dev/ttyACM0 oder /dev/ttyUSB0 Device angelegt. Man kann auch eine Baudrate angeben in dem dem im Devicenamen nach dem @ Zeichen die Baudrate angegeben wird, z. B. /dev/ttyACM0@9600

      Das ist auch die standard Baudrate und sollte normalerweise nicht geändert werden da diese Baudrate beim DFPlayer fest eingestellt ist. Wenn als Baudrate "directio" angegeben wird (z. B.: /dev/ttyACM0@directio) dann wird das perl Modul Device::SerialPort nicht benötigt und fhem öffnet das Device mit simple file io. Das kann funktionieren wenn das Betriebssystem sinnvolle Voreinstellungen für die Parameter der seriellen Schnittstelle verwendet, z. B. einige Linux Distributionen und OSX.
    • Wenn die Verbindung über TCP/IP statt findet spezifiziert <hostname:port> die IP Adresse und den Port des Device das die transparente serielle Verbindung zum DFP bereit stellt, e.g. 192.168.2.28:23
    • Für andere Arten des Datentransports kann none als Device angegeben werden. In diesem Fall sollte das Attribute sendCmd angegeben werden. Antworten vom DFPlayer sollten per set response zurück an dieses Module übergeben werden.

    Attribute
    • TTSDev
      Der Name eines Text2Speech Devices. Dieses muss bereits vorher mit none als <alsadevice> als Server Device angelegt worden sein. Es sollte ausschließlich für dieses Modul zur Verfügung stehen und nicht für andere Zwecke verwendet werden.
    • requestAck
      Der DFPlayer kann fü jedes Kommando eine Bestätigung senden. Da das zu erhöhter Kommunikation führt kann es über dieses Attribut abgeschaltet werden. Wenn es eingeschaltet ist wird das nächste Kommando erst dann zum DFPlayer wenn das vorherige bestätigt wurde. Das stellt sicher, dass kein Kommando verloren geht selbst wenn der DFPlayer ausgelastet oder im Schlafzustand ist.
    • sendCmd
      Ein fhem Kommando das verwendet wird um ein durch diese Modul erzeugtes DFPlayer Kommando an die DFPlayer Hardware zu senden. Wenn dieses Attribut gesetzt ist wird kein andere Art der Kommunikation mit dem DFPlayer verwendet. Es kann verwendet werden um andere fhem Devices für den Datentransport zu nutzen.
      Um z. B. mittels eines MySensor Devices mit dem Namen mys_dfp zu kommunizieren kann
      attr <dfp> sendCmd set mys_dfp value11 $msg
      verwendet werden. Auf dem MySensors Devices muss eine passende Firmware installiert sein.
      Dieses Modul wird dann ein Kommando an den DFP senden in dem $msg mit dem tatsächlichen Kommando <payload> ersetzt wird und dann das fhem Kommando set mys_dfp value11 <payload>
      ausgeführt wird. Siehe set response für einen Weg um die Antwort des DFPlayers zurück an dieses Modul zu senden.
    • uploadPath
      Der DFPlayer spielt Dateien von einer an ihn angeschlossenen SD-Karte oder USB-Stick ab. Die mp3/wav Dateien müssen vom Anwender auf dieses Speichermedium kopiert werden. Der Player erwartet die Dateien mit speziellen Namen und in spezifischen Verzeichnissen, im Datenblatt stehen die Einzelheiten. Das Kopieren der Dateien kann auch von diesem Modul durchgeführt werden. Dazu muss das Speichermedium mit dem Rechner verbunden sein auf dem fhem ausgeführt wird. Es muss dazu in dem Pfad gemounted sein der durch diese Attribut angegeben ist.
      Siehe auch uploadTTS, uploadTTScache und readFiles Kommandos wo es verwendet wird.
    • rememberMissingTTS
      Wenn gesetzt erzeugen tts Kommandos ohne eine passende Datei ein spezielles Reading. Siehe set tts und set uploadTTScache.
    • keepAliveInterval
      Gibt das Intervall in Sekunden zwischen KeepAlive Kommandos an den DFP an. Das kann verwendet werden um automatisch zu prüfen, ob der DFP noch funktioniert und erreichbar ist.
      Nach drei fehlenden Antwortden wird der Status auf disconnected gesetzt.
      Interval 0 schaltet die Funktion ab, die Voreinstellung ist 60 Sekunden.

    Get

    Alle Abfrage Kommandos die vom DFP unterstützt werden haben ein zugehöriges get Kommando:
    getDFP cmd byteParameterKommentar
    storage0x3F
    status0x42
    volume0x43
    equalizer0x44
    noTracksRootUsb0x47
    noTracksRootSd0x48
    currentTrackUsb0x4B
    currentTrackSd0x4C
    noTracksInFolder0x4EVerzeichnisnummer1-99
    noFolders0x4F

    Set

    Alle Kommandos die vom DFP angeboten werden haben ein zugehöriges set Kommando:
    setDFP cmd byteParameterKommentar
    next0x01-
    prev0x02-
    trackNum0x03Nummer der Datei im Wurzelverzeichniszwischen 1 und 3000 (es wird die Reihenfolge verwendet in der die Dateien angelegt wurden!)
    volumeUp0x04-
    volumeDown0x05-
    volumeStraight0x06Lautstärke0-30
    equalizer0x07Name des EqualizermodusNormal, Pop, Rock, Jazz, Classic, Bass
    repeatSingle0x08-
    storage0x09SD oder USB
    sleep0x0A-vom DFP nicht unterstützt, danach muss er stromlos gemacht werden um wieder zu funktionieren
    wake0x0B-vom DFP nicht unterstützt, aber wahrscheinlich vom FN-M22P
    reset0x0C-
    play0x0D-spielt die aktuelle Datei
    play0x0F, 0x12, 0x13, 0x14Eine durch Leerzeichen getrennte Liste von Dateien die nacheinander abgespielt werdenDas korrekte DFP Kommando wird automatisch ermittelt. Dateien können über den Namen ihres Readings, den Readingwert oder Verzeichnisname/Dateinummer angegeben werden. Siehe set readFiles
    pause0x0E-
    amplification0x10Verstärkungsstufe0-31
    repeatRoot0x11on, off
    MP3TrackNum0x12Dateinummer1-3000, aus dem Verzeichnis MP3
    intercutAdvert0x13Dateinummer1-3000, aus dem Verzeichnis ADVERT
    folderTrackNum0x0FVerzeichnisnummer DateinummerVerzeichnis: 1-99, Datei: 1-255
    folderTrackNum30000x14Verzeichnisnummer DateinummerVerzeichnis: 1-15, Datei: 1-3000
    stopAdvert0x15-
    stop0x16-
    repeatFolder0x17Verzeichnisnummer1-99
    shuffle0x18-
    repeatCurrentTrack0x19on, off
    DAC0x1Aon, off

    Alle anderen set Kommandos werden nicht an den DFPlayer geschickt sondern bieten Komfortfunktionen:
    • close
    • raw
      sendet ein in Hexadezimal kodiertes Kommando direkt und ohne Prüfung an den DFP
    • reopen
    • readFiles
      ließt alle Dateien auf dem Speichermedium das in uploadPath gemounted ist. Wenn diese Dateien durch den DFP addressiert werden können (d.h. sie entprechen den Namenskonventionen) so wird ein Reading dafür angelegt. Der Readingname ist File_<Verzeichnis>/<Dateinummer>. Das Verzeichnis kann ., MP3, ADVERT oder 00 bis 99 sein. Der Readingwert ist der Dateiname ohne die Dateinummer und das Suffix.
      Beispiel:
      Für die Datei MP3/0003SongTitle.mp3 wird das Reading File_MP3/0003 mit dem Wert SongTitle angelegt.
      Das set <dfp> play Kommando kann diese Readings verwenden, d.h. es ist möglich entweder set <dfp> play File_MP3/0003, set <dfp> play MP3/3 oder set <dfp> play SongTitle zu verwenden, um die selbe Datei abzuspielen.
    • uploadTTS <destination path> <Text der in Sprache umgewandelt werden soll>
      Der angegebene Text wird in eine MP3 Sprachdatei umgewandelt. Dafür wird das Text2Speech Device verwendet das mit attr TTSDev angegebene wurde. Die MP3 Datei wird dann in das angegebene Zielverzeichnis unterhalb von uploadPath kopiert.
      Beispiele:
      set <dfp> 01/0001Test Dies ist ein Test
      set <dfp> ADVERT/0099Hinweis Achtung
    • uploadTTScache
      Kopiert alle Dateien aus dem cache Verzeichnis des TTSDev in uploadPath. Es wird zuerst in das Verzeichnis 01 kopiert. Nach 3000 Dateien wird das nächste Verzeichnis verwendet. Der MD5 Hash wird als Dateiname verwendet. Zum Schluss wird set readFiles ausgeführt. Das Kommando set tts verwendet die dadurch angelegten Readings.
    • tts <Text der in Sprache übersetzt werden soll>
      TTSDev wird verwendet um den MD5 Hash von <Text der in Sprache übersetzt werden soll> zu berechnen. Anschließend wird versucht die Datei mit diesem Hash abzuspielen. Wenn kein Reading für diesen Hash existiert und das wenn das Attribute rememberMissingTTS gesetzt ist dann wird ein neues Reading Missing_MD5<md5> mit dem Wert <Text der in Sprache übersetzt werden soll> angelegt.
      Voraussetzungen:
      Das funktioniert nur, wenn vorher der zu übersetzende Text bereits einmal übersetzt wurde und die daraus resultierende MP3 Datei im cache Verzeichnis des TTSDev gespeichert wurde, Die Dateien aus dem Cache müssen auf das Speichermedium mittels set uploadTTScache kopiert werden
    • uploadNumbers Zielverzeichnis
      erzeugt MP3 Dateien für alle Sprachschnipsel die benötigt werden um beliebige deutsche Zahlen zu sprechen.
      Beispiel:
      set <dfp> uploadNumbers 99
      erzeugt die benötigten 31 MP3 Dateien im Verzeichnis 99.
    • sayNumber Zahl
      übersetzt eine Zahl in Sprache und spielt die benötigten Dateien ab. Setzt voraus, dass vorher uploadNumbers verwendet wurde um die Sprachdateien zu erzeugen.
      Beispiel:
      sayNumber -34.7
      entspricht
      play minus vier und dreissig komma sieben
    • response
      10 Byte Antwortnachricht vom DFP hexadezimal kodiert

    DLNARenderer

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: DLNARenderer

    DOIF

    [EN DE]
      DOIF (ausgeprochen: du if, übersetzt: tue wenn) ist ein universelles Modul mit Web-Interface, welches ereignis- und zeitgesteuert in Abhängigkeit definierter Bedingungen Anweisungen ausführt.

      Mit diesem Modul ist es möglich, einfache wie auch komplexere Automatisierungsvorgänge zu definieren oder in Perl zu programmieren. Ereignisse, Zeittrigger, Readings oder Status werden durch DOIF-spezifische Angaben in eckigen Klammern angegeben. Sie führen zur Triggerung des Moduls und damit zur Auswertung und Ausführung der definierten Anweisungen.

      Das Modul verfügt über zwei Modi: FHEM-Modus und Perl-Modus. Der Modus eines definierten DOIF-Devices wird automatisch aufgrund der Definition vom Modul erkannt (FHEM-Modus beginnt mit einer runden Klammer auf). Der Perl-Modus kommt weitgehend ohne Attribute aus, er ist aufgrund seiner Flexibilität, der Möglichkeit strukturiert zu programmieren und seiner hohen Performance insb. bei umfangreichen Automatisierungsaufgaben dem FHEM-Modus vorzuziehen. Hier geht´s zum Perl-Modus. Beide Modi sind innerhalb eines DOIF-Devices nicht miteinander kombinierbar.

      Syntax FHEM-Modus:

        define <name> DOIF (<Bedingung>) (<Befehle>) DOELSEIF (<Bedingung>) (<Befehle>) DOELSEIF ... DOELSE (<Befehle>)

      Die Angaben werden immer von links nach rechts abgearbeitet. Logische Abfragen werden in DOIF/DOELSEIF-Bedingungen vornehmlich mit Hilfe von and/or-Operatoren erstellt. Zu beachten ist, dass nur die Bedingungen überprüft werden, die zum ausgelösten Event das dazughörige Device bzw. die dazugehörige Triggerzeit beinhalten. Kommt ein Device in mehreren Bedingungen vor, so wird immer nur ein Kommando ausgeführt, und zwar das erste, für das die dazugehörige Bedingung in der abgearbeiteten Reihenfolge wahr ist.

      Das DOIF-Modul arbeitet mit Zuständen. Jeder Ausführungszweig DOIF/DOELSEIF..DOELSEIF/DOELSE stellt einen eigenen Zustand dar (cmd_1, cmd_2, usw.). Das Modul merkt sich den zuletzt ausgeführten Ausführungszweig und wiederholt diesen standardmäßig nicht. Ein Ausführungszweig wird erst dann wieder ausgeführt, wenn zwischenzeitlich ein anderer Ausführungszweig ausgeführt wurde, also ein Statuswechsel des DOIF-Moduls stattgefunden hat. Dieses Verhalten ist sinnvoll, um zu verhindern, dass zyklisch sendende Sensoren (Temperatur, Feuchtigkeit, Helligkeit, usw.) zu ständiger Wiederholung des selben Befehls oder Befehlsabfolge führen. Das Verhalten des Moduls im FHEM-Modus kann durch diverse Attribute verändert werden. Im FHEM-Modus wird maximal nur ein Zweig pro Ereignis- oder Zeit-Trigger ausgeführt, es gibt nur einen Wait-Timer.

      Einfache Anwendungsbeispiele

        Fernbedienung (Ereignissteuerung)

        define di_rc_tv DOIF ([remotecontol:"on"]) (set tv on) DOELSE (set tv off)

        Zeitschaltuhr (Zeitsteuerung)

        define di_clock_radio DOIF ([06:30|Mo Di Mi] or [08:30|Do Fr Sa So]) (set radio on) DOELSEIF ([08:00|Mo Di Mi] or [09:30|Do Fr Sa So]) (set radio off)

        Kombinierte Ereignis- und Zeitsteuerung

        define di_lamp DOIF ([06:00-09:00] and [sensor:brightness] < 40) (set lamp on) DOELSE (set lamp off)

      Eine ausführliche Erläuterung der obigen Anwendungsbeispiele kann hier nachgelesen werden: Erste Schritte mit DOIF


      Inhaltsübersicht (Beispiele im Perl-Modus sind besonders gekennzeichnet)

        Lesbarkeit der Definitionen
        Ereignissteuerung
        Teilausdrücke abfragen
        Ereignissteuerung über Auswertung von Events
        Angaben im Ausführungsteil
        Filtern nach Ausdrücken mit Ausgabeformatierung
        Durchschnitt, Median, Differenz, Änderungsrate, anteiliger Anstieg
        Aggregieren von Werten
        Zeitsteuerung
        Relative Zeitangaben
        Zeitangaben nach Zeitraster ausgerichtet
        Relative Zeitangaben nach Zeitraster ausgerichtet
        Zeitangaben nach Zeitraster ausgerichtet alle X Stunden
        Wochentagsteuerung
        Zeitsteuerung mit Zeitintervallen
        Indirekten Zeitangaben
        Zeitsteuerung mit Zeitberechnung
        Intervall-Timer
        Kombination von Ereignis- und Zeitsteuerung mit logischen Abfragen
        Zeitintervalle, Readings und Status ohne Trigger
        Nutzung von Readings, Status oder Internals im Ausführungsteil
        Berechnungen im Ausführungsteil
        Ersatzwert für nicht existierende Readings oder Status
        Verzögerungen
        Verzögerungen von Timern
        Zurücksetzen des Waittimers für das gleiche Kommando
        Wiederholung von Befehlsausführung
        Zwangspause für das Ausführen eines Kommandos seit der letzten Zustandsänderung
        Begrenzung von Wiederholungen eines Kommandos
        Ausführung eines Kommandos nach einer Wiederholung einer Bedingung
        Löschen des Waittimers nach einer Wiederholung einer Bedingung
        Readingauswertung bei jedem Event des Devices
        Eindeutige Statuserkennung
        Triggerung durch selbst ausgelöste Events
        Setzen der Timer mit Event
        Zeitspanne eines Readings seit der letzten Änderung
        Darstellungselement mit Eingabemöglichkeit im Frontend und Schaltfunktion
        Status des Moduls
        uiTable, DOIF Web-Interface
        uiState, DOIF Web-Interface im Status
        Reine Statusanzeige ohne Ausführung von Befehlen
        Anpassung des Status mit Hilfe des Attributes state
        Erzeugen berechneter Readings
        Vorbelegung des Status mit Initialisierung nach dem Neustart mit dem Attribut initialize
        Deaktivieren des Moduls
        Bedingungslose Ausführen von Befehlszweigen
        Initialisieren des Moduls
        Weitere Anwendungsbeispiele
        Zu beachten
        DOIF im FHEM-Wiki
        DOIF im FHEM-Forum
        Kurzreferenz

      Attribute
        addStateEvent   checkall   checkReadingEvent   cmdpause   cmdState   DOIF_Readings   disable   do always   do resetwait   event_Readings   initialize   notexist   repeatcmd   repeatsame   selftrigger   readingList   setList   startup   state   timerevent   timerWithWait   uiTable   uiState   wait   waitdel   waitsame   weekdays  
        readingFnAttributes  

      Set Befehle
        checkall   disable   enable   initialize   cmd  

      Get Befehle
        html

      Lesbarkeit der Definitionen   back

      Da die Definitionen im Laufe der Zeit recht umfangreich werden können, sollten die gleichen Regeln, wie auch beim Programmieren in höheren Programmiersprachen, beachtet werden. Dazu zählen: das Einrücken von Befehlen, Zeilenumbrüche sowie das Kommentieren seiner Definition, damit man auch später noch die Funktionalität seines Moduls nachvollziehen kann.

      Das Modul unterstützt dazu Einrückungen, Zeilenumbrüche an beliebiger Stelle und Kommentierungen beginnend mit ## bis zum Ende der Zeile. Die Formatierungen lassen sich im DEF-Editor der Web-Oberfläche vornehmen.

      So könnte eine Definition aussehen:

      define di_Modul DOIF ([Switch1] eq "on" and [Switch2] eq "on") ## wenn Schalter 1 und Schalter 2 on ist
        (set lamp on)
       ## wird Lampe eingeschaltet
      DOELSE  ## im sonst-Fall, also wenn einer der Schalter off ist
        (set lamp off)
       ## wird die Lampe ausgeschaltet

      Perl-Modus:
      define di_Modul DOIF
      { if ([Switch1] eq "on" and [Switch2] eq "on") { ## wenn Schalter 1 und Schalter 2 on ist
        fhem_set "lamp on"
       ## wird Lampe eingeschaltet
        } else {  ## im sonst-Fall, also wenn einer der Schalter off ist
        fhem_set "lamp off"
       ## wird die Lampe ausgeschaltet
        }
      }

      Im Folgenden wird die Funktionalität des Moduls im Einzelnen an vielen praktischen Beispielen erklärt.


      Ereignissteuerung   back

      Vergleichende Abfragen werden in der Bedingung, mit Perl-Operatoren ==, !=, <, <=, >, >= bei Zahlen und mit eq, ne, lt, le, gt, ge, =~, !~ bei Zeichenketten angegeben. Logische Verknüpfungen sollten zwecks Übersichtlichkeit mit and bzw. or vorgenommen werden. Die Reihenfolge der Auswertung wird, wie in höheren Sprachen üblich, durch runde Klammern beeinflusst. Status werden mit [<devicename>], Readings mit [<devicename>:<readingname>], Internals mit [<devicename>:&<internal>] angegeben.

      Anwendungsbeispiel: Einfache Ereignissteuerung, "remotecontrol" ist hier ein Device, es wird in eckigen Klammern angegeben. Ausgewertet wird der Status des Devices - nicht das Event.

      define di_garage DOIF ([remotecontrol] eq "on") (set garage on) DOELSEIF ([remotecontrol] eq "off") (set garage off)

      Das Modul wird getriggert, sobald das angegebene Device hier "remotecontrol" ein Event erzeugt. Das geschieht, wenn irgendein Reading oder der Status von "remotecontrol" aktualisiert wird. Ausgewertet wird hier der Zustand des Status von remotecontrol nicht das Event selbst. Im FHEM-Modus arbeitet das Modul mit Zuständen, indem es den eigenen Status auswertet. Die Ausführung erfolgt standardmäßig nur ein mal, bis ein anderer DOIF-Zweig und damit eine Ändernung des eigenen Status erfolgt. Das bedeutet, dass ein mehrmaliges Drücken der Fernbedienung auf "on" nur einmal "set garage on" ausführt. Die nächste mögliche Ausführung ist "set garage off", wenn Fernbedienung "off" liefert.
      Wünscht man eine Ausführung des gleichen Befehls mehrfach nacheinander bei jedem Trigger, unabhängig davon welchen Status das DOIF-Modul hat, weil z. B. Garage nicht nur über die Fernbedienung geschaltet wird, dann muss man das per "do always"-Attribut angeben:

      attr di_garage do always

      Bei der Angabe von zyklisch sendenden Sensoren (Temperatur, Feuchtigkeit, Helligkeit usw.) wie z. B.:

      define di_heating DOIF ([sens:temperature] < 20) (set heating on)

      ist die Nutzung des Attributes do always nicht sinnvoll, da das entsprechende Kommando hier: "set heating on" jedes mal ausgeführt wird, wenn der Temperatursensor in regelmäßigen Abständen eine Temperatur unter 20 Grad sendet. Ohne do always wird hier dagegen erst wieder "set heating on" ausgeführt, wenn der Zustand des Moduls auf "cmd_2" gewechselt hat, also die Temperatur zwischendurch größer oder gleich 20 Grad war.

      Soll bei Nicht-Erfüllung aller Bedingungen ein Zustandswechsel erfolgen, so muss man ein DOELSE am Ende der Definition anhängen. Ausnahme ist eine einzige Bedingung ohne do always, wie im obigen Beispiel, hierbei wird intern ein virtuelles DOELSE angenommen, um bei Nicht-Erfüllung der Bedingung einen Zustandswechsel in cmd_2 zu provozieren, da sonst nur ein einziges Mal geschaltet werden könnte, da das Modul aus dem cmd_1-Zustand nicht mehr herauskäme.

      Perl-Modus:

      Im Perl-Modus arbeitet das DOIF-Modul im Gegensatz zum FHEM-Modus ohne den eigenen Status auszuwerten. Es kommt immer zur Auswertung des definierten Block, wenn er getriggert wird. Diese Verhalten entspricht dem Verhalten mit dem Attribut do always im FHEM-Modus. Damit bei zyklisch sendenden Sensoren nicht zum ständigen Schalten kommt, muss das Schalten unterbunden werden. Das obige Beispiel lässt sich, wie folgt definieren:

      define di_heating DOIF {if ([sens:temperature] < 20) {if (Value("heating") ne "on") {fhem_set"heating on"}}}


      Teilausdrücke abfragen   back

      Abfragen nach Vorkommen eines Wortes innerhalb einer Zeichenkette können mit Hilfe des Perl-Operators =~ vorgenommen werden.

      Anwendungsbeispiel: Garage soll beim langen Tastendruck öffnen, hier: wenn das Wort "Long" im Status vorkommt (bei HM-Komponenten stehen im Status noch weitere Informationen).

      define di_garage DOIF ([remotecontrol] =~ "Long") (set garage on)
      attr di_garage do always


      Perl-Modus:
      define di_garage DOIF {if ([remotecontrol] =~ "Long") {fhem_set"garage on"}}

      Weitere Möglichkeiten bei der Nutzung des Perl-Operators: =~, insbesondere in Verbindung mit regulären Ausdrücken, können in der Perl-Dokumentation nachgeschlagen werden.


      Ereignissteuerung über Auswertung von Events   back

      Eine Alternative zur Auswertung von Status oder Readings ist das Auswerten von Ereignissen (Events) mit Hilfe von regulären Ausdrücken. Der Suchstring wird als regulärer Ausdruck in Anführungszeichen angegeben. Die Syntax lautet: [<devicename>:"<regex>"]

      Anwendungsbeispiel: wie oben, jedoch wird hier nur das Ereignis (welches im Eventmonitor erscheint) ausgewertet und nicht der Status von "remotecontrol" wie im vorherigen Beispiel

      define di_garage DOIF ([remotecontrol:"on"]) (set garage on) DOELSEIF ([remotecontrol:"off"]) (set garage off)

      Perl-Modus:
      define di_garage DOIF {if ([remotecontrol:"on"]) {fhem_set"garage on"} elsif ([remotecontrol:"off"]) {fhem_set"garage off"}}

      In diesem Beispiel wird nach dem Vorkommen von "on" innerhalb des Events gesucht. Falls "on" gefunden wird, wird der Ausdruck wahr und der if-Fall wird ausgeführt, ansonsten wird der else-if-Fall entsprechend ausgewertet. Die Auswertung von reinen Ereignissen bietet sich dann an, wenn ein Modul keinen Status oder Readings benutzt, die man abfragen kann, wie z. B. beim Modul "sequence". Die Angabe von regulären Ausdrücken kann recht komplex werden und würde die Aufzählung aller Möglichkeiten an dieser Stelle den Rahmen sprengen. Weitere Informationen zu regulären Ausdrücken sollten in der Perl-Dokumentation nachgeschlagen werden. Die logische Verknüpfung "and" mehrerer Ereignisse ist nicht sinnvoll, da zu einem Zeitpunkt immer nur ein Ereignis zutreffen kann.

      Die alte Syntax [<devicename>:?<regex>] wird aus Kompatibilitätsgründen noch unterstützt, sollte aber nicht mehr benutzt werden.

      Sollen Events verschiedener Devices ausgewertet werden, so lässt sich folgende Syntax anwenden: ["<device regex>:<event regex>"]

      Im Gegensatz zum notify werden vom DOIF-Modul selbst keine Regex-Sonderzeichen hinzugefügt. Insb. wird kein ^ für Anfang vorangestellt, bzw. kein $ für Ende angehängt.

      Beispiele für Regex-Angaben:

      ["FS"] triggert auf alle Devices, die "FS" im Namen beinhalten
      ["^FS"] triggert auf alle Devices, die mit "FS" im Namen anfangen
      ["FS:temp"] triggert auf alle Devices, die "FS" im Namen und "temp" im Event beinhalten
      [":^temp"] triggert auf beliebige Devices, die im Event mit "temp" beginnen
      ["^FS$:^temp$"] triggert auf Devices, die genau "FS" heißen und im Event genau "temp" vorkommt
      [""] triggert auf alles

      In der Bedingung und im Ausführungsteil werden die Schlüsselwörter $SELF durch den eigenen Namen des DOIF-Moduls, $DEVICE durch das aktuelle Device, $EVENT durch die passende Eventzeile, $EVENTS kommagetrennt durch alle Eventzeilen des Triggers ersetzt.

      Entsprechend können Perl-Variablen in der DOIF-Bedingung ausgewertet werden, sie werden in Kleinbuchstaben geschrieben. Sie lauten: $device, $event, $events

      Anwendungsbeispiele:

      "Fenster offen"-Meldung

      define di_window_open DOIF (["^window_:open"]) (set Pushover msg 'alarm' 'open windows $DEVICE' '' 2 'persistent' 30 3600)
      attr di_window_open do always


      Perl-Modus:
      define di_window_open DOIF {if (["^window_:open"]) {fhem_set"Pushover msg 'alarm' 'open windows $DEVICE' '' 2 'persistent' 30 3600"}}

      Hier werden alle Fenster, die mit dem Device-Namen "window_" beginnen auf "open" im Event überwacht.

      Allgemeine Ereignistrigger können ebenfalls so definiert werden, dass sie nicht nur wahr zum Triggerzeitpunkt und sonst nicht wahr sind, sondern Inhalte des Ereignisses zurückliefern. Initiiert wird dieses Verhalten durch die Angabe eines Default-Wertes.

      Syntax:

      ["regex for trigger",<default value>]

      Anwendungsbeispiel:

      define di_warning DOIF ([":^temperature",0] < 0) (set pushmsg danger of frost $DEVICE)
      attr di_warning do always

      Perl-Modus:
      define di_warning DOIF {if ([":^temperature",0] < 0) {fhem_set"pushmsg danger of frost $DEVICE}}

      Damit wird auf alle Devices getriggert, die mit "temperature" im Event beginnen. Zurückgeliefert wird der Wert, der im Event hinter "temperature: " steht. Wenn kein Event stattfindet, wird der Defaultwert, hier 0, zurückgeliefert.
      Ebenfalls kann ein Ereignisfilter mit Ausgabeformatierung angegeben werden.

      Syntax:

      ["regex for trigger":"<regex filter>":<output>,<default value>]

      Regex-Filter- und Output-Parameter sind optional. Der Default-Wert ist verpflichtend.

      Die Angaben zum Filter und Output funktionieren, wie die beim Reading-Filter. Siehe: Filtern nach Ausdrücken mit Ausgabeformatierung

      Wenn kein Filter, wie obigen Beispiel, angegeben wird, so wird intern folgende Regex vorbelegt: "[^\:]*: (.*)" Damit wird der Wert hinter der Readingangabe genommen. Durch eigene Regex-Filter-Angaben kann man beliebige Teile des Events herausfiltern, ggf. über Output formatieren und in der Bedingung entsprechend auswerten, ohne auf Readings zurückgreifen zu müssen.


      Filtern nach Ausdrücken mit Ausgabeformatierung   back

      Syntax: [<device>:<reading>|<internal>:d<number>|"<regex>":<output>]

      d - Der Buchstabe "d" ist ein Synonym für das Filtern nach Dezimalzahlen, es entspricht intern dem regulären Ausdruck "(-?\d+(\.\d+)?)". Ebenfalls lässt sich eine Dezimalzahl auf eine bestimmte Anzahl von Nachkommastellen runden. Dazu wird an das "d" eine Ziffer angehängt. Mit der Angabe d0 wird die Zahl auf ganze Zahlen gerundet.
      <Regex>- Der reguläre Ausdruck muss in Anführungszeichen angegeben werden. Dabei werden Perl-Mechanismen zu regulären Ausdrücken mit Speicherung der Ergebnisse in Variablen $1, $2 usw. genutzt.
      <Output> - ist ein optionaler Parameter, hier können die in den Variablen $1, $2, usw. aus der Regex-Suche gespeicherten Informationen für die Aufbereitung genutzt werden. Sie werden in Anführungszeichen bei Texten oder in Perlfunktionen angegeben. Wird kein Output-Parameter angegeben, so wird automatisch $1 genutzt.

      Beispiele:

      Es soll aus einem Reading, das z. B. ein Prozentzeichen beinhaltet, nur der Zahlenwert für den Vergleich genutzt werden:

      define di_heating DOIF ([adjusting:actuator:d] < 10) (set heating off) DOELSE (set heating on)

      Alternativen für die Nutzung der Syntax am Beispiel des Filterns nach Zahlen:

      [mydevice:myreading:d]
      entspricht:
      [mydevice:myreading:"(-?\d+(\.\d+)?)"]
      entspricht:
      [mydevice:myreading:"(-?\d+(\.\d+)?)":$1]
      entspricht:
      [mydevice:myreading:"(-?\d+(\.\d+)?)":"$1"]
      entspricht:
      [mydevice:myreading:"(-?\d+(\.\d+)?)":sprintf("%s":$1)]

      Es soll die Zahl aus einem Reading auf 3 Nachkommastellen formatiert werden:

      [mydevice:myreading:d3]

      Es soll aus einem Text eine Zahl herausgefiltert werden und anschließend gerundet auf zwei Nachkommastellen mit der Einheit °C ausgeben werden:

      ... (set mydummy [mydevice:myreading:d2:"$1 °C"])

      Es sollen aus einem Reading der Form "HH:MM:SS" die Stunden, Minuten und Sekunden separieret werden:

      [mydevice:myreading:"(\d\d):(\d\d):(\d\d)":"hours: $1, minutes $2, seconds: $3"]

      Der Inhalt des Dummys Alarm soll in einem Text eingebunden werden:

      [alarm:state:"(.*)":"state of alarm is $1"]

      Die Definition von regulären Ausdrücken mit Nutzung der Perl-Variablen $1, $2 usw. kann in der Perldokumentation nachgeschlagen werden.


      Durchschnitt, Median, Differenz, Änderungsrate, anteiliger Anstieg   back

      Die folgenden Funktionen werden auf die letzten gesendeten Werte eines Readings angewendet. Das angegebene Reading muss Events liefern, damit seine Werte intern im Modul gesammelt und die Berechnung der angegenen Funktion erfolgen kann.

      Syntax

      [<device>:<reading>:<function><number of last values>]

      <number of last values> ist optional. Wird sie nicht angegeben, so werden bei Durchschnitt/Differenz/Änderungsrate/Anstieg die letzten beiden Werte, bei Median die letzten drei Werte, ausgewertet.

      Durchschnitt

      Funktion: avg

      Bsp.:

      define di_cold DOIF ([outdoor:temperature:avg5] < 10)(set cold on)

      Wenn der Durchschnitt der letzten fünf Werte unter 10 Grad ist, dann wird die Anweisung ausgeführt.

      Median

      Mit Hilfe des Medians können punktuell auftretende Ausreißer eliminiert werden.

      Funktion: med

      Bsp.:

      define di_frost DOIF ([$SELF:outTempMed] < 0) (set warning frost)

      attr di_frost event_Readings outTempMed:[outdoor:temperature:med]


      Die Definition über das Attribut event_Readings hat den Vorteil, dass der bereinigte Wert im definierten Reading visualisiert und geloggt werden kann (med entspricht med3).

      Differenz

      Es wird die Differenz zwischen dem letzten und dem x-ten zurückliegenden Wert berechnet.

      Funktion: diff

      Bsp.:

      define temp_abfall DOIF ([outdoor:temperature:diff5] < -3) (set temp fall in temperature)

      Wenn die Temperaturdifferenz zwischen dem letzten und dem fünftletzten Wert um mindestens drei Grad fällt, dann Anweisung ausführen.

      Änderungsrate

      Es wird die Änderungsrate (Veränderung pro Zeit) zwischen dem letzten und dem x-ten zurückliegenden Wert berechnet. Es wird der Differenzenquotient von zwei Werten und deren Zeitdifferenz gebildet. Mit Hilfe dieser Funktion können momentane Verbräuche von Wasser, elektrischer Energie, Gas usw. bestimmt, ausgewertet oder visualisiert werden.

      Funktion: diffpsec

      Berechnung:

      (letzter Wert - zurückliegender Wert)/(Zeitpunkt des letzten Wertes - Zeitpunkt des zurückliegenden Wertes)

      Bsp.:

      define di_pv DOIF ([pv:total_feed:diffpsec]*3600 > 1) (set heating on) DOELSE (set heating off)

      Wenn die momentane PV-Einspeise-Leistung mehr als 1 kW beträgt, dann soll die Heizung eingeschaltet werden, sonst soll sie ausgeschaltet werden. Das total_feed-Reading beinhaltet den PV-Ertrag in Wh.

      anteiliger Anstieg

      Funktion: inc

      Berechnung:

      (letzter Wert - zurückliegender Wert)/zurückliegender Wert

      Bsp.:

      define humidity_warning DOIF ([bathroom:humidiy:inc] > 0.1) (set bath speak open window)

      Wenn die Feuchtigkeit im Bad der letzten beiden Werte um über zehn Prozent ansteigt, dann Anweisung ausführen (inc entspricht inc2).

      Zu beachten:

      Differenz/Änderungsrate/Anstieg werden gebildet, sobald zwei Werte eintreffen. Die intern gesammelten Werte werden nicht dauerhaft gespeichert, nach einem Neustart sind sie gelöscht. Die angegebenen Readings werden intern automatisch für die Auswertung nach Zahlen gefiltert.


      Angaben im Ausführungsteil (gilt nur für FHEM-Modus):   back

      Der Ausführungsteil wird durch runde Klammern eingeleitet. Es werden standardmäßig FHEM-Befehle angegeben, wie z. B.: ...(set lamp on)

      Sollen mehrere FHEM-Befehle ausgeführt werden, so werden sie mit Komma statt mit Semikolon angegeben ... (set lamp1 on, set lamp2 off)

      Falls ein Komma nicht als Trennzeichen zwischen FHEM-Befehlen gelten soll, so muss der FHEM-Ausdruck zusätzlich in runde Klammern gesetzt werden: ...((set lamp1,lamp2 on),set switch on)

      Perlbefehle werden in geschweifte Klammern gesetzt: ... {system ("wmail Peter is at home")}. In diesem Fall können die runden Klammern des Ausführungsteils weggelassen werden.

      Perlcode kann im DEF-Editor wie gewohnt programmiert werden: ...{my $name="Peter"; system ("wmail $name is at home");}

      FHEM-Befehle lassen sich mit Perl-Befehlen kombinieren: ... ({system ("wmail Peter is at home")}, set lamp on)


      Aggregieren von Werten   back

      Mit Hilfe der Aggregationsfunktion können mehrere gleichnamige Readings im System ausgewertet werden, die einem bestimmten Kriterium entsprechen. Sie wird in eckigen Klammern durch ein # (aggregierter Wert) oder @ (Liste der passeden Devices) eingeleitet. Es kann bestimmt werden: die Anzahl der Readings bzw. Devices, Durchschnittswert, Summe, höchster Wert, niedrigster Wert oder eine Liste der dazugehörigen Devices. Die Aggregationsfunktion kann in einer DOIF-Bedingungen, im Ausführungsteil oder mit Hilfe des state-Attributs im Status angegeben werden. In der Bedingung und im Status reagiert sie auf Ereignistrigger. Das lässt sich durch ein vorangestelltes Fragezeichen unterbinden. Die Angabe des Readings kann weggelassen werden, dann wird lediglich nach entsprechenden Devices gesucht.

      Syntax:

      [<function>:<format>:"<regex device>:<regex event>":<reading>|"<regex reading>":<condition>,<default>]

      <function>:

      # Anzahl der betroffenen Devices, der folgende Doppelpunkt kann weggelassen werden
      @ kommagetrennte Liste Devices, der folgende Doppelpunkt kann weggelassen werden
      #sum Summe
      #max höchster Wert
      #min niedrigster Wert
      #average Durchschnitt
      #median Medianwert
      @max Device des höchsten Wertes
      @min Device de niedrigsten Wertes

      <format> d<number> zum Runden des Wertes mit Nachkommastellen, a für Aliasnamen bei Devicelisten, s(<splittoken>) <splittoken> sind Trennzeichen in der Device-Liste

      "<regex Device>:<regex Event>" spezifiziert sowohl die betroffenen Devices, als auch den Ereignistrigger, die Syntax entspricht der DOIF-Syntax für Ereignistrigger.
      Die Angabe <regex Event> ist im Ausführungsteil nicht sinnvoll und sollte weggelassen werden.

      <reading> Reading, welches überprüft werden soll

      "<regex reading>"; Regex für Readings, die überprüft werden sollen

      <condition> Aggregations-Bedingung, $_ ist der Platzhalter für den aktuellen Wert des internen Schleifendurchlaufs, Angaben in Anführungszeichen der Art "<value>" entsprechen $_ =~ "<value>" , hier sind alle Perloperatoren möglich.

      <default> Default-Wert, falls kein Device gefunden wird, entspricht der Syntax des Default-Wertes bei Readingangaben

      <format>, <reading>, <condition>, <default> sind optional

      Syntax-Beispiele im Ausführungteil

      Anzahl der Devices, die mit "window" beginnen:

      [#"^window"]

      Liste der Devices, die mit "window" beginnen, es werden Aliasnamen ausgegeben, falls definiert:

      [@:a"^window"]

      Liste der Devices, die mit "windows" beginnen und ein Reading "myreading" beinhalten:

      [@"^window":myreading]

      Liste der Devices, die mit "windows" beginnen und im Status das Wort "open" vorkommt:

      [@"^window":state:"open"]

      entspricht:

      [@"^window":state:$_ =~ "open"] siehe Aggregationsbedingung.

      Kleinster Wert der Readings des Devices "abfall", in deren Namen "Gruenschnitt" vorkommt und die mit "_days" enden:

      [#min:"^abfall$":"Gruenschnitt.*_days$"]

      Durchschnitt von Readings aller Devices, die mit "T_" beginnen, in deren Reading-Namen "temp" vorkommt:

      [#average:"^T_":"temp"]

      Medianwert (gewichtetes Mittel) von Readings aller Devices, die mit "T_" beginnen, in deren Reading-Namen "temp" vorkommt:

      [#median:"^T_":"temp"]

      In der Aggregationsbedingung können alle in FHEM definierten Perlfunktionen genutzt werden. Folgende Variablen sind vorbelegt und können ebenfalls benutzt werden:

      $_ Inhalt des angegebenen Readings (s.o.)
      $number Nach Zahl gefilteres Reading
      $name Name des Devices
      $TYPE Devices-Typ
      $STATE Status des Devices (nicht das Reading state)
      $room Raum des Devices
      $group Gruppe des Devices

      Beispiele für Definition der Aggregationsbedingung <condition>:

      Liste der Devices, die mit "rooms" enden und im Reading "temperature" einen Wert größer 20 haben:

      [@"rooms$":temperature:$_ > 20]

      Liste der Devices im Raum "livingroom", die mit "rooms" enden und im Reading "temperature" einen Wert größer 20 haben:

      [@"rooms$":temperature:$_ > 20 and $room eq "livingroom"]

      Liste der Devices in der Gruppe "windows", die mit "rooms" enden, deren Status (nicht state-Reading) "on" ist:

      [@"rooms$"::$STATE eq "on" and $group eq "windows"]

      Liste der Devices, deren state-Reading "on" ist und das Attribut disable nicht auf "1" gesetzt ist:

      [@"":state:$_ eq "on" and AttrVal($name,"disable","") ne "1"]


      Aggregationsangaben in der DOIF-Bedingung reagieren zusätzlich auf Ereignistrigger, hier sollte die regex-Angabe für das Device um eine regex-Angabe für das zu triggernde Event erweitert werden.

      Anzahl der Devices, die mit "window" beginnen. Getriggert wird, wenn eine Eventzeile beginnend mit "window" und dem Wort "open" vorkommt:

      [#"^window:open"]

      Anwendungsbeispiele

      Statusanzeige: Offene Fenster:

      define di_window DOIF

      attr di_window state Offene Fenster: [@"^window:open":state:"open","keine"]


      Statusanzeige: Alle Devices, deren Batterie nicht ok ist:

      define di_battery DOIF

      attr di_battery state [@":battery":battery:$_ ne "ok","alle OK"]


      Statusanzeige: Durchschnittstemperatur aller Temperatursensoren in der Gruppe "rooms":

      define di_average_temp DOIF

      attr di_average_temp state [#average:d2:":temperature":temperature:$group eq "rooms"]


      Fenster Status/Meldung:

      define di_Fenster DOIF (["^Window:open"])
      (push "Fenster $DEVICE wurde geöffnet. Es sind folgende Fenster offen: [@"^Window":state:"open"]")
      DOELSEIF ([#"^Window:closed":state:"open"] == 0)
      (push "alle Fenster geschlossen")

      attr di_Fenster do always
      attr di_Fenster cmdState [$SELF:Device] zuletzt geöffnet|alle geschlossen


      Raumtemperatur-Überwachung:

      define di_temp DOIF (([08:00] or [20:00]) and [?#"^Rooms":temperature: $_ < 20] != 0)
      (push "In folgenden Zimmern ist zu kalt [@"^Rooms":temperature:$_ < 20,"keine"]")
      DOELSE
      (push "alle Zimmmer sind warm")

      attr di_temp do always
      attr di_Raumtemp state In folgenden Zimmern ist zu kalt: [@"^Rooms":temperature:$_ < 20,"keine"])


      Es soll beim Öffnen eines Fensters eine Meldung über alle geöffneten Fenster erfolgen:

      define di_Fenster DOIF (["^Window:open"]) (push "Folgende Fenster: [@"^Window:state:"open"] sind geöffnet")
      attr di_Fenster do always

      Wenn im Wohnzimmer eine Lampe ausgeschaltet wird, sollen alle anderen Lampen im Wohnzimmer ebenfalls ausgeschaltet werden, die noch an sind:

      define di_lamp DOIF (["^lamp_livingroom: off"]) (set [@"^lamp_livingroom":state:"on","defaultdummy"] off)
      attr di_lamp DOIF do always


      Mit der Angabe des Default-Wertes "defaultdummy", wird verhindert, dass der set-Befehl eine Fehlermeldung liefert, wenn die Device-Liste leer ist. Der angegebene Default-Dummy muss zuvor definiert werden.

      Für reine Perlangaben gibt es eine entsprechende Perlfunktion namens AggrDoIf(<function>,<regex Device>,<reading>,<condition>,<default>) diese liefert bei der Angabe @ ein Array statt einer Stringliste, dadurch lässt sie sich gut bei foreach-Schleifen verwenden.

      Beispiele

      Perl-Modus:
      define di_Fenster DOIF {if (["^Window:open"]) {foreach (AggrDoIf('@','^windows','state','"open"')) {Log3 "di_Fenster",3,"Das Fenster $_ ist noch offen"}}}

      define di_Temperature DOIF {if (["^room:temperature"]) {foreach (AggrDoIf('@','^room','temperature','$_ < 15')) {Log3 "di_Temperatur",3,"im Zimmer $_ ist zu kalt"}}


      Zeitsteuerung   back

      Zeitangaben in der Bedingung im Format: [HH:MM:SS] oder [HH:MM] oder [Zahl]

      Anwendungsbeispiele:

      Einschalten um 8:00 Uhr, ausschalten um 10:00 Uhr.

      define di_light DOIF ([08:00]) (set switch on) DOELSEIF ([10:00]) (set switch off)

      Perl-Modus:
      define di_light DOIF
      {[08:00];fhem_set"switch on"}
      {[10:00];fhem_set"switch on"}


      Zeitsteuerung mit mehreren Zeitschaltpunkten:

      define di_light DOIF ([08:00] or [10:00] or [20:00]) (set switch on) DOELSEIF ([09:00] or [11:00] or [00:00]) (set switch off)

      Perl-Modus:
      define di_light DOIF
      {if ([08:00] or [10:00] or [20:00]) {fhem_set"switch on"}}
      {if ([09:00] or [11:00] or [00:00]) {fhem_set"switch off"}}



      Relative Zeitangaben   back

      Zeitangaben, die mit Pluszeichen beginnen, werden relativ behandelt, d. h. die angegebene Zeit wird zum aktuellen Zeitpunkt hinzuaddiert.

      Anwendungsbeispiel: Automatisches Speichern der Konfiguration im Stundentakt:

      define di_save DOIF ([+01:00]) (save)
      attr di_save do always


      Perl-Modus:
      define di_save DOIF {[+01:00];fhem"save"}

      Ebenfalls lassen sich relative Angaben in Sekunden angeben. [+01:00] entspricht [+3600];

      Zeitangaben nach Zeitraster ausgerichtet   back

      Das Format lautet: [:MM] MM sind Minutenangaben zwischen 00 und 59.

      Anwendungsbeispiel: Viertelstunden-Gong

      Perl-Modus:
      define di_gong DOIF
      {[:00];system"mplayer /opt/fhem/Sound/BigBen_00.mp3 -volume 90 −really−quiet &"}
      {[:15];system"mplayer /opt/fhem/Sound/BigBen_15.mp3 -volume 90 −really−quiet &"}
      {[:30];system"mplayer /opt/fhem/Sound/BigBen_30.mp3 -volume 90 −really−quiet &"}
      {[:45];system"mplayer /opt/fhem/Sound/BigBen_45.mp3 -volume 90 −really−quiet &"}



      Relative Zeitangaben nach Zeitraster ausgerichtet   back

      Das Format lautet: [+:MM] MM sind Minutenangaben zwischen 00 und 59.

      Anwendungsbeispiel: Gong alle fünfzehn Minuten um XX:00 XX:15 XX:30 XX:45

      define di_gong DOIF ([+:15]) (set Gong_mp3 playTone 1)
      attr di_gong do always


      Perl-Modus:
      define di_gong DOIF {[+:15];fhem_set"Gong_mp3 playTone 1"}


      Zeitangaben nach Zeitraster ausgerichtet alle X Stunden   back

      Format: [+[h]:MM] mit: h sind Stundenangaben zwischen 1 und 23 und MM Minuten zwischen 00 und 59

      Anwendungsbeispiel: Es soll immer fünf Minuten nach einer vollen Stunde alle 2 Stunden eine Pumpe eingeschaltet werden, die Schaltzeiten sind 00:05, 02:05, 04:05 usw.

      define di_gong DOIF ([+[2]:05]) (set pump on-for-timer 300)
      attr di_gong do always


      Perl-Modus:
      define di_gong DOIF {[+[2]:05];fhem_set"pump on-for-timer 300"}


      Wochentagsteuerung   back

      Hinter der Zeitangabe kann ein oder mehrere Wochentage getrennt mit einem Pipezeichen | angegeben werden. Die Syntax lautet:

      [<time>|0123456789X] mit 0 Sonntag, 1 Montag, ... bis 6 Samstag, 7 Wochenende und Feiertage (entspricht $we), 8 Arbeitstag (entspricht !$we),9 Wochenende oder Feiertag morgen (entspricht intern $twe), X Arbeitstag morgen (entspricht intern !$twe)

      alternativ mit Buchstaben-Kürzeln:

      [<time>|So Mo Di Mi Do Fr Sa WE AT MWE MAT] WE entspricht der Ziffer 7, AT der Ziffer 8, MWE der Ziffer 9, MAT dem Buchstaben X

      oder entsprechend mit englischen Bezeichnern:

      [<time>|Su Mo Tu We Th Fr Sa WE WD TWE TWD]

    • Mit Hilfe des Attributes weekdays können beliebige Wochentagbezeichnungen definiert werden.

      Die Syntax lautet:

      weekdays <Bezeichnung für Sonntag>,<Bezeichnung für Montag>,...,<Bezeichnung für Wochenende oder Feiertag>,<Bezeichnung für Arbeitstag>,<Bezeichnung für Wochenende oder Feiertag morgen>,<Bezeichnung für Arbeitstag morgen>

      Beispiel: di_mydoif attr weekdays Son,Mon,Die,Mit,Don,Fre,Sam,Wochenende,Arbeitstag,WochenendeMorgen,ArbeitstagMorgen

      Anwendungsbeispiel: Radio soll am Wochenende und an Feiertagen um 08:30 Uhr eingeschaltet und um 09:30 Uhr ausgeschaltet werden. Am Montag und Mittwoch soll das Radio um 06:30 Uhr eingeschaltet und um 07:30 Uhr ausgeschaltet werden. Hier mit englischen Bezeichnern:

      define di_radio DOIF ([06:30|Mon Wochenende] or [08:30|Wochenende]) (set radio on) DOELSEIF ([07:30|Mon Wochenende] or [09:30|Wochenende]) (set radio off)
      attr di_radio weekdays Son,Mon,Die,Mit,Don,Fre,Sam,Wochenende,Arbeitstag,WochenendeMorgen

      Perl-Modus:
      define di_radio DOIF
      {if ([06:30|Mo We] or [08:30|WE]) {fhem_set"radio on"}}
      {if ([07:30|Mo We] or [09:30|WE]) {fhem_set"radio off"}}


      Bemerkung: Es ist unerheblich wie die definierten Wochenttagbezeichner beim Timer angegeben werden. Sie können mit beliebigen Trennzeichen oder ohne Trennzeichen direkt aneinander angegeben werden.

      Anstatt einer direkten Wochentagangabe, kann ein Status oder Reading in eckigen Klammern angegeben werden. Dieser muss zum Triggerzeitpunkt mit der gewünschten Angabe für Wochentage, wie oben definiert, belegt sein.

      Anwendungsbeispiel: Der Wochentag soll über einen Dummy bestimmt werden.

      define dummy myweekday
      set myweekday monday wednesday thursday weekend

      define di_radio DOIF ([06:30|[myweekday]]) (set radio on) DOELSEIF ([07:30|[myweekday]]) (set radio off)
      attr di_radio weekdays sunday,monday,thuesday,wednesday,thursday,friday,saturday,weekend,workdays,weekendtomorrow


      Perl-Modus:
      define di_radio DOIF
      {[06:30|[myweekday]];fhem_set"radio on"}
      {[07:30|[myweekday]];fhem_set"radio off"}

      attr di_radio weekdays sunday,monday,thuesday,wednesday,thursday,friday,saturday,weekend,workdays,weekendtomorrow



    • Zeitsteuerung mit Zeitintervallen   back

      Zeitintervalle werden im Format angegeben: [<begin>-<end>], für <begin> bzw. <end> wird das gleiche Zeitformat verwendet, wie bei einzelnen Zeitangaben. Getriggert wird das Modul zum Zeitpunkt <begin> und zum Zeitpunkt <end>. Soll ein Zeitintervall ohne Zeittrigger lediglich zur Abfrage dienen, so muss hinter der eckigen Klammer ein Fragezeichen angegeben werden (siehe Beispiele weiter unten). Das Zeitintervall ist als logischer Ausdruck ab dem Zeitpunkt <begin> wahr und ab dem Zeitpunkt <end> nicht mehr wahr.

      Anwendungsbeispiele:

      Radio soll zwischen 8:00 und 10:00 Uhr an sein:

      define di_radio DOIF ([08:00-10:00]) (set radio on) DOELSE (set radio off)

      Perl-Modus:
      define di_radio DOIF {if ([08:00-10:00]) {fhem_set"radio on"} else {fhem_set"radio off"}}

      mit mehreren Zeitintervallen:

      define di_radio DOIF ([08:00-10:00] or [20:00-22:00]) (set radio on) DOELSE (set radio off)

      Perl-Modus:
      define di_radio DOIF {if ([08:00-10:00] or [20:00-22:00]) {fhem_set"radio on"} else {fhem_set"radio off"}}

      Nur montags, mittwochs und freitags:

      define di_radio DOIF ([08:00-10:00|135]) (set radio on) DOELSE (set radio off)

      Nur am Wochenende bzw. an Feiertagen lt. holiday-Datei (7 entspricht $we):

      define di_radio DOIF ([08:00-10:00|7]) (set radio on) DOELSE (set radio off)

      Zeitintervalle über Mitternacht:

      define di_light DOIF ([22:00-07:00]) (set light on) DOELSE (set light off)

      Zeitintervalle über mehrere Tage müssen als Zeitpunkte angegeben werden.

      Einschalten am Freitag ausschalten am Montag:

      define di_light DOIF ([22:00|5]) (set light on) DOELSEIF ([10:00|1]) (set light off)

      Perl-Modus:
      define di_light DOIF
      {[22:00|5];fhem_set"light on"}
      {[10:00|1];fhem_set"light off"}


      Schalten mit Zeitfunktionen, hier: bei Sonnenaufgang und Sonnenuntergang:

      define di_light DOIF ([{sunrise(900,"06:00","08:00")}]) (set outdoorlight off) DOELSEIF ([{sunset(900,"17:00","21:00")}]) (set outdoorlight on)

      Perl-Modus:
      define di_light DOIF
      {[{sunrise(900,"06:00","08:00")}];fhem_set"outdoorlight off"}
      {[{sunset(900,"17:00","21:00")}];fhem_set"outdoorlight on"}



      Indirekte Zeitangaben   back

      Statt fester Zeitangaben kann ein Status oder ein Reading angegeben werden, welches eine Zeitangabe beinhaltet. Die Angaben werden in doppelte eckige Klammern gesetzt. Eine Änderung der Zeit im angegebenen Reading bzw. Status führt zu sofortiger Neuberechnung der Zeit im DOIF.

      Syntax:

      [[<Device>:<Reading>]] bzw. bei Statusangabe [[<Device>]]

      Bei relativen Zeitangaben (hier wird die Zeitangabe zu aktueller Zeit hinzuaddiert):

      [+[<Device>:<Reading>]] bzw. bei Statusangabe [+[<Device>]]

      Anwendungsbeispiel: Lampe soll zu einer bestimmten Zeit eingeschaltet werden. Die Zeit soll über den Dummy time einstellbar sein:

      define time dummy
      set time 08:00

      define di_time DOIF ([[time]])(set lamp on)
      attr di_time do always


      Perl-Modus:
      define di_time DOIF {[[time]];fhem_set"lamp on"}

      Die indirekte Angabe kann ebenfalls mit einer Zeitfunktion belegt werden. Z. B.

      set time {sunset()}

      Das Dummy kann auch mit einer Sekundenzahl belegt werden, oder als relative Zeit angegeben werden, hier z. B. schalten alle 300 Sekunden:

      define time dummy
      set time 300

      define di_time DOIF ([+[time]])(save)
      attr di_time do always


      Perl-Modus:
      define di_time DOIF {[+[time]];fhem"save"}

      Ebenfalls funktionieren indirekte Zeitangaben mit Zeitintervallen. Hier wird die Ein- und Ausschaltzeit jeweils über einen Dummy bestimmt:

      define begin dummy
      set begin 08:00

      define end dummy
      set end 10:00

      define di_time DOIF ([[begin]-[end]]) (set radio on) DOELSE (set radio off)


      Perl-Modus:
      define di_time DOIF {if([[begin]-[end]]) {fhem_set"radio on"} else {fhem_set"radio off"}}

      Indirekte Zeitangaben können auch als Übergabeparameter für Zeitfunktionen, wie z. B. sunset oder sunrise übergeben werden:

      define di_time DOIF ([{sunrise(0,"[begin]","09:00")}-{sunset(0,"18:00","[end]")}]) (set lamp off) DOELSE (set lamp on)

      Bei einer Änderung des angegebenen Status oder Readings wird die geänderte Zeit sofort im Modul aktualisiert.

      Angabe eines Readings als Zeitangabe. Beispiel: Schalten anhand eines Twilight-Readings:

      define di_time DOIF ([[myTwilight:ss_weather]])(set lamp on)
      attr di_timer do always

      Perl-Modus:
      define di_time DOIF {[[myTwilight:ss_weather]];fhem_set"lamp on"}

      Indirekte Zeitangaben lassen sich mit Wochentagangaben kombinieren, z. B.:

      define di_time DOIF ([[begin]-[end]|7]) (set radio on) DOELSE (set radio off)

      Perl-Modus:
      define di_time DOIF {if ([[begin]-[end]|7]) {fhem_set"radio on"} else {fhem_set"radio off"}}


      Zeitsteuerung mit Zeitberechnung   back

      Zeitberechnungen werden innerhalb der eckigen Klammern zusätzlich in runde Klammern gesetzt. Die berechneten Triggerzeiten können absolut oder relativ mit einem Pluszeichen vor den runden Klammern angegeben werden. Es können beliebige Ausdrücke der Form HH:MM und Angaben in Sekunden als ganze Zahl in Perl-Rechenoperationen kombiniert werden. Perlfunktionen, wie z. B. sunset(), die eine Zeitangabe in HH:MM liefern, werden in geschweifte Klammern gesetzt. Zeiten im Format HH:MM bzw. Status oder Readings, die Zeitangaben in dieser Form beinhalten werden in eckige Klammern gesetzt.

      Anwendungsbeispiele:

      Lampe wird nach Sonnenuntergang zwischen 900 und 1500 (900+600) Sekunden zufällig zeitverzögert eingeschaltet. Ausgeschaltet wird die Lampe nach 23:00 Uhr um bis zu 600 Sekunden zufällig verzögert:

      define di_light DOIF ([({sunset()}+900+int(rand(600)))])
        (set lamp on)
      DOELSEIF ([([23:00]+int(rand(600)))])
        (set lamp off)

      Perl-Modus:
      define di_light DOIF
      {[({sunset()}+900+int(rand(600)))];fhem_set"lamp on"}
      {[([23:00]+int(rand(600)))];;fhem_set"lamp off"}


      Zeitberechnung können ebenfalls in Zeitintervallen genutzt werden.

      Licht soll eine Stunde vor gegebener Zeit eingeschaltet werden und eine Stunde danach wieder ausgehen:

      define Fixtime dummy
      set Fixtime 20:00

      define di_light DOIF ([([Fixtime]-[01:00]) - ([Fixtime]+[01:00])])
        (set lampe on)
      DOELSE
        (set lampe off)

      Hier das Gleiche wie oben, zusätzlich mit Zufallsverzögerung von 300 Sekunden und nur an Wochenenden:

      define di_light DOIF ([([Fixtime]-[01:00]-int(rand(300))) - ([Fixtime]+[01:00]+int(rand(300)))]|7])
        (set lampe on)
      DOELSE
        (set lampe off)

      Ein Änderung des Dummys Fixtime z. B. durch "set Fixtime ...", führt zur sofortiger Neuberechnung der Timer im DOIF-Modul.

      Für die Zeitberechnung wird der Perlinterpreter benutzt, daher sind für die Berechnung der Zeit keine Grenzen gesetzt.


      Intervall-Timer   back

      Syntax:

      [<begin>-<end>,<relative timer>]

      Innerhalb des definierten Zeitintervalls, triggert der definierte Timer. Außerhalb des Zeitintervall wird kein Timer gesetzt.

      Anwendungsbeispiel: Zwischen 08:00 und 22:00 Uhr soll eine Pumpe jede halbe Stunde für fünf Minuten eingeschaltet werden:

      define di_pump DOIF ([08:00-22:00,+:30])(set pump on-for-timer 300)
      attr di_pump do always


      Perl-Modus:
      define di_pump DOIF {[08:00-22:00,+:30];fhem_set"pump on-for-timer 300"}

      Es wird um 08:00, 08:30, 09:00, ..., 21:30 Uhr die Anweisung ausgeführt. Um 22:00 wird das letzte Mal getriggert, das Zeitintervall ist zu diesem Zeitpunkt nicht mehr wahr.

      Es lassen sich ebenso indirekte Timer, Timer-Funktionen, Zeitberechnungen sowie Wochentage miteinander kombinieren.

      define di_rand_lamp DOIF ([{sunset()}-[end:state],+(rand(600)+900)|Sa So])(set lamp on-for-timer 300)
      attr di_rand_lamp do always


      Perl-Modus:
      define di_rand_lamp DOIF {[{sunset()}-[end:state],+(rand(600)+900)|Sa So];fhem_set"lamp on-for-timer 300"}


      Kombination von Ereignis- und Zeitsteuerung mit logischen Abfragen   back

      Anwendungsbeispiel: Lampe soll ab 6:00 Uhr angehen, wenn es dunkel ist und wieder ausgehen, wenn es hell wird, spätestens aber um 9:00 Uhr:

      define di_lamp DOIF ([06:00-09:00] and [sensor:brightness] < 40) (set lamp on) DOELSE (set lamp off)

      Anwendungsbeispiel: Rollläden sollen an Arbeitstagen nach 6:25 Uhr hochfahren, wenn es hell wird, am Wochenende erst um 9:00 Uhr, herunter sollen sie wieder, wenn es dunkel wird:

      define di_shutters DOIF ([sensor:brightness]>100 and [06:25-09:00|8] or [09:00|7]) (set shutters up) DOELSEIF ([sensor:brightness]<50) (set shutters down)


      Zeitintervalle, Readings und Status ohne Trigger   back

      Angaben in eckigen Klammern, die mit einem Fragezeichen beginnen, führen zu keiner Triggerung des Moduls, sie dienen lediglich der Abfrage.

      Anwendungsbeispiel: Licht soll zwischen 06:00 und 10:00 angehen, getriggert wird nur durch den Taster nicht um 06:00 bzw. 10:00 Uhr und nicht durch das Device Home

      define di_motion DOIF ([?06:00-10:00] and [button] and [?Home] eq "present")(set lamp on-for-timer 600)
      attr di_motion do always


      Perl-Modus:
      define di_motion DOIF {if ([?06:00-10:00] and [button] and [?Home] eq "present"){fhem_set"lamp on-for-timer 600"}}


      Nutzung von Readings, Status oder Internals im Ausführungsteil   back

      Anwendungsbeispiel: Wenn ein Taster betätigt wird, soll Lampe1 mit dem aktuellen Zustand der Lampe2 geschaltet werden:

      define di_button DOIF ([button]) (set lamp1 [lamp2])
      attr di_button do always


      Anwendungsbeispiel: Benachrichtigung beim Auslösen eines Alarms durch Öffnen eines Fensters:

      define di_pushmsg DOIF ([window] eq "open" and [alarm] eq "armed") (set Pushover msg 'alarm' 'open windows [window:LastDevice]' '' 2 'persistent' 30 3600)


      Berechnungen im Ausführungsteil   back

      Berechnungen können in geschweiften Klammern erfolgen. Aus Kompatibilitätsgründen, muss die Berechnung unmittelbar mit einer runden Klammer beginnen. Innerhalb der Perlberechnung können Readings, Status oder Internals wie gewohnt in eckigen Klammern angegeben werden.

      Anwendungsbeispiel: Es soll ein Vorgabewert aus zwei verschiedenen Readings ermittelt werden und an das set Kommando übergeben werden:

      define di_average DOIF ([08:00]) (set TH_Modul desired {([default:temperature]+[outdoor:temperature])/2})
      attr di_average do always


    • Ersatzwert für nicht existierende Readings oder Status   back

      Es kommt immer wieder vor, dass in der Definition des DOIF-Moduls angegebene Readings oder Status zur Laufzeit nicht existieren. Der Wert ist dann leer. Bei der Definition von Status oder Readings kann für diesen Fall ein Vorgabewert oder sogar eine Perlberechnung am Ende des Ausdrucks kommagetrennt angegeben werden.

      Syntax:

      [<device>,<default value>]
      oder
      [<device>:<reading>,<default value>]

      Beispiele:

      [lamp,"off"]
      [room:temperatur,20]
      [brightness,3*[myvalue]+2]
      [heating,AttrVal("mydevice","myattr","")]
      [[mytime,"10:00"]]

      Möchte man stattdessen einen bestimmten Wert global für das gesamte Modul definieren, so lässt sich das über das Attribut notexist bewerkstelligen. Ein angegebener Default-Wert beim Status oder beim Reading übersteuert das "notexist"-Attribut.

      Syntax: attr <DOIF-module> notexist "<default value>"

    • Verzögerungen   back

      Verzögerungen für die Ausführung von Kommandos werden pro Befehlsfolge über das Attribut "wait" definiert. Syntax:

      attr <DOIF-module> wait <Sekunden für Befehlsfolge des ersten DO-Falls>:<Sekunden für Befehlsfolge des zweiten DO-Falls>:...

      Sollen Verzögerungen innerhalb von Befehlsfolgen stattfinden, so müssen diese Kommandos in eigene Klammern gesetzt werden, das Modul arbeitet dann mit Zwischenzuständen.

      Beispiel: Bei einer Befehlssequenz, hier: (set lamp1 on, set lamp2 on), soll vor dem Schalten von lamp2 eine Verzögerung von einer Sekunde stattfinden. Die Befehlsfolge muss zunächst mit Hilfe von Klammerblöcke in eine Befehlssequenz aufgespalten werden: (set lamp1 on)(set lamp2 on). Nun kann mit dem wait-Attribut nicht nur für den Beginn der Sequenz, sondern für jeden Klammerblock eine Verzögerung, getrennt mit Komma, definieren werden, hier also: wait 0,1. Damit wird lamp1 sofort, lamp2 eine Sekunde danach geschaltet. Die Verzögerungszeit bezieht sich immer auf den vorherigen Befehl.

      Beispieldefinition bei mehreren DO-Blöcken mit Befehlssequenzen:

      DOIF (Bedingung1)
      (set ...) ## erster Befehl der ersten Sequenz soll um eine Sekunde verzögert werden
      (set ...) ## zweiter Befehl der ersten Sequenz soll um 2 Sekunden nach dem ersten Befehl verzögert werden
      DOELSEIF (Bedingung2)
      (set ...) ## erster Befehl der zweiten Sequenz soll um 3 Sekunden verzögert werden
      (set ...) ## zweiter Befehl der zweiten Sequenz soll um 0,5 Sekunden nach dem ersten Befehl verzögert werden

      attr <DOIF-module> wait 1,2:3,0.5


      Das Aufspalten einer kommagetrennten Befehlskette in eine Befehlssequenz, wie im obigen Beispiel, sollte nicht vorgenommen werden, wenn keine Verzögerungen zwischen den Befehlen benötigt werden. Denn bei einer Befehlssequenz werden Zwischenzustände cmd1_1, cmd1_2 usw. generiert, die Events erzeugen und damit unnötig FHEM-Zeit kosten.

      Für Kommandos, die nicht verzögert werden sollen, werden Sekundenangaben ausgelassen oder auf Null gesetzt. Die Verzögerungen werden nur auf Events angewandt und nicht auf Zeitsteuerung. Eine bereits ausgelöste Verzögerung wird zurückgesetzt, wenn während der Wartezeit ein Kommando eines anderen DO-Falls, ausgelöst durch ein neues Ereignis, ausgeführt werden soll.

      Statt Sekundenangaben können ebenfalls Status, Readings in eckigen Klammern, Perl-Funktionen sowie Perl-Berechnung angegeben werden. Dabei werden die Trennzeichen Komma und Doppelpunkt in Klammern geschützt und gelten dort nicht als Trennzeichen. Diese Angaben können ebenfalls bei folgenden Attributen gemacht werden: cmdpause, repeatcmd, repeatsame, waitsame, waitdel

      Beispiel:

      attr my_doif wait 1:[mydummy:state]*3:rand(600)+100,Attr("mydevice","myattr","")

    • Verzögerungen von Timern   back

      Verzögerungen können mit Hilfe des Attributs timerWithWait auf Timer ausgeweitet werden.

      Anwendungsbeispiel: Lampe soll zufällig nach Sonnenuntergang verzögert werden.

      define di_rand_sunset DOIF ([{sunset()}])(set lamp on)
      attr di_rand_sunset wait rand(1200)
      attr di_rand_sunset timerWithWait 1
      attr di_rand_sunset do always


      Anwendungsbeispiel: Benachrichtigung "Waschmaschine fertig", wenn Verbrauch mindestens 5 Minuten unter 2 Watt (Perl-Code wird in geschweifte Klammern gesetzt):

      define di_washer DOIF ([power:watt]<2) ({system("wmail washer finished")})
      attr di_washer wait 300


      Eine erneute Benachrichtigung wird erst wieder ausgelöst, wenn zwischendurch der Verbrauch über 2 Watt angestiegen war.

      Anwendungsbeispiel: Rollladen um 20 Minuten zeitverzögert bei Sonne runter- bzw. hochfahren (wenn der Zustand der Sonne wechselt, wird die Verzögerungszeit zurückgesetzt):

      define di_shutters DOIF ([Sun] eq "on") (set shutters down) DOELSE (set shutters up)
      attr di_shutters wait 1200:1200


      Anwendungsbeispiel: Beschattungssteuerung abhängig von der Temperatur. Der Rollladen soll runter von 11:00 Uhr bis Sonnenuntergang, wenn die Temperatur über 26 Grad ist. Temperaturschwankungen um 26 Grad werden mit Hilfe des wait-Attributes durch eine 15 minutige Verzögerung ausgeglichen.

      define di_shutters DOIF ([sensor:temperature] > 26 and [11:00-{sunset_abs()}] (set shutters down) DOELSE (set shutters up)
      attr di_shutters wait 900:900


      Anwendungsbeispiel: Belüftung in Kombination mit einem Lichtschalter mit Nachlaufsteuerung. Der Lüfter soll angehen, wenn das Licht mindestens 2 Minuten lang brennt oder die Luftfeuchtigkeit 65 % überschreitet, der Lüfter soll ausgehen, drei Minuten nachdem die Luftfeuchtigkeit unter 60 % fällt und das Licht aus ist bzw. das Licht ausgeht und die Luftfeuchtigkeit unter 60% ist. Definitionen lassen sich über die Weboberfläche (DEF-Eingabebereich) übersichtlich gestalten:

      define di_fan DOIF ([light] eq "on")
        (set fan on)
      DOELSEIF ([sensor:humidity]>65)
        (set fan on)
      DOELSEIF ([light] eq "off" and [sensor:humidity]<60)
        (set fan off)

      attr di_fan wait 120:0:180


    • Zurücksetzen des Waittimers für das gleiche Kommando   back

      Im Gegensatz zu do always wird ein Waittimer mit dem Attribut do resetwait auch dann zurückgesetzt, wenn die gleiche Bedingung wiederholt wahr wird.
      Damit können Ereignisse ausgelöst werden, wenn etwas innerhalb einer Zeitspanne nicht passiert.
      Das Attribut do resetwait impliziert eine beliebige Wiederholung wie do always. Diese lässt sich allerdings mit dem Attribut repeatsame einschränken s. u.

      Anwendungsbeispiel: Meldung beim Ausbleiben eines Events

      define di_push DOIF ([Tempsensor])(set pushmsg "sensor failed again")
      attr di_push wait 1800
      attr di_push do resetwait


    • Wiederholung von Befehlsausführung   back

      Wiederholungen der Ausführung von Kommandos werden pro Befehlsfolge über das Attribut repeatcmd definiert. Syntax:

      attr <DOIF-modul> repeatcmd <Sekunden für Befehlsfolge des ersten DO-Falls>:<Sekunden für Befehlsfolge des zweiten DO-Falls>:...

      Statt Sekundenangaben können ebenfalls Status in eckigen Klammen oder Perlbefehle angegeben werden.

      Die Wiederholung findet so lange statt, bis der Zustand des Moduls in einen anderen DO-Fall wechselt.

      Anwendungsbeispiel: Nach dem Eintreffen des Ereignisses wird die push-Meldung stündlich wiederholt, bis Frost ungleich "on" ist.

      define di_push DOIF ([frost] eq "on")(set pushmsg "danger of frost")
      attr di_push repeatcmd 3600


      Eine Begrenzung der Wiederholungen kann mit dem Attribut repeatsame vorgenommen werden
      attr di_push repeatsame 3

      Ebenso lässt sich das repeatcmd-Attribut mit Zeitangaben kombinieren.

      Anwendungsbeispiel: Wiederholung ab einem Zeitpunkt

      define di_alarm_clock DOIF ([08:00])(set alarm_clock on)
      attr di_alarm_clock repeatcmd 300
      attr di_alarm_clock repeatsame 3
      attr di_alarm_clock do always


      Ab 8:00 Uhr wird 3 mal der Weckton jeweils nach 5 Minuten wiederholt.

      Anwendungsbeispiel: Warmwasserzirkulation

      define di_pump_circ DOIF ([05:00-22:00])(set pump on)(set pump off) DOELSE (set pump off)
      attr di_pump_circ wait 0,300
      attr di_pump_circ repeatcmd 3600


      Zwischen 5:00 und 22:00 Uhr läuft die Zirkulationspumpe alle 60 Minuten jeweils 5 Minuten lang.

      Anwendungsbeispiel: Anwesenheitssimulation

      define di_presence_simulation DOIF ([19:00-00:00])(set lamp on-for-timer {(int(rand(1800)+300))}) DOELSE (set lamp off)
      attr di_presence_simulation repeatcmd rand(3600)+2200


    • Zwangspause für das Ausführen eines Kommandos seit der letzten Zustandsänderung   back

      Mit dem Attribut cmdpause <Sekunden für cmd_1>:<Sekunden für cmd_2>:... wird die Zeitspanne in Sekunden angegeben für eine Zwangspause seit der letzten Zustandsänderung. In der angegebenen Zeitspanne wird ein Kommando nicht ausgeführt, auch wenn die dazugehörige Bedingung wahr wird.

      Anwendungsbeispiel: Meldung über Frostgefahr alle 60 Minuten

      define di_frost DOIF ([outdoor:temperature] < 0) (set pushmsg "danger of frost")
      attr di_frost cmdpause 3600
      attr di_frost do always


    • Begrenzung von Wiederholungen eines Kommandos   back

      Mit dem Attribut repeatsame <maximale Anzahl von cmd_1>:<maximale Anzahl von cmd_2>:... wird die maximale Anzahl hintereinander folgenden Ausführungen festgelegt.

      Anwendungsbeispiel: Die Meldung soll maximal dreimal erfolgen mit einer Pause von mindestens 10 Minuten

      define di_washer DOIF ([Watt]<2) (set pushmeldung "washer finished")
      attr di_washer repeatsame 3
      attr di_washer cmdpause 600


      Das Attribut repeatsame lässt sich mit do always oder do resetwait kombinieren. Wenn die maximale Anzahl für ein Kommando ausgelassen oder auf Null gesetzt wird, so gilt für dieses Kommando der Defaultwert "einmalige Wiederholung"; in Kombination mit do always bzw. do resetwait gilt für dieses Kommando "beliebige Wiederholung".

      Anwendungsbeispiel: cmd_1 soll beliebig oft wiederholt werden, cmd_2 maximal zweimal

      attr di_repeat repeatsame 0:2
      attr di_repeat do always


    • Ausführung eines Kommandos nach einer Wiederholung einer Bedingung   back

      Mit dem Attribut waitsame <Zeitspanne in Sekunden für cmd_1>:<Zeitspanne in Sekunden für das cmd_2>:... wird ein Kommando erst dann ausgeführt, wenn innerhalb einer definierten Zeitspanne die entsprechende Bedingung zweimal hintereinander wahr wird.
      Für Kommandos, für die waitsame nicht gelten soll, werden die entsprechenden Sekundenangaben ausgelassen oder auf Null gesetzt.

      Anwendungsbeispiel: Rollladen soll hoch, wenn innerhalb einer Zeitspanne von 2 Sekunden ein Taster betätigt wird

      define di_shuttersup DOIF ([Button])(set shutters up)
      attr di_shuttersup waitsame 2
      attr di_shuttersup do always


    • Löschen des Waittimers nach einer Wiederholung einer Bedingung   back

      Das Gegenstück zum repeatsame-Attribut ist das Attribut waitdel. Die Syntax mit Sekundenangaben pro Kommando entspricht der, des wait-Attributs. Im Gegensatz zum wait-Attribut, wird ein laufender Timer gelöscht, falls eine Bedingung wiederholt wahr wird. Sekundenangaben können pro Kommando ausgelassen oder auf Null gesetzt werden.

      Anwendungsbeispiel: Rollladen soll herunter, wenn ein Taster innerhalb von zwei Sekunden nicht wiederholt wird

      define di_shuttersdown DOIF ([Button])(set shutters down)
      attr di_shuttersdown waitdel 2
      attr di_shuttersdown do always


      "di_shuttersdown" kann nicht mit dem vorherigen Anwendungsbeispiel "di_shuttersup" innerhalb eines DOIF-Moduls kombiniert werden, da in beiden Fällen die gleiche Bedingung vorkommt.

      Die Attribute wait und waitdel lassen sich für verschiedene Kommandos kombinieren. Falls das Attribut für ein Kommando nicht gesetzt werden soll, kann die entsprechende Sekundenzahl ausgelassen oder eine Null angegeben werden.

      Beispiel: Für cmd_1 soll wait gelten, für cmd_2 waitdel

      attr di_cmd wait 2:0
      attr di_cmd waitdel 0:2


    • Readingauswertung bei jedem Event des Devices   back

      Bei Angaben der Art [<Device>:<Reading>] wird das Modul getriggert, wenn ein Ereignis zum angegebenen Device und Reading kommt. Soll das Modul, wie bei Statusangaben der Art [<Device>], auf alle Ereignisse des Devices reagieren, so muss das Attribut auf Null gesetzt werden.

      Bemerkung: In früheren Versionen des Moduls war checkReadingEvent 0 die Voreinstellung des Moduls. Da die aktuelle Voreinstellung des Moduls checkReadingEvent 1 ist, hat das Setzen von checkReadingEvent 1 keine weitere Funktion mehr.

    • Eindeutige Statuserkennung   back

      Bei Änderungen des Readings state wird in FHEM standardmäßig, im Gegensatz zu allen anderen Readings, der Readingname hier: "state: " im Event nicht vorangestellt. Möchte man eindeutig eine Statusänderung eines Moduls erkennen, so lässt sich das mit dem Attribut addStateEvent bewerksteligen. Bei Statusänderungen eines Devices wird bei der Angabe des Attributes addStateEvent im Event "state: " vorangestellt, darauf kann man dann gezielt im DOIF-Modul triggern.

      Beispiel:

      define di_lamp ([FB:"^state: on$"]) (set lamp on)
      attr di_lamp do always
      attr di_lamp addStateEvent


    • Triggerung durch selbst ausgelöste Events   back

      Standardmäßig unterbindet das DOIF-Modul Selbsttriggerung. D. h. das Modul reagiert nicht auf Events, die es selbst direkt oder indirekt auslöst. Dadurch werden Endlosschleifen verhindert. Wenn das Attribut selftrigger wait gesetzt ist, kann das DOIF-Modul auf selbst ausgelöste Events reagieren. Dazu müssen die entsprchenden Kommandos mit wait verzögert werden. Bei der Angabe selftrigger all reagiert das Modul grundsätzlich alle selbst ausgelösten Trigger.

      Zu beachten ist, dass der Zustand des Moduls erst nach der Ausführung des Befehls gesetzt wird, dadurch wird die Zustandsverwaltung (ohne do always) ausgehebelt. Die Auswertung des eigenen Zustands z. B. über [$SELF:cmd] funktioniert dagegen korrekt, weil dieser immer bei der eigenen Triggerung bereits gesetzt ist. Bei der Verwendung des Attributes selftrigger all sollte beachtet werden, dass bereits in der zweiten Rekursion, wenn ein Befehl nicht durch wait verzögert wird, FHEM eine weitere Triggerung unterbindet, um Endlosschleifen zu verhindern.

    • Setzen der Timer mit Event   back

      Wenn das Attribut timerevent ungleich Null gesetzt ist, wird beim Setzen der Timer im DOIF-Modul ein Event erzeugt. Das kann z. B. bei FHEM2FHEM nützlich sein, um die Timer-Readings zeitnah zu aktualisieren.

    • Zeitspanne eines Readings seit der letzten Änderung   back

      Bei Readingangaben kann die Zeitspanne mit [<Device>:<Reading>:sec] in Sekunden seit der letzten Änderung bestimmt werden.

      Anwendungsbeispiel: Überwachung eines Temperatursensors

      define di_monitor DOIF ([+01:00] and [?sensor:temperature:sec]>3600)(set pushbullet message sensor failed)
      attr di_monitor do always


      Wenn der Temperatursensor seit über einer Stunde keinen Temperaturwert geliefert hat, dann soll eine Nachricht erfolgen.

    • Alle Bedingungen prüfen   back

      Bei der Abarbeitung der Bedingungen, werden nur die Bedingungen überprüft, die zum ausgelösten Event das dazughörige Device bzw. die dazugehörige Triggerzeit beinhalten. Mit dem Attribut checkall lässt sich das Verhalten so verändern, dass bei einem Event-Trigger auch Bedingungen geprüft werden, die das triggernde Device nicht beinhalten. Folgende Parameter können angegeben werden:

      checkall event Es werden alle Bedingungen geprüft, wenn ein Event-Trigger auslöst.
      checkall timer Es werden alle Bedingungen geprüft, wenn ein Timer-Trigger auslöst.
      checkall all   Es werden grundsätzlich alle Bedingungen geprüft.

      Zu beachten ist, dass bei einer wahren Bedingung die dazugehörigen Befehle ausgeführt werden und die Abarbeitung immer beendet wird - es wird also grundsätzlich immer nur ein Befehlszweig ausgeführt und niemals mehrere.

    • Darstellungselement mit Eingabemöglichkeit im Frontend und Schaltfunktion   back

      Die unter Dummy beschriebenen Attribute readingList und setList stehen auch im DOIF zur Verfügung. Damit wird erreicht, dass DOIF im Web-Frontend als Eingabeelement mit Schaltfunktion dienen kann. Zusätzliche Dummys sind nicht mehr erforderlich. Es können im Attribut setList, die in FHEMWEB angegebenen Modifier des Attributs widgetOverride verwendet werden.

      Anwendungsbeispiel: Eine Schaltuhr mit time-Widget für die Ein- u. Ausschaltzeiten und der Möglichkeit über eine Auswahlliste manuell ein und aus zu schalten.

      define time_switch DOIF (["$SELF:mybutton: on"] or [[$SELF:mybegin,"00:00"]])
        (set lamp on)
      DOELSEIF (["$SELF:mybutton: off"] or [[$SELF:myend,"00:00"]])
        (set lamp off)

      attr time_switch cmdState on|off
      attr time_switch readingList mybutton mybegin myend
      attr time_switch setList mybutton:on,off mybegin:time myend:time
      attr time_switch webCmd mybutton:mybegin:myend


      Anwendungsbeispiel: Ausführung von Befehlen abhängig einer Auswahl ohne Zusatzreading

      define di_web DOIF ([$SELF:"myInput first"]) (do something) DOELSEIF ([$SELF:"myInput second"]) (do something else)

      attr di_web setList myInput:first,second


      Links
      readingList
      setList
      webCmd
      webCmdLabel
      widgetOverride
      weiterführendes Beispiel für Tablet-UI
      benutzerdefinierte Readings
      Bedingungsloses Ausführen von Befehlen

    • uiTable, DOIF Web-Interface   back

      Mit dem Attribut uiTable kann innerhalb eines DOIF-Moduls ein Web-Interface zur Visualisierung und Steuerung von Geräten in Form einer Tabelle erstellt werden.

      Die Dokumentation zu diesem Attribut wurde mit bebilderten Beispielen im FHEM-Wiki erstellt: uiTable/uiState Dokumentation

      Anwendungsbeispiele für Fortgeschrittene: uiTable für Fortgeschrittene im FHEM-Wiki

    • uiState   back

      Die Syntax des uiState-Attributes entspricht der des uiTable-Attributes. Die definierte Tabelle wird jedoch in der Statuszeile des DOIF-Devices dargestellt.

      Siehe Dokumentation: uiTable/uiState Dokumentation

    • Status des Moduls   back

      Der Status des Moduls wird standardmäßig mit cmd_1, cmd_2, usw., bzw. cmd1_1 cmd1_2 usw. für Befehlssequenzen belegt. Dieser lässt sich über das Attribut "cmdState" mit Komma bzw. | getrennt umdefinieren:

      attr <DOIF-modul> cmdState <Status für cmd1_1>,<Status für cmd1_2>,...| <Status für cmd2_1>,<Status für cmd2_2>,...|...

      Beispiele:

      attr di_lamp cmdState on|off

      Pro Status können ebenfalls Status oder Readings in eckigen Klammern oder Perlfunktionen sowie Berechnungen in Klammern der Form {(...)} angegeben werden.
      Die Trennzeichen Komma und | sind in Klammern und Anführungszeichen geschützt und gelten dort nicht als Trennzeichen.

      Zustände cmd1_1, cmd1 und cmd2 sollen wie folgt umdefiniert werden:

      attr di_mytwilight cmdState [mytwilight:ss_astro], {([mytwilight:twilight_weather]*2+10)}|My attribut is: {(Attr("mydevice","myattr",""))}

      Reine Statusanzeige ohne Ausführung von Befehlen   back

      Der Ausführungsteil kann jeweils ausgelassen werden.

      Anwendungsbeispiel: Aktuelle Außenfeuchtigkeit im Status

      define di_hum DOIF ([outdoor:humidity]>70) DOELSEIF ([outdoor:humidity]>50) DOELSE
      attr di_hum cmdState wet|normal|dry


    • Anpassung des Status mit Hilfe des Attributes state   back

      Es können beliebige Reading und Status oder Internals angegeben werden.

      Anwendungsbeispiel: Aktuelle Außenfeuchtigkeit inkl. Klimazustand (Status des Moduls wurde mit cmdState definiert s. o.)

      attr di_hum state The current humidity is [outdoor:humidity], it is [di_hum]

      Es können beim Attribut state ebenfalls Berechnungen in geschweiften Klammern durchgeführt werden. Aus Kompatibilitätsgründen, muss die Berechnung mit einer runden Klammer beginnen.

      Anwendungsbeispiel: Berechnung des Mittelwertes zweier Readings:

      define di_average DOIF
      attr di_average state Average of the two rooms is {([room1:temperature]+[room2:temperature])/2}


      Der Status wird automatisch aktualisiert, sobald sich eine der Temperaturen ändert

      Da man beliebige Perl-Ausdrücke verwenden kann, lässt sich z. B. der Mittelwert auf eine Stelle mit der Perlfunktion sprintf formatieren:

      attr di_average state Average of the two rooms is {(sprintf("%.1f",([room1:temperature]+[room2:temperature])/2))}

    • Erzeugen berechneter Readings ohne Events   back

      Mit Hilfe des Attributes DOIF_Readings können eigene Readings innerhalb des DOIF definiert werden, auf die man im selben DOIF-Device zugreifen kann. Die Nutzung ist insbesondere dann sinnvoll, wenn zyklisch sendende Sensoren, im Perl-Modus oder mit dem Attribut do always, abgefragt werden. DOIF_Readings-Berechnungen funktionieren ressourcenschonend ohne Erzeugung FHEM-Events nach außen. Änderungen dieser Readings triggern intern das eigene DOIF-Modul, allerdings nur, wenn sich deren Inhalt ändert.

      Syntax

      attr <DOIF-Modul> DOIF_Readings <readingname1>:<definiton>, <readingname2>:<definition>,...

      <definition>: Beliebiger Perlausdruck ergänzt um DOIF-Syntax in eckigen Klammern. Angaben in eckigen Klammern wirken triggernd und aktualisieren das definierte Reading.

      Beispiel

      Perl-Modus:
      define heating DOIF {if ([switch] eq "on" and [$SELF:frost]) {fhem_set"heating on"} else {fhem_set"heating off"}}
      attr heating DOIF_Readings frost:([outdoor:temperature] < 0)


      Das Reading frost triggert nur dann die definierte Abfrage, wenn sich sein Zustand ändert. Dadurch wird sichergestellt, dass ein wiederholtes Schalten der Heizung vermieden wird, obwohl der Sensor outdoor zyklisch sendet.

      Beispiel: Push-Mitteilung über die durchschnittliche Temperatur aller Zimmer

      define di_temp DOIF ([$SELF:temperature]>20) (push "Die Durchschnittstemperatur ist höher als 20 Grad, sie beträgt [$SELF:temperature]")

      attr di_temp DOIF_Readings temperature:[#average:d2:":temperature":temperature]

      Hierbei wird der aufwändig berechnete Durchschnittswert nur einmal berechnet, statt zwei mal, wenn man die Aggregationsfunktion direkt in der Bedingung und im Ausführungsteil angeben würde.

    • Erzeugen berechneter Readings mit Events   back

      Mit Hilfe des Attributes event_Readings können eigene Readings innerhalb des DOIF definiert werden. Dieses Atrribut hat die gleiche Syntax wie DOIF_Readings. Der Unterschied besteht darin, dass event_Readings im Gegensatz zu DOIF_Readings beim Setzen der definierten Readings jedes mal Events produziert. Die Nutzung von event_Readings ist insb. dann sinnvoll, wenn man eventgesteuert außerhalb des Moduls auf die definierten Readings zugreifen möchte.

      Syntax

      attr <DOIF-Modul> event_Readings <readingname1>:<definiton>, <readingname2>:<definition>,...

      <definition>: Beliebiger Perlausdruck ergänzt um DOIF-Syntax in eckigen Klammern. Angaben in eckigen Klammern wirken triggernd und aktualisieren das definierte Reading.

      Bsp.:

      define outdoor DOIF ##

      attr outdoor event_Readings\
      median:[outdoor:temperature:med],\
      average:[outdoor:temperature:avg10],\
      diff: [outdoor:temperature:diff],\
      increase: [outdoor:temperature:inc]


      Auf die definierten Readings des Moduls outdoor (hier: median, average, diff und increase) kann in anderenen Modulen eventgesteuert zugegriffen werden.

      Bemerkung: Sind Events des definierten Readings nicht erforderlich und nur die interne Triggerung des eigenen DOIF-Moduls interessant, dann sollte man das Attribut DOIF_Readings nutzen, da es durch die interne Triggerung des Moduls weniger das System belastet als event_Readings.

    • Vorbelegung des Status mit Initialisierung nach dem Neustart   back

      Mit dem Attribut initialize Wird der Status vorbelegt, mit Initialisierung nach dem Neustart.

      Anwendungsbeispiel: Nach dem Neustart soll der Zustand von di_lamp mit "initialized" vorbelegt werden. Das Reading cmd_nr wird auf 0 gesetzt, damit wird ein Zustandswechsel provoziert, das Modul wird initialisiert - der nächste Trigger führt zum Ausführen eines Kommandos.

      attr di_lamp initialize initialized

      Das ist insb. dann sinnvoll, wenn das System ohne Sicherung der Konfiguration (unvorhergesehen) beendet wurde und nach dem Neustart die zuletzt gespeicherten Zustände des Moduls nicht mit den tatsächlichen übereinstimmen.

    • Ausführen von Befehlsketten beim Starten von FHEM   back

      Beim Hochfahren von FHEM lässt sich eine bestimme Aktion ausführen. Es kann dazu genutzt werden, um sofort nach dem Hochfahren des Systems einen definierten Zustand des Moduls zu erreichen. Dabei wird sichergestellt, dass die angegebenen Befehle erst dann ausgeführt werden, wenn FHEM komplett hochgefahren ist.

      Symtax:

      attr <DOIF-Modul> startup <FHEM-Befehl oder Perl-Befehl in geschweiften Klammern mit DOIF-Syntax>

      Die Syntax entspricht der eines DOIF-Ausführungsteils (runde Klammern brauchen nicht angegeben werden).

      Beispiele:

      attr di_test startup set $SELF cmd_1
      attr di_test startup set $SELF checkall
      attr di_test startup sleep 60;set lamp1 off;set lamp2 off
      attr di_test startup {myfunction()},set lamp1 on,set lamp2 on

    • Deaktivieren des Moduls   back

      Ein DOIF-Modul kann mit Hilfe des Attributes disable, deaktiviert werden. Dabei werden alle Timer und Readings des Moduls gelöscht. Soll das Modul nur vorübergehend deaktiviert werden, so kann das durch set <DOIF-modul> disable geschehen.

    • Set-Befehle

    • Überprüfung aller DOIF-Bedingungen mit Ausführung eines DOIF-Zweiges   back

      Mit dem set-Befehl checkall werden wie beim gleichnamigen Attribut alle DOIF-Bedingung überprüft, sobald eine Bedingung als wahr geprüft ist, wird das dazugehörige Kommando ausgeführt. Zu beachten ist, dass nur der erste wahre DOIF-Zweig ausgeführt wird und dass nur Zustandsabfragen sowie Zeitintervalle sinnvoll überprüft werden können. Ereignisabfragen sowie Zeitpunkt-Definitionen, sind zum Zeitpunkt der checkall-Abfrage normalerweise nicht wahr.

      Beispiel:

      attr di_test startup set $SELF checkall

    • Inaktivieren des Moduls   back

      Mit dem set-Befehl disable wird ein DOIF-Modul inaktiviert. Hierbei bleiben alle Timer aktiv, sie werden aktualisiert - das Modul bleibt im Takt, allerdings werden keine Befehle ausgeführt. Das Modul braucht mehr Rechenzeit, als wenn es komplett über das Attribut disable deaktiviert wird. Ein inaktiver Zustand bleibt nach dem Neustart erhalten. Ein inaktives Modul kann über set-Befehle enable bzw. initialize (im FHEM-Modus) wieder aktiviert werden.

    • Aktivieren des Moduls   back

      Mit dem set-Befehl enable wird ein inaktives DOIF-Modul wieder aktiviert. Im FHEM-Modus: Im Gegensatz zum set-Befehl initialize wird der letzte Zustand vor der Inaktivierung des Moduls wieder hergestellt.

    • Initialisieren des Moduls   back

      mit dem set-Befehl initialize wird ein DOIF-Modul initialisiert. Ein inaktives DOIF-Modul wieder aktiviert. Im Gegensatz zum set-Befehl enable wird der letzte Zustand des Moduls gelöscht, damit wird ein Zustandswechsel herbeigeführt, der nächste Trigger führt zur Ausführung eines wahren DOIF-Zweiges. Diese Eigenschaft kann auch dazu genutzt werden, ein bereits aktives Modul zu initialisieren.

    • Auführen von Befehlszweigen ohne Auswertung der Bedingung   back

      Mit set <DOIF-modul> cmd_<nr> lässt sich ein Befehlszweig (cmd_1, cmd_2, usw.) bedingunglos ausführen.

      Der Befehl hat folgende Eigenschaften:

      1) der set-Befehl übersteuert alle Attribute wie z. B. wait, do, usw.
      2) bei wait wird der erste Timer einer Sequenz ignoriert, alle folgenden Timer einer Sequenz werden jedoch beachtet
      3) ein laufender Wait-Timer wird unterbrochen
      4) beim deaktivierten oder im Modus disable befindlichen Modul wird der set Befehl ignoriert

      Anwendungsbeispiel: Schaltbare Lampe über Fernbedienung und Webinterface

      define di_lamp DOIF ([FB:"on"]) (set lamp on) DOELSEIF ([FB:"off"]) (set lamp off)

      attr di_lamp devStateIcon cmd_1:on:cmd_2 initialized|cmd_2:off:cmd_1

      Mit der Definition des Attributes devStateIcon führt das Anklicken des on/off-Lampensymbol zum Ausführen von set di_lamp cmd_1 bzw. set di_lamp cmd_2 und damit zum Schalten der Lampe.

      Wenn mit cmdState eigene Zuständsbezeichnungen definiert werden, so können diese ebenfalls per set-Befehl angegeben werden.

      define di_lamp DOIF ([FB:"on"]) (set lamp on) DOELSEIF ([FB:"off"]) (set lamp off)

      attr di_lamp cmdState on|off
      attr di_lamp setList on off

      set di_lamp on entspricht hier set di_lamp cmd_1 und set di_lamp off set di_lamp cmd_2
      Zusätzlich führt die Definition von setList zur Ausführung von set di_lamp on/off durch das Anlicken des Lampensymbols wie im vorherigen Beispiel.


    • Weitere Anwendungsbeispiele   back

      Zweipunktregler a la THRESHOLD

      define di_threshold DOIF ([sensor:temperature] < [$SELF:desired]-1)
      (set heating on)
      DOELSEIF ([sensor:temperature]>[$SELF:desired])
      (set heating off)

      attr di_threshold cmdState on|off
      attr di_threshold readingList desired
      attr di_threshold setList desired:17,18,19,20,21,22
      attr di_threshold webCmd desired

      Die Hysterese ist hier mit einem Grad vorgegeben. Die Vorwahltemperatur wird per Dropdown-Auswahl eingestellt.

      on-for-timer

      Die Nachbildung eines on-for-timers lässt sich wie folgt realisieren:

      define di_on_for_timer ([detector:"motion"])
      (set light on)
      (set light off)
      attr di_on_for_timer do resetwait
      attr di_on_for_timer wait 0,30


      Hiermit wird das Licht bei Bewegung eingeschaltet. Dabei wird, solange es brennt, bei jeder Bewegung die Ausschaltzeit neu auf 30 Sekunden gesetzt, "set light on" wird dabei nicht unnötig wiederholt.

      Die Beispiele stellen nur eine kleine Auswahl von möglichen Problemlösungen dar. Da sowohl in der Bedingung (hier ist die komplette Perl-Syntax möglich), als auch im Ausführungsteil, keine Einschränkungen gegeben sind, sind die Möglichkeiten zur Lösung eigener Probleme mit Hilfe des Moduls sehr vielfältig.


      Zu beachten   back

      In jeder Bedingung muss mindestens ein Trigger angegeben sein (Angaben in eckigen Klammern). Die entsprechenden DO-Fälle werden nur dann ausgewertet, wenn auch das entsprechende Event oder Zeit-Trigger ausgelöst wird.

      Zeitangaben der Art:

      define di_light DOIF ([08:00] and [10:00]) (set switch on)

      sind nicht sinnvoll, da diese Bedingung nie wahr sein wird.

      Angaben, bei denen aufgrund der Definition kein Zustandswechsel erfolgen kann z. B.:

      define di_light DOIF ([08:00]) (set switch on)
      attr di_light do always


      müssen mit Attribut do always definiert werden, damit sie nicht nur einmal, sondern jedes mal (hier jeden Tag) ausgeführt werden.

      Bei Devices, die mit Zwischenzuständen arbeiten, insbesondere HM-Komponenten (Zwischenzustand: set_on, set_off), sollte die Definition möglichst genau formuliert werden, um unerwünschte Effekte zu vermeiden:

      statt:

      define di_lamp DOIF ([HM_switch] eq "on") (set lamp on) DOELSE (set lamp off)

      konkreter spezifizieren:

      define di_lamp DOIF ([HM_switch] eq "on") (set lamp on) DOELSEIF ([HM_switch] eq "off") (set lamp off)

      Namenskonvention: Da der Doppelpunkt bei Readingangaben als Trennzeichen gilt, darf er nicht im Namen des Devices vorkommen. In solchen Fällen bitte das Device umbenennen.

      Standardmäßig, ohne das Attribut do always, wird das Wiederholen desselben Kommmandos vom Modul unterbunden. Daher sollte nach Möglichkeit eine Problemlösung mit Hilfe eines und nicht mehrerer DOIF-Module realisiert werden, getreu dem Motto "wer die Lampe einschaltet, soll sie auch wieder ausschalten". Dadurch wird erreicht, dass unnötiges (wiederholendes) Schalten vom Modul unterbunden werden kann, ohne dass sich der Anwender selbst darum kümmern muss.

      Mehrere Bedingungen, die zur Ausführung gleicher Kommandos führen, sollten zusammengefasst werden. Dadurch wird ein unnötiges Schalten aufgrund verschiedener Zustände verhindert.

      Beispiel:

      define di_lamp DOIF ([brightness] eq "off") (set lamp on) DOELSEIF ([19:00]) (set lamp on) DOELSE (set lamp off)

      Hier wird um 19:00 Uhr Lampe eingeschaltet, obwohl sie evtl. vorher schon durch das Ereignis brightness "off" eingeschaltet wurde.

      define di_lamp DOIF ([brightness] eq "off" or [19:00]) (set lamp on) DOELSE (set lamp off)

      Hier passiert das nicht mehr, da die ursprünglichen Zustände cmd_1 und cmd_2 jetzt nur noch einen Zustand cmd_1 darstellen und dieser wird nicht wiederholt.


      Kurzreferenz   back
        ⟨⟩ kennzeichnet optionale Angaben

      Definition
        define <name> DOIF ⟨(<Bedingung>) ⟨⟨(⟨<Befehle>⟩)⟩ ⟨⟨⟨DOELSEIF (<Bedingung>) ⟨(⟨<Befehle>⟩)⟩⟩ ... ⟩⟨DOELSE ⟨(⟨<Befehle>⟩)⟩⟩⟩⟩⟩
        Befehlstrennzeichen ist das Komma (<Befehl>, <Befehl>, ...)
        Befehlssequenzen werden in runde Klammern gesetzt (<Befehlssequenz A>) (<Befehlssequenz B>) ...
        Enthält ein Befehl Kommata, ist er zusätzlich in runde Klammern einzuschliessen (<Befehlsteil a>, <Befehlsteil b> ... )
        Perl-Befehle {<Perl-Befehl>} sind in geschweifte Klammern einzuschliessen
        Jede Berechnung {(<Berechnung>)⟨<Berechnung>⟩} in einem Befehl ist in geschweifte Klammern einzuschliessen und muss mit einer geöffneten runden Klammer beginnen.

      Readings
        Device
        Name des auslösenden Gerätes

        block_<block name>
        Zeigt die Ausführung eines Perl-Blocks an (Perl).

        cmd
        Nr. des letzten ausgeführten Befehls als Dezimalzahl oder 0 nach Initialisierung des DOIF, in der Form <Nr. des Befehlszweiges>⟨.<Nr. der Sequenz>⟩

        cmd_event
        Angabe des auslösenden Ereignisses

        cmd_nr
        Nr. des letzten ausgeführten Befehlszweiges

        cmd_seqnr
        Nr. der letzten ausgeführten Befehlssequenz

        e_<Device>_<Reading>|<Internal>|Events
        Bezeichner und Wert der auslösenden Geräte mit Readings, Internals oder Events

        error
        Enthält Fehlermeldungen oder Rückgabewerte von Befehlen, siehe Besonderheit des Error-Reading

        last_cmd
        letzter Status

        matched_event_c<lfd. Nr. der Bedingung>_<lfd. Nr. des Events>
        Wert, der mit dem Regulären Ausdruck übereinstimmt

        mode
        der Modus, in dem sich DOIF befindet: <enabled|disabled|deactivated>

        state
        Status des DOIF nach Befehlsausführung, Voreinstellung: cmd_<Nr. des Befehlszweiges>⟨_<Nr. der Befehlssequenz>⟩

        timer_<lfd. Nr.>_c<Nr. des Befehlszweiges>
        verwendete Timer mit Angabe des nächsten Zeitpunktes

        timer_<timer name>
        verwendete, benannte Timer mit Angabe des nächsten Zeitpunktes (Perl)

        wait_timer
        Angabe des aktuellen Wait-Timers

        warning
        Perl-Warnung bei der Auswertung einer Bedingung

        <A-Z>_<readingname>
        Readings, die mit einem Großbuchstaben und nachfolgendem Unterstrich beginnen, sind für User reserviert und werden auch zukünftig nicht vom Modul selbst benutzt.

      Operanden in der Bedingung und den Befehlen und im Perl-Modus
        Status [<Device>⟨,<Default>⟩]

        Readings [<Device>:<Reading>⟨,<Default>⟩]

        Internals [<Device>:&<Internal>⟨,<Default>⟩]

        Filtern allgemein nach Ausdrücken mit Ausgabeformatierung: [<Device>:<Reading>|<Internal>:"<Filter>"⟨:<Output>⟩⟨,<Default>⟩]

        Filtern einer Zahl [<Device>:<Reading>:d⟨,<Default>⟩]

        Zeitspanne eines Readings seit der letzten Änderung [<Device>:<Reading>:sec⟨,<Default>⟩]

        $DEVICE
        für den Gerätenamen

        $EVENT
        für das zugehörige Ereignis

        $EVENTS
        für alle zugehörigen Ereignisse eines Triggers

        $SELF
        für den Gerätenamen des DOIF

        <Perl-Funktionen>
        vorhandene und selbsterstellte Perl-Funktionen

      Operanden in der Bedingung und im Perl-Modus
        Events [<Device>:"<Regex-Events>"] oder ["<Regex-Devices>:<Regex-Events>"] oder ["<Regex-Devices>"⟨:"<Regex-Filter>"⟩⟨:<Output>⟩,<Default>]
        für <Regex> gilt: ^<ist eindeutig>$, ^<beginnt mit>, <endet mit>$, "" entspricht ".*", Regex-Filter ist mit [^\:]*: (.*) vorbelegt siehe auch Reguläre Ausdrücke und Events des Gerätes global

        Zeitpunkte [<time>]
        als [HH:MM], [HH:MM:SS] oder [Zahl] in Sekunden nach Mitternacht

        Zeitintervalle [<begin>-<end>]
        als [HH:MM], [HH:MM:SS] oder [Zahl] in Sekunden nach Mitternacht

        indirekte Zeitangaben [[<indirekte Zeit>]]
        als [HH:MM], [HH:MM:SS] oder [Zahl] in Sekunden nach Mitternacht, <indirekte Zeit> ist ein Status, Reading oder Internal

        relative Zeitangaben [+<time>]
        als [HH:MM], [HH:MM:SS] oder [Zahl] in Sekunden

        ausgerichtete Zeitraster [:MM]
        in Minuten zwischen 00 und 59

        rel. Zeitraster ausgerichtet [+:MM]
        in Minuten zwischen 1 und 59

        rel. Zeitraster ausgerichtet alle X Stunden [+[h]:MM]
        MM in Minuten zwischen 1 und 59, h in Stunden zwischen 2 und 23

        Wochentagsteuerung [<time>|0123456789], [<begin>-<end>]|0123456789]
        Pipe, gefolgt von ein o. mehreren Ziffern. Bedeutung: 0 bis 6 für So. bis Sa., 7 für $we, Wochenende oder Feiertag, 8 für !$we, Werktags, 9 für $twe, Wochenende oder Feiertag morgen.

        berechnete Zeitangaben [(<Berechnung, gibt Zeit in Sekunden zurück, im Sinne von time>)]
        Berechnungen sind mit runden Klammern einzuschliessen. Perlfunktionen, die HH:MM zurückgeben sind mit geschweiften Klammern einzuschliessen.

        Intervall-Timer [<begin>-<end>,<relativ timer>]
        Löst zu den aus <relativ timer> berechneten Zeitpunkten im angegebenen Zeitintervall <begin>-<end> aus.

        Trigger verhindern [?<devicename>], [?<devicename>:<readingname>], [?<devicename>:&<internalname>], [?<time specification>]
        Werden Status, Readings, Internals und Zeitangaben in der Bedingung mit einem Fragezeichen eingeleitet, triggern sie nicht.

        $device, $event, $events
        Perl-Variablen mit der Bedeutung der Schlüsselworte $DEVICE, $EVENT, $EVENTS

        $cmd
        Perl-Variablen mit der Bedeutung [$SELF:cmd]

        <Perl-Zeitvariablen>
        Variablen für Zeit- und Datumsangaben, $sec, $min, $hour, $mday, $month, $year, $wday, $yday, $isdst, $week, $hms, $hm, $md, $ymd, $we, $twe

      set-Befehle
        disable set <name> checkall
        Überprüfung aller DOIF-Bedingungen mit Ausführung eines wahren DOIF-Zweiges

        disable set <name> disable
        blockiert die Befehlsausführung

        initialize set <name> initialize
        initialisiert das DOIF und aktiviert die Befehlsausführung

        enable set <name> enable
        aktiviert die Befehlsausführung, im Gegensatz zur obigen Initialisierung bleibt der letzte Zustand des Moduls erhalten

        cmd_<nr> set <name> cmd_<nr>
        führt ohne Auswertung der Bedingung den Befehlszweig mit der Nummer <nr> aus

      get-Befehle
        html
        liefert HTML-Code einer definierten uiTable zurück.

      Attribute
        Verzögerungen attr <name> wait <timer_1_1>,<timer_1_2>,...:<timer_2_1>,<timer_2_2>,...:...
        Zeit in Sekunden als direkte Angabe oder Berechnung, ein Doppelpunkt trennt die Timer der Bedingungsweige, ein Komma die Timer der Befehlssequenzen eines Bedingungszweiges.

        Verzögerung von Timern attr <name> timerWithWait
        erweitert wait auf Zeitangaben

      • attr <name> do <always|resetwait>
        always wiederholt den Ausführungsteil, wenn die selbe Bedingung wiederholt wahr wird.
        resetwait setzt den Waittimer zurück, wenn die selbe Bedingung wiederholt wahr wird.

      • Befehle wiederholen attr <name> repeatcmd <timer Bedingungszweig 1>:<timer Bedingungszweig 2>:...
        Zeit in Sekunden als direkte Angabe oder Berechnung, nach der Befehle wiederholt werden.

        Pause für Wiederholung attr <name> cmdpause <Pause cmd_1>:<Pause cmd_2>:...
        Zeit in Sekunden als direkte Angabe oder Berechnung, blockiert die Befehlsausführung während der Pause.

        Begrenzung von Wiederholungen attr <name> repeatsame <maximale Anzahl von cmd_1>:<maximale Anzahl von cmd_2>:...
        Anzahl als direkte Angabe oder Berechnung, begrenzt die maximale Anzahl unmittelbar folgender Befehlsausführungen.

        Warten auf Wiederholung attr <name> waitsame <Wartezeit cmd_1>:<Wartezeit cmd_2>:...
        Wartezeit in Sekunden als direkte Angabe oder Berechnung, für ein unmittelbar wiederholtes Zutreffen einer Bedingung.

        Löschen des Waittimers attr <name> waitdel <timer_1_1>,<timer_1_2>,...:<timer_2_1>,<timer_2_2>,...:...
        Zeit in Sekunden als direkte Angabe oder Berechnung, ein laufender Timer wird gelöscht und die Befehle nicht ausgeführt, falls eine Bedingung vor Ablauf des Timers wiederholt wahr wird.

        Readingauswertung bei jedem Event des Devices attr <name> checkReadingEvent <0|1>
        0 deaktiviert, 1 keine Funktion mehr, entspricht internen der Voreinstellung des Moduls.

        Selbsttriggerung attr <name> selftrigger <wait|all>
        lässt die Triggerung des Gerätes durch sich selbst zu. wait zugelassen für verzögerte Befehle, all zugelassen auch für nicht durch wait verzögerte Befehle; es ist nur eine Rekusion möglich

        Event beim Setzen eines Timers attr <name> timerevent <0|ungleich Null>
        erzeugt beim Setzen eines Timers ein Event. ungleich Null aktiviert, 0 deaktiviert

        Gerätestatus ersetzen attr <name> cmdState <Ersatz cmd_1_1>,...,<Ersatz cmd_1>|<Ersatz cmd_2_1>,...,<Ersatz cmd_2>|...
        ersetzt die Standartwerte des Gerätestatus als direkte Angabe oder Berechnung, die Ersatzstatus von Befehlssequenzen werden durch Kommata, die von Befehlszweigen durch Pipe Zeichen getrennt.

        Befehle bei FHEM-Start ausführen attr <name> startup <FHEM-Befehle>|{<Perl-Befehle mit DOIF-Syntax>}

        dynamischer Status attr <name> state <content>
        <content> ist das Ergebnis eines Perl-Ausdrucks, DOIF-Syntax ([<device>:<reading>], usw.) triggert bei Event die Berechnung.

        Erzeugen berechneter Readings attr <name> DOIF_Readings <readingname_1>:<content_1>,<readingname_2>:<content_2> ...
        <content_n> ist das Ergebnis von Perl-Ausdrücken, DOIF-Syntax ([<device>:<reading>], usw.) triggert bei Event die Berechnung.

        Ersatzwert für nicht existierende Readings oder Status attr <name> notexist "<Ersatzwert>"

        Status Initialisierung nach Neustart attr <name> initialize <Status nach Neustart>

        Gerät vollständig deaktivieren attr <name> disable <0|1>
        1 deaktiviert das Modul vollständig, 0 aktiviert es.

        Alle Bedingungen prüfen attr <name> checkall <event|timer|all>
        event Alle Bedingungen werden geprüft, wenn ein Event-Trigger (Ereignisauslöser) auslöst.
        timer Alle Bedingungen werden geprüft, wenn ein Timer-Trigger (Zeitauslöser) auslöst.
        all   Alle Bedingungen werden geprüft.
        Die Befehle nach der ersten wahren Bedingung werden ausgeführt.

        Eindeutige Statuserkennung attr <name> addStateEvent <0|ungleich Null>
        fügt einem Gerätestatus-Event "state:" hinzu. ungleich Null aktiviert, 0 deaktiviert, siehe auch addStateEvent

      • attr <name> readingList <Reading1> <Reading2> ...
        fügt zum set-Befehl direkt setzbare, durch Leerzeichen getrennte Readings hinzu.

        attr <name> setList <Reading1>:⟨<Modifier1>,⟩<Value1>,<Value2>,<...> <Reading2>:⟨<Modifier2>,⟩<Value1>,<Value2>,<...> ...
        fügt einem Reading einen optionalen Widgetmodifier und eine Werteliste (, getrennt) hinzu. setList, widgetOverride, und webCmd

      • User Interface für DOIF attr <name> uiTable ⟨{<perl code (format specification, template specification, function definition, control variable, ...)>}\n⟩<template file import, method definition, table definition>
        format specification:
        $TABLE = "<CSS-Attribute>" ergänzt das table-Elemente um CSS-Attribute.
        $TD{<rows>}{<columns>} = "<HTML Attribute>" ergänzt td-Elemente um HTML-Attribute.
        $TR{<rows>} = "<HTML Attribute>" ergänzt tr-Elemente um HTML-Attribute.
        $TC{<columns>} = "<HTML Attribute>" ergänzt zu columns gehörende td-Elemente um HTML-Attribute.
        template specification:
        $TPL{<name>} = "<Zeichenkette>" speichert ein Template.
        function definition:
        sub FUNC_<name> {<function BLOCK>} definiert eine Funktion.
        control variables:
        $ATTRIBUTESFIRST = 1; organisiert die Detailansicht um.
        $SHOWNOSTATE = 1; blendet den Status in der Gerätezeile aus.
        $SHOWNODEVICELINE = "<regex room>"; blendet die Gerätezeile aus, wenn <regex room> zum Raumnamen passt, gilt nicht für den Raum Everything.
        $SHOWNODEVICELINK = 1; schaltet das Ersetzen des Gerätenamen durch einen Link auf die Detailseite aus.

        template file import:
        IMPORT <path with filename> importiert eine Templatedatei.
        method definition:
        DEF TPL_<name>(<definition with place holder $1,$2 usw.>) erzeugt ein Methodentemplate zur wiederholten Nutzung in der Tabellendefinition.
        table definition:
        Schreiben die nachstehenden Elemente HTML-Code in die Tabellenzelle, so wird er interpretiert.
        ↵ oder ↵↵ trennt Tabellenzeilen.
        | oder |↵ trennt Tabellenzellen.
        >↵ oder ,↵ sind zur Textstrukturierung zugelassen.
        WID([<device>:<reading>],"<widget modifier>"⟨,"<command>"⟩) bindet ein Widget an <device>:<reading>, <command> steht für set oder setreading, siehe widgetOverride und FHEMWEB-Widgets
        STY(<content>,<CSS style attributes>) schreibt den Inhalt von <content> in die Zelle und formatiert ihn mit <CSS style attributes>.
        <content> schreibt den Inhalt von <content> in die Zelle.
        <content> und <CSS style attributes> sind das Ergebnis von Perl-Ausdrücken. Enthalten sie DOIF-Syntax ([<device>:<reading>], usw.), werden sie dynamisch erzeugt.
        PUP(<DOIF-name to show interface table>, <iconname[@color number]>)
        gibt ein Link zum Öffnen eines Popup-Fensters zurück.
        <DOIF-name to show interface table> Name des DOIF-Gerätes dessen Benutzerschnittstelle angezeigt werden soll.
        <iconname[@color number]|string> gibt ein Icon an, wenn das Icon nicht verfügbar ist, wird <string> angezeigt.

        readingFnAttributes

      Perl-Funktionen
        DOIF_hsv(<current value>, <lower value>, <upper value>, <lower HUE value>, <upper HUE value>, <saturation>, <lightness>)
        gibt eine im HSV-Raum interpolierte HTML Farbnummer zurück, mit Prefix #
        <current value> aktueller Wert, für den die Farbnummer erzeugt wird.
        <lower value> unterer Wert, des Bereiches auf den die Farbnummer skaliert wird.
        <upper value> oberer Wert, des Bereiches auf den die Farbnummer skaliert wird.
        <lower HUE value> unterer HUE-Wert, der mit dem unteren Wert korrespondiert (0-360).
        <upper HUE value> oberer HUE-Wert, der mit dem oberen Wert korrespondiert (0-360).
        <saturation> Farbsättigung (0-100).
        <lightness> Hellwert (0-100).

        DOIF_rgb(<start color number>, <end color number>, <lower value>, <upper value>, <current value>)
        gibt eine linear interpolierte RGB Farbnummer zurück, abhängig vom Prefix der Start- o. Endfarbnummer mit oder ohne Prefix #.
        <start color number> Startfarbnummer des Farbbereiches, mit oder ohne Prefix #.
        <end color number> Endfarbnummer des Farbbereiches, mit oder ohne Prefix #.
        <lower value> unterer Wert, des Bereiches auf den die Farbnummer skaliert wird.
        <upper value> oberer Wert, des Bereiches auf den die Farbnummer skaliert wird.
        <current value> aktueller Wert, für den die Farbnummer erzeugt wird.

        FW_makeImage(<iconname[@color number]>)
        gibt HTML-Code zurück, der ein FHEM icon einbindet.
        <color number> optionale Farbnummer in Großschreibung, mit oder ohne Prefix #.
        weitere Infos im Quelltext von 01_FHEMWEB.pm.

      Perl Modus

      Dokumentation zum DOIF-Perl-Modus

    DOIFtools

    [EN DE]
      DOIFtools stellt Funktionen zur Unterstützung von DOIF-Geräten bereit.

      • erstellen von readingsGroup Definitionen, zur Beschriftung von Frontendelementen.
      • erstellen eines Debug-Logfiles, in dem mehrere DOIF und zugehörige Geräte geloggt werden.
      • optionales DOIF-Listing bei jeder Status und Wait-Timer Aktualisierung im Debug-Logfile.
      • Navigation zwischen den DOIF-Listings im Logfile, wenn es über DOIFtools geöffnet wird.
      • erstellen von userReadings in DOIF-Geräten zur Anzeige des realen Datums bei Wochentag behafteten Timern.
      • löschen von benutzerdefinierten Readings in DOIF-Definitionen über eine Mehrfachauswahl.
      • löschen von Readings in anderen Geräten über eine Mehrfachauswahl, nicht state.
      • erfassen statistischer Daten über Events.
      • Begrenzung der Datenaufzeichnungsdauer.
      • erstellen eines Statistikreports.
      • Liste aller DOIF-Definitionen in probably associated with.
      • Zugriff auf DOIFtools aus jeder DOIF-Definition über die Liste in probably associated with.
      • Zugriff aus DOIFtools auf vorhandene DOIFtoolsLog-Logdateien.
      • zeigt den Event Monitor in der Detailansicht von DOIFtools.
      • ermöglicht den Zugriff auf den Event Monitor in der Detailansicht von DOIF.
      • erzeugt DOIF-Operanden aus einer Event-Zeile des Event-Monitors.
        • Ist der Event-Monitor in DOIF geöffnet, dann kann die Definition des DOIF geändert werden.
        • Ist der Event-Monitor in DOIFtools geöffnet, dann kann die Definition eines DOIF erzeugt werden.
      • prüfen der Definitionen mit Empfehlungen für DOIF-Modus FHEM.
      • erstellen von Shortcuts
      • optionalen Menüeintrag erstellen
      • Liste der laufenden Wait-Timer anzeigen
      • skaliert Werte zu Farbnummern und RGB Werten zum Einfärben, z.B. von Icons.
      • Auflistung der Subs, die vom User im Package DOIF deklariert wurden.

      Inhalt
        Bedienungsanleitung
        Definition
        Set-Befehl
        Get-Befehl
        Attribute
        Readings
        Links

      Bedienungsanleitung
        Eine Bedienungsanleitung für DOIFtools gibt es im FHEM-Wiki.

      Definition
        define <name> DOIFtools
        Es ist nur eine Definition pro FHEM Installation möglich. Die Definition wird mit den vorhanden DOIF-Namen ergänzt, daher erscheinen alle DOIF-Geräte in der Liste probably associated with. Zusätzlich wird in jedem DOIF-Gerät in dieser Liste auf das DOIFtool verwiesen.

        Definitionsvorschlag zum Import mit Raw definition:
        defmod DOIFtools DOIFtools
        attr DOIFtools DOIFtoolsEventMonitorInDOIF 1
        attr DOIFtools DOIFtoolsExecuteDefinition 1
        attr DOIFtools DOIFtoolsExecuteSave 1
        attr DOIFtools DOIFtoolsMenuEntry 1
        attr DOIFtools DOIFtoolsMyShortcuts ##My Shortcuts:,,list DOIFtools,fhem?cmd=list DOIFtools,remove_DOIFtoolsLog,fhem?cmd=delete DOIFtoolsLog;%22rm ./log/DOIFtoolsLog*.log%22

      Set
      • set <name> deleteReadingInTargetDOIF <readings to delete name>
        deleteReadingInTargetDOIF löscht die benutzerdefinierten Readings im Ziel-DOIF

      • set <name> targetDOIF <target name>
        targetDOIF vor dem Löschen der Readings muss das Ziel-DOIF gesetzt werden.

      • set <name> deleteReadingInTargetDevice <readings to delete name>
        deleteReadingInTargetDevice löscht sichtbare Readings, ausser state im Ziel-Gerät. Bitte den Gefahrenhinweis zum Befehl deletereading beachten ! Commandref#deletereading

      • set <name> targetDevice <target name>
        targetDevice vor dem Löschen der Readings muss das Ziel-Gerät gesetzt werden.

      • set <name> sourceAttribute <readingList>
        sourceAttribute vor dem Erstellen einer ReadingsGroup muss das Attribut gesetzt werden aus dem die Readings gelesen werden, um die ReadingsGroup zu erstellen und zu beschriften. Default, readingsList

      • set <name> statisticsDeviceFilterRegex <regular expression as device filter>
        statisticsDeviceFilterRegex setzt einen Filter auf Gerätenamen, nur die gefilterten Geräte werden im Bericht ausgewertet. Default, ".*".

      • set <name> statisticsTYPEs <List of TYPE used for statistics generation>
        statisticsTYPEs setzt eine Liste von TYPE für die Statistikdaten erfasst werden, bestehende Statistikdaten werden gelöscht. Default, "".

      • set <name> statisticsShowRate_ge <integer value for event rate>
        statisticsShowRate_ge setzt eine Event-Rate, ab der ein Gerät in die Auswertung einbezogen wird. Default, 0.

      • set <name> specialLog <0|1>
        specialLog 1 DOIF-Listing bei Status und Wait-Timer Aktualisierung im Debug-Logfile. Default, 0.

      • set <name> doStatistics <enabled|disabled|deleted>
        doStatistics
         deleted setzt die Statistik zurück und löscht alle stat_ Readings.
         disabled pausiert die Statistikdatenerfassung.
         enabled startet die Statistikdatenerfassung.

      • set <name> recording_target_duration <hours>
        recording_target_duration gibt an wie lange Daten erfasst werden sollen. Default, 0 die Dauer ist nicht begrenzt.

      Get
      • get <name> DOIF_to_Log <DOIF names for logging>
        DOIF_to_Log erstellt eine FileLog-Definition, die für alle angegebenen DOIF-Definitionen loggt. Der Reguläre Ausdruck wird aus den, direkt in den DOIF-Greräte angegebenen und den wahrscheinlich verbundenen Geräten, ermittelt.

      • get <name> checkDOIF
        checkDOIF führt eine einfache Syntaxprüfung durch und empfiehlt Änderungen für DOIF-Modus FHEM.

      • get <name> readingsGroup_for <DOIF names to create readings groups>
        readingsGroup_for erstellt readingsGroup-Definitionen für die angegebenen DOIF-namen. sourceAttribute verweist auf das Attribut, dessen Readingsliste als Basis verwendet wird. Die Eingabeelemente im Frontend werden mit den Readingsnamen beschriftet.

      • get <name> userReading_nextTimer_for <DOIF names where to create real date timer readings>
        userReading_nextTimer_for erstellt userReadings-Attribute für Timer-Readings mit realem Datum für Timer, die mit Wochentagangaben angegeben sind, davon ausgenommen sind indirekte Wochentagsangaben.

      • get <name> statisticsReport
        statisticsReport erstellt einen Bericht aus der laufenden Datenerfassung.

        Die Statistik kann genutzt werden, um Geräte mit hohen Ereignisaufkommen zu erkennen. Bei einer hohen Rate, sollte im Interesse der Systemperformance geprüft werden, ob die Events eingeschränkt werden können. Werden keine Events eines Gerätes weiterverarbeitet, kann das Attribut event-on-change-reading auf none oder eine andere Zeichenfolge, die im Gerät nicht als Readingname vorkommt, gesetzt werden.FHEM-Wiki: Events

      • get <name> runningTimerInDOIF
        runningTimerInDOIF zeigt eine Liste der laufenden Timer. Damit kann entschieden werden, ob bei einem Neustart wichtige Timer gelöscht werden und der Neustart ggf. verschoben werden sollte. Zeigt nachrichtlich das Ergebnis von blockinginfo an.

      • get <name> SetAttrIconForDOIF <DOIF names for setting the attribute icon to helper_doif>
        SetAttrIconForDOIF setzt für die ausgewählten DOIF das Attribut icon auf helper_doif.

      • get <name> linearColorGradient <start color number>,<end color number>,<minimal value>,<maximal value>,<step width>
        linearColorGradient erzeugt eine Tabelle mit linear abgestuften Farbnummern und RGB-Werten.
        <start color number>, ist eine HTML-Farbnummer, Beispiel: #0000FF für Blau.
        <end color number>, , ist eine HTML-Farbnummer, Beispiel: #FF0000 für Rot.
        <minimal value>, der Minimalwert auf den die Startfarbnummer skaliert wird, Beispiel: 7.
        <maximal value>, der Maximalwert auf den die Endfarbnummer skaliert wird, Beispiel: 30.
        <step width>, für jeden Schritt wird ein Farbwert erzeugt, Beispiel: 0.5.
        Beispiel: get DOIFtools linearColorGradient #0000FF,#FF0000,7,30,0.5

      • get <name> modelColorGradient <minimal value>,<middle value>,<maximal value>,<step width>,<color model>
        modelColorGradient erzeugt eine Tabelle mit modellbedingt abgestuften Farbnummern und RGB-Werten, siehe FHEM-Wiki Farbskala mit Color::pahColor
        <minimal value>, der Minimalwert auf den die Startfarbnummer skaliert wird, Beispiel: 7.
        <middle value>, der Mittenwert ist ein Fixpunkt zwischen Minimal- u. Maximalwert, Beispiel: 20.
        <maximal value>, der Maximalwert auf den die Endfarbnummer skaliert wird, Beispiel: 30.
        <step width>, für jeden Schritt wird ein Farbwert erzeugt, Beispiel: 1.
        <color model>, die Angabe eines vordefinierten Modells <0|1|2> oder fünf RGB-Werte als Array [r1,g1,b1,r2,g2,b2,r3,g3,b3,r4,g4,b4,r5,g5,b5] für ein eigenes Model.

        Beispiele:
        get DOIFtools modelColorGradient 7,20,30,1,0
        get DOIFtools modelColorGradient 0,50,100,5,[255,255,0,127,255,0,0,255,0,0,255,255,0,127,255]
        Farbskala mit Color::pahColor

      • get <name> hsvColorGradient <HUE start value>,<HUE end value>,<minimal value>,<maximal value>,<step width>,<saturation>,<lightness>
        hsvColorGradient erzeugt eine Tabelle über HUE-Werte abgestufte Farbnummern und RGB-Werten.
        <Hue start value>, der HUE-Startwert, Beispiel: 240 für Blau.
        <HUE end value>, der HUE-Endwert, Beispiel: 360 für Rot.
        <minimal value>, der Minimalwert auf den der HUE-Startwert skaliert wird, Beispiel: 7.
        <maximal value>, der Maximalwert auf den der HUE-Endwert skaliert wird, Beispiel: 30.
        <step width>, für jeden Schritt wird ein Farbwert erzeugt, Beispiel: 1.
        <saturation>, die Angabe eines Wertes für die Farbsättigung <0-100>, Beispiel 80.
        <lightness>, die Angabe eines Wertes für die Helligkeit <0-100>, Beispiel 80.

        Beispiele:
        get DOIFtools hsvColorGradient 240,360,7,30,1,80,80

      • get <name> subsInPackageDOIF
        subsInPackageDOIF erzeugt eine Liste der Subs, die vom User im Package DOIF deklariert wurden.

      Attribute
      • attr <name> DOIFtoolsExecuteDefinition <0|1>
        DOIFtoolsExecuteDefinition 1 führt die erzeugten Definitionen aus. Default 0, zeigt die erzeugten Definitionen an, sie können mit Raw definition importiert werden.

      • attr <name> DOIFtoolsExecuteSave <0|1>
        DOIFtoolsExecuteSave 1, die Definitionen werden automatisch gespeichert. Default 0, der Benutzer kann die Definitionen speichern.

      • attr <name> DOIFtoolsTargetGroup <group names for target>
        DOIFtoolsTargetGroup gibt die Gruppen für die zu erstellenden Definitionen an. Default, die Gruppe der Ursprungs Definition.

      • attr <name> DOIFtoolsTargetRoom <room names for target>
        DOIFtoolsTargetRoom gibt die Räume für die zu erstellenden Definitionen an. Default, der Raum der Ursprungs Definition.

      • attr <name> DOIFtoolsReadingsPrefix <user defined prefix>
        DOIFtoolsReadingsPrefix legt den Präfix der benutzerdefinierten Readingsnamen für die Zieldefinition fest. Default, DOIFtools bestimmt den Präfix.

      • attr <name> DOIFtoolsEventMonitorInDOIF <1|0>
        DOIFtoolsEventMonitorInDOIF 1, die Anzeige des Event-Monitors wird in DOIF ermöglicht. Default 0, kein Zugriff auf den Event-Monitor im DOIF.

      • attr <name> DOIFtoolsEMbeforeReadings <1|0>
        DOIFtoolsEMbeforeReading 1, die Anzeige des Event-Monitors wird in DOIF direkt über den Readings angezeigt. Default 0, anzeige des Event-Monitors über den Internals.

      • attr <name> DOIFtoolsHideGetSet <0|1>
        DOIFtoolsHideGetSet 1, verstecken der Set- und Get-Shortcuts. Default 0.

      • attr <name> DOIFtoolsNoLookUp <0|1>
        DOIFtoolsNoLookUp 1, es werden keine Lookup-Fenster in DOIFtools geöffnet. Default 0.

      • attr <name> DOIFtoolsNoLookUpInDOIF <0|1>
        DOIFtoolsNoLookUpInDOIF 1, es werden keine Lookup-Fenster in DOIF geöffnet. Default 0.

      • attr <name> DOIFtoolsHideModulShortcuts <0|1>
        DOIFtoolsHideModulShortcuts 1, verstecken der DOIFtools Shortcuts. Default 0.

      • attr <name> DOIFtoolsHideStatReadings <0|1>
        DOIFtoolsHideStatReadings 1, verstecken der stat_ Readings. Das Ändern des Attributs löscht eine bestehende Event-Aufzeichnung. Default 0.

      • attr <name> DOIFtoolsEventOnDeleted <0|1>
        DOIFtoolsEventOnDeleted 1, es werden Events für alle stat_ erzeugt, bevor sie gelöscht werden. Damit könnten die erfassten Daten geloggt werden. Default 0.

      • attr <name> DOIFtoolsMyShortcuts <shortcut name>,<command>, ...
        DOIFtoolsMyShortcuts <Bezeichnung>,<Befehl>,... anzeigen eigener Shortcuts, siehe globales Attribut menuEntries.
        Zusätzlich gilt, wenn ein Eintrag mit ## beginnt und mit ,, endet, wird er als HTML interpretiert.
        Beispiel:
        attr DOIFtools DOIFtoolsMyShortcuts ##<br>My Shortcuts:,,list DOIFtools,fhem?cmd=list DOIFtools
        menuEntries
      • attr <name> DOIFtoolsMenuEntry <0|1>
        DOIFtoolsMenuEntry 1, erzeugt einen Menüeintrag im FHEM-Menü. Default 0.

      • attr <name> DOIFtoolsLogDir <path to DOIFtools logfile>
        DOIFtoolsLogDir <path>, gibt den Pfad zum Logfile an Default ./log oder der Pfad aus dem Attribut global logdir.

        disabledForIntervals pausiert die Statistikdatenerfassung.

      Readings
        DOIFtools erzeugt bei der Aktualisierung von Readings keine Events, daher muss die Seite im Browser aktualisiert werden, um aktuelle Werte zu sehen.

      • Action zeigt den Status der Event-Aufzeichnung an.
      • DOIF_version zeigt die Version des DOIF an.
      • FHEM_revision zeigt die Revision von FHEM an.
      • doStatistics zeigt den Status der Statistikerzeugung an
      • logfile gibt den Pfad und den Dateinamen mit Ersetzungszeichen an.
      • recording_target_duration gibt an wie lange Daten erfasst werden sollen.
      • stat_<devicename> zeigt die Anzahl der gezählten Ereignisse, die das jeweilige Gerät erzeugt hat.
      • statisticHours zeigt die kumulierte Zeit für den Status enabled an, während der, Statistikdaten erfasst werden.
      • statisticShowRate_ge zeigt die Event-Rate, ab der Geräte in die Auswertung einbezogen werden.
      • statisticsDeviceFilterRegex zeigt den aktuellen Gerätefilterausdruck an.
      • statisticsTYPEs zeigt eine Liste von TYPE an, für deren Geräte die Statistik erzeugt wird.
      • targetDOIF zeigt das Ziel-DOIF, bei dem Readings gelöscht werden sollen.
      • targetDevice zeigt das Ziel-Gerät, bei dem Readings gelöscht werden sollen.

      Links
        DOIFtools im FHEM-Forum
        DOIFtools im FHEM-Wiki

        DOIF im FHEM-Wiki
        Erste Schritte mit DOIF
        DOIF: Einsteigerleitfaden, Grundfunktionen und Erläuterungen
        DOIF-Labor - ausführbare, praxisnahe Beispiele als Problemlösung zum Experimentieren
        DOIF: Tipps zur leichteren Bedienung
        DOIF: Tools und Fehlersuche

      DSBMobile liest die Vertretungspläne der DSBMobile App, die (zumindest) an einigen Schulen in Deutschland verwendet wird

    Define
      DSBMobile verwendet einige Perl-Module, die vorab installiert werden müssen:
      • IO::Compress::Gzip
      • IO::Uncompress::Gunzip
      • MIME::Base64
      • HTML::TableExtract
      • DSBMobile wird ohne Parameter definiert.

        define <devicename> DSBMobile



      Get
        • Empfängt die aktuellen Vertretungsplan- und Aushang-Informationen
      Readings
        Die folgenden Readings werden erstellt:
        • columnNames: Readingnamen, die dynamisch aus den Spaltenüberschriften des Vertretungsplans generiert werden
        • lastCheck: Datum/Uhrzeit der letzten erfolgreichen Überprüfung auf neue Daten
        • lastSync: Datum/Uhrzeit der letzten erfolgreichen Synchronisierung neuer Daten(nicht nur Überprüfung)
        • lastTTUpdate: Datum/Uhrzeit der letztenAktualisierung auf dem DSBMobile Server
        • error: enthält die letzte Fehlermeldung, die bei der Datensynchronisierung aufgetreten ist
        • state: "ok" sofern der letzte Abruf erfolgreich war, "error" wenn nicht.
        Für jeden Aushang bzw. jede Vertretung werden folgende Readings erstellt
        • i#_date: Datum des Aushangs
        • i#_title: Titel des Aushangs
        • i#_url: Link zum Aushang
        • ti#_sdate: Datum der "Info des Tages"
        • ti#_topic: Titel der "Info des Tages"
        • ti#_text: Inhalt der "Info des Tages"
        • tt#_xxxxDynamisch generierte Readings für jede Spalte des Vertretungsplanes
      Attributes
        • dsb_user: Der User für die DSBMobile-Anmeldung
        • dsb_password: Das Passwort für die DSBMobile-Anmeldung
        • dsb_class: Die Klasse nach der gefiltert werden soll. Kann eine Regex sein, z.B. 5a|8b or 6.*c.
        • dsb_classReading: Muss gesetzt werden, wenn die Spalte mit der Klasse nicht "Klasse(n)" heisst, d.h. das generierte reading nicht "Klasse_n_" lautet
        • dsb_interval: Intervall in Sekunden in dem Daten von DSBMobile abgerufen werden, ein Wert von 0 bedeuted disabled
        • dsb_outputFormat: Kann benutzt werden, um den Output des weblinks zu formatieren. Die Readingnamen von % umschlossen können als Variablen verwendet werden, z.B. %Klasse_n_%
      DSBMobile bietet zusätzlich drei Funktionen, um die Informationen in weblinks darzustellen:
      • DSBMobile_simpleHTML($name ["dsb",showInfoOfTheDay]): Zeigt den Vertretungsplan, wenn der zweite optionale Parameter auf "1" gesetzt wird, wird die Info des Tages zusätzlich mit angezeigt. Die Darstellung kann durch das Attribut dsb_outputFormat beeinflusst werden Beispiel defmod dsb_web weblink htmlCode {DSBMobile_simpleHTML("dsb",1)}
      • DSBMobile_tableHTML($name ["dsb",showInfoOfTheDay]): Zeigt den Vertretungsplan in einfacher tabellarischer Ansicht, wenn der zweite optionale Parameter auf "1" gesetzt wird, wird die Info des Tages zusätzlich mit angezeigt. Beispiel defmod dsb_web weblink htmlCode {DSBMobile_tableHTML("dsb",1)}
      • DSBMobile_infoHTML($name): Zeigt die Aushänge mit Links zu den Details. Beispiel defmod dsb_infoweb weblink htmlCode {DSBMobile_infoHTML("dsb")}

    DUOFERN

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: DUOFERN

    DUOFERNSTICK

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: DUOFERNSTICK

    DWD_OpenData

    [EN DE]
      Der Deutsche Wetterdienst (DWD) stellt Wetterdaten über den Open Data Server zur Verfügung. Die Verwendung dieses Dienstes und der vom DWD zur Verfügung gestellten Daten unterliegt den auf der OpenData Webseite beschriebenen Bedingungen. Einen Überblick über die verfügbaren Daten findet man in der Tabelle OpenData_weather_content.xls.

      Eine Installationsbeschreibung findet sich in der FHEMWiki.

      Eine detaillierte Modulbeschreibung gibt es auf Englisch - siehe die englische Modulhilfe von DWD_OpenData.

    Dashboard

    [EN DE]
      Erstellt eine Übersicht in der Gruppen und/oder Geräte angeordnet werden können. Dabei können die Objekte mit Drag'n Drop frei positioniert und in mehreren Spalten angeordnet werden. Auch kann die Breite und Höhe eines Objektes über die Mindestgröße hinaus gezogen werden.

      Hinweis:
      Ein Gruppenname im Dashboard bzw. dem Attribut "dashboard_tabXgroups" entspricht der Gruppe in FHEM und stellt die darin enthaltenen Geräte im Dashboard dar.

      Define
        • define <name> Dashboard

          Beispiel:
          define anyViews Dashboard

          Bestpractice Anfängerkonfiguration:
          define anyViews Dashboard
          attr anyViews dashboard_colcount 2
          attr anyViews dashboard_rowcentercolwidth 30,70
          attr anyViews dashboard_tab1groups <Group1>,<Group2>,<Group3>

      Set
        • set <name> activateTab <TabNo>
          Das Tab mit der angegebenen Nummer wird im Dashboard aktiviert. Ist das Attribut "dashboard_homeTab" gesetzt, wird das in diesem Attribut definierte Tab beim nächsten Browser-Refresh reaktiviert.

        • set <name> lock
          Sperrt das Dashboard. Es können keine Positionsänderungen vorgenommen werden.

        • set <name> unlock
          Entsperrt das Dashboard.


      Get
        • get <name> config
          Liefert die Konfiguration des Dashboards zurück.

        • get <name> icon <icon name>
          Liefert den Pfad und vollen Namen des angegebenen Icons zurück.

          Beispiel:
          get <name> icon measure_power_meter

      Attributes

        • dashboard_backgroundimage
          Zeigt ein Hintergrundbild im Dashboard an. Das Bild wird nicht gestreckt, es sollte daher auf die Größe des Dashboards passen oder diese überschreiten. Es ist nur der Filename anzugeben.
          Das File muss sich an beliebiger Stelle unterhalb des Verzeichnisses "./www/images/" befinden.
          Empfehlung: Das Verzeichnis "./www/images/dashboard" anlegen und das Bildfile in diesem Verzeichnis ablegen.

          Beispiel
          attr dashboard_backgroundimage cam_video.PNG

        • dashboard_colcount
          Die Anzahl der Spalten in der Gruppen dargestellt werden können. Dennoch ist es möglich, mehrere Gruppen
          in einer Spalte nebeneinander zu positionieren. Dies ist abhängig von der Breite der Spalten und Gruppen.
          Gilt nur für die mittlere Spalte!
          Default: 1

        • dashboard_debug
          Zeigt Debug-Felder an. Sollte nicht gesetzt werden!
          Default: 0

        • dashboard_flexible
          Hat dieser Parameter einen Wert > 0, dann können die Widgets in den Tabs frei positioniert werden und hängen nicht mehr an den Spalten fest. Der Wert gibt ebenfalls das Raster an, in dem die Positionierung "zuschnappt".
          Default: 0

        • dashboard_hideGroupHeader
          Wenn gesetzt, wird der Kopf mit Gruppenname und -icon der dargestellten FHEM-Gruppe (siehe dashboard_tab1groups) verborgen.
          Default: 0

        • dashboard_homeTab
          Legt das aktuell aktivierte Tab fest. Wenn nicht gesetzt, wird das zuletzt gewählte Tab das aktive Tab.
          Default: 1

        • dashboard_row
          Auswahl welche Zeilen angezeigt werden sollen. top (nur Oben), center (nur Mitte), bottom (nur Unten) und den Kombinationen daraus.
          Default: center

        • dashboard_rowcenterheight
          Höhe der mittleren Zeile, in der die Gruppen angeordnet werden.
          Default: 400

        • dashboard_rowcentercolwidth
          Über dieses Attribut wird die Breite der einzelnen Spalten der mittleren Dashboardreihe festgelegt. Dabei kann je Spalte ein separater Wert hinterlegt werden. Die Werte sind durch ein Komma (ohne Leerzeichen) zu trennen. Jeder Wert bestimmt die Spaltenbreite in %! Der erste Wert gibt die Breite der ersten Spalte an, der zweite Wert die Breite der zweiten Spalte usw. Ist die Summe der Breite größer als 100 werden die Spaltenbreiten reduziert. Sind mehr Spalten als Breiten definiert werden die fehlenden Breiten um die Differenz zu 100 festgelegt. Sind hingegen weniger Spalten als Werte definiert werden die überschüssigen Werte ignoriert.
          Default: 100

        • dashboard_rowtopheight
          Höhe der oberen Zeile, in der die Gruppen angeordnet werden.
          Default: 250

        • dashboard_rowbottomheight
          Höhe der unteren Zeile, in der die Gruppen angeordnet werden.
          Default: 250

        • dashboard_showfullsize
          Blendet die FHEMWEB Raumliste (kompleter linker Bereich der Seite) und den oberen Bereich von FHEMWEB aus wenn der Wert auf 1 gesetzt ist.
          Default: 0

        • dashboard_showtabs
          Zeigt die Tabs/Schalterleiste des Dashboards oben oder unten an, oder blendet diese aus. Wenn die Schalterleiste ausgeblendet wird ist das Dashboard gespert.
          Default: tabs-and-buttonbar-at-the-top

        • dashboard_showtogglebuttons
          Zeigt eine Schaltfläche in jeder Gruppe mit der man diese auf- und zuklappen kann.
          Default: 0

        • dashboard_tab1backgroundimage
          Zeigt ein Hintergrundbild für den Tab an. (gilt ebenfalls für weitere dashboard_tabXbackgroundimage)
          Das Bild wird nicht gestreckt, es sollte also auf die Größe des Tabs passen oder diese überschreiten. Es ist nur der Filename anzugeben.
          Das File muss sich an beliebiger Stelle unterhalb des Verzeichnisses "./www/images/" befinden.
          Empfehlung: Das Verzeichnis "./www/images/dashboard" anlegen und das Bildfile in diesem Verzeichnis ablegen.

          Beispiel
          attr dashboard_tab1backgroundimage cam_video.PNG

        • dashboard_tab1colcount
          Die Anzahl der Spalten im Tab in der Gruppen dargestellt werden können. (gilt ebenfalls für weitere dashboard_tabXcolcount)
          Dennoch ist es möglich, mehrere Gruppen in einer Spalte nebeneinander zu positionieren. Dies ist abhängig von der Breite der Spalten und Gruppen.
          Gilt nur für die mittlere Spalte!
          Default: <dashboard_colcount>

        • dashboard_tab1devices
          DevSpec Liste von Geräten, die im Tab angezeigt werden sollen. (gilt ebenfalls für weitere dashboard_tabXdevices)
          Das Format ist:

            GROUPNAME:devspec1,devspec2,...,devspecX:ICONNAME

          ICONNAME ist optional. Auch GROUPNAME muss nicht vorhanden sein. Fehlt GROUPNAME, werden die angegebenen Geräte nicht gruppiert, sondern als einzelne Widgets im Tab angezeigt. Für weitere Details bezüglich DevSpec: DevSpec

        • dashboard_tab1groups
          Durch Komma getrennte Liste der FHEM-Gruppen (siehe Attribut "group" eines Devices), die im Tab angezeigt werden. (gilt ebenfalls für weitere dashboard_tabXgroups) Falsche Gruppennamen werden hervorgehoben.
          Jede Gruppe kann zusätzlich ein Icon anzeigen, dazu muss der Gruppen name um ":<icon>@<farbe>"ergänzt werden.

          Beispiel:
          Light:Icon_Fisch@blue,AVIcon_Fisch@red,Single Lights:Icon_Fisch@yellow

          Der Gruppenname kann ebenfalls einen regulären Ausdruck beinhalten, um alle Gruppen anzuzeigen, die darauf passen.

          Beispiel:
          .*Licht.* zeigt alle Gruppen an, die das Wort "Licht" im Namen haben.

        • dashboard_tab1icon
          Zeigt am Tab ein Icon an (gilt ebenfalls für weitere dashboard_tabXicon). Es muss sich dabei um ein exisitereindes Icon mit modpath Verzeichnis handeln. Handelt es sich um ein SVG Icon kann der Suffix @colorname für die Farbe des Icons angegeben werden.

        • dashboard_tab1name
          Titel des Tab. (gilt ebenfalls für weitere dashboard_tabXname)

        • dashboard_tab1sorting
          Enthält die Positionierung jeder Gruppe im Tab (gilt ebenfalls für weitere dashboard_tabXsorting).
          Der Wert wird mit der Schaltfläche "Set" geschrieben. Es wird nicht empfohlen dieses Attribut manuell zu ändern.

        • dashboard_noLinks
          Es erfolgt keine Linkerstellung zur Detailansicht von Devices.

          Hinweis:
          Bei manchen Devicetypen wird der Link zur Detailansicht integriert im Device mitgeliefert. In diesen Fällen muß die Linkgenerierung direkt im Device abgestellt werden (z.B. bei SMAPortalSPG).

        • dashboard_webRefresh
          Mit diesem Attribut werden FHEMWEB-Devices bestimmt, die:

          • beim Setzen des Attributes "dashboard_homeTab" diesen Tab im Dashboard sofort aktivieren
          • beim Ausführen von "set <name> activateTab" auf diesen Tab im Dashboard positionieren

          Default: alle

        • dashboard_width
          Zum bestimmen der Dashboardbreite. Der Wert kann in % (z.B. 80%) angegeben werden oder als absolute Breite (z.B. 1200) in Pixel.
          Default: 100%

    DbLog

    [EN DE]

      Mit DbLog werden Events in einer Datenbank gespeichert. Es wird SQLite, MySQL/MariaDB und PostgreSQL unterstützt.

      Voraussetzungen

      Die Perl-Module DBI und DBD::<dbtype> müssen installiert werden (use cpan -i <module> falls die eigene Distribution diese nicht schon mitbringt).

      Auf einem Debian-System können diese Module z.Bsp. installiert werden mit:

        DBI : sudo apt-get install libdbi-perl
        MySQL : sudo apt-get install [mysql-server] mysql-client libdbd-mysql libdbd-mysql-perl (mysql-server nur bei lokaler MySQL-Server-Installation)
        SQLite : sudo apt-get install sqlite3 libdbi-perl libdbd-sqlite3-perl
        PostgreSQL : sudo apt-get install libdbd-pg-perl


      Vorbereitungen

      Zunächst muss die Datenbank installiert und angelegt werden. Die Installation des Datenbanksystems selbst wird hier nicht beschrieben. Dazu bitte nach den Installationsvorgaben des verwendeten Datenbanksystems verfahren.

      Hinweis:
      Im Falle eines frisch installierten MySQL/MariaDB Systems bitte nicht vergessen die anonymen "Jeder"-Nutzer mit einem Admin-Tool (z.B. phpMyAdmin) zu löschen falls sie existieren.

      Beispielcode bzw. Scripts zum Erstellen einer MySQL/PostgreSQL/SQLite Datenbank ist im SVN -> contrib/dblog/db_create_<DBType>.sql enthalten.
      (Achtung: Die lokale FHEM-Installation enthält im Unterverzeichnis ./contrib/dblog nicht die aktuellsten Scripte!)

      Die Standardinstallation der MySQL/MariaDB Datenbank sieht die Nutzung der Collation utf8_bin vor. Mit dieser Einstellung können Zeichen bis 3 Byte Länge gespeichert werden was im Allgemeinen ausreichend ist. Sollen jedoch Zeichen mit 4 Byte Länge (z.B. Emojis) in der Datenbank gespeichert werden, ist der Zeichensatz utf8mb4 zu verwenden.
      Dementsprechend wäre in diesem Fall die MySQL/MariaDB Datenbank mit folgendem Statement anzulegen:

        CREATE DATABASE `fhem` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

      In der Konfigurationsdatei (siehe unten) ist die utf8-Unterstützung mit dem Schlüssel utf8 => 1 einzuschalten sofern utf8 genutzt werden soll.

      Die Datenbank beinhaltet 2 Tabellen: current und history.
      Die Tabelle current enthält den letzten Stand pro Device und Reading.
      In der Tabelle history sind alle Events historisch gespeichert.
      Beachten sie bitte unbedingt das DbLogType um die Benutzung der Tabellen current und history festzulegen.

      Die Tabellenspalten haben folgende Bedeutung:

        TIMESTAMP : Zeitpunkt des Events, z.B. 2007-12-30 21:45:22
        DEVICE : Name des Devices, z.B. Wetterstation
        TYPE : Type des Devices, z.B. KS300
        EVENT : das auftretende Event als volle Zeichenkette, z.B. humidity: 71 (%)
        READING : Name des Readings, ermittelt aus dem Event, z.B. humidity
        VALUE : aktueller Wert des Readings, ermittelt aus dem Event, z.B. 71
        UNIT : Einheit, ermittelt aus dem Event, z.B. %


      Index anlegen
      Für die Leseperformance, z.B. bei der Erstellung von SVG-PLots, ist es von besonderer Bedeutung dass der Index "Search_Idx" oder ein vergleichbarer Index (z.B. ein Primary Key) angelegt ist.

      Der Index "Search_Idx" kann mit diesen Statements, z.B. in der Datenbank 'fhem', angelegt werden (auch nachträglich):

        MySQL : CREATE INDEX Search_Idx ON `fhem`.`history` (DEVICE, READING, TIMESTAMP);
        SQLite : CREATE INDEX Search_Idx ON `history` (DEVICE, READING, TIMESTAMP);
        PostgreSQL : CREATE INDEX "Search_Idx" ON history USING btree (device, reading, "timestamp");

      Der Code zur Anlage ist ebenfalls in den Scripten SVN -> contrib/dblog/db_create_<DBType>.sql enthalten.

      Für die Verbindung zur Datenbank wird eine Konfigurationsdatei verwendet. Die Konfigurationsdatei wird z.B. nach /opt/fhem kopiert und hat den nachfolgend dargestellten Aufbau. Die Angaben sind entsprechend der verwendeten Umgebung anzupassen (entsprechende Zeilen entkommentieren und ändern):

          ####################################################################################
          # database configuration file
          #
          # NOTE:
          # If you don't use a value for user / password please delete the leading hash mark
          # and write 'user => ""' respectively 'password => ""' instead !
          #
          #
          ## for MySQL
          ####################################################################################
          #%dbconfig= (
          #    connection => "mysql:database=fhem;host=<database host>;port=3306",
          #    # if want communication over socket-file instead of TCP/IP transport, use:
          #    # connection => "mysql:database=fhem;mysql_socket=</patch/socket-file>",
          #    user => "fhemuser",
          #    password => "fhempassword",
          #    # optional enable(1) / disable(0) UTF-8 support
          #    # (full UTF-8 support exists from DBD::mysql version 4.032, but installing
          #    # 4.042 is highly suggested)
          #    utf8 => 1
          #);
          ####################################################################################
          #
          ## for PostgreSQL
          ####################################################################################
          #%dbconfig= (
          #    connection => "Pg:database=fhem;host=<database host>",
          #    user => "fhemuser",
          #    password => "fhempassword"
          #);
          ####################################################################################
          #
          ## for SQLite (username and password stay empty for SQLite)
          ####################################################################################
          #%dbconfig= (
          #    connection => "SQLite:dbname=/opt/fhem/fhem.db",
          #    user => "",
          #    password => ""
          #);
          ####################################################################################
          
      Wird configDB genutzt, ist das Konfigurationsfile in die configDB hochzuladen !

      Hinweis zu Sonderzeichen:
      Werden Sonderzeichen, wie z.B. @, $ oder %, welche eine programmtechnische Bedeutung in Perl haben im Passwort verwendet, sind diese Zeichen zu escapen. Das heißt in diesem Beispiel wäre zu verwenden: \@,\$ bzw. \%.

      DbLog spezifische Events

      DbLog generiert Events abhängig vom Initialisierungsstatus des DbLog-Devices:

        FRAME_INITIALIZED - Das grundlegende Rahmenwerk ist initialisiert. Blockierend arbeitende (Get)-Kommandos können ausgeführt werden.
        SUBPROC_INITIALIZED - Der SupProcess ist einsatzbereit. Nichtblockierend arbeitende (Set)-Kommandos und Daten Logging können ausgeführt werden.
        SUBPROC_DISCONNECTED - Der SupProcess wurde von der DB getrennt.
        SUBPROC_STOPPED - Der SupProcess wurde gestoppt.



      Define

        define <name> DbLog <configfilename> <regexp>

        <configfilename> ist die vorbereitete Konfigurationsdatei.
        <regexp> ist identisch FileLog der Filelog-Definition.

        Beispiel:
          define myDbLog DbLog /etc/fhem/db.conf .*:.*
          speichert alles in der Datenbank

        Nachdem das DbLog-Device definiert wurde, ist empfohlen einen Konfigurationscheck auszuführen:

          get <name> configCheck

        Dieser Check prüft einige wichtige Einstellungen des DbLog-Devices und gibt Empfehlungen für potentielle Verbesserungen.


        DbLog unterscheidet den synchronen (default) und asynchronen Logmodus. Der Logmodus ist über das asyncMode einstellbar. Ab Version 2.13.5 unterstützt DbLog einen gesetzten Primary Key (PK) in den Tabellen Current und History. Soll PostgreSQL mit PK genutzt werden, muss PostgreSQL mindestens Version 9.5 sein.

        Der gespeicherte Wert des Readings wird optimiert für eine automatisierte Nachverarbeitung, z.B. yes wird transformiert nach 1.

        Die gespeicherten Werte können mittels GET Funktion angezeigt werden:
          get myDbLog - - 2012-11-10 2012-11-10 KS300:temperature

        FileLog-Dateien nach DbLog übertragen

        Zur Übertragung von vorhandenen Filelog-Daten in die DbLog-Datenbank steht das spezielle Modul 98_FileLogConvert.pm zur Verfügung.
        Dieses Modul kann hier bzw. aus dem Verzeichnis ./contrib geladen werden. Weitere Informationen und Hilfestellung gibt es im entsprechenden Forumthread .


        Reporting und Management von DbLog-Datenbankinhalten

        Mit Hilfe SVG können Datenbankinhalte visualisiert werden.
        Darüber hinaus kann das Modul DbRep genutzt werden um tabellarische Datenbankauswertungen anzufertigen oder den Datenbankinhalt mit den zur Verfügung stehenden Funktionen zu verwalten.


        Troubleshooting

        Wenn nach der erfolgreichen Definition das DbLog-Device nicht wie erwartet arbeitet, können folgende Hinweise hilfreich sein:

        • Wurden die vorbereitenden Schritte gemacht, die in der commandref beschrieben sind ? (Softwarekomponenten installieren, Tabellen, Index anlegen)
        • Wurde ein "get <name> configCheck" nach dem Define durchgeführt und eventuelle Fehler beseitigt bzw. Empfehlungen umgesetzt ?
        • Falls configDB in Benutzung ... wurde das DB-Konfigurationsfile in configDB importiert (z.B. mit "configDB fileimport ./db.conf") ?
        • Beim Anlegen eines SVG-Plots erscheint keine Drop-Down Liste mit Vorschlagswerten -> Attribut "DbLogType" auf "Current/History" setzen.

        Sollten diese Hinweise nicht zum Erfolg führen, bitte den verbose-Level im DbLog Device auf 4 oder 5 hochsetzen und die Einträge bezüglich des DbLog-Device im Logfile beachten. Zur Problemanalyse bitte die Ausgabe von "list <name>", das Ergebnis von "get <name> configCheck" und die Ausgaben des DbLog-Device im Logfile im Forumthread posten.



      Set

      • set <name> addCacheLine YYYY-MM-DD HH:MM:SS|<device>|<type>|<event>|<reading>|<value>|[<unit>]

          Im asynchronen Modus wird ein neuer Datensatz in den Cache eingefügt und beim nächsten Synclauf mit abgearbeitet.

          Beispiel:
          set <name> addCacheLine 2017-12-05 17:03:59|MaxBathRoom|MAX|valveposition: 95|valveposition|95|%

      • set <name> addLog <devspec>:<Reading> [Value] [CN=<caller name>] [!useExcludes]

          Fügt einen zusätzlichen Logeintrag einer Device/Reading-Kombination in die Datenbank ein.
          Die eventuell im Attribut "DbLogExclude" spezifizierten Readings (im Quellendevice) werden nicht geloggt, es sei denn sie sind im Attribut "DbLogInclude" enthalten bzw. der addLog Aufruf erfolgte mit der Option "!useExcludes".

          <devspec>:<Reading> Das Device kann als Geräte-Spezifikation angegeben werden.
          Die Angabe von "Reading" wird als regulärer Ausdruck ausgewertet.
          Ist das Reading nicht vorhanden und der Wert "Value" angegeben, wird das Reading
          in die DB eingefügt wenn es kein regulärer Ausdruck und ein valider Readingname ist.
          Value Optional kann "Value" für den Readingwert angegeben werden.
          Ist Value nicht angegeben, wird der aktuelle Wert des Readings in die DB eingefügt.
          CN=<caller name> Mit dem Schlüssel "CN=" (Caller Name) kann dem addLog-Aufruf ein String,
          z.B. der Name des aufrufenden Devices, mitgegeben werden.
          Mit Hilfe der im Attribut valueFn hinterlegten Funktion kann
          dieser Schlüssel über die Variable $CN ausgewertet werden.
          !useExcludes addLog berücksichtigt per default die mit dem Attribut "DbLogExclude" ausgeschlossenen Readings.
          Mit dem Schüsselwort "!useExcludes" wird das gesetzte Attribut "DbLogExclude" ignoriert.

          Das Datenbankfeld "EVENT" wird automatisch mit "addLog" belegt.
          Es wird kein zusätzlicher Event im System erzeugt!

          Beispiele:
          set <name> addLog SMA_Energymeter:Bezug_Wirkleistung
          set <name> addLog TYPE=SSCam:state
          set <name> addLog MyWetter:(fc10.*|fc8.*)
          set <name> addLog MyWetter:(wind|wind_ch.*) 20 !useExcludes
          set <name> addLog TYPE=CUL_HM:FILTER=model=HM-CC-RT-DN:FILTER=subType!=(virtual|):(measured-temp|desired-temp|actuator)

          set <name> addLog USV:state CN=di.cronjob

          In der valueFn-Funktion wird der Aufrufer "di.cronjob" über die Variable $CN ausgewertet und davon abhängig der Timestamp dieses addLog korrigiert:

          valueFn = if($CN eq "di.cronjob" and $TIMESTAMP =~ m/\s00:00:[\d:]+/) { $TIMESTAMP =~ s/\s([^\s]+)/ 23:59:59/ }

      • set <name> clearReadings

          Leert Readings die von verschiedenen DbLog-Funktionen angelegt wurden.

      • set <name> eraseReadings

          Löscht alle Readings außer dem Reading "state".

      • set <name> commitCache

          Im asynchronen Modus (asyncMode=1), werden die im Cache gespeicherten Daten in die Datenbank geschrieben und danach der Cache geleert.
          Der interne Timer des asynchronen Modus wird dabei neu gesetzt.

      • set <name> configCheck

          Es werden einige wichtige Einstellungen geprüft und Empfehlungen gegeben falls potentielle Verbesserungen identifiziert wurden.
          (Hinweis: Dieser Befehl ist abgekündigt und wird in den nächsten Versionen entfernt werden. Verwenden Sie stattdessen "get <name> configCheck".)

      • set <name> count

          Ermittelt die Anzahl der Datensätze in den Tabellen current und history und schreibt die Ergebnisse in die Readings countCurrent und countHistory.

          Hinweis
          Während der Laufzeit des Befehls werden zu loggende Daten temporär im Memory Cache gespeichert und nach Beendigung des Befehls in die Datenbank geschrieben.

      • set <name> countNbl

          Die Funktion ist identisch zu "set <name> count" und wird demnächst entfernt.

      • set <name> deleteOldDays <n>

          Löscht Datensätze älter als <n> Tage in Tabelle history. Die Anzahl der gelöschten Datensätze wird im Reading lastRowsDeleted protokolliert.

          Hinweis
          Während der Laufzeit des Befehls werden zu loggende Daten temporär im Memory Cache gespeichert und nach Beendigung des Befehls in die Datenbank geschrieben.

      • set <name> exportCache [nopurge | purgecache]

          Wenn DbLog im asynchronen Modus betrieben wird, kann der Cache mit diesem Befehl in ein Textfile geschrieben werden.
          Das File wird per default im Verzeichnis (global->modpath)/log/ erstellt. Das Zielverzeichnis kann mit dem expimpdir Attribut geändert werden.

          Der Name des Files wird automatisch generiert und enthält den Präfix "cache_<name>", gefolgt von dem aktuellen Zeitstempel.

          Beispiel
          cache_LogDB_2017-03-23_22-13-55

          Mit den Optionen "nopurge" bzw. "purgecache" wird festgelegt, ob der Cacheinhalt nach dem Export gelöscht werden soll oder nicht. Mit "nopurge" (default) bleibt der Cacheinhalt erhalten.
          Das exportCacheAppend Attribut bestimmt ob mit jedem Exportvorgang ein neues Exportfile angelegt wird (default) oder der Cacheinhalt an das neuste vorhandene Exportfile angehängt wird.

      • set <name> importCachefile <file>

          Importiert ein mit "exportCache" geschriebenes File in die Datenbank.
          Die verfügbaren Dateien werden per Default im Verzeichnis (global->modpath)/log/ gesucht und eine Drop-Down Liste erzeugt sofern Dateien gefunden werden.
          Das Quellenverzeichnis kann mit dem expimpdir Attribut geändert werden.
          Es werden nur die Dateien angezeigt, die dem Muster "cache_<name>" entsprechen.

          Beispiel
          cache_LogDB_2017-03-23_22-13-55
          wenn das DbLog Device "LogDB" heißt.

          Nach einem erfolgreichen Import wird das File mit dem Präfix "impdone_" versehen und erscheint nicht mehr in der Drop-Down Liste. Soll ein Cachefile in eine andere als die Quellendatenbank importiert werden, kann der Name des DbLog Device im Filenamen angepasst werden damit dieses File in der Drop-Down Liste erscheint.

          Hinweis
          Während der Laufzeit des Befehls werden zu loggende Daten temporär im Memory Cache gespeichert und nach Beendigung des Befehls in die Datenbank geschrieben.

      • set <name> listCache

          Listet die im Memory Cache zwischengespeicherten Daten auf.

      • set <name> purgeCache

          Im asynchronen Modus (asyncMode=1), werden die im Speicher zwischengespeicherten Daten gelöscht. Es werden keine Daten aus dem Cache in die Datenbank geschrieben.

      • set <name> reduceLog <no>[:<nn>] [average[=day]] [exclude=device1:reading1,device2:reading2,...]

          Reduziert historische Datensätze, die älter sind als <no> Tage und (optional) neuer sind als <nn> Tage auf einen Eintrag (den ersten) pro Stunde je Device & Reading.
          Innerhalb von device/reading können SQL-Wildcards "%" und "_" verwendet werden.

          Durch die optionale Angabe von 'average' bzw. 'average=day' wird nicht nur die Datenbank bereinigt, sondern alle numerischen Werte einer Stunde bzw. eines Tages werden auf einen einzigen Mittelwert reduziert.

          Optional kann als letzer Parameter "exclude=device1:reading1,device2:reading2,...." angegeben werden um device/reading Kombinationen von reduceLog auszuschließen.
          Anstatt "exclude" kann als letzer Parameter "include=device:reading" angegeben werden um die auf die Datenbank ausgeführte SELECT-Abfrage einzugrenzen. Dadurch wird die RAM-Belastung verringert und die Performance erhöht. Die Option "include" kann nur mit einer device:reading Kombination angegeben werden.

            Beispiele:
            set <name> reduceLog 270 average include=Luftdaten_remote:%
            set <name> reduceLog 100:200 average exclude=SMA_Energymeter:Bezug_Wirkleistung

          Hinweis
          Während der Laufzeit des Befehls werden zu loggende Daten temporär im Memory Cache gespeichert und nach Beendigung des Befehls in die Datenbank geschrieben.

      • set <name> reopen [n]

          Schließt die Datenbank und öffnet sie danach sofort wieder wenn keine Zeit [n] in Sekunden angegeben wurde.
          Wurde eine optionale Verzögerungszeit [n] in Sekunden angegeben, wird die Verbindung zur Datenbank geschlossen und erst nach Ablauf von [n] Sekunden wieder neu verbunden.
          Während der Zeit der Datenbankschließung werden zu loggende Events im Memory Cache gespeichert und nach dem Reconnect in die Datenbank geschrieben.

      • set <name> rereadcfg

          Die Konfigurationsdatei wird neu eingelesen.
          Nach dem Einlesen wird eine bestehende Datenbankverbindung beendet und mit den konfigurierten Verbindungsdaten neu aufgebaut.

      • set <name> stopSubProcess

          Ein laufender SubProzess wird beendet.
          Sobald durch eine Operation ein neuer SubProzess benötigt wird, erfolgt die automatische Neuinitialisierung eines SubProzesses.

          Hinweis
          Die Neuinitialisierung des SubProzesses während der Laufzeit verursacht einen erhöhten RAM Verbrauch bis zu einem FHEM Neustart .

      • set <name> userCommand <validSelectStatement>

          Führt einfache SQL Select Befehle auf der Datenbank aus.
          Das Ergebnis des Statements wird in das Reading "userCommandResult" geschrieben. Das Ergebnis kann nur einzeilig sein.
          Die Ausführung von SQL-Befehlen in DbLog ist veraltet. Dafür sollte das Auswertungsmodul DbRep genutzt werden.

          Hinweis
          Während der Laufzeit des Befehls werden zu loggende Daten temporär im Memory Cache gespeichert und nach Beendigung des Befehls in die Datenbank geschrieben.


      Get

      • get <name> configCheck

          Es werden einige wichtige Einstellungen geprüft und Empfehlungen gegeben falls potentielle Verbesserungen identifiziert wurden.

      • get <name> ReadingsMaxVal[Timestamp] <Device> <Reading> <default>

          Ermittelt den Datensatz mit dem größten Wert der angegebenen Device / Reading Kombination aus der history Tabelle.
          Zurück gegeben wird nur der Wert oder die Kombination aus Wert und Timestamp als String "<Wert> , <Timestamp>".
          <default> gibt einen definierten Rückgabewert an, wenn kein Wert ermittelt werden kann.

          Hinweis:
          Dieser Datenbankabruf arbeitet blockierend und beeinflusst FHEM wenn die Datenbank nicht oder nicht hinreichend schnell antwortet. Für nicht-blockierende Datenbankabfragen wird auf das Modul DbRep verwiesen.

      • get <name> ReadingsMinVal[Timestamp] <Device> <Reading> <default>

          Ermittelt den Datensatz mit dem kleinsten Wert der angegebenen Device / Reading Kombination aus der history Tabelle.
          Zurück gegeben wird nur der Wert oder die Kombination aus Wert und Timestamp als String "<Wert> , <Timestamp>".
          <default> gibt einen definierten Rückgabewert an, wenn kein Wert ermittelt werden kann.

          Hinweis:
          Dieser Datenbankabruf arbeitet blockierend und beeinflusst FHEM wenn die Datenbank nicht oder nicht hinreichend schnell antwortet. Für nicht-blockierende Datenbankabfragen wird auf das Modul DbRep verwiesen.

      • get <name> ReadingsAvgVal <Device> <Reading> <default>

          Ermittelt den Durchschnittswert der angegebenen Device / Reading Kombination aus der history Tabelle.
          Zurück gegeben wird der einfache arithmetische Durchschnittswert.
          <default> gibt einen definierten Rückgabewert an, wenn kein Wert ermittelt werden kann.

          Hinweis:
          Dieser Datenbankabruf arbeitet blockierend und beeinflusst FHEM wenn die Datenbank nicht oder nicht hinreichend schnell antwortet. Für nicht-blockierende Datenbankabfragen wird auf das Modul DbRep verwiesen.

      • get <name> ReadingsVal[Timestamp] <Device> <Reading> <default>

          Liest den letzten (neuesten) in der history Tabelle gespeicherten Datensatz der angegebenen Device / Reading Kombination.
          Zurück gegeben wird nur der Wert oder die Kombination aus Wert und Timestamp als String "<Wert> , <Timestamp>".
          <default> gibt einen definierten Rückgabewert an, wenn kein Wert ermittelt werden kann.

          Hinweis:
          Dieser Datenbankabruf arbeitet blockierend und beeinflusst FHEM wenn die Datenbank nicht oder nicht hinreichend schnell antwortet. Für nicht-blockierende Datenbankabfragen wird auf das Modul DbRep verwiesen.

      • get <name> ReadingsTimestamp <Device> <Reading> <default>

          Liest den Zeitstempel des letzten (neuesten) in der history Tabelle gespeicherten Datensatzes der angegebenen Device/Reading Kombination und gibt diesen Wert zurück.
          <default> gibt einen definierten Rückgabewert an, wenn kein Wert in der Datenbank gefunden wird.

          Hinweis:
          Dieser Datenbankabruf arbeitet blockierend und beeinflusst FHEM wenn die Datenbank nicht oder nicht hinreichend schnell antwortet. Für nicht-blockierende Datenbankabfragen wird auf das Modul DbRep verwiesen.

      • get <name> retrieve <querytype> <device|table> <reading> <from> <to> <offset> <limit>

          Liest Daten aus der Datenbank Tabelle history und gibt die Ergebnisse als JSON formatiert zurück.
          Die Abfragemethode bzw. das gewünschte Abfrageergebnis wird durch den angegebenen <querytype> bestimmt.
          Jeder <querytype> verlangt evtl. weitere Parameter gemäß der folgenden Tabelle. Nicht eingegebene Parameter sind immer als "" anzugeben sofern danach noch ein weiterer Parameter eingegeben wird.

            alldevices Ermittelt alle in der Datenbank gespeicherten Devices.
            allreadings Ermittelt alle in der Datenbank gespeicherten Readings für ein bestimmtes Device.
            benötigte Parameter: <device>
            count Liefert die Anzahl Datensätze der angegebenen Tabelle.
            benötigte Parameter: <table> (history oder current)
            fetchrows Ermittelt die gespeicherten Datensätze eines bestimmten Zeitraumes.
            Die Anzahl der Datensätze im definierten Zeitraum wird als Schlüssel "totalcount" zurückgegeben.
            benötigte Parameter: <from>, <to>, <offset>, <limit>
            last Listet die letzten 10 gespeicherten Events auf.
            mögliche Parameter: <limit> (überschreibt den Standard 10)
            timerange Ermittelt die gespeicherten Datensätze der angegebenen Device / Reading Kombination.
            benötigte Parameter: <device>, <reading>, <from>, <to>
            hourstats Errechnet die Statistiken SUM, AVG, MIN, MAX, COUNT für eine Stunde.
            benötigte Parameter: <device>, <reading>, <from>, <to>
            daystats Errechnet die Statistiken SUM, AVG, MIN, MAX, COUNT für einen Tag.
            benötigte Parameter: <device>, <reading>, <from>, <to>
            weekstats Errechnet die Statistiken SUM, AVG, MIN, MAX, COUNT für eine Woche.
            benötigte Parameter: <device>, <reading>, <from>, <to>
            monthstats Errechnet die Statistiken SUM, AVG, MIN, MAX, COUNT für einen Monat.
            benötigte Parameter: <device>, <reading>, <from>, <to>
            yearstats Errechnet die Statistiken SUM, AVG, MIN, MAX, COUNT für ein Jahr.
            benötigte Parameter: <device>, <reading>, <from>, <to>

          Hinweis:
          Dieser Datenbankabruf arbeitet blockierend und beeinflusst FHEM wenn die Datenbank nicht oder nicht hinreichend schnell antwortet. Für nicht-blockierende Datenbankabfragen wird auf das Modul DbRep verwiesen.

          Beispiele:
          • get LogSQLITE3 retrieve alldevices
          • get LogSQLITE3 retrieve allreadings MySTP_5000
          • get LogSQLITE3 retrieve last "" "" "" "" "" 50
          • get LogSQLITE3 retrieve count history
          • get LogSQLITE3 retrieve timerange MySTP_5000 etotal 2023-01-01_00:00:00 2023-01-25_00:00:00
          • get LogSQLITE3 retrieve fetchrows MySTP_5000 "" 2023-01-01_00:00:00 2023-01-25_00:00:00 0 100
          • get LogSQLITE3 retrieve fetchrows "" etotal 2023-01-01_00:00:00 2023-01-25_00:00:00 0 100
          • get LogSQLITE3 retrieve hourstats MySTP_5000 etotal 2023-01-01_00:00:00 2023-01-25_00:00:00


      Get für die Nutzung von SVG-Plots

      • get <name> <in> <out> <from> <to> <column_spec>

        Liesst Daten aus der Datenbank. Wird durch die Frontends benutzt um Plots zu generieren ohne selbst auf die Datenank zugreifen zu müssen.
        • <in>
          Ein Parameter um eine Kompatibilität zu Filelog herzustellen.
          In der Definition eines SVG Devices entspricht dieser Paramter der Angabe von :<logfile> am Ende der Definition.
          Folgende Ausprägungen sind zugelassen:
          • current: die Werte werden aus der Tabelle "current" gelesen.
          • history: die Werte werden aus der Tabelle "history" gelesen.
          • table_<Tabelle>: die Werte werden aus der angegeben alternativen Tabelle gelesen. Die Tabelle (Name) ist in der Datenbank mit Kleinbuchstaben anzulegen.
            (Beispiel: table_energy, "energy" ist die in der Datenbank angelegte Alternativtabelle)
          • -: identisch wie "history"

        • <out>
          Ein Parameter um eine Kompatibilität zum Filelog herzustellen. Dieser Parameter ist per default immer auf - zu setzen um die Ermittlung der Daten aus der Datenbank für die Plotgenerierung zu prüfen.
          Folgende Ausprägungen sind zugelassen:
          • ALL: Es werden alle Spalten der Datenbank ausgegeben. Inclusive einer Überschrift.
          • Array: Es werden alle Spalten der Datenbank als Hash ausgegeben. Alle Datensätze als Array zusammengefasst.
          • INT: intern zur Plotgenerierung verwendet
          • -: default

        • <from> / <to>
          Wird benutzt um den Zeitraum der Daten einzugrenzen. Es ist das folgende Zeitformat oder ein Teilstring davon zu benutzen:
            YYYY-MM-DD_HH24:MI:SS

        • <column_spec>
          Für jede column_spec Gruppe wird ein Datenset zurückgegeben welches durch einen Kommentar getrennt wird. Dieser Kommentar repräsentiert die column_spec.

          Syntax: <device>:<reading>:<default>:<fn>:<regexp>

          • <device>
            Der Name des Devices. Achtung: Gross/Kleinschreibung beachten!
            Es kann ein % als Jokerzeichen angegeben werden.

          • <reading>
            Das Reading des angegebenen Devices zur Datenselektion.
            Es kann ein % als Jokerzeichen angegeben werden.
            Achtung: Gross/Kleinschreibung beachten!

          • <default>
            Zur Zeit noch nicht implementiert.

          • <fn> Angabe einer speziellen Funktion:
            • int
              Ermittelt den Zahlenwert ab dem Anfang der Zeichenkette aus der Spalte "VALUE". Benutzt z.B. für Ausprägungen wie 10%.
            • int<digit>
              Ermittelt den Zahlenwert ab dem Anfang der Zeichenkette aus der Spalte "VALUE", inclusive negativen Vorzeichen und Dezimaltrenner. Benutzt z.B. für Auspägungen wie -5.7°C.
            • delta-h / delta-d
              Ermittelt die relative Veränderung eines Zahlenwertes pro Stunde oder pro Tag. Wird benutzt z.B. für Spalten die einen hochlaufenden Zähler enthalten wie im Falle für ein KS300 Regenzähler oder dem 1-wire Modul OWCOUNT.
            • delta-ts
              Ermittelt die vergangene Zeit zwischen dem letzten und dem aktuellen Logeintrag in Sekunden und ersetzt damit den originalen Wert.

          • <regexp>
            Diese Zeichenkette wird als Perl Befehl ausgewertet. Die regexp wird vor dem angegebenen <fn> Parameter ausgeführt.
            Bitte zur Beachtung: Diese Zeichenkette darf keine Leerzeichen enthalten da diese sonst als <column_spec> Trennung interpretiert werden und alles nach dem Leerzeichen als neue <column_spec> gesehen wird.

            Schlüsselwörter
          • $val ist der aktuelle Wert die die Datenbank für ein Device/Reading ausgibt.
          • $ts ist der aktuelle Timestamp des Logeintrages.
          • Wird als $val das Schlüsselwort "hide" zurückgegeben, so wird dieser Logeintrag nicht ausgegeben, trotzdem aber für die Zeitraumberechnung verwendet.
          • Wird als $val das Schlüsselwort "ignore" zurückgegeben, so wird dieser Logeintrag nicht für eine Folgeberechnung verwendet.


        Beispiele:
        • get myDbLog - - 2012-11-10 2012-11-20 KS300:temperature

        • get myDbLog current ALL - - %:temperature
          Damit erhält man alle aktuellen Readings "temperature" von allen in der DB geloggten Devices. Achtung: bei Nutzung von Jokerzeichen auf die history-Tabelle kann man sein FHEM aufgrund langer Laufzeit lahmlegen!

        • get myDbLog - - 2012-11-10_10 2012-11-10_20 KS300:temperature::int1
          gibt Daten aus von 10Uhr bis 20Uhr am 10.11.2012

        • get myDbLog - all 2012-11-10 2012-11-20 KS300:temperature

        • get myDbLog - - 2012-11-10 2012-11-20 KS300:temperature KS300:rain::delta-h KS300:rain::delta-d

        • get myDbLog - - 2012-11-10 2012-11-20 MyFS20:data:::$val=~s/(on|off).*/$1eq"on"?1:0/eg
          gibt 1 zurück für alle Ausprägungen von on* (on|on-for-timer etc) und 0 für alle off*

        • get myDbLog - - 2012-11-10 2012-11-20 Bodenfeuchte:data:::$val=~s/.*B:\s([-\.\d]+).*/$1/eg
          Beispiel von OWAD: Ein Wert wie z.B.: "A: 49.527 % B: 66.647 % C: 9.797 % D: 0.097 V"
          und die Ausgabe ist für das Reading B folgende: 2012-11-20_10:23:54 66.647

        • get DbLog - - 2013-05-26 2013-05-28 Pumpe:data::delta-ts:$val=~s/on/hide/
          Realisierung eines Betriebsstundenzählers. Durch delta-ts wird die Zeit in Sek zwischen den Log- Einträgen ermittelt. Die Zeiten werden bei den on-Meldungen nicht ausgegeben welche einer Abschaltzeit entsprechen würden.


      Get für die Nutzung von webcharts

      • get <name> <in> <out> <from> <to> <device> <querytype> <xaxis> <yaxis> <savename> <chartconfig> <pagingstart> <paginglimit>

        Liest Daten aus der Datenbank aus und gibt diese in JSON formatiert aus. Wird für das Charting Frontend (Wiki: Neues Charting Frontend) genutzt.

        • <name>
          Der Name des definierten DbLog Devices, so wie er in der fhem.cfg angegeben wurde.

        • <in>
          Dieser Parameter ist immer auf - zu setzen.

        • <out>
          Dieser Parameter ist auf webchart zu setzen.

        • <from> / <to>
          Wird benutzt um den Zeitraum der Daten einzugrenzen. Es ist das folgende Zeitformat zu benutzen:
            YYYY-MM-DD_HH24:MI:SS

        • <device>
          Ein String, der das abzufragende Device darstellt.

        • <querytype>
          Ein String, der die zu verwendende Abfragemethode darstellt. Zur Zeit unterstützte Werte sind:
          getreadings um für ein bestimmtes device alle Readings zu erhalten
          getdevices um alle verfügbaren devices zu erhalten
          timerange um Chart-Daten abzufragen. Es werden die Parameter 'xaxis', 'yaxis', 'device', 'to' und 'from' benötigt
          savechart um einen Chart unter Angabe eines 'savename' und seiner zugehörigen Konfiguration abzuspeichern
          deletechart um einen zuvor gespeicherten Chart unter Angabe einer id zu löschen
          getcharts um eine Liste aller gespeicherten Charts zu bekommen.
          getTableData um Daten aus der Datenbank abzufragen und in einer Tabelle darzustellen. Benötigt paging Parameter wie start und limit.
          hourstats um Statistiken für einen Wert (yaxis) für eine Stunde abzufragen.
          daystats um Statistiken für einen Wert (yaxis) für einen Tag abzufragen.
          weekstats um Statistiken für einen Wert (yaxis) für eine Woche abzufragen.
          monthstats um Statistiken für einen Wert (yaxis) für einen Monat abzufragen.
          yearstats um Statistiken für einen Wert (yaxis) für ein Jahr abzufragen.

        • <xaxis>
          Ein String, der die X-Achse repräsentiert. Es muß ein gültiger Feldname, typisch 'TIMESTAMP', der history-Tabelle sein.

        • <yaxis>
          Ein String, der die Y-Achse repräsentiert und auf den Namen des auszuwertenden Readings zu setzen ist.

        • <savename>
          Ein String, unter dem ein Chart in der Datenbank gespeichert werden soll.

        • <chartconfig>
          Ein jsonstring der den zu speichernden Chart repräsentiert.

        • <pagingstart>
          Ein Integer um den Startwert für die Abfrage 'getTableData' festzulegen.

        • <paginglimit>
          Ein Integer um den Limitwert für die Abfrage 'getTableData' festzulegen.


        Beispiele:
        • get logdb - webchart "" "" "" getcharts
          Liefert alle gespeicherten Charts aus der Datenbank

        • get logdb - webchart "" "" "" getdevices
          Liefert alle verfügbaren Devices aus der Datenbank

        • get logdb - webchart "" "" ESA2000_LED_011e getreadings
          Liefert alle verfügbaren Readings aus der Datenbank unter Angabe eines Gerätes

        • get logdb - webchart 2013-02-11_00:00:00 2013-02-12_00:00:00 ESA2000_LED_011e timerange TIMESTAMP day_kwh
          Liefert Chart-Daten, die auf folgenden Parametern basieren: 'xaxis', 'yaxis', 'device', 'to' und 'from'
          Die Ausgabe erfolgt als JSON, z.B.: [{'TIMESTAMP':'2013-02-11 00:10:10','VALUE':'0.22431388090756'},{'TIMESTAMP'.....}]

        • get logdb - webchart 2013-02-11_00:00:00 2013-02-12_00:00:00 ESA2000_LED_011e savechart TIMESTAMP day_kwh tageskwh
          Speichert einen Chart unter Angabe eines 'savename' und seiner zugehörigen Konfiguration

        • get logdb - webchart "" "" "" deletechart "" "" 7
          Löscht einen zuvor gespeicherten Chart unter Angabe einer id


      Attribute

      • addStateEvent [0|1]

          Bekanntlich wird normalerweise bei einem Event mit dem Reading "state" der state-String entfernt, d.h. der Event ist nicht zum Beispiel "state: on" sondern nur "on".
          Meistens ist es aber hilfreich in DbLog den kompletten Event verarbeiten zu können. Deswegen übernimmt DbLog per Default den Event inklusive dem Reading-String "state".
          In einigen Fällen, z.B. alten oder speziellen Modulen, ist es allerdings wünschenswert den state-String wie gewöhnlich zu entfernen. In diesen Fällen bitte addStateEvent = "0" setzen. Versuchen sie bitte diese Einstellung, falls es mit dem Standard Probleme geben sollte.

      • asyncMode [0|1]

          Dieses Attribut stellt den Verarbeitungsprozess ein nach dessen Verfahren das DbLog Device die Daten in die Datenbank schreibt.
          DbLog verwendet zum Schreiben der Log-Daten in die Datenbank einen SubProzess und verarbeitet die Daten generell nicht blockierend für FHEM.
          Dadurch erfolgt der Schreibprozess in die Datenbank generell nicht blockierend und FHEM wird in dem Fall, dass die Datenbank nicht performant arbeitet oder nicht verfügbar ist (Wartung, Fehlerzustand, etc.), nicht beeinträchtigt.
          (default: 0)

            0 - Synchroner Log-Modus. Die zu loggenden Daten werden nur kurz im Cache zwischengespeichert und sofort
            in die Datenbank geschrieben.
            Vorteile:
            Die Daten stehen im Prinzip sofort in der Datenbank zur Verfügung.
            Bei einem Absturz von FHEM gehen sehr wenige bis keine Daten verloren.
            Nachteile:
            Eine alternative Speicherung im Filesystem (bei Datenbankproblemen) wird nicht unterstützt.
            1 - Asynchroner Log-Modus. Die zu loggenden Daten werden zunächst in einem Memory Cache zwischengespeichert
            und abhängig von einem Zeitintervall bzw. Füllgrad des Caches in die Datenbank geschrieben.
            Vorteile:
            Die Daten werden zwischengespeichert und gehen nicht verloren wenn die Datenbank nicht verfügbar ist
            oder fehlerhaft arbeitet. Die alternative Speicherung im Filesystem wird unterstützt.
            Nachteile:
            Die Daten stehen zeitlich verzögert in der Datenbank zur Verfügung.
            Bei einem Absturz von FHEM gehen alle im Memory Cache zwischengespeicherten Daten verloren.

      • cacheEvents [2|1|0]

            0 - Es werden keine Events für CacheUsage erzeugt.
            1 - Es werden Events für das Reading CacheUsage erzeugt wenn ein neuer Datensatz zum Cache hinzugefügt wurde.
            2 - Es werden Events für das Reading CacheUsage erzeugt wenn im asynchronen Mode der Schreibzyklus in die
            Datenbank beginnt. CacheUsage enthält zu diesem Zeitpunkt die Anzahl der im Cache befindlichen
            Datensätze.
          (default: 0)

      • cacheLimit <n>

          Im asynchronen Logmodus wird der Cache in die Datenbank weggeschrieben und geleert wenn die Anzahl <n> Datensätze im Cache erreicht ist.
          Der Timer des asynchronen Logmodus wird dabei neu auf den Wert des Attributs "syncInterval" gesetzt. Im Fehlerfall wird ein erneuter Schreibversuch frühestens nach syncInterval/2 gestartet.
          (default: 500)

      • cacheOverflowThreshold <n>

          Legt im asynchronen Logmodus den Schwellenwert von <n> Datensätzen fest, ab dem der Cacheinhalt in ein File exportiert wird anstatt die Daten in die Datenbank zu schreiben.
          Die ausgeführte Funktion entspricht dem Set-Kommando "exportCache purgecache" und verwendet dessen Einstellungen.

          Mit diesem Attribut kann eine Überlastung des Serverspeichers verhindert werden falls die Datenbank für eine längere Zeit nicht verfügbar ist (z.B. im Fehler- oder Wartungsfall). Ist der Attributwert kleiner oder gleich dem Wert des Attributs "cacheLimit", wird der Wert von "cacheLimit" für "cacheOverflowThreshold" verwendet.
          In diesem Fall wird der Cache immer in ein File geschrieben anstatt in die Datenbank sofern der Schwellenwert erreicht wurde.
          So können die Daten mit dieser Einstellung gezielt in ein oder mehrere Dateien geschreiben werden, um sie zu einem späteren Zeitpunkt mit dem Set-Befehl "importCachefile" in die Datenbank zu importieren.

      • colEvent <n>

          Die Feldlänge für das DB-Feld EVENT wird userspezifisch angepasst. Mit dem Attribut kann der Default-Wert im Modul verändert werden wenn die Feldlänge in der Datenbank manuell geändert wurde. Mit colEvent=0 wird das Datenbankfeld EVENT nicht gefüllt.
          Hinweis:
          Mit gesetztem Attribut gelten alle Feldlängenbegrenzungen auch für SQLite DB wie im Internal COLUMNS angezeigt!

      • colReading <n>

          Die Feldlänge für das DB-Feld READING wird userspezifisch angepasst. Mit dem Attribut kann der Default-Wert im Modul verändert werden wenn die Feldlänge in der Datenbank manuell geändert wurde. Mit colReading=0 wird das Datenbankfeld READING nicht gefüllt.
          Hinweis:
          Mit gesetztem Attribut gelten alle Feldlängenbegrenzungen auch für SQLite DB wie im Internal COLUMNS angezeigt!

      • colType <n>

          Die Feldlänge für das DB-Feld TYPE wird userspezifisch angepasst. Mit dem Attribut kann der Default-Wert im Modul verändert werden wenn die Feldlänge in der Datenbank manuell geändert wurde. Mit colType=0 wird das Datenbankfeld TYPE nicht gefüllt.
          Hinweis:
          Mit gesetztem Attribut gelten alle Feldlängenbegrenzungen auch für SQLite DB wie im Internal COLUMNS angezeigt!

      • colValue <n>

          Die Feldlänge für das DB-Feld VALUE wird userspezifisch angepasst. Mit dem Attribut kann der Default-Wert im Modul verändert werden wenn die Feldlänge in der Datenbank manuell geändert wurde. Mit colValue=0 wird das Datenbankfeld VALUE nicht gefüllt.
          Hinweis:
          Mit gesetztem Attribut gelten alle Feldlängenbegrenzungen auch für SQLite DB wie im Internal COLUMNS angezeigt!

      • commitMode [basic_ta:on | basic_ta:off | ac:on_ta:on | ac:on_ta:off | ac:off_ta:on]

          Ändert die Verwendung der Datenbank Autocommit- und/oder Transaktionsfunktionen. Wird Transaktion "aus" verwendet, werden im asynchronen Modus nicht gespeicherte Datensätze nicht an den Cache zurück gegeben. Dieses Attribut ist ein advanced feature und sollte nur im konkreten Bedarfs- bzw. Supportfall geändert werden.

          • basic_ta:on - Autocommit Servereinstellung / Transaktion ein (default)
          • basic_ta:off - Autocommit Servereinstellung / Transaktion aus
          • ac:on_ta:on - Autocommit ein / Transaktion ein
          • ac:on_ta:off - Autocommit ein / Transaktion aus
          • ac:off_ta:on - Autocommit aus / Transaktion ein (Autocommit "aus" impliziert Transaktion "ein")

      • convertTimezone [UTC | none]

          UTC - der lokale Timestamp des Events wird nach UTC konvertiert.
          (default: none)

          Hinweis:
          Die Perl-Module 'DateTime' und 'DateTime::Format::Strptime' müssen installiert sein !

      • DbLogType [Current|History|Current/History|SampleFill/History]

          Dieses Attribut legt fest, welche Tabelle oder Tabellen in der Datenbank genutzt werden sollen. Ist dieses Attribut nicht gesetzt, wird per default die Einstellung history verwendet.

          Bedeutung der Einstellungen sind:

            Current Events werden nur in die current-Tabelle geloggt. Die current-Tabelle wird bei der SVG-Erstellung ausgewertet.
            History Events werden nur in die history-Tabelle geloggt. Es wird keine DropDown-Liste mit Vorschlägen bei der SVG-Erstellung erzeugt.
            Current/History Events werden sowohl in die current- also auch in die hitory Tabelle geloggt. Die current-Tabelle wird bei der SVG-Erstellung ausgewertet.
            SampleFill/History Events werden nur in die history-Tabelle geloggt. Die current-Tabelle wird bei der SVG-Erstellung ausgewertet und kann zur Erzeugung einer DropDown-Liste mittels einem DbRep-Device
            "set <DbRep-Name> tableCurrentFillup" mit einem einstellbaren Extract der history-Tabelle gefüllt werden (advanced Feature).


          Hinweis:
          Die Current-Tabelle muß genutzt werden um eine Device:Reading-DropDownliste zur Erstellung eines SVG-Plots zu erhalten.

      • DbLogSelectionMode [Exclude|Include|Exclude/Include]

          Dieses für DbLog-Devices spezifische Attribut beeinflußt, wie die Device-spezifischen Attribute DbLogExclude und DbLogInclude ausgewertet werden. DbLogExclude und DbLogInclude werden in den Quellen-Devices gesetzt.
          Ist das Attribut DbLogSelectionMode nicht gesetzt, ist "Exclude" der Default.

          • Exclude: Readings werden geloggt wenn sie auf den im DEF angegebenen Regex matchen. Ausgeschlossen werden die Readings, die auf den Regex im Attribut DbLogExclude matchen.
            Das Attribut DbLogInclude wird in diesem Fall nicht berücksichtigt.

          • Include: Es werden nur Readings geloggt welche über den Regex im Attribut DbLogInclude eingeschlossen werden.
            Das Attribut DbLogExclude wird in diesem Fall ebenso wenig berücksichtigt wie der Regex im DEF.

          • Exclude/Include: Funktioniert im Wesentlichen wie "Exclude", nur dass sowohl das Attribut DbLogExclude als auch das Attribut DbLogInclude geprüft wird. Readings die durch DbLogExclude zwar ausgeschlossen wurden, mit DbLogInclude aber wiederum eingeschlossen werden, werden somit dennoch beim Logging berücksichtigt.

      • DbLogInclude Regex[:MinInterval][:force],[Regex[:MinInterval][:force]], ...

          Mit dem Attribut DbLogInclude werden die Readings definiert, die in der Datenbank gespeichert werden sollen.
          Die Definition der zu speichernden Readings erfolgt über einen regulären Ausdruck und alle Readings, die mit dem regulären Ausdruck matchen, werden in der Datenbank gespeichert.
          Der optionale Zusatz <MinInterval> gibt an, dass ein Wert dann gespeichert wird wenn mindestens <MinInterval> Sekunden seit der letzten Speicherung vergangen sind.
          Unabhängig vom Ablauf des Intervalls wird das Reading gespeichert wenn sich der Wert des Readings verändert hat.
          Mit dem optionalen Modifier "force" kann erzwungen werden das angegebene Intervall <MinInterval> einzuhalten auch wenn sich der Wert des Readings seit der letzten Speicherung verändert hat.

                    | Modifier |         innerhalb Intervall          | außerhalb Intervall |
                    |          | Wert gleich        | Wert geändert   |                     |
                    |----------+--------------------+-----------------+---------------------|
                    | <none>   | ignorieren         | speichern       | speichern           |
                    | force    | ignorieren         | ignorieren      | speichern           |
                  

          Hinweise:
          Das Attribut DbLogInclude wird in allen Devices propagiert wenn DbLog verwendet wird.
          Das Attribut DbLogSelectionMode muss entsprechend gesetzt sein um DbLogInclude zu aktivieren.
          Mit dem Attribut defaultMinInterval kann ein Default für <MinInterval> vorgegeben werden.

          Beispiele:
          attr MyDevice1 DbLogInclude .*
          attr MyDevice2 DbLogInclude state,(floorplantext|MyUserReading):300,battery:3600
          attr MyDevice2 DbLogInclude state,(floorplantext|MyUserReading):300:force,battery:3600:force

      • DbLogExclude Regex[:MinInterval][:force],[regex[:MinInterval][:force]] ...

          Mit dem Attribut DbLogExclude werden die Readings definiert, die nicht in der Datenbank gespeichert werden sollen.
          Die Definition der auszuschließenden Readings erfolgt über einen regulären Ausdruck und alle Readings, die mit dem regulären Ausdruck matchen, werden vom Logging in die Datenbank ausgeschlossen.
          Readings, die nicht über den Regex ausgeschlossen wurden, werden in der Datenbank geloggt. Das Verhalten der Speicherung wird mit den nachfolgenden optionalen Angaben gesteuert.
          Der optionale Zusatz <MinInterval> gibt an, dass ein Wert dann gespeichert wird wenn mindestens <MinInterval> Sekunden seit der letzten Speicherung vergangen sind.
          Unabhängig vom Ablauf des Intervalls wird das Reading gespeichert wenn sich der Wert des Readings verändert hat.
          Mit dem optionalen Modifier "force" kann erzwungen werden das angegebene Intervall <MinInterval> einzuhalten auch wenn sich der Wert des Readings seit der letzten Speicherung verändert hat.

                    | Modifier |         innerhalb Intervall          | außerhalb Intervall |
                    |          | Wert gleich        | Wert geändert   |                     |
                    |----------+--------------------+-----------------+---------------------|
                    | <none>   | ignorieren         | speichern       | speichern           |
                    | force    | ignorieren         | ignorieren      | speichern           |
                  

          Hinweise:
          Das Attribut DbLogExclude wird in allen Devices propagiert wenn DbLog verwendet wird.
          Das Attribut DbLogSelectionMode kann entsprechend gesetzt werden um DbLogExclude zu deaktivieren.
          Mit dem Attribut defaultMinInterval kann ein Default für <MinInterval> vorgegeben werden.

          Beispiel
          attr MyDevice1 DbLogExclude .*
          attr MyDevice2 DbLogExclude state,(floorplantext|MyUserReading):300,battery:3600
          attr MyDevice2 DbLogExclude state,(floorplantext|MyUserReading):300:force,battery:3600:force

      • DbLogValueFn {}

          Wird DbLog genutzt, wird in allen Devices das Attribut DbLogValueFn propagiert. Dieses Attribut wird in den Quellendevices gesetzt und erlaubt die Veränderung der Werte vor dem Logging oder den Ausschluß des Datensatzes vom Logging.

          Es kann auf die Variablen $TIMESTAMP, $READING, $VALUE (Wert des Readings) und $UNIT (Einheit des Readingswert) zugegriffen werden und diese vor dem Loggen in die Datenbank verändern.
          Lesezugriff besteht auf $DEVICE (den Namen des Quellengeräts), $EVENT, $LASTTIMESTAMP und $LASTVALUE.

          Die Variablen $LASTTIMESTAMP und $LASTVALUE enthalten Zeit und Wert des zuletzt protokollierten Datensatzes von $DEVICE / $READING.
          Soll $TIMESTAMP verändert werden, muss die Form "yyyy-mm-dd hh:mm:ss" eingehalten werden. Anderenfalls wird die geänderte $TIMESTAMP Variable nicht übernommen. Durch Setzen der Variable "$IGNORE=1" wird der Datensatz vom Logging ausgeschlossen.

          Die devicespezifische Funktion in "DbLogValueFn" wird vor der eventuell im DbLog-Device vorhandenen Funktion im Attribut "valueFn" auf den Datensatz angewendet.

          Beispiel
          attr SMA_Energymeter DbLogValueFn
          {
            if ($READING eq "Bezug_WirkP_Kosten_Diff") {
              $UNIT="Diff-W";
            }
            if ($READING =~ /Einspeisung_Wirkleistung_Zaehler/ && $VALUE < 2) {
              $IGNORE=1;
            }
          }
          
      • dbSchema <schema>

          Dieses Attribut ist setzbar für die Datenbanken MySQL/MariaDB und PostgreSQL. Die Tabellennamen (current/history) werden durch das angegebene Datenbankschema ergänzt. Das Attribut ist ein advanced Feature und nomalerweise nicht nötig zu setzen.

      • defaultMinInterval <devspec>::<MinInterval>[::force],[<devspec>::<MinInterval>[::force]] ...

          Mit diesem Attribut wird ein Standard Minimum Intervall für devspec festgelegt. Ist defaultMinInterval angegeben, wird der Logeintrag nicht geloggt, wenn das Intervall noch nicht erreicht und der Wert des Readings sich nicht verändert hat.
          Ist der optionale Parameter "force" hinzugefügt, wird der Logeintrag auch dann nicht geloggt, wenn sich der Wert des Readings verändert hat.
          Eventuell im Quelldevice angegebene Spezifikationen DbLogExclude / DbLogInclude haben Vorrag und werden durch defaultMinInterval nicht überschrieben.
          Die Eingabe kann mehrzeilig erfolgen.

          Beispiele
          attr dblog defaultMinInterval .*::120::force
          # Events aller Devices werden nur geloggt, wenn 120 Sekunden zum letzten Logeintrag vergangen sind ist (Reading spezifisch) unabhängig von einer eventuellen Änderung des Wertes.
          attr dblog defaultMinInterval (Weather|SMA)::300
          # Events der Devices "Weather" und "SMA" werden nur geloggt wenn 300 Sekunden zum letzten Logeintrag vergangen sind (Reading spezifisch) und sich der Wert nicht geändert hat.
          attr dblog defaultMinInterval TYPE=CUL_HM::600::force
          # Events aller Devices des Typs "CUL_HM" werden nur geloggt, wenn 600 Sekunden zum letzten Logeintrag vergangen sind (Reading spezifisch) unabhängig von einer eventuellen Änderung des Wertes.

      • excludeDevs <devspec1>[#Reading],<devspec2>[#Reading],<devspec...>

          Die Device/Reading-Kombinationen "devspec1#Reading", "devspec2#Reading" bis "devspec..." werden vom Logging in die Datenbank global ausgeschlossen.
          Die Angabe eines auszuschließenden Readings ist optional.
          Somit können Device/Readings explizit bzw. konsequent vom Logging ausgeschlossen werden ohne Berücksichtigung anderer Excludes oder Includes (z.B. im DEF). Die auszuschließenden Devices können als Geräte-Spezifikation angegeben werden. Für weitere Details bezüglich devspec siehe Geräte-Spezifikation.

          Beispiel
          attr <device> excludeDevs global,Log.*,Cam.*,TYPE=DbLog
          # Es werden die Devices global bzw. Devices beginnend mit "Log" oder "Cam" bzw. Devices vom Typ "DbLog" vom Logging ausgeschlossen.
          attr <device> excludeDevs .*#.*Wirkleistung.*
          # Es werden alle Device/Reading-Kombinationen mit "Wirkleistung" im Reading vom Logging ausgeschlossen.
          attr <device> excludeDevs SMA_Energymeter#Bezug_WirkP_Zaehler_Diff
          # Es wird der Event mit Device "SMA_Energymeter" und Reading "Bezug_WirkP_Zaehler_Diff" vom Logging ausgeschlossen.

      • expimpdir <directory>

          In diesem Verzeichnis wird das Cachefile beim Export angelegt bzw. beim Import gesucht. Siehe set-Kommandos exportCache bzw. importCachefile. Das Default-Verzeichnis ist "(global->modpath)/log/". Das im Attribut angegebene Verzeichnis muss vorhanden und beschreibbar sein.

          Beispiel
          attr <device> expimpdir /opt/fhem/cache/

      • exportCacheAppend [1|0]

          Wenn gesetzt, wird beim Export des Cache ("set <device> exportCache") der Cacheinhalt an das neueste bereits vorhandene Exportfile angehängt. Ist noch kein Exportfile vorhanden, wird es neu angelegt.
          Ist das Attribut nicht gesetzt, wird bei jedem Exportvorgang ein neues Exportfile angelegt. (default)

      • insertMode [1|0]

          Schaltet den Insert-Modus der Datenbankschnittstelle um.

            0 - Die Daten werden als Array der Datenbankschnittstelle übergeben.
            Es ist in den meisten Fällen der performanteste Weg viele Daten auf einmal in die Datenbank einzufügen.
            1 - Die Datensätze werden sequentiell der Datenbankschnittstelle übergeben und in die DB eingefügt.

          (default: 0)

      • noSupportPK [1|0]

          Deaktiviert die programmtechnische Unterstützung eines gesetzten Primary Key durch das Modul.

      • plotInputFieldLength <Ganzzahl>

          Breite der Plot Editor Eingabefelder für Device:Reading und Funktion.
          Wird die Drop-Down Liste als Eingabehilfe für Device:Reading verwendet, wird die Breite des Feldes automatisch eingestellt.
          (default: 40)

      • showproctime [1|0]

          Wenn gesetzt, zeigt das Reading "sql_processing_time" die benötigte Abarbeitungszeit (in Sekunden) für die SQL-Ausführung der durchgeführten Funktion. Dabei wird nicht ein einzelnes SQL-Statement, sondern die Summe aller ausgeführten SQL-Kommandos innerhalb der jeweiligen Funktion betrachtet.
          Das Reading "background_processing_time" zeigt die im SubProcess verbrauchte Zeit.

      • showNotifyTime [1|0]

          Wenn gesetzt, zeigt das Reading "notify_processing_time" die benötigte Abarbeitungszeit (in Sekunden) für die Abarbeitung der DbLog Notify-Funktion.
          Das Attribut ist für Performance Analysen geeignet und hilft auch die Unterschiede im Zeitbedarf der Eventverarbeitung im synchronen bzw. asynchronen Modus festzustellen.
          (default: 0)

          Hinweis:
          Das Reading "notify_processing_time" erzeugt sehr viele Events und belasted das System. Deswegen sollte bei Benutzung des Attributes die Eventerzeugung durch das Setzen von Attribut "event-min-interval" auf z.B. "notify_processing_time:30" deutlich begrenzt werden.

      • SQLiteCacheSize <Anzahl Memory Pages für Cache>

          Standardmäßig werden ca. 4MB RAM für Caching verwendet (page_size=1024bytes, cache_size=4000).
          Bei Embedded Devices mit wenig RAM genügen auch 1000 Pages - zu Lasten der Performance.
          (default: 4000)

      • SQLiteJournalMode [WAL|off]

          Moderne SQLite Datenbanken werden mit einem Write-Ahead-Log (WAL) geöffnet, was optimale Datenintegrität und gute Performance gewährleistet.
          Allerdings benötigt WAL zusätzlich ungefähr den gleichen Festplattenplatz wie die eigentliche Datenbank. Bei knappem Festplattenplatz (z.B. eine RAM Disk in Embedded Devices) kann das Journal deaktiviert werden (off). Im Falle eines Datenfehlers kann die Datenbank aber wahrscheinlich nicht repariert werden, und muss neu erstellt werden!
          (default: WAL)

      • syncEvents [1|0]

          es werden Events für Reading NextSync erzeugt.

      • syncInterval <n>

          Wenn im DbLog-Device der asynchrone Modus eingestellt ist (asyncMode=1), wird mit diesem Attribut das Intervall (Sekunden) zum Wegschreiben der zwischengespeicherten Daten in die Datenbank festgelegt.
          (default: 30)

      • suppressAddLogV3 [1|0]

          Wenn gesetzt werden verbose 3 Logeinträge durch die addLog-Funktion unterdrückt.

      • suppressUndef

          Unterdrückt alle undef Werte die durch eine Get-Anfrage, z.B. Plot, aus der Datenbank selektiert werden.

      • timeout <n>

          Setzt den Timeout-Wert für die Operationen im SubProzess in Sekunden.
          Ist eine gestartete Operation (Logging, Kommando) nicht innerhalb des Timeout-Wertes beendet, wird der laufende SubProzess abgebrochen und ein neuer Prozess gestartet.
          (default: 86400)

      • traceFlag <ALL|SQL|CON|ENC|DBD|TXN>

          Bestimmt das Tracing von bestimmten Aktivitäten innerhalb des Datenbankinterfaces und Treibers. Das Attribut ist nur für den Fehler- bzw. Supportfall gedacht.

            ALL schaltet alle DBI- und Treiberflags an.
            SQL verfolgt die SQL Statement Ausführung. (Default)
            CON verfolgt den Verbindungsprozess.
            ENC verfolgt die Kodierung (Unicode Übersetzung etc).
            DBD verfolgt nur DBD Nachrichten.
            TXN verfolgt Transaktionen.


      • traceLevel <0|1|2|3|4|5|6|7>

          Schaltet die Trace-Funktion des Moduls ein.
          Achtung ! Das Attribut ist nur für den Fehler- bzw. Supportfall gedacht. Es werden sehr viele Einträge in das FHEM Logfile vorgenommen !

            0 Tracing ist disabled. (Default)
            1 Tracing von DBI Top-Level Methoden mit deren Ergebnissen und Fehlern
            2 Wie oben. Zusätzlich Top-Level Methodeneintäge mit Parametern.
            3 Wie oben. Zusätzliche werden einige High-Level Informationen des Treibers und einige interne Informationen des DBI hinzugefügt.
            4 Wie oben. Zusätzlich werden mehr detaillierte Informationen des Treibers eingefügt.
            5-7 Wie oben, aber mit mehr und mehr internen Informationen.


      • useCharfilter [0|1]

          wenn gesetzt, werden nur ASCII Zeichen von 32 bis 126 im Event akzeptiert. (default: 0)
          Das sind die Zeichen " A-Za-z0-9!"#$%&'()*+,-.\/:;<=>?@[\\]^_`{|}~".
          Umlaute und "€" werden umgesetzt (z.B. ä nach ae, € nach EUR).

      • valueFn {}

          Dieses Attribut wird im DbLog-Device gesetzt und erlaubt die Veränderung der Werte vor dem Logging oder den Ausschluß des Datensatzes vom Logging.

          Es kann auf die Variablen $TIMESTAMP, $DEVICE (Quellendevice), $DEVICETYPE, $READING, $VALUE (Wert des Readings) und $UNIT (Einheit des Readingswert) zugegriffen werden und diese vor dem Loggen in die Datenbank verändern.
          Lesezugriff besteht auf $EVENT, $LASTTIMESTAMP und $LASTVALUE.

          Die Variablen $LASTTIMESTAMP und $LASTVALUE enthalten Zeit und Wert des zuletzt protokollierten Datensatzes von $DEVICE / $READING.
          Soll $TIMESTAMP verändert werden, muss die Form "yyyy-mm-dd hh:mm:ss" eingehalten werden. Anderenfalls wird die geänderte $TIMESTAMP Variable nicht übernommen. Durch Setzen der Variable "$IGNORE=1" wird der Datensatz vom Logging ausgeschlossen.

          Beispiele
          attr <device> valueFn {if ($DEVICE eq "living_Clima" && $VALUE eq "off" ){$VALUE=0;} elsif ($DEVICE eq "e-power"){$VALUE= sprintf "%.1f", $VALUE;}}
          # ändert den Reading-Wert des Gerätes "living_Clima" von "off" zu "0" und rundet den Wert vom Gerät "e-power"

          attr <device> valueFn {if ($DEVICE eq "SMA_Energymeter" && $READING eq "state"){$IGNORE=1;}}
          # der Datensatz wird nicht geloggt wenn Device = "SMA_Energymeter" und das Reading = "state" ist

          attr <device> valueFn {if ($DEVICE eq "Dum.Energy" && $READING eq "TotalConsumption"){$UNIT="W";}}
          # setzt die Einheit des Devices "Dum.Energy" auf "W" wenn das Reading = "TotalConsumption" ist


      • verbose4Devs <device1>,<device2>,<device..>

          Mit verbose Level 4/5 werden nur Ausgaben bezüglich der in diesem Attribut aufgeführten Devices im Logfile protokolliert. Ohne dieses Attribut werden mit verbose 4/5 Ausgaben aller relevanten Devices im Logfile protokolliert. Die angegebenen Devices werden als Regex ausgewertet.

          Beispiel
          attr <device> verbose4Devs sys.*,.*5000.*,Cam.*,global
          # Es werden Devices beginnend mit "sys", "Cam" bzw. Devices die "5000" enthalten und das Device "global" protokolliert falls verbose=4 eingestellt ist.

    DbRep


      Zweck des Moduls ist es, den Inhalt von DbLog-Datenbanken nach bestimmten Kriterien zu durchsuchen, zu managen, das Ergebnis hinsichtlich verschiedener Aggregationen auszuwerten und als Readings darzustellen. Die Abgrenzung der zu berücksichtigenden Datenbankinhalte erfolgt durch die Angabe von Device, Reading und die Zeitgrenzen für Auswertungsbeginn bzw. Auswertungsende.

      Fast alle Datenbankoperationen werden nichtblockierend ausgeführt. Auf Ausnahmen wird hingewiesen. Die Ausführungszeit der (SQL)-Hintergrundoperationen kann optional ebenfalls als Reading bereitgestellt werden (siehe Attribute).
      Alle vorhandenen Readings werden vor einer neuen Operation gelöscht. Durch das Attribut "readingPreventFromDel" kann eine Komma separierte Liste von Readings angegeben werden die nicht gelöscht werden sollen.

      Aktuell werden folgende Operationen unterstützt:

        • Selektion aller Datensätze innerhalb einstellbarer Zeitgrenzen
        • Darstellung der Datensätze einer Device/Reading-Kombination innerhalb einstellbarer Zeitgrenzen.
        • Selektion der Datensätze unter Verwendung von dynamisch berechneter Zeitgrenzen zum Ausführungszeitpunkt.
        • Dubletten-Hervorhebung bei Datensatzanzeige (fetchrows)
        • Berechnung der Anzahl von Datensätzen einer Device/Reading-Kombination unter Berücksichtigung von Zeitgrenzen und verschiedenen Aggregationen.
        • Die Berechnung von Summen-, Differenz-, Maximum-, Minimum- und Durchschnittswerten numerischer Readings in Zeitgrenzen und verschiedenen Aggregationen.
        • Speichern von Summen-, Differenz- , Maximum- , Minimum- und Durchschnittswertberechnungen in der Datenbank
        • Löschung von Datensätzen. Die Eingrenzung der Löschung kann durch Device und/oder Reading sowie fixer oder dynamisch berechneter Zeitgrenzen zum Ausführungszeitpunkt erfolgen.
        • Export von Datensätzen in ein File im CSV-Format
        • Import von Datensätzen aus File im CSV-Format
        • Umbenennen von Device/Readings in Datenbanksätzen
        • Ändern von Reading-Werten (VALUES) in der Datenbank (changeValue)
        • automatisches Umbenennen von Device-Namen in Datenbanksätzen und DbRep-Definitionen nach FHEM "rename" Befehl (siehe DbRep-Agent)
        • Ausführen von beliebigen Benutzer spezifischen SQL-Kommandos (non-blocking)
        • Ausführen von beliebigen Benutzer spezifischen SQL-Kommandos (blocking) zur Verwendung in eigenem Code (sqlCmdBlocking)
        • Backups der FHEM-Datenbank im laufenden Betrieb erstellen (MySQL, SQLite)
        • senden des Dumpfiles zu einem FTP-Server nach dem Backup incl. Versionsverwaltung
        • Restore von SQLite- und MySQL-Dumps
        • Optimierung der angeschlossenen Datenbank (optimizeTables, vacuum)
        • Ausgabe der existierenden Datenbankprozesse (MySQL)
        • leeren der current-Tabelle
        • Auffüllen der current-Tabelle mit einem (einstellbaren) Extrakt der history-Tabelle
        • Bereinigung sequentiell aufeinander folgender Datensätze mit unterschiedlichen Zeitstempel aber gleichen Werten (sequentielle Dublettenbereinigung)
        • Reparatur einer korrupten SQLite Datenbank ("database disk image is malformed")
        • Übertragung von Datensätzen aus der Quelldatenbank in eine andere (Standby) Datenbank (syncStandby)
        • Reduktion der Anzahl von Datensätzen in der Datenbank (reduceLog)
        • Löschen von doppelten Datensätzen (delDoublets)
        • Löschen und (Wieder)anlegen der für DbLog und DbRep benötigten Indizes (index)

      Zur Aktivierung der Funktion Autorename wird dem definierten DbRep-Device mit dem Attribut "role" die Rolle "Agent" zugewiesen. Die Standardrolle nach Definition ist "Client". Mehr ist dazu im Abschnitt DbRep-Agent beschrieben.

      DbRep stellt dem Nutzer einen UserExit zur Verfügung. Über diese Schnittstelle kann der Nutzer in Abhängigkeit von frei definierbaren Reading/Value-Kombinationen (Regex) eigenen Code zur Ausführung bringen. Diese Schnittstelle arbeitet unabhängig von einer Eventgenerierung. Weitere Informationen dazu ist unter userExitFn beschrieben.

      Sobald ein DbRep-Device definiert ist, wird sowohl die Perl Funktion DbReadingsVal als auch das FHEM Kommando dbReadingsVal zur Verfügung gestellt. Mit dieser Funktion läßt sich, ähnlich dem allgemeinen ReadingsVal, der Wert eines Readings aus der Datenbank abrufen.
      Die Funktionsausführung erfolgt blockierend mit einem Standardtimeout von 10 Sekunden um eine dauerhafte Blockierung von FHEM zu verhindern. Der Timeout ist mit dem Attribut timeout anpassbar.

        Die Befehlssyntax für die Perl Funktion ist:

        DbReadingsVal("<name>","<device:reading>","<timestamp>","<default>")

        Beispiel:
          $ret = DbReadingsVal("Rep.LogDB1","MyWetter:temperature","2018-01-13_08:00:00","");
          attr <name> userReadings oldtemp {DbReadingsVal("Rep.LogDB1","MyWetter:temperature","2018-04-13_08:00:00","")}
          attr <name> userReadings todayPowerIn
            {
               my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime(gettimeofday());
               $month++;
               $year+=1900;
               my $today = sprintf('%04d-%02d-%02d', $year,$month,$mday);
               DbReadingsVal("Rep.LogDB1","SMA_Energymeter:Bezug_Wirkleistung_Zaehler",$today."_00:00:00",0)
            }
          
        Die Befehlssyntax als FHEM Kommando ist:

        dbReadingsVal <name> <device:reading> <timestamp> <default>

        Beispiel:
        dbReadingsVal Rep.LogDB1 MyWetter:temperature 2018-01-13_08:00:00 0

        <name> : Name des abzufragenden DbRep-Device
        <device:reading> : Device:Reading dessen Wert geliefert werden soll
        <timestamp> : Zeitpunkt des zu liefernden Readingwertes (*) im Format "YYYY-MM-DD_hh:mm:ss"
        <default> : Defaultwert falls kein Readingwert ermittelt werden konnte

      (*) Es wird der zeitlich zu <timestamp> passendste Readingwert zurück geliefert, falls kein Wert exakt zu dem angegebenen Zeitpunkt geloggt wurde.

      FHEM-Forum:
      Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog).

      FHEM-Wiki:
      DbRep - Reporting und Management von DbLog-Datenbankinhalten.


    Voraussetzungen

      Das Modul setzt den Einsatz einer oder mehrerer DbLog-Instanzen voraus. Es werden die Zugangsdaten dieser Datenbankdefinition genutzt.
      Es werden nur Inhalte der Tabelle "history" berücksichtigt wenn nichts anderes beschrieben ist.

      Überblick welche anderen Perl-Module DbRep verwendet:

      Net::FTP (nur wenn FTP-Transfer nach Datenbank-Dump genutzt wird)
      Net::FTPSSL (nur wenn FTP-Transfer mit Verschlüsselung nach Datenbank-Dump genutzt wird)
      POSIX
      Time::HiRes
      Time::Local
      Scalar::Util
      DBI
      Color (FHEM-Modul)
      IO::Compress::Gzip
      IO::Uncompress::Gunzip
      Blocking (FHEM-Modul)


    Definition
      define <name> DbRep <Name der DbLog-Instanz>

      (<Name der DbLog-Instanz> - es wird der Name der auszuwertenden DbLog-Datenbankdefinition angegeben nicht der Datenbankname selbst)

      Für eine gute Operation Performance sollte die Datenbank den Index "Report_Idx" enthalten. Der Index kann nach der DbRep Devicedefinition mit dem set-Kommando angelegt werden sofern er auf der Datenbank noch nicht existiert:

        set <name> index recreate_Report_Idx


    Set
      Zur Zeit gibt es folgende Set-Kommandos. Über sie werden die Auswertungen angestoßen und definieren selbst die Auswertungsvariante. Nach welchen Kriterien die Datenbankinhalte durchsucht werden und die Aggregation erfolgt, wird durch Attribute gesteuert.

      Hinweis:
      In der Detailansicht kann ein Browserrefresh nötig sein um die Operationsergebnisse zu sehen sobald im DeviceOverview "state = done" angezeigt wird.

        • adminCredentials <User> <Passwort> - Speichert einen User / Passwort für den privilegierten bzw. administrativen Datenbankzugriff. Er wird bei Datenbankoperationen benötigt, die mit einem privilegierten User ausgeführt werden müssen. Siehe auch Attribut useAdminCredentials.
          (nur gültig bei Datenbanktyp MYSQL und DbRep-Typ "Client")

        • averageValue [display | writeToDB | writeToDBSingle | writeToDBSingleStart | writeToDBInTime]

          Berechnet einen Durchschnittswert des Datenbankfelds "VALUE" in den Zeitgrenzen der möglichen time.*-Attribute.

          Es muss das auszuwertende Reading im Attribut reading angegeben sein. Mit dem Attribut averageCalcForm wird die Berechnungsvariante zur Mittelwertermittlung definiert.
          Ist keine oder die Option display angegeben, werden die Ergebnisse nur angezeigt. Mit den Optionen writeToDB, writeToDBSingle, writeToDBSingleStart bzw. writeToDBInTime werden die Berechnungsergebnisse mit einem neuen Readingnamen in der Datenbank gespeichert.

            writeToDB : schreibt jeweils einen Wert mit den Zeitstempeln XX:XX:01 und XX:XX:59 innerhalb der jeweiligen Auswertungsperiode
            writeToDBSingle : schreibt nur einen Wert mit dem Zeitstempel XX:XX:59 am Ende einer Auswertungsperiode
            writeToDBSingleStart : schreibt nur einen Wert mit dem Zeitstempel XX:XX:01 am Beginn einer Auswertungsperiode
            writeToDBInTime : schreibt jeweils einen Wert am Anfang und am Ende der Zeitgrenzen einer Auswertungsperiode

          Der neue Readingname wird aus einem Präfix und dem originalen Readingnamen gebildet, wobei der originale Readingname durch das Attribut "readingNameMap" ersetzt werden kann. Der Präfix setzt sich aus der Bildungsfunktion und der Aggregation zusammen.
          Der Timestamp der neuen Readings in der Datenbank wird von der eingestellten Aggregationsperiode abgeleitet, sofern kein eindeutiger Zeitpunkt des Ergebnisses bestimmt werden kann. Das Feld "EVENT" wird mit "calculated" gefüllt.

            Beispiel neuer Readingname gebildet aus dem Originalreading "totalpac":
            avgam_day_totalpac
            # <Bildungsfunktion>_<Aggregation>_<Originalreading>

          Zusammengefasst sind die zur Steuerung dieser Funktion relevanten Attribute:

            aggregation : Auswahl einer Aggregationsperiode
            averageCalcForm : Auswahl der Berechnungsvariante für den Durchschnitt
            device : einschließen oder ausschließen von Datensätzen die <device> enthalten
            executeBeforeProc : ausführen FHEM Kommando (oder Perl-Routine) vor Start Operation
            executeAfterProc : ausführen FHEM Kommando (oder Perl-Routine) nach Ende Operation
            reading : einschließen oder ausschließen von Datensätzen die <reading> enthalten
            readingNameMap : die entstehenden Ergebnisreadings werden partiell umbenannt
            time.* : eine Reihe von Attributen zur Zeitabgrenzung
            valueFilter : ein zusätzliches REGEXP um die Datenselektion zu steuern. Der REGEXP wird auf das Datenbankfeld 'VALUE' angewendet.



        • cancelDump - bricht einen laufenden Datenbankdump ab.

        • changeValue old="<alter String>" new="<neuer String>"

          Ändert den gespeicherten Wert eines Readings.
          Ist die Selektion auf bestimmte Device/Reading-Kombinationen durch die Attribute device bzw. reading beschränkt, werden sie genauso berücksichtigt wie gesetzte Zeitgrenzen (time.* Attribute).
          Fehlen diese Beschränkungen, wird die gesamte Datenbank durchsucht und der angegebene Wert geändert.

          "String" kann sein:
          <alter String> :
        • ein einfacher String mit/ohne Leerzeichen, z.B. "OL 12"
        • ein String mit Verwendung von SQL-Wildcard, z.B. "%OL%"
        • <neuer String> :
        • ein einfacher String mit/ohne Leerzeichen, z.B. "12 kWh"
        • Perl Code eingeschlossen in {"..."} inkl. Quotes, z.B. {"($VALUE,$UNIT) = split(" ",$VALUE)"}
        • Dem Perl-Ausdruck werden die Variablen $VALUE und $UNIT übergeben. Sie können innerhalb
          des Perl-Code geändert werden. Der zurückgebene Wert von $VALUE und $UNIT wird in dem Feld
          VALUE bzw. UNIT des Datensatzes gespeichert.

          Beispiele:
          set <name> changeValue old="OL" new="12 OL"
          # der alte Feldwert "OL" wird in "12 OL" geändert.

          set <name> changeValue old="%OL%" new="12 OL"
          # enthält das Feld VALUE den Teilstring "OL", wird es in "12 OL" geändert.

          set <name> changeValue old="12 kWh" new={"($VALUE,$UNIT) = split(" ",$VALUE)"}
          # der alte Feldwert "12 kWh" wird in VALUE=12 und UNIT=kWh gesplittet und in den Datenbankfeldern gespeichert

          set <name> changeValue old="24%" new={"$VALUE = (split(" ",$VALUE))[0]"}
          # beginnt der alte Feldwert mit "24", wird er gesplittet und VALUE=24 gespeichert (z.B. "24 kWh")

          Zusammengefasst sind die zur Steuerung von changeValue relevanten Attribute:

            device : einschließen oder ausschließen von Datensätzen die <device> enthalten
            reading : einschließen oder ausschließen von Datensätzen die <reading> enthalten
            time.* : eine Reihe von Attributen zur Zeitabgrenzung
            executeBeforeProc : ausführen FHEM Kommando (oder Perl-Routine) vor Start changeValue
            executeAfterProc : ausführen FHEM Kommando (oder Perl-Routine) nach Ende changeValue
            valueFilter : ein zusätzliches REGEXP um die Datenselektion zu steuern. Der REGEXP wird auf das Datenbankfeld 'VALUE' angewendet.


        • countEntries [history | current] - liefert die Anzahl der Tabelleneinträge (default: history) in den gegebenen Zeitgrenzen (siehe time*-Attribute). Sind die Timestamps nicht gesetzt, werden alle Einträge der Tabelle gezählt. Beschränkungen durch die Attribute device bzw. reading gehen in die Selektion mit ein.
        • Standardmäßig wird die Summe aller Datensätze, gekennzeichnet mit "ALLREADINGS", erstellt. Ist das Attribut "countEntriesDetail" gesetzt, wird die Anzahl jedes einzelnen Readings zusätzlich ausgegeben.

          Die für diese Funktion relevanten Attribute sind:

            aggregation : Zusammenfassung/Gruppierung von Zeitintervallen
            countEntriesDetail : detaillierte Ausgabe der Datensatzanzahl
            device : einschließen oder ausschließen von Datensätzen die <device> enthalten
            reading : einschließen oder ausschließen von Datensätzen die <reading> enthalten
            time.* : eine Reihe von Attributen zur Zeitabgrenzung
            executeBeforeProc : ausführen FHEM Kommando (oder Perl-Routine) vor Ausführung
            executeAfterProc : ausführen FHEM Kommando (oder Perl-Routine) nach Ausführung
            readingNameMap : die entstehenden Ergebnisreadings werden partiell umbenannt
            valueFilter : ein zusätzliches REGEXP um die Datenselektion zu steuern. Der REGEXP wird auf das Datenbankfeld 'VALUE' angewendet.


        • delDoublets [adviceDelete | delete] - zeigt bzw. löscht doppelte / mehrfach vorkommende Datensätze. Dazu wird Timestamp, Device,Reading und Value ausgewertet.
          Die Attribute zur Aggregation,Zeit-,Device- und Reading-Abgrenzung werden dabei berücksichtigt. Ist das Attribut "aggregation" nicht oder auf "no" gesetzt, wird im Standard die Aggregation "day" verwendet.

          • adviceDelete : ermittelt die zu löschenden Datensätze (es wird nichts gelöscht !)
            delete : löscht die Dubletten

          Aus Sicherheitsgründen muss das Attribut allowDeletion für die "delete" Option gesetzt sein.
          Die Anzahl der anzuzeigenden Datensätze des Kommandos "delDoublets adviceDelete" ist zunächst begrenzt (default 1000) und kann durch das Attribut limit angepasst werden. Die Einstellung von "limit" hat keinen Einfluss auf die "delDoublets delete" Funktion, sondern beeinflusst NUR die Anzeige der Daten.
          Vor und nach der Ausführung von "delDoublets" kann ein FHEM-Kommando bzw. Perl-Routine ausgeführt werden. (siehe Attribute executeBeforeProc, executeAfterProc)

            Beispiel:

            Ausgabe der zu löschenden Records inklusive der Anzahl mit "delDoublets adviceDelete":

            2018-11-07_14-11-38__Dum.Energy__T 260.9_|_2
            2018-11-07_14-12-37__Dum.Energy__T 260.9_|_2
            2018-11-07_14-15-38__Dum.Energy__T 264.0_|_2
            2018-11-07_14-16-37__Dum.Energy__T 264.0_|_2

            Im Werteteil der erzeugten Readings wird nach "_|_" die Anzahl der entsprechenden Datensätze ausgegeben, die mit "delDoublets delete" gelöscht werden.

          Zusammengefasst sind die zur Steuerung dieser Funktion relevanten Attribute:

            allowDeletion : Freischaltung der Löschfunktion
            aggregation : Auswahl einer Aggregationsperiode
            device : einschließen oder ausschließen von Datensätzen die <device> enthalten
            limit : begrenzt NUR die Anzahl der anzuzeigenden Datensätze
            reading : einschließen oder ausschließen von Datensätzen die <reading> enthalten
            time.* : eine Reihe von Attributen zur Zeitabgrenzung
            executeBeforeProc : ausführen FHEM Kommando (oder Perl-Routine) vor Start des Befehls
            executeAfterProc : ausführen FHEM Kommando (oder Perl-Routine) nach Ende des Befehls
            valueFilter : ein zusätzliches REGEXP um die Datenselektion zu steuern. Der REGEXP wird auf das Datenbankfeld 'VALUE' angewendet.


        • delEntries [<no>[:<nn>]] - löscht alle oder die durch die Attribute device und/oder reading definierten Datenbankeinträge. Die Eingrenzung über Timestamps erfolgt folgendermaßen:

            "timestamp_begin" gesetzt -> gelöscht werden DB-Einträge ab diesem Zeitpunkt bis zum aktuellen Datum/Zeit
            "timestamp_end" gesetzt -> gelöscht werden DB-Einträge bis bis zu diesem Zeitpunkt
            beide Timestamps gesetzt -> gelöscht werden DB-Einträge zwischen diesen Zeitpunkten
            "timeOlderThan" gesetzt -> gelöscht werden DB-Einträge älter als aktuelle Zeit minus "timeOlderThan"
            "timeDiffToNow" gesetzt -> gelöscht werden DB-Einträge ab aktueller Zeit minus "timeDiffToNow" bis jetzt

          Aus Sicherheitsgründen muss das Attribut allowDeletion gesetzt sein um die Löschfunktion freizuschalten.
          Zeitgrenzen (Tage) können als Option angegeben werden. In diesem Fall werden eventuell gesetzte Zeitattribute übersteuert. Es werden Datensätze berücksichtigt die älter sind als <no> Tage und (optional) neuer sind als <nn> Tage.

          Die zur Steuerung von delEntries relevanten Attribute:

            allowDeletion : Freischaltung der Löschfunktion
            device : einschließen oder ausschließen von Datensätzen die <device> enthalten
            reading : einschließen oder ausschließen von Datensätzen die <reading> enthalten
            readingNameMap : die entstehenden Ergebnisreadings werden partiell umbenannt
            time.* : eine Reihe von Attributen zur Zeitabgrenzung
            executeBeforeProc : ausführen FHEM Kommando (oder Perl-Routine) vor Start delEntries
            executeAfterProc : ausführen FHEM Kommando (oder Perl-Routine) nach Ende delEntries
            valueFilter : ein zusätzliches REGEXP um die Datenselektion zu steuern. Der REGEXP wird auf das Datenbankfeld 'VALUE' angewendet.


        • delSeqDoublets [adviceRemain | adviceDelete | delete] - zeigt bzw. löscht aufeinander folgende identische Datensätze. Dazu wird Device,Reading und Value ausgewertet. Nicht gelöscht werden der erste und der letzte Datensatz einer Aggregationsperiode (z.B. hour, day, week usw.) sowie die Datensätze vor oder nach einem Wertewechsel (Datenbankfeld VALUE).
          Die Attribute zur Aggregation,Zeit-,Device- und Reading-Abgrenzung werden dabei berücksichtigt. Ist das Attribut "aggregation" nicht oder auf "no" gesetzt, wird als Standard die Aggregation "day" verwendet. Für Datensätze mit numerischen Werten kann mit dem Attribut seqDoubletsVariance eine Abweichung eingestellt werden, bis zu der aufeinander folgende numerische Werte als identisch angesehen und gelöscht werden sollen.

            adviceRemain : simuliert die nach der Operation in der DB verbleibenden Datensätze (es wird nichts gelöscht !)
            adviceDelete : simuliert die zu löschenden Datensätze (es wird nichts gelöscht !)
            delete : löscht die sequentiellen Dubletten (siehe Beispiel)

          Aus Sicherheitsgründen muss das Attribut allowDeletion für die "delete" Option gesetzt sein.
          Die Anzahl der anzuzeigenden Datensätze der Kommandos "delSeqDoublets adviceDelete", "delSeqDoublets adviceRemain" ist zunächst begrenzt (default 1000) und kann durch das Attribut limit angepasst werden. Die Einstellung von "limit" hat keinen Einfluss auf die "delSeqDoublets delete" Funktion, sondern beeinflusst NUR die Anzeige der Daten.
          Vor und nach der Ausführung von "delSeqDoublets" kann ein FHEM-Kommando bzw. Perl-Routine ausgeführt werden. (siehe Attribute executeBeforeProc, executeAfterProc)

            Beispiel - die nach Verwendung der delete-Option in der DB verbleibenden Datensätze sind fett gekennzeichnet:

              2017-11-25_00-00-05__eg.az.fridge_Pwr__power 0
              2017-11-25_00-02-26__eg.az.fridge_Pwr__power 0
              2017-11-25_00-04-33__eg.az.fridge_Pwr__power 0
              2017-11-25_01-06-10__eg.az.fridge_Pwr__power 0
              2017-11-25_01-08-21__eg.az.fridge_Pwr__power 0
              2017-11-25_01-08-59__eg.az.fridge_Pwr__power 60.32
              2017-11-25_01-11-21__eg.az.fridge_Pwr__power 56.26
              2017-11-25_01-27-54__eg.az.fridge_Pwr__power 6.19
              2017-11-25_01-28-51__eg.az.fridge_Pwr__power 0
              2017-11-25_01-31-00__eg.az.fridge_Pwr__power 0
              2017-11-25_01-33-59__eg.az.fridge_Pwr__power 0
              2017-11-25_02-39-29__eg.az.fridge_Pwr__power 0
              2017-11-25_02-41-18__eg.az.fridge_Pwr__power 105.28
              2017-11-25_02-41-26__eg.az.fridge_Pwr__power 61.52
              2017-11-25_03-00-06__eg.az.fridge_Pwr__power 47.46
              2017-11-25_03-00-33__eg.az.fridge_Pwr__power 0
              2017-11-25_03-02-07__eg.az.fridge_Pwr__power 0
              2017-11-25_23-37-42__eg.az.fridge_Pwr__power 0
              2017-11-25_23-40-10__eg.az.fridge_Pwr__power 0
              2017-11-25_23-42-24__eg.az.fridge_Pwr__power 1
              2017-11-25_23-42-24__eg.az.fridge_Pwr__power 1
              2017-11-25_23-45-27__eg.az.fridge_Pwr__power 1
              2017-11-25_23-47-07__eg.az.fridge_Pwr__power 0
              2017-11-25_23-55-27__eg.az.fridge_Pwr__power 0
              2017-11-25_23-48-15__eg.az.fridge_Pwr__power 0
              2017-11-25_23-50-21__eg.az.fridge_Pwr__power 59.1
              2017-11-25_23-55-14__eg.az.fridge_Pwr__power 52.31
              2017-11-25_23-58-09__eg.az.fridge_Pwr__power 51.73

          Zusammengefasst sind die zur Steuerung dieser Funktion relevanten Attribute:

            allowDeletion : needs to be set to execute the delete option
            aggregation : Auswahl einer Aggregationsperiode
            device : einschließen oder ausschließen von Datensätzen die <device> enthalten
            limit : begrenzt NUR die Anzahl der anzuzeigenden Datensätze
            reading : einschließen oder ausschließen von Datensätzen die <reading> enthalten
            readingNameMap : die entstehenden Ergebnisreadings werden partiell umbenannt
            seqDoubletsVariance : bis zu diesem Wert werden aufeinander folgende numerische Datensätze als identisch angesehen und werden gelöscht
            time.* : eine Reihe von Attributen zur Zeitabgrenzung
            executeBeforeProc : ausführen FHEM Kommando (oder Perl-Routine) vor Start des Befehls
            executeAfterProc : ausführen FHEM Kommando (oder Perl-Routine) nach Ende des Befehls
            valueFilter : ein zusätzliches REGEXP um die Datenselektion zu steuern. Der REGEXP wird auf das Datenbankfeld 'VALUE' angewendet.


        • deviceRename <old_name>,<new_name> - benennt den Namen eines Device innerhalb der angeschlossenen Datenbank (Internal DATABASE) um. Der Gerätename wird immer in der gesamten Datenbank umgesetzt. Eventuell gesetzte Zeitgrenzen oder Beschränkungen durch die Attribute device bzw. reading werden nicht berücksichtigt.

            Beispiel:
            set <name> deviceRename ST_5000,ST5100
            # Die Anzahl der umbenannten Device-Datensätze wird im Reading "device_renamed" ausgegeben.
            # Wird der umzubenennende Gerätename in der Datenbank nicht gefunden, wird eine WARNUNG im Reading "device_not_renamed" ausgegeben.
            # Entsprechende Einträge erfolgen auch im Logfile mit verbose=3

          Hinweis:
          Obwohl die Funktion selbst non-blocking ausgelegt ist, sollte das zugeordnete DbLog-Device im asynchronen Modus betrieben werden um ein Blockieren von FHEMWEB zu vermeiden (Tabellen-Lock).

          Zusammengefasst sind die zur Steuerung dieser Funktion relevanten Attribute:

            executeBeforeProc : ausführen FHEM Kommando (oder Perl-Routine) vor Start des Befehls
            executeAfterProc : ausführen FHEM Kommando (oder Perl-Routine) nach Ende des Befehls


        • diffValue [display | writeToDB]

          Berechnet den Differenzwert des Datenbankfelds "VALUE" in den angegebenen Zeitgrenzen (siehe verschiedenen time*-Attribute).

          Es wird die Differenz aus den VALUE-Werten der im Aggregationszeitraum (z.B. day) vorhandenen Datensätze gebildet und aufsummiert. Ein Übertragswert aus der Vorperiode (aggregation) zur darauf folgenden Aggregationsperiode wird berücksichtigt, sofern diese Periode einen Value-Wert enhtält.

          In der Standardeinstellung wertet die Funktion nur positive Differenzen aus wie sie z.B. bei einem stetig ansteigenden Zählerwert auftreten. Mit dem Attribut diffAccept) kann sowohl die akzeptierte Differenzschwelle als auch die Möglichkeit negative Differenzen auszuwerten eingestellt werden.

            Hinweis:
            Im Auswertungs- bzw. Aggregationszeitraum (Tag, Woche, Monat, etc.) sollten dem Modul pro Periode mindestens ein Datensatz zu Beginn und ein Datensatz gegen Ende des Aggregationszeitraumes zur Verfügung stehen um eine möglichst genaue Auswertung der Differenzwerte vornehmen zu können.
            Wird in einer auszuwertenden Zeit- bzw. Aggregationsperiode nur ein Datensatz gefunden, kann die Differenz in Verbindung mit dem Differenzübertrag der Vorperiode berechnet werden. in diesem Fall kann es zu einer logischen Ungenauigkeit in der Zuordnung der Differenz zu der Aggregationsperiode kommen. In diesem Fall wird eine Warnung im state ausgegeben und das Reading less_data_in_period mit einer Liste der betroffenen Perioden erzeugt.

          Ist keine oder die Option display angegeben, werden die Ergebnisse nur angezeigt.

          Mit der Option writeToDB werden die Berechnungsergebnisse mit einem neuen Readingnamen in der Datenbank gespeichert.
          Der neue Readingname wird aus einem Präfix und dem originalen Readingnamen gebildet, wobei der originale Readingname durch das Attribut readingNameMap ersetzt werden kann.
          Der Präfix setzt sich aus der Bildungsfunktion und der Aggregation zusammen.
          Der Timestamp der neuen Readings in der Datenbank wird von der eingestellten Aggregationsperiode abgeleitet, sofern kein eindeutiger Zeitpunkt des Ergebnisses bestimmt werden kann. Das Feld "EVENT" wird mit "calculated" gefüllt.

            Beispiel neuer Readingname gebildet aus dem Originalreading "totalpac":
            diff_day_totalpac
            # <Bildungsfunktion>_<Aggregation>_<Originalreading>

          Die für die Funktion relevanten Attribute sind:

            aggregation : Auswahl einer Aggregationsperiode
            device : einschließen oder ausschließen von Datensätzen die <device> enthalten
            diffAccept : akzeptierte positive Werte-Differenz zwischen zwei unmittelbar aufeinander folgenden Datensätzen
            executeBeforeProc : ausführen FHEM Kommando (oder Perl-Routine) vor Start Operation
            executeAfterProc : ausführen FHEM Kommando (oder Perl-Routine) nach Ende Operation
            reading : einschließen oder ausschließen von Datensätzen die <reading> enthalten
            readingNameMap : die entstehenden Ergebnisreadings werden partiell umbenannt
            time* : eine Reihe von Attributen zur Zeitabgrenzung
            valueFilter : ein zusätzliches REGEXP um die Datenselektion zu steuern. Der REGEXP wird auf das Datenbankfeld 'VALUE' angewendet.


        • dumpMySQL [clientSide | serverSide]

          Erstellt einen Dump der angeschlossenen MySQL-Datenbank.
          Abhängig von der ausgewählten Option wird der Dump auf der Client- bzw. Serverseite erstellt.
          Die Varianten unterscheiden sich hinsichtlich des ausführenden Systems, des Erstellungsortes, der Attributverwendung, des erzielten Ergebnisses und der benötigten Hardwareressourcen.
          Die Option "clientSide" benötigt z.B. eine leistungsfähigere Hardware des FHEM-Servers, sichert aber alle Tabellen inklusive eventuell angelegter Views.
          Mit dem Attribut "dumpCompress" kann eine Komprimierung der erstellten Dumpfiles eingeschaltet werden.

            Option clientSide
            Der Dump wird durch den Client (FHEM-Rechner) erstellt und per default im log-Verzeichnis des Clients (typisch /opt/fhem/log/) gespeichert. Das Zielverzeichnis kann mit dem Attribut dumpDirLocal verändert werden und muß auf dem Client durch FHEM beschreibbar sein.
            Vor dem Dump kann eine Tabellenoptimierung (Attribut "optimizeTablesBeforeDump") oder ein FHEM-Kommando (Attribut "executeBeforeProc") optional zugeschaltet werden. Nach dem Dump kann ebenfalls ein FHEM-Kommando (siehe Attribut "executeAfterProc") ausgeführt werden.

            Achtung !
            Um ein Blockieren von FHEM zu vermeiden, muß DbLog im asynchronen Modus betrieben werden wenn die Tabellenoptimierung verwendet wird !


            Über die Attribute dumpMemlimit und dumpSpeed kann das Laufzeitverhalten der Funktion beeinflusst werden um eine Optimierung bezüglich Performance und Ressourcenbedarf zu erreichen.

            Die für "dumpMySQL clientSide" relevanten Attribute sind:

              dumpComment : User-Kommentar im Dumpfile
              dumpCompress : Komprimierung des Dumpfiles nach der Erstellung
              dumpDirLocal : das lokale Zielverzeichnis für die Erstellung des Dump
              dumpMemlimit : Begrenzung der Speicherverwendung
              dumpSpeed : Begrenzung die CPU-Belastung
              dumpFilesKeep : Anzahl der aufzubwahrenden Dumpfiles
              executeBeforeProc : ausführen FHEM Kommando (oder Perl-Routine) vor dem Dump
              executeAfterProc : ausführen FHEM Kommando (oder Perl-Routine) nach dem Dump
              optimizeTablesBeforeDump : Tabelloptimierung vor dem Dump ausführen

            Nach einem erfolgreichen Dump werden alte Dumpfiles gelöscht und nur die Anzahl Files, definiert durch das Attribut "dumpFilesKeep" (default: 3), verbleibt im Zielverzeichnis "dumpDirLocal". Falls "dumpFilesKeep = 0" gesetzt ist, werden alle Dumpfiles (auch das aktuell erstellte File), gelöscht. Diese Einstellung kann sinnvoll sein, wenn FTP aktiviert ist und die erzeugten Dumps nur im FTP-Zielverzeichnis erhalten bleiben sollen.

            Die Namenskonvention der Dumpfiles ist: <dbname>_<date>_<time>.sql[.gzip]

            Um die Datenbank aus dem Dumpfile wiederherzustellen kann das Kommmando:

              set <name> restoreMySQL <filename>

            verwendet werden.

            Das erzeugte Dumpfile (unkomprimiert) kann ebenfalls mit:

              mysql -u <user> -p <dbname> < <filename>.sql

            auf dem MySQL-Server ausgeführt werden um die Datenbank aus dem Dump wiederherzustellen.


            Option serverSide
            Der Dump wird durch den MySQL-Server erstellt und per default im Home-Verzeichnis des MySQL-Servers gespeichert.
            Es wird die gesamte history-Tabelle (nicht current-Tabelle) im CSV-Format ohne Einschränkungen exportiert.
            Vor dem Dump kann eine Tabellenoptimierung (Attribut "optimizeTablesBeforeDump") optional zugeschaltet werden .

            Achtung !
            Um ein Blockieren von FHEM zu vermeiden, muß DbLog im asynchronen Modus betrieben werden wenn die Tabellenoptimierung verwendet wird !


            Vor und nach dem Dump kann ein FHEM-Kommando (siehe Attribute "executeBeforeProc", "executeAfterProc") ausgeführt werden.

            Die für "dumpMySQL serverSide" relevanten Attribute sind:

              dumpDirRemote : das Erstellungsverzeichnis des Dumpfile auf dem entfernten Server
              dumpCompress : Komprimierung des Dumpfiles nach der Erstellung
              dumpDirLocal : Directory des lokal gemounteten dumpDirRemote-Verzeichnisses
              dumpFilesKeep : Anzahl der aufzubwahrenden Dumpfiles
              executeBeforeProc : ausführen FHEM Kommando (oder Perl-Routine) vor dem Dump
              executeAfterProc : ausführen FHEM Kommando (oder Perl-Routine) nach dem Dump
              optimizeTablesBeforeDump : Tabelloptimierung vor dem Dump ausführen

            Das Zielverzeichnis kann mit dem Attribut dumpDirRemote verändert werden. Es muß sich auf dem MySQL-Host gefinden und durch den MySQL-Serverprozess beschreibbar sein.
            Der verwendete Datenbankuser benötigt das FILE Privileg (siehe Wiki).

            Hinweis:
            Soll die interne Versionsverwaltung und die Dumpfilekompression des Moduls genutzt, sowie die Größe des erzeugten Dumpfiles ausgegeben werden, ist das Verzeichnis "dumpDirRemote" des MySQL-Servers auf dem Client zu mounten und im Attribut dumpDirLocal dem DbRep-Device bekannt zu machen.
            Gleiches gilt wenn der FTP-Transfer nach dem Dump genutzt werden soll (Attribut "ftpUse" bzw. "ftpUseSSL").

              Beispiel:
              attr <name> dumpDirRemote /volume1/ApplicationBackup/dumps_FHEM/
              attr <name> dumpDirLocal /sds1/backup/dumps_FHEM/
              attr <name> dumpFilesKeep 2

              # Der Dump wird remote auf dem MySQL-Server im Verzeichnis '/volume1/ApplicationBackup/dumps_FHEM/' erstellt.
              # Die interne Versionsverwaltung sucht im lokal gemounteten Verzeichnis '/sds1/backup/dumps_FHEM/' vorhandene Dumpfiles und löscht diese bis auf die zwei letzten Versionen.

            Wird die interne Versionsverwaltung genutzt, werden nach einem erfolgreichen Dump alte Dumpfiles gelöscht und nur die Anzahl "dumpFilesKeep" (default: 3) verbleibt im Zielverzeichnis "dumpDirRemote". FHEM benötigt in diesem Fall Schreibrechte auf dem Verzeichnis "dumpDirLocal".

            Die Namenskonvention der Dumpfiles ist: <dbname>_<date>_<time>.csv[.gzip]

            Ein Restore der Datenbank aus diesem Backup kann durch den Befehl:

              set <name> <restoreMySQL> <filename>.csv[.gzip]

            gestartet werden.

            FTP Transfer nach Dump
            Wenn diese Möglichkeit genutzt werden soll, ist das Attribut ftpUse oder "ftpUseSSL" zu setzen. Letzteres gilt wenn eine verschlüsselte Übertragung genutzt werden soll.
            Das Modul übernimmt ebenfalls die Versionierung der Dumpfiles im FTP-Zielverzeichnis mit Hilfe des Attributes "ftpDumpFilesKeep". Für die FTP-Übertragung relevante Attribute sind:

              ftpUse : FTP Transfer nach dem Dump wird eingeschaltet (ohne SSL Verschlüsselung)
              ftpUser : User zur Anmeldung am FTP-Server, default: anonymous
              ftpUseSSL : FTP Transfer mit SSL Verschlüsselung nach dem Dump wird eingeschaltet
              ftpDebug : Debugging des FTP Verkehrs zur Fehlersuche
              ftpDir : Verzeichnis auf dem FTP-Server in welches das File übertragen werden soll (default: "/")
              ftpDumpFilesKeep : Es wird die angegebene Anzahl Dumpfiles im <ftpDir> belassen (default: 3)
              ftpPassive : setzen wenn passives FTP verwendet werden soll
              ftpPort : FTP-Port, default: 21
              ftpPwd : Passwort des FTP-Users, default nicht gesetzt
              ftpServer : Name oder IP-Adresse des FTP-Servers. notwendig !
              ftpTimeout : Timeout für die FTP-Verbindung in Sekunden (default: 30).



        • dumpSQLite - erstellt einen Dump der angeschlossenen SQLite-Datenbank.
          Diese Funktion nutzt die SQLite Online Backup API und ermöglicht es konsistente Backups der SQLite-DB in laufenden Betrieb zu erstellen. Der Dump wird per default im log-Verzeichnis des FHEM-Rechners gespeichert. Das Zielverzeichnis kann mit dem dumpDirLocal Attribut verändert werden und muß durch FHEM beschreibbar sein. Vor dem Dump kann optional eine Tabellenoptimierung (Attribut "optimizeTablesBeforeDump") zugeschaltet werden.

          Achtung !
          Um ein Blockieren von FHEM zu vermeiden, muß DbLog im asynchronen Modus betrieben werden wenn die Tabellenoptimierung verwendet wird !


          Vor und nach dem Dump kann ein FHEM-Kommando (siehe Attribute "executeBeforeProc", "executeAfterProc") ausgeführt werden.

          Die für diese Funktion relevanten Attribute sind:

            dumpCompress : Komprimierung des Dumpfiles nach der Erstellung
            dumpDirLocal : Zielverzeichnis der Dumpfiles
            dumpFilesKeep : Anzahl der aufzubwahrenden Dumpfiles
            executeBeforeProc : ausführen FHEM Kommando (oder Perl-Routine) vor dem Dump
            executeAfterProc : ausführen FHEM Kommando (oder Perl-Routine) nach dem Dump
            optimizeTablesBeforeDump : Tabelloptimierung vor dem Dump ausführen

          Nach einem erfolgreichen Dump werden alte Dumpfiles gelöscht und nur die Anzahl Files, definiert durch das Attribut "dumpFilesKeep" (default: 3), verbleibt im Zielverzeichnis "dumpDirLocal". Falls "dumpFilesKeep = 0" gesetzt, werden alle Dumpfiles (auch das aktuell erstellte File), gelöscht. Diese Einstellung kann sinnvoll sein, wenn FTP aktiviert ist und die erzeugten Dumps nur im FTP-Zielverzeichnis erhalten bleiben sollen.

          Die Namenskonvention der Dumpfiles ist: <dbname>_<date>_<time>.sqlitebkp[.gzip]

          Die Datenbank kann mit "set <name> restoreSQLite <Filename>" wiederhergestellt werden.
          Das erstellte Dumpfile kann auf einen FTP-Server übertragen werden. Siehe dazu die Erläuterungen unter "dumpMySQL".


        • eraseReadings - Löscht alle angelegten Readings im Device, außer dem Reading "state" und Readings, die in der Ausnahmeliste definiert mit Attribut "readingPreventFromDel" enthalten sind.

        • exportToFile [</Pfad/File>] [MAXLINES=<lines>] - exportiert DB-Einträge im CSV-Format in den gegebenen Zeitgrenzen.

          Der Dateiname wird durch das expimpfile Attribut bestimmt. Alternativ kann "/Pfad/File" als Kommando-Option angegeben werden und übersteuert ein eventuell gesetztes Attribut "expimpfile". Optional kann über den Parameter "MAXLINES" die maximale Anzahl von Datensätzen angegeben werden, die in ein File exportiert werden. In diesem Fall werden mehrere Files mit den Extensions "_part1", "_part2", "_part3" usw. erstellt (beim Import berücksichtigen !).

          Einschränkungen durch die Attribute device bzw. reading gehen in die Selektion mit ein. Der Dateiname kann Wildcards enthalten (siehe Attribut "expimpfile").
          Durch das Attribut "aggregation" wird der Export der Datensätze in Zeitscheiben der angegebenen Aggregation vorgenommen. Ist z.B. "aggregation = month" gesetzt, werden die Daten in monatlichen Paketen selektiert und in das Exportfile geschrieben. Dadurch wird die Hauptspeicherverwendung optimiert wenn sehr große Datenmengen exportiert werden sollen und vermeidet den "died prematurely" Abbruchfehler.

          Die für diese Funktion relevanten Attribute sind:

            aggregation : Festlegung der Selektionspaketierung
            device : einschließen oder ausschließen von Datensätzen die <device> enthalten
            reading : einschließen oder ausschließen von Datensätzen die <reading> enthalten
            executeBeforeProc : FHEM Kommando (oder Perl-Routine) vor dem Export ausführen
            executeAfterProc : FHEM Kommando (oder Perl-Routine) nach dem Export ausführen
            expimpfile : der Name des Exportfiles
            time.* : eine Reihe von Attributen zur Zeitabgrenzung
            valueFilter : ein zusätzliches REGEXP um die Datenselektion zu steuern. Der REGEXP wird auf das Datenbankfeld 'VALUE' angewendet.

        • fetchrows [history|current] - liefert alle Tabelleneinträge (default: history) in den gegebenen Zeitgrenzen bzw. Selektionsbedingungen durch die Attribute device und reading. Eine evtl. gesetzte Aggregation wird dabei nicht berücksichtigt.
          Die Leserichtung in der Datenbank kann durch das Attribut fetchRoute bestimmt werden.

          Jedes Ergebnisreading setzt sich aus dem Timestring des Datensatzes, einem Dubletten-Index, dem Device und dem Reading zusammen. Die Funktion fetchrows ist in der Lage, mehrfach vorkommende Datensätze (Dubletten) zu erkennen. Solche Dubletten sind mit einem Dubletten-Index > 1 gekennzeichnet. Optional wird noch ein Unique-Index angehängt, wenn Datensätze mit identischem Timestamp, Device und Reading aber unterschiedlichem Value vorhanden sind.
          Dubletten können mit dem Attribut "fetchMarkDuplicates" farblich hervorgehoben werden.

          Hinweis:
          Hervorgehobene Readings werden nach einem Restart bzw. nach rereadcfg nicht mehr angezeigt da sie nicht im statefile gesichert werden (Verletzung erlaubter Readingnamen durch Formatierung).

          Dieses Attribut ist mit einigen Farben vorbelegt, kann aber mit dem colorpicker-Widget überschrieben werden:

            attr <name> widgetOverride fetchMarkDuplicates:colorpicker

          Die Ergebnisreadings von fetchrows sind nach folgendem Schema aufgebaut:

            Beispiel:
            2017-10-22_03-04-43__1__SMA_Energymeter__Bezug_WirkP_Kosten_Diff__[1]
            # <Datum>_<Zeit>__<Dubletten-Index>__<Device>__<Reading>__[Unique-Index]

          Die zur Steuerung von fetchrows relevanten Attribute sind:

            device : einschließen oder ausschließen von Datensätzen die <device> enthalten
            fetchRoute : Leserichtung der Selektion innerhalb der Datenbank
            fetchMarkDuplicates : Hervorhebung von gefundenen Dubletten
            fetchValueFn : der angezeigte Wert des VALUE Datenbankfeldes kann mit einer Funktion vor der Readingerstellung geändert werden
            limit : begrenzt die Anzahl zu selektierenden bzw. anzuzeigenden Datensätze
            executeBeforeProc : FHEM Kommando (oder Perl-Routine) vor dem Befehl ausführen
            executeAfterProc : FHEM Kommando (oder Perl-Routine) nach dem Befehl ausführen
            reading : einschließen oder ausschließen von Datensätzen die <reading> enthalten
            time.* : eine Reihe von Attributen zur Zeitabgrenzung
            valueFilter : filtert die anzuzeigenden Datensätze mit einem regulären Ausdruck (Datenbank spezifischer REGEXP). Der REGEXP wird auf Werte des Datenbankfeldes 'VALUE' angewendet.


          Hinweis:
          Auch wenn das Modul bezüglich der Datenbankabfrage nichtblockierend arbeitet, kann eine zu große Ergebnismenge (Anzahl Zeilen bzw. Readings) die Browsersesssion bzw. FHEMWEB blockieren. Aus diesem Grund wird die Ergebnismenge mit dem Attribut limit begrenzt. Bei Bedarf kann dieses Attribut geändert werden, falls eine Anpassung der Selektionsbedingungen nicht möglich oder gewünscht ist.


        • index <Option> - Listet die in der Datenbank vorhandenen Indexe auf bzw. legt die benötigten Indexe an. Ist ein Index bereits angelegt, wird er erneuert (gelöscht und erneut angelegt)

          Die möglichen Optionen sind:

            list_all : listet die vorhandenen Indexe auf
            recreate_Search_Idx : erstellt oder erneuert (falls vorhanden) den Index Search_Idx in Tabelle history (Index für DbLog)
            drop_Search_Idx : löscht den Index Search_Idx in Tabelle history
            recreate_Report_Idx : erstellt oder erneuert (falls vorhanden) den Index Report_Idx in Tabelle history (Index für DbRep)
            drop_Report_Idx : löscht den Index Report_Idx in Tabelle history

          Die für diese Funktion relevanten Attribute sind:

            useAdminCredentials : benutzt einen privilegierten User für die Operation

          Hinweis:
          Der verwendete MySQL Datenbank-Nutzer benötigt das ALTER, CREATE und INDEX Privileg.
          Diese Rechte können gesetzt werden mit:

            set <Name> sqlCmd GRANT INDEX, ALTER, CREATE ON `<db>`.* TO '<user>'@'%';

          Das Attribut useAdminCredentials muß gewöhnlich gesetzt sein um die Rechte des verwendeten Users ändern zu können.

        • insert <Datum>,<Zeit>,<Value>,[<Unit>],[<Device>],[<Reading>] - Manuelles Einfügen eines Datensatzes in die Tabelle "history". Obligatorisch sind Eingabewerte für Datum, Zeit und Value. Die Werte für die DB-Felder TYPE bzw. EVENT werden mit "manual" gefüllt.
          Werden Device, Reading nicht gesetzt, werden diese Werte aus den entsprechenden Attributen device bzw. reading genommen.

          Hinweis:
          Nicht belegte Felder innerhalb des insert Kommandos müssen innerhalb des Strings in "," eingeschlossen werden.

            Beispiel:
            set <name> insert 2016-08-01,23:00:09,12.03,kW
            set <name> insert 2021-02-02,10:50:00,value with space
            set <name> insert 2022-05-16,10:55:00,1800,,SMA_Wechselrichter,etotal
            set <name> insert 2022-05-16,10:55:00,1800,,,etotal

          Die für diese Funktion relevanten Attribute sind:

            executeBeforeProc : FHEM Kommando (oder Perl-Routine) vor dem Befehl ausführen
            executeAfterProc : FHEM Kommando (oder Perl-Routine) nach dem Befehl ausführen


        • importFromFile [<File>] - importiert Datensätze im CSV-Format aus einer Datei in die Datenbank.
          Der Dateiname wird durch das Attribut expimpfile bestimmt.
          Alternativ kann die Datei (/Pfad/Datei) als Kommando-Option angegeben werden und übersteuert ein eventuell gesetztes Attribut "expimpfile". Der Dateiname kann Wildcards enthalten (siehe Attribut "expimpfile").

            Datensatzformat:
            "TIMESTAMP","DEVICE","TYPE","EVENT","READING","VALUE","UNIT"

            # Die Felder "TIMESTAMP","DEVICE","TYPE","EVENT","READING" und "VALUE" müssen gesetzt sein. Das Feld "UNIT" ist optional. Der Fileinhalt wird als Transaktion importiert, d.h. es wird der Inhalt des gesamten Files oder, im Fehlerfall, kein Datensatz des Files importiert. Wird eine umfangreiche Datei mit vielen Datensätzen importiert, sollte KEIN verbose=5 gesetzt werden. Es würden in diesem Fall sehr viele Sätze in das Logfile geschrieben werden was FHEM blockieren oder überlasten könnte.

            Beispiel:
            "2016-09-25 08:53:56","STP_5000","SMAUTILS","etotal: 11859.573","etotal","11859.573",""

            Die für diese Funktion relevanten Attribute sind:

              executeBeforeProc : FHEM Kommando (oder Perl-Routine) vor dem Import ausführen
              executeAfterProc : FHEM Kommando (oder Perl-Routine) nach dem Import ausführen
              expimpfile : der Name des Importfiles


        • maxValue [display | writeToDB | deleteOther]

          Berechnet den Maximalwert des Datenbankfelds "VALUE" in den Zeitgrenzen (Attribute) "timestamp_begin", "timestamp_end" bzw. "timeDiffToNow / timeOlderThan" etc. Es muss das auszuwertende Reading über das Attribut reading angegeben sein. Die Auswertung enthält den Zeitstempel des ermittelten Maximumwertes innerhalb der Aggregation bzw. Zeitgrenzen. Im Reading wird der Zeitstempel des letzten Auftretens vom Maximalwert ausgegeben, falls dieser Wert im Intervall mehrfach erreicht wird.

          Ist keine oder die Option display angegeben, werden die Ergebnisse nur angezeigt. Mit der Option writeToDB werden die Berechnungsergebnisse mit einem neuen Readingnamen in der Datenbank gespeichert.
          Der neue Readingname wird aus einem Präfix und dem originalen Readingnamen gebildet, wobei der originale Readingname durch das Attribut readingNameMap ersetzt werden kann. Der Präfix setzt sich aus der Bildungsfunktion und der Aggregation zusammen.
          Der Timestamp des neuen Readings in der Datenbank wird von der eingestellten Aggregationsperiode abgeleitet. Das Feld "EVENT" wird mit "calculated" gefüllt.

          Wird die Option deleteOther verwendet, werden alle Datensätze außer dem Datensatz mit dem ermittelten Maximalwert aus der Datenbank innerhalb der definierten Grenzen gelöscht.

            Beispiel neuer Readingname gebildet aus dem Originalreading "totalpac":
            max_day_totalpac
            # <Bildungsfunktion>_<Aggregation>_<Originalreading>

          Relevante Attribute sind:
            aggregation, device, reading, readingNameMap, executeBeforeProc, executeAfterProc, valueFilter, userExitFn, time.*-Attribute


        • migrateCollation <Collation>

          Migriert den verwendeten Zeichensatz/Kollation der Datenbank und der Tabellen current und history in das angegebene Format.

          Relevante Attribute sind:
            executeBeforeProc, executeAfterProc, useAdminCredentials, userExitFn


        • minValue [display | writeToDB | deleteOther]

          Berechnet den Minimalwert des Datenbankfelds "VALUE" in den Zeitgrenzen (Attribute) "timestamp_begin", "timestamp_end" bzw. "timeDiffToNow / timeOlderThan" etc. Es muss das auszuwertende Reading über das Attribut reading angegeben sein. Die Auswertung enthält den Zeitstempel des ermittelten Minimumwertes innerhalb der Aggregation bzw. Zeitgrenzen. Im Reading wird der Zeitstempel des ersten Auftretens vom Minimalwert ausgegeben falls dieser Wert im Intervall mehrfach erreicht wird.

          Ist keine oder die Option display angegeben, werden die Ergebnisse nur angezeigt. Mit der Option writeToDB werden die Berechnungsergebnisse mit einem neuen Readingnamen in der Datenbank gespeichert.
          Der neue Readingname wird aus einem Präfix und dem originalen Readingnamen gebildet, wobei der originale Readingname durch das Attribut readingNameMap ersetzt werden kann. Der Präfix setzt sich aus der Bildungsfunktion und der Aggregation zusammen.
          Der Timestamp der neuen Readings in der Datenbank wird von der eingestellten Aggregationsperiode abgeleitet. Das Feld "EVENT" wird mit "calculated" gefüllt.

          Wird die Option deleteOther verwendet, werden alle Datensätze außer dem Datensatz mit dem ermittelten Maximalwert aus der Datenbank innerhalb der definierten Grenzen gelöscht.

            Beispiel neuer Readingname gebildet aus dem Originalreading "totalpac":
            min_day_totalpac
            # <Bildungsfunktion>_<Aggregation>_<Originalreading>

          Relevante Attribute sind:
            aggregation, device, executeBeforeProc, executeAfterProc, reading, readingNameMap, valueFilter, userExitFn, time.*-Attribute


        • optimizeTables [showInfo | execute]

          Optimiert die Tabellen in der angeschlossenen Datenbank (MySQL).

            showInfo : zeigt Informationen zum belegten / freien Speicherplatz innerhalb der Datenbank
            execute : führt die Optimierung aller Tabellen in der Datenbank aus

          Relevante Attribute sind:
            executeBeforeProc, executeAfterProc, userExitFn


        • readingRename <[Device:]alterReadingname>,<neuerReadingname>

          Benennt den Namen eines Readings innerhalb der angeschlossenen Datenbank (siehe Internal DATABASE) um. Der Readingname wird immer in der gesamten Datenbank umgesetzt. Eventuell gesetzte Zeitgrenzen oder Beschränkungen durch die Attribute device bzw. reading werden nicht berücksichtigt.
          Optional kann eine Device angegeben werden. In diesem Fall werden nur die alten Readings dieses Devices in den neuen Readingnamen umgesetzt.

            Beispiele:
            set <name> readingRename TotalConsumption,L1_TotalConsumption
            set <name> readingRename Dum.Energy:TotalConsumption,L1_TotalConsumption

          Die Anzahl der umbenannten Device-Datensätze wird im Reading "reading_renamed" ausgegeben.
          Wird der umzubenennende Readingname in der Datenbank nicht gefunden, wird eine WARNUNG im Reading "reading_not_renamed" ausgegeben.
          Entsprechende Einträge erfolgen auch im Logfile mit verbose=3.

          Für diese Funktion sind folgende Attribute relevant:

          Relevante Attribute sind:
            executeBeforeProc, executeAfterProc, userExitFn


        • reduceLog [<no>[:<nn>]] [mode] [EXCLUDE=device1:reading1,device2:reading2,...] [INCLUDE=device:reading]

          Reduziert historische Datensätze.

          Arbeitsweise ohne Angabe von Befehlszeilenoperatoren

          Es werden die Daten innerhalb der durch die time.*-Attribute bestimmten Zeitgrenzen bereinigt. Es muss mindestens eines der time.*-Attribute gesetzt sein (siehe Tabelle unten). Die jeweils fehlende Zeitabgrenzung wird in diesem Fall durch das Modul ermittelt.
          Der Arbeitsmodus wird durch die optionale Angabe von mode bestimmt:

            ohne Angabe von mode : die Daten werden auf den ersten Eintrag pro Stunde je Device & Reading reduziert
            average : numerische Werte werden auf einen Mittelwert pro Stunde je Device & Reading reduziert, sonst wie ohne mode
            average=day : numerische Werte werden auf einen Mittelwert pro Tag je Device & Reading reduziert, sonst wie ohne mode
              Die FullDay-Option (es werden immer volle Tage selektiert) wird impliziert verwendet.
            max : numerische Werte werden auf den Maximalwert pro Stunde je Device & Reading reduziert, sonst wie ohne mode
            max=day : numerische Werte werden auf den Maximalwert pro Tag je Device & Reading reduziert, sonst wie ohne mode
              Die FullDay-Option (es werden immer volle Tage selektiert) wird impliziert verwendet.
            min : numerische Werte werden auf den Minimalwert pro Stunde je Device & Reading reduziert, sonst wie ohne mode
            min=day : numerische Werte werden auf den Minimalwert pro Tag je Device & Reading reduziert, sonst wie ohne mode
              Die FullDay-Option (es werden immer volle Tage selektiert) wird impliziert verwendet.
            sum : numerische Werte werden auf die Summe pro Stunde je Device & Reading reduziert, sonst wie ohne mode
            sum=day : numerische Werte werden auf die Summe pro Tag je Device & Reading reduziert, sonst wie ohne mode
              Die FullDay-Option (es werden immer volle Tage selektiert) wird impliziert verwendet.

          Mit den Attributen device und reading können die zu berücksichtigenden Datensätze eingeschlossen bzw. ausgeschlossen werden. Beide Eingrenzungen reduzieren die selektierten Daten und verringern den Ressourcenbedarf. Das Reading "reduceLogState" enthält das Ausführungsergebnis des letzten reduceLog-Befehls.

          Relevante Attribute sind:
            executeBeforeProc, executeAfterProc, device, reading, numDecimalPlaces, timeOlderThan, timeDiffToNow, timestamp_begin, timestamp_end, valueFilter, userExitFn

          Beispiele:

            attr <name> timeOlderThan d:200
            set <name> reduceLog
            # Datensätze die älter als 200 Tage sind, werden auf den ersten Eintrag pro Stunde je Device & Reading reduziert.

            attr <name> timeDiffToNow d:200
            set <name> reduceLog average=day
            # Datensätze die neuer als 200 Tage sind, werden auf einen Eintrag pro Tag je Device & Reading reduziert.

            attr <name> timeDiffToNow d:30
            attr <name> device TYPE=SONOSPLAYER EXCLUDE=Sonos_Kueche
            attr <name> reading room% EXCLUDE=roomNameAlias
            set <name> reduceLog
            # Datensätze die neuer als 30 Tage sind, die Devices vom Typ SONOSPLAYER sind (außer Device "Sonos_Kueche"), die Readings mit "room" beginnen (außer "roomNameAlias"), werden auf den ersten Eintrag pro Stunde je Device & Reading reduziert.

            attr <name> timeDiffToNow d:10
            attr <name> timeOlderThan d:5
            attr <name> device Luftdaten_remote
            set <name> reduceLog average
            # Datensätze die älter als 5 und neuer als 10 Tage sind und DEVICE "Luftdaten_remote" enthalten, werden bereinigt. Numerische Werte einer Stunde werden auf einen Mittelwert reduziert


          Arbeitsweise mit Angabe von Befehlszeilenoperatoren

          Es werden Datensätze berücksichtigt die älter sind als <no> Tage und (optional) neuer sind als <nn> Tage. Der Arbeitsmodus wird durch die optionale Angabe von mode wie oben beschrieben bestimmt.

          Die Zusätze "EXCLUDE" bzw. "INCLUDE" können ergänzt werden um device/reading Kombinationen in reduceLog auszuschließen bzw. einzuschließen und überschreiben die Einstellung der Attribute "device" und "reading", die in diesem Fall nicht beachtet werden.
          Die Angabe in "EXCLUDE" wird als Regex ausgewertet. Innerhalb von "INCLUDE" können SQL-Wildcards verwendet werden (weitere Informationen zu SQL-Wildcards siehe mit get <name> versionNotes 6).

          Beispiele:

            set <name> reduceLog 174:180 average EXCLUDE=SMA_Energymeter:Bezug_Wirkleistung INCLUDE=SMA_Energymeter:%
            # Datensätze älter als 174 und neuer als 180 Tage werden auf den Durchschnitt pro Stunde reduziert.
            # Es werden alle Readings vom Device "SMA_Energymeter" außer "Bezug_Wirkleistung" berücksichtigt. reduziert.

          Hinweis:
          Obwohl die Funktion selbst non-blocking ausgelegt ist, sollte das zugeordnete DbLog-Device im asynchronen Modus betrieben werden um ein Blockieren von FHEMWEB zu vermeiden (Tabellen-Lock).
          Weiterhin wird dringend empfohlen den standard INDEX 'Search_Idx' in der Tabelle 'history' anzulegen !
          Die Abarbeitung dieses Befehls dauert unter Umständen (ohne INDEX) extrem lange.


        • repairSQLite [sec]

          Repariert eine korrupte SQLite-Datenbank.

          Eine Korruption liegt im Allgemeinen vor, wenn die Fehlermitteilung "database disk image is malformed" im state des DbLog-Devices erscheint. Wird dieses Kommando gestartet, wird das angeschlossene DbLog-Device zunächst automatisch für 10 Stunden (36000 Sekunden) von der Datenbank getrennt (Trennungszeit). Nach Abschluss der Reparatur erfolgt wieder eine sofortige Neuverbindung zur reparierten Datenbank.
          Dem Befehl kann eine abweichende Trennungszeit (in Sekunden) als Argument angegeben werden.
          Die korrupte Datenbank wird als <database>.corrupt im gleichen Verzeichnis gespeichert.

          Relevante Attribute sind:
            executeBeforeProc, executeAfterProc, userExitFn

          Beispiel:
            set <name> repairSQLite
            # Die Datenbank wird repariert, Trennungszeit beträgt 10 Stunden
            set <name> repairSQLite 600
            # Die Datenbank wird repariert, Trennungszeit beträgt 10 Minuten

          Hinweis:
          Es ist nicht garantiert, dass die Reparatur erfolgreich verläuft und keine Daten verloren gehen. Je nach Schwere der Korruption kann Datenverlust auftreten oder die Reparatur scheitern, auch wenn kein Fehler im Ablauf signalisiert wird. Ein Backup der Datenbank sollte unbedingt vorhanden sein!


        • restoreMySQL <File>

          Stellt die Datenbank aus einem serverSide- oder clientSide-Dump wieder her.
          Die Funktion stellt über eine Drop-Down Liste eine Dateiauswahl für den Restore zur Verfügung.

          Verwendung eines serverSide-Dumps
          Der verwendete Datenbankuser benötigt das FILE Privileg (siehe Wiki).
          Es wird der Inhalt der history-Tabelle aus einem serverSide-Dump wiederhergestellt. Dazu ist das Verzeichnis "dumpDirRemote" des MySQL-Servers auf dem Client zu mounten und im Attribut dumpDirLocal dem DbRep-Device bekannt zu machen.
          Es werden alle Files mit der Endung "csv[.gzip]" und deren Name mit der verbundenen Datenbank beginnt (siehe Internal DATABASE), aufgelistet.

          Verwendung eines clientSide-Dumps
          Es werden alle Tabellen und eventuell vorhandenen Views wiederhergestellt. Das Verzeichnis, in dem sich die Dump-Files befinden, ist im Attribut dumpDirLocal dem DbRep-Device bekannt zu machen.
          Es werden alle Files mit der Endung "sql[.gzip]" und deren Name mit der verbundenen Datenbank beginnt (siehe Internal DATABASE), aufgelistet.
          Die Geschwindigkeit des Restores ist abhängig von der Servervariable "max_allowed_packet". Durch Veränderung dieser Variable im File my.cnf kann die Geschwindigkeit angepasst werden. Auf genügend verfügbare Ressourcen (insbesondere RAM) ist dabei zu achten.

          Der Datenbankuser benötigt Rechte zum Tabellenmanagement, z.B.:
          CREATE, ALTER, INDEX, DROP, SHOW VIEW, CREATE VIEW

          Relevante Attribute sind:
            executeBeforeProc, executeAfterProc, dumpDirLocal, userExitFn


        • restoreSQLite <File>.sqlitebkp[.gzip]

          Stellt das Backup einer SQLite-Datenbank wieder her.
          Die Funktion stellt über eine Drop-Down Liste die für den Restore zur Verfügung stehenden Dateien zur Verfügung. Die aktuell in der Zieldatenbank enthaltenen Daten werden gelöscht bzw. überschrieben. Es werden alle Files mit der Endung "sqlitebkp[.gzip]" und deren Name mit dem Namen der verbundenen Datenbank beginnt, aufgelistet.

          Relevante Attribute sind:
            executeBeforeProc, executeAfterProc, userExitFn


        • sqlCmd

          Führt ein beliebiges benutzerspezifisches Kommando aus.
          Enthält dieses Kommando eine Delete-Operation, muss zur Sicherheit das Attribut allowDeletion gesetzt sein.
          sqlCmd akzeptiert ebenfalls das Setzen von SQL Session Variablen wie z.B. "SET @open:=NULL, @closed:=NULL;" oder die Verwendung von SQLite PRAGMA vor der Ausführung des SQL-Statements. Soll die Session Variable oder das PRAGMA vor jeder Ausführung eines SQL Statements gesetzt werden, kann dafür das Attribut sqlCmdVars verwendet werden.

          Sollen die im Modul gesetzten Attribute device, reading, timestamp_begin bzw. timestamp_end im Statement berücksichtigt werden, können die Platzhalter §device§, §reading§, §timestamp_begin§ bzw. §timestamp_end§ eingesetzt werden.
          Dabei ist zu beachten, dass die Platzhalter §device§ und §reading§ komplex aufgelöst werden und dementsprechend wie im unten stehenden Beispiel anzuwenden sind.

          Soll ein Datensatz upgedated werden, ist dem Statement "TIMESTAMP=TIMESTAMP" hinzuzufügen um eine Änderung des originalen Timestamps zu verhindern.

          Beispiele für Statements:

          • set <name> sqlCmd select DEVICE, count(*) from history where TIMESTAMP >= "2017-01-06 00:00:00" group by DEVICE having count(*) > 800
          • set <name> sqlCmd select DEVICE, count(*) from history where TIMESTAMP >= "2017-05-06 00:00:00" group by DEVICE
          • set <name> sqlCmd select DEVICE, count(*) from history where TIMESTAMP >= §timestamp_begin§ group by DEVICE
          • set <name> sqlCmd select * from history where DEVICE like "Te%t" order by `TIMESTAMP` desc
          • set <name> sqlCmd select * from history where `TIMESTAMP` > "2017-05-09 18:03:00" order by `TIMESTAMP` desc
          • set <name> sqlCmd select * from current order by `TIMESTAMP` desc
          • set <name> sqlCmd select sum(VALUE) as 'Einspeisung am 04.05.2017', count(*) as 'Anzahl' FROM history where `READING` = "Einspeisung_WirkP_Zaehler_Diff" and TIMESTAMP between '2017-05-04' AND '2017-05-05'
          • set <name> sqlCmd delete from current
          • set <name> sqlCmd delete from history where TIMESTAMP < "2016-05-06 00:00:00"
          • set <name> sqlCmd update history set TIMESTAMP=TIMESTAMP,VALUE='Val' WHERE VALUE='TestValue'
          • set <name> sqlCmd select * from history where DEVICE = "Test"
          • set <name> sqlCmd insert into history (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES ('2017-05-09 17:00:14','Test','manuell','manuell','Tes§e','TestValue','°C')
          • set <name> sqlCmd select DEVICE, count(*) from history where §device§ AND TIMESTAMP >= §timestamp_begin§ group by DEVICE
          • set <name> sqlCmd select DEVICE, READING, count(*) from history where §device§ AND §reading§ AND TIMESTAMP >= §timestamp_begin§ group by DEVICE, READING

          • Nachfolgend Beispiele für ein komplexeres Statement (MySQL) unter Mitgabe von SQL Session Variablen und die SQLite PRAGMA-Verwendung:

          • set <name> sqlCmd SET @open:=NULL, @closed:=NULL; SELECT TIMESTAMP, VALUE,DEVICE, @open AS open, @open := IF(VALUE = 'open', TIMESTAMP, NULL) AS curr_open, @closed := IF(VALUE = 'closed', TIMESTAMP, NULL) AS closed FROM history WHERE DATE(TIMESTAMP) = CURDATE() AND DEVICE = "HT_Fensterkontakt" AND READING = "state" AND (VALUE = "open" OR VALUE = "closed") ORDER BY TIMESTAMP;
          • set <name> sqlCmd PRAGMA temp_store=MEMORY; PRAGMA synchronous=FULL; PRAGMA journal_mode=WAL; PRAGMA cache_size=4000; select count(*) from history;
          • set <name> sqlCmd PRAGMA temp_store=FILE; PRAGMA temp_store_directory = '/opt/fhem/'; VACUUM;

          Die Ergebnis-Formatierung kann durch das Attribut sqlResultFormat ausgewählt, sowie der verwendete Feldtrenner durch das Attribut sqlResultFieldSep festgelegt werden.

          Das Modul stellt optional eine Kommando-Historie zur Verfügung sobald ein SQL-Kommando erfolgreich ausgeführt wurde. Um diese Option zu nutzen, ist das Attribut sqlCmdHistoryLength mit der gewünschten Listenlänge zu aktivieren.
          Ist die Kommando-Historie aktiviert, ist mit ___list_sqlhistory___ innerhalb des Kommandos sqlCmdHistory eine indizierte Liste der gespeicherten SQL-Statements verfügbar.

          Ein SQL-Statement kann durch Angabe seines Index im ausgeführt werden mit:

            set <name> sqlCmd ckey:<Index>      (e.g. ckey:4)

          Relevante Attribute sind:
            executeBeforeProc, executeAfterProc, allowDeletion, sqlResultFormat, sqlResultFieldSep, sqlCmdHistoryLength, sqlCmdVars, sqlFormatService, useAdminCredentials, userExitFn

          Hinweis:
          Auch wenn das Modul bezüglich der Datenbankabfrage nichtblockierend arbeitet, kann eine zu große Ergebnismenge (Anzahl Zeilen bzw. Readings) die Browsersesssion bzw. FHEMWEB blockieren.
          Wenn man sich unsicher ist, sollte man vorsorglich dem Statement ein Limit hinzufügen.


        • sqlCmdHistory

          Wenn mit dem Attribut sqlCmdHistoryLength aktiviert, kann ein gespeichertes SQL-Statement aus einer Liste ausgewählt und ausgeführt werden.
          Der SQL Cache wird beim Beenden von FHEM automatisch gesichert und beim Start des Systems wiederhergestellt.
          Mit den nachfolgenden Einträgen werden spezielle Funktionen ausgeführt:


            ___purge_sqlhistory___ : löscht den History Cache
            ___list_sqlhistory___ : zeigt die aktuell im Cache vorhandenen SQL-Statements incl. ihrem Cache Key (ckey)
            ___save_sqlhistory___ : sichert den History Cache manuell
            ___restore_sqlhistory___ : stellt die letzte Sicherung des History Cache wieder her

          Relevante Attribute sind:
            executeBeforeProc, executeAfterProc, allowDeletion, sqlResultFormat, sqlResultFieldSep, sqlCmdHistoryLength, sqlCmdVars, sqlFormatService, useAdminCredentials, userExitFn


        • sqlSpecial

          Die Funktion bietet eine Drop-Downliste mit einer Auswahl vorbereiter Auswertungen an.
          Das Ergebnis des Statements wird im Reading "SqlResult" dargestellt. Die Ergebnis-Formatierung kann durch das Attribut sqlResultFormat ausgewählt, sowie der verwendete Feldtrenner durch das Attribut sqlResultFieldSep festgelegt werden.

            50mostFreqLogsLast2days ermittelt die 50 am häufigsten vorkommenden Loggingeinträge der letzten 2 Tage
            allDevCount alle in der Datenbank vorkommenden Devices und deren Anzahl
            allDevReadCount alle in der Datenbank vorkommenden Device/Reading-Kombinationen und deren Anzahl
            50DevReadCount die 50 am häufigsten in der Datenbank enthaltenen Device/Reading-Kombinationen
            recentReadingsOfDevice ermittelt die neuesten in der Datenbank vorhandenen Datensätze eines Devices. Das auszuwertende
            Device muß im Attribut device definiert sein.
            readingsDifferenceByTimeDelta ermittelt die Wertedifferenz aufeinanderfolgender Datensätze eines Readings. Das auszuwertende
            Device und Reading muß im Attribut device bzw. reading definiert sein.
            Die Zeitgrenzen der Auswertung werden durch die time.*-Attribute festgelegt.

          Relevante Attribute sind:
            executeBeforeProc, executeAfterProc, allowDeletion, sqlResultFormat, sqlResultFieldSep, sqlFormatService, device, reading, userExitFn



        • sumValue [display | writeToDB | writeToDBSingle | writeToDBInTime]

          Berechnet die Summenwerte des Datenbankfelds "VALUE" in den Zeitgrenzen der möglichen time.*-Attribute.

          Es muss das auszuwertende Reading im Attribut reading angegeben sein.
          Diese Funktion ist sinnvoll wenn fortlaufend Wertedifferenzen eines Readings in die Datenbank geschrieben werden.

          Ist keine oder die Option display angegeben, werden die Ergebnisse nur angezeigt.
          Mit den Optionen writeToDB, writeToDBSingle bzw. writeToDBInTime werden die Berechnungsergebnisse mit einem neuen Readingnamen in der Datenbank gespeichert.

            writeToDB : schreibt jeweils einen Wert mit den Zeitstempeln XX:XX:01 und XX:XX:59 innerhalb der jeweiligen Auswertungsperiode
            writeToDBSingle : schreibt nur einen Wert mit dem Zeitstempel XX:XX:59 am Ende einer Auswertungsperiode
            writeToDBInTime : schreibt jeweils einen Wert am Anfang und am Ende der Zeitgrenzen einer Auswertungsperiode

          Der neue Readingname wird aus einem Präfix und dem originalen Readingnamen gebildet,
          wobei der originale Readingname durch das Attribut "readingNameMap" ersetzt werden kann.
          Der Präfix setzt sich aus der Bildungsfunktion und der Aggregation zusammen.
          Der Timestamp der neuen Readings in der Datenbank wird von der eingestellten Aggregationsperiode abgeleitet,
          sofern kein eindeutiger Zeitpunkt des Ergebnisses bestimmt werden kann. Das Feld "EVENT" wird mit "calculated" gefüllt.

            Beispiel neuer Readingname gebildet aus dem Originalreading "totalpac":
            sum_day_totalpac
            # <Bildungsfunktion>_<Aggregation>_<Originalreading>

          Relevante Attribute sind:
            executeBeforeProc, executeAfterProc, aggregation, device, reading, readingNameMap, valueFilter, userExitFn, time.*-Attribute



        • syncStandby <DbLog-Device Standby>

          Es werden die Datensätze aus der angeschlossenen Datenbank (Quelle) direkt in eine weitere Datenbank (Standby-Datenbank) übertragen. Dabei ist "<DbLog-Device Standby>" das DbLog-Device, welches mit der Standby-Datenbank verbunden ist.

          Es werden alle Datensätze übertragen, die durch das timestamp_begin Attribut bzw. die Attribute "device", "reading" bestimmt sind.
          Die Datensätze werden dabei in Zeitscheiben entsprechend der eingestellten Aggregation übertragen. Hat das Attribut "aggregation" den Wert "no" oder "month", werden die Datensätze automatisch in Tageszeitscheiben zur Standby-Datenbank übertragen. Quell- und Standby-Datenbank können unterschiedlichen Typs sein.

          Relevante Attribute sind:
            executeBeforeProc, executeAfterProc, aggregation, device, reading, readingNameMap, valueFilter, userExitFn, time.*-Attribute



        • tableCurrentFillup

          Die current-Tabelle wird mit einem Extrakt der history-Tabelle aufgefüllt.
          Die Attribute zur Zeiteinschränkung bzw. device, reading werden ausgewertet.
          Dadurch kann der Inhalt des Extrakts beeinflusst werden.
          Im zugehörigen DbLog-Device sollte das Attribut "DbLogType=SampleFill/History" gesetzt sein.

          Relevante Attribute sind:
            executeBeforeProc, executeAfterProc, device, reading, valueFilter, userExitFn, time.*-Attribute


        • tableCurrentPurge

          Löscht den Inhalt der current-Tabelle.
          Es werden keine Limitierungen, z.B. durch die Attribute timestamp_begin, timestamp_end, device oder reading ausgewertet.

          Relevante Attribute sind:
            executeBeforeProc, executeAfterProc, userExitFn


        • vacuum

          Optimiert die Tabellen in der angeschlossenen Datenbank (SQLite, PostgreSQL).
          Insbesondere für SQLite Datenbanken ist unbedingt empfehlenswert die Verbindung des relevanten DbLog-Devices zur Datenbank vorübergehend zu schließen (siehe DbLog reopen Kommando).

          Relevante Attribute sind:
            executeBeforeProc, executeAfterProc, userExitFn

          Hinweis:
          Bei der Ausführung des vacuum Kommandos wird bei SQLite Datenbanken automatisch das PRAGMA auto_vacuum = FULL angewendet.
          Das vacuum Kommando erfordert zusätzlichen temporären Speicherplatz. Sollte der Platz im Standard TMPDIR Verzeichnis nicht ausreichen, kann SQLite durch setzen der Umgebungsvariable SQLITE_TMPDIR ein ausreichend großes Verzeichnis zugewiesen werden.
          (siehe: www.sqlite.org/tempfiles)



    Get
      Die Get-Kommandos von DbRep dienen dazu eine Reihe von Metadaten der verwendeten Datenbankinstanz abzufragen. Dies sind zum Beispiel eingestellte Serverparameter, Servervariablen, Datenbankstatus- und Tabelleninformationen. Die verfügbaren get-Funktionen sind von dem verwendeten Datenbanktyp abhängig. So ist für SQLite z.Zt. nur "svrinfo" verfügbar. Die Funktionen liefern nativ sehr viele Ausgabewerte, die über über funktionsspezifische Attribute abgrenzbar sind. Der Filter ist als kommaseparierte Liste anzuwenden. Dabei kann SQL-Wildcard (%) verwendet werden.

      Hinweis:
      Nach der Ausführung einer get-Funktion in der Detailsicht einen Browserrefresh durchführen um die Ergebnisse zu sehen !

        • blockinginfo - Listet die aktuell systemweit laufenden Hintergrundprozesse (BlockingCalls) mit ihren Informationen auf. Zu lange Zeichenketten (z.B. Argumente) werden gekürzt ausgeschrieben.


        • dbstatus - Listet globale Informationen zum MySQL Serverstatus (z.B. Informationen zum Cache, Threads, Bufferpools, etc. ). Es werden zunächst alle verfügbaren Informationen berichtet. Mit dem Attribut showStatus kann die Ergebnismenge eingeschränkt werden, um nur gewünschte Ergebnisse abzurufen. Detailinformationen zur Bedeutung der einzelnen Readings sind hier verfügbar.

            Beispiel
            attr <name> showStatus %uptime%,%qcache%
            get <name> dbstatus
            # Es werden nur Readings erzeugt die im Namen "uptime" und "qcache" enthaltenen


        • dbvars - Zeigt die globalen Werte der MySQL Systemvariablen. Enthalten sind zum Beispiel Angaben zum InnoDB-Home, dem Datafile-Pfad, Memory- und Cache-Parameter, usw. Die Ausgabe listet zunächst alle verfügbaren Informationen auf. Mit dem Attribut showVariables kann die Ergebnismenge eingeschränkt werden um nur gewünschte Ergebnisse abzurufen. Weitere Informationen zur Bedeutung der ausgegebenen Variablen sind hier verfügbar.

            Beispiel
            attr <name> showVariables %version%,%query_cache%
            get <name> dbvars
            # Es werden nur Readings erzeugt die im Namen "version" und "query_cache" enthalten


        • initData - Ermittelt einige für die Funktion des Moduls relevante Datenbankeigenschaften. Der Befehl wird bei der ersten Datenbankverbindung implizit ausgeführt.


        • minTimestamp - Ermittelt den Zeitstempel des ältesten Datensatzes in der Datenbank (wird implizit beim Start von FHEM ausgeführt). Der Zeitstempel wird als Selektionsbeginn verwendet wenn kein Zeitattribut den Selektionsbeginn festlegt.


        • procinfo - Listet die existierenden Datenbank-Prozesse in einer Tabelle auf (nur MySQL).
          Typischerweise werden nur die Prozesse des Verbindungsusers (angegeben in DbLog-Konfiguration) ausgegeben. Sollen alle Prozesse angezeigt werden, ist dem User das globale Recht "PROCESS" einzuräumen.
          Für bestimmte SQL-Statements wird seit MariaDB 5.3 ein Fortschrittsreporting (Spalte "PROGRESS") ausgegeben. Zum Beispiel kann der Abarbeitungsgrad bei der Indexerstellung verfolgt werden.
          Weitere Informationen sind hier verfügbar.


        • sqlCmdBlocking <SQL-Statement>

          Führt das angegebene SQL-Statement blockierend mit einem Standardtimeout von 10 Sekunden aus. Der Timeout kann mit dem Attribut timeout eingestellt werden.

            Beispiele:
            { fhem("get <name> sqlCmdBlocking select device,count(*) from history where timestamp > '2018-04-01' group by device") }
            { CommandGet(undef,"Rep.LogDB1 sqlCmdBlocking select device,count(*) from history where timestamp > '2018-04-01' group by device") }
            get <name> sqlCmdBlocking select device,count(*) from history where timestamp > '2018-04-01' group by device

        • Diese Funktion ist durch ihre Arbeitsweise speziell für den Einsatz in benutzerspezifischen Scripten geeignet.
          Die Eingabe akzeptiert Mehrzeiler und gibt ebenso mehrzeilige Ergebisse zurück. Dieses Kommando akzeptiert ebenfalls das Setzen von SQL Session Variablen wie z.B. "SET @open:=NULL, @closed:=NULL;" oder PRAGMA für SQLite.
          Werden mehrere Felder selektiert und zurückgegeben, erfolgt die Feldtrennung mit dem Trenner des Attributs sqlResultFieldSep (default "|"). Mehrere Ergebniszeilen werden mit Newline ("\n") separiert.
          Diese Funktion setzt/aktualisiert nur Statusreadings, die Funktion im Attribut "userExitFn" wird nicht aufgerufen.

          Erstellt man eine kleine Routine in 99_myUtils, wie z.B.:
          sub dbval {
            my $name = shift;
            my $cmd  = shift;
            my $ret  = CommandGet(undef,"$name sqlCmdBlocking $cmd");
            return $ret;
          }
              
          kann sqlCmdBlocking vereinfacht verwendet werden mit Aufrufen wie:

            Beispiele:
            { dbval("<name>","select count(*) from history") }
            oder
            $ret = dbval("<name>","select count(*) from history");


        • storedCredentials - Listet die im Device gespeicherten User / Passworte für den Datenbankzugriff auf.
          (nur gültig bei Datenbanktyp MYSQL)


        • svrinfo - allgemeine Datenbankserver-Informationen wie z.B. die DBMS-Version, Serveradresse und Port usw. Die Menge der Listenelemente ist vom Datenbanktyp abhängig. Mit dem Attribut showSvrInfo kann die Ergebnismenge eingeschränkt werden. Weitere Erläuterungen zu den gelieferten Informationen sind hier zu finden.

            Beispiel
            attr <name> showSvrInfo %SQL_CATALOG_TERM%,%NAME%
            get <name> svrinfo
            # Es werden nur Readings erzeugt die im Namen "SQL_CATALOG_TERM" und "NAME" enthalten


        • tableinfo - ruft Tabelleninformationen aus der mit dem DbRep-Device verbundenen Datenbank ab (MySQL). Es werden per default alle in der verbundenen Datenbank angelegten Tabellen ausgewertet. Mit dem Attribut showTableInfo können die Ergebnisse eingeschränkt werden. Erläuterungen zu den erzeugten Readings sind hier zu finden.

            Beispiel
            attr <name> showTableInfo current,history
            get <name> tableinfo
            # Es werden nur Information der Tabellen "current" und "history" angezeigt


        • versionNotes [hints | rel | <key>] - Zeigt Release Informationen und/oder Hinweise zum Modul an.

            rel : zeigt nur Release Informationen
            hints : zeigt nur Hinweise an
            <key> : es wird der Hinweis mit der angegebenen Nummer angezeigt

        • Sind keine Optionen angegeben, werden sowohl Release Informationen als auch Hinweise angezeigt. Es sind nur Release Informationen mit Bedeutung für den Modulnutzer enthalten.

    Attribute
      Über die modulspezifischen Attribute wird die Abgrenzung der Auswertung und die Aggregation der Werte gesteuert.
      Die hier aufgeführten Attribute sind nicht für jede Funktion des Moduls bedeutsam. In der Hilfe zu den set/get-Kommandos wird explizit angegeben, welche Attribute für das jeweilige Kommando relevant sind.

      Hinweis zur SQL-Wildcard Verwendung:
      Innerhalb der Attribut-Werte für "device" und "reading" kann SQL-Wildcards "%" angegeben werden. Dabei wird "%" als Platzhalter für beliebig viele Zeichen verwendet. Das Zeichen "_" wird nicht als SQL-Wildcard supported.
      Dies gilt für alle Funktionen ausser "insert", "importFromFile" und "deviceRename".
      Die Funktion "insert" erlaubt nicht, dass die genannten Attribute das Wildcard "%" enthalten. Character "_" wird als normales Zeichen gewertet.
      In Ergebnis-Readings wird das Wildcardzeichen "%" durch "/" ersetzt um die Regeln für erlaubte Zeichen in Readings einzuhalten.

        • aggregation - Zusammenfassung der Device/Reading-Selektionen in Stunden, Tagen, Kalenderwochen, Kalendermonaten, Kalenderjahren oder "no".
          Liefert z.B. die Anzahl der DB-Einträge am Tag (countEntries) oder die Summierung von Differenzwerten eines Readings (sumValue) usw.
          Mit Aggregation "no" (default) wird das Ergebnis aus allen Werten einer Device/Reading-Kombination im selektierten Zeitraum ermittelt.

        • allowDeletion - schaltet die Löschfunktion des Moduls frei

        • autoForward - wenn aktiviert, werden die Ergebnisreadings einer Funktion in ein oder mehrere Devices übertragen.
          Die Definition erfolgt in der Form:
          {
            "<source-reading> => "<dest.device> [=> <dest.-reading>]",
            "<source-reading> => "<dest.device> [=> <dest.-reading>]",
            ...
          }
                                        
          In der Angabe <source-reading> sind Wildcards (.*) erlaubt.

            Beispiel:
            {
              ".*"        => "Dum.Rep.All",
              ".*AVGAM.*" => "Dum.Rep     => average",
              ".*SUM.*"   => "Dum.Rep.Sum => summary",
            }
            # alle Readings werden zum Device "Dum.Rep.All" übertragen, Readingname bleibt im Ziel erhalten
            # Readings mit "AVGAM" im Namen werden zum Device "Dum.Rep" in das Reading "average" übertragen
            # Readings mit "SUM" im Namen werden zum Device "Dum.Rep.Sum" in das Reading "summary" übertragen
                                          

        • averageCalcForm

          Legt die Berechnungsvariante für die Ermittlung des Durchschnittswertes mit "averageValue" fest.

          Zur Zeit sind folgende Varianten implementiert:

            avgArithmeticMean: Es wird der arithmetische Mittelwert berechnet. (default)
            avgDailyMeanGWS: Berechnet die Tagesmitteltemperatur entsprechend den
            Vorschriften des deutschen Wetterdienstes. (siehe "get <name> versionNotes 2")
            Diese Variante verwendet automatisch die Aggregation "day".
            avgDailyMeanGWSwithGTS: Wie "avgDailyMeanGWS" und berechnet zusätzlich die Grünlandtemperatursumme.
            Ist der Wert 200 erreicht, wird das Reading "reachedGTSthreshold" mit dem Datum
            des erstmaligen Erreichens dieses Schwellenwertes erstellt.
            Hinweis: Das Attribut timestamp_begin muss auf den Beginn eines Jahres gesetzt werden!
            (siehe "get <name> versionNotes 5")
            avgTimeWeightMean: Berechnet den zeitgewichteten Mittelwert.
            Hinweis: Es müssen mindestens zwei Datenpunkte pro aggregation Periode vorhanden sein.

        • countEntriesDetail - Wenn gesetzt, erstellt die Funktion "countEntries" eine detallierte Ausgabe der Datensatzzahl pro Reading und Zeitintervall. Standardmäßig wird nur die Summe aller selektierten Datensätze ausgegeben.

        • device - Abgrenzung der DB-Selektionen auf ein bestimmtes oder mehrere Devices.
          Es können Geräte-Spezifikationen (devspec) angegeben werden.
          In diesem Fall werden die Devicenamen vor der Selektion aus der Geräte-Spezifikationen und den aktuell in FHEM vorhandenen Devices aufgelöst.
          Wird dem Device bzw. der Device-Liste oder Geräte-Spezifikation ein "EXCLUDE=" vorangestellt, werden diese Devices von der Selektion ausgeschlossen.
          Die Datenbankselektion wird als logische UND-Verknüpfung aus "device" und dem Attribut reading ausgeführt.

            Beispiele:
            attr <name> device TYPE=DbRep
            attr <name> device MySTP_5000
            attr <name> device SMA.*,MySTP.*
            attr <name> device SMA_Energymeter,MySTP_5000
            attr <name> device %5000
            attr <name> device TYPE=SSCam EXCLUDE=SDS1_SVS
            attr <name> device TYPE=SSCam,TYPE=ESPEasy EXCLUDE=SDS1_SVS
            attr <name> device EXCLUDE=SDS1_SVS
            attr <name> device EXCLUDE=TYPE=SSCam

          Falls weitere Informationen zu Geräte-Spezifikationen benötigt werden, bitte "get <name> versionNotes 3" ausführen.

        • diffAccept [+-]<Schwellenwert>

          diffAccept legt für die Funktion diffValue fest, bis zu welchem <Schwellenwert> eine Werte-Differenz zwischen zwei unmittelbar aufeinander folgenden Datensätzen akzeptiert werden.
          Wird dem Schwellenwert +- (optional) vorangestellt, werden sowohl positive als auch negative Differenzen ausgewertet.

          (default: 20, nur positive Differenzen zwischen Vorgänger und Nachfolger)

            Beispiel:
            attr diffAccept +-10000

          Bei Schwellenwertüberschreitungen wird das Reading diff_overrun_limit_<Schwellenwert> erstellt.
          Es enthält eine Liste der relevanten Wertepaare. Mit verbose 3 werden diese Datensätze ebenfalls im Logfile protokolliert.

            Beispiel Ausgabe im Logfile beim Überschreiten von diffAccept=10:

            DbRep Rep.STP5000.etotal -> data ignored while calc diffValue due to threshold overrun (diffAccept = 10):
            2016-04-09 08:50:50 0.0340 -> 2016-04-09 12:42:01 13.3440

            # Der Differenz zwischen dem ersten Datensatz mit einem Wert von 0.0340 zum nächsten Wert 13.3440 ist untypisch hoch und führt zu einem zu hohen Differenzwert.
            # Es ist zu entscheiden ob der Datensatz gelöscht, ignoriert, oder das Attribut diffAccept angepasst werden sollte.

        • dumpComment
          Benutzer spezifischer Kommentar, welcher im Kopf der durch "dumpMyQL clientSide" erzeugten Datei eingetragen wird.

        • dumpCompress
          Wenn gesetzt, wird die durch "dumpMySQL" bzw. "dumpSQLite" erzeugte Datei anschließend komprimiert und die unkomprimierte Quellendatei gelöscht.

        • dumpDirLocal

            Zielverzeichnis für die Erstellung von Dumps mit "dumpMySQL clientSide" oder "dumpSQLite".
            Durch Setzen dieses Attributes wird die interne Versionsverwaltung aktiviert. In diesem Verzeichnis werden Backup Dateien gesucht und gelöscht wenn die gefundene Anzahl den Attributwert "dumpFilesKeep" überschreitet. Mit dem Attribut wird ebenfalls ein lokal gemountetes Verzeichnis "dumpDirRemote" (bei dumpMySQL serverSide) DbRep bekannt gemacht.
            (default: {global}{modpath}/log/)

            Beispiel:
            attr <Name> dumpDirLocal /sds1/backup/dumps_FHEM/

        • dumpDirRemote

            Zielverzeichnis für die Erstellung von Dumps mit "dumpMySQL serverSide".
            (default: das Home-Dir des MySQL-Servers auf dem MySQL-Host)

        • dumpMemlimit - erlaubter Speicherverbrauch für das Dump SQL-Script zur Generierungszeit (default: 100000 Zeichen). Bitte den Parameter anpassen, falls es zu Speicherengpässen und damit verbundenen Performanceproblemen kommen sollte.

        • dumpSpeed - Anzahl der abgerufenen Zeilen aus der Quelldatenbank (default: 10000) pro Select durch "dumpMySQL ClientSide". Dieser Parameter hat direkten Einfluß auf die Laufzeit und den Ressourcenverbrauch zur Laufzeit.

        • dumpFilesKeep

            Die integrierte Versionsverwaltung belässt die angegebene Anzahl Backup Dateien im Backup Verzeichnis.
            Die Versionsverwaltung muß durch Setzen des Attributs "dumpDirLocal" eingeschaltet sein.
            Sind mehr (ältere) Backup Dateien vorhanden, werden diese gelöscht nachdem ein neues Backup erfolgreich erstellt wurde. Das globale Attribut "archivesort" wird berücksichtigt.
            (default: 3)

        • executeAfterProc

          Es kann ein FHEM-Kommando oder Perl Code angegeben werden der nach der Befehlsabarbeitung ausgeführt werden soll.
          Perl Code ist in {...} einzuschließen. Es stehen die Variablen $hash (Hash des DbRep Devices) und $name (Name des DbRep-Devices) zur Verfügung.

            Beispiel:

            attr <name> executeAfterProc set og_gz_westfenster off;
            attr <name> executeAfterProc {adump ($name)}

            # "adump" ist eine in 99_myUtils definierte Funktion.
            sub adump {
                my ($name) = @_;
                my $hash   = $defs{$name};
                # die eigene Funktion, z.B.
                Log3($name, 3, "DbRep $name -> Dump ist beendet");
            
                return;
            }
            
        • executeBeforeProc

          Es kann ein FHEM-Kommando oder Perl Code angegeben werden der vor der Befehlsabarbeitung ausgeführt werden soll.
          Perl Code ist in {...} einzuschließen. Es stehen die Variablen $hash (Hash des DbRep Devices) und $name (Name des DbRep-Devices) zur Verfügung.

            Beispiel:

            attr <name> executeBeforeProc set og_gz_westfenster on;
            attr <name> executeBeforeProc {bdump ($name)}

            # "bdump" ist eine in 99_myUtils definierte Funktion.
            sub bdump {
                my ($name) = @_;
                my $hash   = $defs{$name};
                # die eigene Funktion, z.B.
                Log3($name, 3, "DbRep $name -> Dump startet");
            
                return;
            }
            
        • expimpfile </Pfad/Filename> [MAXLINES=<lines>] - Pfad/Dateiname für Export/Import in/aus einem File.

          Optional kann über den Parameter "MAXLINES" die maximale Anzahl von Datensätzen angegeben werden, die in ein File exportiert werden. In diesem Fall werden mehrere Files mit den Extensions "_part1", "_part2", "_part3" usw. erstellt.
          Der Dateiname kann Platzhalter enthalten die gemäß der nachfolgenden Tabelle ersetzt werden. Weiterhin können %-wildcards der POSIX strftime-Funktion des darunterliegenden OS enthalten sein (siehe auch strftime Beschreibung).

            %L : wird ersetzt durch den Wert des global logdir Attributs
            %TSB : wird ersetzt durch den (berechneten) Wert des Starttimestamps der Datenselektion
            Allgemein gebräuchliche POSIX-Wildcards sind:
            %d : Tag des Monats (01..31)
            %m : Monat (01..12)
            %Y : Jahr (1970...)
            %w : Wochentag (0..6); beginnend mit Sonntag (0)
            %j : Tag des Jahres (001..366)
            %U : Wochennummer des Jahres, wobei Wochenbeginn = Sonntag (00..53)
            %W : Wochennummer des Jahres, wobei Wochenbeginn = Montag (00..53)

            Beispiele:
            attr <name> expimpfile /sds1/backup/exptest_%TSB.csv
            attr <name> expimpfile /sds1/backup/exptest_%Y-%m-%d.csv

          Zur POSIX Wildcardverwendung siehe auch die Erläuterungen zum Filelog Modul.

        • fastStart - Normalerweise verbindet sich jedes DbRep-Device beim FHEM-Start kurz mit seiner Datenbank um benötigte Informationen abzurufen und das Reading "state" springt bei Erfolg auf "connected". Ist dieses Attribut gesetzt, erfolgt die initiale Datenbankverbindung erst dann wenn das DbRep-Device sein erstes Kommando ausführt.
          Das Reading "state" verbleibt nach FHEM-Start solange im Status "initialized".
          (default: 1 für TYPE Client)

        • fetchMarkDuplicates - Markierung von mehrfach vorkommenden Datensätzen im Ergebnis des "fetchrows" Kommandos

        • fetchRoute [descent | ascent] - bestimmt die Leserichtung des fetchrows-Befehl.

            descent - die Datensätze werden absteigend gelesen (default). Wird die durch das Attribut "limit" festgelegte Anzahl der Datensätze überschritten, werden die neuesten x Datensätze angezeigt.

            ascent - die Datensätze werden aufsteigend gelesen. Wird die durch das Attribut "limit" festgelegte Anzahl der Datensätze überschritten, werden die ältesten x Datensätze angezeigt.


        • fetchValueFn - Der angezeigte Wert des Datenbankfeldes VALUE kann vor der Erstellung des entsprechenden Readings geändert werden. Das Attribut muss eine Perl Funktion eingeschlossen in {} enthalten.
          Der Wert des Datenbankfeldes VALUE wird in der Variable $VALUE zur Verfügung gestellt.

            Beispiel:
            attr <name> fetchValueFn { $VALUE =~ s/^.*Used:\s(.*)\sMB,.*/$1." MB"/e }
            # Von einer langen Ausgabe wird ein spezifisches Zeichenmuster extrahiert und als VALUE anstatt der gesamten Zeile im Reading angezeigt.


        • ftpUse - FTP Transfer nach einem Dump wird eingeschaltet (ohne SSL Verschlüsselung). Das erzeugte Datenbank Backupfile wird non-blocking zum angegebenen FTP-Server (Attribut "ftpServer") übertragen.

        • ftpUseSSL - FTP Transfer mit SSL Verschlüsselung nach einem Dump wird eingeschaltet. Das erzeugte Datenbank Backupfile wird non-blocking zum angegebenen FTP-Server (Attribut "ftpServer") übertragen.

        • ftpUser - User zur Anmeldung am FTP-Server nach einem Dump, default: "anonymous".

        • ftpDebug - Debugging der FTP Kommunikation zur Fehlersuche.

        • ftpDir - Verzeichnis des FTP-Servers in welches das File nach einem Dump übertragen werden soll (default: "/").

        • ftpDumpFilesKeep - Es wird die angegebene Anzahl Dumpfiles im <ftpDir> belassen (default: 3). Sind mehr (ältere) Dumpfiles vorhanden, werden diese gelöscht nachdem ein neuer Dump erfolgreich übertragen wurde.

        • ftpPassive - setzen wenn passives FTP verwendet werden soll

        • ftpPort - FTP-Port, default: 21

        • ftpPwd - Passwort des FTP-Users, default nicht gesetzt

        • ftpServer - Name oder IP-Adresse des FTP-Servers zur Übertragung von Files nach einem Dump.

        • ftpTimeout - Timeout für eine FTP-Verbindung in Sekunden (default: 30).

        • limit - begrenzt die Anzahl der resultierenden Datensätze im select-Statement von "fetchrows", bzw. der anzuzeigenden Datensätze der Kommandos "delSeqDoublets adviceDelete", "delSeqDoublets adviceRemain" (default 1000). Diese Limitierung soll eine Überlastung der Browsersession und ein blockieren von FHEMWEB verhindern. Bei Bedarf entsprechend ändern bzw. die Selektionskriterien (Zeitraum der Auswertung) anpassen.

        • numDecimalPlaces - Legt die Anzahl der Nachkommastellen bei Readings mit numerischen Ergebnissen fest.
          Ausgenommen sind Ergebnisse aus userspezifischen Abfragen (sqlCmd).
          (default: 4)

        • optimizeTablesBeforeDump - wenn "1", wird vor dem Datenbankdump eine Tabellenoptimierung ausgeführt (default: 0). Dadurch verlängert sich die Laufzeit des Dump.

            Hinweis
            Die Tabellenoptimierung führt zur Sperrung der Tabellen und damit zur Blockierung von FHEM falls DbLog nicht im asynchronen Modus (DbLog-Attribut "asyncMode") betrieben wird !

        • reading - Abgrenzung der DB-Selektionen auf ein bestimmtes oder mehrere Readings sowie exkludieren von Readings. Mehrere Readings werden als Komma separierte Liste angegeben. Es können SQL Wildcard (%) verwendet werden.
          Wird dem Reading bzw. der Reading-Liste ein "EXCLUDE=" vorangestellt, werden diese Readings nicht inkludiert.
          Die Datenbankselektion wird als logische UND Verknüpfung aus "reading" und dem Attribut device ausgeführt.

            Beispiele:
            attr <name> reading etotal
            attr <name> reading et%
            attr <name> reading etotal,etoday
            attr <name> reading eto%,Einspeisung EXCLUDE=etoday
            attr <name> reading etotal,etoday,Ein% EXCLUDE=%Wirkleistung


        • readingNameMap - ein Teil des erstellten Readingnamens wird mit dem angegebenen String ersetzt.

        • readingPreventFromDel - Komma separierte Liste von Readings die vor einer neuen Operation nicht gelöscht werden sollen

        • role - die Rolle des DbRep-Device. Standard ist "Client". Die Rolle "Agent" ist im Abschnitt "DbRep-Agent" beschrieben.
          Siehe auch Abschnitt DbRep-Agent.

        • seqDoubletsVariance <positive Abweichung [negative Abweichung] [EDGE=negative|positive]>

          Akzeptierte Abweichung für das Kommando "set <name> delSeqDoublets".
          Der Wert des Attributs beschreibt die Abweichung bis zu der aufeinanderfolgende numerische Werte (VALUE) von Datensätzen als gleich angesehen werden sollen. Ist in "seqDoubletsVariance" nur ein Zahlenwert angegeben, wird er sowohl als positive als auch negative Abweichung verwendet und bilden den "Löschkorridor". Optional kann ein zweiter Zahlenwert für eine negative Abweichung, getrennt durch Leerzeichen, angegeben werden. Es sind immer absolute, d.h. positive Zahlenwerte anzugeben.
          Ist der Zusatz "EDGE=negative" angegeben, werden Werte an einer negativen Flanke (z.B. beim Wechel von 4.0 -> 1.0) nicht gelöscht auch wenn sie sich im "Löschkorridor" befinden. Entsprechendes gilt bei "EDGE=positive" für die positive Flanke (z.B. beim Wechel von 1.2 -> 2.8).

            Beispiele:
            attr <name> seqDoubletsVariance 0.0014
            attr <name> seqDoubletsVariance 1.45
            attr <name> seqDoubletsVariance 3.0 2.0
            attr <name> seqDoubletsVariance 1.5 EDGE=negative


        • showproctime - wenn gesetzt, zeigt das Reading "sql_processing_time" die benötigte Abarbeitungszeit (in Sekunden) für die SQL-Ausführung der durchgeführten Funktion. Dabei wird nicht ein einzelnes SQl-Statement, sondern die Summe aller notwendigen SQL-Abfragen innerhalb der jeweiligen Funktion betrachtet.

        • showStatus - grenzt die Ergebnismenge des Befehls "get <name> dbstatus" ein. Es können SQL-Wildcard (%) verwendet werden.

            Bespiel:
            attr <name> showStatus %uptime%,%qcache%
            # Es werden nur Readings erzeugt die im Namen "uptime" und "qcache" enthalten

        • showVariables - grenzt die Ergebnismenge des Befehls "get <name> dbvars" ein. Es können SQL-Wildcard (%) verwendet werden.

            Bespiel:
            attr <name> showVariables %version%,%query_cache%
            # Es werden nur Readings erzeugt die im Namen "version" und "query_cache" enthalten

        • showSvrInfo - grenzt die Ergebnismenge des Befehls "get <name> svrinfo" ein. Es können SQL-Wildcard (%) verwendet werden.

            Bespiel:
            attr <name> showSvrInfo %SQL_CATALOG_TERM%,%NAME%
            # Es werden nur Readings erzeugt die im Namen "SQL_CATALOG_TERM" und "NAME" enthalten

        • showTableInfo

          Grenzt die Ergebnismenge des Befehls "get <name> tableinfo" ein. Es können SQL-Wildcard (%) verwendet werden.

            Bespiel:
            attr <name> showTableInfo current,history
            # Es werden nur Information der Tabellen "current" und "history" angezeigt

        • sqlCmdHistoryLength

          Aktiviert mit einem Wert > 0 die Kommandohistorie von "sqlCmd" und legt die Anzahl der zu speichernden SQL Statements fest.
          (default: 0)

        • sqlCmdVars

          Setzt die angegebene(n) SQL Session Variable(n) oder PRAGMA vor jedem mit sqlCmd ausgeführten SQL-Statement.

            Beispiel:
            attr <name> sqlCmdVars SET @open:=NULL, @closed:=NULL;
            attr <name> sqlCmdVars PRAGMA temp_store=MEMORY;PRAGMA synchronous=FULL;PRAGMA journal_mode=WAL;


        • sqlFormatService

          Über einen Online-Dienst kann eine automatisierte Formatierung von SQL-Statements aktiviert werden.
          Diese Möglichkeit ist insbesondere für komplexe SQL-Statements der Setter sqlCmd, sqlCmdHistory und sqlSpecial hilfreich um die Strukturierung und Lesbarkeit zu verbessern.
          Eine Internetverbindung wird benötigt und es sollte das globale Attribut dnsServer gesetzt sein.
          (default: none)

        • sqlResultFieldSep

          Legt den verwendeten Feldseparator im Ergebnis des Kommandos "set ... sqlCmd" fest.
          (default: "|")

        • sqlResultFormat - legt die Formatierung des Ergebnisses des Kommandos "set <name> sqlCmd" fest. Mögliche Optionen sind:

            separated - die Ergebniszeilen werden als einzelne Readings fortlaufend generiert. (default)

            mline - das Ergebnis wird als Mehrzeiler im Reading SqlResult dargestellt.

            sline - das Ergebnis wird als Singleline im Reading SqlResult dargestellt. Satztrenner ist"]|[".

            table - das Ergebnis wird als Tabelle im Reading SqlResult dargestellt.

            json - erzeugt das Reading SqlResult als JSON-kodierten Hash. Jedes Hash-Element (Ergebnissatz) setzt sich aus der laufenden Nummer des Datensatzes (Key) und dessen Wert zusammen.

            Die Weiterverarbeitung des Ergebnisses kann z.B. mit der folgenden userExitFn in 99_myUtils.pm erfolgen:
                    sub resfromjson {
                      my ($name,$reading,$value) = @_;
                      my $hash   = $defs{$name};
            
                      if ($reading eq "SqlResult") {
                        # nur Reading SqlResult enthält JSON-kodierte Daten
                        my $data = decode_json($value);
            
                        foreach my $k (keys(%$data)) {
            
                          # ab hier eigene Verarbeitung für jedes Hash-Element
                          # z.B. Ausgabe jedes Element welches "Cam" enthält
                          my $ke = $data->{$k};
                          if($ke =~ m/Cam/i) {
                            my ($res1,$res2) = split("\\|", $ke);
                            Log3($name, 1, "$name - extract element $k by userExitFn: ".$res1." ".$res2);
                          }
                        }
                      }
                    return;
                    }
                    

        • timeYearPeriod <Monat>-<Tag> <Monat>-<Tag>
          Es wird eine jährliche Periode für die Datenbankselektion bestimmt. Die Jahresperiode wird dynamisch zur Ausführungszeit berechnet. Eine unterjährige Angabe ist nicht möglich.
          Dieses Attribut ist vor allem dazu gedacht Auswertungen synchron zu einer Abrechnungsperiode, z.B. der eines Energie- oder Gaslieferanten, anzufertigen.

            Beispiel:

            attr <name> timeYearPeriod 06-25 06-24

            Wertet die Datenbank in den Zeitgrenzen 25. Juni AAAA bis 24. Juni BBBB aus.
            Das Jahr AAAA bzw. BBBB wird in Abhängigkeit des aktuellen Datums errechnet.
            Ist das aktuelle Datum >= 25. Juni und <= 31. Dezember, dann ist AAAA = aktuelles Jahr und BBBB = aktuelles Jahr+1
            Ist das aktuelle Datum >= 01. Januar und <= 24. Juni, dann ist AAAA = aktuelles Jahr-1 und BBBB = aktuelles Jahr


        • timestamp_begin - der zeitliche Beginn für die Datenselektion
          Das Format von Timestamp ist "YYYY-MM-DD HH:MM:SS". Für die Attribute "timestamp_begin", "timestamp_end" kann ebenso eine der folgenden Eingaben verwendet werden. Dabei wird das timestamp-Attribut dynamisch belegt:

            current_year_begin : entspricht "<aktuelles Jahr>-01-01 00:00:00"
            current_year_end : entspricht "<aktuelles Jahr>-12-31 23:59:59"
            previous_year_begin : entspricht "<vorheriges Jahr>-01-01 00:00:00"
            previous_year_end : entspricht "<vorheriges Jahr>-12-31 23:59:59"
            current_month_begin : entspricht "<aktueller Monat erster Tag> 00:00:00"
            current_month_end : entspricht "<aktueller Monat letzter Tag> 23:59:59"
            previous_month_begin : entspricht "<Vormonat erster Tag> 00:00:00"
            previous_month_end : entspricht "<Vormonat letzter Tag> 23:59:59"
            current_week_begin : entspricht "<erster Tag der akt. Woche> 00:00:00"
            current_week_end : entspricht "<letzter Tag der akt. Woche> 23:59:59"
            previous_week_begin : entspricht "<erster Tag Vorwoche> 00:00:00"
            previous_week_end : entspricht "<letzter Tag Vorwoche> 23:59:59"
            current_day_begin : entspricht "<aktueller Tag> 00:00:00"
            current_day_end : entspricht "<aktueller Tag> 23:59:59"
            previous_day_begin : entspricht "<Vortag> 00:00:00"
            previous_day_end : entspricht "<Vortag> 23:59:59"
            next_day_begin : entspricht "<nächster Tag> 00:00:00"
            next_day_end : entspricht "<nächster Tag> 23:59:59"
            current_hour_begin : entspricht "<aktuelle Stunde>:00:00"
            current_hour_end : entspricht "<aktuelle Stunde>:59:59"
            previous_hour_begin : entspricht "<vorherige Stunde>:00:00"
            previous_hour_end : entspricht "<vorherige Stunde>:59:59"

        • timestamp_end - das zeitliche Ende für die Datenselektion. Wenn nicht gesetzt wird immer die aktuelle Datum/Zeit-Kombi für das Ende der Selektion eingesetzt.
          Das Format von Timestamp ist "YYYY-MM-DD HH:MM:SS". Für die Attribute "timestamp_begin", "timestamp_end" kann ebenso eine der folgenden Eingaben verwendet werden. Dabei wird das timestamp-Attribut dynamisch belegt:

            current_year_begin : entspricht "<aktuelles Jahr>-01-01 00:00:00"
            current_year_end : entspricht "<aktuelles Jahr>-12-31 23:59:59"
            previous_year_begin : entspricht "<vorheriges Jahr>-01-01 00:00:00"
            previous_year_end : entspricht "<vorheriges Jahr>-12-31 23:59:59"
            current_month_begin : entspricht "<aktueller Monat erster Tag> 00:00:00"
            current_month_end : entspricht "<aktueller Monat letzter Tag> 23:59:59"
            previous_month_begin : entspricht "<Vormonat erster Tag> 00:00:00"
            previous_month_end : entspricht "<Vormonat letzter Tag> 23:59:59"
            current_week_begin : entspricht "<erster Tag der akt. Woche> 00:00:00"
            current_week_end : entspricht "<letzter Tag der akt. Woche> 23:59:59"
            previous_week_begin : entspricht "<erster Tag Vorwoche> 00:00:00"
            previous_week_end : entspricht "<letzter Tag Vorwoche> 23:59:59"
            current_day_begin : entspricht "<aktueller Tag> 00:00:00"
            current_day_end : entspricht "<aktueller Tag> 23:59:59"
            previous_day_begin : entspricht "<Vortag> 00:00:00"
            previous_day_end : entspricht "<Vortag> 23:59:59"
            next_day_begin : entspricht "<nächster Tag> 00:00:00"
            next_day_end : entspricht "<nächster Tag> 23:59:59"
            current_hour_begin : entspricht "<aktuelle Stunde>:00:00"
            current_hour_end : entspricht "<aktuelle Stunde>:59:59"
            previous_hour_begin : entspricht "<vorherige Stunde>:00:00"
            previous_hour_end : entspricht "<vorherige Stunde>:59:59"

          Natürlich sollte man immer darauf achten dass "timestamp_begin" < "timestamp_end" ist.

            Beispiel:

            attr <name> timestamp_begin current_year_begin
            attr <name> timestamp_end current_year_end

            # Wertet die Datenbank in den Zeitgrenzen des aktuellen Jahres aus.

          Hinweis
          Wird das Attribut "timeDiffToNow" gesetzt, werden die eventuell gesetzten anderen Zeit-Attribute ("timestamp_begin","timestamp_end","timeYearPeriod") gelöscht. Das Setzen von "timestamp_begin" bzw. "timestamp_end" bedingt die Löschung von anderen Zeit-Attribute falls sie vorher gesetzt waren.

        • timeDiffToNow - der Selektionsbeginn wird auf den Zeitpunkt "<aktuelle Zeit> - <timeDiffToNow>" gesetzt. Die Timestampermittlung erfolgt dynamisch zum Ausführungszeitpunkt. Optional kann mit der Zusatzangabe "FullDay" der Selektionsbeginn und das Selektionsende auf Beginn / Ende der jeweiligen Selektionstage erweitert werden (wirkt nur wenn eingestellte Zeitdifferenz ist >= 1 Tag).

            Eingabeformat Beispiele:
            attr <name> timeDiffToNow 86400
            # die Startzeit wird auf "aktuelle Zeit - 86400 Sekunden" gesetzt
            attr <name> timeDiffToNow d:2 h:3 m:2 s:10
            # die Startzeit wird auf "aktuelle Zeit - 2 Tage 3 Stunden 2 Minuten 10 Sekunden" gesetzt
            attr <name> timeDiffToNow m:600
            # die Startzeit wird auf "aktuelle Zeit - 600 Minuten" gesetzt
            attr <name> timeDiffToNow h:2.5
            # die Startzeit wird auf "aktuelle Zeit - 2,5 Stunden" gesetzt
            attr <name> timeDiffToNow y:1 h:2.5
            # die Startzeit wird auf "aktuelle Zeit - 1 Jahr und 2,5 Stunden" gesetzt
            attr <name> timeDiffToNow y:1.5
            # die Startzeit wird auf "aktuelle Zeit - 1,5 Jahre gesetzt
            attr <name> timeDiffToNow d:8 FullDay
            # die Startzeit wird auf "aktuelle Zeit - 8 Tage gesetzt, der Selektionszeitraum wird auf Beginn / Ende der beteiligten Tage erweitert

          Sind die Attribute "timeDiffToNow" und "timeOlderThan" gleichzeitig gesetzt, wird der Selektionszeitraum zwischen diesen Zeitpunkten dynamisch kalkuliert.

        • timeOlderThan - das Selektionsende wird auf den Zeitpunkt "<aktuelle Zeit> - <timeOlderThan>" gesetzt. Dadurch werden alle Datensätze bis zu dem Zeitpunkt "<aktuelle Zeit> - <timeOlderThan>" berücksichtigt. Die Timestampermittlung erfolgt dynamisch zum Ausführungszeitpunkt. Optional kann mit der Zusatzangabe "FullDay" der Selektionsbeginn und das Selektionsende auf Beginn / Ende der jeweiligen Selektionstage erweitert werden (wirkt nur wenn eingestellte Zeitdifferenz ist >= 1 Tag).

            Eingabeformat Beispiele:
            attr <name> timeOlderThan 86400
            # das Selektionsende wird auf "aktuelle Zeit - 86400 Sekunden" gesetzt
            attr <name> timeOlderThan d:2 h:3 m:2 s:10
            # das Selektionsende wird auf "aktuelle Zeit - 2 Tage 3 Stunden 2 Minuten 10 Sekunden" gesetzt
            attr <name> timeOlderThan m:600
            # das Selektionsende wird auf "aktuelle Zeit - 600 Minuten" gesetzt
            attr <name> timeOlderThan h:2.5
            # das Selektionsende wird auf "aktuelle Zeit - 2,5 Stunden" gesetzt
            attr <name> timeOlderThan y:1 h:2.5
            # das Selektionsende wird auf "aktuelle Zeit - 1 Jahr und 2,5 Stunden" gesetzt
            attr <name> timeOlderThan y:1.5
            # das Selektionsende wird auf "aktuelle Zeit - 1,5 Jahre gesetzt
            attr <name> timeOlderThan d:8 FullDay
            # das Selektionsende wird auf "aktuelle Zeit - 8 Tage gesetzt, der Selektionszeitraum wird auf Beginn / Ende der beteiligten Tage erweitert

          Sind die Attribute "timeDiffToNow" und "timeOlderThan" gleichzeitig gesetzt, wird der Selektionszeitraum zwischen diesen Zeitpunkten dynamisch kalkuliert.

        • timeout - das Attribut setzt den Timeout-Wert für die Blocking-Call Routinen in Sekunden (Default: 86400)

        • useAdminCredentials - Wenn gesetzt, wird ein zuvor mit "set <Name> adminCredentials" gespeicherter privilegierter User für bestimmte Datenbankoperationen verwendet.
          (nur gültig für Datenbanktyp MYSQL und DbRep-Typ "Client")

        • userExitFn - stellt eine Schnittstelle zur Ausführung eigenen Usercodes zur Verfügung.
          Grundsätzlich arbeitet die Schnittstelle ohne Eventgenerierung bzw. benötigt zur Funktion keinen Event. Die Schnittstelle kann mit folgenden Varianten verwendet werden.

            1. Aufruf einer Subroutine, z.B. in 99_myUtils.pm

            Die aufzurufende Subroutine wird in 99_myUtils.pm nach folgendem Muster erstellt:
            sub UserFunction {
              my $name    = shift;             # der Name des DbRep-Devices
              my $reading = shift;             # der Namen des erstellen Readings
              my $value   = shift;             # der Wert des Readings
              my $hash    = $defs{$name};
              ...
              # z.B. übergebene Daten loggen
              Log3 $name, 1, "UserExitFn $name called - transfer parameter are Reading: $reading, Value: $value " ;
              ...
            return;
            }
            
            Im Attribut wird die Subroutine und optional ein Reading:Value Regex als Argument angegeben. Ohne diese Angabe werden alle Wertekombinationen als "wahr" gewertet und an die Subroutine übergeben (entspricht .*:.*).

              Beispiel:
              attr userExitFn UserFunction Meter:Energy.*
              # "UserFunction" ist die Subroutine in 99_myUtils.pm.

            Die Regexprüfung nach der Erstellung jedes Readings. Ist die Prüfung wahr, wird die angegebene Funktion aufgerufen.

            2. direkte Eingabe von eigenem Code

            Der eigene Code wird in geschweifte Klammern eingeschlossen. Der Aufruf des Codes erfolgt nach der Erstellung jedes Readings. Im Code stehen folgende Variablen für eine Auswertung zur Verfügung:

            • $NAME - der Name des DbRep-Devices
            • $READING - der Namen des erstellen Readings
            • $VALUE - der Wert des Readings

              Beispiel:
              {
                if ($READING =~ /PrEnergySumHwc1_0_value__DIFF/) {
                  my $mpk  = AttrVal($NAME, 'Multiplikator', '0');
                  my $tarf = AttrVal($NAME, 'Tarif', '0');                                   # Kosten €/kWh
                  my $m3   = sprintf "%.3f", $VALUE/10000 * $mpk;                            # verbrauchte m3
                  my $kwh  = sprintf "%.3f", $m3 * AttrVal($NAME, 'Brennwert_kWh/m3', '0');  # Umrechnung m3 -> kWh
                  my $cost = sprintf "%.2f", $kwh * $tarf;
              
                  my $hash = $defs{$NAME};
              
                  readingsBulkUpdate ($hash, 'gas_consumption_m3',   $m3);
                  readingsBulkUpdate ($hash, 'gas_consumption_kwh', $kwh);
                  readingsBulkUpdate ($hash, 'gas_costs_euro',     $cost);
                }
              }
              
              # Es werden die Readings gas_consumption_m3, gas_consumption_kwh und gas_costs_euro berechnet und im DbRep-Device erzeugt.


        • valueFilter - Regulärer Ausdruck (REGEXP) zur Filterung von Datensätzen innerhalb bestimmter Funktionen. Der REGEXP wird auf ein bestimmtes Feld oder den gesamten selektierten Datensatz (inkl. Device, Reading usw.) angewendet. Bitte beachten sie die Erläuterungen zu den entsprechenden Set-Kommandos. Weitere Informationen sind mit "get <name> versionNotes 4" verfügbar.

    Readings
      Abhängig von der ausgeführten DB-Operation werden die Ergebnisse in entsprechenden Readings dargestellt. Zu Beginn einer neuen Operation werden alle alten Readings einer vorangegangenen Operation gelöscht um den Verbleib unpassender bzw. ungültiger Readings zu vermeiden.

      Zusätzlich werden folgende Readings erzeugt (Auswahl):

        • state - enthält den aktuellen Status der Auswertung. Wenn Warnungen auftraten (state = Warning) vergleiche Readings "diff_overrun_limit_<diffLimit>" und "less_data_in_period"

        • errortext - Grund eines Fehlerstatus

        • background_processing_time - die gesamte Prozesszeit die im Hintergrund/Blockingcall verbraucht wird

        • diff_overrun_limit_<diffLimit> - enthält eine Liste der Wertepaare die eine durch das Attribut "diffAccept" festgelegte Differenz <diffLimit> (Standard: 20) überschreiten. Gilt für Funktion "diffValue".

        • less_data_in_period - enthält eine Liste der Zeitperioden in denen nur ein einziger Datensatz gefunden wurde. Die Differenzberechnung berücksichtigt den letzten Wert der Vorperiode. Gilt für Funktion "diffValue".

        • sql_processing_time - der Anteil der Prozesszeit die für alle SQL-Statements der ausgeführten Operation verbraucht wird

        • SqlResult - Ergebnis des letzten sqlCmd-Kommandos. Die Formatierung erfolgt entsprechend des sqlResultFormat Attributes

        • sqlCmd - das letzte ausgeführte sqlCmd-Kommando


    DbRep Agent - automatisches Ändern von Device-Namen in Datenbanken und DbRep-Definitionen nach FHEM "rename" Kommando
      Mit dem Attribut "role" wird die Rolle des DbRep-Device festgelegt. Die Standardrolle ist "Client". Mit der Änderung der Rolle in "Agent" wird das Device veranlasst auf Umbenennungen von Geräten in der FHEM Installation zu reagieren.

      Durch den DbRep-Agenten werden folgende Features aktiviert wenn ein Gerät in FHEM mit "rename" umbenannt wird:

        • in der dem DbRep-Agenten zugeordneten Datenbank (Internal Database) wird nach Datensätzen mit dem alten Gerätenamen gesucht und dieser Gerätename in allen betroffenen Datensätzen in den neuen Namen geändert.

        • in dem DbRep-Agenten zugeordneten DbLog-Device wird in der Definition das alte durch das umbenannte Device ersetzt. Dadurch erfolgt ein weiteres Logging des umbenannten Device in der Datenbank.

        • in den existierenden DbRep-Definitionen vom Typ "Client" wird ein evtl. gesetztes Attribut "device = alter Devicename" in "device = neuer Devicename" geändert. Dadurch werden Auswertungsdefinitionen bei Geräteumbenennungen automatisch konstistent gehalten.

      Mit der Änderung in einen Agenten sind folgende Restriktionen verbunden die mit dem Setzen des Attributes "role = Agent" eingeschaltet und geprüft werden:

        • es kann nur einen Agenten pro Datenbank in der FHEM-Installation geben. Ist mehr als eine Datenbank mit DbLog definiert, können ebenso viele DbRep-Agenten eingerichtet werden

        • mit der Umwandlung in einen Agenten wird nur noch das Set-Komando "renameDevice" verfügbar sein sowie nur ein eingeschränkter Satz von DbRep-spezifischen Attributen zugelassen. Wird ein DbRep-Device vom bisherigen Typ "Client" in einen Agenten geändert, werden evtl. gesetzte und nun nicht mehr zugelassene Attribute glöscht.

      Die Aktivitäten wie Datenbankänderungen bzw. Änderungen an anderen DbRep-Definitionen werden im Logfile mit verbose=3 protokolliert. Damit die renameDevice-Funktion bei großen Datenbanken nicht in ein timeout läuft, sollte das Attribut "timeout" entsprechend dimensioniert werden. Wie alle Datenbankoperationen des Moduls wird auch das Autorename nonblocking ausgeführt.

        Beispiel für die Definition eines DbRep-Device als Agent:

        define Rep.Agent DbRep LogDB
        attr Rep.Agent devStateIcon connected:10px-kreis-gelb .*disconnect:10px-kreis-rot .*done:10px-kreis-gruen
        attr Rep.Agent icon security
        attr Rep.Agent role Agent
        attr Rep.Agent room DbLog
        attr Rep.Agent showproctime 1
        attr Rep.Agent stateFormat { ReadingsVal($name, 'state', '') eq 'running' ? 'renaming' : ReadingsVal($name, 'state', ''). ' »; ProcTime: '.ReadingsVal($name, 'sql_processing_time', '').' sec'}
        attr Rep.Agent timeout 86400

      Hinweis:
      Obwohl die Funktion selbst non-blocking ausgelegt ist, sollte das zugeordnete DbLog-Device im asynchronen Modus betrieben werden um ein Blockieren von FHEMWEB zu vermeiden (Tabellen-Lock).

    DoorBird

    [EN DE]
      Das DoorBird Modul ermöglicht die Komminikation zwischen der DoorBird Interkommunikationseinheit und dem fhem Automationssystem basierend auf der API des Herstellers her.
      Für den vollen Funktionsumfang muss sichergestellt werden, dass das Setting "API-Operator" in der DoorBird Android/iPhone - APP unter "Administration -> User -> Edit -> Permission -> API-Operator" gesetzt ist. Die folgenden Software - Pakete müssen noch zusätzlich installiert werden, sofern dies nicht schon durch andere Module erfolgt ist. (Die Beispiele sind auf dem Raspberry JESSIE gestestet):

    • sudo apt-get install sox
    • sudo apt-get install libsox-fmt-all
    • sudo apt-get install libsodium-dev
    • sudo apt-get install gstreamer1.0-tools
    • sudo cpan Crypt::Argon2
    • sudo cpan Alien::Base::ModuleBuild
    • sudo cpan Alien::Sodium
    • sudo cpan Crypt::NaCl::Sodium

    • Define
        define <name> DoorBird <IPv4-address> <Username> <Passwort>
          <name> :
      Der Name des Device unter fhem. Beispiel: "myDoorBird".
          <IPv4-Addresse> :
      Eine gültige IPv4 - Addresse der DoorBird-Anlage. Ggf. muss man im Router nach der entsprechenden DHCP Addresse suchen, die der DoorBird Anlage vergeben wurde.
          <Username> :
      Der Username zum einloggen auf der DoorBird Anlage.
          <Passwort> :
      Das Passwort zum einloggen auf der DoorBird Anlage.

      Set
        Die Set - Funktion ist in der lage auf der DoorBird - Anlage die folgenden Einstellungen vorzunehmen bzw. zu de-/aktivieren:
      • set Light_On : Schaltet das IR lichht der DoorBird Anlage ein. Das IR Licht schaltet sich automatisch nach der in der DoorBird - Anlage vorgegebenen Default Zeit wieder aus.
      • set Live_Audio <on:off> : Aktiviert/Deaktiviert den Live Audio Stream der DoorBird - Anlage Ein oder Aus und wechselt den direkten link in dem versteckten Reading .AudioURL.
      • set Live_Video <on:off> : Aktiviert/Deaktiviert den Live Video Stream der DoorBird - Anlage Ein oder Aus und wechselt den direkten link in dem versteckten Reading .VideoURL.
      • set Open_Door <Value> : Aktiviert das Relais der DoorBird - Anlage mit dessen Adresse. Die Liste der installierten Relais werden mit der Initialisierung der Parameter importiert.
      • set Restart : Sendet das Kommando zum rebooten der DoorBird - Anlage.
      • set Transmit_Audio <Path> : Konvertiert die angegebene Audio-Datei und sendet diese zur Ausgabe an die DoorBird - Anlage. Es benötigt einen Dateipfad zu der Audio-Datei zu dem der User "fhem" Schreibrechte braucht (z.B.: /opt/fhem/audio).

      Get
        Die Get - Funktion ist in der lage von der DoorBird - Anlage die folgenden Informationen und Daten zu laden:
      • get History_Request : Lädt die Bilder der letzten Ereignisse durch die Türklingel und dem Bewegungssensor herunter. (Siehe auch Attribut MaxHistory)
      • get Image_Request : Lädt das gegenwärtige Bild der DoorBird - Kamera herunter.
      • get Video_Request <Value> : Lädt das gegenwärtige Video der DoorBird - Kamera für die gegebene Zeit in Sekunden herunter.
      • get Info_Request : Lädt das interne Setup (Firmware Version, Relais Konfiguration etc.) herunter. Die übermittelten Relais-Adressen werden als Option für das Kommando Open_Door verwendet.

      Attributes
        Die folgenden Attribute können mit dem DoorBird Module neben den globalen Attributen wie room verwednet werden.
        • disable : Stoppt das Gerät von weiteren Reaktionen auf die von der DoorBird ß Anlage ausgesendeten UDP - Datageramme
          Der Default Wert ist 0 = aktiviert
        • KeepAliveTimeout : Timeout in Sekunden ohne "still-alive" - UDP Datagramme bevor der Status des Gerätes auf "disconnected" gesetzt wird.
          Der Default Wert ist 30s
        • MaxHistory : Anzahl der herunterzuladenden Bilder aus dem Historien-Archiv sowohl für Ereignisse seitens der Türklingel als auch für den Bewegungssensor.
          Der Default Wert ist "50" = Maximum.
        • PollingTimeout : Timeout in Sekunden before der Download-Versuch aufgrund fehlender Antwort seitens der DoorBird-Anlage terminiert wird. Eine Adjustierung mag notwendig sein, sobald Netzwerk-Latenzen aufteten.
          Der Default-Wert ist 10s.
        • UdpPort : Port Nummer auf welcher das DoorBird - Modul nach den UDP Datagrammen der DoorBird - Anlage hören soll. Die Ports sind von der Firmware vorgegeben.
          Der Default Port ist 6524
        • SessionIdSec : Zeit in Sekunden nach welcher die Session Id erneuert werden soll. Diese ist für die sichere Übertragung der Video und Audio Verbindungsdaten notwendig. Die DoorBird-Unit devalidiert die Session Id automatisch nach 10min. Für den Fall, dass die DoorBird Kamera an ein Überwachungssystem angebunden werden soll, muss diese Funktion ausser Betrieb genommen werden indem man den Wert auf 0 setzt 0.
          Der Default Wert ist 540s = 9min.
        • AudioFileDir : Der relative (z.B. "audio") oder absolute (z.B. "/mnt/NAS/audio") Verzeichnispfad mit oder ohne nachfolgendem Pfadzeichen "/" in welchen die Audio-Dateien abgelegt sind.
          Der Default Wert ist "" = deaktiviert
        • AudioFileDirMaxSize : Die maximale Größe des Unterverzeichnisses für die Audio-Dateien in Megabyte (MB). Beim Erreichen dieses Wertes, werden die ältesten Dateien automatisch gelöscht.
          Der Default Wert ist 50 = 50MB
        • ImageFileDir : Der relative (z.B. "images") oderr absolute (z.B. "/mnt/NAS/images") Verzeichnispfad mit oder ohne nachfolgendem Pfadzeichen "/" in welchen die Video-Dateien gespeichert werden sollen.
          Der Default Wert ist "" = deaktiviert
        • ImageFileDirMaxSize : Die maximale Größe des Unterverzeichnisses für die Image-Dateien in Megabyte (MB). Beim Erreichen dieses Wertes, werden die ältesten Dateien automatisch gelöscht.
          Der Default Wert ist 50 = 50MB
        • VideoFileDir : Der relative (z.B. "images") oder absolute (z.B. "/mnt/NAS/images") Verzeichnispfad mit oder ohne nachfolgendem Pfadzeichen "/" in welchen die Bild-Dateien gespeichert werden sollen.
          Der Default Wert ist "" = deaktiviert
        • VideoFileDirMaxSize : Die maximale Größe des Unterverzeichnisses für die Video-Dateien in Megabyte (MB). Beim Erreichen dieses Wertes, werden die ältesten Dateien automatisch gelöscht.
          Der Default Wert ist 50 = 50MB
        • VideoFileFormat : Das Dateiformat für die Videodatei
          Der Default Wert ist "mpeg"
        • VideoDurationDoorbell : Zeit in Sekunden für wie lange das Video im Falle eines Klingel Events aufgenommen werden soll.
          Der Default Wert ist 0 = deaktiviert
        • VideoDurationMotion : Zeit in Sekunden für wie lange das Video im Falle eines Bewegungssensor Events aufgenommen werden soll.
          Der Default Wert ist 0 = deaktiviert
        • EventReset : Zeit in Sekunden nach welcher die Readings für die Events (z.B. "doorbell_button", "motions sensor", "keypad")wieder auf "idle" gesetzt werden sollen.
          Der Default Wert ist 5s
        • WaitForHistory : Zeit in Sekunden die das Modul auf das Bereitstellen eines korrespondierenden History Bildes zu einem Event warten soll. Muss ggf. adjustiert werden, sobald deutliche Unterschiede in der Systemzeit zwischen fhemßServer und DoorBird Station vorliegen.
          Der Default Wert ist 7s
        • OpsModeList : Eine durch Leerzeichen getrennte Liste von Namen für Operationszustände (e.g. "Normal Party Feuer" auf diese der DoorBird automatisch bei Events reagiert.
          Der Default Wert ist "" = deaktiviert
        • HistoryFilePath : Erstellt Dateipfade zu den letzten Bildern und Videos um sie in den User Interfaces direkt anzuzeigen (e.g. fhem ftui Widget "Image")
          Der Default Wert ist "0" = disabled

    Dooya

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: Dooya

    EC3000

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: EC3000

    ECMD

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: ECMD

    ECMDDevice

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: ECMDDevice

    EGPM Steckdose

    [EN DE]
      Definiert eine einzelne Netzwerk-Steckdose vom EGPM2LAN. Diese Definition wird beim Einrichten eines EGPM2LAN automatisch erstellt, wenn das globale FHEM-Attribut AUTOCREATE aktiviert wurde. Für weitere Informationen, siehe Beschreibung von EGPM2LAN.

      Define
        define <name> EGPM <device> <socket-nr>

      Set
        set <name> <[on|off|toggle]>
        Schaltet die Steckdose ein oder aus.
        set <name> <[on-for-timer|off-for-timer|on-till|off-till|blink|intervals]>
        Schaltet die Steckdose fü einen bestimmten Zeitraum oder mehrfach hintereinander. Weitere Infos hierzu unter set extensions.

      Beispiel:
        define lampe1 EGPM steckdose 1
        set lampe1 on

      Get
        N/A

      Attributes
      • readingFnAttributes

      Generated events
      • EGPM <name> <[on|off]>

    EGPM2LAN

    [EN DE]

      Define
        define <name> EGPM2LAN <IP-Address>

        Das Modul erstellt eine Verbindung zu einer Gembird ® Energenie EG-PM2-LAN Steckdosenleiste und steuert 4 angeschlossene Geräte.. Falls mehrere Steckdosenleisten über das Netzwerk gesteuert werden, ist es ratsam, diese zuerst über die Web-Oberfläche zu konfigurieren und die einzelnen Steckdosen zu benennen. Die Namen werden dann automatisch in die Oberfläche von FHEM übernommen. Bitte darauf achten, die Weboberfläche mit Logoff wieder zu verlassen, da der Zugriff sonst blockiert wird.

      Set
        set <name> <[on|off|toggle]> <socketnr.>
        Schaltet die gewählte Steckdose ein oder aus.

        set <name> <[on|off]> <all>
        Schaltet alle Steckdosen gleichzeitig ein oder aus.

        set <name> password [<mein-passwort>]
        Speichert das Passwort verschlüsselt in FHEM ab. Zum Entfernen eines vorhandenen Passworts den Befehl ohne Parameter aufrufen.
        Vor 04/2017 wurde das Passwort im Klartext gespeichert und mit dem DEFINE-Command übergeben.

        set <name> <staterequest>
        Aktualisiert die Statusinformation der Steckdosenleiste.
        Wenn das globale Attribut autocreate aktiviert ist, wird für jede Steckdose ein EGPM-Eintrag erstellt.

        set <name> <clearreadings>
        Löscht alle ungültigen Einträge im Abschnitt <readings>.

      Get
        get <name> state
        Gibt einen Text in diesem Format aus: "1: off 2: on 3: off 4: off" oder enthält die letzte Fehlermeldung.

      Attribute
      • stateDisplay
      • Default: socketNumer wechselt zwischen socketNumer and socketName für jeden Statuseintrag. Verwende set statusrequest, um die Anzeige zu aktualisieren.
      • autocreate
      • Default: on EGPM-Einträge werden automatisch mit dem set-command erstellt.
      • loglevel
      • readingFnAttributes



      Beispiel:
        define sleiste EGPM2LAN 10.192.192.20
        set sleiste password SecretGarden
        set sleiste on 1

    EM

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: EM

    EMEM

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: EMEM

    EMGZ

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: EMGZ

    EMT7110

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: EMT7110

    EMWZ

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: EMWZ

    ENECSYSGW

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: ENECSYSGW

    ENECSYSINV

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: ENECSYSINV

    ENIGMA2

    [EN DE]
      Eine deutsche Version der Dokumentation ist derzeit nicht vorhanden. Die englische Version ist hier zu finden:
      ENIGMA2

    EQ3BT

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: EQ3BT

    ESA2000

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: ESA2000

    ESCVP21net

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: ESCVP21net

    ESPEInk

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: ESPEInk

    ESPEasy

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: ESPEasy

    ElectricityCalculator

    [EN DE]
      Das ElectricityCalculator Modul berechnet den Verbrauch an elektrischer Energie (Stromverbrauch) und den verbundenen Kosten von einem oder mehreren Elektrizitätszählern.
      Es ist kein eigenes Zählermodul sondern benötigt eine Regular Expression (regex or regexp) um das Reading mit dem kontinuierlich wachsenden Zählerstand von einem oder mehreren Electrizitätszählern zu finden.

      Sobald das Modul in der fhem.cfg definiert wurde, reagiert das Modul auf jedes durch das regex definierte event wie beispielsweise ein myOWDEVICE:counter.* etc.

      Das ElectricityCalculator Modul berechnet augenblickliche, historische statistische und vorhersehbare Werte von einem oder mehreren Elektrizitätszählern und erstellt die entsprechenden Readings.

      Um zu verhindern, dass man bis zu 12 Monate warten muss, bis alle Werte der Realität entsprechen, müssen die Readings
      <DestinationDevice>_<SourceCounterReading>_CounterDay1st,
      <DestinationDevice>_<SourceCounterReading>_CounterMonth1st,
      <DestinationDevice>_<SourceCounterReading>_CounterYear1st und
      <DestinationDevice>_<SourceCounterReading>_CounterMeter1st
      entsprechend mit dem setreading - Befehl korrigiert werden.
      Diese Werte findet man unter Umständen auf der letzten Abrechnung des Elektrizitätsversorgers. Andernfalls dauert es bis zu 24h für die täglichen, 30 Tage für die monatlichen und bis zu 12 Monate für die jährlichen Werte bis diese der Realität entsprechen.


      Intervalle kleienr als 10s werden ignoriert um Spitzen zu verhindern die von Blockaden des fhem Systems hervorgerufen werden (z.B. DbLog - reducelog).

      Define
        define <name> ElectricityCalculator <regex>
          <name> :
      Der Name dieses Berechnungs-Device. Empfehlung: "myElectricityCalculator".
          <regex> :
      Eine gültige Regular Expression (regex or regexp) von dem Event wo der Zählerstand gefunden werden kann.
        Beispiel: define myElectricityCalculator ElectricityCalculator myElectricityCounter:countersA.*

      Set
        Die set - Funktion erlaubt individuelle Readings zu verändern um beispielsweise nach einem Stromausfall Werte zu korrigieren.
        Die set - Funktion funktioniert für Readings welche im CalculatorDevice gespeichert wurden und zum update des Offsets zwischen den Zählern.
        Die Readings welche im Counter - Device gespeichert wurden, müssen individuell mit set - Befehl gesetzt werden.
        Der Befehl "SyncCounter" errechnet und update den Offset. Hierbei einfach den Wert des mechanischen Zählers eingeben.

      Get
        Die get - Funktion liefert nur den Wert des jeweiligen Readings zurück.
        Die get - Funktion funktioniert nur für Readings welche im CalculatorDevice gespeichert wurden.
        Die Readings welche im Counter - Device gespeichert wurden, müssen individuell mit get - Befehl ausgelesen werden.

      Attributes
        Sollten die unten ausfeg&auuml;hrten Attribute bei der Definition eines entsprechenden Gerätes nicht gesetzt sein, so werden sie vom Modul mit Standard Werten automatisch gesetzt
        Zusätzlich können die globalen Attribute wie room verwendet werden.
        • BasicPricePerAnnum : Eine gültige float Zahl für die jährliche Grundgebühr in der gewählten Währung für die Elektrizitäts-Versorgung zum Endverbraucher.
          Dieser Wert stammt vom Elektrizitätsversorger und steht auf der Abrechnung.
          Der Standard Wert ist 0.00.
        • Currency : Eines der vordefinerten Währungssymbole: [€,£,$].
          Der Standard Wert ist €
        • disable : Deaktiviert das device. Das Modul wird nicht mehr auf die Events reagieren die durch die Regular Expression definiert wurde.
          Der Standard Wert ist 0 = aktiviert.
        • ElectricityCounterOffset : Eine gültige float-Zahl für den Unterschied = Offset (Nicht der Unterschied zwischen Zählimpulsen) zwischen dem am mechanischen Elektrizitätszählern und dem angezeigten Wert im Reading dieses Device.
          Der Offset-Wert wird wie folgt ermittelt: WOffset = WMechanisch - WModule
          Der Standard-Wert ist 0.00.
        • ElectricityKwhPerCounts : Eine gültige float-Zahl für die Menge kWh pro Zählimpulsen.
          Der Wert ist durch das mechanische Zählwerk des Elektrizitätszählern vorgegeben. ElectricityKwhPerCounts = 0.001 bedeutet, dass jeder Zählimpuls ein Tausendstel einer kWh ist (=Wh).
          Einige elektronische Zähler (Bsp.: HomeMatic HM-ES-TX-WM) stellen die gezählte Menge an elektrischer Energie als Wh bereit.
          Aus diesem Grund muss dieses Attribut auf 0.001 gesetzt werden um eine korrekte Transformation in kWh zu ermöglichen.
          Der Standard-Wert ist 1.
        • ElectricityPricePerKWh : Eine gültige float-Zahl für den Preis pro kWh.
          Dieser Wert stammt vom Elektrizitätsversorger und steht auf der Abrechnung.
          Der Standard-Wert ist 0.2567.
        • MonthlyPayment : Eine gültige float-Zahl für die monatlichen Abschlagszahlungen in der gewählten Währung an den Elektrizitätsversorger.
          Der Standard-Wert ist 0.00.
        • MonthOfAnnualReading : Eine gültige Ganz-Zahl für den Monat wenn der mechanische Elektrizitätszähler jedes Jahr durch den Elektrizitätsversorger abgelesen wird.
          Der Standard-Wert ist 5 (Mai)
        • ReadingDestination : Eines der vordefinerten Device als Ziel der errechneten Readings: [CalculatorDevice,CounterDevice].
          Das CalculatorDevice ist das mit diesem Modul erstellte Device.
          Das CounterDevice ist das Device von welchem der mechanische Zähler ausgelesen wird.
          Der Standard-Wert ist CalculatorDevice.
        • SiPrefixPower : Ein Wert der vorgegebenen Auswahlliste: W (Watt), kW (Kilowatt), MW (Megawatt) or GW (Gigawatt).
          Es definiert welcher SI-Prefix verwendet werden soll und teilt die Leistung entsprechend durch ein Vielfaches von 1000.
          Der Standard-Wert ist W (Watt).
        • DecimalPlace : Ein Wert der vorgegebenen Auswahlliste von 3 bis 7.
          Es definiert die Genauigkeit in Nachkommastellen mit welcher die Ergebnisse berechnet werden.Der Standard-Wert ist 3 = 0,001.

      Readings
        Sobald das Device in der Lage war mindestens 2 Werte des Zählers einzulesen, werden automatisch die entsprechenden Readings erzeugt:
        Der Platzhalter <DestinationDevice> steht für das Device, welches man in dem Attribut ReadingDestination oben festgelegt hat. Dieser Platzhalter bleibt leer, sobald man dort CalculatorDevice ausgewählt hat.
        Der Platzhalter <SourceCounterReading> steht für das Reading welches mit der Regular Expression definiert wurde.
        • <DestinationDevice>_<SourceCounterReading>_CounterCurrent
      : Aktueller Zählerstand am mechanischen Zähler. Bei Unterschied muss das Offset-Attribut entspechend korrigiert werden.
        • <DestinationDevice>_<SourceCounterReading>_CounterDay1st
      : Der erste Zählerstand des laufenden Tages seit Mitternacht.
        • <DestinationDevice>_<SourceCounterReading>_CounterDayLast
      : Der letzte Zählerstand des vorherigen Tages.
        • <DestinationDevice>_<SourceCounterReading>_CounterMeter1st
      : Der erste Zählerstand seit Mitternacht des ersten Tages der laufenden Ableseperiode.
        • <DestinationDevice>_<SourceCounterReading>_CounterMeterLast
      : Der letzte Zählerstand seit Mitternacht des ersten Tages der vorherigen Ableseperiode.
        • <DestinationDevice>_<SourceCounterReading>_CounterMonth1st
      : Der erste Zählerstand seit Mitternacht des ersten Tages des laufenden Monats.
        • <DestinationDevice>_<SourceCounterReading>_CounterMonthLast
      : Der letzte Zählerstand des vorherigen Monats.
        • <DestinationDevice>_<SourceCounterReading>_CounterYear1st
      : Der erste Zählerstand seit Mitternacht des ersten Tages des laufenden Jahres.
        • <DestinationDevice>_<SourceCounterReading>_CounterYearLast
      : Der letzte Zählerstand des letzten Jahres.
        • <DestinationDevice>_<SourceCounterReading>_EnergyCostDayLast
      : Elektrische Energiekosten des letzten Tages.
        • <DestinationDevice>_<SourceCounterReading>_EnergyCostMeterLast
      : Elektrische Energiekosten der letzten Ableseperiode.
        • <DestinationDevice>_<SourceCounterReading>_EnergyCostMonthLast
      : Elektrische Energiekosten des letzten Monats.
        • <DestinationDevice>_<SourceCounterReading>_EnergyCostYearLast
      : Elektrische Energiekosten des letzten Kalenderjahres.
        • <DestinationDevice>_<SourceCounterReading>_EnergyCostDay
      : Energiekosten in gewählter Währung seit Mitternacht des laufenden Tages.
        • <DestinationDevice>_<SourceCounterReading>_EnergyCostMeter
      : Energiekosten in gewählter Währung seit Beginn der laufenden Ableseperiode.
        • <DestinationDevice>_<SourceCounterReading>_EnergyCostMonth
      : Energiekosten in gewählter Währung seit Beginn des laufenden Monats.
        • <DestinationDevice>_<SourceCounterReading>_EnergyCostYear
      : Energiekosten in gewählter Währung seit Beginn des laufenden Kalenderjahres.
        • <DestinationDevice>_<SourceCounterReading>_EnergyDay
      : Energieverbrauch seit Beginn der aktuellen Tages (Mitternacht).
        • <DestinationDevice>_<SourceCounterReading>_EnergyDayLast
      : Energieverbrauch in kWh des vorherigen Tages.
        • <DestinationDevice>_<SourceCounterReading>_EnergyMeter
      : Energieverbrauch seit Beginn der aktuellen Ableseperiode.
        • <DestinationDevice>_<SourceCounterReading>_EnergyMeterLast
      : Energieverbrauch in kWh der vorherigen Ableseperiode.
        • <DestinationDevice>_<SourceCounterReading>_EnergyMonth
      : Energieverbrauch seit Beginn des aktuellen Monats.
        • <DestinationDevice>_<SourceCounterReading>_EnergyMonthLast
      : Energieverbrauch in kWh des vorherigen Monats.
        • <DestinationDevice>_<SourceCounterReading>_EnergyYear
      : Energieverbrauch seit Beginn des aktuellen Kalenderjahres.
        • <DestinationDevice>_<SourceCounterReading>_EnergyYearLast
      : Energieverbrauch in kWh des vorherigen Kalenderjahres.
        • <DestinationDevice>_<SourceCounterReading>_FinanceReserve
      : Finanzielle Reserve basierend auf den Abschlagszahlungen die jeden Monat an den Elektrizitätsversorger gezahlt werden. Bei negativen Werten ist von einer Nachzahlung auszugehen.
        • <DestinationDevice>_<SourceCounterReading>_MonthMeterReading
      : Anzahl der Monate seit der letzten Zählerablesung. Der Monat der Zählerablesung ist der erste Monat = 1.
        • <DestinationDevice>_<SourceCounterReading>_PowerCurrent
      : Aktuelle elektrische Leistung. (Mittelwert zwischen aktueller und letzter Messung)

        • <DestinationDevice>_<SourceCounterReading>_PowerDayAver
      : Mittlere elektrische Leistung seit Mitternacht.
        • <DestinationDevice>_<SourceCounterReading>_PowerDayMax
      : Maximale elektrische Leistungsaufnahme seit Mitternacht.
        • <DestinationDevice>_<SourceCounterReading>_PowerDayMin
      : Minimale elektrische Leistungsaufnahme seit Mitternacht.

    EleroDrive

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: EleroDrive

    EleroStick

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: EleroStick

    EleroSwitch

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: EleroSwitch

    ElsnerWS

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: ElsnerWS

    EnOcean

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: EnOcean

    EseraAnalogInOut

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: EseraAnalogInOut

    EseraCount

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: EseraCount

    EseraDigitalInOut

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: EseraDigitalInOut

    EseraDimmer

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: EseraDimmer

    EseraIButton

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: EseraIButton

    EseraMulti

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: EseraMulti

    EseraOneWire

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: EseraOneWire

    EseraShutter

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: EseraShutter

    EseraTemp

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: EseraTemp

    FBAHA

    [EN DE]

      Achtung: ab Fritz!OS 6.90 ist der benötigte Dienst deaktiviert, bitte den Nachfolger FBAHAHTTP verwenden.
      Dieses Modul verbindet sich mit dem AHA (AVM Home Automation) Server auf einem FRITZ!Box. Es dient als "physikalisches" Gegenstück zum FBDECT Modul. Als erstes muss der Zugang zu diesen Daten in der FRITZ!Box Web-Oberfläche aktiviert werden.

      Define
        define <name> FBAHA <device>

        <host> ist normalerweise die Adresse der FRITZ!Box, wo das AHA Server läuft (fritz.box oder localhost), <port> ist 2002. <device> is entweder a eine Kombianation aus <host>:<port>, wobei <host> die Adresse der FRITZ!Box ist (localhost AUF dem FRITZ.BOX) und <port> 2002 ist, oder UNIX:SEQPACKET:/var/tmp/me_avm_home_external.ctl, wobei das nur fuer FHEM@FRITZ!BOX zur Verfügung steht. Mit FRITZ!OS 5.50 steht auch der Netzwerkport zur Verfügung, auf manchen Laborvarianten nur das UNIX socket.
        Beispiel:
          define fb1 FBAHA fritz.box:2002
          define fb1 FBAHA UNIX:SEQPACKET:/var/tmp/me_avm_home_external.ctl

      Set
      • createDevs
        legt FHEM Geräte an für jedes auf dem AHA-Server gefundenen DECT Eintrag, siehe auch "get devList".
      • reopen
        Schließt und öffnet die Verbindung zum AHA Server. Nur für debugging.
      • reregister
        Gibt den AHA handle frei, und registriert sich erneut beim AHA Server. Nur für debugging.

      Get
      • devList
        liefert die Liste aller DECT-Einträge der AHA Server zurück, mit einem kurzen Info.

      Attributes
      • dummy

      Generierte Events:
      • UNDEFINED FBDECT_$ahaName_${NR} FBDECT $id"

      Da manchmal die FRITZ!Box die interne Nummer der FBDECT Geräte neu vergibt, werden beim Verbindungsaufbau zum AHA Server die gespeicherten Namen (FBNAME) mit dem aktuellen Wert verglichen. Damit das funktioniert, müssen alle FBDECT Geräte auf dem FRITZ!Box einen eindeutigen Namen bekommen, und in FHEM muss für alle Geräte "get FBDECTDEVICE devInfo" ausgeführt werden, um FBNAME als Reading zu speichern.

    FBAHAHTTP

      Leider keine deutsche Dokumentation vorhanden. Die englische Version gibt es hier: FBAHAHTTP

    FBDECT

    [EN DE]
      Dieses Modul wird verwendet, um AVM FRITZ!DECT Geräte via FHEM zu steuern, siehe auch das FBAHA oder FBAHAHTTP Modul für die Anbindung an das FRITZ!Box.

      Define
        define <name> FBDECT [<FBAHAname>:]<id> props

        Beispiel:
          define lampe FBDECT 16 switch,powerMeter
        Achtung:FBDECT Einträge werden normalerweise per autocreate angelegt. Falls sie die zugeordnete FBAHA oder FBAHAHTTP Instanz umbenennen, dann muss die FBDECT Definition manuell angepasst werden.


      Set
      • on/off
        Gerät einschalten bzw. ausschalten.
      • desired-temp <value>
        Gewünschte Temperatur beim Comet DECT setzen. 7.5 entspricht aus, 28.5 bedeutet an.
      • boost <Dauer>
        Versetzt den Comet/Fritz DECT 301 in boost Modus für Dauer in Sekunden. 0 deaktiviert den boost Modus.
      • windowopen <Dauer>
        Versetzt den Comet/Fritz DECT 301 in windowopen Modus für Dauer in Sekunden. 0 deaktiviert den windowopen Modus.
      • dim <value>
        Helligkeit oder Rolladenstand (zwischen 0 und 100, in Prozent) setzen.
      • open/close/stop
        Rollade öffnen, schließen oder stoppen.
      • Die set extensions werden unterstützt.
      • msgInterval <sec>
        Anzahl der Sekunden zwischen den Sensornachrichten (nur mit FBAHA als IODev).
      • color <colorname>
        Farbname für Farbbirnen: rot, orange, gelb, grassgrün, grün, türkis, cyan, himmelblau, blau, violett, magenta, rosa . Wenn die Glühbirne im "white" Modus war, wechselt sie in den Modus "color"
      • colortemperature <Temperatur>
        Farbtemperatur in Kelvin wenn > 2000 sonst mireds. Da die Fritzbox nur vordefinierte Werte unterstützt, wird sie auf den nächstliegenden unterstützten Wert in Kelvin zurückgesetzt (um die unterstützte Werte zu kennen, set <devicename> raw getcolordefaults ausführen). Wenn die Glühbirne im "color" Modus war, wechselt sie in den Modus "white", ausser wenn die in mireds eingegebene Temperatur zu keine Aenderung der Temperatur in Kelvin führt.
      • sat_index <index>
        Index von 1 bis 3 der akzeptierten Sättigungsstufen. Setzt die Glühbirne auf die entsprechende Sättigung für die eingestellte Farbe. Wenn die Glühbirne im "white" Modus war, wechselt sie in den Modus "color"
      • hue <huevalue>
        Hue Wert von 0 bis 359. Da die Fritzbox nur vordefinierte Werte unterstützt, wird sie auf den nächstliegenden unterstützten Wert zurückgesetzt (um die unterstützte Werte zu kennen, set <devicename> raw getcolordefaults ausführen). Die Sättigung wird auf die für die Farbe und sat_index akzeptierte Sättigung geändert. Wenn die Glühbirne im "white" Modus war, wechselt sie in den Modus "color"
      • saturation <Wert>
        Farbsättigung von 0 bis 255. Da die Fritzbox nur vordefinierte Werte unterstützt, wird sie auf den nächstliegenden unterstützten Wert zurückgesetzt (um die unterstützte Werte zu kennen, set <devicename> raw getcolordefaults ausführen). Wenn die Glühbirne im "white" Modus war, wechselt sie in den Modus "color"
      • raw ...
        Dient zum debuggen.
        Sendet switchcmd=..., weitere Parameter werden per & zusammengeklebt.

      Get
      • devInfo
        meldet Geräte-Informationen (nur mit FBAHA als IODev)

      Attribute
      • IODev
      • disable
      • disabledForIntervals
      • do_not_notify
      • ignore
      • dummy
      • showtime
      • model
      • readingFnAttributes

      Generierte events:
      • on
      • off
      • set_on
      • set_off
      • current: $v A
      • voltage: $v V
      • power: $v W
      • energy: $v Wh
      • powerFactor: $v"
      • temperature: $v C ([measured|corrected])
      • options: uninitialized
      • options: powerOnState:[on|off|last],lock:[none,webUi,remoteFb,button]
      • control: disabled
      • control: on power < $v delay:$d sec do:state [on|off]
      • relaytimes: disabled
      • relaytimes: HEX

    FB_CALLLIST

    [EN DE]
      Das FB_CALLLIST Modul erstellt eine Anrufliste für eine konfigurierte FB_CALLMONITOR Definition. Es speichert alle Anrufe und zeigt sie in einer historischen Tabelle an.

      Es wird eine bereits konfigurierte FB_CALLMONITOR Definition benötigt, von der FB_CALLLIST die Events entsprechend verarbeiten kann.

      Abhängig von der Konfiguration der Attribute wird der Status als Icon oder als Textzeichen ausgegeben. Um die Icons korrekt anzeigen zu können, muss das openautomation Icon-Set in der entsprechenden FHEMWEB-Instanz konfiguriert sein (siehe dazu FHEMWEB Attribut iconPath).

      Die Icons haben verschiedene Farben:

      • blau - Eingehender Anruf (aktiv oder beendet)
      • grün - Ausgehender Anruf (aktiv oder beendet))
      • rot - Verpasster Anruf (eingehend)

      Falls keine Icons verwendet werden sollen (siehe Attribut show-icons), wird der Status wie folgt angezeigt:

      • <= ((o)) - Ausgehender Anruf (klingelt)
      • => ((o)) - Eingehender Anruf (klingelt)

      • <= [=] - Ausgehender Anruf (laufendes Gespräch)
      • => [=] - Eingehender Anruf (laufendes Gespräch)

      • <= X - Ausgehender, erfolgloser Anruf (Gegenseite nicht abgenommen)
      • => X - Eingehender, erfolgloser Anruf (Verpasster Anruf)

      • => O_O - Eingehender Anruf, der durch einen Anrufbeantworter entgegen genommen wurde

      • <= - Ausgehender Anruf (beendet)
      • => - Eingehender Anruf (beendet)

      Definition
        define <Name> FB_CALLLIST <FB_CALLMONITOR Name>

      Set-Kommandos
      • clear - löscht die gesamte Anrufliste
      • removeItem <index> - löscht eine spezifische Zeile aus der Anrufliste (Zeilennummer)

      Get
        N/A

      Attributes

      • do_not_notify
      • readingFnAttributes

      • answMachine-is-missed-call 0,1
      • Sofern aktiviert, werden Anrufe, welche durch einen internen Anrufbeantworter beantwortet werden, als "verpasster Anruf" gewertet. Diese Funktionalität ist nur relevant, wenn list-type auf "missed-call" gesetzt oder create-readings aktiviert ist.

        Mögliche Werte: 0 => deaktiviert, 1 => aktiviert (Anrufbeantworter gilt als "verpasster Anruf").
        Standardwert ist 0 (deaktiviert)

      • create-readings 0,1
      • Sofern aktiviert, werden für alle sichtbaren Anrufe in der Liste entsprechende Readings und Events erzeugt. Es wird empfohlen das Attribut event-on-change-reading auf den Wert .* zu stellen um die hohe Anzahl an Events in bestimmten Fällen zu minimieren.

        Mögliche Werte: 0 => keine Readings erstellen, 1 => Readings und Events werden erzeugt.
        Standardwert ist 0 (keine Readings erstellen)

      • connection-mapping <hash>
      • Definiert eine eigene Zuordnung der Endgeräte (Reading: internal_connection) zu eigenen Bezeichnungen. Die Zuordnung erfolgt über eine Hash-Struktur.

        z.B.
          attr <name> connection-mapping {'DECT_1' => 'Mobilteil Küche', 'FON1' => 'Fax', 'Answering_Machine_1' => 'Anrufbeantworter'}

        Die jeweils zugeordnete Bezeichnung wird in der Anrufliste dann entsprechend angezeigt anstatt des originalen Werten von FB_CALLMONITOR.

        Standardwert ist nicht gesetzt (Keine Zuordnung, es werden die Originalwerte verwendet)

      • contactImageDirectory <Verzeichnis>
      • Sofern gesetzt, nutzt FB_CALLLIST dieses Verzeichnis um Kontaktbilder für jeden Anruf anzuzeigen. Diese Bilder werden in der Spalte "image" dargestellt, welche dazu explizit in dem Attribut visible-columns konfiguriert sein muss. Wenn in diesem Verzeichnis eine Bilddatei mit der externen Nummer als Dateiname (z.B. 0123456789.jpg oder 0345678901.gif) enthalten ist, wird diese als Kontaktbild in der Anrufliste verwendet.

        Unterstützte Dateiformate: JPEG, GIF, PNG, BMP

        Standardmäßig ist kein Verzeichnis vorkonfiguriert. Daher werden standardmäßig keine Kontaktbilder angezeigt.

      • contactDefaultImage <Dateiname>
      • Sofern Kontaktbilder verwendet werden (via Attribut contactImageDirectory) und kein zugehöriges Kontaktbild existiert oder die externe Rufnummer unbekannt ist, wird die konfigurierte Datei (z.B. unknown.jpg) als Kontaktbild verwendet. Die Datei muss sich dabei in dem Verzeichnis befinden, welches via Attribut contactImageDirectory konfiguriert ist.

        Wenn nicht konfiguriert, werden keine Kontaktbilder in solchen Fällen angezeigt.

      • disable 0,1,2,3
      • Optionales Attribut zur Deaktivierung der Anrufliste. Sofern aktiviert, werden keine Anruf-Events mehr verarbeitet und die Liste nicht weiter aktualisiert. Je nach gesetztem Wert verhält sich FB_CALLLIST unterschiedlich.

        Mögliche Werte:
        • 0 => Anrufliste ist aktiv, verarbeitet Events und aktualisiert die Darstellung kontinuierlich.
        • 1 => Events werden NICHT verarbeitet. Die Darstellung wird NICHT aktualisiert (bleibt wie sie ist).
        • 2 => Events werden NICHT verarbeitet. Die Darstellung zeigt nur "disabled" an (keine Einträge mehr).
        • 3 => Events werden NICHT verarbeitet. Die Liste wird NICHT mehr angezeigt.

        Standardwert ist 0 (aktiv)

      • disabledForIntervals HH:MM-HH:MM HH:MM-HH:MM...
      • Optionales Attribut zur Deaktivierung der Anrufliste innerhalb von bestimmten Zeitintervallen. Das Argument ist eine Leerzeichen-getrennte Liste von Minuszeichen-getrennten HH:MM Paaren (Stunde : Minute). Falls die aktuelle Uhrzeit zwischen diese Werte fällt, dann wird die Ausführung, wie bei disable gleich 1, ausgesetzt. Statt HH:MM kann man auch HH oder HH:MM:SS angeben.

        Um einen Intervall um Mitternacht zu spezifizieren, muss man zwei einzelne Intervalle angeben, z.Bsp.:
        23:00-24:00 00:00-01:00
        Standardwert ist nicht gesetzt (dauerhaft aktiv)

      • processEventsWhileDisabled 0,1
      • Sofern gesetzt, werden Events weiterhin verarbeitet, selbst wenn FB_CALLLIST deaktiviert ist (siehe disabled und disabledForIntervals). Sobald FB_CALLLIST wieder aktiviert wurde, stehen sämtliche Anrufe, während FB_CALLLIST deaktiviert war, zur Verfügung.

        Mögliche Werte: 0 => keine Eventverabeitung wenn FB_CALLLIST deaktiviert ist, 1 => Events werden trotz deaktiviert FB_CALLLIST intern weiterhin verarbeitet.
        Standardwert ist 0 (keine Eventverabeitung wenn deaktiviert)

      • expire-calls-after <Zeitfenster>
      • Optionales Attribut um beendete Anrufe nach einem angegeben Zeitfenster automatisch aus der Anrufliste zu löschen. Sobald ein beendetes Gespräch älter ist als das angegebene Zeitfenster, wird es automatisch aus der Liste entfernt.

        Ein Zeitfenster kann wie folgt angegeben werden:
        • als Minuten: 1 minute oder 30 minutes
        • als Stunden: 1 hour oder 12 hours
        • als Tage: 1 day oder 5 days
        • als Monate: 1 month oder 6 months (ein Monat entspricht hierbei 30 Tagen month is here equal to 30 days)
        • als Jahr: 1 year oder 2 years (ein Jahr entspricht hierbei 365 Tagen)

        WICHTIG: Es wird hierbei der Endezeitpunkt eines Gesprächs betrachtet, nicht der Beginn des Gesprächs.

        Wenn keine Einheit angegeben ist, wird die angegebene Zahl als Sekunden interpretiert. Es können auch Fliesskommazahlen mit einem Punkt als Kommastelle angegeben werden (z.B. 0.5 day). Der Wert 0 bedeutet, das keine Gespräche nach einem gewissen Zeitfenster gelöscht werden.

        Standardwert ist 0 (keine Gespräche werden nach einem Zeitfenster gelöscht)

      • external-mapping <Hash>
      • Definiert eine eigene Zuordnung der externen Anschlussbezeichnung (Reading: external_connection) zu eigenen Bezeichnungen. Die Zuordnung erfolgt über eine Hash-Struktur.

        z.B.
          attr <name> external-mapping {'ISDN' => 'Festnetz', 'SIP0' => 'Anbieter A', 'SIP1' => 'Anbieter B'}

        Die jeweils zugeordnete Bezeichnung wird in der Anrufliste dann entsprechend angezeigt anstatt des originalen Werten von FB_CALLMONITOR.

        Standardwert ist nicht gesetzt (Keine Zuordnung, es werden die Originalwerte verwendet)

      • icon-mapping <hash>
      • Definiert eine eigene Zuordnung eines Anrufstatus zu einem Icon. Die Zuordnung erfolgt über eine Hash-Struktur.

        z.B.
          attr <name> icon-mapping {'incoming.connected' => 'phone_ring_in@yellow', 'outgoing.missed' => 'phone_missed_out@red'}

        Das entsprechende Icon wird an Stelle des Original-Icons bzw. Text verwendet. Sofern SVG-basierte Icons verwendet werden, kann man die Farbe optional definieren durch das Anfügen via @ mit Name oder einem HTML Farbcode.

        Mögliche Werte und ihre Standard-Icons sind:

        • incoming.ring => phone_ring@blue
        • outgoing.ring => phone_ring@green
        • incoming.connected => phone_ring_in@blue
        • outgoing.connected => phone_ring_in@green
        • incoming.missed => phone_missed_in@red
        • outgoing.missed => phone_missed_out@green
        • incoming.done => phone_call_end_in@blue
        • outgoing.done => phone_call_end_out@green
        • incoming.tam => phone_answering@blue


        Standardwert ist nicht gesetzt (Keine Zuordnung, es werden die Standard-Icons verwendet, sofern Icons akitivert sind)

      • internal-number-filter <hash>
      • Dieses Attribut ermöglicht das Filtern der angezeigten Anrufe auf bestimmte interne Rufnummern sowie das Zuordnen von Namen zu den internen Rufnummern.

        Es ist möglich eine kommaseparierte Liste an internen Rufnummern anzugeben oder eine Hash-Tabelle in der man den internen Rufnummern eine eigene Bezeichnung zuweist.

        z.B.
          attr <name> internal-number-filter 304050,304060

          attr <name> internal-number-filter {'304050' => 'geschftl.', '304060' => 'privat'}

        Wichtig: Je nach Telefonanbieter kann der Wert die Ortsvorwahl enthalten. Die Rufnummer muss genauso angegeben werden, wie sie ohne eine Zuordnung in der Anrufliste auftaucht.

        Wenn dieses Attribut gesetzt ist, werden nur die eingestellten Rufnummern in der Liste angezeigt.

        Standardwert ist nicht gesetzt (alle internen Rufnummern werden angezeigt)

      • list-order descending,ascending
      • Gibt an ob der neueste Anruf in der ersten Zeile (aufsteigend => descending) oder in der letzten Zeile (absteigend => ascending) in der Liste angezeigt werden soll. Dementsprechend rollt die Liste dann nach oben oder unten durch.

        Standardwert ist "descending" (absteigend, neuester Anruf in der ersten Zeile)

      • list-type all,incoming,outgoing,missed-calls,completed,active
      • Ist dieses Attribut gesetzt, werden nur bestimmte Typen von Anrufen in der Liste angezeigt:

        • all - Alle Anrufe werden angezeigt
        • incoming - Alle eingehenden Anrufe werden angezeigt (aktive und abgeschlossene)
        • outgoing - Alle ausgehenden Anrufe werden angezeigt (aktive und abgeschlossene)
        • missed-calls - Alle eingehenden, verpassten Anrufe werden angezeigt.
        • completed - Alle abgeschlossenen Anrufe werden angezeigt (eingehend und ausgehend)
        • active - Alle aktuell laufenden Anrufe werden angezeigt (eingehend und ausgehend)

        Standardwert ist "all" (alle Anrufe anzeigen)

      • no-heading 0,1
      • Sofern aktiviert, wird die Überschriftenzeile ausserhalb der Liste inkl. Link auf die Detail-Seite der aktuellen Definition ausgeblendet.

        Mögliche Werte: 0 => Überschriftenzeile wird angezeigt , 1 => Überschriftenzeile wird ausgeblendet
        Standardwert ist 1 (Überschriftenzeile wird angezeigt)

      • no-table-header 0,1
      • Sofern aktiviert, wird die Kopfzeile der Tabelle für die aktuelle Definition ausgeblendet.

        Mögliche Werte: 0 => Kopfzeile wird angezeigt , 1 => Kopfzeile wird ausgeblendet
        Standardwert ist 1 (Kopfzeile wird angezeigt)

      • number-cmd <Befehl>
      • Kann gesetzt werden, um ein FHEM-Befehl oder Perl-Code (in geschweiften Klammern: { ... } ) auszuführen, wenn man auf eine Rufnummer in der Anrufliste klickt. Der Platzhalter $NUMBER wird dabei mit der entsprechenden Rufnummer der jeweiligen Zeile ersetzt.

        Damit kann man beispielsweise einen Rückruf starten. e.g.:

        • set FRITZBOX call $NUMBER
        • {dialNumber("$NUMBER")}

        Sofern nicht gesetzt, wird kein Link angezeigt.

      • number-of-calls 1..40
      • Setzt die maximale Anzahl an Einträgen in der Anrufliste. Sollte die Anrufliste voll sein, wird das älteste Gespräch gelöscht.

        Standardwert sind 5 Einträge

      • show-icons 0,1
      • Im Normalfall wird der Status eines jeden Anrufs mit einem Icon angezeigt. Dazu muss das openautomation Icon-Set im iconpath-Attribut der entsprechenden FHEMWEB Instanz konfiguriert sein. Sollte man keine Icons wünschen, so kann man diese hiermit abschalten. Der Status wird dann mittels Textzeichen dargestellt.

        Mögliche Werte: 0 => keine Icons , 1 => benutze Icons
        Standardwert ist 1 (benutze Icons)

      • time-format-string <String>
      • Definiert einen Formatierungs-String welcher benutzt wird um die Zeitangaben in der Anrufliste nach eigenen Wünschen anzupassen. Es stehen hier eine ganze Reihe an Platzhaltern zur Verfügung um die einzelnen Elemente einer Datums-/Zeitangabe einzeln zu setzen. Die möglichen Werte sind alle Standard POSIX strftime() Platzhalter. Gängige Platzhalter sind:

        • %a - Der abgekürzte Wochentagname
        • %b - Der abgekürzte Monatsname
        • %S - Die Sekunden als Dezimalzahl
        • %M - Die Minuten als Dezimalzahl
        • %H - Die Stunden als Dezimalzahl
        • %d - Der Tag im Monat als Dezimalzahl
        • %m - Der Monat als Dezimalzahl
        • %Y - Das Jahr als Dezimalzahl (4-stellig).

        Es gibt hierfür noch weitere Platzhalter. Weitere Informationen dazu findet man in der Manpage von strftime() oder der Dokumentation des entsprechenden Perl Interpreters.

        Standardwert ist "%a, %d %b %Y %H:%M:%S" (entspricht "So, 07 Jun 2015 12:50:09")

      • language en,de
      • Definiert die Sprache in der die Anrufliste angezeigt werden soll (Tabellenkopf, Datum). Die entsprechende Sprache muss auch im Betriebssystem installiert und unterstützt werden.

        Mögliche Werte: en => Englisch , de => Deutsch
        Standardwert ist en (Englisch)

      • visible-columns row,state,timestamp,image,name,number,internal,external,connection,duration
      • Legt fest, welche Spalten in welcher Reihenfolge (von links nach rechts) in der Anrufliste angezeigt werden sollen. Es müssen nicht alle verfügbaren Spalten angezeigt werden. Es kann auch eine Auswahl von einzelnen Spalten angezeigt werden.

        Die möglichen Werte repräsentieren die jeweilige Spalte. Der Wert "row" steht für die Zeilennummer innerhalb der Liste.

        Mögliche Werte: Eine Kombination der folgenden Werte in der gewünschten Reihenfolge: row,state,timestamp,image,name,number,internal,external,connection,duration
        Standardwert ist "row,state,timestamp,name,number,internal,external,connection,duration" (Anzeige aller Spalten bis auf "image", da diese erst konfiguriert werden muss)


      Generierte Events:

        Dieses Modul generiert Readings/Events, sofern das Attribut create-readings aktiviert ist. Die Anzahl, sowie der Name der Readings ist von den gewählten Spalten (Attribut: visible-columns), sowie der Anzahl der anzuzeigenden Anrufe abhängig (Attribut: number-of-calls).

        Generell werden folgende Readings/Events immer erzeugt, sofern das Attribut create-readings aktiviert ist:

        • count-all - Die Gesamtanzahl aller angezeigten Anrufe
        • count-incoming - Die Anzahl aller angezeigten eingehenden Anrufe
        • count-outgoing - Die Anzahl aller angezeigten ausgehenden Anrufe
        • count-active - Die Anzahl aller laufenden (noch nicht beendeten) Anrufe
        • count-completed - Die Anzahl aller bereits abgeschlossenen Anrufe
        • count-missed-calls - Die Anzahl aller verpassten Anrufe (eingehend)

    FB_CALLMONITOR

    [EN DE]
      Das Modul FB_CALLMONITOR verbindet sich zu einer AVM FritzBox Fon und verarbeitet Telefonie-Ereignisse.(eingehende & ausgehende Telefonate)

      Um dieses Modul nutzen zu können, muss der Callmonitor via Kurzwahl mit einem Telefon aktiviert werden.

        #96*5* - Callmonitor aktivieren
        #96*4* - Callmonitor deaktivieren

      Einfach die entsprechende Kurzwahl auf irgend einem Telefon eingeben, welches an die Fritz!Box angeschlossen ist. Nach ca. 3 Sekunden kann man einfach wieder auflegen. Nun ist der Callmonitor aktiviert.

      Sobald der Callmonitor auf der Fritz!Box aktiviert wurde erzeugt das Modul entsprechende Events (s.u.) für alle externen Anrufe. Interne Anrufe werden nicht durch den Callmonitor erfasst.
      Es muss zwingend das Attribut fritzbox-user nach der Definition des Device gesetzt werden.

      Dieses Modul funktioniert mit allen Fritz!Box Modellen, welche Telefonie unterstützen (Namenszusatz: Fon).

      Define
        define <name> FB_CALLMONITOR <IP-Addresse>[:Port]

        Port 1012 ist der Standardport und muss daher nicht explizit angegeben werden.

      Set
      • set <name> reopen
        schliesst die Verbindung zur FritzBox und öffnet sie erneut
      • set <name> rereadCache
        Liest den Cache aus der Datei neu ein (sofern konfiguriert, siehe dazu Attribut reverse-search-cache-file)
      • set <name> rereadPhonebook
        Liest das Telefonbuch der FritzBox neu ein (per Datei, Telnet oder direkt lokal)
      • set <name> rereadTextfile
        Liest die nutzereigene Textdatei neu ein (sofern konfiguriert, siehe dazu Attribut reverse-search-text-file)
      • set <name> password <Passwort>
        speichert das FritzBox Passwort, welches für das Einlesen aller Telefonbücher direkt von der FritzBox benötigt wird. Dieses Kommando ist nur verfügbar, wenn ein Passwort benötigt wird um das Telefonbuch via Netzwerk einzulesen, siehe dazu Attribut fritzbox-remote-phonebook.

      Get
      • get <name> search <phone-number>
        gibt den Namen der Telefonnummer zurück (aus Cache, Telefonbuch oder Rückwärtssuche)
      • get <name> showPhonebookIds
        gibt eine Liste aller verfügbaren Telefonbücher auf der FritzBox zurück (nicht verfügbar wenn das Telefonbuch via Telnet-Verbindung eingelesen wird)
      • get <name> showPhonebookEntries [Phonebook-ID]
        gibt eine Liste aller bekannten Telefonbucheinträge, oder nur eines bestimmten Telefonbuchs, zurück (nur verfügbar, wenn eine Rückwärtssuche via Telefonbuch aktiviert ist)
      • get <name> showCacheEntries
        gibt eine Liste aller bekannten Cacheeinträge zurück (nur verfügbar, wenn die Cache-Funktionalität der Rückwärtssuche aktiviert ist))
      • get <name> showTextEntries
        gibt eine Liste aller Einträge aus der nutzereigenen Textdatei zurück (nur verfügbar, wenn eine Textdatei als Attribut definiert ist))

      Attribute

      • do_not_notify
      • readingFnAttributes

      • disable 0,1
      • Optionales Attribut zur Deaktivierung des Callmonitors. Es können dann keine Anruf-Events mehr erkannt und erzeugt werden.

        Mögliche Werte: 0 => Callmonitor ist aktiv, 1 => Callmonitor ist deaktiviert.
        Standardwert ist 0 (aktiv)

      • disabledForIntervals HH:MM-HH:MM HH:MM-HH-MM...
      • Optionales Attribut zur Deaktivierung des Callmonitors innerhalb von bestimmten Zeitintervallen. Das Argument ist eine Leerzeichen-getrennte Liste von Minuszeichen-getrennten HH:MM Pärchen (Stunde : Minute). Falls die aktuelle Uhrzeit zwischen diese Werte fällt, dann wird die Verarbeitung, wie bei disable, ausgesetzt. Statt HH:MM kann man auch HH oder HH:MM:SS angeben.

        Um einen Intervall um Mitternacht zu spezifizieren, muss man zwei einzelne Intervalle angeben, z.Bsp.:
        23:00-24:00 00:00-01:00
        Standardwert ist nicht gesetzt (dauerhaft aktiv)

      • answMachine-is-missed-call 0,1
      • Sofern aktiviert, werden Anrufe, welche durch einen internen Anrufbeantworter beantwortet werden, als "unbeantworteter Anruf" gewertet (siehe Reading "missed_call" unter Generated Events).

        Mögliche Werte: 0 => deaktiviert, 1 => aktiviert (Anrufbeantworter gilt als "unbeantworteter Anruf").

        Standardwert ist 0 (deaktiviert)

      • internal-number-filter <Nummer>[<Nummer>,...]
      • Sofern gesetzt, werden nur Gespräche für die konfigurierten internen Rufnummern verarbeitet. Gültige Werte sind eine einzelne interne Rufnummer oder eine komma-separierte Liste von mehreren internen Rufnummern. Gespräche für interne Rufnummern, welche nicht in dieser Liste enthalten sind, werden ignoriert und nicht verarbeitet. Wenn dieses Attribut nicht konfiguriert ist, werden alle Gespräche regulär verarbeitet.

        Standardmäßig ist diese Funktion deaktiviert (nicht gesetzt)

      • reverse-search (phonebook,textfile,tellows.de,dasoertliche.de,11880.com,search.ch,dasschnelle.at,herold.at)
      • Aktiviert die Rückwärtssuche der externen Rufnummer (bei eingehenden/ausgehenden Anrufen). Dieses Attribut enthält eine komma-separierte Liste mit allen Anbietern die für eine Rückwärtssuche benutzt werden sollen. Die Rückwärtssuche prüft in der gegebenen Reihenfolge (von links nach rechts) ob der entsprechende Anbieter (Telefonbuch, Textdatei oder Internetanbieter) die Rufnummer auflösen können. Das erste Resultat was dabei gefunden wird, wird als Ergebnis für die Rückwärtssuche verwendet. Es ist möglich einen bestimmten Suchanbieter zu verwenden, welcher für die Rückwärtssuche verwendet werden soll. Der Anbieter "textfile" verwendet die nutzereigene Textdatei, sofern definiert (siehe Attribut reverse-search-text-file). Der Anbieter "phonebook" verwendet das Telefonbuch der FritzBox (siehe Attribut reverse-search-phonebook-file oder fritzbox-remote-phonebook).

        Standardmäßig ist diese Funktion deaktiviert (nicht gesetzt)

      • reverse-search-cache 0,1
      • Wenn dieses Attribut gesetzt ist, werden alle Ergebisse von Internetanbietern in einem modul-internen Cache gespeichert und alle existierenden Ergebnisse aus dem Cache genutzt anstatt eine erneute Anfrage bei einem Internet-Anbieter durchzuführen. Der Cache ist immer an die Internetanbieter gekoppelt und speichert nur Ergebnisse von Internetanbietern.

        Mögliche Werte: 0 => deaktiviert , 1 => aktiviert
        Standardwert ist 0 (deaktiviert)

      • reverse-search-cache-file <Dateipfad>
      • Da der Cache nur im Arbeitsspeicher existiert, ist er nicht persistent und geht beim stoppen von FHEM verloren. Mit diesem Parameter werden alle Cache-Ergebnisse in eine Textdatei geschrieben (z.B. /usr/share/fhem/telefonbuch.txt) und beim nächsten Start von FHEM wieder in den Cache geladen und genutzt.

      • reverse-search-text-file <Dateipfad>
      • Lädt eine nutzereigene Textdatei welche eine eigene Namenszuordnungen für Rufnummern enthält. Diese Datei enthält zeilenweise komma-separierte Werte nach folgendem Schema:
            <Nummer1>,<Name1>
            <Nummer2>,<Name2>
            ...
            <NummerN>,<NameN>
            
        Die Datei kann dabei auch Kommentar-Zeilen enthalten mit # vorangestellt. Sollte die Datei nicht existieren, wird sie durch FHEM erstellt.

      • reverse-search-phonebook-file <Dateipfad>
      • Mit diesem Attribut kann man optional den Pfad zu einer Datei angeben, welche ein Telefonbuch im FritzBox-Format (XML-Struktur) enthält. Dadurch ist es möglich ein FritzBox-Telefonbuch zu verwenden, ohne das FHEM auf einer FritzBox laufen muss. Sofern FHEM auf einer FritzBox läuft (und nichts abweichendes angegeben wurde), wird das interne File /var/flash/phonebook verwendet. Alternativ kann man das Telefonbuch in der FritzBox-Weboberfläche exportieren und dieses verwenden

        Standardwert ist /var/flash/phonebook (entspricht dem Pfad auf einer FritzBox)

      • reverse-search-tellows-api-key <api-key>
      • tellows api-key. Für Tests kann der api-key -test123- eingetragen werden

      • reverse-search-tellows-api-partner <api-partner>
      • tellows api-partner. Für Tests kann der api-partner -test- eingetragen werden

      • remove-leading-zero 0,1
      • Wenn dieses Attribut aktiviert ist, wird die führende Null aus der externen Rufnummer (bei eingehenden & abgehenden Anrufen) entfernt. Dies ist z.B. notwendig bei Telefonanlagen.

        Mögliche Werte: 0 => deaktiviert , 1 => aktiviert
        Standardwert ist 0 (deaktiviert)

      • unique-call-ids 0,1
      • Wenn dieses Attribut aktiviert ist, wird für jedes Gespräch eine eineindeutige Identifizierungsnummer verwendet. Dadurch lassen sich auch bereits beendete Gespräche voneinander unterscheiden. Dies ist z.B. notwendig bei der Verarbeitung der Events durch eine Datenbank.

        Mögliche Werte: 0 => deaktiviert , 1 => aktiviert
        Standardwert ist 0 (deaktiviert)

      • local-area-code <Ortsvorwahl>
      • Verwendet die gesetze Vorwahlnummer bei Rückwärtssuchen von Ortsgesprächen (z.B. 0228 für Bonn)

      • country-code <Landesvorwahl>
      • Die Landesvorwahl wird benötigt um Telefonbucheinträge mit lokaler Landesvorwahl als Inlands-Rufnummern, als auch um Call-By-Call-Vorwahlen richtig zu erkennen (z.B. 0049 für Deutschland, 0043 für Österreich oder 001 für USA).

        Standardwert ist 0049 (Deutschland)

      • check-deflections 0,1
      • Wenn dieses Attribut aktiviert ist, werden eingehende Anrufe gegen die konfigurierten Rufsperren-Regeln aus der FritzBox geprüft. Wenn ein Anruf auf eine dieser Regeln passt, wird der Anruf ignoriert und es werden keinerlei Readings/Events für diesen Anruf generiert. Dies funktioniert nur, wenn man das Telefonbuch aus der FritzBox via TR-064 einliest (siehe Attribute fritzbox-remote-phonebook und fritzbox-remote-phonebook-via).

        Mögliche Werte: 0 => deaktiviert , 1 => aktiviert
        Standardwert ist 0 (deaktiviert)

      • fritzbox-remote-phonebook 0,1
      • Wenn dieses Attribut aktiviert ist, wird das FritzBox Telefonbuch direkt von der FritzBox gelesen. Dazu ist das FritzBox Passwort und je nach FritzBox Konfiguration auch ein Username notwendig, der in den entsprechenden Attributen konfiguriert sein muss.

        Mögliche Werte: 0 => deaktiviert , 1 => aktiviert
        Standardwert ist 0 (deaktiviert)

      • fritzbox-remote-phonebook-via tr064,web,telnet
      • Setzt die Methode mit der das Telefonbuch von der FritzBox abgefragt werden soll. Bei der Methode "web", werden alle verfügbaren Telefonbücher (lokales sowie alle konfigurierten Online-Telefonbücher) über die Web-Oberfläche eingelesen. Bei der Methode "telnet" wird eine Telnet-Verbindung zur FritzBox aufgebaut um das lokale Telefonbuch abzufragen (keine Online-Telefonbücher). Dazu muss die Telnet-Funktion aktiviert sein (Telefon Kurzwahl: #96*7*). Bei der Methode "tr064" werden alle verfügbaren Telefonbücher über die TR-064 SOAP Schnittstelle ausgelesen.

        Mögliche Werte: tr064,web,telnet
        Standardwert ist "tr064" (Abfrage aller verfügbaren Telefonbücher über die TR-064-Schnittstelle)

      • fritzbox-remote-phonebook-exclude <Liste>
      • Eine komma-separierte Liste von Telefonbuch-ID's oder Namen welche beim einlesen übersprungen werden sollen. Dieses Attribut greift nur beim einlesen der Telefonbücher via "web"- oder "tr064"-Methode (siehe Attribut fritzbox-remote-phonebook-via). Eine Liste aller möglichen Werte kann über das Get-Kommando showPhonebookIds angezeigt werden.

        Standardmäßig ist diese Funktion deaktiviert (alle Telefonbücher werden eingelesen)

      • fritzbox-user <Username>
      • Benutzername für den TR064- oder einen anderen webbasierten Zugang. Die aktuellen FritzOS Versionen verlangen zwingend einen Benutzername für das Login.

      • apiKeySearchCh <API-Key>
      • Der private API-Key von tel.search.ch um eine Rückwärtssuche via search.ch durchzuführen (siehe Attribut reverse-search). Ohne einen solchen API-Key ist eine Rückwärtssuche via search.ch nicht möglich

      • sendKeepAlives (none,5m,10m,15m,30m,1h)
      • Wenn dieses Attribut gesetzt ist, wird ein zyklisches Keep-Alive im konfigurierten Zeitabstand an die FritzBox gesendet um die Verbindung aktiv zu halten. Dadurch bleibt die Verbindung bestehen, insbesondere wenn die verbundene FritzBox sich hinter einem weiteren NAT-Router befindet (z.B. einer weiteren FritzBox). Dadurch wird die Verbindung in so einem Fall nicht fälschlicherweise als "tot" erkannt und geblockt.

        Mögliche Werte: none,5m,10m,15m,30m,1h
        Standardwert ist "none" (es werden keine Keep-Alives gesendet)

      • contactImageDirectory <Verzeichnis>
      • Sofern gesetzt, generiert FB_CALLMONITOR das Reading "contact_image" sofern eine Datei mit der externen Rufnummer als Dateinamen (z.B. "012323456.jpg") in diesem Verzeichnis existiert. Wenn keine passende Datei in dem Verzeichnis existiert oder die externe Rufnummer unterdrückt ist, wird das Reading "contact_image" auf den Wert "none" gesetzt (kann mit dem Attribut contactDefaultImage geändert werden)

      • contactDefaultImage <Dateiname>
      • Sofern gesetzt, verwendet FB_CALLMONITOR den gesetzten Dateinamen anstelle von "none", sollte keine passende Datei zu einer Rufnummer existieren oder die Rufnummer unterdrückt sein.

      • contactImageViaTR064 0,1
      • Wenn dieses Attribut aktiviert ist, lädt FB_CALLMONITOR alle verfügbaren Kontaktbilder aus dem FritzBox Telefonbüchern via TR-064 (if attribute fritzbox-remote-phonebook-via is set to tr064) und speichert diese in dem Verzeichnis contactImageDirectory. Die heruntergeladenen Kontaktbilder werden dann automatisch für das Reading "contact_image" verwendet.

        Mögliche Werte: 0 => deaktiviert , 1 => aktiviert
        Standardwert ist 1 (aktiviert)



      Generierte Events:

      • event (call|ring|connect|disconnect) - Welches Event wurde genau ausgelöst. ("call" => ausgehender Rufversuch, "ring" => eingehender Rufversuch, "connect" => Gespräch ist zustande gekommen, "disconnect" => es wurde aufgelegt)
      • direction (incoming|outgoing) - Die Anruf-Richtung ("incoming" => eingehender Anruf, "outgoing" => ausgehender Anruf)
      • external_number - Die Rufnummer des Gegenübers, welcher anruft (event: ring) oder angerufen wird (event: call)
      • external_name - Das Ergebniss der Rückwärtssuche (sofern aktiviert). Im Fehlerfall kann diese Reading auch den Inhalt "unknown" (keinen Eintrag gefunden) enthalten. Im Falle einer Zeitüberschreitung bei der Rückwärtssuche und aktiviertem Caching, wird die Rufnummer beim nächsten Mal erneut gesucht.
      • internal_number - Die interne Rufnummer (Festnetz, VoIP-Nummer, ...) auf welcher man angerufen wird (event: ring) oder die man gerade nutzt um jemanden anzurufen (event: call)
      • internal_connection - Der interne Anschluss an der Fritz!Box welcher genutzt wird um das Gespräch durchzuführen (FON1, FON2, ISDN, DECT, ...)
      • external_connection - Der externe Anschluss welcher genutzt wird um das Gespräch durchzuführen ("POTS" => analoges Festnetz, "SIPx" => VoIP Nummer, "ISDN", "GSM" => Mobilfunk via GSM/UMTS-Stick)
      • calls_count - Die Anzahl aller aktiven Verbindungen (gleichzeitig). Ist der Wert 0, so wird gerade kein Gespräch geführt.
      • call_duration - Die Gesprächsdauer in Sekunden. Dieser Wert wird nur bei einem disconnect-Event erzeugt. Ist der Wert 0, so wurde das Gespräch von niemandem angenommen.
      • call_id - Die Identifizierungsnummer eines einzelnen Gesprächs. Dient der Zuordnung bei zwei oder mehr parallelen Gesprächen, damit alle Events eindeutig einem Gespräch zugeordnet werden können
      • missed_call - Dieses Event wird nur generiert, wenn ein eingehender Anruf nicht beantwortet wird. Sofern der Name dazu bekannt ist, wird dieser ebenfalls mit angezeigt.
      • contact_image - Dieses Event wird nur generiert, wenn das Attribut contactImageDirectory gesetzt ist. Es enthält das zugehörige Kontaktfoto als Dateiname oder "none", falls kein entsprechendes Kontaktfoto existiert, oder die Rufnummer unterdrückt ist.

    FHEM2FHEM

    [EN DE]
      FHEM2FHEM ist ein Hilfsmodul, um mehrere FHEM-Installationen zu verbinden.

      Define
        define <name> FHEM2FHEM <host>[:<portnr>][:SSL] [LOG:regexp|RAW:devicename] {portpassword}

        Zum remote (entfernten) FHEM auf Rechner <host> verbinden. <portnr> ist der telnetPort des remote FHEM, Standardport ist 7072. Der Zusatz :SSL wird benötigt, wenn das remote FHEM SSL-Verschlüsselung voraussetzt. Auch auf dem lokalen Host muss dann das Perl-Modul IO::Socket::SSL installiert sein.

        Achtung:
        • Wenn das remote FHEM auf einem eigenen Host läuft, muss "telnetPort" des remote FHEM mit der global Option definiert sein.
        • ab FHEM Version 5.9 wird in der ausgelieferten Initialversion der fhem.cfg keine telnet Instanz vorkonfiguriert, man muss sie z.Bsp. folgendermaßen definieren:
            define telnetPort telnet 7072 global

        Der nächste Parameter spezifiziert den Verbindungs-Typ:
        • LOG
          Bei Verwendung dieses Verbindungstyps werden alle Ereignisse (Events) der remote FHEM-Installation empfangen. Die Ereignisse sehen aus wie die, die nach inform on Befehl erzeugt werden. Sie können wie lokale Ereignisse durch FileLog oder notify genutzt werden und mit einem regulären Ausdruck gefiltert werden. Die Syntax dafür ist unter der notify-Definition beschrieben.
          Einschränkungen: die Geräte der remote Installation werden nicht lokal angelegt und können weder mit list angezeigt noch lokal angesprochen werden. Auf beiden FHEM-Installationen können Geräte gleichen Namens angelegt werden, aber wenn beide dasselbe Ereignis empfangen (z.B. wenn an beiden Installationen CULs angeschlossen sind), werden alle FileLogs und notifys doppelt ausgelöst.
          Falls man lokal Geräte mit dem gleichen Namen (z.Bsp. als dummy) angelegt hat, dann werden die Readings von dem lokalen Gerät aktualisiert.
        • RAW
          Bei diesem Verbindungstyp werden unaufbereitete Ereignisse (raw messages) des remote FHEM-Geräts devicename genau so empfangen, als wäre das Gerät lokal verbunden.
          Einschränkungen: nur Geräte, welche die "Dispatch-Funktion" unterstützen (CUL, FHZ, CM11, SISPM, RFXCOM, TCM, TRX, TUL) erzeugen raw messages, und für jedes entfernte Gerät muss ein eigenes FHEM2FHEM Objekt erzeugt werden.
          devicename muss mit demselben Namen und Typ wie das Remote Devive angelegt sein, aber als Dummy, d.h. als device-node "none". Zusätzlich müssen alle notwendigen Attribute lokal gesetzt sein (z.B. rfmode, wenn die remote CUL im HomeMatic-Modus läuft). Die Verwendung bereits bestehender lokaler Geräte ist zu vermeiden, weil sonst die Duplikatsfilterung nicht richtig funktioniert (siehe dupTimeout).
        Der letzte Parameter enthält das Passwort des Remote-Servers, wenn dort eines aktiviert ist portpassword.
        Beispiele:
          define ds1 FHEM2FHEM 192.168.178.22:7072 LOG:.*

          define RpiCUL CUL none 0000
          define ds2 FHEM2FHEM 192.168.178.22:7072 RAW:RpiCUL
          und auf dem RPi (192.168.178.22):
          rename CUL_0 RpiCUL

      Set
      • reopen
        Öffnet die Verbindung erneut.
      • cmd <FHEM-command>
        fürt FHEM-command auf dem entfernten Rechner aus. Achtung: eine Fehlermeldung ist nur dann sichtbar, falls der Befehl in einer Telnet-Sitzung oder in der mehrzeiligen FHEMWEB Befehlsdialog eingegeben wurde.

      Get
        N/A

      Attribute
      • dummy
      • disable
      • disabledForIntervals
      • eventOnly
        falls gesetzt, werden nur die Events generiert, und es wird kein Reading aktualisiert. Ist nur im LOG-Mode aktiv.
      • addStateEvent
        falls gesetzt, werden state Events als solche uebertragen. Zu beachten: das Attribut ist nur für LOG-Mode relevant, beim Setzen wird eine zusätzliche reopened Logzeile generiert, und die andere Seite muss aktuell sein.
      • excludeEvents <regexp> die auf das <regexp> zutreffende Events werden nicht bereitgestellt. Achtung: ^ und $ werden automatisch hinzugefuuml;gt, wie bei notify, FileLog, usw.
      • keepaliveInterval <sec>
        setzt regelmaessig einen leeren Befehl ab, um einen Verbindungsabbruch frueher als das OS feststellen zu koennen.
      • loopThreshold
        hilft Endlosschleifen zu vermeiden. Falls gesetzt, muss die letzte Änderung des gleichen Readings mehr als der Wert in Sekunden alt sein. Achtung bei gesetzten event-on-* Attributen.
      • setState falls gesetzt (auf 1), und ein lokales Gerät mit dem gleichen Namen existiert, dann werden set Befehle vom entfernten Gerät als Solches übertragen.
      • reportConnected falls gesetzt (auf 1), dann wird auf dem Telnet-Server nach dem Verbinden das "global CONNECTED <name>" Event erzeugt. Das ermöglicht z.Bsp. das erneute Senden geänderter Zustände.

    FHEMWEB

      FHEMWEB ist das default WEB-Frontend, es implementiert auch einen einfachen Webserver (optional mit Basic-Auth und HTTPS).

      Define
        define <name> FHEMWEB <tcp-portnr> [global|IP]

        Aktiviert das Webfrontend auf dem Port <tcp-portnr>. Mit dem Parameter global werden Anfragen von allen Netzwerkschnittstellen akzeptiert (nicht nur vom localhost / 127.0.0.1). Falls IP angegeben wurde, dann werden nur Anfragen an diese IP Adresse akzeptiert.
        Informationen für den Betrieb mit IPv6 finden Sie hier.

      Set
      • rereadicons
        Damit wird die Liste der Icons neu eingelesen, für den Fall, dass Sie Icons löschen oder hinzufügen.
      • clearSvgCache
        Im Verzeichnis www/SVGcache werden SVG Daten zwischengespeichert, wenn das Attribut SVGcache gesetzt ist. Mit diesem Befehl leeren Sie diesen Zwischenspeicher.
      • reopen
        Schließt und öffnet der Serverport. Das kann eine Alternative zu FHEM-Neustart sein, wenn das SSL-Zertifikat sich geändert hat.

      Get
      • icon <logical icon>
        Liefert den absoluten Pfad des (logischen) Icons zurück. Beispiel:
          get myFHEMWEB icon FS20.on
          /data/Homeautomation/fhem/FHEM/FS20.on.png
      • pathlist
        Zeigt diejenigen Verzeichnisse an, in welchen die verschiedenen Dateien für FHEMWEB liegen.


      Attribute
      • addHtmlTitle
        Falls der Wert 0 ist, wird bei den set/get/attr Parametern in der DetailAnsicht der Geräte kein title Attribut gesetzt. Das is bei manchen Screenreadern erforderlich. Die Voreinstellung ist 1.

      • alias_<RoomName>
        Falls man das Attribut alias_<RoomName> definiert, und dieses Attribut für ein Gerät setzt, dann wird dieser Wert bei Anzeige von <RoomName> verwendet.
        Achtung: man kann im userattr auch alias_.* verwenden um alle möglichen Räume abzudecken, in diesem Fall wird aber die Attributauswahl in der Detailansicht für alias_.* nicht funktionieren.

      • allowfrom
        Regexp der erlaubten IP-Adressen oder Hostnamen. Wenn dieses Attribut gesetzt wurde, werden ausschließlich Verbindungen von diesen Adressen akzeptiert.
        Achtung: falls allowfrom nicht gesetzt ist, und keine gütige allowed Instanz definiert ist, und die Gegenstelle eine nicht lokale Adresse hat, dann wird die Verbindung abgewiesen. Folgende Adressen werden als local betrachtet:
          IPV4: 127/8, 10/8, 192.168/16, 172.16/10, 169.254/16
          IPV6: ::1, fe80/10

      • allowedHttpMethods
        FHEMWEB implementiert die HTTP Methoden GET, POST und OPTIONS. Manche externe Geräte benötigen HEAD, das ist aber in FHEMWEB nicht korrekt implementiert, da FHEMWEB immer ein body zurückliefert, was laut Spec falsch ist. Da ein body in manchen Fällen kein Problem ist, kann man HEAD durch setzen dieses Attributes auf GET|POST|HEAD aktivieren, die Voreinstellung ist GET|POST. OPTIONS ist immer aktiviert.

      • closeConn
        Falls gesetzt, wird pro TCP Verbindung nur ein HTTP Request durchgeführt. Für iOS9 WebApp startups scheint es zu helfen.

      • cmdIcon
        Leerzeichen getrennte Auflistung von cmd:iconName Paaren. Falls gesetzt, wird das webCmd text durch den icon gesetzt. Am einfachsten setzt man cmdIcon indem man "Extend devStateIcon" im Detail-Ansicht verwendet, und den Wert nach cmdIcon kopiert.
        Beispiel:
          attr lamp cmdIcon on:control_centr_arrow_up off:control_centr_arrow_down

      • column
        Damit werden mehrere Spalten für einen Raum angezeigt, indem sie verschiedene Gruppen Spalten zuordnen. Beispiel:
          attr WEB column LivingRoom:FS20,notify|FHZ,notify DiningRoom:FS20|FHZ
        In diesem Beispiel werden im Raum LivingRoom die FS20 sowie die notify Gruppe in der ersten Spalte, die FHZ und das notify in der zweiten Spalte angezeigt.
        Anmerkungen: einige Elemente, wie SVG Plots und readingsGroup können nur dann Teil einer Spalte sein wenn sie in group stehen. Dieses Attribut kann man zum sortieren der Gruppen auch dann verwenden, wenn man nur eine Spalte hat. Leerzeichen im Raum- und Gruppennamen sind für dieses Attribut als %20 zu schreiben. Raum- und Gruppenspezifikation ist jeweils ein %regulärer Ausdruck.

      • confirmDelete
        Löschaktionen werden mit einem Dialog bestätigt. Falls dieses Attribut auf 0 gesetzt ist, entfällt das.

      • confirmJSError
        JavaScript Fehler werden per Voreinstellung in einem Dialog gemeldet. Durch setzen dieses Attributes auf 0 werden solche Fehler nicht gemeldet.

      • CORS
        Wenn auf 1 gestellt, wird FHEMWEB einen "Cross origin resource sharing" Header bereitstellen, näheres siehe Wikipedia.

      • csrfToken
        Falls gesetzt, wird der Wert des Attributes als fwcsrf Parameter bei jedem über FHEMWEB abgesetzten Kommando verlangt, es dient zum Schutz von Cross Site Resource Forgery Angriffen. Falls der Wert random ist, dann wird ein Zufallswert beim jeden FHEMWEB Start neu generiert, falls er none ist, dann wird kein Parameter verlangt. Default ist random für featurelevel 5.8 und größer, und none für featurelevel kleiner 5.8

      • csrfTokenHTTPHeader
        Falls gesetzt (Voreinstellung), FHEMWEB sendet im HTTP Header den csrfToken als X-FHEM-csrfToken, das wird von manchen FHEM-Clients benutzt. Mit 0 kann man das abstellen, um Sites wie shodan.io die Erkennung von FHEM zu erschweren.

      • CssFiles
        Leerzeichen getrennte Liste von .css Dateien, die geladen werden. Die Dateinamen sind relativ zum www Verzeichnis anzugeben. Beispiel:
          attr WEB CssFiles pgm2/mystyle.css

      • Css
        CSS, was nach dem CssFiles Abschnitt im Header eingefuegt wird.

      • defaultRoom
        Zeigt den angegebenen Raum an falls kein Raum explizit ausgewählt wurde. Achtung: falls gesetzt, wird motd nicht mehr angezeigt. Beispiel:
        attr WEB defaultRoom Zentrale

      • detailLinks
        Anzahl der Links, die auf der Detailseite unten angezeigt werden. Die weiteren Befehle werden in einem Auswahlmenü angezeigt. Voreinstellung ist 2.
        Das kann optional mit der Liste der anzuzeigenden IDs erweitert werden, um die Links zu sortieren oder zu filtern. Die möglichen IDs sind devSpecHelp, forumCopy, rawDef, style iconFor, style showDSI, delete. Beispiel:
        attr WEB detailLinks 2,devSpecHelp,forumCopy

      • devStateIcon
        Erste Variante:
          Leerzeichen getrennte Auflistung von regexp:icon-name:cmd Dreierpärchen, icon-name und cmd dürfen leer sein.
          Wenn STATE des Gerätes mit der regexp übereinstimmt, wird als icon-name das entsprechende Status Icon angezeigt, und (falls definiert), löst ein Klick auf das Icon das entsprechende cmd aus. Wenn FHEM icon-name nicht finden kann, wird STATE als Text angezeigt. Beispiel:
            attr lamp devStateIcon on:closed off:open
            attr lamp devStateIcon on::A0 off::AI
            attr lamp devStateIcon .*:noIcon
          Anmerkung: Wenn das Icon ein SVG Bild ist, kann das @fill:stroke Suffix verwendet werden um das Icon einzufärben, dabei wird in der SVG die Füllfarbe durch das spezifizierte fill ersetzt, und die Stiftfarbe durch das optionale stroke. Z.B.:
            attr Fax devStateIcon on:control_building_empty@red off:control_building_filled:278727
          Falls cmd noFhemwebLink ist, dann wird kein HTML-Link generiert, d.h. es passiert nichts, wenn man auf das Icon/Text klickt. Achtung: falls im devStateIcons das Ändern der Stiftfarbe benötigt wird, dann ist die alternative @fill@stroke Syntax zu verwenden.
        Zweite Variante:
          Perl Ausdruck eingeschlossen in {}. Wenn der Code undef zurückliefert, wird das Standard Icon verwendet; wird ein String in <> zurück geliefert, wird dieser als HTML String interpretiert. Andernfalls wird der String als devStateIcon gemäß der ersten Variante interpretiert, siehe oben. Beispiel:
          {'<div style="width:32px;height:32px;background-color:green"></div>'}
        Anmerkung: Obiges gilt pro STATE Zeile. Wenn STATE (durch stateFormat) mehrzeilig ist, wird pro Zeile ein Icon erzeugt.

      • devStateStyle
        Für ein best. Gerät einen best. HTML-Style benutzen. Beispiel:
          attr sensor devStateStyle style="text-align:left;;font-weight:bold;;"

      • deviceOverview
        Gibt an ob die Darstellung aus der Raum-Ansicht (Zeile mit Gerüteicon, Stateicon und webCmds/cmdIcons) auch in der Detail-Ansicht angezeigt werden soll. Kann auf always, onClick, iconOnly oder never gesetzt werden. Der Default ist always.

      • editConfig
        Falls dieses FHEMWEB Attribut (auf 1) gesetzt ist, dann kann man die FHEM Konfigurationsdatei in dem "Edit files" Abschnitt bearbeiten. Beim Speichern dieser Datei wird automatisch rereadcfg ausgefuehrt, was diverse Nebeneffekte hat.

      • editFileList
        Definiert die Liste der angezeigten Dateien in der "Edit Files" Abschnitt. Es ist eine Newline getrennte Liste von Tripeln bestehend aus Titel, Verzeichnis für die Suche als perl Ausdruck(!), und Regexp. Die Voreinstellung ist:
          Own modules and helper files:$MW_dir:^(.*sh|[0-9][0-9].*Util.*pm|.*cfg|.*holiday|myUtilsTemplate.pm|.*layout)$
          Gplot files:$FW_gplotdir:^.*gplo