Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Script geht zeitweise auf Pause

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Script geht zeitweise auf Pause

    This topic has been deleted. Only users with topic management privileges can see it.
    • Negalein
      Negalein Global Moderator @AlCalzone last edited by

      @AlCalzone sagte in Script geht zeitweise auf Pause:

      Dann hat eine der Stationen gerade keine Preisinformation (Zeile 52/53)
      Füge in Zeile 41 folgendes ein:

      Danke

      Werde es beobachten.

      AlCalzone 1 Reply Last reply Reply Quote 0
      • AlCalzone
        AlCalzone Developer @Negalein last edited by

        @Negalein Hab nochmal bearbeitet, bitte beachten

        Negalein 1 Reply Last reply Reply Quote 0
        • Negalein
          Negalein Global Moderator @AlCalzone last edited by Negalein

          @AlCalzone sagte in Script geht zeitweise auf Pause:

          Hab nochmal bearbeitet, bitte beachten

          Danke

          Also

          	if (gasStation[index].prices.length < 1) continue;
          

          wieder raus
          und nach Zeile 18

           gasStation = gasStation.filter(g => g.prices.length > 0);
          

          rein.

          Sieht dann so aus?

           var gasStation = JSON.parse(obj.state.val);
              gasStation = gasStation.filter(g => g.prices.length > 0);
              if (gasStation.length === 0) return;
          
          AlCalzone 1 Reply Last reply Reply Quote 0
          • AlCalzone
            AlCalzone Developer @Negalein last edited by

            @Negalein Jup! Allerdings bitte selbst testen, hab ich von unterwegs getippselt.

            Negalein 2 Replies Last reply Reply Quote 0
            • Negalein
              Negalein Global Moderator @AlCalzone last edited by

              @AlCalzone sagte in Script geht zeitweise auf Pause:

              Allerdings bitte selbst testen, hab ich von unterwegs getippselt.

              werd es mal ein paar Tage beobachten und mich wieder melden.

              Danke erstmal!

              1 Reply Last reply Reply Quote 0
              • Negalein
                Negalein Global Moderator @AlCalzone last edited by

                @AlCalzone sagte in Script geht zeitweise auf Pause:

                Allerdings bitte selbst testen, hab ich von unterwegs getippselt.

                kurze Rückmeldung!

                Bis jetzt ist das Script einwandfrei durchgelaufen!

                Danke nochmals

                1 Reply Last reply Reply Quote 0
                • Negalein
                  Negalein Global Moderator last edited by

                  @AlCalzone

                  gestern ist das Script wieder in Pause gegangen.
                  Diesmal mit einem anderen Fehler (filter is not a function).
                  Das ganze ist von 03:26 bis 06:54 (hab nicht alles angehänt, da immer die gleiche Meldung) aufgetreten.

                  Kann man das irgendwie beheben? Oder liegt es an der zu parsenden Seite?

                  Falls es nicht zu beheben/umgehen ist, gibt es eine Möglichkeit ein Script zu überwachen, damit ich zumindest eine Benachrichtigung auf Telegram/Alexa bekomme?

                  Danke dir

                  2020-01-22 03:26:02.812  - info: javascript.0 (22538) script.js.common.Spritpreisrechner: Start Spritvergleich
                  2020-01-22 03:26:02.814  - error: javascript.0 (22538) Error in callback: TypeError: gasStation.filter is not a function
                  2020-01-22 03:26:02.814  - error: javascript.0 (22538)     at Object.<anonymous> (script.js.common.Spritpreisrechner:19:29)
                  2020-01-22 03:26:02.814  - error: javascript.0 (22538)     at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1101:38)
                  2020-01-22 03:26:02.814  - error: javascript.0 (22538)     at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:439:25)
                  2020-01-22 03:26:02.814  - error: javascript.0 (22538)     at change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:4745:37)
                  2020-01-22 03:26:02.814  - error: javascript.0 (22538)     at Immediate.setImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:226:41)
                  2020-01-22 03:26:02.815  - error: javascript.0 (22538)     at runCallback (timers.js:705:18)
                  2020-01-22 03:26:02.815  - error: javascript.0 (22538)     at tryOnImmediate (timers.js:676:5)
                  2020-01-22 03:26:02.815  - error: javascript.0 (22538)     at processImmediate (timers.js:658:5)
                  2020-01-22 03:26:52.805  - info: javascript.0 (22538) script.js.common.Spritpreisrechner: Start Spritvergleich
                  2020-01-22 03:26:52.806  - error: javascript.0 (22538) Error in callback: TypeError: gasStation.filter is not a function
                  2020-01-22 03:26:52.807  - error: javascript.0 (22538)     at Object.<anonymous> (script.js.common.Spritpreisrechner:19:29)
                  2020-01-22 03:26:52.807  - error: javascript.0 (22538)     at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1101:38)
                  2020-01-22 03:26:52.807  - error: javascript.0 (22538)     at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:439:25)
                  2020-01-22 03:26:52.807  - error: javascript.0 (22538)     at change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:4745:37)
                  2020-01-22 03:26:52.807  - error: javascript.0 (22538)     at Immediate.setImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:226:41)
                  2020-01-22 03:26:52.807  - error: javascript.0 (22538)     at runCallback (timers.js:705:18)
                  2020-01-22 03:26:52.807  - error: javascript.0 (22538)     at tryOnImmediate (timers.js:676:5)
                  2020-01-22 03:26:52.807  - error: javascript.0 (22538)     at processImmediate (timers.js:658:5)
                  2020-01-22 03:27:02.804  - info: javascript.0 (22538) script.js.common.Spritpreisrechner: Start Spritvergleich
                  2020-01-22 03:27:02.805  - error: javascript.0 (22538) Error in callback: TypeError: gasStation.filter is not a function
                  2020-01-22 03:27:02.805  - error: javascript.0 (22538)     at Object.<anonymous> (script.js.common.Spritpreisrechner:19:29)
                  2020-01-22 03:27:02.805  - error: javascript.0 (22538)     at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1101:38)
                  2020-01-22 03:27:02.806  - error: javascript.0 (22538)     at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:439:25)
                  2020-01-22 03:27:02.806  - error: javascript.0 (22538)     at change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:4745:37)
                  2020-01-22 03:27:02.806  - error: javascript.0 (22538)     at Immediate.setImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:226:41)
                  2020-01-22 03:27:02.806  - error: javascript.0 (22538)     at runCallback (timers.js:705:18)
                  2020-01-22 03:27:02.806  - error: javascript.0 (22538)     at tryOnImmediate (timers.js:676:5)
                  2020-01-22 03:27:02.806  - error: javascript.0 (22538)     at processImmediate (timers.js:658:5)
                  2020-01-22 03:27:32.803  - info: javascript.0 (22538) script.js.common.Spritpreisrechner: Start Spritvergleich
                  2020-01-22 03:27:32.804  - error: javascript.0 (22538) Error in callback: TypeError: gasStation.filter is not a function
                  2020-01-22 03:27:32.805  - error: javascript.0 (22538)     at Object.<anonymous> (script.js.common.Spritpreisrechner:19:29)
                  2020-01-22 03:27:32.805  - error: javascript.0 (22538)     at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1101:38)
                  2020-01-22 03:27:32.808  - error: javascript.0 (22538)     at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:439:25)
                  2020-01-22 03:27:32.808  - error: javascript.0 (22538)     at change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:4745:37)
                  2020-01-22 03:27:32.808  - error: javascript.0 (22538)     at Immediate.setImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:226:41)
                  2020-01-22 03:27:32.808  - error: javascript.0 (22538)     at runCallback (timers.js:705:18)
                  2020-01-22 03:27:32.808  - error: javascript.0 (22538)     at tryOnImmediate (timers.js:676:5)
                  2020-01-22 03:27:32.809  - error: javascript.0 (22538)     at processImmediate (timers.js:658:5)
                  

                  sigi234 T AlCalzone 3 Replies Last reply Reply Quote 0
                  • sigi234
                    sigi234 Forum Testing Most Active @Negalein last edited by

                    @Negalein sagte in Script geht zeitweise auf Pause:

                    gestern ist das Script wieder in Pause gegangen.

                    Jupp, hatte ich Heute auch.

                    1 Reply Last reply Reply Quote 0
                    • T
                      ticaki Developer @Negalein last edited by ticaki

                      @Negalein

                      if (!isScriptActive("Test")) {
                          runScript("Test");
                      // oder sende msg.
                      }
                      

                      Hoffe das hilft.

                      Negalein 1 Reply Last reply Reply Quote 0
                      • Negalein
                        Negalein Global Moderator @ticaki last edited by

                        @ticaki sagte in Script geht zeitweise auf Pause:

                        Hoffe das hilft.

                        Danke

                        Das wird als eigenes Script angelegt?

                        T 1 Reply Last reply Reply Quote 0
                        • T
                          ticaki Developer @Negalein last edited by ticaki

                          @Negalein

                          Ja. Weiß nur nicht wie das Trennzeichen für Unterordner aussieht. 🙂

                          EDIT: must du alle x Zeiteinheiten per Cron ausführen lassen.

                          var gasStation = JSON.parse(obj.state.val); 
                          if (gasStation.length === 0) return;
                          gasStation = gasStation.filter(g => g.prices.length > 0);
                          

                          sieht das in deinem Script so aus?

                          Negalein 1 Reply Last reply Reply Quote 0
                          • Negalein
                            Negalein Global Moderator @ticaki last edited by

                            @ticaki sagte in Script geht zeitweise auf Pause:

                            sieht das in deinem Script so aus?

                            So schaut das Script aus

                            //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                            //  "Spritpreise_AT v.0.5"                                                                                                              //
                            //  e-control Spritpreise                                                                                                               //    
                            //  ursprüngl. Script von steinejo_io vom                                                                                               //
                            //                                                                                                                                      //
                            //  Zwingend erforderlich sind der Parser Adapter und die URL aus der API. Links und Hilfe zum Erstellemn findet ihr im Folgenden Lnk:  //
                            //  https://forum.iobroker.net/topic/20314/skripten-des-e-control-spritpreisrechners                                                    //
                            //  Das manuelle Anlegen von Daenpunkten ist nicht mehr notwendig. erledigt das Script beim ersten Aufruf.                              //
                            //  Auf das "E" Zeichen habe ich verzichtet, da es in VIS genz einfach an der jeweils gewünschten Stelle produzierbar ist.              //
                            //                                                                                                                                      //
                            //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                             
                            on({id: "parser.0.Spritpreisrechner"/*Spritpreisrechner*/, change: 'any'}, function(obj)
                            {
                            log("Start Spritvergleich");
                             
                                var gasStation = JSON.parse(obj.state.val);
                                gasStation = gasStation.filter(g => g.prices.length > 0);
                                if (gasStation.length === 0) return;
                                //Aral=1, eni=2, Shell=3, OMV=4, avanti=5, bp=6, JET=7, Turmöl=8, Lagerhaus=9, AVIA=10, A1=11, Diskont=12, IQ=13
                                var arrMarke = ['Aral', 'eni', 'Shell', 'OMV', 'avanti', 'BP', 'JET', 'Turmöl', 'Lagerhaus', 'AVIA', 'A1', 'Diskont', 'DISKONT', 'IQ', 'SB-Tankstelle', 'bp', 'Land', 'Bp'];
                            	var i = 0;
                                for (var i = 1; i <= 5; i++) {
                                    // console.log(i);
                                    // console.log("javascript.0.Sprit_AT.name_"+i);
                                    createState("javascript.0.Sprit_AT.Treffer_"+i+".Name_"+i, {type: "string", name: "Platz "+i, read: true, write: true});
                                    createState("javascript.0.Sprit_AT.Treffer_"+i+".Preis_"+i, {type: "string", name: "Platz "+i, read: true, write: true});
                                    createState("javascript.0.Sprit_AT.Treffer_"+i+".PreisP_"+i, {type: "string", name: "Platz "+i, read: true, write: true});
                            		createState("javascript.0.Sprit_AT.Treffer_"+i+".Strasse_"+i, {type: "string", name: "Platz "+i, read: true, write: true});
                                    createState("javascript.0.Sprit_AT.Treffer_"+i+".PLZ_Ort_"+i, {type: "string", name: "Platz "+i, read: true, write: true});
                                    createState("javascript.0.Sprit_AT.Treffer_"+i+".Logo_"+i, {type: "number", name: "Logo "+i, read: true, write: true});
                            		createState("javascript.0.Sprit_AT.Treffer_"+i+".Latitude_"+i, {type: "number", name: "Latitude "+i, read: true, write: true});
                            		createState("javascript.0.Sprit_AT.Treffer_"+i+".Longitude_"+i, {type: "number", name: "Longitude "+i, read: true, write: true});
                            		createState("javascript.0.Sprit_AT.Treffer_"+i+".offen_"+i, {type: "boolean", name: "offen "+i, read: true, write: true});
                            	}
                            	
                             
                                var index = 0;
                                //for (index = 0; index < gasStation.length; ++index) {
                                for (index = 0; index <= 4; ++index) {
                            	if (gasStation[index].prices.length < 1) continue;
                            	var arrname = gasStation[index].name.split(' ');
                            		if (arrname.length > 0) {
                            				var markenname = arrname[0];
                            			}
                            			else
                            			{
                            				var markenname = gasStation[index].name;
                            			}
                            		var station = gasStation[index].name;
                                setState("javascript.0.Sprit_AT.Treffer_"+(index+1)+".Name_"+(index+1), gasStation[index].name);
                                setState("javascript.0.Sprit_AT.Treffer_"+(index+1)+".Preis_"+(index+1), (gasStation[index].prices[0].amount).toString().replace(".",","));
                                setState("javascript.0.Sprit_AT.Treffer_"+(index+1)+".PreisP_"+(index+1), (gasStation[index].prices[0].amount).toString().replace(".","."));
                            	setState("javascript.0.Sprit_AT.Treffer_"+(index+1)+".Strasse_"+(index+1), (gasStation[index].location.address));
                                setState("javascript.0.Sprit_AT.Treffer_"+(index+1)+".PLZ_Ort_"+(index+1), (gasStation[index].location.postalCode) + " " + (gasStation[index].location.city));
                                setState("javascript.0.Sprit_AT.Treffer_"+(index+1)+".Latitude_"+(index+1), (gasStation[index].location.latitude));
                            	setState("javascript.0.Sprit_AT.Treffer_"+(index+1)+".Longitude_"+(index+1), (gasStation[index].location.longitude));
                            	setState("javascript.0.Sprit_AT.Treffer_"+(index+1)+".offen_"+(index+1), (gasStation[index].open));
                            	
                            	//Aral=1, eni=2, Shell=3, OMV=4, avanti=5, bp=6, JET=7, Turmöl=8, Lagerhaus=9, AVIA=10, A1=11, Diskont=12, IQ=13
                            	
                            	var markennameklein=markenname.toLowerCase();
                            	var x= 0;
                            	for (x=0; x < arrMarke.length; x++) {
                            		var arrMklein=arrMarke[x].toLowerCase();
                            		//console.log("x=" + x + "/ Markennameklein =" + markennameklein + "/ Array =" + arrMklein);
                            		if (arrMklein == markennameklein) {
                            			setState("javascript.0.Sprit_AT.Treffer_"+(index+1)+".Logo_"+(index+1), (x+1));
                            		}
                            	}
                            	
                            	}
                             
                            log("Ende Spritvergleich");
                            });
                            

                            must du alle x Zeiteinheiten per Cron ausführen lassen.

                            Das wird vom Parser geregelt. Der fragt die Adresse alle 10 Sek. ab und das Script reagiert darauf.

                            T 1 Reply Last reply Reply Quote 0
                            • T
                              ticaki Developer @Negalein last edited by ticaki

                              @Negalein
                              Dein letzter Fehler sieht so aus als wenn der Parser keine Daten geliefert hat und deshalb Zeile 18 gescheitert ist

                              Versuche bitte mal folgendes: 2 Zeilen vertauschen und gasStation auf array/object prüfen.

                              var gasStation = JSON.parse(obj.state.val);
                              if (typeof gasStation != 'object' || gasStation.length === 0) return;
                              gasStation = gasStation.filter(g => g.prices.length > 0);
                              if (gasStation.length === 0) return;
                              

                              EDIT: ups

                              Negalein 1 Reply Last reply Reply Quote 0
                              • Negalein
                                Negalein Global Moderator @ticaki last edited by

                                @ticaki sagte in Script geht zeitweise auf Pause:

                                Versuche bitte mal folgendes: 2 Zeilen vertauschen und gasStation auf array/object prüfen.

                                Danke
                                Habs eingefügt/vertauscht und werde es die nächsten Tage beobachten.

                                T 1 Reply Last reply Reply Quote 0
                                • T
                                  ticaki Developer @Negalein last edited by

                                  @Negalein
                                  hab editiert bitte beachten

                                  Negalein 1 Reply Last reply Reply Quote 0
                                  • Negalein
                                    Negalein Global Moderator @ticaki last edited by

                                    @ticaki sagte in Script geht zeitweise auf Pause:

                                    hab editiert bitte beachten

                                    Also

                                        var gasStation = JSON.parse(obj.state.val);
                                        gasStation = gasStation.filter(g => g.prices.length > 0);
                                        if (gasStation.length === 0) return;
                                    

                                    gegen

                                    var gasStation = JSON.parse(obj.state.val);
                                    if (typeof gasStation != 'object' || gasStation.length === 0) return;
                                    gasStation = gasStation.filter(g => g.prices.length > 0);
                                    if (gasStation.length === 0) return;
                                    

                                    tauschen

                                    T 1 Reply Last reply Reply Quote 0
                                    • T
                                      ticaki Developer @Negalein last edited by ticaki

                                      @Negalein
                                      Jup, habs nochmal verbessert. Mache zwar viel mit Arrays, mußte aber bis dato noch nicht prüfen, ob es auch eines ist 🙂

                                      var gasStation = JSON.parse(obj.state.val);
                                      if (!Array.isArray(gasStation) || gasStation.length === 0) return;
                                      gasStation = gasStation.filter(g => g.prices.length > 0);
                                      if (gasStation.length === 0) return;
                                      
                                      Negalein 1 Reply Last reply Reply Quote 0
                                      • Negalein
                                        Negalein Global Moderator @ticaki last edited by

                                        @ticaki sagte in Script geht zeitweise auf Pause:

                                        habs nochmal verbessert

                                        Thx

                                        sigi234 1 Reply Last reply Reply Quote 0
                                        • sigi234
                                          sigi234 Forum Testing Most Active @Negalein last edited by sigi234

                                          @Negalein sagte in Script geht zeitweise auf Pause:

                                          @ticaki sagte in Script geht zeitweise auf Pause:

                                          habs nochmal verbessert

                                          Thx

                                          Kann man das Skript jetzt oben benutzen? Ist das das aktuelle.

                                          Negalein 1 Reply Last reply Reply Quote 0
                                          • Negalein
                                            Negalein Global Moderator @sigi234 last edited by

                                            @sigi234 sagte in Script geht zeitweise auf Pause:

                                            Kann man das Skript jetzt oben benutzen? Ist das das aktuelle.

                                            Ja, diese 4 Zeilen

                                            var gasStation = JSON.parse(obj.state.val);
                                            if (!Array.isArray(gasStation) || gasStation.length === 0) return;
                                            gasStation = gasStation.filter(g => g.prices.length > 0);
                                            if (gasStation.length === 0) return;
                                            

                                            statt diesen nehmen

                                            var gasStation = JSON.parse(obj.state.val);
                                            gasStation = gasStation.filter(g => g.prices.length > 0);
                                            if (gasStation.length === 0) return;
                                            
                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            900
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript
                                            7
                                            32
                                            1316
                                            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