Neues Modul für die WS980WiFi Wetterstation

Begonnen von choenig, 15 Februar 2019, 19:16:29

Vorheriges Thema - Nächstes Thema

Waldmensch

Bei mir deckt sich der relative Wert mit einer sauteuren Davis Station eines Amateurmeteorologen in meiner Nachbarschaft. Deren Werte hatte ich mir immer per WU geholt, insbesondere um über die Niederschlagsmenge meine Gartenbewässerung zu steuern. Sollte also eigentlich passen. Ist Dein BME außen oder innen? Bei unserer Station ist er ja im Innengerät. Vielleicht gibts da einen Unterschied bei verschiedenen Temperaturen. Ansonsten, wenn du eine exakte Referenz hast, kannst Du ja auch ABS einen Offset geben.


Gesendet von iPhone mit Tapatalk

Waldmensch

#16
@choenig: hab das Plugin jetzt am laufen. Sieht gut aus. Kann es sein, das "rainRate" der per hour Wert ist? Weil irgend eine Zeiteinheit muss ja dahinter stehen. WU zeigt precip/hr an, also muss der Wert auch übertragen werden. Im Display steht im Feld bei RAINRATE die Einheit mm/hr.

"uv" zeigt mir gerade einen Wert von 2,0 an, "brightness" zeigt 0,0. Logisch, ist ja auch dunkel. UV als solches gibt es auf dem Display nicht. Den Wert würde ich anzweifeln

bei brightness_todayMax und brightness_historyMax habe ich 71889.0 stehen. 567 wird für Beide im Display angezeigt. Da stimmt auch noch was nicht

choenig

Zitat von: Waldmensch am 19 Februar 2019, 17:39:06
Meine Station ist da, montiert [...]

Cool

Zitat von: Waldmensch am 19 Februar 2019, 17:39:06
Edit: Eventuell macht es Sinn, den relativen Luftdruck im Plugin auszurechnen, da die Temperatur ja noch mit reinspielt. Die Wetterstation kann es ja leider nicht ausrechnen und wird es durch den starren Offset nie so genau anzeigen. Andererseits ist der Unterschied bei +/- 5° nur 0,1hPa  ;)

Ich hatte auch nix anderes gefunden ausser dem Offset. Denke auch, dass man es im Modul ausrechnen kann.

Aber mir ist erstmal wichtig, die Kommunikation stabil hinzubekommen, danach mach ich mit anderen Features weiter.

Zitat von: Waldmensch am 19 Februar 2019, 20:07:42
@choenig: hab das Plugin jetzt am laufen. Sieht gut aus. Kann es sein, das "rainRate" der per hour Wert ist? Weil irgend eine Zeiteinheit muss ja dahinter stehen. WU zeigt precip/hr an, also muss der Wert auch übertragen werden. Im Display steht im Feld bei RAINRATE die Einheit mm/hr.

Wie gesagt, aufgrund der niedrigen Niederschlagsmenge in der letzen Zeit (insb. dann, wenn ich Zeit hatte, mich damit zu beschäftigen), konnte ich das noch nicht besser abgleichen. Ich habe mich an den Daten aus der Spezifikation gehalten.

Laut Spezifikation ist es wie folgt:

0x0D => {"name" => "rainEvent",          "bytes" => 4, "factor" => 10, "format" => "%.1f"}, # mm
0x0E => {"name" => "rainRate",           "bytes" => 4, "factor" => 10, "format" => "%.1f"}, # mm
0x0F => {"name" => "rainPerHour",        "bytes" => 4, "factor" => 10, "format" => "%.1f"}, #


Leider schickt meine station kein 0x0d und auch kein 0x0f, nur 0x0e.

Zitat von: Waldmensch am 19 Februar 2019, 20:07:42
"uv" zeigt mir gerade einen Wert von 2,0 an, "brightness" zeigt 0,0. Logisch, ist ja auch dunkel. UV als solches gibt es auf dem Display nicht. Den Wert würde ich anzweifeln

Kein Problem, auch der ist der Spezifikation entnommen und ist in uW/m^2 :)


Zitat von: Waldmensch am 19 Februar 2019, 20:07:42
bei brightness_todayMax und brightness_historyMax habe ich 71889.0 stehen. 567 wird für Beide im Display angezeigt. Da stimmt auch noch was nicht

