FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: morfey am 24 März 2022, 17:24:46

Titel: [Gelöst]Licht zeitgesteuert abschalten
Beitrag von: morfey am 24 März 2022, 17:24:46
Hi zusammen!
Ich möchte meine Lampe am Schreibtisch nach x minuten / Sekunden automatisch abschalten. Ich habe hier dazu etwas gefunden:
https://forum.fhem.de/index.php?topic=25375.0
als Code habe ich mir folgendes zusammengebaut:
schreibtischlampe:on define schreibtischlampeaus at +00:00:08 {fhem("set schreibtischlampe:FILTER=STATE!=off off");;Log 1, "Licht wird automatisch ausgemacht"}

Ich bin allerdings zu blöde um zu verstehen, ob das ein Notify oder was auch immer ist. Ich kann den Code nicht ins Eingabefeld der Webgui einfügen ... da fehlt mir noch ein set oder define oder was auch immer ....
Die log-Meldung brauche ich da nicht ... nur erst einmal zum testen ... auch die 8 Sekunden sind zum Testen :-)

Es handelt sich um Zigbee-Geräte über Deconz.
Hat jemand eine Idee?

Danke!
Titel: Antw:Licht zeitgesteuert abschalten
Beitrag von: MadMax-FHEM am 24 März 2022, 17:36:21
Einfach statt set schreibtischlampe on ein set schreibtischlampe on-for-timer X mit X=gewünschte Minuten mal 60...

Eine per HUEBridge eingebundene Lampe sollte das können...

EDIT: bzgl. des notify: entweder mal ein "leeres" notify definieren, z.B.
define azLichtAus notify az_licht:on {} und dann auf DEF klicken und anpassen (wenn codemirror aktiviert ist, dann sogar mit Syntax-Unterstützung) oder gleich per Eventmonitor erzeugen lassen und ebenfalls per Klick auf DEF anpassen.
https://wiki.fhem.de/wiki/Event_monitor
Oder per RawDef-Import...
https://wiki.fhem.de/wiki/Import_von_Code_Snippets
Außerdem ist im Ausführungsteil der "Umweg" über Perl überflüssig und auch defmod bzgl. der Definition des at "besser" als define...
https://wiki.fhem.de/wiki/Klammerebenen
https://forum.fhem.de/index.php?topic=36326.0

EDIT: statt dem at-Konstrukt würde auch ein sleep gehen:
set Lampe on; sleep X; set Lampe off
X: Minuten mal 60
Strichpunkte halt je nachdem wo/wie eingegeben 1 Strichpunkt oder 2 Strichpunkte... ;)

Gruß, Joachim
Titel: Antw:Licht zeitgesteuert abschalten
Beitrag von: morfey am 24 März 2022, 17:48:03
Hi,
bei dem set-Befehl muss ich diesen aber über Fhem ausführen ... eigentlich soll ein Ikdea-Schalter das Licht einschalten und es soll automatisch nach x minuten ausgeschaltet werden ...
Titel: Antw:Licht zeitgesteuert abschalten
Beitrag von: zife am 25 März 2022, 15:54:25
Na, dann ein NOTIFY auf das Event "Licht ist an" definieren, das anhand der o.g. Vorschläge (at, sleep) wieder ausschaltet.

Siehe die notify-Hinweise oben, bzw. Dein Ansatz im Eingangspost (in dem fehlt quasi vorne nur noch das "define xyz notify", mal abgesehen von den Hinweisen von MadMax-FHEM)...
Titel: Antw:Licht zeitgesteuert abschalten
Beitrag von: MadMax-FHEM am 25 März 2022, 17:19:03
Zitat von: morfey am 24 März 2022, 17:48:03
Hi,
bei dem set-Befehl muss ich diesen aber über Fhem ausführen ... eigentlich soll ein Ikdea-Schalter das Licht einschalten und es soll automatisch nach x minuten ausgeschaltet werden ...

Wäre hilfreich gewesen das gleich zu schreiben... ;-)

Ansonsten ist doch erst mal alles geschrieben?

