zha-device-handlers icon indicating copy to clipboard operation
zha-device-handlers copied to clipboard

[Device Support Request] Blind motor "_TZE200_libht6ua"

Open kineticscreen opened this issue 1 year ago • 25 comments

Problem description

This appears to be similar to other blind motors - just another variation on the manufacturer name?

https://www.aliexpress.com/item/1005002954586484.html?spm=a2g0o.order_list.order_list_main.5.529e1802C56G4M

Solution description

Hopefully is just a simple port of the other quirks for similar devices

Screenshots/Video

Screenshots/Video

blindmotorbox

Device signature

Device signature
{
  "node_descriptor": "NodeDescriptor(logical_type=<LogicalType.EndDevice: 2>, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=<FrequencyBand.Freq2400MHz: 8>, mac_capability_flags=<MACCapabilityFlags.AllocateAddress: 128>, manufacturer_code=4098, maximum_buffer_size=82, maximum_incoming_transfer_size=82, server_mask=11264, maximum_outgoing_transfer_size=82, descriptor_capability_field=<DescriptorCapability.NONE: 0>, *allocate_address=True, *is_alternate_pan_coordinator=False, *is_coordinator=False, *is_end_device=True, *is_full_function_device=False, *is_mains_powered=False, *is_receiver_on_when_idle=False, *is_router=False, *is_security_capable=False)",
  "endpoints": {
    "1": {
      "profile_id": "0x0104",
      "device_type": "0x0051",
      "input_clusters": [
        "0x0000",
        "0x0004",
        "0x0005",
        "0xef00"
      ],
      "output_clusters": [
        "0x000a",
        "0x0019"
      ]
    }
  },
  "manufacturer": "_TZE200_libht6ua",
  "model": "TS0601",
  "class": "zigpy.device.Device"
}

Diagnostic information

Diagnostic information
{
  "home_assistant": {
    "installation_type": "Home Assistant OS",
    "version": "2023.10.1",
    "dev": false,
    "hassio": true,
    "virtualenv": false,
    "python_version": "3.11.5",
    "docker": true,
    "arch": "aarch64",
    "timezone": "Australia/Sydney",
    "os_name": "Linux",
    "os_version": "6.1.21-v8",
    "supervisor": "2023.10.0",
    "host_os": "Home Assistant OS 10.5",
    "docker_version": "23.0.6",
    "chassis": "embedded",
    "run_as_root": true
  },
  "custom_components": {
    "zha_toolkit": {
      "version": "v1.1.2",
      "requirements": [
        "pytz"
      ]
    },
    "scheduler": {
      "version": "v0.0.0",
      "requirements": []
    },
    "bureau_of_meteorology": {
      "version": "1.1.21",
      "requirements": [
        "iso8601"
      ]
    },
    "sonoff": {
      "version": "3.5.2",
      "requirements": [
        "pycryptodome>=3.6.6"
      ]
    },
    "project_zero_three": {
      "version": "1.0.1",
      "requirements": []
    },
    "sleep_as_android": {
      "version": "2.2.0",
      "requirements": [
        "pyhaversion"
      ]
    },
    "hass_agent": {
      "version": "2022.11.9",
      "requirements": []
    },
    "artnet_led": {
      "version": "0.1.1",
      "requirements": [
        "pyartnet==1.0.1"
      ]
    },
    "opennem": {
      "version": "2022.09.1",
      "requirements": []
    },
    "adaptive_lighting": {
      "version": "1.19.0",
      "requirements": [
        "ulid-transform"
      ]
    },
    "powercalc": {
      "version": "v1.9.5",
      "requirements": [
        "numpy>=1.21.1"
      ]
    },
    "hacs": {
      "version": "1.33.0",
      "requirements": [
        "aiogithubapi>=22.10.1"
      ]
    }
  },
  "integration_manifest": {
    "domain": "zha",
    "name": "Zigbee Home Automation",
    "after_dependencies": [
      "onboarding",
      "usb"
    ],
    "codeowners": [
      "@dmulcahey",
      "@adminiuga",
      "@puddly"
    ],
    "config_flow": true,
    "dependencies": [
      "file_upload"
    ],
    "documentation": "https://www.home-assistant.io/integrations/zha",
    "iot_class": "local_polling",
    "loggers": [
      "aiosqlite",
      "bellows",
      "crccheck",
      "pure_pcapy3",
      "zhaquirks",
      "zigpy",
      "zigpy_deconz",
      "zigpy_xbee",
      "zigpy_zigate",
      "zigpy_znp",
      "universal_silabs_flasher"
    ],
    "requirements": [
      "bellows==0.36.5",
      "pyserial==3.5",
      "pyserial-asyncio==0.6",
      "zha-quirks==0.0.104",
      "zigpy-deconz==0.21.1",
      "zigpy==0.57.2",
      "zigpy-xbee==0.18.3",
      "zigpy-zigate==0.11.0",
      "zigpy-znp==0.11.5",
      "universal-silabs-flasher==0.0.14",
      "pyserial-asyncio-fast==0.11"
    ],
    "usb": [
      {
        "vid": "10C4",
        "pid": "EA60",
        "description": "*2652*",
        "known_devices": [
          "slae.sh cc2652rb stick"
        ]
      },
      {
        "vid": "1A86",
        "pid": "55D4",
        "description": "*sonoff*plus*",
        "known_devices": [
          "sonoff zigbee dongle plus v2"
        ]
      },
      {
        "vid": "10C4",
        "pid": "EA60",
        "description": "*sonoff*plus*",
        "known_devices": [
          "sonoff zigbee dongle plus"
        ]
      },
      {
        "vid": "10C4",
        "pid": "EA60",
        "description": "*tubeszb*",
        "known_devices": [
          "TubesZB Coordinator"
        ]
      },
      {
        "vid": "1A86",
        "pid": "7523",
        "description": "*tubeszb*",
        "known_devices": [
          "TubesZB Coordinator"
        ]
      },
      {
        "vid": "1A86",
        "pid": "7523",
        "description": "*zigstar*",
        "known_devices": [
          "ZigStar Coordinators"
        ]
      },
      {
        "vid": "1CF1",
        "pid": "0030",
        "description": "*conbee*",
        "known_devices": [
          "Conbee II"
        ]
      },
      {
        "vid": "10C4",
        "pid": "8A2A",
        "description": "*zigbee*",
        "known_devices": [
          "Nortek HUSBZB-1"
        ]
      },
      {
        "vid": "0403",
        "pid": "6015",
        "description": "*zigate*",
        "known_devices": [
          "ZiGate+"
        ]
      },
      {
        "vid": "10C4",
        "pid": "EA60",
        "description": "*zigate*",
        "known_devices": [
          "ZiGate"
        ]
      },
      {
        "vid": "10C4",
        "pid": "8B34",
        "description": "*bv 2010/10*",
        "known_devices": [
          "Bitron Video AV2010/10"
        ]
      }
    ],
    "zeroconf": [
      {
        "type": "_esphomelib._tcp.local.",
        "name": "tube*"
      },
      {
        "type": "_zigate-zigbee-gateway._tcp.local.",
        "name": "*zigate*"
      },
      {
        "type": "_zigstar_gw._tcp.local.",
        "name": "*zigstar*"
      },
      {
        "type": "_uzg-01._tcp.local.",
        "name": "uzg-01*"
      },
      {
        "type": "_slzb-06._tcp.local.",
        "name": "slzb-06*"
      }
    ],
    "is_built_in": true
  },
  "data": {
    "ieee": "**REDACTED**",
    "nwk": 7175,
    "manufacturer": "_TZE200_libht6ua",
    "model": "TS0601",
    "name": "_TZE200_libht6ua TS0601",
    "quirk_applied": false,
    "quirk_class": "zigpy.device.Device",
    "manufacturer_code": 4098,
    "power_source": "Battery or Unknown",
    "lqi": 255,
    "rssi": -64,
    "last_seen": "2023-10-10T11:08:48",
    "available": true,
    "device_type": "EndDevice",
    "signature": {
      "node_descriptor": "NodeDescriptor(logical_type=<LogicalType.EndDevice: 2>, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=<FrequencyBand.Freq2400MHz: 8>, mac_capability_flags=<MACCapabilityFlags.AllocateAddress: 128>, manufacturer_code=4098, maximum_buffer_size=82, maximum_incoming_transfer_size=82, server_mask=11264, maximum_outgoing_transfer_size=82, descriptor_capability_field=<DescriptorCapability.NONE: 0>, *allocate_address=True, *is_alternate_pan_coordinator=False, *is_coordinator=False, *is_end_device=True, *is_full_function_device=False, *is_mains_powered=False, *is_receiver_on_when_idle=False, *is_router=False, *is_security_capable=False)",
      "endpoints": {
        "1": {
          "profile_id": "0x0104",
          "device_type": "0x0051",
          "input_clusters": [
            "0x0000",
            "0x0004",
            "0x0005",
            "0xef00"
          ],
          "output_clusters": [
            "0x000a",
            "0x0019"
          ]
        }
      },
      "manufacturer": "_TZE200_libht6ua",
      "model": "TS0601"
    },
    "active_coordinator": false,
    "entities": [],
    "neighbors": [],
    "routes": [],
    "endpoint_names": [
      {
        "name": "SMART_PLUG"
      }
    ],
    "user_given_name": "Smart Blind",
    "device_reg_id": "50c44ae063ea88828f2f152cdcb780e7",
    "area_id": "632ad7cfddb44066b0601b811c5dafb8",
    "cluster_details": {
      "1": {
        "device_type": {
          "name": "SMART_PLUG",
          "id": 81
        },
        "profile_id": 260,
        "in_clusters": {
          "0x0000": {
            "endpoint_attribute": "basic",
            "attributes": {
              "0x0001": {
                "attribute_name": "app_version",
                "value": 65
              },
              "0x0004": {
                "attribute_name": "manufacturer",
                "value": "_TZE200_libht6ua"
              },
              "0x0005": {
                "attribute_name": "model",
                "value": "TS0601"
              }
            },
            "unsupported_attributes": {}
          },
          "0x0004": {
            "endpoint_attribute": "groups",
            "attributes": {},
            "unsupported_attributes": {}
          },
          "0x0005": {
            "endpoint_attribute": "scenes",
            "attributes": {},
            "unsupported_attributes": {}
          },
          "0xef00": {
            "endpoint_attribute": null,
            "attributes": {},
            "unsupported_attributes": {}
          }
        },
        "out_clusters": {
          "0x0019": {
            "endpoint_attribute": "ota",
            "attributes": {},
            "unsupported_attributes": {}
          },
          "0x000a": {
            "endpoint_attribute": "time",
            "attributes": {},
            "unsupported_attributes": {}
          }
        }
      }
    }
  }
}

