Servus zusammen,
hab mich heute mal drangesetzt eine von einem Shelly gemeldete Luftfeuchte dazu zu nutzen, einen Luftentfeuchter ein- und auszuschalten. Habe leider mit Javascript absolut keine Erfahrung und eigentlich überhaupt keine Kenntnisse dazu.
Hab dann zunächst versucht mit Blockly mir da was zusammenzubasteln, hat aber nicht funktioniert.
Bin dann dazu übergegangen, ein kleines Script zu basteln, dass einen Datenpunkt (switch) je nach Feuchtigkeit beschreibt mit true (Entfeuchter ein) oder false (Entfeuchter aus).
Mir ist allerdings nicht ganz klar, was setStateDelayed genau macht.
Ich kann damit einen Wert zeitverzögert schalten - soweit, so gut. Wie funktioniert dieser Befehl aber in Detail? Wann und wie läuft die Zeit ab? Lasse ich den Timer bei jedem Aufruf neu starten, dann schaltet der Befehl meinen Ausgang nicht. Lasse ich den Timer nicht neu starten, dann habe ich das Problem, dass es sein kann, das der Ein- und Ausschaltbefehl zu undefinierten Zeitpunkten geschrieben werden.
Ist es möglich, den Timer irgendwie zu löschen oder sich die bereits abgelaufene Zeit und die Restzeit anzeigen zu lassen?
Hier mal noch das Script zum besseren Verständnis (ist noch nicht ganz fertig)
/* Ein- / Ausschaltzeitpunkte und Verzögerung */
const Einschaltpunkt = 65.0;
const Ausschaltpunkt = 52.0;
const Verzoegerung = 60000 * 1; // 60000 mSek * 1 = Minuten
/* Ein- / Ausschaltzeiten */
const ZeitStundenEin = 10; // frühester Einschaltzeitpunkt
const ZeitMinutenEin = 0;
const ZeitStundenAus = 21; // spätester Ausschaltzeitpunkt
const ZeitMinutenAus = 0;
/* DEBUG Ausgabe aktivieren */
const DEBUG = true;
/* Datum / Uhrzeit */
let DatumUhrzeit = new Date();
// --------------------------------------------------------------------------------
while (true) {
// Wert von Shelly umkopieren
setState('0_userdata.0.Entfeuchter.Istwert' /* Istwert */, getAttr(getState('mqtt.0.shellyhtg3-dcda0cb73fe0.status.humidity:0').val, 'rh'), true);
if (DEBUG) { console.info('Wert Shelly: ' + getState('0_userdata.0.Entfeuchter.Istwert').val); }
// Wert auf Gültigkeit prüfen
if (getState('0_userdata.0.Entfeuchter.Istwert').val != null)
{
// Einschalten
if (getState('0_userdata.0.Entfeuchter.Istwert').val > Einschaltpunkt)
{
if (DEBUG) { console.info('Einschalten wird gewünscht'); }
// Entfeuchter verzögert einschalten
setStateDelayed('shelly.0.SHPLG2-1#4E5D76#1.Relay0.Switch' /* Schalter */, true, Verzoegerung, false);
}
// Ausschalten
if (getState('0_userdata.0.Entfeuchter.Istwert').val < Ausschaltpunkt)
{
if (DEBUG) { console.info('Ausschalten wird gewünscht'); }
// Entfeuchter verzögert ausschalten
setStateDelayed('shelly.0.SHPLG2-1#4E5D76#1.Relay0.Switch' /* Schalter */, false, Verzoegerung, false);
}
}
await wait(10000);
}