Hallo zusammen,
ich habe streng genommen kein technisches Problem - eher ein logisches.
Vielleicht kann mir hier jemand auf die Sprünge helfen...
Ich versuche den Sachverhalt so nachvollziehbar wie nur möglich zu schildern.
zur Situation:
Bewegungsmelder + DOIF = Lampe ein
Dieser Automatismus funktioniert tadellos.
Ich möchte aber, dass der Bewegungsmelder (oder auch das DOIF) außer Betrieb gesetzt wird wenn ....
1) Die Lampe manuell eingeschaltet wird (zB Taster)
2) Die Lampe automatisch eingeschaltet wird (zB at)
(und dann wieder umgekehrt wenn !1 bzw !2)
Hintergrund:
Die Lampen welche mittels Bewegungsmelder geschaltet werden sollen zusätzlich, wenn benötigt, als "Ambientebeleuchtung" dienen.
Heißt, wenn ich möchte, dass diese eingeschaltet sein sollen, dann sollen sie das auch, ohne, dass der Bewegungsmelder dazwischen funkt. Ansonsten soll sich eben der Bewegungsmelder darum kümmern...
Ich hoffe das ist halbwegs verständlich?!
Hier mal das DOIF:
define di_Bewegung_Carport DOIF \
( \
([sensor_Bewegung_Carport:state] eq "motion") and \
([sensor_Bewegung_Carport:detection] eq "active") and \
([sensor_Bewegung_Carport:brightness] <= 0.7) \
) \
(set schalter_Licht_Carport on) \
DOELSE \
(set schalter_Licht_Carport off)
Einen guten Start ins Wochenende ;)
Stellt sich die Frage, was ist deine "aus" Bedingung?
Wenn es nur eine "an" Bedingung (Bewegungsmelder, Taster gedrückt, at-getriggert) gibt, dann könnte man
dafür je eine Bedingung im DOIF mit zwei Befehlen machen (set xxx on) (set xxx off)
Dazu dann ein Attribut wait, so dass z.B. der "off" Teil erst nach 10 Minuten getriggert wird.
Mithilfe von resetWait würde dieser Timer immer zurückgesetzt, wenn z.B. der Bewegungsmelder wieder triggert.
Es wäre hilfreich, wenn Du mehr über Bewegungsmelder und Taster erzählst. Entsprechend verschiedene Möglichkeiten gibt es.
ZitatBewegungsmelder + DOIF = Lampe ein
Das wäre für mich schon das erste Problem bei Dir. Wenn + für und steht, dann passt das nicht. Der Bewegungsmelder triggert das DOIF, welches die Lampe einschaltet.
Schreibe Dir doch mal auf welche Geräte beteiligt sind und welcher Zustand was verändern soll, ganz ohne DOIF.
Ist da ein Taster (aktivieren/deaktivieren B-melder, oder DOIF) oder ein Schalter (Abfrage im DOIF bei Bewegung)?
Zitat von: rabehd am 31 März 2023, 18:50:48Schreibe Dir doch mal auf welche Geräte beteiligt sind und welcher Zustand was verändern soll,
https://de.wikipedia.org/wiki/Karnaugh-Veitch-Diagramm
Was hat man uns in der Schule vor 40 Jahren mit diesen Dingern gequält...
Heute bin ich froh darüber, weil sich damit viele logische Zusammenhänge sehr weit abstrahieren und vereinfachen lassen.
Hmm.. mal banal in die Runde
Wenn das DOIF getriggert durch den Bewegungsmelder ja funktioniert, kann da nicht:
2) das AT auch einfach das DOIF auf "disable" setzen und bei einschalten wieder auf "enable".
1) gleiches beim Taster wenn der irgendwie auch an FHEM hängt
Gruß
So viele Antworten in so kurzer Zeit. Das lasse ich mir mal alles durch den Kopf gehen. Danke soweit. Melde mich wieder.
Ich habe bei mir einige HUE-Lampen, die ebenso durch Bewegungsmelder geschaltet werden, aber auch als Ambientebeleuchtung dienen.
Dafür habe ich je einen Dummy, der eigentlich immer auf "Auto" steht. Dazu ein DOIF, welches je nach Uhrzeit und Bewegungsmelder (und weiteren Bedingungen) die HUE Lampen steuert.
Zusätzlich hat der Dummy noch Einträge wie "Hell". Und es gibt einen Dummy "Dekolicht".
Im DOIF reagiere ich darauf in etwa so (nur kurzes Beispiel):
([Bewegungsmelder] eq "open" and [Licht] eq "Auto" and [Dekolicht] eq "off")
(set HUE rgb FFE0C1)
DOELSEIF ([Bewegungsmelder] eq "closed" and [Licht] eq "Auto" and [Dekolicht] eq "off")
(set HUE rgb 000000)
DOELSEIF ([Licht] eq "Hell")
(set HUE rgb FFE0C1)
([Bewegungsmelder] eq "open" and [Licht] eq "Auto" and [Dekolicht] eq "on"))
(set HUE rgb 141617)
.....
So bin ich relativ frei, wann was passieren soll. Über at könntest du dann den Dummy Licht umschalten.
Zum Taster, da ist die Frage, ob der in FHEM extra eingebunden wird, oder direkt mit dem Licht verbunden ist.
Schaltet er Licht direkt, könntest du über ein weiteres DOIF prüfen, so in der Art "Wenn Licht an, aber DOIF_Licht_Bewegung steht nicht CMD_X (wo es selbst schalten sollte), dann setze Dummy Licht, auf Manuell - oder so.
Zitat von: swsmily am 31 März 2023, 20:57:28Ich habe bei mir einige HUE-Lampen, die ebenso durch Bewegungsmelder geschaltet werden, aber auch als Ambientebeleuchtung dienen.
Dafür habe ich je einen Dummy, der eigentlich immer auf "Auto" steht. Dazu ein DOIF, welches je nach Uhrzeit und Bewegungsmelder (und weiteren Bedingungen) die HUE Lampen steuert.
Zusätzlich hat der Dummy noch Einträge wie "Hell". Und es gibt einen Dummy "Dekolicht".
Im DOIF reagiere ich darauf in etwa so (nur kurzes Beispiel):
([Bewegungsmelder] eq "open" and [Licht] eq "Auto" and [Dekolicht] eq "off")
(set HUE rgb FFE0C1)
DOELSEIF ([Bewegungsmelder] eq "closed" and [Licht] eq "Auto" and [Dekolicht] eq "off")
(set HUE rgb 000000)
DOELSEIF ([Licht] eq "Hell")
(set HUE rgb FFE0C1)
([Bewegungsmelder] eq "open" and [Licht] eq "Auto" and [Dekolicht] eq "on"))
(set HUE rgb 141617)
.....
So bin ich relativ frei, wann was passieren soll. Über at könntest du dann den Dummy Licht umschalten.
Zum Taster, da ist die Frage, ob der in FHEM extra eingebunden wird, oder direkt mit dem Licht verbunden ist.
Schaltet er Licht direkt, könntest du über ein weiteres DOIF prüfen, so in der Art "Wenn Licht an, aber DOIF_Licht_Bewegung steht nicht CMD_X (wo es selbst schalten sollte), dann setze Dummy Licht, auf Manuell - oder so.
Klingt gut. Den gehe ich mal nach.
Die Sache nimmt so langsam Form an...
Um es möglichst "elegant" zu lösen, würde es mir helfen, herauszubekommen "wer" den Schalter bedient hat.
List des Schalters:
Internals:
CFGFN ./FHEM/001_licht.cfg
DEF xxxxxxxxxx:4
FUUID xxxxx-xxxxxxxxxx
IODev CCU
NAME schalter_Licht_Carport
NR 178
STATE ein
TYPE HMCCUCHN
ccuaddr xxxxxxxxxx:4
ccudevstate active
ccuif BidCos-RF
ccuname schalter-Licht_Carport:4
ccurolectrl SWITCH
ccurolestate SWITCH
ccusubtype HM-LC-Sw4-SM
ccutype HM-LC-Sw4-SM
eventCount 12
firmware 1.12
readonly no
READINGS:
2023-04-04 13:42:16 INHIBIT false
2023-04-04 13:41:48 IODev CCU
2023-04-04 13:44:19 STATE on
2023-04-04 13:44:19 WORKING false
2023-04-04 13:42:16 activity alive
2023-04-04 13:42:16 battery ok
2023-04-04 13:44:19 control on
2023-04-04 13:44:19 devstate stickyUnreach
2023-04-04 13:44:19 hmstate on
2023-04-04 13:42:16 rssidevice -255
2023-04-04 13:42:16 rssipeer -255
2023-04-04 13:42:16 sign on
2023-04-04 13:44:19 state on
hmccu:
channels 1
detect 1
devspec xxxxxxxxxx:4
nodefaults 1
role 4:SWITCH
setDefaults 0
cmdlist:
get
set off:noArg on-for-timer on:noArg on-till toggle:noArg
control:
chn 4
dpt STATE
dp:
0.AES_KEY:
VALUES:
NVAL 1
ONVAL 1
OSVAL on
OVAL 1
SVAL on
VAL 1
0.CONFIG_PENDING:
VALUES:
NVAL false
ONVAL false
OSVAL false
OVAL false
SVAL false
VAL false
0.DUTYCYCLE:
VALUES:
NVAL false
ONVAL false
OSVAL false
OVAL false
SVAL false
VAL false
0.LOWBAT:
VALUES:
NVAL false
ONVAL false
OSVAL ok
OVAL false
SVAL ok
VAL false
0.RSSI_DEVICE:
VALUES:
NVAL -255
ONVAL -255
OSVAL -255
OVAL 1
SVAL -255
VAL 1
0.RSSI_PEER:
VALUES:
NVAL -255
ONVAL -255
OSVAL -255
OVAL 1
SVAL -255
VAL 1
0.STICKY_UNREACH:
VALUES:
NVAL true
ONVAL 1
OSVAL true
OVAL 1
SVAL true
VAL true
0.UNREACH:
VALUES:
NVAL false
ONVAL false
OSVAL alive
OVAL false
SVAL alive
VAL false
4.INHIBIT:
VALUES:
NVAL false
ONVAL false
OSVAL false
OVAL false
SVAL false
VAL false
4.STATE:
VALUES:
NVAL 1
ONVAL 0
OSVAL off
OVAL 0
SVAL on
VAL 1
4.WORKING:
VALUES:
NVAL 0
ONVAL 0
OSVAL false
OVAL 0
SVAL false
VAL 0
roleCmds:
get:
set:
off:
channel 4
role SWITCH
subcount 1
syntax V:STATE:0
usage off
subcmd:
000:
args 0
dpt STATE
fnc
max 1
min 0
parname STATE
partype 3
ps VALUES
scn 000
unit
on:
channel 4
role SWITCH
subcount 1
syntax V:STATE:1
usage on
subcmd:
000:
args 1
dpt STATE
fnc
max 1
min 0
parname STATE
partype 3
ps VALUES
scn 000
unit
on-for-timer:
channel 4
role SWITCH
subcount 2
syntax V:ON_TIME:?duration V:STATE:1
usage on-for-timer duration
subcmd:
000:
args
dpt ON_TIME
fnc
max xxxxx.xxx
min 0.000000
parname duration
partype 2
ps VALUES
scn 000
unit s
001:
args 1
dpt STATE
fnc
max 1
min 0
parname STATE
partype 3
ps VALUES
scn 001
unit
on-till:
channel 4
role SWITCH
subcount 2
syntax V:ON_TIME:?time V:STATE:1
usage on-till time
subcmd:
000:
args
dpt ON_TIME
fnc
max xxxxx.xxx
min 0.000000
parname time
partype 2
ps VALUES
scn 000
unit s
001:
args 1
dpt STATE
fnc
max 1
min 0
parname STATE
partype 3
ps VALUES
scn 001
unit
state:
chn 4
dpt STATE
Attributes:
alias HWU
devStateIcon ein:light_light_dim_100@34C759 aus:light_light_dim_100@8E8E93 .*:light_light_dim_100@FF9500
eventMap on:ein off:aus
group D) Außen
room LICHT
sortby 3
webCmd ein:aus
Die Frage ist nun, ob ich hiermit:
define notify_Licht_Carport_EIN notify schalter_Licht_Carport.ein { ... }
herausbekommen kann, ob der Schalter schalter_Licht_Carport von Hand, per at oder durch ein DOIF geschaltet wurde?
im at, sowie im DOIF stünde jeweils:
set schalter_Licht_Carport on
Zitat von: remo am 04 April 2023, 14:23:24herausbekommen kann, ob der Schalter schalter_Licht_Carport von Hand, per at oder durch ein DOIF geschaltet wurde?
im at, sowie im DOIF stünde jeweils:
set schalter_Licht_Carport on
Nichts einfacher als das.
Du brauchst nur die Befehle im at und im DOIF entsprechend ergänzen.
setreading schalter_Licht_Carport switchedBy at; set schalter_Licht_Carport on
setreading schalter_Licht_Carport switchedBy DOIF; set schalter_Licht_Carport on
dann kannst Du im Ausführungsteil des notify auf dieses reading prüfen.
Am Ende des Ausführungsteils im notify musst Du dann das reading wieder löschen.
Vielen Dank.
Ich komme der Lösung immer näher ;)
Ich glaube ja immer noch, dass Du an einer viel zu komplizierten Lösung für Deine Aufgabenstellung bastelst...
Hallo,
ich stand mal vor einem ähnlichen Problem mit unserer Aussenbeleuchtung.
Ich hab das Ganze mit einem zusätzlichen Userreading "anueberschalter" in der Lampe gelöst. Das wird beim manuellen Schalten auf 1 gesetzt und im DOIF für den Bewegungsmelder wird das Reading zusätzlich geprüft. Wenn es auf 1 steht sind Schaltvorgänge über den Bewegungsmelder deaktiviert.
define MQTT2_zigbee_Lampe_Terrasse MQTT2_DEVICE zigbee_Lampe_Terrasse
attr MQTT2_zigbee_Lampe_Terrasse userReadings anueberschalter
# READINGS:
# 2023-03-25 05:20:38 anueberschalter 0
DOIF für den Schalter:
define doif_Terrassenlicht_Schalter DOIF ([MQTT2_mqttBroker:"^Switch_Terrasse_action:.up$"]) (set MQTT2_zigbee_Lampe_Terrasse brightness 254) (set MQTT2_zigbee_Lampe_Terrasse on) (setreading MQTT2_zigbee_Lampe_Terrasse anueberschalter 1)\
\
DOELSEIF \
\
([MQTT2_mqttBroker:"^Switch_Terrasse_action:.down$"]) (set MQTT2_zigbee_Lampe_Terrasse off) (setreading MQTT2_zigbee_Lampe_Terrasse anueberschalter 0)\
\
DOELSEIF \
\
([MQTT2_mqttBroker:"^Switch_Terrasse_action:.up_release$"]) (set MQTT2_zigbee_Lampe_Terrasse brightness 100) (setreading MQTT2_zigbee_Lampe_Terrasse anueberschalter 1)\
\
DOELSEIF \
\
([MQTT2_mqttBroker:"^Switch_Terrasse_action:.down_release$"]) (set MQTT2_zigbee_Lampe_Terrasse brightness 50)(setreading MQTT2_zigbee_Lampe_Terrasse anueberschalter 1)\
\
DOELSEIF \
\
([MQTT2_mqttBroker:"^Switch_Terrasse_action:.circle_click$"]) (set MQTT2_zigbee_Lampe_Terrasse color_temp 500)\
\
DOELSEIF \
\
([MQTT2_mqttBroker:"^Switch_Terrasse_action:.circle_release$"]) (set MQTT2_zigbee_Lampe_Terrasse color_temp 154)
attr doif_Terrassenlicht_Schalter do always
# DEF ([MQTT2_mqttBroker:"^Switch_Terrasse_action:.up$"]) (set MQTT2_zigbee_Lampe_Terrasse brightness 254) (set MQTT2_zigbee_Lampe_Terrasse on) (setreading MQTT2_zigbee_Lampe_Terrasse anueberschalter 1)
#
#DOELSEIF
#
#([MQTT2_mqttBroker:"^Switch_Terrasse_action:.down$"]) (set MQTT2_zigbee_Lampe_Terrasse off) (setreading MQTT2_zigbee_Lampe_Terrasse anueberschalter 0)
#
#DOELSEIF
#
#([MQTT2_mqttBroker:"^Switch_Terrasse_action:.up_release$"]) (set MQTT2_zigbee_Lampe_Terrasse brightness 100) (setreading MQTT2_zigbee_Lampe_Terrasse anueberschalter 1)
#
#DOELSEIF
#
#([MQTT2_mqttBroker:"^Switch_Terrasse_action:.down_release$"]) (set MQTT2_zigbee_Lampe_Terrasse brightness 50)(setreading MQTT2_zigbee_Lampe_Terrasse anueberschalter 1)
#
#DOELSEIF
#
#([MQTT2_mqttBroker:"^Switch_Terrasse_action:.circle_click$"]) (set MQTT2_zigbee_Lampe_Terrasse color_temp 500)
#
#DOELSEIF
#
#([MQTT2_mqttBroker:"^Switch_Terrasse_action:.circle_release$"]) (set MQTT2_zigbee_Lampe_Terrasse color_temp 154)
# FUUID 5ff37916-f33f-47d8-2ab0-00f730831c7745d1
# MODEL FHEM
# NAME doif_Terrassenlicht_Schalter
# NOTIFYDEV global,MQTT2_mqttBroker
# NR 158
# NTFY_ORDER 50-doif_Terrassenlicht_Schalter
# STATE cmd_2
# TYPE DOIF
# VERSION 27262 2023-02-21 19:36:39
# READINGS:
# 2023-03-26 03:28:28 Device MQTT2_mqttBroker
# 2023-03-25 05:20:38 cmd 2.2
# 2023-03-25 05:20:38 cmd_event MQTT2_mqttBroker
# 2023-03-25 05:20:38 cmd_nr 2
# 2023-03-25 05:20:38 cmd_seqnr 2
# 2023-03-26 03:28:28 e_MQTT2_mqttBroker_events Tem: 20.50
# 2021-01-18 07:36:19 mode enabled
# 2023-03-25 05:20:38 state cmd_2
# Regex:
# accu:
# bar:
# barAvg:
# collect:
# cond:
# MQTT2_mqttBroker:
# 0:
# &STATE ^MQTT2_mqttBroker$
# 1:
# &STATE ^MQTT2_mqttBroker$
# 2:
# &STATE ^MQTT2_mqttBroker$
# 3:
# &STATE ^MQTT2_mqttBroker$
# 4:
# &STATE ^MQTT2_mqttBroker$
# 5:
# &STATE ^MQTT2_mqttBroker$
# condition:
# 0 ::EventDoIf('MQTT2_mqttBroker',$hash,'^Switch_Terrasse_action:.up$',1)
# 1 ::EventDoIf('MQTT2_mqttBroker',$hash,'^Switch_Terrasse_action:.down$',1)
# 2 ::EventDoIf('MQTT2_mqttBroker',$hash,'^Switch_Terrasse_action:.up_release$',1)
# 3 ::EventDoIf('MQTT2_mqttBroker',$hash,'^Switch_Terrasse_action:.down_release$',1)
# 4 ::EventDoIf('MQTT2_mqttBroker',$hash,'^Switch_Terrasse_action:.circle_click$',1)
# 5 ::EventDoIf('MQTT2_mqttBroker',$hash,'^Switch_Terrasse_action:.circle_release$',1)
# do:
# 0:
# 0 set MQTT2_zigbee_Lampe_Terrasse brightness 254
# 1 set MQTT2_zigbee_Lampe_Terrasse on
# 2 setreading MQTT2_zigbee_Lampe_Terrasse anueberschalter 1
# 1:
# 0 set MQTT2_zigbee_Lampe_Terrasse off
# 1 setreading MQTT2_zigbee_Lampe_Terrasse anueberschalter 0
# 2:
# 0 set MQTT2_zigbee_Lampe_Terrasse brightness 100
# 1 setreading MQTT2_zigbee_Lampe_Terrasse anueberschalter 1
# 3:
# 0 set MQTT2_zigbee_Lampe_Terrasse brightness 50
# 1 setreading MQTT2_zigbee_Lampe_Terrasse anueberschalter 1
# 4:
# 0 set MQTT2_zigbee_Lampe_Terrasse color_temp 500
# 5:
# 0 set MQTT2_zigbee_Lampe_Terrasse color_temp 154
# 6:
# helper:
# NOTIFYDEV global,MQTT2_mqttBroker
# globalinit 1
# last_timer 0
# sleeptimer -1
# perlblock:
# trigger:
# all MQTT2_mqttBroker
# uiState:
# uiTable:
#
setstate doif_Terrassenlicht_Schalter cmd_2
setstate doif_Terrassenlicht_Schalter 2023-03-26 03:28:28 Device MQTT2_mqttBroker
setstate doif_Terrassenlicht_Schalter 2023-03-25 05:20:38 cmd 2.2
setstate doif_Terrassenlicht_Schalter 2023-03-25 05:20:38 cmd_event MQTT2_mqttBroker
setstate doif_Terrassenlicht_Schalter 2023-03-25 05:20:38 cmd_nr 2
setstate doif_Terrassenlicht_Schalter 2023-03-25 05:20:38 cmd_seqnr 2
setstate doif_Terrassenlicht_Schalter 2023-03-26 03:28:28 e_MQTT2_mqttBroker_events Tem: 20.50
setstate doif_Terrassenlicht_Schalter 2021-01-18 07:36:19 mode enabled
setstate doif_Terrassenlicht_Schalter 2023-03-25 05:20:38 state cmd_2
DOIF für den Bewegungsmelder:
define doif_BW_Terrasse DOIF ([MQTT2_mqttBroker:"^BW_Terrasse_occupancy:.true$"] and [MQTT2_zigbee_Lampe_Terrasse:anueberschalter] == 0 and [WH1080:Lux] < 10) (set MQTT2_zigbee_Lampe_Terrasse brightness 254) (set MQTT2_zigbee_Lampe_Terrasse on)\
\
DOELSEIF\
\
([MQTT2_mqttBroker:"^BW_Terrasse_occupancy:.false$"] and [MQTT2_zigbee_Lampe_Terrasse:anueberschalter] == 0) (set MQTT2_zigbee_Lampe_Terrasse off)
attr doif_BW_Terrasse do always
# DEF ([MQTT2_mqttBroker:"^BW_Terrasse_occupancy:.true$"] and [MQTT2_zigbee_Lampe_Terrasse:anueberschalter] == 0 and [WH1080:Lux] < 10) (set MQTT2_zigbee_Lampe_Terrasse brightness 254) (set MQTT2_zigbee_Lampe_Terrasse on)
#
#DOELSEIF
#
#([MQTT2_mqttBroker:"^BW_Terrasse_occupancy:.false$"] and [MQTT2_zigbee_Lampe_Terrasse:anueberschalter] == 0) (set MQTT2_zigbee_Lampe_Terrasse off)
# FUUID 5ff38c71-f33f-47d8-f4e7-9d7a1d5353862999
# MODEL FHEM
# NAME doif_BW_Terrasse
# NOTIFYDEV MQTT2_mqttBroker,WH1080,MQTT2_zigbee_Lampe_Terrasse,global
# NR 159
# NTFY_ORDER 50-doif_BW_Terrasse
# STATE cmd_2
# TYPE DOIF
# VERSION 27262 2023-02-21 19:36:39
# READINGS:
# 2023-03-26 03:28:28 Device MQTT2_mqttBroker
# 2023-03-25 12:44:20 cmd 2
# 2023-03-25 12:44:20 cmd_event MQTT2_mqttBroker
# 2023-03-25 12:44:20 cmd_nr 2
# 2023-03-26 03:28:28 e_MQTT2_mqttBroker_events Tem: 20.50
# 2023-03-25 05:20:38 e_MQTT2_zigbee_Lampe_Terrasse_anueberschalter 0
# 2023-03-25 12:48:42 e_WH1080_Lux 15004
# 2021-02-04 13:16:15 mode enabled
# 2023-03-25 12:44:20 state cmd_2
# Regex:
# accu:
# bar:
# barAvg:
# collect:
# cond:
# MQTT2_mqttBroker:
# 0:
# &STATE ^MQTT2_mqttBroker$
# 1:
# &STATE ^MQTT2_mqttBroker$
# MQTT2_zigbee_Lampe_Terrasse:
# 0:
# anueberschalter ^MQTT2_zigbee_Lampe_Terrasse$:^anueberschalter:
# 1:
# anueberschalter ^MQTT2_zigbee_Lampe_Terrasse$:^anueberschalter:
# WH1080:
# 0:
# Lux ^WH1080$:^Lux:
# condition:
# 0 ::EventDoIf('MQTT2_mqttBroker',$hash,'^BW_Terrasse_occupancy:.true$',1) and ::ReadingValDoIf($hash,'MQTT2_zigbee_Lampe_Terrasse','anueberschalter') == 0 and ::ReadingValDoIf($hash,'WH1080','Lux') < 10
# 1 ::EventDoIf('MQTT2_mqttBroker',$hash,'^BW_Terrasse_occupancy:.false$',1) and ::ReadingValDoIf($hash,'MQTT2_zigbee_Lampe_Terrasse','anueberschalter') == 0
# do:
# 0:
# 0 set MQTT2_zigbee_Lampe_Terrasse brightness 254
# 1 set MQTT2_zigbee_Lampe_Terrasse on
# 1:
# 0 set MQTT2_zigbee_Lampe_Terrasse off
# 2:
# helper:
# NOTIFYDEV MQTT2_mqttBroker,WH1080,MQTT2_zigbee_Lampe_Terrasse,global
# globalinit 1
# last_timer 0
# sleeptimer -1
# perlblock:
# readings:
# all MQTT2_zigbee_Lampe_Terrasse:anueberschalter WH1080:Lux
# trigger:
# all MQTT2_mqttBroker
# uiState:
# uiTable:
#
setstate doif_BW_Terrasse cmd_2
setstate doif_BW_Terrasse 2023-03-26 03:28:28 Device MQTT2_mqttBroker
setstate doif_BW_Terrasse 2023-03-25 12:44:20 cmd 2
setstate doif_BW_Terrasse 2023-03-25 12:44:20 cmd_event MQTT2_mqttBroker
setstate doif_BW_Terrasse 2023-03-25 12:44:20 cmd_nr 2
setstate doif_BW_Terrasse 2023-03-26 03:28:28 e_MQTT2_mqttBroker_events Tem: 20.50
setstate doif_BW_Terrasse 2023-03-25 05:20:38 e_MQTT2_zigbee_Lampe_Terrasse_anueberschalter 0
setstate doif_BW_Terrasse 2023-03-25 12:48:42 e_WH1080_Lux 15004
setstate doif_BW_Terrasse 2021-02-04 13:16:15 mode enabled
setstate doif_BW_Terrasse 2023-03-25 12:44:20 state cmd_2
LG
Cetri
Bei mir im Flur habe ich seit langem auch eine ähnliche Aufgabenstellung umgesetzt.
- Türsensor der Wohnungseingangstür soll das Licht im Flur für 60 Sekunden einschalten, aber nur, wenn die Tür von außen geöffnet wird.
- Die beiden Bewegungsmelder im Flur sollen das Licht für 90 Sekunden einschalten, wenn es zwischen 05 und 23 Uhr ist und die von den BM gemeldete Helligkeit im Flur einen bestimmten Wert nicht überschreitet. Das Nachtriggern der Beleuchtung, falls länger als 90 Sekunden Bewegung im Flur ist, erfolgt durch die BM.
- Die vorhandenen drei Wandtaster sollen das Licht natürlich auch manuell steuerbar machen.
- In der Zeit, in der die Putzfrau in der Wohnung ist, soll über einen zusätzlichen Taster die gesamte Automatik deaktiviert werden können, damit die Lichtspiele im Flur vermieden werden.
Das Ganze ist mit einem notify und einer Funktion in der 99_myUtils.pm umgesetzt.
Schaltaktor ist ein Homematic Hutschienenschalter im Sicherungskasten, der das vorhandene Eltako Relais ersetzt.
Super. Danke für die tollen Inspirationen!
Ihr habt mich auf den richtigen Weg gebracht - es funktioniert wie es soll ;)
Meine Lösung poste ich später, wenn alles "aufgeräumt" ist.
Ich habe aber ein Problem dazu bekommen:
Wenn dieses at:
Internals:
CFGFN ./FHEM/001_licht.cfg
COMMAND {
if ( (((($wday==0) || ($wday==1) || ($wday==2) || ($wday==3) || ($wday==4)) && (Value("dummy_TimeDiff_heute_dunkel_wo") >= 15)) ||
((Value("dummy_Feiertag_morgen")) && (Value("dummy_TimeDiff_heute_dunkel_we") >= 15))) ||
((($wday==5) || ($wday==6)) && (Value("dummy_TimeDiff_heute_dunkel_we") >= 15)) )
{ fhem ("setreading schalter_Licht_Carport switchedBy AT; set schalter_Licht_Carport on;"); } }
DEF *{ReadingsVal('dummy_Sonnenuntergang','state','')} {
if ( (((($wday==0) || ($wday==1) || ($wday==2) || ($wday==3) || ($wday==4)) && (Value("dummy_TimeDiff_heute_dunkel_wo") >= 15)) ||
((Value("dummy_Feiertag_morgen")) && (Value("dummy_TimeDiff_heute_dunkel_we") >= 15))) ||
((($wday==5) || ($wday==6)) && (Value("dummy_TimeDiff_heute_dunkel_we") >= 15)) )
{ fhem ("setreading schalter_Licht_Carport switchedBy AT; set schalter_Licht_Carport on;"); } }
FUUID xxxxx-xxxxx-xxxxx
NAME at_Licht_Carport_EIN
NR 251
NTM 20:35:10
PERIODIC yes
RELATIVE no
REP -1
STATE Next: 20:35:10
TIMESPEC {ReadingsVal('dummy_Sonnenuntergang','state','')}
TRIGGERTIME 1681497310
TRIGGERTIME_FMT 2023-04-14 20:35:10
TYPE at
eventCount 8
READINGS:
2023-04-14 10:48:07 state Next: 20:35:10
Attributes:
feuert, friert FHEM für ca. 2 Minuten ein!
Aber nur bei diesem at.
Ich habe noch 6 andere ats, welche zur selben Zeit (Sonnenuntergang) feuern - dabei passiert das aber nicht.
Nur beim o.g. at.
Ich dachte es wäre einmalig, konnte es aber zuverlässig reproduzieren.
Anbei mal ein Log-Auszug von gestern.
Besagter Zeitpunkt wäre 20:33:17 Uhr.
2023.04.13 20:31:57 1: SDUINO: SD_UT_Parse UNDEFINED sensor unknown detected, protocol 118, data 8FFD96, code 8FFD
2023.04.13 20:31:57 3: SDUINO IT: 433sensor_Bewegung_Oben off->on
2023.04.13 20:31:58 3: SDUINO IT: 433sensor_Bewegung_Oben on->on
2023.04.13 20:31:58 1: SDUINO: SD_UT_Parse UNDEFINED sensor unknown detected, protocol 118, data 8FFD96, code 8FFD
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
10 379 0 0 100 39 0 33 0:00:01 0:00:01 --:--:-- 33
100 379 100 340 100 39 293 33 0:00:01 0:00:01 --:--:-- 327
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
10 379 0 0 100 39 0 33 0:00:01 0:00:01 --:--:-- 33
100 379 100 340 100 39 286 32 0:00:01 0:00:01 --:--:-- 319
2023.04.13 20:32:07 3: SDUINO IT_set: 433sensor_Bewegung_Oben off
2023.04.13 20:32:07 3: SDUINO IT_set: 433sensor_Bewegung_Oben off
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
10 379 0 0 100 39 0 35 0:00:01 0:00:01 --:--:-- 35
100 379 100 340 100 39 313 35 0:00:01 0:00:01 --:--:-- 348
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
10 379 0 0 100 39 0 35 0:00:01 0:00:01 --:--:-- 35
100 379 100 340 100 39 309 35 0:00:01 0:00:01 --:--:-- 345
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
10 379 0 0 100 39 0 35 0:00:01 0:00:01 --:--:-- 35
100 379 100 340 100 39 305 35 0:00:01 0:00:01 --:--:-- 340
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:02 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:03 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:04 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:05 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:06 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:07 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:08 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:09 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:10 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:11 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:12 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:13 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:14 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:15 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:16 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:17 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:18 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:19 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:20 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:21 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:22 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:23 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:24 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:25 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:26 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:27 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:28 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:29 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:30 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:31 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:32 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:33 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:34 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:35 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:36 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:37 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:38 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:39 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:40 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:41 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:42 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:43 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:44 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:45 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:46 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:47 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:48 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:49 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:50 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:51 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:52 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:53 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:54 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:55 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:56 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:57 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:58 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:59 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:00 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:01 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:02 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:03 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:04 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:05 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:06 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:07 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:08 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:09 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:10 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:11 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:12 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:13 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:14 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:15 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:16 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:17 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:18 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:19 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:20 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:21 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:22 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:23 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:24 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:25 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:26 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:27 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:28 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:29 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:30 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:31 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:32 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:33 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:34 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:35 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:36 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:37 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:38 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:39 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:40 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:41 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:42 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:43 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:44 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:45 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:46 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:47 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:48 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:49 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:50 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:51 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:52 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:53 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:54 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:55 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:56 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:57 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:58 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:01:59 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:02:00 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:02:01 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:02:02 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:02:03 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:02:04 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:02:05 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:02:06 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:02:07 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:02:08 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:02:09 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:02:10 --:--:-- 0
curl: (28) Failed to connect to 192.168.x.xxx port 80: Die Wartezeit für die Verbindung ist abgelaufen
2023.04.13 20:34:35 3: httpmod_Solax_Wifi: no parsed JSON structure available
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:02 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:03 --:--:-- 0
curl: (7) Failed to connect to 192.168.x.xxx port 80: Keine Route zum Zielrechner
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:02 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:03 --:--:-- 0
curl: (7) Failed to connect to 192.168.x.xxx port 80: Keine Route zum Zielrechner
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:02 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:03 --:--:-- 0
curl: (7) Failed to connect to 192.168.x.xxx port 80: Keine Route zum Zielrechner
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:02 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:03 --:--:-- 0
curl: (7) Failed to connect to 192.168.x.xxx port 80: Keine Route zum Zielrechner
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
So richtig aussagekräftig ist das aber leider nicht.
Vielleicht hat jemand eine Idee dazu?
Liebe Grüße
Die Verzögerungen kommen offenbar aus dem Timeout eines curl-Aufrufs, nicht originär aus dem at selbst.
Zitat von: betateilchen am 14 April 2023, 11:42:35Die Verzögerungen kommen offenbar aus dem Timeout eines curl-Aufrufs, nicht originär aus dem at selbst.
Verstehe. Hätte da auch schon einen Verdächtigen im Blick!
1)
Aber, dass der Freeze nur in Verbindung mit dem besagten
at_Licht_Carport_EIN eintritt...?!
Schon seltsam.
2)
der curl-Aufruf findet zyklisch innerhalb eines
ats statt.
Dieses
at wird zum Sonnenuntergang (hier 20:33:17 Uhr) deaktiviert.
Alles gut.
Läuft wie erwartet - danke für den Anstoß ;)