Просмотр исходного кода

Breaking change: Use device class in unique id if entity has no name.

Issue #871.  To make use of Home Assistant provided translations, it
would be good to remove as many names from entities as possible.  To
distinguish between multiple entities of the same type without names,
we need to use something other than the name in the identifier.

This will break existing configs, so a migration will need to be
written if possible to transfer entities to their new id.
Jason Rumney 2 лет назад
Родитель
Сommit
e90be52dfb

+ 1 - 1
custom_components/tuya_local/helpers/device_config.py

@@ -265,7 +265,7 @@ class TuyaEntityConfig:
     @property
     def config_id(self):
         """The identifier for this entity in the config."""
-        own_name = self.name
+        own_name = self._config.get("name", self.device_class)
         if own_name:
             return f"{self.entity}_{slugify(own_name)}"
 

+ 1 - 1
tests/devices/test_avatto_blinds.py

@@ -24,7 +24,7 @@ class TestAvattoBlinds(MultiSensorTests, BasicSelectTests, TuyaDeviceTestCase):
 
     def setUp(self):
         self.setUpForConfig("avatto_roller_blinds.yaml", AVATTO_BLINDS_PAYLOAD)
-        self.subject = self.entities["cover"]
+        self.subject = self.entities["cover_blind"]
         self.setUpMultiSensors(
             [
                 {

+ 1 - 1
tests/devices/test_avatto_curtain_switch.py

@@ -18,7 +18,7 @@ class TestAvattoCurtainSwitch(BasicLightTests, TuyaDeviceTestCase):
             "avatto_curtain_switch.yaml",
             AVATTO_CURTAIN_PAYLOAD,
         )
-        self.subject = self.entities.get("cover")
+        self.subject = self.entities.get("cover_curtain")
         self.setUpBasicLight(
             BACKLIGHT_DP,
             self.entities.get("light_backlight"),

+ 1 - 1
tests/devices/test_digoo_dgsp01_dual_nightlight_switch.py

@@ -27,7 +27,7 @@ class TestDigooNightlightSwitch(BasicSwitchTests, TuyaDeviceTestCase):
             "digoo_dgsp01_dual_nightlight_switch.yaml",
             DIGOO_DGSP01_SOCKET_PAYLOAD,
         )
-        self.subject = self.entities.get("switch")
+        self.subject = self.entities.get("switch_outlet")
         self.light = self.entities.get("light_night_light")
 
         self.setUpBasicSwitch(

+ 1 - 1
tests/devices/test_eanons_humidifier.py

@@ -35,7 +35,7 @@ class TestEanonsHumidifier(
 
     def setUp(self):
         self.setUpForConfig("eanons_humidifier.yaml", EANONS_HUMIDIFIER_PAYLOAD)
-        self.subject = self.entities.get("humidifier")
+        self.subject = self.entities.get("humidifier_humidifier")
         self.setUpSwitchable(HVACMODE_DPS, self.subject)
         self.fan = self.entities.get("fan_intensity")
         self.setUpBasicSwitch(SWITCH_DPS, self.entities.get("switch_uv_sterilization"))

+ 1 - 1
tests/devices/test_garage_door_opener.py

@@ -14,7 +14,7 @@ class TestSimpleGarageOpener(TuyaDeviceTestCase):
 
     def setUp(self):
         self.setUpForConfig("garage_door_opener.yaml", SIMPLE_GARAGE_DOOR_PAYLOAD)
-        self.subject = self.entities["cover"]
+        self.subject = self.entities["cover_garage"]
 
     def test_device_class_is_garage(self):
         self.assertEqual(self.subject.device_class, CoverDeviceClass.GARAGE)

+ 1 - 1
tests/devices/test_kogan_garage_door_opener.py

@@ -24,7 +24,7 @@ class TestKoganGarageOpener(
 
     def setUp(self):
         self.setUpForConfig("kogan_garage_opener.yaml", KOGAN_GARAGE_DOOR_PAYLOAD)
-        self.subject = self.entities["cover"]
+        self.subject = self.entities["cover_garage"]
         self.setUpBasicBinarySensor(
             LEFTOPEN_DPS,
             self.entities.get("binary_sensor_door_open"),

+ 1 - 1
tests/devices/test_m027_curtain.py

@@ -24,7 +24,7 @@ class TestM027Curtains(MultiSensorTests, BasicSelectTests, TuyaDeviceTestCase):
 
     def setUp(self):
         self.setUpForConfig("m027_curtain.yaml", M027_CURTAIN_PAYLOAD)
-        self.subject = self.entities["cover"]
+        self.subject = self.entities["cover_curtain"]
         self.setUpMultiSensors(
             [
                 {

+ 1 - 1
tests/devices/test_moes_rgb_socket.py

@@ -47,7 +47,7 @@ class TestMoesRGBSocket(
 
         self.setUpBasicSwitch(
             SWITCH_DPS,
-            self.entities.get("switch"),
+            self.entities.get("switch_outlet"),
             device_class=SwitchDeviceClass.OUTLET,
             power_dps=POWER_DPS,
             power_scale=10,

+ 1 - 1
tests/devices/test_pc321ty_energy_meter.py

@@ -51,7 +51,7 @@ class TestPC321TYPowerClamp(MultiSensorTests, TuyaDeviceTestCase):
             [
                 {
                     "dps": TOTALENERGY_DP,
-                    "name": "sensor",
+                    "name": "sensor_energy",
                     "unit": UnitOfEnergy.KILO_WATT_HOUR,
                     "device_class": SensorDeviceClass.ENERGY,
                     "state_class": STATE_CLASS_TOTAL_INCREASING,

+ 1 - 1
tests/devices/test_qs_c01_curtain.py

@@ -19,7 +19,7 @@ class TestQSC01Curtains(BasicNumberTests, BasicSelectTests, TuyaDeviceTestCase):
 
     def setUp(self):
         self.setUpForConfig("qs_c01_curtain.yaml", QS_C01_CURTAIN_PAYLOAD)
-        self.subject = self.entities["cover"]
+        self.subject = self.entities["cover_curtain"]
         self.setUpBasicNumber(
             TRAVELTIME_DPS,
             self.entities.get("number_travel_time"),

+ 1 - 1
tests/devices/test_sd123_hpr01_presence.py

@@ -40,7 +40,7 @@ class TestSD123HumanPresenceRadar(
         self.setUpForConfig("sd123_hpr01_presence.yaml", SD123_PRESENCE_PAYLOAD)
         self.setUpBasicBinarySensor(
             PRESENCE_DPS,
-            self.entities.get("binary_sensor"),
+            self.entities.get("binary_sensor_occupancy"),
             device_class=BinarySensorDeviceClass.OCCUPANCY,
             testdata=("presence", "none"),
         )

+ 1 - 1
tests/devices/test_simple_blinds.py

@@ -16,7 +16,7 @@ class TestSimpleBlinds(TuyaDeviceTestCase):
 
     def setUp(self):
         self.setUpForConfig("simple_blinds.yaml", SIMPLE_BLINDS_PAYLOAD)
-        self.subject = self.entities["cover"]
+        self.subject = self.entities["cover_blind"]
 
     def test_device_class_is_blind(self):
         self.assertEqual(self.subject.device_class, CoverDeviceClass.BLIND)

+ 1 - 1
tests/devices/test_simple_switch_with_timer.py

@@ -16,7 +16,7 @@ class TestTimedSwitch(BasicNumberTests, SwitchableTests, TuyaDeviceTestCase):
 
     def setUp(self):
         self.setUpForConfig("simple_switch_timer.yaml", TIMED_SOCKET_PAYLOAD)
-        self.subject = self.entities.get("switch")
+        self.subject = self.entities.get("switch_outlet")
         self.setUpSwitchable(SWITCH_DPS, self.subject)
         self.setUpBasicNumber(
             TIMER_DPS,

+ 1 - 1
tests/devices/test_simple_switch_with_timerv2.py

@@ -16,7 +16,7 @@ class TestTimedSwitch(BasicNumberTests, SwitchableTests, TuyaDeviceTestCase):
 
     def setUp(self):
         self.setUpForConfig("simple_switch_timerv2.yaml", TIMED_SOCKETV2_PAYLOAD)
-        self.subject = self.entities.get("switch")
+        self.subject = self.entities.get("switch_outlet")
         self.setUpSwitchable(SWITCH_DPS, self.subject)
         self.setUpBasicNumber(
             TIMER_DPS,

+ 1 - 1
tests/devices/test_smartplug_encoded.py

@@ -19,7 +19,7 @@ class TestSwitchEncoded(BasicNumberTests, SwitchableTests, TuyaDeviceTestCase):
 
     def setUp(self):
         self.setUpForConfig("smartplug_encoded.yaml", SMARTPLUG_ENCODED_PAYLOAD)
-        self.subject = self.entities.get("switch")
+        self.subject = self.entities.get("switch_outlet")
         self.setUpSwitchable(SWITCH_DPS, self.subject)
         self.setUpBasicNumber(
             TIMER_DPS,

+ 1 - 1
tests/devices/test_smartplugv1.py

@@ -35,7 +35,7 @@ class TestKoganSwitch(
 
     def setUp(self):
         self.setUpForConfig("smartplugv1.yaml", KOGAN_SOCKET_PAYLOAD)
-        self.subject = self.entities.get("switch")
+        self.subject = self.entities.get("switch_outlet")
         self.setUpSwitchable(SWITCH_DPS, self.subject)
         self.setUpBasicBinarySensor(
             OVERCURRENT_DPS,

+ 1 - 1
tests/devices/test_smartplugv2.py

@@ -28,7 +28,7 @@ class TestSwitchV2(
 
     def setUp(self):
         self.setUpForConfig("smartplugv2.yaml", KOGAN_SOCKET_PAYLOAD2)
-        self.subject = self.entities.get("switch")
+        self.subject = self.entities.get("switch_outlet")
         self.setUpSwitchable(SWITCH_DPS, self.subject)
         self.setUpBasicNumber(
             TIMER_DPS,

+ 2 - 2
tests/devices/test_smartplugv2_energy.py

@@ -51,7 +51,7 @@ class TestSwitchV2Energy(
         self.setUpMultiSwitch(
             [
                 {
-                    "name": "switch",
+                    "name": "switch_outlet",
                     "dps": SWITCH_DPS,
                     "device_class": SwitchDeviceClass.OUTLET,
                 },
@@ -135,7 +135,7 @@ class TestSwitchV2Energy(
         self.dps[RANDOM_DPS] = "3C4D"
 
         self.assertDictEqual(
-            self.multiSwitch["switch"].extra_state_attributes,
+            self.multiSwitch["switch_outlet"].extra_state_attributes,
             {
                 "test_bit": 21,
                 "fault_code": 26,

+ 1 - 1
tests/devices/test_wetair_wawh1210lw_humidifier.py

@@ -42,7 +42,7 @@ class TestWetairWAWH1210LWHumidifier(
         self.setUpForConfig(
             "wetair_wawh1210lw_humidifier.yaml", WETAIR_WAWH1210_HUMIDIFIER_PAYLOAD
         )
-        self.subject = self.entities.get("humidifier")
+        self.subject = self.entities.get("humidifier_humidifier")
         self.setUpSwitchable(SWITCH_DPS, self.subject)
         self.setUpBasicLight(LIGHT_DPS, self.entities.get("light_display"))
         self.setUpBasicLock(LOCK_DPS, self.entities.get("lock_child_lock"))

+ 1 - 1
tests/devices/test_wilfa_haze_hu400bc_humidifier.py

@@ -45,7 +45,7 @@ class TestWilfaHazeHumidifier(
         self.setUpForConfig(
             "wilfa_haze_hu400bc_humidifier.yaml", WILFA_HAZE_HUMIDIFIER_PAYLOAD
         )
-        self.subject = self.entities.get("humidifier")
+        self.subject = self.entities.get("humidifier_humidifier")
         self.fan = self.entities.get("fan")
         self.setUpSwitchable(SWITCH_DPS, self.subject)
         self.setUpBasicBinarySensor(

+ 1 - 1
tests/test_cover.py

@@ -33,7 +33,7 @@ async def test_init_entry(hass):
         },
     }
     await async_setup_entry(hass, entry, m_add_entities)
-    assert type(hass.data[DOMAIN]["dummy"]["cover"]) == TuyaLocalCover
+    assert type(hass.data[DOMAIN]["dummy"]["cover_garage"]) == TuyaLocalCover
     m_add_entities.assert_called_once()
 
 

+ 4 - 1
tests/test_humidifier.py

@@ -38,7 +38,10 @@ async def test_init_entry(hass):
     hass.data[DOMAIN]["dummy"]["device"] = m_device
 
     await async_setup_entry(hass, entry, m_add_entities)
-    assert type(hass.data[DOMAIN]["dummy"]["humidifier"]) == TuyaLocalHumidifier
+    assert (
+        type(hass.data[DOMAIN]["dummy"]["humidifier_dehumidifier"])
+        == TuyaLocalHumidifier
+    )
     m_add_entities.assert_called_once()
 
 

+ 1 - 1
tests/test_switch.py

@@ -35,7 +35,7 @@ async def test_init_entry(hass):
     hass.data[DOMAIN]["dummy"]["device"] = m_device
 
     await async_setup_entry(hass, entry, m_add_entities)
-    assert type(hass.data[DOMAIN]["dummy"]["switch"]) == TuyaLocalSwitch
+    assert type(hass.data[DOMAIN]["dummy"]["switch_outlet"]) == TuyaLocalSwitch
     m_add_entities.assert_called_once()