Hallo zusammen,
ich bin immer noch ganz am Anfang mit FHEM. Geräte einbinden schaffe ich langsam. Bedienen kann man sie auch. Nun habe ich folgendes vor:
-Zwei Bewegungsmelder (Aqara via ConBee2)
-ein Shelly 1
Wenn einer der beiden nun Bewegung entdeckt, soll der Schalter eingeschaltet werden (hängt ne Lampe dran)
Wenn beide über X Minuten keine Bewegung entdecken, Shelly aus
Geräte sind im FHEM angelegt. Würde den Shelly auch noch via Lichtschalter / HomeKit bedienen können ohne das FHEM dann zwischen grätscht wenn Licht mit Absicht an.
Was nutzt man nun dafür? Notify? DoIf? Und wie würde so etwas in etwa aussehen? Hab schon ins Wiki geschaut. Bisher sehe ich aber nur Bäume, keinen Wald.
Freue mich über alle Tips und Hilfen
Moin,
ich habe es z.B. so gelöst:
Je ein notify auf die Bewegungsmelder
defmod Flurbewegung_1 notify BewegungFlur:occupancy:.* {Flurbeleuchtung ($hour);;}
defmod Flurbewegung_2 notify BewegungVorflur:occupancy:.* {Flurbeleuchtung ($hour);;}
und dann die Lichtsteuerung in 99_myUtils
sub Flurbeleuchtung ($) {
my ($hour) = @_;
my $A1 = ReadingsVal("BewegungFlur","occupancy",0);
my $A2 = ReadingsNum("BewegungFlur","illuminance",0);
my $B1 = ReadingsVal("BewegungVorflur","occupancy",0);
my $B2 = ReadingsNum("BewegungVorflur","illuminance",0);
my $C1 = ReadingsVal("Flurlampe","state",0);
my $D1 = ReadingsVal("Bright","state",5);
if ($hour >= 8 and $hour < 17)
{
if ($A1 eq "false" and $C1 eq "ON")
{
fhem( "set Flurlampe off" );
}
}
else
{
if ($A1 eq "true" and $A2 < 10 and $C1 eq "OFF")
{
fhem( "set Flurlampe brightness $D1" );
}
elsif ($B1 eq "true" and $A2 < 10 and $C1 eq "OFF")
{
fhem( "set Flurlampe brightness $D1" );
}
elsif ($B1 eq "false" and $A1 eq "false" and $C1 eq "ON")
{
fhem( "set Flurlampe off" );
}
};
}
Ist jetzt wahrscheinlich etwas oversized für deinen Anwendungsfall, da ich das Leuchtmittel direkt und in Abhängigkeit der Tageszeit schalte, aber vielleicht hilft es als Anregung.
LG
Andreas
@rischbiter123:
Da würde auch ein notify gehen ;)
defmod Flurbewegung notify Bewegung.*lur:occupancy:.* {Flurbeleuchtung ($hour);;}
@LastOne:
Aber ja im Prinzip so bzw. einfacher (sofern Shelly on-for-timer kennt):
defmod nLicht notify BewegungsMelder.*:motion set Licht on-for-timer 60
Sollten die Bewegungsmelder z.B. BewegungsMelder1 und BewegungsMelder2 heißen und bei Bewegung ein "motion" Event "feuern" und du eine max. Zeit nach Bewegung von 60s haben willst (alles nur Beispiel!!).
Aber das löst nicht das "Problem" der manuellen Betätigung!
D.h. dafür musst du sehen, ob das erkennbar ist...
EDIT: ich habe EnOcean Taster, da kann ich "nachsehen", ob diese (kürzlich) ausgelöst wurden, das Licht also manuell geschalten wurde und falls ja, wird der Bewegungsmelder "ignoriert"...
Anlegen von notify geht am besten mit dem Eventmonitor: https://wiki.fhem.de/wiki/Event_monitor
Und wie du siehst: bei guter Namenswahl kann man notify "einsparen" und auch sonst "generisch" "programmieren"...
Gruß, Joachim
Hi,
das geht auch mit einem notify :)
define Flurbewegung notify BewegungFlur:occupancy:.*|BewegungVorflur:occupancy:.* {Flurbeleuchtung ($hour)}
Den Shelly (wie ist der eingebunden) kannst Du mit on-for-timer für eine Zeit steuern.
Du kannst den Shelly vorher abfragen ob schon on, dann schickst Du keinen on-for-timer, damit bleibt er wie er ist. Geht mit if oder auch mit einem FILTER (set Lampe:FILTER=state=off on-for-timer 300).
Edit: da war ich langsamer als Joachim ;)
Gruß Otto
[OT]
hatte ich auch ursprünglich, gab aber irgendwie Probleme beim Schalten, wenn man zu schnell die Erfassungsbereiche durchschritten hatte. Läuft aber seit einem Jahr, weiß also nicht mehr genau, was das genaue Problem war.
[OT Ende]
LG
Andreas
In den SmartHome Hacks habe ich verschiedene einfache Zustandsautomaten beschrieben, das ist der beste Weg, so etwas umzusetzen. Die entsprechenden Seiten stehen auch irgendwor hier im Forum als PDF herum.
LG
pah
@Otto: mal gewinnt man und mal verliert der Andere... ;)
Gruß, Joachim
Wow, erst mal Danke für die vielen Antworten. Das is echt toll :)
Ich versuche noch immer den Code zu verstehen, ich hab durch den Hinweis auf den Event-Monitor nun gemerkt das ich zwar die Geräte angelegt habe. Aber scheinbar nicht korrekt / vollständig da die Bewegung nicht in Fhem ankommt. Also das sind meine drei Geräte.
Kellertreppe:
Internals:
CFGFN
DEF sensor 7 IODev=deCONZ
FUUID 5f704083-f33f-ac26-b1ae-adae33bea764295d
FVERSION 31_HUEDevice.pm:0.218370/2020-05-02
ID S7
INTERVAL
IODev deCONZ
NAME Bewegungsmelder_Kellertreppe
NR 54
STATE nomotion
TYPE HUEDevice
lastupdated 2020-09-27 06:59:28
lastupdated_local 2020-09-27 08:59:28
manufacturername LUMI
modelid lumi.sensor_motion.aq2
name Bewegungsmelder_Kellertreppe
on 1
reachable 1
swversion 20170627
type ZHAPresence
uniqueid 00:15:8d:00:04:4d:35:f9-01-0406
READINGS:
2020-09-27 08:59:28 battery 100
2020-09-27 08:59:28 batteryPercent 100
2020-09-27 08:59:28 reachable 1
2020-09-27 08:59:28 state nomotion
2020-09-27 08:59:28 temperature 21
helper:
devtype S
reachable 0
update_timeout 1
configList:
json:
ep 1
etag f5bef13762102c787866fb04c5d0f088
lastseen 2020-09-27T06:59:28.739
manufacturername LUMI
modelid lumi.sensor_motion.aq2
name Bewegungsmelder_Kellertreppe
swversion 20170627
type ZHAPresence
uniqueid 00:15:8d:00:04:4d:35:f9-01-0406
config:
battery 100
duration 90
temperature 2100
state:
lastupdated 2020-09-27T06:59:28.239
setList:
Attributes:
IODev deCONZ
model lumi.sensor_motion.aq2
room Keller
Kellerflur
Internals:
CFGFN
DEF sensor 6 IODev=deCONZ
FUUID 5f70413f-f33f-ac26-8fbe-a46a1489aeee85e3
FVERSION 31_HUEDevice.pm:0.218370/2020-05-02
ID S6
INTERVAL
IODev deCONZ
NAME Bewegungsmelder_Kellerflur
NR 60
STATE nomotion
TYPE HUEDevice
lastupdated 2020-09-27 07:17:45
lastupdated_local 2020-09-27 09:17:45
manufacturername LUMI
modelid lumi.sensor_motion.aq2
name Bewegungsmelder_Kellerflur
on 1
reachable 1
swversion 20170627
type ZHAPresence
uniqueid 00:15:8d:00:05:3f:9d:76-01-0406
READINGS:
2020-09-27 09:17:45 battery 100
2020-09-27 09:17:45 batteryPercent 100
2020-09-27 09:17:45 reachable 1
2020-09-27 09:17:45 state nomotion
2020-09-27 09:17:45 temperature 24
helper:
devtype S
reachable 0
update_timeout 1
configList:
json:
ep 1
etag fcd06016e790bf9b1ddab356aaa01471
lastseen 2020-09-27T07:17:46.441
manufacturername LUMI
modelid lumi.sensor_motion.aq2
name Bewegungsmelder_Kellerflur
swversion 20170627
type ZHAPresence
uniqueid 00:15:8d:00:05:3f:9d:76-01-0406
config:
battery 100
duration 90
temperature 2400
state:
lastupdated 2020-09-27T07:17:45.942
setList:
Attributes:
IODev deCONZ
model lumi.sensor_motion.aq2
room Keller
Schalter
Internals:
DEF 192.168.1.70
DURATION 0
FUUID 5f6f1980-f33f-ac26-f520-9764282e1c4a4b1c
INTERVAL 60
NAME Schalter_Kellertreppe
NR 30
STATE off
TCPIP 192.168.1.70
TYPE Shelly
READINGS:
2020-09-26 12:35:44 cloud disabled
2020-09-26 12:35:44 firmware v1.8.3
2020-09-27 03:14:10 network <html>connected to <a href="http://192.168.1.70">192.168.1.70</a></html>
2020-09-27 09:46:09 relay off
2020-09-27 09:46:09 state off
Attributes:
model shelly1
room Keller
Passen die erst mal soweit? Irgendwo muss ja noch ein Fehler sein.
Was meinst Du jetzt damit? Du bekommst keine Events bei Bewegung?
Na ja. Müsste der Event Monitor nicht etwas anzeigen, sobald der Sensor Bewegung erkennt? Der Event Monitor ist einfach leer
Er zeigt überhaupt keine Events an? Von keinem Gerät? Da ist was "kaputt".
Such mal hier im Forum, da gab es immer mal was. Browser, Virenscanner kommt da als Ursache in Frage.
https://wiki.fhem.de/wiki/Event_monitor#Bekannte_Probleme
Falls das Problem nicht trivial ist, kannst Du auch mal ein notify mit Log Ausgabe zur Kontrolle anlegen.
https://wiki.fhem.de/wiki/Notify
define Kellerbewegung notify Bewegungsmelder_Kellertreppe:.*|Bewegungsmelder_Kellerflur:.* {Log 1, "Das Device $NAME hat ausgeloest, der Event sah so aus: $EVENT"}
Gruß Otto
Ich versuche immer noch, den Code sauber zu verstehen:
defmod nLicht notify BewegungsMelder.*:motion set Licht on-for-timer 60
Der part würde für mich reichen?
nLicht = Name des Notify?
BewegungsMelder = name des bewegungsmelder / device?
motion = ? ist das immer motion als ergebnis oder was anderes?
Licht = Shelly name?
Zitat von: LastOne am 29 September 2020, 10:50:15
Ich versuche immer noch, den Code sauber zu verstehen:
defmod nLicht notify BewegungsMelder.*:motion set Licht on-for-timer 60
Der part würde für mich reichen?
nLicht = Name des Notify?
BewegungsMelder = name des bewegungsmelder / device?
motion = ? ist das immer motion als ergebnis oder was anderes?
Licht = Shelly name?
Fast. ;)
motion ist der Event(inhalt) vom Device Bewegungsmelder.
D.h. das notify (namens nLicht ;) ) "reagiert" wenn das Device Bewegungsmelder einen Event mit "Inhalt" motion "verschickt"...
EDIT: einfach mal den Eventmonitor öffnen (optional: Filter auf den Bewegungsmelder setzen) und dann eben "Bewegung auslösen" und schauen was dort kommt... ;)
Und dann wird der "Befehl": set Licht on-for-timer 60 "ausgeführt"...
Licht: name des Devices was "geschalten" werden soll
on-for-timer 60: es soll für (weitere) 60 Sekunden angehen(bleiben)
Gruß, Joachim
Ich habe mehrere Bewegungsmelder zu einer structure zusammengefaßt und reagiere mit EINEM notify auf den jeweiligen Zustand der structure. Sobald irgendein Bewegungsmelder eine Aktivität registriert, gibt es auch events in der structure.
die structure aus zwei Bewegungsmeldern (Homematic):
defmod st_fl_PIR_Motion structure fl_PIR1_Motion fl_PIR1_Motion fl_PIR2_Motion
attr st_fl_PIR_Motion clientstate_behavior absolute
das zugehörige notify, das eine Funktion in meiner 99_myUtils.pm aufruft:
defmod n_st_fl_PIR notify st_fl_PIR_Motion:(undefined|motion|noMotion) {myRemote($NAME,$EVTPART0)}
Zitat von: LastOne am 29 September 2020, 10:50:15
Ich versuche immer noch, den Code sauber zu verstehen:
Es ist ungeheuer hilfreich dies im Eventmonitor zu sehen. Funktioniert der denn nun? Ist aus meiner Sicht grundlegend wichtig!
Der Event Monitor läuft nun. Trotzdem tauchen die Sensoren nicht auf. Gehe ich ins device und mache einen set statusrequest erkennt er auch Motion.
Ich vermute, ich muss noch Attribute setzen damit er Updates über den Status automatisch zieht.
So, es läuft jetzt. Der deCONZ war nicht aktiv (siehe separaten thread von mir) und danach konnte ich mit euren tips den Code zusammen bauen. Bin begeistert :)