From e6df0be072b78961e6929a69154386ef79c962d4 Mon Sep 17 00:00:00 2001
From: Douglas Krahmer <doug.github@remhark.com>
Date: Tue, 11 Jun 2024 09:09:57 -0700
Subject: [PATCH] Add support for Tuya non-standard contact sensors (#115557)

Co-authored-by: Franck Nijhof <git@frenck.dev>
---
 homeassistant/components/tuya/binary_sensor.py | 4 ++++
 homeassistant/components/tuya/const.py         | 1 +
 homeassistant/components/tuya/sensor.py        | 8 ++++++++
 3 files changed, 13 insertions(+)

diff --git a/homeassistant/components/tuya/binary_sensor.py b/homeassistant/components/tuya/binary_sensor.py
index b992c24d07d..2d6d9b478c8 100644
--- a/homeassistant/components/tuya/binary_sensor.py
+++ b/homeassistant/components/tuya/binary_sensor.py
@@ -190,6 +190,10 @@ BINARY_SENSORS: dict[str, tuple[TuyaBinarySensorEntityDescription, ...]] = {
             key=DPCode.DOORCONTACT_STATE,
             device_class=BinarySensorDeviceClass.DOOR,
         ),
+        TuyaBinarySensorEntityDescription(
+            key=DPCode.SWITCH,  # Used by non-standard contact sensor implementations
+            device_class=BinarySensorDeviceClass.DOOR,
+        ),
         TAMPER_BINARY_SENSOR,
     ),
     # Access Control
diff --git a/homeassistant/components/tuya/const.py b/homeassistant/components/tuya/const.py
index a9c53d807bc..d731a93f858 100644
--- a/homeassistant/components/tuya/const.py
+++ b/homeassistant/components/tuya/const.py
@@ -113,6 +113,7 @@ class DPCode(StrEnum):
     BASIC_OSD = "basic_osd"
     BASIC_PRIVATE = "basic_private"
     BASIC_WDR = "basic_wdr"
+    BATTERY = "battery"  # Used by non-standard contact sensor implementations
     BATTERY_PERCENTAGE = "battery_percentage"  # Battery percentage
     BATTERY_STATE = "battery_state"  # Battery state
     BATTERY_VALUE = "battery_value"  # Battery value
diff --git a/homeassistant/components/tuya/sensor.py b/homeassistant/components/tuya/sensor.py
index 9382059471d..cd487a31d97 100644
--- a/homeassistant/components/tuya/sensor.py
+++ b/homeassistant/components/tuya/sensor.py
@@ -55,6 +55,14 @@ BATTERY_SENSORS: tuple[TuyaSensorEntityDescription, ...] = (
         state_class=SensorStateClass.MEASUREMENT,
         entity_category=EntityCategory.DIAGNOSTIC,
     ),
+    TuyaSensorEntityDescription(
+        key=DPCode.BATTERY,  # Used by non-standard contact sensor implementations
+        translation_key="battery",
+        native_unit_of_measurement=PERCENTAGE,
+        device_class=SensorDeviceClass.BATTERY,
+        state_class=SensorStateClass.MEASUREMENT,
+        entity_category=EntityCategory.DIAGNOSTIC,
+    ),
     TuyaSensorEntityDescription(
         key=DPCode.BATTERY_STATE,
         translation_key="battery_state",
-- 
GitLab