Verständnisfrage zu on-for-timer der in FHEM ausgeführt wird

Begonnen von TomLee, 12 März 2022, 13:17:36

Vorheriges Thema - Nächstes Thema

TomLee

Hallo,

wenn ich über einen Bewegungsmelder mit on-for-timer ein Licht einschalte und möchte das bei jeder weiteren Bewegung der Timer wieder von vorne beginnt, hab ich das bis jetzt so umgesetzt:

fhem("set <devicename> on-for-timer 320")

Wenn mans ganz genau nimmt, wird damit aber auch bei jeder Bewegung ein unnötiges on an die Lampe geschickt -> Event erzeugt, der Timer läuft ja nicht in der Lampe, sondern in FHEM.

Gibt es die Möglichkeit es so umsetzen das nur der Timer aktualisiert wird, ohne das ein on an die Leuchte geschickt wird ?

Gruß

Thomas

Damian

Zitat von: TomLee am 12 März 2022, 13:17:36
Hallo,

wenn ich über einen Bewegungsmelder mit on-for-timer ein Licht einschalte und möchte das bei jeder weiteren Bewegung der Timer wieder von vorne beginnt, hab ich das bis jetzt so umgesetzt:

fhem("set <devicename> on-for-timer 320")

Wenn mans ganz genau nimmt, wird damit aber auch bei jeder Bewegung ein unnötiges on an die Lampe geschickt -> Event erzeugt, der Timer läuft ja nicht in der Lampe, sondern in FHEM.

Gibt es die Möglichkeit es so umsetzen das nur der Timer aktualisiert wird, ohne das ein on an die Leuchte geschickt wird ?

Gruß

Thomas

ja, indem du selbst den on-for-timer nachbildest.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

frank

Zitatder Timer läuft ja nicht in der Lampe, sondern in FHEM.
das ist nicht bei jedem aktor der fall.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Sany

Zitat... der Timer läuft ja nicht in der Lampe, sondern in FHEM.
mindestens bei FS20 Komponenten läuft der Timer im Device. Vllt. auch bei Homematic. Für "neuere" Standards (ZigBee? Tasmota/MQTT?) wird das in fhem nachgebildet. Ich kann Dir allerdings nicht sagen, was wo gilt. Müsstest Du mal nachforschen, je nach dem, was Du da so ansteuerst.

Gruß


Sany
fhem als LXC auf Proxmox auf einem minix Z100 , weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

TomLee

Sry, hatte mich kurzentschlossen was zu "schaffen" bei dem schönen Wetter.

Es geht um Zigbee-Leuchten, darum die Frage.

Muss man den Timer wirklich nachbilden oder besteht die Möglichkeit den aktuellen Stand abzufragen, um dann zu entscheiden ob geschaltet werden soll ?

TomLee

Mal kurz gesucht und fündig geworden. Ist das Internal für die Gesamtdauer irgendwie versteckt oder abgeschafft ?

justme1968

das internal gibt es immer noch, nützt dir in deinem fall aber nichts da du nur abfragen kannst wie lange der timer noch läuft. du kannst ihn nicht ohne erneutes on verlängern. aber: du kannst die logik umdrehen und statt ein on immer wieder zu verlängern ein off immer weiter hinauszögern. das on kann man nämlich per FILTER auswerten.

ansonsten gibt es verschiedene ansätze. das kommt drauf an wie kompliziert du es haben willst.:

einfach: mach es so wie bisher. alle 5 minuten ein on an die bridge zu senden schadet niemandem.

komplexer: beim einschalten ein mal on senden wenn noch nicht an ist (FILTER) und in fhem mit einem benannten sleep ein verzögertes off bauen das immer wieder gelöscht und neu gesetzt wird.

noch komplexer: on-for-timer für deinen sonderfall selber nachbauen, ein mal on senden und einen off timer immer wieder verlängern. z.b. mit cmdalias das es auch wiederverwendbar ist.

komplizierter als nötig: über regeln alles in der bridge machen.

wie würde ich es machen? so einfach wie möglich. das ist in diesem fall ziemlich sicher weder wegen der funk last noch wegen der belastung der bridge kritisch.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Damian

Dieser Fünf-Zeiler https://fhem.de/commandref_DE.html#DOIF_Weitere_Anwendungsbeispiele

