Forum: Projekte & Code SDR-Dekoder für TFA KlimaLogg Pro/IT+ Temperatursensoren


von Georg A. (georga)


Lesenswert?

Hi,
wie in Beitrag "Wetterstationssensor: Kann der RFM12b das Protokoll überhaupt?" schon angedroht, 
habe ich den Code zur Dekodierung der TFA KlimaLogg Pro/IT+ Sensoren 
(30.3180.IT) mittels SDR-Stick auf github gestellt:

https://github.com/baycom/tfrec

Der Dekoder versteht nur die KlimaLogg Pro Sensoren 
(Temperatur+Feuchtigkeit), die in NRZS senden. Diverse andere 
TFA-Varianten machen NRZ, daher können nur die per RFM69&Co empfangen 
werden.

Verwendet wurde ein Stick mit R820T2-Tuner (so ein hellblauer ala 
http://www.ebay.de/itm/172322877121), der wird von librtl-sdr auch gut 
unterstützt. Damit ist die Empfindlichkeit mit der mitgelieferten 
Antenne mindestens so gut wie mit der TFA Basisstation. Und billiger als 
ein JeeLink ist er auch noch...

Getestet wurde mit Linux (x86/x86_64/RasPI3) und MacOS. Für Windows 
hatte ich noch kein Bedarf, sollte aber eigentlich auch gehen. 
Inzwischen laufen damit 16 Sensoren problemlos.

Jedes Sensor-Telegramm kann nach dem Empfang an ein beliebiges 
Executable übergeben werden, dass sich um die weitere 
Auswertung/Speicherung kümmert. Bei Bedarf baue ich noch das Versenden 
via UDP an einen Host ein.

Ansonsten ist der Code jetzt eher so hingeschlonzt, mag sein, dass das 
noch effizienter geht ;)

Eine Demo-Visualisierung mit Apache/Perl+MySQL ist auch noch drin, das 
ist aber nur ein Quick-Hack.

von gr (Gast)


Lesenswert?

Hi Georg,

Funktioniert perfekt auf einem PI3 + 4 Sensoren und wird auch gleich via 
Webservice in meine Loxone Visualisierung integriert!

Vielen vielen Dank für die Implementierung!

LG

von Georg A. (georga)


Lesenswert?

Sehr schön...

Ich glaub ich baue auch nochmal was ala "executive summary" ein, wo 
maximal x Sekunden auf das Auftauchen von n IDs gewartet wird und dann 
alles in einem Rutsch ausgegeben wird. Das 10s-Raster jetzt ist zwar 
schon nett (ui, wer ist grad durch die Haustür rein...), aber auch nicht 
wirklich datensparsam :)

Offensichtlich gibt es für IT+ noch einen Sensor mit abgesetztem 
Temperaturfühler (.3181). Muss ich mir wohl noch anschaffen, evtl. hat 
der einen anderen Typ-Code.

BTW: Die normalen IT+ Sensoren gibt es für 15EUR bei Knufis Optik Shop 
(kein Witz, nur eine Metzgerei wäre noch abstruser...). Das ist der 
bislang niedrigste Preis, der mir untergekommen ist. Ich habe da gleich 
16 Stück bestellt, die auch geliefert wurden. Also kein Fake-Shop ;) Für 
den Preis fange ich nicht an, was mit AVR/ESP8266/PIC/RFM* selber zu 
frickeln, zumal die Sensoren dank Display ja selbst ohne Funk schon 
nützlich sind und die Batterien bei meinen "alten" schon mind. 2.5 Jahre 
durchgehalten haben. Das muss man erstmal mit der Eigenentwicklung 
schaffen...

von gr (Gast)


Lesenswert?

Ich hab die Integration jetzt mit UDP gemacht, da das auf die schnelle 
am einfachsten war. Eine UDP Option in der Auswertesoftware ist schon 
fast overkill, da es in Linux mit einem Einzeiler erledigt ist und mit 
systemd auch gleich als Service läuft:

/home/osmc/tfrec/tfrec -q -e /bin/echo | socat - 
udp-sendto:192.168.1.2:6000

Die Auswertung auf dem Miniserver ist auch sehr einfach mit einem 
virtuellen UDP Eingang erledigt, da spielt auch die Freuquenz der 
eintrudelnden Pakete keine Rolle, da der Zeitraum der Statistiken 
konfigurierbar ist.

Was soll ich sagen, es funktioniert perfekt!

Ein .3181 ist schon bestellt, mit dem integriere ich dann im Sommer die 
Pooltemperatur, ich geb bescheid, ob er im tfrec auftaucht.

Danke nochmal für die Implemetierung!

von Gerhard M. (heligemus)


Lesenswert?

Hallo,

ich bin gerade auf diesen für mich super interessanten Thread gestoßen.

Ich habe derzeit 9 solcher Sensoren im Haus verteilt wovon ich ja 
gleichzeitig nur 8 verwenden kann - im Sommer tausche ich immer einen 
'normalen' Raumsensor .3180 gegen einen .3181 für die Messung der 
Pooltemperatur - daher ist für mich die Unterstützung beider Sensortypen 
Uch wichtig.

Weiters experimentiere ich gerade mit der Home Automation Plattform 
'HomeAssistant' herum und da bietet sich natürlich ein Verbinden beider 
Systeme perfekt an.

Ich werde mir heute noch den SDR-Stick bestellen - die Frage ist, ob ein 
RasPI1 auch reichen würde, den hätte ich noch unbenutzt herumliegen.

Wenn's dann mal läuft muß ich die Daten noch in den HomeAssistant hinein 
bekommen - ich habe da ein kleines Testprojekt mit dem MQTT Protokoll 
gemacht - ich denke, das müsste mit dem vorhandenen Code und einer 
entsprechenden Library auch machbar sein.

Ich werde wieder berichten sobald ich etwas am Laufen habe - oder wenn 
Probleme auftauchen - bin schon sehr gespannt. Für Tipps bin ich immer 
dankbar.

Vielen Dank vorab für die ganze Arbeit.

von Georg A. (georga)


Lesenswert?

> Ich werde mir heute noch den SDR-Stick bestellen - die Frage ist, ob ein
> RasPI1 auch reichen würde, den hätte ich noch unbenutzt herumliegen.

Potentiell ja, aber per Monte-Carlo-Methode ;) Die SDR-Lib liest ja 
immer 256KB Daten ein, danach werden sie dekodiert. Das Einlesen erfolgt 
per USB/DMA, also eher keine CPU-Last. Wenn die SW-Auswertung zu lange 
braucht, müssten "nur" ganze Blöcke verloren gehen. Wenn Telegramme in 
einem Block sind, sollten die schon einwandfrei dekodiert werden können. 
Es dauert also vermutlich nur länger, alle Sensoren mal zu erwischen.

von Gerhard M. (heligemus)


Lesenswert?

Hallo Georg,

ich hab die Komponenten bekommen (hab mir zur Sicherheit doch einen 
Raspi3 mitbestellt) und das System jetzt in Betrieb genommen - und was 
soll ich sagen, es hat auf Anhieb (fast) perfekt geklappt. Nur der .3181 
Sensor machte vorerst ein wenig Probleme.
Das Protokoll scheint ganz gleich zu sein wie das vom .3180, nur weil er 
als reiner Temperatursensor einen Standard-Feuchtewert von 0x6a 
mitschickt bin ich nach einiger Zeit Code-Review draufgekommen, daß du 
einen Wert von 0x6a expliziet als Fehler behandelst - daher hab ich das 
mal kurzerhand ausgeklammert und siehe da, jetzt funzt auch der .3181. 
Den Feuchtewert könnte man z.B. noch auf Null setzen, aber das ist ein 
kleines Detail.

Vielen Dank nochmal für die super Arbeit - beizeiten probier ich dann 
auch den Raspi1 nochmal aus. Jetzt muß/kann ich mir erst noch ein paar 
zusätzliche Sensoren beim Optiker kaufen ;)


hier noch ein paar Daten zur Info:

Debug vom .3181 vor der Code-Änderung mit tatsächlich schwacher 
Batterie:
#095 1486819092  2d d4 b7 a6 86 42 6a e0 60 56 56           ID 37a6 +0.0 
0%  seq 6 lowbat 2 RSSI 79

Debug vom .3181 vor der Code-Änderung mit neuer Batterie:
#153 1486819400  2d d4 b7 a6 86 42 6a 60 40 56 5f           ID 37a6 +0.0 
0%  seq 4 lowbat 2 RSSI 80

Debug vom .3181 nach der Code-Änderung mit neuer Batterie:
#934 1486821012  2d d4 b7 a6 87 03 6a 60 b0 56 02           ID 37a6 
+30.3 106%  seq b lowbat 0 RSSI 80

Code-Änderung:
// Sensor values may fail at 0xaaa/0xfff or 0x6a/0x7f due to low battery
// even without lowbat bit
// Set it to 2 -> sensor data not valid
if ( /*hum==0x6a ||*/ hum==0x7f) {
   batfail=2;
   hum=0;
   temp=0;
}

von Georg A. (georga)


Lesenswert?

Da gabs schon einen Patchvorschlag im git (von gr?), der das macht. Bin 
noch nicht dazugekommen, wollte noch meinen 81 abwarten, der im Versand 
hängt. Der Check an sich kam daher, dass bei meinen etwas penetranten 
Tests auf Unterspannung sich der Sensor wohl manchmal aufgehängt hatte 
und dann je nach Laune 7f oder 6a bei der Feuchtigkeit rauskam. 
Allerdings waren da AFAIR auch die Temperaturnibbles aaa/fff.

Bei meinem Kollegen ist wegen massiver Luftfeuchtigkeit in der Garage 
auch ohne Unterspannung 6a entstanden, da stand im Display --%... 
Vermutlich sollte man also eher die Temperatur als Sanitycheck nehmen 
und die Feuchtigkeit auf 100% begrenzen.

Mich wundert eigentlich, dass der 81 keinen anderen Typ hat. Diese 
konstante 56 klingt irgendwie danach.

von Gerhard M. (heligemus)


Lesenswert?

Na super - und ich war stolz auf mich das ich das Problem selbst finden 
konnte. Ich bin wie du merkst nicht so bewandert mit git und Co und war 
schon extrem froh, dass ich den Code überhaupt zum Laufen bringen 
konnte;)

von gr (Gast)


Lesenswert?

Ja der Fix ist der den ich bei mir umgebaut habe, dass der 3181 läuft.
Zumindest bei mir funktioniert es bisher ohne Probleme, sowohl mit 3180 
als auch 3181. :)

von Georg A. (georga)


Lesenswert?

Der 3181-Sensor ist jetzt im git-Repository.

Und nebenbei habe ich den Support für die anderen TFA/LaCrosse-Sensoren 
mit NRZ und 17240 und 9600Baud eingebaut. D.h. es gehen jetzt mindestens 
auch 30.3143, 30.3144 und 30.3155 (die drei Geräte habe ich), vermutlich 
auch 30.3146. Wenn ich aber die unzähligen Telegramme sehe, die da jetzt 
rauspurzeln, egal wo ich den Dekoder anwerfe, sind es sicher noch viel 
mehr unterstützte Typen, wie Nonames ala TX21IT, ... . In meiner 
Umgebung gibts schon 4 "fremde" Aussentemperatursensoren ;)

BTW: Es gibt wohl auch einen dedizierten Pool-Sensor 30.3199.IT für 
KlimaLoggPro, der sollte auch gehen. Scheint aber gern undicht zu 
werden...

PS2: Falls die CPU-Load für den RasPI jetzt zuviel wird, kann man die 
neuen Decoder mit der -T Option wieder ausschalten.

: Bearbeitet durch User
von Oneiros (Gast)


Lesenswert?

Nice Work!!!
Funktioniert bei mir mit 30.3159.IT, 30.3156.WD und 30.3147.IT:
#092 1490255901  2d d4 9d 46 41 6a 0a                       ID 10009d40 
+24.1 0 0a 0a RSSI 78 Offset -11kHz
11009d40 +24.1 0 0 0 78 0 1490255901
#093 1490255904  2d d4 92 04 51 6a 94                       ID 10009200 
+5.1 0 94 94 RSSI 76 Offset -16kHz
11009200 +5.1 0 0 0 76 0 1490255904
#028 1490255904  2d d4 91 04 58 6a cb                       ID 20009100 
+5.8 0 cb cb RSSI 86 Offset -16kHz
22009100 +5.8 0 0 0 86 0 1490255904

von Georg A. (georga)


Lesenswert?

Danke für die Rückmeldung. Ich werde die Liste der unterstützen Sensoren 
updaten. Die IDs 10009d40&10009200 sind 3147/3159, die 20009100 der 
3156, oder?

Ich verliere echt gerade den Überblick bei dem TFA-Sammelsurium, da gibt 
es gefühlte 100 Stationen mit 50 Sensoren...

von Oneiros (Gast)


Lesenswert?

> Die IDs 10009d40&10009200 sind 3147/3159, die 20009100 der
> 3156, oder?

Ja,

10009d40 3147
10009200 3159
20009100 3156

von Georg A. (georga)


Lesenswert?

Ok, damit ist der ganze Weatherdirect-Kram definitiv die 
9600Baud-Variante.

Stellt sich nur die Frage, wo eigentlich der Unterschied zwischen 3147 
und 3159 liegt. Display haben sie beide keins, Feuchtigkeitssensor auch 
nicht, Gehäuse sieht identisch aus. Produktvielfalt ist schon was 
tolles...

von MitLeserin (Gast)


Angehängte Dateien:

Lesenswert?

@GeorgA

Sehr interessantes Projekt, Danke.

Ich habe versucht, mich in Perl einzulesen, um /contrib zu verstehen.
In der Bilddatei ein screenshot der Konsole.

./trec funktioniert
./tfrec -e /var/cgi-bin/contrib/pushvals  wird aufgerufen, aber 
vermutlich noch nicht korrekt.

apache2 installiert. PERL tutorial funktioniert.

MySQL installiert, Tabelle erstellt, aber keine Erfahrung mit MySQL.

sensors.html geändert für einen Sensor [Temp/Hum] mit korrekter ID.
sensors.html öffnet Browser, aber leer, nur der Titel ist richtig: 
"TFA-Sensor-Portal"

Für Hinweise zur Fehlersuche wäre ich dankbar.
*********************************************
Alexandra

von Georg A. (georga)


Lesenswert?

Der Datenfluss ist deswegen so "kompliziert", damit die Datenbank auf 
einem anderen Rechner als dem eigentlichen Empfänger laufen kann.

1) tfrec ruft das pushvals-Script mit den Sensorswerten auf.
2) Das wiederum ruft das pushvals.cgi auf deinem Webserver auf.
3) pushvals.cgi fügt die Daten in MySQL ein
4) sensors.html lädt mit Javascript via sensors.cgi die Daten jedes 
einzelnen Sensors nach.
5) sensors.cgi holt die Daten aus der DB und liefert sie JSON-formatiert

1-3 sieht eigentlich gut aus. Du kannst dich ja mal mit "mysql -u 
smarthome -p smarthome" (und dann dem DB-Passwort aus pushvals.cgi) ein 
die DB einloggen und mit "select count(*) from sensors;" bzw. "select * 
from sensors;" nachschauen, ob/was schon in der Tabelle steht.

zu 4) Javascript muss im Browser angeschaltet sein, sonst bleibt es 
leer. Falls bei der Setup-Tabelle in sensors.html was faul ist, steht 
wg. Syntax-Fehler auch nichts da. Evtl. mal im Javascript-Debugger die 
Console anschauen (zB. im Firefox Web-Konsole bzw. Firebug). Wenn JS 
geht, sollte normalerweise eine "Loading..."-Meldung pro Chart dastehen. 
Wenn es das nicht tut, ist da wohl was faul.

zu 5) Kann man im Browser mit 
"http://<servername>/sensors.cgi?type=tfa-temp&id=<sensorid>"; probieren. 
Da sollte eine Liste zurückkommen.

BTW: Wenn der Webserver auch von aussen erreichbar ist, wäre das 
"Verstecken" der CGIs in einem Unterordner evtl. nicht verkehrt. Ausser 
den beiden CGIs und dem html sollte auch sonst nichts im Verzeichnis 
sein, insb. das pushvals-Shellskript.

von MitLeserin (Gast)


Lesenswert?

Danke für die Anleitung.
Funktioniert einwandfrei.

Ein schönes Beispiel für Datenerfassung, Speicherung und Darstellung.

von Christian (Gast)


Lesenswert?

Hallo Georg,

vielen Dank für das tolle Projekt!

Ich habe bemerkt, dass auch bei Angabe von '-q' einige Debug-Ausgaben 
erscheinen. Ich glaube den Fehler gefunden und behoben zu haben, Du 
findest dazu einen Pull Request im Git-Repository.

von Christian X. (mikrocontroller-user)


Lesenswert?

Hallo zusammen,

zuallererst möchte ich mich noch einmal bei Georg für das tolle Projekt 
bedanken. Ich suche seit vielen Jahren nach einer Möglichkeit, meine 8 
Temperatur-Sensoren in die Heimautomation zu integrieren. Mit trfec 
sieht es so aus, als könnte das gelingen.

Ich habe zur Zeit noch ein kleines Problem: Beim Start von tfrec werden 
alle 8 Sensoren empfangen, aber nach und nach verschwinden alle Sensoren 
wieder.


Mein Systemaufbau:
- Raspberry Pi B 3
- DVB-T-Stick: PID/VID: 0bda/2838 (Realtek RTL2838UHIDIR), 
tfrec-Ausgabe: Fitipower FC0012
- 8 Sensoren TFA 30.3180.IT
- tfrec als systemd-Service, Aufruf:
1
/opt/tfrec/tfrec -T 1 -g 13 -q -e /opt/tfrec/publish-tfrec-to-mqtt.sh
- im Weiteren Verlauf noch mosquitto und FHEM, das spielt für das 
Problem aber keine Rolle


