Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Withings Daten einlesen

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.8k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.3k

Withings Daten einlesen

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
126 Beiträge 27 Kommentatoren 33.3k Aufrufe 19 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • K Kaiman55

    @Marty56 sagte in Withings Daten einlesen:

    Ich mache das über den Umweg mit ifttt. Funktioniert ohne Problem, allerdings mit einer ziemlichen Verzögerung von einigen Minuten.

    Also im ioBroker den Adapter IFTTT.
    Aber wie sieht die IFTTT Regel dann aus? Wie erzeugst Du dann einen Datenpunkt?
    Wäre toll, wenn Du mir das erklären kannst.

    Ich habe es gestern geschafft mich für einen Developer Account zu registieren.
    Allerdings ist dort nur der ConsumerKey und derConsumerSecret Key.

    Woher bekomme ich die beiden oa_access_oken und oken_secret?

    S Offline
    S Offline
    stoffel67
    schrieb am zuletzt editiert von
    #78

    @Kaiman55
    das steht doch alles hier:
    (http://developer.withings.com/oauth2/#tag/OAuth-2.0)
    zunächst: (OAuth 2.0 - Get your authentication code )
    hier übergibst du u.a. deine client-id und eine "repsonse URL ( Bsp. bei mir: http://<mein-server>.ddns.net/cgi-bin/withings.cmd), dabei wird ein Browserfenster geöffnet (interaktiv) bei dem du deinen account auswählst und dann
    der Nutzung der App zustimmst, direkt darauf wird die o.a. URL aufgerufen und der "code" und der "state"-string zurückgegeben.
    diesen "code" dann in den nächsten Aufruf (Get your access token)rein, um den Access_token und den refresh_token zu bekommen, mit diesen kannst du dann die Daten abrufen.
    Diese Aktion ist nur einmalig notwendig.
    Achtung:

    1. code ist nur 30 sec. gültig
    2. Access_token ist nur 3h gültig, (dafür gibt's dann den refresh_token)

    Mein Adapter: JUNG/GIRA eNet-Adapter

    K N 2 Antworten Letzte Antwort
    0
    • M Offline
      M Offline
      Marty56
      schrieb am zuletzt editiert von
      #79

      https://github.com/ioBroker/ioBroker.cloud/blob/master/doc/ifttt.md

      HW:NUC (16 GB Ram)
      OS: Debian Bullseye, Promox V7, node v16.x npm 8.19.3

      1 Antwort Letzte Antwort
      0
      • S stoffel67

        @Kaiman55
        das steht doch alles hier:
        (http://developer.withings.com/oauth2/#tag/OAuth-2.0)
        zunächst: (OAuth 2.0 - Get your authentication code )
        hier übergibst du u.a. deine client-id und eine "repsonse URL ( Bsp. bei mir: http://<mein-server>.ddns.net/cgi-bin/withings.cmd), dabei wird ein Browserfenster geöffnet (interaktiv) bei dem du deinen account auswählst und dann
        der Nutzung der App zustimmst, direkt darauf wird die o.a. URL aufgerufen und der "code" und der "state"-string zurückgegeben.
        diesen "code" dann in den nächsten Aufruf (Get your access token)rein, um den Access_token und den refresh_token zu bekommen, mit diesen kannst du dann die Daten abrufen.
        Diese Aktion ist nur einmalig notwendig.
        Achtung:

        1. code ist nur 30 sec. gültig
        2. Access_token ist nur 3h gültig, (dafür gibt's dann den refresh_token)
        K Offline
        K Offline
        Kaiman55
        schrieb am zuletzt editiert von
        #80

        @stoffel67 sagte in Withings Daten einlesen:

        @Kaiman55
        das steht doch alles hier:
        (http://developer.withings.com/oauth2/#tag/OAuth-2.0)
        zunächst: (OAuth 2.0 - Get your authentication code )
        hier übergibst du u.a. deine client-id und eine "repsonse URL ( Bsp. bei mir: http://<mein-server>.ddns.net/cgi-bin/withings.cmd), dabei wird ein Browserfenster geöffnet (interaktiv) bei dem du deinen account auswählst und dann
        der Nutzung der App zustimmst, direkt darauf wird die o.a. URL aufgerufen und der "code" und der "state"-string zurückgegeben.
        diesen "code" dann in den nächsten Aufruf (Get your access token)rein, um den Access_token und den refresh_token zu bekommen, mit diesen kannst du dann die Daten abrufen.
        Diese Aktion ist nur einmalig notwendig.
        Achtung:

        1. code ist nur 30 sec. gültig
        2. Access_token ist nur 3h gültig, (dafür gibt's dann den refresh_token)

        Wenn ich das mache, sehe ich meine zwei Nutzer. Wähle ich dann meinen aus, kommt die Meldung:
        Missing client_id or scope in the request parameters

        1 Antwort Letzte Antwort
        0
        • S Offline
          S Offline
          stoffel67
          schrieb am zuletzt editiert von
          #81

          ja also,
          hast du denn deine Client-ID und/oder den scope angegeben?

          Mein Adapter: JUNG/GIRA eNet-Adapter

          K 1 Antwort Letzte Antwort
          0
          • S stoffel67

            ja also,
            hast du denn deine Client-ID und/oder den scope angegeben?

            K Offline
            K Offline
            Kaiman55
            schrieb am zuletzt editiert von
            #82

            @stoffel67 sagte in Withings Daten einlesen:

            ja also,
            hast du denn deine Client-ID und/oder den scope angegeben?

            Ja. Habe ich.

            1 Antwort Letzte Antwort
            0
            • S Offline
              S Offline
              stoffel67
              schrieb am zuletzt editiert von
              #83

              bei mir sieht der Aufruf so aus:
              https://account.withings.com/oauth2_user/authorize2?response_type=code&client_id=xxxxxxxxxxx&state=OK&scope=user.info,user.metrics,user.activity&redirect_url=http://meinserver.ddns.net/cgi-bin/withings.cmd

              Mein Adapter: JUNG/GIRA eNet-Adapter

              K 1 Antwort Letzte Antwort
              0
              • S stoffel67

                bei mir sieht der Aufruf so aus:
                https://account.withings.com/oauth2_user/authorize2?response_type=code&client_id=xxxxxxxxxxx&state=OK&scope=user.info,user.metrics,user.activity&redirect_url=http://meinserver.ddns.net/cgi-bin/withings.cmd

                K Offline
                K Offline
                Kaiman55
                schrieb am zuletzt editiert von
                #84

                @stoffel67
                So ist es bei mir auch.
                Keine Ahnung, was falsch ist. Vielleicht liegt es an den zwei Personen, die ich hinterlegt habe.
                Hast Du dir den Entwickler Account auch erst jetzt geholt? Vielleicht gehts nur bei den älteren.

                Ich habe mal mit IFTTT gespielt.
                Bekomme da mein Gewicht als Push angezeigt.
                Und an mein Lametrics Display bekomme ich es so auch gesendet.
                Allerdings noch ohne ioBroker.
                Ich muss mir @Marty56 Doku mal genauer anschauen, wie ich das dann als Objekt speicher.

                Danke Dir trotzdem sehr für die Hilfe.

                S 1 Antwort Letzte Antwort
                0
                • S Offline
                  S Offline
                  stoffel67
                  schrieb am zuletzt editiert von
                  #85

                  ich habe auch zwei Personen, wird ja in der der ersten Maske angezeigt, und man wählt eine Person, dann auf "weiter"
                  und APP zustimmen, dann kommt der callback auf deine angegebene URL mit dem "code"

                  Mein Adapter: JUNG/GIRA eNet-Adapter

                  K 1 Antwort Letzte Antwort
                  0
                  • S stoffel67

                    ich habe auch zwei Personen, wird ja in der der ersten Maske angezeigt, und man wählt eine Person, dann auf "weiter"
                    und APP zustimmen, dann kommt der callback auf deine angegebene URL mit dem "code"

                    K Offline
                    K Offline
                    Kaiman55
                    schrieb am zuletzt editiert von
                    #86

                    @stoffel67 sagte in Withings Daten einlesen:

                    ich habe auch zwei Personen, wird ja in der der ersten Maske angezeigt, und man wählt eine Person, dann auf "weiter"
                    und APP zustimmen, dann kommt der callback auf deine angegebene URL mit dem "code"

                    Wie gesagt: Die beiden Personen sehe ich auch. Klicke ich auf eine (egal welche) kommt die o.g. Meldung.

                    1 Antwort Letzte Antwort
                    0
                    • S Offline
                      S Offline
                      stoffel67
                      schrieb am zuletzt editiert von
                      #87

                      wie sieht denn dein Aufruf aus? ( Client_id als xxxx)

                      Mein Adapter: JUNG/GIRA eNet-Adapter

                      K 1 Antwort Letzte Antwort
                      0
                      • K Kaiman55

                        @stoffel67
                        So ist es bei mir auch.
                        Keine Ahnung, was falsch ist. Vielleicht liegt es an den zwei Personen, die ich hinterlegt habe.
                        Hast Du dir den Entwickler Account auch erst jetzt geholt? Vielleicht gehts nur bei den älteren.

                        Ich habe mal mit IFTTT gespielt.
                        Bekomme da mein Gewicht als Push angezeigt.
                        Und an mein Lametrics Display bekomme ich es so auch gesendet.
                        Allerdings noch ohne ioBroker.
                        Ich muss mir @Marty56 Doku mal genauer anschauen, wie ich das dann als Objekt speicher.

                        Danke Dir trotzdem sehr für die Hilfe.

                        S Offline
                        S Offline
                        stoffel67
                        schrieb am zuletzt editiert von
                        #88

                        Ich habe mal mit IFTTT gespielt.
                        Bekomme da mein Gewicht als Push angezeigt.

                        dann bekommst du ja dein Gewicht?:flushed:

                        Mein Adapter: JUNG/GIRA eNet-Adapter

                        K 1 Antwort Letzte Antwort
                        0
                        • S stoffel67

                          wie sieht denn dein Aufruf aus? ( Client_id als xxxx)

                          K Offline
                          K Offline
                          Kaiman55
                          schrieb am zuletzt editiert von
                          #89

                          @stoffel67 sagte in Withings Daten einlesen:

                          wie sieht denn dein Aufruf aus? ( Client_id als xxxx)

                          https://account.withings.com/oauth2_user/authorize2?response_type=code&client_id=MEINE_ID_NUMMER&scope=user.info,user.metrics,user.activity&redirect_url=http://fixeIP_meines_Servers/cgi-bin/withings.cmd

                          Die IP ist erreichbar.
                          Sieht also aus wie bei Dir.
                          Egal... Ich geb erstmal auf. So wichtig ist es mir dann nicht.

                          Vielen Dank trotzdem.

                          S 1 Antwort Letzte Antwort
                          0
                          • S stoffel67

                            Ich habe mal mit IFTTT gespielt.
                            Bekomme da mein Gewicht als Push angezeigt.

                            dann bekommst du ja dein Gewicht?:flushed:

                            K Offline
                            K Offline
                            Kaiman55
                            schrieb am zuletzt editiert von
                            #90

                            @stoffel67 sagte in Withings Daten einlesen:

                            Ich habe mal mit IFTTT gespielt.
                            Bekomme da mein Gewicht als Push angezeigt.

                            dann bekommst du ja dein Gewicht?:flushed:

                            Ja. So ja. Halt nur auf dem Handy.
                            Hab die Doku noch nicht gelesen, wie ich IFTTT in ioBroker dazu bringe, dass ich ein Objekt vom Gewicht bekomme.
                            Schaue ich mir die Tage mal an.

                            1 Antwort Letzte Antwort
                            0
                            • S Offline
                              S Offline
                              stoffel67
                              schrieb am zuletzt editiert von stoffel67
                              #91

                              NEIN, sieht er nicht.... wo ist der Parameter "&state"
                              und hast du auch im Ordner cgi-bin eine Datei withings.cmd?

                              Mein Adapter: JUNG/GIRA eNet-Adapter

                              K 1 Antwort Letzte Antwort
                              0
                              • S stoffel67

                                NEIN, sieht er nicht.... wo ist der Parameter "&state"
                                und hast du auch im Ordner cgi-bin eine Datei withings.cmd?

                                K Offline
                                K Offline
                                Kaiman55
                                schrieb am zuletzt editiert von
                                #92

                                @stoffel67 sagte in Withings Daten einlesen:

                                NEIN, sieht er nicht.... wo ist der Parameter "&state"

                                :) Den habe ich versehendlich für den Post rausgelöscht. :D

                                1 Antwort Letzte Antwort
                                0
                                • K Kaiman55

                                  @stoffel67 sagte in Withings Daten einlesen:

                                  wie sieht denn dein Aufruf aus? ( Client_id als xxxx)

                                  https://account.withings.com/oauth2_user/authorize2?response_type=code&client_id=MEINE_ID_NUMMER&scope=user.info,user.metrics,user.activity&redirect_url=http://fixeIP_meines_Servers/cgi-bin/withings.cmd

                                  Die IP ist erreichbar.
                                  Sieht also aus wie bei Dir.
                                  Egal... Ich geb erstmal auf. So wichtig ist es mir dann nicht.

                                  Vielen Dank trotzdem.

                                  S Offline
                                  S Offline
                                  stoffel67
                                  schrieb am zuletzt editiert von
                                  #93

                                  https://account.withings.com/oauth2_user/authorize2?response_type=code&client_id=MEINE_ID_NUMMER&scope=user.info,user.metrics,user.activity&redirect_url=http://fixeIP_meines_Servers/cgi-bin/withings.cmd

                                  Die IP ist erreichbar.
                                  Vielen Dank trotzdem.

                                  hast du eine IP angegeben?
                                  das geht lt. Doku nicht:
                                  Your URL must :
                                  •be a valid URL, provided as a URL-encoded string. Please refer to w3schools URL encoding reference to learn more about URL encoding.
                                  •not be greater than 255 characters.
                                  •neither contain an IP or 'localhost'. Only port 80 and 443 are allowed.

                                  Mein Adapter: JUNG/GIRA eNet-Adapter

                                  K 1 Antwort Letzte Antwort
                                  0
                                  • S stoffel67

                                    https://account.withings.com/oauth2_user/authorize2?response_type=code&client_id=MEINE_ID_NUMMER&scope=user.info,user.metrics,user.activity&redirect_url=http://fixeIP_meines_Servers/cgi-bin/withings.cmd

                                    Die IP ist erreichbar.
                                    Vielen Dank trotzdem.

                                    hast du eine IP angegeben?
                                    das geht lt. Doku nicht:
                                    Your URL must :
                                    •be a valid URL, provided as a URL-encoded string. Please refer to w3schools URL encoding reference to learn more about URL encoding.
                                    •not be greater than 255 characters.
                                    •neither contain an IP or 'localhost'. Only port 80 and 443 are allowed.

                                    K Offline
                                    K Offline
                                    Kaiman55
                                    schrieb am zuletzt editiert von
                                    #94

                                    @stoffel67 sagte in Withings Daten einlesen:

                                    https://account.withings.com/oauth2_user/authorize2?response_type=code&client_id=MEINE_ID_NUMMER&scope=user.info,user.metrics,user.activity&redirect_url=http://fixeIP_meines_Servers/cgi-bin/withings.cmd

                                    Die IP ist erreichbar.
                                    Vielen Dank trotzdem.

                                    hast du eine IP angegeben?
                                    das geht lt. Doku nicht:
                                    Your URL must :
                                    •be a valid URL, provided as a URL-encoded string. Please refer to w3schools URL encoding reference to learn more about URL encoding.
                                    •not be greater than 255 characters.
                                    •neither contain an IP or 'localhost'. Only port 80 and 443 are allowed.

                                    Oh. Das habe ich überlesen.
                                    Meine Herren machen die das kompliziert.

                                    1 Antwort Letzte Antwort
                                    0
                                    • StuebiS Offline
                                      StuebiS Offline
                                      Stuebi
                                      schrieb am zuletzt editiert von
                                      #95

                                      Kann jemand netterweise von Euch nochmals das Script hier posten um das Gewicht der Withings Waage auszulesen.
                                      Danke!

                                      ioBroker auf Synology DS216+II im Docker Container

                                      1 Antwort Letzte Antwort
                                      0
                                      • S Offline
                                        S Offline
                                        stoffel67
                                        schrieb am zuletzt editiert von
                                        #96

                                        meins sieht so aus: ( Client_id und Client_secret mußt du noch selbst anpassen)

                                        //* Withings Daten einlesen
                                        
                                        
                                        /*
                                        SB
                                        oauth_token=XXXXXX
                                        oauth_token_secret=XXXXXX
                                        userid=YYYYYYYY
                                        deviceid=0
                                        
                                        BB
                                        oauth_token=XXXXXX
                                        oauth_token_secret=XXXXXXX
                                        userid=XXXXXX
                                        deviceid=0
                                        */
                                        
                                        const request = require("request");
                                        var client_ID      = "xxxxxxxxx";
                                        var client_secret = "xxxxxxxxx";
                                        
                                        /*
                                        createState('Withings.SB.Gewicht', {name:'Withings Gewicht', unit: 'kg'});
                                        createState('Withings.SB.Gewicht.Datum', {name:'Withings Gewicht (Datum)'});
                                        createState('Withings.SB.Gewicht.Datum.epoc', {name:'Withings Gewicht (Datum im UNIX EPOC Format)'});
                                        createState('Withings.BB.Gewicht', {name:'Withings Gewicht', unit: 'kg'});
                                        createState('Withings.BB.Gewicht.Datum', {name:'Withings Gewicht (Datum)'});
                                        createState('Withings.BB.Gewicht.Datum.epoc', {name:'Withings Gewicht (Datum im UNIX EPOC Format)'});
                                        createState('Withings.SB.access_token', {name:'access_token', unit: ''},access_token);
                                        createState('Withings.SB.refresh_token', {name:'refresh_token', unit: ''},refresh_token);
                                        createState('Withings.BB.access_token', {name:'access_token', unit: ''},access_token);
                                        createState('Withings.BB.refresh_token', {name:'refresh_token', unit: ''},refresh_token);
                                        */
                                        
                                        function datum_heute() {
                                            var heute = new Date();
                                            var tag_roh = heute.getDate(),
                                                tag = ((tag_roh <10) ? '0' : '') + tag_roh,
                                                monat_roh = heute.getMonth() + 1,
                                                monat = ((monat_roh <10) ? '0' : '') + monat_roh,
                                                jahr = heute.getFullYear();
                                        
                                            var datum = jahr + '-' + monat + '-' + tag;
                                         
                                            return(datum);
                                        }
                                        
                                        function refresh_access_token(user) {
                                            var access_token=getState('javascript.0.Withings.'+user+'.access_token').val;
                                            var refresh_token=getState("Withings."+user+".refresh_token").val;
                                            var lc= getState('javascript.0.Withings.'+user+'.refresh_token').lc;
                                            console.log (lc);
                                            var delta_t=Date.now()-lc;
                                            console.log ('Vergangene Zeit'+delta_t);
                                            var data="grant_type=refresh_token&client_id=xxxxxxxx&client_secret=yyyyyyyy&refresh_token="+refresh_token;
                                        
                                            var options ={
                                               url:'https://account.withings.com/oauth2/token',
                                               method:'POST',
                                               body:data
                                            };
                                        
                                                log('Withings refresh  token');
                                                request(options, function(error, response,body) {
                                                    log (response);
                                                    log(body);
                                                    if (!error) {
                                                        result = JSON.parse(body);
                                                        access_token=result.access_token;
                                                        refresh_token=result.refresh_token;
                                                        var userid=result.userid
                                                        console.log("AT:"+access_token);
                                                        console.log("RT:"+refresh_token);
                                                        setState('Withings.'+user+'.access_token',access_token);
                                                        setState('Withings.'+user+'.refresh_token',refresh_token);
                                                        setState('Withings.'+user+'.userid',userid);
                                                    }
                                                });   
                                                log ('jetzt Daten lesen ..........'+delta_t)
                                                withings_einlesen('gewicht',user,access_token);
                                        
                                        }
                                        
                                        function withings_einlesen(datentyp,user,access_token) { // Eigenen Daten statt xxxxxx einfügen
                                            var zeit=Date.now()/1000-3600;
                                            log ('AT:::'+access_token)
                                         
                                           
                                            // Abfrage einzelner Daten nach Typ
                                            if (datentyp === "gewicht") {
                                                var url = "https://wbsapi.withings.net/measure?action=getmeas&access_token="+access_token+"&meastype=1&category=1"//&lastupdate="+zeit;
                                                log('Withings Gewicht wird eingelesen');
                                                log (url);
                                                request.get(url, function(error,data, response) {
                                                    log (error);
                                                    var result;
                                                    if (!error) {
                                                        try{
                                                            result = JSON.parse(response);
                                                            data = JSON.stringify(result, null, 2);
                                                            log('Kein Fehler :-D bei Withings Gewicht');
                                                        } catch (e){
                                                            log('Parse Fehler:' + e);
                                                        }
                                                            result = JSON.parse(response);
                                                        if (result.status === 0) {
                                                            console.log("hole Daten von Withings!");
                                                            log (data)  // hier wird die ganze Wurst ausgegeben!!!!!!
                                                            var gewicht = result.body.measuregrps[0].measures[0].value;
                                                             log('-------> Gewicht: ' + gewicht);
                                                            pw=Math.pow(10,result.body.measuregrps[0].measures[0].unit);
                                                            setState('Withings.'+user+'.Gewicht', gewicht *pw);
                                                            var gewicht_epoc = (result.body.measuregrps[0].date+7200)*1000; //7200=Sommerzeit
                                                            setState('Withings.'+user+'.Gewicht.Datum', new Date(gewicht_epoc)); // Datum wird umgewandelt
                                                            setState('Withings.'+user+'.Gewicht.Datum.epoc', gewicht_epoc); //EPOC wird übernommen
                                                        } else {
                                                            log('Fehler beim Auswerten'+result.error)
                                                        }
                                                    } else {
                                                        log('Fehler: ' + error);
                                                    }
                                                });
                                            } else if (datentyp === "schritte") {
                                                datum = datum_heute();
                                                url = withings.signUrl("http://wbsapi.withings.net/measure?action=getmeas&date=" + datum + "&userid=" + userid, oauth_access_token, oauth_access_token_secret);
                                                log('Withings Schritte werden eingelesen');
                                                log (url)
                                                withings.get(url, null, null, function(error, response) {
                                                    if (!error) {
                                                        var result;
                                                        try{
                                                            result = JSON.parse(response);
                                                            var data = JSON.stringify(result, null, 2);
                                                            log('Kein Fehler :-D bei Withings Schritte');
                                                        } catch (e){
                                                            log('Parse Fehler:' + e);
                                                        }
                                                        if (result) {
                                                            log (result)
                                                            var schritte = result.body.steps;
                                                            // log('-------> Schritte: ' + schritte);
                                                            setState('Withings.Schritte', schritte);
                                                            var schritte_datum = result.body.date;
                                                            setState('Withings.Schritte.Datum', schritte_datum); // Datum wird übernommen
                                                        }
                                                    } else {
                                                        log('Fehler: ' + error);
                                                    }
                                                });
                                            }
                                        
                                        }
                                        
                                           
                                        
                                        
                                        on('javascript.0.Withings.callback_SB', function(data) {
                                            var cb = data.state.val;
                                            //log('Zustand'+cb)
                                            var lc= getState('javascript.0.Withings.callback_SB').lc;
                                            console.log (lc);
                                            console.log (Date.now());
                                            var delta_t=Date.now()-lc;
                                            console.log ('Vergangene Zeit'+delta_t);
                                            if (cb === true && delta_t > 5) {
                                                log ('lese Nokia SB');
                                                refresh_access_token('SB');
                                                //withings_einlesen('gewicht','SB');
                                            }
                                            setState('javascript.0.Withings.callback_SB', false);
                                        });
                                        
                                        on('javascript.0.Withings.callback_BB', function(data) {
                                            var cb = data.state.val;
                                            //log('Zustand'+cb)
                                            var lc= getState('javascript.0.Withings.callback_BB').lc;
                                            console.log (lc);
                                            var delta_t=Date.now()-lc;
                                            console.log ('Vergangene Zeit'+delta_t);
                                            if (cb === true && delta_t > 5) {
                                                log ('lese Nokia BB');
                                                refresh_access_token('BB');
                                                //withings_einlesen('gewicht','BB');
                                            }
                                            setState('javascript.0.Withings.callback_BB', false);
                                        });
                                        
                                        //refresh_access_token("BB")
                                        //refresh_access_token("SB")
                                        

                                        Mein Adapter: JUNG/GIRA eNet-Adapter

                                        StuebiS 1 Antwort Letzte Antwort
                                        0
                                        • S stoffel67

                                          meins sieht so aus: ( Client_id und Client_secret mußt du noch selbst anpassen)

                                          //* Withings Daten einlesen
                                          
                                          
                                          /*
                                          SB
                                          oauth_token=XXXXXX
                                          oauth_token_secret=XXXXXX
                                          userid=YYYYYYYY
                                          deviceid=0
                                          
                                          BB
                                          oauth_token=XXXXXX
                                          oauth_token_secret=XXXXXXX
                                          userid=XXXXXX
                                          deviceid=0
                                          */
                                          
                                          const request = require("request");
                                          var client_ID      = "xxxxxxxxx";
                                          var client_secret = "xxxxxxxxx";
                                          
                                          /*
                                          createState('Withings.SB.Gewicht', {name:'Withings Gewicht', unit: 'kg'});
                                          createState('Withings.SB.Gewicht.Datum', {name:'Withings Gewicht (Datum)'});
                                          createState('Withings.SB.Gewicht.Datum.epoc', {name:'Withings Gewicht (Datum im UNIX EPOC Format)'});
                                          createState('Withings.BB.Gewicht', {name:'Withings Gewicht', unit: 'kg'});
                                          createState('Withings.BB.Gewicht.Datum', {name:'Withings Gewicht (Datum)'});
                                          createState('Withings.BB.Gewicht.Datum.epoc', {name:'Withings Gewicht (Datum im UNIX EPOC Format)'});
                                          createState('Withings.SB.access_token', {name:'access_token', unit: ''},access_token);
                                          createState('Withings.SB.refresh_token', {name:'refresh_token', unit: ''},refresh_token);
                                          createState('Withings.BB.access_token', {name:'access_token', unit: ''},access_token);
                                          createState('Withings.BB.refresh_token', {name:'refresh_token', unit: ''},refresh_token);
                                          */
                                          
                                          function datum_heute() {
                                              var heute = new Date();
                                              var tag_roh = heute.getDate(),
                                                  tag = ((tag_roh <10) ? '0' : '') + tag_roh,
                                                  monat_roh = heute.getMonth() + 1,
                                                  monat = ((monat_roh <10) ? '0' : '') + monat_roh,
                                                  jahr = heute.getFullYear();
                                          
                                              var datum = jahr + '-' + monat + '-' + tag;
                                           
                                              return(datum);
                                          }
                                          
                                          function refresh_access_token(user) {
                                              var access_token=getState('javascript.0.Withings.'+user+'.access_token').val;
                                              var refresh_token=getState("Withings."+user+".refresh_token").val;
                                              var lc= getState('javascript.0.Withings.'+user+'.refresh_token').lc;
                                              console.log (lc);
                                              var delta_t=Date.now()-lc;
                                              console.log ('Vergangene Zeit'+delta_t);
                                              var data="grant_type=refresh_token&client_id=xxxxxxxx&client_secret=yyyyyyyy&refresh_token="+refresh_token;
                                          
                                              var options ={
                                                 url:'https://account.withings.com/oauth2/token',
                                                 method:'POST',
                                                 body:data
                                              };
                                          
                                                  log('Withings refresh  token');
                                                  request(options, function(error, response,body) {
                                                      log (response);
                                                      log(body);
                                                      if (!error) {
                                                          result = JSON.parse(body);
                                                          access_token=result.access_token;
                                                          refresh_token=result.refresh_token;
                                                          var userid=result.userid
                                                          console.log("AT:"+access_token);
                                                          console.log("RT:"+refresh_token);
                                                          setState('Withings.'+user+'.access_token',access_token);
                                                          setState('Withings.'+user+'.refresh_token',refresh_token);
                                                          setState('Withings.'+user+'.userid',userid);
                                                      }
                                                  });   
                                                  log ('jetzt Daten lesen ..........'+delta_t)
                                                  withings_einlesen('gewicht',user,access_token);
                                          
                                          }
                                          
                                          function withings_einlesen(datentyp,user,access_token) { // Eigenen Daten statt xxxxxx einfügen
                                              var zeit=Date.now()/1000-3600;
                                              log ('AT:::'+access_token)
                                           
                                             
                                              // Abfrage einzelner Daten nach Typ
                                              if (datentyp === "gewicht") {
                                                  var url = "https://wbsapi.withings.net/measure?action=getmeas&access_token="+access_token+"&meastype=1&category=1"//&lastupdate="+zeit;
                                                  log('Withings Gewicht wird eingelesen');
                                                  log (url);
                                                  request.get(url, function(error,data, response) {
                                                      log (error);
                                                      var result;
                                                      if (!error) {
                                                          try{
                                                              result = JSON.parse(response);
                                                              data = JSON.stringify(result, null, 2);
                                                              log('Kein Fehler :-D bei Withings Gewicht');
                                                          } catch (e){
                                                              log('Parse Fehler:' + e);
                                                          }
                                                              result = JSON.parse(response);
                                                          if (result.status === 0) {
                                                              console.log("hole Daten von Withings!");
                                                              log (data)  // hier wird die ganze Wurst ausgegeben!!!!!!
                                                              var gewicht = result.body.measuregrps[0].measures[0].value;
                                                               log('-------> Gewicht: ' + gewicht);
                                                              pw=Math.pow(10,result.body.measuregrps[0].measures[0].unit);
                                                              setState('Withings.'+user+'.Gewicht', gewicht *pw);
                                                              var gewicht_epoc = (result.body.measuregrps[0].date+7200)*1000; //7200=Sommerzeit
                                                              setState('Withings.'+user+'.Gewicht.Datum', new Date(gewicht_epoc)); // Datum wird umgewandelt
                                                              setState('Withings.'+user+'.Gewicht.Datum.epoc', gewicht_epoc); //EPOC wird übernommen
                                                          } else {
                                                              log('Fehler beim Auswerten'+result.error)
                                                          }
                                                      } else {
                                                          log('Fehler: ' + error);
                                                      }
                                                  });
                                              } else if (datentyp === "schritte") {
                                                  datum = datum_heute();
                                                  url = withings.signUrl("http://wbsapi.withings.net/measure?action=getmeas&date=" + datum + "&userid=" + userid, oauth_access_token, oauth_access_token_secret);
                                                  log('Withings Schritte werden eingelesen');
                                                  log (url)
                                                  withings.get(url, null, null, function(error, response) {
                                                      if (!error) {
                                                          var result;
                                                          try{
                                                              result = JSON.parse(response);
                                                              var data = JSON.stringify(result, null, 2);
                                                              log('Kein Fehler :-D bei Withings Schritte');
                                                          } catch (e){
                                                              log('Parse Fehler:' + e);
                                                          }
                                                          if (result) {
                                                              log (result)
                                                              var schritte = result.body.steps;
                                                              // log('-------> Schritte: ' + schritte);
                                                              setState('Withings.Schritte', schritte);
                                                              var schritte_datum = result.body.date;
                                                              setState('Withings.Schritte.Datum', schritte_datum); // Datum wird übernommen
                                                          }
                                                      } else {
                                                          log('Fehler: ' + error);
                                                      }
                                                  });
                                              }
                                          
                                          }
                                          
                                             
                                          
                                          
                                          on('javascript.0.Withings.callback_SB', function(data) {
                                              var cb = data.state.val;
                                              //log('Zustand'+cb)
                                              var lc= getState('javascript.0.Withings.callback_SB').lc;
                                              console.log (lc);
                                              console.log (Date.now());
                                              var delta_t=Date.now()-lc;
                                              console.log ('Vergangene Zeit'+delta_t);
                                              if (cb === true && delta_t > 5) {
                                                  log ('lese Nokia SB');
                                                  refresh_access_token('SB');
                                                  //withings_einlesen('gewicht','SB');
                                              }
                                              setState('javascript.0.Withings.callback_SB', false);
                                          });
                                          
                                          on('javascript.0.Withings.callback_BB', function(data) {
                                              var cb = data.state.val;
                                              //log('Zustand'+cb)
                                              var lc= getState('javascript.0.Withings.callback_BB').lc;
                                              console.log (lc);
                                              var delta_t=Date.now()-lc;
                                              console.log ('Vergangene Zeit'+delta_t);
                                              if (cb === true && delta_t > 5) {
                                                  log ('lese Nokia BB');
                                                  refresh_access_token('BB');
                                                  //withings_einlesen('gewicht','BB');
                                              }
                                              setState('javascript.0.Withings.callback_BB', false);
                                          });
                                          
                                          //refresh_access_token("BB")
                                          //refresh_access_token("SB")
                                          
                                          StuebiS Offline
                                          StuebiS Offline
                                          Stuebi
                                          schrieb am zuletzt editiert von Stuebi
                                          #97

                                          @stoffel67 , danke für das Script. Ich habe noch eine Frage. Ich muss doch einmalig vorher folgendes im Webbrowser aufrufen um den authentication code zu erhalten:

                                          https://account.withings.com/oauth2_user/authorize2?response_type=code&client_id=xxxxxxxxxxxxx&state=OK&scope=user.info,user.metrics,user.activity&redirect_url=http://my-ddns-address/withings.cmd
                                          

                                          Ich bekomme immer folgende Fehlermeldung zurück.

                                          {"errors":[{"message":"redirect_uri_mismatch: The redirect URI provided is missing or does not match partner callback url"}]}
                                          

                                          Kannst Du auch das Script withings.cmd zur Verfügung stellen?

                                          ioBroker auf Synology DS216+II im Docker Container

                                          1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          851

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe