Advanced PIR sensors features in OpenHAB

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.


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


OpenHAB 3


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)
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"
    Item pir1 received update ON
    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))

/*PIR 2 */
rule "PIR_2"
    Item pir2 received update ON
    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))

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!

Rate the article:

Average: 4 (1 vote)

Support Us:

Add comment:

Add comment

Newest articles in blog

Tailscale - remote access without public IP
Tailscale - remote access without public IPRating: 

The Tailscale service solves access between individual devices if you don't have a public IP address. It's free for one user with support for up to 100 devices. We'll show you how to install Tailscale on a Raspberry Pi that you'll have at home and on a client (Android, iPhone) from which you'll want to access the home Raspberry Pi. Our example will be remote access to OpenHAB running on a Raspberry Pi. However, the same setup applies to many other applications - home NAS, PiHole, Home Assistant, Domoticz, NextCloud, and others.

Shelly OpenHAB MQTT
Shelly vs OpenHABRating: 

The Shelly brand is known for its products that primarily communicate over WiFi, including smart plugs, relay switches, blinds control relays, and many other devices. One of the advantages for deployment is the ability to both read and control these devices using the universal MQTT protocol. Across existing add-ons for both OpenHAB and Home Assistant, we will demonstrate how to use Shelly devices without installing any additional extensions.

Victron & OpenHAB
Victron vs Smart HomeRating: 

In this post, we will show you how to retrieve information from a photovoltaic power plant by Victron. We will connect to the Cerbo unit via MQTT. Based on these values, we can control various appliances (heating, boiler, etc.) and prevent the battery from being drained when they don't need to be.

Smart Home GoodWe inverter
Smart Home vs GoodWeRating: 

In the post, we will demonstrate step by step how to communicate directly with the GoodWe inverter in a smart home setup and obtain real-time information (unlike the SEMS portal). This information is essential if we want to react to current parameters in a smart home, such as activating additional cooling or controlling a socket with a various load.

Voice control smart home
Voice control of the houseRating: 

In this article, we will connect the Amazon Echo Dot voice assistant with open source home automation. We won't be using OpenHAB Cloud, so everything runs locally. In this case, a few additional settings are necessary, but the result is worth it!

MikroTik - Winbox, DHCP, Ranges
Basics - Winbox, DHCPRating: 

In this series, we will look at the step-by-step setup of MikroTik devices for home users or a small business (up to 25 people). In the first article, we will focus on the initial setup - we will download Winbox and set up DHCP for the primary network and guest network. Similarly, we will also adjust the WiFi settings.

Alarm Smart Home PIR
Alarm from existing PIR sensors in a smart home.Rating: 

In a your smart home, PIR sensors may not only be used to switch lights on and off based on motion, it is possible to utilize these sensors to detect the presence of motion in a particular room. This information can be used to create a relatively reliable uncertified home security system. In this guide, you will find the logic for how this can work in the OpenHAB software in our model smart home.

NFC Tag Example in Smart Home
NFC tags in smart homeRating: 

NFC (Near Field Communication) tags are small plastic or paper stickers that can be used to automate various functions in the smart home. In this article, we will show you examples of use and a guide on how to write an action on an NFC tag using a mobile phone.

WireGuard iOS
WireGuard on iOS devicesRating: 

In this article, you will find a detailed guide on how to connect to WireGuard VPN from iOS.

WireGuard on Android device
WireGuard on Android devicesRating: 

In this article, you will find a detailed guide on how to connect to WireGuard VPN from Android.