Dekodierung TFA-Wetterstation 35.1077, ATMEGA, RFM69

Begonnen von HaraldP, 06 März 2021, 16:39:04

Vorheriges Thema - Nächstes Thema

HaraldP

Wer seine Daten von der genannten Wetterstation in fhem nutzen will, der hat meines Wissens bisher noch keinen passenden Funkdekoder. Die Station sendet im 868MHz-Bereich, aber mit OOK. Einen Dekoder habe ich in
https://www.mikrocontroller.net/topic/514103#new
veröffentlicht. Man kann ihn für fhem anpassen.
Harald
CUL auf RPi, 3 MAX HT + 1 MAX WT(Wohnzimmer); 1 MAX HT+ mit 1x MAX HT(Küche); 1 MAX HT+ mit 1x MAX HT(Schlafzimmer);  1 MAX HT(Bad); 1 Max HT(Bastelzimmer)

Ralf9

ZitatDie Station sendet im 868MHz-Bereich, aber mit OOK
Sollte eigentlich auch problemlos vom Signalduino empfangen werden können.
Der Aufwand den Funksender 30.3152 ins 14_SD_WS.pm fhem Modul einzubauen sollte überschaubar sein.

Falls jemand den Funksender 30.3152 und einen Signalduino hat, bitte mal die empfangenen raw Nachrichten posten.

Gruß Ralf
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

HaraldP

Mit dem Signalduino habe ich mich bisher nicht befaßt. Hier ist das Signal aber nicht Pulslängen codiert. Man muß nach einer bestimmten Zeit nach einer positiven Flanke den Pegel auswerten.
CUL auf RPi, 3 MAX HT + 1 MAX WT(Wohnzimmer); 1 MAX HT+ mit 1x MAX HT(Küche); 1 MAX HT+ mit 1x MAX HT(Schlafzimmer);  1 MAX HT(Bad); 1 Max HT(Bastelzimmer)

Ronny2510

Hallo zusammen!

Ich habe die Wetterstation TFA 35.1077.54.S2 mit Thermo/Hygro-, Wind- und Regensensor.

Ich würde die auch gerne in Fhem benutzen können.


Ich bin mir nicht ganz sicher, ob das hier jetzt die gewünschten Raw-Daten sind, das sind die Werte aus der Logfile mit Verbose 4:


2022.05.17 18:36:29 4: signalduino1: Read, msg: MU;P0=-12992;P1=1458;P2=-973;P3=492;D=0123232321212123232123232121212121212123212121212121212323212121212123212323212123212323212123212123212323;CP=3;R=0;
2022.05.17 18:36:29 4: signalduino1: Parse_MU, Fingerprint for MU protocol id 8 -> TX3 Protocol matches, trying to demodulate
2022.05.17 18:36:29 4: signalduino1: Parse_MU, Fingerprint for MU protocol id 9 -> weather matches, trying to demodulate
2022.05.17 18:36:29 4: signalduino1: Parse_MU, Fingerprint for MU protocol id 34 -> QUIGG | LIBRA | Mandolyn | Pollin ISOTRONIC matches, trying to demodulate
2022.05.17 18:36:29 4: signalduino1: Parse_MU, Fingerprint for MU protocol id 42 -> wireless doorbell matches, trying to demodulate
2022.05.17 18:36:29 4: signalduino1: Parse_MU, Decoded matched MU protocol id 42 dmsg P42#1B010182CB25 length 48 dispatch(1/4) RSSI = -74
2022.05.17 18:36:29 4: signalduino1: SD_BELL_Parse protocol 42 Pollin_551227 doubleCode=no rawData=1B010182CB25
2022.05.17 18:36:29 4: signalduino1: SD_BELL_Parse Check P42 - 1B010182CB25 alone
2022.05.17 18:36:29 1: signalduino1: SD_BELL_Parse UNDEFINED BELL detected, Protocol 42 code 1B01018
2022.05.17 18:36:29 4: signalduino1: Parse_MU, Fingerprint for MU protocol id 50 -> Opus_XT300 matches, trying to demodulate
2022.05.17 18:36:29 4: signalduino1: Parse_MU, Fingerprint for MU protocol id 64 -> WH2 matches, trying to demodulate
2022.05.17 18:36:29 4: signalduino1: Parse_MU, Decoded matched MU protocol id 64 dmsg W64#71B010182CB25 length 52 dispatch(1/4) RSSI = -74
2022.05.17 18:36:29 4: signalduino1: SD_WS_Parse protocol 64, rawData 71B010182CB25
2022.05.17 18:36:29 4: signalduino1: SD_WS_WH2_4 Error kein WH2: Typ: 01110001
2022.05.17 18:36:29 4: signalduino1: Parse_MU, Fingerprint for MU protocol id 71 -> PEARL matches, trying to demodulate


