HomeSeer HS-FLS100-G2 (2nd Generation)

I recently ordered an HS-FLS100-G2 on Amazon ($50). This is a smart outdoor Z-wave motion sensor/switch/thermometer that can replace motion sensors in some external lights (like this one) and make them “smart”.

I did not realize that this was a 2nd-generation device. I previously have the HS-FLS100+, which had its quirks, but I had figured out how to work around them. I thought I ordered exactly the same thing and just make it work like the other one, but I had quite a bit of issues with the 2nd generation.

This thread is to describe my experience, what progress I made, how I did it, what worked, and what doesn’t work, yet.

First, the device is not correctly recognized, because it has an updated ID (Manufacturer id="000c", type="0201" id="000c" — 1st gen. had id="000b"). Well, this was not so difficult to fix. I created a new file homeseer/hs-fls100-g2.xml for openzwave, based on the old one homeseer/hs-fls100plus.xml. I also made corresponding updates in manufacturer_specific.xml, essentially pointing the new ID to the new file. On my system (Home Assistant core), this is all located in /srv/homeassistant/lib/python3.8/site-packages/python_openzwave/ozw_config.
After that change it was recognized and showed basic functionality.

So the main updates of the 2nd gen. sound like really great ideas and improvements, fixing some of the quirks of the 1st gen. According to the its specs, it has 4 additional configuration parameters, which I all implemented in hs-fls100-g2.xml.

<?xml version="1.0" encoding="utf-8"?>
<Product xmlns="">
  <!-- Configuration Parameters -->
  <CommandClass id="112">
    <Value genre="config" type="short" instance="1" index="1" value="180" label="PIR Trigger Off Period" units="seconds" size="2" min="8" max="720">
      <Help>Period to send Trigger Off command after PIR is triggered.</Help>
    <Value genre="config" type="short" instance="1" index="2" value="50" label="Lux sensor threshold" units="" size="2" min="10" max="900">
        When the lux level falls below this threshold and the PIR gets triggered, the unit emits a Basic Set Command (Value=0xFF) and turns on its floodlight. This overwrites the Lux level set by the Lux knob.
    <Value genre="config" type="short" instance="1" index="3" value="10" label="Auto Report luminance interval" units="minutes" size="2" min="1" max="1440">
      <Help>sets the interval of periodic lux level report to the controller</Help>
    <Value genre="config" type="list" instance="1" index="4" value="1" label="Basic Report" units="" size="1" min="0" max="1">
      <Item value="0" label="Disable Alert"/>
      <Item value="1" label="Enable Alert"/>
    <Value genre="config" type="list" instance="1" index="5" value="1" label="Floodlight Control Mode" units="" size="1" min="0" max="1">
      <Item value="0" label="Z-wave controller only"/>
      <Item value="1" label="PIR and LUX level, or Z-wave controller"/>
    <Value genre="config" type="list" instance="1" index="6" value="0" label="Lux Sensor" units="" size="1" min="0" max="1">
      <Item value="0" label="Floodlight controlled by LUX level and PIR sensor"/>
      <Item value="1" label="Lighting control via LUX only (ignore PIR)"/>
    <Value genre="config" type="byte" instance="1" index="7" value="0" label="Temperature Offset" units="×0.1°C" size="1" min="0" max="255">
    <Value genre="config" type="list" instance="1" index="8" value="2" label="PIR sensitivity level" units="" size="1" min="0" max="2">
      <Item value="0" label="Low level, approx. 6m distance"/>
      <Item value="1" label="Mid level, approx. 10m distance"/>
      <Item value="2" label="High level, approx. 20m distance"/>
  <!-- Association Groups -->
  <CommandClass id="133">
    <Associations num_groups="2">
      <Group index="1" label="Lifeline" max_associations="1" />
      <Group index="2" label="PIR Control" max_associations="4"/>

With the above code, I can do the following:

  • Recognize the device correctly, including its about 8 sensors
  • Switch the light on an off
  • Get a motion signal from the PIR (this is now a “burgler” sensor emitting a number; “0” means no motion, “8” means motion)
  • Read out the temperature using the temperature sensor
  • Calibrate the thermometer with the configuration parameter “7”
  • Read the luminescence with the corresponding sensor

One of the Updates of 2nd gen is that is has a configuration parameter “5”, which is supposed to allow you to switch the device completely in Z-wave mode. This means that the built-in PIR does not directly trigger the switch to turn the light on, but it will only emit a Z-wave report, and then you can decide on the controller side how to act on motion detection. (For instance in some cases I don’t want the super bright lights to go on when the system is disarmed, because this can ruin the outdoor atmosphere in the backyard after dark. Therefore, it’s great that the system has a mode that not directly turns on the lights, but that this can be decided by the controller/HA.)

The problem is: it does not work! I set that parameter 5 to “0” to turn the system into “Z-wave only” mode. I did some Z-wave debugging by reading the logs, and it appears to read correctly that parameter 5 was set to 0, but it never changes the behavior. The device always switches the light on if there is a PIR event. Because it does not work, it’s actually worse than the 1st gen. device, because in the old device you could switch parameter 2 to “255” to achieve the same behavior.

Not sure what to do now. I might have to try contacting HomeSeer or hitting some other forums (OpenHub, smartthings, etc.). Any ideas and suggestions would be welcome!

I found information about this device in some other forums, so let me just add the links here, in case someone is interested: hubitat, smartthings, HomeSeer and smartthings on Gen-1/Gen-2 device.

OMG. I finally found out what the problem is!

The device has manual dials to set motion sensor time and light sensitivity. If they are on the minimal setting (“T”), the device is put into “Walk Test” mode, in which the light always go on for 5 seconds, irrespective of any other setting. That’s why the Z-wave settings would not work. After moving the dials away from the “T” setting, everything worked as expected!

The manual should really make this clearer. I did find one table there that mentioned something about the different modes… I should have had a closer look before. I just couldn’t imagine it. I had somehow expected that the Z-wave capabilities of this device would be able to override the manual settings, and that’s why I didn’t even touch the dials. This took me forever to get sorted out!

I guess the conclusion is RTFM!!!

THANK YOU. This has been driving me crazy for, MONTHS.

@schniepp Thank you for documenting all your work. My motion sensors are arriving tomorrow. Your information will make their install go much smoother.