NEWS
[Gelöst] (Problem) NASA APOD und Insight (Mars Weather API)
-
Hallo zusammen,
Mein Name ist Nils und ich bin neu in diesem Forum.
Ich hoffe das mir hier jemand mit meinem Problem helfen kann.Über die Visualisierung von ioBroker wollte ich gerne mein altes Tablet als LCARS Console verwenden ;)
ich habe auf Grundlage dieses Posts - BING - Bild des Tages dank @Werde45 - folgendes Script für das abgreifen des "Astronomy Picture of the Day":
createState('javascript.1.Bild', ""); createState('javascript.1.Title', ""); BilddesTagesNASA(); function BilddesTagesNASA(){ var url = 'https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY'; request(url, function (err, state, body){ if (body) { body = JSON.parse(body); var bild = body.hdurl; var title = body.title; setState("javascript.1.Bild", bild); setState("javascript.1.Title", title); } else { } }); } schedule("5 0 * * *" , function(){ BilddesTagesNASA(); });Läuft 1A.
Jetzt würde ich gerne die Insight API der NASA nutzen um Wetterdaten vom Mars abzugreifen. So hätte ich auf der "Brücke" schonmal nahezu live wetterdatn von Sol III/Terra(Erde) und Sol IV/Ares(Mars) :D
Example query: https://api.nasa.gov/insight_weather/?api_key=DEMO_KEY&feedtype=json&ver=1.0
Der erste block sieht dann in etwa so aus. das sind temperatur werte die haben möchte
{ "434": { "AT": { "av": -57.432, "ct": 310794, "mn": -94.545, "mx": -7.332 },Wenn ich das obige Script umschreibe läuft das ganze aber nicht.
function WetterMarsNASA(){ var url = 'https://api.nasa.gov/insight_weather/?api_key=DEMO_KEY&feedtype=json&ver=1.0'; request(url, function (err, state, body){ if (body) { body = JSON.parse(body); var MarsAV = body.433.AT.av; setState("javascript.2.MarsAV", MarsAV); } else { } }); }liegt vermutlich an der Zahl für den "Sol" wert 433 (Marstage).
Dieser ändert sich ja auch mit der Zeit.Wie bekomme ich jetzt Datenpunkte einen bestimmte (den letzten) Marstag.
Kann ich die "Toplevel" werte in ein Array schmeissen? oder..? ach wenn ich nur ahnung von API und Jscript hätte.Vielen dank schonmal und schönes Wochenende allen.
-
Hallo zusammen,
Mein Name ist Nils und ich bin neu in diesem Forum.
Ich hoffe das mir hier jemand mit meinem Problem helfen kann.Über die Visualisierung von ioBroker wollte ich gerne mein altes Tablet als LCARS Console verwenden ;)
ich habe auf Grundlage dieses Posts - BING - Bild des Tages dank @Werde45 - folgendes Script für das abgreifen des "Astronomy Picture of the Day":
createState('javascript.1.Bild', ""); createState('javascript.1.Title', ""); BilddesTagesNASA(); function BilddesTagesNASA(){ var url = 'https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY'; request(url, function (err, state, body){ if (body) { body = JSON.parse(body); var bild = body.hdurl; var title = body.title; setState("javascript.1.Bild", bild); setState("javascript.1.Title", title); } else { } }); } schedule("5 0 * * *" , function(){ BilddesTagesNASA(); });Läuft 1A.
Jetzt würde ich gerne die Insight API der NASA nutzen um Wetterdaten vom Mars abzugreifen. So hätte ich auf der "Brücke" schonmal nahezu live wetterdatn von Sol III/Terra(Erde) und Sol IV/Ares(Mars) :D
Example query: https://api.nasa.gov/insight_weather/?api_key=DEMO_KEY&feedtype=json&ver=1.0
Der erste block sieht dann in etwa so aus. das sind temperatur werte die haben möchte
{ "434": { "AT": { "av": -57.432, "ct": 310794, "mn": -94.545, "mx": -7.332 },Wenn ich das obige Script umschreibe läuft das ganze aber nicht.
function WetterMarsNASA(){ var url = 'https://api.nasa.gov/insight_weather/?api_key=DEMO_KEY&feedtype=json&ver=1.0'; request(url, function (err, state, body){ if (body) { body = JSON.parse(body); var MarsAV = body.433.AT.av; setState("javascript.2.MarsAV", MarsAV); } else { } }); }liegt vermutlich an der Zahl für den "Sol" wert 433 (Marstage).
Dieser ändert sich ja auch mit der Zeit.Wie bekomme ich jetzt Datenpunkte einen bestimmte (den letzten) Marstag.
Kann ich die "Toplevel" werte in ein Array schmeissen? oder..? ach wenn ich nur ahnung von API und Jscript hätte.Vielen dank schonmal und schönes Wochenende allen.
@ultr4low sagte:
var MarsAV = body.433.AT.av;Wenn das Objekt-Attribut einen unzulässigen Bezeichner (beginnt mit einer Ziffer) hat:
var MarsAV = body['433'].AT.av;Falls es kein Objekt-Attribut, sondern der Index zu einem Array ist:
var MarsAV = body[433].AT.av;@ultr4low sagte in NASA APOD und Insight (Mars Weather API):
Wie bekomme ich jetzt Datenpunkte einen bestimmte (den letzten) Marstag.
Wenn es ein Array mit allen Marstagen ist:
var MarsAV = body[body.length - 1].AT.av; -
@ultr4low sagte:
var MarsAV = body.433.AT.av;Wenn das Objekt-Attribut einen unzulässigen Bezeichner (beginnt mit einer Ziffer) hat:
var MarsAV = body['433'].AT.av;Falls es kein Objekt-Attribut, sondern der Index zu einem Array ist:
var MarsAV = body[433].AT.av;@ultr4low sagte in NASA APOD und Insight (Mars Weather API):
Wie bekomme ich jetzt Datenpunkte einen bestimmte (den letzten) Marstag.
Wenn es ein Array mit allen Marstagen ist:
var MarsAV = body[body.length - 1].AT.av;@paul53 said in NASA APOD und Insight (Mars Weather API):
Wenn das Objekt-Attribut einen unzulässigen Bezeichner (beginnt mit einer Ziffer) hat:
var MarsAV = body['433'].AT.av;Super vielen Dank. Das war genau mein Problem.
Nun kann ich schon einmal die Datenpunkte mit den Werten erstellen.Ich werde mal schauen ob ich den aktuellen Marstag mit einem Counter realisieren kann. (alle 24h + 1) im Grunde interessieren mich nur die Werte des aktuellsten Tages.
Obwohl ich dann ja eine Variable mit einem unzulässigen Wert habe :/
geht das überhaupt?
Und der Counter läuft nicht mehr sollte ich den Server einmal neustarten müssen :/
Ohje Ohje ... :D
Werde später etwas testen.Vielen Dank nochmal @paul53
-
@paul53 said in NASA APOD und Insight (Mars Weather API):
Wenn das Objekt-Attribut einen unzulässigen Bezeichner (beginnt mit einer Ziffer) hat:
var MarsAV = body['433'].AT.av;Super vielen Dank. Das war genau mein Problem.
Nun kann ich schon einmal die Datenpunkte mit den Werten erstellen.Ich werde mal schauen ob ich den aktuellen Marstag mit einem Counter realisieren kann. (alle 24h + 1) im Grunde interessieren mich nur die Werte des aktuellsten Tages.
Obwohl ich dann ja eine Variable mit einem unzulässigen Wert habe :/
geht das überhaupt?
Und der Counter läuft nicht mehr sollte ich den Server einmal neustarten müssen :/
Ohje Ohje ... :D
Werde später etwas testen.Vielen Dank nochmal @paul53
-
Nach tagelangen "rumprobieren" musste ich leider aufgeben.
Bekomme die aktuellsten Werte nicht eingelesen.
Nur wenn ich explizit einen Marstag angebe. Wie oben.
Schade.
Danke trotzdem. -
Ich habe mir das nun doch nochmal angeschaut.
Es gibt ganz unten einen toplevel key der sol_keys heißt
"sol_keys": [ "439", "440", "441", "442", "443", "444", "445" ],Wenn ich diese Werte irgendwie in ein Array schreiben könnte. Bspw. arrSol.
So hätte man mit arrSol[7] immer den aktuellen Wert... Oder ist das bereits ein Array?
Ich kann noch nicht testen, Bin noch auf der Arbeit :/
Dann etwa so?var sol = sol_keys[7] var MarsAV = body.sol.AT.av;muss ich bei der Variable sol in der Schreibweise etwas beachten? Weil ja eine Zahl dahinter steckt?
-
Ich habe mir das nun doch nochmal angeschaut.
Es gibt ganz unten einen toplevel key der sol_keys heißt
"sol_keys": [ "439", "440", "441", "442", "443", "444", "445" ],Wenn ich diese Werte irgendwie in ein Array schreiben könnte. Bspw. arrSol.
So hätte man mit arrSol[7] immer den aktuellen Wert... Oder ist das bereits ein Array?
Ich kann noch nicht testen, Bin noch auf der Arbeit :/
Dann etwa so?var sol = sol_keys[7] var MarsAV = body.sol.AT.av;muss ich bei der Variable sol in der Schreibweise etwas beachten? Weil ja eine Zahl dahinter steckt?
-
@ultr4low sagte:
ist das bereits ein Array?
Ja (nach JSON.parse(body);).
@ultr4low sagte in [Offen] (Problem) NASA APOD und Insight (Mars Weather API):
Dann etwa so?
var sol = body.sol_keys[6]; // beginnt mit 0 var MarsAV = body[sol].AT.av;