Accuweather.com als Vorhersage einbinden möglich?

Begonnen von fhemstarter, 26 April 2016, 12:57:55

Vorheriges Thema - Nächstes Thema

fhemstarter

Hallo liebe Community,
möchte gerne als Wetterdienst Accuweather einbinden in mein Fhem ist das möglich?

Fhem neuste Version läuft auf einem PI B

frank

mit httpmod kannst du jede website pollen und die gewünschten daten in readings anlegen lassen.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

fhemstarter

klingt gut lassen sich Readings auch grafisch darstellen?

frank

Zitat von: fhemstarter am 26 April 2016, 13:09:52
klingt gut lassen sich Readings auch grafisch darstellen?
dazu sind sie da.  :)
erst loggen mit filelog oder dblog, dann plotten mit svg. schau mal genau im einsteiger.pdf.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

fhemstarter

hatte schon mal was mit SVG Plot gemacht werde mir den entsprechenden teil ansehen in der PDF.
Also muss ich nur define Wetter HTTPMOD http://www.accuweather.com/de/de/gahlen/46514/weather-forecast/1025389 eintragen damit fhem die Readings anlegt?

frank

ZitatAlso muss ich nur define Wetter HTTPMOD http://www.accuweather.com/de/de/gahlen/46514/weather-forecast/1025389 eintragen damit fhem die Readings anlegt?
damit bekommst du wahrscheinlich erst einmal nur den kompletten inhalt der website ausgelesen. die daten kannst du unter internals => buf finden.
wenn in buf alle relevanten daten stehen (das ist schon die halbe miete  ;)), musst du über entsprechende attribute deine gewünschten readings natürlich noch extrahieren. schau mal im wiki zu httpmod.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

fhemstarter

#6
ok gibts noch ne etwas leichtere Variante

jnewton957

#7
3 Jahre kein weiterer post zum Thema Accuweather.

Ich habe mir mal die app angesehen und bin eigentlich mehr begeistert, als von anderen apps.

Minutecast zeigt an, in wie viel Minuten es bei uns regnen wird. Und das mit schönem Symbolen bzw. Stundenkreis.
Auch das Radarbild ist super.

Leider bin ich nicht so tief in FHEM um eine solche webseite mit ihren Grafiken und Werten auslesen zu können.

Hat das vielleicht schon jemand mal gemacht und könnte das script/cfg dazu posten.

Es gibt eine API wenn man sich auf https://developer.accuweather.com/ anmeldet. Die liefert 40 Systemvariablen.

Ich habe ein coding zum Auslesen gefunden. Aber kann das nicht nach FHEM "übersetzen".