Das Problem
Beim Start von tfrec werden alle 8 Sensoren empfangen, aber mit der Zeit 
verschwinden einige Sensoren nach und nach. Nach einiger Zeit (ca. 1,5 
Stunden) wird nur noch 1 Sensor (immer dieselbe ID: 5151) empfangen. 
Nach weiterer Zeit (ca. 2,5 Stunden) empfange ich überhaupt keinen 
Sensor mehr. Nach Neustart von tfrec (ohne Hardware-Eingriff) werden 
wieder alle Sensoren empfangen.

Zusatz-Informationen:
- Im System-Log und in der Ausgabe von tfrec ist nichts zu finden.
- Effektiv sind nur 4 Gain-Werte möglich:
  -g 0 bis 5: -4.0
  -g 10 bis 12: 7.1
  -g 13 bis 18: 17.9
  -g 19 und mehr: 19.2


Leider verstehe ich den Quellcode selbst nicht genug, um das Problem 
weiter zu analysieren. Meine Vermutung: Während der Laufzeit passt tfrec 
einige Tuning-Parameter an, und dabei läuft irgend etwas schief (ich 
tippe hier auf tfa2_demod::demod und fsk_demod::process).

Hat jemand eine Idee?

: Bearbeitet durch User
von Georg A. (georga)


Lesenswert?

Christian X. schrieb:
> Hat jemand eine Idee?

Ja. Vermutlich geht die Triggerlevel-Erkennung daneben. Ich habe da 
etwas eingebaut, was bei zu vielen Auslösungen die Empfindlichkeit etwas 
runtersetzt (aber nicht wieder rauf). Offensichtlich funktioniert das 
aber nur bei mir. Ich habe auch einen anderen Report, wo wohl soviel 
Störungen in der Umgebung sind, dass damit eine dauerhafte Taubheit 
entsteht. Ich versuche gerade das etwas dynamischer zu machen. Als 
temporäre Abhilfe könntest du in fm_demod.cpp so ab Zeile 56 den 
gesamten if-Block 'if (triggered >= ...) {...}' auskommentieren.

BTW: Die beschränkte Anzahl der Gain-Werte liegt an dem Fitipower-Tuner 
(zB. im Noxon-Stick benutzt). Da kann jeder Tunerchip was anderes.

: Bearbeitet durch User
von Christian X. (mikrocontroller-user)


Lesenswert?

Vielen Dank für die schnelle Antwort.

Ich habe den Code-Block wie vorgeschlagen auskommentiert. Ohne weitere 
Veränderungen hatte ich damit zunächst keinen Empfang mehr; ich schätze, 
dass die Trigger Ratio nun nicht mehr automatisch ermittelt wird und 
der Default-Wert in meinem Fall nicht passt. Deshalb habe ich dann die 
Änderung rückgangig gemacht und durch Angabe von '-D -D' die erweiterte 
Debug-Ausgabe eingeschaltet. Damit wird auch die Trigger Ratio 
ausgegeben. In meinem Fall ist 1000 ein geeigneter Wert. Ich habe 
deshalb meinen Aufruf entsprechend erweitert zu
1
/opt/tfrec/tfrec -T 1 -g 13 -t 1000 -q -e /opt/tfrec/publish-tfrec-to-mqtt.sh
und empfange damit wieder alle Sensoren. Ich bin bisher sehr zufrieden 
und gespannt auf die nächsten Stunden und Tage.

von Maik W. (istler)


Lesenswert?

Hall Georg,

so heute ist endlich mein SDR angekommen. Ich konnte ihn auch gleich 
ausprobieren. :-)
Bei den Requirements für das Make fehlt noch "pkg-config".
Ansonsten konnte ich ohne probleme unter "Ubuntu 16.04.2 LTS" 
kompilieren und lief auch gleich los! :-)
Ich möchte damit meinen Pool-Sensor (30.3199.IT) abfragen.
Doch leider lieferte dieser gleich erst mal  "BAD 33 RSSI 73 (SANITY)". 
:-(
Schuld ist die Abfrage in tfa1.cpp Zeile 70
1
&& ((rdata[7]&0x70)==0x60
Wenn ich diesen UND-Teile Auskommentiere oder mit 1 verodere, dann 
erhalte ich folgenden Output:
1
#045 1497699524  2d d4 59 cd 86 63 6a 70 c0 56 f1           ID 59cd +26.3 0%  seq c lowbat 0 RSSI 81
:-D Das ist richtig!

Bei dem Pool-Sensor ist das 8 Byte scheinbar immer 0x70. Warum hast du 
da auf 0x60 abgefragt?

Gruß
Maik

von Georg A. (georga)


Lesenswert?

Maik W. schrieb:
> Bei dem Pool-Sensor ist das 8 Byte scheinbar immer 0x70. Warum hast du
> da auf 0x60 abgefragt?

Weil bei den zwei Sensorinkarnationen, die ich habe, das immer 0x60 ist 
und damit ein zusätzlicher Check auf Sinnhaftigkeit der empfangenen 
Daten vorhanden ist. Ich habe keine Ahnung, was da eigentlich kodiert 
wird... Das oberste Bit ist ja der Batteriealarm. Ich hätte aber eher 
gedacht, dass der Sensortyp in der 56 steckt, die Zahl wird beim Startup 
ja auch ausgegeben.

Aber gut, dass wir verglichen haben ;) Ich würde da jetzt ein 
rdata[7]&0x30)==0x20 draus machen, dann gibts immerhin noch zwei Bits 
für den Sanitycheck.

von Maik W. (istler)


Lesenswert?

Hallo Georg,

Georg A. schrieb:
> rdata[7]&0x30)==0x20
Das klappt nicht, bei mir rdata[7]=0x70 ergibt 0x70 & 0x30 = 0x30. Wenn 
funktioniert es mit (rdata[7]&20)==20.


Ich lasse meinen Stick jetzt mit:
/usr/bin/tfrec -D -D -D -D -e /var/www/html/tfrec/pushvals
laufen. Dabei tritt bei mir das Problem auf, dass er manchmal den einen 
oder Anderen Sensor, der etwas weiter weg ist (RSSI ~ 60) für eine 
Zeitlang (> 60min) nicht empfängt. Dann empfängt tfrec diesen wieder 
stundenlang ohne Probleme. Der JeeLink, der direkt neben dem tfrec-Stick 
hängt, empfängt die fraglichen Sensoren die ganze Zeit ohne Probleme!?
Hast du eine Idee, was ich debuggen könnte?

Gruß
Maik

von Christian X. (mikrocontroller-user)


Lesenswert?

Unter 
https://github.com/git-developer/fhem-examples/wiki/Temperatur-Feuchte-Sender-mit-tfrec-und-MQTT 
gibt es eine Anleitung für die Integration von tfrec in FHEM.

von Christian X. (mikrocontroller-user)


Lesenswert?

Ich hatte in letzter Zeit einige Male das Problem, dass tfrec nach 
langer Laufzeit keine Werte mehr liefert. Ursache ist vermutlich eine 
instabile Verbindung zum DVB-T-Stick. Es würde mir helfen, wenn der 
Prozess in so einem Fall mit einem Fehlercode beendet würde anstatt ohne 
Funktion weiterzulaufen. Ich habe deshalb unter 
https://github.com/baycom/tfrec/issues/3 einen Feature-Request erstellt.

Ich würde auch probieren, das selbst zu implementieren; ich wäre dankbar 
für einen Tipp, an welcher Stelle im Code ich dafür ansetzen kann.

von Georg A. (georga)


Lesenswert?

Das Problem ist rauszufinden, was in dem Zustand eigentlich los ist. 
Wenn da vom Stick schon keine Daten mehr kommen, könnte man das mit 
einem trivialen Alarm-Timeout/Signal lösen. Wenn da noch Schrottsamples 
kommen, wirds schwerer.

Kommentier mal in sdr.cpp/sdr::read_data das printf am Anfang wieder 
rein. Dann sollte man sehen ob der Datenstrom abreisst oder nicht.

von Christian X. (mikrocontroller-user)


Lesenswert?

Ich habe das printf einkommentiert; das Log hat sich daraufhin auch 
schnell mit Meldungen 'Got 262144' gefüllt, im Schnitt ca. 20x pro 
Sekunde. Der letzte Absturz ist nach 6 Wochen aufgetreten, davor war die 
Laufzeit 1 Woche. Ich möchte das Log ungern ein paar Wochen volllaufen 
lassen, zumal es auf einer SD-Karte liegt (-> Lebensdauer).

Ich denke, dass der Stick keine Daten mehr liefert, und zwar aufgrund 
folgender Beobachtungen:

1.) Für die letzten beiden Ausfälle habe ich Logs zur CPU-Last; zum 
Zeitpunkt des Ausfalls ist sie von 0.4 auf 0.1 gefallen, das entspricht 
der Auslastung von tfrec.

2.) Im Log sehe ich, dass nach der Meldung 'cb transfer status: 1, 
canceling...' das USB-Gerät getrennt und sofort wieder verbunden wird. 
Ich vermute, dass die Bibliotheken libusb bzw. libsdr nach dem 
Disconnect neu initialisiert werden müssen, bevor wieder Daten geliefert 
werden.

3.) Der Stick hängt an einem Raspberry Pi 3. Ich habe dort schon die 
Erfahrung gemacht, dass abhängig von Netzteil und angeschlossener 
Hardware die USB-Verbindung nicht immer stabil ist; im Netz wird dieses 
Problem häufig mit einer unzureichenden Spannungsversorgung in 
Verbindung gebracht. Wenn der USB-Stick im laufenden Betrieb von tfrec 
neu startet, werden vermutlich ebenfalls die Bibliotheken neu 
initialisiert werden müssen.

von Georg A. (georga)


Lesenswert?

Bin nach langer Zeit mal wieder dazugekommen...

Der Bug mit der schwindenden Empfindlichkeit sollte jetzt weg sein, der 
Triggerlevel wird automatisch in beiden Richtungen nachgeführt. Diese 
Automatik lässt sich mit -t <level> ganz abschalten, falls es nötig ist.
Der Check für den Pool-Sensor müsste auch passen. Und schliesslich 
beendet sich das Programm, wenn es 5s lang keine Daten vom Stick 
bekommen hat.

von Christian X. (mikrocontroller-user)


Lesenswert?

Danke schön!

Ich teste die neue Version. Bisher funktioniert es, allerdings werden 
nach wie vor beim Setzen von '-q' Debug-Ausgaben erstellt (siehe 
Beitrag "Re: SDR-Dekoder für TFA KlimaLogg Pro/IT+ Temperatursensoren" bzw. Pull-Request 
https://github.com/baycom/tfrec/pull/2 ).

von Georg A. (georga)


Lesenswert?

Ich wusste, dass ich irgendwas vergessen habe. Kommt heute abend...

von Christian X. (mikrocontroller-user)


Lesenswert?

Danke für den Merge, jetzt sieht's gut aus und läuft bisher ohne 
Aufälligkeiten.

von Christian X. (mikrocontroller-user)


Lesenswert?

Das Beenden im Fehlerfall klappt. Ich hatte heute erneut einen Ausfall, 
der Service wurde diesmal aber automatisch neu gestartet:
1
Oct 25 17:37:09 localhost run-tfrec.sh[579]: cb transfer status: 1, canceling...
2
Oct 25 17:37:09 localhost kernel: [366534.515362] usb 1-1.3.2: USB disconnect, device number 7
3
Oct 25 17:37:09 localhost kernel: [366534.816957] usb 1-1.3.2: new high-speed USB device number 13 using dwc_otg
4
Oct 25 17:37:09 localhost kernel: [366534.958613] usb 1-1.3.2: New USB device found, idVendor=0bda, idProduct=2838
5
Oct 25 17:37:09 localhost kernel: [366534.958621] usb 1-1.3.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
6
Oct 25 17:37:09 localhost kernel: [366534.958625] usb 1-1.3.2: Product: RTL2838UHIDIR
7
Oct 25 17:37:09 localhost kernel: [366534.958629] usb 1-1.3.2: Manufacturer: Realtek
8
Oct 25 17:37:09 localhost kernel: [366534.958633] usb 1-1.3.2: SerialNumber: 00000001
9
Oct 25 17:37:14 localhost run-tfrec.sh[579]: Read timeout, exiting
10
Oct 25 17:37:14 localhost systemd[1]: tfrec.service: main process exited, code=exited, status=255/n/a
11
Oct 25 17:37:14 localhost systemd[1]: Unit tfrec.service entered failed state.
12
Oct 25 17:37:14 localhost run-tfrec.sh[579]: Registering demod for TFA_1 KlimaLoggPro
13
Oct 25 17:37:19 localhost systemd[1]: tfrec.service holdoff time over, scheduling restart.
14
Oct 25 17:37:19 localhost systemd[1]: Stopping tfrec...
15
Oct 25 17:37:19 localhost systemd[1]: Starting tfrec...
16
Oct 25 17:37:19 localhost systemd[1]: Started tfrec.
17
Oct 25 17:37:19 localhost run-tfrec.sh[31569]: Found Fitipower FC0012 tuner

von MitLeserin (Gast)


Lesenswert?

Könnte es sein, dass inkompatible neue Sender 30.3180.IT (05/2017) auf 
dem Markt sind?
****************************************************************
Ich habe 4 Sensoren, deren Daten mit ./tfrec -D nicht verarbeitet 
werden.

Daten Rückseite NEU: 05/2017 V024 C2 ID: XXXX R08B
**************************************************
Beim Einschalten melden sich die Sender auf dem Display mit:
r08 0056 XXXX (Kennung)

Daten Rückseite ALT: 11/2016 V011 C2 ID: XXXX V35
*************************************************
.. die alten Sender melden sich mit:
b35 0056 XXXX

von MitLeserin (Gast)


Lesenswert?

Nachtrag:
********
pi@raspberrypi:~/tfrec $ sudo ./tfrec -D
Found Rafael Micro R820T tuner
AUTO GAIN
Frequency 868.2500MHz
Samplerate 1536000
START READ THREAD
#000 1509614402  2d d4 15 43 86 93 1d 60 70 56 21           ID 1543 
+29.3 29%  seq 7 lowbat 0 RSSI 80
#001 1509614403  2d d4 fe 5e 86 27 29 60 a0 56 3f           ID 7e5e 
+22.7 41%  seq a lowbat 0 RSSI 80
#002 1509614412  2d d4 15 43 86 93 1d 60 80 56 39           ID 1543 
+29.3 29%  seq 8 lowbat 0 RSSI 80
#003 1509614413  2d d4 fe 5e 86 27 29 60 b0 56 51           ID 7e5e 
+22.7 41%  seq b lowbat 0 RSSI 80
#004 1509614417  2d d4 65 f1 85 91 31 60 f0 46 6c           BAD 1 RSSI 
65 (CRC 6c 2f)
#005 1509614422  2d d4 15 43 86 93 1d 60 90 56 57           ID 1543 
+29.3 29%  seq 9 lowbat 0 RSSI 80
#006 1509614424  2d d4 fe 5e 86 27 29 60 c0 56 6a           ID 7e5e 
+22.7 41%  seq c lowbat 0 RSSI 80
#007 1509614428  2d d4 65 f1 85 91 31 60 00 56 74           ID 65f1 
+19.1 49%  seq 0 lowbat 0 RSSI 65
#008 1509614432  2d d4 15 43 86 93 1d 60 a0 56 e5           ID 1543 
+29.3 29%  seq a lowbat 0 RSSI 80
#009 1509614434  2d d4 fe 5e 86 27 29 60 d0 56 04           ID 7e5e 
+22.7 41%  seq d lowbat 0 RSSI 80
#010 1509614439  2d d4 25 b1 85 91 31 60 20 ac 34           BAD 2 RSSI 
65 (CRC 34 ce)
#011 1509614442  2d d4 15 43 86 93 1d 60 b0 56 8b           ID 1543 
+29.3 29%  seq b lowbat 0 RSSI 80
#012 1509614445  2d d4 fe 5e 86 27 29 60 e0 56 b6           ID 7e5e 
+22.7 41%  seq e lowbat 0 RSSI 80
#013 1509614450  2d d4 65 f1 85 11 31 60 20 56 28           BAD 3 RSSI 
65 (CRC 28 1b)
#014 1509614452  2d d4 15 43 86 92 1d 60 c0 56 63           ID 1543 
+29.2 29%  seq c lowbat 0 RSSI 80
#015 1509614454  2d d4 12 00 08 82 32 00 01 02 44           BAD 4 RSSI 
51 (CRC 44 e1)
#016 1509614456  2d d4 fe 5e 86 27 29 60 f0 56 d8           ID 7e5e 
+22.7 41%  seq f lowbat 0 RSSI 80

von Georg A. (georga)


Lesenswert?

Für Autogain sieht die Empfangsfeldstärke (RSSI) etwas mau aus, die 
Telegramme sehen bis auf Prüfsummenverändernde Einzelbitfehler 
eigentlich auch so aus wie immer. Kannst du den Sensor mal näher zur 
Antenne bringen oder mal ohne Autogain (z.B. '-g 50') probieren? Evtl. 
hat die neue Version weniger Sendepower...

Wo sind die Sensoren denn her? In meinem Zoo (hab jetzt auch mit den 
"alten" schon fast 25...) macht einer mehr jetzt auch nix mehr aus ;)

von MitLeserin (Gast)


Lesenswert?