Dazu gibts im Event Monitor folgende Zeile:


2022-05-17 18:36:29 Global global UNDEFINED SD_BELL_1B01018 SD_BELL 42 1B01018




Manchmal kommt auch eine etwas längere Meldung im Log:

2022.05.17 18:40:29 4: signalduino1: Read, msg: MU;P0=-977;P1=1458;P2=478;P3=-28388;P4=368;D=0102020102010102020102020201010101010101010101010101010201010101010102010202010102010202010101020101010101343;CP=1;R=23;
2022.05.17 18:40:29 4: signalduino1: Parse_MU, Fingerprint for MU protocol id 8 -> TX3 Protocol matches, trying to demodulate
2022.05.17 18:40:29 4: signalduino1: Parse_MU, Fingerprint for MU protocol id 9 -> weather matches, trying to demodulate
2022.05.17 18:40:29 4: signalduino1: Parse_MU, Fingerprint for MU protocol id 34 -> QUIGG | LIBRA | Mandolyn | Pollin ISOTRONIC matches, trying to demodulate
2022.05.17 18:40:29 4: signalduino1: Parse_MU, Fingerprint for MU protocol id 42 -> wireless doorbell matches, trying to demodulate
2022.05.17 18:40:29 4: signalduino1: Parse_MU, Decoded matched MU protocol id 42 dmsg P42#0002059620 length 40 dispatch(1/4) RSSI = -62.5
2022.05.17 18:40:29 4: signalduino1: SD_BELL_Parse protocol 42 Pollin_551227 doubleCode=no rawData=0002059620
2022.05.17 18:40:29 4: signalduino1: SD_BELL_Parse Check P42 - 0002059620 alone
2022.05.17 18:40:29 1: signalduino1: SD_BELL_Parse UNDEFINED BELL detected, Protocol 42 code 0002059
2022.05.17 18:40:29 4: signalduino1: Parse_MU, Fingerprint for MU protocol id 50 -> Opus_XT300 matches, trying to demodulate
2022.05.17 18:40:29 4: signalduino1: Parse_MU, Fingerprint for MU protocol id 64 -> WH2 matches, trying to demodulate
2022.05.17 18:40:29 4: signalduino1: Parse_MU, Decoded matched MU protocol id 64 dmsg W64#69B800102CB10 length 52 dispatch(1/4) RSSI = -62.5
2022.05.17 18:40:29 4: signalduino1: SD_WS_Parse protocol 64, rawData 69B800102CB10
2022.05.17 18:40:29 4: signalduino1: SD_WS_WH2_4 Error kein WH2: Typ: 01101001
2022.05.17 18:40:29 4: signalduino1: Parse_MU, Fingerprint for MU protocol id 71 -> PEARL matches, trying to demodulate
2022.05.17 18:40:29 4: signalduino1: Read, msg: MU;P0=-256;P1=480;P2=-986;P3=1456;D=0123232321232321212321212321232321212321212123232323232323232323232323232123232323232321232121232321232121232323212323232323;CP=3;R=22;
2022.05.17 18:40:29 4: signalduino1: Parse_MU, Fingerprint for MU protocol id 8 -> TX3 Protocol matches, trying to demodulate
2022.05.17 18:40:29 4: signalduino1: Parse_MU, Fingerprint for MU protocol id 9 -> weather matches, trying to demodulate
2022.05.17 18:40:29 4: signalduino1: Parse_MU, last part pair=3 reconstructed, bit=0
2022.05.17 18:40:29 4: signalduino1: Parse_MU, Decoded matched MU protocol id 9 dmsg P9#89B4DC0008165880 length 64 dispatch(1/4) RSSI = -63
2022.05.17 18:40:29 3: signalduino1: Unknown code P9#89B4DC0008165880, help me!
2022.05.17 18:40:29 4: signalduino1: Parse_MU, Fingerprint for MU protocol id 34 -> QUIGG | LIBRA | Mandolyn | Pollin ISOTRONIC matches, trying to demodulate
2022.05.17 18:40:29 4: signalduino1: Parse_MU, Fingerprint for MU protocol id 42 -> wireless doorbell matches, trying to demodulate
2022.05.17 18:40:29 4: signalduino1: Parse_MU, Decoded matched MU protocol id 42 dmsg P42#0002059620 length 40 dispatch(1/4) RSSI = -63
2022.05.17 18:40:29 4: signalduino1: Parse_MU, Fingerprint for MU protocol id 50 -> Opus_XT300 matches, trying to demodulate
2022.05.17 18:40:29 4: signalduino1: Parse_MU, Fingerprint for MU protocol id 64 -> WH2 matches, trying to demodulate
2022.05.17 18:40:29 4: signalduino1: Parse_MU, Fingerprint for MU protocol id 71 -> PEARL matches, trying to demodulate


