Event auslösen in eigenem Modul

Begonnen von tam, 14 Mai 2014, 20:23:38

Vorheriges Thema - Nächstes Thema

tam

Hallo,
ich habe ein das WUE Modul von ELV an den Raspberry Pi angeschlossen und versuche dafür ein kleines Modul zu schreiben, welches signal von einer Fernbedienung erkennt.

Werte Empfangen und im Log ausgeben funktioniert soweit, jedoch weiß ich nicht wie ich ein Event für notify auslöst.
Ich kann dazu nichts konkretes finden, oder ich versteh die zusammenhänge nicht so richtig.

in der config habe ich das so definiert:

#remote
define WUEFS20 WUEFS20 /dev/ttyAMA0

define WUEFS20_BT_3 WUEFS20 1114


define NStehlampe notify (Stehlampe|WUEFS20_BT_3) {\
Log 1, "Value of bt3".$value{WUEFS20_BT_3};;\
if ("%" ne "off") {\
system "sudo python /home/pi/socketsender/intertechnoPy_helper.py 1 0 1 >> $currlogfile 2>&1 &";;\
}\
else {\
system "sudo python /home/pi/socketsender/intertechnoPy_helper.py 1 0 0 >> $currlogfile 2>&1 &";;\
}\
Log 1, "notify wird ausgeführt mit @ %";;\
}


Was muss ich in der Modul_Read-Funktion machen, damit NStehlampe das notify bekommt.

Vielen Dank schonmal für die Hilfe!

Grüße

betateilchen

Du musst Deinem Modul die Funktion readingsSingleUpdate() verwenden um z.B. das Reading "state" zu beschreiben.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

tam

hi,
danke für schnelle Antwort!



       #Log 1, "". Dumper(\$hash);
        my $def = $modules{WUEFS20}{defptr}{"$address"};
        # Log 1, "". Dumper(\$def);
       
       
        if($command == 0x00){
            readingsSingleUpdate($hash,"state","off", 0);
           
        }else{
            readingsSingleUpdate($hash,"state","on", 1);
        }


Ich habe das jetzt mal so ausprobiert, aber ich sehe nicht, dass das notify ausgelöst wird? ist das so richtig?
Und wie gebe ich an, dass das signal auch von dem $def (Quellccode) stammt?


betateilchen

readingsSingleUpdate() löst genau dann einen Event aus, wenn der letzte Aufrufparameter eine 1 ist.

Der Name Deines auslösenden Device steckt übrigens in %hash (genauer: in $hash->{NAME} ;)

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

tam

#4
Yeah, jetzt funktioniert es.
Musste es aber so machen: (Liegt aber wahrscheinlich an meinem Modul)

   #Log 1,  " buffer: " . $hash->{buffer};
        Log 1,  " houseCode: " . $houseCode;
        Log 1,  " Adress: " . $address;
        Log 1,  " command: " . $command;
        Log 1,  " time: " . $timer;
       
        my $def = $modules{WUEFS20}{defptr}{"$address"};
       
        if($command == 0){
            readingsSingleUpdate($def,"state","off", 1);
           
           
        }elsif($command==17){
            readingsSingleUpdate($def,"state","on", 1);
           
        }else{}


Muchas Gracias!

Puschel74

Hallo,

und auch hier.

Wenn die Frage gelöst ist bitte den Beitrag entsprechend markieren damit andere sehen das die Frage gelöst wurde.
Danke.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

tam

ok, merk ich mir.
Doch wie mach ich das? Oder hast du das jetzt schon gemacht?