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.
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.
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.
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:
Wenn beide Attribute nicht gesetzt sind erzeugt jede Aktualisierung
eines jeden Readings eines Gerätes ein Ereignis.
Wenn eines der Attribute gesetzt ist, erzeugen nur Updates oder
änderungen von Readings die in einem der Attribute gesetzt
sind ein Ereignis.
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:
function
description
v
the last value encountered
v0
the first value encountered
min
the smallest value encountered
max
the largest value encountered
mean
the arithmetic mean of all values
sd
the standard deviation from the mean
median
the median of all values (requires holdTime and function none)
integral
the arithmetic sum (if not time-weighted) or integral area (if time-weighted) of all values
n
number of samples
t
timestamp of the last value
t0
timestamp 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.
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:
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:
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:
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.
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.
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.
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:
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:
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>.
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.
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.
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.
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.
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
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.
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
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.
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.
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.
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.
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
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.
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:
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.
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.
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>.
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.
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.
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>.
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.
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.:
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.
Die Länge jeder gespeicherten Zeile ist auf 40 Zeichen begrenzt.
Mit der (optionalen, Leerzeichen getrennten) zweiten Parameter kann man
diesen Wert ändern.
Beispiel: attr global myxChangeLog 20 200
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.
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.
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
AMAD - Automagic Android DeviceAMADCommBridge - 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 - 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.
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.
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
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)
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
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)
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).
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.
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_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') }
Getter
Erläuterung
FreezeStatus
1=soft, 2=Daytime, 3=hard
AntiFreezePos
konfigurierte Position beim AntiFreeze Status
AntiFreezePosAssignment
konfigurierte Lamellen Position bei der AntiFreeze Position
AntiFreeze
aktuelle Konfiguration für AntiFreeze
ShuttersPlace
aktuelle Konfiguration an welchem Platz sich das Rollo befindet, Fenster oder Terrasse
SlatPosCmd
welcher PosCmd ist aktuell für den Lamellen Befehl konfiguriert
SlatDevice
welches Device aktuell für die Lamellen Steuerung konfiguriert ist
PrivacyUpTime
Privacy Zeit in Sekunden zum fahren in die Privacy Pos vor dem vollen öffnen
PrivacyUpBrightnessVal
Privacy Brightness Wert zum fahren in die Privacy Pos
PrivacyUpPos
Position für die Privacy Up Fahrt
PrivacyUpPositionAssignment
Position für die Lamellenfahrt von Privacy Up
PrivacyDownTime
Privacy Zeit in Sekunden zum fahren in die Privacy Pos vor dem vollen schließ
PrivacyDownBrightnessVal
Privacy Brightness Wert zum fahren in die Privacy Pos
PrivacyDownPos
Position für die Privacy Down Fahrt
PrivacyDownPositionAssignment
Position für die Lamellenfahrt von Privacy Down
SelfDefenseMode
Modus für den SelfDefense
SelfDefenseAbsentDelay
Verzögerungszeit der SelfDefense Fahrt bei absent
WiggleValue
um welchen Wert soll das Rollo bei einer wiggle Fahrt fahren
Adv
Ist es in der definierten Weihnachtszeit
ShadingPos
konfigurierte Position für die Beschattungsfahrt
ShadingPositionAssignment
Position für die Lamellenfahrt für die Beschattungsfahrt
ShadingMode
welcher aktuelle Modus für das Beschatten ist konfiguriert
IdleDetectionValue
welcher Wert im IdleDetectionRading zeigt an dass das Rollo aktuell nicht in Bewegung ist
ShadingAzimuthLeft
ab welchem Azimut beginnt die Beschattung
ShadingAzimuthRight
ab 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
ShadingStateChangeCloudy
unter welchem Brightnesswert endet die Beschattung
ShadingWaitingPeriod
nach welcher Wartezeit werden Beschattungsrelevante Sensorwerte wieder beachtet und die Beschattungsroutine abgearbeitet
ExternalTriggerDevice
konfiguriertes Triggerdevice
ExternalTriggerReading
kofiguriertes Triggerdevice Reading
ExternalTriggerValueActive
Wert mit welchen der externe Trigger Prozess ausgel&uoml;st werden soll.
ExternalTriggerValueActive2
weiterer Wert mit welchen der externe zweite Trigger Prozess ausgel&uoml;st werden soll.
ExternalTriggerValueInactive
Wert mit welchen der externe Trigger Prozess beendet werden soll
ExternalTriggerPosActive
Rolloposition welche angefahren werden soll wenn der erste externe Trigger aktiv wird.
ExternalTriggerPosActive2
Rolloposition welche angefahren werden soll wenn der zweite externe Trigger aktiv wird.
ExternalTriggerPosInactive
Rolloposition welche angefahren werden soll wenn der externe Trigger inaktiv wird.
ExternalTriggerStatus
aktueller Status des externen Triggers, 0 oder 1
Delay
konfigurierte Verzögerungswert welcher für die Zufallsberechnung werwendet werden soll
DelayStart
konfigurierter fester Verzögerungswert
BlockingTimeAfterManual
konfigurierte Blockzeit nach einer manuellen Fahrt
BlockingTimeBeforNightClose
konfigurierte Blockzeit vor dem nächtlichen schließen
BlockingTimeBeforDayOpen
konfigurierte Blockzeit vor dem morgendlichen öffnen
PosCmd
welches Kommando wird zum fahren der Rollos verwendet (pct, position?)
OpenPos
Position für Rollo ganz auf
OpenPositionAssignment
Slat-Position für Rollo ganz auf
VentilatePos
Lüften Position
VentilatePositionAssignment
Lüften Slat-Position
VentilatePosAfterDayClosed
Position des Rollos beim schließen des Fensters am Tag
ClosedPos
Position für Rollo ganz geschlossen
ClosedPositionAssignment
Slat-Position für Rollo ganz geschlossen
SleepPos
Position für schlafen
SleepPositionAssignment
Slat-Position für schlafen
VentilateOpen
Lüften aktiv?
ComfortOpenPos
Comfort Position
ComfortOpenPositionAssignment
Slat-Comfort Position
PartyMode
Abfrage Party Mode
Roommates
Abfrage Roommates / Antwort als String
RoommatesReading
Roommates Reading
RoommatesStatus
Roommates Status unter Berücksichtigung aller Roommates und dessen Status
RoommatesLastStatus
Roommates letzter Status unter Berücksichtigung aller Roommates und dessen letzten Status
WindPos
Rollo Position bei Windtrigger
WindMax
Wert über dem die Windprotection aktiviert werden soll
WindMin
Wert unter dem die Windprotection aufgehoben werden soll
WindProtection
Windprotection soll aktiv sein oder nicht
WindProtectionStatus
aktueller Status der Wind Protection „protected“ oder „unprotected“
RainProtection
Rain Protection soll aktiv sein oder nicht
RainProtectionStatus
aktueller Status der Regen Protection „unprotected“ oder „unprotected“
ModeUp
aktuelle Einstellung für den Modus des Morgens hoch fahren
ModeDown
aktuelle Einstellung für den Modus des Abends runter fahren
LockOut
aktuelle Einstellung für den Aussperrschutz
LockOutCmd
Aussperrschutz Kommando am Aktor
AutoAstroModeMorning
aktuell engestellter Wert für Astro Morgens
AutoAstroModeEvening
aktuell engestellter Wert für Astro Abends
AutoAstroModeMorningHorizon
HORIZON Wert Morgens
AutoAstroModeEveningHorizon
HORIZON Wert Abends
Up
aktueller Wert für Morgenfahrten
Down
aktueller Wert für Abendfahrten
TimeUpEarly
aktueller Wert für frühste Morgenfahrt
TimeUpLate
aktueller Wert für späteste Morgenfahrt
TimeDownEarly
aktueller Wert für frühste Abendfahrt
TimeDownLate
aktueller Wert für späteste Abendfahrt
TimeUpWeHoliday
aktueller Wert für Wochenende und Feiertags Morgenfahrten
BrightnessMinVal
BrightnessMaxVal
DriveUpMaxDuration
Homemode
PrivacyDownStatus
PrivacyUpStatus
IsDay
SelfDefenseState
LastDrive
LastPos
Sunset
Sunrise
OutTemp
IdleDetection
BrightnessAverage
Nur für die Beschattung relevant
ShadingStatus
ShadingLastStatus
ShadingManualDriveStatus
IfInShading
WindProtectionStatus
RainProtectionStatus
Brightness
WindStatus
Status
aktuelle Position des Rollos
DelayCmd
Status der Query von ausgesetzten Fahrten wegen PartyMod oder offnen Fenster
ASCenable
Status der ASC Steuerung vom Rollo
SubTyp
Subtype vom Rollo
WinDevReading
WinDev
WinStatus
NoDelay
Wurde die Behandlung von Offset deaktiviert (Beispiel bei Fahrten über Fensterevents)
LastDrive
Grund des letzten Fahrens
LastPos
die letzte Position des Rollladens
LastPosTimestamp
Timestamp der letzten festgestellten Position
LastManPos
Position der letzten manuellen Fahrt
LastManPosTimestamp
Timestamp der letzten manuellen Position
SunsetUnixTime
berechnete Unixzeit für Abends (Sonnenuntergang)
Sunset
1=Abendfahrt wurde durchgeführt, 0=noch keine Abendfahrt durchgeführt
SunriseUnixTime
berechnete Unixzeit für Morgens (Sonnenaufgang)
Sunrise
1=Morgenfahrt wurde durchgeführt, 0=noch keine Morgenfahrt durchgeführt
RoommatesStatus
aktueller Status der/des Roommate/s für den Rollladen
RoommatesLastStatus
letzter Status der/des Roommate/s für den Rollladen
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.
Die Grundstücksgrenze kann manuell eingetragen werden.
Die Die Mähflächengrenze kann manuell eingetragen werden.
Alternativ kann die Mähflächengrenze berechnet werden.
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 im Husqvarna Developer Portal angelegt und mit der Automower Connect API verbunden werden.
Währenddessen wird ein Application Key (client_id) und ein Application Secret (client secret) bereitgestellt. Diese Angaben sind im Zusammenhang mit der Definition eines Gerätes erforderlich.
Das Modul nutzt Client Credentials als Granttype zur Authorisierung.
Das Modul läd Drittsoftware, die zur Berechnung der Hüllkurve des Mähbereiches erforderlich ist, von einem externem Server.
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 <client secret>
Hinweise
Die verfügbaren Setter, Attribute und Readings, so wie die Karte, werden durch die im Mähertyp vorhandenen Fähigkeiten ( cutting height, headlights, position, stay out zones, work areas ) bestimmt.
Button
Mower Schedule
Über den Button kann eine Benutzeroberfläche zur Bearbeitung des Mähplans geöffnet werden.
Eintrag zufügen/ändern: Die gewünschten Angaben eintragen und betätigen.
Eintrag löschen: Alle Wochentage abwählen und betätigen.
Eintrag zurücksetzen: Irgend ein Zeitfeld mit -- füllen und betätigen.
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 Intervall 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>
Wenn <number of minutes> nicht angegeben wird oder im Auswahlfeld 0 gewählt wird, dann wird der Mähvorgang bis auf Weiteres fortgesetzt.
Der Name der WorkArea 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.
resetCuttingBladeUsageTime set <name> resetCuttingBladeUsageTime
Setzt die Benutzungszeit der Messer zurück, falls der Mäher es unterstützt.
cuttingHeightInWorkArea set <name> cuttingHeightInWorkArea <Id|name> <0..100>
Testing: Setzt die Schnitthöhe für Id oder Zonennamen von 0 bis 100. Der Zonenname darf keine Leerzeichen beinhalten und muss mindestens einen Buchstaben enthalten.
stayOutZone set <name> stayOutZone <Id|name> <enable|disable>
Testing: Schaltet stayOutZone ein oder aus, für die Id oder den Namen der Zone.
Der Zonenname darf keine Leerzeichen beinhalten und muss mindestens einen Buchstaben enthalten.
dateTime set <name> dateTime <timestamp / s>
Synchronisiert die Zeit im Mäher. Timestamp, ist die Zeit in Sekunden seit 1. Januar 1970, 00:00 Uhr UTC unter Berücksichtigung der Zeitzone und DST.
Der Standardwert (leeres Eingabefeld) verwendet die lokale Zeit des Rechners auf dem der Mäher definiert ist, siehe auch mowerAutoSyncTime
confirmError set <name> confirmError
Testing: Bestätigt den letzten Fehler im Mäher, wenn der Mäher es zulässt. Verfügbar für 405X, 415X, 435X AWD and 535 AWD und alle Ceora, EPOS and NERA.
getNewAccessToken set <name> getNewAccessToken
Nur zur Fehlerbehebung.
getUpdate set <name> getUpdate
Nur zur Fehlerbehebung.
getMessages get <name> getMessages
Läd die im Mäher gespeicherten Meldungen, sofern unterstützt, siehe auch errorStack.
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 mowerSchedule.
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.
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}
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 und die geladenen Meldungen auf, siehe auch getMessages.
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. Nur Designattribute mit geänderten Standartwerten müssen in diesem Attribut enthalten sein.
Vorgabe Werte:
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.
mowerAutoSyncTime attr <name> mowerAutoSyncTime <0,1>
Synchronisiert die Zeit im Mäher, bei einer Zeitumstellung, ein (1) aus (0 Standard).
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 aktuelle Mä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 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 Zonen werden vom Modul bereit gestellt, sie stehen in keinem Zusammenhang mit Husquvarnas Work Areas
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.
mowingAreaHull attr <name> mowingAreaHull <use button 'mowingAreaHullToAttribute' to fill the attribute>
Enthält die berechneten Hüllenkooordinaten als JSON String und wird gesetzt durch den Button 'mowingAreaHullToAttribute' unterhalb der angezeigten Karte.
Das gespeicherte Hüllenpolygon wird wie die anderen Grenzen angezeigt.
Mit dem Designattribut 'hullResolution' kann die Anzahl der Brechungen beeinflusst werden ℕ, Default 40.
Das Hüllenpolygon wird berechnet wenn das Designattribute gesetzt ist, hullCalculate="1" und es mehr als 50 Wegpunkte der Aktivität MOWING gibt.
Die Berechnung wird beim Laden oder Wiederladen der Website ausgeführt.
Die Berechnung stopt wenn dieses Attribut gesetzt ist und startet wenn das Attibut gelöscht wird.
Das Attribut weekdaysToResetWayPoints sollte auf - und das Designattribut mowingPathUseDots sollte auf "1" gesetzt werden.
Befindet sich ein Polygon im Attribut, besteht die Möglichkeit das Polygon anzupassen.
Das Designattribut hullSubtract kann auf eine natürliche Zahl {ℕ} gesetzt werden, die angibt in welcher Rekursionstiefe Polygonpunkte aus der Menge der Wegpunkte entfernt werden.
Das reduziert Ausreißer im Randbereich der vom Polygon umschlossenen Fläche.
Wenn hullSubtract="" gesetzt wird, dann wird der Button 'Subtract Hull' entfernt.
mowerPanel attr <name> mowerPanel <html code>
Zeigt HTML Kode unterhalb der Karte z.B. für ein Panel mit Kurzbefehlen.
Das command Attribut beinhaltet den Mäherbefehl, ohne set <name> command="Start 210" steht für set <name> Start 210
Eine Direktive als Kommentar in der ersten Zeile erlaubt die Positionierung:
<!-- ON_TOP --> zeigt das Panel über der Karte an.
Das Panel muss in einem div-Element eingebettet sein das ein HTML-Attribut data-amc_panel_inroom=<"1"|""> enthält. Das Panel wird in der Raumansicht, z.B. bei uiTable, weblink, usw., angezeigt wenn der Wert "1" ist und versteckt falls der Wert "" ist, s. Bsp.
Beispiel:
<style>
.amc_panel_button {height:50px; width:150px;}
.amc_panel_div {position:relative; left:348px; top:-330px; z-index: 2; width:150px; height:1px}
</style>
<div class="amc_panel_div" data-amc_panel_inroom="1" >
<button class="amc_panel_button" command="Start 210" >Start für 3 1/2 h</button>
<button class="amc_panel_button" command="Pause" >Pause bis auf Weiteres</button>
<button class="amc_panel_button" command="ResumeSchedule" >Weiter nach Plan</button>
<button class="amc_panel_button" command="ParkUntilNextSchedule" >Parken bis nächsten Termin</button>
<button class="amc_panel_button" command="ParkUntilNextSchedule" >Parken bis auf Weiteres</button>
</div>
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_inactiveReason - Gründe für Inaktivität: NONE, PLANNING, SEARCHING_FOR_SATELLITES.
mower_wsEvent - Events der Websocketverbindung (status-event, positions-event, settings-event)
mower_errorCode - last error code
mower_errorCodeTimestamp - last error code time stamp
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
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.
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 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:
"Es ist immer nur eine Suche und die ist nach trackTitle, trackAlbum, trackArtist möglich, so wie in der SoundTouch App" (FHEM Forum Beitrag)
"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
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)
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
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.
enable
Aktiviert den internen Task zum regelmäßigen Abrufen des Status des TV und weiterer Informationen.
disable
Unterbricht den internen Task zum regelmäßigen Abrufen des Status des TV und weiterer Informationen.
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:
Aufruf mit leerem Eingabefeld. Auf dem TV sollte eine PIN zur Registrierung erscheinen.
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
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
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.
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
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.
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.
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
Der Wert -1 kennzeichnet einen fehlerhaften Wert seitens des DWD
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
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.
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:
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
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
<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:
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.
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:
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).
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!
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:
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:
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
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.
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.
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
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
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
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:
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:
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:
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-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
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
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.
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 (nur beim device Unknown)
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 (nur beim device Unknown)
damit können die events bei unbekannten Nachrichten deaktiviert werden
model (Länge = Codelänge + 2)
Länge = 8 (nur Temp)
- ABS700
- TCM97...
Länge = 10 (nur Temp)
- Mebus (CRC)
- AURIOL
- Auriol_Z31743B (Lidl Version: 09/2013), Z31743B IAN 91838 (checksum)
Länge = 12
- Eurochron
- W174 (CRC)
- TCM21.... (CRC)
- W044 (CRC)
- W132 (CRC)
- GT_WT_02 (CRC)
- Type1 (CRC)
- Prologue (beginnt mit 9)
- NC_WS (beginnt mit 5)
- Rubicson (3. Stelle ist 8)
- PFR_130 (CRC)
- KW9010 und KW9015(CRC)
- Auriol_IAN
- Mebus7312 (7. Stelle ist F)
- AURIOL nur Temp (Lidl Version: 09/2013), Z31743B IAN 91838
- TCM218943
Länge = 14
- NX7674 (CRC)
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.
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).
strangeTempDiff DIFFVAL
Falls gesetzt, werden nur solche Temperaturen akzeptiert, wo der
Unterschied bei der gemeldeten Temperatur zum letzten Wert weniger als
DIFFVAL ist.
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".
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.
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
default
Standardformat (siehe unten)
full
entspricht custom="$U $M $A $T1-$T2 $S $CA $L"
text
entspricht custom="$T1 $S"
human
same as custom={ human($t1,$t2,$S) } - human() ist eine eingebaute Funktion, die das Ereignis in einem verdichteten menschenlesbaren Format ausgibt
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:
variable
Bedeutung
$t1
Startzeit in Sekunden
$T1
Startzeit entsprechend Zeitformat
$t2
Endzeit in Sekunden
$T2
Endzeit entsprechend Zeitformat
$a
Alarmzeit in Sekunden
$A
Alarmzeit entsprechend Zeitformat
$d
Dauer in Sekunden
$D
Dauer in menschenlesbarer Form
$S
Zusammenfassung
$L
Ortsangabe
$CA
Kategorien
$CL
Klassifizierung
$DS
Beschreibung
$U
UID
$M
Modus
\, (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|tomorrow
zeigt 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
$text
ein mehrzeiliger String in menschenlesbarer Darstellung (Vorgabe)
@texts
ein Array von Strings in menschenlesbarer Darstellung
@events
ein 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:
Format
Beschreibung
Beispiel
SSS
Sekunden
3600
SSSs
Sekunden
3600s
HH:MM
Stunden:Minuten
02:30
HH:MM:SS
Stunden:Minuten:Sekunden
00:01:30
D:HH:MM:SS
Tage:Stunden:Minuten:Sekunden
122:10:00:00
DDDd
Tage
100d
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.
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:
upcoming
Weder die Alarmzeit noch die Startzeit des Kalendereintrags ist erreicht.
alarm
Die Alarmzeit ist überschritten, aber die Startzeit des Kalender-Ereignisses ist noch nicht erreicht.
start
Die Startzeit ist überschritten, aber die Ende-Zeit des Kalender-Ereignisses ist noch nicht erreicht.
end
Die 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:
calname
Name des Kalenders
modeAlarm
Ereignisse im Alarm-Modus
modeAlarmOrStart
Ereignisse im Alarm- oder Startmodus
modeAlarmed
Ereignisse, welche gerade in den Alarmmodus gewechselt haben
modeChanged
Ereignisse, welche gerade in irgendeiner Form ihren Modus gewechselt haben
modeEnd
Ereignisse im Endmodus
modeEnded
Ereignisse, welche gerade vom Start- in den Endmodus gewechselt haben
modeStart
Ereignisse im Startmodus
modeStarted
Ereignisse, welche gerade in den Startmodus gewechselt haben
modeUpcoming
Ereignisse 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:
code
Beschreibung
$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:
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:
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!.
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.
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
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
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
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,...)
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
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:
get
DFP cmd byte
Parameter
Kommentar
storage
0x3F
status
0x42
volume
0x43
equalizer
0x44
noTracksRootUsb
0x47
noTracksRootSd
0x48
currentTrackUsb
0x4B
currentTrackSd
0x4C
noTracksInFolder
0x4E
Verzeichnisnummer
1-99
noFolders
0x4F
Set
Alle Kommandos die vom DFP angeboten werden haben ein zugehöriges set Kommando:
set
DFP cmd byte
Parameter
Kommentar
next
0x01
-
prev
0x02
-
trackNum
0x03
Nummer der Datei im Wurzelverzeichnis
zwischen 1 und 3000 (es wird die Reihenfolge verwendet in der die Dateien angelegt wurden!)
volumeUp
0x04
-
volumeDown
0x05
-
volumeStraight
0x06
Lautstärke
0-30
equalizer
0x07
Name des Equalizermodus
Normal, Pop, Rock, Jazz, Classic, Bass
repeatSingle
0x08
-
storage
0x09
SD oder USB
sleep
0x0A
-
vom DFP nicht unterstützt, danach muss er stromlos gemacht werden um wieder zu funktionieren
wake
0x0B
-
vom DFP nicht unterstützt, aber wahrscheinlich vom FN-M22P
reset
0x0C
-
play
0x0D
-
spielt die aktuelle Datei
play
0x0F, 0x12, 0x13, 0x14
Eine durch Leerzeichen getrennte Liste von Dateien die nacheinander abgespielt werden
Das korrekte DFP Kommando wird automatisch ermittelt.
Dateien können über den Namen ihres Readings, den Readingwert oder Verzeichnisname/Dateinummer angegeben werden. Siehe set readFiles
pause
0x0E
-
amplification
0x10
Verstärkungsstufe
0-31
repeatRoot
0x11
on, off
MP3TrackNum
0x12
Dateinummer
1-3000, aus dem Verzeichnis MP3
intercutAdvert
0x13
Dateinummer
1-3000, aus dem Verzeichnis ADVERT
folderTrackNum
0x0F
Verzeichnisnummer Dateinummer
Verzeichnis: 1-99, Datei: 1-255
folderTrackNum3000
0x14
Verzeichnisnummer Dateinummer
Verzeichnis: 1-15, Datei: 1-3000
stopAdvert
0x15
-
stop
0x16
-
repeatFolder
0x17
Verzeichnisnummer
1-99
shuffle
0x18
-
repeatCurrentTrack
0x19
on, off
DAC
0x1A
on, 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 (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.
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
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.
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.:
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.
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:
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).
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.
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
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
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
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.
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 Ausgabeformatierungback
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:
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.
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)
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.
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)
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.
# 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:
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")
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:
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"}}
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"}}
Zeitangaben nach Zeitraster ausgerichtet alle X Stundenback
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.
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>
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
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)
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
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:
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.
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.
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 Triggerback
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ührungsteilback
Anwendungsbeispiel: Wenn ein Taster betätigt wird, soll Lampe1 mit dem aktuellen Zustand der Lampe2 geschaltet werden:
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:
Ersatzwert für nicht existierende Readings oder Statusback
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>]
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.
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
Anwendungsbeispiel: Benachrichtigung "Waschmaschine fertig", wenn Verbrauch mindestens 5 Minuten unter 2 Watt (Perl-Code wird in geschweifte Klammern gesetzt):
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):
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.
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 Kommandoback
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
Wiederholung von Befehlsausführungback
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.
Zwangspause für das Ausführen eines Kommandos seit der letzten Zustandsänderungback
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 Kommandosback
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
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 Bedingungback
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
Löschen des Waittimers nach einer Wiederholung einer Bedingungback
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
"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 Devicesback
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 Statuserkennungback
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.
Triggerung durch selbst ausgelöste Eventsback
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.
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 Änderungback
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.
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 Schaltfunktionback
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.
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
Die Syntax des uiState-Attributes entspricht der des uiTable-Attributes. Die definierte Tabelle wird jedoch in der Statuszeile des DOIF-Devices dargestellt.
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 Befehlenback
Der Ausführungsteil kann jeweils ausgelassen werden.
Anwendungsbeispiel: Aktuelle Außenfeuchtigkeit im Status
Anpassung des Status mit Hilfe des Attributes stateback
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))}
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.
<definition>: Beliebiger Perlausdruck ergänzt um DOIF-Syntax in eckigen Klammern. Angaben in eckigen Klammern wirken triggernd und aktualisieren das definierte Reading.
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]")
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.
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.
<definition>: Beliebiger Perlausdruck ergänzt um DOIF-Syntax in eckigen Klammern. Angaben in eckigen Klammern wirken triggernd und aktualisieren das definierte Reading.
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 Neustartback
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 FHEMback
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
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-Zweigesback
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.
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.
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.
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 Bedingungback
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
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.
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.
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.
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.:
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:
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.
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.
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
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
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
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.
Zeit in Sekunden als direkte Angabe oder Berechnung, ein Doppelpunkt trennt die Timer der Bedingungsweige, ein Komma die Timer der Befehlssequenzen eines Bedingungszweiges.
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.
Wartezeit in Sekunden als direkte Angabe oder Berechnung, für ein unmittelbar wiederholtes Zutreffen einer Bedingung.
Löschen des Waittimersattr <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.
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
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.
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.
fügt einem Reading einen optionalen Widgetmodifier und eine Werteliste (, getrennt) hinzu. setList, widgetOverride, und webCmd
User Interface für DOIFattr <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.
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.
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> specialLog1 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> DOIFtoolsExecuteDefinition1 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> DOIFtoolsExecuteSave1, 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> DOIFtoolsEventMonitorInDOIF1, 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> DOIFtoolsEMbeforeReading1, 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> DOIFtoolsHideGetSet1, verstecken der Set- und Get-Shortcuts. Default 0.
attr <name> DOIFtoolsNoLookUp <0|1> DOIFtoolsNoLookUp1, es werden keine Lookup-Fenster in DOIFtools geöffnet. Default 0.
attr <name> DOIFtoolsNoLookUpInDOIF <0|1> DOIFtoolsNoLookUpInDOIF1, es werden keine Lookup-Fenster in DOIF geöffnet. Default 0.
attr <name> DOIFtoolsHideStatReadings <0|1> DOIFtoolsHideStatReadings1, verstecken der stat_ Readings. Das Ändern des Attributs löscht eine bestehende Event-Aufzeichnung. Default 0.
attr <name> DOIFtoolsEventOnDeleted <0|1> DOIFtoolsEventOnDeleted1, 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> DOIFtoolsMenuEntry1, 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.
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
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.
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.
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.
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%
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 ältere Standardinstallation der MySQL/MariaDB Datenbank sah 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;
Beachten sie den Schlüssel utf8 wenn der MySQL Datenbanktreiber benutzt wird (MODEL = MYSQL).
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);
MariaDB
: 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");
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=</path/socket-file>",
# user => "fhemuser",
# password => "fhempassword",
# # optional enable UTF-8 support
# # (full UTF-8 support exists from DBD::mysql version 4.032, but installing version 4.042 is highly suggested)
# utf8 => 1,
# # optional enable communication compression between client and server
# compression => 1
#);
####################################################################################
#
## for MariaDB
####################################################################################
#%dbconfig= (
# connection => "MariaDB:database=fhem;host=<database host>;port=3306",
# # if want communication over socket-file instead of TCP/IP transport, use:
# # connection => "MariaDB:database=fhem;mariadb_socket=</path/socket-file>",
# user => "fhemuser",
# password => "fhempassword",
# # optional enable communication compression between client and server
# compression => 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".
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:
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> 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.
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.
<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.
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.
0 -
Synchroner Log-Modus. Die zu loggenden Daten werden nur kurz im Cache zwischengespeichert und sofort
in die Datenbank geschrieben. (default)
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!
Ä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 !
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.
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.
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.
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.
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.
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.
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 und diese vor dem Loggen in die Datenbank verändert werden.
Nur 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.
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.
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.
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)
headerLinks [text|icon]
Die im Kopfbereich des Devices angebotenen Links zur Ausführung verschiedener Funktionen werden entweder als Icon (default)
oder Text dargestellt. Die Textsprache wird durch das global Attribut 'language' festgelegt.
insertMode [1|0]
Schaltet den Insert-Modus der Datenbankschnittstelle um.
0 -
Die Daten werden als Array der Datenbankschnittstelle übergeben. (default)
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.
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, $EVENT, $READING, $VALUE
(Wert des Readings) und $UNIT (Einheit des Readingswert) zugegriffen und diese vor dem Loggen in die Datenbank
verändert werden.
Nur Lesezugriff besteht auf $LASTTIMESTAMP, $LASTVALUE und $NAME (Name des DbLog Devices).
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.
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.
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.
Ä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
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":
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:
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
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:
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)
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:
Zusammengefasst sind die zur Steuerung dieser Funktion relevanten Attribute:
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").
# 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:
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").
# 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.
: 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>
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>
Führt mehrere Set-Befehle sequentiell in einer definierbaren Reihenfolge aus.
Die Befehle und bestimmte veränderbare Attribute, die für die Befehle relevant sind, werden in einem
Hash übergeben. In einem Script, z.B. einem at-Device, kann auch eine Variable übergeben werden die einen definierten
Hash enthält.
Die auszuführenden Befehle (Schlüssel cmd) und die dafür zu setzenden Attribute werden über Schlüssel im
übergebenen Hash definiert. Die Festlegung der Abarbeitungsreihenfolge der Befehle erfolgt über den Befehl-Index im
Hash der nicht '0' sein darf.
Hinweis: Alle oben genannten Attribute werden vor Ausführung jedes Befehl-Index gelöscht.
Die im jeweiligen Befehl-Index angegebenen Attribute werden vor Ausführung des Schrittes definiert gesetzt.
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:
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.
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.
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
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.
Führt ein beliebiges benutzerspezifisches Kommando aus.
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.
Ein SQL-Statement kann durch Angabe seines Listenindex ausgeführt werden:
set <name> sqlCmd ckey:<Index> (e.g. ckey:4)
Der Listenindex "ckey:latest" führt das zuletzt in der SQL History gespeicherte Statement aus.
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
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
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>
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.
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.
Löscht den Inhalt der current-Tabelle.
Es werden keine Limitierungen, z.B. durch die Attribute timestamp_begin,
timestamp_end, device oder reading ausgewertet.
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).
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
Erstellung der Funktionsergebnisse in Zeitscheiben innerhalb des Selektionszeitraumes.
no
- keine Aggregation (default)
minute
- die Funktionsergebnisse werden pro Minute zusammengefasst
hour
- die Funktionsergebnisse werden pro Stunde zusammengefasst
day
- die Funktionsergebnisse werden pro Kalendertag zusammengefasst
week
- die Funktionsergebnisse werden pro Kalenderwoche zusammengefasst
month
- die Funktionsergebnisse werden pro Kalendermonat zusammengefasst
year
- die Funktionsergebnisse werden pro Kalenderjahr zusammengefasst
autoForward
Wenn aktiviert, werden die Ergebnisreadings einer Funktion in ein oder mehrere Devices
übertragen.
Die Definition erfolgt in der Form:
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.
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/)
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.
# "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.
# "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)
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.
Der Teil zwischen dem ersten und letzten doppelten Unterstrich ('__') 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.
Die Readings können als regulärer Ausdruck angegeben werden.
(default: state)
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).
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.
Ü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:
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:
# 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:
# 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:
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
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):
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 OpsMode<Value>DoorbellAudio : Eine Auswahl der Audio Dateien die im Unterverzeichnis abgelegt sind welches durch das Attribut "AudioFileDir" definert ist. Diese Datei wird entsprechend konvertiert und an den DoorBird gesendet und im abgespielt sobald die Klingeltaste betätigt wird.
set OpsMode<Value>DoorbellRelay : Eine Auswahl der installierten Relays die aktiviert weerden, sobald die Klingeltaste betätigt wird.
set OpsMode<Value>MotionAudio : Wine Auswahl der Audio Dateien die im Unterverzeichnis abgelegt sind welches durch das Attribut "AudioFileDir" definert ist. Diese Datei wird entsprechend konvertiert und an den DoorBird gesendet und im abgespielt sobald der Bewegungssensor getriggert wird.
set OpsMode<Value>MotionRelay : Eine Auswahl der installierten Relays die aktiviert weerden, sobald der Bewegungssensor getriggert wird.
set Receive_Audio <Path> : Empfängt eine Audio-Datei und speichert diese. Es benötigt einen Dateipfad zu der Audio-Datei zu dem der User "fhem" Schreibrechte braucht (z.B.: /opt/fhem/audio).
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
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.
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: onEGPM-Einträge werden automatisch mit dem set-command erstellt.
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.
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.
: Finanzielle Reserve basierend auf den Abschlagszahlungen die jeden Monat an den Elektrizitätsversorger gezahlt werden. Bei negativen Werten ist von einer Nachzahlung auszugehen.
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:
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
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.
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)
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)
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)
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)
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.
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.
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.
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.:
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)
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)
Definiert eine eigene Zuordnung der externen Anschlussbezeichnung (Reading: external_connection) zu eigenen Bezeichnungen. Die Zuordnung erfolgt über eine Hash-Struktur.
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)
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.
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)
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)
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)
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.:
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)
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")
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)
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)
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))
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.:
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").
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)
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)
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.
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.
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:
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)
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.
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.
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).
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).
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.
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)
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-KommandoshowPhonebookIds angezeigt werden.
Standardmäßig ist diese Funktion deaktiviert (alle Telefonbücher werden eingelesen)
Benutzername für den TR064- oder einen anderen webbasierten Zugang. Die aktuellen FritzOS Versionen verlangen zwingend einen Benutzername für das Login.
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
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)
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)
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.
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.
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.
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