NEWS
SOLVED Shelly Door/Window 2 ( gelöst )
-
Hallo zusammen
Wer von euch verwendet die Shelly Door / Window 2 Sensoren für die Fensterüberwachung?
Möchte gerne auf der Visu anzeigen, wie lange das Fenster schon offen ist. Habe im Moment 2 Fenster die Überwacht werden, und diese möchte ich gerne angezeigt haben. Wer weiss wie das am besten gelöst werden könnte?
-
@bananajoe Hab es mit Blockly gelöst und scheint zu funktionieren.
-
@stefu87_ch ich habe tatsächlich noch 4 Stück von denen hier im Hause kleben - und sogar noch in ioBroker eingebunden, nutze die aber nicht mehr (ZigBee funktioniert irgendwie besser/schneller).
Aber ... das ist ja kein Shelly Door/Window 2 Problem:
Ob es offen oder geschlossen ist ist ja im Datenpunkt
shelly.0.SHDW-2#D8BFC01A72AE#1.sensor.door
hinterlegt (dann halt mit deiner ID)
Die Einschaltdauer - da nutze ich etwas mit meinen Tasmota-Steckdosen, und zwar wie folgt:
Ich hab in JavaScript einen Trigger auf den Datenpunkt mit Ein/Aus, hier wäre das dann der .sensor.door
Der Trigger schreibt beim Einschalten die aktuelle Zeit als UNIXTIME weg:i_global_unixtimeSwitchedOn = Math.floor(Date.now() / 1000); setState("0_userdata.0.tmp.unixtimeSwitchedOn", i_global_unixtimeSwitchedOn, true);
UNIXTIME ist die aktuelle Zeit als Sekunden seit dem 1.1.1970. Da kann man nämlich prima mit Rechnen.
Schalte ich wieder aus so wird wieder die aktuelle Zeit ermittelt und dann einfach subtrahiert:i_global_unixtimeSwitchedOff = Math.floor(Date.now() / 1000); setState("0_userdata.0.tmp.unixtimeSwitchedOff", i_global_unixtimeSwitchedOff, true); i_Duration = i_global_unixtimeSwitchedOff - i_global_unixtimeSwitchedOn; s_Duration = ConvertTimeHumanReadable(i_Duration);
ConvertTimeHumanReadable() ist dabei eine Funktion welche die Sekunden in Stunden, Minuten, Sekunden etc. umrechnet:
// Wandelt Sekunden in Tage/Stunden/Minuten/Sekunden um: function ConvertTimeHumanReadable(i_seconds) { var i_days = Math.floor(i_seconds / (24*60*60)); i_seconds -= i_days * (24*60*60); var i_hours = Math.floor(i_seconds / (60*60)); i_seconds -= i_hours * (60*60); var i_minutes = Math.floor(i_seconds / (60)); i_seconds -= i_minutes * (60); return ((0<i_days)?(i_days+"d "):"")+((0<i_hours)?(i_hours+"h "):"")+((0<i_minutes)?(i_minutes+"m "):"")+((0<i_seconds)?(i_seconds+"s"):""); }
Die habe ich bestimmt irgendwo im Internet gefunden ...
Damit hätte man schon mal die Gesamtzeit ermittelt.
Meine Tasmota-Steckdosen senden einmal die Minute Ihren Status - darauf habe ich wieder einen extra Trigger der dann auch immer gleich die aktuelle Einschaltzeit errechnet und in einen extra Datenpunkt schreibt:// Ok, wo schon mal dabei sind können wir auch gleich die aktuelle Laufzeit errechenen und wegschreiben i_global_CurrentPowerOnTimeSeconds = Number(Math.floor(Date.now() / 1000) - i_global_unixtimeSwitchedOn); setState("0_userdata.0.tmp.Time-CurrentPowerOnTimeSeconds", i_global_CurrentPowerOnTimeSeconds, true); i_global_CurrentPowerOnTimeH = ConvertTimeHumanReadable(i_global_CurrentPowerOnTimeSeconds); setState("0_userdata.0.tmp.Time-CurrentPowerOnTimeH", i_global_CurrentPowerOnTimeH, true);
Das könnte man natürlich auch per Zeitplan machen. Den Datenpunkt könntest du dann in der VIS verwenden. Wenn das Gerät ausgeschalte setze ich den immer auf 0 (weil läuft ja nicht).
Verzeih das ich das hier nur so zusammenkopiert habe, das ganze ist Teil eines großen anderen Skript, so Plug&Play habe ich das nicht fertig.
In Blockly müsste man das auch bauen können, im Datum und Zeit Bereich bekommt man auch die aktuelle Zeit als Sekunden -
@bananajoe Hab es mit Blockly gelöst und scheint zu funktionieren.