test_carson_cb.py 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. from homeassistant.components.climate.const import (
  2. ClimateEntityFeature,
  3. HVACMode,
  4. )
  5. from homeassistant.const import UnitOfTemperature
  6. from ..const import CARSON_CB_PAYLOAD
  7. from ..helpers import assert_device_properties_set
  8. from ..mixins.climate import TargetTemperatureTests
  9. from .base_device_tests import TuyaDeviceTestCase
  10. POWER_DPS = "1"
  11. TEMPERATURE_DPS = "2"
  12. CURRENTTEMP_DPS = "3"
  13. HVACMODE_DPS = "4"
  14. FAN_DPS = "5"
  15. UNIT_DPS = "19"
  16. UNKNOWN102_DPS = "102"
  17. TIMER_DPS = "103"
  18. SWING_DPS = "104"
  19. COUNTDOWN_DPS = "105"
  20. UNKNOWN106_DPS = "106"
  21. UNKNOWN110_DPS = "110"
  22. class TestCarsonCBHeatpump(TargetTemperatureTests, TuyaDeviceTestCase):
  23. __test__ = True
  24. def setUp(self):
  25. self.setUpForConfig("carson_cb.yaml", CARSON_CB_PAYLOAD)
  26. self.subject = self.entities.get("climate")
  27. self.setUpTargetTemperature(
  28. TEMPERATURE_DPS,
  29. self.subject,
  30. min=16,
  31. max=30,
  32. )
  33. def test_supported_features(self):
  34. self.assertEqual(
  35. self.subject.supported_features,
  36. (
  37. ClimateEntityFeature.TARGET_TEMPERATURE
  38. | ClimateEntityFeature.FAN_MODE
  39. | ClimateEntityFeature.SWING_MODE
  40. ),
  41. )
  42. def test_icon(self):
  43. self.dps[POWER_DPS] = True
  44. self.dps[HVACMODE_DPS] = "COOL"
  45. self.assertEqual(self.subject.icon, "mdi:snowflake")
  46. self.dps[HVACMODE_DPS] = "HEAT"
  47. self.assertEqual(self.subject.icon, "mdi:fire")
  48. self.dps[HVACMODE_DPS] = "DRY"
  49. self.assertEqual(self.subject.icon, "mdi:water")
  50. self.dps[HVACMODE_DPS] = "FAN"
  51. self.assertEqual(self.subject.icon, "mdi:fan")
  52. self.dps[POWER_DPS] = False
  53. self.assertEqual(self.subject.icon, "mdi:hvac-off")
  54. def test_temperature_unit(self):
  55. self.dps[UNIT_DPS] = "C"
  56. self.assertEqual(self.subject.temperature_unit, UnitOfTemperature.CELSIUS)
  57. self.dps[UNIT_DPS] = "F"
  58. self.assertEqual(self.subject.temperature_unit, UnitOfTemperature.FAHRENHEIT)
  59. def test_current_temperature(self):
  60. self.dps[CURRENTTEMP_DPS] = 25
  61. self.assertEqual(self.subject.current_temperature, 25)
  62. def test_hvac_mode(self):
  63. self.dps[POWER_DPS] = True
  64. self.dps[HVACMODE_DPS] = "HEAT"
  65. self.assertEqual(self.subject.hvac_mode, HVACMode.HEAT)
  66. self.dps[HVACMODE_DPS] = "COOL"
  67. self.assertEqual(self.subject.hvac_mode, HVACMode.COOL)
  68. self.dps[HVACMODE_DPS] = "DRY"
  69. self.assertEqual(self.subject.hvac_mode, HVACMode.DRY)
  70. self.dps[HVACMODE_DPS] = "FAN"
  71. self.assertEqual(self.subject.hvac_mode, HVACMode.FAN_ONLY)
  72. self.dps[HVACMODE_DPS] = "DRY"
  73. self.dps[POWER_DPS] = False
  74. self.assertEqual(self.subject.hvac_mode, HVACMode.OFF)
  75. def test_hvac_modes(self):
  76. self.assertCountEqual(
  77. self.subject.hvac_modes,
  78. [
  79. HVACMode.OFF,
  80. HVACMode.HEAT,
  81. HVACMode.COOL,
  82. HVACMode.DRY,
  83. HVACMode.FAN_ONLY,
  84. ],
  85. )
  86. async def test_turn_on(self):
  87. async with assert_device_properties_set(
  88. self.subject._device, {POWER_DPS: True, HVACMODE_DPS: "HEAT"}
  89. ):
  90. await self.subject.async_set_hvac_mode(HVACMode.HEAT)
  91. async def test_turn_off(self):
  92. async with assert_device_properties_set(
  93. self.subject._device, {POWER_DPS: False}
  94. ):
  95. await self.subject.async_set_hvac_mode(HVACMode.OFF)
  96. def test_fan_mode(self):
  97. self.dps[FAN_DPS] = 1
  98. self.assertEqual(self.subject.fan_mode, "low")
  99. self.dps[FAN_DPS] = 2
  100. self.assertEqual(self.subject.fan_mode, "medium")
  101. self.dps[FAN_DPS] = 3
  102. self.assertEqual(self.subject.fan_mode, "high")
  103. def test_fan_modes(self):
  104. self.assertCountEqual(
  105. self.subject.fan_modes,
  106. [
  107. "low",
  108. "medium",
  109. "high",
  110. ],
  111. )
  112. async def test_set_fan_mode_to_low(self):
  113. async with assert_device_properties_set(
  114. self.subject._device,
  115. {FAN_DPS: 1},
  116. ):
  117. await self.subject.async_set_fan_mode("low")
  118. async def test_set_fan_mode_to_medium(self):
  119. async with assert_device_properties_set(
  120. self.subject._device,
  121. {FAN_DPS: 2},
  122. ):
  123. await self.subject.async_set_fan_mode("medium")
  124. async def test_set_fan_mode_to_high(self):
  125. async with assert_device_properties_set(
  126. self.subject._device,
  127. {FAN_DPS: 3},
  128. ):
  129. await self.subject.async_set_fan_mode("high")
  130. def test_swing_modes(self):
  131. self.assertCountEqual(
  132. self.subject.swing_modes,
  133. ["off", "vertical"],
  134. )
  135. def test_swing_mode(self):
  136. self.dps[SWING_DPS] = False
  137. self.assertEqual(self.subject.swing_mode, "off")
  138. self.dps[SWING_DPS] = True
  139. self.assertEqual(self.subject.swing_mode, "vertical")
  140. async def test_set_swing_mode_to_off(self):
  141. async with assert_device_properties_set(
  142. self.subject._device,
  143. {SWING_DPS: False},
  144. ):
  145. await self.subject.async_set_swing_mode("off")
  146. async def test_set_swing_mode_to_vertical(self):
  147. async with assert_device_properties_set(
  148. self.subject._device,
  149. {SWING_DPS: True},
  150. ):
  151. await self.subject.async_set_swing_mode("vertical")
  152. def test_extra_state_attribures(self):
  153. self.dps[UNKNOWN102_DPS] = True
  154. self.dps[TIMER_DPS] = 103
  155. self.dps[COUNTDOWN_DPS] = 105
  156. self.dps[UNKNOWN106_DPS] = 106
  157. self.dps[UNKNOWN110_DPS] = 110
  158. self.assertDictEqual(
  159. self.subject.extra_state_attributes,
  160. {
  161. "unknown_102": True,
  162. "timer": 103,
  163. "countdown": 105,
  164. "unknown_106": 106,
  165. "unknown_110": 110,
  166. },
  167. )