-
Autor
Hallo,
ich habe mich gefragt warum eine Abfrage nicht richtig funktioniert, bis ich mal ein paar Debugs eingebaut habe.
Dort ist mir aufgefallen das die Uhrzeit nicht aktualisiert wird, genauer gesagt die Stunden.
Das Script habe ich um 11 Uhr gestartet. Es soll mir zyklisch ein paar Informationen anzeigen. Nun ist es schon 12 Uhr und mir wird immer noch 11 Uhr angezeigt.
Die Minuten passen..
Ist das ein Bug der Funktion oder mache ich etwas falsch?
// Konfiguration
let CHECK_INTERVAL = 10; // Sekunden
let LOW_TEMP_TRIGGER = 23.0; // °C
let HIGH_TEMP_THRESHOLD = 25.0; // °C (Wird genutzt, um "heiß" zu markieren)
let wasHot = false;
let actionDone = false;
let temp = 0.0;
const HOUR_TO_SHUT_DOWN = 21;
const MINUTE_TO_SHUT_DOWN = 20;
const DateDetection = new Date();
let DayOfLastHotDetection = DateDetection.getDay();
const CoverURL= [
"http://192.168.178.181/rpc/Cover.GoToPosition?id=0&pos=50", //Badezimmer
"http://192.168.178.184/rpc/Cover.GoToPosition?id=0&pos=50", // Schlafzimmer
"http://192.168.178.182/rpc/Cover.GoToPosition?id=0&pos=50", // Wohnzimmer - großes Fenster
"http://192.168.178.180/rpc/Cover.GoToPosition?id=0&pos=50"
]; // Wohnzimmer - kleines Fenster];
// Rollladensteuerung (HTTP-Request an anderes Gerät)
function rolladenRunter() {
print("→ Rolllaeden werden heruntergefahren.");
for( let i = 0; i < CoverURL.length; i++ )
{
let msg = "Ausgefuehrt: ";
msg += CoverURL[i];
console.log(msg);
Shelly.call("http.get", { url: CoverURL[i] }, function (response){
});
}
actionDone = true;
}
// Temperatur prüfen Funktion
function checkTemp()
{
Shelly.call(
"HTTP.GET",
{ url: "http://192.168.178.107/rpc/Temperature.GetStatus?id=100"}, // Call to other Shelly
function(result, error_code, error_message) {
if (error_code !== 0) {
print("Fehler beim auswerten der Temperatur");
}
else {
let jsonData = JSON.parse(result.body);
let tempHome = jsonData.tC;
temp = tempHome;
}
});
let Hour = DateDetection.getHours();
let Minute = DateDetection.getMinutes();
if(DayOfLastHotDetection != DateDetection.getDay()){
DayOfLastHotDetection = 0;
console.log("Datum der letzten Erkennung eines heißen Tages wurde zurückgesetzt..");
}
// Prüfen ob es vorher heiß genug war
if (temp >= HIGH_TEMP_THRESHOLD) {
wasHot = true;
print("Temperatur war heiß genug – Zustand gemerkt.");
if(DayOfLastHotDetection != DateDetection.getDay()){
DayOfLastHotDetection = DateDetection.getDay();
actionDone = false;
print("Datum der letzten Erkennung eines heißen Tages wurde aktualisiert..");
}
}
// Prüfen ob der Trigger aktiviert werden soll
if (wasHot && temp <= LOW_TEMP_TRIGGER && !actionDone && Hour >= HOUR_TO_SHUT_DOWN && Minute >= MINUTE_TO_SHUT_DOWN ) {
print("Temperatur ist gefallen – Trigger wird ausgelöst.");
//rolladenRunter();
wasHot = false; // Nachdem die Rollaeden heruntergefahren sind, sollen sie erst bei erneueten erreichen der HIGH_TEMP_THRESHOLD wieder mit dem Script verfahren
}
// Optional: Hinweis, falls schon ausgelöst oder Bedingungen nicht erfüllt sind
if (temp <= LOW_TEMP_TRIGGER && actionDone) {
print("Temperatur unter Schwellwert und Aktion bereits ausgeführt.");
}
let msg = "aktuelle Temperatur: ";
msg += temp;
console.log(msg)
msg = "letzter Tag an dem die Temperatur über HIGH_TEMP_THRESHOLD lag, war am ";
msg += DayOfLastHotDetection;
msg += " Tag der Woche..";
print( msg);
msg = "aktuelle Systemzeit ist ";
msg += DateDetection.toString();
print(msg);
msg = "actionDone ->";
msg += actionDone;
console.log(msg);
msg = "wasHot ->";
msg += wasHot;
console.log(msg);
msg = "Hour >= HOUR_TO_SHUT_DOWN ->";
msg += Hour >= HOUR_TO_SHUT_DOWN;
print(msg);
msg = "Minute >= MINUTE_TO_SHUT_DOWN ->";
msg += Minute >= MINUTE_TO_SHUT_DOWN;
print(msg);
print(DateDetection.getHours())
}
// Timer starten
Timer.set(CHECK_INTERVAL * 1000, true, checkTemp);
// Initiale Prüfung
checkTemp();