Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. Request in Adapter verliert Daten

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Request in Adapter verliert Daten

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

      Hallo Zusammen,

      da ich seit kurzen über drei Discovergy Zähler verfüge, möchte ich diese mit IOBROKER über die neue Discovergy API auslesen.

      Mein Script scheitert aktuell an dem Request. Der Request wird aufgerufen und es wird auch der ConsumerKey abgeholt.

      Innerhalb des Request übergebe ich die Daten an eine globale Variable DAPI_Token. Sobald der Request verlassen wird sind die Daten weg.

      Die Funktion zum Speichern der Token wird fehlerfrei aufgerufen, aber es wird keine Datei erstellt.

      Wo liegt mein (Gedanken) Fehler?

      Danke für die Hilfe

      //***********************************************************************************************************************
      //***********************************************************************************************************************
      //***
      //***  iobroker.doscovergy Adapter
      //***
      //***  Adapter for reading Discovergy electricity meters via the API
      //***
      //***  API Documentation:  https://api.discovergy.com/docs/
      //***
      //***  (c) 2017 
      //***
      //***********************************************************************************************************************
      //***********************************************************************************************************************
      
      "use strict";
      
      //***
      //*** INIT
      //***
      var debug = true;
      var DAPIconnected = false;
      var DAPISignin = true;
      
      var utils   = require(__dirname + '/lib/utils');
      
      var adapter = utils.adapter('discovergy');
      
      var request = require('request');
      
      var DAPI_Constants = {
          BaseUrl    : 'https://api.discovergy.com/public/v1/',
          ClientName : 'iobroker.discovergy',
          TokenFile  : adapter.adapterDir + '/' + adapter.namespace + '.token.json'
      }
      
      var DAPI_Token = {
          ConsumerKey:''
      };
      
      var DAPI_MeterData = {};
      
      //***
      //*** is called when adapter shuts down - callback has to be called under any circumstances!
      //***
      adapter.on('unload', function (callback) {
          try {
              adapter.log.info('cleaned everything up...');
              callback();
          } catch (e) {
              callback();
          }
      });
      
      //***
      //*** is called when databases are connected and adapter received configuration.
      //*** start here!
      adapter.on('ready', function () {
          main();
      });
      
      function main() {
      
          //***
          //*** Gespeichertes Token lesen oder neuen consumer token paar erzeugen
          //***
          Fn_DAPIReadTokenFile();
      
      } // END main
      
      function Fn_DAPIReadTokenFile () {
      
          var FunctionName = 'Fn_DAPIReadTokenFile';
          var TokenRead = false;
      
          //*** Gespeichertes Token aus Datei lesen
          try {
              adapter.readFile(DAPI_Constants.TokenFile, 'utf8', function (error, data) {
                  if ( !error ) {
                      DAPI_Token = JSON.parse(data);
                      if ( debug ) console.log(FunctionName + ' - Read: ' + DAPI_Constants.TokenFile);
                      var TokenRead = true;
                  } else {
                      adapter.log.error(FunctionName + ' - error: ', error);                               // Error beim Einlesen
                      adapter.stop;
                  }
              });
          } catch (e) {
              if ( debug ) console.log(FunctionName + ' - ERROR TRY: ', e);
          } // END try
      
          if ( !TokenRead ) Fn_DAPIGetConsumerToken();
      
      } // END function Fn_DAPIReadTokenFile
      
      function Fn_DAPIWriteTokenFile () {
      
          var FunctionName = 'Fn_DAPIWriteTokenFile';
      
          var data = JSON.stringify(DAPI_Token);
          try {
              adapter.writeFile(DAPI_Constants.TokenFile, data, function (error) {});
              if ( debug ) console.log(FunctionName + ' - Write:');
          } catch (e) {
              adapter.log.error(FunctionName + ' - ERROR TRY : ' + e);        
          }
      
      } // END function Fn_DAPIWriteToken
      
      function Fn_DAPIGetConsumerToken () {
      
          var FunctionName = 'Fn_DAPIGetConsumerToken';
      
          var Data;
          var RequestOptions = {                 
              method: 'POST',             
              uri: DAPI_Constants.BaseUrl + 'oauth1/consumer_token',
              body: "client=" + DAPI_Constants.ClientName,
              headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
          }; // END RequestOptions   
      
          try {
              request(RequestOptions, function (error, response, body) {
                  if (!error && response.statusCode == 200) {              // kein Fehler, Inhalt in body
                      if ( debug ) console.log(FunctionName + ' - body: ', body);
                      Data = JSON.parse(body);
                      if ( debug ) console.log(FunctionName + ' - Data key:', Data.key);
                      if ( debug ) console.log(FunctionName + ' - Data secret:', Data.secret);
                      DAPI_Token.ConsumerKey = Data.key;
                      DAPI_Token.ConsumerKeySecret = Data.secret;
                      DAPI_Token.Client = Data.owner;
                      if ( debug ) console.log(FunctionName + ' - Token key:', DAPI_Token.ConsumerKey);
                      if ( debug ) console.log(FunctionName + ' - Token secret:', DAPI_Token.ConsumerKeySecret);
                      Fn_DAPIWriteTokenFile();
                  } else {
                      adapter.log.error(FunctionName + ' - error: ', error);                               // Error beim Einlesen
                      adapter.stop;
                  } 
              });
          } catch (e) {
              adapter.log.error(FunctionName + ' - Fehler TRY: ' + e);
              adapter.stop;
          }
      
      } // END function Fn_DAPIGetConsumerToken
      
      

      Debug-Ausgabe in VS-Code

      Fn_DAPIGetConsumerToken - body: {"key":"h2hn832rg4fgl4e1828caljlu0","secret":"notc9uh6j8l86lhr203cb290eg","owner":"iobroker.discovergy","attributes":{},"principal":null}

      Fn_DAPIGetConsumerToken - Data key: h2hn832rg4fgl4e1828caljlu0

      Fn_DAPIGetConsumerToken - Data secret: notc9uh6j8l86lhr203cb290eg

      Fn_DAPIGetConsumerToken - Token key: h2hn832rg4fgl4e1828caljlu0

      Fn_DAPIGetConsumerToken - Token secret: notc9uh6j8l86lhr203cb290eg

      Fn_DAPIWriteTokenFile - Write:
      3973_iobroker.discovergy.rar

      1 Reply Last reply Reply Quote 0
      • Jey Cee
        Jey Cee Developer last edited by

        @urian:

        if ( debug ) console.log(FunctionName + ' - Write:'); `

        Also das deine Ausgabe leer ist liegt wohl daran das du hier keine Variable in deine Ausgabe geschrieben hast.

        Warum keine Datei geschrieben wird kann ich dir leider auch nicht sagen, es sieht auf den ersten Blick in Ordnung aus.

        Statt der Pfadangabe in der Funktion writeFile kannst du ja mal nur einen Datei namen angeben.

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

          Hallo,

          es liegt nicht an dem debug.log. Diese Zeile zeigt nur an, das, dass die Datei geschrieben wurde.

          Die Daten sind in der Variable data und sind korrekt in einen String gepackt.

          Ich glaube fast das man den gesamten Ablauf in diesen Request packen muss und die weiteren Requests

          geschachtelt.

          Wirft bei mir eine Frage auf: Muss bei jedem Durchlauf (Abfrage Zähler) die gesamte oauth Prozedur wiederholt werden?

          Gruß Guido

          1 Reply Last reply Reply Quote 0
          • T
            tikr_de last edited by

            Hallo,

            hast du die Abfrage der Discovergy Zähler zum Laufen bekommen?

            Wenn ja, wäre ich sehr an deinem Skript interessiert.

            Danke!

            Gruß

            1 Reply Last reply Reply Quote 0
            • C
              chrugel last edited by

              Hallo @urian,

              schließe mich tikr_de an:
              @tikr_de:

              hast du die Abfrage der Discovergy Zähler zum Laufen bekommen?

              Wenn ja, wäre ich sehr an deinem Skript interessiert. `
              🙂

              DANKE und herzliche Grüße!

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

                Ich hätte auch interesse! Seit heute hängt der discovergy Zähler bei mir im Keller.

                Gruß

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

                Support us

                ioBroker
                Community Adapters
                Donate

                677
                Online

                31.7k
                Users

                79.8k
                Topics

                1.3m
                Posts

                5
                6
                962
                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