Ein vielleicht wichtiger Hinweis, wenn jemand mit den o.g. Scripten ebenfalls versucht, einen mit einer Authentifizierung versehenen Shelly abzufragen:
Es reicht nicht, wie in der Browser-API, einmalig das Passwort zum Shelly zu senden, damit sich dieser "freischaltet".
Sendet man die Scriptreihenfolge
wird das Anfragen der ActivePower wieder mit dem response.code = 401 abgelehnt.
Also muss man bei jeder Abfrage einer Messgrösse die Authentifikation mitschicken, damit man den Messwert zurückgesendet bekommt.
Entsprechend funktioniert die Funktion sendAuthentification(PassWord,ShellyPRO3emIP) zwar, aber ist im Grund unnütz.
Ich weiss nicht, ob das so offensichtlich bewusst ist?
Entsprechend habe ich beide Funktionen zusammengefasst und frage die ActivePower des Shelly PRO 3em mit der folgenden Funktion ab, wenn der Shelly passwort geschützt ist:
let actualActivePower = 0;
let PassWord = 'geheim';
let ShellyPRO3emIP = '192.168.x.x'
let log = 1; // if no console log needed please set log to '0'
function getAuthenticatedAcivePower(sendPassWord, sendIP) {
Shelly.call(
'HTTP.GET', {
'url': 'http://admin:' + sendPassWord + '@' + sendIP + '/rpc/EM.GetStatus?id=0'
},
function(response) {
if (response && response.code && response.code === 200) {
let parsedData = JSON.parse (response.body);
try {
if (log !== 0) {
print('autentificated!');
//print (response.body);
}
actualActivePower = parsedData.total_act_power;
print('actual Active Power: ', actualActivePower, ' W');
} catch (e) {
print('***', e.type, '***', e.message, e.stack);
}
} else {
if (log !== 0) {
print('autentification failed.');
if (response) {
print('response code: ', response.code);
} else {
print('cannot reatch IP.');
}
}
}
}
);
}
getAuthenticatedAcivePower(PassWord,ShellyPRO3emIP);
Alles anzeigen
Versucht man die ausgelesene Leistung über den Funktionsaufruf zurückzusenden, also mit
übergibt der Funktionsaufruf getAuthenticatedAcivePower(PassWord,ShellyPRO3emIP); undeffinierte Werte. Daher schreibe ich die Werte in der Funktion direkt in eine "globale Variable", was nicht besonders schön ist.
Wenn jemand weiss, warum das so ist und wie ich das umgegen kann, bin ich für Anregungen offen und würde die Funktion entsprechend anpassen.
Danke nochmal für die tolle Hilfe