[59_WUup.pm] Wetterdaten zu Wunderground hochladen

Begonnen von mahowi, 23 Januar 2017, 18:52:39

Vorheriges Thema - Nächstes Thema

mahowi

Hallo,

basierend auf betateilchens 55_weco.pm habe ich ein Modul auf github hochgeladen erstellt, um Wetterdaten auf Weather Underground hochzuladen. Benötigt werden dazu eine StationID und das dazugehörige Paßwort.

Definition:
define <name> WUup <stationId> <password>

Mit dem Attribut interval kann das Intervall in Sekunden angegeben werden, in dem der Upload erfolgt. Wenn nicht gesetzt oder <3 wird der Default von 300 genommen. Bei Werten <300 wird der RapidFire-Server genutzt.
unit_windspeed gibt an, ob die Readings für Windgeschwindigkeiten m/s oder km/h als Einheit haben.
Die Attribute wu... entsprechen den Definitionen im PWS Upload Protocol von Wunderground, z.B. entspricht wutempf dem Feld tempf.
In den Attributen wird jeweils das Reading angegeben, das den gewünschten Wert enthält, z.B. attr <name> wutempf LaCrosse_16:temperature übergibt das Reading temperature aus dem LaCrosse-Sensor LaCrosse_16 als tempf (aktuelle Temperatur).

Die Werte werden im Modul für Wunderground ins anglo-amerikanische System umgerechnet. Temperaturen werden also automatisch von °Celsius in Fahrenheit, Windgeschwindigkeiten von km/h in mph, mm in Inch und der barometrische Druck von hPa in inHg umgerechnet.

Unterstützt werden:
winddir - [0-360 instantaneous wind direction]
windspeedmph - [mph instantaneous wind speed]
windgustmph - [mph current wind gust, using software specific time period]
windgustdir - [0-360 using software specific time period]
windspdmph_avg2m  - [mph 2 minute average wind speed mph]
winddir_avg2m - [0-360 2 minute average wind direction]
windgustmph_10m - [mph past 10 minutes wind gust mph ]
windgustdir_10m - [0-360 past 10 minutes wind gust direction]
humidity - [% outdoor humidity 0-100%]
dewptf- [F outdoor dewpoint F]
tempf - [F outdoor temperature]
rainin - [rain inches over the past hour)] -- the accumulated rainfall in the past 60 min
dailyrainin - [rain inches so far today in local time]
baromin - [barometric pressure inches]
soiltempf - [F soil temperature]
soilmoisture - [%]
solarradiation - [W/m^2]
UV - [index]


Mangels entsprechendem Sensor weiß ich nicht, in welcher Einheit die Sonneneinstrahlung (solarradioation) üblicherweise übergeben wird. Eventuell muß der Wert noch in W/m² umgerechnet werden.

Vielleicht kann der ein oder andere das Modul ja gebrauchen.  :)


Edit:

Die neue Version 0.9.2 kann über Github oder update installiert werden.

v0.8:

  • Nach Löschen von "disable" wird das Modul wieder sofort aktiv.
  • Neues Attribut: updateForIntervals
  • Achtung: Das Attribut "WUInterval" habe ich nach "interval" umbenannt. Das alte Attribut sollte man löschen und durch das neue ersetzen. Default Wert, falls nicht gesetzt oder <60 ist 300

v0.9:

  • Neues Attribut unit_windspeed
  • Umgerechnete Parameter werden auf 4 Nachkommastellen gerundet

v0.9.2:

  • Modul arbeitet jetzt "non-blocking"
  • Bei einem Interval <300 Sekunden wird automatisch die "RapidFire"-URL zum Senden verwendet. Kleinstes Intervall ist jetzt 3 Sekunden.
  • Modul jetzt im SVN verfügbar.
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

locutus

Ja, ich kann es gebrauchen. Ich lade die Wetterdaten von meinem Oregon THGR228N Außensensor auf Weather Underground hoch.

define PersonalWeatherStation WUup <stationId> <password>
attr PersonalWeatherStation wuInterval 3600
attr PersonalWeatherStation wuhumidity THGR228N_f9_1:humidity
attr PersonalWeatherStation wutempf THGR228N_f9_1:temperature


Danke für das Modul!

rabehd

Ich mache es bisher mit HTTPMOD.
Werde mir das Module mal ansehen.
Auch funktionierende Lösungen kann man hinterfragen.

rabehd

#3
Einrichten geht, aber es scheint nicht zu senden.
state bleibt auf defined

Was mach ich falsch?
Auch funktionierende Lösungen kann man hinterfragen.

mahowi

Tja, ich weiß nicht, was Du falsch machst.  ;)

Der State sollte eigentlich auf active sein, wenn Du das Attribut disable nicht auf 1 gesetzt hast.

Bei mir sieht die Definition z.B. so aus:
define WU WUup STATION passwort
attr WU verbose 3
attr WU wuInterval 60
attr WU wudewptf LaCrosse_16:dewpoint
attr WU wuhumidity LaCrosse_16:humidity
attr WU wutempf LaCrosse_16:temperature


Wenn die StationID und Dein Paßwort richtig sind, wüsste ich ehrlich nicht, woran es liegen könnte. Das Modul ist eigentlich recht simpel und macht nix anderes als die Daten der Wetterstation per HTTP GET an die richtige URL zu versenden.
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

rabehd

