
Gazous
Membres confirmés-
Compteur de contenus
801 -
Inscription
-
Dernière visite
-
Jours gagnés
2
Tout ce qui a été posté par Gazous
-
OK, en fait le port est 8080 ça devrait aller mieux. Je pensais qu'il était conservé lors d'un export. Je vais ajouter l'information dans le post original. Logiquement si ta LiveBox est allumée, elle va tout de suite passer dans le bon état. Par contre si elle est en veille au démarrage de ton module il faudra 55s pour qu'elle passe dans l'état "SLEEPING". Ensuite les mises à jours seront instantanées tant que tu de modifie pas le VD ou que tu ne reboote pas ta HC2. Au pire ça prendra 55s. Le jour où Orange corrigera le bug dans l'API (si cela arrive un jour) j'en tiendrais compte et je publierais une version améliorée. Tu n'as peut-être pas de module relais donc penses aussi à mettre nil partout où tu vois la variable powerSwitchId ​(2 boutons + MainLoop)
-
OK tiens moi au courant. Bon WE.
-
Ça fonctionne mieux ?
-
As-tu bien renseigné l'adresse IP de ta LiveBox dans les paramètres du composant ? J'ai oublié de le précisé mais il va de soit que pour que le module fonctionne, il faut réserver une IP pour le décodeur LiveBox. Par défaut, elle est sensée conserver la même mais c'est plus sà»r de la réserver. Pour cela, il faut se connecter sur l'interface du boitier LiveBox Modem/Routeur, identifier le décodeur qui sera normalement listé dans le "réseau local filaire". Ensuite il faut aller dans "configuration avancée" -> "DHCP" pour lui réserver une adresse IP. Si l'adresse que tu réserves est différente de celle que le décodeur a actuellement, tu devras le redémarrer pour qu'il renouvelle son bail DHCP. Une fois que c'est fait, tu renseignes l'adresse IP en question dans les settings du Virtual Device et ça devrait rouler. Il n'y a aucun souci dans le code de mes boutons regardes : deviceId = fibaro:getSelfId() LBox = Net.FHttp(tostring(fibaro:get(deviceId, 'IPAddress')), tostring(fibaro:get(deviceId, 'TCPPort'))) LBox:GET("/remoteControl/cmd?operation=01&key=139&mode=0") LBox est bien défini la ligne au dessus.
-
Je te proposes mon code actuel qui tourne très bien Premier button "Tout Eteindre" -- Récupération de la liste des modules HC2 = Net.FHttp("127.0.0.1", 11111) reponse = HC2:GET("/api/devices") json = json.decode(reponse) -- Modules à exclure et fonction de traitement (pas raccordés à des lumières) -- Peut contenir un id ou un mot clés à chercher dans le nom du module toExclude = {72, "Dispo", "Volet", "Bubendorff"} function shouldExclude(module) for k, v in pairs(toExclude) do if string.find(module.name, v) ~= nil or module.id == v then return true end end return false end -- Boucle sur les modules for k, v in ipairs(json) do if type(v.properties.isLight) == "string" and type(v.properties.value) == "string" and not shouldExclude(v) 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 Deuxième bouton "Rafraîchir" ----------------------------------------------------------- -- Toutes lumières v1.3 ----------------------------------------------------------- -- Extinction de l'ensemble des lumières de la maison ----------------------------------------------------------- -- Changelog -- 1.3 : Liste d'exclusion pouvant contenir des id de modules ou des mots clés dans les noms -- 1.2 : Correction du test d'état prenant en charge les -- modules variateurs et rétablissement de la -- condition pour l'exctinction -- 1.1 : Extinction inconditionnelle et prise en charge des -- modules variateurs ----------------------------------------------------------- ------------------------------ -- Variables à renseigner ------------------------------ -- Identiants des icônes IconeAllume = 1030 IconeEteint = 1031 function debug(text, color) color = color or "white" fibaro:debug("<font color='"..color.."'>"..text.."</font>") end -- Modules à exclure et fonction de traitement (pas raccordés à des lumières) -- Peut contenir un id ou un mot clés à chercher dans le nom du module toExclude = {72, "Dispo", "Volet", "Bubendorff"} function shouldExclude(module) for k, v in pairs(toExclude) do if string.find(module.name, v) ~= nil or module.id == v then return true end end return false end function checkLights() -- Variable du compteur compteurLumieres = 0 -- Récupération de la liste des modules HC2 = Net.FHttp("127.0.0.1", 11111) reponse = HC2:GET("/api/devices") jsonResponse = json.decode(reponse) -- Boucle sur les modules for k, v in ipairs(jsonResponse) do if type(v.properties.isLight) == "string" and type(v.properties.value) == "string" and not shouldExclude(v) 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) debug(compteurLumieres.." lumière(s) allumée(s)", "green") else fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", IconeEteint) debug("Aucune lumière allumée") end end pcall(checkLights) MainLoop fibaro:call(fibaro:getSelfId(), 'pressButton', '2')
-
Bonsoir, Je vous propose un petit module virtuel que j'ai développé hier soir pour bien gérer le décodeur Orange LiveBox Play. J'ai en ce qui me concerne développé ce module pour pas mal de raisons dont voici les principales : 1) Pouvoir piloter la LiveBox bien sà»r 2) Gérer son état (ON, OFF, SLEEPING, STARTING) en temps réel 3) Trouver une solution de contournement à son absence de HDMI CEC, très ennuyeux 4) Pouvoir la couper durant l'absence prolongée, la nuit et surtout la redémarrer proprement chaque jour au bon moment et ainsi éviter de devoir la rebooter manuellement lorsqu'on en a vraiment besoin 5) Faire des économies car même en veille elle consomme quand même 17W à moins d'activer la veille profonde qui désactive les enregistrements programmés. Voici donc le code du module virtuel. Et 4 icônes que je propose pour les 4 états : Une fois le module importé, il faudra renseigner l'adresse IP de votre décodeur LiveBox (réservation DHCP recommandée) ainsi que le port qui est 8080. A noter : une des partie chiante de ce développement est liée à un bug de la version actuelle de l'API JSON de la LiveBox qui retourne une erreur lorsque l'ont souhaite récupérer son état courant. Or j'en ai besoin pour initialiser mon Virtual Device... La solution de contournement que j'ai trouvé repose sur l'utilisation de la Long Polling API qui permet d'être notifié d'un changement de contexte sur la LiveBox. Ainsi au démarrage de la MainLoop, afin de connaître l'état courant de la bête : 1) Je simule un appui sur un bouton (le dernier du Virtual Device) qui va simplement me permettre de faire un appel asynchrone temporisé simulant un appui sur Menu puis CH+ 2) Je lance immédiatement un appel de cette fameuse Long Polling API (notifyEvent) qui est bloquante 55s si rien ne se passe ou répond instantanément si un événement survient 3) Je peux ainsi initialiser mon état et être notifié des futurs changements en appellant en permanence la méthode notifyEvent qui au pire partira en timeOut au bout de 55s Pour ne rater aucun événement, je suis obligé de faire un while true dans la MainLoop sinon je prend le risque de perdre un événement qui pourrait survenir durant les 3s de sleep de celle-ci... Je teste ce module depuis hier et tout fonctionne très bien, c'est hyper réactif, vous pouvez faire des essais avec la télécommande physique de la LiveBox ou tout autre moyen de pilotage. Je suis même étonné de ne pas rencontrer de souci. Si vous n'avez pas de module relais en amont de l'alimentation de votre LiveBox, mettez simplement nil comme valeur pour la variable powerSwitchId (MainLoop, button ⎋ ON/VEILLE et button ⎋ POWER OFF. Vous n'aurez pas de gestion de l'état OFF mais ne supprimez pas le bouton ⎋ POWER OFF car cela décalera les ID des boutons. Si vous souhaitez le faire il faudra aller modifier en conséquence du dernier bouton de la MainLoop ligne 54 (32->31) -- Si je ne connais pas l'état, je déclenche un appui temporisé sur le bouton menu if (lbCurrentStatus == "NA") then fibaro:call(deviceId, "pressButton", 32) end Pensez également à mettre à jour les ID de vos icônes dans la fonction updateLiveBoxIcon() ​Il est fort probable qu'il y ait quelques bugs que je n'ai pas encore vus donc n'hésitez pas à me les signaler. Aussi, je viendrais mettre à jour le Device si j'apporte des améliorations. Voici enfin le code complet de la MainLoop ------------------------------------------------------ -- TV Commande v0.2 -- ------------------------------------------------------ -- Auteur : Brice Cassagnabère -- ------------------------------------------------------ -- Changelog : -- -- v0.2 : Ajout d'un test port et IP au démarrage -- -- Amélioration du code -- -- v0.1 : Version initiale -- ------------------------------------------------------ -- Plus d'infos : http://is.gd/RcK1xZ -- ------------------------------------------------------ -- Variables globales de la MainLoop lbCurrentStatus = "NA" lbNewStatus = "NA" -- ID du module relais de l'alimentation (FGS, WallPLug, Greenwave...) nil si pas présent powerSwitchId = 235 deviceId = fibaro:getSelfId() -- Functions utiles function debug(text, color) color = color or "white" fibaro:debug("<font color='"..color.."'>"..text.."</font>") end function updateLiveBoxUIStatus() if (lbCurrentStatus == lbNewStatus) then return end lbCurrentStatus = lbNewStatus fibaro:log("Status : "..lbCurrentStatus) debug("LiveBox status : "..lbCurrentStatus, "green") fibaro:call(deviceId, "setProperty", "ui.labelStatus.value", lbCurrentStatus) end function updateLiveBoxIcon() if lbCurrentStatus == "ON" then iconId = 1035 elseif lbCurrentStatus == "SLEEPING" then iconId = 1033 elseif lbCurrentStatus == "OFF" then iconId = 1034 elseif lbCurrentStatus == "STARTING" then iconId = 1032 end fibaro:call(deviceId, "setProperty", "currentIcon", iconId) end function liveBoxEventPolling() if (tonumber(powerSwitchId ~= nil and fibaro:getValue(powerSwitchId, 'value')) == 0) then lbNewStatus = "OFF" debug("LiveBox à l'arrêt complet", "red") else -- Detection de l'état de la livebox debug("En attente d'événement de la LiveBox...") LBox = Net.FHttp(tostring(fibaro:get(deviceId, 'IPAddress')), tostring(fibaro:get(deviceId, 'TCPPort'))) -- Si je ne connais pas l'état, je déclenche un appui temporisé sur le bouton menu if (lbCurrentStatus == "NA") then fibaro:call(deviceId, "pressButton", 32) end -- Je lance une commande long polling response = LBox:GET("/remoteControl/notifyEvent") -- Un événement est survenu, je traite l'événement if (response ~= nil and response ~= "") then debug(response, "yellow") jsonResponse = json.decode(response) if jsonResponse.result.message == "request timeout" then if lbCurrentStatus == "NA" then lbNewStatus = "SLEEPING" else debug("Pas d'événement durant 55s, LiveBox toujours en état : "..lbCurrentStatus, "orange") end elseif jsonResponse.result.message == "event notification" then if jsonResponse.result.data.eventType == "OSD_CONTEXT_CHANGED" then debug(jsonResponse.result.data.service, "orange") -- Dans ce cas, la LiveBox est allumée donc je peux mettre à jour son statut if (jsonResponse.result.data.service == "HOMEPAGE") then lbNewStatus = "ON" elseif (jsonResponse.result.data.service == "MAIN_PROCESS") then lbNewStatus = "SLEEPING" end elseif jsonResponse.result.data.eventType == "MEDIA_STATE_CHANGED" then lbNewStatus = "ON" debug("ZAPPING", "orange") fibaro:log("ZAPPING") end end elseif lbCurrentStatus == "OFF" or lbCurrentStatus == "NA" then lbNewStatus = "STARTING" end end end local error = false if (fibaro:get(deviceId, 'IPAddress') == "") then debug("Vous devez renseigner l'Adresse IP du décodeur dans le champs dédié du Virtual Device", "red") debug("Vous pouvez retrouver cette adresse dans l'interface d'administration de la LiveBox") debug("Il est recommandé de faire une réservation DHCP pour être sà»r que l'IP ne change jamais") error = true end if (fibaro:get(deviceId, 'TCPPort') == "0") then debug("Vous devez renseigner le Port dans le champs dédié du Virtual Device", "red") debug("Le port par défaut est 8080 sur le décodeur LiveBox Play (noir)") error = true end if (error) then return end while true do pcall(liveBoxEventPolling) pcall(updateLiveBoxUIStatus) pcall(updateLiveBoxIcon) if (lbCurrentStatus == "OFF" or lbCurrentStatus == "STARTING") then fibaro:sleep(5000) end end J'espère que cela vous sera utile ! TV_Commande v0.2.vfib
-
Je confirme ce qui semblait évident : en basculant tout le code de la MainLoop dans un bouton et en faisant un pressbutton dans la MainLoop, ça ne plante plus. Le souci c'est que durant la durée d'exécution du code du bouton, c'est l'icône du bouton qui s'affichera donc pas forcément très esthétique... Il serait quand même bien de comprendre ce qui génère le blocage dans la MainLoop !
-
Pour moi le clignotement s'arrête momentanément lorsque l'on fait une action sur la multiprise comme allumer/éteindre une prise. Modifier le paramètre 1 a le même effet. On peut mettre la valeur qu'on veut, ça va stopper le clignotement mais ça reviendra. En tous cas c'est le cas pour moi. Concernant la remontée de consommation, chez moi elle est quasi instantanée même si le polling est à 300s @latoupie : si tu tiens à garder un usage des CPL Freeplug avec un débit correct, tout en conservant la possibilité de couper l'alimentation de tes boitiers FreeBoxPlayer et/ou serveur, je te recommandes d'utiliser des alimentations séparées. Tu pourras ainsi brancher tes freeplug en amont de la Greenwave (elles seront dédiées au CPL) et brancher tes nouvelles alimentations directement sur la Greenwave pour les contrôler. J'avais de mon côté acheté 2 prises en remplacement des Freeplug lorsque j'étais chez Free mais je n'en ai plus l'usage aujourd'hui.
-
oui bien sûr aucun problème
-
Le voici avec en bonus le code pour fixer une valeur et en ajouter 2 dans la liste prédéfinie. -- Creation de Variable Gazous json = '{"name":"Gazous", "isEnum":1}' HC2 = Net.FHttp("127.0.0.1", 11111) HC2:POST("/api/globalVariables", json) -- Ajout de 2 valeurs àla Variable Gazous et modification avec une des 2 valeurs json = '{"value":"Gazous1","isEnum":true,"enumValues":["Gazous1", "Gazous2"]}' HC2:PUT("/api/globalVariables/Gazous", json)
-
tu es sûr de ça ? quel paramètre ? Si c'est le polling, ça ne joue que sur la remontée du statu sur arrêt/marche manuel
-
Idem, fonctionne super bien dans mon meuble TV et me permet de bien gérer tous mes équipements que je coupe la nuit et en cas d'absence prolongée car mine de rien le décodeur LiveBox consomme 17 W en veille, mon ampli Denon 5W, mon caisson de basses 17W.. J'ai aussi un relais infrarouge qui consomme 3,5W tout le temps. La télé est bien à0W en veille mais grâce àla consommation, je peux facilement savoir si elle est en veille ou pas, chose que je réalisait avant via une tentative de connexion TCP sur le port de commande de la TV mais grâce àla consommation je gagne en réactivité sur cette information. Au bout du compte ça fait je pense de belles écnomies et surtout une belle gestion de mes scénarios d'usage.
-
topic unique GCE Electronics IPX800 V3 - Automate Ethernet
Gazous a répondu à un(e) sujet de Moicphil dans GCE Electronics
J'ai rien compris -
topic unique GCE Electronics IPX800 V3 - Automate Ethernet
Gazous a répondu à un(e) sujet de Moicphil dans GCE Electronics
Ha bon, une ancienne version alors ? -
Pas grave c'est pas toujours facile de relire tout les messages. J'ai refais un test de mon côté et toujours un blocage au bout de 2h environ. Je crois que c'est l'appel àl'API qui bloque, je ne vois que cela. Je vais faire d'autres essais avec un code différent et reviens si j'ai un mieux.
-
topic unique GCE Electronics IPX800 V3 - Automate Ethernet
Gazous a répondu à un(e) sujet de Moicphil dans GCE Electronics
Mais si ton IPX800 est configuré avec une authentification login/mdp, comment fait tu pour faire des appels TCP authentifiés ??? Tu les renseignes où tes credentials ? Si ça intéresse quelqu'un, voici une fonction qui permet de procéder à un switch de l'IPX en HTTP authentifié directement depuis une SCENE function switchRelay(relayId, newState) local http = net.HTTPClient() http:request("http://"..IPXIP.."/preset.htm?set"..relayId.."="..newState, { options = { method = 'GET', headers = {['Authorization'] = 'BASIC XXXXXXXXXXXXXXXXX'}, }, success = function(response) fibaro:debug("OK") end, error = function(err) fibaro:debug("Error: " ..err) end }) end XXXXXXXXXXXXXXXXX = "<login>:<mdp>" de l'IPX à encoder en base64 (https://www.base64encode.org) -
J'ai songé àcela mais ce qui me gêne c'est que l'appuis sur le bouton génère un changement de l'icône indésirable àchaque occurence. J'ai d'autres modules qui tournent en permanence et n'ont pas ce problème. Je vais creuser pour voir ce qui bloque...
-
Un petit retour de mon côté après quelques jours d'utilisation. Je remarque que mon script se bloque régulièrement au bout de quelques heures. Tout d'un coup, il ne tourne plus et quand je l'édite et sauvegarde ça repart. Comme si la boucle se bloquait àun moment donné. J'ai fait le test en retirant le While true pour qu'il tourne toutes les 3s via le fonctionnement natif de la main loop, pareil. J'ai aussi tout passé dans une fonction pour l'appeler en pcall et c'est toujours pareil. Je ne sais pas ce qui peut le bloquer ainsi. Une idée ?
-
topic unique GCE Electronics IPX800 V3 - Automate Ethernet
Gazous a répondu à un(e) sujet de Moicphil dans GCE Electronics
Ok, mais tu coup tu utilises uniquement l'API TCP je suppose car il me semble que la HCL ne te permet pas de mettre du LUA dans ton VD ? Moi je suis passé en HTTP pour 2 raisons : l'authentification et surtout parce que j'avais un petit peu le même problème que toi. Je me suis retrouvé dans des cas où les commandes TCP ne passaient plus. Pour la mise à jour des status, je fais du polling de l'API JSON car cela me permet d'être sà»r d'avoir une information fraîche. -
topic unique GCE Electronics IPX800 V3 - Automate Ethernet
Gazous a répondu à un(e) sujet de Moicphil dans GCE Electronics
@MasterBT, peux-tu décrire ce qui ne fonctionne pas exactement ? Parce que làc'est un peu vague pour pouvoir t'aider. C'est quel type de commande qui ne passe pas entre ta HCL et ton IPX ? -
topic unique GCE Electronics IPX800 V3 - Automate Ethernet
Gazous a répondu à un(e) sujet de Moicphil dans GCE Electronics
Si en fait je n'avais pas la bonne version de la doc et je n'avais pas vu que les relais étaient polissables en http aussi... Donc mon souci est réglé -
Topic unique Fibaro - Module Dimmer Fgd-211
Gazous a répondu à un(e) sujet de Moicphil dans Modules Fibaro
Ca ne m'étonnes pas. Il n'y a pas de magie. Je ne sais pas exactement comment le FGD fonctionne avec le retour lampe pour s'alimenter sans le neutre mais l'explication est certainement là. J'ai eu un cas similaire avec un transfo LED qui grésillait un peu plus que la normale avec un FGD. Par chance j'ai réussi àramener un neutre qui était pas trop loin et j'ai pu le remplacer par un FGS mais quand on a pas le choix, il faut faire avec les petits désagréments comme ces grésillements. Une halogène ne poserait pas de problème -
Topic unique Fibaro - Module Dimmer Fgd-211
Gazous a répondu à un(e) sujet de Moicphil dans Modules Fibaro
Bha des G9 qui supportent une plage de variation correcte. Toutes celles que j'ai testées pourtant certifiées dimmables, variaient de 70 à80% et scintillaient ou clignotaient en dessus. Quel est ton modèle. -
Topic unique Fibaro - Module Dimmer Fgd-211
Gazous a répondu à un(e) sujet de Moicphil dans Modules Fibaro
Les bonnes G9 dimmables c'est quasi impossible àtrouver. J'en ai testé 10 et je n'ai rien trouvé de correct. -
Cool mais sinon où sont documentées ces méthodes ?