Die Daten direkt im Hauptprogramm zu nutzen, wird schwierig. Man müsste eine Zeit lang warten, bevor die Daten gültig sind. Da der http.get Call eine unbekannte Zeit benötigt, wird es schwierig. Klar, man könnte einfach eine ausreichend große Zeitspanne warten, aber das ist ggf. nicht praktikabel.
Alternativ verarbeitet man die Daten direkt in der http.get Callback Funktion. Das führt aber zu recht tief geschachteltem Code. Kommt halt drauf an, was man noch mit den Werte so anstellen möchte.
Die 3. Möglichkeit ist, sich selber einen "Fertig" Event zu senden. Dann kann man den Wert im Event-Handler auswerten. Hier der Code dafür:
function getSolarPower() {
let params = {
url: "http://192.168.xxx.xxx/api/livedata/status"
};
Shelly.call('http.get', params, function(result, error_code, error_message) {
if (error_code != 0) {
print('Fehler beim Senden der Daten: ', error_message);
print(params); // Ausgabe der Parameter zur Fehleranalyse
solarPower = -777; // Fehlerwert fuer die Anzeige
} else {
print('Daten erfolgreich empfangen.');
// JSON-Antwort parsen
let parsedData = JSON.parse(result.body);
print("parsedData :", parsedData); // Ausgabe der parsedData
// Auf ein verschachteltes Element zugreifen
if (parsedData && parsedData.data && parsedData.data.total && parsedData.data.total.Power) {
let solarPower = parseInt(parsedData.total.Power.v);
print ('SolarPower: ', solarPower);
// Daten als Event weitergeben
Shelly.emitEvent('SolarpowerEvent', solarPower);
}
}
});
}
function handleSolarPower(event) {
if (event.info.event !== 'SolarpowerEvent') {
return;
}
let data = event.info.data;
print ('SolarpowerEvent: ', data);
}
Shelly.addEventHandler(handleSolarPower);
getSolarPower();
Alles anzeigen