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.
    • 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

                        878
                        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