Integrating iblinds into OZW 1.6

I’ve created this iblinds.xml:

<Product Revision="7" xmlns="https://github.com/OpenZWave/open-zwave">
  <MetaData>
    <MetaDataItem name="Name">iblinds</MetaDataItem>
    <MetaDataItem name="Description">An intelligent blind motor, a Z-Wave device designed for tilting Venetian (two inch slatted-style) blinds. Open and close the blinds and use a value slider for precise positioning of the tilt angle.</MetaDataItem>
    <MetaDataItem name="OzwInfoPage">http://www.openzwave.com/device-database/0287:000d:0003</MetaDataItem>
    <MetaDataItem name="ProductPage">https://myiblinds.com/</MetaDataItem>
    <MetaDataItem name="ProductSupport">https://support.myiblinds.com</MetaDataItem>
    <MetaDataItem name="ProductPic">images/hab/iblinds.png</MetaDataItem>
    <MetaDataItem name="ProductManual">http://support.myiblinds.com/wp-content/uploads/2019/06/User-Guide-v1.0.pdf</MetaDataItem>
    <MetaDataItem name="WakeupDescription">Press Include/Exclude button</MetaDataItem>
    <MetaDataItem name="InclusionDescription">Follow the directions for your Z-Wave hub/controller to place it in the add for inclusion mode. Press the inclusion button once and wait for the device to be discovered and joined to the Z-Wave network. Follow the directions for your Z-Wave controller to uniquely identify your device. (Ex: Bedroom iblinds)</MetaDataItem>
    <MetaDataItem name="ExclusionDescription">Follow the directions for your Z-Wave device to place it in the exclusion mode. Press the exclude button once and wait for the device to be removed from the Z-Wave network.</MetaDataItem>
    <MetaDataItem name="ResetDescription">Charge adapter button can be used to reset the device and perform manual auto calibration: press and hold the Charge Adapter button for 10 seconds.</MetaDataItem>
    <MetaDataItem id="000d" name="ZWProductPage" type="0003">https://products.z-wavealliance.org/products/2486/features</MetaDataItem>
    <MetaDataItem id="000d" name="FrequencyName" type="0003">U.S. / Canada / Mexico</MetaDataItem>
    <MetaDataItem id="000d" name="Identifier" type="0003">IB2.0</MetaDataItem>
    <ChangeLog>
      <Entry author="Daniel Brunt - [email protected]" date="30 July 2020" revision="1">Initial release</Entry>
      <Entry author="Daniel Brunt - [email protected]" date="30 July 2020" revision="3">Set cc "113" to true</Entry>
      <Entry author="Daniel Brunt - [email protected]" date="04 August 2020" revision="4">Remove cc "113" and add cc "38" and "112" as per https://community.home-assistant.io/t/iblinds-disabling-a-z-wave-command/134545/4</Entry>
      <Entry author="Daniel Brunt - [email protected]" date="04 August 2020" revision="5">Add Compatibility to cc id "38" VerifyChanged true</Entry>
      <Entry author="Daniel Brunt - [email protected]" date="04 August 2020" revision="6">Change cc id "38" VerifyChanged to false</Entry>
      <Entry author="Daniel Brunt - [email protected]" date="04 August 2020" revision="7">Add cc id "37" VerifyChanged false</Entry>
    </ChangeLog>
  </MetaData>
  <!-- Configuration Command Class - All Configuration Parameters should be entered into the section below -->
  <CommandClass id="37">
    <Compatibility>
      <VerifyChanged index="0">false</VerifyChanged>
    </Compatibility>
  </CommandClass>
  <CommandClass id="38" name="COMMAND_CLASS_SWITCH_MULTILEVEL" version="1" getsupported="false">
    <Instance index="1" />
    <Value type="byte" genre="user" instance="1" index="0" label="Level" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="1" max="255" value="1" />
    <Value type="button" genre="user" instance="1" index="1" label="Bright" units="" read_only="false" write_only="true" verify_changes="false" poll_intensity="0" min="0" max="0" />
    <Value type="button" genre="user" instance="1" index="2" label="Dim" units="" read_only="false" write_only="true" verify_changes="false" poll_intensity="0" min="0" max="0" />
    <Value type="bool" genre="system" instance="1" index="3" label="Ignore Start Level" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="True" />
    <Value type="byte" genre="system" instance="1" index="4" label="Start Level" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="0" />
    <Compatibility>
      <VerifyChanged index="0">false</VerifyChanged>
    </Compatibility>
  </CommandClass>
  <CommandClass id="112" name="COMMAND_CLASS_CONFIGURATION" version="1">
    <Instance index="1" />
    <Value type="list" genre="config" instance="1" index="1" label="Auto Calibration Torque" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="1" max="5" vindex="0" size="1">
      <Help>Changing the Auto Calibration torque will allow you to change the initial calibration torque.</Help>
      <Item label="Calibrate using default torque " value="1" />
      <Item label="Reduce calibration torque by 1 factor" value="2" />
      <Item label="Reduce calibration torque by 2 factors" value="3" />
      <Item label="Increase calibration torque by .5 factor" value="4" />
      <Item label="Increase calibration torque by 1 factor" value="5" />
    </Value>
  </CommandClass>
  <CommandClass id="133" name="COMMAND_CLASS_ASSOCIATION" version="1" request_flags="2">
    <Instance index="1" />
    <Associations num_groups="1">
      <Group index="1" max_associations="5" label="LifeLine" auto="true">
        <Node id="1" />
      </Group>
    </Associations>
  </CommandClass>
