FHEM Forum

FHEM - Entwicklung => Wunschliste => Thema gestartet von: JörgK am 28 Februar 2019, 19:11:22

Titel: Einbindung SD_WS_33 Sensoren mit Signalduino
Beitrag von: JörgK am 28 Februar 2019, 19:11:22
Hallo zusammen,

ich bin neu hier im Forum und beschäftige mich seit einem Monat mit FHEM und anderen Systemen für die Hausautomatisierung.
Für die Erfassung von Temperaturen und der Luftfeuchtigkeit im Haus und zum Experimentieren habe ich mich für 4 recht günstige Funksensoren von Pearl entschieden, da diese laut Google auch vom Signalduino unterstützt werden.
Ich war auch sehr überrascht und erfreut, das die SW des Signalduino und FHEM die Sensoren direkt erkannt und eingebunden haben.
So, und jetzt mein Problem: Ich habe 4 Sensoren gekauft, die aber nur durch drei Kanäle unterscheidbar sind. FHEM generiert dan Einträge für SD_WS_33_TH_1, SD_WS_33_TH_2 und SD_WS_33_TH_3.
D.h. Zwei Sensoren senden immer mit dem Selben Kanal :o

Jetzt geht es ans Eingemachte: Jeder Sender sendet auch eine ID, die bei jedem Batteriewechsel neu generiert wird. Diese wird aber von FHEM nicht ausgewertet. Da habe ich mir das PERL Skript 14_SD_WS.pm angesehen. Und im Abschnitt für das Protokoll 33 folgendes gefunden.

id => <>sub {my (undef,$bitData) = @_; return SD_WS_binaryToNumber($bitData,0,9); },
temp => sub {my (undef,$bitData) = @_; return round(((SD_WS_binaryToNumber($bitData,22,25)*256 +  SD_WS_binaryToNumber($bitData,18,21)*16 + SD_WS_binaryToNumber($bitData,1
hum => sub {my (undef,$bitData) = @_; return (SD_WS_binaryToNumber($bitData,30,33)*16 + SD_WS_binaryToNumber($bitData,26,29));  },
channel => sub {my (undef,$bitData) = @_; return (SD_WS_binaryToNumber($bitData,12,13) );  },
bat => sub {my (undef,$bitData) = @_; return substr($bitData,34,1) eq "0" ? "ok" : "low";},<--># other or modul orginal


Da der Channel im Namen des Sensors in FHEM ist, habe ich zum Channel einfach die id addiert.

id => <>sub {my (undef,$bitData) = @_; return SD_WS_binaryToNumber($bitData,0,9); },
temp => sub {my (undef,$bitData) = @_; return round(((SD_WS_binaryToNumber($bitData,22,25)*256 +  SD_WS_binaryToNumber($bitData,18,21)*16 + SD_WS_binaryToNumber($bitData,1
hum => sub {my (undef,$bitData) = @_; return (SD_WS_binaryToNumber($bitData,30,33)*16 + SD_WS_binaryToNumber($bitData,26,29));  },
channel => sub {my (undef,$bitData) = @_; return (SD_WS_binaryToNumber($bitData,12,13) + SD_WS_binaryToNumber($bitData,0,9) );  },
bat => sub {my (undef,$bitData) = @_; return substr($bitData,34,1) eq "0" ? "ok" : "low";},<--># other or modul orginal


Und siehe da, ich kann alle vier Sensoren eindeutig unterscheiden  8)

Jetzt meine Fragen:
Wäre diese oder eine ähnliche Lösung nicht für alle sinnvoll?
Wie müßte man diese Änderung einspeisen?
Denkbar ist dann auch für mich, dass FHEM eine neue ID erkennt und bei gleichzeitigen Wegfall des alten Sensors die beiden tauscht.

Leider kenne ich mich mit der Syntax von Perl überhaupt nicht aus und kenne auch die internen Abläufe in FHEM nicht. 
Vielleicht können wir hier ja eine Lösung erarbeiten :-)

Gruß Jörg
Titel: Antw:Einbindung SD_WS_33 Sensoren mit Signalduino
Beitrag von: Harst am 28 Februar 2019, 19:44:21
Bitte setze einmal für den Signalduino das Attribut longids. Das könnte die Unterscheidung bringen.

Horst
Titel: Antw:Einbindung SD_WS_33 Sensoren mit Signalduino
Beitrag von: JörgK am 02 März 2019, 09:52:50
Hallo Horst,

den Tipp habe ich mal probiert.
So richtig hat es leider nichts gebracht. Das Verhalten ist so, wie im Original ohne Anpassung der pm Datei.  :'(

Attributes
longids     SD_WS 

Jetzt bekomme ich wieder nur Sensoren 0 - 2

Gruss,
Jörg
Titel: Antw:Einbindung SD_WS_33 Sensoren mit Signalduino
Beitrag von: Harst am 02 März 2019, 10:00:47
Hallo Jörg,

Setze doch bitte kurzzeitig longids auf 1, damit klar ist, ob der Wert sd_ws richtig ist.

Horst

Edit: blöde Autokorrektur
Titel: Antw:Einbindung SD_WS_33 Sensoren mit Signalduino
Beitrag von: elektron-bbs am 02 März 2019, 11:10:52
longids:
# Keine langen IDs verwenden (Default Einstellung):
attr sduino longids 0
# Immer lange IDs verwenden:
attr sduino longids 1
# Verwende lange IDs für SD_WS07 Devices.
# Device Namen sehen z.B. so aus: SD_WS07_TH_3.
attr sduino longids SD_WS07

Du müsstest also z.B. folgendes verwenden:

attr sduino longids SD_WS_33_TH
Titel: Antw:Einbindung SD_WS_33 Sensoren mit Signalduino
Beitrag von: JörgK am 02 März 2019, 16:35:32
Ja super,

mit SD_WS_33_TH hat er es gefressen.

Jetzt stellt FHEM die ID an den Namen an. "SD_WS_33_TH_0_215"
So kann ich erstmal weitermachen.

Danke erstmal.

Jetzt ist da noch die unschöne Tatsache, dass nach einem Batteriewechsel ein neuer Name generiert wird.
Kann man das evtl. automatisch über Alias lösen?

Ich wüßte jetzt nicht, ob es in FHEM eine Programmierschnittstelle für sowas gibt oder ob man direkt in den Systemdateien rumwerkeln muss?

Es gibt immer etwas zu Verbesser  8)

Gruß,
Jörg