Wettermeldung an openweathermap senden

Begonnen von betateilchen, 26 Mai 2013, 00:03:14

Vorheriges Thema - Nächstes Thema

betateilchen

Wer seine Wetterdaten an das Projekt openweathermap übertragen will, kann dazu folgende zwei Schnipsel verwenden:

1) hiermit wird die eigentliche Übertragung per http durchgeführt:


define openWeather notify openWeather { my $temp = ReadingsVal("<Sensorname>","temperature", "");; my $humi = ReadingsVal("<Sensorname>", "humidity", "");; system("curl -d 'temp=$temp&humidity=$humi&lat=<Position>&long=<Position>&name=<Stationsname>' --user '<user>:<password>' http://openweathermap.org/data/post") }


2) Hiermit wird festgelegt, dass diese Übertragung regelmäßig alle 30 Minuten erfolgt:


define send_openWeather at +*00:30:00 trigger openWeather


Mit der Einbindung von Wetterdaten AUS openweathermap (per API) werde ich mich irgendwann später befassen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Tobias

was ist denn die Station? Was mus man da eintragen? &name=<Stationsname>
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

justme1968

guten morgen,

falls du das lesen implementierst und es mit einem dumm statt einem richtigen fhem modul machst schau dir das hier kurz an: http://forum.fhem.de/index.php?t=msg&goto=78936&rid=430#msg_78936 vielleicht hilft es dir.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

jhohn

Das frage ich mich auch gerade. Auf den Seiten von Openweathermap kann ich dazu nichts finden.

Zitat von: Tobias schrieb am So, 26 Mai 2013 07:11was ist denn die Station? Was mus man da eintragen? &name=<Stationsname>
FHEM auf Synology Diskstation DS413j (DSM4.3), HM LAN Adapter
Steuerung für Nachtspeicheröfen:
Ladung:   HM-WDS10-TH-O, HM-LC-Sw4-DR, Weather-Modul
Gebläse: HM-CC-TC, HM-LC-SW1-FM, HM-Sec-RHS
FHEM auf FritzBox 7390 für Telefon Funktionen

Icebear

Moinsen,

anscheinend werden die Koordinaten nur mit Stellen hinterm Komma genommen. Bei 5 Stellen funzte es bei mir nicht.

Just for Info

p.s. die Koordinaten gibts bei http://universimmedia.pagesperso-orange.fr/geo/loc.htm

Einfach adresse eintippen und man bekommt die Koordinaten.

Und wech
Raspberry PI mod B (Wheezy), Fhem 5.4, CUL868, CUL433 , RfxTrx, HM-USB-CFG2, Wlan, HomeEasy, IT, FS20, TFA, HomeMatic, Oregon Scientific, HMLand auf Fritzbox
Raspberry PI mod B (RaspBMC)

Icebear

Der Stationname wird hinter deinem Loginnamen angezeit.. Bei mir so..

Icebear-Sensor1
Last date:   2013-05-26 12:23:11 GMT
Type:   5
Karma:   0
Lat:   51.6650
Lon:   6.6197

Sensor1 ist der Stationname
Icebear der Loginname
Raspberry PI mod B (Wheezy), Fhem 5.4, CUL868, CUL433 , RfxTrx, HM-USB-CFG2, Wlan, HomeEasy, IT, FS20, TFA, HomeMatic, Oregon Scientific, HMLand auf Fritzbox
Raspberry PI mod B (RaspBMC)

jhohn

auf der my stats Seite?
Die ist bei mir leer.
FHEM auf Synology Diskstation DS413j (DSM4.3), HM LAN Adapter
Steuerung für Nachtspeicheröfen:
Ladung:   HM-WDS10-TH-O, HM-LC-Sw4-DR, Weather-Modul
Gebläse: HM-CC-TC, HM-LC-SW1-FM, HM-Sec-RHS
FHEM auf FritzBox 7390 für Telefon Funktionen

Tobias

