DevelopmentState: Unterschied zwischen den Versionen

Aus FHEMWiki
(Kurze Einführung in die STATE-Variable)
 
(Aktualisierung auf <source>-Tag und korrekte Prüfung auf neue Definition)
Zeile 10: Zeile 10:
Beispiel:  
Beispiel:  


sub MYMODULE_Define($$)
<source lang="perl">
{
sub MYMODULE_Define($$)
my ($hash, $def) = @_;
{
my @args = split("[ \t]+", $def);
my ($hash, $def) = @_;
my ($name, $type) = @args;
my @args = split("[ \t]+", $def);
[...];
my ($name, $type) = @args;
'''$attr{$name}{"stateFormat"} = "power";'''
[...];
  [...];
  }
# prüfen, ob eine neue Definition angelegt wird
if($init_done && !defined($hash->{OLDDEF})
sub MYMODULE_Call($$)
{
{
# setzen von stateFormat
[...];
$attr{$name}{"stateFormat"} = "power";
my $power = [...];
}
readingsBeginUpdate($hash);
'''readingsBulkUpdate($hash,"power",$power);'''
[...];
readingsEndUpdate($hash, 1);
}
[...];
}


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:

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