Neuer Wetter-Baustein für openweathermap.org

Begonnen von mattsches, 14. Juli 2017, 22:40:33

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

mattsches


Update: Zwischenzeitlich habe ich einen neuen Baustein für die Abfrage von Wetterdaten von Weatherbit.io erstellt. Damit ist eine zumindest aktuell funktionierende Alternative gefunden. Details siehe hier: http://www.oscat.de/community/index.php/topic,4952.0.html

Achtung, openweathermap.org hat die Lizenzpolitik dahingehend geändert, dass die vom Baustein genutzte 16 Tage-Vorhersage nun nicht mehr mit dem kostenfreien API-Key nutzbar ist. Leider kann auch nicht einfach auf die weiterhin kostenfreie 5 Tage/3 Stunden-Vorhersage umgebaut werden, da dort keine zusammenfassenden Werte pro Tag verfügbar sind, sondern ausschließlich die 3 Stunden-Abschnitte. Zudem sind bei der daraus resultierenden Größe der XML-Antwort Probleme mit der NETWORK_BUFFER-Variable zu erwarten, deren Standardlänge dann nicht ausreichen wird.

Ich habe derzeit keine schlüssige Idee, wie hier weiter verfahren werden könnte. Möglicherweise landet der Baustein nach dann recht kurzer Lebenszeit doch wieder in der Tonne.


Hallo zusammen,

nachdem worldweather.com nun auch die alten kostenlosen APIs abgeschaltet hat, war ich auf der Suche nach einer Alternative. Fündig wurde ich bei www.openweathermap.org, wo es weiterhin kostenlose APIs mit Zugriff auf verschiedene Vorhersagen gibt. Man registriert sich, erhält - wie gewohnt - einen API Key und kann loslegen.

Die Angabe des Ortes, für den die Vorhersage bezogen werden soll, erfolgt gemäß Empfehlung des Wetterdienstes mittels City ID. Eine Liste der verfügbaren IDs findet sich unter hier: http://bulk.openweathermap.org/sample/city.list.json.gz

Bausteine für Beschreibung und Icons habe ich vorerst nicht erstellt, weil

a) die Beschreibung für die einzelnen Tage direkt vom Wetterbaustein in die Struktur geschrieben wird und ich
b) keine Icons in Verwendung habe.

Wer mag, kann das natürlich gerne ergänzen.

Doku gibt es auch (noch?) keine, wer die Bausteine für Yahoo und WorldWeather kennt, dürfte auch mit der OpenWeatherMap-Variante zurecht kommen.

Ich habe den Baustein auf einer Beckhoff in Betrieb. Durch die Verwendung von IP_CONTROL etc. sollte er aber auch auf "normalen" CODESYS-Steuerungen laufen, wenn ich das richtig verstehe. Habe ich aber nicht ausprobiert.

Feedback ist natürlich willkommen.

Cheers,
mattsches




Edit: Danke übrigens noch an das OSCAT-Team für die ganzen wertvollen Bausteine! Mit dem XML_READER, der ganzen IP_...-Infrastruktur und den anderen Wetterbausteinen als Vorlage war das Ganze recht schnell erledigt.




Edit 26.07.17: URL geändert, so dass immer nur fünf Tage abgefragt werden ("&cnt=5") und die Standard-Empfangspuffergröße auch bei Änderung des Standardverhaltens seitens des Anbieters ausreichend bleibt.



Edit 04.10.17: Länge des URL_PREFIX Strings korrigiert. Danke an Lightcommander für den Hinweis!



Edit 03.11.17: Hinweis auf geänderte Preispolitik aufgenommen.

[gelöscht durch Administrator]

peewit

hallo mattsches

du hast aber sicherlich die buffergrosse auch angepasst da der Baustein mit diesen Parametern eigentlich immer über 4096 bytes zurückliefert.

An der Sache war ich ja auch vor Monaten schon dran aber soweit ich mich erinnere habe ich nichts gefunden um die Datenmenge unter 4096 Bytes zu drücken

da ich aber nicht in der lib die buffergroesse deswegen generell erhöhen möchte suche ich da noch einen Kompromiss


wie sieht du die Sache ?


mattsches

Nein, die Puffergröße steht bei mir unverändert auf 4096. Ich verwende die Abfrage "16 day weather forecast" (http://openweathermap.org/forecast16) von openweathermap.org, die praktischerweise aber standardmäßig nur die Daten für sieben Tage zurückliefert (tagesgranular). Da bekomme ich dann eine Antwort mit ziemlich genau 3300 Zeichen. Mehr oder weniger Tage ließen sich durch Anhängen des Parmaeters &cnt=5 spezifizieren. Das habe ich in meinem Baustein gerade noch angepasst, damit es nicht kracht, wenn der Default mal verändert werden sollte. Ich werde den Eingangspost noch entsprechend aktualisieren mit der aktualisierten Version.

Eine andere, aber durchaus interessante Option wäre die Nutzung des JSON-Formats, das vom Anbieter standardmäßig angeboten wird. Dafür bräuchte es aber erst einmal einen Parser in der OSCAT, was mir vorerst aber zu aufwändig ist.

peewit

ja das wäre gut wenn der baustein mit weniger als 4096 bytes sicher arbeitet.
die anzahl der tage sollten so verkleinert werden das es hier auch nicht durch zufällig lange wettertexte einen crash gibt !

json-reader
daran habe ich schon öfters gedacht.
aber ich weiß noch zu gut wie viel arbeit mir der xml-reader machte und darum habe ich das bis jetzt liegen gelassen....

Blauprinz

Hallo mattsches,

habe deinen Baustein für OpenWeather ausprobiert und bekomme jedoch ständig den Fehlercode Error_C: 4278190080.
Ich benutze Codesys V3.

Hast du eine Idee was der Code aussagt?

MfG

peewit

du musst auch den error_t code mit angeben damit man sehen kann welche sub-baustein den fehler ausgibt

an sich ist

Error_C: 4278190080 = 0xFF00_0000
und das bedeutet das derjenige Baustein ein problem mit dem TCP-Connect hat

der baustein von mattsches ansich funktioniert korrekt
man muss aber auf jedenfall den network_buffer vergroessern
aber bei dir ist das noch ein anderes problem

Blauprinz

Hallo peewit,

erstmal vielen Dank für die Antwort.
Wie bekomme ich denn heraus, warum ich ein Problem mit dem TCP-Connect habe?
Bei mir funktioniert zur weder der Wetterdienst, noch der SMTP-Dienst.
Scheint ja wirklich keine TCP-Kommunikation vorhanden zu sein... die Steuerung selbst hat eine stabile Verbindung.

Gruß

Blauprinz

Beim SMTP-Baustein kommen z.B. folgende Fehlercodes:

Error_C: 124518904
Error_T: 5

MfG

peewit

ERROR_T = 5 ist ein Timeout-Fehler im Ablauf (Etwas ist eingetreten was nicht sein sollte !)

ERROR_C = 124518904   = 0x076C_01F8
Das linke Word 0x076C = 1900
Im Schritt 1900 im Baustein ist das Problem aufgetreten

Das rechte Word 0x01F8   = 504 letzte Return-Code vom SMTP-Server
504 = A command parameter is not implemented.

Der Fehler im Schritt 1900 bedeutet "keine Authentifizierung gefunden"

Der SMTP-Server bietet normalerweise verschiedene Arten der Authorisierung an und der Baustein kann auch ein paar Varianten
Wenn aber beim Abgleich festgestellt wird das es keine Gemeinsamkeiten gibt dann passiert das.

Um das noch genauer zu analysieren zu können musst du die Baustein Parameter noch preisgeben (passwort kannst du ja ändern)
Noch hilfreicher wäre ein Wireshark-Mitschnitt der Kommunikation

Hast du denn überhaupt einen SMTP-Server (Email-Provider) der ohne SSL (Verschlüsselung) überhaupt funktioniert ?




Blauprinz

Hallo peewit,

das Problem mit dem SMTP-Baustein hat sich mittlerweile geklärt...
Du hattest Recht, es gab keine Authentifizierung. Unsere IT hat den Mailzugang ohne Authentifizierung eingerichtet.
Einach die Zugangsdaten weggelassen und schon hat alles einwandfrei funktioniert!

Gruß

Lightcommander

Hallo zusammen,

erstmal danke für den Baustein.
Bei der ersten Kompilierung ist mir gleich aufgefallen dass im hier zum Download stehenden Baustein der String für die URL zu kurz ist.
Das liegt wahrscheinlich an der Einschränkung der Tage. Statt string(80) müsste es string(86) heißen.

Grüße
Michael

mattsches

Danke für den Hinweis! Habe die Quelle im Eingangspost oben entsprechend aktualisiert.

EICer

Vielen Dank für den Baustein.
Die Einbindung hat super geklappt.

Gruß
Marco

JanP

Ich habe den Baustein eingebunden. Mit dem API Key aus dem Baustein funktioniert es problemlos. Habe mich bei Openweathermap registriert und einen API Key erhalten. Mit diesem funktioniert es aber nicht. Ist das Problem noch jemand anderst bekannt?

mattsches

Hast du City ID und API-Key geändert? Wenn ja, hast du schonmal probiert, nur den API-Key auszutauschen und die City ID erst einmal beizubehalten? Wenn die Abfrage dann fehlschlägt, ist irgendwas an deinem API-Key nicht in Ordnung.