一键导入
hubitat-heat-only-thermostat
Capability profile and architecture patterns for heat-only thermostat drivers (electric floor heating, baseboard heat) on Hubitat.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Capability profile and architecture patterns for heat-only thermostat drivers (electric floor heating, baseboard heat) on Hubitat.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Pattern for keeping a rolling temperature-trend sample buffer in Hubitat state, computing slope over a configurable window, and classifying rising/falling/steady/unknown.
Implement Tuya Local v3.3 Groovy drivers on Hubitat using rawSocket, AES-128-ECB, queued retries, and defensive frame parsing.
Use Hubitat async HTTP plus a request queue to authenticate with Cognito, cache tokens in state, refresh proactively, and replay a single 401-failed request.
When two agents produce overlapping skills in one session, consolidate by merging unique content into the highest-confidence existing skill.
Never let cached-state dedup bypass session validity in cloud-backed Hubitat drivers.
Standard guard pattern for async HTTP response callbacks in Hubitat drivers
| name | hubitat-heat-only-thermostat |
| description | Capability profile and architecture patterns for heat-only thermostat drivers (electric floor heating, baseboard heat) on Hubitat. |
| domain | groovy |
| confidence | high |
| source | earned |
This skill applies when writing a Hubitat driver for a heat-only thermostat device — one that heats but does not cool and has no fan. Examples: SunStat/SunTouch electric floor heating, Stelpro baseboard heaters.
Declare Thermostat (combo) — not individual thermostat capabilities.
The Thermostat capability is required for:
Individual capabilities (ThermostatHeatingSetpoint, ThermostatMode, etc.) alone produce a generic device tile and miss voice/RM integration.
Constrain the combo surface with attribute initialization:
sendEvent(name: "supportedThermostatModes", value: JsonOutput.toJson(["heat", "off"]))
sendEvent(name: "supportedThermostatFanModes", value: JsonOutput.toJson(["auto"]))
Set these in installed(). Hubitat's dashboard and voice integrations respect these lists and hide unavailable modes.
| Capability | Include? | Notes |
|---|---|---|
Actuator | ✅ | Required base |
Sensor | ✅ | Required base |
Thermostat | ✅ | Full combo for dashboard/RM/voice |
TemperatureMeasurement | ✅ | Ambient temperature attribute |
Refresh | ✅ | Manual state poll |
Initialize | ✅ | Re-register polling on hub restart |
ThermostatCoolingSetpoint | ❌ | Heat-only — skip |
ThermostatFanMode | ❌ | No fan — skip |
ThermostatSchedule | ❌ | Hubitat's shape is undefined; leave to Rule Machine |
Minimum mode set for a heat-only device:
["heat", "off"]
"auto" only if the device exposes a schedule-following mode through the API as a distinct state."emergency heat" for timed boost/override — use a custom setBoost(minutes) command instead. "emergency heat" carries HVAC-system semantics that confuse voice assistants on single-zone electric devices.For a heat-only device: "heating" and "idle" only. Never emit "cooling", "fan only", "pending heat", or "pending cool".
Many electric floor thermostats have both an ambient sensor and a floor probe sensor. Use:
attribute "floorTemperature", "number" // floor probe
// "temperature" (from TemperatureMeasurement) → ambient
Always emit temperature events with the hub's configured unit:
sendEvent(name: "temperature", value: convertedTemp, unit: location.temperatureScale)
Convert API values (typically Celsius) to Fahrenheit if location.temperatureScale == "F".
drivers/sunstat-thermostat/sunstat-thermostat-child.groovy (planned v0.1.0 scaffold)ThermostatCoolingSetpoint or ThermostatFanMode on a heat-only device."emergency heat" mode instead of a custom boost command.supportedThermostatModes initialization — leaves the dashboard showing all mode options.unit: — Hubitat may display wrong unit in dashboard.