DevelopmentModuleAPI: Unterschied zwischen den Versionen
|  (→Daten dauerhaft schreiben/lesen:  Hinzufügen von FileRead und FileWrite) |  (→Daten dauerhaft schreiben/lesen:  Hinzufügen von getKeyValue, setKeyValue) | ||
| Zeile 479: | Zeile 479: | ||
| |- | |- | ||
| |  style="vertical-align:top" | '''<code>$err</code>''' || Im Falle eines Fehlers beim Schreiben der Datei ist dieser Wert mit einer Fehlermeldung als Zeichenkette gefüllt. Ist der Schreibvorgang erfolgreich enthält <code>$err</code> den Wert <code>undef</code> | |  style="vertical-align:top" | '''<code>$err</code>''' || Im Falle eines Fehlers beim Schreiben der Datei ist dieser Wert mit einer Fehlermeldung als Zeichenkette gefüllt. Ist der Schreibvorgang erfolgreich enthält <code>$err</code> den Wert <code>undef</code> | ||
| |} | |||
| === setKeyValue === | |||
| <source lang="perl"> | |||
| setKeyValue($key, $value) | |||
| </source> | |||
| Die Funktion setKeyValue() speichert die Daten <code>$value</code> unter dem Schlüssel <code>$key</code> ab. Die Daten werden in einer Datei auf dem Dateisystem (oder configDB) gespeichert und sind somit persistent auch nach einen Neustart von FHEM verfügbar. Die Daten welche in <code>$value</code> enthalten sind, dürfen dabei keine Zeilenumbrüche enthalten. Sollten Daten mit Zeilenumbrüchen auf diese Weise gespeichert werden, so müssen Zeilenumbrüche durch entsprechende Mechanismen (z.B. Base64 oder das Ersetzen durch alternative Trennzeichen) eliminiert werden. | |||
| '''ACHTUNG:''' Die Daten werden im Klartext in einer Datei auf dem Dateisystem abgelegt! Sensible Daten die mit setKeyValue gespeichert werden (z.B. Passwörter, Zugangsdaten, etc.) sollten durch entsprechende Mechanismen (z.B. Verschlüsselung) unleserlich gemacht werden. | |||
| Parameter: | |||
| {| class="wikitable" | |||
| |- | |||
| ! Parameter !! Bedeutung | |||
| |- | |||
| | style="vertical-align:top" | '''<code>$key</code>''' || Der eindeutige Schlüssel als Zeichenkette unter dem die Daten abgespeichert werden soll (bspw. Definitions-Namen). Der Schlüssel darf dabei keine Zeilenumbrüche enthalten. | |||
| |- | |||
| | style="vertical-align:top" | '''<code>$value</code>''' || Die zu speichernden Daten als Zeichenkette ohne Zeilenumbruch. Die Daten dürfen dabei keine Zeilenumbrüche enthalten. | |||
| Wenn <code>$value</code> den Wert <code>undef</code> besitzt, werden zuvor gespeicherte Daten gelöscht. | |||
| |} | |||
| Rückgabewert: | |||
| {| class="wikitable" | |||
| |- | |||
| ! Rückgabe!! Bedeutung | |||
| |- | |||
| |  style="vertical-align:top" | '''<code>$error</code>''' || Im Falle eines Fehlers beim Schreiben der Daten ist dieser Wert mit einer Fehlermeldung als Zeichenkette gefüllt. Ist der Schreibvorgang erfolgreich enthält <code>$error</code> den Wert <code>undef</code> | |||
| |} | |||
| === getKeyValue === | |||
| <source lang="perl"> | |||
| getKeyValue($key) | |||
| </source> | |||
| Die Funktion getKeyValue() gibt Daten, welche zuvor per <code>setKeyValue()</code> gespeichert wurden, zurück. | |||
| Parameter: | |||
| {| class="wikitable" | |||
| |- | |||
| ! Parameter !! Bedeutung | |||
| |- | |||
| | style="vertical-align:top" | '''<code>$key</code>''' || Der eindeutige Schlüssel als Zeichenkette unter dem die Daten gespeichert wurden. | |||
| |} | |||
| Rückgabewert: | |||
| {| class="wikitable" | |||
| |- | |||
| ! Rückgabe!! Bedeutung | |||
| |- | |||
| |  style="vertical-align:top" | '''<code>$error</code>''' || Im Falle eines Fehlers beim Lesen der Daten ist dieser Wert mit einer Fehlermeldung als Zeichenkette gefüllt. Ist der Schreibvorgang erfolgreich enthält <code>$error</code> den Wert <code>undef</code> | |||
| |- | |||
| |  style="vertical-align:top" | '''<code>$value</code>''' || Die Daten, welche unter dem gegebenen Schlüssel <code>$key</code> hinterlegt sind. Wenn keine Daten zu dem Schlüssel existieren, besitzt <code>$value</code> den Wert <code>undef</code> | |||
| |} | |} | ||
Version vom 5. März 2016, 11:08 Uhr
 Bitte beachten: letztendlich entscheidend ist immer der Perl-Code, Unstimmigkeiten sollten im Fhem-Forum angemerkt (oder hier berichtigt) werden!
