NEWS
[gelöst]Brauche Hilfe bei Script mit Schleife und mehr
-
Hallo Leute,
Scriptschreiben ist für mich etwas ganz neues und brauche deshalb hier bei einer Sache eure Hilfe.
Ich habe von Walkinlarge2010! ein Script zur verfügung gestellt bekommen, welches er selber auch nur für seine Anwendung angepasst hat.
Hier mal der Auszug aus meinem Script, wo ich eure Hilfe brauche
var Startzeit; var Verspaetung; var Linie; //Startzeit if (logging) log(result.raw[0].sched_time); //Verspaetung if (logging) log(result.raw[0].delay); //Linie if (logging) log(result.raw[0].linie); Startzeit = result.raw[0].prev_route.sched_time; Verspaetung = result.raw[0].delay; Linie = result.raw[0].linie; setState("javascript.0.Verkehr.Haltestelle.Startzeit",Startzeit); setState("javascript.0.Verkehr.Haltestelle.Verspaetung",Verspaetung); setState("javascript.0.Verkehr.Haltestelle.Linie",Linie); setState("javascript.0.Verkehr.Aktualisieren", false); setState("javascript.0.VIS.Overlay", 5);
Mit diesem Script kann ich mir einen Abfahrtmonitor der Bushaltestelle vor unserer Tür darstellen lassen. Das Problem ist, dass damit immer nur der nächste Bus angezeigt wird.
Damit ich mir die nächsten 5 Abfahrten anzeigen lassen kann, müßte ich entweder den oberen Code mit Anpassung der Array-Nummer 5x untereinander schreiben, oder aber mit einer Schleife was schöner wäre, aber leider meine minimalen Kenntnisse überschreitet.
if (logging) log(result.raw[0].prev_route.sched_time);
Hier müßte die [0] immer geändert werden auf 1,2,3,4
Startzeit0 = result.raw[0].prev_route.sched_time; Verspaetung0 = result.raw[0].delay; Linie0 = result.raw[0].linie; setState("javascript.0.Verkehr.Haltestelle.Startzeit0",Startzeit0);
Hier müßte jeweils die 0 an die nächste Nummer angepasst werden
-
-
https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Statements/for `
Ok, in die geschweifte Klammer kommt dann der Teil wo ich die Hochzählung haben möchte.
Ich denke mal, daß ich dann überall wo ich [0] stehen habe mit [ i] ersetzen muß.
Wie setze ich das aber bei
Startzeit = result.raw[0].prev_route.sched_time; Verspaetung = result.raw[0].delay; Linie = result.raw[0].linie; setState("javascript.0.Verkehr.Haltestelle.Startzeit",Startzeit); setState("javascript.0.Verkehr.Haltestelle.Verspaetung",Verspaetung); setState("javascript.0.Verkehr.Haltestelle.Linie",Linie);
Startzeit, Verspaetung & Linie um?
Da sollte ja dann jeweils
Startzeit0 bis Startzeit4
usw stehen
Gesendet von meinem SM-J730F mit Tapatalk
-
Wie setze ich das aber bei
Startzeit = result.raw[0].prev_route.sched_time; Verspaetung = result.raw[0].delay; Linie = result.raw[0].linie; setState("javascript.0.Verkehr.Haltestelle.Startzeit",Startzeit); setState("javascript.0.Verkehr.Haltestelle.Verspaetung",Verspaetung); setState("javascript.0.Verkehr.Haltestelle.Linie",Linie);
Startzeit, Verspaetung & Linie um?
Da sollte ja dann jeweils
Startzeit0 bis Startzeit4
usw stehen `
`Startzeit = result.raw[i].prev_route.sched_time; Verspaetung = result.raw[i].delay; Linie = result.raw[i].linie; setState("javascript.0.Verkehr.Haltestelle.Startzeit" + i,Startzeit); setState("javascript.0.Verkehr.Haltestelle.Verspaetung" + i,Verspaetung); setState("javascript.0.Verkehr.Haltestelle.Linie" + i,Linie);` [/i][/i][/i]
-
Danke für die schnelle Hilfe!! Da ich ioBroker noch nicht permanent am laufen habe, werde ich es dann beim nächsten mal ausprobieren. Werde mich dann melden, ob es geklappt hat oder nicht
Gesendet von meinem SM-J730F mit Tapatalk
-
Habs jetzt mal ausprobiert.
Funktioniert danke!!
Aber eine Sache habe ich noch, das Script wird nur 1x ausgeführt. Wie kann ich es umsetzen, dass es im 1Minuten-Takt immer wieder aufgerufen wird?
Hier nochmal mein Script:
var request = require('request'); var logging = true; var i = 0; createState('Verkehr.Aktualisieren', false, { desc: 'Werte aktualisieren', type: 'boolean', def: false, role: 'indicator' }); for(let i = 0, i < 4, i++) { createState('Verkehr.meine_Haltestelle.Startzeit'+(i), 0, { }); createState('Verkehr.meine_Haltestelle.Verspaetung'+(i), 0, { }); createState('Verkehr.meine_Haltestelle.Haltestelle'+(i), 0, { }); createState('Verkehr.meine_Haltestelle.Linie'+(i), 0, { }); } function datenlesen() { //Zuhause nach HBF var link = 'https://vrrf.finalrewind.org/xxx/xxx.json?frontend=json&backend=efa.VRR&platform=1' ; log('Verkehr Daten einlesen'); request(link, function (error, response, body) { if (!error && response.statusCode == 200) { var result; try{ result = JSON.parse(body); if (logging) log('Kein Fehler beim Einlesen Verkehr Daten'); } catch (e) { log('Parse Fehler (Roofi Modul):' + e); } if (result) { var Startzeit; var Verspaetung; var Haltestelle; var Linie; var j = 0; for(let j = 0, j < 4, j++) { //Startzeit if (logging) log(result.raw[j].sched_time); //Verspaetung if (logging) log(result.raw[j].delay); //Ziel Haltestelle if (logging) log(result.raw[j].destination); //Linie if (logging) log(result.raw[j].line); Startzeit = result.raw[j].sched_time; Verspaetung = result.raw[j].delay; Haltestelle = result.raw[j].destination; Linie = result.raw[j].line; setState("javascript.0.Verkehr.meine_Haltestelle.Startzeit"+j,Startzeit); setState("javascript.0.Verkehr.meine_Haltestelle.Verspaetung"+j,Verspaetung); setState("javascript.0.Verkehr.meine_Haltestelle.Haltestelle"+j,Haltestelle); setState("javascript.0.Verkehr.meine_Haltestelle.Linie"+j,Linie); } setState("javascript.0.Verkehr.Aktualisieren", false); setState("javascript.0.VIS.Overlay", 5); // setState("javascript.0.VIS.Overlay_iPhoneX", 5); } } else log('Fehler (Verkehr Daten Abfrage: ' + error); }); // Ende request log('Verkehr Daten eingelesen'); } datenlesen ();
-
dass es im 1Minuten-Takt immer wieder aufgerufen wird? `
schedule('* * * * *', datenlesen); // jede minute
-
dass es im 1Minuten-Takt immer wieder aufgerufen wird? `
schedule('* * * * *', datenlesen); // jede minute ```` `
Danke!!!
Aber leider funktioniert es nicht zu 100%
Beim 1. Start werden alle Datenpunkte erstellt. Hier nochmal das komplette aktuelle Script
schedule('* * * * *', datenlesen); // jede minute var request = require('request'); var logging = true; var i = 0; createState('Verkehr.Aktualisieren', false, { desc: 'Werte aktualisieren', type: 'boolean', def: false, role: 'indicator' }); for(let i = 0; i < 4; i++) { createState('Verkehr.meine_Haltestelle.Startzeit'+i, 0, { }); createState('Verkehr.meine_Haltestelle.Verspaetung'+i, 0, { }); createState('Verkehr.meine_Haltestelle.inMinuten'+i, 0, { }); createState('Verkehr.meine_Haltestelle.Haltestelle'+i, 0, { }); createState('Verkehr.meine_Haltestelle.Linie'+i, 0, { }); createState('Verkehr.meine_Haltestelle.tats_zeit'+i, 0, { }); } function datenlesen() { //Meine Haltestelle nach HBF var link = 'https://vrrf.finalrewind.org/xxx/xxx.json?frontend=json&backend=efa.VRR&platform=1' ; log('Verkehr Daten einlesen'); request(link, function (error, response, body) { if (!error && response.statusCode == 200) { var result; try{ result = JSON.parse(body); if (logging) log('Kein Fehler beim Einlesen Verkehr Daten'); } catch (e) { log('Parse Fehler (Roofi Modul):' + e); } if (result) { var Startzeit; var Verspaetung; var Haltestelle; var inMinuten; var Linie; var TatsZeit; for(let j = 0; j < 4; j++) { //Startzeit if (logging) log(result.raw[j].sched_time); //Verspaetung if (logging) log(result.raw[j].delay); //Ziel Haltestelle if (logging) log(result.raw[j].destination); //Bus kommt in Minuten if (logging) log(result.raw[j].countdown); //Linie if (logging) log(result.raw[j].line); //Tatsächliche Zeit if (logging) log(result.raw[j].time); Startzeit = result.raw[j].sched_time; Verspaetung = result.raw[j].delay; inMinuten = result.raw[j].countdown; Haltestelle = result.raw[j].destination; Linie = result.raw[j].line; TatsZeit = result.raw[j].time; setState("javascript.0.Verkehr.meine_Haltestelle.Startzeit"+j,Startzeit); setState("javascript.0.Verkehr.meine_Haltestelle.Verspaetung"+j,Verspaetung); setState("javascript.0.Verkehr.meine_Haltestelle.inMinuten"+j,inMinuten); setState("javascript.0.Verkehr.meine_Haltestelle.Haltestelle"+j,Haltestelle); setState("javascript.0.Verkehr.meine_Haltestelle.Linie"+j,Linie); setState("javascript.0.Verkehr.meine_Haltestelle.tats_zeit"+j,TatsZeit); } setState("javascript.0.Verkehr.Aktualisieren", false); setState("javascript.0.VIS.Overlay", 5); // setState("javascript.0.VIS.Overlay_iPhoneX", 5); } } else log('Fehler (Verkehr Daten Abfrage: ' + error); }); // Ende request log('Verkehr Daten eingelesen'); } datenlesen ();
Aber, wenn das 1. Mal neu eingelesen wird, werden nur noch die Datenpunkte 1-3 aktualisiert.
Also:
javascript.0.Verkehr.meine_Haltestelle.Startzeit1 javascript.0.Verkehr.meine_Haltestelle.Verspaetung1 javascript.0.Verkehr.meine_Haltestelle.inMinuten1 javascript.0.Verkehr.meine_Haltestelle.Haltestelle1 javascript.0.Verkehr.meine_Haltestelle.Linie1 javascript.0.Verkehr.meine_Haltestelle.tats1 javascript.0.Verkehr.meine_Haltestelle.Startzeit2 javascript.0.Verkehr.meine_Haltestelle.Verspaetung2 javascript.0.Verkehr.meine_Haltestelle.inMinuten2 javascript.0.Verkehr.meine_Haltestelle.Haltestelle2 javascript.0.Verkehr.meine_Haltestelle.Linie2 javascript.0.Verkehr.meine_Haltestelle.tats2 javascript.0.Verkehr.meine_Haltestelle.Startzeit3 javascript.0.Verkehr.meine_Haltestelle.Verspaetung3 javascript.0.Verkehr.meine_Haltestelle.inMinuten3 javascript.0.Verkehr.meine_Haltestelle.Haltestelle3 javascript.0.Verkehr.meine_Haltestelle.Linie3 javascript.0.Verkehr.meine_Haltestelle.tats3
-
wenn das 1. Mal neu eingelesen wird, werden nur noch die Datenpunkte 1-3 aktualisiert. `
Das kann ich anhand des Skriptes nicht nachvollziehen, denn die Initialisierung der Zähl-/Indexvariablen erfolgt mit 0:for(let j = 0; j < 4; j++) {
Anmerkung: Du solltest besser strukturieren (Einrückungen), damit man sieht, welche Klammer wozu gehört.
-
wenn das 1. Mal neu eingelesen wird, werden nur noch die Datenpunkte 1-3 aktualisiert. `
Das kann ich anhand des Skriptes nicht nachvollziehen, denn die Initialisierung der Zähl-/Indexvariablen erfolgt mit 0:for(let j = 0; j < 4; j++) {
Anmerkung: Du solltest besser strukturieren (Einrückungen), damit man sieht, welche Klammer wozu gehört. `
Eben, deswegen bin ich ja auch verwirrt.
Kann es aber jetzt nicht weitertesten, mußte mein Fhem wieder aktivieren, damit die Lampen funktionieren
Falls doch noch von jemanden eine Idee kommt, gerne her damit!
-
Habe es mir jetzt nochmal angeschaut, hat mir keine Ruhe gelassen.
Also es werden alle Objekte refresht, die Werte werden kurzzeitig grün. Was gestern zwar bei den 0-er Objekten nicht so war aber jetzt :?
Aber was mich gestern noch irritiert hat, waren die Werte der Bus kommt in Minuten, die haben sich nicht minütlich geändert, sondern nur alle paar Minuten. Den Grund habe ich jetzt auch gefunden, die JSON-Datei wird nur alle 4 Minuten aktualisiert. Also wird diese Abfrage rausgeschmissen. Kann ich mit der aktuellen Systemzeit und der Uhrzeit, wann der Bus kommt diese Zeit Berechnen? wenn ja, wie?