Zodiac EXO iQ Account direkt vom Hersteller HTTPS API page auslesen und via Iobroker javascript an Yahka an EVE übergeben.
// Parameter
var server = 'prod.zodiac-io.com'; // Zodiac Server
var id = 'JT20xxxxxxxx'; // S/N of Zodiac EXO IQ LS
var email = 'a.b@c.de';
var password = 'xxxxxxxxxx';
var api_key = 'EOOEMOW4YR6QNB11';
//var api_key = 'EOOEMOW4YR6QNB07'; // https://discourse.nodered.org/t/iaqualink-for-pool-equipment/29689
// Global
createState("iAquaLink.Pool.Temperatur", {name: 'Pool Temperatur', unit: '°C'});
createState("iAquaLink.Pool.PH", {name: 'Pool PH', unit: ''});
createState("iAquaLink.Pool.ORP",{name: 'Redox ORP', unit: 'mV'});
createState("iAquaLink.EXO.RSSI",{name: 'EXO WiFi Signal', unit: 'db'});
function iAquaLinkLoop () {
var body_sent = JSON.stringify( { 'api_key': api_key, 'email': email, 'password': password });
var al_headers = { 'Content-Type': 'application/json',
'accept': 'application/json',
'user-agent': 'okhttp/3.12.0',
'Host': server,
//'accept-encoding': 'gzip'
};
// Authenticate and get IdToken
var request = require('request');
var optionspost = {
url: 'https://' + server + '/users/v1/login',
method: 'POST',
//minVersion: 'TLSv1',
//maxVersion: 'TLSv1.2',
headers: al_headers,
form: body_sent
};
//log('Start Logging Server: ' + server);
request(optionspost,function (error, response, body){
//log('Request Status: ' + response.statusCode);
var obj = JSON.parse(body);
var token = obj.userPoolOAuth.IdToken;
//log(response.statusCode + ' Token: '+ obj.userPoolOAuth.IdToken);
// Get Values from iAquaLink
var getrequest = require('request');
var optionsget = {
url: 'https://' + server + '/devices/v1/' + id + '/shadow',
method: 'GET',
headers: { al_headers, 'Authorization': token }
};
getrequest(optionsget,function (error, response, body){
log('Code_statusCode: ' + response.statusCode);
const obj = JSON.parse(body);
var pool_temp = obj.state.reported.equipment.swc_0.sns_3.value;
var pool_orp = obj.state.reported.equipment.swc_0.sns_2.value;
var pool_ph = (obj.state.reported.equipment.swc_0.sns_1.value)/10;
var exo_rssi = obj.state.reported.debug.RSSI;
setState("iAquaLink.Pool.Temperatur", pool_temp);
setState("iAquaLink.Pool.ORP", pool_orp);
setState("iAquaLink.Pool.PH", pool_ph);
setState("iAquaLink.EXO.RSSI", exo_rssi);
log('PoolTemperatur common: '+ pool_temp + ' PH: ' + pool_ph + ' ORP: '+ pool_orp );
})
});
}
schedule("*/5 * * * *", iAquaLinkLoop); // CRONJob