Bitte beachten: letztendlich entscheidend ist immer der Perl-Code, Unstimmigkeiten sollten im Fhem-Forum angemerkt (oder hier berichtigt) werden!
Please note: in the end it is always the Perl code itself that is relevant; please report errors and omissions in the fhem forum (or correct them here)!
Dieses Seite soll eine Beschreibung der für Moduleentwickler verfügbaren Funktionen enthalten, um für Modulentwickler
- Wiederverwendbare Routinen leichter identifizieren zu können
- Durch Wiederverwendung mehr Einheitlichkeit zu erzeugen
- Aufwand zu verringern
- Bei Änderungen auch betroffene Module leichter identifiziern zu können
Natürlich hat diese Seite keinen Anspruch auf Vollständigkeit und jeder ist aufgefordert mitzuarbeiten, sobald er beim Stöbern über einen Funktion stolpert, die auch andere interessieren könnte.
Command handling
AnalyzeCommand
AnalyzeCommand ermöglicht das Parsen und die Ausführung eines FHEM-Befehls, wie in FHEMWEB im Kommandoeingabefeld enthalten.
- AnalyzeCommand ($cl, $cmd)
| Parameter | Bedeutung | 
|---|---|
| $clmight be undef | Devicehash für die Ausführung des Kommandos in einem spezifischen Kontext eines Devices (Quelle des Befehles z.B. für Berechtigungsprüfung) | 
| $cmdmandatory | Kommandos, die ausgeführt werden sollen. Beispiel: 
 | 
AnalyzeCommandChain
AnalyzeCommandChain ermöglicht das Parsen und die Ausführung von FHEM-Befehlen, wie in FHEMWeb im Kommandoeingabefeld enthalten.
- AnalyzeCommandChain ($cl, $cmds)
| Parameter | Bedeutung | 
|---|---|
| $clmight be undef | Devicehash für die Ausführung des Kommandos in einem spezifischen Kontext eines Devices (Quelle des Befehles z.B. für Berechtigungsprüfung) | 
| $cmdsmandatory | Kommandos, das ausgeführt werden soll, durch ; getrennt. Beispiel: 
 | 
