Wettermeldung an openweathermap senden

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

Vorheriges Thema - Nächstes Thema

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