Scènes Lua HC3
Répondez dans la langue de l'utilisateur ; conservez les identifiants en anglais. Expliquez aux débutants où cliquer.
Scène ou QuickApp ?
| Besoin | Scène | QuickApp |
|---|---|---|
| Réagir à un événement (bouton, porte, heure, variable) avec quelques actions | ✅ | plus lourde |
| Garder un état en mémoire, fonctionner en permanence, communiquer avec un appareil (HTTP, TCP, MQTT) | ❌ démarre de zéro à chaque exécution | ✅ |
| Boutons / libellés dans l'interface utilisateur | ❌ | ✅ |
| Règle empirique : les QuickApps sont les pilotes, les scènes enchaînent des actions en appelant des méthodes QA | ||
(fibaro.call(qaId, "setMode", "Away")). Pour les QuickApps, utilisez la compétence hc3-quickapp. |
Deux parties
- Déclarations (conditions / déclencheurs) : une table Lua, pas de code — quand la scène démarre.
- Actions : code Lua exécuté à chaque démarrage. Astuce pour les utilisateurs : construisez la scène en mode blocs, puis « Convertir en Lua » : le HC3 écrit les déclarations exactes (noms de propriétés, numéros de jours de la semaine). La conversion est à sens unique.
Déclarations
{
operator = "all", -- "all" (ET) | "any" (OU) ; les groupes peuvent être imbriqués
conditions = {
{ type = "device", id = 201, property = "value", operator = "==", value = true, isTrigger = true },
{ type = "date", property = "cron", operator = "match", value = {"*", "*", "*", "*", "*", "*"}, isTrigger = false },
}
}
isTrigger = true: un changement de cette condition démarre la scène (ensuite toutes les conditions sont évaluées) ;false: filtre uniquement. Au moins un déclencheur est nécessaire, sinon la scène ne démarre jamais d'elle-même.- Opérateurs :
==,!=,>,>=,<,<=,anyValue(tout changement),match(dates). duration = 60dans une condition d'appareil : doit rester vraie pendant 60 s [V] (visible dans les scènes de blocs converties). Types de conditions et exemples :references/declarations.md(appareil, bouton de scène centrale, cron, lever/coucher du soleil, variable globale, événement personnalisé, alarme, localisation, météo, démarrage HC3).
Actions
fibaro.debug("MaScene", json.encode(sourceTrigger)) -- première ligne pendant le développement : voir ce qui a déclenché
if sourceTrigger.type == "device" then -- .id, .property, .value
elseif sourceTrigger.type == "date" then
elseif sourceTrigger.type == "user" then -- démarrée manuellement (bouton Exécuter, application)
end
Fonctions : fibaro.call, fibaro.getValue, fibaro.get (valeur + horodatage), fibaro.getGlobalVariable /
setGlobalVariable (chaînes), fibaro.getSceneVariable / setSceneVariable (persister entre les exécutions de la même scène),
fibaro.alert, fibaro.emitCustomEvent, fibaro.scene("execute"|"kill", {ids}), fibaro.profile, fibaro.alarm,
fibaro.setTimeout(ms, fn), api.*, net.HTTPClient, json. Les logs nécessitent une balise : fibaro.debug("Balise", "msg").
Notifications : mêmes règles que les QuickApps (utilisateurs vs IDs de téléphone, pas de push critique) — voir la compétence hc3-quickapp,
references/notifications.md.
Pièges (lire avant de répondre « ma scène ne fonctionne pas »)
- Pas de mémoire entre les exécutions → variables de scène ou variables globales.
- Option « Autoriser le redémarrage d'une scène en cours » : Oui = un nouveau déclencheur tue l'instance en cours
(les
setTimeouten attente sont perdus) et redémarre — adapté pour « éteindre la lumière 5 min après le dernier mouvement » ; Non = les déclencheurs sont ignorés pendant son exécution (y compris pendant l'attente d'unsetTimeout). - Le mode manuel ignore les déclarations.
- Les déclencheurs se déclenchent uniquement sur les changements : une même valeur à nouveau → rien.
- Types de valeurs : interrupteur
true/false, variateur / volet 0–99, nombre de capteur ; les variables globales sont toujours des chaînes (== "1", pas== 1) ; dans les déclarations, écrivezvalue = truesans guillemets. - Une scène qui modifie son propre appareil déclencheur peut boucler : filtrez avec
sourceTrigger. - Seules les propriétés d'appareil déclenchent les scènes ; une variable interne d'une QuickApp ne le fait pas (une variable globale le fait, et
les mises à jour de propriété QA comme
valuele font). - Évitez
while true/fibaro.sleeplong : utilisez des déclencheurs,setTimeout, ou une QuickApp. - La numérotation des jours de la semaine dans cron et certains noms de propriétés varient : vérifiez une scène de blocs convertie [V].
Livrable
Bloc déclarations + bloc actions (séparément, prêts à coller), les options de scène à définir (redémarrage oui/non,
mode automatique, pièce), les IDs à remplacer (ID_DOOR_SENSOR…) ou les IDs réels de l'inventaire de l'utilisateur, et une procédure
de test (« ouvrez la porte, la console de la scène affiche … »). Exemples concrets : references/examples.md.