Der Wert in fhem ist in lux, hast Du die Anzeige deiner Station auch auf lux gestellt?

LG
Christian

choenig

Ich habe gerade noch eine neue Version hochgeladen, die sowohl den state auf connected/disconnected setzt, als auch die Verbindung zur WS980WiFi stehend hält.

Den state möchte ich über kurz oder lang wieder frei machen und für die Wetterdaten verwenden (oder mittels stateFormat füllen lassen). Aber jetzt ists erstmal so.

Auch diese Version läuft erst seit ein paar Minuten bei mir, ist daher alpha. Aber in einer Testumgebung kann man sie problemlos nutzen :)

Vielen Dank fürs Testen und euer Feedback :)

LG
Christian

Waldmensch

#19
Die Station kann man m.E. nicht auf Lux einstellen. Das LCD kann ja keinen Wert größer 1999 an der Stelle anzeigen. ;) In der Anleitung steht dazu auch nichts. Zumindest erklärt es aber die hohen Werte im Plugin, Tageslicht kann ja bis 100k Lux haben.

Bis auf das bereits gesagte ist mir nichts weiter aufgefallen. Good Job!

Edit: Rechner ist schon aus, neue Version schiebe ich morgen Vormittag drauf.

Gesendet von iPhone mit Tapatalk

choenig


Waldmensch

#21
Das Display, wenn man schräg gegen das Licht guckt, kann die Einheit ,,klux" in der Tat anzeigen. Allerdings kann ich mit ,,Set"  Taste in dieser Box nichts umschalten, so wie es beim Luftdruck möglich ist. Es passiert rein gar nichts, wenn man in dieser Box ,,Set" drückt. Firmware ist bereits über die App auf den neuesten Stand gebracht. EasyWeatherV1.3.1


Gesendet von iPhone mit Tapatalk

choenig

Guten Morgen,

soweit ich mich erinnere, musst Du das über die Einstellungen der Einheiten machen:

Einheiten (Unit)
-    Lichtstärke: lux, fc, w/m2
-    Temperatur: °C/°F
-    Luftdruck: hpa, inhg, mmhg
-    Windgeschwindigkeit: km/h, mph, knots, m/s, bft
-    Niederschlag: mm, inc


LG
Christian

Waldmensch

Zitat von: choenig am 20 Februar 2019, 09:13:21
Guten Morgen,

soweit ich mich erinnere, musst Du das über die Einstellungen der Einheiten machen:
LG
Christian

Perfekt! genau so ist es! Jetzt macht alles wieder Sinn.  :)

curt

Hallo allerseits,

ELV meint, dass meine Station auf dem Wege sei - Zeit also, schon mal dumme Fragen zu stellen:

Da muss offenbar noch so einiges eingerichtet werden, °C/°F und so etwas vermutlich. Das muss man an diesem blauen Panel-Dingens machen? Wofür ist dann aber diese PC-Software da?

Relative Luftfeuchte mache ich erstmal nichts, weil das sowieso ins neue Modul kommt?

Ansich brauche ich die Innenstation funktional gar nicht, bei meiner halbblinden 15jährigen Station war das jedenfalls so. Kann man die einfach abschalten oder hat die Innenstation funktionale Bedeutung, Wlan beispielsweise dort verbaut?

Dieser externe Wetteranbieter, dem gemeldet wird - das kann ich abschalten? Das würde ich als allererstes abschalten wollen - auch an dem blauen Panel? Und da gibt man auch die Wlan-Daten ein? Oh jeh.
RPI 4 - Jeelink HomeMatic Z-Wave

Waldmensch

Die Innenstation verbindet sich mit dem WLAN und stellt die Daten zur Verfügung. Zudem misst sie Luftdruck und innentemperatur. Offsets müssen an der Station manuell eingestellt werden, keine Ahnung, ob das mit der Windows Software geht. Verbindung mit Onlinediensten musst Du explizit einrichten. Dort musst Du auch einen Account haben. Im Lieferzustand wird nichts gesendet. Wenn Dich die Station stört, kannst Du sie in den Schrank legen. Hauptsache sie empfängt den Außensensor und das WLAN.


Gesendet von iPhone mit Tapatalk

choenig

Dem habe ich nicht viel hinzuzufügen, ausser, dass ich die Berechnung des relativen Luftdrucks gerade eingebaut habe.

Ich möchte den aktuellen Umbau noch bis morgen testen und dann mach ich eine neue Version fertig.

