State "on-for-timer" bei Z-Wave nicht erkennbar?

Begonnen von FunkOdyssey, 15 März 2017, 14:03:14

Vorheriges Thema - Nächstes Thema

FunkOdyssey

Kann man bei den Z-Wave-Geräten eigentlich gar nicht erkennen, ob diese per "on-for-timer" eingeschaltet wurden?

Bei meinen Homematic-Geräten verlängere ich die Einschaltzeit eines Geräts per on-for-timer auf folgende Art:

set hm_lampe:FILTER=state!=on on-for-timer 300

Ein "on-for-timer" darf nicht ausgelöst werden, wenn die Lampe bereits manuell eingeschaltet wurde. HM-Geräte beinhalten im State auch ein "on-for-timer".

Mache ich das nun bei Z-Wave so klappt das leider nicht. Hier bedeutet, dass "on-for-timer" den State auf "on" setzt. Also wird eine Verlängerung des Timers durch eine erneute Bewegung nicht durchgeführt, da ja der Status auf "on" steht.

Hat jemand einen Tipp wie ich das bei Z-Wave machen kann?

Ich wundere mich nämlich seit längerem warum meine Z-Wave-Lampen immer erst ausgehen müssen, um dann wieder eingeschaltet zu werden. :-)

rudolfkoenig

ZitatKann man bei den Z-Wave-Geräten eigentlich gar nicht erkennen, ob diese per "on-for-timer" eingeschaltet wurden?
Nur wenn man nach "set on-for-timer" auch ein "setstate on-for-timer" ausfuehrt.

FunkOdyssey

Zitat von: rudolfkoenig am 15 März 2017, 14:59:10
Nur wenn man nach "set on-for-timer" auch ein "setstate on-for-timer" ausfuehrt.

Sorry, Rudolf, aber das bringt ja nicht wirklich viel, oder?
Ich ändere ja einfach nur hart den Status ohne jedwede Countdown-Funktion.  ;)

Ich habe nun im Forum gefunden, dass ein Internal gesetzt wird:


Internals:
   Readings:
     2017-03-15 14:10:18   reportedState   on
     2017-03-15 15:04:55   state           on
   Timed_onoff:
     CMD        on-for-timer
     DURATION   240
     NEXTCMD    off
     START      1489586695.08448
     START_FMT  2017-03-15 15:04:55


Ich versuche es mal darüber. Wenn ich den Code habe, dann werde ich es hier schreiben.
Ich bin ein DOIFler und suche gerade hier nach der richtigen Syntax. :-)

FunkOdyssey

Mit Hilfe des o.g. DOIF-Threads habe ich nun einen Workaround für die Verlängerung eines "on-for-timer"s gefunden.

Das Ergebnis auf Basis eines DOIFs sieht wie folgt aus:

Z-Wave:

(
[bmelder:motion] =~ "on" and
(
[lampe:state] eq "off" or
[lampe:state] eq "on" and $defs{'lampe'}->{TIMED_OnOff}{CMD} eq "on-for-timer"
)
)
(
set lampe on-for-timer 300
)



Bei Homematic wäre es ein Einzeiler, da man hier anhand der Readings den aktuellen Zustand filtern kann.

Homematic:

(
[bmelder:motion] =~ "on"
)
(
set lampe:FILTER=state!=on on-for-timer 300
)





Bei Z-Wave ist dies leider nicht direkt erkennbar, so dass ein devspec-Filter dann nicht funktioniert.

Wäre das nicht eine Überlegung, bei Z-Wave-Geräten das irgendwie offensichtlich erkennbarer und somit auch nutzbarer zu machen?

Das wäre Notifys und DOIFs um ein Vielfaches übersichtlicher machen.

Vielen Dank.

krikan

Normalerweise sollte bei ZWave "reportedState" den aktuellen Zustand des Aktors liefern. Dann braucht man nicht solche Klimmzüge zu machen.#

Gruß, Christian

FunkOdyssey

