Hauptmenü

fixe Uhrzeit und Zeitspanne

Begonnen von TWART016, 18 Juni 2020, 01:06:41

Vorheriges Thema - Nächstes Thema

TWART016

Hallo,

ich schalte um 10 Uhr meinen Luftreiniger aus, soweit so gut.
Um 22 Uhr soll er an gehen, wenn jemand zu Hause ist. Wenn bis morgen 10 jemand heim kommt, soll der Luftreiniger ebenfalls angehen. Mit diesem Code wird er eingeschalten, wenn jemand heim kommt, jedoch nicht um 22 Uhr. Wie muss das DOIF dazu aussehen?


([10:00]) (set Xiaomi_AirPurifier3 off)
DOELSEIF ([22:00-09:59] and [Bewohner:residentsHome] > 0) (set Xiaomi_AirPurifier3 on)

rabehd

Wie wäre es mit einem List?

attr irgendwas do always

gesetzt?
Auch funktionierende Lösungen kann man hinterfragen.

cRossi

Zitat von: TWART016 am 18 Juni 2020, 01:06:41
Hallo,

ich schalte um 10 Uhr meinen Luftreiniger aus, soweit so gut.
Um 22 Uhr soll er an gehen, wenn jemand zu Hause ist. Wenn bis morgen 10 jemand heim kommt, soll der Luftreiniger ebenfalls angehen. Mit diesem Code wird er eingeschalten, wenn jemand heim kommt, jedoch nicht um 22 Uhr. Wie muss das DOIF dazu aussehen?


([10:00]) (set Xiaomi_AirPurifier3 off)
DOELSEIF ([22:00-09:59] and [Bewohner:residentsHome] > 0) (set Xiaomi_AirPurifier3 on)


Setze mal
[?Bewohner:residentsHome]

sonst triggert das als Event unabhängig von der Zeit.

Gruß
cRossi
RasPi 3B+
HM-MOD-RPI-PCB
FHEM

amenomade

Zitat von: cRossi am 24 Juni 2020, 20:45:44
Setze mal
[?Bewohner:residentsHome]

sonst triggert das als Event unabhängig von der Zeit.

Gruß
cRossi

Somit wird das:
ZitatWenn bis morgen 10 jemand heim kommt, soll der Luftreiniger ebenfalls angehen
nicht mehr möglich.

Für das was beschrieben ist, ist mMn das DOIF richtig.
Was man für weitere Analyse braucht, ist ein "list" vom DOIF wenn es nicht wie gewünscht funtkioniert hat, also kurz nach 22:00 Uhr mit jemandem schon zu Hause (Anzahl > 0)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

TWART016

Hier das list, residentsHome ist 2 und es wird um 22 Uhr getriggert, also richtig:
Internals:
   DEF        ([10:00]) (set Telegram msg set Xiaomi_AirPurifier3 off)