Diverse
ReplaceSetMagic
ReplaceSetMagic
- ($err, @result) = ReplaceSetMagic($hash, $nsplit, @elements)
| Parameter | Bedeutung | 
|---|---|
| $hashmight be undef | Devicehash für die Ausführung des Kommandos in einem spezifischen Kontext eines Devices (Quelle des Befehles z.B. für Berechtigungsprüfung) | 
| $nsplitZahl | Begrenzung für den Split des Ergebnisstrings nach erfolgter Ersetzung (siehe elements) | 
| @elementsmandatory | Parameterarray mit Strings Die Elemente des übergebenen Arrays werden in einem String getrennt duch Leerzeichen zusammengefasst. | 
| Rückgabe | Bedeutung | 
|---|---|
| $err | Im Fehlerfall: Fehlermeldung sonst undef | 
| @result | Ergebnis der Ersetzung von Readings und Perl Aufrufen im Parameterarray. Die Elemente des übergebenen Arrays werden in einem String, getrennt durch Leerzeichen, zusammengefasst und im Rückgabewert wieder in ein Array (unter Berücksichtigung von nsplit als Begrenzung für den perl-Split-Aufruf) zerlegt. | 
Time / Timestamp
FmtDateTimeRFC1123
- $timestampGMT = FmtDateTimeRFC1123($time)
| Parameter | Bedeutung | 
|---|---|
| $timemight be undef | Zeitangabe wie sie von der timeFunktion zurückgegeben wird
 | 
| Rückgabe | Bedeutung | 
|---|---|
| $timestampGMT  | Zeitstempel GMT (Greenwich Mean Time) wie er in RFC1123 beschrieben wird. Diese werden zum Beispiel bei http verwendet. 
 | 
FmtDateTime
- $timestamp = FmtDateTime($time)
| Parameter | Bedeutung | 
|---|---|
| $time | Zeitangabe wie sie von der timeFunktion zurückgegeben wird | 
| Rückgabe | Bedeutung | 
|---|---|
| $timestamp  | Zeitstempel in lokaler Zeitzone im Format 
 | 
TimeNow
- $timestamp = TimeNow( )
| Rückgabe | Bedeutung | 
|---|---|
| $timestamp  | Zeitstempel der aktuellen Uhrzeit in lokaler Zeitzone im Format 
 | 
Readings
Die verschiedenen Funktionen zu Readings sind hier beschrieben:
DevelopmentIntroduction und DevelopmentModuleIntro
Timer
InternalTimer
InternalTimer($timestamp, $functionName, $args)
InternalTimer($timestamp, $functionName, $args, $waitIfInitNotDone)
Die Funktion InternalTimer() ermöglicht das verzögerte Ausführen von einer bestimmten Funktion zu einem späteren Zeitpunkt. Die übergebene Funktion $functionName wird dabei zum Zeitpunkt $timestamp mit dem Parameter $arg ausgeführt.
| Parameter | Bedeutung | 
|---|---|
| $timestamp | Angabe eines UNIX-Timestamp, wann der Timer ausgeführt werden soll (bspw: gettimeofday() + 30um in 30 Sekunden etwas zu starten) | 
| $functionName | Der Name der Funktion welche ausgeführt werden soll zum angegebenen Zeitpunkt (bspw: "MODULNAME_GetStatus") | 
| $arg | Der Übergabeparameter welchen die genannte Funktion zum Ausführungszeitpunkt erhalten soll. Typischerweise ist das meistens $hash. | 
| $waitIfInitNotDone | VORSICHT! NUR BENUTZEN WENN MAN ES WIRKLICH BENÖTIGT. Wenn dieser Wert auf 1 ist und die Funktion ausgeführt wird, während FHEM startet ($init_done == 0), dann wird InternalTimer direkt solange warten bis der angegebene Zeitpunkt erreicht ist, UND DIE FUNKION DIREKT AUSFÜHREN. Das bedeutet, dass InternalTimer() dann solange läuft, bis der Zeitpunkt erreicht ist und die angegebene Funktion ausgeführt wurde. (Standardwert: 0) | 
RemoveInternalTimer
RemoveInternalTimer($arg)
Die Funktion RemoveInternalTimer löscht möglicherweise noch anstehende Timer welche mit dem Übergabeparameter $arg gescheduled sind.
| Parameter | Bedeutung | 
|---|---|
| $arg | Der Übergabeparameter nach wem gesucht wird. Alle Timer die mit diesem Übergabeparameter noch anstehen, werden dabei gelöscht. | 
Datenabfrage-/auslesen
ReadingsVal
ReadingsVal($name, $reading, $default)
Die Funktion ReadingsVal() gibt den inhaltlichen Wert des Readings $reading der Definition $name zurück. Sollte das gewünschte Reading nicht existieren, wird $default zurückgegeben.
Parameter:
| Parameter | Bedeutung | 
|---|---|
| $name | Der Definitions-Namen aus dem das gewünschte Reading ausgelesen werden soll. | 
| $reading | Der Name des Readings welcher ausgelesen werden soll. | 
| $default | Der Standardwert der zurückgegeben werden soll, sofern das Reading nicht existiert. | 
Rückgabewert:
| Rückgabe | Bedeutung | 
|---|---|
| $value | Inhalt des gewünschten Readings oder $default, wenn es nicht existiert. | 
ReadingsTimestamp
ReadingsTimestamp($name, $reading, $default)
Die Funktion ReadingsTimestamp() gibt den Zeitstempel des Readings $reading der Definition $name zurück. Es handelt sich hierbei um den Zeitpunkt an dem das Reading zuletzt gesetzt/aktualisiert wurde. Sollte das gewünschte Reading nicht existieren, wird $default zurückgegeben.
| Parameter | Bedeutung | 
|---|---|
| $name | Der Definitions-Namen aus dem der Zeitstempe für das gewünschte Reading ausgelesen werden soll. | 
| $reading | Der Name des Readings für welches der Zeitstempel ausgelesen werden soll. | 
| $default | Der Standardwert der zurückgegeben werden soll, sofern das Reading nicht existiert. | 
Rückgabewert:
| Rückgabe | Bedeutung | 
|---|---|
| $timestamp | Zeitstempel des gewünschten Readings in lokaler Zeitzone im Format 
 | 