#5
Zitat von: krikan am 16 März 2017, 11:44:06
Normalerweise sollte bei ZWave "reportedState" den aktuellen Zustand des Aktors liefern. Dann braucht man nicht solche Klimmzüge zu machen.#

Gruß, Christian

Jein. Natürlich steht dort dann, dass der Aktor "on" ist. Aber woher weiß ich dann, ob der Aktor über einen on-for-timer oder manuell eingeschaltet wurde?
Würde ich bei einem "on" einen "on-for-timer" hinterherschieben, dann geht der Aktor ja wieder aus.
Ich will doch nur, dass eine begrenzte Einschaltzeit durch eine erneute Bewegung wieder verlängert wird. Aber auch nur dann, wenn die Lampe durch den Bewegungsmelder eingeschaltet wurde.

Abgesehen davon aktualisiert sich "reportedState" bei mir nicht.

krikan

ZitatAber woher weiß ich dann, ob der Aktor über einen on-for-timer oder manuell eingeschaltet wurde?
Gar nicht; hast recht und ich habe den Thread-Anfang nicht richtig gelesen bzw. verstanden.  :-[

FunkOdyssey

Schade. Ich hätte mich gerne geirrt. Mir wäre es lieber gewesen, wenn ich irgendeine viel einfachere Lösung übersehen hätte.

Ist das denn kompliziert umzusetzen? Einfach das Internal {TIMED_OnOff}{CMD} als Reading darstellen?

Thyraz

Ich denke der Unterschied bei ZWave und Homematic liegt auch daran,
dass Homematic ein On-For-Timer ja wirklich intern unterstützt.

Sprich wenn die Zentrale abstürzt wird dennoch nach der Zeit abgeschaltet.
Bei ZWave gibt es das ja nicht und es handelt sich nur um ein Software-Gimmick von FHEM.

Ich würde daher im DOIF auch gar nicht on-for-timer verwenden, sondern den Zustand eben manuell im DOIF steuern.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

rudolfkoenig

set hm_lampe:FILTER=TIMED_OnOff!=HASH.* on-for-timer 300

FunkOdyssey

Super, das kann ich mal ausprobieren. Über den String HASH bin ich auch gestolpert, als ich mir folgendes angeguckt hatte:
{$defs{'lampe'}->{TIMED_OnOff}}

Nur bin ich nicht auf die Idee gekommen, dies als Filter zu gebrauchen.

Danke vielmals.

stobor

#11
Hilft das auch bei Arduino? Allerdings verstehe ich nicht so ganz, wie das zu verwenden ist.
Ich habe Arduino so verwendet:
define Arduino1 FRM /dev/serial/by-id/usb-Arduino__www.arduino.cc__0043_85735313333351709191-if00@57600
attr Arduino1 room ArduinoCPU
attr Arduino1 verbose 4
#attr Arduino1 sampling-interval 1000

define Arduino_Pin5_Licht_West FRM_OUT 5  # Licht West
attr Arduino_Pin5_Licht_West IODev Arduino1
attr Arduino_Pin5_Licht_West alias Licht West
attr Arduino_Pin5_Licht_West room ArduinoCPU,Aussen
attr Arduino_Pin5_Licht_West stateFormat value


Ich möchte hier das gleiche Problem wie FunkOdyssey lösen, verstehe die beschriebene Lösung allerdings nicht.
So habe ich das zu FS20 Zeiten gebaut:
if Value("Arduino_Pin5_Licht_West") ne "on") {\
...{Code, der bei Status on-for-timer ausgeführt werden soll}


Wie kann ich dass denn innerhalb von FHEM verändern?
Intel NUC (Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-73-generic x86_64))  mit CUL V3.2 (Firmware 1.57 CUL868) für FS20 und CUL V3.4 (Firmware 1.57 CUL868) für HM + Arduino Mega
FHEM Revision: 27642
FS20-Schalter und Dimmer
HM Fensterkontakte, Heizungsthermostate, Temperatursensoren