Skip to content

Commit dad7137

Browse files
authored
Merge pull request #1352 from SmartThingsCommunity/main
Rolling Main to Beta
2 parents e629932 + ae1ea7d commit dad7137

File tree

12 files changed

+83
-68
lines changed

12 files changed

+83
-68
lines changed

drivers/Aqara/aqara-feeder/src/init.lua

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,12 @@ local PRIVATE_CLUSTER_ID = 0xFCC0
1717
local PRIVATE_ATTR_ID = 0xFFF1
1818
local MFG_CODE = 0x115F
1919

20-
local callback_timer = function(driver, device, cmd)
20+
local function reload_portion(device)
21+
local lastPortion = device:get_latest_state("main", capabilities.feederPortion.ID,
22+
capabilities.feederPortion.feedPortion.NAME) or 0
23+
device:emit_event(capabilities.feederPortion.feedPortion({ value = lastPortion, unit = "servings" }))
24+
end
25+
local callback_feed = function(device)
2126
return function()
2227
device:emit_event(capabilities.feederOperatingState.feederOperatingState("idle"))
2328
end
@@ -64,10 +69,7 @@ end
6469
-- [[ capability_handlers ]]
6570
local function do_refresh(driver, device)
6671
-- refresh
67-
local lastPortion = device:get_latest_state("main", capabilities.feederPortion.ID,
68-
capabilities.feederPortion.feedPortion.NAME) or 0
69-
device:emit_event(capabilities.feederPortion.feedPortion({ value = lastPortion, unit = "servings" },
70-
{ state_change = true }))
72+
reload_portion(device)
7173
do_payload(device, 8, 0, 2001, OP_REPORT, 1, 0)
7274
device:emit_event(capabilities.feederOperatingState.feederOperatingState("idle"))
7375
end
@@ -104,23 +106,25 @@ local function petFeeder_handler(driver, device, value, zb_rx)
104106
elseif funcID == "14.92.85" then
105107
-- feed portion
106108
device:emit_event(capabilities.feederPortion.feedPortion({ value = conv_data(param), unit = "servings" }))
107-
elseif funcID == "13.104.85" then
108-
local feed_source = device:get_field(FEED_SOURCE)
109+
elseif funcID == "13.104.85" and conv_data(param) ~= 0 then
110+
local feed_source = device:get_field(FEED_SOURCE) or 0
109111
if feed_source == 0 then
110112
device:emit_event(capabilities.feederOperatingState.feederOperatingState("feeding"))
111113
end
112114
device:set_field(FEED_SOURCE, 0, { persist = true })
113115
delete_timer(device)
114-
device:set_field(FEED_TIMER, device.thread:call_with_delay(FEED_TIME, callback_timer(driver, device)))
116+
device:set_field(FEED_TIMER, device.thread:call_with_delay(FEED_TIME, callback_feed(device)))
117+
elseif funcID == "13.11.85" then
118+
-- error
119+
delete_timer(device)
120+
local evt = "idle"
121+
if conv_data(param) == 1 then evt = "error" end
122+
device:emit_event(capabilities.feederOperatingState.feederOperatingState(evt))
115123
end
116124
end
117125

118126
-- [[ lifecycle_handlers ]]
119127
local function device_added(driver, device)
120-
-- private protocol enable
121-
device:send(cluster_base.write_manufacturer_specific_attribute(device,
122-
PRIVATE_CLUSTER_ID, 0x0009, MFG_CODE, data_types.Uint8, 1))
123-
-- init
124128
do_payload(device, 4, 24, 85, OP_WRITE, 1, 0)
125129
device:emit_event(capabilities.feederOperatingState.feederOperatingState("idle"))
126130
device:emit_event(capabilities.feederPortion.feedPortion({ value = 1, unit = "servings" }))
@@ -143,6 +147,10 @@ local function device_info_changed(driver, device, event, args)
143147
end
144148

145149
local function device_configure(driver, device)
150+
-- private protocol enable
151+
device:send(cluster_base.write_manufacturer_specific_attribute(device,
152+
PRIVATE_CLUSTER_ID, 0x0009, MFG_CODE, data_types.Uint8, 1))
153+
do_payload(device, 4, 24, 85, OP_WRITE, 1, 0)
146154
end
147155

148156
-- [[ Registration ]]

drivers/Aqara/aqara-feeder/src/test/test_aqara_pet_feeder.lua

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,6 @@ test.register_coroutine_test(
5151
test.socket.zigbee:__set_channel_ordering("relaxed")
5252
test.socket.capability:__set_channel_ordering("relaxed")
5353
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "added" })
54-
test.socket.zigbee:__expect_send({ mock_device.id,
55-
cluster_base.write_manufacturer_specific_attribute(mock_device, PRIVATE_CLUSTER_ID, 0x0009, MFG_CODE, data_types.Uint8, 1) })
5654
test.socket.zigbee:__expect_send({ mock_device.id, cluster_base.write_manufacturer_specific_attribute(mock_device,
5755
PRIVATE_CLUSTER_ID, PRIVATE_ATTRIBUTE_ID, MFG_CODE, data_types.OctetString, "\x00\x02\x01\x04\x18\x00\x55\x01\x00") })
5856
test.socket.capability:__expect_send(mock_device:generate_test_message("main",
@@ -69,7 +67,7 @@ test.register_coroutine_test(
6967
function()
7068
test.socket.capability:__queue_receive({ mock_device.id, { capability = "refresh", component = "main", command = "refresh", args = {} } })
7169
test.socket.capability:__expect_send(mock_device:generate_test_message("main",
72-
capabilities.feederPortion.feedPortion({value=0, unit="servings"}, {state_change=true})))
70+
capabilities.feederPortion.feedPortion({value=0, unit="servings"})))
7371
test.socket.zigbee:__expect_send({ mock_device.id, cluster_base.write_manufacturer_specific_attribute(mock_device,
7472
PRIVATE_CLUSTER_ID, PRIVATE_ATTRIBUTE_ID, MFG_CODE, data_types.OctetString, "\x00\x05\x01\x08\x00\x07\xD1\x01\x00") })
7573
test.socket.capability:__expect_send(mock_device:generate_test_message("main",

drivers/SmartThings/matter-switch/fingerprints.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,11 @@ matterManufacturer:
273273
vendorId: 0x1168
274274
productId: 0x03f8
275275
deviceProfileName: light-color-level-1800K-6500K
276-
276+
- id: "4456/1011"
277+
deviceLabel: Smart Light Bulb A60
278+
vendorId: 0x1168
279+
productId: 0x03F3
280+
deviceProfileName: light-color-level-1800K-6500K
277281
#WiZ
278282
- id: "WiZ A19"
279283
deviceLabel: WiZ A19

drivers/SmartThings/philips-hue/src/handlers.lua

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,34 @@ local function do_color_action(driver, device, args)
166166
end
167167
end
168168

169+
-- Function to allow changes to "setHue" attribute to Philips Hue light devices
170+
---@param driver HueDriver
171+
---@param device HueChildDevice
172+
local function do_setHue_action(driver, device, args)
173+
174+
-- Use existing 'saturation' value for device or set to 0 and pass arg values to function 'do_color_action'
175+
local currentSaturation = device:get_latest_state("main", capabilities.colorControl.ID, capabilities.colorControl.saturation.NAME, 0)
176+
args.args.color = {
177+
hue = args.args.hue,
178+
saturation = currentSaturation
179+
}
180+
do_color_action(driver, device, args)
181+
end
182+
183+
-- Function to allow changes to "setSaturation" attribute to Philips Hue light devices
184+
---@param driver HueDriver
185+
---@param device HueChildDevice
186+
local function do_setSaturation_action(driver, device, args)
187+
188+
-- Use existing 'hue' value for device or set to 0 and pass arg values to function 'do_color_action'
189+
local currentHue = device:get_latest_state("main", capabilities.colorControl.ID, capabilities.colorControl.hue.NAME, 0)
190+
args.args.color = {
191+
hue = currentHue,
192+
saturation = args.args.saturation
193+
}
194+
do_color_action(driver, device, args)
195+
end
196+
169197
function handlers.kelvin_to_mirek(kelvin) return 1000000 / kelvin end
170198

171199
function handlers.mirek_to_kelvin(mirek) return 1000000 / mirek end
@@ -248,6 +276,20 @@ function handlers.set_color_temp_handler(driver, device, args)
248276
do_color_temp_action(driver, device, args)
249277
end
250278

279+
---@param driver HueDriver
280+
---@param device HueChildDevice
281+
function handlers.set_hue_handler(driver, device, args)
282+
do_setHue_action(driver, device, args)
283+
end
284+
285+
286+
---@param driver HueDriver
287+
---@param device HueChildDevice
288+
function handlers.set_saturation_handler(driver, device, args)
289+
do_setSaturation_action(driver, device, args)
290+
end
291+
292+
251293
---@param driver HueDriver
252294
---@param light_device HueChildDevice
253295
---@param conn_status_cache table|nil

drivers/SmartThings/philips-hue/src/init.lua

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ local switch_on_handler = safe_wrap_handler(handlers.switch_on_handler)
7070
local switch_off_handler = safe_wrap_handler(handlers.switch_off_handler)
7171
local switch_level_handler = safe_wrap_handler(handlers.switch_level_handler)
7272
local set_color_handler = safe_wrap_handler(handlers.set_color_handler)
73+
local set_hue_handler = safe_wrap_handler(handlers.set_hue_handler)
74+
local set_saturation_handler = safe_wrap_handler(handlers.set_saturation_handler)
7375
local set_color_temp_handler = safe_wrap_handler(handlers.set_color_temp_handler)
7476

7577
---@param light_device HueChildDevice
@@ -1509,6 +1511,8 @@ local hue = Driver("hue",
15091511
},
15101512
[capabilities.colorControl.ID] = {
15111513
[capabilities.colorControl.commands.setColor.NAME] = set_color_handler,
1514+
[capabilities.colorControl.commands.setHue.NAME] = set_hue_handler,
1515+
[capabilities.colorControl.commands.setSaturation.NAME] = set_saturation_handler,
15121516
},
15131517
[capabilities.colorTemperature.ID] = {
15141518
[capabilities.colorTemperature.commands.setColorTemperature.NAME] = set_color_temp_handler,

drivers/SmartThings/zigbee-switch/src/aqara-light/init.lua

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,15 @@ local function do_refresh(self, device)
3333
end
3434

3535
local function do_configure(self, device)
36-
device:send(ColorControl.commands.MoveToColorTemperature(device, 200, 0x0000))
3736
device:configure()
38-
do_refresh(self, device)
39-
end
40-
41-
local function device_added(driver, device, event)
4237
device:send(cluster_base.write_manufacturer_specific_attribute(device,
4338
PRIVATE_CLUSTER_ID, PRIVATE_ATTRIBUTE_ID, MFG_CODE, data_types.Uint8, 1)) -- private
4439

4540
device:send(Level.attributes.OnTransitionTime:write(device, 0))
4641
device:send(Level.attributes.OffTransitionTime:write(device, 0))
42+
device:send(ColorControl.commands.MoveToColorTemperature(device, 200, 0x0000))
43+
44+
do_refresh(self, device)
4745
end
4846

4947
local function set_level_handler(driver, device, cmd)
@@ -56,7 +54,6 @@ end
5654
local aqara_light_handler = {
5755
NAME = "Aqara Light Handler",
5856
lifecycle_handlers = {
59-
added = device_added,
6057
doConfigure = do_configure
6158
},
6259
capability_handlers = {

drivers/SmartThings/zigbee-switch/src/aqara/init.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,8 @@ local function private_mode_handler(driver, device, value, zb_rx)
142142
device:set_field(PRIVATE_MODE, value.value, { persist = true })
143143

144144
if value.value ~= 1 then
145+
device:send(cluster_base.write_manufacturer_specific_attribute(device,
146+
PRIVATE_CLUSTER_ID, PRIVATE_ATTRIBUTE_ID, MFG_CODE, data_types.Uint8, 0x01)) -- private
145147
device:send(SimpleMetering.attributes.CurrentSummationDelivered:configure_reporting(device, 900, 3600, 1)) -- minimal interval : 15min
146148
device:set_field(constants.ELECTRICAL_MEASUREMENT_DIVISOR_KEY, 10, { persist = true })
147149
device:set_field(constants.SIMPLE_METERING_DIVISOR_KEY, 1000, { persist = true })
@@ -225,8 +227,6 @@ local function device_added(driver, device)
225227
device:emit_event(capabilities.powerMeter.power({ value = 0.0, unit = "W" }))
226228
device:emit_event(capabilities.energyMeter.energy({ value = 0.0, unit = "Wh" }))
227229

228-
device:send(cluster_base.write_manufacturer_specific_attribute(device,
229-
PRIVATE_CLUSTER_ID, PRIVATE_ATTRIBUTE_ID, MFG_CODE, data_types.Uint8, 0x01)) -- private
230230
end
231231

232232
local aqara_switch_handler = {

drivers/SmartThings/zigbee-switch/src/test/test_aqara_led_bulb.lua

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,10 @@ end
5353
test.set_test_init_function(test_init)
5454

5555
test.register_coroutine_test(
56-
"Handle added lifecycle",
56+
"Configure should configure all necessary attributes and refresh device",
5757
function()
58-
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "added" })
58+
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "doConfigure" })
59+
test.socket.zigbee:__set_channel_ordering("relaxed")
5960

6061
test.socket.zigbee:__expect_send(
6162
{
@@ -66,15 +67,6 @@ test.register_coroutine_test(
6667
)
6768
test.socket.zigbee:__expect_send({ mock_device.id, Level.attributes.OnTransitionTime:write(mock_device, 0) })
6869
test.socket.zigbee:__expect_send({ mock_device.id, Level.attributes.OffTransitionTime:write(mock_device, 0) })
69-
end
70-
)
71-
72-
test.register_coroutine_test(
73-
"Configure should configure all necessary attributes and refresh device",
74-
function()
75-
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "doConfigure" })
76-
test.socket.zigbee:__set_channel_ordering("relaxed")
77-
7870
test.socket.zigbee:__expect_send(
7971
{
8072
mock_device.id,

drivers/SmartThings/zigbee-switch/src/test/test_aqara_light.lua

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,10 @@ end
5454
test.set_test_init_function(test_init)
5555

5656
test.register_coroutine_test(
57-
"Handle added lifecycle",
57+
"Configure should configure all necessary attributes and refresh device",
5858
function()
59-
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "added" })
59+
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "doConfigure" })
60+
test.socket.zigbee:__set_channel_ordering("relaxed")
6061

6162
test.socket.zigbee:__expect_send(
6263
{
@@ -67,15 +68,6 @@ test.register_coroutine_test(
6768
)
6869
test.socket.zigbee:__expect_send({ mock_device.id, Level.attributes.OnTransitionTime:write(mock_device, 0) })
6970
test.socket.zigbee:__expect_send({ mock_device.id, Level.attributes.OffTransitionTime:write(mock_device, 0) })
70-
end
71-
)
72-
73-
test.register_coroutine_test(
74-
"Configure should configure all necessary attributes and refresh device",
75-
function()
76-
test.socket.device_lifecycle:__queue_receive({ mock_device.id, "doConfigure" })
77-
test.socket.zigbee:__set_channel_ordering("relaxed")
78-
7971
test.socket.zigbee:__expect_send(
8072
{
8173
mock_device.id,

drivers/SmartThings/zigbee-switch/src/test/test_aqara_smart_plug.lua

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -87,13 +87,6 @@ test.register_coroutine_test(
8787
test.socket.capability:__expect_send(
8888
mock_device:generate_test_message("main", capabilities.energyMeter.energy({ value = 0.0, unit = "Wh" }))
8989
)
90-
test.socket.zigbee:__expect_send(
91-
{
92-
mock_device.id,
93-
cluster_base.write_manufacturer_specific_attribute(mock_device, PRIVATE_CLUSTER_ID, PRIVATE_ATTRIBUTE_ID
94-
, MFG_CODE, data_types.Uint8, 1)
95-
}
96-
)
9790
end
9891
)
9992

drivers/SmartThings/zigbee-switch/src/test/test_aqara_smart_plug_t1.lua

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -88,13 +88,6 @@ test.register_coroutine_test(
8888
test.socket.capability:__expect_send(
8989
mock_device:generate_test_message("main", capabilities.energyMeter.energy({ value = 0.0, unit = "Wh" }))
9090
)
91-
test.socket.zigbee:__expect_send(
92-
{
93-
mock_device.id,
94-
cluster_base.write_manufacturer_specific_attribute(mock_device, PRIVATE_CLUSTER_ID, PRIVATE_ATTRIBUTE_ID
95-
, MFG_CODE, data_types.Uint8, 1)
96-
}
97-
)
9891
end
9992
)
10093

drivers/SmartThings/zigbee-switch/src/test/test_aqara_switch_module.lua

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ local AnalogInput = clusters.AnalogInput
2626

2727
local MFG_CODE = 0x115F
2828
local PRIVATE_CLUSTER_ID = 0xFCC0
29-
local PRIVATE_ATTRIBUTE_ID = 0x0009
3029
local RESTORE_POWER_STATE_ATTRIBUTE_ID = 0x0201
3130
local ELECTRIC_SWITCH_TYPE_ATTRIBUTE_ID = 0x000A
3231

@@ -68,13 +67,6 @@ test.register_coroutine_test(
6867
test.socket.capability:__expect_send(
6968
mock_device:generate_test_message("main", capabilities.energyMeter.energy({ value = 0.0, unit = "Wh" }))
7069
)
71-
test.socket.zigbee:__expect_send(
72-
{
73-
mock_device.id,
74-
cluster_base.write_manufacturer_specific_attribute(mock_device, PRIVATE_CLUSTER_ID, PRIVATE_ATTRIBUTE_ID
75-
, MFG_CODE, data_types.Uint8, 1)
76-
}
77-
)
7870
end
7971
)
8072

0 commit comments

Comments
 (0)