Hallo zusammen,
wir haben eine Lampe im Flur (via Gosund Wifi Steckdose), die über einen Bewegungsmelder an und aus geschaltet wird.
Diese Lampe würden wir aber auch gerne zu bestimmten Zeiten manuell dauerhaft einschalten (via Gassistent per Handy).
Gibt es eine Möglichkeit die Quelle der Ein-/Ausschaltung zu erkennen und falls diese "manuell" war, dann soll der Bewegungsmelder nicht auslösen?
Mein Google-Fu ist hier leider gescheitert.
Vielen Dank und beste Grüße
Zu wenig Informationen, um Dir wirklich gezielt helfen zu können.
Grundsätzlich: wenn Du die Lampe so steuerst, dass ein notify auf den Bewegungsmelder reagiert und dann das Licht angeht, kannst Du das im notify feststellen. Im notify gibt es seit neuestem ein reading, in dem das auslösende device steht. Damit kannst Du feststellen, ob das notify über den Bewegungsmelder getriggert wurde oder nicht.
Wie erfolgt das manuelle Anschalten?
Hallo betateilchen,
danke für deine Antwort, ich versuche mein Struktur so gut wie möglich darzustellen.
Die Steckdose "Flur" können wir auch am Handy über Google Home FHEM Integration an/aus schalten.
Der Bewegungsmelder ist momentan über DOIF angesteuert:
([Bewegungsmelder_Flur:occupancy] eq "true" and isday() eq "0") (set Flur on)
Wenn ich dich korrekt verstehe sollte ich hier auf notify umstellen, da es dort ein Verursacher reading gibt.
Das könnte ich dann über if abfangen und entsprechend die Lampe schalten?
Zitat von: harle am 13 November 2021, 11:06:01
Wenn ich dich korrekt verstehe sollte ich hier auf notify umstellen, da es dort ein Verursacher reading gibt.
Das könnte ich dann über if abfangen und entsprechend die Lampe schalten?
Genau.
Hallo FHEMAN,
du bist am Zug, d.h. poste deine Definitionen, die mit deiner Frage zu tun haben.
Viele Grüße Gisbert
Steht das bei notify nicht auch in $NAME?
Und "sowas" gibt's doch bestimmt auch bei DOIF ;)
(nicht dass ich das nutze aber wollte nur "fair" bleiben 8) )
Gruß, Joachim
Zitat von: Gisbert am 13 November 2021, 11:26:15
Hallo FHEMAN,
du bist am Zug, d.h. poste deine Definitionen, die mit deiner Frage zu tun haben.
Viele Grüße Gisbert
Ich bin nicht der eigentliche Fragesteller. Frage aber deshalb, weil ich einen Verursacher schon lange suche. Und es diesen meiner Meinung nach nur bei Aktoren gibt, aber nicht im Web Interface, leider.
Ich denke ansonsten auch, dass ein notify zum DOIF hier keinen Mehrwert hat (?)
Die Anschlussfrage würde mich natürlich auch interessieren, ich sehe im Notify z.B. triggeredByDev.
Sehe aber momentan noch kein Land, wie ich das notify aufbaue, damit ich abhängig von triggeredByDev Aktionen einleiten kann.
Poste doch lists des notify und des BWM und des Schaltaktors...
Dann kann man da schon was "basteln"...
Ansonsten halt so "PSEUDO-CODE"!
define nSchalte notify SchalterTaster:RegEx {if($NAME eq "DiesesDevice"){fhem("set DasDevice on/off")}elsif($NAME eq "EinAnderesDevice"){fhem("set AnderesDevice on/off")}else{"..."}}
Statt $NAME geht auch ReadingsVal("nSchalte", "triggeredByDev", "nn")
ob es auch "sowas" wie $SELF gibt weiß ich grad nicht, dann könnte auch ReadingsVal($SELF, "triggeredByDev", "nn")
gehen...
Gruß, Joachim
Hi Joachim,
hier mal die Lists. Beim Notify muss ich zugeben bin ich nach beim grundsätzlichen Anlegen noch beim Verstehen des if-Konstruktes...falls notify aber keinen Mehrwert hat, wie kann ich den "Trigger" bei DOIF abfragen?
Schaltaktor
Internals:
CID DVES_054D12
DEF DVES_054D12
DEVICETOPIC Flur
FUUID 61023f95-f33f-d342-2ab3-cf1c2f994e36a561
IODev m2s
LASTInputDev m2s
MSGCNT 86
NAME Flur
NR 99
STATE off
TYPE MQTT2_DEVICE
m2s_MSGCNT 86
m2s_TIME 2021-11-13 12:18:32
JSONMAP:
Channel_0 0
Channel_1 0
Channel_2 0
Channel_3 0
Channel_4 0
Color 0
Dimmer 0
HSBColor 0
POWER1 0
POWER2 0
POWER3 0
POWER4 0
READINGS:
2021-11-13 10:13:23 FallbackTopic cmnd/DVES_054D12_fb/
2021-11-13 10:13:23 GroupTopic donoffs
2021-11-13 12:18:32 Heap 27
2021-11-13 10:13:23 Hostname tasmota_054D12-3346
2021-11-13 01:03:55 IODev m2s
2021-11-13 10:13:23 IPAddress 192.168.178.114
2021-11-13 10:13:23 LWT Online
2021-11-13 12:18:32 LoadAvg 19
2021-11-13 10:13:23 Module Delock 11826
2021-11-13 12:18:32 MqttCount 1
2021-11-13 10:13:23 RestartReason Power on
2021-07-29 07:43:54 SaveData on
2021-07-29 07:43:54 SetOption26 on
2021-11-13 12:18:32 Sleep 50
2021-11-13 12:18:32 SleepMode Dynamic
2021-07-29 07:43:53 StateText1 off
2021-07-29 07:43:53 StateText2 on
2021-07-29 07:43:53 StateText3 toggle
2021-07-29 07:43:54 StateText4 hold
2021-11-13 12:18:32 Time 2021-11-13T12:18:31
2021-11-13 12:18:32 Uptime 0T02:05:16
2021-11-13 12:18:32 UptimeSec 7516
2021-11-13 12:18:32 Vcc 3.463
2021-11-13 10:13:23 Version 6.7.1(basic)
2021-11-13 10:13:23 WebServerMode Admin
2021-11-13 12:18:32 Wifi_AP 1
2021-11-13 12:18:32 Wifi_BSSId 00:A0:F9:37:3C:CF
2021-11-13 12:18:32 Wifi_Channel 11
2021-11-13 12:18:32 Wifi_Downtime 0T00:00:05
2021-11-13 12:18:32 Wifi_LinkCount 1
2021-11-13 12:18:32 Wifi_RSSI 86
2021-11-13 12:18:32 Wifi_SSId Knutschkuller
2021-07-29 07:43:53 attrTemplateVersion 20210523
2021-11-13 11:44:35 state off
2021-11-12 16:40:57 subscriptions cmnd/DVES_054D12_fb/# cmnd/donoffs/# cmnd/tasmota_054D12/#
Attributes:
autocreate 0
comment NOTE: For on-for-timer SetExtensions are used. You may add on-for-timer option running on the device. The following is limited to 1h max duration, but will not affect future simple "on" commands:<br>on-for-timer {my $duration = $EVTPART1*10; 'cmnd/cmnd/tasmota_054D12/Backlog POWER1 1; delay '.$duration.'; POWER1 0'}<br>See the "Praxisbeispiele" in the wiki for "pulseTime1" alternative option and it's restrictions.
genericDeviceType switch
icon hue_filled_outlet
jsonMap POWER1:0 POWER2:0 POWER3:0 POWER4:0 Dimmer:0 Channel_0:0 Channel_1:0 Channel_2:0 Channel_3:0 Channel_4:0 HSBColor:0 Color:0
model tasmota_basic_state_power1
readingList tele/tasmota_054D12/LWT:.* LWT
tele/tasmota_054D12/STATE:.* { json2nameValue($EVENT,'',$JSONMAP) }
tele/tasmota_054D12/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP) }
tele/tasmota_054D12/INFO.:.* { $EVENT =~ m,^..Info[1-3]..(.+).$, ? json2nameValue($1,'',$JSONMAP) : json2nameValue($EVENT,'',$JSONMAP) }
tele/tasmota_054D12/UPTIME:.* { json2nameValue($EVENT,'',$JSONMAP) }
stat/tasmota_054D12/POWER1:.* state
stat/tasmota_054D12/RESULT:.* { json2nameValue($EVENT,'',$JSONMAP) }
room 09_Flur,GoogleAssistant,MQTT2_DEVICE
setList off:noArg cmnd/tasmota_054D12/POWER1 0
on:noArg cmnd/tasmota_054D12/POWER1 1
toggle:noArg cmnd/tasmota_054D12/POWER1 2
setOtaUrl:textField cmnd/tasmota_054D12/OtaUrl $EVTPART1
upgrade:noArg cmnd/tasmota_054D12/upgrade 1
setStateList on off toggle
BWM:
Internals:
CID zigbee_0x001788010918e497
DEF zigbee_0x001788010918e497
DEVICETOPIC zigbee2mqtt/0x001788010918e497
FUUID 618cbc41-f33f-d342-e64a-981ff083571710e7
IODev m2s
LASTInputDev m2s
MSGCNT 242
NAME Bewegungsmelder_Flur
NR 141
STATE T: 22.8 B: 12878 L: 255
TYPE MQTT2_DEVICE
m2s_MSGCNT 242
m2s_TIME 2021-11-13 12:20:34
READINGS:
2021-11-13 01:03:55 IODev m2s
2021-11-11 07:46:25 associatedWith MQTT2_zigbee_pi
2021-11-11 07:48:15 attrTemplateVersion 20200904
2021-11-13 12:20:34 battery 100
2021-11-13 12:20:34 illuminance 12878
2021-11-13 12:20:34 illuminance_lux 19
2021-11-13 12:20:34 linkquality 255
2021-11-13 12:20:34 motion_sensitivity high
2021-11-13 12:20:34 occupancy false
2021-11-13 12:20:34 occupancy_timeout 30
2021-11-13 12:20:34 temperature 20.27
2021-11-13 12:20:34 temperature_weather 22.8
2021-11-13 12:20:34 update_available false
2021-11-11 08:37:59 update_progress 100
2021-11-11 08:37:59 update_remaining 29
2021-11-13 12:20:34 update_state idle
Attributes:
devicetopic zigbee2mqtt/0x001788010918e497
genericDeviceType motion
homebridgeMapping "MotionDetected=state,values=motion:1;nomotion:0"
icon people_sensor
model zigbee2mqtt_hueMotionSensor
readingList $DEVICETOPIC:.* { json2nameValue($EVENT) }
room 09_Flur,MQTT2_DEVICE
stateFormat T: temperature_weather B: illuminance L: linkquality
userReadings temperature_weather { sprintf("%.1f",ReadingsVal($name,"temperature","")+2.5) }
Zitat von: harle am 13 November 2021, 12:25:54
hier mal die Lists.
Jetzt wäre noch (mal) die Frage welche "Wege" zum Einschalten du willst und was dazu führen soll, dass es "Dauer-an" bleibt?
Bzw. ich habe EnOcean Taster, die senden (glücklicherweise) selbst ein "Signal" an fhem.
Wenn nun per Taster EIN geschalten wird, dann setzte ich ein Reading im Aktor (z.B. setreading Aktor meinModus manual).
Im notify was auf den BWM reagiert wird eben dieses Reading abgefragt (ReadingsVal("Aktor", "meinModus", "nn") ) und wenn da manual steht macht das notify nix :)
Wenn ich mit dem Taster wieder AUS schalte, dann schreibe ich in den Aktor eben "automatic" (z.B. setreading Aktor meinModus automatic) und wenn der BWM auslöst und dort "automatic" steht, dann macht eben das notify was für "automatic" vorgesehen ist :)
Zitat von: harle am 13 November 2021, 12:25:54
Beim Notify muss ich zugeben bin ich nach beim grundsätzlichen Anlegen noch beim Verstehen des if-Konstruktes
Erstellen von notify/DOIF am einfachsten per Eventmonitor: https://wiki.fhem.de/wiki/Event_monitor
(ein Auszug davon bei den verschiedenen Aktionen würde auch helfen und auch welcher Eintrag zu welcher Aktion gehört hat)
Das if-Zeugs in den geschweiften Klammern ist halt Perl, gibt es Seiten zum Selbststudium im Netz... ;)
notify und dann eben Perl -> { Perl-Code } (oder besser: auslagern in myUtils)
https://wiki.fhem.de/wiki/99_myUtils_anlegen
Zitat von: harle am 13 November 2021, 12:25:54
...falls notify aber keinen Mehrwert hat, wie kann ich den "Trigger" bei DOIF abfragen?
Was heißt "Mehrwert"?
notify und dann eben Perl -> { Perl-Code } (oder besser: auslagern in myUtils) ist doch ähnlich wie DOIF...
Was mich bei DOIF eher "stört" ist die "Mischung" zwischen "Programmierung" (mit DOIF-Sytax) und "Beeinflussung" durch Attribute...
Und wenn DOIF-Perl, dann kann ich auch gleich bei notify/at etc. bleiben ;)
Aber egal, führt hier weg...
...soll aber sagen: ich habe bzgl. DOIF keine Ahnung, sorry... :-\
Und wen du das DOIF schon hast, dann einfach commandre lesen was dazu steht oder warten bis sich jemand meldet, der das beantworten kann...
Gruß, Joachim
Zitat von: MadMax-FHEM am 13 November 2021, 13:18:23
Jetzt wäre noch (mal) die Frage welche "Wege" zum Einschalten du willst und was dazu führen soll, dass es "Dauer-an" bleibt?
Ich habe es Stand jetzt so, dass der BW die Lampe an und aus schaltet.
Wenn wir jetzt aber die Lampe manuell auf "on" schalten, dann soll der BWM so lange keine Aktion machen, bis die Lampe wieder manuell auf aus geschaltet wird.
Der BW soll quasi deaktiviert werden sobald manuell in die Schaltung der Lampe eingegriffen wird.
Ist das grundsätzlich überhaupt erfass-/bzw. machbar?
Zitat von: harle am 13 November 2021, 13:39:09
Wenn wir jetzt aber die Lampe manuell auf "on" schalten, dann soll der BWM so lange keine Aktion machen, bis die Lampe wieder manuell auf aus geschaltet wird.
Ja schon klar.
ABER: WAS schaltet denn manuell ein? Also ist es ein Schalter/Taster, der auch in fhem integriert ist bzw. zumindest fhem erkennen kann, wenn dadurch geschalten wird/wurde?
Zitat von: harle am 13 November 2021, 13:39:09
Ist das grundsätzlich überhaupt erfass-/bzw. machbar?
Ja, also wenn fhem den Schalter erkennen kann bzw. es eben eine Möglichkeit für fhem gibt irgendwie zu unterscheiden, dann klar, siehe meine Antwort!
Genau das mache ich ja... 8)
Gruß, Joachim
Zitat von: MadMax-FHEM am 13 November 2021, 13:51:01
WAS schaltet denn manuell ein? Also ist es ein Schalter/Taster, der auch in fhem integriert ist bzw. zumindest fhem erkennen kann, wenn dadurch geschalten wird/wurde?
Wir benutzen Google_Assistant_FHEM_Connect (https://wiki.fhem.de/wiki/Google_Assistant_FHEM_Connect) im ganzen Haus und schalten entweder per Sprache oder per Shortcuts über Google Home auf dem Handy.
Ich könnte natürlich jetzt für den Flur einen separaten Schalter noch integrieren (z.B. Philips Hue Smart Button long press für an/aus), den könnte man dann abfragen? Ich gehe jetzt mal davon aus, dass man keine Rückmeldung von Google Assistant FHEM Connect bekommt, dass geschaltet wurde.
Hallo harle,
ich glaube, dass du die Frage von Joachim noch nicht ausreichend beantwortet hast.
Beispiel: dein BW und Google Assistant und dein vorhandener(?), manueller(?) Schalter schalten das gleiche Relais - wie soll denn Fhem den Unterschied registrieren? Entweder es gibt für jeden der 3 Schaltmöglichkeiten in irgendeinem Fhem-Device ein Reading, dann lässt sich dein Vorhaben umsetzen.
Denke mal bitte in diese Richtung und schildere genau, was von dem vorhanden ist und auf deine Situation passt.
Viele Grüße Gisbert
Hi Gisbert,
ich denke schon, dass ich es verstanden habe und ich gehe jetzt davon aus, dass FHEM den Unterschied nicht erkennen kann.
Heute schaltet nur der BW und Google Assistant das Relais, aber auch da wird es ja kein Reading geben, dass das Schalten von Google kam.
Was ich sagen wollte war, falls ich das Problem des nicht vorhandenen Readings über einen zusätzlichen, manuellen Schalter umgehen könnte, dann würde ich einen solchen in das System einbinden.
Da wir aber hauptsächlich Gassistant nutzen wird es keine Lösung geben das Relais auf Dauer-An zu lassen, wenn es über eben diesen Assistenten geschaltet wurde, so wie ich es mittlerweile verstanden habe.
Hallo harle,
nimm doch in deinem DOIF den Zustand der Lampe bei der Einschaltbedingung
und
den eigenen Zustand des DOIF bei den Ausschaltbedingungen mit auf.
([Bewegungsmelder_Flur:occupancy] eq "true" and isday() eq "0" and [Flur] eq "off") (set Flur on)
DOELSE
([Bewegungsmelder_Flur:occupancy] eq "false" and [$SELF] eq "cmd_1") (set Flur off)
So sollte es nur einschalten wenn die Lampe vorher nicht an war
und nur ausschalten wenn das DOIF es selbst eingeschaltet hat.
Achtung Code ist nur aus der Hüfte geschossen ;)
Gruß
Hallo harle,
ich hab einen ESP8266 (vermutlich steckt in deiner Gosund Wifi Steckdose auch ein ESP8266), an dem ein Bewegungsmelder und eine Lampe dran hängt (in der Realität noch etwas komplizierter als dein Fall, da es ein Wechselschalter ist).
Tagsüber möchte ich nicht, dass der Bewegungsmelder das Licht einschaltet - verständlich. Andererseits möchte ich manchmal nicht, dass das Licht nach 1~2 Minuten ausgeht.
Um das zu erreichen habe ich ESPEasy am Start zusammen mit sogenannten Rules in ESPEasy.
Tag/Nacht-Unterscheidung mache ich in Fhem in einem DOIF und sende ein Event zum ESP. Auf dieses Event setzt eine Rule auf und setzt ein Dummy in ESPEasy entsprechend (0 oder 1).
Willentlich setze ich die Automatik außer Kraft, indem ich ein weiteres Dummy-Device ändere (0 oder 1), so dass das Ausschalten nach Bewegungsende unterbleibt; der umgekehrte Fall geht auch (d.h. trotz Bewegung kein Licht).
Hier meine Rules:
on Wechselschalter2#Wechselschalter2 do
if [Relais#Relais]=0
gpio,14,1
elseif [Relais#Relais]=1
gpio,14,0
endif
endon
on PIR#PIRstate=0 do
if [detectVcc#stateVcc]=1 and [daylight#day]=0 and [automode#mode]=0 and [Relais#Relais]=0
gpio,14,1
elseif [detectVcc#stateVcc]=1 and [daylight#day]=0 and [automode#mode]=0 and [Relais#Relais]=1
gpio,14,0
endif
endon
on PIR#PIRstate=1 do
if [daylight#day]=0
timerSet,1,40
elseif [daylight#day]=1
timerSet,1,20
endif
endon
on Rules#Timer=1 do
if [detectVcc#stateVcc]=0 and [PIR#PIRstate]=1 and [automode#mode]=0 and [Relais#Relais]=0
gpio,14,1
elseif [detectVcc#stateVcc]=0 and [PIR#PIRstate]=1 and [automode#mode]=0 and [Relais#Relais]=1
gpio,14,0
endif
endon
on Einschalten do
if [detectVcc#stateVcc]=1 and [Relais#Relais]=0
gpio,14,1
elseif [detectVcc#stateVcc]=1 and [Relais#Relais]=1
gpio,14,0
endif
endon
on Ausschalten do
if [detectVcc#stateVcc]=0 and [Relais#Relais]=0
gpio,14,1
elseif [detectVcc#stateVcc]=0 and [Relais#Relais]=1
gpio,14,0
endif
endon
on Tag do
taskvalueset 6,1,1
Publish WechselschalterFlurEG_13/daylight/day,1
endon
on Nacht do
taskvalueset 6,1,0
Publish WechselschalterFlurEG_13/daylight/day,0
endon
on Auto do
taskvalueset 7,1,0
Publish WechselschalterFlurEG_13/automode/mode,0
endon
on noAuto do
taskvalueset 7,1,1
Publish WechselschalterFlurEG_13/automode/mode,1
endon
Vielleicht hilft dir dieser Ansatz weiter.
Viele Grüße
Gisbert
Irgendwie bewegen sich alle hinzukommenden Helfer mit ihren Fragen immer weiter weg vom eigentlichen Problem.
Jeder hat irgendwie recht mit seinen Fragen - aber weiterhelfen tut das alles dem Fragesteller nicht.
Ich mach mal Popcorn.
Zitat von: betateilchen am 13 November 2021, 18:50:13
Irgendwie bewegen sich alle hinzukommenden Helfer mit ihren Fragen immer weiter weg vom eigentlichen Problem.
Jeder hat irgendwie recht mit seinen Fragen - aber weiterhelfen tut das alles dem Fragesteller nicht.
Ich mach mal Popcorn.
Du warst doch derjenige, der dem TE und mir mit seiner Aussage den Mund wässrig gemacht hat. Also anstatt Popcorn zu kaufen lass uns doch mal teilhaben an Deinem Wissen ;)
Zitat von: FHEMAN am 13 November 2021, 18:55:24
Du warst doch derjenige, der dem TE und mir mit seiner Aussage den Mund wässrig gemacht hat. Also anstatt Popcorn zu kaufen
Sorry, dass ich hier nicht 24/7 vor dem PC sitze, um immer innerhalb weniger Sekunden antworten zu können. Wenn ein Thread dann zwischenzeitlich so zerfleddert wurde wie dieser hier, habe ich einfach keine Lust mehr, weil die Erfahrung lehrt, dass sich der Zeitaufwand für eine Rückführung meistens nicht mehr lohnt.
Außerdem
kaufe ich kein Popcorn, ich mache das in meiner Popcornmaschine selbst und immer frisch.
Dabei frage ich mich übrigens immer, warum die Menschheit aufgehört hat, herauszufinden, ob man noch andere Dinge durch Explosion besser machen kann als nur das Maiskorn...
--
solange der Schaltaktor in der Lage ist, seinen eigenen Zustand an FHEM zu melden, ist die Sache doch recht einfach logisch zu ermitteln.
Wenn der Bewegungsmelder auslöst und die Lampe zu dem Zeitpunkt schon an ist, muss sie auf anderem Weg eingeschaltet worden sein.
In dem Moment würde ich dafür sorgen, dass das notify, das auf den Bewegungsmelder reagiert, den Status des Schaltaktors nicht verändert. Es gibt mehrere mögliche Lösungsansätze, die man beliebig komplex und komfortabel gestalten kann.
Ähnliches Beispiel aus meiner eigenen FHEM Installation:
Bei mir gibt es an der Wohnungstür einen Türsensor, der beim Öffnen das Licht im Flur einschaltet. Dies soll er aber nur tun, wenn die Tür von außen aufgemacht wird. Das wiederum wird dadurch festgestellt, dass die Bewegungsmelder im Flur zu dem Öffnungszeitpunkt keine Bewegung IM Flur festgestellt haben (es ist also niemand innen zur Tür gelaufen, um sie aufzumachen)
Zitat von: harle am 13 November 2021, 16:11:21
Hi Gisbert,
ich denke schon, dass ich es verstanden habe und ich gehe jetzt davon aus, dass FHEM den Unterschied nicht erkennen kann.
Heute schaltet nur der BW und Google Assistant das Relais, aber auch da wird es ja kein Reading geben, dass das Schalten von Google kam.
Was ich sagen wollte war, falls ich das Problem des nicht vorhandenen Readings über einen zusätzlichen, manuellen Schalter umgehen könnte, dann würde ich einen solchen in das System einbinden.
Da wir aber hauptsächlich Gassistant nutzen wird es keine Lösung geben das Relais auf Dauer-An zu lassen, wenn es über eben diesen Assistenten geschaltet wurde, so wie ich es mittlerweile verstanden habe.
Also "nur" Sprache und BWM.
Ich weiß, jetzt gibt's wieder Haue ;)
Aber wenn du statt den direkten Aktor einen dummy per Sprache steuerst und dann eben ein DOIF (gut ich würde ja ein notify nehmen ;) ) auf BWM und Sprache machst und eben bei Sprache im DOIF oder im Aktor merkst -> Sprache (so wie mein automatic/manual), dann kann das DOIF (oder notify) das ja abfragen und dann entweder bei BWM was tun oder lassen...
Alternativ: bei Alexa gibt es zusätzlich noch das echodevice, da gibt es ein Reading voice, das könnte man ebenfalls abfragen...
...evtl. gibt es sowas ja bei Google Home auch. Es gibt ja noch das GoogleCast/ChromeCast Device, vielleicht liefert das was...
Und Haue hin oder her: wenn ich etwas per Sprache (nutze Alexa) schalten will, wo ich aber vorher noch Dinge abfrage etc. dann nehme ich dafür entweder einen dummy... 8)
Zitat von: kabanett am 13 November 2021, 16:24:16
Hallo harle,
nimm doch in deinem DOIF den Zustand der Lampe bei der Einschaltbedingung
und
den eigenen Zustand des DOIF bei den Ausschaltbedingungen mit auf.
([Bewegungsmelder_Flur:occupancy] eq "true" and isday() eq "0" and [Flur] eq "off") (set Flur on)
DOELSE
([Bewegungsmelder_Flur:occupancy] eq "false" and [$SELF] eq "cmd_1") (set Flur off)
So sollte es nur einschalten wenn die Lampe vorher nicht an war
und nur ausschalten wenn das DOIF es selbst eingeschaltet hat.
Achtung Code ist nur aus der Hüfte geschossen ;)
Gruß
Ob das mit dem DOIF und self klappt: keine Ahnung.
Bin etwas skeptisch (dachte auch zuerst das ginge bei meinen "echt vorhandenen" Schaltern), weil wenn der BWM "schneller" ist, ok, dann evtl. ist das SELF schon damit gesetzt...
...aber wenn dann Sprache kommt, hmmm. Dann ist Self und somit keine Sprache oder wie ist/war das gedacht...
...bzw. wenn Sprache kam ist dann das SELF?
Ich kenne DOIF halt zu wenig...
Gruß, Joachim
Zitat von: betateilchen am 13 November 2021, 19:15:41
solange der Schaltaktor in der Lage ist, seinen eigenen Zustand an FHEM zu melden, ist die Sache doch recht einfach logisch zu ermitteln.
Wenn der Bewegungsmelder auslöst und die Lampe zu dem Zeitpunkt schon an ist, muss sie auf anderem Weg eingeschaltet worden sein.
In dem Moment würde ich dafür sorgen, dass das notify, das auf den Bewegungsmelder reagiert, den Status des Schaltaktors nicht verändert. Es gibt mehrere mögliche Lösungsansätze, die man beliebig komplex und komfortabel gestalten kann.
Naja aber nur, wenn die Sprache vorher war...
...wenn zuerst Bewegung -> an (notify merkt sich das vielleicht sogar) und dann Sprache?
Was zählt nun?
Weil Sprache schaltet ja den (bereits an Aktor) ja "nur "wieder an...
...und was ist beim Ausschalten?
Wenn keine Bewegung mehr ist?
Die Lampe/Aktor ist ja an aber keiner weiß mehr wodurch? ;)
Soll nun der BWM (also das BWM-notify) ausschalten oder nicht, weil ja evtl. Sprache?
Gruß, Joachim
Genau das meinte ich mit "Thread zerfleddern". Schade.
Ich bin hier raus.
Zitat von: betateilchen am 13 November 2021, 19:27:23
Genau das meinte ich mit "Thread zerfleddern". Schade.
Ich bin hier raus.
Dass du immer gleich "beleidigt" bist...
...als Helfer "muss" man ab und an von dir auch einige (unnötige) "Schüsse" verkraften...
Außerdem wäre es ja doch interessant zu sehen, ob es tatsächlich so einfach geht, ich mag ja auch falsch liegen...
...sorry, dass ich (auch nur) ein Mensch bin und halt auch versuche zu (mitzu)denken und Finger um was zu schreiben... ;)
Gruß, Joachim
Zitat von: MadMax-FHEM am 13 November 2021, 19:31:24
Dass du immer gleich "beleidigt" bist...
Ich bin überhaupt nicht beleidigt, solche Unterstellungen kannst Du gerne weglassen.
Zitat von: betateilchen am 13 November 2021, 19:06:19
Sorry, dass ich hier nicht 24/7 vor dem PC sitze, um immer innerhalb weniger Sekunden antworten zu können. Wenn ein Thread dann zwischenzeitlich so zerfleddert wurde wie dieser hier, habe ich einfach keine Lust mehr, weil die Erfahrung lehrt, dass sich der Zeitaufwand für eine Rückführung meistens nicht mehr lohnt.
Außerdem kaufe ich kein Popcorn, ich mache das in meiner Popcornmaschine selbst und immer frisch.
Dabei frage ich mich übrigens immer, warum die Menschheit aufgehört hat, herauszufinden, ob man noch andere Dinge durch Explosion besser machen kann als nur das Maiskorn...
--
Na wenn Du Zeit für Popcorn Kommentare findest..
Das Kau
fen war doch direkt ein T9-Fehler ;) ;)
Um mal wieder konstruktiv zu werden, hier mein (schlechter) Lösungsansatz für das Sender/Verursacher-Problem:
https://forum.fhem.de/index.php/topic,122468.msg1171989.html#msg1171989
Hier eine Version, wie sie bei mir im Einsatz ist:
Normalerweise wird das Licht über BWM gesteuert. Wenn ich länger im Keller bin, will ich den BWM aber übergehen --> Hierzu habe ich einen Taster.
Da ich mich aber nicht drauf verlassen will, dass das Licht auch über den Taster wieder ausgeschaltet wird, läuft zusätzlich im DOIF ein Timer, welcher in diesem Fall (Taster) das Licht nach einer Stunde ausschaltet.
Ab diesem Zeitpunkt (Timer ODER nochmalig Taster) läuft wieder der normale BWM-Timer.
define di_Kellerlicht DOIF ([xi_Motion_3:occupancy] eq "true") (set mq2_Mini2 on)(set mq2_Mini2 off;;setreading $SELF delay 600) \
DOELSEIF ([mq2_Mini5:Switch1]) (set mq2_Mini2 toggle;;setreading $SELF delay 3600)(setreading $SELF delay 600)
attr di_Kellerlicht do resetwait
attr di_Kellerlicht wait 0,[$SELF:delay]:0,[$SELF:delay]
lg, Stefan
Ich hab folgendes Setup bei mir:
* Zigbee-Licht in der Küche
* Zigbee-Dimmschalter der das Licht schaltet
* Amazon Echo zur Sprachsteuerung
Meine Verhalten ist eigentlich wie das vom TE:
* Wenn das Licht nicht manuell eingeschaltet wurde, dann nutze den BWM
* Wenn das Licht manuell eingeschaltet wurde, ignoriere den BWM
* Wenn das Licht manuell ausgeschaltet wurde, aktiviere den BWM wieder.
Dazu hab ich folgendes DOIF:
defmod di.Kuechenlicht_Control DOIF ((["^Echo_:^voice",""] =~ /ober\s?licht(?!.*aus)/i or [hue.dimmer.Oberlicht:"DimUp"]) and ([?di.Kuechenlicht_Motion:mode] ne "disabled" or [$SELF:cmd] eq "2.2"))\
(msg @rr_Frank ($EVENT) Oberlicht was turned on manually. Disabling di.Kuechenlicht_Motion)\
(set di.Kuechenlicht_Motion disable)\
DOELSEIF([hue.light.Oberlicht:"^onoff:.0$"] and [?di.Kuechenlicht_Motion:mode] eq "disabled")\
(msg @rr_Frank ($EVENT) Oberlicht was turned off. Enabling di.Kuechenlicht_Motion)\
(set di.Kuechenlicht_Motion enable)\
\
attr di.Kuechenlicht_Control do always
attr di.Kuechenlicht_Control room System->DOIF
attr di.Kuechenlicht_Control wait 0,0:0,30
(Die msg commands waren mal fürs Testen gedacht und können eigentlich raus)
Dieses DOIF ist nur dazu da, das BWM-DOIF di.Kuechenlicht_Motion ein- oder auszuschalten.
Wenn jemand einen Alexa-Befehl "Oberlicht..(an|50%|???%|...)" sagt, oder am Dimmschalter das Licht anschaltet, dann wird das BWM-DOIF deaktiviert.
Wenn das Oberlicht abgeschalten wird (von wem ist egal), und das BWM-DOIF im Status "disabled" ist, dann schalte es wieder an.
Vielleicht hilfts...