Ich habe bei meinem PST02-A das Problem, dass kein Bewegungsende (Event cleared) signalisiert wird und wie es aussieht, kann er das auch nicht.
In diesem https://forum.fhem.de/index.php/topic,35178.msg281477.html (https://forum.fhem.de/index.php/topic,35178.msg281477.html) Beitrag habe ich gelesen, dass man ihn mit sequence generieren könnte, allerdings hab' ich nicht ganz verstanden wie sequence genau funktioniert. Hat vielleicht jemand ein Beispiel (idealerweise für den PST02) dafür ?
Wie genau verwendet ihr eure Bewegungsmelder ? Bei einem Aeotec Multisensor (der beide events sendet) hab' ich zudem das Problem, dass nicht immer eine Fortsetzung der Bewegung erkannt wird, was zur Folge hat, dass ich eine Weile im dunkeln stehe:
Motion Detection -> Licht an -> Event cleared -> Licht aus -> rumfuchteln vor dem Bewegungsmelder, aber keine erneute Motion Detection !?
Internals:
AeonGen5_MSGCNT 10
AeonGen5_RAWMSG 000400100531051b0100
AeonGen5_TIME 2019-03-28 08:26:17
DEF xxxxxxxx 16
IODev AeonGen5
LASTInputDev AeonGen5
MSGCNT 10
NAME Aeotec_Multisensor_6_ID16
NR 105
STATE neighborUpdate
TYPE ZWave
ZWaveSubDevice no
homeId xxxxxxxx
isWakeUp
nodeIdHex 10
Helper:
READINGS:
2018-09-19 00:40:16 UNKNOWN multilevel type 00 fl: 22 arg: 00fa
2019-03-04 09:12:35 UNPARSED LOCK 0176
2019-03-28 08:03:00 alarm HomeSecurity: Event cleared: Previous Events cleared
2019-03-28 08:03:00 basicSet 0
2019-03-28 08:26:16 battery 100 %
2019-03-28 08:26:16 batteryPercent 100
2019-03-28 08:26:16 batteryState ok
2016-12-01 19:14:25 configBatteryReportingThreshold 10
2016-12-01 19:14:26 configCommandOptions BasicSetDefault
2016-12-01 19:14:26 configEnableDisableLockConfiguration Disable
2016-12-01 19:14:26 configEnableMotionSensor EnabledLevel3
2016-12-01 19:14:27 configGroup1Interval 3600
2016-12-01 19:14:27 configGroup1Reports 241
2016-12-01 19:14:27 configGroup2Interval 3600
2016-12-01 19:14:28 configGroup2Reports 0
2016-12-01 19:14:28 configGroup3Interval 3600
2016-12-01 19:14:29 configGroup3Reports 0
2016-12-01 19:14:29 configHumidityCalibration 0
2016-12-01 19:14:29 configHumidityReportingThreshold 10
2016-12-01 19:14:30 configLowBattery 20
2016-12-01 19:14:30 configLowTempAlarm Disabled
2016-12-01 19:14:30 configLuminanceCalibration 0
2016-12-01 19:14:31 configLuminanceReportingThreshold 100
2016-12-01 19:14:31 configOnTime 10
2016-12-01 19:14:31 configReportingThreshold Disabled
2016-12-01 19:14:32 configTemperatureCalibration 0
2016-12-01 19:14:32 configTemperatureReportingThreshold 20
2016-12-01 19:14:32 configUVReportingThreshold 2
2016-12-01 19:14:33 configUltravioletCalibration 0
2016-12-01 19:14:33 configWakeUp10MinutesOnPowerOn No
2018-11-27 14:07:09 config_9 0
2018-09-30 21:46:48 direction 0
2018-09-27 13:31:15 energy 0.9 kWh
2019-03-28 08:26:15 humidity 51 %
2019-03-28 08:26:16 luminance 593 Lux
2016-07-02 11:09:46 model Aeotec MultiSensor 6
2016-07-02 11:09:46 modelConfig aeotec/multisensor6.xml
2016-07-02 11:09:46 modelId 0086-0002-0064
2018-09-20 05:10:00 power 0.0 W
2018-03-13 19:25:50 powerlvl current 0 remain 0
2016-07-02 11:34:32 powerlvlTest node 0 status 0 frameAck 0
2016-07-02 11:50:34 reportedState open
2017-12-18 17:29:01 state neighborUpdate
2019-03-28 08:26:15 temperature 9.4 C
2018-09-26 19:44:31 time 19.1 seconds
2018-03-13 19:25:50 timeToAck 0.134
2018-03-13 19:25:50 transmit OK
2019-03-28 08:26:17 ultraviolet 0 UV
2018-03-13 19:25:38 version Lib 3 Prot 4.05 App 1.6 HW 100 FWCounter 0
Attributes:
IODev AeonGen5
classes ZWAVEPLUS_INFO VERSION MANUFACTURER_SPECIFIC ASSOCIATION_GRP_INFO ASSOCIATION POWERLEVEL ALARM BATTERY SENSOR_BINARY SENSOR_MULTILEVEL CONFIGURATION FIRMWARE_UPDATE_MD MARK DEVICE_RESET_LOCALLY
userReadings 1
vclasses ALARM:3 ASSOCIATION:2 ASSOCIATION_GRP_INFO:1 BATTERY:1 CONFIGURATION:1 DEVICE_RESET_LOCALLY:1 FIRMWARE_UPDATE_MD:2 MANUFACTURER_SPECIFIC:2 POWERLEVEL:1 SENSOR_BINARY:1 SENSOR_MULTILEVEL:5 VERSION:2 WAKE_UP:2 ZWAVEPLUS_INFO:2
Ich kenne das besagte Geraet nicht. Evtl. ist es mit aehnlicher Logik bestueckt, wie der alte FS20 Bwegungsmelder: falls Bewegung erkannt wird, dann legt er sich nach Melden der Bewegung fuer X Sekunden (konfigurierbar) schlafen, erst danach sucht er wieder. Die Loesung fuer Lampen mit so einem Geraet ist ein "on-for-timer X+Y" (Y je nach Geschmack) zu senden.
Mit on-for-timer käme ich vermutlich klar, hab' ich aber noch nie verwendet.
Was passiert, wenn eine erneute Bewegung festgestellt wird ?
Bewegungserkennung -> on-for-timer 60 -> nach 40 Sekunden erneut Bewegung -> erneut on-for-timer 60
Ist die Restzeit dann
- 20 Sekunden, weil der Timer noch läuft ?
- 60 Sekunden, weil der Timer neu gestartet wird ?
- 80 Sekunden, weil um 60 Sekunden verlängert wird ?
oder lässt sich das Verhalten individuell anpassen ?
edit
mir fällt gerade ein, dass ich bei dem PST02-A gar kein on-for-timer verwenden kann, da dort (Arbeitsflächenbeleuchtung in der Küche - mit HUE Lightstrips) die Helligkeit auf 25% (set pct 25 nicht set on) gesetzt wird (momentan in 99_myUtils.pm gelöst mit einem define at +00:00:30 bei Bewegungsstart und einem delete des at's nach Ablauf der Zeit)
ZitatWas passiert, wenn eine erneute Bewegung festgestellt wird ?
SetExtensions loescht bei allen timer Funktionen den alten Timer, und setzt ihn neu.
Zitatmir fällt gerade ein, dass ich bei dem PST02-A gar kein on-for-timer verwenden kann, da dort (Arbeitsflächenbeleuchtung in der Küche - mit HUE Lightstrips) die Helligkeit auf 25% (set pct 25 nicht set on) gesetzt wird
Das kann man mit cmdalias loesen:
define ca_XXX_pct cmdalias set XXX on AS set XXX pct 25
Das ist nicht getestet, bitte um mitdenken.
Ich hab' es jetzt so gelöst:
99_myUtils.pm
sub OnForTimer($$$) {
my ($myDevice,$myValue,$myDuration) = @_;
if (Value("Daylight") eq "Day") {return();}
if (!exists($defs{$myDevice."Timer"})) {
if (AttrVal($myDevice,"automationDevice","") eq "Dimmer") {
if (GetCurrentValue($myDevice) > 0) {return();}
} else {
if (GetCurrentValue($myDevice) eq "on") {return();}
}
} else {
fhem("delete $myDevice"."Timer");
}
if (AttrVal($myDevice,"automationDevice","") eq "Dimmer")
{fhem("set ".$myDevice." pct ".$myValue);} else
{fhem("set ".$myDevice." ".$myValue);}
fhem("define $myDevice"."Timer at +".$myDuration." {TimedOff('".$myDevice."')}");
}
sub TimedOff($) {
my ($myDevice) = @_;
if (AttrVal($myDevice,"automationDevice","") eq "Dimmer")
{fhem("set ".$myDevice." pct 0");} else
{fhem("set ".$myDevice." off");}
}
beim Bewegungsmelder (Aeotec = normale Lampe, Hauppauge = Dimmer)
define Aeotec_Multisensor_6_ID16_MotionStarted notify Aeotec_Multisensor_6_ID16:alarm:.HomeSecurity:.Motion.* {OnForTimer("FGS212_ID15","on","00:00:30")}
define Hauppauge_4_in_1_ID30_MotionStarted notify Hauppauge_4_in_1_ID30:alarm_HomeSecurity:.Motion.* {OnForTimer("HUEGroup2","25","00:00:30")}
Der dummy "Daylight" hat bei mir den Wert "Day", "Night" oder "Twilight" und die Lampen (HUE, ZWave usw.) ein Attribut "automationDevice" mit den Werten "Switch", "Dimmer" usw.
Was passiert ?
- am Tag überhaupt nichts
- wenn das at <device>Timer existiert wird es gelöscht (= der Timer ist noch aktiv)
- existiert das at <device>Timer nicht und das Licht ist schon an passiert auch nichts (= kein aktiver Timer, sondern manuell geschaltet)
- ansonsten wird das Licht angeschaltet (on oder ein Prozentwert bei Dimmern) und das at <device>Timer erstellt
- nach der angegebenen Zeit wird das Licht ausgeschaltet (off oder pct 0)
Wenn der Wert für $myDuration größer ist als die Zeit, die der Bewegungsmelder bis zur erneuten Meldung einer Bewegung braucht, gibt es auch keine dunklen Phasen, da der Timer wieder neu gesetzt wird.