Aller au contenu

trainkill666

Membres confirmés
  • Compteur de contenus

    273
  • Inscription

  • Dernière visite

Tout ce qui a été posté par trainkill666

  1. trainkill666

    Voir Si Une Lumière Est Allumée Et Tout Éteindre

    @pepite Voici le nouveau bouton "Mise à jour" qui fonctionne par mot clé et ignore les modules virtuels (pour éviter tout risque d'erreur). Il suffit simplement de mettre ton mot clé à la place d' "Eclairage" . Y'a pas plus simple. Puis un ptit clic sur le bouton. -- Le code à été placé en page 5 dans le post du 08 avril 2015 - 14:26 avec l'ensemble du module virtuel.
  2. trainkill666

    Voir Si Une Lumière Est Allumée Et Tout Éteindre

    @ pepite Merci . Le main loop tourne en boucle pour la mise à jour de l'icône d'état (allumé, éteint), il n'y a plus rien d'autre. Pour le bouton d'extinction d'éclairage, il suffit de lui attribuer simplement l'icône identique à celui "iconearret", ça évite de rajouter une ligne de code et de voir apparaître l'icône du cube bleu. Si comme dans mon cas toutes tes modules d'éclairages contiennent un mot clé (éclairage ... par exemple) qui n'est pas présent dans les autres, je peux te donner la version du code j'utilise. Le programme cherche lui-même, pour ne pas à avoir à les rentrer.
  3. trainkill666

    Voir Si Une Lumière Est Allumée Et Tout Éteindre

    @megabubu : Tu as essayé celui que je viens de poster ? En modifiant le code de neliger précédemment je n'avais pas fait attention, on a tous commis la même erreur (Gazous également). J'y ai pensé en recommençant tout à partir de zéro. Il s'agit d'un Main Loop, il tourne déjà en boucle, donc le while true do end et totalement inutile. Seul le fibaro:sleep() suffit. Peut-être est-ce la cause du plantage de son programme. Ou le chargement toutes les 10 secondes de la liste des modules par l'api. J'avais un problème identique dans un module virtuel de vérification des noeuds mort toutes les 30 secondes. PS : commentaire inutile donc barré sur le while true do, Gazous en a parlé quelques posts avant. Il faut que je pense à lire les posts précedents .
  4. trainkill666

    Voir Si Une Lumière Est Allumée Et Tout Éteindre

    J'ai refait tout le code à ma façon cet après-midi (après une interminable petite sieste), 100% fonctionnel, par contre je n'ai pas eu le temps de mettre les commentaires sur le code. Ma façon de raisonner (suis gaucher donc un peu bizarre ) : ->Plutôt que d'essayer de lister l'éclairage avec islight, puis de supprimer ce qui ne doit pas l'être, autant mettre seulement les noms exactes des éclairages (j'ai énormément de FGS221 qui ne servent pas à l'éclairage), c'est beaucoup plus simple (sauf pour ceux qui ont un château ). -> J'ai séparé le listage de mise à jour des modules du reste. On ne change pas de modules d'éclairage tous les jours, donc inutiles de charger la mémoires pour rien. Il suffira de cliquer sur "mise à jour" après actualisation du listage des modules par nom pour la V1 ou choix du mot clé pour la V2. De plus comme c'est nous qui complétons la liste, elle ne change pas entre-temps. V1 du bouton "Mise à jour": liste complétée manuellement. ou V2 :du bouton "Mise à jour : recherche automatique par mot clé des modules. IL faut créer un module virtuel nommé "Eclairage général" (c'est un exemple ) avec : -> 1 bouton nommé "Arrêt" (ne pas oublié d'y mettre l'icône représentant l'éclairage éteint). -> 1 bouton nommé "Mise à jour" (également avec un joli icône pour éviter 10 secondes de carré bleu le temps de la mise à jour de celui-ci). Voici le code (je ne sais pas ajouter directement le module , si il y a un volontaire pour m'expliquer) : "Arrêt" --fonction arrêt éclairage local verifeclairage = function(liste) for index,valeur in ipairs(liste) do if tonumber(fibaro:getValue(valeur, "value")) > 0 then fibaro:call(valeur, "turnOff") end end end ----------------------------------------------------------------------------- --récupération des IDS des modules à éteindre local listeclairage = json.decode((fibaro:getGlobal("listeclairage"))) --éteint les modules verifeclairage(listeclairage) "Mise à jour" V1 avec la liste des modules complétée manuellement : local HC2 = Net.FHttp("127.0.0.1", 11111) local reponse = HC2:GET("/api/devices") local resultat = json.decode(reponse) --fonction recherche modules local recherche = function (correspondance) local listeobtenue = {} for index, valeur in ipairs(resultat) do if correspondance[valeur.name] ~= nil then table.insert(listeobtenue, valeur.id) end end return listeobtenue end ---------------------------------------------------------------------------- --liste des modules d'éclairage local listemodules = { ["Eclairage Bureau"] = 1, ["Eclairage Chambre"] = 2, ["Eclairage Couloir"] = 3, ["Eclairage Cuisine"] = 4, ["Eclairage Hall"] = 5, ["Eclairage Salon"] = 6, ["Eclairage SdB"] = 7 } --création de la liste fibaro:setGlobal("testeclairage",json.encode(recherche(listemodules))) ou "Mise à jour" V2 avec listage automatique par mot clé : local HC2 = Net.FHttp("127.0.0.1", 11111) local reponse = HC2:GET("/api/devices") local resultat = json.decode(reponse) --fonction recherche modules local recherche = function (correspondance) local listeobtenue = {} for index, valeur in ipairs(resultat) do if (valeur.name):find(correspondance) and valeur.type ~= "virtual_device" then table.insert(listeobtenue, valeur.id) end end return listeobtenue end ---------------------------------------------------------------------------- --création de la liste fibaro:setGlobal("testeclairage",json.encode(recherche("Eclairage"))) Main Loop : ----------------------------------------------------------------------------- --Trainkill666 ----------------------------------------------------------------------------- -- Identiants des icônes local iconearret, iconemarche = 1020, 1019 -- Intervalle de mise à jour automatique (en secondes) local IntervalleMAJ = 10 ----------------------------------------------------------------------------- --création de la liste des éclairages local listeclairage = json.decode((fibaro:getGlobal("listeclairage"))) --vérification des états local listeactif = 1 for index,valeur in ipairs(listeclairage) do if tonumber(fibaro:getValue(valeur, "value")) > 0 then listeactif = 2 end end -- Mise à jour de l'icône local choixicone = {iconearret, iconemarche } fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", choixicone[listeactif]) -- Attente de la prochaine mise à jour automatique fibaro:sleep(IntervalleMAJ*1000)
  5. trainkill666

    Voir Si Une Lumière Est Allumée Et Tout Éteindre

    @pepite Soit tu fais une recherche par nom grâce à if valeur.name == "ton nom de module" (test que j'effectue pour palier le islight qui ne fonctionne pas à cause de la V4.040). J'en avais parlé au début du tuto. Soit avec if valeur.type == "com.fibaro.FGWP101" Ces conditions de test sont également à rajouter dans le code, si ça t' intéresses je peux le faire. J'ai testé le code en shintant le islight et ça semble fonctionner (il y avait un tite erreur).
  6. @ pepite J'ai hésité avant de mettre ce code, mais, je l'ai détaillé et simplifié au maximum. -> Il comporte le lancement d'une function comportant au moins 1 variable. -> La déclaration de table avec {} , l'ajout dans une table table.insert. -> Le renvoi du résultat de la fonction directement avec return et local mobiles = recherche( -> L'écriture de texte et de variables dans une même ligne pour un fibaro:debug. -> un if. -> une boucle for peut-être moins évidente à comprendre pour les débutants : index représentant l'incrémentation dans la table, où 1 et le premier tour, jusqu'à n représentant le dernier (soit la taille de la table qui peut être trouver par #listeobtenue). Valeur correspondant au résultat de table[index] . -> lecture et écriture de variable globale avec fibaro:setGlobal( et fibaro:getGlobal( . Après il y a la partie json que j’ai découvert la semaine dernière, mais autant se lancer dès le départ avec, on fera de belles économies de lignes de codes. Pour le détail, je peux le faire, mais j’avoue ne pas encore maîtriser totalement cette partie. Cependant valeur.type fibaro:getType(deviceID) , valeur.id , valeur.name (fibaro:getName(deviceID)) , json.decode( , json.encode( c’est compréhensible. Voici un petit lien intéressant http://domotique-home.fr/docs-fibaro-francais-index-des-fonctions-thematique/. Je pense que dans tout ça, il y a les bases du Lua, sans être trop compliqué. Et on a obtenu les ID des portables pour la suite du programme.
  7. Concernant l' "autostart" dans l'entête : Imaginons une coupure de courant, même courte, la box redémarre (tout le monde n'est pas sur onduleur). Durant ce laps de temps, il y a un changement d'état d'un ou des capteurs. Sans l' "autostart", le programme n'actualisera pas les messages tant que tous les capteurs ayant changés d'état ne seront pas de nouveaux actionnés. Autres solution, faire tourner en boucle le programme et ne pas utiliser les triggers while true do --programme fibaro:sleep(delai) end Personnellement, je préfère l' "autostart" qui doit moins consommer en ressource (mais làc'est àvérifier ).
  8. Voici une solution que j'ai écrite et donnée précédemment dans différents sujets sur le forum (mprinfo reconnaîtra probablement ce morceau de code, merci neliger pour les 3 premières lignes ). Il recherche les modules par type en utilisant le json. Dans ce cas, ce programme récupère les IDs des mobiles (smartphone ou tablette). Une liste est crée sous forme de variable globale et peut donc être utilisé par toutes les autres scènes. Fonctionne en V4. --RECHERCHE PAR API --"Trainkill666" v1 ----------------------------------------------------------------------------- --à placer dans un bouton de module virtuel ----------------------------------------------------------------------------- --Déclaration pour l'api local HC2 = Net.FHttp("127.0.0.1", 11111) local reponse = HC2:GET("/api/devices") local listemodule = json.decode(reponse) --création de la table 1 listant tous les modules ---------------------------------------------------------------------------- --fonction recherche local recherche = function (texte, typemodule) local listeobtenue = {} --table 2 provisoire for index,valeur in ipairs(listemodule) do --lecteur de la table 1 if valeur.type == typemodule then --si le type lu dans la table 1 est identique au type recherché table.insert(listeobtenue, valeur.id) --ajout de l'ID du module dans la table 2 fibaro:debug(texte .. " " .. #listeobtenue .. " (ID = " .. valeur.id .. ") ".." = "..valeur.name) end end return listeobtenue --renvoi le résultat de la table 2 end ----------------------------------------------------------------------------- --démarrage local mobiles = recherche("Téléphone", "iOS_device") --lancement de la recherche de téléphone ou tablette (Attention respecter la CASSE) fibaro:setGlobal("mobiles",json.encode(mobiles)) --sauvegarde dans une variable globale sous forme de liste ----------------------------------------------------------------------------- --à ajouter au début la scène pour charger la liste des mobiles ----------------------------------------------------------------------------- --récupération des ID --fonction de décodage des variables globales local decodage = function (listeorigine) local liste = json.decode((fibaro:getGlobal(listeorigine))) --lecteur de la variable globale return liste --renvoi le résultat end --création de la liste des mobiles local listeIDmobiles = decodage("mobiles") Il peut également servir pour rechercher les capteurs, volets... J'ai laissé le code complet pour qu'il soit le plus générique possible, afin de faire par exemple plusieurs créations de listes, ainsi que la lecture de celles-ci. (d'où les fonctions qui peuvent paraître inutiles pour une seule liste). Si il y a un programme identique sur le forum, merci de m'en informer afin que je retire celui-ci, et que j'y place le lien de l'autre à la place.
  9. trainkill666

    Voir Si Une Lumière Est Allumée Et Tout Éteindre

    Celui du Gazous à17h50 est opérationnel, le mien a 20h14 est àtester. Il n'ont pas le même fonctionnement (voir commentaire du post)
  10. trainkill666

    Voir Si Une Lumière Est Allumée Et Tout Éteindre

    @pepite le code a été modifié ce matin, donc c le premier.
  11. trainkill666

    Voir Si Une Lumière Est Allumée Et Tout Éteindre

    @ Gazous, ils manque plusieurs lignes que j'ai oublié lors du copié collé, merci , je corrige. J'ai fait ça à la va vite entre les travaux. Et oui, j'ai oublié de préciser qu'il faut créer la variable globale "listeclairage". Pour json.encode, je l'utilise depuis quelques jours pour créer automatiquement une recherche de tous les IDs de mon système. Ensuite tout est sauvegardé sur la variable, et ma scène (un système similaire à GEA mais propre à mon utilisation donc beaucoup moins complet) les charge à son démarrage, et tout fonctionne. (Du moins pour le moment, et hormis les bug de la V4.040) Je prends donc des "morceaux" de ce que j'utilise dans les scènes, ce qui explique les risques d'erreurs, ou les oublies lors du copié-collé.
  12. trainkill666

    Voir Si Une Lumière Est Allumée Et Tout Éteindre

    Voici le code pensé différemment, au lieu de rechercher de nouveau les ID dans le code du bouton, on récupère la liste créée par le main loop contenant les ID (sans les modules exclus). Toujours le même problème, code fait sans possibilité de Test car Box non opérationnelle grâce à la 4.040 , il peut donc y avoir des "coquilles" empêchant la bonne exécution du code. A vous de tester. Bouton : --récupération des ID --fonction de décodage des variables globales local decodage = function (listeorigine) local liste = json.decode((fibaro:getGlobal(listeorigine))) return liste end --arrêt éclairage local verifeclairage = function(liste) for index,valeur in ipairs(liste) do if tonumber(fibaro:getValue(valeur, "value")) > 0 then fibaro:call(valeur, "turnOff") end end end ----------------------------------------------------------------------------- --récupération des IDS des modules à éteindre local listeclairage = decodage("listeclairage") --éteint les modules verifeclairage(listeclairage) Main Loop : -- Identiants des icônes local IconeAllume, IconeEteint = 1030, 1031 -- Intervalle de mise à jour automatique (en secondes) local IntervalleMAJ = 10 --liste d'exclusion contenant ID ou nom local exclusion = {72, "Caisson", "Volet", "Bubendorff", "Tests"} --test si le module est dans la liste d'exclusion function controlexclusion(idmodule) local retour = true for index, valeur in pairs(exclusion) do if idmodule.name:find(valeur) ~= nil or idmodule.id == valeur then retour = false break end --compare si le nom correspond ou l'id end return retour end -- Boucle sur les modules local recherche = function (liste) -- Liste à sauvegarder pour les id des modules local listeobtenue = {} for k, v in ipairs(liste) do if type(v.properties.isLight) == "string" and type(v.properties.value) == "string" and controlexclusion(v) then if v.properties.value == "true" then table.insert(listeobtenue, v.id) elseif v.properties.value ~= nil and v.properties.value ~="false" then if tonumber(v.properties.value) > 0 then table.insert(listeobtenue, v.id) end end end end return listeobtenue end ----------------------------------------------------------------------------- while true do -- Récupération de la liste des modules local HC2 = Net.FHttp("127.0.0.1", 11111) local reponse = HC2:GET("/api/devices") local resultat = json.decode(reponse) local listeclairage = recherche(resultat) --Sauvegarde pour les id des modules dans une variable globale fibaro:setGlobal("listeclairage",json.encode(listeclairage)) -- Mise à jour de l'icône if #listeclairage > 0 then fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", IconeAllume) else fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", IconeEteint) end -- Attente de la prochaine mise à jour automatique fibaro:sleep(IntervalleMAJ*1000) end
  13. trainkill666

    Voir Si Une Lumière Est Allumée Et Tout Éteindre

    @ Gazous fibaro:getName(module.id) peut être remplacé par module.name Je pense que tu ne pollues pas le sujet, je n'ai jamais appris aussi vite en programmation que sur ce forum grâce aux échanges.
  14. trainkill666

    Voir Si Une Lumière Est Allumée Et Tout Éteindre

    @ Gazous bonne idée Voici une version sans connaître les IDs des modules àexclure, et en plaçant simplement les noms dans la listeexclusion comme dans l'exemple ci-dessous. Version toujours non testée car j'ai toujours les bug de la v4.040. --code retiré car très peu de modifications par rapport àcelui de 20H14. --seul l'encodage et le desencodage par json de la liste sauvegardée en variable globale diffère.
  15. trainkill666

    Voir Si Une Lumière Est Allumée Et Tout Éteindre

    @mprinfo Ok, je pense faire la manip fin de semaine, s'il n'y a pas d'imprévu, voire lundi ou mardi de la semaine prochaine, je suis en congés.
  16. trainkill666

    Voir Si Une Lumière Est Allumée Et Tout Éteindre

    @pepite Merci, justement je cherchais le liens sur le forum pour y trouver des idées.
  17. trainkill666

    Voir Si Une Lumière Est Allumée Et Tout Éteindre

    Malheureusement , j'ai plusieurs bugs depuis la 4.40 (comme je l'ai dit précedemment ), et la propriété isLight a disparu de tous mes modules, ainsi que leur affichage dans la section éclairage de l'appli android. Le recovery s'approche à grand pas. J'utilise cette solution provisoire en attendant. @mprinfo oui ça fait plaisir. Comme je t'avais dit dans le mp, après une bonne réinstalle, je pense que tout va tourner nickel. J'attends juste un jour ou Madame n'est pas là . Grâce à neliger, je suis en train de me faire un chti code qui va restaurer automatiquement les ID des modules de toutes la maison (éclairage, chauffage, VMC, alarme, vidéo, modules virtuels,chauffe eau, ID appli android ...) dans les scènes, après la réinstallation. Il y aura moins de risque d'erreur, et surtout, je vais gagner beaucoup de temps à la remise en route.
  18. trainkill666

    Voir Si Une Lumière Est Allumée Et Tout Éteindre

    Au fait pour contourner le déclenchement du modules dimmer ou on/off non utilisés pour l'éclairage, j'ai rajouté une condition au code : if fibaro:getName(v.id):find("Eclairage") then Car tous mes modules éclairages comporte ce terme dans le nom. La récupération du "Name" peut se faire en json, mais làje passe mon tour.
  19. trainkill666

    Voir Si Une Lumière Est Allumée Et Tout Éteindre

    Pour la mise à jour, remettre les commentaires, voir optimiser le code, je rends la main à neliger, c'est son tuto, je ne suis qu'un intervenant, tout comme vous. Sans lui je serais incapable de lister les modules du HC2 par json. Par contre, un chti " j'aime " sur mon post serait sympathique (je n'ai pas de dimmer).
  20. trainkill666

    Voir Si Une Lumière Est Allumée Et Tout Éteindre

    A tester, je ne peux pas car suite à la maj 4.040 la box plante, ce code est fait à "l'aveugle", il doit donc y avoir des "coquilles". Bouton : -- Récupération de la liste des modules local HC2 = Net.FHttp("127.0.0.1", 11111) local reponse = HC2:GET("/api/devices") local json = json.decode(reponse) -- Boucle sur les modules for k, v in ipairs(json) do if type(v.properties.isLight) == "string" and type(v.properties.value) == "string" then if v.properties.value == "true" then fibaro:call(v.id, "turnOff") elseif v.properties.value ~= nil and v.properties.value ~="false" then if tonumber(v.properties.value) > 0 then fibaro:call(v.id, "turnOff") end end end end Main Loop -- Identiants des icônes local IconeAllume = 107 local IconeEteint = 108 -- Intervalle de mise à jour automatique (en secondes) local IntervalleMAJ = 10 while true do -- Variable du compteur local compteurLumieres = 0 -- Récupération de la liste des modules local HC2 = Net.FHttp("127.0.0.1", 11111) local reponse = HC2:GET("/api/devices") local json = json.decode(reponse) -- Boucle sur les modules for k, v in ipairs(json) do if type(v.properties.isLight) == "string" and type(v.properties.value) == "string" then if v.properties.value == "true" then compteurLumieres = compteurLumieres + 1 elseif v.properties.value ~= nil and v.properties.value ~="false" then if tonumber(v.properties.value) > 0 then compteurLumieres = compteurLumieres + 1 end end end end -- Mise à jour de l'icône if(compteurLumieres > 0) then fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", IconeAllume) else fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", IconeEteint) end -- Attente de la prochaine mise à jour automatique fibaro:sleep(IntervalleMAJ*1000) end
  21. trainkill666

    Voir Si Une Lumière Est Allumée Et Tout Éteindre

    A tester : --Code complet ci-dessous à 14:03
  22. trainkill666

    V4.040 Hot Fix - 26-03-2015

    Suis-je le seul àavoir le bug dans l'application android, où les éclairages n'apparaissent plus dans la section correspondante ?
  23. trainkill666

    Voir Si Une Lumière Est Allumée Et Tout Éteindre

    @mprinfo Le code de neliger fonctionne donc sans modification ? Par contre, comme il en a fait l'allusion attention au dimmer qui ne sont pas utilisés pour l'éclairage. Properties correspond-il aux paramètres avancés du module dans la liste défilante "appareil commandé" ?, dans ce cas, pas de risque.
  24. trainkill666

    Voir Si Une Lumière Est Allumée Et Tout Éteindre

    C'est pas faux, je ne fait que répondre à la question de Plap3014 . Si dimmable_light fonctionne, à lui d'affiner le code. Ton code valide le bug de la maj 4.040, sous l'appli android, je n'ai plus d'éclairage dans la section correspondante, et ton code ne les voit pas non plus.
  25. trainkill666

    Voir Si Une Lumière Est Allumée Et Tout Éteindre

    @Plap3014 : je ne sais pas si ça fonctionne car je n'ai pas de dimmer : --Code retiré car ne fonctionnant pas.
×