Quelle: https://www.brack.ch/tfa-dostmann-temperaturfeuchte-185631

zum Testen stehen 3 alte und 2 neue Sender auf einem Tisch und die 
Antenne des SDR hängt 1m darüber.

Es ist die FREQUENZ:
************************

pi@raspberrypi:~/tfrec $ sudo ./tfrec -D -g 45 -f 868330  // statt 
868250
Found Rafael Micro R820T tuner
GAIN 44.5
Frequency 868.3300MHz
Samplerate 1536000
START READ THREAD

#000 1509692779  2d d4 ... 53    ID 1543 +29.4 28%  seq 4 lowbat 0 RSSI 
71  // ALT
#001 1509692783  2d d4 ... 10    ID 743d +21.0 45%  seq 0 lowbat 0 RSSI 
81  // NEU
#002 1509692784  2d d4 ... b5    ID 6777 +21.1 44%  seq 0 lowbat 0 RSSI 
81  // NEU
#003 1509692786  2d d4 ... 85    ID 7e5e +22.0 41%  seq 2 lowbat 0 RSSI 
71  // ALT
#004 1509692789  2d d4 ... 3d    ID 1543 +29.4 28%  seq 5 lowbat 0 RSSI 
71
#005 1509692794  2d d4 ... c3    ID 743d +21.1 45%  seq 0 lowbat 0 RSSI 
81

#024 1509692840  2d d4 ... 00           BAD 1 RSSI 71 (CRC 00 25)   // 
ALT // ID 65f1 ist nicht empfangbar auf 868.330 MHz

#025 1509692849  2d d4 ... b5    ID 6777 +21.1 44%  seq 0 lowbat 0 RSSI 
81
#026 1509692849  2d d4 ... 7a    ID 7e5e +22.0 41%  seq 8 lowbat 0 RSSI 
71
#027 1509692850  2d d4 ... c3    ID 743d +21.1 45%  seq 0 lowbat 0 RSSI 
81

#028 1509692850  2d d4 ... a6           BAD 2 RSSI 80 (CRC a6 09)

von Oliver L (Gast)


Lesenswert?

Hallo zusammen,

ich habe auch kürzlich diesen Super Thread gefunden.
Vielen Danke an den Autor!!!

Es funktioniert perfekt auf meinem Raspberry 3.

Ich würde es jetzt gerne zusammen mit Home Assistent über das MQTT 
Protokoll auf dem einen Raspberry nutzen. Auch das ist mir mit der 
tollen Anleitung auf GitHub von Christian X gelungen.

Meinen Home Assistent habe ich dann auf den neuesten Stand gebracht. Der 
läuft jetzt aber unter dem Namen hass.io in einer Docker Umgebung. - Was 
prinzipiell recht elegant ist, da viele nützliche Zusatzpakete als 
Dockerimage per Menü dazu installiert werden können.

Leider fehlt mir zu Docker ein wenig Erfahrung. Ich habe es noch nicht 
geschafft tfrec unter Docker auf dem PI zum Laufen zu bewegen.

Falls da schon jemand weiter ist, würde ich mich über ein paar Tipps 
freuen.

Gruß, Oliver

von Christian X. (mikrocontroller-user)


Lesenswert?

tfrec, der MQTT-Broker und Dein Home Assistent sind unabhängig 
voneinander und können auch getrennt voneinander betrieben werden. 
Möchtest Du tfrec und Mosquitto aus einem bestimmten Grund auch unter 
Docker laufen lassen? Falls nein, müsstest Du im Docker-Container nur 
den Hostnamen Deines Pi als MQTT-Broker angeben. Andernfalls müsstest Du 
ein oder mehrere Docker-Images bauen (und pflegen).

von Oliver L (Gast)


Lesenswert?

Danke für die Rückmeldung.

Wenn ich die hass.io Plattform nutzen möchte, bleiben mir 2 
Möglichkeiten.
Entweder tfrec+MQTT Client in einem Docker Container oder
auf einem seperaten PI.
Hass.io ist als reine Trägerplattform gedacht. Da läuft Home Assistent, 
MQTT Brooker, SSL, SAMBA, DYNDNS,Let's Encrypt, ... alles sauber 
getrennt in Docker-Containern.
Ich würde halt gerne tfrec auf dem gleichen PI laufen lassen. Das hatte 
ich vorher auch mit WEEWX. Allerdings ohne Docker...

Ich werde noch ein wenig testen. Vielleicht liegts am USB Zugriff aus 
dem Container.

von deminex (Gast)


Lesenswert?

Hallo,

danke fuer das tolle tool. Habe es auf beaglebone black laufen.

Hat schon jemand Erfahrung mit dem Regensensor TFA 30.3306.02 
http://tfa-dostmann.de/index.php?id=161&L=0 ? Der soll nur mit 
WeatherHub Gateway gehen, da das Gateway auch mit den bekannten obigen 
Temperatur-Feuchte Sensoren funktioniert (ich habe einige 30.3180 und 
30.3181 die mit dem Gateway gehen sollen), hatte ich die Hoffnung, dass 
man die Daten auch mit tfrec sehen kann. Habe mir deshalb einen 
gebraucht besorgt, bisher sehe ich jedoch nichts, werde noch einmal im 
debug modus laufen lassen, jeweils einmal mit Regensensor an und aus, um 
dann die "nicht Regensensor" Daten auszufiltern und dann hoffentlich nur 
den Regensensor zu sehen. War aber im ersten Anlauf nicht erfolgreich. 
Gibt  es noch Ideen was man variieren könnte?

Ich kann leider auch nicht mit "normal" empfangenen Daten vergleichen, 
wollte mir kein Gateway ins Internet zulegen. Zum variieren der  Daten 
kann ich nur die Regenwippe haendisch betaetigen, um es mal gezielt 
regnen zu lassen und mal einen anderen Satz Daten zu bekommen .... .


Danke fuer weitere Ideen.

von Georg A. (georga)


Lesenswert?

Muss ich das Dingens wohl doch mal kaufen ;)

Du könntest aber auch mal mit der Empfangsfrequenz etwas rumspielen. Ich 
habe den Filter absichtlich recht eng gemacht, weil das die 
Empfindlichkeit steigert. Versuch mal 20kHz höher oder niedriger, also 
zB. 868230 oder 868270. Auch geht der jetzige Code davon aus, dass das 
Telegramm mehr als 9 Byte hat. Wenn der Sensor sonst nichts misst, 
könnte das Telegram auch kürzer sein.

von deminex (Gast)


Lesenswert?

Hallo,

hatte mit dem Regensensor bisher keinen Erfolg. Noch etwas mehr Info:
Die Teile werden wohl von Mobil-Alerts designed und anscheinend auf 
unter verschiedenen Labeln verkauft (ELV,Conrad), TFA ist nur ein 
weiterer.
Die IDs der Gerate besteht aus 12 Buchstaben, die ersten beiden geben 
den Typ des Geraets wieder (siehe mehr unter 
https://github.com/sarnau/MMMMobileAlerts/blob/master/MobileAlertsDevices.markdown). 
Der dortige Download dekodiert anscheinend die Datentelegramme vom 
Gateway in die Cloud. Es gibt wohl auch eine Menge anderer Sensoren, wie 
Fensterkontakte etc.

Deshalb ist das Telegramm eventuell auch laenger statt kuerzer. Ich habe 
im Quellcode tfaX.cpp im Debug Modus  die Ausgabe so geaendert, dass 
nicht fix n<11, sondern n<=byte_cnt ausgegeben wird. Aber die ID meines 
Sensors kann ich in den BAD Feldern nicht finden. Allerdings scheint es 
verstaerkt laengere Datensaetze zu geben, wenn ich den Sensor bewege. 
Ansonsten hat der wohl auch ein sehr langes Sendeintervall von 2h, in 
denen er dann meldet, dass es keinen kein Niederschlag gegeben hat. Ich 
bin natuerlich auch nicht sicher, ob die Startsequenz immer noch 
dieselbe ist .... .

Die veraenderte Frequenz scheint nicht zu helfen, die Datentelegramme 
bei "manuellem Regen" kommen auch bei der Standard Frequenz an.
Sonst noch Ideen? Danke.

Danke.

von Maik (Gast)


Lesenswert?

Moin, kannst du die Datensätze, die von dem Regenmesser stammen sollen 
veröffentlichen? Vielleicht erkennt ja jemand anderes was in den 
Datensätze.

Gruß
Maik

von deminex (Gast)


Angehängte Dateien:

Lesenswert?

Hallo, habe aktuelle Daten im Anhang, die Device ID ist 0832C158D623. 
Ich bin extra ausserhalb bewohnten Gebietes gefahren, so dass es keine 
anderen Sensoren gab. Daten gab es auch erst ab Bewegen der Sensorwippe 
des Regensensors. Die Frage ist noch, ob evtl. einer der Parameter 
verkehrt ist, d.h. Variation Baudrate oder Kodierungsverfahren, ich 
kenne mich mit Funk nicht aus, lohnt es sich, das Programm noch zu 
aendern, dass mit anderen Baudraten eventuell andere Daten empfangen 
werden, wie bei seriellen Verbindungen? Weil vorher geschrieben, in den 
Daten finde ich die DeviceID nicht. Außerdem nehme ich an, dass Inverted 
Sync auch auf einen falschen Parameter deutet? Wie wuerde man am besten 
andere Baudraten und Kodierungsverfahren in Kombination auswaehlen, ohne 
alles zu probieren, gibt es da ein bestimmtes Vorgehen?
Der Datensatz, der vom Regensensor vom Gateway in die Cloud gesendet 
wird, ist ja auf der Seite des Projektes 
https://github.com/sarnau/MMMMobileAlerts/blob/master/MobileAlertsDevices.markdown 
beschrieben, ich gehe mal davon aus, dass der genannte Datensatz, der im 
64Byte Block gesendet wird, mit dem Block im FunK Telegramm identisch 
ist, nur entsprechend kuerzer je nach Sensortyp. Demnach steht die 
Sensorid auch am Anfang.

von Georg A. (georga)


Lesenswert?

Danke, sieht aber nicht wirklich sinnvoll aus. Dass da ein scheinbar 
korrekter Sync (2d d4) erkannt wird, kann auch nur mit Rauschen 
vorkommen. Der Triggerlevel wird zur Empfindlichkeitssteigerung so nah 
ans Rauschen rangefahren, dass es so Fehlerkennungen ala Lotto schon mal 
geben kann.

Ich hab das Teil jetzt bestellt und werde mal schauen, was es wirklich 
so rausmorst. Kann aber etwas dauern, gibt noch ein paar grössere 
Projekte...

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

Hallo, vielleicht kann mir jemand kurz helfen.

Momentan binde ich mittels USB-WDE1-2 und Funksensoren(Auslaufmodell) 
Werte in eine in eine RRD-Datenbank ein (Raspberry).
Habe die Hoffnung das ich mein jetziges Rec.-script(angehängt) leicht 
abändern kann und tfrec direkt einbinden kann ?!
wäre nett wenn mir da jemand ein Beispiel geben könnte, ich würde da 
vermutlich Tage mit zubringen.

MfG Michael

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

Hallo, bei mir steigt die tfrec ständig aus, (Ungültiger 
Maschinenbefehl) besonders  -T1 läuft garnicht , fremde Sensoren mit -T2 
kann ich teils empfangen. Jemand ne Idee ?

von Georg A. (georga)


Lesenswert?

Im Makefile das -g bei PROFILING einkommentieren, make clean; make und 
dann im gdb starten.

gdb --args tfrec -T1
> r

Wenn es aufschlägt, "thread apply all bt"

BTW: was ist das für eine PI-Version? Evtl. stimmt was mit den 
Compiler-Flags nicht ganz...

von Michael (Gast)


Lesenswert?

Vielen Dank Georg, du hast mir sehr geholfen !
wie du wohl schon gemerkt hast bin ich nicht so der Programmierer ,
Es ist ein Raspberry 2B und es lag an den Cflags  , hab jetzt hin und 
her gegoogelt , jetzt sieht es so bei mir aus:

CFLAGS=-O2 -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=hard 
-ftree-vectorize -ffast-math \
              -std=c++0x -Wall \
              -Wno-unused-function  -Wno-unused-variable 
-Wno-unused-but-set-variable \
              -Wno-write-strings
CXXFLAGS="${CFLAGS}"

jedenfalls funktioniert es jetzt oder hast du noch Vorschläge ?
Nochmals DANKESCHÖN

von Thomas (Gast)


Lesenswert?

Hallo Georg

Erst mal herzlichen Dank für das tolle Tool.
Es wäre toll, wenn auch die Daten eines TX22IT (WS 1600) empfangen 
werden könnten.
Hast du bereits einmal daran gedacht? Würde das theoretisch gehen?
Das Format des TX22IT ist im JeeLink Sketch für LaCrossITPlusReader 
beschrieben.
Man könnte sie so den JeeLink in fhem sparen.

MfG Thomas

von Maik W. (istler)


Lesenswert?

Hallo Thomas,

wenn ich das richtig lese [1][2], dann müssten die Daten ja schon tfrec 
empfangen TFA_2 (17240bit/s) empfangen werden.
Kannst du mal bitte tfrec mit der Option -D starten, dann werden die 
Rohdaten als Hex-Werte aus gegeben. Da sollten dann die Daten [3] von 
deinem TX22IT eigentlich schon zu sehen sein. Die Daten des TX22IT 
müssen immer mit einem 0xA anfangen. Idealerweise sind die ersten drei 
Zeichen einer Meldung 0xa12 oder 0xa38.
Kannst du bitte ein paar dieser Hex-Daten hier posten?

Gruß
Maik


[1] http://www.g-romahn.de/ws1600/
[2] http://fredboboss.free.fr/articles/tx29.php#modulation
[3] http://www.g-romahn.de/ws1600/Datepakete_raw.txt

von Georg A. (georga)


Lesenswert?

Hm, ich bin auf folgendes gestossen:

https://wiki.fhem.de/wiki/JeeLink

...und wenn ich das bei der Liste der unterstützen Sensoren richtig 
lese, hat der TX22 eine Baudrate von 8842 und passt schon mal so zu 
keiner der von tfrec decodierten Baudraten (9600/17240/38400).

Keine Ahnung, was er damit dann sendet, aber man könnte mal in main.cpp 
beim Setup des TFA_2-Demodulators diese Baudrate einsetzen und schauen, 
was rauskommt (TFA_3 hat dasselbe Format nur andere Baudrate).

Also
demods.push_back(new tfa2_demod( tfa2_dec, (1536000/4.0)/17240));
durch
demods.push_back(new tfa2_demod( tfa2_dec, (1536000/4.0)/8842));
ersetzen.

Mit etwas Glück passt der Rest inkl CRC und es kommt schon was 
sinnvolles raus. Ansonsten mal im -D Modus die Pakete ausgeben lassen. 
Evtl sehe ich ja was...

von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Georg, Maik

Zuerst einmal herzlichen Dank für euren Feedback.

@Georg: Habe die Baudrate mal in main.cpp eingetragen und tfrec neu 
kompiliert.
-D zeigt leider nichts Brauchbares (siehe Screenshot im Anhang; nur 
Einträge mit BADx beachten!).

Vielleicht hilft euch die TX22IT.CPP Datei weiter. Hier ist das 
Datenformat beschrieben.

von Maik W. (istler)


Lesenswert?

Hallo Thomas,

kannst du ein Bisschen programmieren?
Das TFA2 erkennt die Pakete am Sync-Paddern 0x2dd4. Bei dem TX22IT soll 
aber das Sync-Padder 0xA lauten, also nur 4 statt 16 Bit.
Debug-Meldungen werden erst ausgegeben, wenn mehr als 7 Byte nach dem 
Sync-Paddern 0x2dd4 empfangen wurden.

Evtl. kannst du das printf in der Funktion tfa2_decoder::store_bit 
einkommentieren und gucken ob aus dem Input was zu erkennen ist. Es ist 
schwierig mit nur einem Nibbel (4 Bit) Sync-Paddern aus dem Bit-Strom 
den richtigen Startpunkt zu finden.
Zeige doch dann mal, was du empfangen hast. Aber es müssen deutlich mehr 
Zeilen sein, als in deinem Screenshot. Und am besten als Text-Datei. 
Jede Ausgabe ist ein Empfangenes Bit.

Gruß
Maik

von Georg A. (georga)


Lesenswert?

Das 2dd4 fehlt wohl in der Beschreibung, das a als erstes Nibble in der 
Payload passt schon. Damit sind af 35 xx wohl Pakete vom TX22. Aufgrund 
der Ähnlichkeit der Baudrate 9600 vs 8xxx gibts dann zwei ähnlich 
dekodierte Pakete, wo es einmal einen Bitschieber gibt (03 31 -> 06 43).

Ich schau mal, wie ich das reinbekomme. Aber bitte etwas Geduld, hab 
grad sonst einiges zu tun und ein TFA-Regenmengensensor steht auch noch 
unerkundet rum ;)

von Thomas (Gast)


Lesenswert?

Hallo Maik

Ich muss mal schauen was ich hin bekomme. Habe meine 
Programmiererfahrung noch aus Zeiten von Hex und Assembler wo Computer 
noch mit Dampf betrieben wurden :-).

Mfg Thomas

von Thomas (Gast)


Lesenswert?

Hallo Georg

Das wäre super. Ich denke tfrec würde so noch genialer :-).

Mfg
Thomas

von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Maik

Hier der Output von -D mit den von dir vorgeschlagenen Änderungen. Und 
diesmal als Textfile :-).

MfG Thomas

von Istler (Gast)


Lesenswert?

