RFD-FHEM / RFFHEM

Counterpart of SIGNALDuino, it's the code for FHEM to work with the data received from the uC
GNU General Public License v3.0
45 stars 33 forks source link

Help needed to get data from rain and temperature sensor ADE WS1907 #965

Closed docolli closed 3 years ago

docolli commented 3 years ago

Specifications for new sensor / switch / or other device ...

Specifications

Logdata Log_13.05.2021.txt On some log data I have added the mm rain and the temperature that was updated at that time point.

I know already, that signal seems to be like -978/2683 = sL -2685/991 = lS

and -2685/7344ms (=lX) Low/High Pulse Pause between multiple data sending (3 times?).

          lSlSsLsLsLlSsLsLsLsLlSsLsLsLsLlSlSlSsLlSlSsLlSlSlSlSsLsLsLsLsLsLsLsLsLsLlSsLlSlSlSlSsLsLsLsLsLsLlSlSsLlSsLlSsLlSlSlSlSsLlX
sLsLlSlSlSlSlSsLsLsLlSsLsLsLsLlSsLsLsLsLlSlSlSsLlSlSsLlSlSlSlSsLsLsLsLsLsLsLsLsLsLlSsLlSlSlSlSsLsLsLsLsLsLlSlSsLlSsLlSsLlSlSlSlSsLlX
sLsLlSlSlSlSlSsLsLsLlSsLsLsLsLlSsLsLsLsLlSlSlSsLlSlSsLlSlSlSlSsLsLsLsLsLsLsLsLsLsLlSsLlSlSlSlSsLsLsLsLsLsLlSlSsLlSsLlSsLlSlSlSlSsLsLsLsLsLsLs5

So I guess the data is in the middle line.

Decoding with lS = 1 sL = 0

gives the following Bits:

     110001000010000111011011110000000000101111000000110101011110lX
00111110001000010000111011011110000000000101111000000110101011110lX
0011111000100001000011101101111000000000010111100000011010101111000000s5

Can somebody please verify and help me to proceed further to understand the data? Can I configure Signalduino or FHEM module already with this knowledge, so I get the data bytes for easier analysis?

Discussion in German (preferred) or English.

elektron-bbs commented 3 years ago

Nach einem ersten Blick auf die Log-Datei würde ich sagen: Das sollte lösbar sein. Ich bitte allerdings um etwas Geduld, ich bin im Moment an einem anderen Protokoll dran.

docolli commented 3 years ago

Danke für die schnelle Antwort. Ich bin geduldig... Kann ich bis dahin schon irgendwo nachlesen, wie ich das Protokoll mit Hilfe von Signalduino näher analysieren kann?

elektron-bbs commented 3 years ago

Du kannst in der Datei SD_ProtocolData.pm folgende Protokolldefinition hinzufügen:

    "110" =>  # ADE WS 1907 Wetterstation mit Funk-Regenmesser 
              # https://github.com/RFD-FHEM/RFFHEM/issues/965 docolli 2021-0514
      {
        name            => 'ADE_WS_1907',
        comment         => 'Weather station with rain gauge',
        id              => '110',
        knownFreqs      => '433.92',
        one             => [-3,1], # 2700,-900
        zero            => [-1,3], # -900,2700
        start           => [8],    # 7200
        clockabs        => 900,
        format          => 'twostate',
        # clientmodule    => 'SD_WS',
        # modulematch     => '^P110#',
        preamble        => 'u110#',
        reconstructBit   => '1',
        length_min      => '65',
        length_max      => '66',
      },

Nach Neustart von FHEM und Aktivierung von Protokoll 110 sollte es dir ein Gerät SIGNALduino_unknown_110 anlegen. Da werden erstmal nur die Nachrichten mitgeschrieben, die dann zu analysieren sind.

docolli commented 3 years ago

Ich bekommen jetzt folgende events:

