fel-x Posté(e) dimanche à 19:21 Signaler Posté(e) dimanche à 19:21 (modifié) Salut dans mon code, je voudrais pouvoir vérifier si un device est multistate ou pas. En fournissant l'ID d'un module ou d'une QA, je voudrais une vérification immédiate du status multistate ou non. J'ai été lire les Json de plusieurs devices via /api/devices/#ID mais je n'ai pas trouvé une propriété caractéristique... Bien entendu on peut le déduire assez facilement selon le type, ou le basetype, ou le supportedDeviceRoles, etc... Mais je cherche un fonction Lua qui pourra me le dire tout de suite ? Suis-je passé à côté d'une évidence? merci Modifié lundi à 07:56 par fel-x
fel-x Posté(e) lundi à 06:52 Auteur Signaler Posté(e) lundi à 06:52 Je vais donner une précision sur la finalité car ce n'est pas très clair à la relecture J'écris une QA (dont vous pourrez peut-être profiter sous peu) qui permet de sélectionner des icônes de sa box, et de les attribuer à n'importe quel device (parent, enfant, caché, etc.), avec interface visuelle pratique. C'est purement pour enjoliver le UI ! Afin d'éviter une situation où un utilisateur attribuerait une icône monostate à un device 'multistate' (on devrait plutôt dire "multi-icône"), je voudrais les détecter et empêcher l'exécution. En effet, le UI va chercher les états différents d'une icône dans le cas des modules/QA qui peuvent changer d'état, comme les switches ON/OFF ou des volets par exemple. --> Ce que je cherche c'est une façon (simple?) d'identifier si pour un module donné, la box va chercher des icônes selon l'état ou une icône fixe. Le properties.deviceIcon n'est pas suffisant, ni le contenu du properties.icon (qui parfois est vide, ou fait référence dans properties.icon.path à un fichier SVG plutôt qu'à une icône PNG avec suffixes d'état '#ID0.png' '#ID100.png'). Quant à properties.icon.source il peut valoir 'HC' ou 'HC_USER' sans que cela n'ait d'impact réel sur le fonctionnement. j'espère que ça a du sens ce que je dis
Lazer Posté(e) lundi à 09:12 Signaler Posté(e) lundi à 09:12 Soit je n'ai pas bien compris ce que tu cherches, soit.... c'est tout simple Il faut rechercher les devices de type com.fibaro.multiPositionSwitch : /api/devices?type=com.fibaro.multiPositionSwitch Et donc vérifier le type du module dans son JSON :
jang Posté(e) lundi à 11:33 Signaler Posté(e) lundi à 11:33 (modifié) There is no ready made function - you have to do it yourself. function QuickApp:iconCount(typ) local map = { [QuickAppBase.iconProviders.single]=1, -- single icon [QuickAppBase.iconProviders.binary]=2, -- off,on [QuickAppBase.iconProviders.multilevel]=11, -- 0%,10%,20%,30%,40%,50%,60%,70%,80%,90%,100% [QuickAppBase.iconProviders.baseShutter]=5 -- opening,opened,closing,closed,unknown } local iconProvider = QuickAppBase.deviceIconTypeMapping[typ] or "" return map[iconProvider] end function QuickApp:onInit() self:debug(self.name, self.id) print(self:iconCount("com.fibaro.energyMeter")) print(self:iconCount("com.fibaro.multilevelSwitch")) print(self:iconCount("com.fibaro.baseShutter")) end iconCount returns number of icons for a specific type. Currently there only seems to be 4 options, 1,2,5,11 icons. If it is not mapped (return nil), try with the device baseType and see if that is mapped. ...or Fibaro has forgot to do the mapping. Modifié lundi à 11:36 par jang 3
fel-x Posté(e) mardi à 05:44 Auteur Signaler Posté(e) mardi à 05:44 (modifié) Ce n'est pas tout à fait ça @Lazer, je voudrais interroger un module et qu'il me réponde s"'il attend une icône, ou un set de 2 icônes, ou un set de5 icônes, ou un set de 11 icônes. Donc la réponse de @jang semble plus proche de ce que je cherche. Est-ce que ceci suffit à couvrir toutes les possibilités ? local map = { [QuickAppBase.iconProviders.single]=1, -- single icon [QuickAppBase.iconProviders.binary]=2, -- off,on [QuickAppBase.iconProviders.multilevel]=11, -- 0%,10%,20%,30%,40%,50%,60%,70%,80%,90%,100% [QuickAppBase.iconProviders.baseShutter]=5 -- opening,opened,closing,closed,unknown } Ou bien il faudrait construire une table avec davantage d'éventualités... Je vais vérifier que paramètres permet de mapper ça... Merci @jang ! Modifié mardi à 05:54 par fel-x
jang Posté(e) mardi à 07:15 Signaler Posté(e) mardi à 07:15 (modifié) The types mapped in QuickAppBase.deviceIconTypeMapping by Fibaro are: com.fibaro.powerSensor com.fibaro.heatDetector com.fibaro.windSensor com.fibaro.windowSensor com.fibaro.rainDetector com.fibaro.gasDetector com.fibaro.player com.fibaro.genericDevice com.fibaro.humiditySensor com.fibaro.multilevelSensor com.fibaro.energyMeter com.fibaro.motionSensor com.fibaro.deviceController com.fibaro.rollerShutter com.fibaro.baseShutter com.fibaro.multilevelSwitch com.fibaro.doorLock com.fibaro.temperatureSensor com.fibaro.fireDetector com.fibaro.doorSensor com.fibaro.binarySensor com.fibaro.coDetector com.fibaro.floodSensor com.fibaro.binarySwitch com.fibaro.smokeSensor This means that we can upload iconsets for these types (and probably super types that has these as base types) If not mapped we can at least assign a single icon to them. Modifié mardi à 07:17 par jang
fel-x Posté(e) mardi à 08:27 Auteur Signaler Posté(e) mardi à 08:27 Ha merci ça m'aide Je suis en train de tester une série de devices avec cette boucle : for id = 100, 150 do local dev = api.get("/devices/" .. id) if not dev or dev == nil then self:debug("Device Tester : ", "Le module " .. id .. " n'existe pas") else local typ = dev.typeType or "unknown" local count = self:iconCount(typ) self:debug("Device Tester : ", "Le module " .. id .. " attend " .. count .. " icone(s)") end je récupère surtout des "Le module xxx attend ?? icone(s)" et avec dev.typeType c'est encore pire... Mais je vais continuer à creuser par là. Je ne veux pas me baser sur dev.properties.icon.path ou dev.properties.icon qui ne sont pas fiables je crois.
Messages recommandés