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.
    • B
      bug77 @ioBroker-lover last edited by

      @iobroker-lover ich würde auch gerne Hotspot Daten auslesen. Hat du da mittlerweile ein umfangreicheres Script wo alle Daten geloggt werden?

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

        Ich melde auch großes Interesse an 🙂

        1 Reply Last reply Reply Quote 0
        • Stephan Sporbert
          Stephan Sporbert last edited by

          Hallo,

          Kann es villeicht jemand erklären?

          Ich würde gerne die Erträge von meinem Hotspot in einen datenpunkt schreiben

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

            @stephan-sporbert

            was meinst du mit erklären?

            axios ist eine bibliothek, mit der man http-abfragen machen kann und alles mögliche im detail vorgeben kann.
            Beschreibung von axios: https://github.com/axios/axios

            welche vorgaben man machen muss hängt dann von der konkreten api-beschreibung des anbieters ab.
            je nachdem was man machen will gibt es verschiedenene methoden
            hier wirt die http-get methode verwendet(der standard bei http wenn du daten abrufst)
            dazu benötigst du eine url.
            im ersten post siehst du einen langen string, eine intrnetadresse, mit irgendwelchen daten dran. das muss dir aber der anbieter geben oder er muss anweisungen haben, wie man diese url bildet. darin verbirgt sich (entweder in klarschrift oder wie hier verschlüsselt, was du genau abrufen willst.)
            wenn du eine api beschreibung hier verlinken kannst, kann man dir weiterhelfen.

            im obigen problem ging es nur darum, das der user-agent mit angegeben werden soll und es aber zuerst nicht richtig funktioniert hat

            1 Reply Last reply Reply Quote 0
            • Stephan Sporbert
              Stephan Sporbert @Stephan Sporbert last edited by Stephan Sporbert

              @stephan-sporbert

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

              @stephan-sporbert

              was meinst du mit erklären?

              axios ist eine bibliothek, mit der man http-abfragen machen kann und alles mögliche im detail vorgeben kann.
              Beschreibung von axios: https://github.com/axios/axios

              welche vorgaben man machen muss hängt dann von der konkreten api-beschreibung des anbieters ab.
              je nachdem was man machen will gibt es verschiedenene methoden
              hier wirt die http-get methode verwendet(der standard bei http wenn du daten abrufst)
              dazu benötigst du eine url.
              im ersten post siehst du einen langen string, eine intrnetadresse, mit irgendwelchen daten dran. das muss dir aber der anbieter geben oder er muss anweisungen haben, wie man diese url bildet. darin verbirgt sich (entweder in klarschrift oder wie hier verschlüsselt, was du genau abrufen willst.)
              wenn du eine api beschreibung hier verlinken kannst, kann man dir weiterhelfen.

              im obigen problem ging es nur darum, das der user-agent mit angegeben werden soll und es aber zuerst nicht richtig funktioniert hat

              Hallo oliverio,
              danke für deine Antwort,

              das Problem ist immer wenn man nicht weiß wo man hin will.
              ich hab das Script jetzt mal an meine bedürfnisse angepasst im log erscheinen die werte auch braf, ich würde sie gerne in einen Datenpunkt schreiben, bekomme es aber absolut nicht hin.

              var axios = require("axios");
              var v_url = 'https://api.helium.io/v1/hotspots/112gJzabaVykY8hvNgZcgSU2pJ5YkjHi7QUST9i9ugtofoXQfkEc/rewards/sum/?max_time=2029-01-01T00:00:01Z&min_time=2021-01-01T00:00:01Z'
               
              async function test() {
                  log((await getData()).total);
                  log((await getData()).stddev);
                  log((await getData()).avg);
              }
               
              async function getData() {
                  try {
                      let res = await axios.get(v_url, { headers: { 'User-Agent': 'Mozilla/5.0.' } });
                      return res.data.data;
                  } catch (e) {
                      log(e)
                  }
              }
              test();
              

              angezigt im log wird dann

              14:36:40.520	info	javascript.0 (24320) script.js.common.HNT#: registered 0 subscriptions and 0 schedules
              14:36:40.678	info	javascript.0 (24320) script.js.common.HNT#: 0.2599506
              14:36:40.737	info	javascript.0 (24320) script.js.common.HNT#: 0.017530848148
              14:36:40.799	info	javascript.0 (24320) script.js.common.HNT#: 0.02166255
              
              1 Reply Last reply Reply Quote 0
              • Stephan Sporbert
                Stephan Sporbert last edited by

                @oliverio
                Hallo oliverio,
                danke für deine Antwort,

                das Problem ist immer wenn man nicht weiß wo man hin will.
                ich hab das Skript jetzt mal an meine Bedürfnisse angepasst im log erscheinen die werte auch brav, ich würde sie gerne in einen Datenpunkt schreiben, bekomme es aber absolut nicht hin.

                var axios = require("axios");
                var v_url = 'https://api.helium.io/v1/hotspots/112gJzabaVykY8hvNgZcgSU2pJ5YkjHi7QUST9i9ugtofoXQfkEc/rewards/sum/?max_time=2029-01-01T00:00:01Z&min_time=2021-01-01T00:00:01Z'
                 
                async function test() {
                    log((await getData()).total);
                    log((await getData()).stddev);
                    log((await getData()).avg);
                }
                 
                async function getData() {
                    try {
                        let res = await axios.get(v_url, { headers: { 'User-Agent': 'Mozilla/5.0.' } });
                        return res.data.data;
                    } catch (e) {
                        log(e)
                    }
                }
                test();
                

                angezeigt im log wird dann

                14:36:40.520	info	javascript.0 (24320) script.js.common.HNT#: registered 0 subscriptions and 0 schedules
                14:36:40.678	info	javascript.0 (24320) script.js.common.HNT#: 0.2599506
                14:36:40.737	info	javascript.0 (24320) script.js.common.HNT#: 0.017530848148
                14:36:40.799	info	javascript.0 (24320) script.js.common.HNT#: 0.02166255
                

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

                  @stephan-sporbert
                  du musst dann auch den Befehl verwenden, der es in einen Datenpunkt schreibt.
                  der datenpunkt muss zuvor angelegt werden. am besten Number
                  und der datenpunktname dann bei dp anpassen.

                  var dp = "javascript.0.test";
                  var axios = require("axios");
                  var v_url = 'https://api.helium.io/v1/hotspots/112gJzabaVykY8hvNgZcgSU2pJ5YkjHi7QUST9i9ugtofoXQfkEc/rewards/sum/?max_time=2029-01-01T00:00:01Z&min_time=2021-01-01T00:00:01Z'
                   
                  async function test() {
                      log((await getData()).total);
                  }
                  async function writeValue() {
                      setState(dp,(await getData()).total);
                  }
                  async function getData() {
                      try {
                          let res = await axios.get(v_url, { headers: { 'User-Agent': 'Mozilla/5.0.' } });
                          return res.data.data;
                      } catch (e) {
                          log(e)
                      }
                  }
                   
                  //test();
                  writeValue();
                  

                  wenn du mehr wie einen Wert schreiben möchtest, dann würde ich dein Skript ebenfalls noch ein wenig anpassen. Da so 3 Anfragen an den Server rausgehen, obwohl du jedesmal die gleichen Daten erhälst

                  Stephan Sporbert 1 Reply Last reply Reply Quote 1
                  • Stephan Sporbert
                    Stephan Sporbert @OliverIO last edited by Stephan Sporbert

                    @oliverio
                    Wahnsinn, danke!
                    mal sehen ob ich das hin bekomme, ich hab noch nie mit Javascript gearbeitet

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

                      @stephan-sporbert

                      var dp1 = "javascript.0.test1";
                      var dp2 = "javascript.0.test2";
                      var axios = require("axios");
                      var v_url = 'https://api.helium.io/v1/hotspots/112gJzabaVykY8hvNgZcgSU2pJ5YkjHi7QUST9i9ugtofoXQfkEc/rewards/sum/?max_time=2029-01-01T00:00:01Z&min_time=2021-01-01T00:00:01Z'
                       
                      async function test() {
                          var data = await getData();
                          log(data.total);
                          log(data.stddev);
                          
                      }
                      async function writeValue() {
                          var data = await getData();
                          log(data);
                          setState(dp1,data.total);
                          setState(dp2,data.stddev);
                      }
                      async function getData() {
                          try {
                              let res = await axios.get(v_url, { headers: { 'User-Agent': 'Mozilla/5.0.' } });
                              return res.data.data;
                          } catch (e) {
                              log(e)
                          }
                      }
                       
                      //test();
                      writeValue();
                      
                      Stephan Sporbert 1 Reply Last reply Reply Quote 1
                      • Stephan Sporbert
                        Stephan Sporbert @OliverIO last edited by Stephan Sporbert

                        @oliverio
                        Klasse, es funktioniert.

                        Ich danke dir von Herzen 👍 👍

                        wenn ich das jetzt aller 30minausführen will

                         // Alle 30 Minunten das skript ausführen
                        schedule('*/30 * * * *', javascript.0.test);
                        

                        oder bin ich absolut auf dem Holzweg?

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

                          @stephan-sporbert
                          nicht ganz,
                          musste selbst nachschauen, da ich kein schedule aktuell verwende und auch nicht mit async

                          das unten angegebene schedule ruft immer zur 0ten und zur 30igsten Minute die Funktion auf. Für andere Werte kannst du den assistenten im Skripteditor verwenden (uhrenicon oben rechts)

                          müsste aber wie folgt funktionieren

                          
                          var dp1 = "javascript.0.test1";
                          var dp2 = "javascript.0.test2";
                          var axios = require("axios");
                          var v_url = 'https://api.helium.io/v1/hotspots/112gJzabaVykY8hvNgZcgSU2pJ5YkjHi7QUST9i9ugtofoXQfkEc/rewards/sum/?max_time=2029-01-01T00:00:01Z&min_time=2021-01-01T00:00:01Z'
                           
                          async function writeValue() {
                              var data = await getData();
                              log(data);
                              setState(dp1,data.total);
                              setState(dp2,data.stddev);
                          }
                          async function getData() {
                              try {
                                  let res = await axios.get(v_url, { headers: { 'User-Agent': 'Mozilla/5.0.' } });
                                  return res.data.data;
                              } catch (e) {
                                  log(e)
                              }
                          }
                           
                          schedule('*/30 * * * *',function() {
                              writeValue();
                          });
                          
                          
                          Stephan Sporbert 1 Reply Last reply Reply Quote 1
                          • Stephan Sporbert
                            Stephan Sporbert @OliverIO last edited by

                            @oliverio

                            alles funktioniert, wirklich beeindruckend.

                            Ich danke dir

                            1 Reply Last reply Reply Quote 0
                            • Stephan Sporbert
                              Stephan Sporbert last edited by

                              Hier lässt sich die API Dokumentation übrigens finden

                              Klick

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

                                Erstmal vielen Dank für eure Vorarbeit. Das hat mir schon mal weitergeholfen.
                                Ich möchte gerne die Rewards der letzten 24h, 7 Tage & 30 Tage auslesen und das in das o.g. Skript einbauen.

                                Laut API kann ich das wie folgt abfragen

                                https://api.helium.io/v1/hotspots/HOTSPOT_ID/rewards/sum/?min_time=-1%20day
                                https://api.helium.io/v1/hotspots/HOTSPOT_ID/rewards/sum/?min_time=-7%20day
                                https://api.helium.io/v1/hotspots/HOTSPOT_ID/rewards/sum/?min_time=-30%20day
                                

                                Ich könnte das o.g. Skript auch drei mal kopieren und den Link tauschen, aber ich schätze, das geht auch so, dass alle vier Links in einem Skript abgefragt werden, leider habe ich davon keine Ahnung. Kann mir hierbei jemand helfen?

                                Gruß Markus

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

                                  @unbekannt

                                  ich habe dir den code ein wenig umgestellt.
                                  jetzt kannst du einfach die funktion writeValueOverview kopieren
                                  neu einfügen, einen neuen Namen geben und die Parameter
                                  konfigurieren.
                                  Befasse dich mal mit jeder einzelnen Zeile, dann wirst du auch das extrahieren der Daten aus einem JSON-Objekt gut hinbekommen.
                                  Im vorliegenden Beispiel erhälst du ein javascriptobjekt zurück.
                                  dieses objekt hat sogenannte properties oder eigenschaften.
                                  das sind eigentlich nix anderes wie variable, die zusammengefasst sind.
                                  daher kannst du total mit
                                  data.total
                                  und die standardabweichung mit
                                  data.stddev
                                  adressieren.
                                  die struktur ist aber je api aufruf anders und du musst in der doku nachschauen oder, das was da auf der console ausgegeben wird.

                                  Problem bei rewards ist, das da eine Liste zurückkommt und nicht ein einzelner Wert

                                  Return the last 7 days of rewards bucketed by day

                                  Was willst du mit der Liste machen?

                                   
                                  var axios = require("axios");
                                   
                                  async function writeValueOverview() {
                                      var dp1 = "javascript.0.test1";
                                      var dp2 = "javascript.0.test2";
                                      var v_url = 'https://api.helium.io/v1/hotspots/112gJzabaVykY8hvNgZcgSU2pJ5YkjHi7QUST9i9ugtofoXQfkEc/rewards/sum/?max_time=2029-01-01T00:00:01Z&min_time=2021-01-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
                                      setState(dp2,data.stddev);  // schreiben der standardabweichung in datenpunkt
                                  }
                                  
                                  async function writeValueReward1() {
                                      var dp1 = "javascript.0.reward1";
                                      var url = 'https://api.helium.io/v1/hotspots/HOTSPOT_ID/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.??); // schreiben des rewards in datenpunkt
                                  }
                                  async function writeValueReward2() {
                                      var dp1 = "javascript.0.reward2";
                                      var url = 'https://api.helium.io/v1/hotspots/HOTSPOT_ID/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.??); // schreiben des rewards in datenpunk
                                  datenpunkt
                                  }
                                  
                                  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('*/30 * * * *',function() {
                                      writeValueOverview();
                                      writeValueReward1();
                                      writeValueReward2();
                                  });
                                   
                                  
                                  
                                  U 1 Reply Last reply Reply Quote 0
                                  • 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
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            883
                                            Online

                                            31.8k
                                            Users

                                            79.9k
                                            Topics

                                            1.3m
                                            Posts

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