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.
was ist denn die Station? Was mus man da eintragen? &name=<Stationsname>
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
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>
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
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
auf der my stats Seite?
Die ist bei mir leer.
Zitat von: jhohn schrieb am So, 26 Mai 2013 14:49auf der my stats Seite?
Die ist bei mir leer.
Bei mir auch...
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
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)") }
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...
Danke, jetzt gehts
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.
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.
Ok, vielleicht hilft es ja trotzdem jemand.
Hallo,
Zitat von: betateilchen schrieb am Sa, 01 Juni 2013 15:08Zitat 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.
welches Geheimnis?
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!
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};
}
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?
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.... ;-)
super - darum wollte ich mich nächstes Wochenende kümmern. Prima dass ich das Rad nicht neu zu erfinden brauche *g*
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
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.
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.
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.
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
hab ich gerade beim update zum ersten mal gesehen. (fhemme auch noch nicht lange)
find ich voll gut :)
jetzt will ich messwerkzeug haben :D
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.