Dazu kommen im Event Monitor dann zwei Zeilen:



2022-05-17 18:40:29 Global global UNDEFINED SD_BELL_0002059 SD_BELL 42 0002059
2022-05-17 18:40:29 SIGNALduino signalduino1 UNKNOWNCODE P9#89B4DC0008165880



Ich hoffe, das hilft vielleicht schon weiter, etwas zu implementieren. Ich selbst kann das leider nicht.
Wenn es schon implementiert ist und ich es nur nicht mitgekriegt habe freue ich mich natürlich über Hinweise.

Wenn ich noch andere Werte liefern soll sagt bitte Bescheid.


Viele Grüße!

Ronny


Ralf9

Ich hab mir den Decoder mal angeschaut:
https://www.mikrocontroller.net/topic/514103
mir ist nicht klar wie die Decodierung funktioniert.

Zitat von: HaraldP am 07 März 2021, 09:42:03
Mit dem Signalduino habe ich mich bisher nicht befaßt. Hier ist das Signal aber nicht Pulslängen codiert. Man muß nach einer bestimmten Zeit nach einer positiven Flanke den Pegel auswerten.
Der Signalduino und der Cul (slowrf) verwendet ASK/OOK, dies ist eine Pulslängencodierung.
z.B.
1 - wenn nach einer einer positiven Flanke ein kurzer Puls mit z.B. 500 usec folgt
0 - wenn nach einer einer positiven Flanke ein langer Puls mit z.B. 1500 usec folgt

wenn bei der RFM69.c nach einer bestimmten Zeit nach einer positiven Flanke der Pegel ausgewertet wird, dann ist das doch auch eine Pulslängencodierung?
Zitat
Ich bin mir nicht ganz sicher, ob das hier jetzt die gewünschten Raw-Daten sind, das sind die Werte aus der Logfile mit Verbose 4:

Ich hoffe, das hilft vielleicht schon weiter, etwas zu implementieren. Ich selbst kann das leider nicht.
Wenn es schon implementiert ist und ich es nur nicht mitgekriegt habe freue ich mich natürlich über Hinweise.

Wenn ich noch andere Werte liefern soll sagt bitte Bescheid.

