Aller au contenu

Outil pour icones, Backup et manipulation par QA


Messages recommandés

Posté(e) (modifié)

Bonjour à tous,

J'espère poster ce sujet au bon endroit et qu’il est ‘original’...

Je suis sur le point de finaliser une migration de HC2 vers HC3 pour laquelle je me suis fait quelques outils sous Windows (et pas linux: Je n'assume pas 100% mon côté geek, tout en étant l'heureux propriétaire d'un Synology...). Pour commencer je vous partage le dernier né de ces outils.

Depuis 8 années je viens prendre de bonnes idées sur ce site. Site tellement vaste qu’au bout d’un moment on se dit que : « si on n’a pas la réponse à la question ‘konseupoz,’ c’est qu’on n’a pas su bien la poser » (mais, objectivement, yadéfoi où le moteur de recherche du site n’aide pas…).

 

Bref ! Je vais essayer de passer de ‘profiteur’ à ‘contributeur’ en partageant un de mes outils de développement / transfert en espérant qu’il n’existe pas déjà ailleurs et  souhaitant qu’il rende directement service ou qu’il donne des idées.

Au départ, j ’ai plein de QA, et j’aime bien que leurs icones en reflètent l’état. Le carton entre-ouvert avec un point d’interrogation ne me suffit généralement pas :), il me rappelle trop les livraisons ‘uber-style’ jetées par-dessus la clôture.
Ajoutez à cela les multilevelSwitch qui demandent 11 fichiers png chacun à chaque modification/bug. Au moins en cours de développement, vous avez dû ‘souffrir’ autant que moi de devoir recharger les icones ’chéris’ de vos QA/devices. A chaque fois, on hésite à faire des retours en arrière pour lesquels il faudra redésigner 1 par 1 les icones au travers de l’interface HC3 et, du coup, devoir modifier le code des QA juste pour quelque IDs qui ont été modifiées…

 

Donc, en lien, je vous propose un code/script Python qui permet :

  1. Une sauvegarde/scan de toutes les ‘User’ icones utilisées par les devices de votre HC3.
    J’ai laissé de côté les icones de ’room’ (qui ne changent pas souvent)
    et les icones de ‘scene’, (paskeu les scènes je ne m’en sers plus du tout, mais c’est une autre histoire).
  2. La restauration des icônes sauvegardées dans l’opération précédente

    Ces deux opérations ont surtout un intérêt en cours de développement lors de retours en arrière via des ‘backup / restore’
     
  3. ET SURTOUT : Un moyen de maintenir/updater/upgrader/modifier/etPlusEncore, les icones d’une QA sans en toucher le code (ou presque...).
    C’était le but premier de ce script, les deux autres fonctionnalités ne sont que des sous-produits de l’intention initiale.

 

C'est en Python (3.11), ne me demandez pas trop pourquoi... Je le fait tourner sous Windows(10) mais a priori ça doit aussi le faire sous linux...

 

Le Zip   HC3IconMgr1.0.2.zip   joint contient :

  • Un (Le) code python dont il est question
  • Un fichier json de paramètres, éditable A EDITER (via notepad++ par exemple),
    qui vous permet d’adapter le code à vos paramètres à vous (l’IP de votre HC3, le mot de passe et le répertoire de sauvegarde)
  • Un ‘template’ de code LUA à insérer dans vos QAs

 

Je termine ce post par les commentaires en tête du code python qui détaillent un peu plus ce qu’il propose.
C’est en ce que j’appelle de l’anglais, en vue d’une publication sur le site ‘concurrent’ :).

 

Bonne journée!

 

PS: J'ai fait pas mal de test mais que cela ne vous empêche pas de créer une sauvegarde avant de faire les vôtres...

 