ReadingsNum
ReadingsNum($name, $reading, $default)
Die Funktion ReadingsNum() extrahiert einen numerischen Wert aus dem Reading $reading der Definition $name und gibt diesen zurück. Dabei werden Zeichenketten wie z.B. Einheiten eliminiert und nur die eigentliche Zahl (Ganzzahl- oder Fließkommazahl) zurückgegeben. Sollte das gewünschte Reading nicht existieren, wird $default zurückgegeben.
| Parameter | Bedeutung | 
|---|---|
| $name | Der Definitions-Namen aus dem ein numerischer Wert für das gewünschte Reading ausgelesen werden soll. | 
| $reading | Der Name des Readings aus dem ein numerischer Wert ausgelesen werden soll. | 
| $default | Der Standardwert der zurückgegeben werden soll, sofern das Reading nicht existiert. | 
Rückgabewert:
| Rückgabe | Bedeutung | 
|---|---|
| $num | Numerischer Wert des gewünschten Readings oder $default, wenn es nicht existiert. | 
AttrVal
AttrVal($name, $attribute, $default)
Die Funktion AttrVal() gibt den aktuell konfigurierten Inhalt des Attribut $attribute der Definition $name zurück. Sollte das gewünschte Attribut nicht existieren bzw. nicht gesetzt sein, wird $default zurückgegeben.
Parameter:
| Parameter | Bedeutung | 
|---|---|
| $name | Der Definitions-Namen aus dem das gewünschte Attribut ausgelesen werden soll. | 
| $attribute | Der Name des Attributs, dessen Wert ausgelesen werden soll. | 
| $default | Der Standardwert der zurückgegeben werden soll, sofern das Attribut nicht existiert. | 
Rückgabewert:
| Rückgabe | Bedeutung | 
|---|---|
| $value | Inhalt des gewünschten Attributs oder $default, wenn es nicht existiert. | 
InternalVal
AttrVal($name, $internal, $default)
Die Funktion InternalVal() gibt den aktuellen Inhalt eines Internals $internal der Definition $name zurück. Sollte das gewünschte Internal nicht existieren bzw. nicht gesetzt sein, wird $default zurückgegeben.
Parameter:
| Parameter | Bedeutung | 
|---|---|
| $name | Der Definitions-Namen aus dem das gewünschte Internal ausgelesen werden soll. | 
| $internal | Der Name des Internals, dessen Wert ausgelesen werden soll. | 
| $default | Der Standardwert der zurückgegeben werden soll, sofern das Internal nicht existiert. | 
Rückgabewert:
| Rückgabe | Bedeutung | 
|---|---|
| $value | Inhalt des gewünschten Internal oder $default, wenn es nicht existiert. | 
Value
Value($name)
Die Funktion Value() gibt den aktuellen Status Definition $name zurück. Sollte die gewünschte Definition nicht existieren bzw. nicht gesetzt sein, wird "" (Leerstring) zurückgegeben.
Parameter:
| Parameter | Bedeutung | 
|---|---|
| $name | Der Definitions-Namen aus dem der Status ausgelesen werden soll. | 
Rückgabewert:
| Rückgabe | Bedeutung | 
|---|---|
| $value | Status der gewünschten Definition | 
OldValue
OldValue($name)
Die Funktion OldValue() gibt den Status der Definition $name zurück BEVOR der aktuelle Status aufgrund eines Events gesetzt wurde. Sollte die gewünschte Definition nicht existieren bzw. nicht gesetzt sein, wird "" (Leerstring) zurückgegeben.
Parameter:
| Parameter | Bedeutung | 
|---|---|
| $name | Der Definitions-Namen aus dem der Status ausgelesen werden soll. | 
Rückgabewert:
| Rückgabe | Bedeutung | 
|---|---|
| $value | vorherige Status der gewünschten Definition | 
OldTimestamp
OldValue($name)
Die Funktion OldTimestamp() gibt den Zeitpunkt der letzten Statusänderung der Definition $name als Zeichenkette zurück. Sollte die gewünschte Definition nicht existieren bzw. nicht gesetzt sein, wird "" (Leerstring) zurückgegeben.
Parameter:
| Parameter | Bedeutung | 
|---|---|
| $name | Der Definitions-Namen aus dem der Status ausgelesen werden soll. | 
Rückgabewert:
| Rückgabe | Bedeutung | 
|---|---|
| $timestamp | Zeitstempel in lokaler Zeitzone im Format 
 | 