Diese 3 MU-Nachrichten helfen noch nicht weiter, es können auch fehlerhafte oder welche von anderen Sensoren sein.

Hat der TFA 35.1077.54 eine LED oder hast Du eine Basisstation an der Du erkennen kannst, wann er sendet?

Evtl lässt sich in einem log über ca 10 - 20 Min etwas erkennen

Gruß Ralf
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

Ronny2510

Hallo!

Der Empfänger zeigt an, wenn Daten vom Sender kommen, das war da jeweils der Fall. Ich bin mir insofern relativ sicher, daß es Daten vom richtigen Sender sind. Aber ich kann nochmal eine längere Auswertung machen und poste die dann hier.


Gruß!

Ronny

Ronny2510

So, ich habe ein wenig mitgeloggt.

Zur Methodik:
Ich habe im Event-Monitor einen Filter aktiviert, der mir alle Vorkommen mit MAX und FHT rausfiltert.

Immer, wenn auf der Wetterstation angezeigt wurde, daß der Sender etwas sendet, habe ich die entsprechende Zeile bzw entsprechenden Zeilen aus dem Event-Monitor kopiert. Es ist allerdings nicht bei jeder Sender-Anzeige auf der Wetterstation eine Nachricht im Event-Monitor angekommen.

Dann habe ich aus der Log-Datei die Daten mit dem gleichen Zeitstempel (bzw. z.T. noch eine Sekunde länger) rauskopiert.

Beides findet man im Anhang.

Wenn noch mehr gebraucht wird kann ich das die Tage auch machen.


Viele Grüße!

Ronny

Ralf9

Die Protocol ID 9 passt nicht ganz, da ist eine neue Protocol ID notwendig
"119" =>
{
name            => 'TFA 35.1077.54',
#comment        => '',
id              => '119',
one             => [1,-2],
zero            => [3,-2],
start           => [-46,2,-2],
clockabs      => 480,        # -1 = auto undef=noclock
#reconstructBit => '1',
format          => 'twostate',
preamble        => 'P119#', # prepend to converted message
#clientmodule    => 'SD_WS',
#modulematch     => '^u9#.....',  # not used now
#length_min      => '60',
#length_max      => '120',
},




     1 2 3 4 5 6 7 8
P119#C15115018202CB21
P119#C15115000082CB58
P119#C15115008102CB70
P119#C15115008102CB70
P119#C15095000082CB24
P119#C15095808182CB46

Das letzte Hexbyte ist vermutlich das crc8

Ich habs mal damit getestet, hab aber nichts passendes gefunden
http://www.sunshine2k.de/coding/javascript/crc/crc_js.html

Das passt nicht ganz mit dem vom @HaraldP zusammen:
1 2 3 4 5 6 7 8 9
5??TTTHHGGWWRRRRCC

? - ID evtl
T - temp
H - hum
G - windgust
W - windspeed
R - rain
C - CRC8



@elektron-bbs liest Du hier mit?

Gruß Ralf
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

Ralf9

#9
Bitte poste mal eine Nachricht mit der dazugehörigen Temperatur und Luftfeuchtigkeit

evtl sieht die Zuordnung so aus?
C15095808182CB46
IITTTHH

I - ID
T - Temp - 400
H - Hum


Die Nachricht kann auch noch invertiert oder um 1 Bit verschoben sein
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

HaraldP

Die Wetterstation verwendet keine reine Pulscodemodulation, wie es Ralf vermutet hat. Eine reine Flankenauswertung mit ihren zeitlichen Bezügen führte bei mir zu keinem Ergebnis. Man muß eine Pegelauswertung dazu nehmen. Meine Dekodierung scheint korrekt zu sein. Temperatur/Feuchte etc. und DCF-Zeit werden korrekt dekodiert. Die Art der Dekodierung ist am kürzesten in meinem Codebeispiel beschrieben.
Harald
CUL auf RPi, 3 MAX HT + 1 MAX WT(Wohnzimmer); 1 MAX HT+ mit 1x MAX HT(Küche); 1 MAX HT+ mit 1x MAX HT(Schlafzimmer);  1 MAX HT(Bad); 1 Max HT(Bastelzimmer)

