Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst]Brauche Hilfe bei Script mit Schleife und mehr

    NEWS

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    • Neues Video über Aliase, virtuelle Geräte und Kategorien

    • Wir empfehlen: Node.js 22.x

    [gelöst]Brauche Hilfe bei Script mit Schleife und mehr

    This topic has been deleted. Only users with topic management privileges can see it.
    • T
      Torsten_MG last edited by

      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

      1 Reply Last reply Reply Quote 0
      • paul53
        paul53 last edited by

        https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Statements/for

        1 Reply Last reply Reply Quote 0
        • T
          Torsten_MG last edited by

          @paul53:

          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

          1 Reply Last reply Reply Quote 0
          • paul53
            paul53 last edited by

            @Torsten_MG:

            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]
            
            1 Reply Last reply Reply Quote 0
            • T
              Torsten_MG last edited by

              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

              1 Reply Last reply Reply Quote 0
              • T
                Torsten_MG last edited by

                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 ();
                
                1 Reply Last reply Reply Quote 0
                • paul53
                  paul53 last edited by

                  @Torsten_MG:

                  dass es im 1Minuten-Takt immer wieder aufgerufen wird? `

                  schedule('* * * * *', datenlesen); // jede minute
                  
                  1 Reply Last reply Reply Quote 0
                  • T
                    Torsten_MG last edited by

                    @paul53:

                    @Torsten_MG:

                    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
                    
                    
                    1 Reply Last reply Reply Quote 0
                    • paul53
                      paul53 last edited by

                      @Torsten_MG:

                      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.

                      1 Reply Last reply Reply Quote 0
                      • T
                        Torsten_MG last edited by

                        @paul53:

                        @Torsten_MG:

                        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!

                        1 Reply Last reply Reply Quote 0
                        • T
                          Torsten_MG last edited by

                          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?

                          1 Reply Last reply Reply Quote 0
                          • First post
                            Last post

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          982
                          Online

                          32.1k
                          Users

                          80.7k
                          Topics

                          1.3m
                          Posts

                          2
                          11
                          790
                          Loading More Posts
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes
                          Reply
                          • Reply as topic
                          Log in to reply
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                          The ioBroker Community 2014-2023
                          logo