Inhalt
Einleitung
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:
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
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>..."
FHEM Befehlstypen
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 Bermerkungen 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.
Geräte-Spezifikation (devspec)
Die Befehle
attr,
set,
get, usw.
attr,
deleteattr,
displayattr,
delete,
get,
list,
set,
setreading,
setstate,
trigger
können eine komplexere Gerätespezifikation als Argumente enthalten,
die auch eine Anzahl von Geräten betreffen kann. Eine
Gerätespezifikation kann folgendes sein:
- ein einzelner Gerätename. Dies ist der Normalfall
- eine durch Komma(,) getrennte Liste von Gerätenamen
- ein regulärer Ausdruck
- ein NAME=WERT Ausdruck, wo NAME ein "Internal" Wert wie TYPE ist, ein
Reading-Name oder ein Attribut. WERT ist ein regulärer Ausdruck.
Um die Bedingung zu negieren, sollte NAME!=WERT verwendet werden.
- 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 TYPE=FS20 STATE
Bemerkungen:
- die Spezifikation kann keine Leerzeichen enthalten.
- falls ein Gerätename exakt dem Spezifikation entspricht, dann werden
keine reguläre Ausdrücke oder Filter ausgewertet.
- zuerst wird die durch Komma getrennte Spezifikation abgearbeitet, dann
folgen die regulären Ausdrücke und die Filter
- die Befehlszeile kann die selbe Gerätebezeichnung mehrfach enthalten
z.B.: "set lamp3,lamp3 on". Lamp3 wird hier zwei Mal
eingeschalten.
- um Strukturen mit komplexeren Anforderungen zu realisieren lesen Sie
bitte den Abschnitt zu structure.
Attribute
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
- 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.
- comment
Fügt einen beliebigen Kommentar hinzu.
- 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.
- 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.
- 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.
- 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.
- 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.
Beispiele:
attr store eventMap on:open off:closed
attr store eventMap /on-for-timer 10:open/off:closed/
set store open
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.
- 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". 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 nicht 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.
- 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.
- userReadings
Komma getrennte Liste von benutzerdefinierten Readings. Jede Definition hat
folgendes Format:
<reading>[:<trigger>] [<modifier>] { <perl code> }
Diese benutzerdefinierte Readings werden bei jeder Aktualisierung der
Gerätereadings gesetzt, indem das spezifizierte perl
code { <perl code> }
ausgeführt wird, und
dessen Wert dem Reading zugewiesen wird.
Falls <trigger> spezifiziert ist, dann findet diese Ausführung
nur dann statt, falls einer der aktualisierten Readings dem regexp
<trigger> entspricht (matched).
Beispiele:
attr myEnergyMeter userReadings energy
{ ReadingsVal("myEnergyMeter","counters.A",0)/1250.0;; }
attr myMultiMeter userReadings
energy1:counters.A {ReadingsVal("myMultiMeter","counters.A",0)/1250.0},
energy2:counters.B {ReadingsVal("myMultiMeter","counters.B",0)/1250.0}
<modifier>
kann die folgenden Werte haben:
- none: als ob man es gar nicht spezifiziert hätte.
- difference: das Reading wird auf die Differenz zw. dem aktuellen und
dem vorherigen Wert gesetzt.
- differential: das Reading wird auf die Differenz zw. dem aktuellen und
dem vorherigen Wert, geteilt durch die Sekunden zw. der aktuellen Zeit
und der letzten Auswertung, sekundengenau. Kein Wert wird berechnet,
falls der Unterschied unter eine Sekunde liegt.
- integral: das Gegenteil von differential. Das Ergebnis wird um das
Produkt aus der Zeit-Differenz und der Durschnittswert der letzten zwei
Readings erhöht.
result += (time - timeold) * (oldval + value) / 2
- offset: wenn der aktuellen Wert kleiner als der vorherige Wert ist
wird der vorherige Wert zum Reading addiert. Das Reading kann dann als
offset verwendet werden um einen Zähler der durch Sromverlust
zurückgesetzt wird zu korrigieren.
- monotonic: wenn die Differenz zw. dem aktuellen und dem vorherigen
Wert positiv ist wird diese Differenz zum Reading addiert. Damit
lässt sich von einem Zähler der bei Stromverlust
zurückgesetzt wird ein monoton wachsender Zähler
ableiten.
Beispiel:
attr myPowerMeter userReadings power differential
{ ReadingsVal("myPowerMeter","counters.A",0)/1250.0}
Achtung:
- Falls difference oder differential spezifiziert ist, dann werden
für die Berechnung ältere Werte benötigt, d.h. der Wert
wird frühestens beim zweiten Änderung gesetzt.
- der Name der definierten Readings besteht aus alphanumerischen
Zeichen, Unterstrich (_) und Minus-Zeichen (-).
Allgemeine Attribute
Die folgenden lokalen Attribute werden von mehreren Geräte 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.
?, help
?
help
Sie erhalten eine Liste aller Befehle mit einer Kurzbeschreibung jedes
Befehls.
attr
attr <devspec> <attrname> [<value>]
Dieser Befehl setzt ein Attribut für ein Gerät welches mit define definiert wurde. 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.
Beispiele:
attr global verbose 3
attr lamp room kitchen
attr lamp group lights
attr lamp loglevel 6
attr weatherstation event-on-update-reading wind,temperature,humidity
attr weatherstation event-on-change-reading israining
attr weatherstation event-on-change-reading israining,state
attr heating stateFormat Temp:measured-temp, Valve:actuator
Bemerkungen:
- Lesen Sie unter deleteattr nach um Attribute
zu löschen.
setdefaultattr
setdefaultattr [<attrname> [<value>]]
Fügt Sie ein Standardattribut hinzu. Jedem nach dieser Zuweisung definierte
Gerät wird dieses Attribut zugewiesen. Wenn kein "attrname" angegeben wird,
dann wird die Liste der Standardattribute gelöscht.
Beispiel, um das Attribut "room kitchen" und "loglevel 4" allen Lampen
zuzuweisen:
setdefaultattr room kitchen
setdefaultattr loglevel 4
define lamp1 FS20 1234 11
define lamp2 FS20 1234 12
define lamp3 FS20 1234 13
setdefaultattr
Anmerkungen:
- es gibt keine Möglichkeit, ein einzelnes Standardattribut aus der Liste
tu löschen.
define
define <name> <type> <type-specific>
Definiert ein Gerät. Sie müssen Geräte einrichten um sie zu beeinflussen (z.B.
das Kommando set on/off auszuführen). Gleichfalls ist das Logfile besser
lesbar wenn es z.B.
"lamp off" anstatt "Device 5673, Button 00, Code 00 (off)" als Text enthält.
Geben Sie an der Befehlszeile "define <name> ?" ein, um eine Liste der
verfügbaren "types" zu erhalten.
Nach der Durchführung das globale Ereignis "MODIFIED" wird generiert.
Jedes Gerät besitzt unterschiedliche hinzufügbare Argumente per Definition,
lesen Sie sich bitte die zu dem jeweiligen Gerät gehörenden Abschnitte durch.
delete
delete <devspec>
Löscht etwas was mit dem define Befehl erstellt
worden ist.
Siehe den Abschnitt über Geräte-Spezifikation
für Details der <devspec>.
Nach dem löschen, wird das globale Ereignis "DELETED" erzeugt.
Beispiel:
deleteattr
deleteattr <devspec> [<attrname>]
Löscht entweder ein einzelnes Attribut (siehe Abschnitt attr ) oder alle Attribute eines Gerätes (falls
kein <attrname> angegeben wird).
Siehe den Abschnitt über Geräte-Spezifikation
für Details der <devspec>.
Nach der Durchführung das globale Ereignis "DELETEATTR" wird generiert.
Beispiele:
deleteattr lamp follow-on-for-timer
deleteattr lamp
deletereading
deletereading <devspec> <readingname>
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.
Mit größter Sorgfalt verwenden! FHEM kann abstürzen, falls
man lebenswichtige Readings entfernt.
Siehe den Abschnitt über Geräte-Spezifikation
für Details der <devspec>.
Beispiele:
deletereading mySensor temp1
deletereading mySensor temp\d+
displayattr
displayattr <devspec> [<attrname>]
Zeigt entweder den Wert eines Attributes an (falls <attrname>
spezifiziert wurde) oder alle Attribute eines Gerätes.
Siehe den Abschnitt über Geräte-Spezifikation
für Details der <devspec>.
Falls mehrere Geräte spezifiziert wurden, dann enthält die Ausgabe
den Namen der Geräte.
Beispiele:
fhem> di WEB
menuEntries AlarmOn,/fhem?cmd=set%20alarm%20on
room Misc.
fhem> di WEB room
Misc.
get
get <devspec> <type-specific>
Fragt einen Wert direkt (aktuell) vom Gerät ab und wartet auf eine
Antwort. Eine allgemeine Liste möglicher Paramter erhalten Sie mit
Siehe den Abschnitt über Geräte-Spezifikation
für Details der <devspec>.
Jedes Gerät hat unterschiedliche "get"-Parameter. Lesen Sie Details bitte im
zugehörigen Abschnitt nach.
getstate
getstate <devspec>
Gibt einen kurzen, durch Leerzeichen getrennte Statusliste für <devspec>
aus . Dies ist nützlich, um das Gerät in z.B. Cacti zu beobachten.
Beispiel:
getstate lamp
state:1
getstate fl
ack:0 actuator:2 day-temp:21.5 desired-temp:22.5 [...] measured-temp:22.9 [...]
Bemerkung: Um diesen Befehl nutzen zu können, kopieren Sie bitte die
Datei 99_getstate.pm aus dem Verzeichnis contrib/getstate/ in Ihr FHEM
Verzeichnis.
include
include <filename>
Liest (z.B. als Befehlszeile in der fhem.cfg) die in <filename> angegebene
Datei in FHEM ein und interpretiert jede Dateizeile als FHEM Befehl. Mit
dieser Hilfe werden Konfigurationsdateien modularer und erlaubt es sie z.B.
nach Räumen geordnet auftzuteilen.
inform
inform {on|off|timer|raw} [regexp]
Wenn auf "on" gesetzt und der Status eines Gerätes ändert
sich, dann wird eine Nachricht an den Client gesendet. Dieser Befehl kann von
anderen Programmen/Modulen dazu benutzt werden, eine Hinweisnachricht zu
erhalten.
Die Option "timer" fügt der Nachricht
einen Zeitstempel hinzu. Hinweis: Dieser Befehl erleichtert Ihnen die bessere
Kontrolle in notify oder FileLog
, wann welche Ereignisse erzeugt wurden.
list
list [devspec] [value]
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, der von ( DEF, TYPE, usw) oder reading
(actuator, measured-temp) für alle Geräte die in devspec angegeben
sind.
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%
[...]
modify
modify <name> <type-dependent-options>
Dieser Befehl wird benutzt, um Definitionen zu verändern. Er ist
nützlich, um at oder notify
Definitionen zu verändern. Wenn Sie einen Wert einer an Definition
verändern, dann wird nur der für die Zeit zuständige Teil
geändert. Im Falle der Veränderung einer Definition vom Typ
"notify" wird nur der regex Teil geändert. Alle anderen
Werte (Stati, Attribute, etc) bleiben erhalten.
After modify, the global event "MODIFIED" will be generated.
Nach der Durchführung das globale Ereignis "MODIFIED" wird generiert.
Beispiel:
define lampon at 19:00 set lamp on
modify lampon *19:00
modify lampon 19:00 set lamp on-for-timer 16
quit
quit
Dieser Befehl wird in einer TCP/IP Session benutzt um die Client-Sitzung zu
beenden.
Wird dieser Befehl in einem Skript benutzt, wird das abarbeiten des Skriptes
beendet.
Beispiel:
reload
reload <module>
Reload the given module from the module directory. It is a convenient way to
test modules whithout restarting the program.
Example:
rename
rename <oldname> <newname>
Benennt ein Gerät von <oldname> in <newname>,
einschliesslich der Attribute, um. Das globale Ereignis "RENAMED"
wird erstellt, Lesen Sie bitte den Abschnitt "notify" durch um
Details zu erfahren.
Beispiel:
rename FHT_1234 fht.kitchen
rereadcfg
rereadcfg [fhem-config-file]
Liest entweder die aktuelle Konfigurationsdatei oder die angegebene Datei
ein.
Der Ablauf ist dabei wie folgt: Zuerst wird das statefile gesichert. Dann werden alle Geräte
gelöscht. Dann wird die aktuelle Konfigurationsdatei (oder die
angegebene Datei) eingelesen zuletzt wird das statefile neu eingelesen.
Wenn dieser Ablauf abgeschlossen ist, wird das globale REREADCFG Ereignis
ausgelöst. Alle existierenden Verbindungenwerden bis zum
"rereadcfg" Ereignis getrennt.
Beipiel:
save
save [<configfile>]
Sichert zuerst das statefile und dann das
configfile. Wenn ein Parameter angegeben wird dieser
anstelle der allgemeinen Konfigurationsdatei benutzt.
Hinweise:
- Der Befehl speichert nur "definitions" und
"attributes" aber keine (set/get) Befehle die vorher Teil der
Konfigurationsdatei waren. Wenn Sie solche Befehle nach der
Initialisierung (z.B. FHTcode)
benötigen,dann müssen Sie sie mit notify
triggern wenn das INITIALIZED Ereignis eintritt.
- Der Befehl "save" versucht Kommentarzeilen (Zeilen die
mit # beginnen) und "include"-Zeilen zu erhalten, aber arbeitet
nicht korrekt wenn FHEM für diese Dateien keine Schreibrechte
besitzt.
set
set <devspec> <type-specific>
Der Befehl setzt Geräteparameter/sendet Signale an ein Gerät. Sie
erhalten eine Liste verfügbarer Parameter wenn Sie folgendes eingeben:
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.
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.
- off-till <timedet>
siehe on-till.
- 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.
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
setreading
setreading <devspec> <reading> <value>
Der Befehl setzt das Reading <reading> auf den Wert <value> ohne
Signale an das betroffene Gerät zu senden, generiert aber Ereignisse und
die übliche eventMap und stateFormat Umwandlung wird auch
durchgeführt.
Siehe den Abschnitt über Geräte-Spezifikation
für Details der <devspec>.
Beispiel:
setreading lampe state on
Achtung: setreading generiert kein Event für ein Gerät X, falls es
aus einem notify für Gerät X aufgerufen wurde. In so einem Fall
könnte man auf "sleep 0.1; setreading X Y Z" ausweichen.
setstate
setstate <devspec> <value>
Der Befehl setzt den STATE Eintrag des Ger&aauml;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:
shutdown
shutdown [restart]
Der Befehl fährt den Server herunter (nach dem sichern aller Gerätestati). Er triggert das global:SHUTDOWN
Ereignis. Mit der optionalen Parameter restart startet FHEM danach neu.
Beispiel:
shutdown
shutdown restart
trigger
trigger <devspec> <event>
Generiert das Ereignis <event>, was z.Bsp. ein notify anstoßen kann, oder den FileLog zum
protokollieren dieser Zeile bewegen kann.
Siehe den Abschnitt über Geräte-Spezifikation
für Details der <devspec>.
Beispiel:
sleep
sleep <sec> [quiet]
Wartet für die angegebene Anzahl von Millisekunden.
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: sleep gefolgt von weiteren Befehlen und aufgerufen in
at/notify/etc blockiert die Abarbeitung von FHEM nicht.
version
version [filter]
Gibt die Versionsinformation von fhem.pl und aller geladenen Module aus. Mit
der optionalen Parameter kann man die Ausgabe filtern.
Beispiel der Ausgabe:
# $Id: fhem.pl 3405 2013-07-11 19:46:39Z rudolfkoenig $
# $Id: 00_CUL.pm 3237 2013-06-01 17:15:59Z rudolfkoenig $
# $Id: 10_CUL_HM.pm 3378 2013-07-02 16:57:27Z martinp876 $
global
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
Set
Get
Attributes
- archivedir
- archivecmd
- 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.
- backupcmd
Sie können das Update durch Ihre eigenen Befehle/Skripts
durchführen indem Sie dieses Attribut setzen. Wenn dieses
Attribut gesetzt ist, dann startet es als ein SHELL-Befehl und erstellt
eine durch Leerzeichen getrennte Liste von Dateien/Verzeichnissen als
ein Argument zum Befehl, z.B.:
"/etc/fhem.cfg /var/log/fhem/fhem.save /usr/share/fhem/contrib
/usr/share/fhem/FHEM /usr/share/fhem/foo /usr/share/fhem/foobar
/usr/share/fhem/www"
Bemerkung: Ihr Befehl/Skript muss die Zeichenkette "backup done"
zurückgeben oder eine entsprechende Zeichenkette um
Fehlermeldungen auszugeben, damit die Zusammenarbeit mit updatefhem
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
- configfile
Enthält den Namen der FHEM Konfigurationsdatei. Wenn save
ohne Argumente aufgerufen wird dann wird die Ausgabedatei unter diesem
Dateinamen gespeichert.
- holiday2we
Wenn dieses Attribut gesetzt wurde, dann wird die $we
Variable
als "true" betrachtet, wenn der Wert der holiday
Variable zu diesem Attribut nicht "none" ist.
Beispiel:
attr global holiday2we hessen
- lastinclude
Wurde dieses Attribut gesetzt, dann wird der letzte Befehl der generierten
Konfigurationsdatei (siehe save Befehl) berücksichtigt <lastinclude-value>
Dieses Attribut ist DEPRECATED, bitte benutzen Sie notify,
mit dem INITIALIZED Ereignis um Befehle nach der Intialisierung
auszufü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
.
- modpath
Mit modpath geben Sie den Pfad zu dem Verzeichnis der FHEM
Module an. Der Pfad enhält nicht das Verzeichnis FHEM.
Durch das setzen der Attribute, wird das Verzeichnis nach Dateinamen in
der Form NN_<NAME>.pm, 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
Function mit dem Namen <NAME>_Initialize wird aufgerufen. Eine
Ausnahme bilden Module die mit der Nummer 99 im Dateinamen beginnen.
Diese sind enhalten PERL-Hilfsfunktionen. Die Module werden zur
Startzeit geladen (i.e. modpath attribute definition time).
- motd
Nachricht des Tages. Wird im Begrüßungsbildschirm von FHEM
angezeigt, oder direkt beim Start einer "telnet" Sitzung,
bevor der fhem> Prompt erscheint. Der SecurityCheck setzt motd wenn
es bisher nicht gesetzt ist. Um das zu verhindern, können sie den
Wert von motd auf "none" setzen.
motd wird auch verwendet, um Fehlermeldungen während des
fhem-Starts zu sammeln und anzuzeigen.
- 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.
- 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.
- sendStatistics
- statefile
Dieses Attribut legt den Namen der Datei fest, in die
Statusinformationen aller Geräte gespeichert werden bevor der
Server heruntergefahren wird. Falls diese Datei nicht angegeben wird, so
werden keinerlei Informationen gesichert.
- title
Das Attribut "title" wird unter dem Frontend fhemweb.pl (webpgm2) zur
Festlegung des Seitentitels benutzt..
- uniqueID
- 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.
- stacktrace
Falls gesetzt (auf 1), schreibt ins FHEM-Log zusätzlich zu jedem
"PERL WARNING" den stacktrace.
Perl specials
Wenn Sie einige Aufgaben automatisieren wollen, dann sollten Sie die Befehle
at oder
notify nutzen. Für
komplexere Aufgaben sollten Sie lieber ein SHELLl-Skiipt oder einen PERL
"oneliner" als das at/notify argument anwenden. Dieser Abschnitt gibt Ihnen
einige Tipps zur Anwendung der PERL-oneliner.
Um PERL-"oneliner" zu testen, geben Sie diese am
"telnet" Prompt (oder in der FHEMWEB Text-Eingabezeile)
eingeschlossen von geschweiften Klammern {} in einer Zeile ein. Die letzte
Beispielzeile schreibt nur etwas in die Logdatei, während das Ergebnis
der anderen Zeilen direkt auf der Webseite sichtbar ist.
Beispiele:{ "Hello" }
{ 1+3*4 }
{ `ls /etc` }
{ Log 1, "Hello" }
PERL Ausdrücke werden durch ein Semikolon (;) getrennt. In FHEM
"oneliners" müssen sie durch ein weiteres Semikolon (;;)
"escaped" (maskiert) werden
Beispiel:
{ my $a = 1+1;; Log 1, "Hello $a" }
Um FHEM-Kommandos in den PERL-Ausdrücken zu verwenden, benutzen
Sie bitte die Funktion fhem(), mit einem Textargument. Dieser Text wird als
FHEM-Kommando interpretiert.
Beispiel
{ fhem "set light on" }
define n1 notify piri:on { fhem "set light on" }
Bemerkung: Wenn diese Funktion einen wert zurück liefert, wird dieser
in der allgemeinen Logdatei gespeichert.. Benutzen sie "1" als
zweites Argument um dieses speichern zu verhindern. Sinnvoll ist dieses
Argument bei der Abfrage von Werten mittels "get...".
Notify kann auch dazu verwendet werden, um Macros manuell
auszuführen. Verwenden Sie den trigger-Befehl
um das Makro zu starten:
define MyMacro notify MyMacro { Log 1, "Hello"}
trigger MyMacro
define MacroWithArg notify MyMacro { Log 1, "Hello %"}
trigger MyMacro MyArg
Um die Verwendung von Datum und Zeitangaben zu vereinfachen, wurden die
Variablen $sec, $min, $hour, $mday, $month, $year, $wday, $yday, $isdst
für die Verwendung in PERL-"oneliners" eingeführt (s.
unter perldoc -f localtime). Ausnahmen: $month hat einen Wertebereich von 1
to 12 und $year ist korrigiert von 1900.
Weiterhin enthät $hms die Zeit in dem HH:MM:SS Format.
Die Variabe $we hat den Wert 1 wenn der abgefragte Tag auf ein Wochenende
fällt (Z.B. $wday == 0 [Sonntag] oder $wday == 6 [Samstag]), und 0
für die anderen Wochentage. Wenn man das global holida2we Attribut setzt, dann ist $we ebenfalls 1
bei Urlaubstagen.
define n2 notify piri:on { if($hour > 18 || $hour < 5) {
fhem "set light on" } }
define roll_en *07:45:00 { fhem "trigger SwitchAllRoll on" if(!$we) }
define roll_en *08:30:00 { fhem "trigger SwitchAllRoll on" if($we) }
Die follgendenHilsfunktionen sind in der Datei 99_Util.pm definiert (wird
wie jede mit 99 beginnende Datei automatisch geladen):
- min(a,b), max(a,b)
- time_str2num("YYYY-MM-DD HH:MM:SS") gibt einen numerischen Wert
zurück, der die Berechnung von Zeitdifferenzen vereinfacht
- abstime2rel("HH:MM:SS") wandelt absolute in relative Zeitangaben um
Um auf die Gerätestati/Attribute zuzugreifen benutzen Sie bitte die
folgenden Funktionen:
- Value(<devicename>)
gibt den Status eines Gerätes zurück (entsprechend dem
Ausdruck in Klammern, den Sie beim List-Befehl sehen).
- OldValue(<devicename>)
- OldTimestamp(<devicename>)
gibt den vorherigen Wert/Zeitstempel des Gerätes zurück.
-
ReadingsVal(<devicename>,<reading>,<defaultvalue>)
Gibt den Inhalt der "readings" zurück (den Inhalt der in
dem "Readings"-Abschnitt von "list device" angezeigt wird)
-
ReadingsNum(<devicename>,<reading>,<defaultvalue>)
Wie ReadingsVal, löscht aber alles, was kein Zahl ist, um den Wert
bei Berechnungen verwenden zu können.
-
AttrVal(<devicename>,<attribute>,<defaultvalue>)
Gibt die gesetzteb Attribute des Gerätes zurück
{ Value("wz") }
{ OldValue("wz") }
{ time_str2num(OldTimestamp("wz")) }
{ ReadingsVal("wz", "measured-temp", "20")+0 }
{ ReadingsTimestamp("wz", "measured-temp", 0)}
{ AttrVal("wz", "room", "none") }
-
InternalVal(<devicename>,<reading>,<defaultvalue>)
Gibt den Inhalt der "internal" zurück (den Inhalt der in
dem "Internals"-Abschnitt von "list device" angezeigt wird)
Wenn Sie das 99_SUNRISE_EL.pm Modul benutzen, haben Sie zugriff auf
folgende Funktionen:
sunset($offset, $min, $max)
sunrise($offset, $min, $max)
isday()
Der Wert von "offset" wird in Sekunden angegeben und das Format
für min/max ist "HH:MM" oderr "HH:MM:SS". isday gibt 1 zurück,
wenn die Sonne sichtbar ist und ansonsten den Wert 0.
gnuplot file syntax
Die .gplot Dateien werden ebenso von den
FHEMWEB/SVG
Modulen falls das
plotmode-Attribut auf SVG gesetzt
ist. In diesem Fall wird nur eine geringere Anzahl der .gnuplot Attribute
benutzt, und einige Linien haben eine besondere Bedeutung: Die Unterschiede
werden in diesem Kapitel erklärt. Lesen Sie bitte auch
diesen fhemwiki Eintrag
zur Erstellung von Logdateien.
Im folgenden ist eine minimale .gplot
Definition (gültig nur bei Plotmode SVG):
set terminal size <SIZE>
#FileLog 4:::
plot title 'Temperature' with lines
Die .gnuplot Datei besteht aus 3 Teilen:
- set Befehle
Folgende "sets" werden erkannt:
- terminal, nur die Größenparameter.
Dieser ist in der Regel auf <SIZE> gesetzt, welcher ersetzt wird
durch das plotsize Attribut von FHEMWEB oder
einer Weblink-Instanz.
- title
Normalerweise gesetzt auf <TL> welcher durch das Weblink title-Attribut, oder durch <Lx>, welches
wiederum vom Weblink label Attribut ersetzt
wird.
- ylabel,y2label
Linke und rechte vertikale Achsenbeschriftungen. Are also subject to
label replacement.
- yrange,y2range
Legen den Wertebereich der linken und rechten y-Achse fest.
Beispiele:
set yrange [-0.1:1.1]
set y2range [0:]
- ytics,y2tics
Beschriftung für die Werte der rechten/linken y-Achse.
Beispiele:
set ytics ("on" 0, "off" 1)
set y2tics
- #FileLog Einträge
Jede Line des Plots muss eine dazugehörige #FileLog
Zeile haben. Zur Syntax lesen Sie bitte den Abschnitt "column_spec
paragraph" von der Filelog get
Beschreibung. Beachten sie bitte, das bei SVG-Plots die erste Spalte der
Datei unbedingt im FHEM-Zeitstempelformat (YYYY-MM-DD_HH:MM:SS)
formatiert sein muss
- Plot Einträge
bestehen immer aus einem Plotbefehl und aus durch Kommata getrenne
Argumentblöcke. Jeder Argumentblock repräsentiert eine
darzustellende Linie und hat seine eigenen Paramter.
Folgende Parameter werden are anerkannt:
- axes x1y1 / x1y2
weist das Programm an die aktuelle Zeile einer der beiden Achsen (links
oder rechts) zuzuweisen.
- title
Beschriftung der Linie. Wenn man auf diesen Titel klickt, dann
ändert ein kleines Javascript-Programm den Titel auf die min/max
und last-Werte des Plots, Weiterhin erlaubt das Programm diese Linie zu
kopieren oder eine bereits kopierte Linie einzufügen (die
existierende Skalierung des Plots wird dabei nicht verändert, nur
die eingefügte Linie wird skaliert/angepasst. Andere Linien des
Plots werden zeitweise nicht angezeigt.
- with <linetype>
spezifiziert die Art der Linie. Folgende Linienarten können
verwendet werden: points, steps, fsteps, histeps and lines. Nicht
bekannte Linienarten werden als Typ "lines" dargestellt.
SVG Spezial: cubic und quadratic werden zu den SVG path Typen C und Q
gewandelt.
- ls <linestyle>
Der Linienstil stellt die erste Linie als l0 dar, die zweite
Linie als l1 und so weiter. Definiert ist dies in der svg_style.css
Datei. Darin sind zwei Sets definiert: l0-l8 and l0fill-l6fill. Das
zweite Set muss aber explizit angegeben werden. Wenn der Name des
Linienstils das Wort "fill" enthält, dann haben Plots
des Linientyps "lines" ein zusätzliches Start- und Endsegment
für eine korrekte Darstellung.
Bitte lesen sie die SVG
Spezifikationen, um Details über diese css-Datei zu erfahren.
Notiz: Wenn Sie dieses Attribut einsetzen möchten, müssen Sie
es für alle Linien (Attributblocks) im Plotbefehl spezifizieren.
- lw <linewidth>
Setzt die Linienbreite der Linie. Dieses Attribut ist veraltet. Das
entprechende Feature der css-Datei/(Attribut ls) muss verwendet werden.