#___________________________________________________________________________________
# HC3IconMgr.py  Backup and Restore for Home center 3
# this script allows 3 tasks:
# - SAVE all icons on your PC (or any python target) in png format
# - RESTORE above icons to HC3
# - LOAD sets of icons defined in one HC3's globalVariable and for QA, prepare a local variable
#   to be able to use icons by names not by ids
#
# Notes about HC3 icons:
#     There are in fact 3 types of icon set
#       simple one 'unary' that consist in only one png file
#           (applicable for ex to "com.fibaro.multilevelSensor")
#       'binary' one that have 2 icons (one for the OFF state and one for the ON state)
#           (applicable for ex to "com.fibaro.binarySwitch")
#       'multi' one that have 11 icons ranging from 0% to 100% in steps of 10%
#           (applicable for ex to "com.fibaro.multilevelSwitch")
#     User icon sets are internally named by HC3 under Userxxxx with xxxx = id  and id > 1000.
#       This id is the one to give in calls: "fibaro.call(self.id, "setProperty", "deviceIcon",id)"
#     Considering icons on your PC they must follow the 'syntax' below:
#       for 'unary'  set : iconFName.png
#       for 'binary' set : iconFName_0.png and iconFName_100.png
#       for 'multi ' set : iconFName_0.png, iconFName_10.png, iconFName_20.png,... and iconFName_100.png
#     (This is the case when you SAVE HC3 icons sets)
#  last point to notice about HC3 icons philosophy :
#     Each device type has its own icon list, you may me obliged to upload a png more than once
#     to different devices.
#
#
# File organization :
#     SAVE saves icons under a root path defined by sBackupIconsPath in the parameters json file (see below).
#         this path MUST exist before application is launched!!!
#       under this path, directories are created, one per device type found during the HC3 scan.
#       During scan, at text file is created in sBackupIconsPath/getHC3Icons.log,
#       it lists all icon sets found and where they have been saved.
#
#     RESTORE :
#         * Reads all icon sets found in sBackupIconsPath subdirs.
#         * Checks that all required files per set are available.
#         * Checks if the set is not already on the HC3 and upload acordingly.
#       RESTORE does not reload already existing icon set! If run twice it will not do anything the second time...
#       Restoring icons will most probably change ids so RESTORE produces 2 files in sBackupIconsPath::
#         * RestoreHC3Icons.txt (which is like a csv file) containing the old and new icon ids with the device type. Ex:
#               oldId    newId    deviceType
#               1001    1001    com.fibaro.binarySwitch
#               1016    -100    com.fibaro.binarySwitch
#               1021    1021    com.fibaro.binarySwitch
#               1003    1003    com.fibaro.doorSensor
#               1046    1046    com.fibaro.doorSensor
#               1065    1065    com.fibaro.electricMeter
#               1066    1066    com.fibaro.electricMeter
#               1071    1047    com.fibaro.energyMeter
#               In this file, a negative new id means that all required files for this set were not present.
#          * idChanges.json a json file containing a list of changes indexed by OldId, giving newId only for ids
#               that have changed. Ex: {"1016": -100, "1071": 1047}
#
#     LOAD:
#       * First gets what is to be done by reading the globalVariable "g_Icons2Load" from HC3.
#         Here is an exemple for the content of this globalVar:
#           {"filepath":"D:/Users/........./HomeBox/Icone/",  --this is a root dir where to find icons.png
#           "ToLoad":[                    -- this is an array to be able to load many icons for different device type
#               {"id":348,                --this is (an) id used to dertemine device type and if it is a QA or not
#                 "icons":[               -- list of icon set to load
#                   {"LUAname":"QuestPac","fileRoot":"Chauffage/Poele_unknown"},  --png files will be searched in filepath/fileRoot.png or filepath/fileRoot_0.png or..
#                   {"LUAname":"PacOff","fileRoot":"Chauffage/Poele_off_2"}]},    --LUAname is used for QA...
#               {"id":123, --another id with other icons set list
#                 "icons":[
#                   {"LUAname":"Name1","fileRoot":"Meteo/Rain"},  if 123 is a binarySwitch the appli will look for filepath/Meteo/Rain_0.png and filepath/Meteo/Rain_100.png
#               ]
#           }
#           A LUA HC3 code example to generate that variable is provided in the .zip file
#        * For each id found trys to upload it to HC3 (if it does not exists already)
#        * For ids that corresponds to a QA it produces a list indexed by 'LUAname' value giving the id
#           (the new one or the existing one) of the loaded icon. EX:
#                 {"QuestPac": 1098, "PacOff": 1099, "P0M0R0E0": 1100,"P0M0R1E0": 1101}
#          This list is then pushed to the QA in its own variable under the name "myIconIds"
#          The list is UPDATED not cleared, ie old 'LUAname' are not removed.
#          If you want to clean 'myIconIds' remove it from the QA variables before.
#          Then using fibaro.call(self.id, "setProperty", "deviceIcon",myIconIds.LUAname)
#          you will be able to change/reload icons without modifying your code!!
#   
#  LAST :
#  user modifications:
#      this script read a json file HC3IconMgrParam for user config, it may be changed using notepad (for ex),
#      here is an example:
#          {   "host": "192.168.15.17",  #change to you HC3 IP address
#              "port": 80,              # doi not change (?)
#              "sAuthKey": "eW---blah blah blah blah halb halb---1h", #put your authentification key ,
#                 either directly (using 'F12' key result) or using result of base64 encoding of username:password
#              "sBackupIconsPath": "D:/Users/yv---//----/-/Icone/CurrentBackup/" #put here the root for icons backup
#          }
#  to launch application:
#     I run the application under a 'power shell' console using:
#       "py .\HC3IconMgr.py task"   with task = either save,restore or load   
#     Note that this script produces colored messages.
#          For Windows python under power shell, execute once the power shell cmd :
#             Set-ItemProperty HKCU:\Console VirtualTerminalLevel -Type DWORD 1  (and restart the console)
#          It enables VT (Virtual Terminal) / ANSI escape sequences
#    
#   and,  I am a NEWBEE in python some of you may cry (laugh) going through this script
#         please forgive me :-)
#
#
#  FOR CURIOUSITY:
#     Most difficult part is the syntax for uploading icon sets, because of lack of fibaro's documentation (as usual).
#     1) it is not a request PUT or POST but some writes to a TCP socket
#     2) format of what is to be sent through this socket was really not clear to me.
#        Thanks to:
#         a) marecki_0luk1 and its (old) AID code for HC2
#         b) wireshark !!!  (F12 does not help for sockets)
#     3) Solution (my solution) is mainly in 'uploadOneIconSet' function for the 'encapsluation' of the data
#        and in 'uploadIcons' function for the payload build.
#____________________________________________________________________________________

 

