Aller au contenu

Christb

Membres confirmés
  • Compteur de contenus

    55
  • Inscription

  • Dernière visite

  • Jours gagnés

    1

Tout ce qui a été posté par Christb

  1. Bonsoir, Voici la dernière version (1.3.0) qui permet de : sauvegarder les icônes type Device, Room et Scene,, télécharger de nouvelles icônes pour pour chacun de ces 3 types, recharger les icônes du backup vers la HC3*, Changer les icônes par les dernières icônes téléchargées avec une tâche 'load' par type, Changer l'icône d'un éléments par une existante dans la HC3. J'ai aussi revu le mode d'emploi. * Je l'ai laissée même si elle n'est pas facile à utiliser. HC3IconManager U_ManualV1-04.pdf HC3IconMgrV1.3.0.py
  2. En fait ce contrôle n'est pas simple car le nom UserNNNN de l'icône n'est peut être plus présent dans la HC3 mais la même icône a pu être rechargée mais sous un autre nom... Je pense que la tâche 'restore' peut être utilisée de la manière suivante: Faire un 'save' et sauvegarder le répertoire "backup" ailleurs. Plus tard, Avant de faire un 'restore', faire un nouveau 'save et comparer avec l'ancien pour voir s'il manque des icônes et copier les manquantes dans le répertoire correspondant du répertoire du backup du script Les manquantes seront bien rechargées lors du 'restore' mais avec un nouveau nom (malheureusement) ; par contre le fichier "idChanges.json" donne le changement de numéro Usernnnn, mintenant sous la forme suivante :{"device-1041": 1027, "device-1092": 1081, "device-1136": 1135, "device-1035": 1032, "device-1036": 1032, "device-1037": 1032, "device-1040": 1032, "scene-1014": 1044, "scene-1015": 1045, "scene-1001": 1040, "scene-1002": 1046} Peut-être une usine à gaz pour pas grand chose...
  3. Même si je vais essayer d'ajouter le test de présence dans la HC3 pour ma formation à la programmation en Python et aussi avoir une tâche 'restore' qui fonctionne mieux, je pense qu'en final, je vais la supprimer car en fait elle sera redondante avec 'load'. Puis dès que j'aurais fini les tests des autres tâches je publierais ma nouvelle version pour gérer tous les types d'icônes (QA, Device, Room et Scene)
  4. Bonsoir, 1) oui 2) pas de réponse car il semble qu'aucune demande n'est faite à la HC3 si l'cône est dite déjà existante) 3) oui mais sans résultat 4) oui il s'appelle 'ExistingIconTable.json' et je pense que le problème vient de là: Ce fichier est créé après une sauvegarde et contient bien toutes les icônes de la HC3 téléchargées dans les répertoires "Backup/<deviceType>" donc lors d'un 'restore', il est vérifié si chaque icône de ces répertoires existe dans ce fichier json ce qui est toujours vrai! Pour chercher si cela venait de là, j'ai fait les tests suivants : Création d'un nouveau script pour chercher si une icône de type 'deviceType' ou 'room' ou 'scene' existe dans la HC3 et et je peux contrôler de manière externe l'existence d'une icône dans la HC3 ; qui montre que bien qu'elles n'existent plus ces icônes sont dites déjà existantes lors d'un 'restore' (ou un 'load'). Après suppression d'une icône dans la HC3, un 'save' montre bien qu'elle n'est plus dans la HC3 (quelque soit son type) ni dans les répertoires du "backup". Après un 'save', j'ai ajouté des icônes dans un répertoire du "backup" de type unary avec un nom type UserNNNN.png et lors d'un 'restore' elles sont bien rechargées dans la HC3 mais avec un nouvel 'UserId'. Le contrôle avec le fichier ExistingIconTable.json est très utile pour éviter des doublons mais je pense, pour la tâche 'restore', qu'il faut aussi ajouter un test pour contrôler si elle est aussi aussi présente dans la HC3. Votre avis?
  5. @yves.guern En fait, j'ai besoin de votre aide pour vérifier que 'restore' fonctionne bien. J'ai fait plusieurs ajouts d'icônes pour 'device', 'room 'et 'scene' Grâce à la tâche 'load' avec succès puis fais un 'save'. Je les ai ensuite toutes supprimées dans la HC3. Si je fais un 'restore', toutes les icônes présentes dans mon répertoire Backup sont toujours considérées comme existantes même celles qui n'existent plus dans le HC3 et donc elles ne sont pas rechargée. Dans quelle condition une icône est rechargée avec la tâche 'restore?
  6. J'ai trouvé pourquoi la tâche 'restore' ne faisait pas grand chose : Avec Python 3.14 le format files = glob.glob(sBackupIconsPath+sDevType+'\*_0.png') # le bug venait du fait que le '\' avait été supprimé Il faut le remplacer par les lignes suivantes: pattern=os.path.join(sBackupIconsPath,sDevType,'*_0.png') files = glob.glob(pattern) Voici donc la version V1.1 corrigée avec un manuel mis à jour. HC3IconManager U_ManualV1-03.pdf HC3IconMgrV1.11.py
  7. Oui, cela à été très utile et j'ai trouvé le format pour charger une icône dans une Room et dès quelle est chargée, elle est disponible pour toutes les autres Je ne l'ai pas encore testé mais ce format devrait être valable aussi pour charger une Scène.
  8. Désolé de vous avoir ennuyé avec mon problème de réseau. Pouvez-vous me guider pour la construction du postContentHeader pour le type d'icône 'room'?
  9. La réponse était Non pour toutes vos propositions, je vais les faire. Ne change rien sur le PC de développement Merci de ce conseil, je viens de le faire depuis mon portable sous windows10 avec l'adresse "hc3-0000xxxx ; trois essai successifs OK: très grosse différence, lecture des images beaucoup plus rapide (environ 3 à 4 fois plus vite) et pas d'erreur. J'ai trouvé le problème de configuration réseau sur le PC de développement : cela venait du fait que ma Livebox diffuse 2 wifi 2.4GHz et 5GHz. Le portable sur 5GHz et le PC Dev sur 2.4GHZ (de façon involontaire) ; dès que je l'ai basculé sur le 5GHz tout va bien et la lecture des icônes est même plus rapide que sur le portable. Je dois vérifier que tous mes produits y compris la HC3 wifi sont compatible 5GHZ avant de ne plus diffuser le 2.4...
  10. Malheureusement, cela ne résout pas le problème ni d'utiliser l'adresse IP 192.168.1....
  11. En regardant le code Swagger je ne pense pas qu'il faille changer cette lignes$ mais plutôt celles là: postContentHead = postContentHead + SockDataBoundary + 'Content-Disposition: form-data; name="type"\r\n\r\n'+room+'\r\n' Pour la ligne postContentHead = postContentHead + SockDataBoundary + 'Content-Disposition: form-data; name="deviceTemplate"\r\n\r\n'+sDevType+'\r\n' est-ce que le terme 'deviceTemplate' est valide pour 'room' qui est toujours 'unary'? Pour la ligne : postHeader = postHeader + 'Referer: http://'+host+'/app/settings/devices/list\r\n' changer en : postHeader = postHeader + 'Referer: http://'+host+'/app/settings/rooms/list\r\n' J'ai vraiment besoin d'aide sur ce point car l'IA donne plutôt des réponses imcomplètes (certainement du au manque de documentation sur ce point de Fibaro).
  12. Bonsoir ygern13, Je travaille sur le chargement d'une icône dans une pièce et avant de lancer la fonction uploadOneIconSet, je ne suis pas sur du format du code suivant: postHeader = postHeader + 'POST /api/icons HTTP/1.1\r\n' faut-il la changer ou pas en : 'POST /api/rooms/icons HTTP/1.1\r\n' ou 'POST /api/icons/rooms HTTP/1.1\r\n' ?
  13. Oui, j'ai bien sûr pensé à ce problème de l'adresse hc3-000680 non reconnue mais pourquoi après 30 à 100 récupérations d'icônes OK. De plus un 'ping' juste près cette erreur est accepté . Je pense que cela vient du fait que la HC3 est trop occupée pour répondre à temps à la requête du script d'où l'erreur. Y-a-t-il un moyen pour augmenter l'attente d'une réponse de la HC3? dans le header? J'ai trouvé comment faire en ajoutant à la requête ,timeout=(5,10)
  14. Je viens de faire une nouvelle sauvegarde et tout c'est bien passé et j'ai récupéré les 195 jeux d'icônes et les 18 icônes des pièces de ma HC3; ma nouvelle version peut maintenant sauvegarder 'Device' ou 'Room' ou les deux. Ce n'est donc pas un problème de code mais de ma HC3 mais je ne vois pas pourquoi! Une idée?
  15. Bonjour, Avez-vous eu ce genre d'erreur lors de la tâche 'save' qui survient après une sauvegarde correcte des 30 premières icônes ou même après la 122éme : raise ConnectionError(e, request=request) requests.exceptions.ConnectionError: HTTPSConnectionPool(host='hc3-00006080', port=443): Max retries exceeded with url: /assets/userIcons/devices/User1123/User1123.png (Caused by NameResolutionError("HTTPSConnection(host='hc3-00006080', port=443): Failed to resolve 'hc3-00006080' ([Errno 11001] getaddrinfo failed)")) C'est maintenant systématique et je n'ai pas changé ce code. Les autres tâches fonctionnent sans problème**. Durant mon développement j'ai eu de temps en temps des erreurs de connexion mais en relançant le script, tout allait bien mais maintenant c'est presque systématique. Est-ce que le problème vient de ma HC3 ou de demandes trop rapprochées à la HC3? ** En ce qui concerne la tâche 'restore', je ne suis pas sûr de savoir quand l'utiliser: lorsque je la lance je vois un log comme Reloading com.fibaro.binarySensor binary pngtype pour chacun des types de module mais les fichiers log sur mon PC sont vides.
  16. Bonsoir, merci de votre soutient et de vos conseils. J'ai revu le manuel et le code, re-testé et comme tout semble être OK, je les ai publiés dans le post ci-dessous : https://forum.fibaro.com/topic/79951-upload-icons-from-external-sourrce/#comment-296130
  17. 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 ! 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à.)
  18. 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
  19. 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)?
  20. Ben si, avec une structure comme ci-dessous, la tâche 'load' essaye bien de télécharger les icones dans plusieurs QA, 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...
  21. 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.
  22. 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'
  23. 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! Il me reste maintenant à trouver comment ajouter les variables dans la ligne de commande.
  24. Je comprend pour la disponibilité; par contre, j'ai du temps et je désire apprendre à coder en Python. 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 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?
  25. On ne peut pas vivre sans risque...donc oui 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 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.
×
×
  • Créer...