Jeelik Modul zur Einbindung von La Crosse!

Begonnen von Billy, 16 September 2013, 15:12:15

Vorheriges Thema - Nächstes Thema

JoeALLb

Zitat von: justme1968 am 09 März 2014, 16:40:38
reicht auf fhem seite eine einfaches send kommando oder ist ein pseudo device sinnvoll das man z.b. an einen temperatur und eine. feuchtigkeitssensor hängen kann und das bei werteänderungen automatisch sendet?

Ich vermute, "nur" Wertänderunen reichen nicht, da eine Wetterstation nach einer unbekannten Zeit "--" als Temperatur anzeigt.
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

justme1968

das heisst ein einfaches send kommando reicht nicht sondern man braucht ein pseudo sensor in fhem der dann automatisch bei änderungen und regelmäßig sendet.

davon kann man dann in fhem natürlich mehr als eins anlegen
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Billy

@HCS
ZitatSenden
Ich habe Senden implementiert. Die Daten, die gesendet werden, werden in FHEM korrekt empfangen und verarbeitet.
Dann sollte es eigentlich auch mit einer Wetterstation gehen. Kann das mal jemand, der eine hat, testen?

Würde gerne testen, habe die WS-9140IT Anzeigeeinheit.
Sketch ist geflasht.
Wo muss ich was eingeben?
ZitatSenden kann man, wie im vorherigen Beitrag schon beschrieben, mit b1,b2,b3,b4s
Stehe gerade auf dem Schlauch? :-\
Gruss
Billy
FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink ;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 3x HM-LC-SW1-PL2, viele ESP8266, Tasmota Scripting, Mqtt*

HCS

Ich würde die Nachricht im FHEM Modul zusammenbauen, da ist man flexibel.

Falls es aber FHEM-Dinge dramatisch vereinfacht, würde ich mich auch dazu durchringen, zusätzlich ein Command zu implementieren, das Werte entgegennimmt.
So in der Art: i,r,t10,t1,tf,h,n,ws
wobei:
i=ID
r=Datenrate
t10=temperatur 10er (40°C Offset)
t1=temperatur 1er
tf=temperatur Nachkommastelle
h=Feuchte
n=NewBatteryFag
w=WeakBatteryFlag

Datenrate beim Senden: momentan wird mit der aktuell gesetzten Datenrate gesendet (was bei toggle unglücklich ist). Ich sehe zwei Varianten, die ich einbauen könnte:
1. Ein Command, mit dem man die Sende-Datenrate (analog zur Empfangs-Datenrate) festlegt, die dann beibehalten und bei jedem b1,b2,b3,b4s verwendet wird.
2. Bei jedem Senden mitgeben, also r,b1,b2,b3,b4s wobei r die Datenrate ist

Mehrere Sensoren imitieren: Das geht jetzt schon. Die ID, die gesendet wird, ist ja in b1 und b2 drin. Somit kann von FHEM aus mit beliebigen IDs gesendet werden. Die gesendeten IDs sind korrekt, das ID-Problem gibt es nur beim Empfangen.


HCS

Zitat von: Billy am 09 März 2014, 17:09:05Wo muss ich was eingeben?
Entweder im SerialMonitor von Arduino oder von FHEM aus bei deinem LeeLink device mit raw absenden.
z.B. 149,38,34,33s
ID=20 22.2 °C  33% MIT NewBatt

oder einfach 33x um 33°C und 33% Feuchte zusenden (mit ID 20)
oder einfach 25x um 25C und 25% Feuchte zusenden (mit ID 20)

Das fett markierte musst Du eingeben

Ach ja, dass sich jetzt niemand zu sehr mit dem <n>x Command anfreundet. Das ist wirklich nur vorübergehend zum Testen.

justme1968

kein problem. ich kann das zusammenbauen ins fhem modul stecken.