HC3IconMgr1.0.2.zip

Modifié par yves.guern
bug dans les code zippés
  • Like 3
Posté(e) (modifié)

Rebonjour,

Je n'avais pas assez testé le cas ou plusieurs QA renouvellent leur icone => yavait un bug dans l'exemple de code Lua

Corrigé en V1.0.2

Modifié par yves.guern
  • Like 1
  • 1 mois après...
Posté(e)

génial :13:ce truc, il va falloir que je vois comment l'utiliser, mais cela correspond à ce que je cherche.

Je n'y connais rien en Python,  mais je vais étudier la question pour savoir si je pourrais le faire tourner sur moon Synology (qui héberge déjà de nombreuses applications php pour la HC3)

Le 01/09/2023 à 08:53, yves.guern a dit :

J’ai laissé de côté les icones de ’room’ (qui ne changent pas souvent)

perso, j'utilise beaucoup les icones room pour voir rapidement le statut de la pièce. Exple :

  • pièce Garage : icône garage ouvert si une des 2 portes est ouverte, sinon icône garage fermé
  • pièce Piscine (extérieure) : volet ouvert ou fermé
  • ...
Posté(e)

Bonjour,

  • Python c'est un peu âpre au début mais on s'y fait :-)
    Et aucun doute que cela tourne sur un Synology...
  • Ajouter les icônes de room ne devrait pas être un problème, je peux donner un coup de main

Bonne journée

  • 2 ans après...
Posté(e) (modifié)
Le 01/09/2023 à 08:53, yves.guern a dit :

I run the application under a 'power shell' console using:

Bonjour Yves,

Votre programme m'intéresse beaucoup mais je n'arrivais pas à le lancer dans PowerShell car j'obtenais des tas d'erreurs comme ci-dessous (à chaque fois à cause d'une séquence \*):

C:\Users\bruvi\Documents\Plua_Dev\Icon_Management\HC3IconMgr1.0.2\HC3IconMgr.py:446: SyntaxWarning: "\*" is an invalid escape sequence. Such sequences will not work in the future. Did you mean "\\*"? A raw string is also an option.
  files = glob.glob(sBackupIconsPath+sDevType+'\*.png')

En modifiant tous les "\*.png" par"*.png" plus de warning.

 

Attention dans le scrip que j'ai téléchargé, vous n'utilisez pas l'adresse IP du fichier json de configuration mais je pense la votre en dur => toutes modifiées par "+host+" et j'ai:) pu sauvegarder mes 188 USER icônes sur mon PC

 

