Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Helium API per GET abrufen (incl. User-Agent)

    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

    Helium API per GET abrufen (incl. User-Agent)

    This topic has been deleted. Only users with topic management privileges can see it.
    • U
      Unbekannt @OliverIO last edited by

      @oliverio
      Vielen Dank.
      Im Grunde möchte ich nur vier Datenobjekte mit Daten füttern:

      • Walletguthaben

      • HNT letzte 24h

      • HNT letzte 7 Tage

      • HNT letzte 30 Tage

      Bei meinen urls nutze ich die Bucketfunktion nicht, sondern bekomme nur eine Zeile wo ich dann den data.total Wert abgreifen kann.

      Ich habe gestern ein wenig rum getestet und festgestellt, dass sich das Skript (oder API oder was auch immer ) bei zu vielen gleichzeitigen Abrufen verschluckt und der Wert data.total dann bei einem der Datenpunkte (variiert meist) nicht ausgelesen werden kann. Manchmal geht es gut, und man bekommt alle vier Daten ausgelesen, häufig waren es aber nur 3. Daher habe ich einen Timeout eingebaut. Damit funktioniert es zuverlässig.
      Zum Testen habe ich als Basis dein erstes Skript genutzt, aber auch dein zuletzt gepostetes Skript für meine Bedürfnisse angepasst.

      Skript1

      var dp1 = "0_userdata.0.Helium.TrendyGunmetalHare.Total";
      var dp2 = "0_userdata.0.Helium.TrendyGunmetalHare.letzte24Stunden";
      var dp3 = "0_userdata.0.Helium.TrendyGunmetalHare.letzte7Tage";
      var dp4 = "0_userdata.0.Helium.TrendyGunmetalHare.letzte30Tage";
      var axios = require("axios");
      var v_url1 = 'https://api.helium.io/v1/hotspots/112WPeSWTzHYzbQRZhQ95mJqpXjkeB1JpBLUS3amEAZiMANMH8Ty/rewards/sum/?max_time=2029-01-01T00:00:01Z&min_time=2021-01-01T00:00:01Z'
      var v_url2 = 'https://api.helium.io/v1/hotspots/112WPeSWTzHYzbQRZhQ95mJqpXjkeB1JpBLUS3amEAZiMANMH8Ty/rewards/sum/?min_time=-1%20day' 
      var v_url3 = 'https://api.helium.io/v1/hotspots/112WPeSWTzHYzbQRZhQ95mJqpXjkeB1JpBLUS3amEAZiMANMH8Ty/rewards/sum/?min_time=-7%20day'
      var v_url4 = 'https://api.helium.io/v1/hotspots/112WPeSWTzHYzbQRZhQ95mJqpXjkeB1JpBLUS3amEAZiMANMH8Ty/rewards/sum/?min_time=-30%20day'
      setTimeout(async function writeValue1() {
             var data = await getData1();
             log(data);
             setState(dp1,data.total);
         },1000);
      async function getData1() {
         try {
             let res = await axios.get(v_url1, { headers: { 'User-Agent': 'Mozilla/5.0.' } });
             return res.data.data;
         } catch (e) {
             log(e)
         }
      }
      setTimeout(async function writeValue2() {
             var data = await getData2();
             log(data);
             setState(dp2,data.total);
         },2000);
      async function getData2() {
         try {
             let res = await axios.get(v_url2, { headers: { 'User-Agent': 'Mozilla/5.0.' } });
             return res.data.data;
         } catch (e) {
             log(e)
         }
      }
      setTimeout(async function writeValue3() {
             var data = await getData3();
             log(data);
             setState(dp3,data.total);
         },3000);
      async function getData3() {
         try {
             let res = await axios.get(v_url3, { headers: { 'User-Agent': 'Mozilla/5.0.' } });
             return res.data.data;
         } catch (e) {
             log(e)
         }
      }
      setTimeout(async function writeValue4() {
             var data = await getData4();
             log(data);
             setState(dp4,data.total);
         },4000);
      async function getData4() {
         try {
             let res = await axios.get(v_url4, { headers: { 'User-Agent': 'Mozilla/5.0.' } });
             return res.data.data;
         } catch (e) {
             log(e)
         }
      }
      schedule('*/30 * * * *',function() {
         writeValue1();
         writeValue2();
         writeValue3();
         writeValue4();
      }); 
      //test();
      writeValue1();
      writeValue2();
      writeValue3();
      writeValue4();
      

      Skript2

      var axios = require("axios");
      
      setTimeout(async function writeValueOverview() {
         var dp1 = "0_userdata.0.Helium.NoisyMauveOsprey.Total";
         var url1 = 'https://api.helium.io/v1/hotspots/11wWXAuRHec8cfqLz3tc5CaVbMhUX4SW7YWHGRYGRm8WqULrFtY/rewards/sum/?max_time=2029-01-01T00:00:01Z&min_time=2022-08-01T00:00:01Z'
      
         var data = await getData(url1); //abruf der daten
         log(data);  // ausgabe des ergebnisses auf der debug-console
         setState(dp1,data.total); // schreiben der summe in datenpunkt
      }, 1000);
      setTimeout(async function writeValueReward1() {
         var dp2 = "0_userdata.0.Helium.NoisyMauveOsprey.letzte24Stunden";
         var url2 = 'https://api.helium.io/v1/hotspots/11wWXAuRHec8cfqLz3tc5CaVbMhUX4SW7YWHGRYGRm8WqULrFtY/rewards/sum/?min_time=-1%20day'
      
         var data = await getData(url2); //abruf der daten
         log(data);  // ausgabe des ergebnisses auf der debug-console
         setState(dp2,data.total); // schreiben des rewards in datenpunkt
      }, 2000);
      setTimeout(async function writeValueReward2() {
         var dp3 = "0_userdata.0.Helium.NoisyMauveOsprey.letzte7Tage";
         var url3 = 'https://api.helium.io/v1/hotspots/11wWXAuRHec8cfqLz3tc5CaVbMhUX4SW7YWHGRYGRm8WqULrFtY/rewards/sum/?min_time=-7%20day'
      
         var data = await getData(url3); //abruf der daten
         log(data);  // ausgabe des ergebnisses auf der debug-console
         setState(dp3,data.total); // schreiben des rewards in datenpunk
      }, 3000);
      setTimeout(async function writeValueReward3() {
         var dp4 = "0_userdata.0.Helium.NoisyMauveOsprey.letzte30Tage";
         var url4 = 'https://api.helium.io/v1/hotspots/11wWXAuRHec8cfqLz3tc5CaVbMhUX4SW7YWHGRYGRm8WqULrFtY/rewards/sum/?min_time=-30%20day'
      
         var data = await getData(url4); //abruf der daten
         log(data);  // ausgabe des ergebnisses auf der debug-console
         setState(dp4,data.total); // schreiben des rewards in datenpunk
      }, 4000);
      async function getData(url1) {
         try {
             let res = await axios.get(url1, { headers: { 'User-Agent': 'Mozilla/5.0.' } });
             return res.data.data;
         } catch (e) {
             log(e)
         }
      }
      async function getData(url2) {
         try {
             let res = await axios.get(url2, { headers: { 'User-Agent': 'Mozilla/5.0.' } });
             return res.data.data;
         } catch (e) {
             log(e)
         }
      }
      async function getData(url3) {
         try {
             let res = await axios.get(url3, { headers: { 'User-Agent': 'Mozilla/5.0.' } });
             return res.data.data;
         } catch (e) {
             log(e)
         }
      }
      async function getData(url4) {
         try {
             let res = await axios.get(url4, { headers: { 'User-Agent': 'Mozilla/5.0.' } });
             return res.data.data;
         } catch (e) {
             log(e)
         }
      } 
      schedule('*/30 * * * *',function() {
         writeValueOverview();
         writeValueReward1();
         writeValueReward2();
         writeValueReward3();
      });
      //test(); 
      writeValueOverview();
      writeValueReward1();
      writeValueReward2();
      writeValueReward3(); 
      

      Bei beiden funktioniert das Auslesen gut, allerdings bekomme ich jeweils drei Fehlerzeilen angezeigt, die ich (wahrscheinlich aus fehlendem Basiswissen) nicht behoben bekomme:

      17.8.2022, 09:48:06.431 [info ]: javascript.0 (1151) Start javascript script.js.Allgemein.Crypto.Helium.TrendyGunmetalHare
      17.8.2022, 09:48:06.479 [info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.TrendyGunmetalHare: registered 0 subscriptions and 1 schedule
      17.8.2022, 09:48:06.481 [error]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.TrendyGunmetalHare: ReferenceError: writeValue1 is not defined
      17.8.2022, 09:48:06.481 [error]: javascript.0 (1151) at script.js.Allgemein.Crypto.Helium.TrendyGunmetalHare:69:1
      17.8.2022, 09:48:06.481 [error]: javascript.0 (1151) at script.js.Allgemein.Crypto.Helium.TrendyGunmetalHare:73:3
      17.8.2022, 09:48:07.658 [info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.TrendyGunmetalHare: {'total':1.39006203,'sum':139006203,'stddev':0.0096834757243116,'min':0,'median':0.00827458,'max':0,'avg':0.013113792735849056}
      17.8.2022, 09:48:08.582 [info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.TrendyGunmetalHare: {'total':0.02237045,'sum':2237045,'stddev':0.0026280645619987,'min':0,'median':0.00729542,'max':0,'avg':0.007456816666666667}
      17.8.2022, 09:48:09.582 [info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.TrendyGunmetalHare: {'total':0.26189041,'sum':26189041,'stddev':0.0094876854151907,'min':0,'median':0.00765452,'max':0,'avg':0.011386539565217391}
      17.8.2022, 09:48:10.577 [info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.TrendyGunmetalHare: {'total':0.8288541,'sum':82885410,'stddev':0.0096992973232438,'min':0,'median':0.00748039,'max':0,'avg':0.012558395454545455}
      
      

      Könntest du mir hierbei nochmal unter die Arme greifen?
      Besten Dank 🙂

      OliverIO 1 Reply Last reply Reply Quote 0
      • OliverIO
        OliverIO @Unbekannt last edited by

        @unbekannt
        Probiere es erst Mal.mit meiner Lösung

        Die fehlerm Ladung ist eigentlich selbst erklärend.
        Die Funktion mit diesem Namen wurde nie definiert
        Die Folgezeilen sind der stacktrace für diesen Fehler

        1 Reply Last reply Reply Quote 0
        • U
          Unbekannt last edited by

          @oliverio

          Wenn ich dein zuletzt gepostetes Skript nutze (plus ergänzend der Timeout), sprich Sktipt2 in meinem letzten Post, dann bekomme ich eine analoge Fehlermeldung:

          17.8.2022, 15:17:02.151 [info ]: javascript.0 (1151) Stop script script.js.Allgemein.Crypto.Helium.test
          17.8.2022, 15:17:02.255 [info ]: javascript.0 (1151) Start javascript script.js.Allgemein.Crypto.Helium.test
          17.8.2022, 15:17:02.291 [info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.test: registered 0 subscriptions and 1 schedule
          17.8.2022, 15:17:02.293 [error]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.test: ReferenceError: writeValueOverview is not defined
          17.8.2022, 15:17:02.293 [error]: javascript.0 (1151) at script.js.Allgemein.Crypto.Helium.test:75:1
          17.8.2022, 15:17:02.293 [error]: javascript.0 (1151) at script.js.Allgemein.Crypto.Helium.test:79:3
          17.8.2022, 15:17:03.451 [info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.test: {'total':0.3685975,'sum':36859750,'stddev':0.0094209479866946,'min':0,'median':0.01122825,'max':0,'avg':0.012710258620689655}
          17.8.2022, 15:17:04.390 [info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.test: {'total':0.06173936,'sum':6173936,'stddev':0.018747958871,'min':0,'median':0.01570541,'max':0,'avg':0.020579786666666666}
          17.8.2022, 15:17:05.389 [info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.test: {'total':0.3685975,'sum':36859750,'stddev':0.0094209479866946,'min':0,'median':0.01122825,'max':0,'avg':0.012710258620689655}
          17.8.2022, 15:17:06.625 [info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.test: {'total':0.3685975,'sum':36859750,'stddev':0.0094209479866946,'min':0,'median':0.01122825,'max':0,'avg':0.012710258620689655}
          
          

          Mir ist bewusst, dass writeValueOverview nicht definiert ist, ich weiß nur nicht wie ich das mache. Thema fehlendes Basiswissen zum Thema Javascript. Bisher habe ich meine Skripte immer irgendwie zusammenkopiert nach dem try&error Prinzip.

          Da in dem Skript vom Prinzip 4 mal der gleiche Code genutzt wird, verstehe ich nicht, warum der Fehler nur bei einer Funktion vorhanden ist und nicht bei allen vieren. Vor allem, weil das Skript ja erfolgreich die Daten holt. Muss ich am Anfang im Skript einfach eine Definition festlegen? Wenn ja, wie mache ich das?

          OliverIO 1 Reply Last reply Reply Quote 0
          • OliverIO
            OliverIO @Unbekannt last edited by

            @unbekannt
            Jetzt wird es durcheinander. Poste bitte die aktuelle Skriptversion zu der das debig Log passt dazu.
            Zu diesem Log kann ich jetzt kein Skriptbeispiel mehr finden

            Da wo du die Funktionen in settimeout callbacks gepackt hast, sind eigentlich immer anonyme Funktionen. Den Namen den du da vergibst gilt nur innerhalb des settimeout Aufrufs
            Daher ist der Name unnötig
            Und der Aufruf weiter unten schlägt fehl

            Das mit settimeout zu machen ist nicht richtig auch wenn es wohl das Problem löst. Irgendwann passt das Zeitverhalten nicht mehr und dann klappt es wieder nicht.

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

            Was funktionierte bei meinem Beispiel konkret nicht?

            U 1 Reply Last reply Reply Quote 0
            • U
              Unbekannt @OliverIO last edited by

              @oliverio
              Ich versuche es mal. Also hier dein Skript mit diesen Anpassungen:

              • Miner ID ergänzt/ausgetauscht
              • Zeile 6 &12 dp2 entfernt (benötige ich nicht)
              • Zeile 9 (url) zu (v_url) geändert (sonst bekomme ich den Fehler, das url nicht definiert ist)
              • Zeile 21 & 29 data.total ergänzt statt Fragezeichen
              • Zeile 30 gelöscht
              • Zeile 42 zum Testen auf jede Minute geändert

              Hier das Skript:

              
              var axios = require("axios");
              
              async function writeValueOverview() {
                 var dp1 = "0_userdata.0.Helium.TrendyGunmetalHare.Total";
                 var v_url = 'https://api.helium.io/v1/hotspots/112WPeSWTzHYzbQRZhQ95mJqpXjkeB1JpBLUS3amEAZiMANMH8Ty/rewards/sum/?max_time=2029-01-01T00:00:01Z&min_time=2021-01-01T00:00:01Z'
              
                 var data = await getData(v_url); //abruf der daten
                 log(data);  // ausgabe des ergebnisses auf der debug-console
                 setState(dp1,data.total); // schreiben der summe in datenpunkt
              }
              
              async function writeValueReward1() {
                 var dp1 = "0_userdata.0.Helium.TrendyGunmetalHare.letzte24Stunden";
                 var url = 'https://api.helium.io/v1/hotspots/112WPeSWTzHYzbQRZhQ95mJqpXjkeB1JpBLUS3amEAZiMANMH8Ty/rewards/sum/?min_time=-1%20day'
              
                 var data = await getData(url); //abruf der daten
                 log(data);  // ausgabe des ergebnisses auf der debug-console
                 setState(dp1,data.total); // schreiben des rewards in datenpunkt
              }
              async function writeValueReward2() {
                 var dp1 = "0_userdata.0.Helium.TrendyGunmetalHare.letzte7Tage";
                 var url = 'https://api.helium.io/v1/hotspots/112WPeSWTzHYzbQRZhQ95mJqpXjkeB1JpBLUS3amEAZiMANMH8Ty/rewards/sum/?min_time=-7%20day'
              
                 var data = await getData(url); //abruf der daten
                 log(data);  // ausgabe des ergebnisses auf der debug-console
                 setState(dp1,data.total); // schreiben des rewards in datenpunk
              }
              
              async function getData(url) {
                 try {
                     let res = await axios.get(url, { headers: { 'User-Agent': 'Mozilla/5.0.' } });
                     return res.data.data;
                 } catch (e) {
                     log(e)
                 }
              }
              
              schedule('*/1 * * * *',function() {
                 writeValueOverview();
                 writeValueReward1();
                 writeValueReward2();
              });
              

              Ich habe das Skript mal laufen gelassen und festgestellt, das Resultat nach jedem Abruf unterschiedlich ist. Mal bekomme ich einen Fehler, mal mehrere und manchmal keine.
              Hier die Ausgabe:

              Fehler Nr.1

              18.8.2022, 14:12:47.301	[info ]: javascript.0 (1151) Stop script script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver
              18.8.2022, 14:12:47.310	[info ]: javascript.0 (1151) Start javascript script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver
              18.8.2022, 14:12:47.318	[info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver: registered 0 subscriptions and 1 schedule
              18.8.2022, 14:13:00.128	[info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver: {'total':0.10191292,'sum':10191292,'stddev':0.010497921837,'min':0,'median':0.01697798,'max':0,'avg':0.016985486666666667}
              18.8.2022, 14:13:00.132	[info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver: {'message':'Request failed with status code 429','name':'AxiosError','config':{'transitional':{'silentJSONParsing':true,'forcedJSONParsing':true,'clarifyTimeoutError':false},'transformRequest':[null],'transformResponse':[null],'timeout':0,'xsrfCookieName':'XSRF-TOKEN','xsrfHeaderName':'X-XSRF-TOKEN','maxContentLength':-1,'maxBodyLength':-1,'env':{},'headers':{'User-Agent':'Mozilla/5.0.'},'method':'get','url':'https://api.helium.io/v1/hotspots/112WPeSWTzHYzbQRZhQ95mJqpXjkeB1JpBLUS3amEAZiMANMH8Ty/rewards/sum/?max_time=2029-01-01T00:00:01Z&min_time=2021-01-01T00:00:01Z'},'code':'ERR_BAD_REQUEST','status':429}
              18.8.2022, 14:13:00.133	[info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver: undefined
              18.8.2022, 14:13:00.136	[error]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver: TypeError: Cannot read property 'total' of undefined
              18.8.2022, 14:13:00.136	[error]: javascript.0 (1151)     at writeValueOverview (script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver:10:23)
              18.8.2022, 14:13:00.361	[info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver: {'message':'Request failed with status code 429','name':'AxiosError','config':{'transitional':{'silentJSONParsing':true,'forcedJSONParsing':true,'clarifyTimeoutError':false},'transformRequest':[null],'transformResponse':[null],'timeout':0,'xsrfCookieName':'XSRF-TOKEN','xsrfHeaderName':'X-XSRF-TOKEN','maxContentLength':-1,'maxBodyLength':-1,'env':{},'headers':{'User-Agent':'Mozilla/5.0.'},'method':'get','url':'https://api.helium.io/v1/hotspots/112WPeSWTzHYzbQRZhQ95mJqpXjkeB1JpBLUS3amEAZiMANMH8Ty/rewards/sum/?min_time=-7%20day'},'code':'ERR_BAD_REQUEST','status':429}
              18.8.2022, 14:13:00.361	[info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver: undefined
              18.8.2022, 14:13:00.362	[error]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver: TypeError: Cannot read property 'total' of undefined
              18.8.2022, 14:13:00.363	[error]: javascript.0 (1151)     at writeValueReward2 (script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver:27:23)
              18.8.2022, 14:13:11.414	[info ]: javascript.0 (1151) Stop script script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver
              


              Fehler Nr.2

              18.8.2022, 14:24:08.120	[info ]: javascript.0 (1151) Start javascript script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver
              18.8.2022, 14:24:08.131	[info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver: registered 0 subscriptions and 1 schedule
              18.8.2022, 14:25:00.125	[info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver: {'message':'Request failed with status code 429','name':'AxiosError','config':{'transitional':{'silentJSONParsing':true,'forcedJSONParsing':true,'clarifyTimeoutError':false},'transformRequest':[null],'transformResponse':[null],'timeout':0,'xsrfCookieName':'XSRF-TOKEN','xsrfHeaderName':'X-XSRF-TOKEN','maxContentLength':-1,'maxBodyLength':-1,'env':{},'headers':{'User-Agent':'Mozilla/5.0.'},'method':'get','url':'https://api.helium.io/v1/hotspots/112WPeSWTzHYzbQRZhQ95mJqpXjkeB1JpBLUS3amEAZiMANMH8Ty/rewards/sum/?min_time=-7%20day'},'code':'ERR_BAD_REQUEST','status':429}
              18.8.2022, 14:25:00.126	[info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver: undefined
              18.8.2022, 14:25:00.127	[error]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver: TypeError: Cannot read property 'total' of undefined
              18.8.2022, 14:25:00.127	[error]: javascript.0 (1151)     at writeValueReward2 (script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver:27:23)
              18.8.2022, 14:25:00.131	[info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver: {'total':1.49197495,'sum':149197495,'stddev':0.0097176223317734,'min':0,'median':0.00827458,'max':0,'avg':0.013321204910714285}
              18.8.2022, 14:25:00.141	[info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver: {'total':0.10191292,'sum':10191292,'stddev':0.010497921837,'min':0,'median':0.01697798,'max':0,'avg':0.016985486666666667}
              


              hier mal kein Fehler

              18.8.2022, 14:26:00.045	[info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver: {'total':0.10191292,'sum':10191292,'stddev':0.010497921837,'min':0,'median':0.01697798,'max':0,'avg':0.016985486666666667}
              18.8.2022, 14:26:00.049	[info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver: {'total':1.49197495,'sum':149197495,'stddev':0.0097176223317734,'min':0,'median':0.00827458,'max':0,'avg':0.013321204910714285}
              18.8.2022, 14:26:00.131	[info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver: {'total':0.33453871,'sum':33453871,'stddev':0.010191871516,'min':0,'median':0.00766701,'max':0,'avg':0.0133815484}
              


              Fehler Nr.3

              18.8.2022, 14:29:00.047	[info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver: {'total':0.33453871,'sum':33453871,'stddev':0.010191871516,'min':0,'median':0.00766701,'max':0,'avg':0.0133815484}
              18.8.2022, 14:29:00.121	[info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver: {'message':'Request failed with status code 429','name':'AxiosError','config':{'transitional':{'silentJSONParsing':true,'forcedJSONParsing':true,'clarifyTimeoutError':false},'transformRequest':[null],'transformResponse':[null],'timeout':0,'xsrfCookieName':'XSRF-TOKEN','xsrfHeaderName':'X-XSRF-TOKEN','maxContentLength':-1,'maxBodyLength':-1,'env':{},'headers':{'User-Agent':'Mozilla/5.0.'},'method':'get','url':'https://api.helium.io/v1/hotspots/112WPeSWTzHYzbQRZhQ95mJqpXjkeB1JpBLUS3amEAZiMANMH8Ty/rewards/sum/?min_time=-1%20day'},'code':'ERR_BAD_REQUEST','status':429}
              18.8.2022, 14:29:00.121	[info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver: undefined
              18.8.2022, 14:29:00.122	[error]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver: TypeError: Cannot read property 'total' of undefined
              18.8.2022, 14:29:00.122	[error]: javascript.0 (1151)     at writeValueReward1 (script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver:19:23)
              18.8.2022, 14:29:00.126	[info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver: {'total':1.49197495,'sum':149197495,'stddev':0.0097176223317734,'min':0,'median':0.00827458,'max':0,'avg':0.013321204910714285}
              18.8.2022, 14:30:00.044	[info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver: {'total':1.49197495,'sum':149197495,'stddev':0.0097176223317734,'min':0,'median':0.00827458,'max':0,'avg':0.013321204910714285}
              18.8.2022, 14:30:00.125	[info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver: {'total':0.10191292,'sum':10191292,'stddev':0.010497921837,'min':0,'median':0.01697798,'max':0,'avg':0.016985486666666667}
              18.8.2022, 14:30:00.128	[info ]: javascript.0 (1151) script.js.Allgemein.Crypto.Helium.Originalskript_von_Oliver: {'total':0.33453871,'sum':33453871,'stddev':0.010191871516,'min':0,'median':0.00766701,'max':0,'avg':0.0133815484}
              
              

              Wie du siehst geht es manchmal gut, manchmal aber auch nicht. Wie würdest du das lösen?

              OliverIO 1 Reply Last reply Reply Quote 0
              • OliverIO
                OliverIO @Unbekannt last edited by

                @unbekannt
                Schau ich mir Anfang der nö hatten Woche im Detail an. Bin Grad ni ht an einem Rechner

                Der Fehler 429 kann 2 Möglichkeiten haben.
                Einmal too many requests. Anbieter versuchen die Häufigkeit der Anfragen in einem bestimmten Zeitabschnitt zu limitieren. Das muss man beachten. Hab aber auf die schnelle keine Regel gefunden
                Allerdings hab ich gefunden das man einen User-Agent String mit angeben muss da ansonsten genau mit 429 abgebrochen wird. Evtl findest du dazu Details. Wenn du im Internet suchst dann findest Angaben bspw zu Chrome oder Firefox. Welcher ist relativ egal

                U 1 Reply Last reply Reply Quote 0
                • U
                  Unbekannt @OliverIO last edited by Unbekannt

                  @oliverio
                  Ja, dass der Fehler wegen zu vieler Anfragen kommt, hatte ich auch recherchiert, daher wollte ich ja den Timeout setzen. Aber du meintest ja, dass es so wie ich es gemacht habe nicht optimal ist.

                  Ich habe jetzt einen anderen Ansatz gewählt und einfach mal ganz pragmatisch den cronjob angepasst, damit läuft das Skript auf jeden Fall fehlerfrei.

                  Ich danke dir auf jeden Fall für deinen Input, ich habe eine Menge gelernt 🙂

                  Für die, die es interessiert, hier das funktionierende Skript. Ihr müsst nur "dp1" und die Miner-ID anpassen:

                  
                  var axios = require("axios");
                  
                  async function writeValueOverview() {
                     var dp1 = "0_userdata.0.Helium.NoisyMauveOsprey.Total";
                     var url = 'https://api.helium.io/v1/hotspots/11wWXAuRHec8cfqLz3tc5CaVbMhUX4SW7YWHGRYGRm8WqULrFtY/rewards/sum/?max_time=2029-01-01T00:00:01Z&min_time=2022-08-01T00:00:01Z'
                  
                     var data = await getData(url); //abruf der daten
                     log(data);  // ausgabe des ergebnisses auf der debug-console
                     setState(dp1,data.total); // schreiben der summe in datenpunkt
                  }
                  
                  async function writeValueReward1() {
                     var dp1 = "0_userdata.0.Helium.NoisyMauveOsprey.letzte24Stunden";
                     var url = 'https://api.helium.io/v1/hotspots/11wWXAuRHec8cfqLz3tc5CaVbMhUX4SW7YWHGRYGRm8WqULrFtY/rewards/sum/?min_time=-1%20day'
                  
                     var data = await getData(url); //abruf der daten
                     log(data);  // ausgabe des ergebnisses auf der debug-console
                     setState(dp1,data.total); // schreiben des rewards in datenpunkt
                  }
                  
                  async function writeValueReward2() {
                     var dp1 = "0_userdata.0.Helium.NoisyMauveOsprey.letzte7Tage";
                     var url = 'https://api.helium.io/v1/hotspots/11wWXAuRHec8cfqLz3tc5CaVbMhUX4SW7YWHGRYGRm8WqULrFtY/rewards/sum/?min_time=-7%20day'
                  
                     var data = await getData(url); //abruf der daten
                     log(data);  // ausgabe des ergebnisses auf der debug-console
                     setState(dp1,data.total); // schreiben des rewards in datenpunk
                  }
                  
                  async function writeValueReward3() {
                     var dp1 = "0_userdata.0.Helium.NoisyMauveOsprey.letzte30Tage";
                     var url = 'https://api.helium.io/v1/hotspots/11wWXAuRHec8cfqLz3tc5CaVbMhUX4SW7YWHGRYGRm8WqULrFtY/rewards/sum/?min_time=-30%20day'
                  
                     var data = await getData(url); //abruf der daten
                     log(data);  // ausgabe des ergebnisses auf der debug-console
                     setState(dp1,data.total); // schreiben des rewards in datenpunk
                  } 
                  
                  async function getData(url) {
                     try {
                         let res = await axios.get(url, { headers: { 'User-Agent': 'Mozilla/5.0.' } });
                         return res.data.data;
                     } catch (e) {
                         log(e)
                     }
                  }
                  
                  schedule('35 0,30 * * * *',function() {
                     writeValueOverview();
                  });
                  schedule('40 0,30 * * * *',function() {
                     writeValueReward1();
                  });
                  schedule('45 0,30 * * * *',function() {
                     writeValueReward2();
                  });
                  schedule('50 0,30 * * * *',function() {
                     writeValueReward3();
                  });
                  

                  OliverIO 2 Replies Last reply Reply Quote 0
                  • OliverIO
                    OliverIO @Unbekannt last edited by OliverIO

                    @unbekannt
                    das hatte hier ich als andere alternative auch geschrieben
                    24d54e68-8fed-4c60-b86d-3a65c8cf9689-image.png

                    die skript detail sachen kann ich fühestens erst ab montag wieder schauen

                    1 Reply Last reply Reply Quote 0
                    • OliverIO
                      OliverIO @Unbekannt last edited by OliverIO

                      @unbekannt

                      ich habe den folgenden Code ausprobiert. Das schedule habe ich aus testzwecken entfernt.
                      Er hat einwandfrei funktioniert.
                      Gab es jetzt noch ein Problem.
                      Den Useragent hast ja auch ergänzt.
                      Hab daher nun kein 429 mehr erhalten.

                       
                      var axios = require("axios");
                       
                      async function writeValueOverview() {
                         var dp1 = "0_userdata.0.Helium.TrendyGunmetalHare.Total";
                         var v_url = 'https://api.helium.io/v1/hotspots/112WPeSWTzHYzbQRZhQ95mJqpXjkeB1JpBLUS3amEAZiMANMH8Ty/rewards/sum/?max_time=2029-01-01T00:00:01Z&min_time=2021-01-01T00:00:01Z'
                       
                         var data = await getData(v_url); //abruf der daten
                         log(data);  // ausgabe des ergebnisses auf der debug-console
                         setState(dp1,data.total); // schreiben der summe in datenpunkt
                      }
                       
                      async function writeValueReward1() {
                         var dp1 = "0_userdata.0.Helium.TrendyGunmetalHare.letzte24Stunden";
                         var url = 'https://api.helium.io/v1/hotspots/112WPeSWTzHYzbQRZhQ95mJqpXjkeB1JpBLUS3amEAZiMANMH8Ty/rewards/sum/?min_time=-1%20day'
                       
                         var data = await getData(url); //abruf der daten
                         log(data);  // ausgabe des ergebnisses auf der debug-console
                         setState(dp1,data.total); // schreiben des rewards in datenpunkt
                      }
                      async function writeValueReward2() {
                         var dp1 = "0_userdata.0.Helium.TrendyGunmetalHare.letzte7Tage";
                         var url = 'https://api.helium.io/v1/hotspots/112WPeSWTzHYzbQRZhQ95mJqpXjkeB1JpBLUS3amEAZiMANMH8Ty/rewards/sum/?min_time=-7%20day'
                       
                         var data = await getData(url); //abruf der daten
                         log(data);  // ausgabe des ergebnisses auf der debug-console
                         setState(dp1,data.total); // schreiben des rewards in datenpunk
                      }
                       
                      async function getData(url) {
                         try {
                             let res = await axios.get(url, { headers: { 'User-Agent': 'Mozilla/5.0.' } });
                             return res.data.data;
                         } catch (e) {
                             log(e)
                         }
                      }
                       
                      
                      writeValueOverview();
                      writeValueReward1();
                      writeValueReward2();
                      
                      
                      

                      M U 2 Replies Last reply Reply Quote 0
                      • M
                        manni4545 @OliverIO last edited by

                        @oliverio Hi
                        ich beschäftige mich auch gerade mit dem auslesen von der API
                        aber im moment blicke ich garnichts.
                        Ich habe Iobroker und Grafana am laufen.
                        Und möchte auch die Daten aus der Helium Api auslesen.
                        Es hapert aber schon an diesem Axis. Muss man das im Iobroker einrichten oder wie benutze ich dieses Script.
                        Sorry für diese doofe Frage.

                        OliverIO 1 Reply Last reply Reply Quote 0
                        • OliverIO
                          OliverIO @manni4545 last edited by OliverIO

                          @manni4545

                          axios ist eine zusätzliche bibliothek, mit der man http-abfragen machen kann.
                          also genau die art von abfragen, die der browser im hintergrund macht.

                          axios wird auch von iobroker intern verwendet, aber um sicher zu gehen,
                          sollte man ihn in den einstellungen des javascript-adapters im feld "zusätzliche npm module" eintragen. also einfach "axios" eintragen.
                          danach kann im javascript diese bibiothek mit

                          var axios = require("axios");
                          

                          verwendet werden.
                          welche befehle und parameter zur verfügung stehen, kann man in der doku nachlesen
                          https://axios-http.com/docs/api_intro

                          1 Reply Last reply Reply Quote 0
                          • U
                            Unbekannt @OliverIO last edited by

                            @oliverio sagte in Helium API per GET abrufen (incl. User-Agent):

                            @unbekannt

                            ich habe den folgenden Code ausprobiert. Das schedule habe ich aus testzwecken entfernt.
                            Er hat einwandfrei funktioniert.
                            Gab es jetzt noch ein Problem.
                            Den Useragent hast ja auch ergänzt.
                            Hab daher nun kein 429 mehr erhalten.

                             
                            var axios = require("axios");
                             
                            async function writeValueOverview() {
                               var dp1 = "0_userdata.0.Helium.TrendyGunmetalHare.Total";
                               var v_url = 'https://api.helium.io/v1/hotspots/112WPeSWTzHYzbQRZhQ95mJqpXjkeB1JpBLUS3amEAZiMANMH8Ty/rewards/sum/?max_time=2029-01-01T00:00:01Z&min_time=2021-01-01T00:00:01Z'
                             
                               var data = await getData(v_url); //abruf der daten
                               log(data);  // ausgabe des ergebnisses auf der debug-console
                               setState(dp1,data.total); // schreiben der summe in datenpunkt
                            }
                             
                            async function writeValueReward1() {
                               var dp1 = "0_userdata.0.Helium.TrendyGunmetalHare.letzte24Stunden";
                               var url = 'https://api.helium.io/v1/hotspots/112WPeSWTzHYzbQRZhQ95mJqpXjkeB1JpBLUS3amEAZiMANMH8Ty/rewards/sum/?min_time=-1%20day'
                             
                               var data = await getData(url); //abruf der daten
                               log(data);  // ausgabe des ergebnisses auf der debug-console
                               setState(dp1,data.total); // schreiben des rewards in datenpunkt
                            }
                            async function writeValueReward2() {
                               var dp1 = "0_userdata.0.Helium.TrendyGunmetalHare.letzte7Tage";
                               var url = 'https://api.helium.io/v1/hotspots/112WPeSWTzHYzbQRZhQ95mJqpXjkeB1JpBLUS3amEAZiMANMH8Ty/rewards/sum/?min_time=-7%20day'
                             
                               var data = await getData(url); //abruf der daten
                               log(data);  // ausgabe des ergebnisses auf der debug-console
                               setState(dp1,data.total); // schreiben des rewards in datenpunk
                            }
                             
                            async function getData(url) {
                               try {
                                   let res = await axios.get(url, { headers: { 'User-Agent': 'Mozilla/5.0.' } });
                                   return res.data.data;
                               } catch (e) {
                                   log(e)
                               }
                            }
                             
                            
                            writeValueOverview();
                            writeValueReward1();
                            writeValueReward2();
                            
                            
                            

                            kurzes Update:
                            Ich habe den Code (mit schedule) nun seit einigen Tagen fehlerfrei laufen.

                            Danke nochmal für deine Hilfestellungen.

                            M 1 Reply Last reply Reply Quote 1
                            • M
                              manni4545 @Unbekannt last edited by

                              @unbekannt said in Helium API per GET abrufen (incl. User-Agent):

                              @oliverio sagte in Helium API per GET abrufen (incl. User-Agent):

                              @unbekannt

                              ich habe den folgenden Code ausprobiert. Das schedule habe ich aus testzwecken entfernt.
                              Er hat einwandfrei funktioniert.
                              Gab es jetzt noch ein Problem.
                              Den Useragent hast ja auch ergänzt.
                              Hab daher nun kein 429 mehr erhalten.

                               
                              var axios = require("axios");
                               
                              async function writeValueOverview() {
                                 var dp1 = "0_userdata.0.Helium.TrendyGunmetalHare.Total";
                                 var v_url = 'https://api.helium.io/v1/hotspots/112WPeSWTzHYzbQRZhQ95mJqpXjkeB1JpBLUS3amEAZiMANMH8Ty/rewards/sum/?max_time=2029-01-01T00:00:01Z&min_time=2021-01-01T00:00:01Z'
                               
                                 var data = await getData(v_url); //abruf der daten
                                 log(data);  // ausgabe des ergebnisses auf der debug-console
                                 setState(dp1,data.total); // schreiben der summe in datenpunkt
                              }
                               
                              async function writeValueReward1() {
                                 var dp1 = "0_userdata.0.Helium.TrendyGunmetalHare.letzte24Stunden";
                                 var url = 'https://api.helium.io/v1/hotspots/112WPeSWTzHYzbQRZhQ95mJqpXjkeB1JpBLUS3amEAZiMANMH8Ty/rewards/sum/?min_time=-1%20day'
                               
                                 var data = await getData(url); //abruf der daten
                                 log(data);  // ausgabe des ergebnisses auf der debug-console
                                 setState(dp1,data.total); // schreiben des rewards in datenpunkt
                              }
                              async function writeValueReward2() {
                                 var dp1 = "0_userdata.0.Helium.TrendyGunmetalHare.letzte7Tage";
                                 var url = 'https://api.helium.io/v1/hotspots/112WPeSWTzHYzbQRZhQ95mJqpXjkeB1JpBLUS3amEAZiMANMH8Ty/rewards/sum/?min_time=-7%20day'
                               
                                 var data = await getData(url); //abruf der daten
                                 log(data);  // ausgabe des ergebnisses auf der debug-console
                                 setState(dp1,data.total); // schreiben des rewards in datenpunk
                              }
                               
                              async function getData(url) {
                                 try {
                                     let res = await axios.get(url, { headers: { 'User-Agent': 'Mozilla/5.0.' } });
                                     return res.data.data;
                                 } catch (e) {
                                     log(e)
                                 }
                              }
                               
                              
                              writeValueOverview();
                              writeValueReward1();
                              writeValueReward2();
                              
                              
                              

                              kurzes Update:
                              Ich habe den Code (mit schedule) nun seit einigen Tagen fehlerfrei laufen.

                              Danke nochmal für deine Hilfestellungen.

                              Hi wo hast du das Schedule eingetragen?

                              OliverIO 1 Reply Last reply Reply Quote 0
                              • OliverIO
                                OliverIO @manni4545 last edited by

                                @manni4545
                                in diesem post kannst du nachschauen
                                https://forum.iobroker.net/topic/50188/helium-api-per-get-abrufen-incl-user-agent/25?_=1661253687023

                                wobei man auch alle Funktionsaufrufe in ein schedule reinschreiben kann.
                                bei mir gab es keine fehlermeldung mehr, auch wenn ich das skript mehrmals hintereinander laufen lassen habe

                                T 1 Reply Last reply Reply Quote 0
                                • T
                                  theGrinch @OliverIO last edited by

                                  Hat jemand zufällig schon eine Lösung für die neue API erarbeitet?

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

                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  428
                                  Online

                                  31.8k
                                  Users

                                  80.0k
                                  Topics

                                  1.3m
                                  Posts

                                  8
                                  33
                                  3094
                                  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