ich stehe aber gerade auf dem schlauch wie die 4 bytes kodiert sind und bekomme die 149,38,34,33s nicht mit dem format der Empfangs richtung zur deckung.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

ulli

HCS: Jetzt waren wir gleich schnell. Ich hatte mich gestern auch dran gesetzt über den Jeelink auch die Daten senden zu können. :)

justme: Ich habe für den Jeelink von Haus aus die Codierung ins Jeelink.pm genommen, da meine Firmware nur Rohdaten sendet.
Du kannst folgenden Code nehmen, muss nur "invertiert" werden.


my( $addr, $type, $channel, $temperature, $humidity, $batInserted ) = 0.0;

$addr = sprintf( "%02X", ((hex(substr($dmsg,3,2)) & 0x0F) << 2) | (hex(substr($dmsg,5,2)) & 0xC0) );
$type = ((hex(substr($dmsg,5,2)) & 0xF0) >> 4); # not needed by LaCrosse Module
#$channel = 1; ## $channel = (hex(substr($dmsg,5,2)) & 0x0F);
#Log 1, "Addr: " . $addr;
  $temperature = ( ( ((hex(substr($dmsg,5,2)) & 0x0F) * 100) + (((hex(substr($dmsg,7,2)) & 0xF0) >> 4) * 10) + (hex(substr($dmsg,7,2)) & 0x0F) ) / 10) - 40;
return if($temperature >= 60 || $temperature <= -40);

$humidity = hex(substr($dmsg,9,2));
$batInserted = ( (hex(substr($dmsg,5,2)) & 0x20) << 2 );

#build string for 36_LaCrosse.pm
$dmsgMod = "OK 9 $addr ";
#bogus check humidity + eval 2 channel TX25IT
if (($humidity >= 0 && $humidity <= 99) || $humidity == 106 || ($humidity >= 128 && $humidity <= 227) || $humidity == 234) {
$dmsgMod .= (1 | $batInserted);
} elsif ($humidity == 125 || $humidity == 253 ) {
$dmsgMod .= (2 | $batInserted);
}

#$humidity = 99 if($humidity > 99 || $humidity < 0);  not longer needed
$temperature = (($temperature* 10 + 1000) & 0xFFFF);
$dmsgMod .= " " . (($temperature >> 8) & 0xFF)  . " " . ($temperature & 0xFF) . " $humidity";

Billy

Mein Test mit der WS-9140IT bringt keinen Erfolg! :(

Sowohl die Eingabe übers Terminal alsauch über FHEM mit set myJeeLink raw 149,38,34,33s
ergibt keine Anzeige.

Nur zur Sicherheit, ich setzte die Batterien in die WS-9140IT ein und setze dann den Befehl ab,
dann sollte ja was angezeigt werden? Oder fehlt da was?

Gruss
Billy
FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink ;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 3x HM-LC-SW1-PL2, viele ESP8266, Tasmota Scripting, Mqtt*

HCS

Zitat von: justme1968 am 09 März 2014, 18:02:42
ich stehe aber gerade auf dem schlauch wie die 4 bytes kodiert sind und bekomme die 149,38,34,33s nicht mit dem format der Empfangs richtung zur deckung

Alle Angaben Dezimal, sofern nicht binär

Die ersten 4 bit immer 1001
Dann 6 bit mit der Adresse
Dann ein bit NewBatteryFlag
Dann ein bit, das immer 0 ist
Dann 4 bit temperatur * 10 mit 40°C Offset
Dann 4 bit temperatur * 1
Dann 4 bit temperatur * 0.1
Dann 1 Bit WeakBattery (in unserem Fall wohl immer 0)
Dann 7 Bit Feuchte


Beispiel für ID=20 Temperatur 22.2 °C  33% Feuchte mit NewBatteryFlag:
Start: 1001 = 9
Adresse: 010100 = 20
NewBatt: 1
Unused: 0
Temperatur 10er: 0110 = 6   (20°C + 40 Offset) / 10
Temperatur 1er: 0010 = 2
Temperatur 10tel: 0010 = 2
WeakBattery: 0
Feuchte: 0100001 = 33

Alles hintereinander und als 4 Bytes gesehen:
10010101 00100110 00100010 00100001
149         38            34            33

Falls ich mich nicht vertippt oder verrechnet habe, dann sollte man es so nachvollziehen können

HCS

ulli: wenn ich Deinen quellcode richtig verstehe, was bei PERL nicht immer zutrifft, hast Du den ID-Berchnungsfehler mit übernommen (siehe mein Beitrag weiter oben)

justme: nun hast Du Quellcode und eine Beschreibung.

ulli: wir sollten uns koordinieren, dass wir nicht alles doppelt machen, war aber mein Fehler, hatte ja geschrieben, dass ich auf Deine Routine warte und konnte es dann doch nicht lassen :-)