Gruß, Joachim
Titel: Antw:Licht zeitgesteuert abschalten
Beitrag von: morfey am 28 März 2022, 16:39:27
Hi,
... so richtig funktioniert es leider noch nicht. Habe folgendes Notify angelegt:
define n_schreibtischlampe_off_timer notify Schreibtischlampe:on define Schreibtischlampeaus at +00:00:08 {fhem("set Schreibtischlampe:FILTER=STATE!=off off");;Log 1, "Licht wird automatisch ausgemacht"}
Dabei passiert nichts. Im Event-Monitor sehe ich, dass Schreibtischlampeaus erstellt wird und eine Nexttime zugeordnet bekommt. Bei der dann erreichten Uhrzeit passiert nichts. Kein lampe aus, kein Log-Eintrag, kein Event ...
Titel: Antw:Licht zeitgesteuert abschalten
Beitrag von: DetlefR am 28 März 2022, 17:59:23
Ist das STATE aus den Internals oder das state aus den readings gemeint?
Das sind zwei verschiedene Sachen.
Was zeigt den list Schreibtischlampe:FILTER=STATE!=off an?
Titel: Antw:Licht zeitgesteuert abschalten
Beitrag von: morfey am 29 März 2022, 08:09:27
Hi,
Wenn die Lampe aus ist zeigt der list-befehl nichts, wenn sie an ist:
Internals:
   DEF        1  IODev= deconz
   FUUID      5fc4b163-f33f-9309-c4c2-e373b16738ccb2ba
   FVERSION   31_HUEDevice.pm:0.210390/2020-01-23
   ID         1
   INTERVAL   
   IODev      deconz
   NAME       Schreibtischlampe
   NR         21
   STATE      on
   TYPE       HUEDevice
   desired    1
   manufacturername IKEA of Sweden
   modelid    TRADFRI control outlet
   name       Schreibtischlampe
   swversion  2.0.024
   type       On/Off plug-in unit
   uniqueid   84:2e:14:ff:fe:65:f9:49-01
   READINGS:
     2022-01-30 18:37:12   alert           none
     2022-03-29 08:03:51   onoff           1
     2022-03-29 08:03:51   pct             100
     2022-03-29 08:03:51   reachable       1
     2022-03-29 08:03:51   state           on
   helper:
     alert      none
     battery    -1
     bri        -1
     colormode 
     ct         -1
     devtype   
     effect     
     hue        -1
     mode       
     pct        100
     reachable  1
     rgb       
     sat        -1
     update_timeout -1
     xy         
     json:
       etag       8d56d2ec8fda76f514a2d802f699530a
       lastannounced 2020-11-30T10:46:34Z
       lastseen   2022-03-29T06:03Z
       manufacturername IKEA of Sweden
       modelid    TRADFRI control outlet
       name       Schreibtischlampe
       swversion  2.0.024
       type       On/Off plug-in unit
       uniqueid   84:2e:14:ff:fe:65:f9:49-01
       state:
         alert      none
Attributes:
   IODev      deconz
   alias      Schreibtischlampe
   color-icons 2
   devStateIcon {(HUEDevice_devStateIcon($name),"toggle")}
   group      HUEDevice
   model      TRADFRI control outlet
   room       Homekit
   subType    switch
   webCmd     toggle:on:off

Titel: Antw:Licht zeitgesteuert abschalten
Beitrag von: DetlefR am 29 März 2022, 11:02:08
Zwei Dinge.

1.) Wenn es unbedingt auf die Art sein soll.
Mal die Zeit größer als 8 Sekunden einstellen. Das AT aufrufen und "set execNow" ausführen und mal sehen was dann passiert.
Und aus dem define ein defmod machen. Das vermeidet Probleme wenn es den AT schon gibt.

2.) Warum überhaupt so kompliziert.
attr Schreibtischlampe useSetExtensions 1
Das aktiviert SetExtension für die Lampe. Damit habe ich dann u.a on-for-timer zur Verfügung. Das setzt einen Timer für x Sekunden in dem die Lampe an sein soll. Wenn die Lampe zwischenzeitlich anders geschalten wird, wird der Timer gelöscht.

define n_schreibtischlampe_off_timer notify Schreibtischlampe:on set Schreibtischlampe on-for-timer 8