LG
Christian

Waldmensch

#27
@choenig: Ich habe gerade die aktuelle Version installiert. Status zeigt jetzt "connected" Nach dem reload 10_WS980.pm kam folgendes im Log (bei der letzten Version auch schon)
2019.02.20 21:15:20 3 : WS980 (Wetterstation) - Sending new request for 'firmware'...
2019.02.20 21:15:20 1 : PERL WARNING: Argument "^U" isn't numeric in numeric ne (!=) at ./FHEM/10_WS980.pm line 596.


Feature Request: könntest Du die historischen min/max usw. optional machen? Mich interessieren nur die current Werte und die history ergibt sich dann ja aus dem dblog. Also vielleicht 3 Modi (simple/extended/verbose) über ein Attribut zu konfigurieren? Oder die einzelnen TCP requests über je ein Attribut disablen "disable_historyMin = 1"? Im Plugincode lässt sich das einfacher machen, indem die Daten gar nicht erst von der Station geholt werden, als die ganzen Readings in FHEM wegzukonfigurieren.

Edit:
Da mit dem Ringbuffer hatte ich in NodeRed (IOBroker) mit den WU daten so gelöst:

lastMeasure ist eine Timestamp, die sich nur alle Stunde geändert hat

Javascript
var lastMeasure = flow.get('lastMeasure')||0;
if (lastMeasure != msg.payload){
    flow.set('lastMeasure', msg.payload);
   
    //ringbuffer
    var last_hr_value = flow.get('last_hr_value')||0;
    msg.buffer = JSON.parse(flow.get('rainbuffer')||"[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]");
    //msg.oldbuffer = msg.buffer;
    for(var i=1; i < msg.buffer.length; i++){
        msg.buffer[i-1] = msg.buffer[i];
    }
    msg.buffer[msg.buffer.length -1] = last_hr_value;
   
    flow.set('rainbuffer', JSON.stringify(msg.buffer));
   
    msg.tot_rain_24 = 0;
    for(var i=0; i < msg.buffer.length; i++){
        msg.tot_rain_24 += parseFloat(msg.buffer[i]);
    }

    msg.payload ={};
    msg.payload.tot_rain_24 = parseFloat(Math.round(msg.tot_rain_24 * 100) / 100).toFixed(2);
    msg.payload.last_hr_value = last_hr_value;
    msg.payload.forecast = flow.get('forecast')||0
    return msg;
}

choenig

Hi,

Zitat von: Waldmensch am 20 Februar 2019, 21:32:20
@choenig: Ich habe gerade die aktuelle Version installiert. Status zeigt jetzt "connected" Nach dem reload 10_WS980.pm kam folgendes im Log (bei der letzten Version auch schon)
2019.02.20 21:15:20 3 : WS980 (Wetterstation) - Sending new request for 'firmware'...
2019.02.20 21:15:20 1 : PERL WARNING: Argument "^U" isn't numeric in numeric ne (!=) at ./FHEM/10_WS980.pm line 596.


Das schau' ich mir an, danke.

Zitat von: Waldmensch am 20 Februar 2019, 21:32:20
Feature Request: könntest Du die historischen min/max usw. optional machen? Mich interessieren nur die current Werte und die history ergibt sich dann ja aus dem dblog. Also vielleicht 3 Modi (simple/extended/verbose) über ein Attribut zu konfigurieren? Oder die einzelnen TCP requests über je ein Attribut disablen "disable_historyMin = 1"? Im Plugincode lässt sich das einfacher machen, indem die Daten gar nicht erst von der Station geholt werden, als die ganzen Readings in FHEM wegzukonfigurieren.

Das geht bereits mit dem Attribut "requests":

requests
A comma or space separated list of values to requests. If empty, all known values are requested.
Valid values: firmware, current, todayMax, todayMin, historyMax, historyMin.


LG
Christian

Waldmensch

ZitatDas geht bereits mit dem Attribut "requests":
RTFM  ;D - funzt

Ich habe meinen letzten Beitrag nochmal editiert betr. des Regen Ringbuffers. Nur "for the papers", falls Du an einem Regentag mal beigehen willst. Ist allerdings Javascript. Ich weiß nicht, wie man in einem FHEM Plugin ein array im Hintergrund speichern kann, das es einen FHEM restart überlebt. Vermutlich in einem unsichtbaren Reading