Aller au contenu
mprinfo

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

Recommended Posts

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

@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

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.

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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

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

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

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

@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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

×