Ayant eu pas mal de pb pour la création de childs devices et leurs mises à jour ! Je poste ici une méthode (ma) pour leurs créations.
Certes c’est loin d’être la meilleure…. Les Chuck Norris du lua y arrivent avec seulement deux lignes de codes ….
Bref … c’est pas la meilleure méthode ! mais elle fonctionne !
Je n’ai pas la prétention d’expliquer le comment, le pourquoi ( c’est le travail de @lazer ) mais simplement d’indiquer ma méthode de débutant et je l’espère vous permettre d’avoir un exemple simple… le manipuler et comprendre !
Bon ! Comme dans toutes grandes sectes qui se respectent, celle-ci pour « les Nuls » se déroule en six étapes !
Alors voici un petit schéma avec les 6 étapes que j’utilise pour faire mes Childs
1 - Création du Child
Pour l’exemple nous allons créer un Child température !
-------------------------------
-- 1 - Création d'un Child
-------------------------------
-- Child Température :
function QuickApp:createChildTmps(Nom)
local child = self:createChildDevice({name = Nom, type = "com.fibaro.temperatureSensor",}, NOM_Temps)
child:setVariable("Nappe_Child_ID" , "Child_Temps")
end
2 - Définition des classes
-------------------------------
-- 2 - Définition des classes
-------------------------------
class 'NOM_Temps' (QuickAppChild) -- Class NOM_Temps pour "com.fibaro.temperatureSensor"
3 - Constructeur
-------------------------------
-- 3 - Constructeur
-------------------------------
-- Constructeur __init pour la classe NOM_Temps
function NOM_Temps:__init(device)
QuickAppChild.__init(self, device)
end
Normalement arrivé ici votre code ressemble à cela :
-------------------------------
-- 1 - Création d'un Child
-------------------------------
-- Child Température :
function QuickApp:createChildTmps(Nom)
local child = self:createChildDevice({name = Nom, type = "com.fibaro.temperatureSensor",}, NOM_Temps)
child:setVariable("Nappe_Child_ID" , "Child_Temp")
end
-------------------------------
-- 2 - Définition des classes
-------------------------------
class 'NOM_Temps' (QuickAppChild) -- Class NOM_Temps pour "com.fibaro.temperatureSensor"
-------------------------------
-- 3 - Constructeur
-------------------------------
-- Constructeur __init pour la classe NOM_Temps
function NOM_Temps:__init(device)
QuickAppChild.__init(self, device)
end
4 - Initialisation des Childs
--------------------------------
-- 4 - Initialisation des Childs
--------------------------------
self:initChildDevices({
["com.fibaro.temperatureSensor"] = NOM_Temps -- Température
})
local i = 0
for id,device in pairs(self.childDevices) do
i=i+1
self:debug("[", id, "]", device.name, ", type of: ", device.type)
end
if i == 0 then
local Nom = "Température"
self:createChildTmps(Nom)
end
5 - Identification des Childs
-------------------------------------
-- 5 - Identification des Childs
-------------------------------------
for _, childDevice in pairs(self.childDevices) do
if childDevice:getVariable("Nappe_Child_ID") == "Child_Temps" then
ID_Child_1 = childDevice.id
end
end
self:Mise_a_jour_des_Childs()
end ------------------------- Fin du OnInit
6 - Mises à jour des variables
--------------------------------
-- 6 - Mises à jours des Childs
--------------------------------
-- Childs ID_Child_1
function QuickApp:Mise_a_jour_des_Childs()
variable_qui_donne_la_temperature = 37 --- pour l'ex du tuto
variable_pour_le_log = " I'm bad " --- pour l'ex du tuto
self.childDevices[ID_Child_1]:updateProperty("value", variable_qui_donne_la_temperature )
self.childDevices[ID_Child_1]:updateProperty("log", variable_pour_le_log)
end
C’est peut être pas une bonne habitude !? A Confirmer au prochain Crash
Voici :
Le fichier svg plus facile à lire que sur le forum : Les Childs pour les nuls.svg
Le fichier lua à coller dans un QA générique : Child_Temps.lua
Et comme nous "les nuls " nous savons que le tuto machin truc qui explique ne parle jamais du child que l'on souhaite faire ! voici un fichier lua avec un multiChild ! :
A coller dans un QA générique : Les_Childs_pour_les_Nuls.lua ou le QA à importer : Les_Childs_pour_les_Nuls.fqa
PS : J'espère sincèrement ne pas avoir avoir raconté trop de bêtises !
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Autres méthodes
J'ajoute ici le liens direct d'autres méthodes plus complexes abordées ici :
Contribution de Jang : ICI
Création de Child qui sont définis dans la table (Ex de 6 Childs)
Elle supprime les Childs qui ne sont pas dans la table, si vous modifiez le nombre d'enfants.
Chaque Child dispose d'un identifiant unique qui est utilisé pour appeler des méthodes sur les childs
------------------------------------------------------------------------------------------------------------------------------