Hauptmenü

Aktuellen Zeitpunkt in DOIF

Begonnen von Superposchi, 13 September 2021, 09:07:52

Vorheriges Thema - Nächstes Thema

Superposchi

Ich würde gerne vom einem aktuellen Zeitpunkt aus gesehen in einer relativen Zeit (aus einem Reading) ein Device schalten.

In der commandRef habe ich gelesen wie man Zeiten addiert und auch aus Readings Zeitangaben dafür nutzt.
Es wird auch ein Beispiel mit Sunset aufgeführt. Doch ich habe nirgendwo etwas dazu gefunden wie man die Zeit auf den aktuellen Zeitpunkt addiert, also sowas wie:
([({now()}+ ([Reading]

Gibt es sowas wie now() und falls ja, wie lautet der genaue Ausdruck für den aktuellen Zeitpunkt?

Sany

Moin,

es gibt schon Möglichkeiten, die aktuelle Zeit auszugeben, und auch damit zu rechnen. Allerdings denke ich mal, dass das in einem DOIF scheitert: Es werden mit irgendwie definierten Zeiten ja timer definiert, zu denen dann etwas ausgeführt wird. Das Problem ist das "Jetzt". Wie soll DOIF einen Timer definieren, selbst wenn Du noch was draufrechnest. "Jetzt" ist halt "immer", aber immer nur für den Moment. Du kannst es definieren, bekommst aber nur den Definitionszeitpunkt als "jetzt" + irgendwas gerechnetes. Macht aber irgendwie keinen Sinn (für eine Automation). Für Tests mag das ja passen.

beispiel:
defmod di_timeTest DOIF ([({strftime("%H:%M:%S",localtime)})])\
  ()\
DOELSEIF\
([({strftime("%H:%M:%S",localtime)}) + 3600])\
  ()

(als RAW einfügen)((und vermutlich gibts noch zig andere Möglichkeiten, wie immer in PERL))

Schildere doch mal, was Du damit vorhast.

Gruß
fhem auf Zotac ZBox nano als LXC auf Proxmox, weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

Superposchi

Das "Jetzt" sollte sich auf den Auslösezeitpunkt beziehen, also hätte man doch einen definierten Zeitpunkt. Nämlich Auslösezeitpunkt plus X. Wenn es dafür eine andere Lösung gibt bin ich offen für Vorschläge.

Hintergrund ist, dass ich mir einen variablen Timer für einen Ventilator (kann aber auch jedes andere Gerät sein) basteln will.
Die Verzögerung X soll dabei variabel sein, daher aus einem Reading (welches aus FTUI befüllt werden könnte) ausgelesen werden.
Das Problem ist halt, dass es keinen festen Auslösezeitpunkt gibt, sondern das Gerät jederzeit eingeschaltet werden kann.

Spontan wäre vielleicht das Datum des state-Readings noch geeignet um das "Jetzt" zu umgehen.

Elektrolurch

Anscheinend geht es doch trivial darum, zu einem Auslösezeitpunkt etwas definiert verzögert zu tun.
DOIF hat da das Attribut wait.
Elektrolurch
configDB und Windows befreite Zone!

MadMax-FHEM

Ein notify auf die Auslöseverzögerung (also auf das Setzen des Auslöseverzögerungswertes im FTUI) und dann entweder ein "relatives" at mit eben dem Wert aus dem Reading/Event anlegen...
...oder kurz und schmerzlos: sleep ZeitAusReading/Event set Device Wert

Wenn mit at oder benamsten sleep, kannst du sogar zu Beginn abbrechen und dann erst neu setzen oder bei at mit defmod arbeiten, dann wird jede Änderung am Verzögerungswert in ein neu passendes at "umdefiniert"...

EDIT: oder mal MSwitch anschauen (ist halt [noch] nicht mehr? im offiziellen fhem Repository / muss also "manuell" installiert werden / wird aber im Forum supported)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

betateilchen

Zitat von: Superposchi am 13 September 2021, 09:07:52
Ich würde gerne vom einem aktuellen Zeitpunkt aus gesehen in einer relativen Zeit (aus einem Reading) ein Device schalten.

Mit "on-for-timer" kannst Du verzögertes Ausschalten realisieren,
mit "off-for-timer" kannst Du verzögertes Einschalten realisieren, vorausgesetzt, das device ist gerade ausgeschaltet.

Beide Varianten gehen immer vom aktuellen Zeitpunkt aus.

Schwierig wird das allenfalls bei Homematic Geräten, die - wenn ich mich recht erinnere - kein off-for-timer kennen. Aber auch dafür gibt es Lösungen.


--
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Superposchi

@Elektrolurch
Das wait kann aber nicht aus FTUI verändert werden soweit ich weiß.

@MadMax-FHEM
Mit einem at könnte ich auf eine veränderbare Verzögerung reagieren. Geht das mit sleep auch?
In beiden Fällen müsste aber zwei Steuerdevice existieren soweit ich das verstehe und das würde ich gerne vermeiden wenn machbar. Aber auf Anhieb fällt mir auch nichts anderes ein.

Das Mswitch muss ich mir in Ruhe ansehen.

@betateilchen
Es handelt sich bei dem zu schaltenden Device um ein Tuya-Gerät das per Fhempy angesteuert ist, da gibt es on/off-for-timer leider nicht. Jedenfalls kann ich es nicht per Set-Befehl finden.

Was ist denn mit der Idee den Timestamp des state plus der Verzögerung zu nutzen. Würde das gehen?
Wenn nicht bleibt wirklich nur diese doppel-device-lösung mit dem at

MadMax-FHEM

Doppel-Device ist es ja nur kurzzeitig...

Das notify was auf eine Änderung deiner Verzögerung von FTUI reagiert bleibt nat. Dauerhaft.

Das at existiert ja nur von: Erstellung bis verzögerte Auslösung (danach ist es ja "weg")...

Ein at hat halt den Vorteil, dass du einfach defmod mit dem Namen des temporären-at nutzen kannst und somit alles in einem Befehl abarbeiten kannst.
Bei einem "named sleep" müsstest (solltest) du ja erst mal ein cancel auf das (evtl.) bestehende sleep machen, bevor du ein gleichnamiges neues sleep anlegst...

Also:

du stellst eine Verzögerung ein -> at wird angelegt (oder modifiziert) / du änderst deine Mainung VOR Ablauf -> defmod auf at -> neue Verzögerung (modifiziertes at) wird angelegt, "altes" at "abgebrochen"

du stellst eine Verzögerung ein -> named sleep / du änderst deine Meinung VOR Ablauf -> cancel des named sleep und anlegen eines neuen named sleep (also 2 Schritte)

Zumindest sehe ich das (aktuell) so...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Sany

ZitatDas Problem ist halt, dass es keinen festen Auslösezeitpunkt gibt, sondern das Gerät jederzeit eingeschaltet werden kann.

Spontan wäre vielleicht das Datum des state-Readings noch geeignet um das "Jetzt" zu umgehen.

Ich versteh's immer nocht nicht ganz, was Du willst.
Zitatdas Gerät jederzeit eingeschaltet werden kann
bedeutet das, ein Gerät wird irgendwie irgendwann eingeschaltet (also von Hand, ohne fhem?)
und jetzt willst Du es nach einer einstellbaren Zeit ausschalten?

Also: wer schaltet wann was und was soll dann variabel zeitverzögert geschehen.

fhem auf Zotac ZBox nano als LXC auf Proxmox, weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

Superposchi

@MadMax-FHEM
Das ist mir irgendwie zu kompliziert.
Ich will nichts canceln, warum sollte man einen selbsterstellten Timer canceln?

Es soll einfach nur auf ein Event (Das Einschalten des Ventilators) reagiert werden und dieser in x Stunden wieder ausgeschaltet werden. Mit festen Zeiten wäre das gar kein Problem. Es wird erst durch die wechselbare Verzögerungszeit und den variablen Auslösezeitpunkt komplex.

Außerdem verstehe ich nicht warum ich das at beim auslösen des notify erst erstellen soll - weiß gar nicht wie das funktionieren soll.

@Sany
Du hast es doch exakt geschrieben. Der Ventilator wird von Hand oder durch die SmartLife-App oder sogar durch Fhem eingeschaltet was ein Event auslöst (state wechselt auf on). Ausgehend von diesem Event soll Zeitverzögert das Gerät wieder ausgeschaltet werden. Dabei soll die Verzögerung einstellbar sein und darum einem Reading entnommen werden.

antonwinden

wait kann sehr wohl verändert werden mit einem dummy.
attr:
     wait:
       0:
         0
         [BeregnungDauer:dauer]
         0
         [BeregnungDauer:dauer]

gruß anton
KNX, Raspberry, Denon 3313, Philips TV, Xtrend9X00 und viel Optimismus...

Superposchi

@antonwinden
Du meinst "attr. <Device> wait <Wert>" oder was?
Das wird doch dann nicht in die Konfiguration gespeichert.

Ansonsten weiß ich nicht was du mit dieser Schreibweise meinst

MadMax-FHEM

Zitat von: Superposchi am 13 September 2021, 13:38:18
@MadMax-FHEM
Das ist mir irgendwie zu kompliziert.
Ich will nichts canceln, warum sollte man einen selbsterstellten Timer canceln?

Cancel ist ja NUR beim sleep notwendig/ratsam und ich habe das auch nur ausführlich geschrieben, weil ich dachte du wolltest es wissen...
...werde ich einfach zukünftig lassen...

Beim at macht das ja das defmod...

Zitat von: Superposchi am 13 September 2021, 13:38:18
@MadMax-FHEM
Es soll einfach nur auf ein Event (Das Einschalten des Ventilators) reagiert werden und dieser in x Stunden wieder ausgeschaltet werden. Mit festen Zeiten wäre das gar kein Problem. Es wird erst durch die wechselbare Verzögerungszeit und den variablen Auslösezeitpunkt komplex.

Außerdem verstehe ich nicht warum ich das at beim auslösen des notify erst erstellen soll - weiß gar nicht wie das funktionieren soll.0

Jetzt bin ich verwirrt: ich dachte du wolltest irgendwo die Verzögerung ändern und auf die Anpassung der Verzögerung (darauf dann eben das notify) etwas einschalten und verzögert ausschalten (oder andersrum)?

Dann eben ein notify auf das Ein-/Ausschalten und da dann eben

define nOnOff notify Device:on defmod atName at +VerzögerungAusReading set Device off/on

also mal als "Pseudocode"...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

MadMax-FHEM

Zitat von: Superposchi am 13 September 2021, 13:46:19
@antonwinden
Du meinst "attr. <Device> wait <Wert>" oder was?
Das wird doch dann nicht in die Konfiguration gespeichert.

Ansonsten weiß ich nicht was du mit dieser Schreibweise meinst

Ich schätze mal bei einem DOIF das eben schalten/reagieren soll...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Thyraz

Er beschreibt ein wait Attribut für ein Doig, welches keine feste Wartezeit hat sondern dies aus einem Reading entnimmt.
Also an sich genau das was du beschrieben hast.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...