Hallo Thomas,
das war gar nicht mehr nötig. Georg hatte gesagt, dass für den TX22 auch 
das Sync-Paddern 0x2dd4 gilt. Und das 0xa schon bereits in deinem ersten 
Output enthalten war (die "Bad RSSI" Einträge).
Gruß
Maik

von Maik W. (istler)


Lesenswert?

Hallo Thomas,

kannst du irgendwo ablesen, was dein Sensor misst? Kann es bei deinem 
Dump 26,3 °C gewesen sein?
Die Funktion tfa2_decoder::flush gibt nur 7 Bytes aus, deshalb sind die 
Meldungen von deinem TX22 nicht vollständig in der Ausgabe. Maximal 
könnte die Meldung 13 Byte lang sein.
In der Zeile 55 steht der Kopf einer For-Schleife: for(int n=0;n<7;n++)
Kannst du mal statt der 7 eine 13 hinein schreiben. Dann wird zwar bei 
kürzen Paketen misst aus gegeben, aber dann sind auf jeden Fall die TX22 
Meldungen vollständig im Ausgabe.
Du kannst dann ja nochmal den Output posten.

Gruß
Maik

von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Maik

Die 26,3 °C sind vermutlich nicht korrekt. Es sollte so um 22 °C sein.
Ich hatte allerdings der Regen- und Windmesser nicht am TX22IT 
angeschlossen. Ich weiss daher nicht was der TX22 dann macht.
Sende dir wie gewünscht nun einen Output mit angeschlossen Regen- und 
Windmesern. An der Bassisstation wurden folgende Werte angezeigt: 
24,2°C; 1013hPa, 45%RH, 0,0Wind. Es werden im Vollbetrieb auch noch die 
Windrichtung sowie Böhen angegeben. Auf dem Schreibtisch findet halt nur 
"einfaches" Wetter statt :-).

MfG Thomas

von Maik W. (istler)


Angehängte Dateien:

Lesenswert?

Hi Thomas,

ich hatte ich mich verzählt, bzw. das Sync-Paddern 0x2dd4 nicht mit 
gezählt gehabt, deshalb fehlen jetzt bei deiner Ausgabe der letzte Wert 
und die Prüfsumme.
In deinem Trace waren wohl 9 Datenpakete von deinem TX22, davon waren 5 
Pakete korrekt empfangen:
Temperatur: 24,3 °C
Luftfeuchte: 45 %
Regen: 0
Wind: 0m/s 292,5°

Da lässt sich also was machen! :-)

Gruß
Maik

von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Maik

Korrekt, das habe ich auch bemerkt. Ich habe zwischenzeitlich auch ein 
bisschen mit meinen rudimentären C-Kenntnissen weiter "gefrickelt" :-). 
Das Resultat siehst du im Output im angehängten File (Darstellung im txt 
File nicht so optimal). Es scheint also grundsätzlich zu gehen. CRC 
Berechnung ist noch falsch. Wenn ich Zeit habe, versuche ich mal den 
Code aus dem fhem LaCrosseITPlusReader in tfrec zu integrieren oder 
einer von euch Profis macht das ;-). Ich denke das wertet tfrec nochmals 
auf, zumal man damit relativ einfach mit fhem und Homematic CCU2 einiges 
machen kann.

MfG Thomas

von Thorsten (Gast)


Lesenswert?

Hallo zusammen,

nachdem ich seit Jahren eine Klimalog Station mit 8 Sensoren betreibe 
wollte ich jetzt eine bessere Auswertung durchführen.

Ich habe das tfrec auf meinem Raspi zum laufen gebraucht und der Empfang 
der Sensoren geht auch.

Jetzt würde ich gern die weitere Auswertung in python durchführen.

Kennt jemand von Euch eine einfache Möglichekeit, die Sensorwerte 
einfach dort einzulesen?

Gruß
Thorsten

von Maik W. (istler)


Lesenswert?

Hallo Thorsten,

du kannst tfrec beim Starten eine Programm mitgeben, dass bei jedem 
Emfpang aufgerufen werden soll:
1
-e <exec>   : Executable to be called for every message (try echo)
z. B.:
1
tfrec -e pushvals

Das Programm 'pushvals' verarbeitet dann die empfangenen Sensorwerte und 
könnte ein Phyton-Skript sein.

Gruß
Maik

von Thorsten (Gast)


Lesenswert?

Hallo Maik,
vielen dank für deine schnelle Antwort.

Das Skript, an das ich übergeben möchte, läuft selbständig, 
dementsprechend wollte ich die Werte auf eine andere Art übergeben.

Ich habe jetzt mal einen fifo angelegt und tfrec so aufgerufen:

tfrec -T 1 > myfifo &

Das Auslesen der Daten aus dem Fifo in meinem python script funktioniert 
schon.

Allerdings ist der fifo doch blocking, hast du eine Ahnung, was tfrec 
macht, wenn ich es nicht so häufig aus dem Fifo hole?

Oder sind die Wert dann nicht mehr aktuell?

Gruß
Thorsten

von Georg A. (georga)


Lesenswert?

So ein Fifo per mkfifo hat typischerweise 4KB. Da muss schon einiges 
zusammenkommen, dass die Ausgabe blockiert... Wenn das passiert, kann es 
es sein, dass einige Werte verloren gehen. Aber die Werte von den 
Sensoren kommen alle 10s, kann nicht so schlimm sein.

Ansonsten könntest du ja noch die "Sammelvariante" mit Abbruchzeit 
benutzen (zB. '-m 1 -w 60').

von Georg A. (georga)


Lesenswert?

Zum WeatherHub-Regensensor 30.3306.02: Ich habe jetzt nach recht 
mühevollem Reverse-Engineering immerhin die rohen Telegramme 
rausbekommen. Das Ding ist total anders als alle anderen Sensoren.

Zum einen sendet es mit jedem Wippen 16mal 5Byte-Telegramme im 
Zickzack-Frequenzsprungverfahren mit 4000bit/s. Das scheint kompatibel 
zu irgendwas Uraltem zu sein. Die Infos sind immer dieselben, mit der 
aufgedruckten ID hat das auch nichts zu tun. Wenn man einen Puls 
verpennt, hat es weniger geregnet, bei einem anderen Sensor in der 
Umgebung doppelt soviel ;)

Es gibt aber dahinter nochmal zwei identische, recht lange Telegramme 
mit 6000bits/s, an denen ich mir jetzt doch länger die Zähne ausgebissen 
habe. Aber irgendwann gings dann doch. Es ist PSK-moduliert mit NRZM 
und mit G3RUH-Scrambling, deswegen sieht man da erstmal gar nichts 
Sinnvolles. Es stecken in 41 Bytes dann die 6 Byte ID, ein Counter der 
Wipp-Impulse und sogar eine History der Zeitabstände der letzten Pulse 
drin.

Allerdings habe ich noch nicht rausgefunden, mit welcher CRC das 
geschützt ist. Sieht nach einer CRC32 aus, aber da gibts viele 
Möglichkeiten...

Desweiteren habe ich eben nur den Regensensor. Das Protokoll scheint 
recht universell, daher wären andere WeaterHub-Typen hilfreich. Bevor 
ich mir da jetzt ein paar leiste (Wind, Türsensoren und Temp/Hygro gäbs 
noch in nicht-wirklich-billig): *Hat jemand hier was anderes aus der 
Serie*? Dann könnte ich den rohen Telegramm-Dumper schon mal ins git 
stellen und evtl. sieht man mehr vom Format...

: Bearbeitet durch User
von deminex (Gast)


Lesenswert?

Ich habe bisher keine weiteren WeatherHub Geraete, werde mich mal 
umsehen was am besten passt und dann kaufen. Ich nehme an ein zweiter 
Regensensor hilft nicht, ist die ID ausserhalb des CRC?

von Georg A. (georga)


Lesenswert?

Das mit der CRC finde ich schon noch, gibt algorithmische Möglichkeiten, 
das auszuknobeln, muss mich da etwas einarbeiten. Eine "echte" CRC ist 
es aber, das lässt sich anhand einiger spezieller Eigenschaften 
nachweisen. Die ID ist auch offensichtlich.

Es geht eher um die Füllung der anderen ~30 Bytes bei den verschiedenen 
Sensor-Typen und wie man erkennt, was was ist. Da habe ich bislang nur 
Vermutungen. Muss mal in mich gehen, was ich mir leisten will. Aber 
mehrere Exemplare sind immer gut fürs Reverse-Engineering ;)

von Georg A. (georga)


Lesenswert?

<offtopic> CRC erledigt dank einem schönen Reverse-Engineering-Tool:

http://reveng.sourceforge.net/

Die Doku ist zwar etwas kryptisch, aber das Tool findet per Brute-Force 
alles raus, was man so braucht... Hat keine Minute gedauert :) Es ist 
zwar ein Standard-Polynom, aber ein sehr krummer-Init-Wert.

von deminex (Gast)


Lesenswert?

Ok, habe ein Set Tuersensoren bestellt. Sollen Anfang naechster Woche da 
sein. Kann dann Daten sammeln und schicken. Es gibt (fuer mich) 
interessantere Geraete, die bereits angekuendigt werden, aber noch nicht 
verfuegbar.

von Georg A. (georga)


Lesenswert?

Hab ein paar Sachen committed:

Support für TX22 (so halb fertig, aber nur trocken getestet)

Muss mit mit "-T 8" angeschaltet werden. Da neben Temperatur (temp) und 
Luftfeuchtigkeit (hum) auch noch Wind&Co rauskommen und auch temp+hum 
getrennt gesendet wird, codiert die ID beim TX22 die neuen Werte des 
Ausgabestrings:

300bccd

cc ist die ID des Sensors
d=0 temp (hum ist immer 0)
d=1 hum (temp ist immer 0)
d=2 Regenzähler (12Bit), Menge pro Kipper müsste man ausmessen...
d=3 temp=Windgeschwindigkeit (m/s), hum=Windrichtung (Grad)
d=4 temp=Böengeschwindigkeit (m/s), hum=0

Keine Ahnung, ob das wirklich so geht, hab keinen TX22 ;) Auf jeden Fall 
wären rohe Telegramme aus dem echten Leben (mit -D) sehr hilfreich.

Reverse-Engineering-Support für WeatherHub :

Muss mit "-D -T 20" angeschaltet werden und wirft nur die rohen 
Telegramme aus. Bei meinem Regensensor sieht das so aus:
1
4b 2d d4 2b 25 08 33 c2 70 80 f1 40 a5 00 c6 00 86 c0 00 ... 
2
<--SYNC--?> |  <-----ID--------> TV VV  <-->    ??       
3
            Länge?               Typ/value |Temp
4
5
... cd 63 c0 0a c0 53 c0 0e c0 1a e6 ea c2 2c 84 89 c0 01 66 90 a5 2b
6
    <---- Zeitdifferenz zu letzten Pulsen---------------> <--CRC---->

Der Value-Wert ist beim Regensensor einfach ein Zähler pro Wippenkipper 
(=250ml/m^2, vermutlich 11 oder 12 bit). Die Temperatur ist 
11Bit-Zweierkomplement in 0.1Grad, aber recht rauschig, da die wohl 
direkt im Prozessor gemessen wird. Der Rest ist eine History der Zeiten 
der letzten Kipper, vermutlich damit man einfach die l/h hochrechnen 
kann.

Die ID ist die, die auch als QR-Code aufgedruckt ist. Das 
WeatherHub-System ist halt der übliche Cloud-Wahnsinn, wo die Sensoren 
weltweit eindeutig sind und das Gateway die Werte nur in die Cloud 
hochlädt und die App das anhand der ID wieder runter...

Ich habe noch keine Ahnung, wie Format das bei anderen Sensortypen aus 
der Serie aussieht. Insbesondere weiss ich nicht, ob die Telegramme 
immer gleich lang sind (die 0x25 passt zur Länge, also wären andere 
Längen möglich), ob das 2b noch zum RF-Sync gehört oder schon den 
Sensortyp codiert, etc. Also immer her mit den Telegrammen :)

: Bearbeitet durch User
von deminex (Gast)


Angehängte Dateien:

Lesenswert?

Das WeatherHub Format sieht so aus als ob der in die Cloud transferierte 
Datenblock mit dem per Funk gesendete Datenblock uebereinstimmt, 
zumindest im Header (Siehe 
https://github.com/sarnau/MMMMobileAlerts/blob/master/MobileAlertsGatewayBinaryUpload.markdown)

Im Anhang der Datensatz eines Regensensors und eines Tuersensors, in den 
Dateien die IDs der Sensoren.

Demnach ist beim Regensensor 25 die Laenge des Pakets (immer gleich beim 
Regensensor) und die ID beim Regensensor beginnt immer mit 08, beim 
Tuerkontakt ist die Paketlaenge immer 17, die ID beginnt immer mit 10.

Uebereinstimmung mit der Beschreibung im Datenblock muss ich mir noch 
genauer ansehen. Aber anscheinend liefern fast alle Sensoren auch noch 
eine Temperatur mir.

von Georg A. (georga)


Lesenswert?

Ah, super... Hätte mich ja gewundert, wenn das auf LAN-Seite noch keiner 
angeschaut hätte ;)

Zur Beschreibung des Regensensors: Wippe links/rechts gibts IMO nicht, 
weil bei mir der Reedkontakt immer nur beim Wippen selbst geschlossen 
wird. D.h. man weiss nicht, wo die Wippe eigentlich ist. Hab da als 
oberstes Nibble ausser 4 (Wipp-Event) oder 0 (Timeout/Repeat) noch nie 
was anderes gesehen.
Das Word nach dem Wipp-Counter scheint die Zeit "ohne Events" zu sein. 
Die zählt nur bei den Timeout-Repeats hoch, ansonsten ist sie immer 
c000. Sie geht auch nicht in die Event-History danach ein, da zählen 
wohl wirklich nur Wipp-Ereignisse und nicht die Wiederholungen.

Auf dem Regensensor sieht man ganz gut, dass die Temperatur 
offensichtlich direkt in der CPU gemessen wird, es gibt nichts auf der 
Platine, was das sonst könnte. Kältespray auf den Blob der CPU lässt das 
auch sofort reagieren. Deswegen wird das auch nicht allzu genau sein.

Jetzt kann ich mir mal überlegen, wie man den Kram in tfrec reinbekommt. 
Die bisherige Art der Übergabe von Temperatur und Luftfeuchtigkeit ist 
bei der Vielzahl der jetzt möglichen Werte irgendwie etwas 
unterdimensioniert...

von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Georg

Anbei ein paar TX22 original Daten zum Testen mit deinem neuen Code 
(TX22 ohne angeschlossen Wind- und Regensensor!).
Zwischenzeitlich habe ich auch etwas selber "herumgebastelt" und auf 
Basis deines Codes die TX22 Daten auseinander genommen.
Bitte verzeih den Code. Ist alles mit Try & Error entstanden. Vielleicht 
kannst du das Eine oder Andere daraus bezüglich Werte-Berechnung 
verwenden.
Basis ist der Code von JeeLink-LaCrossITPLusReader.
Bei mir wurden jedenfalls alle Werte korrekt angezeigt.
Ich erhalte nur relativ viele CRC-Fehler.

Mfg
Thomas

von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Georg

Kann es sein, dass in der Routine "tfa2_decoder::flush_tx22" die CRC 
Berechnung nicht korrekt ist?
Ich erhielt keine korrekten Ausgaben. Die crc_val und crc_calc sind 
nicht identisch.
Habe daher folgende Zeilen angepasst:
crc_val=rdata[2*num+4]; (original +6)
crc_calc=calc->calc(&rdata[2],2+2*num); (original 3+2*num)
Nun sind crc_val und crc_calc identisch.

Hast du das Datenmodell bewusst nicht für den TX22 ergänzt? Du schreibst 
alle berechneten Daten in sd.temp.

Habe dir meine angepasste tfa2.cpp angehängt sowie das ergänzte 
Datenmodell.
So erhalte ich einen korrekten Output aller Messwerte des TX22.

Was mir beim spielen mit meinem TX22 aufgefallen ist, dass er einen 
relativ grossen Frequenz-Offset hat. (meiner arbeitet auf 868.225 MHz). 
Wenn man dann noch andere Sensoren gleichzeitig lesen möchte, welche auf 
868.250 MHz arbeiten gibt es viele Auslesefehler.

Mfg
Thomas

von Georg A. (georga)


Lesenswert?

Thomas schrieb:
> Hast du das Datenmodell bewusst nicht für den TX22 ergänzt?

Ich habe genau diese Zeile nach Indien outgesourced ;)

Ich korrigiere das, der WeatherHub-Kram bekommt auch ein grösseres 
Update (Regen-, Wind-, Fenster- und Temperatursensoren sind jetzt 
durch.).

> Was mir beim spielen mit meinem TX22 aufgefallen ist, dass er einen
> relativ grossen Frequenz-Offset hat. (meiner arbeitet auf 868.225 MHz).
> Wenn man dann noch andere Sensoren gleichzeitig lesen möchte, welche auf
> 868.250 MHz arbeiten gibt es viele Auslesefehler.

Das ist das Problem des engen Filters. Gut für die Empfindlichkeit (der 
SDR-Stick ist jetzt ja nicht so der Knaller beim Rauschen), leider 
schlecht für Sender mit Gummi-Quarzen bzw. absichtlichen Offsets. Eine 
Option für einen breiteren Eingangsfilter müsste eigentlich drin sein.

von Georg A. (georga)


Lesenswert?

So, alles neu macht der Mai:

- WeatherHub-Support für 5 Sensortypen ist jetzt drin (Temp+Hum, 
Temp+Hum+Wetness, Rain, Wind, Door)
- TX22 sollte jetzt passen (neues Spiel, neues Glück...)
- Breiterer Filter mit -W, toleriert grössere Frequenzoffsets

BTW: WeatherHub/TX22 müssen explizit angeschaltet werden (-T 20 bzw 8).

Thomas schrieb:
> Hast du das Datenmodell bewusst nicht für den TX22 ergänzt?

Ah, hab ich falsch verstanden. Ja, das war Absicht, weil ich das 
Aufrufformat des Handlers nicht ändern wollte. Stattdessen gibt es 
Subtypen als letztes Nibble der ID (wie schon bei den Sensoren mit zwei 
Temperaturen) und die anderen Werte werden auf Temperatur und 
Feuchtigkeit verteilt. Dasselbe Prinzip wird jetzt auch bei den 
WeatherHubs benutzt. Damit kann ein Datenpaket vom Sensor mehrere 
Handleraufrufe mit mehreren IDs triggern.

Zum WeatherHub: Es gibt immer noch das Problem, dass ich noch nicht 
rausgefunden habe, wie der Typ-abhänge CRC-Init-Wert ausgewürfelt wird. 
D.h. neue Typen (zB. die Technoline-MobilerAlerts-Geräte) gehen nur, 
wenn ich ein paar Raw-Messages dazu habe. Einen Temp+Hum-Sensor habe ich 
bei mir in der Nachbarschaft schwach "gehört", daher geht der jetzt auch 
;)

Beim Regensensor kommt nur der rohe Counter raus, der natürlich auch mal 
einen Wraparound haben kann. Daher muss man das noch extern 
nachbearbeiten, 1 Counter-Tick sind ca 0.25mm/m^2.

von Thomas (Gast)


Lesenswert?

Hallo Georg

Kam erst jetzt dazu deinen neuen Code für TX22 zu testen. Leider nicht 
erfolgreich. Es werden keine gültigen Daten ausgegeben.
Fehlermeldung, aufgrund falschem CRC-Vergleich, es wird eine falsche 
Frame-Länge angezeigt.
Ich habe deine Methode, wie du die Framelänge bestimmst (noch) nicht 
durchschaut. Du weisst, der TX22 verwendet eine variable Frame-Länge, 
welche der TX22 mitliefert (Anzahl Nibbles in rdata[3]). Nach ca. 5h 
sendet der TX22 nicht mehr alle Sensordaten mit.

Mfg
Thomas

von Georg A. (georga)


Lesenswert?

Achje, kommt davon, wenn man sich nur alles ohne Tests 
zusammenfantasiert. Ich schau noch mal drauf und versuche, die 
Telegramme von oben irgendwie einzuspeisen.

von Georg A. (georga)


Lesenswert?

Thomas schrieb:
> Nach ca. 5h sendet der TX22 nicht mehr alle Sensordaten mit.

Ich habe das jetzt mal simuliert, finde aber keinen offensichtlichen 
Fehler. Mit den kürzeren Demo-Paketen von 
http://www.g-romahn.de/ws1600/Datepakete_raw.txt passt eigentlich alles, 
die CRC wird schon richtig extrahiert.

Kannst du mal ein paar rohe Frames posten (nur -T 8 -DD)? Ich habe den 
Verdacht, dass evtl. schon die Bits selbst aufgrund der (krummen) 
Datenrate falsch demoduliert werden. Der Teil ist so gefühlt noch wenig 
tolerant.

von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Georg

Sorry dass es so lange gedauert hat.
Hier wie gewünscht der Dump. Hoffe die Anzahl reicht.
Die Länge des Frames (byte_cnt) ist nicht korrekt.

Mfg
Thomas

von Georg A. (georga)


Lesenswert?

Danke... Aber ich glaube, das es da schon falsch empfangen wird. 
Irgendwie sind die Telegramme zu kurz für 5 Werte und sie sind auch so 
nicht stimmig, zB.

#001 1527281284  2d d4 a8 35 06 62 10 48 21 fc 83 c0 00
#002 1527281288  2d d4 a8 35 06 62 10 47 21 fc 83 c0 00

Da ändert sich ein Wert mittendrin (48->47) und der Rest bleibt gleich? 
Kann so nicht sein... Der Frequenzoffset ist da auch schon grenzwertig. 
Versuch mal mit -W den breiteren Filter oder manuelle Frequenzeingabe.

von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Ändert sich leider nichts. Die Telegramme sind immer zu kurz (meistens 
13 Bytes).

Im Anhang habe dir als Beispiel ein Dump von der "alten" Version 
angehängt, welche ich seinerzeit modifiziert hatte. Die Telegramme 
sollten in den ersten 5h 18 Bytes lang sein.
Ich konnte in deinem neuen Code auch nicht erkennen, wo Problem 
entsteht.

von Georg A. (georga)


Lesenswert?

Vermutlich ist der Timeout an der Grenze, sonst würden die Pakete nicht 
so abgewürgt aussehen. Setz mal in tfa2_demod::demod das 
"timeout_cnt=16*spb" auf 32*spb.

von Thomas (Gast)


Lesenswert?

Hat leider auch nicht geholfen.

von Georg A. (georga)


Lesenswert?

Hab mir jetzt auch so einen ominösen TX22 angeschafft... Das Problem war 
ein zu scharfer Check auf zuviele 0-Bits. Sowas gabs bei den anderen 
Sensoren nicht... Deswegen wurden diese Bereiche ignoriert, die 
Telegramme verkürzt und damit ruiniert. Jetzt sollte es gehen.

von Thomas Nick (Gast)


Lesenswert?

Bin leider erste jetzt dazu gekommen die neue Version zu testen. Scheint 
aber jetzt zu funktionieren :-). Herzlichen Dank für deine Hilfe.

von Chris (Gast)


Lesenswert?

Hallo,

zuerst mal danke für tfrec, das ist wirklich genial!
Ich hab mir vor gut einem Jahr die TFA Klima Home (30.3060.01) geholt, 
die mir als gute Lösung erschien (Preisgünstig, 3 externe Sensoren schon 
dabei, und eine relative schöne Station die auch gleichzeitig die Werte 
von allen 3 Sensoren und den von der Station anzeigt).
Die dabei mitgelieferten Sensoren sind 30.3180.IT womit mir klar war, 
dass ich die mit tfrec lesen kann.
Das ganze hat auch dann recht gut funktioniert. Leider hat sich jetzt 
vor kurzem einer der externen Sensoren verabschiedet und TFA hat mich an 
amazon wegen Tausch verwiesen.
Die haben mir auch brav ein komplett neues Set geliefert. Ich kann von 
diesem jetzt aber keine Werte empfangen mit tfrec.
Die neuen Sensoren sind auch von der gleichen Type 30.3180.IT haben aber 
in neueres Datum (11/2017 statt 02/2017) darunter steht dann V026 C2 
statt V022 C2.
Die alte Basisstation kann die Daten von den neuen Sensoren auch 
empfangen (die neue Basistation war schon defekt angekommen), sodass 
sich davon ausgehen, dass sich nichts grundsätzlich geändert hat.
Auch wenn ich tfrec mit -D oder -DDD aufrufe sehe ich von den neuen 
Sensoren nicht, die Daten der alten Sensoren kommen aber an, auch ein 
anderer Sensor (wohl von einem Nachbar) taucht auf.
Was kann es da haben?
Aja und noch einen Nebenbaustelle: Die Basisstation kann ja TFA 
WeatherHub, die würde so auch die Daten von allen externen Sensoren und 
auch den internen Sensor raussenden.
Die Daten sehe ich mit tfrec auch, können aber wohl nicht ausgewertet 
werden:
tfrec -D -T 20 -W
Registering demod for TFA_WHB sensors, 6000 bit/s
WHB: Samples per bit: 64.0
Wide filter
Found Rafael Micro R820T tuner
AUTO GAIN
Frequency 868.2500MHz
Samplerate 1536000
START READ THREAD
#000 1539205083 L=56  4b 2d d4 2b 2e 11 7a dd af 2f f6 05 d0 00 72 08 4e 
00 ca 08 34 00 83 08 4b 00 d3 08 34 00 73 08 4d 00 cb 08 34 00 84 08 4b 
00 d3 08 34 1a 29 3c 63 35 00 00 00 96 69 01  RSSI 87 WHB: Probably 
unsupported sensor type 11! Please report

WHB BAD 1 RSSI 87 (SANITY)
#001 1539205083 L=56  4b 2d d4 2b 2e 11 7a dd af 2f f6 05 d0 00 72 08 4e 
00 ca 08 34 00 83 08 4b 00 d3 08 34 00 73 08 4d 00 cb 08 34 00 84 08 4b 
00 d3 08 34 1a 29 3c 63 35 00 00 00 96 69 01  RSSI 87 WHB: Probably 
unsupported sensor type 11! Please report

WHB BAD 2 RSSI 87 (SANITY)
#002 1539205083 L=56  4b 2d d4 2b 2e 11 7a dd af 2f f6 05 d0 00 72 08 4e 
00 ca 08 34 00 83 08 4b 00 d3 08 34 00 73 08 4d 00 cb 08 34 00 84 08 4b 
00 d3 08 34 1a 29 3c 63 35 00 00 00 96 69 01  RSSI 87 WHB: Probably 
unsupported sensor type 11! Please report

WHB BAD 3 RSSI 87 (SANITY)
#003 1539205083 L=56  4b 2d d4 2b 2e 11 7a dd af 2f f6 05 d0 00 72 08 4e 
00 ca 08 34 00 83 08 4b 00 d3 08 34 00 73 08 4d 00 cb 08 34 00 84 08 4b 
00 d3 08 34 1a 29 3c 63 35 00 00 00 96 69 01  RSSI 87 WHB: Probably 
unsupported sensor type 11! Please report

WHB BAD 4 RSSI 87 (SANITY)


Was kann ich denn machen, damit die neuen Sensoren funktionieren?

Vielen Dank schon im Voraus
Chris

von Georg A. (georga)


Lesenswert?

> Was kann es da haben?

Möglicherweise ist die Mittenfrequenz zu weit weg. Versuch mal -f 868200 
oder 868300, evtl. auch -W. Ich hab halt die Filter relativ eng gemacht, 
damit ist die Empfindlichkeit IMO deutlich besser als die Basisstation.

> Was kann ich denn machen, damit die neuen Sensoren funktionieren?

Ich brauche drei unterschiedliche Messages, die vier oben sind alles 
Wiederholungen und daher identisch. Da steckt ein Typ-abhängiger 
Startwert einer CRC drin, wo ich noch nicht rausbekommen habe, wie er 
entsteht (ausgewürfelt oder basierend auf irgendeinem Algorithmus). 
Daher muss das per Brute-Force ausgerechnet werden.

: Bearbeitet durch User
von Chris P. (chrisp31)


Angehängte Dateien:

Lesenswert?

Hallo Georg,

danke für die schnelle Antwort!
Das mit dem Anpassen der Frequenz hat funktioniert, ich hab die noch 
etwas weiter erhöht auf 868350 weil bei 868300 gab es fehlerhafte 
Pakete.

Wegen dem Weatherhub hab ich jetzt tfrec mal ca eine Stunde raufen 
gelassen. Der Output ist im Anhang.

Danke
Chris

von Georg A. (georga)


Lesenswert?

Danke, hab den CRC-Startwert schon. Muss mir jetzt nur noch überlegen, 
wie ich für die 5 Werte aus dem Paket eine eindeutige ID erzeuge.

Das mit der anderen Frequenz bei den neuen Sensoren ist interessant, da 
bräuchte es wohl ein automatisches Frequenzhopping, wenn man alte und 
neue zusammen benutzt. Oder paralleles Dekodieren mit unterschiedlichen 
Filtern, das kostet aber CPU...

von Georg A. (georga)


Lesenswert?

Die WeatherHub-Stationen 30.3060.01 ("Coloris") und 35.1147.01 
("Klima@Home") werden jetzt auch unterstützt. Die internen Werte haben 
als ID-Nibble die 0, der Outdoor-Wert bzw. die Werte der drei anderen 
Sensoren c bis e. Beispiel ist im Readme.

von Andi G. (Gast)


Lesenswert?

Hallo Georg,

zuerst mal vielen Dank für die tolle Arbeit.

Leider habe ich aber ein Problem...

Ich habe die TFA 30.3180.IT im Einsatz. Sie liefern auch brav Werte.
Allerdings habe ich im Sekundentakt folgende Fehlermeldung:

Dec 26 11:29:53 raspberrypi run-tfrec.sh[10879]: Warning: Unable to 
locate configuration directory, default config not loaded.
Dec 26 11:29:53 raspberrypi run-tfrec.sh[10879]: Warning: Unable to 
locate configuration directory, default config not loaded.
Dec 26 11:29:54 raspberrypi run-tfrec.sh[10879]: Warning: Unable to 
locate configuration directory, default config not loaded.