funktioniert mit jedem Device, produziert keine unnötigen Events und sendet nichts unnötig zum Device.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

TomLee

@Justme1968

Danke.

Tendiere zu :
Zitatkomplexer: beim einschalten ein mal on senden wenn noch nicht an ist (FILTER) und in fhem mit einem benannten sleep ein verzögertes off bauen das immer wieder gelöscht und neu gesetzt wird.

Ich seh auf zwei Systemen kein Internal das mir die Gesamtdauer anzeigt wenn ich ein on-for-timer ausführe, sry.

@Damian

Ich dachte mir gleich das es mit DOIF eine Lösung dafür geben wird.

Da fehlt doch ein DOIF in der Beispieldefinition der Doku.

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

TomLee

@Damian

Ich weiß es nicht und ich mag mich damit auch gar nicht befassen/den Code (von DOIF) anschauen, meine Vorstellung ist aber das deine Vorschläge mit DOIF doch das gleiche machen wie:

komplexer: beim einschalten ein mal on senden wenn noch nicht an ist (FILTER) und in fhem mit einem benannten sleep ein verzögertes off bauen das immer wieder gelöscht und neu gesetzt wird.

nur das das ganze etwas anders "verpackt" ist ?

Damian

Zitat von: TomLee am 12 März 2022, 18:06:38
@Damian

Ich weiß es nicht und ich mag mich damit auch gar nicht befassen/den Code (von DOIF) anschauen, meine Vorstellung ist aber das deine Vorschläge mit DOIF doch das gleiche machen wie:

komplexer: beim einschalten ein mal on senden wenn noch nicht an ist (FILTER) und in fhem mit einem benannten sleep ein verzögertes off bauen das immer wieder gelöscht und neu gesetzt wird.

nur das das ganze etwas anders "verpackt" ist ?

Dann setze es einfach um. Komplex ist für mich etwas anderes ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

TomLee

#12
Für die Nachwelt und zur Kontrolle  :P.

Ich hab bis jetzt nur aus der Ferne getestet, scheint aber zu klappen, die Lösung von zuvor hab ich drin gelassen und auskommentiert und ja tagsüber 2 Lampen; Abends/Nachts nur eine:

defmod not_FK_BM_DB notify MQTT2_zigbee_0x00158d000411c41c:occupancy:.true {\
#return fhem("set MQTT2_zigbee_bulb1|MQTT2_zigbee_bulb2:FILTER=state!=ON on-for-timer 320") if ReadingsVal("MQTT2_zigbee_0x00158d000411c41c","illuminance","1000") <= 55 && isday();;\
return fhem("set MQTT2_zigbee_bulb1|MQTT2_zigbee_bulb2:FILTER=state!=ON on;;sleep 320 floft;;set MQTT2_zigbee_bulb1,MQTT2_zigbee_bulb2 off;;cancel floft quiet") if ReadingsVal("MQTT2_zigbee_0x00158d000411c41c","illuminance","1000") <= 55 && isday();;\
#return fhem("set MQTT2_zigbee_bulb1:FILTER=state!=ON on-for-timer 320") if ReadingsVal("MQTT2_zigbee_0x00158d000411c41c","illuminance","1000") <= 55 ;;\
return fhem("set MQTT2_zigbee_bulb1:FILTER=state!=ON on;;sleep 320 floft;;set MQTT2_zigbee_bulb1 off;;cancel floft quiet") if ReadingsVal("MQTT2_zigbee_0x00158d000411c41c","illuminance","1000") <= 55 ;;}


edit:

das löschen des sleep ist für die Katz, das benannte sleep löscht sich nach Ablauf selbst:

MQTT2_zigbee_0x00158d000411c41c:occupancy:.true {
return fhem("set MQTT2_zigbee_bulb1|MQTT2_zigbee_bulb2:FILTER=state!=ON on;sleep 320 floft;set MQTT2_zigbee_bulb1,MQTT2_zigbee_bulb2 off;") if ReadingsVal($NAME,"illuminance","1000") <= 55 && isday();
return fhem("set MQTT2_zigbee_bulb1:FILTER=state!=ON on;sleep 320 floft;set MQTT2_zigbee_bulb1 off;") if ReadingsVal($NAME,"illuminance","1000") <= 55 ;}