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