Die Installation habe ich nach Anleitung von Christian gemacht.
(https://github.com/git-developer/fhem-examples/wiki/Temperatur-Feuchte-Sender-mit-tfrec-und-MQTT)

Auf der Kommandozeile kommt keinerlei Fehler.
Nur beim Start über das Script kommen die Fehler.

Das Config File ist eindeutig hinterlegt, Rechte 0777.

Kann irgendwo in der Source noch ein Verweis sein, der Schwierigkeiten 
macht?

Vielen Dank
Andi

von Christian X. (mikrocontroller-user)


Lesenswert?

Die Meldung kommt vom Mosquitto-Client (siehe 
https://github.com/eclipse/mosquitto/blob/0cca732c816b6aa47e907a19e21656dd419f6dc5/client/client_shared.c#L219 
), wenn die Umgebungsvariable HOME (bzw. USERPROFILE  unter Windows) 
nicht gesetzt ist.

HOME wird normalerweise beim Login o.ä. gesetzt (siehe 
https://unix.stackexchange.com/questions/123858/is-the-home-environment-variable-always-set-on-a-linux-system 
und 
https://superuser.com/questions/271925/where-is-the-home-environment-variable-set 
); interessant, dass das bei Dir für den ausführenden User nicht der 
Fall zu sein scheint.

Vielleicht hilft Dir das etwas weiter.

von Andi G. (Gast)


Lesenswert?

Christian X. schrieb:
> Vielleicht hilft Dir das etwas weiter.

Vielen Dank, Christian.
Dann werde ich das gleich mal prüfen.

von Andi G. (Gast)


Lesenswert?

also HOME ist für den ausführenden User "mosquitto" gesetzt:
HOME=/var/lib/mosquitto

...wobei das Verzeichnis schon etwas eigenartig ist.
Wurde aber bei der Installation so angelegt/festgelegt.

Habe den user "mosquitto" nun mal probehalber in die root Gruppe 
geschoben.
Mal sehen was passiert...

von Andi G. (Gast)


Lesenswert?

Andi G. schrieb:
> Habe den user "mosquitto" nun mal probehalber in die root Gruppe
> geschoben.
> Mal sehen was passiert...

Leider kein Erfolg.
Immer noch die Fehlermeldungen.

Ich werde jetzt mal das Home Verzeichnis verschieben (Inhalt kopieren 
nach /home/mosquitto; home variable beim user mosquitto ändern von 
/var/lib/mosquitto nach /home/mosquitto)

(...blindes rumstochern, da ich es wie Christian schon schrieb, auch 
nicht verstehe...)

von Georg A. (georga)


Lesenswert?

Hab keine Ahnung von Mosquitto, aber du könntest rausfinden, wonach da 
eigentlich gesucht wird, indem man da ein Helper-Skript für den Client 
dazwischenschaltet, so ala

#!/bin/bash
strace -o /tmp/dbg.txt <client.exe> $*

Das Skript könnte man dann auch nutzen um das passende Environment zu 
schaffen...

von Andi G. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Georg,

anbei nun das strace log vom tfrec Aufruf.
Ich bin kein Spezialist, aber sieht mir nach einem Speicherthema aus.

Im mosquitto client_shared.c 
(https://github.com/eclipse/mosquitto/blob/0cca732c816b6aa47e907a19e21656dd419f6dc5/client/client_shared.c#L204), 
ab Zeile 204 wird die HOME Varible oder die XDG_CONFIG_HOME Variable 
ausgelesen und dann per malloc damit Speicher reserviert/allokiert 
(soweit ich richtig verstehe). - Danke nochmal an Christian für den 
Hinweis, wo die Meldung herkommt.
1
#ifndef WIN32
2
  env = getenv("XDG_CONFIG_HOME");
3
  if(env){
4
    len = strlen(env) + strlen("/mosquitto_pub") + 1;
5
    loc = malloc(len);
6
    if(!loc){
7
      fprintf(stderr, "Error: Out of memory.\n");
8
      return 1;


Wenn alle Abfragen fehlschlagen, kommt es zu der Fehlermeldung: 
"Warning: Unable to locate configuration directory, default config not 
loaded."
(Zeile 235):
1
}else{
2
      fprintf(stderr, "Warning: Unable to locate configuration directory, default config not loaded.\n");
3
    }

Das strace log liefert unmittelbar vor der Warnmeldung die dazu 
passenden Aufrufe:
1
brk(NULL)                               = 0x1dbe000
2
brk(0x1ddf000)                          = 0x1ddf000
3
write(2, "Warning: Unable to locate config"..., 78) = 78

googlen nach brk(NULL) liefert das hier:
https://unix.stackexchange.com/questions/464974/why-execve-and-brknull-are-always-the-first-two-system-calls

Dazu passt auch ein weiteres Problem, das bei mir nach einiger Zeit 
auftaucht. (Ich hatte das bisher so nicht im Zusammenhang gesehen.)
Zitat aus dem Beitrag:
In Linux a new process is created via fork()
Nach etwas mehr als einem Tag erhalte ich Fehlermeldungen im 
Zusammenhang mit "fork":
1
Cannot fork: Cannot allocate memory
(im selben Sekundentakt, wie die Warnmeldungen...)

Es scheint also erheblich komplizierter zu sein, als zunächst gedacht...

von Christian X. (mikrocontroller-user)


Lesenswert?

Andi G. schrieb:
> Ich bin kein Spezialist, aber sieht mir nach einem Speicherthema aus.

Das glaube ich nicht.

> Wenn alle Abfragen fehlschlagen, kommt es zu der Fehlermeldung:
> "Warning: Unable to locate configuration directory, default config not
> loaded."

Nein. Nur wenn die Umgebungsvariable 'HOME' nicht gesetzt ist, wird die 
Meldung ausgegeben. Andernfalls wird die Zeichenkette 
"$HOME/.config/mosquitto_pub" auf die Variable 'loc' geschrieben. 
Schlägt das fehl, wird die Meldung "Out of memory." ausgegeben. Das 
scheint bei Dir aber nicht der Fall zu sein.

Ich denke, dass die Umgebungsvariable 'HOME' beim Aufruf von 
'mosquitto_pub' nicht (oder nicht wirksam) gesetzt ist. Ihr Wert ist 
übrigens völlig egal, und auch, ob sie auf ein existierendes Verzeichnis 
verweist.

Der Aufruf von 'exec' im Skript 'run-tfrec.sh' führt dazu, das ein neuer 
Prozess gestartet wird. Vielleicht erbt dieser neue Prozess auf Deinem 
System nicht die Umgebungsvariablen vom Elternprozess.

Idee 1: Probier mal, die Variable 'HOME' explizit in 
'publish-tfrec-to-mqtt.sh' zu setzen:
1
MQTT_TOPIC_PREFIX=devices/tfa/30.3180.it
2
MQTT_BROKER_HOSTNAME=localhost
3
HOME=/var/lib/mosquitto

Idee 2: Entferne das 'exec' in 'run-tfrec.sh'.

von Christian X. (mikrocontroller-user)


Lesenswert?

Ich nutze mosquitto auf zwei verschiedenen Raspberry Pi 3 Model B (auch 
unabhängig von tfrec).

Auf dem ersten läuft Raspbian Jessie (Kernel 4.9.35-v7+, 
mosquitto-clients 1.3.4-2+deb8u3). Dort läuft alles wie es soll.

Auf dem zweiten läuft Raspbian Stretch (Kernel 4.14.78-2-osmc, 
mosquitto-clients 1.4.10-3+deb9u2). Dort muss ich in dem Skript, das 
'mosquitto_pub' aufruft, 'HOME' explizit setzen, ansonsten erhalte ich 
die von Dir beschriebenen Meldungen:
1
MQTT_TOPIC_PREFIX=...
2
MQTT_BROKER_HOSTNAME=...
3
export HOME="${HOME:-/dev/null}"

Dieses Skript wird übrigens von einem systemd-Service aufgerufen, also 
vermutlich auch ein geforkter Prozess.

Das sollte also Dein Problem beheben. Es bleibt aber interessant, warum 
'HOME' manchmal nicht gesetzt wird.

: Bearbeitet durch User
von Georg A. (georga)


Lesenswert?

Andi G. schrieb:
> anbei nun das strace log vom tfrec Aufruf.

Nur der Vollständigkeit halber: strace hilft bei "harten" Problemen 
(Libs, Permissions, Sockets, File-I/O, etc.). Wenn das nichts bringt und 
auf die Schnelle auch kein Debugger bzw. Binary mit 
Debug-Info/Sourcecode da ist, kann man auch noch ltrace versuchen, damit 
bekommt man alle Library-Calls mit , insbesondere die der C-Lib. Da 
würde dann vermutlich der fehlgeschlagene getenv auffallen. Ist halt nur 
deutlich mehr an Ausgabekram, denn man anschauen muss. strace/ltrace 
gehen übrigens auch auf schon laufende Programme (-p <pid>).

Wollte es nur mal gesagt haben ;)

von Andi G. (Gast)


Lesenswert?

Christian X. schrieb:
>> Wenn alle Abfragen fehlschlagen, kommt es zu der Fehlermeldung:
>> "Warning: Unable to locate configuration directory, default config not
>> loaded."
>
> Nein. Nur wenn die Umgebungsvariable 'HOME' nicht gesetzt ist, wird die
> Meldung ausgegeben. Andernfalls wird die Zeichenkette
> "$HOME/.config/mosquitto_pub" auf die Variable 'loc' geschrieben.

Da habe ich mich wohl falsch ausgedrückt.
Ich meinte natürlich schon, so wie Du das beschreibst, dass eben die 
HOME Variable nirgends gefunden wird....

Sorry.

von Andi G. (Gast)


Lesenswert?

Christian X. schrieb:
> Idee 1: Probier mal, die Variable 'HOME' explizit in
> 'publish-tfrec-to-mqtt.sh' zu
> setzen:MQTT_TOPIC_PREFIX=devices/tfa/30.3180.it
> MQTT_BROKER_HOSTNAME=localhost
> HOME=/var/lib/mosquitto

habe ich so ausprobiert...ging aber nicht...
Aber zum Glück habe ich Deinen 2. Post gelesen:

Christian X. schrieb:
> export HOME="${HOME:-/dev/null}"

Habe nun...
1
export HOME=/var/lib/mosquitto
...eingefügt.

Was passiert?
HOME wird nun verarbeitet.
Das habe ich auch gleich im Log gemerkt. Nicht nur, dass die Warnings 
weg waren, sondern auch der Eintrag in der 
/var/lib/mosquitto/.config/mosquitto_pub "--debug" gezogen hat, und alle 
Ausgaben im Log landeten.

Ich danke vielmals!

Das Log ist nun sauber.
Jetzt hoffe ich noch, dass die Fork Meldungen auch weg sind.
Sonst nehme ich noch das exce raus und schau dann weiter.

von Andi G. (Gast)


Lesenswert?

Georg A. schrieb:
> Wollte es nur mal gesagt haben ;)

Danke Georg!
Die Ausgaben sind wohl, wenn man etwas mehr versteht als ich, extrem 
aufschlussreich.

von Andi G. (Gast)


Lesenswert?

Andi G. schrieb:
> Jetzt hoffe ich noch, dass die Fork Meldungen auch weg sind.
> Sonst nehme ich noch das exce raus und schau dann weiter.

Nach mehr als 24 Stunden keinerlei Meldungen mehr vom Typ:
1
Cannot fork: Cannot allocate memory

Alles wunderbar!
Vielen Dank nochmals!

von Andi G. (Gast)


Lesenswert?

Andi G. schrieb:
> Nach mehr als 24 Stunden keinerlei Meldungen mehr vom Typ:Cannot fork:
> Cannot allocate memory

mmmhhh, leider zu früh gefreut.
Habe seit Tagen wieder das Problem das der Speicher vollläuft.

Es ist das tfrec script.
Solange es läuft wird die RAM Beanspruchung des Systems laufend höher.
Sobald ich das Script stoppe, sackt der Verbrauch ab und bleibt stabil 
niedrig.

Die Idee 2 habe ich auch schon - ohne Erfolg - getestet.
Christian X. schrieb:
> Idee 2: Entferne das 'exec' in 'run-tfrec.sh'.

Ich verarbeite die Daten mit fhem.
Im Moment helfe ich mir mit einem "shutdown restart" bei einem 
logeintrag "Cannot fork".
Aber das ist halt nur Pflaster und Verband und gefällt mir gar nicht.

Wo könnte man denn da noch schrauben, um das in den Griff zu kriegen?

von Christian X. (mikrocontroller-user)


Lesenswert?

Da fällt mir wenig zu ein.

> Im Moment helfe ich mir mit einem "shutdown restart" bei einem
> logeintrag "Cannot fork".
Das dürfte meiner Meinung nach nicht viel bringen, weil tfrec und fhem 
ja unabhängige Prozesse sind. Du müsstest als Workaround doch eher tfrec 
als fhem neu starten.

Bei mir läuft der Prozess 'tfrec' seit 14 Tagen durch und verbraucht 30 
MB virtuellen bzw. 10 MB realen Speicher (Angaben gemäß 'top').

Du müsstest ja eigentlich nach einiger Zeit den Prozess ermitteln 
können, der sich mehr und mehr Speicher einverleibt. Ist das wirklich 
'tfrec'?

von Andi G. (Gast)


Lesenswert?

Also der Prozess, der hoch läuft ist /usr/bin/perl fhem.pl fhem.cfg.

tfrec (/opt/tfrec/tfrec -T 1 -t 1000 -q -e 
/opt/tfrec/publish-tfrec-to-mqtt.sh) läuft i.d.R. mit ~30 MB

Aber, wie schon geschrieben

Andi G. schrieb:
> Solange es läuft wird die RAM Beanspruchung des Systems laufend höher.
> Sobald ich das Script stoppe, sackt der Verbrauch ab und bleibt stabil
> niedrig.

von Christian X. (mikrocontroller-user)


Lesenswert?

Dann ist tfrec möglicherweise der Verursacher, aber nicht der Übeltäter.

Wenn fhem vollläuft, solltest Du dort weiterforschen. fhem und tfrec 
sind ja nur sehr lose über MQTT gekoppelt. Du könntest als nächsten 
Schritt mal tfrec laufen lassen, aber die Verarbeitung der tfrec-Werte 
schrittweise abschalten: zuerst die Verarbeitung der Werte (expandJSON), 
dann die MQTT-Subscriptions, dann das ganze MQTT-Device. So verliert 
fhem den Kontakt zu den Werten von tfrec. Interessant ist, unter welchen 
Bedingungen der Speicher immer noch volläuft.

von Andi G. (Gast)


Lesenswert?

OK, das werde ich versuchen.

Zwischenzeitlich habe ich mal mit "fhemdebug memusage" versucht ein paar 
Infos zu ergattern, konnte aber noch nichts ausmachen...

Habe nach einem Shutdown restart gleich mal die Werte wegkopiert und 
werde das dann später nochmal machen.

Dann das schrittweise Abschalten....

Mann mann mann, doofes Teil... :-)

von Andi G. (Gast)


Lesenswert?

So....
Habe auch im fhem forum gesucht und bin auf diesen Thread gestoßen: 
https://forum.fhem.de/index.php/topic,84372.msg789057.html#msg789057

Ich hatte Freezemon installiert, nach einiger Zeit auf disable=1 
gesetzt.
Das hat wohl das Problem verursacht.
Durch die vielen tfrec readings und dem nicht abarbeiten von Blocking 
Calls lief wohl der Speicher hoch.

Nachdem ich Freezemon komplett gelöscht habe, ist nun auch das Problem 
behoben.

von Christian X. (mikrocontroller-user)


Lesenswert?

Ich nutze tfrec seit inzwischen 1,5 Jahren ohne nennenswerte Probleme 
mit 16 TFA-Sensoren 30.3180.IT. Vor Kurzem habe ich einige Z-Wave-Geräte 
ausprobiert und hatte dabei Probleme mit der Funkverbindung. Mir fiel 
auf, dass sowohl die TFA-Sensoren als auch Z-Wave im Bereich 868.4 MHz 
funkt. Ich habe deshalb zu Testzwecken alle Thermometer außer Betrieb 
genommen, und siehe da, die Z-Wave-Probleme waren verschwunden. Dann 
habe ich nach und nach die Thermometer wieder in Betrieb genommen, und 
die Probleme sind wieder da.

Laut Datenblatt sendet jeder TFA-Sensor im 10-Sekunden-Takt seine Werte. 
Bei 16 Sensoren wären das im Schnitt alle 625ms ein Telegramm. Hoppla. 
Da kann ich nachvollziehen, dass es die Z-Wave-Nachrichten schwer haben 
durchzukommen, zumal in Z-Wave sowohl Hin- als auch Rücknachricht 
überleben müssen, und das ggf. über mehrere Hops hinweg.

Jetzt suche ich nach Optionen, das Problem in den Griff zu bekommen. Am 
einfachsten wäre sicher, die Anzahl der TFA-Sensoren zu reduzieren. Hält 
es alternativ jemand für denkbar, das Funkintervall von 10 Sekunden 
irgendwie zu erhöhen? Mir fehlt hier das Wissen über die Technik im 
TFA-Sensor. Auch andere Ideen sind willkommen.

: Bearbeitet durch User
von Georg A. (georga)


Lesenswert?

Bei den Sensoren kann man nichts ändern, die sind so wie sie sind. Wenn 
ich das mit Z-Wave richtig verstanden habe, machen die aber mit 
Acknowledge. Wenn das tauglich implementiert ist, sollte das doch über 
so Fremdbelegungszeiten hinwegkommen.

Ansonsten könnte man noch ein paar Weatherhub-Sensoren statt der 
KlimaloggPro nehmen (die gehen ja jetzt auch in tfrec). Die wiederholen 
nur alle 7min. Ausser der längeren ID sollte es sonst keine 
Nebenwirkungen geben.

von Christian X. (mikrocontroller-user)


Lesenswert?

> Wenn das tauglich implementiert ist, sollte das doch über
> so Fremdbelegungszeiten hinwegkommen.
Ja, das ist halt genau der Punkt - meistens bis manchmal, aber für meine 
Ansprüche nicht häufig genug.

> Ansonsten könnte man noch ein paar Weatherhub-Sensoren statt der
> KlimaloggPro nehmen (die gehen ja jetzt auch in tfrec). Die wiederholen
> nur alle 7min.
Gute Idee, danke.

von Christian X. (mikrocontroller-user)


Lesenswert?

Möglicherweise liege ich doch falsch mit meiner Vermutung, dass das 
Funkband durch die TFA-Sender zu häufig belegt wird. Ich habe vor ein 
paar Tagen den Z-Wave-Controller (Cyrus ZUB-CYR10103) gegen ein anderes 
Fabrikat (Everspring SA413) getauscht und alle Geräte neu angelernt; 
seitdem habe ich keine Verbindungsstörungen mehr. Ich habe auch gelesen, 
dass Z-Wave im Fall eines belegten Frequenzbandes vor dem Senden eine 
zufällige Dauer wartet, also zumindest theoretisch damit umgehen können 
sollte ( 
https://www.embedded.com/design/connectivity/4025721/Catching-the-Z-Wave 
).

von Flavio C. (flaviocu)


Lesenswert?

Hallo Zusammen

Ich habe einen TFA WHB Temperatur Sensor: 30.3300.02 Folgende Daten 
konnte ich bis jetzt capturen:

#000 1550170800 L=25 4b 2d d4 2b 12 02 48 97 a9 de 8a 40 00 81 13 00 fa 
00 27 dd 68 b2 30 c0 06 RSSI 80
#001 1550170800 L=25 4b 2d d4 2b 12 02 48 97 a9 de 8a 40 00 81 13 00 fa 
00 27 dd 68 b2 30 c0 06 RSSI 80
#002 1550170801 L=25 4b 2d d4 2b 12 02 48 97 a9 de 8a 40 00 81 13 00 fa 
00 27 dd 68 b2 30 c0 06 RSSI 80
#003 1550170801 L=25 4b 2d d4 2b 12 02 48 97 a9 de 8a 40 00 81 13 00 fa 
00 27 dd 68 b2 30 c0 06 RSSI 80

02 48 97 a9 de 8a entspricht der aufgedruckten Seriennummer. Könnt Ihr 
diesen ebenfalls dekodieren?

Liebe Grüsse und Danke
Flavio

von Georg A. (georga)


Lesenswert?

Ja, muss da aber erst ein "Magic value" rausfinden. Habe gerade etwas 
viel zu tun, evtl. wirds nächste Woche was.

von Flavio C. (flaviocu)


Lesenswert?

Super, wenn ich irgendwie helfen kann, lass es mich wissen.
Liebe Grüsse

von Georg A. (georga)


Lesenswert?

Aja, zum Rausfinden des Magics bräuchte ich drei unterschiedliche 
Messages, obige haben ja alle denselben Inhalt.

von Flavio C. (flaviocu)


Lesenswert?

Hallo Georg

Hier noch ein paar Nachrichten (der Sensor scheint nur ca alle 7 Minuten 
zu senden und ein paar sind direkt nach dem Einschalten gesendet 
worden):

#001 1550417905 L=25 4b 2d d4 2b 12 02 48 97 a9 de 8a 40 00 81 01 00 fa 
00 6c d3 6d c8 00 ae 1c  RSSI 81
#001 1550170800 L=25 4b 2d d4 2b 12 02 48 97 a9 de 8a 40 00 81 13 00 fa
00 27 dd 68 b2 30 c0 06 RSSI 80
#003 1550418278 L=25 4b 2d d4 2b 12 02 48 97 a9 de 8a 40 00 80 ff 00 fa 
00 76 d3 30 89 70 05 16
#005 1550419125 L=25  4b 2d d4 2b 12 02 48 97 a9 de 8a 00 02 40 9b 40 ba 
1b c8 6d 11 4e e0 5a 1b RSSI 81
#006 1550419550 L=29  4b 2d d4 2b 12 02 48 97 a9 de 8a 00 03 40 8e 40 9b 
1a 72 b2 0d 6a 20 23 1e 00 00 00 00  RSSI 78
#008 1550419975 L=25  4b 2d d4 2b 12 02 48 97 a9 de 8a 00 04 40 87 40 8e 
1b 95 40 4b 6e 00 68 17  RSSI 81
1550419975 L=25  4b 2d d4 2b 12 02 48 97 a9 de 8a 00 04 40 87 40 87 1b 
cd 11 c9 e0 10 8f 0b  RSSI 81
#010 1550420400 L=25  4b 2d d4 2b 12 02 48 97 a9 de 8a 00 05 40 81 40 81 
1b f3 00 1f e2 f0 c3 06  RSSI 81

