NEWS
Daten an wunderground senden
-
Hallo zusammen.
Auf der Arbeit (Landwirtschaft) haben wir eine Wetterstation welche offiziell nur für Modelle verwendet wird. Ich möchte die aktuellen Daten aber gerne jederzeit einfach auf dem Smartphone anschauen können. Daher ist mein Plan die Daten an wunderground.com zu senden, so kann ich (und auch andere vom Betrieb) die Daten anschauen.
Mithilfe einer Api abfrage kann ich die Daten bereits herunterladen und auch die einzelnen Punkte unter Objekte speichern.
Aber wie bekomme ich sie zu wunderground.com? In den tiefen vom Internet habe ich diese Adresse gefunden:
http://weatherstation.wunderground.com/weatherstation/updateweatherstation.php?ID="xxx"&PASSWORD="xxx"&dateutc=now&tempf="#tempf#"&humidity="#humidity#"&windspeedmph="#windspeedmph#"&&windgustmph="#idwindgustmph#"&winddir="#winddir#"&rainin="#dailyraininnow#"&dailyrainin="#dailyrainin#"&baromin="#baromin#"&solarradiation="#idsolarradiation#"&dewptf="#iddewpointf#"&action=updateraw'");
Passwort und Id ist vorhanden, ich muss also nur noch meine Daten da hinein bekommen und das ganze irgendwie absenden.
Achja, die Temperatur muss natürlich noch von Celsius zu Fahrenheit umgerechnet werden. Mit einem Funktions Node habe ich das bereits erledigt. Die Adresse muss also Daten aus dem Json String (der Api Abfrage) und dem msg.payload (vom Funktions Node) enthalten.Ich hoffe ich habe es verständlich ausgedrückt und jemand kann mir helfen.
Gruss
Hansjürg -
@hafo Ich mache gerade ähnliches mit der AccuWeather - Du kannst Dir das ja mal anschauen. Allerdings frage ich mich gerade für wunderground gibts doch einen iobroker Adapter. Hast Du Dir schon mal angeschaut ?
Ansonsten kannst ja mal anschauen, was ich gerade mit dem AccuWeather Projekt mache: https://forum.iobroker.net/topic/44684/accuweather-mit-nodered-für-iobroker-verfügbar-machen/2
Da siehst Du auch ganz generelle - wenn Du die URL hast wie Du in Node Red die HTTP Request Nodes verwendest.
Du nimmst wie ich in dem Subflow - einfach eine Template Node und kannst dann die URL in die HTTP Node schicken.
Wie Du den JSON String auseinander nimmst weißt Du? Ansonsten habe ich noch eine Node gebastelt, die Dir das einen JSON in einzelne Nachrichten oder in eine iobroker Stuktur speichern:
https://forum.iobroker.net/topic/43856/json-string-oder-java-object-in-iobroker-struktur
-
@mickym Danke für die Antwort. Mein Hauptproblem ist wahrscheinlich dass ich Daten an Wunderground.com senden möchte. Für das abrufen gibt es wirklich einen Adapter, aber zum senden habe ich nichts gefunden.
Mein Flow sieht aktuell so aus
Kann das soweit funktionieren, oder muss ich die beiden Strings zuerst noch zusammenführen? Alternativ könnte ich auch alle Punkte zusammenführen welche ich bereits herausextrahiert habe.
Ich arbeite mich nun als erstes etwas ins template node ein. -
@hafo Du arbeitest am besten damit, dass Du die Werte, die verschicken musst in einer Flowvariablen speicherst, am Besten in einem Objekt. Die Eigenschaften dieses Objektes in der Flowvariablen kannst Du dann aus unterschiedlichen Nachrichten speichern.
Wenn Du verschicken willst, dann lädst Du die Flowvariable wieder in eine Payload und verteilst die Eigenschaften in der Template Node. Nachrichten warten nicht auf Dich.
Verschicken geht definitiv weder mit einer Websocketout, noch mit einer http out Node, sondern einzig und alleine über die http request Node.
Die ganzen http oder websocket out Nodes dienen einzig und alleine für Clients, die Dein Node-Red als Webserver ansprechen.
Ich poste gleich mal Deine URL mit den ersten 3 Variablen. (http://weatherstation.wunderground.com/weatherstation/updateweatherstation.php?ID="xxx"&PASSWORD="xxx"&dateutc=now&tempf="#tempf#"&humidity="#humidity#"&windspeedmph="#windspeedmph#")
Das ist alles was Du machen musst - die Inject Node machst Du dann halt alle 12 Stunden:
Hier die Nodes für den Import:
-
@mickym Vielen Dank für deine Hilfe. Mein Flow sieht nun so aus und funktioniert!!! Wie du siehst muss ich einige Daten aus meiner eigenen Wetterstation eifügen.
Hast du dir das etwa so vorgestellt? Es ist etwas irritierend dass einige Nodes ins leere laufen aber die Daten dennoch verarbeitet werden. -
@hafo Nein das passt schon - ist so wie ich es mir vorgestellt habe. So wird immer nach der Datenermittlung der Request gesendet, theoretisch wäre es auch möglich die Trigger nun zeitlich unabhängig zu gestalten.
Schwärze mal zur Sicherheit in den DebugAusgaben - Deine Authentisierungsangaben.
-
@mickym so schnell geht das mit den passwörter
genau das wollte ich vermeiden
-
@hafo Ich weiß - deswegen habe ich Dich ja darauf aufmerksam gemacht.
-
@mickym Ich habe noch eine Frage zum Change Nod. Ich muss die Windrichtung in Grad angeben. Eigentlich eine einfache Sache, N wird durch 0 ersetzt, S durch 180, SSW durch 202.5 usw. Mein Problem ist nun aber dass er bei mehreren Buchstaben z.B NW nicht 315 schreibt, sondern 0270.
[ { "id": "e2027318.ff3fd8", "type": "change", "z": "632ef6cf.cb9b68", "name": "", "rules": [ { "t": "change", "p": "payload", "pt": "msg", "from": "N", "fromt": "str", "to": "0", "tot": "num" }, { "t": "change", "p": "payload", "pt": "msg", "from": "NNE", "fromt": "str", "to": "22.5", "tot": "num" }, { "t": "change", "p": "payload", "pt": "msg", "from": "NE", "fromt": "str", "to": "45", "tot": "num" }, { "t": "change", "p": "payload", "pt": "msg", "from": "ENE", "fromt": "str", "to": "67.5", "tot": "num" }, { "t": "change", "p": "payload", "pt": "msg", "from": "E", "fromt": "str", "to": "90", "tot": "num" }, { "t": "change", "p": "payload", "pt": "msg", "from": "ESE", "fromt": "str", "to": "112.5", "tot": "num" }, { "t": "change", "p": "payload", "pt": "msg", "from": "SE", "fromt": "str", "to": "135", "tot": "num" }, { "t": "change", "p": "payload", "pt": "msg", "from": "SSE", "fromt": "str", "to": "157.5", "tot": "num" }, { "t": "change", "p": "payload", "pt": "msg", "from": "S", "fromt": "str", "to": "180", "tot": "num" }, { "t": "change", "p": "payload", "pt": "msg", "from": "SSW", "fromt": "str", "to": "202.5", "tot": "num" }, { "t": "change", "p": "payload", "pt": "msg", "from": "SW", "fromt": "str", "to": "225", "tot": "num" }, { "t": "change", "p": "payload", "pt": "msg", "from": "WSW", "fromt": "str", "to": "247.5", "tot": "num" }, { "t": "change", "p": "payload", "pt": "msg", "from": "W", "fromt": "str", "to": "270", "tot": "num" }, { "t": "change", "p": "payload", "pt": "msg", "from": "WNW", "fromt": "str", "to": "292.5", "tot": "num" }, { "t": "change", "p": "payload", "pt": "msg", "from": "NW", "fromt": "str", "to": "315", "tot": "num" }, { "t": "change", "p": "payload", "pt": "msg", "from": "NNW", "fromt": "str", "to": "337.5", "tot": "num" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 650, "y": 260, "wires": [ [ "5803242.8b8315c", "5aabce05.21a9f" ] ] } ]
Was muss ich ändern damit er in diesem Fall nicht N und W erkennt, sondern NW?
Gruss
Hansjürg -
@hafo Die Reihenfolge ändern. Die Regeln werden von oben nach unten abgearbeitet. Deswegen die spezifischen nach oben (3 Buchstaben, dann 2 Buchstaben, dann 1 Buchstabe). Die erste Regel halt ändern oder die payloads. Und E gegen O ersetzen.
Ich habe schon einen Node fertig, da ich mein Icon auch rotieren lasse:
[ { "id": "5211424a.60543c", "type": "change", "z": "6a421c3f.cc35f4", "name": "set msg.windDirection", "rules": [ { "t": "set", "p": "windDirection", "pt": "msg", "to": "payload.Wind.Direction.English", "tot": "msg" }, { "t": "change", "p": "windDirection", "pt": "msg", "from": "SSW", "fromt": "str", "to": "23", "tot": "str" }, { "t": "change", "p": "windDirection", "pt": "msg", "from": "WSW", "fromt": "str", "to": "68", "tot": "str" }, { "t": "change", "p": "windDirection", "pt": "msg", "from": "WNW", "fromt": "str", "to": "113", "tot": "str" }, { "t": "change", "p": "windDirection", "pt": "msg", "from": "NNW", "fromt": "str", "to": "158", "tot": "str" }, { "t": "change", "p": "windDirection", "pt": "msg", "from": "NNE", "fromt": "str", "to": "203", "tot": "str" }, { "t": "change", "p": "windDirection", "pt": "msg", "from": "ENE", "fromt": "str", "to": "248", "tot": "str" }, { "t": "change", "p": "windDirection", "pt": "msg", "from": "ESE", "fromt": "str", "to": "293", "tot": "str" }, { "t": "change", "p": "windDirection", "pt": "msg", "from": "SSE", "fromt": "str", "to": "338", "tot": "str" }, { "t": "change", "p": "windDirection", "pt": "msg", "from": "SW", "fromt": "str", "to": "45", "tot": "str" }, { "t": "change", "p": "windDirection", "pt": "msg", "from": "NW", "fromt": "str", "to": "135", "tot": "str" }, { "t": "change", "p": "windDirection", "pt": "msg", "from": "NE", "fromt": "str", "to": "225", "tot": "str" }, { "t": "change", "p": "windDirection", "pt": "msg", "from": "SE", "fromt": "str", "to": "315", "tot": "str" }, { "t": "change", "p": "windDirection", "pt": "msg", "from": "S", "fromt": "str", "to": "0", "tot": "str" }, { "t": "change", "p": "windDirection", "pt": "msg", "from": "W", "fromt": "str", "to": "90", "tot": "str" }, { "t": "change", "p": "windDirection", "pt": "msg", "from": "N", "fromt": "str", "to": "180", "tot": "str" }, { "t": "change", "p": "windDirection", "pt": "msg", "from": "E", "fromt": "str", "to": "270", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1140, "y": 3340, "wires": [ [ "b6ff2952.633758" ] ] } ]
-
@mickym wau bist du flink, vielen Dank. Und ich suche stundenlang nach dem richtigen Vorzeichen, Klammer oder was es noch geben könnte.
-
Aber weshalb ist bei dir N 180 und S 0? Gemäss dieser Tabelle ist es umgekehrt.
-
@hafo Ganz einfach weil man beim Wind nicht anzeigt woher er kommt, sondern wohin er bläst-;) Deswegen musst Du alles um 180° ändern.
Also zeigt der Westwind nach Osten.
-
@mickym Klingt logisch. aber zum hochladen werde ich das richtigstellen müssen. Nochmals vielen Dank und bald ein schönes Wochenende.
-
@hafo Hast Recht - ich hab das natürlich nicht zum Hochladen. Du kannst ja einfach wieder N gegen S und W gegen O bzw. E gegen W tauschen. Dir auch ein schönes WE.