test_sd123_hpr01_presence.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  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. def setUp(self):
  34. self.setUpForConfig("sd123_hpr01_presence.yaml", SD123_PRESENCE_PAYLOAD)
  35. self.setUpBasicBinarySensor(
  36. PRESENCE_DPS,
  37. self.entities.get("binary_sensor_occupancy"),
  38. device_class=BinarySensorDeviceClass.OCCUPANCY,
  39. testdata=("presence", "none"),
  40. )
  41. self.setUpBasicLight(
  42. LIGHT_DPS,
  43. self.entities.get("light_indicator"),
  44. testdata=("normal", "slient"),
  45. )
  46. self.setUpBasicSwitch(SWITCH_DPS, self.entities.get("switch"))
  47. self.setUpMultiNumber(
  48. [
  49. {
  50. "name": "number_trigger_power",
  51. "dps": TRIGPOW_DPS,
  52. "max": 5000,
  53. "step": 100,
  54. },
  55. {
  56. "name": "number_maintain_power",
  57. "dps": MAINTPOW_DPS,
  58. "max": 5000,
  59. "step": 100,
  60. },
  61. {
  62. "name": "number_trigger_frames",
  63. "dps": TRIGFRAME_DPS,
  64. "max": 20,
  65. },
  66. {
  67. "name": "number_interrupt_frames",
  68. "dps": INTFRAME_DPS,
  69. "max": 20,
  70. },
  71. {
  72. "name": "number_trigger_points",
  73. "dps": TRIGPOINT_DPS,
  74. "max": 10,
  75. },
  76. {
  77. "name": "number_maintain_points",
  78. "dps": MAINTPOINT_DPS,
  79. "max": 10,
  80. },
  81. ],
  82. )
  83. self.setUpMultiSelect(
  84. [
  85. {
  86. "name": "select_safe_range",
  87. "dps": SAFERANGE_DPS,
  88. "options": {
  89. "0_meters": "0m",
  90. "1_meters": "1m",
  91. "2_meters": "2m",
  92. "3_meters": "3m",
  93. "4_meters": "4m",
  94. "5_meters": "5m",
  95. "6_meters": "6m",
  96. },
  97. },
  98. {
  99. "name": "select_max_range",
  100. "dps": MAXRANGE_DPS,
  101. "options": {
  102. "0_meters": "0m",
  103. "1_meters": "1m",
  104. "2_meters": "2m",
  105. "3_meters": "3m",
  106. "4_meters": "4m",
  107. "5_meters": "5m",
  108. "6_meters": "6m",
  109. "7_meters": "7m",
  110. },
  111. },
  112. {
  113. "name": "select_delay",
  114. "dps": DELAY_DPS,
  115. "options": {
  116. "case_0": "10s",
  117. "case_1": "30s",
  118. "case_2": "1m",
  119. "case_3": "2m",
  120. "case_4": "5m",
  121. "case_5": "10m",
  122. "case_6": "30m",
  123. },
  124. },
  125. {
  126. "name": "select_configuration",
  127. "dps": MODE_DPS,
  128. "options": {
  129. "case_0": "Sleep/Micro motion",
  130. "case_1": "Meeting/Office",
  131. "case_2": "Classroom/Corridor",
  132. "case_3": "Custom",
  133. },
  134. },
  135. ],
  136. )
  137. self.mark_secondary(
  138. [
  139. "light_indicator",
  140. "number_interrupt_frames",
  141. "number_maintain_points",
  142. "number_maintain_power",
  143. "number_trigger_frames",
  144. "number_trigger_points",
  145. "number_trigger_power",
  146. "select_configuration",
  147. "select_delay",
  148. "select_max_range",
  149. "select_safe_range",
  150. "switch",
  151. ]
  152. )
  153. def test_basic_bsensor_extra_state_attributes(self):
  154. self.dps[UNKNOWN105_DPS] = "unknown_105"
  155. self.dps[UNKNOWN111_DPS] = 111
  156. self.assertDictEqual(
  157. self.basicBSensor.extra_state_attributes,
  158. {"unknown_105": "unknown_105", "unknown_111": 111},
  159. )