Daten dauerhaft schreiben/lesen
FileRead
FileRead($filename)
FileRead($param)
Die Funktion FileRead() liest den Inhalt der Datei $filename ein und gibt diesen als ein zeilenweises Array zurück. In Verwendung mit configDB wird die Datei standardmäßig aus der Datenbank gelesen. Um im Falle von configDB dennoch auf das Dateisystem zugreifen zu können muss als Übergabeparameter ein Hash $param gesetzt werden in dem ein spezieller Wert den Zugriff auf das Dateisystem forciert.
Parameter:
| Parameter | Bedeutung | 
|---|---|
| $filename | Der Dateisystempfad der Datei die eingelesen werden soll. | 
| $param | Um im Falle der Nutzung von configDB den Zugriff auf das lokale Dateisystem zu erzwingen muss ein Parameter-Hash wiefolgt übergeben werden: 
 Die Variable  | 
Rückgabewert:
| Rückgabe | Bedeutung | 
|---|---|
| $err | Im Falle eines Fehlers beim Lesen der Datei ist dieser Wert mit einer Fehlermeldung als Zeichenkette gefüllt. Ist der Lesevorgang erfolgreich enthält $errden Wertundefoder""(Leerstring). | 
| @content | Der Inhalt der gewünschten Datei als zeilenweises Array. Im Falle eines Fehlers beim Lesen trägt dieses Array den Wert undef | 
FileWrite
FileWrite($filename, @content)
FileWrite($param, @content)
Die Funktion FileWrite() schreibt den übergebenen Inhalt @content in die Datei $filename. In Verwendung mit configDB wird die Datei standardmäßig in die Datenbank geschrieben. Um im Falle von configDB dennoch auf das Dateisystem zugreifen zu können muss als Übergabeparameter ein Hash $param gesetzt werden in dem ein spezieller Wert den Zugriff auf das Dateisystem forciert.
Parameter:
| Parameter | Bedeutung | 
|---|---|
| $filename | Der Dateisystempfad der Datei in welche der Inhalt geschrieben werden soll. | 
| $param | Um im Falle der Nutzung von configDB den Zugriff auf das lokale Dateisystem zu erzwingen muss ein Parameter-Hash wiefolgt übergeben werden: 
 Die Variable  | 
