Files
community-plugins/um5606_fan_state/fan_state_bar.luau
T
Kainoa KanterandGitHub b1f9588bfd ASUS UM5606 Fan State plugin (#21)
* ASUS fan state plugin

* submission guidelines

* fix validation ci

* fix label

* Update plugin.toml

* update thumbnail categories
2026-07-15 20:25:22 -04:00

70 lines
2.0 KiB
Luau

-- ASUS UM5606 Fan State - bar widget (thin presentation client).
--
-- The fan control logic lives in the [[service]] (fan_state_service.luau), which
-- runs for the whole session. This widget only reflects the published "status"
-- and cycles states by writing to the "command" channel.
local showLabel = noctalia.getConfig("show_label")
local STATES = {
[0] = { label = "Standard", glyph = "car-fan", color = "on_surface" },
[1] = { label = "Quiet", glyph = "car-fan-1", color = "secondary" },
[2] = { label = "High-Performance", glyph = "car-fan-2", color = "tertiary" },
[3] = { label = "Full", glyph = "car-fan-3", color = "primary" },
}
local fanState = -1
local available = false
local function send(action)
noctalia.state.set("command", action)
end
local function applyState(state)
local info = STATES[state]
if not info then
barWidget.setGlyph("car-fan")
if showLabel then
barWidget.setText("Unknown")
end
barWidget.setGlyphColor("on_surface")
barWidget.setColor("on_surface")
return
end
barWidget.setGlyph(info.glyph)
if showLabel then
barWidget.setText(info.label)
end
barWidget.setGlyphColor(info.color)
barWidget.setColor(info.color)
end
local function applyStatus(status)
if type(status) == "table" then
fanState = tonumber(status.state) or -1
available = status.available and true or false
end
if not available then
barWidget.setGlyph("car-fan")
if showLabel then
barWidget.setText("Unavailable")
end
barWidget.setGlyphColor("on_surface_variant")
barWidget.setColor("on_surface_variant")
return
end
applyState(fanState)
end
function onClick()
if not available then return end
send("cycle")
end
-- Sync the current status on load, then track changes.
applyStatus(noctalia.state.get("status"))
noctalia.state.watch("status", applyStatus)