Wetterstation: WEATHERMAN-Controller von Dr. Stall

Begonnen von bubu185, 22 März 2018, 18:59:56

Vorheriges Thema - Nächstes Thema

JudgeDredd

Hallo Wetterfreunde  ;)

seit kurzem bin ich auch im Weatherman-2 Club. Nach ein paar anfänglichen Elektronik Problemchen, bin ich nun bei der Software Konfiguration angekommen.

Ich habe die z.Zt. aktuelle Firmware (wm2_22_2) installiert.
In meiner Umgebung habe ich folgende Server/Domänen:
Produktion:
Zeitserver: ntp.my-domain.intranet
Fhem:       fhem.my-domain.intranet

Integration:
Zeitserver: ntp.int-my-domain.intranet
Fhem:       fhem.int-my-domain.intranet


Offensichtlich hat die Firmware ein Problem mit der Länge des DNS Namens.
Wenn ich mit den Befehlen:
http://wm02.my-domain.intranet/?ntp:ntp.my-domain.intranet:
http://wm02.my-domain.intranet/?ccu:fhem.my-domain.intranet:

die Parameter setze, dann schreibt mir die Firmware nach 20 Zeichen den Rest in den NTP-Name.
Ergebnis:
ccu: fhem.my-domain.intranet
ntp: net

Ist das schonmal jemand aufgefallen oder arbeitet Ihr alle mit IP-Adressen ?

Gruß,
JudgeDredd
Router: Eigenbau (pfSense)
FHEM: Proxmox (DELL R720) | Debian 12 (VM)

Flachzange

Das Problem wird die Länge der Top-Level-Domain sein, die auf drei Zeichen beschränkt sein wird.

Deine Frage ist aber vermutlich besser an der Quelle aufgehoben:

https://homematic-forum.de/forum/viewtopic.php?f=31&t=38485&start=4100&sid=1e258af892850a355f65e935b5711fcc

JudgeDredd

Zitat von: Flachzange am 16 November 2021, 21:17:21
Das Problem wird die Länge der Top-Level-Domain sein, die auf drei Zeichen beschränkt sein wird.
Ein Domainname ist nach RFC aber nicht auf 3 Zeichen begrenzt. Daran kann es nicht liegen.

Zitat von: Flachzange am 16 November 2021, 21:17:21
https://homematic-forum.de/forum/viewtopic.php?f=31&t=38485&start=4100&sid=1e258af892850a355f65e935b5711fcc
Für den Weatherman nutze ich zwar keine CCU Kommunikation, aber danke für den Link, da werde ich meine Frage mal platzieren. In dem zitierten Thread des HomeMatic-Forums scheint deutlich mehr Schwung zu sein als hier.
Router: Eigenbau (pfSense)
FHEM: Proxmox (DELL R720) | Debian 12 (VM)

der2of6

Erst mal vielen Dank für die vielen Infos hier.
Ich habe nun meinen Weatherman und meinen Pulsecounter via Syslog angebunden. Mit dem Vorgeschlagenen DO IF werden die Daten auch getrennt.

Nun habe ich aber noch ein Problem, wärend beim Weatherman die User Readings perfekt ausgelesen werden, klappt es beim Pulsecounter nicht.
Bei mir wird im userattr counter_4 der komplette JSON Text angezeigt und nicht nur der Inhalt von "w_counter_4".

Die Definition der User Readings sollte doch genauso wie beim Weatherman funktionieren? (Anpassen der Variablen etc.)

counter_4 { my $w=ReadingsVal($name,"Counter_msg",0) ;; $w =~ s/.*"w_counter_4".*?"value":"([+-]?\d*[\.\d]\d*)".*/$1/ ;; $w },


Der Pulsecounter liefert folgendes:

{"modultyp":"PULSECOUNTER","vars":[{"name":"0","homematic_name":"w_counter_ip","desc":"ip des pulsecounters","type":"string","unit":"","value":"1.2.3.4"},
{"name":"11","homematic_name":"w_counter_1","desc":"w_counter_1","type":"number","unit":"KWh","value":0.000},
{"name":"12","homematic_name":"w_power_1","desc":"w_power_1","type":"number","unit":"KW","value":0.001},
{"name":"13","homematic_name":"w_counter_2","desc":"w_counter_2","type":"number","unit":"KWh","value":0.000},
{"name":"14","homematic_name":"w_power_2","desc":"w_power_2","type":"number","unit":"KW","value":0.001},
{"name":"15","homematic_name":"w_counter_3","desc":"w_counter_3","type":"number","unit":"KWh","value":0.000},
{"name":"16","homematic_name":"w_power_3","desc":"w_power_3","type":"number","unit":"KW","value":0.006},
{"name":"17","homematic_name":"w_counter_4","desc":"w_counter_4","type":"number","unit":"m3","value":123.356},
{"name":"18","homematic_name":"w_power_4","desc":"w_power_4","type":"number","unit":"m3/h","value":0.002}],
"Systeminfo":{"MAC-Adresse":"00:00:00:00:00:00","Homematic_CCU_ip":"1.2.3.4","WLAN_ssid":"wlanssid","WLAN_Signal_dBm":"-71","sec_seit_reset":"57544","zeitpunkt":"2022.07.25 /08h48","firmware":"wiffi_counter_66"}}


Wo ist in der definition des UserReadings mein Denkehler?

JudgeDredd

Zitat von: der2of6 am 25 Juli 2022, 09:10:22
counter_4 { my $w=ReadingsVal($name,"Counter_msg",0) ;; $w =~ s/.*"w_counter_4".*?"value":"([+-]?\d*[\.\d]\d*)".*/$1/ ;; $w },
Wo ist in der definition des UserReadings mein Denkehler?
Der Pulsecounter umschließt die Value nicht in Anführungszeichen

Also sollte das funktionieren:
counter_4 { my $w=ReadingsVal($name,"Counter_msg",0) ;; $w =~ s/.*"w_counter_4".*?"value":([+-]?\d*[\.\d]\d*).*/$1/ ;; $w },
Router: Eigenbau (pfSense)
FHEM: Proxmox (DELL R720) | Debian 12 (VM)

der2of6


Haxlefax

Guten Morgen,
ich hoffe, es liest hier noch jemand. Ich habe seit einigen Monaten auch einen Weatherman2 in mein fhem per Log2Syslog eingebunden. Eigentlich funktioniert auch alles prima, wenn ich nicht ab und zu verkürzte Telegramme empfangen würde, die "flackernde Lampen" etc. verursachen:

So sollte das JSON-Telegram (Ausschnitt) aussehen:
{"name":"5","homematic_name":"w_wind_spitze","desc":"peak_windgeschwindigkeit","type":"number","unit":"km/h","value":"11.2"},
{"name":"24","homematic_name":"w_windstaerke","desc":"bft_windgeschwindigkeit","type":"number","unit":"bft","value":"3"},
{"name":"23","homematic_name":"w_windrichtung","desc":"windrichtung","type":"string","unit":"","value":"W"},
{"name":"6","homematic_name":"w_wind_dir","desc":"windwinkel","type":"number","unit":"grad","value":"270"},
{"name":"10","homematic_name":"w_lux","desc":"helligkeit","type":"number","unit":"lux","value":"1973.0"},
{"name":"28","homematic_name":"w_uv_index","desc":"uv-index","type":"number","unit":"uv_index","value":"0.158"},
{"name":"22","homematic_name":"w_sonne_diff_temp","desc":"sonnen_difftemperatur","type":"number","unit":"gradC","value":"0.0"},
{"name":"15","homematic_name":"w_sonnentemperatur","desc":"sonnen_temperatur","type":"number","unit":"gradC","value":"0.0"},