Je viens de réussir à télécharger dans une QA de test ("com.fibaro.deviceController"="unary") une nouvelle icône (test_Icon.png) avec la création de son iconId User<id>.:60: 

Il me reste à réaliser les mêmes actions pour un type "binary" puis "multi" mais je suis confiant.

 

Mon objectif étant de télécharger à distance de nouvelles icônes dans une QA sans ouvrir localement son code, je dois ajouter à la 'task' load de nouvelles fonctions:

Deux choix possibles :

  1. Soit télécharger un nouveau fichier (File) dans le QA dans lequel je peux ajouter la fonction de changement de l'icône affichée y compris la création de la QuickAppVar "myIconIds"(*1)
    1. Puis la lancer avec une commande hhtps://...
    2. Éventuellement supprimer le nouveau fichier du QA quand l'icône a été changée (pas obligatoire car la fonction ne sera jamais déclenchée par l'utilisateur ou le code lui même)
      Je sais le faire en lua mais je préfèrerais que le code soit intégré au script de la 'task' (case) load.
  2. Soit mettre à jour l'icône directement depuis le script PowerShell au lieu d'utiliser un code modifié de la QA cible. 

 

Pourriez-vous m'aider à créer l'une ou l'autre de ces actions?

 

note (*1)  il semble que cette variable est mise à jour de la manière suivante dans le processus load :{"ancienNom":ancienUserId, "nouveauNom":noveauUserId}

Modifié par Christb
Task load réussie
Posté(e) (modifié)

RE bonjour Christb

Je suis perturbé par le fait que votre message n'est pas celui que j'ai reçu par mail. Maintenant que j'ai compris que vous l'avez modifié entre temps cela va mieux.

Donc vous avez progressé, c'est bien! \\* et désolé pour les commentaires :wacko: *\\

 