Logs

Logs
[Paste the logs here]

Custom quirk

Custom quirk
[Paste your custom quirk here]

Additional information

No response

kineticscreen avatar Oct 10 '23 00:10 kineticscreen

I have the same blind motor... How can this be added to HA?

superflyman74 avatar Nov 02 '23 21:11 superflyman74

I have the same blind motor... How can this be added to HA?

I ended up just buying the cheapest Tuya wireless hub and then integrated via local Tuya. Doesn't bring in the temperature or its battery state, but it's a start...

Screenshot_20231116-163808 Screenshot_20231116-163741

kineticscreen avatar Nov 16 '23 05:11 kineticscreen

I would also like a quirk for this device.

hplar11111 avatar Nov 20 '23 09:11 hplar11111

I have the same motor for Tuya's blind that appears to me as unsupported if someone could help us I would appreciate it

javilopezalarcon avatar Nov 22 '23 17:11 javilopezalarcon

I'm working on being able to add it to z2m, I would say it's ready but I need to learn how to upload it to the code... while I'm learning, if anyone wants to try it, I uploaded it here https://github.com/javilopezalarcon/Blind-motor-_TZE200_libht6ua-z2m It works well, with position and battery control, the motor failure remains to be tested if it is real.

javilopezalarcon avatar Nov 25 '23 16:11 javilopezalarcon

Does this also work without zigbee2mqtt? I only have ZHA plugin installed.

Op za 25 nov 2023 om 17:31 schreef javilopezalarcon < @.***>:

I'm working on being able to add it to z2m, I would say it's ready but I need to learn how to upload it to the code... while I'm learning, if anyone wants to try it, I uploaded it here https://github.com/javilopezalarcon/Blind-motor-_TZE200_libht6ua-z2m It works well, with position and battery control, the motor failure remains to be tested if it is real.

