-
Autor
Hi Leute,
ich bin noch Anfänger und derzeit dabei mir ein Script zu schreiben, das folgendes tut:
- Ich meiner Funktion getPowerConsumption ermittele ich mir an meinem 3em den Stromverbrauch von meinem Haus
- Innerhalb dieser Funktion rufe ich die Funtkion getTankTemperature auf um mir die Temperatur meines Pufferspeichers zu ermitteln
- Das mache ich mit Shelly.call. Ich weiß das diese Funtion asyncrhon arbeitet und derweil getPowerConsumption weiterläuft. Wie kann ich das umgehen?
Ich habe Posts gesehen die mit Timer arbeiten, aber das hat irgendwie alles nicht funktioniert.
- Das mache ich mit Shelly.call. Ich weiß das diese Funtion asyncrhon arbeitet und derweil getPowerConsumption weiterläuft. Wie kann ich das umgehen?
Das hier ist mein Script:
Code
//############################## Config ############################
let Config = {
interval : 5 // 2 seconds is the minimum interval
}
let tanktemp;
// Konfiguration des Shelly-Geräts
const shellyIP = '127.0.0.1';
// Funktion zum Abrufen der Speichertemperatur
function getTankTemperature() {
Shelly.call(
"HTTP.GET",
{
url: "http://192.168.178.27/rpc/Temperature.GetStatus?id=101"
},
function(result, error_code, error_message) {
if (error_code !== 0) {
print('Error');
} else {
let jsonData = JSON.parse(result.body);
let temperatureCelsius = jsonData.tC;
tanktemp = temperatureCelsius;
console.log('Speichertemperatur:', tanktemp);
}
}
);
}
// Funktion zum Abrufen des Stromverbrauchs
function getPowerConsumption() {
try {
//hole Speichertemperatur ab
getTankTemperature();
console.log('Speichertemperatur', tanktemp );
const response = Shelly.getComponentStatus("em:0");
const totalActPowerStr = response.total_act_power;
let totalActPower = parseFloat(totalActPowerStr);
const pwerPhaseA = parseFloat(response.a_act_power);
const pwerPhaseB = parseFloat(response.b_act_power);
const pwerPhaseC = parseFloat(response.c_act_power);
console.log('Total Active Power (Number):', totalActPower );
//console.log('Power Phase A:', pwerPhaseA, 'W' );
//console.log('Power Phase B:', pwerPhaseB, 'W' );
//console.log('Power Phase C:', pwerPhaseC, 'W' );
if (totalActPower > -2000) {
console.log('Phase 1,2,3 OFF');
} else if (totalActPower >= -3000 && totalActPower <= -2000) {
console.log('Phase 1 ON');
console.log('Phase 2 OFF');
console.log('Phase 3 OFF');
}
} catch (error) {
console.error('Fehler beim Abrufen des Stromverbrauchs:', error.message);
}
}
function start() {
getPowerConsumption();
Timer.set(Config.interval * 1000,true,getPowerConsumption);
}
// schedule script start for 1 second
Timer.set(1000,false,start);
Alles anzeigen
Ich möchte das zuerst die Temperatur ermittelt wird und dann der Stromverbrauch?
Könnt ihr mir helfen?
Danke u. Gruß
Spike