Aller au contenu

Scene HC3 - Comment connaitre la source du déclenchement d'une scène (sourceTrigger)


Messages recommandés

Posté(e)

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

 

  • Like 4
  • Thanks 1
  • 2 semaines après...
Posté(e) (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é par Sowliny
Posté(e)

C'est normal en LUA, les fonctions json.encode() et json.decode(), ainsi que pairs() mélangent comme elles veulent.

Posté(e)

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 :rolleyes:) 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.

 

Posté(e)

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.

  • 3 mois après...
Posté(e)

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

 

Posté(e)

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"
},

 

Posté(e)

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 !)

 

  • Like 1
Posté(e) (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) :

2113975028_NodOnSRRoseON.png.0b847fdf72743c6c8209e4205a98f956.png

 

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é par Sowliny
  • 4 mois après...
Posté(e)

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

  • 2 ans après...
Posté(e)

@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"

 

  • Thanks 1
×
×
  • Créer...