stattdessen sieht es dann so aus:
{"name":"5","homematic_name":"w_wind_spitze","desc":"peak_windgeschwindigkeit","type":"number","unit":"km/h","value":"7.5"},
{"name":"24","homemat{"name":"22","homematic_name":"w_sonne_diff_temp","desc":"sonnen_difftemperatur","type":"number","unit":"gradC","value":"0.0"},
{"name":"15","homematic_name":"w_sonnentemperatur","desc":"sonnen_temperatur","type":"number","unit":"gradC","value":"0.0"},


Das nächste Telegramm ist dann i.d.R wieder vollständig, so dass alle Readings wieder richtig gefüllt werden.

Hat vielleicht jemand eine Idee, mit welcher Strategie ich den Fehler finden könnte? Ich beschäftige mich mit Software sonst so wenig, dass ich gar keinen Ansatz habe. Und Google hat mir auch nicht geholfen. Da ist ja auch die Frage, wonach muss ich suchen.
Ganz vielen lieben Dank!

Flachzange

Ist das nicht einfach nur ein partielles Update? Zumindest in der Vergangenheit hat der Weatherman immer auch nur ein Subset seiner Werte aktualisiert. Das ist ja auch prinzipiell richtig und würde ich nicht als Problem bezeichnen. Die Frage ist nur, warum das bei Dir zu einem ungewünschten Verhalten führt. Meine Erwartung wäre, dass auch nur die Readings aktualisiert werden, welche im Update enthalten sind und es deswegen auch keine unerwünschten Nebeneffekte geben sollte.

Ich nutze selbst kein Log2Syslog, weshalb ich an dieser stelle leider nicht helfen kann.

Haxlefax

Hallo,

erst mal ganz lieben Dank für Deine Antwort!

Ich meine, es handelt sich nicht um ein partielles Update, da die mittlere Zeile keine korrekte Syntax hat: {"name":"24","homemat{"name":"22", ..., es müsste erst wieder ein } folgen, bevor das nächste {"name: kommt.

Grüße

andi11

müsste es nicht komplett ohne den text {"homemat{"name":"22",
sein?
Was sagt denn der Hersteller dazu? Hast du noch eine andere Möglichkeit die Daten zyklisch zu sichern? Mir gehts darum ob du FHEM als Fehlerquelle ausschließen kannst. Alternativ zumindest mal HTTPMOD benutzen, das kann auch JSON.

Haxlefax

Schönen guten Morgen zusammen,

es ist leider etwas Zeit vergangen. Aber ich war nicht untätig:
Ich habe mit Dr. Stall Kontakt gehabt, ich habe den Weatherman auch per HTTPMOD abgefragt und zusätzlich ein nacktes FHEM-System aufgebaut, dass nicht zu tun hat, als per HTTPMOD den Weatherman zu kontaktieren. Des Weiteren habe ich mein Hauptsystem auf Raspberry4 mit SSD umgestellt, um ein schnelles System zu haben. Zuletzt habe ich in die WLAN-Strecke noch einen Repeater gehängt, um die Strecke robuster zu machen.

Nach wie vor gibt es immer wieder im LOG des Log2Syslog-Device unvollständige JSON-Telegramme, mal mehr mal weniger häufig. Ich habe das Gefühl, wenn wenn ich ein "monatliches" LOG schreibe, häufen sich die Fehler, bei einem täglichen LOG sind es deutlich weniger.

Interessant ist, dass parallel LOGS des HTTPMOD-Device fehlen, wenn im Log2Syslog-Device Fehler auftreten. Ich hatte mit zwei verschieden Zyklusintervallen experimentiert, 20 sec und 60 sec.

Von Dr. Stall kamen zwei Hinweise: 1. Die WLAN-Übertragungsstrecke sei zu lang udn damit anfällig für Fehler. 2. Durch die vielen Abfragen wird der Weatherman überlastet und produziert Fehler.

Ehrlich gesagt habe ich keine wirkliche Idee mehr :-(

Ich habe nur noch eine Frag hier an dieser Stelle: Die Daten des Weatherman werden bei mir per Userreading separiert, wie weiter vorne beschrieben. Wenn ein fehlerhaftes Telegramm empfangen wird, sehen meine Userreadings ungefähr so aus: Helligkeit: {"homemat{"name":"22", anstelle von Helligkeit: 2345. Ist es möglich, mit Hilfe des Log2SysLog Fehlerhafte Telegramme zu verwerfen? Das HTTPMOD-Device scheint dies zu tun, denn hier erhalte ich keine fehlerhafte Auswertung.

Falls es keine Lösung gibt, bleibt mit nur, zwei Devices für den Weatherman zu nutzen, Log2Syslog für die zeitkritischen Informationen, also "Regensensor", "Wind" etc. und HTTPMOD für die langsamen, also Helligkeit, Luftdruck. Aber irgendwie finde ich, ist das nur ein Workaround für Dummys wie mich...

Vielen Dank schon mal fürs Lesen und Entschuldigung für den vielen Text. Ich hoffe, es ist irgendwie verständlich.

Viele Grüße

andi11

für mich klingt das im ersten Moment mehr nach "mal wireshark zwischenreinhängen" um zu schauen was genau falsch übertragen wird.
TCP ist doch ein sehr robustes Protokoll. Es wird sichergestellt, dass die Packete selbst fehlerfrei sind, und auch das zwischen den Packeten keines verloren geht, bzw. wird es erneut angefordert.

Haxlefax

Hallo Andi, danke für den Tipp mit wireshark. ich habe jetzt versucht, die Telegramme des WM über LAN als auch WLAN zu "finden". Ich kann alle möglichen Telegramme aufzeichnen, aber die des WM finde ich nicht. Hast Du einen Tipp für mich? Danke schon mal sehr!

Haxlefax

Guten Abend,

mir lässt das Thema mit den unvollständigen Telegrammen keine Ruhe, andererseits komme ich auch immer wieder sehr schnell an meine Wissensgrenzen. Daher würde ich gern Euch meine Gedanken mitteilen, vielleicht kann mir ja jemand helfen. Die Idee, die ich verfolge ist ganz simpel: Es sind sehr selten kaputte Telegramme, und meist dann, wenn der WM schnell hintereinander Telegramme sendet. Ich möchte bevor die userReadings gefüllt werden, die Werte auf Sinnhaftigkeit prüfen, und wenn es keinen Sinn ergibt, einfach den alten Wert weiter nutzen. Dazu habe ich im userReading-Wiki folgenden Code gefunden:
attr HM_XXXXXX userReadings Statenum {if(ReadingsVal("HM_XXXXXX","state","") eq "closed") {return 0} elsif (ReadingsVal("HM_XXXXXX","state","") eq "tilted") {return 1} elsif (ReadingsVal("HM_XXXXXX","state","") eq "open") {return 2} else {return -1}}Leider schaffe ich es nicht, den Gedanken mit "If" mit meinem Code für z.B. die Helligkeit zu verknüpfen:
attr WM userReadings Helligkeit { my $w=ReadingsVal($name,"MSG_192.168.1.30",0) ;; $w =~ s/.*"w_lux".*?"value":"([+-]?\d*[\.\d]\d*)".*/$1/ ;; $w },
Wenn das Telegramm richtig ausgewertet werden kann, steht in Helligkeit eine Zahl mit Nachkommastelle. Wenn das Telegramm falsch ist, steht in "Helligkeit" das gesamte kaputte Telegramm.

Das richtige, vollständige Telegramm sieht so aus (die CRs dienen der LesbarkeitI:
{"modultyp":"weatherman","vars":[{"name":"0","homematic_name":"w_ip","desc":"weatherman_ip","type":"string","unit":"","value":"192.168.1.30"},
{"name":"1","homematic_name":"w_temperatur","desc":"aussentemperatur","type":"number","unit":"gradC","value":"8.3"},
{"name":"21","homematic_name":"w_windchill","desc":"gefuehlte_temperatur","type":"number","unit":"gradC","value":"4.9"},
{"name":"9","homematic_name":"w_taupunkt","desc":"taupunkt_temperatur","type":"number","unit":"gradC","value":"0.0"},
{"name":"14","homematic_name":"w_himmeltemperatur","desc":"himmel_temperatur","type":"number","unit":"gradC","value":"-1.0"},
{"name":"2","homematic_name":"w_feuchte_rel","desc":"rel_feuchte","type":"number","unit":"%","value":"56.0"},
{"name":"17","homematic_name":"w_feuchte_abs","desc":"abs_feuchte","type":"number","unit":"g/m3","value":"4.7"},
{"name":"18","homematic_name":"w_regensensor_wert","desc":"regenmelderwert","type":"number","unit":"","value":"0"},
{"name":"7","homematic_name":"w_regenmelder","desc":"regenstatus","type":"boolean","unit":"","value":"false"},
{"name":"8","homematic_name":"w_regenstaerke","desc":"regenstaerke","type":"number","unit":"mm/h","value":"0.0"},
{"name":"19","homematic_name":"w_regen_letzte_h","desc":"regen_pro_h","type":"number","unit":"mm","value":"0.0"},
{"name":"20","homematic_name":"w_regen_mm_heute","desc":"regen_mm_heute","type":"number","unit":"mm","value":"1.8"},
{"name":"32","homematic_name":"w_regenstunden_heute","desc":"regenstunden_heute","type":"number","unit":"h","value":"1.1"},
{"name":"27","homematic_name":"w_regen_mm_gestern","desc":"regen_mm_gestern","type":"number","unit":"mm","value":"3.6"},
{"name":"3","homematic_name":"w_barometer","desc":"nn_luftdruck","type":"number","unit":"mb","value":"1025.35"},
{"name":"11","homematic_name":"w_barotrend","desc":"luftdrucktrend","type":"string","unit":"","value":"steigend"},
{"name":"4","homematic_name":"w_wind_mittel","desc":"avg_windgeschwindigkeit","type":"number","unit":"km/h","value":"6.6"},
{"name":"5","homematic_name":"w_wind_spitze","desc":"peak_windgeschwindigkeit","type":"number","unit":"km/h","value":"9.4"},
{"name":"24","homematic_name":"w_windstaerke","desc":"bft_windgeschwindigkeit","type":"number","unit":"bft","value":"2"},
{"name":"23","homematic_name":"w_windrichtung","desc":"windrichtung","type":"string","unit":"","value":"SO"},
{"name":"6","homematic_name":"w_wind_dir","desc":"windwinkel","type":"number","unit":"grad","value":"135"},
{"name":"10","homematic_name":"w_lux","desc":"helligkeit","type":"number","unit":"lux","value":"4030.9"},
{"name":"28","homematic_name":"w_uv_index","desc":"uv-index","type":"number","unit":"uv_index","value":"0.234"},
{"name":"22","homematic_name":"w_sonne_diff_temp","desc":"sonnen_difftemperatur","type":"number","unit":"gradC","value":"0.0"},
{"name":"15","homematic_name":"w_sonnentemperatur","desc":"sonnen_temperatur","type":"number","unit":"gradC","value":"0.0"},
{"name":"16","homematic_name":"w_sonne_scheint","desc":"sonne_scheint","type":"boolean","unit":"","value":"true"},
{"name":"26","homematic_name":"w_sonnenstunden_heute","desc":"Sonnenstunden_heute","type":"number","unit":"h","value":"4.2"},
{"name":"12","homematic_name":"w_elevation","desc":"sonne_elevation","type":"number","unit":"grad","value":"23.9"},
{"name":"13","homematic_name":"w_azimut","desc":"sonne_azimut","type":"number","unit":"grad","value":"244.1"},
{"name":"30","homematic_name":"w_minuten_vor_sa","desc":"minuten_vor_sa","type":"number","unit":"min","value":"-610"},
{"name":"31","homematic_name":"w_minuten_vor_su","desc":"minuten_vor_su","type":"number","unit":"min","value":"166"}],
"Systeminfo":{"MAC-Adresse":"10:52:1c:e9:6e:93","Homematic_CCU_ip":"192.168.1.10","WLAN_ssid":"SusHo","WLAN_Signal_dBm":"-61","sec_seit_reset":"81253","zeitpunkt":"2023.04.02/17h05","firmware":"wm2_25_3"}}

Ich würde mich sehr freuen, wenn mir hier jemand weiterhelfen könnte.
Ganz herzlichen Dank schon mal!

Holger

JudgeDredd

Zitat von: Haxlefax am 02 April 2023, 17:11:22Es sind sehr selten kaputte Telegramme, und meist dann, wenn der WM schnell hintereinander Telegramme sendet.
Hallo,
mein Weatherman läuft jetzt seit ca. 1,5 jahren recht stabil ohne Ausfälle.
Das mit den unvollständigen JSON Übertragungen hatte ich ganz am Anfang auch hin und wieder (ca. 1 mal im Monat, oder noch seltener).
Ich hatte mir damals dann ein eigenes Modul geschrieben, was die Daten vom Weatherman entgegennimmt und sowas abfängt.

Da das Modul keinen großen Nutzerkreis haben wird, ist es auch nix offizielles, aber wenn Du magst, probiere es aus, ich hänge es mal hier dran.
53_weatherman.pm
 
define <name> weathermanDen Port und ein paar andere Dinge werden über die Attribute gesetzt.

Gruß,
JudgeDredd
Router: Eigenbau (pfSense)
FHEM: Proxmox (DELL R720) | Debian 12 (VM)