Zitat von: jhohn schrieb am So, 26 Mai 2013 14:49auf der my stats Seite?
Die ist bei mir leer.

Bei mir auch...
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Icebear

dann wurden die daten nicht uebertragen.. habe hier auch geflucht und es waren die koordinaten..

nur 4 stellen hinterm komma (die meisten webseiten liefern 5 stellen)

und wech
Raspberry PI mod B (Wheezy), Fhem 5.4, CUL868, CUL433 , RfxTrx, HM-USB-CFG2, Wlan, HomeEasy, IT, FS20, TFA, HomeMatic, Oregon Scientific, HMLand auf Fritzbox
Raspberry PI mod B (RaspBMC)

Icebear

Hier mein Eintrag .. Nur username und passwort gex :)

define openWeather notify openWeather { my $temp = ReadingsVal("Ice_TFA_Sensor1","temperature", "");; my $humi = ReadingsVal("Ice_TFA_Sensor1", "humidity", "");; system("curl -d 'temp=$temp&humidity=$humi&lat=51.6650&long=6.6197&name=Sensor1' --user 'user:passwort' http://openweathermap.org/data/post") }
Raspberry PI mod B (Wheezy), Fhem 5.4, CUL868, CUL433 , RfxTrx, HM-USB-CFG2, Wlan, HomeEasy, IT, FS20, TFA, HomeMatic, Oregon Scientific, HMLand auf Fritzbox
Raspberry PI mod B (RaspBMC)

betateilchen

Der Stationsname ist eine vom Benutzer frei wählbare Bezeichnung, die dann auf der Karte als "Stationsinfo" angezeigt wird.

Bei den Positionsdaten sind doch zwei Dezimalstellen nach dem Komma für eine Wetterstation völlig ausreichend. Bei mir entsteht dadurch ein Entfernungsunterschied von knapp 50 Metern, und dort ist das Wetter meistens genau so wie bei mir am Haus...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

jhohn

FHEM auf Synology Diskstation DS413j (DSM4.3), HM LAN Adapter
Steuerung für Nachtspeicheröfen:
Ladung:   HM-WDS10-TH-O, HM-LC-Sw4-DR, Weather-Modul
Gebläse: HM-CC-TC, HM-LC-SW1-FM, HM-Sec-RHS
FHEM auf FritzBox 7390 für Telefon Funktionen

Svenson

Hallo und Danke erstmal für den Tip.

Da "curl" auf der FritzBox nicht funktioniert habe ich die Datenübermittlung mittel LWP umgesetzt:

dazu die Funktion in die 99_myUtils einfügen:

######## Wetterdaten an OpenWetterMap senden ######################
sub openwetter
{
my $temp = $_[0];
my $humidity = $_[1];
my $ret = "";
$ret .= LWP::UserAgent->new()->post(
"http://<username>:<passwort>\@openweathermap.org/data/post", [
"temp" => "$temp",
"humidity" => "$humidity",
"lat" => "<Länge>",
"long" => "<Breite>",
"name" => "<Stationsname>" ]);
$ret =~ s,[\r\n]*,,g;
Log 1, "openwetter returned: $ret";
}


dann in die fhem.cfg folgendes einfügen:

define openWeather notify openWeather { my $temp = ReadingsVal("<Sensorname>","temperature", "");; my $humi = ReadingsVal("<Sensorname>", "humidity", "");; openwetter("$temp","$humi") }

define send_openWeather at +*00:30:00 trigger openWeather


Dann sollten alle 30 Minuten die Daten an OpenWeatherMap gesendet werden.

betateilchen

Zitat von: Svenson schrieb am Fr, 31 Mai 2013 14:59Da "curl" auf der FritzBox nicht funktioniert

curl gibts aber definitiv auch für die Fritzbox.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Svenson


C64Emulator

Hallo,