Quant à votre question finale je ne suis pas sûr de comprendre le but (ni de bien me souvenir de ce que mon code faisait d'ailleurs).

Il me semble que, dans tous les cas, il y a des modifs de code à faire pour y intégrer l'existence et l'utilisation d'une variable du genre self.tMyIconIds.?

 

Si votre question est Est-ce que c'est possible en remote et  HTTP(s) de faire des modifications de QA:

OUI on peut recharger tous les codes qui constituent une QA, en ajouter et en supprimer.

et cela provoque un redémarrage automatique de la QA.

 

Je fais cela 'tous les jours'. Je n'utilise que très peu l'éditeur intégré à la HomeCenter. Mes codes chargés et sauvegardés sur mon PC. Edités sur le PC lors des changements puis reversés sur la box (le tout avec du python).

MAIS : on est en remote, et rien n'empêche de télécharger un bug!!!!

 

Souhaitez vous que je partage plus ou ce dernier point vous semble trop risqué?

 

A+

Modifié par yves.guern
Posté(e) (modifié)
Il y a 8 heures, yves.guern a dit :

Souhaitez vous que je partage plus ou ce dernier point vous semble trop risqué?

On ne peut pas vivre sans risque...donc oui:yes: partageons plus.

Pour votre information, j'utilise vscode avec le code Plua de @jgab qui est un émulateur de HC3 possédant une console web pour simuler l'UI - Quand tout semble fonctionner, je peux télécharger la QA dans la HC3.

Dans vscode, je peut aussi générer/modifier des scripts Python et PowerShell.

J'ai essayé de changer l'icône d'une QA en utilisant lua mais sans succès : ma commande HTTPS est acceptée par la HC3 (status202) mais l'icône n'est pas chargée. 

 

J'ai testé toutes les tâches définies dans votre code avec succès :60: mais c'est surtout la tâche "load' qui m'intéresse.

Pour votre information, je suis en train d'écrire un manuel d'utilisation détaillé in English.

Maintenant, ce que je cherche à faire est de tout automatiser après un téléchargement de nouvelles icônes pour un ou plusieurs QA sans avoir à ouvrir la(les) QA pour changer le code manuellement.

Mon idée est d'ajouter 2 tâches à votre code 'updateIconAll' et 'updateIconOne[<QAid>]' ou QAid est un paramètre donnant l'id du QA qui doit changer d'icône.

Mon problème est que je suis un novice total pour écrire en Python, en effet, votre code est ma première expérience.

  • De préférence: Seulement ajouter dans la QA existante le code d'une fonction 'changeIcon(<param>)' puis de la lancer avec un script Python avec ou sans l'option 'param' 
    •  en lua, il est possible d'ajouter un 'File' dont le contenu est le code à ajouter :

local content =[[<code to add>]]
local file ="changeIcon"  --name of the file
function fibaro.createFile(deviceId,file,content)
  if type(file)=='string' then
        file = {isMain=false,type='lua',isOpen=false,name=file,content=""}
  end
      file.content = type(content)=='string' and content or file.content
    return api.post("/quickApp/"..(deviceId or plugin.mainDeviceId).."/files",file)
end

Peut-on faire la même chose avec un script Python?  

Si l'ajout d'un nouveau 'File' n'est pas possible en Python, il faudra pouvoir ajouter une QA spécifique à la HC3 (invisible pour l'utilisateur courant) afin de faire la mise à jour de l'icône et la tâche Python pour lancer ce changement devra dans sa commande de lancement envoyer en paramètre additionnel un fichier Json qui contient les instructions, par exemple: {{"id1"=QAid1, nickName1="nom1" du jeu d'icônes},{"id2"=QAid2, nickName2="nom2" du jeu d'icônes},...}

  • Alternativement: Changer directement avec un code Python l'icône courante par sa nouvelle en utilisant l'id du QA et son nom défini dans la QuickAppVar 'myIconIds'.

Votre aide sera donc très appréciée et je peux vous servir de testeur.

Modifié par Christb
Posté(e) (modifié)

Bonsoir Chirstb,

En fait, en termes de disponibilité, vous tombez un peu mal c'st ce que j'ai le moins en ce moment et pour quelque mois encore je crois.

Mais je vais essayer de vous guider...

  • Le point le plus important pour vous (ce que j'en comprends):
    OUI on peut utiliser Python pour toutes les commandes via l'api, d'ailleurs il y a des exemples dans le code dont on parle
  • Et d'ailleurs Python est plutôt plus puissant que lua.
    Donc les questions du genre 'Peut-on faire la même chose avec un script Python?' n'ont pas vraiment lieu d'être.
  • Je pense que l'urgence n'est pas forcément 'comment' faire (dans le sens 'quel langage?') mais quoi faire avec quelles interfaces sur la HBOX
    Il faut se faire une liste des API utilisables pour modifier ce que vous voulez modifier.
  • Faire un code qui modifie toutes les QA pour ajouter une fonction (si elle ne l'ont pas déjà)
    OUI c'est faisable
    J'ai même le code :) mais de mémoire il est en PHP :(? A minima c'est une base si vous ne savez pas faire tourner du PHP
    (Pour avoir pratiqué, faire du PHP et du Python en même temps c'est un peu complexe: cela se ressemble suffisamment pour faire de gros mélanges qui ne fonctionnent pas :D !)
    La seule difficulté dans ce code c'est la manipulation de string pour vérifier que le code n'y est pas déjà!

Questions:

  • Est-ce qu'une QA sur la home box qui ferait l'interface entre "l'extérieur" et les autres QA ne serait pas un moyen simplificateur et éventuellement plus 'safe' ? (c'est une idée qui me vient à l'instant, elle n'est pas plus mûre que cela
  • Puisque vous connaissez jgab: utilisez vous sa librairie fibaroExtra? Cela simplifierait beaucoup de choses, je l'utilise partout dans mes QA
  • Et je ne suis pas sûr de comprendre ce que vous cherchez à faire:
    Si c'est juste modifier l'icone d'une QA: Changer directement avec un code Python l'icône courante par sa nouvelle en utilisant l'id du QA et son nom défini dans la QuickAppVar 'myIconIds'.
    c'est OUI
    Mais j'avais développé le code dont on parle 'surtout' pour certaines de mes QA dont je fait changer l'icone 'en temps réel' pour qu'il soit le reflet de l'état courant de ce que la QA gère.
    Dans ce cas c'est plus compliqué : chaque QA a de toute façons son propre code de gestion.

 

Bonne soirée

 

PS je découvre que vous habitez dans une région que je connais un peu: mon père est né à Saumur et a fini ses vieux jours à Vouvray. Et mon grand père habitait pas loin de l'embouchure du Thouet où il pêchait beaucoup, ma grand mère était originaire des 2 sèvres. Mon frère habite Cholet.

Modifié par yves.guern
Posté(e) (modifié)

Je comprend pour la disponibilité; par contre, j'ai du temps et je désire apprendre à coder en Python.

Il y a 23 heures, yves.guern a dit :

Changer directement avec un code Python l'icône courante par sa nouvelle en utilisant l'id du QA et son nom défini dans la QuickAppVar 'myIconIds'.
c'est OUI

 

Chaque langage possède une façon propre pour le formatage de ce type de requête et même avec l'IA de vscode ce n'est pas toujours facile mais je ne pose peut-être pas la bonne question... 
Je viens d'écrire un code py en utilisant 'requests.put' pour changer l'icône courante (1236) par une nouvelle (1240) pour le module 758:rolleyes: et j'obtiens bien une réponse avec status_code 200 mais l'icône n'est pas changée...
Voici mon code :
iconId="1236" #"User1240" or 1236 
    deviceId="758" #QaDidCollect_Proxy QA 
    url=f"https://{host}/api/devices/{deviceId}"#/properties" 
    headers_put = {     
     
'Accept': 'application/json'
     
'Content-Type': 'application/json'
     
'X-Fibaro-Version' : '2','Accept-language' : 'en'
      'Authorization': f"Basic {sAuthKey}"
   
payload={"properties.deviceIcon": iconId
   
p = requests.put(url,json=payload, headers=headers_put,verify = False
   
if (p.status_code < 200) or (p.status_code >300) : 
     
print("Status: ",p.status_code,COL.RED+"Error:"+COL.ORANGE+" Unable to send api/devices/properties/deviceIcon"+COL.END 
   
else
     
print("Status:",p.status_code,COL.BLUE+"Success: icon changed to User",iconId,COL.END) 
log:
Status: {200} Success: icon changed to User {'1236'}
Où est l'erreur?
 
Aussi, je ne sais aussi pas déclarer dans la même ligne de commande les variables deviceId et IconId.
j'aimerai une commande type  "HC3IconMgr updateOne [deviceId,IconId]" ou similaire : pouvez-vous m'aider sur ce point?
Modifié par Christb
Posté(e)
Il y a 13 heures, Christb a dit :

Où est l'erreur?

En regardant votre code "request.get" pour "QuickAppVariable", j'ai trouvé que le code ci dessus n'encodait pas bien la 'properties', avec ma nouvelle version, cela marche parfaitement!:2:

Il me reste maintenant à trouver comment ajouter les variables dans la ligne de commande.

Posté(e)
Il y a 2 heures, Christb a dit :

Il me reste maintenant à trouver comment ajouter les variables dans la ligne de commande.

Merci à l'IA de QWant qui m'a aidé à trouver la solution même si ce n'est pas sans quelques corrections : "HC3IcomMgr updateOne <Did> <iconId>" marche parfaitement. mais je dois ajouter des contrôles pour éviter un problème lorsque un des arguments est n'importe quoi...

Prochain épisode:   "HC3IcomMgr updateAll", tâche utilisant 'g_Icons2Load'

Posté(e)

Bonjour Chistb,

Je vous laisse mariner mais vous avez l'air d'aller vite...:60:

 

N'hésitez pas quand même à poser des questions, vous pourriez tomber dans un moment dispo.

Ceci dit IAQwant c'est forcement mieux que moi en délai.

 

A+

 

Posté(e) (modifié)
Il y a 2 heures, yves.guern a dit :

N'hésitez pas quand même à poser des questions

Merci.:)

Est-il possible de télécharger des jeux d'icônes différents dans plusieurs QA en même temps? 

j'aimerai pouvoir avec un seul lancement de la tâche 'load' télécharger les éléments suivant:

id:758 ("unary" type),  LUAname: "QaDidIcon", fileRoot:"qadidicon"

id:502 ("binary" type), LUAname: "Volet", fileRoot:"Volet-Velux"

id:503 ("multi" type),   LUAname: "Thermometer", fileRoot:"Temp"

Pour l'instant je n'y suis pas arrivé car, dans ce cas, je n'arrive pas à maitriser la structure correspondante de la variable globale 'g_Icons2Load'.

Je suppose que les fichiers image *.png doivent être tous dans le même répertoire.

Modifié par Christb
Posté(e)
il y a 29 minutes, Christb a dit :

Pour l'instant je n'y suis pas arrivé

Ben si, avec une structure comme ci-dessous, la tâche 'load' essaye bien de télécharger les icones dans plusieurs QA:2:, même si j'ai maintenant une erreur dans mon code pour gérer un fichier JSON sur mon PC pour avoir les instructions pour ma nouvelle tâche 'uploadAll' : mon problème mais j'apprends comme ça...

Posté(e) (modifié)
Il y a 1 heure, Christb a dit :

si j'ai maintenant une erreur dans mon code

J'ai réussi à corriger l'erreur; la difficulté pour moi est qu'en Python, une fonction est terminée en diminuant la tabulation des lignes suivante et dans ce cas, je me suis fait avoir...

Je vais pouvoir terminer ma tâche 'updateAll'

Une fois terminé, j'aimerai que vous testiez mon code et surtout lisiez mon manuel d'utilisateur en anglais

Si tout OK , m'autoriseriez-vous à publier le code et le manuel sur le site forum.fibaro.com (il y a un post ouvert à ce sujet)?

Modifié par Christb
Posté(e)

Oui à tout 

y compris aux erreur de tabulation dans python:15:.

Sur le papier c'est mieux, plus pratique que {,} ou begin,end.

Mais cela rend le code moins facile à lire en diagonale, à moins d'utiliser des tabulations d'au moins 4 caractères ce que je n'aime pas.

Quand je fais du python avec du code un peu long j'ai pris l'habitude d'ajouter en fin de blocs qqchose du genre #end while ou #end if,... avec la bonne indentation, les choses sautent plus facilement aux yeux...

 

Bon WE

Posté(e) (modifié)

 

Il y a 9 heures, yves.guern a dit :

#end while ou #e

Oui je l'utilise maintenant car j'ai vu que vous l'utilisiez dans votre code; 

Je pense avoir terminé les modifications du code : pour tous les tests que j'ai fais, pas d'erreur et la HC3 accepte les demandes.

Comme convenu, voici mon code ainsi que le manuel de l'utilisateur.

S'il n'y a rien qui vous choque, je publierai cette version sur le forum Fibaro avec un jeu d'icônes de test (unary, bnary and multi).

HC3IconMgr.py HC3IconManager U_Manual.pdf

Modifié par Christb
  • Like 1
Posté(e) (modifié)

En parallèle, j'essaye de compléter le code pour la gestion des images des pièces et, quand cela sera fini, celui pour les icônes des scènes.

Le code pour sauvegarder les icônes, soit des 'Device' soit des 'Room' ou les deux, semble fonctionner  :18:!

La tâche 'load <Device>' fonctionne déjà. 

Maintenant je dois m'attaquer à la tâche 'load <Room>' mais cela me semble plus compliqué pour moi. Si besoins je vous demanderai de l'aide. 

Puis je mettrais à jour le code de la tâche 'updateOne':

'updateOne <Device> <DId> <iconId>' (en fait fonctionne déjà)

'updateOne <Room> <RoomId> <iconId>'

Et enfin la tâche 'updateAll <Room>' ( 'updateAll <Device> fonctionne aussi déjà.)

 

 

Modifié par Christb
Posté(e) (modifié)

Bonsoir Chistb,

 

D'abord BRAVO!!!:13: Superbe travail!!!

 

Bon, quelques critiques qui se veulent positives quand même:

Le code:

  • ya encore un peu de français mais est-ce bien grave
  • Si c'était pour moi je l'aurais coupé en 2 (au moins) on n'est pas loin de 1000 lignes c'est trop.
  • Mais pour le mettre à dispo sur un forum n'avoir qu'un fichier c'est plus facile pour la maintenance (à condition d'être sûr de n'avoir rien laissé qui ressemble à un paramètre (qqchose qu'un utilisateur pourrait vouloir changer)  dans le code)

La doc:

soyons honnête je n'ai fait qu'une lecture diagonale, mais:

Cela semble un peu ardu, très 'geek'. Il manque une ou deux pages d'introduction avec des dessins pour montrer à quoi tout ça peut servir.

Une espèce d'apéritif avant le repas en somme.

Dis autrement vous avez écrit cela alors que vous avez encore le nez dans le guidon, je serais de vous je laisserais la pression retomber pour être en mesure de faire une relecture 'dégagée'
Mais bon, pour mettre à dispo sur un forum de geek... :)

 

Bonne soirée

et bien entendu je ne m'oppose à rien!

Modifié par yves.guern
×
×
  • Créer...