2021-05-14 14:19:56 SIGNALduino SignalDuino DMSG u110#9C1B00FBFF3E06F54
2021-05-14 14:19:57 SIGNALduino SignalDuino UNKNOWNCODE u110#9C1B00FBFF3E06F54
2021-05-14 14:20:41 SIGNALduino SignalDuino DMSG u110#9C1B02FBFF3D06F64
2021-05-14 14:20:42 SIGNALduino SignalDuino UNKNOWNCODE u110#9C1B02FBFF3D06F64
2021-05-14 14:21:26 SIGNALduino SignalDuino DMSG u110#9C1B04FBFF3B06F64
2021-05-14 14:21:26 SIGNALduino SignalDuino UNKNOWNCODE u110#9C1B04FBFF3B06F64
2021-05-14 14:22:56 SIGNALduino SignalDuino DMSG u110#9C1B08FBFF3906F84
2021-05-14 14:22:57 SIGNALduino SignalDuino UNKNOWNCODE u110#9C1B08FBFF3906F84

Regen ist 0.0mm Temp 20.8°C.

Leider hat FHEM kein Gerät/LogFile angelegt, obwohl autocreate=active. Kannst du mir noch kurz einen Tipp geben, wie ich das Gerät/FileLog manuell anlegen kann?

elektron-bbs commented 3 years ago

Mhmmm... eigenartig... FHEM aktuell? Vielleicht mal ein Update versuchen:

update all https://raw.githubusercontent.com/RFD-FHEM/RFFHEM/master/controls_signalduino.txt

Ansonsten:

define SIGNALduino_unknown_110 SIGNALduino_un SIGNALduino_unknown_110
define FileLog_SIGNALduino_unknown_110 FileLog ./log/SIGNALduino_unknown_110-%Y-%m.log SIGNALduino_unknown_110
elektron-bbs commented 3 years ago

Ich denke, ich habe den Fehler gefunden. Bitte führe mal folgenden Befehl aus:

attr SIGNALduino development 1

Ich gehe davon aus, das dein SIGNALduino so heißt, ansonsten musst du den Namen natürlich anpassen.

docolli commented 3 years ago

Danke! So klappts.

2021-05-14_19:38:41 SIGNALduino_unknown_110 bitMsg: 10011100000110110000001011111110111111110110001100000110000111110100
2021-05-14_19:38:41 SIGNALduino_unknown_110 bitMsg_invert: 01100011111001001111110100000001000000001001110011111001111000001011
2021-05-14_19:38:41 SIGNALduino_unknown_110 bitCount: 68
2021-05-14_19:38:41 SIGNALduino_unknown_110 hexMsg: 9C1B02FEFF63061F4
2021-05-14_19:38:41 SIGNALduino_unknown_110 hexMsg_invert: 63E4FD01009CF9E0B
2021-05-14_19:38:41 SIGNALduino_unknown_110 hexCount_or_nibble: 17
2021-05-14_19:38:41 SIGNALduino_unknown_110 lastInputDev: SignalDuino
2021-05-14_19:38:41 SIGNALduino_unknown_110 past_seconds: 0
docolli commented 3 years ago

Hier eine Aufzeichnung. Hab per UserInfo die Werte von der Basis jeweils eingetragen. Es scheint so, dass alle ~40s ein Datagram gesendet wird, ich empfange jedoch nicht alle. Netterweise zeigt die Basis an, wenn sie Werte empfängt.

Habe versucht nur mal die Temperatur aufzuzeichnen, ohne die Wippe zu bewegen. Der Sensor stand erst in der Heizung (da wo der Raspi samt SignalDuino sitzt), dann habe ich ihn auf die Terasse getragen, damit sich die Temp schneller ändert.

Ich muss wohl einmal die Wippe bewegt haben, auf einmal zeigte er 0.1mm Regen an. Das Datagram dazu habe ich aber nicht empfangen. Aus vorigen Versuchen weiß ich, dass wenn sich die Wippe bewegt, das letzte Nibble von "4" auf "0" wechselt. Ich vermute in der Basis ist eine Verzögerung drin, somit hat der eine Impuls für eine ganze Weile die Anzeige 0.1mm Regen verursacht.

