FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: betateilchen am 26 Mai 2013, 00:03:14

Titel: Wettermeldung an openweathermap senden
Beitrag von: betateilchen am 26 Mai 2013, 00:03:14
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.
Titel: Aw: Wettermeldung an openweathermap senden
Beitrag von: Tobias am 26 Mai 2013, 07:11:20
was ist denn die Station? Was mus man da eintragen? &name=<Stationsname>
Titel: Aw: Wettermeldung an openweathermap senden
Beitrag von: justme1968 am 26 Mai 2013, 09:33:17
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 (//forum.fhem.de/index.php?t=msg&goto=78936&rid=430#msg_78936) vielleicht hilft es dir.

gruss
  andre
Titel: Aw: Wettermeldung an openweathermap senden
Beitrag von: jhohn am 26 Mai 2013, 12:24:46
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>
Titel: Aw: Wettermeldung an openweathermap senden
Beitrag von: Icebear am 26 Mai 2013, 14:32:02
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 (//universimmedia.pagesperso-orange.fr/geo/loc.htm)

Einfach adresse eintippen und man bekommt die Koordinaten.

Und wech
Titel: Aw: Wettermeldung an openweathermap senden
Beitrag von: Icebear am 26 Mai 2013, 14:34:10
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
Titel: Aw: Wettermeldung an openweathermap senden
Beitrag von: jhohn am 26 Mai 2013, 14:49:40
auf der my stats Seite?
Die ist bei mir leer.
Titel: Aw: Wettermeldung an openweathermap senden
Beitrag von: Tobias am 26 Mai 2013, 14:56:26
Zitat von: jhohn schrieb am So, 26 Mai 2013 14:49auf der my stats Seite?
Die ist bei mir leer.

Bei mir auch...
Titel: Aw: Wettermeldung an openweathermap senden
Beitrag von: Icebear am 26 Mai 2013, 14:56:42
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
Titel: Aw: Wettermeldung an openweathermap senden
Beitrag von: Icebear am 26 Mai 2013, 14:58:23
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 (//openweathermap.org/data/post)") }
Titel: Aw: Wettermeldung an openweathermap senden
Beitrag von: betateilchen am 26 Mai 2013, 15:15:31
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...
Titel: Aw: Wettermeldung an openweathermap senden
Beitrag von: jhohn am 29 Mai 2013, 12:08:23
Danke, jetzt gehts
Titel: Wettermeldung an openweathermap über FritzBox senden
Beitrag von: Svenson am 31 Mai 2013, 14:59:18
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.
Titel: Aw: Wettermeldung an openweathermap über FritzBox senden
Beitrag von: betateilchen am 01 Juni 2013, 15:08:52
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.
Titel: Aw: Wettermeldung an openweathermap über FritzBox senden
Beitrag von: Svenson am 01 Juni 2013, 15:14:22
Ok, vielleicht hilft es ja trotzdem jemand.
Titel: Aw: Wettermeldung an openweathermap über FritzBox senden
Beitrag von: C64Emulator am 04 Juni 2013, 10:30:34
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.
Titel: Aw: Wettermeldung an openweathermap über FritzBox senden
Beitrag von: betateilchen am 05 Juni 2013, 15:32:22
welches Geheimnis?
Titel: Aw: Wettermeldung an openweathermap über FritzBox senden
Beitrag von: C64Emulator am 05 Juni 2013, 19:35:09
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!

Titel: Aw: Wettermeldung an openweathermap über FritzBox senden
Beitrag von: thunder am 12 Juni 2013, 08:24:32
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};
}
Titel: Aw: Wettermeldung an openweathermap senden
Beitrag von: justme1968 am 12 Juni 2013, 10:59:55
ich hab grad deine version für die niederschlagsmenge gesehen. meine version machtes sehr ähnlich (Link (http://forum.fhem.de/index.php?topic=12470.msg78936#msg78936) und Link (http://forum.fhem.de/index.php?topic=13212.msg81280#msg81280)).

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?
Titel: Aw: Wettermeldung an openweathermap senden
Beitrag von: thunder am 12 Juni 2013, 11:25:10
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.... ;-)
Titel: Aw: Wettermeldung an openweathermap senden
Beitrag von: betateilchen am 12 Juni 2013, 15:56:18
super - darum wollte ich mich nächstes Wochenende kümmern. Prima dass ich das Rad nicht neu zu erfinden brauche *g*
Titel: Aw: Wettermeldung an openweathermap senden
Beitrag von: El-Docho am 25 Juli 2013, 10:07:19
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
Titel: Aw: Wettermeldung an openweathermap senden
Beitrag von: betateilchen am 25 Juli 2013, 10:42:50
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.
Titel: Aw: Wettermeldung an openweathermap senden
Beitrag von: betateilchen am 25 Juli 2013, 10:44:22
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.
Titel: Aw: Wettermeldung an openweathermap senden
Beitrag von: betateilchen am 26 Juli 2013, 10:49:11
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.
Titel: Aw: Wettermeldung an openweathermap senden
Beitrag von: betateilchen am 26 Juli 2013, 13:13:46
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

Titel: Aw: Wettermeldung an openweathermap senden
Beitrag von: Multimaniac am 22 August 2013, 19:37:13
hab ich gerade beim update zum ersten mal gesehen. (fhemme auch noch nicht lange)
find ich voll gut :)
jetzt will ich messwerkzeug haben :D
Titel: Antw:Wettermeldung an openweathermap senden
Beitrag von: dkreutz am 02 August 2018, 19:04:49
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.