SBorg2014 / WLAN-Wetterstation

schafft eine Verbindung von einer WLAN-Wetterstation zum ioBroker
MIT License
97 stars 16 forks source link

Trennung von "Poll_Intervall" und "IoBroker Update Intervall" #30

Closed schlaubstar closed 2 years ago

schlaubstar commented 2 years ago

Bei mir scheint das "Poll Intervall" (bei einer Sainlogic WS3500) irgendwie nicht so recht zu funktionieren: Obwohl sowohl in der wetterstation.conf ein WS_POLL-Intervall von 120 Sekunden hinterlegt ist und ich auch die Wetterstation mit dem "Custom Service" analog konfiguriert habe, bekomme ich im IoBroker öfters Updates im Abstand von weniger als 30 sec.

In Summe würden mir für die meisten Werte eigentlich Update-Intervalle (im IoBroker, wo ich diese Werte auch logge) von ca. 5 Minuten reichen. Allerdings möchte ich natürlich die Maximal/Minimal-Messwerte möglichst genau haben, was für kurze Update-Zyklen spricht.

Daher die Frage ob Du eine Chance für folgenden Feature-Request siehst:

Für die meisten "IST"-Werte, würde einfach bei Eintreffen eines Telegramms geprüft ob das IoB Update Intervall bereits erreicht wurde und wenn ja, erfolgt nur dann ein Update der Messwerte.

Für die "Min/Max" Werte, wäre ein "caching" innerhalb dieses Zeitfensters sehr cool, d.h. dass z.B. Windgeschwindigkeit maximal bei jedem erhaltenen Telegramm 'lokal' aktualisiert wird, wenn der gemeldete Wert höher ist, als der bereits bekannte, wird er erhöht. Und bei Erreichen des "IoB_Update-Intervalls" würde dann der höchste in dem Zeitfenster gemeldete Wert übermittelt.

Die Einführung könnte man auch für die meisten user "minimalinvasiv" machen: Wenn kein "IoB Update Interval" festgelegt ist, wird dafür das WS_POLL intervall genutzt - dann ändert sich eigentlich nichts, außer dass bei den Benutzern ggf. durch das Caching auch die "Max" Werte genauer werden.

SBorg2014 commented 2 years ago

Das Poll-Intervall ist noch ein Relikt aus den ersten Versionen, da wurde genau in dem Intervall auf ein Datenpaket gelauscht. Mittlerweile empfängt das Skript kontinuierlich (es ist ein Mini-WEB-Server) was, und vor allen Dingen wann die Station was sendet. Das "wann" legt ausschließlich die Station fest (zB. per Poll Intervall in der WS View App). Das Poll Intervall aus dem Skript gibt nur noch an, wann ein Datenpaket in etwa erwartet wird. Erfolgt bei 2x Poll-Intervall (lt. conf) + 6 Sekunden Toleranz kein Empfang eines auswertbaren Datenpakets wird der interne Fehlerzähler um eins erhöht (wird wieder ein "gutes" empfangen wird er um eins gemindert). Erreicht er einen Stand von 10 wird dann der Datenpunkt "-Kommunikationsfehler" auf true gesetzt. Beim Standard 30 Sekundenraster der meisten Stationen wären das ~5 Minuten am Stück keinerlei verwertbare Kommunikation = sieht nach einem echten Problem aus...

