Community寫作與編輯github.com

KoBa-beep/ClaudeCode-Skill

在 Fibaro Home Center 3 / Yubii Home (HC3, 韌體 5.x) 上撰寫與除錯 Lua 場景 — 涵蓋宣告(觸發條件與條件 — 裝置、排程、日出/日落、全域變數、自訂事件、中央場景按鈕)、動作程式碼、sourceTrigger、場景變數、重新啟動選項,以及場景與 QuickApp 的選擇。當使用者想要自動化、規則、HC3 上的「當 X 發生時執行 Y」、將積木場景轉換為 Lua、詢問場景為何沒有啟動,或提及 fibaro 場景(即使未包含「Lua」字眼)時,請使用此技能。

ClaudeCode-Skill 是什麼?

這個技能讓 AI 助理能夠在 Fibaro Home Center 3 / Yubii Home 平台上,協助使用者撰寫與除錯 Lua 場景。它在為基於 AI 的除錯與程式碼產生工具(如 Claude Code、Coder 或自訂代理程式)提供指引時特別有用,涵蓋 HC3 Lua 場景開發的所有關鍵面向。技能會引導 AI 判斷使用者需求應該使用「場景」還是「QuickApp」,解釋宣告(觸發器與條件)與動作程式碼的雙重結構,並提供多種條件類型的詳細宣告語法,包括裝置、排程、日出/日落、全域變數、自訂事件和中央場景按鈕。它也包含了處理常見陷阱的指引,例如場景缺乏記憶體、錯誤的重新啟動設定、觸發器只在變化時觸發,以及資料型別問題。最後,技能指示產出可直接貼上的宣告區塊與動作區塊、場景選項、需取代的 ID 以及測試步驟,讓場景開發更可靠且易於除錯。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/KoBa-beep/ClaudeCode-Skill/tree/HEAD/fibaro-hc3/hc3-lua-scenes

Installed? Explore more 寫作與編輯 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

HC3 Lua 場景

以使用者的語言回答;識別碼保留英文。向初學者說明點擊位置。

場景還是 QuickApp?

需求場景QuickApp
對事件(按鈕、門、時間、變數)做出反應並執行少數動作✅較重
在記憶體中保持狀態、持續執行、與裝置通訊(HTTP、TCP、MQTT)❌ 每次執行從頭開始✅
在使用者介面中顯示按鈕/標籤❌✅
經驗法則:QuickApp 是驅動程式,場景透過呼叫 QA 方法來串連動作
(fibaro.call(qaId, "setMode", "Away"))。對於 QuickApp 請使用 hc3-quickapp 技能。

兩個部分

  1. 宣告(條件/觸發器):一個 Lua 表格,非程式碼 — 定義何時場景啟動。
  2. 動作:每次啟動時執行的 Lua 程式碼。 給使用者的提示:先在積木模式下建立場景,然後「轉換為 Lua」:HC3 會產生精確的宣告(屬性 名稱、星期編號)。轉換是單向的。

宣告

{
  operator = "all",               -- "all" (AND) | "any" (OR);條件群組可嵌套
  conditions = {
    { type = "device", id = 201, property = "value", operator = "==", value = true, isTrigger = true },
    { type = "date", property = "cron", operator = "match", value = {"*", "*", "*", "*", "*", "*"}, isTrigger = false },
  }
}
  • isTrigger = true:此條件的改變會啟動場景(然後評估所有條件); false:僅作為過濾條件。至少需要一個觸發器,否則場景永遠不會自行啟動。
  • 運算子:==、!=、>、>=、<、<=、anyValue(任何改變)、match(日期)。
  • 在裝置條件中的 duration = 60:必須持續滿足 60 秒 [V](在轉換後的積木場景中可見)。 條件類型與範例:references/declarations.md(裝置、中央場景按鈕、排程、日出/日落、 全域變數、自訂事件、警報、位置、天氣、HC3 啟動)。

動作

fibaro.debug("MyScene", json.encode(sourceTrigger))      -- 開發時的第一行:查看是什麼啟動了場景
if sourceTrigger.type == "device" then                    -- .id、.property、.value
elseif sourceTrigger.type == "date" then
elseif sourceTrigger.type == "user" then                  -- 手動啟動(執行按鈕、App)
end

函式:fibaro.call、fibaro.getValue、fibaro.get(值 + 時間戳)、fibaro.getGlobalVariable / setGlobalVariable(字串)、fibaro.getSceneVariable / setSceneVariable(在同一個場景的不同執行之間持久化)、 fibaro.alert、fibaro.emitCustomEvent、fibaro.scene("execute"|"kill", {ids})、fibaro.profile、fibaro.alarm、 fibaro.setTimeout(ms, fn)、api.*、net.HTTPClient、json。日誌需要一個標籤:fibaro.debug("Tag", "msg")。 通知:規則與 QuickApp 相同(使用者 vs 手機 ID,無重大推播) — 請參閱 hc3-quickapp 技能、 references/notifications.md。

陷阱(回答「我的場景無法運作」前請閱讀)

  1. 執行之間沒有記憶體 → 使用場景變數或全域變數。
  2. **「允許重新啟動正在執行的場景」**選項:是 = 新的觸發器會終止正在執行的實例(等待中的 setTimeout 會遺失)並重新開始 — 適用於「最後一次動作後 5 分鐘關燈」;否 = 場景執行期間 (包括 setTimeout 等待時)會忽略觸發器。
  3. 手動模式會忽略宣告。
  4. 觸發器僅在改變時觸發:同樣的值再次出現 → 不會觸發。
  5. 值的型別:開關 true/false、調光器/窗簾 0–99、感測器數值;全域變數永遠是字串 (== "1",不是 == 1);在宣告中寫 value = true 不加引號。
  6. 一個改變自身觸發裝置的場景可能造成迴圈:使用 sourceTrigger 過濾。
  7. 只有裝置屬性能觸發場景;QuickApp 的內部變數不會觸發(但全域變數會, 且 QA 屬性更新如 value 會觸發)。
  8. 避免使用 while true / 長時間 fibaro.sleep:使用觸發器、setTimeout 或 QuickApp。
  9. 排程中的星期編號與某些屬性名稱可能不同:請檢查轉換後的積木場景 [V]。

產出內容

宣告區塊 + 動作區塊(分開且可直接貼上)、需要設定的場景選項(重新啟動是/否、 自動模式、房間)、需要取代的 ID(ID_DOOR_SENSOR…)或來自使用者庫存的真實 ID, 以及測試步驟(「打開門,場景的主控台會顯示…」)。完整範例:references/examples.md。

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

相關技能