Zitat von: betateilchen schrieb am Sa, 01 Juni 2013 15:08
Zitat von: Svenson schrieb am Fr, 31 Mai 2013 14:59Da "curl" auf der FritzBox nicht funktioniert

curl gibts aber definitiv auch für die Fritzbox.

Schade, dass Betateilchen uns sein Geheimnis nicht mitteilt...

Also ich habe mal aus dem fritz!load-package (http://thomasheinz.net/installation-von-fritzload-auf-der-fritzbox-z-b-7270/) ein curl genommen. Hat funktioniert.

Helmut.

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

C64Emulator

Zitat von: betateilchen schrieb am Mi, 05 Juni 2013 15:32welches Geheimnis?
Na, Du stellst in den Raum, dass es curl für die Fritz!Box gibt, teilst uns aber nicht mit, wo!


thunder

Die Anbindung an Open Weather Map ist klasse und hat mich zum nachdenken gebracht....

Um die Gartenbewässerung nicht während oder nach Regen einzuschalten bräuchte man ja einen Feuchtesensor oder einen Regenmesser. Da ich beides nicht besitze aber eine OWStation in der Nähe die Regendaten liefert habe ich mir auf die schnelle ein kleines Modul gebastelt das vielleicht für jemanden eine kleine Anregung sein könnte:

Einbindung in FHEM über einen Dummy: Sobald man den Dummy auf eine OpenWeatherMap Station ID setzt wird über das userReading eine kurze PERL Routine in FHEM/99_myUtils.pm angestartet....

FHEM Dummy Definition:
define OWStation dummy
attr OWStation setList 36263
attr OWStation userReadings rain { owGetRain(ReadingsVal("OWStation","state",0));;;;}


Perl Routine:

use Data::Dumper;
use JSON;
use LWP::Simple;


######## Get Raindata from Open Weather Maps  ####################################################
# What  : Get Raindata from Open Weather Maps  
# Call  : { owGetRain(StationID) }

sub owGetRain
{
my ($station) = @_;

Log(3,"Getting Weather Data for station $station");
my $json = JSON->new->allow_nonref;

my  $r = get("http://api.openweathermap.org/data/2.1/weather/station/$station?type=json");
die "Couldn't get weather" unless defined $r;

my $report = $json->decode( $r );

return $report->{rain}{today};
}

justme1968

ich hab grad deine version für die niederschlagsmenge gesehen. meine version machtes sehr ähnlich (Link und Link).

was ich bei deiner version aber nicht verstehe ist wie die readings tatsächlich getriggert werden. ein userreading wird nur erzeugt wenn für das gleiche device ein 'normales' reading angelegt wird.

was übersehe ich gerade?

gruss
  andre

edit: ich glaube jetzt hab ich es. du triggerst das immer von hand? deshalb auch das set list?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

thunder

ich triggere es über einen "at" jede nacht um 23:59 in dem ich einfach die Station ID neu setze. Damit bekomme ich dann die Regenmenge des gestrigen Tages. Vor der Bewässerung die gleiche Prozedur auf einen anderen Dummy für die aktuelle, heutige Menge. Danach die Entscheidung ob bereget wird oder nicht.


Schade, daß ich Deine Versionen übersehen hatte.... ;-)

betateilchen

super - darum wollte ich mich nächstes Wochenende kümmern. Prima dass ich das Rad nicht neu zu erfinden brauche *g*
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

El-Docho

Hallo zusammen,

funktioniert bei euch der Upload der Wetterdaten momentan? Ich bekomm immer einen {"message":"Unauthorized.","cod":"401"} Fehler zurück.

Hab auch auf die 4 Stellen nach dem Komma aufgepasst.
define openWeather notify openWeather { my $temp = ReadingsVal("HMS100TF_f308","Temperature", "");; my $humi = ReadingsVal("HMS100TF_f308", "Humidity", "");; system("curl.exe -d 'temp=$temp&humidity=$humi&lat=48.1911&long=11.3662&name=Sensor1' --user 'name:pw' http://openweathermap.org/data/post") }

