Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions drivers/SmartThings/zigbee-smoke-detector/fingerprints.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,8 @@ zigbeeManufacturer:
manufacturer: MultIR
model: MIR-SM200
deviceProfileName: smoke-battery-tamper-no-fw-update
- id: ShinaSystem/FAM-300Z
deviceLabel: SiHAS Smoke Detector
manufacturer: ShinaSystem
model: FAM-300Z
deviceProfileName: smoke-battery
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
-- Copyright 2025 SmartThings, Inc.
-- Licensed under the Apache License, Version 2.0

local function shinasystem_can_handle(opts, driver, device, ...)
if device:get_manufacturer() == "ShinaSystem" and (device:get_model() == "FAM-300Z") then
return true, require("shinasystem")
end
return false
end

return shinasystem_can_handle
34 changes: 34 additions & 0 deletions drivers/SmartThings/zigbee-smoke-detector/src/shinasystem/init.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
-- Copyright 2022 SmartThings, Inc.
-- Licensed under the Apache License, Version 2.0


local zcl_clusters = require "st.zigbee.zcl.clusters"
local IASZone = zcl_clusters.IASZone

local CONFIGURATIONS = {
{
cluster = IASZone.ID,
attribute = IASZone.attributes.ZoneStatus.ID,
minimum_interval = 1,
maximum_interval = 1200, -- Zigbee poll interval is 600s. Added because the default reporting maximum_interval (180s) must be greater than 600s.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you explain the reasoning here? Is this being done to conserve battery, or for some other reason?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. The main reason is to reduce battery consumption.

Additionally, it was set up to prevent the device from unnecessarily going offline. Since the device wakes up every 600 seconds after completing the pairing process, the interval needs to be greater than 600 seconds. Therefore, an appropriate value equal to twice that duration (1,200s) was applied.

data_type = IASZone.attributes.ZoneStatus.base_type,
reportable_change = 1
}
}

local function device_init(driver, device)
if CONFIGURATIONS ~= nil then
for _, attribute in ipairs(CONFIGURATIONS) do
device:add_configured_attribute(attribute)
end
end
end

local shinasystem_smoke_sensor = {
NAME = "shinasystem smoke sensor",
lifecycle_handlers = {
init = device_init
},
can_handle = require("shinasystem.can_handle"),
}
return shinasystem_smoke_sensor
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@ local sub_drivers = {
lazy_load_if_possible("aqara-gas"),
lazy_load_if_possible("aqara"),
lazy_load_if_possible("MultiIR"),
lazy_load_if_possible("shinasystem"),
}
return sub_drivers
Loading