</Product>

and added this to manufacturer_specific.xml

  <Manufacturer id="0287" name="HAB Home Intelligence LLC">
    <Product config="hab/iblinds.xml" id="000d" name="iblinds Window Blind Controller" type="0003"/>

The blind multilevel works from within ozwadmin to set the blind tilt position as long as I wait for this message

23:56:03   ZWave Network Notification Received: Notification_Code_MsgTimeout

which occurs 10 seconds after issuing the command to set position which results in these messages:

23:55:53   Value Refreshed: Node 21, Instance 1, Label Dimming Duration
23:55:53   Value Refreshed: Node 21, Instance 1, Label Target Value

I cannot use cover.set_position from within HA or the blind goes crazy and does not adjust to correct position nor can I use the on/off control from either HA or ozwadmin which sets the blinds to 50% open//fully closed down. It either goes full open or fully closed or does not respond, until it is turned off/back on and a calibration reset is done. They do not like being talked to while the motor is operating. What if anything can be done in OZW/HA to overcome this???

Hi, I do not have any help with your issue, but I am wondering if you have the blinds working “good enough”, or if they require manually power cycling when it has issues? I am looking into automating my blinds and the options are slim.

You are the first person I see properly modifying the manufacturer_specific.xml instead of modifying the zwcfg_xxx.xml, have you considered submitting your xml modifications to the open zwave project? If you do submit them, it could help anyone else trying to get the blinds to work, and perhaps the openzwave folks can help with the issues, maybe something like “don’t communicate with this device after issuing a command for 30 seconds” or something like that…

This version disables a “Get” after a “Set”, which avoids the timeout problem, but still allows manual Gets. The author still described having issues with the blinds.

No, they do not work ‘good enough’. Power cycle the blind & initiate calibration which leaves them at closed down. Issue cover.set_tilt_position to anything and they go closed fully up. Another cover.set_tilt_position and they go closed fully down. For now I still have 5 of 6 in HomeSeer and have integrated them into HA via HomeSeer plug-in mcsMQTT and HA mqtt platform.

Sorry to hear that, the iblinds were pretty much the only option I see for the blinds I want to use them on.
Do they work the same way in HomeSeer, or do you mean they work perfectly in HomeSeer, but do not work correctly in Home Assistant?

In the pull request @freshcoat linked to is someone who mentioned it will default to a “dimmer” instead of a “cover”. Have you tried using it as a dimmer, and only set it to levels 1-255 (from some other reading I saw Zero might cause some issues as well).

I’ve been making progress in HA using mike240se’s change to CC 38:

    <Compatibility>
            <NoRefreshAfterSet index="0">true</NoRefreshAfterSet>
    </Compatibility>

I also added it to CC 37. I have the off/on switch (0=closed down, 255=tilt 50%) working as well as tilt 0 to 99 without them misbehaving.
I would like to figure out how to have the on/off switch as part of the cover entity (node 21 type is set to 6) like they are via my mqtt integration into HomeSeer…

However, I just had my openzwave 1.6 container act up on me and I restarted it. Then the entities in HA showed as restored but unavailable. I reboot the HA box and now cannot even get into ha port 8123. Stay tuned…

I spoke too soon! Just retried browser to HA and it’s up now… and the ozw entities are back!
Have to go to work now so I’ll follow up later with add’l details…

I managed to configure a new cover entity via mqtt (in addition to the OZW switch & cover entities) which has the switch and the tilt position controls in one entity. The switch has two arrows; down is closed down (value 0) and up is open 50% (value 255) which is the same as the OZW separate switch entity. The tilt position is a slider same as OZW. The OZW ‘cover’ entitiy’s up/down arrows are tilt position 0 and tilt position 99 - not terribly useful IMO.

