Aller au contenu
Krikroff

Gestion des appareils enfants

Recommended Posts

Salut @RS600807 , j'arrive bien à créer les deux child Température et Humidité et j'en récupère les valeurs comme sur mon screen au dessus.

 

Ma modification n'est surement pas " propre " mais elle marche :P

 

Je te colle mon fichier complet pour que tu puisse voir où j'ai ajouter lignes.

En revanche une fois la modification effectuée il faut récupérer l'ID des Childs créés et RE-modifier le code à la ligne 208 et 210 pour bien actualiser les valeurs...

 

--------------------------------------------------------------------
-- Mise à Jour du Childs devices Température :
   self.childDevices[397]:updateProperty("value", ambTemp)
-- Mise à Jour du Childs device Humidité :
   self.childDevices[398]:updateProperty("value", humidity)
--------------------------------------------------------------------

 

Airzone_Bureau.fqa

 

Voilou :)

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut Bloug,

Merci pour ta réponse et ton fichier joint.

En m'inspirant de ce que j'ai trouvé sur une autre QA, j'ai updaté la QA airzone comme suit:

- elle crée 2 child devices (T°C et humidité)

- il n'est pas nécessaire de revenir dans le code pour rentrer les ID des devices child, la gestion des classes s'en charge (du moins c'est ce que j'en ai compris)

- il y a la possibilité de mettre un indicateur sous le nom du device qui te retourne un commentaire : par exemple si dans tes critères (qui restent paramétrables) tu estimes que la température optimale de ta pièce est comprise entre 21 et 23°C, alors il t'affiche "optimale"). C'est un petit plus que je trouve sympa.

 

Ci-dessous le fichier si ça t'intéresse d'y jeter un oeil. Il y a peut-être moyen d'optimiser les choses ou de faire plus propre. Mais en l'état cela me convient (pour un novice en LUA).

A l'occasion dis moi ce que tu en penses.

A+

 

Airzone+Child.lua

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

 

Je souhaite ajouter un child supplémentaire, après avoir modifier mon QA rien ne se passe comme prévu 

 

Je suis toujours obligé de " supprimer " mon QA puis de le " recharger "  Est il possible de m'expliquer pourquoi ?

 

 

je suppose que le pb est vers le onInit ? 

function QuickApp:onInit()
        __TAG  = "QA"..plugin.mainDeviceId.."_Vaillant" 
        self:updateProperty("deviceIcon", 1054)  -- Icone API Offline
        log    = self:getVariable("UserName")
        pass   = self:getVariable("Password")
        serial = self:getVariable("Serial")
        self.refresh = tonumber(self:getVariable("Update"))
        self.http = net.HTTPClient({ timeout = 5000 })
        self:loop()
        
    self:initChildDevices({
        ["com.fibaro.temperatureSensor"] = VaillantTempCouloir,
        ["com.fibaro.temperatureSensor"] = VaillantTempExterieur,
	["com.fibaro.multilevelSensor"] = VaillantPressure,
	["com.fibaro.temperatureSensor"] = VaillantTempDepEau,
	["com.fibaro.powerSensor"] = VaillantConsoGazBoiler,
	["com.fibaro.powerSensor"] = VaillantConsoGazECS,
        ["com.fibaro.powerSensor"] = VaillantConsoElecBoiler,
        ["com.fibaro.powerSensor"] = VaillantConsoElecECS,
        ["com.fibaro.temperatureSensor"] = VaillantConChaudiere,
        ["com.fibaro.temperatureSensor"] = VaillantConECS,
	["com.fibaro.temperatureSensor"] = VaillantEtatECS
        })

    local i = 0
    self.sondes = {}
    for id,device in pairs(self.childDevices) do
        i=i+1
        self:debug("[", id, "]", device.name, ", type of: ", device.type)
        self.sondes[i] = id
    end
	
	if i == 0 then 
       local Nom = "T° Couloir"
       self:createChildTmpsCouloir(Nom)
       local Nom = "T° Exterieur"
       self:createChildTmpsExterieur(Nom)
       local Nom = "Pression"
       self:createChildPressure(Nom)
       local Nom = "T° Sonde Départ"
       self:createChildTempEauDepart(Nom)
       local Nom = "T° ECS"
       self:createChildTempECS(Nom)
       local Nom = "Conso Gaz "
       self:createChildConsoGazBoiler(Nom)	   
       local Nom = "Conso Gaz ECS"
       self:createChildConsoGazECS(Nom)	   
       local Nom = "Conso Elec Chaudière"
       self:createChildConsoElecBoiler(Nom)	   
       local Nom = "Conso Elec ECS "
       self:createChildConsoElecECS(Nom)	   
       local Nom = "Consigne Chaudière "
       self:createChildConChaudiere(Nom)
       local Nom = "Consigne ECS "
       self:createChildConECS(Nom)
       local Nom = "Etat ECS "
       self:createChildEtatECS(Nom)	   
    end
    
end                                    -- - - - - - OnInit

 

merci :)

 

Modifié par Bloug

Partager ce message


Lien à poster
Partager sur d’autres sites

Quelques pistes :

- la fonction initChildDevices() doit être la première appelée dans le onInit du QA, donc avant d'appeler les fonctions updateProperty, getVariable, et surtout loop()

- idéalement c'est mieux d'appeler la fonction loop() dans un setTimeout, même avec un délai de 0, car ça déclenche un process asynchrone donc après la fin de l'exécution de onInit()

- toutes tes fonctions createChildXXX() ne devraient pas être dans le onInit(), il faut les mettre dans une fonction spécifique, exécutée avec un bouton par l'utilisateur

Partager ce message


Lien à poster
Partager sur d’autres sites

merci pour les pistes :)

 

1 - J'ai donc déplacé la fonction initChildDevices() en premier dans le onInit.

2 - Pour la fonction loop() elle est bien dans un setTimeout 

function QuickApp:loop()
      print("<font color=grey>**** R E F R E S H **** " ..  os.date("Dernière mise à jour le %d/%m à %H h : %M").. "  ****")
      self:multimatic()
      fibaro.setTimeout(self.refresh * 1000, function() 
      self:loop()
      end)
end   

 

3 -  j'ai déposé l'ensemble dans une fonction , pour l'exécuter avec un bouton 

 

function QuickApp:CreateChild()
    local i = 0
    self.sondes = {}
    for id,device in pairs(self.childDevices) do
        i=i+1
        self:debug("[", id, "]", device.name, ", type of: ", device.type)
        self.sondes[i] = id
    end
	
	if i == 0 then 
       local Nom = "T° Couloir"
       self:createChildTmpsCouloir(Nom)
       local Nom = "T° Exterieur"
       self:createChildTmpsExterieur(Nom)
       local Nom = "Pression"
       self:createChildPressure(Nom)
       local Nom = "T° Sonde Départ"
       self:createChildTempEauDepart(Nom)
       local Nom = "T° ECS"
       self:createChildTempECS(Nom)
       local Nom = "Conso Gaz "
       self:createChildConsoGazBoiler(Nom)	   
       local Nom = "Conso Gaz ECS"
       self:createChildConsoGazECS(Nom)	   
       local Nom = "Conso Elec Chaudière"
       self:createChildConsoElecBoiler(Nom)	   
       local Nom = "Conso Elec ECS "
       self:createChildConsoElecECS(Nom)	   
       local Nom = "Consigne Chaudière "
       self:createChildConChaudiere(Nom)
       local Nom = "Consigne ECS "
       self:createChildConECS(Nom)
       local Nom = "Etat ECS "
       self:createChildEtatECS(Nom)	   
    end
end

j'ai donc mon onInit

 

function QuickApp:onInit()
               
    self:initChildDevices({
        ["com.fibaro.temperatureSensor"] = VaillantTempCouloir,
        ["com.fibaro.temperatureSensor"] = VaillantTempExterieur,
	["com.fibaro.multilevelSensor"] = VaillantPressure,
	["com.fibaro.temperatureSensor"] = VaillantTempDepEau,
	["com.fibaro.powerSensor"] = VaillantConsoGazBoiler,
	["com.fibaro.powerSensor"] = VaillantConsoGazECS,
        ["com.fibaro.powerSensor"] = VaillantConsoElecBoiler,
        ["com.fibaro.powerSensor"] = VaillantConsoElecECS,
        ["com.fibaro.temperatureSensor"] = VaillantConChaudiere,
        ["com.fibaro.temperatureSensor"] = VaillantConECS,
	["com.fibaro.temperatureSensor"] = VaillantEtatECS
        })
        
        __TAG  = "QA"..plugin.mainDeviceId.."_Vaillant" 
        self:updateProperty("deviceIcon", 1054)  -- Icone API Offline
        log    = self:getVariable("UserName")
        pass   = self:getVariable("Password")
        serial = self:getVariable("Serial")
        self.refresh = tonumber(self:getVariable("Update"))
        self.http = net.HTTPClient({ timeout = 5000 })
        self:loop()

end                                    -- - - - - - OnInit

 

et quand je clique sur mon bouton j'ai toujours :

 

[30.12.2022] [13:50:46] [TRACE] [QA741_VAILLANT]: UIEvent: {"values":[null],"eventType":"onReleased","elementName":"CreateChild","deviceId":741}
[30.12.2022] [13:50:46] [DEBUG] [QA741_VAILLANT]: [ 752 ] Consigne ECS , type of: com.fibaro.temperatureSensor
[30.12.2022] [13:50:46] [DEBUG] [QA741_VAILLANT]: [ 742 ] T° Couloir , type of: com.fibaro.temperatureSensor
[30.12.2022] [13:50:46] [DEBUG] [QA741_VAILLANT]: [ 743 ] T° Exterieur , type of: com.fibaro.temperatureSensor
[30.12.2022] [13:50:46] [DEBUG] [QA741_VAILLANT]: [ 744 ] Pression , type of: com.fibaro.multilevelSensor
[30.12.2022] [13:50:46] [DEBUG] [QA741_VAILLANT]: [ 745 ] T° Sonde Départ , type of: com.fibaro.temperatureSensor
[30.12.2022] [13:50:46] [DEBUG] [QA741_VAILLANT]: [ 746 ] T° ECS , type of: com.fibaro.temperatureSensor
[30.12.2022] [13:50:46] [DEBUG] [QA741_VAILLANT]: [ 747 ] Conso Gaz , type of: com.fibaro.powerSensor
[30.12.2022] [13:50:46] [DEBUG] [QA741_VAILLANT]: [ 748 ] Conso Gaz ECS , type of: com.fibaro.powerSensor
[30.12.2022] [13:50:46] [DEBUG] [QA741_VAILLANT]: [ 749 ] Conso Elec Chaudière , type of: com.fibaro.powerSensor
[30.12.2022] [13:50:46] [DEBUG] [QA741_VAILLANT]: [ 750 ] Conso Elec ECS , type of: com.fibaro.powerSensor
[30.12.2022] [13:50:46] [DEBUG] [QA741_VAILLANT]: [ 751 ] Consigne Chaudière , type of: com.fibaro.temperatureSensor

où il me manque le dernier child ajouté

 

 

Avant le onInit j'ai bien :

 

Mes constructeurs :

 

-- ==  Constructeur __init pour la classe VaillantEtatECS
function VaillantEtatECS:__init(device)
    QuickAppChild.__init(self, device)
end

les classes

 

class 'VaillantEtatECS' (QuickAppChild)          -- Class VaillantEtatECS          pour "com.fibaro.temperatureSensor" 

 

et la fonction

 

-- ==  Fonction pour l etat de chauffe ECS :

function QuickApp:createChildEtatECS(Nom)
    self:debug("Child devices Etat ECS :")
    for id,device in pairs(self.childDevices) do
        self:debug("[", id, "]", device.name, ", type of: ", device.type)
    end
        local child12 = self:createChildDevice({name = Nom, type = "com.fibaro.temperatureSensor",}, VaillantEtatECS)
     self:trace("Child devices Consigne ECS created: ", child12.id)
end

 

le pb n'est  pas du coté de mon 

if i == 0 then 

?

 

 

Edit : je pense que oui car j'ai modifié en :

if i ~= 10 then

j'ai eu un tsunami de 10 nouveaux child ..... j'en ai donc supprimé 9 et j'ai bien mon dernier :D

 

 

.... faut surement améliorer le truc avec une condition :P

 

Modifié par Bloug

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 4 heures, Bloug a dit :

2 - Pour la fonction loop() elle est bien dans un setTimeout 


function QuickApp:loop()
      print("<font color=grey>**** R E F R E S H **** " ..  os.date("Dernière mise à jour le %d/%m à %H h : %M").. "  ****")
      self:multimatic()
      fibaro.setTimeout(self.refresh * 1000, function() 
      self:loop()
      end)
end   

 

Je rebondis juste là dessus... non ta loop n'est toujours pas dans un settimout, du moins pas la 1ère exécution, et c'est celle-ci qui est critique :

function QuickApp:onInit()

  -- Fait plein de choses
        
  self:loop()

end

A remplacer par :

  fibaro.setTimeout(0, function() self:loop() end)

Là j'ai mis un timeout à 0, mais perso j'ai pris l'habitude de mettre un timeout plus important, entre 1000ms et 5000ms selon mes QuickApps.
En effet, au reboot de la box, tous les QA démarrent en même temps, ce timeout variable permet de temporiser un peu et lisser la charge.

 

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

@LazerJ'ai besoin d'aide pour l'histoire de la map et récupérer les ID des childs Stp :3:

j'ai testé pleins de trucs pour voir les résultats donc c'est légèrement le bazar 

 

 

voici mon code :

 

function QuickApp:createChild_BSS_3(Nom)
    self:debug("Child devices Nappe BSS3 : ")
    for id,device in pairs(self.childDevices) do
        self:debug("[", id, "]", device.name, ", type of: ", device.type)
    end
    local child = self:createChildDevice({name = Nom, type = "com.fibaro.multilevelSensor",}, BSS_3)
    child:setVariable("Nappe_Child_ID_3", child.id) -- <---------------------------------------------------- Ajout d'une variable dans le child
    ID_Child_3 = child.id -- <------------------------------------------------------------------------------ Tentative d'attribuerune variable ... oui mais non :p elle disparait
    self:storeDevice(uid, child.id)
    self:trace("Child device BSS_3 created: ", child.id)
    end

 
function QuickApp:storeDevice(uid, hcId)
    self.devicesMap[uid] = hcId -- <------------------------------------------------------------------------- Cette ligne plante la QA  **Err-1**                            -
    self:setVariable("devicesMap", self.devicesMap)
end
** Err-1 ** :

main.lua:112: attempt to index a nil value (field 'devicesMap')

 

J'ai cette erreur en utilisnat la methode de Fibaro ( Keeping your devices synchronized )

 

Ensuite, en fin de script ( lors de l'update des label et des childs)  j'ai testé de récupérer la liste des childs avec :

 

    for id,device in pairs(self.childDevices) do
        self:debug(id , device.name )
    end

 ok j'ai la liste de mes ID ( c'est bien la MAP ???? )

 

[22.01.2023] [09:17:31] [DEBUG] [QA826_NAPPE]: 841 BSS 1

[22.01.2023] [09:17:31] [DEBUG] [QA826_NAPPE]: 842 BSS 2

[22.01.2023] [09:17:31] [DEBUG] [QA826_NAPPE]: 843 BSS 3

 

mais j'arrive pas à récupérer soit les variables dans les childs :    self:debug(childDevices:getVariable("Nappe_Child_ID_3"))   OU  directement l'ID du child

 

pour lui donner/ou manipuler avec une autre variable genre : Child_ID_3 =  childDevices:getVariable("Nappe_Child_ID_3")

 

Un grand merci si tu as 2 minutesss pour m'aiguiller :D Bon Dimanche ! 

 

 

 

Modifié par Bloug

Partager ce message


Lien à poster
Partager sur d’autres sites

Ta variable self.devicesMap de type table n'existe pas quand tu essayes de lui affecter une valeur, donc il faut commencer par l'initialiser, quelque part dans ton code.
Par exemple dans QuickApp:onInit() :

self.devicesMap = {}

 

La "map", ou cartographie en bon français, c'est à toi de la créer. Avec ta variable self.devicesMap justement.

Ce que te fournis Fibaro au travers de la variable prédéfinie self.childDevices, c'est juste la liste des devices identifiés par leur ID. Donc insuffisant pour notre usage.
C'est pour ce qu'on se crée une autre variable nous permettant de "mapper" (=associer) l'ID du device avec un autre paramètre nous permettant d'identifier facilement quel child device correspond à quoi.
Par exemple pour les quelques QA que j'ai développé, ça peut être l'ID d'une caméra dans Surveillance Station, ou bien l'identifiant du port d'entrée/sortie d'un IPX800, ou bien l'identifiant des modules d'une station Netatmo, etc... donc à construire au cas par cas selon l'usage considéré.

Cela pourrait aussi être basiquement un texte qui définie l'usage du QA enfant : "temperature", "humidite", etc

Identifiant à stocker dans une variable du QA enfant (avec self.setVariable(), ou encore child.setVariable(), enfin ça dépend de la technique que tu utilises pour manipuler tes QA enfants)

Partager ce message


Lien à poster
Partager sur d’autres sites

oki, donc comme suggéré, J'ai donc :

1 - Modifié mon code pour attribué une variable : nommée : Nappe_Child_ID avec comme valeur l'ID_du_Child_enfant 

 child:setVariable("Nappe_Child_ID" , child.id)
     -- Fonction pour le Child BSS_3
function QuickApp:createChild_BSS_3(Nom)
    self:debug("Child devices Nappe BSS3 : ")
    for id,device in pairs(self.childDevices) do
    end
    local child = self:createChildDevice({name = Nom, type = "com.fibaro.multilevelSensor",}, BSS_3)
    child:setVariable("Nappe_Child_ID" , child.id)
    end

Capture.JPG.4dcf0d1990130df14dcbb74e73a9ec90.JPG

 

 

2 - J'ai ajouté un table dans le Oninit , sous le initChildDevices  : j'ai donc 

 

    local i = 0
    self.sondes = {}
    for id,device in pairs(self.childDevices) do
        i=i+1
        self:debug("[", id, "]", device.name, ", type of: ", device.type)
        self.sondes[i] = id
    end

 

-- Appareil enfant 
    self:initChildDevices({
        ["com.fibaro.multilevelSensor"] = BSS_1, -- Niveau Nappe BSS_1
        ["com.fibaro.multilevelSensor"] = BSS_2, -- Niveau Nappe BSS_2
        ["com.fibaro.multilevelSensor"] = BSS_3, -- Niveau Nappe BSS_3
        })

    local i = 0
    self.sondes = {}
    for id,device in pairs(self.childDevices) do
        i=i+1
        self:debug("[", id, "]", device.name, ", type of: ", device.type)
        self.sondes[i] = id
    end


	if i == 0 then 
       local Nom = "BSS 1"
       self:createChild_BSS_1(Nom)
       local Nom = "BSS 2"
       self:createChild_BSS_2(Nom)
       local Nom = "BSS 3"
       self:createChild_BSS_3(Nom)
    end

 

J"arrive donc

 

avec l'exemple trouvé dans le topic :

 

for _, childDevice in pairs(self.childDevices) do
	self:debug(childDevice:getVariable("Nappe_Child_ID"))
end

Capture2.JPG.97b317ac207f86eabecd999c2673a573.JPG

 

ou avec ma table sondes{}

  print("------ S O N N D E S ------")
  ID1 = self.sondes[1]
  ID2 = self.sondes[2]
  ID3 = self.sondes[3]

 print(ID1)
 print(ID2)
 print(ID3)

 

Capture3.JPG.de52c8b341ab5181453ea61169ad7466.JPG

 

 

 

Même avec la variable récupéré il est difficile de savoir qui est qui.

J'ai hésité et tenté d'utiliser une nom bien distinctif avec le nom de la variable Child Nappe_Child_ID_1   -- Nappe_Child_ID_2 -- Nappe_Child_ID_3  n mais j'ai encore plus de mal avec le lua :

 

for _, childDevice in pairs(self.childDevices) do
    self:debug(childDevice:getVariable("Nappe_Child_ID_1"))
    self:debug(childDevice:getVariable("Nappe_Child_ID_2"))
    self:debug(childDevice:getVariable("Nappe_Child_ID_3"))
end

 

et si dans la variable, à la place de l'ID_du_Child_enfant je donne une valeur avec un nom plus explicite comme Child_ID_1 -- Child_ID_2  -- Child_ID_ je perds alors l'id pour l'indiquer dans la mise à jour du child 

 

Citation

-- Mise à Jour du Childs Bss_3 :
    self.childDevices[ID_Child_1]:updateProperty("value", Resultat_pour_child_1)

 

y'a t'il un moyen en lua d'obtenir plus d'informations avec  getVariable("Nappe_Child_ID_1")  pour avoir : le résultat de ma variable et l'ID ? 

 

je dois me gourrer surement ailleurs  ou rater un truc énorme ^^

 

 

merci

 

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 12 heures, Bloug a dit :

Modifié mon code pour attribué une variable : nommée : Nappe_Child_ID avec comme valeur l'ID_du_Child_enfant 

mais ça ne sert à rien de stocker son propre ID dans ses variables, puisque l'ID est déjà une propriété connue du child :

 

image.thumb.png.2b91dc4f78de6067f7cc1bc558d5074c.png

 

 

Il y a 12 heures, Bloug a dit :

Même avec la variable récupéré il est difficile de savoir qui est qui.

Forcément du coup...

 

Il y a 12 heures, Bloug a dit :

ou rater un truc énorme ^^

Oui je crois :D

 

 

Mon message précédent n'était peut être pas clair, mais il te faut un moyen d'identifier tes enfants qui ne soit pas leur propre ID.
Sinon c'est le serpent qui se mort la queue.
 

Partager ce message


Lien à poster
Partager sur d’autres sites

En remplacement la valeur, par un nom plus clair tel que "child n°1"

Mais comment je me balade en lua ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Mais pourquoi "child n°1" ?

Tu n'as pas une meilleure façon d'identifier tes modules ?

 

Cela dit, un index de table nommé de la sorte est possible, c'est une simple chaine de caractères.

Et tu parcoures la table avec pairs(ma_table)

 

Modifié par Lazer

Partager ce message


Lien à poster
Partager sur d’autres sites

Si, désolé,  j'ai répondu rapidement avec mon téléphone désolé.

Je vais les nommer Nappe_1 Nappe_2 et Nappe_3:2: c'est presque mieux/pire

 

(Je fais un QA sur le niveau des nappes phréatiques dans mon secteur avec trois points piézométrique) rien de bien passionnant mais l'exercice est bon.

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Alors moi je crée une ou 2 variables par qa

Le but est simple
Lorsque que l'on scan la table des childs on connaît l id et la valeur de la variable
Donc je me sert de la valeur de la variable comme index et j'y stock l id du child

Exemple pour mon QA poe

J'ai dans mes childs une variable port qui stock le numéro du port du switch

Lorsque je crée ma table pour retrouver mes chlids je fais comme cela

Exemple pour un child id 5 et la variable port = 4

["port4"] = 5



Envoyé de mon BLA-L29 en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

Voilà, mprinfo a tout dit.


Et si Nappe_1 ça ne te plait pas, tu peux utiliser le raccourcis N1, mais ça sera pareil, dans les 2 cas c'est une string.

 

Partager ce message


Lien à poster
Partager sur d’autres sites

De Grands mercis !

 

Je détaille pour si un gars comme moi en quête de réponses ... 

 

 

j'ai simplifié mon code avec :

child:setVariable("Nappe_Child_ID" , "N3")

 

     -- Fonction pour le Child BSS_3
function QuickApp:createChild_BSS_3(Nom)
    local child = self:createChildDevice({name = Nom, type = "com.fibaro.multilevelSensor",}, BSS_3)
    child:setVariable("Nappe_Child_ID" , "N3")
    end

aaa.JPG.5d4b04ebc943be01e6be01825e7d6bf5.JPG

 

 

Du coup je liste ma table childDevices et j'attribue une variable :

 

print("---------- liste des Childs -------------")
   
for _, childDevice in pairs(self.childDevices) do
print(childDevice:getVariable("Nappe_Child_ID") , " a l'ID  : " .. childDevice.id)

if childDevice:getVariable("Nappe_Child_ID") == "N1" then
ID_Child_1 = childDevice.id
end

if childDevice:getVariable("Nappe_Child_ID") == "N2" then
ID_Child_2 = childDevice.id
end

if childDevice:getVariable("Nappe_Child_ID") == "N3" then
ID_Child_3 = childDevice.id
end

end
print("---------------- Fin --------------------")

 

 

bbb.JPG.f1cb92c2cdac5bea549b675da6994d9c.JPG

 

 

J'arrive donc à mettre à jour mes childs :

 

-- Mise à Jour du Childs Bss_1 avec la variable N1 :
   self.childDevices[ID_Child_1]:updateProperty("value", LastResultReleve)

-- Mise à Jour du Childs Bss_2 avec la variable N2 :
   self.childDevices[ID_Child_3]:updateProperty("value", LastResultReleve)

-- Mise à Jour du Childs Bss_3 avec la variable N3 :
   self.childDevices[ID_Child_3]:updateProperty("value", LastResultReleve)

 

 

Maiss !!!  ???

 

du coup ?? j'ai plus besoin de ma table sondes{} ????  Quelques messages plus haut j'avais créer une table sonde{} dans le Oninit

 

    local i = 0
    self.sondes = {}
    for id,device in pairs(self.childDevices) do
        i=i+1
        self:debug("[", id, "]", device.name, ", type of: ", device.type)
        self.sondes[i] = id
    end

j'ai testé la même procédure avec :

 

print("------- Test avec ma table Sondes ------- ")

for id, childDevice in pairs(self.sondes) do
print(id, childDevice, (childDevice:getVariable("Nappe_Child_ID")))
end

print("---------------- Fin --------------------")

mais elle crash  à cause  du (childDevice:getVariable("Nappe_Child_ID"))

[ERROR] [QUICKAPP876]: QuickApp crashed
[ERROR] [QUICKAPP876]: main.lua:315: attempt to index a number value (local 'childDevice')

 

 

vraiment merci pour vos retours ! :16:

 

PS : vous passez quand même moins de temps à écrire un tuto ::D :P :D

 

 

 

 

 

 

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Pourquoi ne pas attribué la variable lors de la création du childs ?

Envoyé de mon BLA-L29 en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

:o développe ? 

 

y'a pas une histoire de stockage limité au démarrage suivant ? il me semble avoir déja testé mais avec un Nil au démarrage suivant .... mais a vérifier  c'est vous les foufouX du code !

 

 

Modifié par Bloug

Partager ce message


Lien à poster
Partager sur d’autres sites

Je te mettrai la méthode que j'utilise

C'est très simple comme dirait@Lazer on va pas réinventer la roue

Un mec assez sympa du forum à créer une fonction pour créer les childs qu'il mets dans un fichier tools

Il suffit juste de l'utiliser

Envoyé de mon BLA-L29 en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

@mprinfo c'est bien ce que @Bloug fait, il affecte la variable au QA enfant juste après sa création, regarde sa fonction QuickApp:createChild_BSS_3()

 

@Bloug en effet, je pense que ta variable self.sondes est inutile.

 

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 1 minute, mprinfo a dit :


C'est très simple comme dirait@Lazer on va pas réinventer la roue

Un mec assez sympa du forum à créer une fonction pour créer les childs qu'il mets dans un fichier tools

Il suffit juste de l'utiliser emoji12.png

Pourtant tu es le premier à réinventer la roue :P

 

Attention quand même, cette fonction dans ma librairie tools facilite la création de QA enfants, mais ne permet pas de les gérer (identifier). Donc ça ne répondait pas aux questions posées.

  • Like 2

Partager ce message


Lien à poster
Partager sur d’autres sites

@Lazer oui tu as pas tord moi je ne comprends que si je pratique

J'ai horreur d'utiliser un truc bêtement sans comprendre le code de bout en bout

Après je code que de temps en temps. Je ne touche pas d'ordinateur dans mon métier. C'est plutôt pince à papier et balais

Envoyé de mon BLA-L29 en utilisant Tapatalk

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon au moins, maintenant j'arrive a comprendre ! et à faire !

une dernière précision la table : childDevices{} ou je pioche les infos est crée automatiquement lors de l'initialisation des appareils enfants ?

 

En tout cas , Encore merci !

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui la table self.childDevices est automatiquement générée.

Partager ce message


Lien à poster
Partager sur d’autres sites

×