Initialen Device-Status im Modul abfragen/setzen

Begonnen von plin, 23 Januar 2015, 20:44:57

Vorheriges Thema - Nächstes Thema

plin

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
FHEM1 (Main) Raspi4 mit CUL, Homematic, SDUINO 433/OOK, zentrale Steuerung
FHEM2 (Keller) x86 mit CUL/hmland, IP-basierte Module
FHEM3 (Erdgeschoss) Raspi2 mit SDUINO 868/GFSK
FHEM4 (Hausanschlussraum), USV und OBIS-Modul
FHEM5 (Docker) mit FHEM2FHEM, InfluxDB

rudolfkoenig

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.

betateilchen

Vielleicht sollte das irgendjemand mal hier dokumentieren, da fehlt die StateFn nämlich völlig:

http://www.fhemwiki.de/wiki/DevelopmentModuleIntro
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

plin

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
FHEM1 (Main) Raspi4 mit CUL, Homematic, SDUINO 433/OOK, zentrale Steuerung
FHEM2 (Keller) x86 mit CUL/hmland, IP-basierte Module
FHEM3 (Erdgeschoss) Raspi2 mit SDUINO 868/GFSK
FHEM4 (Hausanschlussraum), USV und OBIS-Modul
FHEM5 (Docker) mit FHEM2FHEM, InfluxDB