Wunderground Wetter mit einfachem HM-Skript holen

User stellen ihre Haussteuerung vor

Moderator: Co-Administratoren

FredW
Beiträge: 297
Registriert: 01.05.2013, 16:20
Hat sich bedankt: 1 Mal

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von FredW » 01.06.2020, 18:21

@Fonzo,

danke erst einmal ...

ein Widget kann man sich als als "Bild" oder "Script" generieren lassen. Wenn ich mir das als "Bild" generieren lasse und in Neo in eine Webseite als URL String importiere, dann bekomme ich den Wetter Forecast wie gewünscht angezeigt.

Dann habe ich mir das Widget als Code generieren lassen und stand auf dem Schlauch, was und wo ich damit etwas anfangen kann. Ich hatte gehofft, dass ich damit wie bei OpenWeatherMap einen XML String erhalten kann, den ich per Script zerlege, die einzelnen Werte als Sysvar's ablegen und in Neo anzeigen lassen kann. Das war meine Idee.
Meine Frage ist, was kann ich mit Widget Code in Neo anfangen ?

Ich habe gerade noch eine Doku und api.daswetter.com gefunden. Muss mir das mal anschauen.

Fonzo
Beiträge: 6687
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 478 Mal

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von Fonzo » 01.06.2020, 18:50

FredW hat geschrieben:
01.06.2020, 18:21
Meine Frage ist, was kann ich mit Widget Code in Neo anfangen ?
Ein Bild ist statisch und verändert sich nicht, ein Widget bzw. der Code erzeugt eine HTML Seite. Daher hängt es davon ab was das Widget genau an Funktion anbietet, aber mache Widgets sind dynamisch d.h. Du kannst durch klicken auf das Widget auch den angezeigten Inhalt verändern. Was jetzt speziell dieses Widget zur Verfügung stellt weis ich selber nicht, da ich es nicht nutzte.
Wenn Du einzelne Werte wünscht, dann musst Du diese wie gesagt über ein NEO Plugin einbinden, dann kannst Du diese dann auch frei positionieren und in der Größe anpassen. Dazu kannst Du entweder ein System mit NEO Plugin wählen, das Dir so was komplett als Gerät in NEO zur Verfügung stellt dann musst Du auch selber nichts mehr schreiben und programmieren sondern lediglich das Gerät importieren. Wenn Du das mit einer CCU alleine lösen willst, musst Du dann auf der CCU die gewünschten Werte in Systemvariablen ablegen durch ein Homematic Skript. Eine andere Möglichkeit wäre noch mit Javascript das auszulesen und in Variablen des NEO Servers abzulegen, insofern eine CCU3 benutzt wird, auch diese Variablen können dann einzeln im NEO Creator angezeigt und positioniert werden.
Welchen Weg man letztlich wählt, hängt eben davon ab wie viel Aufwand man betreiben will, was für Systeme man zusammen mit NEO nutzt bzw. mit was man sich am besten auskennt um solche Dinge zu lösen.

Benutzeravatar
axelb
Beiträge: 23
Registriert: 04.02.2017, 22:23
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 4 Mal

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von axelb » 28.06.2020, 19:46

Ich lese hier immer was von "Widgets" und anderen Dingen, aber eigentlich interessiert es mich, wie ich meine von der VENTUS W830 generierten Informationen in meiner CCU3 auswerten und verarbeiten kann.

Es wurde hier in diesem umfangreichen Thread auch geschrieben, dass es von wunderground (zu der die VENTUS ja offensichtlich bisher alleinig die Daten liefert) keine APIs mehr geben soll.

Was ich dabei nicht verstehe ist, weshalb ich dann nach wie vor einen API-Code bei wunderground bekomme.

Bevor ich mich jetzt an die Implementierung irgenwelcher Scripte mache folgende Fragen:

1.Kann ich nun mit dem angebotenen API-Code meine gelieferten Daten bei wunderground abfragen oder nicht?
2.Welche anderen Möglichkeiten bietet mir die HomeMatic an meine von der W830 gelieferten IST-Daten heranzukommen?



CU, Axel

Xel66
Beiträge: 14085
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 580 Mal
Danksagung erhalten: 1492 Mal

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von Xel66 » 28.06.2020, 20:58

axelb hat geschrieben:
28.06.2020, 19:46
2.Welche anderen Möglichkeiten bietet mir die HomeMatic an meine von der W830 gelieferten IST-Daten heranzukommen?
Ich setze seit einiger Zeit diese hier bereits im Forum vorgestellte Lösung bei mir ein. Sie arbeitet stabil und völlig unauffällig im Hintergrund. Die Station schreibt selbstätig ihre Daten über den gestarteten Serverdienst in die CCU. Kein zyklisches Script muss dabei laufen und keine externen Daten abgerufen werden.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Bahni
Beiträge: 234
Registriert: 15.01.2011, 14:40
System: CCU und Access Point
Wohnort: Waldheim / Sachsen
Hat sich bedankt: 25 Mal

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von Bahni » 07.07.2020, 16:22

seven1 hat geschrieben:
26.05.2020, 14:10
Inzwischen bin ich von der CCU2 auf Raspberrymatic ungestiegen. Seit dem läuft HVL auf Anhieb. Das schreiben irgendwelcher Scripte war nicht mehr erforderlich. Die passenden Systemvariablen werden automatisch erzeugt so dass der Steuerung der Aktoren nichts mehr im Wege stand.
Hi Seven1,
schön das HVL mit Weather Underground nun auch bei dir läuft.
Welche Wettersensoren werden bei dir in Homematic angezeigt?
Bei mir nur Temperatur, Luftfeuchte und Regenmenge die andren Sensoren wie Wind, Helligkeit, UV usw. werden nicht angezeigt.
Wie ist das bei Dir?
Danke!
Zentrale: Charly RaspberryMatic (Pi4), Gateway: Raspberry Pi3 HM-MOD-RPI-PCB, 3 Stück Funk-Schaltaktor, 4-fach, 2 Stück Funk-Rollladenaktor für Markenschalter, 1 Stück 8-Kanal-Sendemodul, 1 Stück E-Paper-Display, 2 Stück Funk-Tür-/Fensterkontakt, WinMatic, 2 Stück Heizkörperthermostat HmIP-eTRV-2, Wandthermostat HmIP-WTH-2, weiterer Ausbau nach und nach geplant.

Ansgar
Beiträge: 1
Registriert: 13.07.2020, 15:27
System: CCU und Access Point

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von Ansgar » 28.07.2020, 20:12

Ich habe auch das gleiche Problem, bei mir werden auch nur Temperatur, Rel. Luftfeuchtigkeit, Regenmenge, Windgeschwindigkeit. Aber meine Wetterstation "Conrad HP1001 V1.1.3" liefert nach "Weather Underground" folgen Daten:
Temperatur/Taupunkt/Feuchtigkeit/Wind/Geschwindigkeit/Böe/Druck/Niederschlag. Bewertung./Niederschlag. Accum./UV/Solar

Habe auch auf meine HomeMatic CCU/RaspberryMatic die "hvl-raspb-0.0.10" "KS550 Wunderground" installiert.
Auch der Wert der Regenmenge des Vortages ist auch falsch, er zeigt 9666.00 mm an.

Was kann ich tun

Bahni
Beiträge: 234
Registriert: 15.01.2011, 14:40
System: CCU und Access Point
Wohnort: Waldheim / Sachsen
Hat sich bedankt: 25 Mal

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von Bahni » 29.07.2020, 11:41

Ansgar hat geschrieben:
28.07.2020, 20:12
Ich habe auch das gleiche Problem, bei mir werden auch nur Temperatur, Rel. Luftfeuchtigkeit, Regenmenge, Windgeschwindigkeit. Aber meine Wetterstation "Conrad HP1001 V1.1.3" liefert nach "Weather Underground" folgen Daten:
Temperatur/Taupunkt/Feuchtigkeit/Wind/Geschwindigkeit/Böe/Druck/Niederschlag. Bewertung./Niederschlag. Accum./UV/Solar

Habe auch auf meine HomeMatic CCU/RaspberryMatic die "hvl-raspb-0.0.10" "KS550 Wunderground" installiert.
Auch der Wert der Regenmenge des Vortages ist auch falsch, er zeigt 9666.00 mm an.

Was kann ich tun
Hallo,
habe inzwischen das HVL aufgegeben und mache es jetzt so:
https://homematic.simdorn.net/wetterdat ... round-com/
Das funktioniert jetzt auch noch nur etwas modifiziert, und es funktionieren alle Sensoren prima!
Wenn du das probieren möchtest schicke ich dir meinen Script.
Zentrale: Charly RaspberryMatic (Pi4), Gateway: Raspberry Pi3 HM-MOD-RPI-PCB, 3 Stück Funk-Schaltaktor, 4-fach, 2 Stück Funk-Rollladenaktor für Markenschalter, 1 Stück 8-Kanal-Sendemodul, 1 Stück E-Paper-Display, 2 Stück Funk-Tür-/Fensterkontakt, WinMatic, 2 Stück Heizkörperthermostat HmIP-eTRV-2, Wandthermostat HmIP-WTH-2, weiterer Ausbau nach und nach geplant.

DrKloebner
Beiträge: 5
Registriert: 09.12.2013, 20:11

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von DrKloebner » 21.08.2020, 21:11

hallo allerseits.
das HVL plugin liefert mir leider nicht genug Werte. ich habe mich daher nochmal nach einer Möglichkeit umgesehen, selber die Daten von Wunderground abzurufen. Auf der Seite von Erhard Simdorn bin ich in den Kommentaren auf ein Skript gestossen, das die neue Adresse von wunderground un die neue API beruecksichtigt.

ich habe das Skript dann ein wenig angepasst (Wetterstation umbenannt, API eingetragen, Anfuehrungszeichen umgeschrieben). Das Skript läuft nun ohne Fehler der eingetragen link auf weather.com funktioniert und bringt mir meine Werte, die Systemvariablen werden auch befuellt (zumindest laut Uhrzeit), jedoch sind alle Werte "0".
Hat vielleicht jemand eine Idee, woran das liegen kann ? Vielen Dank schonmal im Voraus.

Achim

! Wetterdaten von wunderground.com holen %u2013 eigene Wetterstation erforderlich, die Daten an wunderground sendet
!Stand 14.04.2019

!zuerst folgende Systemvariablen anlegen
!Achtung: keine vergessen und exakte Schreibweise mit Copy & Paste

!W_Station Zeichenkette
!W_Aktualisierung Zeichenkette
!W_Temperatur Zahl °C
!W_Luftfeuchte Zahl %
!W_Windrichtg Zahl °
!W_Windgeschwindigkeit Zahl km/h
!W_Windboeen Zahl km/h
!W_Luftdruck Zahl mbar
!W_Taupunkt Zahl °C
!W_UV Zahl
!W_Solar Zahl Watt
!W_Regenrate Zahl mm/h
!W_Regensumme Zahl mm am Tag
!W_Hitzeindex Zahl °C
!W_Temp_gefuehlt Zahl °C
!Aussentemperatur Zeichenkette (Erweiterung E.Simdorn)
!Luftfeuchtigkeit Zeichenkette (Erweiterung E.Simdorn)

! Weiter Ergaenzungen durch E.Simdorn
! Temperatur und Luftfeuchtigkeit jeweils in einen Text-String umwandeln und formatieren
! Temperatur und Luftfeuchtigkeit jeweils in einen Text-String umwandeln und formatieren

! Wetter api: stationID=Deine Wetterstation, apiKey=Dein apiKey der Wetterstation, units: m (metrisch) oder e(englisch), format: xml (gibt es auch als json)
var url ="https://api.weather.com/v2/pws/observat ... y=meineAPI";


!Abfrage mit CUxD

dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget %u2013no-check-certificate -q -O %u2013 %u201A"#url#"%u201A");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
string wetter_xml = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();

!Daten mit Suchworten aus XML-File ausfiltern:

string word = "neighborhood";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
daten = daten;
dom.GetObject("W_Station").State(daten);

string word ="obsTimeLocal";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
!daten = daten.Substr(0, (word_position -11));
dom.GetObject("W_Aktualisierung").State(daten);

string word = "temp";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
real zahl = daten.ToFloat();
dom.GetObject("W_Temperatur").State(zahl);
! *****
! Temperatur real in string umwandeln und anschliessend den Dezimalpunkt gegen ein Komma austauschen
string TextTemp = zahl.ToString(2);
integer TPunkt = TextTemp.Find(".");
string TextTemp1 = TextTemp.Substr(0, TPunkt);
TextTemp1 = TextTemp1 # ","# TextTemp.Substr(TPunkt +1, 2) # " Grad Celsius";
TextTemp = TextTemp1;
dom.GetObject('Aussentemperatur').Variable(TextTemp);
WriteLine(dom.GetObject('Aussentemperatur').Variable());
! *****
string word = "humidity";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
integer zahl = daten.ToFloat();
dom.GetObject("W_Luftfeuchte").State(zahl);
! *****
string TextHumi = zahl.ToString(1);
integer TPunkt = TextHumi.Find(".");
string TextHumi1 = TextHumi.Substr(0, TPunkt);
TextHumi1 = TextHumi1 # ","# TextHumi.Substr(TPunkt +1, 2) # " %";
TextHumi = TextHumi1;
dom.GetObject('Luftfeuchtigkeit').Variable(TextHumi);
WriteLine(dom.GetObject('Luftfeuchtigkeit').Variable());
! *****

string word = "winddir";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
if (daten == -9999) {
daten = "0";
}
integer zahl = daten.ToFloat();
dom.GetObject("W_Windrichtg").State(zahl);

string word = "windSpeed";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
integer zahl = daten.ToFloat();
dom.GetObject("W_Windgeschwindigkeit").State(zahl);

string word = "windGust";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
integer zahl = daten.ToFloat();
dom.GetObject("W_Windboeen").State(zahl);

string word = "pressure";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
integer zahl = daten.ToFloat();
dom.GetObject("W_Luftdruck").State(zahl);

string word = "dewpt";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
real zahl = daten.ToFloat();
dom.GetObject("W_Taupunkt").State(zahl);

string word = "windChill";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
real zahl = daten.ToFloat();
dom.GetObject("W_Temp_gefuehlt").State(zahl);

string word = "heatIndex";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
real zahl = daten.ToFloat();
dom.GetObject("W_Hitzeindex").State(zahl);

string word = "uv";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
integer zahl = daten.ToFloat();
dom.GetObject("W_UV").State(zahl);

string word = "precipRate";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
real zahl = daten.ToFloat();
dom.GetObject("W_Regenrate").State(zahl);

string word = "precipTotal";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
real zahl = daten.ToFloat();
dom.GetObject("W_Regensumme").State(zahl);

string word = "solarRadiation";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
real zahl = daten.ToFloat();
dom.GetObject("W_Solar").State(zahl);

MichaelN
Beiträge: 9562
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von MichaelN » 21.08.2020, 22:08

Wenn du sicher bist, dass die SV beschrieben werden und den Wert 0 enthalten, dann ist der logische Schluß, das du null rein schreibst.

Dann stimmt mit deiner Datenabfrage wohl was nicht.

Oder deine Analyse ist nicht sauber...

Tipp Schritt für Schritt debuggen
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

DrKloebner
Beiträge: 5
Registriert: 09.12.2013, 20:11

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von DrKloebner » 22.08.2020, 07:25

Was die SV angeht, so vermute ich, dass sie beschrieben werden. Zumindest werden sie zur gleichen Zeit beschrieben, wie das Programm mit dem Skript gestartet wird.

Gibt es ein Tool, was das Debuggen für einen skript- Anfänger einfacher macht?

Vielen Dank

Antworten

Zurück zu „Projektvorstellungen“