test_madimack_elitev3_heatpump.py 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. from homeassistant.components.climate.const import (
  2. ClimateEntityFeature,
  3. HVACMode,
  4. )
  5. from homeassistant.components.sensor import SensorDeviceClass
  6. from homeassistant.const import (
  7. PERCENTAGE,
  8. UnitOfTemperature,
  9. )
  10. from ..const import MADIMACK_ELITEV3_HEATPUMP_PAYLOAD
  11. from ..helpers import assert_device_properties_set
  12. from ..mixins.climate import TargetTemperatureTests
  13. from ..mixins.sensor import MultiSensorTests
  14. from .base_device_tests import TuyaDeviceTestCase
  15. POWER_DPS = "1"
  16. HVACMODE_DPS = "2"
  17. TEMPERATURE_DPS = "4"
  18. PRESET_DPS = "5"
  19. UNIT_DPS = "6"
  20. UNKNOWN15_DPS = "15"
  21. PWRLEVEL_DPS = "20"
  22. TEMPMAX_DPS = "21"
  23. TEMPMIN_DPS = "22"
  24. COILTEMP_DPS = "23"
  25. EXHAUSTTEMP_DPS = "24"
  26. OUTLETTEMP_DPS = "25"
  27. AMBIENTTEMP_DPS = "26"
  28. UNKNOWN101_DPS = "101"
  29. CURRENTTEMP_DPS = "102"
  30. RETURNGASTEMP_DPS = "103"
  31. COOLCOILTEMP_DPS = "104"
  32. COOLPLATETEMP_DPS = "105"
  33. EEVOPENING_DPS = "106"
  34. UNKNOWN107_DPS = "107"
  35. class TestMadimackEliteV3Heatpump(
  36. MultiSensorTests,
  37. TargetTemperatureTests,
  38. TuyaDeviceTestCase,
  39. ):
  40. __test__ = True
  41. def setUp(self):
  42. self.setUpForConfig(
  43. "madimack_elite_v3_heatpump.yaml",
  44. MADIMACK_ELITEV3_HEATPUMP_PAYLOAD,
  45. )
  46. self.subject = self.entities.get("climate")
  47. self.setUpTargetTemperature(
  48. TEMPERATURE_DPS,
  49. self.subject,
  50. min=18,
  51. max=40,
  52. )
  53. self.setUpMultiSensors(
  54. [
  55. {
  56. "name": "sensor_power_level",
  57. "dps": PWRLEVEL_DPS,
  58. "device_class": SensorDeviceClass.POWER_FACTOR,
  59. "unit": PERCENTAGE,
  60. },
  61. {
  62. "name": "sensor_evaporator_coil_pipe_temperature",
  63. "dps": COILTEMP_DPS,
  64. "device_class": SensorDeviceClass.TEMPERATURE,
  65. "unit": UnitOfTemperature.CELSIUS,
  66. },
  67. {
  68. "name": "sensor_exhaust_gas_temperature",
  69. "dps": EXHAUSTTEMP_DPS,
  70. "device_class": SensorDeviceClass.TEMPERATURE,
  71. "unit": UnitOfTemperature.CELSIUS,
  72. },
  73. {
  74. "name": "sensor_outlet_water_temperature",
  75. "dps": OUTLETTEMP_DPS,
  76. "device_class": SensorDeviceClass.TEMPERATURE,
  77. "unit": UnitOfTemperature.CELSIUS,
  78. },
  79. {
  80. "name": "sensor_ambient_temperature",
  81. "dps": AMBIENTTEMP_DPS,
  82. "device_class": SensorDeviceClass.TEMPERATURE,
  83. "unit": UnitOfTemperature.CELSIUS,
  84. },
  85. {
  86. "name": "sensor_return_gas_temperature",
  87. "dps": RETURNGASTEMP_DPS,
  88. "device_class": SensorDeviceClass.TEMPERATURE,
  89. "unit": UnitOfTemperature.CELSIUS,
  90. },
  91. {
  92. "name": "sensor_cooling_coil_pipe_temperature",
  93. "dps": COOLCOILTEMP_DPS,
  94. "device_class": SensorDeviceClass.TEMPERATURE,
  95. "unit": UnitOfTemperature.CELSIUS,
  96. },
  97. {
  98. "name": "sensor_cooling_plate_temperature",
  99. "dps": COOLPLATETEMP_DPS,
  100. "device_class": SensorDeviceClass.TEMPERATURE,
  101. "unit": UnitOfTemperature.CELSIUS,
  102. },
  103. {
  104. "name": "sensor_eev_opening",
  105. "dps": EEVOPENING_DPS,
  106. },
  107. ]
  108. )
  109. self.mark_secondary(
  110. [
  111. "sensor_power_level",
  112. "sensor_evaporator_coil_pipe_temperature",
  113. "sensor_exhaust_gas_temperature",
  114. "sensor_outlet_water_temperature",
  115. "sensor_ambient_temperature",
  116. "sensor_return_gas_temperature",
  117. "sensor_cooling_coil_pipe_temperature",
  118. "sensor_cooling_plate_temperature",
  119. "sensor_eev_opening",
  120. ]
  121. )
  122. def test_supported_features(self):
  123. self.assertEqual(
  124. self.subject.supported_features,
  125. (
  126. ClimateEntityFeature.PRESET_MODE
  127. | ClimateEntityFeature.TARGET_TEMPERATURE
  128. ),
  129. )
  130. def test_icon(self):
  131. self.dps[POWER_DPS] = True
  132. self.dps[HVACMODE_DPS] = "auto"
  133. self.assertEqual(self.subject.icon, "mdi:refresh-auto")
  134. self.dps[HVACMODE_DPS] = "cold"
  135. self.assertEqual(self.subject.icon, "mdi:snowflake")
  136. self.dps[HVACMODE_DPS] = "heating"
  137. self.assertEqual(self.subject.icon, "mdi:hot-tub")
  138. self.dps[POWER_DPS] = False
  139. self.assertEqual(self.subject.icon, "mdi:hvac-off")
  140. def test_temperature_unit(self):
  141. self.dps[UNIT_DPS] = "c"
  142. self.assertEqual(self.subject.temperature_unit, UnitOfTemperature.CELSIUS)
  143. self.dps[UNIT_DPS] = "f"
  144. self.assertEqual(self.subject.temperature_unit, UnitOfTemperature.FAHRENHEIT)
  145. def test_minimum_target_temperature(self):
  146. self.dps[TEMPMIN_DPS] = 60
  147. self.assertEqual(self.subject.min_temp, 60)
  148. def test_maximum_target_temperature(self):
  149. self.dps[TEMPMAX_DPS] = 104
  150. self.assertEqual(self.subject.max_temp, 104)
  151. def test_current_temperature(self):
  152. self.dps[CURRENTTEMP_DPS] = 25
  153. self.assertEqual(self.subject.current_temperature, 25)
  154. def test_hvac_mode(self):
  155. self.dps[POWER_DPS] = True
  156. self.dps[HVACMODE_DPS] = "auto"
  157. self.assertEqual(self.subject.hvac_mode, HVACMode.HEAT_COOL)
  158. self.dps[HVACMODE_DPS] = "cold"
  159. self.assertEqual(self.subject.hvac_mode, HVACMode.COOL)
  160. self.dps[HVACMODE_DPS] = "heating"
  161. self.assertEqual(self.subject.hvac_mode, HVACMode.HEAT)
  162. self.dps[POWER_DPS] = False
  163. self.assertEqual(self.subject.hvac_mode, HVACMode.OFF)
  164. def test_hvac_modes(self):
  165. self.assertCountEqual(
  166. self.subject.hvac_modes,
  167. [HVACMode.OFF, HVACMode.COOL, HVACMode.HEAT, HVACMode.HEAT_COOL],
  168. )
  169. async def test_set_hvac_mode_to_cool(self):
  170. async with assert_device_properties_set(
  171. self.subject._device,
  172. {POWER_DPS: True, HVACMODE_DPS: "cold"},
  173. ):
  174. await self.subject.async_set_hvac_mode(HVACMode.COOL)
  175. async def test_set_hvac_mode_to_heat(self):
  176. async with assert_device_properties_set(
  177. self.subject._device,
  178. {POWER_DPS: True, HVACMODE_DPS: "heating"},
  179. ):
  180. await self.subject.async_set_hvac_mode(HVACMode.HEAT)
  181. async def test_set_hvac_mode_to_auto(self):
  182. async with assert_device_properties_set(
  183. self.subject._device,
  184. {POWER_DPS: True, HVACMODE_DPS: "auto"},
  185. ):
  186. await self.subject.async_set_hvac_mode(HVACMode.HEAT_COOL)
  187. async def test_set_hvac_mode_to_off(self):
  188. async with assert_device_properties_set(
  189. self.subject._device,
  190. {POWER_DPS: False},
  191. ):
  192. await self.subject.async_set_hvac_mode(HVACMode.OFF)
  193. def test_preset_mode(self):
  194. self.dps[PRESET_DPS] = "silence"
  195. self.assertEqual(self.subject.preset_mode, "Silence")
  196. self.dps[PRESET_DPS] = "power"
  197. self.assertEqual(self.subject.preset_mode, "Perfect")
  198. self.dps[PRESET_DPS] = "boost"
  199. self.assertEqual(self.subject.preset_mode, "Power")
  200. def test_preset_modes(self):
  201. self.assertCountEqual(
  202. self.subject.preset_modes,
  203. ["Silence", "Perfect", "Power"],
  204. )
  205. async def test_set_preset_to_silence(self):
  206. async with assert_device_properties_set(
  207. self.subject._device,
  208. {PRESET_DPS: "silence"},
  209. ):
  210. await self.subject.async_set_preset_mode("Silence")
  211. async def test_set_preset_to_perfect(self):
  212. async with assert_device_properties_set(
  213. self.subject._device,
  214. {PRESET_DPS: "power"},
  215. ):
  216. await self.subject.async_set_preset_mode("Perfect")
  217. async def test_set_preset_to_boost(self):
  218. async with assert_device_properties_set(
  219. self.subject._device,
  220. {PRESET_DPS: "boost"},
  221. ):
  222. await self.subject.async_set_preset_mode("Power")
  223. def test_extra_state_attributes(self):
  224. self.dps[UNKNOWN15_DPS] = 15
  225. self.dps[UNKNOWN101_DPS] = 101
  226. self.dps[UNKNOWN107_DPS] = True
  227. self.assertDictEqual(
  228. self.subject.extra_state_attributes,
  229. {
  230. "unknown_15": 15,
  231. "unknown_101": 101,
  232. "unknown_107": True,
  233. },
  234. )