mprinfo 3 332 Signaler ce message Posté(e) 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 Partager ce message Lien à poster Partager sur d’autres sites
Sowliny 225 Signaler ce message Posté(e) 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é 17 juin 2020 par Sowliny Partager ce message Lien à poster Partager sur d’autres sites
Lazer 8 457 Signaler ce message Posté(e) 17 juin 2020 C'est normal en LUA, les fonctions json.encode() et json.decode(), ainsi que pairs() mélangent comme elles veulent. Partager ce message Lien à poster Partager sur d’autres sites
Lazer 8 457 Signaler ce message Posté(e) 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. Partager ce message Lien à poster Partager sur d’autres sites
Sowliny 225 Signaler ce message Posté(e) 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. Partager ce message Lien à poster Partager sur d’autres sites
Lazer 8 457 Signaler ce message Posté(e) 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. Partager ce message Lien à poster Partager sur d’autres sites
Sowliny 225 Signaler ce message Posté(e) 19 juin 2020 Merci pour l'info @Lazer, je vais m'y atteler. Partager ce message Lien à poster Partager sur d’autres sites
971jmd 229 Signaler ce message Posté(e) 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 Partager ce message Lien à poster Partager sur d’autres sites
971jmd 229 Signaler ce message Posté(e) 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" }, Partager ce message Lien à poster Partager sur d’autres sites
Sowliny 225 Signaler ce message Posté(e) 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 Partager ce message Lien à poster Partager sur d’autres sites
971jmd 229 Signaler ce message Posté(e) 30 septembre 2020 oui,quand j'appuis sur 1 j'ai 1 -2 j'ai 2..... Partager ce message Lien à poster Partager sur d’autres sites
Sowliny 225 Signaler ce message Posté(e) 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é 30 septembre 2020 par Sowliny Partager ce message Lien à poster Partager sur d’autres sites
henri-allauch 205 Signaler ce message Posté(e) 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 Partager ce message Lien à poster Partager sur d’autres sites
mprinfo 3 332 Signaler ce message Posté(e) 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 Partager ce message Lien à poster Partager sur d’autres sites
henri-allauch 205 Signaler ce message Posté(e) 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 ... Partager ce message Lien à poster Partager sur d’autres sites