DevelopmentState: Unterschied zwischen den Versionen

Aus FHEMWiki
(Aktualisierung auf <source>-Tag und korrekte Prüfung auf neue Definition)
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. Dieser wird beispielsweise von [[FHEMWEB]] oder von dem ''list''-Befehl angezeigt.
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.


Dieser sollte jedoch von Modulautoren nicht direkt gesetzt werden. Stattdessen ermittelt FHEM den Wert folgendermaßen:
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 [http://fhem.de/commandref.html#readingFnAttributes commandref.html#readingFnAttributes])
# 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 diesen in ''STATE'' übernommen.
# Falls das Reading ''state'' existiert, wird dessen Wert in ''STATE'' übernommen.


Wenn ein Modulautor ein bestimmtes Reading in ''STATE'' vorgelegen möchte so kann er dies mit dem ''stateFormat''-Attribut tun.
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:  


<source lang="perl">
<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:
[...];
[...];
}
}
</source>
</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:

  1. Falls das Attribut stateFormat gesetzt ist, wird dieses ausgewertet und das Ergebnis in den STATE geschrieben. (siehe readingFnAttributes in der CommandRef)
  2. 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);
	[...];
}