— Reply to this email directly, view it on GitHub https://github.com/zigpy/zha-device-handlers/issues/2636#issuecomment-1826371670, or unsubscribe https://github.com/notifications/unsubscribe-auth/A5CTKMN7SCNG4GLAVX24WEDYGIMMPAVCNFSM6AAAAAA5ZP6B6WVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQMRWGM3TCNRXGA . You are receiving this because you commented.Message ID: @.***>

hplar11111 avatar Nov 27 '23 19:11 hplar11111

I'm working on being able to add it to z2m, I would say it's ready but I need to learn how to upload it to the code... while I'm learning, if anyone wants to try it, I uploaded it here https://github.com/javilopezalarcon/Blind-motor-_TZE200_libht6ua-z2m It works well, with position and battery control, the motor failure remains to be tested if it is real.

Thx for converter, now I found this motor have very limited range opening/closing 0-100, its not enough to open curtains, any ideas? Thank you!

env-dxb avatar Nov 30 '23 22:11 env-dxb

It sounds like your unit is in 'tilt' mode, which is just for adjusting the angle of venetian blinds. From memory these instructions, which are actually for a different unit, also worked for this one, despite its very incomplete included manual.

image

kineticscreen avatar Dec 01 '23 01:12 kineticscreen

I'm working on being able to add it to z2m, I would say it's ready but I need to learn how to upload it to the code... while I'm learning, if anyone wants to try it, I uploaded it here https://github.com/javilopezalarcon/Blind-motor-_TZE200_libht6ua-z2m It works well, with position and battery control, the motor failure remains to be tested if it is real.

Thanks for the converter @javilopezalarcon. I managed to figure out that datapoint 101 is for motor direction and 102 sets the upper limit and have made the following changes to your converter.

    exposes: [
        ...,
        e.enum('motor_direction', ea.STATE_SET, ['left', 'right']).withDescription('Motor side'),
        e.enum('set_upper_limit', ea.STATE_SET, ['start', 'stop']).withDescription('Learning')
    ],
    meta: {
        tuyaDatapoints: [
            ...,
            [101, 'motor_direction', tuya.valueConverterBasic.lookup({ 'left': tuya.enum(0), 'right': tuya.enum(1) })],
            [102, 'set_upper_limit', tuya.valueConverterBasic.lookup({ 'start': tuya.enum(0), 'stop': tuya.enum(1) })],
        ],
    },

@env-dxb I had a similar problem to you until I found out about setting an upper limit. You can try the following to see if it helps.

  1. Manually close your curtains
  2. While the curtains are shut, connect them to the motor
  3. Click "start" under "Set upper limit" to start learning the upper limit of your curtain. The motor should begin to open the curtain
  4. Just before the curtain is fully open, click "stop" under "Set upper limit"
  5. The controller should now remember the fully close and open positions

fearless666 avatar Dec 01 '23 03:12 fearless666

It sounds like your unit is in 'tilt' mode, which is just for adjusting the angle of venetian blinds. From memory these instructions, which are actually for a different unit, also worked for this one, despite its very incomplete included manual.

image

Tilt mode exactly what I need, but it’s about half of required limit, and manual doesn’t work for me as well(( But I keep trying)

env-dxb avatar Dec 01 '23 11:12 env-dxb

I'm working on being able to add it to z2m, I would say it's ready but I need to learn how to upload it to the code... while I'm learning, if anyone wants to try it, I uploaded it here https://github.com/javilopezalarcon/Blind-motor-_TZE200_libht6ua-z2m It works well, with position and battery control, the motor failure remains to be tested if it is real.

Thanks for the converter @javilopezalarcon. I managed to figure out that datapoint 101 is for motor direction and 102 sets the upper limit and have made the following changes to your converter.

    exposes: [
        ...,
        e.enum('motor_direction', ea.STATE_SET, ['left', 'right']).withDescription('Motor side'),
        e.enum('set_upper_limit', ea.STATE_SET, ['start', 'stop']).withDescription('Learning')
    ],
    meta: {
        tuyaDatapoints: [
            ...,
            [101, 'motor_direction', tuya.valueConverterBasic.lookup({ 'left': tuya.enum(0), 'right': tuya.enum(1) })],
            [102, 'set_upper_limit', tuya.valueConverterBasic.lookup({ 'start': tuya.enum(0), 'stop': tuya.enum(1) })],
        ],
    },

@env-dxb I had a similar problem to you until I found out about setting an upper limit. You can try the following to see if it helps.

  1. Manually close your curtains
  2. While the curtains are shut, connect them to the motor
  3. Click "start" under "Set upper limit" to start learning the upper limit of your curtain. The motor should begin to open the curtain
  4. Just before the curtain is fully open, click "stop" under "Set upper limit"
  5. The controller should now remember the fully close and open positions

Seems I need a hub and app for it, I don’t)

