원클릭으로
cloud-poll-refresh-on-save
Cloud polling drivers should call refresh() from updated() for immediate user feedback
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Cloud polling drivers should call refresh() from updated() for immediate user feedback
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 | Cloud Poll Refresh-on-Save |
| description | Cloud polling drivers should call refresh() from updated() for immediate user feedback |
| domain | cloud-drivers, user-experience, polling |
| confidence | high |
| source | validated in PurpleAir v0.4.0 (commit 2d62b05) and production Fully Kiosk polling |
When a user adjusts a cloud polling driver's settings (e.g., polling interval, API credentials, sensor ID) and clicks "Save Preferences", they expect to see updated data immediately, not wait for the next scheduled poll.
Without this pattern, users wait 5–60 minutes for a manual poll—degraded UX and higher support burden.
void updated() {
log.debug "Preferences updated"
unschedule() // Cancel all pending scheduled tasks
// Re-register polling schedule
schedulePolling()
// KEY: Trigger immediate refresh so user sees updated data
refresh()
}
void schedulePolling() {
Integer intervalMinutes = settings.pollInterval?.toString()?.toInteger() ?: 60
if (intervalMinutes != 0) {
switch(intervalMinutes) {
case 1: runEvery1Minute("refresh"); break
case 5: runEvery5Minutes("refresh"); break
case 15: runEvery15Minutes("refresh"); break
case 30: runEvery30Minutes("refresh"); break
default: runEveryNMinutes(intervalMinutes, "refresh")
}
}
}
void refresh() {
// Async HTTP call to API
asynchttpGet("httpResponse", [...]
}
Applied in PurpleAir AQI v0.4.0 (commit 2d62b05):
updated() calls unschedule() then refresh() after re-registering polling scheduledrivers/purpleair-aqi/purpleair-aqi.groovy lines 100–125 (v0.4.0)Applied in Fully Kiosk Browser Controller (polling mode):
updated() refreshes device status immediately after saving interval preference❌ No refresh on save:
void updated() {
unschedule()
schedulePolling()
// User waits until next scheduled poll to see updated data
}
❌ Conditional refresh that breaks when polling is disabled:
void updated() {
unschedule()
schedulePolling()
if (pollInterval != 0) {
refresh() // If user just set polling to "disabled", no refresh happens
}
}
Better: Always call refresh() unconditionally; let refresh() itself guard disabled state if needed.
❌ Refresh before rescheduling:
void updated() {
refresh() // May race with old scheduler
unschedule()
schedulePolling()
}
Better: Reschedule first, then refresh.