Hallo zusammen,
ich schreibe aktuell an einem Modul für Belkin-Swicthes (siehe http://forum.fhem.de/index.php/topic,17115.msg249996.html?PHPSESSID=16r9uhb97ilt3fk8r5ad45iga7#msg249996).
Leider ist die Dokumentation zur Modul-Entwicklung nicht so präzise, dass ich klar erkennen kann was ich tun muss, um den Device-Status auszulesen und in FHEM zu hinterlegen.
Eine Recherche in anderen Modulen führte zu dem Ansatz
<..snip..>
sub
wemo_Initialize($)
{
my ($hash) = @_;
$hash->{StateFn} = "wemo_StateFn";
$hash->{SetFn} = "wemo_Set";
$hash->{DefFn} = "wemo_Define";
$hash->{AttrList} = "remote_ip";
#print "##### Init #####\n";
#print Dumper $hash;
}
<...snip...>
sub
wemo_StateFn($$$$)
{
my ($hash, $tim, $vt, $val) = @_;
my $name = $hash->{NAME};
my $remote_ip = AttrVal($name, "remote_ip", '127.0.0.1');
my $wemo = WebService::Belkin::WeMo::Device->new(ip => $remote_ip, db => '/etc/belkin.db');
my $wemoval = $wemo->getBinaryState();
$hash->{READINGS}{$vt}{VAL} = $wemoval;
$hash->{READINGS}{$vt}{TIME} = TimeNow();
Log3 $hash, 4, "$tim Readings: $vt Value: $wemoval";
return undef;
}
<...snip...>
Die ..._StateFn wird aber anscheinend nie aufgerufen.
Fragen
- Welche Modul-Funktion muss ich für das Setzen des Status verwenden?
- Muss ich in der fhem.cfg noch etwas angeben?
- Wie kann ich den Status zyklisch prüfen/setzen (falls er per iPhone App geändert wurde)?
Viele Grüße
Peter
ZitatWelche Modul-Funktion muss ich für das Setzen des Status verwenden?
readingsSingleUpdate (oder ..Begin/Bulk/End..), mit dem ReadingNamen "state".
Das wird automatisch zu STATE, es sei denn, der Benutzer modifiziert es mit stateFormat
ZitatMuss ich in der fhem.cfg noch etwas angeben?
Nein.
ZitatWie kann ich den Status zyklisch prüfen/setzen (falls er per iPhone App geändert wurde)?
Wessen Status? Falls es um das Belkin geht, z.Bsp. im DefineFn per InternalAt Polling konfigurieren.
StateFn wird aufgerufen, falls das Modul zu den "setstate XXX " FHEM-Befehlen was sagen will.
Diese werden ueblicherweise im fhem.state abgelegt, und beim Starten ausgefuehrt.
Vielleicht sollte das irgendjemand mal hier dokumentieren, da fehlt die StateFn nämlich völlig:
http://www.fhemwiki.de/wiki/DevelopmentModuleIntro
ok, Danke für die Infos. Bin jetzt einen Schritt weiter, habe nur noch ein Problem mit der "Perl-Belkin-WeMo-API-master" und Timeouts beim Aufruf der API.
Zwischenstand:
- Beim FHEM-Start wird automatisch der in fhem.save abgelegte Befehl 'setstate WemoTest off' ausgeführt.
- 'setstate' führt dazu, dass im zugehörigen Modul des Devices die ..._StateFn aufgerufen wird. Dabei wird der letzte Status übergeben.
- In der ..._StateFn kann ich den alten Status setzen oder den aktuellen Device-Status auslesen und an FHEM zurückmelden.
Viele Grüße
Peter