Konzentrieren wir uns erstmal auf die Decodierung der Temp.

Log_14.05.2021.txt

elektron-bbs commented 3 years ago

Ich denke, die Temperatur hätte ich schon mal... Es wurde ein neuer Branch erstellt. Ein Update darauf erfolgt mit folgendem Befehl:

update all https://raw.githubusercontent.com/RFD-FHEM/RFFHEM/master_ADE_WS1907/controls_signalduino.txt

Nach einem Neustart von FHEM und anschließender Aktivierung von Protokoll 110 sollte es dir nach Empfang von 3 gültigen Nachrichten innerhalb 3 Minuten einen neuen Sensor "SD_WS_110_TR" anlegen.

Im Moment wird nur die Temperatur ausgewertet. Für die Ident des Sensors werden die ersten 2 Byte verwendet. Diese ändert sich wahrscheinlich bei jedem Batteriewechsel. Das muss noch verifiziert werden. Regenmenge und Batteriewechselanzeige fehlen noch. Du kannst ja vielleicht schon mal Daten sammeln. Ich verwende dafür gern eine Excel-Tabelle, die ich mal mit hochlade.

ADE_WS1907.xlsx

docolli commented 3 years ago

Leider fehlt mir nun der SignalDuino!

2021.05.15 18:04:09 1: reload: Error:Modul 88_SIGNALduino_TOOL deactivated:
 Can't locate Digest/CRC.pm in @INC (you may need to install the Digest::CRC module) (@INC contains: ./lib ./FHEM . /etc/perl /usr/local/lib/arm-linux-gnueabihf/perl/5.28.1 /usr/local/share/perl/5.28.1 /usr/lib/arm-linux-gnueabihf/perl5/5.28 /usr/share/perl5 /usr/lib/arm-linux-gnueabihf/perl/5.28 /usr/share/perl/5.28 /usr/local/lib/site_perl /usr/lib/arm-linux-gnueabihf/perl-base ./FHEM/lib) at FHEM/lib/SD_Protocols.pm line 15, <$fh> line 514.
BEGIN failed--compilation aborted at FHEM/lib/SD_Protocols.pm line 15, <$fh> line 514.
Compilation failed in require at ./FHEM/88_SIGNALduino_TOOL.pm line 29, <$fh> line 514.
BEGIN failed--compilation aborted at ./FHEM/88_SIGNALduino_TOOL.pm line 29, <$fh> line 514.
docolli commented 3 years ago

Holla die Waldfee, die Exceltabelle ist ja cool! Aktuell habe ich schon versucht Regendaten durch Wippen zu sammeln. Der Sensor sendet alle 45s Daten, leider empfange ich in FHEM nicht immer was... Habe mir einen Timer auf 45s gestellt und einmal pro Zyklus gewippt. Später dann 2x pro Zyklus. Anzeigewerte habe per UserMSG ins Log geschrieben.

Regensensor_Decode_Regen_1.txt

Batterie wollte ich auch mal testweise wechseln, bzw. eine alte Batterie einlegen. Daten kommen!

docolli commented 3 years ago

Vielleicht hilft uns ja das hier weiter: https://www.mikrocontroller.net/topic/398427 ?

docolli commented 3 years ago

Ich installiere das fehlende Modul nach:

apt-get install libdigest-crc-perl

Ja klappt, der Signalduino ist wieder da!

docolli commented 3 years ago

Sensor wurde angelegt. Temperaturwerte stimmen schon mal ziemlich genau mit der Basis des WS1907 überein! Musst du umrechnen? Ich hatte vorhin mal 15.3 in FHEM, aber 15.2 in der Anzeige, hier noch mehr Vergleichswerte:

| FHEM | Anzeige|
| 15.3 | 15.2   |
| 14.8 | 14.7   |
| 14.5 | 14.5   |
| 14.3 | 14.3   |
| 14.0 | 14.0   |
| 13.9 | 13.8   |
| 13.8 | 13.8   |
| 13.7 | 13.6   |
| 13.6 | 13.6   |
| 13.5 | 13.5   |
elektron-bbs commented 3 years ago

Der Sensor liefert die Werte in Grad Fahrenheit. Da kann es durch die Umrechnung und Rundung zu Abweichungen kommen.

docolli commented 3 years ago

Ich habe eben nachgeschaut: Wenn der Sensor 60,6°F sendet (was 15,88889°C sind) zeigt die Basis 15.8°C an, dein Modul aber 15,9°C. DU bist genauer!!! 😂😉👍

elektron-bbs commented 3 years ago

Das sieht so aus, als ob die Wetterstation nicht rundet, sondern nach einer Kommastelle abschneidet.

docolli commented 3 years ago

B3/B4 könnten die Anzahl der Wippbewegungen sein! Siehe meine Daten im Excel File:

ADE_WS1907.xlsx

Trichterfläche: ca. 17,5 x 10,0 cm (Außenkanten sind leicht gerundet) -> ~175 cm² Ein Delta der Wippbewegungen von 33 ergab einen Anzeigewert von 3.5 mm. Ein Delta der Wippbewegungen von 44 ergab einen Anzeigewert von 4.7 mm.

Bei Gelegenheit wippe ich mal, bis B3 "überläuft".

Das Bit65 finde ich auch spannend. Könnte sowas wie "es regnet aktuell" sein, oder? Die Wetterstation hat zumindest blinkende Regentropfen für diesen Zustand. Aber auch ohne Wippen blinkt das noch für ca. 30min.

elektron-bbs commented 3 years ago

Danke für die Zuarbeit. B3 und B4 hatte ich auch schon vermutet. Byte 4 ist MSB und Byte 3 LSB. Interessant sind die letzten beiden Einträge. Beim letzten hast du notiert: "10x wippen". Dabei hat sich Byte 3 von 77 in 87 geändert. Es handelt sich dabei offensichtlich um einen Zähler der Wippenschläge. Die Frage ist jetzt nur, ob ein Wippenschlag = 0,1 inch oder 0,1 mm? Müsste man mal durchrechnen. Edit: Müssen wir nicht rechnen. Du hattest in den Zeilen 68 bis 78 fortlaufend Regenmengen eingetragen, die fast exakt Byte 3 entsprechen. Vorher war offensichtlich ein Überlauf des Zählers. Wir brauchen nur die Maßeinheit, die du für die Einträge verwendet hast.

Bit 65 kann kaum diese Bedeutung haben. In Zeile 95 bis 100 der Excel-Liste hast du 0 Niederschlag dokumentiert, aber das Bit wechselt von 0 auf 1. Zitat aus der Doku: "Aktuelle Regenmenge bei Start des Niederschlages. Wird auf "0" zurückgesetzt, wenn 30 Minuten kein Niederschlag gemessen wurde." Damit werden sicher auch die "blinkenden Regentropfen" zurück gesetzt.

docolli commented 3 years ago

B3 und B4 kann ich bestätigen. Siehe meine letzten Aufzeichnungen, in denen ich B3 in den Überlauf gewippt habe.

ADE_WS1907.xlsx

Ich habe stets die Anzeige in "mm" aufgeschrieben.

Ein Kubikmeter Wasser enthält 1000 Liter dieser kostbaren Flüssigkeit. 
Bei einer Würfelkantenlänge von einem Meter (das ergibt eine Grundfläche von genau einem Quadratmeter) 
entspräche ein Millimeter Höhe einem Tausendstel dieses Volumens. Folglich entspricht ein Millimeter 
Niederschlag einem Liter Regenwasser pro Quadratmeter Grundfläche.

