Aller au contenu

Gestion des appareils enfants


Krikroff

Messages recommandés

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

  • Like 2
Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...

@nico tu n'as pas le choix au moins pour l’écusson fibaro :D Oui au Luxembourg stock illimité. J'ai 10% sur toutes les ventes lié au forum :98:

 

@nico si tu veux un accès a ma hc3 pour voir aucun soucis je te donne. 

Lien vers le commentaire
Partager sur d’autres sites

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 :D

 

Fantastique ça....

 

Mon premier QA utile sera dédié à l'IPX800 :)

 

 

Tu vas pouvoir faire une demande d'allocation familial a ce rythme :98:

  • Like 1
  • Haha 1
Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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 :P

 

pour les Child Device, j'avoue ne pas trop comprendre encore leur exemple sur leur site...

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

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.

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

 

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

 

image.thumb.png.f084d846d0fa90c4f62aa32a45fa5eaa.png

 

  

 

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 :
 

image.png.058dbe69a1a1d8f5c8cb9afd5b365a7a.png

 

Cependant, impossible d'y accéder depuis l'interface Web, le panneau de propriétés de l'enfant ne montre pas ses variables :


image.thumb.png.ef2e6e62931c7acff35645d3f84fb8a3.png
 

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.
 

 

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

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à :D

 

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.

Lien vers le commentaire
Partager sur d’autres sites

Il y a 3 heures, Lazer a dit :

En tout cas je m'éclate là :D

j'arrive :60:

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

 

 

Lien vers le commentaire
Partager sur d’autres sites

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 ?

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

 

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...

Lien vers le commentaire
Partager sur d’autres sites

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é.

 

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

ah mais quel c... je suis !!!! je faisais child.setVariable() au lieu de child:setVariable() :16:

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...

 

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

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é par jjacques68
Lien vers le commentaire
Partager sur d’autres sites

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 :3:

 

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é par jjacques68
Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...