DOELSEIF ([22:00-09:59] and [testStatus1:residentsHome] > 0) (set Telegram msg set Xiaomi_AirPurifier3 on)
   FUUID      5c7197ee-f33f-50ef-a9c2-b6f688bea4da6733
   FVERSION   98_DOIF.pm:0.218420/2020-05-02
   MODEL      FHEM
   NAME       test_DOIF
   NOTIFYDEV  global,testStatus1
   NR         877
   NTFY_ORDER 50-test_DOIF
   STATE      cmd_2
   TYPE       DOIF
   VERSION    21842 2020-05-02 16:00:20
   READINGS:
     2020-06-24 22:00:00   cmd             2
     2020-06-24 22:00:00   cmd_event       timer_2
     2020-06-24 22:00:00   cmd_nr          2
     2020-06-21 00:08:40   mode            enabled
     2020-06-24 22:00:00   state           cmd_2
     2020-06-24 10:00:00   timer_01_c01    25.06.2020 10:00:00
     2020-06-24 09:59:00   timer_02_c02    24.06.2020 22:00:00
     2020-06-24 09:59:00   timer_03_c02    25.06.2020 09:59:00
   Regex:
     accu:
     cond:
       testStatus1:
         1:
           residentsHome ^testStatus1$:^residentsHome:
   attr:
     cmdState:
     waitdel:
   condition:
     0          ::DOIF_time_once($hash,0,$wday)
     1          ::DOIF_time($hash,1,2,$wday,$hms) and ::ReadingValDoIf($hash,'testStatus1','residentsHome') > 0
   days:
   do:
     0:
       0          set Telegram msg set Xiaomi_AirPurifier3 off
     1:
       0          set Telegram msg set Xiaomi_AirPurifier3 on
     2:
   helper:
     DEVFILTER  ^global$|^testStatus1$
     NOTIFYDEV  global|testStatus1
     event      timer_2
     globalinit 1
     last_timer 3
     sleeptimer -1
     timerdev   
     timerevent timer_2
     triggerDev
     DOIF_eventa:
       cmd_nr: 2
       cmd: 2
       cmd_event: timer_2
       cmd_2
     DOIF_eventas:
       cmd_nr: 2
       cmd: 2
       cmd_event: timer_2
       state: cmd_2
     timerevents:
       timer_2
     timereventsState:
       timer_2
     triggerEvents:
       timer_2
     triggerEventsState:
       timer_2
   interval:
     1          -1
     2          1
   intervalfunc:
   intervaltimer:
   localtime:
     0          1593072000
     1          1593028800
     2          1593071940
   readings:
     all         testStatus1:residentsHome
   realtime:
     0          10:00:00
     1          22:00:00
     2          09:59:00
   time:
     0          10:00:00
     1          22:00:00
     2          09:59:00
   timeCond:
     0          0
     1          1
     2          1
   timer:
     0          0
     1          0
     2          0
   timers:
     0           0
     1           1  2
   triggertime:
     1593071940:
       localtime  1593071940
       hash:
     1593072000:
       localtime  1593072000
       hash:
   uiState:
   uiTable:
Attributes:
   room       test



zum testen habe ich die residentsHome auf 0 gestellt:
Internals:
   DEF        ([10:00]) (set Telegram msg set Xiaomi_AirPurifier3 off)
DOELSEIF ([22:00-09:59] and [testStatus1:residentsHome] > 0) (set Telegram msg set Xiaomi_AirPurifier3 on)
   FUUID      5c7197ee-f33f-50ef-a9c2-b6f688bea4da6733
   FVERSION   98_DOIF.pm:0.218420/2020-05-02
   MODEL      FHEM
   NAME       test_DOIF
   NOTIFYDEV  global,testStatus1
   NR         877
   NTFY_ORDER 50-test_DOIF
   STATE      cmd_2
   TYPE       DOIF
   VERSION    21842 2020-05-02 16:00:20
   READINGS:
     2020-06-25 02:25:00   Device          testStatus1
     2020-06-24 22:00:00   cmd             2
     2020-06-24 22:00:00   cmd_event       timer_2
     2020-06-24 22:00:00   cmd_nr          2
     2020-06-25 02:25:00   e_testStatus1_residentsHome 0
     2020-06-21 00:08:40   mode            enabled
     2020-06-24 22:00:00   state           cmd_2
     2020-06-24 10:00:00   timer_01_c01    25.06.2020 10:00:00
     2020-06-24 09:59:00   timer_02_c02    24.06.2020 22:00:00
     2020-06-24 09:59:00   timer_03_c02    25.06.2020 09:59:00
   Regex:
     accu:
     cond:
       testStatus1:
         0:
         1:
           residentsHome ^testStatus1$:^residentsHome:
   attr:
     cmdState:
     waitdel:
   condition:
     0          ::DOIF_time_once($hash,0,$wday)
     1          ::DOIF_time($hash,1,2,$wday,$hms) and ::ReadingValDoIf($hash,'testStatus1','residentsHome') > 0
   days:
   do:
     0:
       0          set Telegram msg set Xiaomi_AirPurifier3 off
     1:
       0          set Telegram msg set Xiaomi_AirPurifier3 on
     2:
   helper:
     DEVFILTER  ^global$|^testStatus1$
     NOTIFYDEV  global|testStatus1
     event      residentsHome: 0
     globalinit 1
     last_timer 3
     sleeptimer -1
     timerdev   
     timerevent timer_2
     triggerDev testStatus1
     timerevents:
       timer_2
     timereventsState:
       timer_2
     triggerEvents:
       residentsHome: 0
     triggerEventsState:
       residentsHome: 0
   internals:
   interval:
     1          -1
     2          1
   intervalfunc:
   intervaltimer:
   localtime:
     0          1593072000
     1          1593028800
     2          1593071940
   readings:
     all         testStatus1:residentsHome
   realtime:
     0          10:00:00
     1          22:00:00
     2          09:59:00
   time:
     0          10:00:00
     1          22:00:00
     2          09:59:00
   timeCond:
     0          0
     1          1
     2          1
   timer:
     0          0
     1          0
     2          0
   timers:
     0           0
     1           1  2
   trigger:
   triggertime:
     1593071940:
       localtime  1593071940
       hash:
     1593072000:
       localtime  1593072000
       hash:
   uiState:
   uiTable:
Attributes:
   room       test


Und wieder auf 2. Es kam keine Nachricht
Internals:
   DEF        ([10:00]) (set Telegram msg set Xiaomi_AirPurifier3 off)
DOELSEIF ([22:00-09:59] and [testStatus1:residentsHome] > 0) (set Telegram msg set Xiaomi_AirPurifier3 on)
   FUUID      5c7197ee-f33f-50ef-a9c2-b6f688bea4da6733
   FVERSION   98_DOIF.pm:0.218420/2020-05-02
   MODEL      FHEM
   NAME       test_DOIF
   NOTIFYDEV  global,testStatus1
   NR         877
   NTFY_ORDER 50-test_DOIF
   STATE      cmd_2
   TYPE       DOIF
   VERSION    21842 2020-05-02 16:00:20
   READINGS:
     2020-06-25 02:31:02   Device          testStatus1
     2020-06-24 22:00:00   cmd             2
     2020-06-24 22:00:00   cmd_event       timer_2
     2020-06-24 22:00:00   cmd_nr          2
     2020-06-25 02:31:02   e_testStatus1_residentsHome 2
     2020-06-21 00:08:40   mode            enabled
     2020-06-24 22:00:00   state           cmd_2
     2020-06-24 10:00:00   timer_01_c01    25.06.2020 10:00:00
     2020-06-24 09:59:00   timer_02_c02    24.06.2020 22:00:00
     2020-06-24 09:59:00   timer_03_c02    25.06.2020 09:59:00
   Regex:
     accu:
     cond:
       testStatus1:
         0:
         1:
           residentsHome ^testStatus1$:^residentsHome:
   attr:
     cmdState:
     waitdel:
   condition:
     0          ::DOIF_time_once($hash,0,$wday)
     1          ::DOIF_time($hash,1,2,$wday,$hms) and ::ReadingValDoIf($hash,'testStatus1','residentsHome') > 0
   days:
   do:
     0:
       0          set Telegram msg set Xiaomi_AirPurifier3 off
     1:
       0          set Telegram msg set Xiaomi_AirPurifier3 on
     2:
   helper:
     DEVFILTER  ^global$|^testStatus1$
     NOTIFYDEV  global|testStatus1
     event      residentsHome: 2
     globalinit 1
     last_timer 3
     sleeptimer -1
     timerdev   testStatus1
     timerevent residentsHome: 2
     triggerDev testStatus1
     timerevents:
       residentsHome: 2
     timereventsState:
       residentsHome: 2
     triggerEvents:
       residentsHome: 2
     triggerEventsState:
       residentsHome: 2
   internals:
   interval:
     1          -1
     2          1
   intervalfunc:
   intervaltimer:
   localtime:
     0          1593072000
     1          1593028800
     2          1593071940
   readings:
     all         testStatus1:residentsHome
   realtime:
     0          10:00:00
     1          22:00:00
     2          09:59:00
   time:
     0          10:00:00
     1          22:00:00
     2          09:59:00
   timeCond:
     0          0
     1          1
     2          1
   timer:
     0          0
     1          0
     2          0
   timers:
     0           0
     1           1  2
   trigger:
   triggertime:
     1593071940:
       localtime  1593071940
       hash:
     1593072000:
       localtime  1593072000
       hash:
   uiState:
   uiTable:
Attributes:
   room       test


rabehd

(set Telegram msg set Xiaomi_AirPurifier3 on)
Fehlt da nicht ein Komma, oder?
Auch funktionierende Lösungen kann man hinterfragen.

Gisbert

Hallo,

das sieht komisch aus, und nach meiner Meinung fehlt die Nachricht.

Ich würde es mal so versuchen:
(set Telegram msg @xxxxxx Titel meine Nachricht) (set Xiaomi_AirPurifier3 on)

Die Voraussetzung ist natürlich, dass Telegramnachrichten funktionieren, mit anderen Worten, dass ein Fhem-Device Telegram existiert und per Eingabe in die Fhem-Kommandozeile erfolgreich getestet wurde.

Viele​ Grüße​ Gisbert​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Gisbert

Ich vermute mal, so wie die Definition geschrieben ist, dass kein Telegram-Device angelegt wurde, zumindest wurden die Vorgaben zum Versenden von Nachrichten nicht umgesetzt.
Es ist schon eine kleine Ewigkeit her, dass ich Telegram eingerichtet hatte, deshalb gibt es Infos zu Telegram hier im Wiki.
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

TWART016

Telegram funktioniert seit Jahren, auch die Nachricht um 10 und 22 Uhr (wenn jemand daheim ist). Ich habe derzeit noch eine andere Automation aktiv, welche das schaltet, jedoch möchte ich diese mit dem DOIF ersetzen.
Aktuell möchte ich nur die Nachrichten erhalten, wenn dies eintreffen würde. Danach entferne ich nur noch "set Telegram msg" und der Luftreiniger wird geschalten.

amenomade

Zitat von: TWART016 am 25 Juni 2020, 02:32:03
Hier das list, residentsHome ist 2 und es wird um 22 Uhr getriggert, also richtig:

zum testen habe ich die residentsHome auf 0 gestellt:

Und wieder auf 2. Es kam keine Nachricht


Pack mach noch ein leeres DOELSE in deinem DOIF und mach den gleichen Test
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

TWART016

Also mit dem DOELSE passt es. Wenn ich nun zwischen 22 und 9:59 den dummy Wohnzimmer_Modi schalte, tritt DOELSE in Kraft, allerdings soll es bei dem DOELSEIF bleiben. Wie kann ich das unabhängig von dem Reading machen?


([10:00] or [Wohnzimmer_Modi] eq "aufstehen") (set Xiaomi_AirPurifier3 off)
DOELSEIF ([22:00-09:59] and [Bewohner:residentsTotalPresent] > 0 and [Shelly_Fenster_Schlafzimmer] eq "close") (set Xiaomi_AirPurifier3 led off;set Xiaomi_AirPurifier3 on)
DOELSE (set Xiaomi_AirPurifier3 off)

Sany

Moin,

DOIF
([22:00-09:59] and [Bewohner:residentsTotalPresent] > 0 and [Shelly_Fenster_Schlafzimmer] eq "close")
   (set Xiaomi_AirPurifier3 led off;set Xiaomi_AirPurifier3 on)
DOELSEIF
([10:00] or [Wohnzimmer_Modi] eq "aufstehen")
   (set Xiaomi_AirPurifier3 off)


schaltet um 22:00 den Purifier ein, wenn Residents größer 0 und das Schlafzimmerfenster zu ist.
Zwischen 22:00 und 9:59 wird eingeschaltet, wenn Residents <= 0 war und das Schlafzimmerfenster auf war und sich die beiden Zustände so ändern, dass auch beide wahr werden. Sollen beide triggern? Falls nicht, dann mit [?...].
Um 10:00 wird auf jeden Fall abgeschaltet, ebenso wenn sich der Wohnzimmer_Modi auf aufstehen ändert. Wohnzimmer_Modi triggert allerdings immer!
Das müsste auch ohne do always funtionieren (ausprobieren)

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