env-dxb avatar Dec 01 '23 11:12 env-dxb

Kind of weird the way this issue on the ZHA repository has turned into a Zigbee2MQTT thread, but hopefully that will lead to a quirk being available for ZHA I guess?

kineticscreen avatar Dec 03 '23 00:12 kineticscreen

Kind of weird the way this issue on the ZHA repository has turned into a Zigbee2MQTT thread, but hopefully that will lead to a quirk being available for ZHA I guess?

Yeah, I have homebridge based on raspberry and zigbee. That’s why. I spent a lot of time to connect this motor to any system, but all I get is sleepless nights and state in mqtt. I returned it today. Enough)

env-dxb avatar Dec 03 '23 18:12 env-dxb

Thank you very much @env-dxb for the contribution of the new sensors, I will add them before sending it to z2m (sorry for the delay, I was very busy) 👍🏻👍🏻

javilopezalarcon avatar Dec 18 '23 11:12 javilopezalarcon

It's my fault for converting this from zha to z2m, I'm sorry @kineticscreen ... I was the same, I couldn't find anything that worked for me and I found this thread, where I saw that there were more people like me, in zha yes, but like me, without integration. .. I started to work to be able to add it in z2m and I wanted you to be the first to know, since you were like me... I imagine, that having the data from each sensor, passing it to zha will be much easier than not having anything, If it helps, I already fulfilled what I wanted, which was to help 😅

javilopezalarcon avatar Dec 18 '23 16:12 javilopezalarcon

But is it possible to make it work in ZHA?

hplar11111 avatar Dec 19 '23 11:12 hplar11111

Also interested in this.

oxcid3 avatar Dec 23 '23 17:12 oxcid3

I've had some success by using the following quirk:

"""Tuya based cover and blinds."""
from zigpy.profiles import zha
from zigpy.zcl.clusters.general import Basic, Groups, Identify, OnOff, Ota, Scenes, Time

from zhaquirks.const import (
    DEVICE_TYPE,
    ENDPOINTS,
    INPUT_CLUSTERS,
    MODELS_INFO,
    OUTPUT_CLUSTERS,
    PROFILE_ID,
)
from zhaquirks.tuya import (
    TuyaManufacturerWindowCover,
    TuyaManufCluster,
    TuyaWindowCover,
    TuyaWindowCoverControl,
)

class TuyaMoesCover0601(TuyaWindowCover):
    """Tuya blind controller device."""

    tuya_cover_inverted_by_default = True

    signature = {
        # "node_descriptor": "NodeDescriptor(byte1=2, byte2=64, mac_capability_flags=128, manufacturer_code=4098,
        #                    maximum_buffer_size=82, maximum_incoming_transfer_size=82, server_mask=11264,
        #                    maximum_outgoing_transfer_size=82, descriptor_capability_field=0)",
        # "endpoints": {
        # "1": { "profile_id": 260, "device_type": "0x0051", "in_clusters": [ "0x0000", "0x0004","0x0005","0xef00"], "out_clusters": ["0x000a","0x0019"] }
        # },
        # "manufacturer": "_TZE200_zah67ekd",
        # "model": "TS0601",
        # "class": "zigpy.device.Device"
        # }
        MODELS_INFO: [
            ("_TZE200_libht6ua", "TS0601"),
        ],
        ENDPOINTS: {
            1: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.SMART_PLUG,
                INPUT_CLUSTERS: [
                    Basic.cluster_id,
                    Groups.cluster_id,
                    Scenes.cluster_id,
                    TuyaManufCluster.cluster_id,
                ],
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],
            }
        },
    }

    replacement = {
        ENDPOINTS: {
            1: {
                DEVICE_TYPE: zha.DeviceType.WINDOW_COVERING_DEVICE,
                INPUT_CLUSTERS: [
                    Basic.cluster_id,
                    Groups.cluster_id,
                    Scenes.cluster_id,
                    TuyaManufacturerWindowCover,
                    TuyaWindowCoverControl,
                ],
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],
            }
        }
    }

