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.
    • AlCalzone
      AlCalzone Developer @Negalein last edited by AlCalzone

      @Negalein Dann hat eine der Stationen gerade keine Preisinformation (Zeile 52/53). Die sollte das Skript dann bestenfalls ignorieren.
      Dazu nach Zeile 18 folgendes einfügen:

      gasStation = gasStation.filter(g => g.prices.length > 0);
      
      Negalein 1 Reply Last reply Reply Quote 0
      • 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
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            823
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

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