DevelopmentState: Unterschied zwischen den Versionen
Akw (Diskussion | Beiträge) (Kurze Einführung in die STATE-Variable) |
(Aktualisierung auf <source>-Tag und korrekte Prüfung auf neue Definition) |
||
Zeile 10: | Zeile 10: | ||
Beispiel: | Beispiel: | ||
<source 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); | |||
[...]; | |||
} | |||
</source> | |||
[[Kategorie:Development]] | [[Kategorie:Development]] |
Version vom 19. Oktober 2016, 14:42 Uhr
Der Default-Status eines Gerätes wird in FHEM durch die interne Variable STATE dargestellt. Dieser wird beispielsweise von FHEMWEB oder von dem list-Befehl angezeigt.
Dieser 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 commandref.html#readingFnAttributes)
- Falls das Reading state existiert, wird diesen in STATE übernommen.
Wenn ein Modulautor ein bestimmtes Reading in STATE vorgelegen 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);
[...];
}