Rückgabewert:
| Rückgabe | Bedeutung | 
|---|---|
| $err | Im Falle eines Fehlers beim Schreiben der Datei ist dieser Wert mit einer Fehlermeldung als Zeichenkette gefüllt. Ist der Schreibvorgang erfolgreich enthält $errden Wertundef | 
setKeyValue
setKeyValue($key, $value)
Die Funktion setKeyValue() speichert die Daten $value unter dem Schlüssel $key ab. Die Daten werden in einer Datei auf dem Dateisystem (oder configDB) gespeichert und sind somit persistent auch nach einen Neustart von FHEM verfügbar. Die Daten welche in $value enthalten sind, dürfen dabei keine Zeilenumbrüche enthalten. Sollten Daten mit Zeilenumbrüchen auf diese Weise gespeichert werden, so müssen Zeilenumbrüche durch entsprechende Mechanismen (z.B. Base64 oder das Ersetzen durch alternative Trennzeichen) eliminiert werden.
ACHTUNG: Die Daten werden im Klartext in einer Datei auf dem Dateisystem abgelegt! Sensible Daten die mit setKeyValue gespeichert werden (z.B. Passwörter, Zugangsdaten, etc.) sollten durch entsprechende Mechanismen (z.B. Verschlüsselung) unleserlich gemacht werden.
Parameter:
| Parameter | Bedeutung | 
|---|---|
| $key | Der eindeutige Schlüssel als Zeichenkette unter dem die Daten abgespeichert werden soll (bspw. Definitions-Namen). Der Schlüssel darf dabei keine Zeilenumbrüche enthalten. | 
| $value | Die zu speichernden Daten als Zeichenkette ohne Zeilenumbruch. Die Daten dürfen dabei keine Zeilenumbrüche enthalten. Wenn  | 
Rückgabewert:
| Rückgabe | Bedeutung | 
|---|---|
| $error | Im Falle eines Fehlers beim Schreiben der Daten ist dieser Wert mit einer Fehlermeldung als Zeichenkette gefüllt. Ist der Schreibvorgang erfolgreich enthält $errorden Wertundef | 
getKeyValue
getKeyValue($key)
Die Funktion getKeyValue() gibt Daten, welche zuvor per setKeyValue() gespeichert wurden, zurück.
Parameter:
| Parameter | Bedeutung | 
|---|---|
| $key | Der eindeutige Schlüssel als Zeichenkette unter dem die Daten gespeichert wurden. | 
Rückgabewert:
| Rückgabe | Bedeutung | 
|---|---|
| $error | Im Falle eines Fehlers beim Lesen der Daten ist dieser Wert mit einer Fehlermeldung als Zeichenkette gefüllt. Ist der Schreibvorgang erfolgreich enthält $errorden Wertundef | 
| $value | Die Daten, welche unter dem gegebenen Schlüssel $keyhinterlegt sind. Wenn keine Daten zu dem Schlüssel existieren, besitzt$valueden Wertundef | 
Fehlt noch
- Log
- Log3
- IsDisabled
- IsDummy
- IsIgnored
- IsIoDummy
- InternalTimer
- RemoveInternalTimer
- configDBUsed
- devspec2array
- FmtTime
- EvalSpecials
- DoTrigger
- InternalVal
- ReadingsVal
- ReadingsNum
- ReadingsTimestamp
- Value
- OldValue
- OldTimestamp
- AttrVal
- readingsBeginUpdate
- readingsBulkUpdate
- readingsEndUpdate
- readingsSingleUpdate
- FileRead
- FileWrite
- getUniqueId
- getKeyValue
- setKeyValue
- Debug