Krikroff Posté(e) le 9 avril 2020 Signaler Posté(e) le 9 avril 2020 Voici la documentation avec les bases nécessaires pour l'ajout d' un ou plusieurs modules à un QA "deviceController". Cette fonctionnalité proposée depuis la mise à jour 5.030.45 version stable Le lien vers la page officielle : Quick Apps – managing child devices 2
Lazer Posté(e) le 13 mai 2020 Signaler Posté(e) le 13 mai 2020 Ah ah, 24h avec mon HC3, j'ai fait mon premier Child Device Et puis un 2nd Fantastique ça.... Mon premier QA utile sera dédié à l'IPX800 1
Nico Posté(e) le 13 mai 2020 Signaler Posté(e) le 13 mai 2020 Vous faites chier les gars, vais devoir commander tout de même...
Krikroff Posté(e) le 13 mai 2020 Auteur Signaler Posté(e) le 13 mai 2020 Vas y il y à du stock au Luxembourg Envoyé de mon iPhone en utilisant Tapatalk
mprinfo Posté(e) le 13 mai 2020 Signaler Posté(e) le 13 mai 2020 @nico tu n'as pas le choix au moins pour l’écusson fibaro Oui au Luxembourg stock illimité. J'ai 10% sur toutes les ventes lié au forum @nico si tu veux un accès a ma hc3 pour voir aucun soucis je te donne.
mprinfo Posté(e) le 13 mai 2020 Signaler Posté(e) le 13 mai 2020 il y a une heure, Lazer a dit : Ah ah, 24h avec mon HC3, j'ai fait mon premier Child Device Et puis un 2nd Fantastique ça.... Mon premier QA utile sera dédié à l'IPX800 Tu vas pouvoir faire une demande d'allocation familial a ce rythme 1 1
jjacques68 Posté(e) le 15 mai 2020 Signaler Posté(e) le 15 mai 2020 Le 13/05/2020 à 22:11, Lazer a dit : Mon premier QA utile sera dédié à l'IPX800 tu as quoi comme idée ? dans mon cas j'ai un QA unique de gestion de l'IPX, avec plusieurs fonctions : demander le status d'une In/Output modifier une output réceptionne le retour d'état d'une sortie (qui d'ailleurs affecte la valeur des QA créés pour chaque fonction : éclairage, arrosage, ...) et qui me permet depuis ce même QA de modifier les OUT (en fait ça c'est inutile, mais c'était la première chose que j'avais faite à la réception de la HC3 )
Lazer Posté(e) le 15 mai 2020 Signaler Posté(e) le 15 mai 2020 Ton tuto est prévu pour l'IPX800 v3 Et de ce que j'ai compris de ton tuto, tu n'as pas un QA unique, car tu crées autant de QA qu'il y a d'entrées/sorties sur l'IPX800 Perso je veux simplifier tout ça, exploiter les QA tels qu'ils sont prévus pour, avec les Child Devices c'est hyper puissant.
jjacques68 Posté(e) le 15 mai 2020 Signaler Posté(e) le 15 mai 2020 en relisant, je viens de m'en rendre compte oui. punais avec du recul, y a moyen de vachement simplifier ça !!! et sans passer par les Child Device... j'ai fait compliqué sur ce coup-là, va falloir que je corrige ça... allé... comme dis c'était la prise en main pour les Child Device, j'avoue ne pas trop comprendre encore leur exemple sur leur site... 1
Lazer Posté(e) le 15 mai 2020 Signaler Posté(e) le 15 mai 2020 Justement c'est ça le problème, il n'y a PAS d'exemple. La page de manuel est super confuse, pas du tout didactique, quelques bouts de code balancés en vrac et dans le désordre, j'ai dû relire au moins 15 fois pour finir par comprendre. Bref, du Fibaro quoi, ils n'ont jamais été copains avec les documentations.... Ce que je te conseille parce que c'est finalement le plus simple, c'est de créer un QA de type Device Controller, et tu auras une trame de code utilisable. Heureusement de ce coté là, sur les bouts de codes par défaut des différents types de QA, ils se sont appliqués un minimum en donnant un template fonctionnel pour chaque type de QA. 1
Lazer Posté(e) le 15 mai 2020 Signaler Posté(e) le 15 mai 2020 @Krikroff Nouveau bug, peut-être déjà remonté ? On peut définir des variables pour les child devices, comme mentionné dans la doc : https://manuals.fibaro.com/knowledge-base-browse/hc3-quick-apps-managing-child-devices/ Juste après avoir créé un enfant, j'ai utilisé une instruction setVariable() comme ceci pour définir une variable dans l'enfant : child.setVariable("Digital_Input", "0") On retrouve bien cette variable dans le JSON de l'enfant : Cependant, impossible d'y accéder depuis l'interface Web, le panneau de propriétés de l'enfant ne montre pas ses variables : J'ajoute que le bug est reproductible sur tous les Child Devices que j'ai créé, de différents types. => Je pense que Fibaro a "oublié" d'implémenter le panneau de configuration des variables pour les device enfants. Évidemment, ça me bloque dans le développement de mon QA IPX800.... donc l'immédiat je vais tricher en injectant manuellement les valeurs dans les variables, mais il faudra que Fibaro ajoute ce panneau indispensable pour que je partage le QuickApp aux utilisateurs. 1
jjacques68 Posté(e) le 15 mai 2020 Signaler Posté(e) le 15 mai 2020 @Lazer tu pourras poster ton projet de child device avec l'ipx ? ça m'intéresserait d'avoir un exemple concret... pour comprendre le principe...
Lazer Posté(e) le 15 mai 2020 Signaler Posté(e) le 15 mai 2020 Ben tu vois 2 lignes au dessus que je ne pourrai pas le partager tant que Fibaro ne corrigera pas le bug... donc ça implique que OUI je vais le partager. Enfin j'y crois. Que Fibaro va finir de développer sa box pour ajouter les fonctions manquantes. En tout cas je m'éclate là Et si tu me demande de le partager en l'état, pour l'instant c'est impossible, c'est un prototype très loin d'être fonctionnel, il y a encore pas mal d'heures de développement. Surtout que mon projet a déjà évolué entre hier et aujourd'hui, au fur et à mesure que je découvre les possibilités des Quick Apps.
Krikroff Posté(e) le 15 mai 2020 Auteur Signaler Posté(e) le 15 mai 2020 Il y a 3 heures, Lazer a dit : En tout cas je m'éclate là j'arrive Il y a 3 heures, Lazer a dit : @Krikroff Nouveau bug, peut-être déjà remonté ? Je vais regarder, cela ne me parle pas en effet ... Après je ne suis pas forcement choqué par ça et me demande même s'il s'agit d'un bug ou si c'est volontaire. Le device maître est le "centre nerveux" d'un QA multi-device c'est lui qui expose ce qui est public, les variables d'un enfant pourraient alors être considérées comme des variables privées... Et si nécessaire je pense que ce n'est pas très compliqué de les exposer via le parent
jjacques68 Posté(e) le 16 mai 2020 Signaler Posté(e) le 16 mai 2020 Il y a 12 heures, Lazer a dit : Ce que je te conseille parce que c'est finalement le plus simple, c'est de créer un QA de type Device Controller, et tu auras une trame de code utilisable. chose faite... en effet ça aide à comprendre. Pour la création des Chlid, c'est OK. par contre concernant l'IPX, je suppose que l'idée de base est d'avoir autant de Child que de Output ! je vois bien les 3 fonctions propres au Child, et je pense comprendre leur rôle. function MyBinarySwitch:__init(device) QuickAppChild.__init(self, device) self:debug(self.id , "MyBinarySwitch init") end function MyBinarySwitch:turnOn() self:debug("child", self.id, "turned on") self:updateProperty("value", true) end function MyBinarySwitch:turnOff() self:debug("child", self.id, "turned off") self:updateProperty("value", false) end Le code de pilotage des sortie se mettra dans les fonctions turnOn/Off... Mais comment associer le numéro de sortie de l'IPX à un Child ?
jjacques68 Posté(e) le 16 mai 2020 Signaler Posté(e) le 16 mai 2020 Il y a 11 heures, Lazer a dit : Juste après avoir créé un enfant, j'ai utilisé une instruction setVariable() comme ceci pour définir une variable dans l'enfant : child.setVariable("Digital_Input", "0") où places-tu cette ligne ? dans la méthode createChild() ? ça me retourne une erreur...
Lazer Posté(e) le 16 mai 2020 Signaler Posté(e) le 16 mai 2020 La méthode createChild() n'existe pas au sens Fibaro, c'est juste une méthode crée par le programmeur de l'exemple que tu as utilisé. L'appel à setVariable() c'est juste après avoir créé le child device avec la fonction self:createChildDevice() Dans mon code je récupère le retour dans la variable "child", mais si tu l'as appelé différemment faut que tu adaptes. Exemple de bout de code pour comprendre la logique (non testé) : local child = self:createChildDevice({ name = "myChild", type = "com.fibaro.multilevelSensor", }, childClass ) if child then -- Add child device unit if childUnit then child:updateProperty("unit", childUnit) end -- Add child device variables child:setVariable("Digital_Input", "0") else -- Afficher une insulte end En bonus je t'ai mis l'instruction pour ajouter une unité au périphérique enfant... en pratique c'est utile pour les devices de type multilevelSensor (par exemple luminosité en lux, bruit en dB, etc). C'est inutile pour les températures et humidité qui disposent déjà de leur type prédéfini (com.fibaro.temperatureSensor et com.fibaro.humiditySensor) car l'unité est automatiquement configurée dans ce cas. Sinon tu peux t'inspirer du QuickApp Netatmo Weather Station QA for HC3 sur le Market : https://marketplace.fibaro.com/items/netatmo-qa-for-hc3 Il y a 2 heures, jjacques68 a dit : par contre concernant l'IPX, je suppose que l'idée de base est d'avoir autant de Child que de Output ! En fait mieux que ça : - autant de child que d'entrées/sorties, tant numériques qu'analogiques - et j'ai même prévu de laisser le choix à l'utilisateur, il pourra choisir de créer ou non les devices correspondants aux différents I/O de l'IPX800 L'idée c'est de faire un QA entièrement paramétrable, sans saisir une seule ligne de code LUA, juste en cliquant sur des boutons et en renseignant des valeurs dans les variables de chaque device (via l'interface graphique, quand Fibaro aura implémenté l'onglet manquant que je réclame quelques messages plus haut) Il y a 2 heures, jjacques68 a dit : Mais comment associer le numéro de sortie de l'IPX à un Child ? Dans la variable de chaque QA Child justement c'est tout l'objet du bug remonté. 1
jjacques68 Posté(e) le 16 mai 2020 Signaler Posté(e) le 16 mai 2020 ah mais quel c... je suis !!!! je faisais child.setVariable() au lieu de child:setVariable() c'est pas la première fois que je me fais avoir... foutu classe il y a 8 minutes, Lazer a dit : Dans la variable de chaque QA Child justement c'est tout l'objet du bug remonté. on y accède pas depuis l'interface, mais on peut depuis le code ? faut que j'essaye... 1
jjacques68 Posté(e) le 17 mai 2020 Signaler Posté(e) le 17 mai 2020 (modifié) comment on fait pour accéder à une variable du parent dans le Child ? j'ai trouvé : self.parent:getVariable() Modifié le 17 mai 2020 par jjacques68
jjacques68 Posté(e) le 17 mai 2020 Signaler Posté(e) le 17 mai 2020 roooo là là !!! c'est de la BOMBE CE TRUC !!!!!!!!!!!!!!! 2
jjacques68 Posté(e) le 17 mai 2020 Signaler Posté(e) le 17 mai 2020 (modifié) un inconvénient quand même et pas un petit !! : si un jour on fait une modification sur les Child, il faut supprimer l'ancien pour créer le nouveau avec les modifications !! et du coup l'ID du Child change à chaque fois, un peu pénible si on l'utilise comme trigger ou autre... à moins que j'ai loupé qqch ? Modifié le 17 mai 2020 par jjacques68
jjacques68 Posté(e) le 17 mai 2020 Signaler Posté(e) le 17 mai 2020 (modifié) alors d'après la doc, il semble qu'il y aurait une possibilité de "synchroniser" les Child... mais comme dit @Krikroff, faut extrapoler l'exemple qu'il donne, et là... franchement... pourtant je suis reposé... mais je bug complet Citation Keep your devices synchronized Adding child devices is usually not one-time action in the Quick App lifecycle. When we’re connected to some kind of hub, its list of devices may change in time. Some devices may be added, some removed. The Quick App model should reflect reality. It is necessary to distinguish which devices are already added to Home Center, which to add and which needs to be removed. We can take a look at our sample model: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [ { "uid": "b59c67bf196a4758191e42f76670ceba", "name": "bedroom light", "type": "lightBulb", "state": 1 }, { "uid": "934b535800b1cba8f96a5d72f72f1611", "name": "living room", "type": "dimmableBulb", "state": 80 }, { "uid": "2be9bd7a3434f7038ca27d1918de58bd", "name": "bedroom", "type": "temperatureSensor", "state": 21.4 } ] When downloading devices model from a hub, we can store the original identifier of this device used on a hub. Then we can create some kind of map for our sample model, which may look like this: <hub device id> -> <hc device id>. We’ll be able to check which device from the Home Center represents a particular device from a hub. We would have to do this on child device creation. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 function QuickApp:createChild(name, type, uid) local child = self:createChildDevice({ name = name, type = type, }, MyBinarySwitch) self:trace("Child device created: ", child.id) self:storeDevice(uid, child.id) end function QuickApp:storeDevice(uid, hcId) self.devicesMap[uid] = hcId -- Save devicesMap, so we can restore it after Quick App restart. -- Just put self.devicesMap = self:getVariable("devicesMap") in onInit method. self:setVariable("devicesMap", self.devicesMap) end Now by using devicesMap we can properly synchronize our devices. It can help us with updating properties as well. Modifié le 17 mai 2020 par jjacques68
razowski Posté(e) le 17 mai 2020 Signaler Posté(e) le 17 mai 2020 Hello, Le partage d’une QA controller avec child pour l’IPX serait possible? Pour s’inspirer, car cela n’est pas clair pour moi à ce stade. Je comprends le principe mais je comprends pas comment définir que le child numéro 1 c’est telle sortie ou telle autre sortie. Merci Envoyé de mon iPhone en utilisant Tapatalk
Messages recommandés