Deine Idee ist zwar an sich nicht schlecht, nun aber das "aabbeerr..." Das ließe sich nur durch einen massiven Umbau erreichen, denn ich speichere ja selbst nichts. Das erledigt der ioB per Datenpunkte bzw. darüber dann die InfluxDB. Die unterstützen aber beide keine Selektion bzw. Differenzierung. Ich müsste also alles aus verschiedenen Datenbanken lesen, von bspw. Grafana mal ganz abgesehen oder alles intern wieder zerpflücken und mit Timern versehen. Das ist nicht eben mal in paar Stunden erledigt, das sind Tage, da dass im Konzept nie vorgesehen war. Ich berechne zB. auch einige Werte intern deren Bezug wieder extern aus dem ioB gelesen wird. Salopp gesagt fliegt ein Schiff auch nicht alleine dadurch, dass man einen Propeller und Flügel dran schraubt ;) Falls du einen Account hast (oder einen anlegen willst) kannst du aber mal im Forum im WLAN-Wetterstation-Thread deine Idee vorbringen. Wenn da reges Interesse bestünde könnte man auch darüber reden. So sehe ich von meiner Seite aktuell keinen Weg es mit einem vertretbaren Aufwand umzusetzen.

Je nachdem was du an Daten im zB. 5 Minutenraster loggen willst, kannst du es auch per Blockly (oder Node-RED, JS...) selbst umsetzen, Du loggst einfach wie bisher wann die Station was sendet für alles was aktuell sein soll. Du legst dir DPs für das "5-Minutenraster" an und loggst die zB. per Influx. Jetzt brauchst du ein Blockly was als Trigger einen "5-Minuten" cronjob hat (=es wird alle 5 Minuten ausgeführt). Du ließt nun jeden gewünschten Original-DP vom Wetterskript ein und schreibst ihn in die zuvor angelegten neuen Datenpunkte. Selbst bei vielen DPs geht das ziemlich schnell, wird ja auch nur alle x-Minuten dann mal ausgeführt. Schon hast du DPs die sich nur alle x-Minuten mal aktualisieren, die du nun per Influx loggen kannst und, und, und...

schlaubstar commented 2 years ago

Hi, vielen lieben Dank für die ganzen Infos. Ich habe garnicht in die Details geschaut, bin aber davon ausgegangen, dass es deutlich einfacher zu lösen wäre.

Beim eigentlichen Submit zu prüfen ob das "Iob_Transmit" interval bereits erreicht wurde, wenn ja: Senden wie bisher, wenn nein: Paket verwerfen, dürfte ja nicht zu schwer zu realisieren sein und schonmal die "Drosselung" erledigen, ohne in die ganzen Logiken einzugreifen.

Beim "Cachen" der Werte (ich sehe da primär mal nur "Max. Windböe", und ggf. noch wenige weitere, bei denen man gerne die Maximalwerte hätte), bin ich davon ausgegangen Du brauchst nur eine lokale Variable setzen, mit einem hohen negativen Wert initialisieren (bzw. beim erfolgreichen Submit an den IoB so setzen) und beim Erhalt eines Telegramms prüfst Du, ob der gerade angekommene Wert größer ist, als das was in der lokalen Variable steht. Wenn ja: aktualisierst Du sie, wenn nein: nicht. Und dann übermittelst Du an den IoB eben den Wert aus dieser "Maximalvariable" statt aus dem aktuellen Telegramm. Dann brauchst Du garnicht an Influx oder sonstwas heran.

Natürlich kann ich das auch im IoB lösen, aber ich bin ein Freund davon, sowas an der Quelle zu lösen und die ist Dein WebServer ! ;-) Ziel ist es ja, weniger Datenpunkte und Werte zu bekommen.

Noch ein Tipp : Warum die Sainlogic (bzw. Shenzen Electonics) das nicht bewerben, weiß ich nicht, aber die Firma bietet inzwischen viel bessere Apps als WS View an, über die sich die Wetterstation komfortabler konfigurieren lässt und die zudem noch nette Oberflächen haben um sich die Werte anzeigen zu lassen. Einfach mal nach anderen Apps des Anbieters suchen bzw. "Ecowitt" oder "WSView Plus" von Shenzen Electronics installieren. - Allerdings ignoriert meine WS3500 die "Upload Intervals" von allen Apps und schickt Telegramme, wann sie lustig ist.

stale[bot] commented 2 years ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed in 7 days if no further activity occurs. Thank you for your contributions.