Wir sollten dringend das "ID-Thema" klären, bevor damit zu viel Chaos entsteht.

HCS

#430
Zitat von: Billy am 09 März 2014, 18:20:33Nur zur Sicherheit, ich setzte die Batterien in die WS-9140IT ein und setze dann den Befehl ab,
dann sollte ja was angezeigt werden? Oder fehlt da was?
Ja, so sollte es gehen. Evtl. kann ja JoeALLb mal schildern was er getan hat.
Könnte noch an der Datenrate liegen.
Falls Du zwei JeeLink hast, kannst Du auch ein LaCrosse Modul in FHEM manuell mit der Adresse 14 (HEX) =  Dezimal 20 einrichten und mit dem Anderen vom serial monitor aus senden. So habe ich meine Senderoutinen getestet.

Also so:
define FakeSensor_14 LaCrosse 14
attr FakeSensor_14 filterThreshold 90
attr FakeSensor_14 room System


Ergebnis siehe Anhang

Nachtrag: was für einen Sensor hast Du den für die WS-9140IT

Billy

@HCS
ZitatNachtrag: was für einen Sensor hast Du den für die WS-9140IT
Aktuell liegt der TX29DTH-IT am Tisch und sowohl Jeelink alsauch WS-9140IT funktionieren einwandfrei!
Insofern dürfte es ja nicht an der Datenrate liegen oder sehe ich da was falsch?

Ich warte mal ob  JoeALLb noch eine andere Vorgehensweise hatte.

Danke übrigens für die Arbeit.

Billy
FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink ;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 3x HM-LC-SW1-PL2, viele ESP8266, Tasmota Scripting, Mqtt*

HCS

Ja, wenn die Station mit dem TX29DTH-IT arbeitet, ist 17.241 kbps richtig.

Vielleicht sind verschiedene Stationen unterschiedlich kritisch für das Timing oder den einleitenden Sync des Datenpakets.

@JoeALLb: gehört zu Deiner Wetterstation der 30.3156.WD dazu?

Irgendwie gewinne ich eh den Eindruck, das bei LaCross nur das, was zusammen in der Schachtel ist, voll kompatibel ist.

Was mich jetzt brennend interessieren würde: ob die 35.5019.IT Wetterstation von JoeALLb mit einem TX29DTH-IT zusammenarbeiten würde.

Billy

Die WS-9140IT ist von Technoline und arbeitet original mit Außensender TX37-IT.
Die die 35.5019.IT Wetterstation ist von TFA Dostmann.

FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink ;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 3x HM-LC-SW1-PL2, viele ESP8266, Tasmota Scripting, Mqtt*

justme1968

anbei eine erste version des LaCrosse moduls das senden kann:

set <device> send [<temperature> [<humidity>]]

wenn die parameter nicht angegeben sind dann werden die aktuell als readings vorhandenen temperatur und humidity werte gesendet.

weiss jemand wie oft mindestens gesendet werden muss damit das display nicht -- anzeigt ?

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968