#5
Also die ID und das PW habe ich aus dem aktiven Device kopiert. Während der Konfiguration war disable auf 1, jetzt schon lange nicht mehr.
Wäre ID oder PW falsch, dann erwarte ich einen Eintrag im Logfile.

Der state ist unverändert, im Logfile erscheint nichts.

Fazit: Für mich nicht zu gebrauchen. Ich aktiviere wieder das Device mit HTTPMOD.
Auch funktionierende Lösungen kann man hinterfragen.

mahowi

disable ist die einzige Möglichkeit, das Modul zu deaktivieren. Ansonsten macht es im Prinzip nichts anderes als vermutlich Deine Version mit HTTPMOD. Es wird diese URL aufgerufen:
https://weatherstation.wunderground.com/weatherstation/updateweatherstation.php?ID=STATIONID&PASSWORD=password&dateutc=2017-02-22+13%3A17%3A44&tempf=45.9&humidity=90&dewptf=43.2&softwaretype=fhem&action=updateraw

Vorteil ist, das die Umrechnungen auf das amerikanische System schon im Modul gemacht werden. Mit "verbose 4" kannst Du Dir noch die komplette URL mit allen Werten anzeigen lassen. Aber solange das Modul nicht aktiv ist, gibt es auch nichts zu loggen.

Schick mal bitte ein list vom Device, natürlich ohne Paßwort.
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

rabehd

Das List ist aktuell, also nachdem ich das Device disable habe.
PW ist bearbeitet.

Internals:
   CFGFN
   DEF        IHEIDELB175 nfxxxxxk
   NAME       myWettertoWG
   NR         844
   STATE      defined
   TYPE       WUup
   Readings:
     2017-02-22 09:42:03   state           defined
   Helper:
     password   nfxxxxxk
     softwaretype fhem
     stationid  IHEIDELB175
     url        https://weatherstation.wunderground.com/weatherstation/updateweatherstation.php
Attributes:
   disable    1
   room       Wetter
   verbose    5
   wuInterval 180
   wurainin   Wetterstation:statRainDay
   wutempf    Wetterstation:temperature
   wuwinddir  Wetterstation:windDirection
   wuwindspeedmph Wetterstation:windSpeed
Auch funktionierende Lösungen kann man hinterfragen.

mahowi

Ich konnte das Problem zumindest hier mal nachstellen. Wenn ich disable auf 1 setze, passiert natürlich nichts mehr. Ist ja auch so gewollt.

Wenn ich dann disable auf 0 setze, läuft das Modul auch nicht.  ???

Was funktioniert hat, ist das Attribut disable zu löschen und dann mal kurz in den DEF-Editor (also DEF im Device anklicken) und mit dem modify-Button nochmal bestätigen. danach läuft es zumindest bei mir wieder.

Ich habe das Modul jetzt so seit über einem Monat im Einsatz und hab es auch schon mehrfach mal auf disable gesetzt, der Fehler ist bisher noch nie aufgetreten.

Es wäre nett, wenn Du den Workaround mal kurz testen könntest. Dann versuch ich mal rauszufinden, was sich an FHEM geändert hat, das den Fehler auslösen könnte.
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

rabehd

der Workaround funktioniert.  :)
Das disable hatte ich schon mal gelöscht, aber den Def-Editor nicht mehr aufgerufen.
Das Wiederanstarten wird wohl erst durch dem Aufruf des Def-Editors ausgelöst.
Vielleicht hätte ein Restart geholfen, aber es müßte auch ohne diese Wege gehen.
Auch funktionierende Lösungen kann man hinterfragen.

mahowi

Schön, das es funktioniert.  :)

Aber Du hast recht, es müsste auch ohne solche Verrenkungen gehen. Und ich bin mir sicher, daß es auch bisher so funktioniert hat. Mal sehen, ob ich da was rasufinden kann.
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

CoolTux

#11
Du musst den Timer Neustart ausserhalb einer IsDisabled Abfrage machen.
Der Timer muss also auf jeden Fall laufen. Ausser du machst eine AttrFn und sagst da das die Send Funktion neu gestartet werden soll nach löschen von disable oder disable 0 setzen
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

mahowi

@CoolTux: Danke! Ich habe mir mal als Beispiel Deinen FlowerMonitor angesehen und mein Modul etwas umgebaut.

Die neue Version kann über Github oder update installiert werden.


  • Nach Löschen von "disable" wird das Modul wieder sofort aktiv.
  • Neues Attribut: updateForIntervals
  • Achtung: Das Attribut "WUInterval" habe ich nach "interval" umbenannt. Das alte Attribut sollte man löschen und durch das neue ersetzen. Default Wert, falls nicht gesetzt oder <60 ist 300

Ich habe jetzt mehrfach disable gesetzt und wieder gelöscht. Funktioniert jetzt wie gewollt. Ebenso disabledForIntervals.
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

Lucky2k12

Danke für das Modul!

Ich hab damit meine WS1600 angeschlossen. Allerdings liefert die die Geschwindigkeit in m/s und nicht km/h.
Da muss ich wohl noch ein Userreading basteln. Oder hast du Lust, dafür noch einen attr-Schalter anzubieten? ???
HP T610, HM, Jeelink, LGW, mapleCUL868+434

mahowi

Freut mich, daß es doch ein paar Leute gibt, die das Modul brauchen können.  :)

Ich werd mir das mal ansehen, aber das lässt sich sicher machen. Wird aber wohl erstmal ein paar Tage dauern.
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee