Skip to content

Commit 9fc44b4

Browse files
authored
[Aqara] Humidity_temp_sensor Battery capability change (#1853)
* Replace Battery capability into BatteryLevel capability * Remove unnessessary voltage_init statement * Fix battery level voltage condition * Remove unused require field
1 parent 9858c56 commit 9fc44b4

File tree

3 files changed

+127
-8
lines changed

3 files changed

+127
-8
lines changed

drivers/SmartThings/zigbee-humidity-sensor/profiles/humidity-temp-battery-aqara.yml

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ components:
66
version: 1
77
- id: relativeHumidityMeasurement
88
version: 1
9-
- id: battery
9+
- id: batteryLevel
1010
version: 1
1111
- id: firmwareUpdate
1212
version: 1
@@ -19,6 +19,45 @@ preferences:
1919
explicit: true
2020
- preferenceId: humidityOffset
2121
explicit: true
22-
metadata:
23-
mnmn: SolutionsEngineering
24-
vid: SmartThings-smartthings-Aqara_Humidity_Temperature
22+
deviceConfig:
23+
dashboard:
24+
states:
25+
- component: main
26+
capability: temperatureMeasurement
27+
version: 1
28+
group: main
29+
composite: true
30+
- component: main
31+
capability: relativeHumidityMeasurement
32+
version: 1
33+
group: main
34+
values:
35+
- label: " {{humidity.value}} {{humidity.unit}}"
36+
composite: true
37+
actions: []
38+
basicPlus: []
39+
detailView:
40+
- component: main
41+
capability: temperatureMeasurement
42+
version: 1
43+
- component: main
44+
capability: relativeHumidityMeasurement
45+
version: 1
46+
- component: main
47+
capability: batteryLevel
48+
version: 1
49+
- component: main
50+
capability: refresh
51+
version: 1
52+
automation:
53+
conditions:
54+
- component: main
55+
capability: temperatureMeasurement
56+
version: 1
57+
- component: main
58+
capability: relativeHumidityMeasurement
59+
version: 1
60+
- component: main
61+
capability: batteryLevel
62+
version: 1
63+
actions: []

drivers/SmartThings/zigbee-humidity-sensor/src/aqara/init.lua

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
local battery_defaults = require "st.zigbee.defaults.battery_defaults"
21
local clusters = require "st.zigbee.zcl.clusters"
32
local cluster_base = require "st.zigbee.cluster_base"
43
local data_types = require "st.zigbee.data_types"
@@ -53,27 +52,49 @@ local is_aqara_products = function(opts, driver, device)
5352
return false
5453
end
5554

56-
local function device_init(driver, device)
57-
battery_defaults.build_linear_voltage_init(2.6, 3.0)(driver, device)
55+
local function battery_level_handler(driver, device, value, zb_rx)
56+
local voltage = value.value
57+
local batteryLevel = "normal"
58+
if voltage <= 25 then
59+
batteryLevel = "critical"
60+
elseif voltage < 28 then
61+
batteryLevel = "warning"
62+
end
63+
device:emit_event(capabilities.batteryLevel.battery(batteryLevel))
64+
end
5865

66+
local function device_init(driver, device)
5967
if configuration ~= nil then
6068
for _, attribute in ipairs(configuration) do
6169
device:add_configured_attribute(attribute)
6270
device:add_monitored_attribute(attribute)
6371
end
6472
end
73+
74+
local batt_level = device:get_latest_state("main", capabilities.batteryLevel.ID, capabilities.batteryLevel.battery
75+
.NAME) or nil
76+
if batt_level == nil then
77+
device:emit_event(capabilities.batteryLevel.battery.normal())
78+
end
6579
end
6680

6781
local function added_handler(self, device)
6882
device:send(cluster_base.write_manufacturer_specific_attribute(device,
6983
PRIVATE_CLUSTER_ID, PRIVATE_ATTRIBUTE_ID, MFG_CODE, data_types.Uint8, 1))
7084
device:emit_event(capabilities.temperatureMeasurement.temperature({ value = 0, unit = "C" }))
7185
device:emit_event(capabilities.relativeHumidityMeasurement.humidity(0))
72-
device:emit_event(capabilities.battery.battery(100))
86+
device:emit_event(capabilities.batteryLevel.battery("normal"))
7387
end
7488

7589
local aqara_humidity_handler = {
7690
NAME = "Aqara Humidity Handler",
91+
zigbee_handlers = {
92+
attr = {
93+
[PowerConfiguration.ID] = {
94+
[PowerConfiguration.attributes.BatteryVoltage.ID] = battery_level_handler
95+
}
96+
}
97+
},
7798
lifecycle_handlers = {
7899
init = device_init,
79100
added = added_handler

drivers/SmartThings/zigbee-humidity-sensor/src/test/test_aqara_sensor.lua

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ local mock_device = test.mock_device.build_test_zigbee_device(
3939

4040
zigbee_test_utils.prepare_zigbee_env_info()
4141
local function test_init()
42+
test.socket.capability:__expect_send(mock_device:generate_test_message("main",
43+
capabilities.batteryLevel.battery.normal()))
4244
test.mock_device.add_test_device(mock_device)
4345
end
4446

@@ -188,4 +190,61 @@ test.register_coroutine_test(
188190
end
189191
)
190192

193+
test.register_message_test(
194+
"BatteryVoltage report should be handled(normal)",
195+
{
196+
{
197+
channel = "zigbee",
198+
direction = "receive",
199+
message = {
200+
mock_device.id,
201+
PowerConfiguration.attributes.BatteryVoltage:build_test_attr_report(mock_device, 30)
202+
}
203+
},
204+
{
205+
channel = "capability",
206+
direction = "send",
207+
message = mock_device:generate_test_message("main", capabilities.batteryLevel.battery.normal())
208+
}
209+
}
210+
)
211+
212+
test.register_message_test(
213+
"BatteryVoltage report should be handled(critical)",
214+
{
215+
{
216+
channel = "zigbee",
217+
direction = "receive",
218+
message = {
219+
mock_device.id,
220+
PowerConfiguration.attributes.BatteryVoltage:build_test_attr_report(mock_device, 10)
221+
}
222+
},
223+
{
224+
channel = "capability",
225+
direction = "send",
226+
message = mock_device:generate_test_message("main", capabilities.batteryLevel.battery.critical())
227+
}
228+
}
229+
)
230+
231+
test.register_message_test(
232+
"BatteryVoltage report should be handled(warning)",
233+
{
234+
{
235+
channel = "zigbee",
236+
direction = "receive",
237+
message = {
238+
mock_device.id,
239+
PowerConfiguration.attributes.BatteryVoltage:build_test_attr_report(mock_device, 26)
240+
}
241+
},
242+
{
243+
channel = "capability",
244+
direction = "send",
245+
message = mock_device:generate_test_message("main", capabilities.batteryLevel.battery.warning())
246+
}
247+
}
248+
)
249+
191250
test.run_registered_tests()

0 commit comments

Comments
 (0)