test_sd123_hpr01_presence.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. """Tests for SD123 Human Presence Radar HPR01"""
  2. from homeassistant.components.binary_sensor import BinarySensorDeviceClass
  3. from ..const import SD123_PRESENCE_PAYLOAD
  4. from ..mixins.binary_sensor import BasicBinarySensorTests
  5. from ..mixins.light import BasicLightTests
  6. from ..mixins.number import MultiNumberTests
  7. from ..mixins.select import MultiSelectTests
  8. from ..mixins.switch import BasicSwitchTests
  9. from .base_device_tests import TuyaDeviceTestCase
  10. PRESENCE_DPS = "1"
  11. SAFERANGE_DPS = "101"
  12. MAXRANGE_DPS = "102"
  13. DELAY_DPS = "103"
  14. MODE_DPS = "104"
  15. UNKNOWN105_DPS = "105"
  16. LIGHT_DPS = "106"
  17. TRIGPOW_DPS = "107"
  18. MAINTPOW_DPS = "108"
  19. TRIGFRAME_DPS = "109"
  20. INTFRAME_DPS = "110"
  21. UNKNOWN111_DPS = "111"
  22. TRIGPOINT_DPS = "112"
  23. MAINTPOINT_DPS = "113"
  24. SWITCH_DPS = "114"
  25. class TestSD123HumanPresenceRadar(
  26. BasicBinarySensorTests,
  27. BasicLightTests,
  28. BasicSwitchTests,
  29. MultiNumberTests,
  30. MultiSelectTests,
  31. TuyaDeviceTestCase,
  32. ):
  33. __test__ = True
  34. def setUp(self):
  35. self.setUpForConfig("sd123_hpr01_presence.yaml", SD123_PRESENCE_PAYLOAD)
  36. self.setUpBasicBinarySensor(
  37. PRESENCE_DPS,
  38. self.entities.get("binary_sensor_occupancy"),
  39. device_class=BinarySensorDeviceClass.OCCUPANCY,
  40. testdata=("presence", "none"),
  41. )
  42. self.setUpBasicLight(
  43. LIGHT_DPS,
  44. self.entities.get("light_indicator"),
  45. testdata=("normal", "slient"),
  46. )
  47. self.setUpBasicSwitch(SWITCH_DPS, self.entities.get("switch"))
  48. self.setUpMultiNumber(
  49. [
  50. {
  51. "name": "number_trigger_power",
  52. "dps": TRIGPOW_DPS,
  53. "max": 5000,
  54. "step": 100,
  55. },
  56. {
  57. "name": "number_maintain_power",
  58. "dps": MAINTPOW_DPS,
  59. "max": 5000,
  60. "step": 100,
  61. },
  62. {
  63. "name": "number_trigger_frames",
  64. "dps": TRIGFRAME_DPS,
  65. "max": 20,
  66. },
  67. {
  68. "name": "number_interrupt_frames",
  69. "dps": INTFRAME_DPS,
  70. "max": 20,
  71. },
  72. {
  73. "name": "number_trigger_points",
  74. "dps": TRIGPOINT_DPS,
  75. "max": 10,
  76. },
  77. {
  78. "name": "number_maintain_points",
  79. "dps": MAINTPOINT_DPS,
  80. "max": 10,
  81. },
  82. ],
  83. )
  84. self.setUpMultiSelect(
  85. [
  86. {
  87. "name": "select_safe_range",
  88. "dps": SAFERANGE_DPS,
  89. "options": {
  90. "0_meters": "0m",
  91. "1_meters": "1m",
  92. "2_meters": "2m",
  93. "3_meters": "3m",
  94. "4_meters": "4m",
  95. "5_meters": "5m",
  96. "6_meters": "6m",
  97. },
  98. },
  99. {
  100. "name": "select_max_range",
  101. "dps": MAXRANGE_DPS,
  102. "options": {
  103. "0_meters": "0m",
  104. "1_meters": "1m",
  105. "2_meters": "2m",
  106. "3_meters": "3m",
  107. "4_meters": "4m",
  108. "5_meters": "5m",
  109. "6_meters": "6m",
  110. "7_meters": "7m",
  111. },
  112. },
  113. {
  114. "name": "select_delay",
  115. "dps": DELAY_DPS,
  116. "options": {
  117. "case_0": "10s",
  118. "case_1": "30s",
  119. "case_2": "1m",
  120. "case_3": "2m",
  121. "case_4": "5m",
  122. "case_5": "10m",
  123. "case_6": "30m",
  124. },
  125. },
  126. {
  127. "name": "select_configuration",
  128. "dps": MODE_DPS,
  129. "options": {
  130. "case_0": "Sleep/Micro motion",
  131. "case_1": "Meeting/Office",
  132. "case_2": "Classroom/Corridor",
  133. "case_3": "Custom",
  134. },
  135. },
  136. ],
  137. )
  138. self.mark_secondary(
  139. [
  140. "light_indicator",
  141. "number_interrupt_frames",
  142. "number_maintain_points",
  143. "number_maintain_power",
  144. "number_trigger_frames",
  145. "number_trigger_points",
  146. "number_trigger_power",
  147. "select_configuration",
  148. "select_delay",
  149. "select_max_range",
  150. "select_safe_range",
  151. "switch",
  152. ]
  153. )
  154. def test_basic_bsensor_extra_state_attributes(self):
  155. self.dps[UNKNOWN105_DPS] = "unknown_105"
  156. self.dps[UNKNOWN111_DPS] = 111
  157. self.assertDictEqual(
  158. self.basicBSensor.extra_state_attributes,
  159. {"unknown_105": "unknown_105", "unknown_111": 111},
  160. )