!Hier die WETTERSTATION-ID und API-KEY eintragen
string wetterstation_id = "HIER WETTERSTATION-ID EINTRAGEN";
string api_key = "HIER DEIN API KEY EINTRAGEN";
var url = "http://dataservice.accuweather.com/currentconditions/v1/"#wetterstation_id#"?apikey="#api_key#"&language=de-de&details=true";
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
string responce = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
var WeatherText = (responce.StrValueByIndex(",",2)).StrValueByIndex(":",1).ToLatin().Replace("\"","");
var Temperature = (responce.StrValueByIndex(",",7)).StrValueByIndex(":",3).ToFloat();
var RealFeelTemperature = (responce.StrValueByIndex(",",13)).StrValueByIndex(":",3).ToFloat();
var RealFeelTemperatureShade = (responce.StrValueByIndex(",",19)).StrValueByIndex(":",3).ToFloat();
var RelativeHumidity = (responce.StrValueByIndex(",",25)).StrValueByIndex(":",1).ToFloat();
var WindSpeed = (responce.StrValueByIndex(",",35)).StrValueByIndex(":",3).ToFloat();
var UVIndex = (responce.StrValueByIndex(",",47)).StrValueByIndex(":",1).ToFloat();
var UVIndexText = (responce.StrValueByIndex(",",48)).StrValueByIndex(":",1).ToLatin().Replace("\"","");
var CloudCover = (responce.StrValueByIndex(",",56)).StrValueByIndex(":",1).ToFloat();
var Pressure = (responce.StrValueByIndex(",",63)).StrValueByIndex(":",3).ToFloat();
url = "http://dataservice.accuweather.com/forecasts/v1/daily/1day/"#wetterstation_id#"?apikey="#api_key#"&language=de-de&details=true&metric=true";
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
responce = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
var TemperatureMin = (responce.StrValueByIndex(",",22)).StrValueByIndex(":",3).ToFloat();
var TemperatureMax = (responce.StrValueByIndex(",",25)).StrValueByIndex(":",2).ToFloat();
var RealFeelTemperatureMin = (responce.StrValueByIndex(",",28)).StrValueByIndex(":",3).ToFloat();
var RealFeelTemperatureMax = (responce.StrValueByIndex(",",31)).StrValueByIndex(":",2).ToFloat();
var HoursOfSun = (responce.StrValueByIndex(",",40)).StrValueByIndex(":",1).ToFloat();
var DayWeather = (responce.StrValueByIndex(",",75)).StrValueByIndex(":",1).ToLatin().Replace("\"","");
var DayWindSpeed = (responce.StrValueByIndex(",",81)).StrValueByIndex(":",3).ToFloat();
var DayWindGust = (responce.StrValueByIndex(",",87)).StrValueByIndex(":",3).ToFloat();
var NightWeather = (responce.StrValueByIndex(",",113)).StrValueByIndex(":",1).ToLatin().Replace("\"","");
var NightWindSpeed = (responce.StrValueByIndex(",",119)).StrValueByIndex(":",3).ToFloat();
var NightWindGust = (responce.StrValueByIndex(",",125)).StrValueByIndex(":",3).ToFloat();
var DayWeatherPrecipitationProbability = (responce.StrValueByIndex(",",76)).StrValueByIndex(":",1).ToFloat();
var DayWeatherThunderstormProbability = (responce.StrValueByIndex(",",77)).StrValueByIndex(":",1).ToFloat();
var DayWeatherRainProbability = (responce.StrValueByIndex(",",78)).StrValueByIndex(":",1).ToFloat();
var DayWeatherSnowProbability = (responce.StrValueByIndex(",",79)).StrValueByIndex(":",1).ToFloat();
var DayWeatherIceProbability = (responce.StrValueByIndex(",",80)).StrValueByIndex(":",1).ToFloat();
var NightWeatherPrecipitationProbability = (responce.StrValueByIndex(",",114)).StrValueByIndex(":",1).ToFloat();
var NightWeatherThunderstormProbability = (responce.StrValueByIndex(",",115)).StrValueByIndex(":",1).ToFloat();
var NightWeatherRainProbability = (responce.StrValueByIndex(",",116)).StrValueByIndex(":",1).ToFloat();
var NightWeatherSnowProbability = (responce.StrValueByIndex(",",117)).StrValueByIndex(":",1).ToFloat();
var NightWeatherIceProbability = (responce.StrValueByIndex(",",118)).StrValueByIndex(":",1).ToFloat();
var DayHoursOfPrecipitation = (responce.StrValueByIndex(",",105)).StrValueByIndex(":",1).ToFloat();
var DayHoursOfRain = (responce.StrValueByIndex(",",106)).StrValueByIndex(":",1).ToFloat();
var DayHoursOfSnow = (responce.StrValueByIndex(",",107)).StrValueByIndex(":",1).ToFloat();
var DayHoursOfIce = (responce.StrValueByIndex(",",108)).StrValueByIndex(":",1).ToFloat();
var NightHoursOfPrecipitation = (responce.StrValueByIndex(",",143)).StrValueByIndex(":",1).ToFloat();
var NightHoursOfRain = (responce.StrValueByIndex(",",144)).StrValueByIndex(":",1).ToFloat();
var NightHoursOfSnow = (responce.StrValueByIndex(",",145)).StrValueByIndex(":",1).ToFloat();
var NightHoursOfIce = (responce.StrValueByIndex(",",146)).StrValueByIndex(":",1).ToFloat();
string svName;
object svObj;
svName = "Wetter";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(WeatherText);
}
svName = "Temperatur [°C]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(Temperature);
}
svName = "RealFeel-Temperatur [°C]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(RealFeelTemperature);
}
svName = "RealFeel-Temperatur im Schatten [°C]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(RealFeelTemperatureShade);
}
svName = "Luftfeuchtigkeit [%]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(RelativeHumidity);
}
svName = "Windgeschwindigkeit [km/h]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(WindSpeed);
}
svName = "UV-Index";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(UVIndex);
}
svName = "UV-Intensität";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(UVIndexText);
}
svName = "Wolkendecke [%]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(CloudCover);
}
svName = "Luftdruck [hPa]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(Pressure);
}
svName = "Min. Temp. [°C]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj. Temp. [°C]").State(TemperatureMin);
}
svName = "Max. Temp. [°C]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj. Temp. [°C]").State(TemperatureMax);
}
svName = "Max. RealFeel-Temp. [°C]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj. RealFeel-Temp. [°C]").State(RealFeelTemperatureMax);
}
svName = "Min. RealFeel-Temp. [°C]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj. RealFeel-Temp. [°C]").State(RealFeelTemperatureMin);
}
svName = "Dauer Sonne [h]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(HoursOfSun);
}
svName = "tagsüber";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(DayWeather);
}
svName = "Windstärke tagsüber [km/h]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(DayWindSpeed);
}
svName = "Böen tagsüber [km/h]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(DayWindGust);
}
svName = "Wetter nachtsüber";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(NightWeather);
}
svName = "Windstärke nachtsüber [km/h]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(NightWindSpeed);
}
svName = "Böen nachtsüber [km/h]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(NightWindGust);
}
svName = "Niederschlagwahrscheinlichkeit tagsüber [%]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(DayWeatherPrecipitationProbability);
}
svName = "Gewitterwahrscheinlichkeit tagsüber [%]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(DayWeatherThunderstormProbability);
}
svName = "Regenwahrscheinlichkeit tagsüber [%]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(DayWeatherRainProbability);
}
svName = "Schneewahrscheinlichkeit tagsüber [%]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(DayWeatherSnowProbability);
}
svName = "Icewahrscheinlichkeit tagsüber [%]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(DayWeatherIceProbability);
}
svName = "Niederschlagwahrscheinlichkeit nachtsüber [%]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(NightWeatherPrecipitationProbability);
}
svName = "Gewitterwahrscheinlichkeit nachtsüber [%]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(NightWeatherThunderstormProbability);
}
svName = "Regenwahrscheinlichkeit nachtsüber [%]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(NightWeatherRainProbability);
}
svName = "Schneewahrscheinlichkeit nachtsüber [%]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(NightWeatherSnowProbability);
}
svName = "Icewahrscheinlichkeit nachtsüber [%]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(NightWeatherIceProbability);
}
svName = "Niederschlagsdauer tagsüber [h]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(DayHoursOfPrecipitation);
}
svName = "Regendauer tagsüber [h]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(DayHoursOfRain);
}
svName = "Schnedauer tagsüber [h]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(DayHoursOfSnow);
}
svName = "Icedauer tagsüber [h]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(DayHoursOfIce);
}
svName = "Niederschlagsdauer nachtsüber [h]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(NightHoursOfPrecipitation);
}
svName = "Regendauer nachtsüber [h]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(NightHoursOfRain);
}
svName = "Schnedauer nachtsüber [h]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(NightHoursOfSnow);
}
svName = "Icedauer nachtsüber [h]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(NightHoursOfIce);
}
svName = "Wetterdienst";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State("Accuweather");
}



Kann das jemand übersetzen oder sogar ein Modul dafür schreiben.

Danke und schönes Wetter :-)
Jörg
FHEM6.2 auf Pi5
V 1.66 nanoCUL 433 (IT)
V 1.66 nanoCUL868 (HM)
sqlite3 LogDb
ELRO AB440, DECT200,  TFA30.3125, esp8266, HM, TabletUI, IR-Schreiblesekopf (Udo),tibber Pulse, Kostal Pico, cfos Wallbox, Modbus TCP

plin

Besteht noch Bedarf nach einem AccuWeather-Modul???

Der Free Account bietet folgende Informationen:

  • Locations
  • Current Conditions
  • 24 Hours Historical Current Conditions
  • Daily Forecast - 5 days
  • Hourly Forecast - 12 hours
  • Indices

50 calls/day
FHEM1 (Main) Raspi4 mit CUL, Homematic, SDUINO 433/OOK, zentrale Steuerung
FHEM2 (Keller) x86 mit CUL/hmland, IP-basierte Module
FHEM3 (Erdgeschoss) Raspi2 mit SDUINO 868/GFSK
FHEM4 (Hausanschlussraum), USV und OBIS-Modul
FHEM5 (Docker) mit FHEM2FHEM, InfluxDB

Beta-User

Neben/alternativ zu einem eigenständigen Modul wäre eventuell die Integration als API-Option in Weather interessant, da DarkSky demnächst nicht mehr frei verfügbar sein wird.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

plin

#10
Mal schauen, ob sich Bedarf abzeichnet. Immerhin ist die Fülle der Informationen interessant (siehe Anlage), muss aber selbst erst mal drüber schauen was mir fehlt bzw. was mich interessiert.
FHEM1 (Main) Raspi4 mit CUL, Homematic, SDUINO 433/OOK, zentrale Steuerung
FHEM2 (Keller) x86 mit CUL/hmland, IP-basierte Module
FHEM3 (Erdgeschoss) Raspi2 mit SDUINO 868/GFSK
FHEM4 (Hausanschlussraum), USV und OBIS-Modul
FHEM5 (Docker) mit FHEM2FHEM, InfluxDB

plin

#11
Zitat von: Beta-User am 26 Januar 2023, 20:24:29
Neben/alternativ zu einem eigenständigen Modul wäre eventuell die Integration als API-Option in Weather interessant, da DarkSky demnächst nicht mehr frei verfügbar sein wird.

Hi,

irgendwie gibt's wenig Resonanz. Ich habe trotzdem mal quick & dirty eine Batch-Lösung zum Rumspielen gebastelt (siehe Anlage, quasi als Appetizer oder Prototyp). Die zeigt zumindest auf was alles drin ist.

Bzgl. der Update-Zyklen müsste man sich Gedanken machen. Der kostenlose Accuweather-Account umfasst ja nur 50 Zugriffe pro Tag. Aber ich denke man braucht nicht alle Daten stundenaktuell, folglich könnte man die Calls geschickt über den Tag verteilen.

Ciao, Peter

EDIT: Jetzt auch mit den current conditions
FHEM1 (Main) Raspi4 mit CUL, Homematic, SDUINO 433/OOK, zentrale Steuerung
FHEM2 (Keller) x86 mit CUL/hmland, IP-basierte Module
FHEM3 (Erdgeschoss) Raspi2 mit SDUINO 868/GFSK
FHEM4 (Hausanschlussraum), USV und OBIS-Modul
FHEM5 (Docker) mit FHEM2FHEM, InfluxDB

crusader

Zitat von: plin am 28 Januar 2023, 15:57:18Hi,

irgendwie gibt's wenig Resonanz.

Liegt vielleicht daran, dass die DarkSky-User die Abschaltung noch nicht realisiert haben.
Mit dem freien OpenweatherMap-Key kann man jedenfalls nicht viel anfangen, da man keine Tageswerte (z.B. für min und max-Temperaturen) bekommt.
Wetter.com könnte man mit 10 freien Abrufen/Tag zwar nutzen, aber die sperren bei Überschreitung den API und man muss ihn erst wieder freischalten lassen.
Accuweather scheint mir da eine sinnvolle Alternative.
Ich wäre jedenfalls interessiert.

Jamo

Hier auch grosses Interesse an der Integration als API-Option in Weather.
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/Conbee III, FB7690, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack, Sonos, ESPresence

crusader

#14
Ich hab' mal hilfsweise ein HTTPMOD für den 5-day-forecast von accuweather geschrieben und auf

Codeschnipsel

eingestellt.
Die Variablen-Namen sind kompatibel mit dem Weather-Modul, sodass man einfach umstellen kann.
Die accuweather-icons sind allerdings ungewöhnlich.