Titel: Antw:Licht zeitgesteuert abschalten
Beitrag von: MadMax-FHEM am 29 März 2022, 11:36:19
Zitat von: DetlefR am 29 März 2022, 11:02:08
2.) Warum überhaupt so kompliziert.
attr Schreibtischlampe useSetExtensions 1
Das aktiviert SetExtension für die Lampe. Damit habe ich dann u.a on-for-timer zur Verfügung. Das setzt einen Timer für x Sekunden in dem die Lampe an sein soll. Wenn die Lampe zwischenzeitlich anders geschalten wird, wird der Timer gelöscht.

define n_schreibtischlampe_off_timer notify Schreibtischlampe:on set Schreibtischlampe on-for-timer 8


Das wird so verm. nicht gehen, weil (soweit ich das im Kopf habe bzw. bei Lampen die nur on/off und nicht bei on pct machen ist das wohl so) auch bei set HUEX on-for-timer ein on-Event kommt, daher würde das notify zuschlagen usw. -> Schleife...
Ob da ein disable after trigger hilft, hmmm.

Gruß, Joachim
Titel: Antw:Licht zeitgesteuert abschalten
Beitrag von: Beta-User am 29 März 2022, 11:54:48
Habe hier auch einen Anwendungsfall, da kann von allen möglichen Seiten her der "an"-Befehl gekommen sein (z.B. auch von einem Taster an dem MySensors-Device selbst)...

Das notify:
define n_Pumpe_Zisterne_1 notify Pumpe_Zisterne:on {mySwitchOffAfter('Pumpe_Zisterne','00:30')}

Der zugehörige Perl-Code:
sub mySwitchOffAfter {
  my $ondevice = shift // return;
  my $duration  = shift // "01:00:01";
  my $idname = "my_switchoff_".$ondevice;
  #fhem "sleep $duration $idname quiet;set $ondevice off";
  AnalyzeCommandChain(undef,"sleep $duration $idname quiet;set $ondevice off");
}
Titel: Antw:Licht zeitgesteuert abschalten
Beitrag von: juergen012 am 29 März 2022, 11:55:19
Hallo,
mit DOIF??
define di_LampeAus DOIF ([schreibtischlampe] eq "on") (set schreibtischlampe off)
attr wait 8

nicht getestet..
Titel: Antw:Licht zeitgesteuert abschalten
Beitrag von: morfey am 29 März 2022, 12:02:40
erzeugt ein:
di_LampeAus DOIF: expected DOELSEIF or DOELSE: attr wait 8
Titel: Antw:Licht zeitgesteuert abschalten
Beitrag von: morfey am 29 März 2022, 12:13:39
@DetlefR: Vielen Dank, ein klein wenig bin ich weiter:
Das log konnte ich nun besser lesen und erhalte folgende Meldung:
Schreibtischlampeaus: Unknown command {fhem("set, try help.
Definiert habe ich das nun mit:
define n_schreibtischlampe_off_timer notify Schreibtischlampe:on defmod Schreibtischlampeaus at +00:00:58 {fhem("set Schreibtischlampe:FILTER=STATE!=off off");;Log 1, "Licht wird automatisch ausgemacht"}
Titel: Antw:Licht zeitgesteuert abschalten
Beitrag von: juergen012 am 29 März 2022, 12:14:55
defmod di_LampeAus DOIF ([Schreibtischlampe] eq "on") (set Schreibtischlampe off)
attr di_LampeAus wait 8


funktioniert bei mir
Titel: Antw:Licht zeitgesteuert abschalten
Beitrag von: DetlefR am 29 März 2022, 13:56:21
@MadMax-FHEM
Zitatauch bei set HUEX on-for-timer ein on-Event kommt,
Gut, wenn das so ist muss der Status im Notify noch mal abgefragt

@morfey.
ZitatSchreibtischlampeaus: Unknown command {fhem("set, try help.
. Manchmal kommt es ja dummer als man denkt. Hast du das ganze schon mal neu geschrieben. Vieleicht hat sich ja irgendwo durch das kopieren ein verstecktes Zeichen mit eingeschuggelt. So aus meiner Erfahrung. :-[