diff --git a/.github/workflows/jenkins-driver-tests.yml b/.github/workflows/jenkins-driver-tests.yml index b9fc07f091..6494eadd15 100644 --- a/.github/workflows/jenkins-driver-tests.yml +++ b/.github/workflows/jenkins-driver-tests.yml @@ -9,7 +9,7 @@ jobs: strategy: matrix: version: - [ 59, 60, dev] + [ 59, 60, 61, dev] runs-on: ubuntu-latest steps: diff --git a/drivers/SmartThings/matter-sensor/src/sensor_handlers/attribute_handlers.lua b/drivers/SmartThings/matter-sensor/src/sensor_handlers/attribute_handlers.lua index a81a03b4a6..eaa8730fc4 100644 --- a/drivers/SmartThings/matter-sensor/src/sensor_handlers/attribute_handlers.lua +++ b/drivers/SmartThings/matter-sensor/src/sensor_handlers/attribute_handlers.lua @@ -89,7 +89,8 @@ function AttributeHandlers.soil_moisture_measurement_limits_handler(driver, devi local min_val = ib.data.elements and ib.data.elements.min_measured_value and ib.data.elements.min_measured_value.value local max_val = ib.data.elements and ib.data.elements.max_measured_value and ib.data.elements.max_measured_value.value if not (min_val and max_val) or (min_val >= max_val) or (min_val < sensor_utils.SOIL_MOISTURE_MIN) or (max_val > sensor_utils.SOIL_MOISTURE_MAX) then - device.log.warn_with({hub_logs = true}, string.format("Device reported invalid soil moisture limits: min=%d, max=%d", min_val, max_val)) + device.log.warn_with({hub_logs = true}, string.format("Device reported invalid soil moisture limits: min=%s, max=%s", min_val, max_val)) + return end sensor_utils.set_field_for_endpoint(device, fields.SOIL_LIMIT_MIN, ib.endpoint_id, min_val) sensor_utils.set_field_for_endpoint(device, fields.SOIL_LIMIT_MAX, ib.endpoint_id, max_val) diff --git a/drivers/SmartThings/matter-switch/fingerprints.yml b/drivers/SmartThings/matter-switch/fingerprints.yml index e4602b4178..8637b37713 100644 --- a/drivers/SmartThings/matter-switch/fingerprints.yml +++ b/drivers/SmartThings/matter-switch/fingerprints.yml @@ -557,6 +557,11 @@ matterManufacturer: vendorId: 0x1339 productId: 0x0056 deviceProfileName: light-color-level + - id: "4921/85" + deviceLabel: Dual Socket Smart Plug + vendorId: 0x1339 + productId: 0x0055 + deviceProfileName: plug-binary #Govee - id: "4999/24740" deviceLabel: Govee Square Ceiling Light (12 inch) @@ -4169,6 +4174,12 @@ matterManufacturer: vendorId: 0x1392 productId: 0x0106 deviceProfileName: plug-power-energy-powerConsumption +#GIANT LIGHTING + - id: "5707/1" + deviceLabel: Floor Lamp + vendorId: 0x164B + productId: 0x0001 + deviceProfileName: light-color-level matterGeneric: diff --git a/drivers/SmartThings/philips-hue/src/handlers/commands.lua b/drivers/SmartThings/philips-hue/src/handlers/commands.lua index 6bee932239..2c55f39452 100644 --- a/drivers/SmartThings/philips-hue/src/handlers/commands.lua +++ b/drivers/SmartThings/philips-hue/src/handlers/commands.lua @@ -54,13 +54,14 @@ end ---@param err string? Error message returned from the Hue API call, if any ---@param action_desc string Description of the action being performed, for logging purposes local function log_command_response_errors(response, err, action_desc) - if not response or (response.errors and #response.errors == 0) then - if err ~= nil then - log.error_with({ hub_logs = true }, "Error performing " .. action_desc .. ": " .. err) - elseif response and #response.errors > 0 then - for _, error in ipairs(response.errors) do - log.error_with({ hub_logs = true }, "Error returned in Hue response for " .. action_desc .. ": " .. error.description) - end + if err ~= nil then + log.error_with({ hub_logs = true }, "Error performing " .. action_desc .. ": " .. err) + end + + if response and response.errors and #response.errors > 0 then + for _, error in ipairs(response.errors) do + log.error_with({ hub_logs = true }, + "Error returned in Hue response for " .. action_desc .. ": " .. error.description) end end end diff --git a/drivers/SmartThings/zigbee-lock/fingerprints.yml b/drivers/SmartThings/zigbee-lock/fingerprints.yml index 083dd3a11e..309a0f2883 100644 --- a/drivers/SmartThings/zigbee-lock/fingerprints.yml +++ b/drivers/SmartThings/zigbee-lock/fingerprints.yml @@ -10,6 +10,26 @@ zigbeeManufacturer: manufacturer: GELUBU model: G30 deviceProfileName: lock-battery + - id: "GELUBU/R60" + deviceLabel: GELUBU Door Lock R60 + manufacturer: GELUBU + model: R60 + deviceProfileName: lock-battery + - id: "GELUBU/R50" + deviceLabel: GELUBU Door Lock R50 + manufacturer: GELUBU + model: R50 + deviceProfileName: lock-battery + - id: "GELUBU/P90" + deviceLabel: GELUBU Door Lock P90 + manufacturer: GELUBU + model: P90 + deviceProfileName: lock-battery + - id: "GELUBU/R71" + deviceLabel: GELUBU Door Lock R71 + manufacturer: GELUBU + model: R71 + deviceProfileName: lock-battery # YALE - id: "Yale YRD220/240" deviceLabel: "Yale Door Lock" diff --git a/drivers/SmartThings/zigbee-switch/src/test/test_firstled_switch.lua b/drivers/SmartThings/zigbee-switch/src/test/test_firstled_switch.lua index 3a3c4782ea..a9bc2ac8fe 100644 --- a/drivers/SmartThings/zigbee-switch/src/test/test_firstled_switch.lua +++ b/drivers/SmartThings/zigbee-switch/src/test/test_firstled_switch.lua @@ -195,7 +195,7 @@ test.register_coroutine_test("infoChanged - backlight 0", function() }) end, { - min_api_version = 19 + min_api_version = 20 } ) @@ -206,7 +206,7 @@ test.register_coroutine_test("infoChanged - backlight 1", function() }) end, { - min_api_version = 19 + min_api_version = 20 } ) @@ -217,7 +217,7 @@ test.register_coroutine_test("infoChanged - backlight 2", function() }) end, { - min_api_version = 19 + min_api_version = 20 } ) @@ -228,18 +228,18 @@ test.register_coroutine_test("infoChanged - powerOnStatus 0", function() }) end, { - min_api_version = 19 + min_api_version = 20 } ) -test.register_coroutine_test("infoChanged - powerOnStatus", function() +test.register_coroutine_test("infoChanged - powerOnStatus 1", function() test.socket.device_lifecycle:__queue_receive(mock_parent:generate_info_changed({ preferences = { powerOnStatus = "1" }})) test.socket.zigbee:__expect_send({ mock_parent.id, cluster_base.write_manufacturer_specific_attribute(mock_parent, PRIVATE_CLUSTER_ID, 0x0001, MFG_CODE, data_types.Uint8, 1) }) end, { - min_api_version = 19 + min_api_version = 20 } ) @@ -250,7 +250,7 @@ test.register_coroutine_test("infoChanged - powerOnStatus 2", function() }) end, { - min_api_version = 19 + min_api_version = 20 } ) @@ -262,7 +262,7 @@ test.register_coroutine_test("infoChanged - stse.changeToWirelessSwitch true", f mock_parent:expect_metadata_update({ profile = "switch-button-light-restore-wireless" }) end, { - min_api_version = 19 + min_api_version = 20 } ) @@ -274,7 +274,7 @@ test.register_coroutine_test("infoChanged - stse.changeToWirelessSwitch false", mock_parent:expect_metadata_update({ profile = "switch-light-restore-wireless" }) end, { - min_api_version = 19 + min_api_version = 20 } ) @@ -287,7 +287,7 @@ local function test_child_changeToWirelessSwitch_true(ep, name) mock_children[ep]:expect_metadata_update({ profile = "switch-button-wireless" }) end, { - min_api_version = 19 + min_api_version = 20 } ) end @@ -301,7 +301,7 @@ local function test_child_changeToWirelessSwitch_false(ep, name) mock_children[ep]:expect_metadata_update({ profile = "switch-wireless" }) end, { - min_api_version = 19 + min_api_version = 20 } ) end