NEWS
Brauche Hilfe um ein json abzurufen und auszuwerten
-
Hallo zusammen,
ich habe mir ein neues Spielzeug angeschafft.
- piAwareSeit Jahren wollte ich das schon umsetzen und komme jetzt endlich dazu.
Wir wohnen relativ nahe am Flughafen Köln-Bonn und besonders nachts wenn die überladenen Frachtmaschinen von FedEx, UPS u.a. gegen 03:00 gefühlt die Antenne unseres Hauses streifen wollte ich gerne die Daten der Maschinen (insbesondere Flug, Aircraft-Typ, und ganz wichtig die Höhe) auswerten, da wir gerade außerhalb der Fördergrenze für Schallschutzmaßnahmen liegen, weil hier die Flugzeuge angeblich immer >1700m hoch sein sollen.Jetzt habe ich gestern das System zum laufen bekommen und kann über `http://<IP-des-Raspi>/dump1090-fa/data/aircraft.json die Daten abrufen.
"messages" : 43742, "aircraft" : [ {"hex":"407834","alt_baro":39025,"alt_geom":39275,"gs":481.2,"ias":238,"mach":0.772,"track":104.4,"mag_heading":107.6,"baro_rate":64,"geom_rate":32,"version":0,"nac_p":8,"nac_v":1,"sil":2,"sil_type":"unknown","mlat":[],"tisb":[],"messages":6,"seen":0.5,"rssi":-23.7}, {"hex":"3c56e6","flight":"EWG9NA ","alt_baro":5025,"alt_geom":5150,"gs":210.8,"ias":213,"tas":224,"mach":0.352,"track":265.1,"track_rate":-0.22,"roll":-2.3,"mag_heading":263.3,"baro_rate":3008,"geom_rate":2976,"squawk":"5022","emergency":"none","category":"A3","nav_qnh":1011.2,"nav_altitude_mcp":7008,"lat":50.841002,"lon":7.026062,"nic":8,"rc":186,"seen_pos":0.5,"version":2,"nic_baro":1,"nac_p":9,"nac_v":1,"sil":3,"sil_type":"perhour","gva":2,"sda":2,"mlat":[],"tisb":[],"messages":864,"seen":0.1,"rssi":-8.6}, {"hex":"4855d1","flight":"KLM71B ","alt_baro":37000,"alt_geom":37200,"gs":431.4,"ias":236,"tas":424,"mach":0.736,"track":133.9,"track_rate":0.00,"roll":-0.4,"mag_heading":142.6,"baro_rate":64,"geom_rate":32,"squawk":"0173","nav_qnh":1013.6,"nav_altitude_mcp":37024,"nav_altitude_fms":37008,"nav_modes":["autopilot","althold","tcas"],"lat":51.026420,"lon":7.245483,"nic":8,"rc":186,"seen_pos":0.5,"version":2,"nic_baro":1,"nac_p":9,"nac_v":2,"sil":3,"sil_type":"perhour","gva":2,"sda":2,"mlat":[],"tisb":[],"messages":235,"seen":0.0,"rssi":-19.3}, {"hex":"06a0f6","flight":"QTR8009 ","alt_baro":28450,"alt_geom":28350,"gs":449.0,"ias":283,"tas":426,"mach":0.720,"track":104.8,"track_rate":0.00,"roll":-0.2,"mag_heading":110.4,"baro_rate":1536,"geom_rate":1632,"squawk":"0144","emergency":"none","category":"A5","nav_qnh":1013.6,"nav_altitude_mcp":35008,"nav_heading":110.4,"lat":50.319385,"lon":7.311847,"nic":8,"rc":186,"seen_pos":2.7,"version":2,"nic_baro":1,"nac_p":9,"nac_v":2,"sil":3,"sil_type":"perhour","gva":2,"sda":2,"mlat":[],"tisb":[],"messages":336,"seen":2.5,"rssi":-22.6}, {"hex":"a762cc","flight":"UPS223 ","alt_baro":12350,"alt_geom":12500,"gs":338.6,"ias":258,"tas":310,"mach":0.488,"track":62.0,"track_rate":0.06,"roll":1.2,"mag_heading":60.5,"baro_rate":-448,"geom_rate":-480,"squawk":"2021","emergency":"none","category":"A5","nav_qnh":1013.6,"nav_altitude_mcp":8000,"nav_heading":59.8,"nav_modes":["tcas"],"lat":50.865646,"lon":6.797122,"nic":8,"rc":186,"seen_pos":0.3,"version":2,"nic_baro":1,"nac_p":10,"nac_v":1,"sil":3,"sil_type":"perhour","gva":2,"sda":2,"mlat":[],"tisb":[],"messages":668,"seen":0.1,"rssi":-16.6}, {"hex":"3d1363","mlat":[],"tisb":[],"messages":193,"seen":139.5,"rssi":-22.9}, {"hex":"3c4dc6","mlat":[],"tisb":[],"messages":1357,"seen":42.1,"rssi":-24.6} ] }
da würde ich mir dann die gemäß der lat und long am dichtesten fliegenden Maschinen unterhalb einer gewissen Höhe loggen.
Leider scheitere ich mal wieder direkt am Anfang.
Wie komme ich an das json?Ich bin mir ziemlich sicher, dass ich das schon mal irgendwo geschafft hatte, komme aber ums Verr*** nicht mehr drauf
Die weiteren Schritte würde ich gerne selber versuchen.
Spätestens beim iterieren durch das Array werde ich wahrscheinlich wieder hängen bleiben.Ich denke, dass ich das json gerne in einer Variable speichern würde um mit dieser weiter zu arbeiten ???
-
@Homoran wenn du die URL im Browser eingibst dann siehst du die JSON Daten? Kannst du mal ein komplettes JSON posten?
-
@fastfoot sagte in Brauche Hilfe um ein json abzurufen und auszuwerten:
wenn du die URL im Browser eingibst dann siehst du die JSON Daten?
Ja!
Da habe ich es ja her@fastfoot sagte in Brauche Hilfe um ein json abzurufen und auszuwerten:
Kannst du mal ein komplettes JSON posten?
Das war eins
Ich hole dir gerne noch ein aktuelles
EDIT:
{ "now" : 1603545549.7, "messages" : 1678929, "aircraft" : [ {"hex":"3c4d8f","flight":"ABR1540 ","alt_baro":34075,"ias":263,"mach":0.764,"mag_heading":54.8,"baro_rate":64,"geom_rate":32,"version":0,"nac_p":0,"sil":0,"sil_type":"unknown","mlat":[],"tisb":[],"messages":29,"seen":3.5,"rssi":-23.2}, {"hex":"3e3f1f","alt_baro":11075,"version":0,"nac_p":8,"sil":2,"sil_type":"unknown","mlat":[],"tisb":[],"messages":8,"seen":2.4,"rssi":-22.9}, {"hex":"3c56f3","flight":"EWG53N ","alt_baro":18725,"alt_geom":19150,"gs":354.9,"ias":288,"tas":376,"mach":0.612,"track":221.7,"track_rate":0.06,"roll":-0.4,"mag_heading":223.1,"baro_rate":2048,"geom_rate":2016,"squawk":"4132","emergency":"none","category":"A3","nav_qnh":1012.8,"nav_altitude_mcp":24000,"lat":51.072507,"lon":6.167068,"nic":8,"rc":186,"seen_pos":38.8,"version":2,"nic_baro":1,"nac_p":9,"nac_v":1,"sil":3,"sil_type":"perhour","gva":2,"sda":2,"mlat":[],"tisb":[],"messages":148,"seen":3.8,"rssi":-23.1}, {"hex":"484160","flight":"KLM1631 ","alt_baro":41000,"alt_geom":41125,"gs":443.6,"ias":226,"tas":436,"mach":0.768,"track":159.7,"track_rate":-0.03,"roll":-0.4,"mag_heading":163.7,"baro_rate":64,"geom_rate":0,"squawk":"1000","category":"A0","nav_qnh":1013.2,"nav_altitude_mcp":41008,"lat":50.771453,"lon":6.746521,"nic":7,"rc":371,"seen_pos":3.4,"version":0,"nac_p":7,"nac_v":0,"sil":2,"sil_type":"unknown","mlat":[],"tisb":[],"messages":2832,"seen":2.6,"rssi":-20.3}, {"hex":"3ddc04","mlat":[],"tisb":[],"messages":52,"seen":101.5,"rssi":-19.9}, {"hex":"440395","flight":"EJU93MQ ","alt_baro":38000,"alt_geom":38425,"gs":414.3,"ias":242,"tas":432,"mach":0.764,"track":241.8,"track_rate":-0.03,"roll":0.4,"mag_heading":245.6,"baro_rate":0,"geom_rate":-32,"squawk":"1136","emergency":"none","category":"A3","nav_qnh":1013.6,"nav_altitude_mcp":38016,"lat":50.905655,"lon":7.165090,"nic":8,"rc":186,"seen_pos":1.2,"version":2,"nic_baro":1,"nac_p":9,"nac_v":1,"sil":3,"sil_type":"perhour","gva":2,"sda":2,"mlat":[],"tisb":[],"messages":653,"seen":0.5,"rssi":-20.2}, {"hex":"4070e2","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":219,"seen":64.5,"rssi":-23.4}, {"hex":"48548d","flight":"KLM73C ","alt_baro":23600,"alt_geom":37350,"gs":451.2,"ias":233,"tas":414,"mach":0.724,"track":149.1,"track_rate":0.00,"roll":0.2,"mag_heading":149.9,"baro_rate":0,"geom_rate":-32,"squawk":"3177","emergency":"none","category":"A3","nav_qnh":1013.6,"nav_altitude_mcp":37024,"nav_altitude_fms":37008,"nav_modes":["autopilot","althold","tcas"],"lat":50.463464,"lon":7.402261,"nic":8,"rc":186,"seen_pos":45.5,"version":2,"nic_baro":1,"nac_p":10,"nac_v":2,"sil":3,"sil_type":"perhour","gva":2,"sda":2,"mlat":[],"tisb":[],"messages":3056,"seen":3.8,"rssi":-24.7}, {"hex":"aa9300","flight":"UAL2777 ","alt_baro":29825,"alt_geom":30275,"gs":475.0,"ias":321,"tas":488,"mach":0.828,"track":317.6,"roll":0.2,"mag_heading":314.3,"baro_rate":1408,"geom_rate":1376,"squawk":"0635","emergency":"none","category":"A5","nav_qnh":1012.8,"nav_altitude_mcp":34016,"nav_heading":314.3,"lat":50.999313,"lon":6.929255,"nic":8,"rc":186,"seen_pos":43.6,"version":2,"nic_baro":1,"nac_p":9,"nac_v":1,"sil":3,"sil_type":"perhour","gva":2,"sda":2,"mlat":[],"tisb":[],"messages":2082,"seen":1.5,"rssi":-22.9}, {"hex":"40697c","version":0,"sil_type":"unknown","mlat":[],"tisb":[],"messages":123,"seen":184.6,"rssi":-21.9}, {"hex":"3c0ca5","category":"A3","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":514,"seen":90.3,"rssi":-23.4}, {"hex":"3d11d6","mlat":[],"tisb":[],"messages":1345,"seen":165.9,"rssi":-23.0}, {"hex":"3ded08","mlat":[],"tisb":[],"messages":2819,"seen":171.5,"rssi":-22.5} ] }
-
@Homoran Ansatz, um das Array in einer Variablen zu erzeugen. Die Bezeichnung der Variablen result ist vorgegeben.
-
@paul53 sagte in Brauche Hilfe um ein json abzurufen und auszuwerten:
Ansatz, um das Array in einer Variablen zu erzeugen.
Super heißen Dank!
Da war ich schon fast.
kannst du mir bitte noch erklären wie und wohin die "mit Ergebnissen" hinfließen und wie man da wieder ran kommt.
Das war nämlich mein Denk-Knoten. -
@Homoran sagte:
wohin die "mit Ergebnissen" hinfließen und wie man da wieder ran kommt.
Die Ergebnisse werden an die Callback-Funktion (das Maul) in den Variablen error, response und result übergeben. Das JSON wird in result übergeben.
-
@paul53 sagte in Brauche Hilfe um ein json abzurufen und auszuwerten:
in den Variablen error, response und result übergeben
und das muss man wissen
die so bezeichneten Variablen liegen nicht irgendwo als pulldown vor?Dann habe ich es schon richtig geahnt, nur verzweifelt den passende Block gesucht
Das Result ist
[{'hex':'89644e','flight':'UAE184 ','alt_baro':34975,'alt_geom':35475,'gs':517.7,'ias':281,'tas':474,'mach':0.824,'track':99.9,'roll':0,'mag_heading':95.6,'baro_rate':576,'geom_rate':512,'squawk':'0112','category':'A5','nav_qnh':1012.8,'nav_altitude_mcp':35008,'lat':50.293259,'lon':6.842459,'nic':8,'rc':186,'seen_pos':2.6,'version':0,'nic_baro':1,'nac_p':8,'nac_v':1,'sil':2,'sil_type':'unknown','mlat':[],'tisb':[],'messages':148,'seen':2.6,'rssi':-22.8},{'hex':'3d1bb0','mlat':[],'tisb':[],'messages':131,'seen':133,'rssi':-22.2},{'hex':'407510','flight':'WUK1329 ','alt_baro':35025,'alt_geom':35475,'gs':489.5,'ias':265,'tas':446,'mach':0.78,'track':121.1,'track_rate':0.06,'roll':1.2,'mag_heading':117.4,'baro_rate':-128,'geom_rate':-128,'squawk':'2273','emergency':'none','category':'A3','nav_qnh':1012.8,'nav_altitude_mcp':35008,'lat':50.667409,'lon':7.959669,'nic':7,'rc':371,'seen_pos':22.6,'version':2,'nic_baro':1,'nac_p':8,'nac_v':1,'sil':3,'sil_type':'perhour','gva':1,'sda':3,'mlat':[],'tisb':[],'messages':2810,'seen':20.8,'rssi':-22.3},{'hex':'3c4583','flight':'BOX462 ','alt_baro':28000,'alt_geom':28425,'gs':486.4,'ias':335,'tas':500,'mach':0.844,'track':317.9,'roll':0,'mag_heading':314.8,'baro_rate':64,'geom_rate':32,'squawk':'0637','emergency':'none','category':'A5','nav_qnh':1012.8,'nav_altitude_mcp':28000,'nav_heading':315,'lat':50.970016,'lon':6.930814,'nic':8,'rc':186,'seen_pos':7.6,'version':2,'nic_baro':1,'nac_p':9,'nac_v':1,'sil':3,'sil_type':'perhour','gva':2,'sda':2,'mlat':[],'tisb':[],'messages':2000,'seen':1.8,'rssi':-21.1},{'hex':'3c5ee4','category':'A3','version':1,'sil_type':'unknown','mlat':[],'tisb':[],'messages':377,'seen':292.2,'rssi':-22.4},{'hex':'484cb6','alt_baro':39000,'alt_geom':39250,'gs':449.9,'ias':228,'tas':418,'mach':0.74,'track':145.8,'track_rate':0,'roll':0.4,'mag_heading':147.3,'baro_rate':32,'geom_rate':0,'squawk':'0157','category':'A0','lat':50.253296,'lon':7.449526,'nic':8,'rc':186,'seen_pos':52.7,'version':0,'nac_p':8,'nac_v':0,'sil':2,'sil_type':'unknown','mlat':[],'tisb':[],'messages':6980,'seen':31.9,'rssi':-24.2},{'hex':'471f5a','category':'A3','version':2,'sil_type':'perhour','mlat':[],'tisb':[],'messages':664,'seen':248.9,'rssi':-23},{'hex':'484acc','category':'A3','version':2,'sil_type':'perhour','mlat':[],'tisb':[],'messages':4599,'seen':170.9,'rssi':-24.4}]
und den muss ich jetzt splitten -
Danke erst einmal
-
@Homoran sagte in Brauche Hilfe um ein json abzurufen und auszuwerten:
und den muss ich jetzt splitten -
da empfehle ich jsonata, geiles Tool und gibt es auch im Blockly hier mal ein paar Daten
Jsonata Ausdruck:aircraft[flight.$contains(/./)].{ "flight":flight, "lat":lat, "lon":lon, "alt_baro":alt_baro }
Blockly
Gefilterte Daten
[{'flight':'ABR1540 ','alt_baro':34075},{'flight':'EWG53N ','lat':51.072507,'lon':6.167068,'alt_baro':18725},{'flight':'KLM1631 ','lat':50.771453,'lon':6.746521,'alt_baro':41000},{'flight':'EJU93MQ ','lat':50.905655,'lon':7.16509,'alt_baro':38000},{'flight':'KLM73C ','lat':50.463464,'lon':7.402261,'alt_baro':23600},{'flight':'UAL2777 ','lat':50.999313,'lon':6.929255,'alt_baro':29825}]
Spielen mit den Ausdrücken auf https://try.jsonata.org/
-
@fastfoot sagte in Brauche Hilfe um ein json abzurufen und auszuwerten:
da empfehle ich jsonata, geiles Tool
janz langsam mit den alten Pferden
ich will das ganze ja auch verstehen.Bin ja schon ganz stolz, dass ich das json(-Array) iteriert bekommen habe.
Habe dann mal zur Übung die Flugnummer genommenDa ich aber nicht von allen Flugzeugen immer alle Daten reinbekomme muss ich jetzt die
undefined
abfangen.
Das Ganze ist für mich auch eine Übung mich immer tiefer in js einzuarbeitenOptimierungen, wie @paul53 sie bis in den Exzess treibt kommen erst vieeeeeel später
-
@Homoran sagte in Brauche Hilfe um ein json abzurufen und auszuwerten:
Da ich aber nicht von allen Flugzeugen immer alle Daten reinbekomme muss ich jetzt die undefined abfangen.
Das Ganze ist für mich auch eine Übung mich immer tiefer in js einzuarbeitenDu kannst ja auch über die gefilterten Daten iterieren, letztendlich ist das Ergebnis auch 'nur' ein JSON. Arbeit haste da noch genug, ist aber einfacher, gerade als Anfänger
-
@fastfoot sagte in Brauche Hilfe um ein json abzurufen und auszuwerten:
Arbeit haste da noch genug,
das stimmt.
Wollte jetzt Höhe, lat und long auskesen.
Dann kommt noch Pythagoras in der Ebene zu meinem Wohnort und vor dem Pythagoras im dreidimensionalen Raum (Entfernung Flugzeug zum Haus) graut mir auch schon.Dann wollte ich das Ergebnis jeweils in ein weiteres Json abspeichern, wenn der Flieger am dichtesten bei mir ist und diese Liste dann in vis darstellen.
Das ist für mich ein Jahresprogramm
Aber ich bilde mir ein, man lernt am besten wenn man weiß was man will und ein Ziel hatEDIT:
Habe mir dein Blockly jetzt doch näher angesehen, war einfach zu neugierig.
Mit dem JSONata kann man das UrsprungsJSON also filtern und dann nur noch mit den Datensätzen, die für mich relevant wären weiterarbeiten? -
@Homoran sagte:
muss ich jetzt die undefined abfangen.
-
@paul53 ich habe wieder zu komliziert (nämlich umgekehrt) gedacht und mit
Falls nicht undefined
versucht -
@Homoran sagte in Brauche Hilfe um ein json abzurufen und auszuwerten:
Mit dem JSONata kann man das UrsprungsJSON also filtern und dann nur noch mit den Datensätzen, die für mich relevant wären weiterarbeiten?
Genau, habe den Ausdruck extra formatiert, einfach die Daten, welche du brauchst anhängen und dann hast du nur die Daten welche du brauchst, lan, lon und Höhe sind ja schon drin.. Den Rest machst du wie von Paul gezeigt
-
-
@Homoran sagte in Brauche Hilfe um ein json abzurufen und auszuwerten:
das muss ich jetzt erst einmal verdauen
vor einer Woche konnte ich jsonata gerade mal buchstabieren, jetzt gehts schon recht flott Genau so wird es dir auch gehen mit deinem Projekt. Viel Erfolg.
PS: Die Daten die du ziehst sind kostenpflichtig?
-
@fastfoot sagte in Brauche Hilfe um ein json abzurufen und auszuwerten:
Die Daten die du ziehst sind kostenpflichtig?
Nö, ich fange sie mit einem DVB-T Receiver an einem RasPi selber ab
-
@fastfoot sagte in Brauche Hilfe um ein json abzurufen und auszuwerten:
Spielen mit den Ausdrücken auf https://try.jsonata.org/
Habe ich jetzt ein wenig gemacht.
Das erträumte Ergebnis war ernüchterndHabe dann sogar das Unmögliche getan und die Doku gelesen. Aber auch dort keinen korrekten Hinweis auf meinen Wunsch erhalten:
kann man in dem
expression
bereits z.B. (Wohnort - x) < lat > (Wohnort +x) filtern?
Habe dazu nichts gefunden, resp. bekam nur ERROR -
@Homoran sagte in Brauche Hilfe um ein json abzurufen und auszuwerten:
kann man in dem expression bereits z.B. (Wohnort - x) < lat > (Wohnort +x) filtern?
Habe dazu nichts gefunden, resp. bekam nur ERRORDu kannst im Filter(alles zwischen den eckigen Klammern) folgendes eingeben
aircraft[lat >50 and lat < 52].{ "flight":flight, "lat":lat, "lon":lon, "alt_baro":alt_baro }
probiere das mal mit fixen Werten zuerst, später kannst du ja Variablen einfügen. Hier habe ich den Filter für die Flugnummer entfernt, weil ich denke dass lat und lon eh nur da sind wenn eine Flugnummer existiert. denke daran dass du einen Punkt statt Komma in der Angabe benutzt, also zB lat > 50.0400776
-
@fastfoot werde ich testen - danke!
@fastfoot sagte in Brauche Hilfe um ein json abzurufen und auszuwerten:
probiere das mal mit fixen Werten zuerst, später kannst du ja Variablen einfügen.
genau das hatte ich vor, zumal ich nicht weiß wie ich an die Geokoordinaten aus der Systemsteuerung komme
@fastfoot sagte in Brauche Hilfe um ein json abzurufen und auszuwerten:
dass lat und lon eh nur da sind wenn eine Flugnummer existiert.
nicht mal dann.
Wenn der Empfang schlecht ist heisst es:Total Aircraft: 7 With Positions: 4
Die 7 haben ihr Kennzeichen aber nicht alle eine aktuelle Position.
Die Daten werden jede Sekunde aktualisiert