jjacques68 Posté(e) le 31 mai 2020 Signaler Posté(e) le 31 mai 2020 (modifié) COMPORTEMENT ETRANGE : j'ai une simple boucle le soir qui doit m'éteindre toute les lumières (device avec catégories "Lights", donc y compris les Child de l'IPX) : --Extiction lumières for i = 1, #ListeDevice do if ListeDevice[i].properties.categories and ListeDevice[i].properties.categories[1] == "lights" then fibaro.call(ListeDevice[i].id, "turnOff") fibaro.sleep(50) end end je sais pas si c'est depuis que j'ai passé l'IPX sur Child Device (ou depuis la dernière mise à jour), mais j'ai dû ajouter une tempo de 50 ms, car systématiquement 1 Chlid device (toujours le même en plus, le deuxième) n'était pas éteint. Vous avez une idée ? EDIT : même sans passer par une boucle, faire un turnOff (ou On) sur 3 Child (de l'IPX) juste l'un derrière l'autre, sans temporisation, me fait le même bug !!!??? @Lazer, j'aimerais bien savoir si tu constates la même chose ? du moins si ton installation le permet... Modifié le 1 juin 2020 par jjacques68
Cardane Posté(e) le 13 juin 2020 Signaler Posté(e) le 13 juin 2020 @Krikroff, bonjour, j'ai une question concernant les appareils enfants... dans le contexte d'un QA Heos, je voudrais créer autant d'enfants que de devices HEOS installés. Bien que l'ensemble de la gestion des commandes et des messages de retour se fasse via le QA Master, je voudrais que chaque enfant puisse avoir des boutons (exemple : Play/Pause/Start/Volume, etc) de manière à pouvoir gérer le volume et le titre écouté sur chaque device. Est-ce que tu crois qu'il est possible (et si oui, comment ?) d'avoir des childs avec des boutons ? Comme je ne vois qu'il n'y a aucun moyen de le faire via l'interface, il y a peut-être moyen par un bout de code ? Par exemple, je vois que le QA dispo pour HEOS par défaut dans la box permet de faire ca comme il le faisait sur la HC2, mais dommage que ce QA ne fonctionne pas bien du tout :-) merci à toi
Did Posté(e) le 13 juin 2020 Signaler Posté(e) le 13 juin 2020 Il y a 2 heures, Cardane a dit : Est-ce que tu crois qu'il est possible (et si oui, comment ?) d'avoir des childs avec des boutons ? Oui, ça s'appelle l'acné. 1 4
Krikroff Posté(e) le 13 juin 2020 Auteur Signaler Posté(e) le 13 juin 2020 Lol [mention]Did [/mention] j’adore [mention]Cardane [/mention] malheureusement ce n’est pas encore disponible et c’est dommage c’était faisable dès le départ avec les plugins utilisateurs... faut attendre.Envoyé de mon iPhone en utilisant Tapatalk 1
jang Posté(e) le 13 juin 2020 Signaler Posté(e) le 13 juin 2020 You could hijack the com.fibaro.sonosPlayer type class 'HEOSPlayer'(QuickAppChild) function HEOSPlayer:__init(dev) QuickAppChild.__init(self,dev) self.ip = dev.properties.ip self:trace("HEOS:",self.ip," initiated, deviceId:",self.id) end function HEOSPlayer:play_Button() self:trace("Play HEOS:",self.ip,", deviceId:",self.id) end function HEOSPlayer:pause_Button() self:trace("Pause HEOS:",self.ip,", deviceId:",self.id) end function HEOSPlayer:rewind_Button() self:trace("Rewind HEOS:",self.ip,", deviceId:",self.id) end function HEOSPlayer:forward_Button() self:trace("Forward HEOS:",self.ip,", deviceId:",self.id) end function HEOSPlayer:mute_on() self:trace("Mute HEOS:",self.ip,", deviceId:",self.id) end function HEOSPlayer:mute_off() self:trace("Unmute HEOS:",self.ip,", deviceId:",self.id) end function HEOSPlayer:volume_Slider(ev) self:trace("Volume HEOS:",self.ip,", deviceId:",self.id," Volume:",ev.values[1]) self:updateProperty("volume",ev.values[1]) self:updateProperty('ui.volume_Label.caption', tostring(ev.values[1])) end function HEOSPlayer:setInfo(label,title,creator) self:updateProperty('ui.position_Label.caption', "Label:"..label) self:updateProperty('ui.title_Label.caption', "Title:"..title) self:updateProperty('ui.creator_Label.caption', "Creator:"..creator) end local function getChildVariable(child,varName) for _,v in ipairs(child.properties.quickAppVariables or {}) do if v.name==varName then return v.value end end return "" end function QuickApp:UIHandler(event) local obj = self if self.id ~= event.deviceId then obj = self.childDevices[event.deviceId] end if not obj then return end local elm,etyp = event.elementName, event.eventType local cb = obj.uiCallbacks or {} if obj[elm] then return obj:callAction(elm, event) end if cb[elm] and cb[elm][etyp] then return obj:callAction(cb[elm][etyp], event) end if obj[elm.."Clicked"] then return obj:callAction(elm.."Clicked", table.unpack(event.values or {})) end self:warning("UI callback for element:", elm, " not found.") end function QuickApp:onInit() self:trace("Mother of HEOS, deviceId:",self.id) local cdevs = api.get("/devices?parentId="..self.id) or {} -- Pick up all my children function self:initChildDevices() end -- Null function, else Fibaro calls it after onInit()... if #cdevs ~= 2 then -- No children, create 2 local initChildData = { {className="HEOSPlayer", type="com.fibaro.sonosSpeaker", ip="1.2.3.4"}, {className="HEOSPlayer", type="com.fibaro.sonosSpeaker", ip="1.2.3.5"}, } for i,c in ipairs(initChildData) do local child = self:createChildDevice( {name = "HEOS "..i, type=c.type, initialProperties = { deviceIcon = 28, --icon = { path="plugins/com.fibaro.denonHeos/img/icon.png"}, ip = c.ip, }, -- Add properties if you need initialInterfaces = {}, -- Add interfaces if you need }, _G[c.className] -- Fetch class constructor from class name ) child:setVariable("className",c.className) -- Save class name so we know when we load it next time api.put("/devices/"..child.id,{properties={icon={path="plugins/com.fibaro.denonHeos/img/icon.png"}}}) end else for _,child in ipairs(cdevs) do local className = getChildVariable(child,"className") childObject = _G[className](child) self.childDevices[child.id]=childObject end end end 2
Krikroff Posté(e) le 13 juin 2020 Auteur Signaler Posté(e) le 13 juin 2020 Oui c’est certain puisqu’il s’agit d’un type existant, mais cela ne règle que partiellement le problème.Envoyé de mon iPhone en utilisant Tapatalk
jang Posté(e) le 14 juin 2020 Signaler Posté(e) le 14 juin 2020 Il y a 20 heures, Krikroff a dit : Yes it is certain since it is an existing type, but that only partially solves the problem. Yes, but potentially an interesting part of the problem Here are some add on to the QuickApp class to make child management easier. https://forum.fibaro.com/topic/49113-hc3-quickapps-coding-tips-and-tricks/?do=findComment&comment=209389 Reduces tasks to QuickApp:createChild{} and QuickApp:loadChildren() and fixes button interactions...
jjacques68 Posté(e) le 7 août 2020 Signaler Posté(e) le 7 août 2020 (modifié) petite question : où est le problème dans cette boucle : self.Liste = {} for id,child in pairs(self.childDevices) do print(id, child:getVariable("IPX_OUTPUT")) self.Liste[id] = child:getVariable("IPX_OUTPUT") end traduction : pour chaque "enfants" je veux remplir une table sous cette forme : [ID_Enfant] = contenu_de_sa_variable pourtant le print donne le bon résultat !!!! self.Liste = { [xxx] = 1 [yyy] = 2 [zzz] = 3 ... } Et bien il me remplit pas la table !!!! ??????????? Modifié le 7 août 2020 par jjacques68
mprinfo Posté(e) le 7 août 2020 Signaler Posté(e) le 7 août 2020 En regardant en vitesse je dirais un problème de virgules Envoyé avec Tapatalk
jjacques68 Posté(e) le 7 août 2020 Signaler Posté(e) le 7 août 2020 De virgules ? mais y a pas de virgules !! y en a une dans le print c'est tout, mais le problème n'est pas dans le print...
mprinfo Posté(e) le 7 août 2020 Signaler Posté(e) le 7 août 2020 Chaque élément dans la table est séparée par une virguleLa je ne la vois pas Envoyé avec Tapatalk
mprinfo Posté(e) le 7 août 2020 Signaler Posté(e) le 7 août 2020 self.Liste = { [xxx] = 1 [yyy] = 2 [zzz] = 3 ...}Moi je vois plutôt celaself.Liste = { [xxx] = 1, [yyy] = 2, [zzz] = 3, ...}Envoyé avec Tapatalk
jjacques68 Posté(e) le 7 août 2020 Signaler Posté(e) le 7 août 2020 ah oui ok ! nan mais c'était juste un exemple... Le soucsi est bien dans le code plus haut ! J'affecte directement une valeur dans la table en spécifiant sa position. Et ça marche pas... Comme si on pouvait pas commencer avec autre chose que la position 1...
Lazer Posté(e) le 7 août 2020 Signaler Posté(e) le 7 août 2020 Qu'est ce qui te fait dire qu'il ne remplie pas la table ? Si tu ne commences pas l'index à 1, tu ne peux pas la parcourir avec ipairs(), donc tu auras l'impression que la table est vide. Pourtant si tu testes les valeurs, tu devrais voir qu'elles sont bien présentes. if self.Liste{123] then punition.call("Ah tu te cachais petit malin") else police.call("avis de recherche") end 2
jjacques68 Posté(e) le 7 août 2020 Signaler Posté(e) le 7 août 2020 tout simplement quand je fais un print(#MaTable) j'ai 0 !
Lazer Posté(e) le 7 août 2020 Signaler Posté(e) le 7 août 2020 Normal aussi, # ne sait pas compter quand l'index ne commence par à 1. C'est pour cela que je te dis de les appeler 1 par 1 par leur nom comme dans mon exemple
jjacques68 Posté(e) le 7 août 2020 Signaler Posté(e) le 7 août 2020 Je viens de tester, j'ai beau m'adresser directement à la table après sont remplissage avec : print(self.MaTable[2]) réponse nil !!! nan mais c'est terrible ce truc !
Lazer Posté(e) le 7 août 2020 Signaler Posté(e) le 7 août 2020 (modifié) Sinon il faut faire l'appel des enfants avec select() for i=1, select('#', self.MaTable) do local v=select(i, self.MaTable) print(type(v)) end EDIT : cela dit, je viens de regarder mes QuickApps, j'utilise des index alphabétiques à chaque fois, donc de type "string" Modifié le 7 août 2020 par Lazer
mprinfo Posté(e) le 7 août 2020 Signaler Posté(e) le 7 août 2020 Json.decodePuisPrintTu verra si elle est vide ou pasEnvoyé avec Tapatalk
jjacques68 Posté(e) le 7 août 2020 Signaler Posté(e) le 7 août 2020 OH PUTAIN QUEL CON !!! pour lire je faisais : for i= 1, 10 do print(self.MaTable[i]) end Mais comme tu as dis, les valeur ne sont pas forcément placés dans les 10 premières occurences... mais si je m'adresse comme ça : for i= 640, 650 do print(self.MaTable[i]) end là je les ai !! bordel 2 heures de perdu avec ces conneries !!! bref, une fois de plus merciiiiiiiiiiiiiiiiiiiiiii !
Lazer Posté(e) le 7 août 2020 Signaler Posté(e) le 7 août 2020 Ah là là, on veut élever des enfants, mais on ne se souvient même pas de leur prénom C'est ça les familles nombreuses 1
jjacques68 Posté(e) le 7 août 2020 Signaler Posté(e) le 7 août 2020 ben du coup mon noueau QA IPX devient nickel !!! je n'utilise plus du tout les requettes HTTP, mais que une socket TCP... Plus de réglages PUSH à faire sur les sorties ou entrées... C'est TOP ! Juste un soucis de traitement de chaine de caractères... Si vous êtes motivé messieurs : https://www.domotique-fibaro.fr/topic/14509-optimisation-traitement-de-chaines-de-caractères/ 1
mprinfo Posté(e) le 7 août 2020 Signaler Posté(e) le 7 août 2020 Après le string les enfantsPunaise vous allez vite en besogneJe vais pas vous déranger plus longtempsPS si vous cherchez un parrain riche je vous suggère@Nico il sera ravi Envoyé avec Tapatalk 2
Nico Posté(e) le 8 août 2020 Signaler Posté(e) le 8 août 2020 Merci Pascal. Par contre je suis radin sur les cadeaux aux parents de mes filleuls 2
Messages recommandés