Controlling a set of HomeSeer FLS100+ Floodlight sensors


I have three outdoor motion-controlled floodlights that use FLS100+ Floodlight sensors that include a motion detector and can be set up to act autonomously so that motion detected will turn on the light for a certain period of time if it is dark enough. But I wanted to be able to disable this action so that if I am sitting outside at night and don’t want the lights coming on every time I move, I can set them up to ignore the motion. But I didn’t want to be able to forget I had set it up that way and leave motion detection disabled forever, either. And while I was at it, I thought it might be nice to have a mode where motion detected by one sensor would turn on all three of the units and keep the lights on until there is no motion detected by any of the units. I also set it up to allow a virtual switch to turn all three on/off and have the motion ignored.

The standard DTH from HomeSeer does not expose the parameters for setting whether or not the light is directly controlled by the motion sensor, so a modified DTH is required. Thanks to Nate Schwartz for his help with modifying the DTH. Here is a link to the modified DTH: (NOTE - This DTH was updated on 1/18/2019)

I created 4 different pistons that use two global variables to share data between them, @FloodsMode sets one of three different modes of operation (Autonomous, Motion Control Disabled, and Locked Together), and @LuxValue is the parameter that is used to control the behavior of the motion detector in the FLS100+. I created three virtual buttons in ST to set the three different modes. In the future I plan on linking them to double-click functions on some wall switches. The first piston manages the mode of operation based on the virtual buttons.

Once the Autonomous Mode is set, the FLS100+ devices handle their activities autonomously, so not WebCore code is required. Likewise for Motion Control Disabled (the motion detectors are basically disconnected from the light control). But the Locked Together mode requires a piston to manage the devices and provide the proper behavior. Thanks to @WCmore for some pointers on this.

As I mentioned above, I set up a virtual switch to allow for manual control of the floodlights as a group. I should note that there is a corner case here that I couldn’t solve - it might just be something that the FLS100+ device can’t do. If the light is turned on by the internal motion sensor, and then the floods are manually turned on, a light that was autonomously activated will turn off after the preset time delay. Here is the manual control piston:

Lastly, I didn’t want to take the chance that the motion control would be disabled and forgotten about, so I created a watchdog reset which resets things to autonomous mode every morning. (NOTE that this piston has been updated - The updated piston is in the next post)

The HS-FLS100+ is a very nice device. I don’t know if this code would be that applicable to other motion sensor floodlights, but hopefully someone will find this interesting. I haven’t had a chance to extensively test it, but my testing so far indicates it is working as expected except for the one corner-case I pointed out above. This was my first non-trivial WebCore project, so I am pleased with how it turned out.


I updated the daily reset function to include a local variable to set which mode should be the default mode. I also changed it to use the virtual buttons to active the Flood Mode Control piston to actually change the mode to avoid duplicating code.

In addition, I updated the DTH for the FLS100+ to allow the lux reporting interval to be set and committed it to GitHub so that should be available. I also added commands to this piston reset the Motion Interval and the Lux reporting interval to default values in case they had been manually played with.


Is there any way to adjust the PIR sensitivity or Motion Detection range (other than adjusting the angle of the sensor)? I don’t want cars driving by to turn on my driveway lights.


This line in your code doesn’t do anything. Likely you wanted to use = (equals) instead of - (minus)


Sorry for the delayed reaction… I just saw this question.

Stretchy electrical tape works pretty well to limit visibility on the motion sensor.


@Bruce_Young (and Nate Schwartz) thank you for putting the DTH together, I hope that this can help me achieve my goals for smartifying my outdoor motion lights.

Bruce, when you apply these changes via Webcore, do you see the updated values in the mobile app or through the dashboard? I can see that the changes are applying - setLux(255) makes my lights turn on in the middle of the day upon movement, however, when I look at the configuration values they don’t change.


I took a less comprehensive approach to control the lights in Webcore. I created two virtual switches, one to ‘link’ multiple switches together (all or nothing) and the second to control parameter 2, setting the Lux value to zero or the configured value when triggered.

I included population of the piston state based on these switches so that the current configuration could be determined on the Webcore dashboard.

Finally, I also configured an automation in the new Smartthings app that resets the two virtual switches to my desired state (linked and enabled) when the Lux level hits 200 each day. This was actually an automation that I already had which turned on interior lights at sunset. I modified the automation to use the Lux levels from the FLS100 sensors instead, this way the lights turn on and the spot light virtual switches are reset whenever that level of darkness happens, not just at sunset.

Configure HomeSeer Floodlight (HS-FLS100+) Lux setting

Has anyone tried the DTH with the HS-FLS100 G2?