test_ecostrad_iqceramic_radiator.py 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. from homeassistant.components.climate.const import (
  2. ClimateEntityFeature,
  3. HVACMode,
  4. )
  5. from homeassistant.const import UnitOfTemperature
  6. from ..const import ECOSTRAD_IQCERAMIC_RADIATOR_PAYLOAD
  7. from ..helpers import assert_device_properties_set
  8. from ..mixins.climate import TargetTemperatureTests
  9. from ..mixins.lock import BasicLockTests
  10. from ..mixins.number import BasicNumberTests
  11. from ..mixins.select import MultiSelectTests
  12. from ..mixins.switch import BasicSwitchTests
  13. from .base_device_tests import TuyaDeviceTestCase
  14. HVACMODE_DPS = "1"
  15. PRESET_DPS = "2"
  16. TEMPERATURE_DPS = "16"
  17. CURRENTTEMP_DPS = "24"
  18. CALIB_DPS = "27"
  19. LOCK_DPS = "40"
  20. PIR_DPS = "104"
  21. SYNC_DPS = "107"
  22. WINDOW_DPS = "108"
  23. LIMIT_DPS = "109"
  24. class TestEcostradAccentIqHeater(
  25. BasicLockTests,
  26. BasicNumberTests,
  27. MultiSelectTests,
  28. BasicSwitchTests,
  29. TargetTemperatureTests,
  30. TuyaDeviceTestCase,
  31. ):
  32. __test__ = True
  33. def setUp(self):
  34. self.setUpForConfig(
  35. "ecostrad_iqceramic_radiator.yaml",
  36. ECOSTRAD_IQCERAMIC_RADIATOR_PAYLOAD,
  37. )
  38. self.subject = self.entities.get("climate")
  39. self.setUpTargetTemperature(
  40. TEMPERATURE_DPS, self.subject, min=7.0, max=30.0, scale=10, step=5
  41. )
  42. self.setUpBasicLock(
  43. LOCK_DPS,
  44. self.entities.get("lock_child_lock"),
  45. )
  46. self.setUpBasicNumber(
  47. CALIB_DPS,
  48. self.entities.get("number_calibration_offset"),
  49. min=-5,
  50. max=5,
  51. unit=UnitOfTemperature.CELSIUS,
  52. )
  53. self.setUpBasicSwitch(
  54. SYNC_DPS, self.entities.get("switch_time_sync"), testdata=("1", "0")
  55. )
  56. self.setUpMultiSelect(
  57. [
  58. {
  59. "dps": PIR_DPS,
  60. "name": "select_pir_timeout",
  61. "options": {
  62. "15": "15 mins",
  63. "30": "30 mins",
  64. "45": "45 mins",
  65. "60": "60 mins",
  66. },
  67. },
  68. {
  69. "dps": WINDOW_DPS,
  70. "name": "select_open_window_detection",
  71. "options": {
  72. "0": "Off",
  73. "60": "60 mins",
  74. "90": "90 mins",
  75. },
  76. },
  77. ]
  78. )
  79. self.mark_secondary(
  80. [
  81. "lock_child_lock",
  82. "number_calibration_offset",
  83. "select_open_window_detection",
  84. "select_pir_timeout",
  85. "switch_time_sync",
  86. ]
  87. )
  88. def test_supported_features(self):
  89. self.assertEqual(
  90. self.subject.supported_features,
  91. (
  92. ClimateEntityFeature.PRESET_MODE
  93. | ClimateEntityFeature.TARGET_TEMPERATURE
  94. ),
  95. )
  96. def test_temperature_unit(self):
  97. self.assertEqual(
  98. self.subject.temperature_unit,
  99. self.subject._device.temperature_unit,
  100. )
  101. def test_current_temperature(self):
  102. self.dps[CURRENTTEMP_DPS] = 250
  103. self.assertEqual(self.subject.current_temperature, 25.0)
  104. def test_hvac_mode(self):
  105. self.dps[HVACMODE_DPS] = True
  106. self.assertEqual(self.subject.hvac_mode, HVACMode.HEAT)
  107. self.dps[HVACMODE_DPS] = False
  108. self.assertEqual(self.subject.hvac_mode, HVACMode.OFF)
  109. def test_hvac_modes(self):
  110. self.assertCountEqual(
  111. self.subject.hvac_modes,
  112. [HVACMode.OFF, HVACMode.HEAT],
  113. )
  114. async def test_turn_on(self):
  115. async with assert_device_properties_set(
  116. self.subject._device, {HVACMODE_DPS: True}
  117. ):
  118. await self.subject.async_set_hvac_mode(HVACMode.HEAT)
  119. async def test_turn_off(self):
  120. async with assert_device_properties_set(
  121. self.subject._device, {HVACMODE_DPS: False}
  122. ):
  123. await self.subject.async_set_hvac_mode(HVACMode.OFF)
  124. def test_preset_modes(self):
  125. self.assertCountEqual(
  126. self.subject.preset_modes,
  127. [
  128. "Program",
  129. "ECO",
  130. "Comfort",
  131. "Anti-Freeze",
  132. "Sensor",
  133. "Pilot Wire",
  134. ],
  135. )
  136. def test_preset_mode(self):
  137. self.dps[PRESET_DPS] = "auto"
  138. self.assertEqual(self.subject.preset_mode, "Program")
  139. self.dps[PRESET_DPS] = "eco"
  140. self.assertEqual(self.subject.preset_mode, "ECO")
  141. self.dps[PRESET_DPS] = "hot"
  142. self.assertEqual(self.subject.preset_mode, "Comfort")
  143. self.dps[PRESET_DPS] = "cold"
  144. self.assertEqual(self.subject.preset_mode, "Anti-Freeze")
  145. self.dps[PRESET_DPS] = "person_infrared_ray"
  146. self.assertEqual(self.subject.preset_mode, "Sensor")
  147. self.dps[PRESET_DPS] = "line_control"
  148. self.assertEqual(self.subject.preset_mode, "Pilot Wire")
  149. async def test_set_preset_to_auto(self):
  150. async with assert_device_properties_set(
  151. self.subject._device,
  152. {PRESET_DPS: "auto"},
  153. ):
  154. await self.subject.async_set_preset_mode("Program")
  155. async def test_set_preset_to_eco(self):
  156. async with assert_device_properties_set(
  157. self.subject._device,
  158. {PRESET_DPS: "eco"},
  159. ):
  160. await self.subject.async_set_preset_mode("ECO")
  161. async def test_set_preset_to_hot(self):
  162. async with assert_device_properties_set(
  163. self.subject._device,
  164. {PRESET_DPS: "hot"},
  165. ):
  166. await self.subject.async_set_preset_mode("Comfort")
  167. async def test_set_preset_to_cold(self):
  168. async with assert_device_properties_set(
  169. self.subject._device,
  170. {PRESET_DPS: "cold"},
  171. ):
  172. await self.subject.async_set_preset_mode("Anti-Freeze")
  173. async def test_set_preset_to_pir(self):
  174. async with assert_device_properties_set(
  175. self.subject._device,
  176. {PRESET_DPS: "person_infrared_ray"},
  177. ):
  178. await self.subject.async_set_preset_mode("Sensor")
  179. async def test_set_preset_to_line(self):
  180. async with assert_device_properties_set(
  181. self.subject._device,
  182. {PRESET_DPS: "line_control"},
  183. ):
  184. await self.subject.async_set_preset_mode("Pilot Wire")
  185. def test_extra_state_attributes(self):
  186. self.dps[LIMIT_DPS] = "3"
  187. self.assertEqual(
  188. self.subject.extra_state_attributes,
  189. {"limit_function": "3"},
  190. )