DevelopmentState: Unterschied zwischen den Versionen
Akw (Diskussion | Beiträge) (Kurze Einführung in die STATE-Variable) |
Drhirn (Diskussion | Beiträge) K (Rechtschreibfehler korrigiert, Link zur CommandRef durch Vorlage Link2CmdRef ersetzt) |
||
(3 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($$) | |||
{ | |||
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); | |||
[...]; | |||
} | |||
</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);
[...];
}