Aller au contenu

comment identifier des devices multistate ?


Messages recommandés

Posté(e) (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é par fel-x
Posté(e)

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

 

 

Posté(e)

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 :

 

image.png.75e3659b7fd964c0341f82dff6e0d299.png

 

 

 

Posté(e) (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é par jang
  • Like 3
Posté(e) (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é par fel-x
Posté(e) (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é par jang
Posté(e)

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.

×
×
  • Créer...