mprinfo Posté(e) le 5 juin 2020 Signaler Posté(e) le 5 juin 2020 Scene HC3 - sourceTrigger Comment connaitre la source du déclenchement d'une scène Le déclenchement d'une scène est stocker sous forme de table dans sourceTrigger Pour connaitre la source tu déclenchement -- ACTIONS local trigger = sourceTrigger print(json.encode(trigger)) Sauvegarder et lancer l'action resultat : {"property":"execute","id":2,"type":"user"} On voit : property = "execute" -- string id = 2 (2 = compte admin) -- numerique type = "user" --string Comment Utiliser cette table ? Exemple : je veux savoir si la scène est lancer par l'utilisateur local trigger = sourceTrigger if (trigger.property == "execute") then -- declechement manuel print("Scene lancer manuellement par l'utilisateur)") end Exemple : Je veux soir quel utilisateur a lancer la scéne local trigger = sourceTrigger if (trigger.property == "execute") then -- declechement manuel print("Scene lancer manuellement par l'utilisateur) ", trigger.id) end Maintenant que nous savons comment fonction sourceTrigger nous allons voir comment cela fonctionne avec des déclarations Exemple : j'ai un cron qui déclenche la scène toutes les 10 mn je veux connaitre le jour date heure minute de chaque déclenchement --DÉCLARATIONS (Conditions/Déclencheurs) { type = "date", property = "cron", operator = "match", value = {"10,20,20,30,40,50,0", "*", "*", "*", "*","*"} } -- ACTIONS local trigger = sourceTrigger if (trigger.property == "cron") then if (trigger.type=="date") then local Minutes = trigger.value[1] local Heure = trigger.value[2] local Jour = trigger.value[3] local Mois = trigger.value[4] local NomJourNumerique = tonumber(trigger.value[5]) local JourString = {"Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"} local NonJourString = JourString[NomJourNumerique] local Annee = trigger.value[6] print (string.format("%s %s/%s/%s à %s h %s mn", NonJourString,Jour,Mois,Annee,Minutes,Heure)) end end resultat : Vendredi 5/6/2020 à 20 h 10 mn 4 1
Sowliny Posté(e) le 17 juin 2020 Signaler Posté(e) le 17 juin 2020 (modifié) Bonsoir @mprinfo, Je viens de découvrir et tester "sourceTrigger" (un peu tard il est vrai...). Excellente démonstration et décorticage ! Cela se révéler très utile dans le test des déclenchements. Merci ! PS : l'ordre des items varie ! voici trois exemples : {"type":"device","id":54,"property":"value","value":true} {"property":"value","id":54,"value":true,"type":"device"} {"property":"value","type":"device","id":54,"value":true} "Amusant", mais rien de grave en soi je pense - peut-être un peu plus sportif pour rechercher une info (?), mais comme c'est une table... Modifié le 17 juin 2020 par Sowliny
Lazer Posté(e) le 17 juin 2020 Signaler Posté(e) le 17 juin 2020 C'est normal en LUA, les fonctions json.encode() et json.decode(), ainsi que pairs() mélangent comme elles veulent.
Lazer Posté(e) le 17 juin 2020 Signaler Posté(e) le 17 juin 2020 @mprinfo Sowliny n'a pas dit le contraire, il était juste surpris par le fait que les index textuels n'ont pas d'ordre en LUA.
Sowliny Posté(e) le 19 juin 2020 Signaler Posté(e) le 19 juin 2020 Bonjour à vous, @Lazer et @mprinfo, Merci pour ces précisions. Comme je l'avais avoué auparavant, je ne connais pas (encore...) json. Promis je m'y mets dès que la pression des travaux dans ma petite maison près de la forêt se sera atténuée (pour l'instant nous en sommes à l'installation de l'escalier). Bref, les tables j'en acquis la pratique (j'ai pas dit la maîtrise ) il y a quelques mois. Mea-culpa en ce qui concerne "sourceTrigger" : l'info est bien présente dans la "doc" de Fibaro "Home Center 3 – Lua Scenes". Bien à vous.
Lazer Posté(e) le 19 juin 2020 Signaler Posté(e) le 19 juin 2020 Manipuler un JSON en LUA, ça revient à manipuler un tableau à plusieurs dimensions, rien de bien compliqué On navigue dans l'arborescence du JSON comme dans un arbre. Si tu utilises un plugin comme JSON Viewer dans ton navigateur Web, ou dans un éditeur comme Notepad++, tu peux voire le JSON formaté proprement, sous forme d'arborescence, et tout devient plus clair.
Sowliny Posté(e) le 19 juin 2020 Signaler Posté(e) le 19 juin 2020 Merci pour l'info @Lazer, je vais m'y atteler.
971jmd Posté(e) le 27 septembre 2020 Signaler Posté(e) le 27 septembre 2020 salut voila une semaine je cherche une solution pour fair foncgtionner ma telecommande sur ma HC3 avez vous une idée --[[ %% properties 687 sceneActivation -- nastavte vase ID zariadenia Minimote miesto 687, najdeteho ked kliknete na nastavenia zariadenia %% globals --]] local ButtonPressed = fibaro:getValue(687, "sceneActivation") -- takisto treba zmenit ID miesto 687 if (tonumber(ButtonPressed) == 1) then fibaro:debug("MiniMote button 1 pressed") -- spusti sa scena s ID 11 fibaro:startScene(11) elseif (tonumber(ButtonPressed) == 2) then fibaro:debug("MiniMote button 2 pressed") -- naraz sa vypnu zariadenia s ID 580, 629, 678 fibaro:call(580,"turnOff") fibaro:call(629,"turnOff") fibaro:call(678,"turnOff") elseif (tonumber(ButtonPressed) == 3) then fibaro:debug("MiniMote button 3 pressed") elseif (tonumber(ButtonPressed) == 4) then fibaro:debug("MiniMote button 4 pressed") elseif (tonumber(ButtonPressed) == 5) then fibaro:debug("MiniMote button 5 pressed") elseif (tonumber(ButtonPressed) == 6) then fibaro:debug("MiniMote button 6 pressed") fibaro:call(689, "turnOff") elseif (tonumber(ButtonPressed) == 7) then fibaro:debug("MiniMote button 7 pressed") elseif (tonumber(ButtonPressed) == 8) then fibaro:debug("MiniMote button 8 pressed") else fibaro:debug("No response") end
971jmd Posté(e) le 27 septembre 2020 Signaler Posté(e) le 27 septembre 2020 j'ai cherché a récupéré la valeur retournée par le TRIGGER { conditions = { { id = 87, isTrigger = true, operator = "==", property = "sceneActivationEvent", type = "device", value = {} } }, operator = "all" },
Sowliny Posté(e) le 29 septembre 2020 Signaler Posté(e) le 29 septembre 2020 Sous HC2, je récupère la valeur du trigger déclenchant avec cette ligne : local TRIG_source = fibaro:getSourceTrigger() Avec HC3, voici un exemple : if sourceTrigger.id == (valeur nnn) then .... end ou encore : local TRIG-source = sourceTrigger.id (...bien sûr !) 1
971jmd Posté(e) le 30 septembre 2020 Signaler Posté(e) le 30 septembre 2020 oui,quand j'appuis sur 1 j'ai 1 -2 j'ai 2.....
Sowliny Posté(e) le 30 septembre 2020 Signaler Posté(e) le 30 septembre 2020 (modifié) Donc, après, action suivant la valeur reçue... (?) Mais je n'arrive pas bien à définir ta recherche. Tout semble correct. PS : Voici mon code complet concernant la détection de ma télécommande Nodon (4 boutons) : local KEY_id = 0 if SOURCE_trig == tonumber(fibaro.getGlobalVariable("ID_telecommande")) then KEY_id = sourceTrigger.value.keyId if KEY_id == 1 then fibaro.setGlobalVariable("FLAG_nodon1_b1","b1") end -- Verrouillage du blanc total if KEY_id == 3 then fibaro.setGlobalVariable("FLAG_nodon1_b1","b0") end -- Déverrouillage du blanc total end - 1 correspond au bouton "ROND PLEIN" - 3 correspond au bouton "ROND VIDE" J'exploite ensuite les valeurs "FLAG" dans le Main de la scène. Modifié le 30 septembre 2020 par Sowliny
henri-allauch Posté(e) le 18 février 2021 Signaler Posté(e) le 18 février 2021 Dans l'exemple de @mprinfo au début : --DÉCLARATIONS (Conditions/Déclencheurs) { type = "date", property = "cron", operator = "match", value = {"10,20,20,30,40,50,0", "*", "*", "*", "*","*"} } -- ACTIONS local trigger = sourceTrigger if (trigger.property == "cron") then if (trigger.type=="date") then local Minutes = trigger.value[1] local Heure = trigger.value[2] local Jour = trigger.value[3] local Mois = trigger.value[4] local NomJourNumerique = tonumber(trigger.value[5]) local JourString = {"Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"} local NonJourString = JourString[NomJourNumerique] local Annee = trigger.value[6] print (string.format("%s %s/%s/%s à %s h %s mn", NonJourString,Jour,Mois,Annee,Minutes,Heure)) end end Le if (trigger.property=="date") est il vraiment utile ? que pourrait être le type retourné autre que "date" pour le trigger.property = "cron" ? Ce n'est pas une critique, mais je voudrais comprendre
mprinfo Posté(e) le 1 janvier Auteur Signaler Posté(e) le 1 janvier @henri-allauch je viens seulement de voir ta question oui c'est utile car si tu lances la scène manuellement tu auras trigger.property = "execute" 1
henri-allauch Posté(e) le 1 janvier Signaler Posté(e) le 1 janvier Merci C'était il y a trois ans, début de ma HC3, mais j'ai immédiatement abandonné les scènes, je n'ai que des QA ...
Messages recommandés