Danke und liebe Grüsse

Flavio

von Flavio C. (flaviocu)


Lesenswert?

Hi

Kann ich dir noch irgendwie helfen bei dem Sensor?

Danke und liebe Grüsse

Flavio

von Georg A. (georga)


Lesenswert?

Flavio C. schrieb:
> Kann ich dir noch irgendwie helfen bei dem Sensor?

Danke, den Schubs hats noch gebraucht ;) Schau mal, ob jetzt der WHB-Typ 
2 was sinnvolles liefert.

von Flavio C. (flaviocu)


Lesenswert?

Super, danke dir! Der Sensor liefert jetzt die Temperatur :)
Kann ich noch irgendwas für die Doku liefern?

Liebe Grüsse

von Georg A. (georga)


Lesenswert?

Sehr schön, dass der jetzt geht. Muss den Sensor nur noch in der 
sensors.txt einfügen, das sollte dann reichen.

von Thomas N. (Gast)


Lesenswert?

Hallo Georg

Nach langer Zeit ich wieder einmal mit einem TX22 Problem.
Ich habe das Problem, dass bei der Ausgabe via MQTT (FHEM) die Humidity 
nur mit Null angezeigt wird bzw. kurz erscheint und dann sofort wieder 
auf 0 gesetzt wird. Der Sub-Typ "1" (30000IDx) erscheint nie in der 
Ausgabe.

Gruss
Thomas

von Maik (Gast)


Lesenswert?

Hi Thomas,

ist ggf. dein TX22 defekt? Ich habe auch ein TFA 30.3144.IT, wo die 
Humidität nicht mehr funktioniert und NULL-Werte liefert.

Gruß
Maik

von Georg A. (georga)


Lesenswert?

0 ist vermutlich eher 100%. Ich habe einen Sensor in einem sehr feuchten 
Keller(loch...), der gerne von 99 auf 0 springt. 100 kann nicht 
übertragen werden. Ich habe daher bei den Sensoren, von denen ich weiss, 
dass sie einen Feuchtigkeitssensor haben, beim Eintragen in die DB noch 
eine Korrektur 0->100 gemacht.

Ein Aussensensor, der durch ungünstige Montage im Regen mal total 
abgesoffen ist, hat auch dauernd 0 gemeldet. Hab ihn dann aufgemacht und 
das Sensor-Platinchen gründlich mit Aquadest gereinigt. Dann ging er 
wieder.

Gabs nicht irgendwo auch Berichte, dass so typische Sensoren ala DHT11 
auch gerne einfach auch so versterben?

von T. Nick (Gast)


Lesenswert?

Hallo Georg

Der Sensor ist erst seit wenige Tagen im Aussenbereich und komplett 
Regengeschützt montiert. Vorher lag er bei mir im nur im Büro herum. Ich 
glaube daher nicht, dass es daran liegt. Wenn ich den Output des 
Handlers ansehe, dann erscheint der Sub-Typ "1" nie in der Ausgabe. Im 
Debug-Modus werden regelmässig die korrekten Hum-Werte ausgegeben, 
welche auch auf der zur WS-1600 gehörigen Basisstation angegeben werden. 
Also wird der Wert vom Sensor korrekt empfangen aber irgendwie nicht 
korrekt durch den Handler ausgegeben. Zur Info: ich übertrage TX22 Werte 
via MQTT an FHEM, wo vier einzelne Devices angelegt sind, welche jeweils 
die Werte aus dem Temperatur und Humidity Reading auslesen. Ich konnte 
das Problem soweit selber eingrenzen, dass bei dieser Umsetzung der Wert 
verloren geht. Vielleicht kannst du mir das Konzept der erklären wie die 
Werte aus den Sensordaten-Array umgewandelt wird, da ich leider nicht 
über deine Profi-Programmierkenntnisse verfüge ;-). Gruss Thomas

von Thomas N. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Georg

Die Ursache, dass die Feuchtigkeit des TX22 nicht angezeigt wird liegt, 
daran dass die Sensordaten nicht korrekt abgespeichert werden wenn das 
Flag "have_hum" gesetzt wurde. Da in deinem Code Humidity nur zusammen 
mit der Temperatur (SubTyp "0") ausgegeben wird und der TX22 Temperatur 
und Feuchtigkeit nicht immer gemeinsam sendet, sondern separat, führt 
dazu, dass die Feuchtigkeit nicht korrekt ausgegeben wird obwohl korrekt 
empfangen wurde.
Habe das im Code von tfa2.cpp geändert (siehe Anhang).
Gruss
Thomas

von Thomas N. (Gast)


Angehängte Dateien:

Lesenswert?

Hier ein Tipp für alle Interessierten.

Seit Georg tfrec so erweitert hat, dass auch TX22 Sensordaten (WS-1600) 
empfangen werden können, stellte sich nur das Problem, dass der TX22 
seine ID nach jedem Batteriewechsel wechselt, was ein Integration in 
fhem via MQTT 
(https://github.com/git-developer/fhem-examples/wiki/Temperatur-Feuchte-Sender-mit-tfrec-und-MQTT) 
erschwert.
Ich umgehe dieses Problem mit einem kleinen Trick indem ich den 
wechselnden Teil der ID durch einen fixen String ersetze (siehe 
Bash-Script im Anhang). So lässt sich in fhem ein eindeutiges Device 
anlegen (funktioniert nur mit einem TX22!).

von Maik W. (istler)


Lesenswert?

Hallo zusammen,
ich habe mir den TFA WeatherHub Regenmesser(30.3306.02) zugelegt. 
Eigentlich sollte er erkannt werden. Aber ich empfange nur diesen 
String:

#000 1561228174 L=44  4b 2d d4 2b 25 08 2e ee bb 7d c6 40 0b 40 f3 00 09 
c0 00 c9 89 c1 6c c3 ad fd 23 c2 5d c0 21 ca f4 c0 04 c0 98 61 07 4d 2b 
b0 4c 0e  RSSI 86 /n# 2484 1561228176  2d d4 9e 86 38 35 19

Gestartet habe ich den tfrec-Prozess mit diesen Parametern:
/usr/bin/tfrec -f 868220 -D -q -T 27 -e /usr/bin/pushvals


Hat damit schon jemand Erfahrung? In der Sensorliste taucht dieser 
Sensor ja eigentlich auf...

Schöne Grüße
Maik

von Maik W. (istler)


Lesenswert?

Hallo zusammen,

so der Sensor scheint zu funktonieren. Ich hatte einen Fehler beim 
Starten von tfrec gemacht: -D und -q sollte man nicht zusammen 
benutzen..

Gruß
Maik

von Walter S. (waspe)


Lesenswert?

Hallo alle,
hoffentlich seid Ihr hier noch aktiv;
ich bräucht Hilfe, denn bei mir spuckt tfrec keine sinnvollen Daten aus, 
höchstens BAD (s.u.)
Zunächst hatte ich Raspberry Pi 4 benutzt, jetzt Rasperry Pi 3 B+. Beide 
unter Debian Buster.
zum Stick (aus dmesg):
Realtek RTL2832 successfully attached
Rafael Micro r820t successfully identified

Beim kompilieren von tfrec gab es reichlich warnings.

Sensoren sind 30.3180.IT und 30.3147

Hat jemand eine Idee, was hier schief läuft?
Danke
---><-------><-------><-------><-------><-------><-------><-------><----
./tfrec -D  -t 1200 -T2
Registering demod for TFA_2 sensors, 17240 bit/s
type 0x1: Samples per bit: 22.3
Found Rafael Micro R820T tuner
AUTO GAIN
Frequency 868.2500MHz
Samplerate 1536000
START READ THREAD
Allocating 15 zero-copy buffers
Inverted SYNC
#000 1598510947  2d d4 49 51 a4 a8 2f                       TFA2 BAD 1 
RSSI 63  Offset 4kHz (CRC 2f 4e)
#001 1598510950  2d d4 a5 65 2b ab 7e                       TFA2 BAD 2 
RSSI 59  Offset 4kHz (CRC 7e 20)
#002 1598510951  2d d4 8b 2c 15 d8 45                       TFA2 BAD 3 
RSSI 58  Offset -3kHz (CRC 45 d7)
Inverted SYNC
#003 1598510953  2d d4 da a9 65 5e ad                       TFA2 BAD 4 
RSSI 59  Offset 1kHz (CRC ad c9)

von Christian X. (mikrocontroller-user)


Lesenswert?

> Beim kompilieren von tfrec gab es reichlich warnings.
Das ist bei mir auch so, ich denke das ist unabhängig von Deinem 
Problem.

> Sensoren sind 30.3180.IT und 30.3147
> ./tfrec -D  -t 1200 -T2
Ich habe für meine 30.3180.IT-Sensoren andere Parameter gesetzt:
-T 1 -t 1000 -g 13

Laut Doku ist -T 1 für KlimaLoggPro-Sensoren (30.3180.IT) und -t kann 
höchstens 1000 sein. Vielleicht hat es damit etwas zu tun?

von Fritz F. (fischerfritz)


Lesenswert?

Bereits seit ein paar Monaten verwende ich tfrec um die Daten von acht 
Klimalogg Sensoren auf zu zeichnen. Klappt ziemlich gut, vielen Dank!

Oben kam mal die Frage nach Python Anbindung auf, hier ein 
Codeschnippsel dazu der tfrec direkt aus Python startet (nur auf Linux 
getestet).

1
#!/usr/bin/env python3
2
# -*- coding: utf-8 -*-
3
4
import time
5
import subprocess
6
7
RESTARTS = 100
8
RESTARTDELAY = 1000
9
10
class Tfcom():
11
    def __init__(self, freq):
12
        self.freq = str(freq)
13
    def start(self):
14
        argList = ['../tfrec/tfrec', '-T 1',  '-f', self.freq, '-D',]  # '-w 20']
15
        self.proc = subprocess.Popen(argList, stdout=subprocess.PIPE,
16
                                    stderr=subprocess.STDOUT, universal_newlines=True)  # universal_newlines: text modus
17
    def stop(self):
18
        self.proc.terminate()
19
    def __enter__(self):
20
        self.start()
21
        return self
22
    def __exit__(self, type, value, tb):
23
        self.stop()
24
    def restart(self):
25
        exitCode = self.proc.poll()  # None: running
26
        retries = RESTARTS
27
        while exitCode is not None:
28
            retries -= 1
29
            if retries <= 0:
30
                raise Exception("can't restart; exitCode: " + repr(exitCode))
31
            print("subprocess exited - sleeping for " + repr(RESTARTDELAY) + "secs before restart")
32
            time.sleep(RESTARTDELAY)
33
            self.start()
34
            time.sleep(1)
35
            exitCode = self.proc.poll()  # None: running
36
    def readline(self):
37
        """blocking"""
38
        out = None
39
        exitCode = self.proc.poll()  # None: running
40
        if exitCode is not None:
41
            self.restart()
42
        out = self.proc.stdout.readline().rstrip()
43
        return out
44
45
if __name__ == '__main__':
46
    FREQ = 868320
47
    with Tfcom(FREQ) as com:
48
        for i in range(999):
49
            time.sleep(0.1)
50
            print(com.readline())

von Martin (@j4r) (Gast)


Lesenswert?

Wer nicht unbedingt ein SDR-Setup verwenden will, sondern den 
mitgelieferten Kommunikations-Dongle, kann dies mit dem pyPI-Paket 
kloggpro probieren.
https://pypi.org/project/kloggpro/

von MitLeserin (Gast)


Lesenswert?

Ich kenne https://github.com/baycom/tfrec
  - funktioniert mit contrib

Ich kenne https://github.com/git-developer/tfrec-mqtt
  - docker-compose up -d liefert :
1
 Creating network "ab_default" with the default driver
2
 Creating tfrec-mqtt ... done
Ich kenne IOTstack
- docker ps -a liefert:
1
  CNT ID IMAGE                  COMMAND                 CREATED 
2
  f7..   ckware/tfrec-mqtt      "tfrec -f 868300 -e …"  11 min.. ago...
3
  c4..   iotstack_mosquitto     "/docker-entrypoint.…"  20 min.. ago...
4
  b3..   portainer/agent        "./agent"               20 min.. ago... 
5
  5f..   influxdb:1.8           "/entrypoint.sh infl…"  20 min.. ago...
6
  d1..   grafana/grafana        "/run.sh"               20 min.. ago...
7
  81..   portainer/portainer-ce "/portainer"            20 min.. ago...
Ich kann auf einem Pi4 mit IOTstack [RTL_433, mosquitto, node-red, 
influx, grafana] mit 433MHz-Stationen Temperatur und Feuchtigkeit in 
einem Grafana-Zeitdiagramm darstellen.

Wäre dankbar für Hinweise zur Überprüfung der Datenausgabe von 
tfreq-mqtt und für die mqtt-Integration in Node-RED.

von Christian X. (mikrocontroller-user)


Lesenswert?

MitLeserin schrieb:
> Hinweise zur Überprüfung der Datenausgabe von tfreq-mqtt

Ich verstehe nicht... was stellst Du Dir denn unter "Überprüfung" vor?

von MitLeserin (Gast)


Lesenswert?

Keine Ahnung wohin tfrec-mqtt Daten sendet. Der SDR-Stick wird warm, 
aber sonst sehe ich nichts..

von Christian X. (mikrocontroller-user)


Lesenswert?

Sofern Du kein abweichendes MQTT_TOPIC konfiguriert hast, werden die 
Daten unter tfrec/<Sensor-ID>/json veröffentlicht.

In der Dokumentation unter Result ( 
https://github.com/git-developer/tfrec-mqtt#result ) findest Du 
Beispiele.

Zur Problem-Analyse kannst Du das erstmal über mosquitto_sub überprüfen, 
bevor Du weitere Tools ins Spiel bringst. Falls Du damit keine Daten 
empfängst: Stimmen die Argumente für tfrec? Liefert baycom/tfrec (ohne 
Docker) Ergebnisse?

von MitLeserin (Gast)


Lesenswert?

Danke für die Hinweise.

Im /IOTstack/portainer erscheint tfrec-mqtt und der Log dazuliefert:
1
2021-12-07T12:21:42.475442319Z Registering demod for TFA_1 KlimaLoggPro
2
2021-12-07T12:21:42.718856672Z Found Rafael Micro R820T tuner
3
2021-12-07T12:21:43.061315875Z Allocating 15 zero-copy buffers
4
2021-12-07T12:21:44.266035873Z Registering demod for TFA_2 sensors, 17240 bit/s
5
2021-12-07T12:21:44.266082964Z type 0x1: Samples per bit: 22.3
6
2021-12-07T12:21:44.266091305Z Registering demod for TFA_3 sensors, 9600 bit/s
7
2021-12-07T12:21:44.266097710Z type 0x2: Samples per bit: 40.0
8
2021-12-07T12:21:44.266104028Z TFA1 ID 1543 +24.4 29% seq 8 lowbat 0 RSSI 81
9
2021-12-07T12:21:44.276707089Z Error: Address not available
10
2021-12-07T12:21:45.378806503Z TFA1 ID 7e5e +24.2 34% seq e lowbat 0 RSSI 81
11
2021-12-07T12:21:45.396144037Z Error: Address not available
12
2021-12-07T12:21:46.491442696Z TFA1 ID 30f0 +23.7 33% seq 0 lowbat 0 RSSI 81
13
2021-12-07T12:21:46.500307323Z Error: Address not available
14
2021-12-07T12:21:47.513139897Z TFA1 ID 0587 +8.1 71% seq 0 lowbat 0 RSSI 74
15
2021-12-07T12:21:47.522513307Z Error: Address not available
16
2021-12-07T12:21:50.585256121Z TFA1 ID 65f1 +19.4 43% seq c lowbat 0 RSSI 81
17
2021-12-07T12:21:50.596337738Z Error: Address not available
18
2021-12-07T12:21:54.421967151Z TFA1 ID 1543 +24.4 29% seq 9 lowbat 0 RSSI 81 ...

Die Daten der Sensoren sind aktuell. Die Datenausgabe ist durch 
weglassen von "-q" in
1
command:  [ "tfrec", "-f", "868300", "-e", "mqtt-publish" ]
2
#         [ "tfrec", "-T", "1", "-g", "13", "-t", "1000", "-q", "-e", "mqtt-publish" ]
provoziert. Ich vermute Address not available bezieht sich auf 
mqtt-publish ..
to be continued .. step by step by step ..

von Christian X. (mikrocontroller-user)


Lesenswert?

MitLeserin schrieb:
> Ich vermute Address not available bezieht sich auf mqtt-publish

Die Meldung wird von Mosquitto geliefert, wenn der Hostname des Brokers 
nicht stimmt. Überprüf mal die Umgebungsvariable MQTT_OPTIONS, da sollte 
'-h xyz' drin vorkommen, wobei xyz der Hostname Deines MQTT-Brokers ist.

von Christian X. (mikrocontroller-user)


Lesenswert?

Falls Dein Broker auf demselben Host laufen sollte wie tfrec-mqtt, musst 
Du evtl. ein host-gateway konfigurieren, siehe z.B. 
https://github.com/git-developer/tvheadend-mqtt#cause

von MitLeserin (Gast)


Angehängte Dateien:

Lesenswert?

step by step by step .. funktioniert !

IOTstack - https://github.com/SensorsIot/IOTstack/

Mit den beiden im Anhang aufgeführten Dateien in einem neuen Verzeichnis 
/home/ab/IOTstack/.templates/tfrec-mqtt/ lässt sich das tfrec-mqtt image 
von https://hub.docker.com/r/ckware/tfrec-mqtt in IOTstack integrieren.

Bisher getestet unter System Mint 19.3:
Host: Dell-i5
Kernel: 5.4.0-91-generic x86_64
bits: 64
Desktop: Cinnamon 4.4.8
wm: muffin
dm: LightDM
Distro: Linux Mint 19.3 Tricia
base: Ubuntu 18.04 bionic

Issue 
https://github.com/SensorsIot/IOTstack/issues/424#issuecomment-964144025 
ist für x86_64 zu berücksichtigen.

von Christian X. (mikrocontroller-user)


Lesenswert?

Herzlichen Glückwunsch!

Noch ein paar kleine Anmerkungen zu Deiner tfrec-mqtt/service.yml:

* Ich empfehle den Parameter 'init: true' zu setzen, damit tfrec-mqtt 
sauber und schnell beendet werden kann. Ohne den Parameter wird der 
Shutdown wahrscheinlich 10 Sekunden dauern und der tfrec-mqtt-Prozess 
wird abrupt beendet.

* Die Umgebungsvariablen "MQTT_TOPIC" und "FORMAT_JSON" entsprechen den 
Default-Werten und können entfernt werden. Alle Optionen mit ihren 
Default-Werten findest Du unter 
https://github.com/git-developer/tfrec-mqtt#configuration

: Bearbeitet durch User
von Andi G. (Gast)


Angehängte Dateien:

Lesenswert?

Georg A. schrieb:
> Zum WeatherHub: Es gibt immer noch das Problem, dass ich noch nicht
> rausgefunden habe, wie der Typ-abhänge CRC-Init-Wert ausgewürfelt wird.
> D.h. neue Typen (zB. die Technoline-MobilerAlerts-Geräte) gehen nur,
> wenn ich ein paar Raw-Messages dazu habe. Einen Temp+Hum-Sensor habe ich
> bei mir in der Nachbarschaft schwach "gehört", daher geht der jetzt auch
> ;)

Hallo Georg,

ist schon eine Weile her.

Ich könnte nun aber hinsichtlich MobileAlerts unterstützen.
Mit der Option T -20 empfange ich Werte von folgenden Geräten:

Temperatursensor MA10100

Temperatur- und Luftfeuchtesensor MA 10200

Regensensor MA 10650

Windmesser MA 10660



Daten sind anbei.

Gruß
Andi

von Georg A. (georga)


Lesenswert?

Danke, die haben offensichtlich alle schon ihre "magische" CRC-Zahl, 
d.h. ich habe schon vergleichbare Varianten aus dem TFA-Zoo. Aber schön, 
dass sich damit die Liste der unterstützten/äquivalenten Devices weiter 
auffüllen lässt.

von Sebeen (Gast)


Lesenswert?

Hallo,
Ich kann kein Deutsch, ich benutze Google Übersetzer. Verzeihung.
Vielen Dank für Ihre großartige Arbeit mit diesem Projekt.
Ich setze seit mehreren Wochen TFA-Sensoren mit tfrec / tfrec-mqtt ein. 
Ich glaube nicht, dass es so funktioniert, wie es sollte.
Die Moskito-Protokolldatei wächst sehr schnell.
Es gibt viele solcher Einträge darin:

1642437035: New connection from 172.22.0.2 on port 1883.
1642437035: New client connected from 172.22.0.2 as 
mosq-9UdOMppdzLVMQOa1Im (p2, c1, k60).
1642437035: Client mosq-9UdOMppdzLVMQOa1Im disconnected.
1642437036: New connection from 172.22.0.2 on port 1883.
1642437036: New client connected from 172.22.0.2 as 
mosq-3Jjrz7ANvOuWqjEW8c (p2, c1, k60).
1642437036: Client mosq-3Jjrz7ANvOuWqjEW8c disconnected.
1642437037: New connection from 172.22.0.2 on port 1883.
1642437037: New client connected from 172.22.0.2 as 
mosq-QNB28fg1VEiPBStT1q (p2, c1, k60).
1642437037: Client mosq-QNB28fg1VEiPBStT1q disconnected.
1642437038: New connection from 172.22.0.2 on port 1883.
1642437039: New client connected from 172.22.0.2 as 
mosq-Y93YmFEuYy1aieBOry (p2, c1, k60).
1642437039: Client mosq-Y93YmFEuYy1aieBOry disconnected.

tfrec-mqtt und der Moskito laufen in Docker-Containern.
Wo soll ich nach einer Lösung suchen? Docker, Moskito, tfrec-mqtt usw.?

von Christian X. (mikrocontroller-user)


Lesenswert?

Hi Sebeen,

we can write in English if you prefer that.

Your log seems to be the mosquitto log containing reconnections. To 
avoid these messages, I see the following options:

1.) Prevent reconnections

