Advanced PIR sensors features in OpenHAB
The HC-SR501 PIR sensor contains mechanical adjustement for range detection and time. But in an intelligent house, we want to be able change time how long the light will be active and change whether the light will be controlled by PIR or not. You can find a tutorial how to config your PIR sensor to enable this features in this article.
Hardware
PIR sensor HC-SR501 or any other PIR sensor (Zigbee, Z-Wave)
Pi-Home - you can find tutorial how to install it in section Basic - OpenHAB on Raspberry Pi
Software
OpenHAB 3
Solution
Create Items with content below in OpenHAB 3. First two rows are PIR sensors and last two rows are triggers, which active or deactive the PIR sensor for light.
/* PIR sensors */
Switch SP111 "PIR Vestibule" <motion> (SensorPIRThing,motions,GS111) ["Status","Presence"] { channel="mqtt:topic:pihome:pirthing:SP111" }
Switch SP121 "PIR Toilet" <motion> (SensorPIRThing,motions,GS121) ["Status","Presence"] { channel="mqtt:topic:pihome:pirthing:SP121" }
/*Triggers */
Switch SP111_trigger "PIR Trigger Vestibule" <motion> (SensorPIRThing,motions,GS111) ["Point","Noise"]
Switch SP121_trigger "PIR Trigger Toilet" <motion> (SensorPIRThing,motions,GS121) ["Point","Noise"]
Then go to Rules and create new rule for lights. For example PIR SP111 could looks as below:
if you click to "execute a given script" (DSL rule) there is a code below:
In final, we will add Metadata -> Expiration timer for item SP111. Set"update state", state: OFF for 1 minute. See below:
How it works?
PIR sensor detect motion and change state to "ON". If there is a astronomical night (sun phase !=DAYLIGHT) and if SP111_triger is "on", then run the action in rule. Rule script contains code, which turn on L111 if it turned off. SP111 has expiration set to 1 minute. After 1 minute, SP111 goes "OFF". If the light L111 is "ON" then turn it "OFF". If the PIR sensor get update in meantime, it restarts the expiration timer.
Tip: In case of alarm state, PIR sensors act as motion detection for panic state and set notification to email or telegram.
Set HC-SR501 range of detection to minimum (right orange knob).
/* PIR sensors */
/*Triggers */
Switch pir1 "PIR 1 TRIGGER" (PIR) {mqtt="<[mosquitto:pir:command:ON:pir1on]",expire="20s,command=OFF"}
Switch pir2 "PIR 2 TRIGGER" (PIR) {mqtt="<[mosquitto:pir:command:ON:pir2on]",expire="20s,command=OFF"}
/*Toggle Settings */
Switch pir1_toggle "Svícení objektu 1 na čidlo" (PIR)
Switch pir2_toggle "Svícení objektu 2 na čidlo" (PIR)
/*Timers*/
Number pir1_timer "Délka sepnutí [%.0f s] pro objekt 1 " (PIR)
Number pir2_timer "Délka sepnutí [%.0f s] pro objekt 2 " (PIR)
Next, create a pir.rules file with the following content in the OpenHAB rules folder. Here, we directly check if light (e.g. Light_Gar_1) is triggered via PIR (pir1_toggle.state == ON). If yes, turn the light ON until the time (pir1_timer) and if we are still under the sensor this set time is extended.
var Timer occTimepir1 = null
var Timer occTimepir2 = null
/*PIR 1 */
rule "PIR_1"
when
Item pir1 received update ON
then
if(pir1_toggle.state == ON){
sendCommand(Light_Gar_1, ON)
if(occTimepir1 === null || occTimepir1.hasTerminated()) {
occTimepir1 = createTimer(now.plusSeconds((pir1_timer.state as Number).intValue), [|
sendCommand(Light_Gar_1, OFF)
occTimepir1 = null
])
}
else {
occTimepir1.reschedule(now.plusSeconds((pir1_timer.state as Number).intValue))
}
}
end
/*PIR 2 */
rule "PIR_2"
when
Item pir2 received update ON
then
if(pir2_toggle.state == ON){
sendCommand(Light_Gar_2, ON)
if(occTimepir2 === null || occTimepir2.hasTerminated()) {
occTimepir2 = createTimer(now.plusSeconds((pir2_timer.state as Number).intValue), [|
sendCommand(Light_Gar_2, OFF)
occTimepir2 = null
])
}
else {
occTimepir2.reschedule(now.plusSeconds((pir2_timer.state as Number).intValue))
}
}
end
The connection with the Astro binding at OpenHAB can be a very useful to use at home as the HC-SR501 does not contain luminescence sensor. Astro binding enable lights up only when it's astronomically dark, after sunset, or other day time. You can also use PIR sensors as alarm when nobody is in the house. Such a nice functionality for 2 €. Have a fun!
Add comment