Ich werde einen Beutel mit Wasser (500-1000ml) füllen, genau wiegen und diese Menge durch den Sensor tropfen lassen. Dabei die Anzahl der Wippbewegungen protokollieren. Dann sollten wir einfach ausrechnen können wieviel ml pro Wippenschlag. Das ins Verhältnis zur Sammeltrichterfläche setzen. Und dann vergleichen wir unseren Wert mit der Anzeige.

elektron-bbs commented 3 years ago

Ich habe das jetzt schon mal auf Verdacht erweitert, da ich ein ähnliches Protokoll gefunden habe. Mach bitte nochmal ein Update wie gestern: https://github.com/RFD-FHEM/RFFHEM/issues/965#issuecomment-841684327

Deine letzten Änderungen in der Excel-Liste sind in meiner natürlich noch nicht enthalten. ADE_WS1907_01.xlsx

docolli commented 3 years ago

Mach ich gleich!

Hier die Daten der Messung und die Excel Auswertung:

Kalibrierung_16.05.2021.txt ADE_WS1907.xlsx

Zeilen 110 bis 116. Ich komme auf einen Faktor von 0,1079 (mm Regen pro Wippenschlag). Kann man den Faktor als Attribut im Gerät angeben, um leicht nachkalibrieren zu können?

docolli commented 3 years ago

Bei meiner Tütenkalibrierung habe ich ein Differenzgewicht von 1167g (=1167ml = 1,167 Liter), diese haben zu einer Erhöhung des rawRainCounter von 256 auf 798 (=542) geführt.

Die Fläche des Trichters ist 175cm², 1m² hat 100cmx100cm = 10000cm². Der Trichter fängt also 175/10000 (=0,0175) der Wassermenge eines Quadratmeters Fläche ein.

Ein Wippenschlag sind 1,167/542 = 0,0021531365313653 Liter. Hochgerechnet von 175cm² auf 10000cm² -> 0,0021531365313653*10000/175 = 0,1230363732208751 Liter/m² (mm) pro Wippenschlag.

Ich komme also auf einen etwas höheren Wert, als die Basisstation. Bitte prüfe meine Berechnung selbst nach, nicht dass ich irgendwo einen Fehler drin habe. 😉

docolli commented 3 years ago

Update gemacht, habe nun mehr Readings im Gerät. Teste jetzt das Batteriewechselanzeigebit durch Einbau älterer Batterien.

Batteriewechsel wurde erkannt! Leider haben die alten Batterien noch zu viel Saft, es erscheint noch keine Wechselanzeige in der Basis. Ich suche weiter nach älteren Batterien...

elektron-bbs commented 3 years ago

Hast du evtl. Akkus zur Hand? Die haben nur 1,2 Volt.

docolli commented 3 years ago

Hab was passendes gefunden! FHEM zeigt damit batteryState = low, die Station zeigt aber kein Symbol, so wie in der Anleitung beschrieben. Es blinkt jedoch die Empfangsanzeige jetzt 3x, wenn er was empfängt und ist ansonsten nicht sichtbar. Scheint wohl nicht ganz zu stimmen, was die Anleitung sagt.

OK, jetzt fangen gerade in der Basis die Anzeigen Regen und Außentemp an zu blinken. Das ist wohl die Info zum Batteriewechsel.

Damit haben wir jetzt schon einiges erreicht! Ich danke Dir!

Neben dem noch fehlenden Faktor zur Umrechnung der Regenmenge, wie bekomme ich sowas wie Regenmenge innerhalb 30 Min oder pro Tag? Hast du da schon was von dem anderen Sensor?

docolli commented 3 years ago

Hier noch ein paar Datagramme vor / nach Batteriewechsel: DMSG: W110#9C1B042B039805864 DMSG: W110#131800F6FF9905BE4 DMSG: W110#8C13C0F7FFA305FD4

