HC3 Lua-Szenen
Antworten in der Sprache des Benutzers; Bezeichner auf Englisch lassen. Anfängern erklären, wo sie klicken müssen.
Szene oder QuickApp?
| Bedarf | Szene | QuickApp |
|---|---|---|
| Auf ein Ereignis reagieren (Taster, Tür, Zeit, Variable) mit wenigen Aktionen | ✅ | schwerfälliger |
| Zustand im Speicher halten, dauerhaft laufen, mit einem Gerät kommunizieren (HTTP, TCP, MQTT) | ❌ startet jedes Mal von Null | ✅ |
| Buttons / Beschriftungen in der Benutzeroberfläche | ❌ | ✅ |
| Faustregel: QuickApps sind die Treiber, Szenen verketten Aktionen durch Aufrufe von QA-Methoden | ||
(fibaro.call(qaId, "setMode", "Away")). Für QuickApps das Skill hc3-quickapp verwenden. |
Zwei Teile
- Deklarationen (Bedingungen / Trigger): eine Lua Tabelle, kein Code – wann die Szene startet.
- Aktionen: Lua-Code, der bei jedem Start ausgeführt wird. Tipp für Benutzer: Die Szene im Blockmodus erstellen, dann „In Lua konvertieren“: Der HC3 schreibt die exakten Deklarationen (Eigenschaftsnamen, Wochentagsnummern). Die Konvertierung ist unidirektional.
Deklarationen
{
operator = "all", -- "all" (UND) | "any" (ODER); Gruppen können verschachtelt werden
conditions = {
{ type = "device", id = 201, property = "value", operator = "==", value = true, isTrigger = true },
{ type = "date", property = "cron", operator = "match", value = {"*", "*", "*", "*", "*", "*"}, isTrigger = false },
}
}
isTrigger = true: eine Änderung dieser Bedingung startet die Szene (dann werden alle Bedingungen ausgewertet);false: dient nur als Filter. Mindestens ein Trigger ist erforderlich, sonst startet die Szene nie von selbst.- Operatoren:
==,!=,>,>=,<,<=,anyValue(jede Änderung),match(Daten). duration = 60in einer Gerätebedingung: muss 60 s lang wahr bleiben [V] (sichtbar in konvertierten Blockszenen). Bedingungstypen und Beispiele:references/declarations.md(Gerät, Central-Scene-Button, Cron, Sonnenaufgang/-untergang, globale Variable, benutzerdefiniertes Ereignis, Alarm, Ort, Wetter, HC3-Start).
Aktionen
fibaro.debug("MyScene", json.encode(sourceTrigger)) -- erste Zeile während der Entwicklung: sehen, was gestartet hat
if sourceTrigger.type == "device" then -- .id, .property, .value
elseif sourceTrigger.type == "date" then
elseif sourceTrigger.type == "user" then -- manuell gestartet (Run-Button, App)
end
Funktionen: fibaro.call, fibaro.getValue, fibaro.get (Wert + Zeitstempel), fibaro.getGlobalVariable /
setGlobalVariable (Zeichenketten), fibaro.getSceneVariable / setSceneVariable (zwischen Läufen derselben Szene erhalten bleiben),
fibaro.alert, fibaro.emitCustomEvent, fibaro.scene("execute"|"kill", {ids}), fibaro.profile, fibaro.alarm,
fibaro.setTimeout(ms, fn), api.*, net.HTTPClient, json. Logs benötigen ein Tag: fibaro.debug("Tag", "msg").
Benachrichtigungen: gleiche Regeln wie QuickApps (Benutzer vs. Telefon-IDs, keine kritischen Pushs) – siehe das Skill hc3-quickapp,
references/notifications.md.
Fallstricke (vor dem Antworten auf „Meine Szene funktioniert nicht“ lesen)
- Kein Speicher zwischen Läufen → Szenenvariablen oder globale Variablen.
- „Neustart einer laufenden Szene erlauben“-Option: Ja = ein neuer Trigger beendet die laufende Instanz (ausstehende
setTimeoutgehen verloren) und startet neu – richtig für „Licht 5 min nach der letzten Bewegung aus“; Nein = Trigger werden ignoriert, während sie läuft (auch während einsetTimeoutwartet). - Der manuelle Modus ignoriert Deklarationen.
- Trigger feuern nur bei Änderungen: derselbe Wert erneut → nichts.
- Wertetypen: Schalter
true/false, Dimmer / Rollladen 0–99, Sensornummer; globale Variablen sind immer Zeichenketten (== "1", nicht== 1); in Deklarationenvalue = trueohne Anführungszeichen schreiben. - Eine Szene, die ihr eigenes Trigger-Gerät ändert, kann sich aufschaukeln: mit
sourceTriggerfiltern. - Nur Geräte-Eigenschaften lösen Szenen aus; eine interne Variable einer QuickApp nicht (eine globale Variable schon, und
QA-Eigenschaftsaktualisierungen wie
valuetun es). while true/ langesfibaro.sleepvermeiden: Trigger,setTimeoutoder eine QuickApp verwenden.- Die Wochennummerierung in Cron und manche Eigenschaftsnamen variieren: eine konvertierte Blockszene prüfen [V].
Liefergegenstand
Deklarationsblock + Aktionsblock (getrennt, bereit zum Einfügen), die einzustellenden Szenenoptionen (Neustart ja/nein,
Automatikmodus, Raum), die zu ersetzenden IDs (ID_TUERKONTAKT…) oder echte IDs aus dem Gerätebestand des Benutzers
sowie eine Testprozedur („Tür öffnen, die Konsole der Szene zeigt …“). Ausgearbeitete Beispiele: references/examples.md.