-
Compteur de contenus
453 -
Inscription
-
Dernière visite
-
Jours gagnés
25
fel-x a gagné pour la dernière fois le 31 mai
fel-x a eu le contenu le plus aimé !
À propos de fel-x
- Date de naissance 11/06/1976
Profile Information
-
Sexe :
Homme
-
Ville :
Bruxelles
-
Intéret :
Fibaro, HomeKit, HomeBridge, Raspberry
-
Box
Home Center 3
-
Version
5.210.12
fel-x's Achievements
-
Quick App DAY OFF TRACKER (Détection automatique des jours fériés et week-ends)
fel-x a répondu à un(e) sujet de fel-x dans Quick App Developpeur
Mais tu me fais penser que désormais lorsqu'il y aura une mise à jour, le fichier à télécharger contiendra les fichiers lua à remplacer pour ceux qui ne font que mettre à jour, en plus du FQA (pour ceux qui installent pour la première fois). Je vais voir à les ajouter dans le ZIP sur le marketplace dès maintenant, pour que d'autres utilisateurs dans ton cas puissent mettre à jour manuellement ! Merci pour l'idée -
Quick App DAY OFF TRACKER (Détection automatique des jours fériés et week-ends)
fel-x a répondu à un(e) sujet de fel-x dans Quick App Developpeur
salut @fredokl oui si tu veux, mais il y a désormais 3 fichiers lua (main, logo, icon) et tu devras ajouter icon.lua et remplacer main.lua et logo.lua par les nouveaux avant de sauver, sinon ça va planter. Les variables de QA n'ont pas changé. Ce que tu y gagnes c'est de ne pas créer un nouvel ID de QA et donc devoir supprimer l'ancien + re-encoder ton email dans les variables, mais la manoeuvre est plus longue... Je te les envoies dans 2 minutes. Tu me diras si ça fonctionne bien pour l'icône qui sera mis à jour automatiquement ? -
Pour ceux qui aiment bien que l'aspect visuel de l'interface Fibaro soit agréable, et non pas rempli d'icônes de petites boîtes avec un point d'interrogation, et pour ceux qui veulent attribuer facilement des icônes d'une catégorie (deviceType) à une autre sans les uploader plusieurs fois, voici une QA assez cool qui m'a mis pas mal de temps à concevoir. Comme toujours j'insiste sur le fait qu'elle répond à un besoin personnel et que je la partage volontiers sans pour autant garantir qu'elle répondra à vos attentes. Mais ça ne coute rien d'essayer Je prévois d'y ajouter une table de traduction en français, mais ça reste fort intuitif et facile d'emploi en anglais. Voici la traduction française de la page marketplace : Icon Customizer Avez-vous déjà voulu attribuer rapidement une icône personnalisée à l'un de vos modules ou QA, sans devoir parcourir les paramètres de chaque appareil un par un ? C'est exactement ce que permet Icon Customizer. Fonctionnement Cette QuickApp propose une interface claire et visuelle permettant de parcourir toutes vos icônes personnalisées importées, de sélectionner un module ou une QA cible, de prévisualiser le résultat avant application et de restaurer l'icône d'origine en un seul clic si vous changez d'avis. L'interface repose sur deux menus déroulants : l'un pour sélectionner l'icône source, l'autre pour sélectionner le module ou la QA cible. Un tableau de confirmation visuelle affiche les deux icônes côte à côte afin que vous sachiez toujours exactement ce qui va être modifié. Le bouton Apply n'apparaît que lorsque la taille du jeu d'icônes correspond à celle du module cible, évitant ainsi toute incompatibilité susceptible de perturber les indicateurs visuels d'état (ouvert/fermé, allumé/éteint, etc.). Vous pouvez également cliquer sur l'icône du module cible afin d'afficher sa fiche détaillée dans son contexte. Cette fonctionnalité n'est toutefois pas disponible pour les modules masqués. Une fois une icône attribuée, un bouton Cancel devient immédiatement disponible pour restaurer l'icône d'origine (y compris son chemin, sa source et ses états). Cette option disparaît dès que vous sélectionnez une autre icône ou une autre cible dans les listes déroulantes. Options avancées Une section Options Avancées est disponible pour les utilisateurs ayant configuré leurs identifiants encodés en Base64 dans la variable Base64Auth. Cette option permet d'afficher également les icônes précédemment importées mais qui ne sont actuellement attribuées à aucun appareil. Cela peut être utile pour réutiliser certaines icônes ou faire le ménage dans votre bibliothèque. Pour activer les Options Avancées, vous devez définir la variable Base64Auth avec vos identifiants HC3 encodés en Base64. Pour cela, rendez-vous sur https://www.base64encode.net pour encoder vos identifiants sous la forme username:password Si vous n'êtes pas familier avec cette procédure, vous pouvez effectuer un test avec MyLogin:MyPassword1234 Le résultat obtenu doit être exactement : TXlMb2dpbjpNeVBhc3N3b3JkMTIzNA== Si c'est bien le cas, l'outil fonctionne correctement et vous pouvez encoder vos propres identifiants de la même manière. Points d'attention pour l’installation Lors de l'importation du fichier .fqa, assurez-vous que l’option "Utiliser les nouvelles vues dans l'application mobile" reste décochée dans les paramètres avancés de la QA. ↑ Décochez ceci ↑ À chaque démarrage, la QuickApp vérifie automatiquement si une version plus récente est disponible. Si une mise à jour est détectée, un lien de téléchargement direct est affiché dans l'interface. Veuillez également noter que cette QA est principalement conçue pour une utilisation locale depuis un ordinateur. L'accès distant ou l'utilisation depuis un smartphone peuvent entraîner certains problèmes d'affichage en raison de l'interface HTML employée. Icône de la QuickApp L’icône de la QuickApp est installée automatiquement lors de l’import du fichier .fqa. Elle est également fournie séparément sous forme de fichier .png dans l'archive ZIP si vous souhaitez la réattribuer manuellement ou la personnaliser ultérieurement. Note finale Je ne suis pas un développeur professionnel — j’ai créé cette QuickApp pour mon usage personnel pendant mon temps libre. Il y a probablement encore quelques bugs cachés ici ou là, et la QA peut occasionnellement planter ou se comporter de manière inattendue. Si vous souhaitez m'aider à l’améliorer ou participer au débogage, vous êtes les bienvenus. Et si cette QA vous plaît, n’hésitez pas à laisser une note ou un avis… ou même à m’aider à rester concentré pendant le codage en m’offrant un café ♥ Changelog v1.0 - 18/05/2026 Première version Installation automatique de l'icône personnalisée au premier lancement Prise en charge des thèmes sombre et clair Les icônes de pièces peuvent être activées dans le code Lua Interface à deux menus déroulants avec prévisualisation en temps réel Détection des incompatibilités entre la taille du jeu d'icônes et le module/QA cible Sauvegarde complète et restauration en un clic Options avancées : affichage des icônes non attribuées (nécessite Base64Auth) Détection et correction automatiques du paramètre « Utiliser les nouvelles vues dans l'application mobile » Vérification automatique des mises à jour disponibles (GitHub) avec lien de téléchargement > > > Lien de téléchargement - Icon Customizer < < <
-
- 3
-
-
Salut, Il y a un bon moment que je travaillais dessus pour l'améliorer, et j'ai enfin terminé d'y ajouter un système de mise à jour et une installation automatique de l'icône. Pour éviter de polluer le topic de @mprinfo concernant sa Quick App - Jour Férié, je crée un sujet dédié à Day Off Tracker. Je prévois d'y ajouter une table de traduction en français, mais son usage ne requiert vraiment pas de maitriser l'anglais pour s'en servir. Voici la traduction française de la page marketplace : Day Off Tracker J’avais besoin de gérer certaines QuickApps, scènes et scénarios d’automatisation différemment les week-ends et les jours fériés. Par exemple, mes stores s’ouvrent normalement tôt les jours de semaine… ce qui devenait vite agaçant les jours de congé lorsque tout le monde voulait dormir un peu plus longtemps. Même chose pour la machine à café et plusieurs autres routines matinales… J’ai donc créé une solution simple basée sur une variable globale appelée DayOffToday. Lorsque DayOffToday = YES mes scènes/QA peuvent automatiquement empêcher ou retarder leur exécution les week-ends ou jours fériés. Fonctionnement Day Off Tracker identifie d’abord votre pays en géolocalisant votre box HC3 via l’API Nominatim/OpenStreetMap. (Vous pouvez également sélectionner manuellement votre pays parmi plus de 100 pays pris en charge.) La QA récupère ensuite les jours fériés de votre pays via l’API Nager.Date et définit automatiquement la variable globale : DayOffToday = YES lorsque la date actuelle correspond à un jour férié. La QuickApp affiche également un compte à rebours jusqu’au prochain jour férié. Utilisation de la variable globale Vos scènes et QA doivent simplement vérifier la valeur de DayOffToday. Ces deux méthodes fonctionnent : hub.getGlobalVariable("DayOffToday") ou api.get("/globalVariables/DayOffToday") La variable a toujours l’une des deux valeurs suivantes : YES NO Pour les utilisateurs de GEA, la condition à ajouter est la suivante (utilisez YES ou NO selon votre besoin): {"Global", "DayOffToday", "YES"} Mode Weekend Un nouveau bouton WEEKEND MODE permet d’activer ou désactiver la prise en compte des week-ends en tant que jours fériés. Icône de la QA L’icône de la QuickApp est installée automatiquement lors de l’import du fichier .fqa. Cependant, l’icône est également fournie séparément au format .png dans l’archive ZIP, au cas où vous souhaiteriez la réassigner manuellement ou la personnaliser ultérieurement. Points d'attention pour l’installation Après avoir importé le fichier .fqa, vous devriez renseigner votre adresse e-mail dans les variables de la QA. Ceci est recommandé afin de respecter la politique d’utilisation de Nominatim/OpenStreetMap lors des requêtes de géolocalisation. (La QA fonctionnera malgré tout sans cette information, mais il est préférable de respecter les bonnes pratiques.) Assurez-vous également que l’option "Utiliser les nouvelles vues dans l'application mobile" reste décochée dans les paramètres avancés de la QA. ↑ Décochez ceci ↑ La QA utilise un affichage HTML, et activer cette option peut casser l’affichage dans les applications mobiles. Une routine de sécurité a été ajoutée afin de forcer automatiquement le bon réglage lorsque cela est possible. Lorsqu’une mise à jour est disponible, un lien de téléchargement apparaît automatiquement en bas de la QuickApp. Note finale Je ne suis pas un développeur professionnel — j’ai créé cette QuickApp pour mon usage personnel pendant mon temps libre. Il y a probablement encore quelques bugs cachés ici ou là, et la QA peut occasionnellement planter ou se comporter de manière inattendue. Si vous souhaitez m'aider à l’améliorer ou participer au débogage, vous êtes les bienvenus. Et si cette QA vous plaît, n’hésitez pas à laisser une note ou un avis… ou même à m’aider à rester concentré pendant le codage en m’offrant un café ♥ Changelog v2.1 - 28/05/2026 Mise à jour de l’icône de la QuickApp + installation automatique de l’icône Ajout d’un système de vérification des versions Support de 123 pays via l’API Nager.Date Amélioration des couleurs de l’interface pour une meilleure intégration des thèmes clair/sombre v2.0 - 14/09/2025 Ajout du bouton WEEKEND MODE Forçage du paramètre "Utiliser les nouvelles vues dans l'application mobile" Ajout du compte à rebours jusqu’au prochain jour férié Amélioration de la mise en page et de la structure générale de l’interface v1.0 - 07/09/2025 Première version Vérification de la validité de l’adresse e-mail Rechargement automatique si aucun pays ou un pays invalide est défini Support de 117 pays via l’API Nager.Date > > > Lien de téléchargement - Day Off Tracker < < <
-
@Lazer (et les autres) si jamais ça peut aider pour une prochaine mise à jour, j'ai identifié la cause probable de l'échec de "Monthly" ! Il lui manque isBoolean = true J'ai inséré ça à la ligne 1534 de main.lua (v7.39) et depuis mes conditions basées sur "Monthly" fonctionnent
- 12 510 réponses
-
- 3
-
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Mise à jour faite, car justement j'avais fait un backup la veille. Et ça tourne sans problème. Ce qui n''est pas encore au point est la traduction en français car dans Paramètres > Z-Wave on a ceci : Qui a fait la migration vers le moteur Z-Wave 3.0 ? Le "beta" à côté m'inspire moins confiance et je me demande si c'est le moteur qui est en beta ou le processus de migration qui est en beta ?
-
Salut, Merci pour tous vos conseils et vos pistes. Grâce à ça j'ai pu achever mon projet de Icon Customizer QA Les infos sont là si vous voulez tester : https://marketplace.fibaro.com/items/icon-customizer
-
Exactement !! C'est précisément l'objet de ma question ! Le dernier dump est obtenu par get.api("/icons") en Lua (depuis une QA) Les premiers en haut sont ceux renvoyés par le REST API (http://IP_BOX/api/icons et http://IP_BOX/api/devices) On trouve bien les correspondances entre get.api("/devices") et http://IP_BOX/api/devices Mais pas entre get.api("/icons") et http://IP_BOX/api/icons ! La réponse m'a été donnée par @jgab dans le forum officiel : il suffit d'employer net.HTTPClient() avec comme header ["X-Fibaro-Version"] = "1" pour obtenir une copie complète de icons.json En effet il y a un bug dans le swagger qui emploie toujours ["X-Fibaro-Version"] = "2" (même si on force le paramètre à 1) ; ce qui correspond à une version minimaliste et tronquée de icons.json ; et c'est aussi ce que fait api.get() sur /icons ! Donc pour contourner ce bug on force le paramètre sur "1" en appel HTTP. Fallait le savoir !!! pas cool de la part de Fibaro
-
Voici le dump complet de api.get("/icons") (je le mets un peu en page sinon tout est sur une seule ligne) Attention il est long mais c'est @jojo qui a demandé [19.04.2026] [19:19:07] [DEBUG] [API-GET-ICONS]: [ { "source": "HC", "iconSet": 368, "type": "com.fibaro.FGGC001", "files": [ { "path": "/assets/icon/fibaro/com.fibaro.FGGC001/com.fibaro.FGGC001.svg", "type": "event", "condition": { "type": "event", "data": { "eventType": "CentralSceneEvent", "data": { "keyId": 0 } } } }, { "path": "/assets/icon/fibaro/com.fibaro.FGGC001/com.fibaro.FGGC001.svg", "type": "event", "condition": { "type": "event", "data": { "eventType": "CentralSceneEvent", "data": { "keyId": 1 } } } }, { "path": "/assets/icon/fibaro/com.fibaro.FGGC001/com.fibaro.FGGC001.svg", "type": "event", "condition": { "type": "event", "data": { "eventType": "CentralSceneEvent", "data": { "keyId": 2 } } } }, { "path": "/assets/icon/fibaro/com.fibaro.FGGC001/com.fibaro.FGGC001.svg", "type": "event", "condition": { "type": "event", "data": { "eventType": "CentralSceneEvent", "data": { "keyId": 3 } } } }, { "path": "/assets/icon/fibaro/com.fibaro.FGGC001/com.fibaro.FGGC001.svg", "type": "event", "condition": { "type": "event", "data": { "eventType": "CentralSceneEvent", "data": { "keyId": 4 } } } }, { "path": "/assets/icon/fibaro/com.fibaro.FGGC001/com.fibaro.FGGC001.svg", "type": "event", "condition": { "type": "event", "data": { "eventType": "CentralSceneEvent", "data": { "keyId": 5 } } } }, { "path": "/assets/icon/fibaro/com.fibaro.FGGC001/com.fibaro.FGGC001.svg", "type": "event", "condition": { "type": "event", "data": { "eventType": "CentralSceneEvent", "data": { "keyId": 6 } } } }, { "path": "/assets/icon/fibaro/com.fibaro.FGGC001/com.fibaro.FGGC001.svg", "type": "event", "condition": { "type": "event", "data": { "eventType": "CentralSceneEvent", "data": { "keyId": 7 } } } }, { "path": "/assets/icon/fibaro/com.fibaro.FGGC001/com.fibaro.FGGC001.svg", "type": "event", "condition": { "type": "event", "data": { "eventType": "CentralSceneEvent", "data": { "keyId": 8 } } } }, { "path": "/assets/icon/fibaro/com.fibaro.FGGC001/com.fibaro.FGGC001.svg", "type": "event", "condition": { "type": "event", "data": { "eventType": "CentralSceneEvent", "data": { "keyId": 9 } } } }, { "path": "/assets/icon/fibaro/com.fibaro.FGGC001/com.fibaro.FGGC001.svg", "type": "event", "condition": { "type": "event", "data": { "eventType": "CentralSceneEvent", "data": { "keyId": 10 } } } }, { "path": "/assets/icon/fibaro/com.fibaro.FGGC001/com.fibaro.FGGC001.svg", "type": "event", "condition": { "type": "event", "data": { "eventType": "CentralSceneEvent", "data": { "keyId": 11 } } } }, { "path": "/assets/icon/fibaro/com.fibaro.FGGC001/com.fibaro.FGGC001.svg", "type": "event", "condition": { "type": "event", "data": { "eventType": "CentralSceneEvent", "data": { "keyId": 12 } } } } ] } ]
-
Je suis toujours dans mon projet de QA de gestion des icônes et ça devient vraiment pas mal. Mais je bloque lorsque je veux afficher les icônes natives d'un device. Le chemin de l'icône pour chaque device peut être déduit depuis les infos contenues dans le JSON du device (accessible via REST API sur BOX_IP/api/devices/#ID) : properties.deviceIcon donne l'ID du l'icône et parfois même son chemin est déjà précisé dans properties.icon.path Lorsque deviceIcon est > 1000 c'est facile ; c'est une icône custom et son chemin est logique : BOX_IP/assets/userIcons/devices/User100X/User100X.png (avec quelques subtilités pour les multistates) Mais lorsque le deviceIcon est < 1000 ça signifie que l'icône est native dans la HC3. Si son properties.icon.path est indiqué, alors c'est simple, mais là où ça se corse c'est s'il est vide. Il m'est impossible de reconstruire le chemin de l'icône au départ de son properties.deviceIcon Je pensais pouvoir le récupérer depuis icons.json obtenu par l'API REST sur BOX_IP/api/icons mais je découvre que api.get("/icons") ne renvoie pas du tout les mêmes infos ! Il est plutôt très court et ne contient presque aucune info sur les icônes générales de la box. J'y vois 19 entrées parlant juste des icônes spéciales (FGKF, FGGC,FGPB, FGCD, usbPort) C'est bizarre car si on fait le parallèle, l'API sur les devices renvoie exactement la même chose via le REST API (BOX_IP/api/devices) que via api.get("/devices"). Quelqu'un sait pourquoi tous les icônes ne sont pas exposées par api.get("/icons") ? Et aussi comment récupérer le chemin de l'icône dans un tel cas ? A titre d'exemple mon device ID 711 est une caméra IP. Sur BOX_IP/api/devices/711 je lis bien ceci : { "id": 711, "name": "Cam4", "roomID": 227, "view": [], "type": "com.fibaro.ipCamera", "baseType": "com.fibaro.camera", ... "properties": { ... "deviceIcon": 92, ... "icon": { "path": "", "source": "" }, ... } Vu que properties.icon.path est vide, je pars vérifier manuellement dans le JSON des icônes via BOX_IP/api/icons et j'y trouve la ligne : { "device": [ { "id": 300, "deviceType": "com.fibaro.binarySwitch", "iconSetName": "ButtonSwitchV2", "fileExtension": "svg" }, ... { "id": 92, "deviceType": "com.fibaro.ipCamera", "iconSetName": "kamera", "fileExtension": "png" }, ... ] } Je confirme que l'UI affiche l'icône BOX_IP/assets/icon/fibaro/kamera/kamera.png ! Mais comment récupérer le iconSetName et le fileExtension de l'id 92 ? via api.get("/icons") on ne peut pas. Il y a un autre appel api.get() qui existe ? Je ne trouve rien dans le swagger. Help !!!
-
Moi je traduis "if lastChanged < os.time() - 5*3600" par 'lastChanged a eu lieu il y a plus de 5 heures" Donc je dirais d'employer "Property-" puisque la syntaxe GEA explique ceci : "Property-" = Si la valeur de la propriété "lastChanged" du module ... est INFERIEURE à ...
- 12 510 réponses
-
- 2
-
-
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Si tu dis vrai, alors ça devrait marcher avec {"Property+", id["SALON_TMP"],"lastChanged", {"Function", function() return os.time() - 5*3600 end}...
- 12 510 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Attends, je pense que tu dois mettre le calcul dans la fonction car GEA retourne une valeur, mais ne fait pas de calcul lui-même. {"Function", function() return os.time() - 5*3600 end} comme ça la soustraction est faite dans la fonction non ?
- 12 510 réponses
-
- 1
-
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Comme je le disais, même si tu parviens à récupérer os.time() par GEA, je ne crois pas que ça va fonctionner car GEA ne connait pas la préférence 'lastChanged"; il n'est pas prévu dans le code de GEA qu'il aille puiser cette préférence dans les JSON des devices. C'est certainement possible mais il faut alors demander à @Lazer de l'implémenter pour toi. Ce n'est pas parce qu'une préférence existe et qu'elle est exposée par l'API que GEA peut la lire. Du moins c'est comme ça que je le conçois.
- 12 510 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