You could try to set a client id so that your broker can remember your 
tfrec-mqtt container. This has to be configured in tfrec-mqtt, e.g.
1
MQTT_OPTIONS: "-h broker -i tfrec-mqtt"
 in your docker configuration.

2.) Suppress log messages

You could configure your broker not to log these messages; when you use 
mosquitto, try putting these lines into your mosquitto.conf:
1
log_type error
2
log_type warning

von Sebeen (Gast)


Lesenswert?

Thank you for the quick reply.
Below is my configuration.
1
###########################################
2
services:
3
 tfrec-mqtt:
4
    image: ckware/tfrec-mqtt
5
    container_name: tfrec-mqtt
6
    restart: unless-stopped
7
    init: true
8
    devices:
9
    - "/dev/bus/usb:/dev/bus/usb"
10
    environment:
11
      MQTT_OPTIONS: "-h mosquitto"
12
    command: [ "tfrec", "-q", "-e", "mqtt-publish" ]
13
14
 mosquitto:
15
    image: "eclipse-mosquitto:1.6"
16
    container_name: mosquitto
17
    restart: unless-stopped
18
# below for the entry in /etc/fstab
19
# //MY_NAS_IP/home /home/pi/docker_NAS cifs uid=1000,gid=1000,vers=1.0,rw,username=USER,password=PASSWORD      0       0
20
    user: "1000:1000"
21
    volumes:
22
      - "/home/pi/docker_NAS/mosquitto/config:/mosquitto/config"
23
      - "/home/pi/docker_NAS/mosquitto/data:/mosquitto/data"
24
      - "/home/pi/docker_NAS/mosquitto/log:/mosquitto/log"
25
# Network for tfrec
26
networks:
27
  default:
28
    external: true
29
    name: tfrec-bridge
30
###########################################
Did I miss something in the tfrec-mqtt/mosquito container?

I also tested rtl_433 today.
Everything looks fine in the mosquito log file, although I have no 
experience.
I discovered tfrec/rtl433 a few weeks ago and am excited :).
Below is the mosquito log file for rtl_433.
1
1642439453: Saving in-memory database to /mosquitto/data/mosquitto.db.
2
1642441254: Saving in-memory database to /mosquitto/data/mosquitto.db.
3
1642443057: Saving in-memory database to /mosquitto/data/mosquitto.db.
4
1642444859: Saving in-memory database to /mosquitto/data/mosquitto.db.

von Christian X. (mikrocontroller-user)


Lesenswert?

The tfrec-mqtt config looks good to me. To set a client id:
1
services:
2
 tfrec-mqtt:
3
    environment:
4
      MQTT_OPTIONS: "-h mosquitto -i tfrec-mqtt"

I can't tell if your network configuration is appropriate. On my 
machine, the configuration doesn't contain an external network but 
exposes the mqtt ports. When your broker and tfrec-mqtt are running on 
the same machine, this would be the configuration:
1
services:
2
 tfrec-mqtt:
3
    extra_hosts:
4
    - "mosquitto:host-gateway"
5
  mosquitto:
6
    ports:
7
      - "1883:1883"
8
      - "9001:9001"

If you want to suppress the connection entries in the broker log, your 
/home/pi/docker_NAS/mosquitto/config/mosquitto.conf should look like 
this:
1
log_type error
2
log_type warning

von Sebeen (Gast)


Lesenswert?

You gave me a hint. Adding "-x" solves the problem.
1
MQTT_OPTIONS: "-h mosquitto -i tfrec-mqtt -x 60"
Now the connection is maintained for the specified period of time.

Of course adding
1
log_type error
2
log_type warning
it also solves this, but I don't want to limit myself to error and 
warning messages only in the log file.

By the way, I will ask about one more thing. What is the best practice 
to generate graphs from tfrec to Grafana?
As I understand it, there are several options for using different 
applications:
tfrec-mqtt-> mqtt_broker-> Node-RED-> Influxdb-> Grafana
tfrec-mqtt-> mqtt_broker-> Telegraf-> Influxdb-> Grafana
Can it be done with fewer applications (e.g. tfrec-mqtt-> Influxdb-> 
Grafana) or with others to make it better?
I am a child of Windows and I am just getting to know the nooks and 
crannies of Linux, IoT, etc.

von Sebeen (Gast)


Lesenswert?

You gave me a hint. Adding "-x" solves the problem.
1
MQTT_OPTIONS: "-h mosquitto -i tfrec-mqtt -x 60"
Now there are no longer connected and disconnected messages.

Of course adding
1
log_type error
2
log_type warning
it also solves this, but I don't want to limit myself to error and 
warning messages only in the log file.

By the way, I will ask about one more thing. What is the best practice 
to generate graphs from tfrec to Grafana?
As I understand it, there are several options with the use of different 
applications:

tfrec-mqtt-> mqtt_broker-> Node-RED-> Influxdb-> Grafana
tfrec-mqtt-> mqtt_broker-> Telegraf-> Influxdb-> Grafana

Can it be done with fewer applications (e.g. tfrec-mqtt-> Influxdb-> 
Grafana) or with others to make it better?
I am a child of Windows and I am just getting to know the nooks and 
crannies of Linux, IoT, etc.

von MitLeserin (Gast)


Angehängte Dateien:

Lesenswert?

>tfrec-mqtt und der Moskito laufen in Docker-Containern.
>Wo soll ich nach einer Lösung suchen? Docker, Moskito, tfrec-mqtt usw.?

@Sebeen (Gast)

all you need is composed into IOTstack:
https://www.youtube.com/watch?v=KJRMjUzlHI8&list=PL3XBzmAj53RloHdY69p3TkSaodIIm0Wpz&index=4

IOTstack is intended for Pi4, but it also works on my
Dell-Vostro-i5 Linux Mint 19.3 Tricia

tfrec-mqtt can be added into IOTstack - see
Beitrag "Re: SDR-Dekoder für TFA KlimaLogg Pro/IT+ Temperatursensoren"

rtl433 is available in IOTstack

The IOTstack to use : tfrec-mqtt -> mosquitto -> node-red -> influx -> 
grafana

a screenshot with the grafana-graphics is included

von Christian X. (mikrocontroller-user)


Lesenswert?

Sebeen schrieb:
> Can it be done with fewer applications (e.g. tfrec-mqtt-> Influxdb->
> Grafana) or with others to make it better?

I'm sorry I can't help you with that because I don't use Grafana to plot 
the values.

von Tom (Gast)


Lesenswert?

Hi,
ich suche ein Modul, das 868Mhz NRZS kann, aber finde keine Infos dazu.
Zuerst vll das, was ich vor habe. Ich möchte einen kleinen "Übersetzer" 
für meine 3 30.3180.IT Stationen basteln. 868Mhz -> MQTT. Am besten wäre 
es, das ganze mit einem ESP32 zu erledigen, von der Programmierung her 
wäre es auch kein Problem dank der Infos und des Codes hier. Allerdings 
finde ich keine Infos, ob es ein Modul gibt, das NRZS kann (also nicht 
als Stick, sondern ein einfaches Modul, das ich an einen ESP 
anschliessen könnte). Vll kann mir jemand hier weiterhelfen.

Danke
Tom

von Christian X. (mikrocontroller-user)


Lesenswert?

Tom schrieb:
> Ich möchte einen kleinen "Übersetzer" für meine 3 30.3180.IT Stationen basteln. 
868Mhz -> MQTT

Einen Übersetzer von 30.3180.IT auf MQTT gibt es mit tfrec-mqtt bereits 
- allerdings auf Basis eines Linux-basierten (Mini-) Rechners und eines 
DVB-T-Sticks. Wenn es Dir nur auf geringe Größe ankommt, könntest Du Dir 
z.B. einen Raspberry Pi Zero ansehen.

Wenn ich Dich richtig verstehe, möchtest Du tfrec aber auf einem 
Mikrocontroller betreiben und dazu den Code von tfrec wiederverwenden. 
Keine Ahnung, ob das funktionieren würde. Meinst Du mit "Modul" ein 
Stück Hardware, das Du direkt an einen ESP32 anschließen kannst? Da 
fällt mir eigentlich nur ein, einen DVB-T-Stick zu zerlegen.

von Georg A. (georga)


Lesenswert?

In den Sendern sind Chips von Axsem (jetzt Onsemi) drin. Irgendwas mit 
AX5xxx. Sehr wahrscheinlich ist das Gegenstück (bzw. ein Transceiver) 
auch in den Empfängern. Die Chips wären bei Digikey sogar erhältlich. 
Aber Module dazu kenne ich auch nicht, vermutlich ist es einfacher, eine 
Klimalogg-Pro-Basisstation zu schlachten und das SPI zum Transceiver 
anzuzapfen.

von Tom (Gast)


Lesenswert?

Christian X. schrieb:
> Tom schrieb:
>> Ich möchte einen kleinen "Übersetzer" für meine 3 30.3180.IT Stationen basteln.
> 868Mhz -> MQTT
>
> Einen Übersetzer von 30.3180.IT auf MQTT gibt es mit tfrec-mqtt bereits
> - allerdings auf Basis eines Linux-basierten (Mini-) Rechners und eines
> DVB-T-Sticks. Wenn es Dir nur auf geringe Größe ankommt, könntest Du Dir
> z.B. einen Raspberry Pi Zero ansehen.
>
> Wenn ich Dich richtig verstehe, möchtest Du tfrec aber auf einem
> Mikrocontroller betreiben und dazu den Code von tfrec wiederverwenden.
> Keine Ahnung, ob das funktionieren würde. Meinst Du mit "Modul" ein
> Stück Hardware, das Du direkt an einen ESP32 anschließen kannst? Da
> fällt mir eigentlich nur ein, einen DVB-T-Stick zu zerlegen.

Hi,
das Problem ist, dass es erstens vom Platz her mit einem Pi Zero nicht 
gehen wird, zweitens läuft das System mit Akkus und sendet an einen 
Server per Lora, der 3,5km weit weg steht. Das mit den Akkus ist recht 
schwer mit dem Pi.

von Tom (Gast)


Lesenswert?

Georg A. schrieb:
> In den Sendern sind Chips von Axsem (jetzt Onsemi) drin. Irgendwas
> mit
> AX5xxx. Sehr wahrscheinlich ist das Gegenstück (bzw. ein Transceiver)
> auch in den Empfängern. Die Chips wären bei Digikey sogar erhältlich.
> Aber Module dazu kenne ich auch nicht, vermutlich ist es einfacher, eine
> Klimalogg-Pro-Basisstation zu schlachten und das SPI zum Transceiver
> anzuzapfen.

Danke, ich schaue mal ob ich die Chips finde. Die Basisstation zu 
zerlegen wäre natürlich eine Möglichkeit, aber verkompliziert alles 
etwas.

von Tom (Gast)


Lesenswert?

Ich suche etwas wie die RFM63W-Module, aber eben mit NRZS, die RFM63er 
können nur NRZ. Leider, sonst wären die perfekt

von Martin (Gast)


Lesenswert?

Tom schrieb:

> Ich suche etwas wie die RFM63W-Module, aber eben mit NRZS, die RFM63er
> können nur NRZ. Leider, sonst wären die perfekt

Der TO hat in einem Thread geschrieben, dass er glaubt welcher Chip im 
KlimaLogg Pro verbaut ist. Vielleicht liest er hier mit und gibt einen 
Hinweis. Ansonsten: Gibt es einen Empfänger, der das Signal 1:1 
durchreicht? Die Dekodierung übernimmt dann ein µC.

von Christian X. (mikrocontroller-user)


Lesenswert?

Ich habe hier noch eine Basisstation RH100 inkl. Funk-Stick liegen. Auf 
dem Stick liegt nur 1 Chip frei, darauf steht "SILABS F326 DCNAQO 
0838+". Scheint mir der Mikrocontroller zu sein. Ein anderer Chip, 
vermutlich das Funkmodul, ist unter einem schwarzem Batzen versteckt. 
Der Stick wird am PC mit VID 6666  PID 5555  Serial 0123456 erkannt.

Laut FHEM-Forum 
(https://forum.fhem.de/index.php/topic,11808.msg204967.html#msg204967) 
enthält
- der USB-Stick einen AX5051
- die 30.8180.IT-Sender einen AX5031

von Tom (Gast)


Lesenswert?

Ich danke euch sehr. Hab mir jetzt beide Chips bei mouser bestellt, 
scheinen laut Datenblatt recht einfach zu sein vom Platinendesign her.

von Christian X. (mikrocontroller-user)


Lesenswert?

Ich habe gerade erst bemerkt, dass inzwischen auch das allgemeiner 
angelegte Projekt "rtl_433" die Sensoren 30.8081.IT unterstützt. Die 
Erkenntnisse aus tfrec sind dort eingeflossen. Die Implementierung kann 
man sich bei Interesse hier ansehen: 
https://github.com/merbanan/rtl_433/pull/1319/commits/b85377c029c1dab1efa4806e35aa4ad96c1dc53c

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.