DevelopmentState: Unterschied zwischen den Versionen
(Aktualisierung auf <source>-Tag und korrekte Prüfung auf neue Definition) |
Drhirn (Diskussion | Beiträge) K (Rechtschreibfehler korrigiert, Link zur CommandRef durch Vorlage Link2CmdRef ersetzt) |
||
(2 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
Der Default-Status eines Gerätes wird in FHEM durch die interne Variable ''STATE'' dargestellt. | Der Default-Status eines Gerätes wird in FHEM durch die interne Variable '''''STATE''''' dargestellt. Diese wird beispielsweise von [[FHEMWEB]] oder von dem [[list]]-Befehl angezeigt. | ||
Der ''STATE'' sollte jedoch von Modulautoren nicht direkt gesetzt werden. Stattdessen ermittelt FHEM den Wert folgendermaßen: | |||
# Falls das Attribut ''stateFormat'' gesetzt ist, wird dieses ausgewertet und das Ergebnis in den ''STATE'' geschrieben. ( | # Falls das Attribut ''stateFormat'' gesetzt ist, wird dieses ausgewertet und das Ergebnis in den ''STATE'' geschrieben. (siehe {{Link2CmdRef|Anker=readingFnAttributes|Lang=de|Label=readingFnAttributes}} in der CommandRef) | ||
# Falls das Reading ''state'' existiert, wird | # Falls das Reading ''state'' existiert, wird dessen Wert in ''STATE'' übernommen. | ||
Wenn ein Modulautor ein bestimmtes Reading in ''STATE'' | Wenn ein Modulautor ein bestimmtes Reading in ''STATE'' vorbelegen möchte, so kann er dies mit dem ''stateFormat''-Attribut tun. | ||
Dies sollte aber nur in der ''define'' Funktion des Moduls geschehen, damit der User die Möglichkeit hat, das Attribut anschließend anzupassen. | Dies sollte aber nur in der ''define'' Funktion des Moduls geschehen, damit der User die Möglichkeit hat, das Attribut anschließend anzupassen. | ||
Beispiel: | Beispiel: | ||
< | <syntaxhighlight lang="perl"> | ||
sub MYMODULE_Define($$) | sub MYMODULE_Define($$) | ||
{ | { | ||
Zeile 19: | Zeile 19: | ||
# prüfen, ob eine neue Definition angelegt wird | # prüfen, ob eine neue Definition angelegt wird | ||
if($init_done && !defined($hash->{OLDDEF}) | if($init_done && !defined($hash->{OLDDEF})) | ||
{ | { | ||
# setzen von stateFormat | # setzen von stateFormat | ||
Zeile 37: | Zeile 37: | ||
[...]; | [...]; | ||
} | } | ||
</ | </syntaxhighlight> | ||
[[Kategorie:Development]] | [[Kategorie:Development]] |
Aktuelle Version vom 14. Juni 2018, 12:32 Uhr
Der Default-Status eines Gerätes wird in FHEM durch die interne Variable STATE dargestellt. Diese wird beispielsweise von FHEMWEB oder von dem list-Befehl angezeigt.
Der STATE sollte jedoch von Modulautoren nicht direkt gesetzt werden. Stattdessen ermittelt FHEM den Wert folgendermaßen:
- Falls das Attribut stateFormat gesetzt ist, wird dieses ausgewertet und das Ergebnis in den STATE geschrieben. (siehe readingFnAttributes in der CommandRef)
- Falls das Reading state existiert, wird dessen Wert in STATE übernommen.
Wenn ein Modulautor ein bestimmtes Reading in STATE vorbelegen möchte, so kann er dies mit dem stateFormat-Attribut tun. Dies sollte aber nur in der define Funktion des Moduls geschehen, damit der User die Möglichkeit hat, das Attribut anschließend anzupassen.
Beispiel:
sub MYMODULE_Define($$)
{
my ($hash, $def) = @_;
my @args = split("[ \t]+", $def);
my ($name, $type) = @args;
[...];
# prüfen, ob eine neue Definition angelegt wird
if($init_done && !defined($hash->{OLDDEF}))
{
# setzen von stateFormat
$attr{$name}{"stateFormat"} = "power";
}
[...];
}
sub MYMODULE_Call($$)
{
[...];
my $power = [...];
readingsBeginUpdate($hash);
readingsBulkUpdate($hash,"power",$power);
readingsEndUpdate($hash, 1);
[...];
}