Die ersten zwei Byte sind wohl tatsächlich eine Art ident.

elektron-bbs commented 3 years ago

Zu dem Faktor für die Regenmenge: Wenn die Station pro Wippenschlag 0,1 mm anzeigt und FHEM auch, passt es. Mich irritiert aber die Doku:

Bis zu 25,4 mm (1 inch) Niederschlag:
−− Jedes Segment steht für einen Niederschlag von
2,54 mm (0,1 inch).
−− Der Regenzylinder zeigt 25,4 mm (1 inch) an.

Die Frage ist ja jetzt, ob in inch oder mm übertragen wird. Bei der ähnlichen Wetterstation TFA Drop Rainmeter 30.3233.01 rechnen sie halt mit einem Faktor von 0.254 um und wir aktuell mit 0.1.

Zur Auswertung pro Stunde, Tag, Jahr u.s.w. kannst du z.B. das Modul "statistics" verwenden, Wenn Diagramme pro Stunde oder Tag reichen, gibt es bei den Plots die Funktion "delta-h" und "delta-d".

Lädst du mal bitte noch das komplette Log von SD_WS_110_TR hoch?

docolli commented 3 years ago

Das ist nur eine optische Anzeige der aktuellen Regenmenge, also des Wertes, der als mm Wert angezeigt wird und nach 30min ohne Regen wieder auf 0.0 zurückgesetzt wird!

Normal ist die Skalierung des Regenzylinders auf 25,4mm (=100%), so hat jedes Segment also 2,54mm. Übersteigt der angezeigte Wert die 25.4, so springt die Skalierung des Zylinders auf 50.8mm und der Zylinder zeigt erst mal wieder nur 50% an. Bis der Wert die 50.8mm übersteigt, dann springt die Skalierung wieder auf was höheres usw. bis max 1270mm.

docolli commented 3 years ago

Hier die LogDatei

SD_WS_110_TR-2021.log

docolli commented 3 years ago

Habe das jetzt mehrere Tage getestet. Hat ja auch ordentlich geregnet😉. Alles Bestens!

Zur Kalibrierung auf meinen Wert habe ich ein UserAttribut und ein UserReading angelegt. Angezeigt wird per stateFormat:

attr SD_WS_110_TR userattr calibrationValue
attr SD_WS_110_TR calibrationValue 0.123
attr SD_WS_110_TR userReadings rainCalibrated { ReadingsVal("SD_WS_110_TR","rain",0)*$attr{SD_WS_110_TR}{calibrationValue}*10;;;; }
attr SD_WS_110_TR stateFormat {sprintf("Stunde: %.1f l/m² / Tag: %.1f l/m²",ReadingsVal("SD_WS_110_TR","statRainCalibratedHour",0),ReadingsVal("SD_WS_110_TR","statRainCalibratedDay",0))}

Statistik pro Stunde etc. per statistics Modul:

define Regenmesser_stat statistics SD_WS_110_TR
attr Regenmesser_stat deltaReadings rain,rainCalibrated
attr Regenmesser_stat ignoreDefaultAssignments 1
attr Regenmesser_stat singularReadings SD_WS_110_TR:rainCalibrated:Delta:(Hour|Day|Month|Year)

Von mir aus könnten wir dieses Issue schließen. Wird die Definition irgendwann in den Hauptzweig von RFFHEM kommen? Muss der Signalduino noch das Attribut development=1 haben, oder ist das egal? https://github.com/RFD-FHEM/RFFHEM/issues/965#issuecomment-841340488

elektron-bbs commented 3 years ago

Freut mich, das es funktioniert. Ich werde einen pull request vorbereiten, um das Protokoll in den Master-Branch zu überführen. Das Attribut "development" kannst du löschen. Es war nur für den ersten Test erforderlich.

elektron-bbs commented 3 years ago

Das Protokoll ist jetzt im Master-Branch. Ich schließe dieses Issue.