Komischerweise funktioniert das wiki von Openweather auch nicht. Wenn ich die Hilfe zur API öffnen will bekommen ich einen Timeout. Ideen?

Viele Grüße
Michael

betateilchen

Das Wiki war gestern schon nicht erreichbar. Aber der Upload scheint zu funktionieren.

(http://up.picr.de/15289971zl.png)

Die Wetterdaten sind aktuell, die Zeitanzeige ist UTC, der letzte Upload war also vor ca. 10 Minuten.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Ich werde den openweathermap-Upload demnächst in ein eigenes Modul kapseln, dann auch ohne CURL - für alle Fritzbox-Besitzer, die es möglichst einfach haben wollen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Interessant:

meine Wetterstation zu Haus kann (laut Onlinestatus von openweather) per fhem nach wie vor alle 30 Minuten fehlerfrei übertragen.
Sobald ich aber versuche, das identische notify auf einer anderen fhem Installation einzurichten oder den http-request per Browser abzusetzen, lande ich auch in der 401-Fehlermeldung

Das angekündigte Modul ist fertig - bis auf den Funktionstest, der immer in der Fehlermeldung endet.


--------------
Nachtrag: aus dem Modul heraus funktioniert die Übertragung auch fehlerfrei - sehr dubios.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: betateilchen schrieb am Do, 25 Juli 2013 10:44Ich werde den openweathermap-Upload demnächst in ein eigenes Modul kapseln, dann auch ohne CURL - für alle Fritzbox-Besitzer, die es möglichst einfach haben wollen.

fertig :)

Link

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Multimaniac

hab ich gerade beim update zum ersten mal gesehen. (fhemme auch noch nicht lange)
find ich voll gut :)
jetzt will ich messwerkzeug haben :D

dkreutz

Ich grabe diesen Thread mal aus, da sich zwischenzeitlich die openweathermap-API geändert hat und die Wetterdaten jetzt im JSON-Format gepostet werden müssen:


define openWeather notify openWeather { my $dt=time();; my $sid ="[hier die Station-ID]";;;; my $appid="[hier die AppID]";; \
my $temp = ReadingsVal("Wetterstation","temperature", "");; my $humi = ReadingsVal("Wetterstation", "humidity", "");; \
my $press = ReadingsVal("Wetterstation", "pressure", "");; \
my $dewp = ReadingsVal("Wetterstation", "dewpoint", "");; \
my $rain1h = ReadingsVal("Wetterstation", "rain", "");; \
my $rain24h = ReadingsVal("Wetterstation", "rain_day", "");; \
my $winddir = ReadingsVal("Wetterstation", "wind_direction", "");; \
my $windspd = ReadingsVal("Wetterstation", "wind_speed", "");;\
my $windgust = ReadingsVal("Wetterstation", "wind_gust", "");;  \
system("curl -s -X POST -H \"Content-Type: application/json\" -d '[{\"station_id\":\"'$sid'\",\"dt\":'$dt',\"temperature\":'$temp',\"humidity\":'$humi',\"pressure\":'$press',\"dew_point\":'$dewp',\"wind_speed\":'$windspd',\"wind_deg\":'$winddir',\"wind_gust\":'$windgust',\"rain_1h\":'$rain1h',\"rain_24h\":'$rain24h'}]' http://api.openweathermap.org/data/3.0/measurements?appid='$appid'") }


Die oben stehenden Readings passen für eine WH2600SE Wetterstation und müssen ggfs. angepassst werden.
Raspberry Pi3B+ (Bullseye) / JeeLink868v3c (LaCrosse), nanoCUL433 (a-culfw V1.24.02), HM-MOD-UART (1.4.1), TEK603, MapleCUL / diverse Sensoren/Sender/Aktoren von Technoline, Intertechno, Shelly, Homematic und MAX!, Froggit Wetterstation, Luftdaten.info / Autor des fhem-skill für Mycroft.ai