curl POST Openweathermap im Json Format

Homematic-, TCL- und Shell-Script, Toolchain, C, etc.

Moderator: Co-Administratoren

Antworten
Benutzeravatar
sailor79
Beiträge: 51
Registriert: 08.12.2017, 12:47
System: CCU
Wohnort: Berlin
Hat sich bedankt: 12 Mal
Danksagung erhalten: 4 Mal

curl POST Openweathermap im Json Format

Beitrag von sailor79 » 23.11.2020, 13:32

Hallo Experten und Script-Gurus,

Thema: Ich versuche mich gerade in Homematic Script einzuarbeiten, mit dem Beispiel, um Wetterdaten auf Openweathermap.org (OWM) per curl hochzuladen.
Sekundärziel ist anschließend auch ein vollständiges Script und Anleitung im Weatherman-Thread bereitzustellen, wenn es denn mal funktioniert, da momentan "nur" ein-Wunderground Beispiel von MartinBr vorhanden ist

Problem: Leider kommen bei OWM keine Werte an, weil ich vermutlich nicht das von OWM erwartete Format umgesetzt bekomme.
Es wäre echt toll, wenn Ihr mir -auf die Sprünge- helfen könntet, nach insgesamt 8h trial&error komme ich einfach nicht mehr weiter.

Hier das auf die Fragestellung reduzierte/ simplifizierte Test-Beispiel:
Eingabe:

Code: Alles auswählen

string appid = "1234abc";
string station_id = "131415a"; 
integer dt = system.Date("%F %T").ToTime().ToInteger(); !OWM erwartet unixtime...
real temperature = 11.1;
string wurl = "http://api.openweathermap.org/data/3.0/measurements?appid="#appid#"";

string r3 = "curl -X POST \""#wurl#"\" -d \"station_id="#station_id#"&dt="#dt#"&temperature="#temperature#"\" -H \"Content-Type: application/json\"";

WriteLine (r3);
!dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State(r3);
Ausgabe:

Code: Alles auswählen

curl -X POST "http://api.openweathermap.org/data/3.0/measurements?appid=1234abc" -d "station_id=131415a&dt=1606132730&temperature=11.100000" -H "Content-Type: application/json"
---

:arrow: => Soweit so gut, jedoch es kommt aber bei OWM nichts an.

:!: Die Erwartung von OWM ist jedoch Folgende:
URL:

Code: Alles auswählen

http://api.openweathermap.org/data/3.0/measurement&appid=1234abc
Parameter:

Code: Alles auswählen

[
  {
    "station_id": "131415a",
    "dt": 1606132730,
    "temperature": 11.1,
  }
]
Header:

Code: Alles auswählen

Content-Type: application/json
---

Mit meinem Advanced Rest Client sieht das dann so aus, was auch tatsächlich funktioniert:
Post:

Code: Alles auswählen

curl "http://api.openweathermap.org/data/3.0/measurements?appid=1234abc" \
  -X POST \
  -d "[\n  {\n    \"station_id\": \"131415a\",\n    \"dt\": 1606132730,\n    \"temperature\": 11.1\n    }\n]" \
  -H "Content-Type: application/json" \
  -H "content-length: 286" 
Get:

Code: Alles auswählen

http://api.openweathermap.org/data/3.0/measurements?appid=1234abc&station_id=131415a&type=h&limit=100&from=1606000000&to=1606127999
Answer:

Code: Alles auswählen

[
  {
"type": "h",
"date": 1606132730,
"station_id": "131415a",
"temp": {
"max": 11.1,
"min": 11.1,
"average": 11.1,
"weight": 22
},...
----

Jetzt vermute ich, (bin kein Experte), dass OWM die Zeichen erwartet

Code: Alles auswählen

[ {  }]
, richtig?
Wenn ja, finde ich weder im Forum noch in der Homematic Script Referent auf Seite 19 Kapitel 6.6.1 Escape Sequenzen diese Zeichen vor.

Wenn nein, wie wäre der korrekte Curl-Aufruf?

Vielen Dank schonmal,

Gruß
Marc

Edit: Die Frage lautet also eigentlich wie ich nachfolgende Zeile korrekt "encapsule":

Code: Alles auswählen

[{"station_id":"131415a","dt":1606132730,"temperature":11.1}]
CCU3@3.59.6 - Dual-Beam Ant. | Geräte (119): 54 Hm-RF/ 27 HmIP-RF/ 16 HmIP-W/ 6 CuxD/ 17 Virt/, 765 Kanäle | Sysvars:108 | Progs: 70 | ioBroker@Ubuntu_20.04 | Addons: CuxD & NEO |

Benutzeravatar
sailor79
Beiträge: 51
Registriert: 08.12.2017, 12:47
System: CCU
Wohnort: Berlin
Hat sich bedankt: 12 Mal
Danksagung erhalten: 4 Mal

Gelöst: curl POST Openweathermap im Json Format

Beitrag von sailor79 » 23.11.2020, 14:47

Um mir die Frage selber zu beantworten, so funktioniert es:

Code: Alles auswählen

string r3 = "curl -X POST -H \"Content-Type: application/json\" "#wurl#" -d '[{\"station_id\":\""#station_id#"\",\"dt\":"#dt#",\"temperature\":"#temperature#"}]'";
Edit:
Ausgabe WriteLine:

Code: Alles auswählen

curl -X POST -H "Content-Type: application/json" http://api.openweathermap.org/data/3.0/measurements?appid=1234abc -d '[{"station_id":"121314a","dt":1606139843,"temperature":8.500000}]'

Mittels GET sind die Daten nun auch bei OWM zu sehen :D
CCU3@3.59.6 - Dual-Beam Ant. | Geräte (119): 54 Hm-RF/ 27 HmIP-RF/ 16 HmIP-W/ 6 CuxD/ 17 Virt/, 765 Kanäle | Sysvars:108 | Progs: 70 | ioBroker@Ubuntu_20.04 | Addons: CuxD & NEO |

Antworten

Zurück zu „Softwareentwicklung für die HomeMatic CCU“