Ralf9

Der Code hilft mir zum Verständnis Deiner Codierung nicht weiter, beim Signalduino wird der cc1101 verwendet, mit dem RFM69 habe ich mich noch nicht beschäftigt.
Mit einer reinen Flankenauswertung konnten mit dem Signalduino bis jetzt alle ASK, OOK Nachrichten decodiert und verarbeitet werden.

void OOKFlanke(void) // in Hauptschleife aufgerufen, wenn RFM69Stat&0x02
{
if (TCCR0B && TCNT0<fcnt.tcntScan) return;

if (TCNT0>fcnt.tcntPause && FBlock.Bit2Start==0)
{
  RFM69Stat &= ~0x04;
  if (FBlock.BitZ>40) {FBlock.Bit2Start = FBlock.BitZ; InsertEinsBit();}
  TCNT0 = 0; return;
}

if (RFM69Stat&0x02)
{
  RFM69Stat &= ~0x02;
  if ((FBlock.BitZ==7) && (PIND&(1<<PD2)) ) {FBlock.x = 1;InsertEinsBit();}

  if (PIND&(1<<PD2)) FBlock.BitFeld[FBlock.BitZ] = 0;// Pegel abtasten
  else               FBlock.BitFeld[FBlock.BitZ] = 1;


  FBlock.BitZ++;
  if (TCNT0>20) FBlock.Fehl |= 0x01;
  TCNT0 = 0;
}
}
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

HaraldP

Es wäre interessant, ob die Dekodierung mit einer reinen Flankenauswertung gelinge. Da ich zur Zeit verreist bin, kann ich nicht auf meine Logianalysatoraufzeichnungen zurückgreifen, um das zu beurteilen.
Statt RFM69 müßte das Ganze auch mit CC1101 äquvalent funktionieren.
CUL auf RPi, 3 MAX HT + 1 MAX WT(Wohnzimmer); 1 MAX HT+ mit 1x MAX HT(Küche); 1 MAX HT+ mit 1x MAX HT(Schlafzimmer);  1 MAX HT(Bad); 1 Max HT(Bastelzimmer)

Ronny2510

#13
Hallo zusammen!

Ich habe gestern und heute ein wenig mitgeschrieben, das Ergebnis ist im Anhang.

Es wäre mir prinzipiell ziemlich lieb, wenn ich auch Wind und Regenmenge auslesen könnte. Der Wert für die Regenmenge ist die Summe der letzten 24 Stunden, die Windgeschwindigkeit ist in km/h.


Viele Grüße!

Ronny

Ralf9

Hallo Ronny,

wenn ich die Nachrichten um 1 Bit verschiebe, dann passt die Temp und Hum, den Rest habe ich mir noch nicht angeschaut.
z.B.
C1451A818202D15D0
1100 0001 0100 0101 0001 1010 1000
1 1000 0010 1000 1010 0011 0101 0000 0011  um 1 Bit verschoben
  8     2    8   A    3    5    0    3   -> Temp Hex 28A (650 Dez) -400 = 25.0 Grad,  Hum  Hex 35 = 53%


Normalerweise ist am Anfang die ID, die sich bei jedem Batteriewechsel ändert.
Falls Du gut an die Wetterstation ran kommst, dann kannst Du ein paar mal die Batterie wechseln und dann einige empfangene MU-Nachrichten posten. Mich interessiert auch ob am Anfang immer eine 1 ist.
Wenn Du fast leere Batterien hast, dann kannst Du diese auch mal einlegen, das Batterybit ist evtl das höchstwertige Bit der Temp oder Luftfeuchtihkeit (Hum)

Gruß Ralf
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7