Opening and closing works, which is what i need. I set the open and close positions by using the buttons on the device itself.

TeaMoe avatar Feb 15 '24 18:02 TeaMoe

Does the quirk expose anything else, like Battery status etc? Or just basic up down. Does it support percentage adjustments?

kineticscreen avatar Feb 17 '24 05:02 kineticscreen

It supports percentage adjustments but no battery status yet. I planed to do more research in this device tomorrow. Maybe i'm able to figure out how the battery status reporting works.

Kinetic Screen @.***> schrieb am Sa., 17. Feb. 2024, 06:01:

Does the quirk expose anything else, like Battery status etc? Or just basic up down. Does it support percentage adjustments?

— Reply to this email directly, view it on GitHub https://github.com/zigpy/zha-device-handlers/issues/2636#issuecomment-1949649832, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAAZ6YERC6TWM4UTKDLEGKDYUA2UFAVCNFSM6AAAAAA5ZP6B6WVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTSNBZGY2DSOBTGI . You are receiving this because you are subscribed to this thread.Message ID: @.***>

TeaMoe avatar Feb 17 '24 06:02 TeaMoe

Taking the tuya 0610 cover quirk and adding the device to the MODELS_INFO of the TuyaZemismartSmartCover0601_3 class also seems somewhat work, probably similar to https://github.com/zigpy/zha-device-handlers/issues/2636#issuecomment-1946870127

modified MODELS_INFO, line 173
        MODELS_INFO: [
            ("_TZE200_fzo2pocs", "TS0601"),
            ("_TZE200_iossyxra", "TS0601"),
            ("_TZE200_pw7mji0l", "TS0601"),
            ("_TZE200_libht6ua", "TS0601"),  # <-- This is the one I added
        ],

EDIT: I just realized that those two are virtually identical, so makes sense both would work.

Also, I think it's in "tilt" mode. I tried the method described above to change, but this didn't work, I just lost the connection to ZHA (I think it went into pairing mode).

@TeaMoe, how do you "set the open and close positions by using the buttons on the device itself."?

Aephir avatar Feb 20 '24 13:02 Aephir

Hey guys, converter by @javilopezalarcon with modifications by @fearless666 worked well, thanks a lot. However, I have a slight issue I imagine can be fixed in code but I am quite a newbie so struggling on how to do so.

When pressing up or down in HA, it does the opposite of what the buttons do in the remote and the device. Now, it doesn’t matter on whether it is set on right config or left config, they are always the opposite of each other. Can anyone help with a fix perhaps?

Blinds remote

helzarto avatar Mar 06 '24 20:03 helzarto

@helzarto I am really sorry to apparently ask a dumb question. How did you add the converter _TZE200_libht6ua.js to HA and zigbee2mqqt? (i am really new to HA). Help is really appreciated and sorry for "pushing" the thread to HA Z2M again.

Edit: Got it running. I did everything "right" but there was a change because of the last update: https://github.com/Koenkk/zigbee2mqtt/issues/22083#issuecomment-2037342969

hannes2984 avatar Apr 11 '24 20:04 hannes2984

Hey guys, converter by @javilopezalarcon with modifications by @fearless666 worked well, thanks a lot. However, I have a slight issue I imagine can be fixed in code but I am quite a newbie so struggling on how to do so.

When pressing up or down in HA, it does the opposite of what the buttons do in the remote and the device. Now, it doesn’t matter on whether it is set on right config or left config, they are always the opposite of each other. Can anyone help with a fix perhaps?

Blinds remote

Hi there, did You solve this issue - And do You have the battery-state?

DuploDom avatar Apr 24 '24 17:04 DuploDom