What I am trying to accomplish now is ‘refreshnodedynamic’ since the status topic now no longer updates due to the /NoRefreshAfterSet in the xml. I had it working at first and I was triggering it via an automation 10 seconds after the cover was commanded to change state but, now it’s not working… :frowning:

‘refreshvalue’ is working for me now!
Here is my final automation to refresh the value of the tilt position after a calculated delay of 0-10 seconds based on how much the tilt position changed:

  alias: Blinds - Kitchen 1 (RefreshValue)
  description: OpenZWave/1/command/refreshValue/
  trigger:
  - platform: mqtt
    topic: OpenZWave/1/command/setvalue/
  condition:
  - condition: template
    value_template: '{{ trigger.payload_json[''ValueIDKey''] == 357138449 }}'
  action:
  - delay: '{{ ((( state_attr(''cover.iblinds_window_blind_controller_level'', ''current_position'')
      - trigger.payload_json.Value ) | abs) * 0.1) | round(0) }}'
  - service: mqtt.publish
    data:
      topic: OpenZWave/1/command/refreshvalue/
      payload: '{ "ValueIDKey": 357138449 }'
  mode: single

They work perfectly in HomeSeer where somehow they must be delaying a get-after-set, but not in HA.

It does not matter if it is type 1 (dimmer) or type 6 (cover). By default, OZW discovers it as a dimmer but in my xml I specify specific="6" so it shows a s a cover. The blind goes AWOL if it is polled or there is a get-after-set or if you try refreshing the value while the motor is operating. This is a defect in the firmware that is never going to get changed. For this to work with OZW without having to code workarounds, OZW needs a compatibility parameter to delay the get-after-set. It’s been proposed but work on it is currently stalled. The NoRefreshAfterSet compatibility flag does prevent the blind from going AWOL due to an untimely ‘get’ and my automation that is triggered by the ‘setvalue’ now refreshes the new value in a timely fashion very shortly after the motor stops moving.

I just saw the pull request was merged into openzwave this morning -add support for Iblinds by mike240se · Pull Request #2353 · OpenZWave/open-zwave · GitHub

There is an interesting comment on that pull request asking for mike to do some beta testing of their new version 3 iBlinds. That is funny because I had emailed iBlinds asking if the v3 would have beter firmware and they said they were already “working with home assistant”

I will definitely wait on ordering until someone can actually demonstrate them working well with Home Assistant.

I know this thread is over a year old, but it’s the only one that I’ve found where someone actually discussed Myiblinds and V3.

Did you ever purchase these or did the Myiblind folk every finish working with HA ? Also, since HA has moved on to ZWaveJS, is there any support for it?

I have 5 x V2 and 1 x V3 and both models work in ZWaveJS2MQTT. The V2’s didn’t work correctly up until a while ago but are okay now. Sometimes Kitchen Blind 2 (most often) and Bedroom Blind (least often) go AWOL and I have to do the 6 sec press to reset them. The V3 is Kitchen Blind 1 now (it was a V2 which is on my shelf) and it is noticeably improved from V2. It tilts quicker and the motor is quieter. There was an issue up until a while ago where sometimes it’s like it gets lost and does a full close, full open and then to the position I had sent it. It’s wasn’t all the time and is quite bizarre, but it’s never gone AWOL like the V2’s have. I just tried like a couple dozen tilt adjustments to it and it worked perfectly so I suspect something in ZWaveJS has been tweaked.

I bought several v3 iBlinds last year and they all work well w. ZWaveJS2MQTT.

Have you ever witnessed one get lost and re-adjust itself?

I did have only one blind and only one time quit working and ZWaveJS2MQTT flagged it as dead. I had to reboot the iBlind (CLBR button Press 5 times) to get it to work again.

Thanks. I haven’t noticed mine getting lost in a while now so I suspect it may have been something awry in earlier ZWJS2MQTT…

I have a dozen v3 working flawlessly with zwavejs2mqtt and HA.

I have a few of these and using zwavejs to connect to HA. However, I’m only using the switch.turn_on function in my automation to open and close the blinds, which doesn’t seem to be the right way to operate these. When I use the switch method, the blinds only open at random % not being consistent at all. When I use the turn off switch function, I don’t get the blinds to close completely in most cases.

Can someone share their automation experiences, if you have created any to demonstrate how to get accurate open / close of the motors based on tilt position or percentenge. I’ve seen some examples but they’ve been associated with ESP.

I’ll share mine but it’s Node-Red, and a little complex!!

Ok, I have tinkered around with Node Red, but nothing serious. I guess I’m just trying to get some ideas for the best way to operate these blinds. Thank you