NEWS
UNSOLVED Abfrage ob heute schon einmal true?
-
Hi,
ich möchte um 12 Uhr abfragen ob mein Sauger entweder manuell oder automatisch schon einmal gestartet wurde.
Ich frage im Bestandsscript zyklisch verschiedene Vorraussetzungen für den automatischen Start ab (bspw. Autostart nur wenn keiner zu Hause)Nun möchte ich aber durch eine weiter Abfrage eine Telegram-Frage (ja/nein) senden die versendet wird wenn um 12 der Sauger noch nicht gefahren ist weil jemand als anwesend erkannt wird (Homeoffice / Handy vergessen).
Das wollte ich wie folgt machen:
if(new Date().getHours() >= 12 && getState('mihome-vacuum.0.control.start').lc < Date.now()){ sendQuestion('vacuumCleanerOn') }
Hier fehlt mir aber die Abfrage ob der state heute schon mal true war und mir fällt gerade nicht wirklich eine effektive Lösung ein das abzufragen.
Vielleicht hat ja einer von euch eine Idee
Danke schonmal -
@peoples sagte in Abfrage ob heute schon einmal true?:
Hier fehlt mir aber die Abfrage ob der state heute schon mal true war und mir fällt gerade nicht wirklich eine effektive Lösung ein das abzufragen.
Spontan und ohne Garantie:
Eine Variable beim Start des Saugers automatisch auftrue
setzen und um kurz nach Mitternacht automatisch (Zeitplan) wieder auffalse
setzen lassen. Diese Variable dann abfragen. Beitrue
wurde der Sauger heute schonmal gestartet und beifalse
eben noch nicht. -
@peoples sagte: state heute schon mal true war
const start = getState('mihome-vacuum.0.control.start'); if(new Date().getHours() >= 12 && !start.val && start.lc < new Date().setHours(0, 0, 0, 0)) {
-
@peoples
noch eine alternative wäre es die historisierung für den datenpunkt zu aktivieren und dann die daten seit 0 Uhr abrufen und prüfen ob da true enthalten ist. -
@paul53
genial!Danke an euch alle
-
@peoples Bei der Lösung von @paul53 (und deinem Lösungsvorschlag) fehlt mir etwas.
Wie / wann wird dieser Skriptschnipsel ausgeführt ?
ich würde das insgesamt so lösen:
schedule("0 12 * * *", async () => { const start = getState('mihome-vacuum.0.control.start'); if (!start.val && start.lc > new Date().setHours(0, 0, 0, 0)) { console.log("letzte Änderung war nach heute morgen 0 Uhr") } });
Dann wird täglich um 12 geschaut ob der Datenpunkt am gleichen Tag schon einmal wahr war.
Den code von @paul53 zyklisch abzuarbeiten macht IMHO keinen Sinn.
A.
-
@asgothian
Das ist ein Teil einer Funktion, die wie oben geschrieben sowieso zyklisch ausgeführt wird, da halbstündlich verschiedene Gegebenheiten abgefragt werden und je nach dem wird einer der Sauger gestartet und reinigt nur spezielle Bereiche.Abhängig davon wer, wann zu Hause ist.
Eine Prüfung zu einer festen Zeit erfüllt hier nicht den Zweck. -
@peoples sagte in Abfrage ob heute schon einmal true?:
Eine Prüfung zu einer festen Zeit erfüllt hier nicht den Zweck.
das widerspricht dem was du tun willst - um 12 schauen ob der Staubsauger schon gelaufen ist. Das muss genau 1 mal um 12 gemacht werden. Wenn du es im regelmässigen Ablauf lassen willst, sollte die IF abfrage so aussehen:
if(new Date().getHours() >= 12) { const start = getState('mihome-vacuum.0.control.start'); if (!start.val && start.lc < new Date().setHours(0, 0, 0, 0)) { } }
damm holst du das Objekt
mihome-vacuum.0.control.start
nicht jedesmal obwohl der Test gar nicht gewünscht ist.A.
-
@asgothian
Die Sauger fahren in Abwesenheit der Bewohner automatisch zwischen 8 und 16 Uhr wenn keiner zu Hause ist.
Wenn ich Homeoffice habe fährt der Keller Sauger nicht, wenn jemand im EG zu Hause ist, startet der nicht, gleiches gilt fürs OG.
Um 12 / 16 / 18 Uhr bekomme ich, meine Frau oder die Kinder eine Telegramm Nachricht ob der Sauger im KG / EG / DG gestartet werden soll da er heute noch nicht automatisch gestartet wurde (weil jemand Anwesend ) dies kann dann mit Ja oder Nein beantworten und je nach dem startet der jeweilige Sauger oder nicht.Mit deiner Änderung hast du recht, das baue ich so noch um, danke.