Aller au contenu

Gazous

Membres confirmés
  • Compteur de contenus

    801
  • Inscription

  • Dernière visite

  • Jours gagnés

    2

Tout ce qui a été posté par Gazous

  1. Bon merci pour vos propositions de tests. Je vais essayer d'avancer dessus et vous soumettre des versions de tests en MP avant de publier. Est-ce que quelqu'un pourrait me donner les tarifs exacts qui figurent sur la facture EDF afin que je puisse intégrer tous les tarifs àmon code. Je suppose que les taxes sont les mêmes. Idéalement je suis preneur de la page en question de vos factures si possible. Merci d'avance.
  2. Bon OK, je vais essayer de faire ça bien. Il y aura je pense au moins 2 versions du VD, une avec 2 index et l'autre avec 6 index... Je pense néanmoins pouvoir faire un code générique optimisé pour la MainLoop.
  3. Merci Didier ! Est-ce que cela intéresse quelqu'un que je fasse évoluer mon Virtual Device afin qu'il prenne en compte les 4 types d'abonnements BASE, HPHC, EJP et TEMPO ? Si oui il me faudra des beta testeurs pour valider tout ça avant publication, surtout pour le TEMPO... Pour ce dernier, il faudra éventuellement générer une série de jauges dédiées prenant en compte les couleurs mais ça fait beaucoup d'icônes àgénérer...
  4. Holala c'est fou ça ! Et pourrais tu me donner la trame JSON que renvois l'eco-devices stp ? Pour l'obtenir tu ouvres un navigateur et tu saisis http://<ip de ton ED>/api/xdevices.json?cmd=10 Merci d'avance !
  5. Merci ! Cela veut dire que en Tempo tubas 6 indexes ???
  6. Bonsoir, j'ai commencé àregardé pour implémenter les différents types d'abonnements. EJP ça correspond àquel type d'abonnement en fait ? C'est Tempo ou rien àvoir ? Quels sont les tarifs du Kwh de cet abonnement ? Merci !
  7. Oui comme je le disais au dessus le bug a été corrigé en 4.042
  8. Il me semble aussi que l'utilisation du neutre améliore la stabilité du FGD qui a parfois du mal avec certaines lampes. Dès que je peux j'essaies de faire passer un neutre mais ce n'est malheureusement pas toujours possible
  9. Très simple, tu vas dans l'éditeur où tu as ajouté tes icônes, ensuite tu fais clic droit sur l'icones "Inspecter l'élément" ou l'équivalent de ton navigateur. Tu vas arriver dans le code source de la page qui décrit l'élément et là, l'id est facilement repérable.
  10. Moi aussi je faisait que du C/C++ mais j'ai appris LUA par la force des choses Je vais regarder pour ton cas et je publierais une version "générique". Je vais tout simplement déterminer le type d'abonnement en fonction de la trame JSON. Est-ce que quelqu'un aurait la trame JSON d'un abonnement classique ? Je te promets pas de pouvoir m'en occuper cette semaine car j'ai pas mal de boulot et peu de temps à consacrer à ça. Mais dès que j'ai un moment je m'en occupe.
  11. Hello, merci. Je ne connais pas le fonctionnement des EJPHN lais on doit pouvoir l'adapter sans aucun souci. Il y a aussi 2 index ?
  12. Salut pepite, c'est justement ce que je propose dans la Méthode 2 mais elle présente l'inconvénient de modifier l'icône du Virtual Device durant l'actualisation des données.
  13. Bonjour, Il existe déjà plusieurs Virtual Devices relatifs à l'Eco-Devices sur le forum mais n'ayant pas trouvé mon bonheur, j'ai entièrement écrit un module de zéro en fonction de mes besoins et en espérant qu'il puisse également servir à d'autres. Que fait ce Virtual Device ? 1) Suivi en temps réel des statistiques d'un compteur téléinfo (T1 ou T2) HC/HP 2) Affichage temps réel d'une icône de type "jauge" présentant le tarif actuel (HC/HP) ainsi que la valeur de consommation actuelle 3) Affichage temps des index en kWatts au 1000ième, index en cours (HC ou HP) toujours en premier 4) Affichage temps réel d'un compteur de consommation journalier en Watts pour les HP et les HC 5) Affichage temps réel du coà»t de consommation journalier 6) Génération d'un rapport Email de consommation journalière 7) Fonction de remise à zéro manuelle des compteurs journaliers 8) Gestion de l'authentification utilisateur Eco-Devices Evolutions prévues : 1) Ajout d'un compteur de cumul mensuel 2) Estimation de prochaine facture et publication d'index "Releve Confiance" chez EDF (fera certainement l'objet d'un second module "EDF & Moi") Voici un aperçu des vues graphiques du Virtual Device : La liste des icones de jauges : Deux méthodes sont proposées pour la récupération des statistiques de l'Eco-Devices : L'existence de ces 2 méthodes est liée à un bug connu de la HC2 lors de l'utilisation de requêtes HTTP dans la mainLoop d'un Virtual Device qui bloque au bout d'un certain temps. Le moyen de contourner cela est l'utilisation d'un bouton déclenché depuis la mainLoop qui a comme inconvénient de modifier l'icône pour la durée du traitement ce qui personnellement ne me convient pas. - Méthode 1 (recommandée) : C'est la méthode que j'ai choisi car elle se base sur une scène afin de rafraichir les données et évite ainsi le changement d'icône indésirable durant la récupération des données. -> Pour utiliser cette méthode, vous devez en plus créer et configurer la scène fournie puis dans la MainLoop, positionner la variable useSceneToRefresh à true - Méthode 2 (par défaut ) : C'est la méthode configurée par défaut qui évite l'utilisation d'une scène en parallèle mais avec l'inconvénient de l'icône qui sera modifiée à chaque récupération des données. J'ai toutefois crée une icône dédiée à configurer sur ce bouton : afin que ce ne soit pas trop moche. -> Pour utiliser cette méthode, vous devez simplement positionner la variable useSceneToRefresh à false dans la MainLoop Comment l'utiliser ? 1) Importer la dernière version du Virtual Device : Eco_Devices_Live_Day_Reporter_V0.1.vfib 2) Renseignez l'adresse IP ainsi que le port (80 par défaut) de votre Eco-Devices 3) Importer la série d'icônes de jauges fournies en respectant l'ogre dans lequel elles sont fournies, c'est très important, puis notez l'Id correspondant à la première 4) Dans la mainLoop, renseignez les valeurs des variables teleInfoNB, baseIconId, userIdsToNotify, useSceneToRefresh et si besoin reportTime 5) Si vous utilisez la Méthode 1 (useSceneToRefresh = true) vous devez créer la scène Eco-Devices Refresh (voir ci-dessous) 6) Dans le code du bouton "Raraîchir" pensez à saisir vos in formations d'authentification si vous l'avez activée sur l'Eco-Devices 7) Pas besoin de créer de variables globales, elles sont automatiquement crées au premier démarrage du Virtual Device 8) Sauvegarder la scène et tout devrait bien fonctionner Pour ceux qui utilisent la Méthode 1 : Voici le code de la scènes Eco-Devices Refresh Il est IMPORTANT de bien renseigner le deviceId correspondant à l'Id de votre Virtual device importé ci-dessus. Si vous avez activé l'authentification sur l'Eco-Devices, vous devez ici saisir vos informations d'authentification encodées en base64. Si vous ne l'avez pas déjà fait, il suffit d'aller sur https://www.base64encode.org, d'encoder en UTF8 la chaine correspondante à "<login>:<password>" et de récupérer le résultat. Par exemple "admin:password" donnera "YWRtaW46cGFzc3dvcmQ=" saut de --[[ %% autostart %% properties %% globals --]] -- Récurrence de rafraichissement des stats en secondes local checkEvery = 3 -- Id du Virtual Device local deviceId = 228 -- Authentification ("" si pas d'authentification sinon chaine "<login>:<password>" en base64 local base64BasicAuthentication = "" local sourceTrigger = fibaro:getSourceTrigger() local ecoDevicesIP = tostring(fibaro:get(deviceId,"IPAddress")) local ecoDevicesStats = nil --- Usefull Functions --- function debug(text, color) color = color or "white" fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, text, "span")) end function setDevicePropertyValue(id, label, value) fibaro:call(id, "setProperty", "ui."..label..".value", value) end function getDevicePropertyValue(vDeviceid, propertyName) return fibaro:getValue(vDeviceid, "ui."..propertyName..".value") end function refreshEcoDevicesStats() debug("Rafraichissement des statistiques de l'EcoDevices...") ecoDevicesStats = nil local http = net.HTTPClient() http:request("http://"..ecoDevicesIP.."/api/xdevices.json?cmd=10", { options = { method = 'GET', headers = {["Authorization"] = 'BASIC '..base64BasicAuthentication}, }, success = function(response) ecoDevicesStats = response.data refreshEcoDevicesStatsAsync() end, error = function(err) debug("Error: " ..err, "red") fibaro:sleep(1000) refreshEcoDevicesStats() end }) end function refreshEcoDevicesStatsAsync() fibaro:setGlobal("ecoDevicesStats", ecoDevicesStats) debug("OK ! "..ecoDevicesStats, "green") if (sourceTrigger["type"] == "autostart") then setTimeout(refreshEcoDevicesStats, checkEvery*1000) end end refreshEcoDevicesStats() lignesaut de ligne Enfin, voici le code de la MainLoop : saut de ligne -------------------------------------------------------- -- Eco-Devices Live & Day Reporter v0.1 -- -------------------------------------------------------- -- Auteur : Brice Cassagnabère -- -------------------------------------------------------- -- Changelog : -- -- -- -- v0.1 : Version initiale -- -------------------------------------------------------- -- Plus d'infos : http://is.gd/tMgWdy -- -------------------------------------------------------- -- Renseignez ici le numéro de téléinfo à prendre en compte, T1 ou T2 teleInfoNB = "T1" -- Renseignez ici le numéro de la première icône de jauge (HC_0.png) baseIconId = 1047 -- Renseignez ici les id Utilistaurs à qui transmettre le rapport userIdsToNotify = {2, 154} -- Si vous utilisez la scène associée pour la MAJ, passer cette variable à true useSceneToRefresh = false -- Heure à laquelle vous souhaitez générer le rapport journalier reportTime = "23:59" -- Tarifs des kWh 2015 hcCost = 0.0623 hpCost = 0.1019 deviceId = fibaro:getSelfId() --- Usefull Functions --- function debug(text, color) color = color or "white" fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, text, "span")) end function setDevicePropertyValue(id, label, value) fibaro:call(id, "setProperty", "ui."..label..".value", value) end function getDevicePropertyValue(vDeviceid, propertyName) return fibaro:getValue(vDeviceid, "ui."..propertyName..".value") end function createGlobalIfNotExists(varName, defaultValue) if fibaro:getGlobal(varName) == "" then debug("Création de la variable "..varName.." avec comme valeur par défaut "..defaultValue) newVar = {} newVar.name = varName newVar.value = defaultValue HC2 = Net.FHttp("127.0.0.1", 11111) HC2:POST("/api/globalVariables", json.encode(newVar)) end end function refreshEcoDevicesStats() if not useSceneToRefresh then fibaro:call(deviceId, "pressButton", 5) fibaro:sleep(1000) end jsonStats = fibaro:getGlobalValue("ecoDevicesStats") if not string.find(jsonStats, '{"product":"Eco-') then debug("An error occured -> "..jsonStats, "red") debug("No stats found, please check documentation and configuration", "orange") return false end ecoDevicesStats = json.decode(jsonStats) tarif = string.format("%.2s", ecoDevicesStats[teleInfoNB.."_PTEC"]) conso = ecoDevicesStats[teleInfoNB.."_PAPP"] hcIndex = ecoDevicesStats[teleInfoNB.."_HCHC"] hpIndex = ecoDevicesStats[teleInfoNB.."_HCHP"] hcIndexStr = "HC : "..string.format("%.3f", hcIndex/1000) hpIndexStr = "HP : "..string.format("%.3f", hpIndex/1000) fibaro:log("Tarif : "..tarif.." - Conso : "..conso.." VA".." - "..hcIndexStr.." - "..hpIndexStr) iconId = baseIconId if tarif == "HP" then activeIndex = hpIndexStr inactiveIndex = hcIndexStr iconId = iconId + 9 else activeIndex = hcIndexStr inactiveIndex = hpIndexStr end -- Mise à jour des Labels setDevicePropertyValue(deviceId, "labelTarif", tarif) setDevicePropertyValue(deviceId, "labelConso", conso.." VA") setDevicePropertyValue(deviceId, "labelActiveIndex", activeIndex.." kW") setDevicePropertyValue(deviceId, "labelInactiveIndex", inactiveIndex.." kW") -- Mise à jour de l'icône conso = ecoDevicesStats[teleInfoNB.."_PAPP"] if conso >= 1000 then if conso < 9000 then iconId = iconId + tonumber(string.format("%.1s", conso)) else iconId = iconId + 8 end end fibaro:call(deviceId, "setProperty", "currentIcon", iconId) return true end function refreshDayStats() day_HC_Conso = hcIndex - day_HC_Index day_HP_Conso = hpIndex - day_HP_Index day_HC_ConsoStr = "HC : "..day_HC_Conso.." W" day_HP_ConsoStr = "HP : "..day_HP_Conso.." W" if tarif == "HP" then activeDayIndex = day_HP_ConsoStr inactiveDayIndex = day_HC_ConsoStr else activeDayIndex = day_HC_ConsoStr inactiveDayIndex = day_HP_ConsoStr end -- Calcul du coà»t en € dayCost = ((day_HP_Conso * hpCost) + (day_HC_Conso * hcCost)) / 1000 dayCost = dayCost + (dayCost * 0.2) dayCostStr = "Coà»t : "..string.format("%.2f", dayCost).." €" setDevicePropertyValue(deviceId, "labelActiveDayIndex", activeDayIndex) setDevicePropertyValue(deviceId, "labelInactiveDayIndex", inactiveDayIndex) setDevicePropertyValue(deviceId, "labelToday", dayCostStr) end function reportDayStats() message = "HC : "..day_HC_Conso.." Watts\nHP : "..day_HP_Conso.." Watts\n"..dayCostStr for k,v in pairs(userIdsToNotify) do fibaro:call(v, "sendEmail", "Consommation électrique du "..os.date("%d/%m/%Y"), message) end end function checkCptRaz() -- Tous les jours à minuit, je stockera valeur de l'index en cours if tostring(os.date("%H:%M")) == reportTime or day_HC_Index == 0 or ecoDevicesStats.raz then debug("Initialisation du compteur journalier", "green") if tostring(os.date("%H:%M")) == reportTime then reportDayStats() end day_HC_Index = hcIndex day_HP_Index = hpIndex fibaro:setGlobal("day_HC_Index", day_HC_Index) fibaro:setGlobal("day_HP_Index", day_HP_Index) while tostring(os.date("%H:%M")) == reportTime do fibaro:sleep(1000) end end end -- Création automatique des variable globales createGlobalIfNotExists("ecoDevicesStats", "0") createGlobalIfNotExists("day_HC_Index", "0") createGlobalIfNotExists("day_HP_Index", "0") -- Je rafraichis les stats une première fois pour initialiser mes variables locales if not refreshEcoDevicesStats() then return end day_HC_Index = tonumber(fibaro:getGlobalValue("day_HC_Index")) day_HP_Index = tonumber(fibaro:getGlobalValue("day_HP_Index")) -- Boucle principale while true do -- ## Pensez à bien choisir votre méthode de mise à jour des stats -- ## Méthode 1 (useSceneToRefresh = true) ## : Vous utilisez la Scene de Mise à jour des stats qui évite -- le changement d'icône indésirable -- ## Méthode 2 (useSceneToRefresh = false) ## : Pas besoin de créer la scene mais entrainera un court changement -- de l'icône durant le reresh contrairement à la précédente if not refreshEcoDevicesStats() then return end refreshDayStats() checkCptRaz() fibaro:sleep(2000) end saut de ligne Historique des versions : - V0.1 du 11/05/2015 : Eco_Devices_Live_Day_Reporter_V0.1.vfib
  14. Suite à ce message, j'ai complètement remplacé le module par un neuf. En changeant également tous les câbles. Ca fonctionnait très bien... pendant 15 jours. Et voilà que depuis quelques jours, il commence à faire la même chose. Il s'agit d'une pièce dans laquelle les lumières sont gérées par un script basé sur détection de mouvement et je retrouve cette lumière allumée alors que l'autre (un plafonnier sur FGD) est bien éteinte. Si je vais sur la HC2 consulter l'état du relais, il est bien à OFF donc le script a bien fait son boulot. Je suis obligé d'actionner le poussoir 4 fois pour qu'il se débloque. A chaque appuis, je vois bien l'état du relais changer sur la HC2 mais la lumière est toujours allumée. Une fois débloqué, le relais fonctionne bien mais il finit par se bloquer à nouveau. Je ne comprends vraiment pas pourquoi avec 2 modules au même endroit je me retrouve avec ce souci. C'est quand même étrange sachant que je n'ai pas ce souci ailleurs. Je suppose qu'il va finir comme l'autre par se bloquer complètement et ne plus réagir du tout. Il s'agit d'une pièce d'eau mais le module est loin de la douche bien sà»r et en plus bien protégé derrière la cloison. Le blocage se produit souvent le matin au premier réveil du relais. Qu'en pensez-vous ?
  15. Non ce n'est toujours pas possible et c'est bien dommage ! Il y a un autre truc qui me gêne sur les Virtual Device, c'est le fait que l'icône d'un bouton d'applique automatiquement lorsque l'on clique dessus. C'est énervant car avec les bugs de FHttp dans la MainLoop, on est obligé de passer par des boutons pour faire des appels réseau et àchaque "pressButton" l'icône est automatiquement appliquée. Si quelqu'un a trouvé un moyen de contourner cela ça m'intéresse !
  16. De mon côté, tous mes FGD en 2.2 disposent bien de l'option.
  17. Merci jojo. C'est un peu ce que j'ai fait mais je n'ai pas trop ce genre de bricolage. J'aimerais savoir si quelqu'un a trouvé une autre solution. Ce n'est pas normal qu'un appel HTTP finisse par bloquer le code indéfiniement.
  18. Dans le cadre de mon Virtua Device permettant de piloter et suivre l'état du décodeur LiveBox Orange (http://www.domotique-fibaro.fr/index.php/topic/4444-tv-commande-decodeur-livebox-play-et-gestion-détat-temps-réel/page-2) j'ai pu observer un problème de blocage de ma MainLoop sur un appel GET Net.FHttp (voir sujet pour plus de détails). Je voulais donc savoir si il était possible de définir un timeout pour un appel GET Net.FHttp et si non, si il existe une technique pour contourner cela. Peut-être une syntaxe LUA qui permettrait de limiter la durée d'exécution d'une fonction en asynchrone ? J'ai bien une petite idée en passant par un couple bouton + label ou bouton + VG afin de lancer l'appel via le bouton puis d'attendre une mise à jour du label ou de la VG dans la MainLoop mais je voulais savoir si quelqu'un avait déjà pu traiter le cas autrement. Merci d'avance pour votre aide.
  19. De rien et tant mieux si ça fonctionne bien chez toi. En ce qui me concerne, j'ai pour l'instant expérimenté un blocage de la MainLoop qui est restée bloquée sur l'appel GET à la long polling API de la LiveBox. J'ai du éditer et sauvegarder le module pour que ça reparte. Il y a donc peut-être une faille sur la librairie HTTP ou alors un blocage côté LiveBox, je ne sais pas. Il faudrait pour éviter cela que je trouves un moyen de pouvoir limiter la durée d'un appel car Net.FHttp n'a pas à priori de ReadTimeout. Si quelqu'un observe ce même blocage, merci de me le signaler.
  20. Ha oui ok je comprends mieux. Bah moi je n'ai pas ça donc je détecte que la TV est allumée et j'allume aussitôt le décodeur. C'est pareil, sauf que je ne sais pas piloter la LB avec le télécommande de la TV.
  21. Je confirme que la remontée de consommation du FGD est proportionnelle au pourcentage réglé. De lààdire que c'est représentatif de la consommation réelle je ne m'avancerait pas mais bon c'est déjàune indication.
  22. Corrigé avec la 4.042 !
  23. Helo, pas mal comme tuto, effectivement ça montre bien les possibilités. Content que tu utilises mon VD J'ai conçu un peu la même chose chez moi mais je gère différemment avec plusieurs VD qui dans la MainLoop peuvent s'appeler entre eux. Cela me permet d'allumer la TV quand on rentre du travail et par exemple de pouvoir détecter que quelqu'un allume la TV avec la télécommande et donc allumer la LiveBox et l'ampli. Mon ampli a aussi sa propre MainLoop et lui va gérer l'alimentation d'un relais IR de mon meuble TV et aussi l'alimentation du caisson de basses. J'ai aussi un "NightMode" qui après 22h30 si la TV est allumée, baisse automatiquement le son de l'ampli à un volume défini. Après je gère un mode mise en veille nocturne : si la TV est éteinte depuis plus de 15 minutes entre 23h et 03h, je coupe le jus de tout le monde sauf la TV (ça me permet de laisser une porte d'entrée pour tout ralumer) Un autre truc pratique, le passage en veille de la LiveBox éteint la TV et l'ampli, etc... C'est long à peaufiner mais une fois que ça fonction c'est top. Une question : d'après ce que j'ai compris, ta TV allume automatiquement ta LiveBox ? Comment cela fonctionne-t-il car la LiveBox n'a pas de CEC ?
  24. C'est exactement ça. Merci Steven. Je viens d'ajouter un commentaire sur l'issue. Le pire dans ce truc c'est que j'ai fait un essai avec un countScenes et ça ne fonctionne pas car les 2 événements sont levés à quelques ms d'intervalle ce qui ne laisse même pas le temps au système d'incrémenter le compteur de scenes actives. Le seul moyen de contournement que j'ai trouvé, c'est de mettre à jour une VG au début de la scene et de vérifier juste avant si son heure de MAJ est très proche de l'heure courante. Si la différence est de quelques ms, j'ignore le second événement. Apparement, Fibaro ne bouge pas trop sur la résolution du bug.
×
×
  • Créer...