Aller au contenu

BenjyNet

Membres confirmés
  • Compteur de contenus

    5 384
  • Inscription

  • Dernière visite

  • Jours gagnés

    80

Tout ce qui a été posté par BenjyNet

  1. -------------------------------------------------------- -- Eco-Devices Live & Day Reporter v0.2 -- -------------------------------------------------------- -- Auteur : Brice Cassagnabère -- -------------------------------------------------------- -- Changelog : -- -- -- -- v0.1 : Version initiale -- -- v0.2 : Gestion des etiquettes vides -- -------------------------------------------------------- -- 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 = 1043 -- Renseignez ici les id Utilistaurs à qui transmettre le rapport userIdsToNotify = {2} -- Si vous utilisez la scène associée pour la MAJ, passer cette variable à true useSceneToRefresh = true -- Heure à laquelle vous souhaitez générer le rapport journalier reportTime = "23:59" -- Tarifs des kWh 2020 HT hcCost = 0.0696 hpCost = 0.1022 -- ID fake device power PAPP FakedeviceId = 375 deviceId = fibaro:getSelfId() --- Usefull Functions --- function setFakeDevice(idDevice, Value) local HC2 = Net.FHttp("127.0.0.1", 11111) local response, status, errorCode = HC2:PUT("/api/devices/"..idDevice, '{"properties":{"power":' .. Value .. '}}') HC2 = nil end 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"] -- Ajout du if pour les index vides if (hcIndex ~= nil or hpIndex ~= nil) then 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") setFakeDevice(FakedeviceId, conso) -- 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) else debug("index HP/HC vides - pas de MAJ", "red") end return true end function refreshDayStats() if (hcIndex ~= nil or hpIndex ~= nil) then day_HC_Conso = hcIndex - day_HC_Index day_HP_Conso = hpIndex - day_HP_Index else debug("Pas de calcul des stats", "orange") end 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
  2. Tiens voilà la partie modifiée, je te laisse faire la comparaison avec ton code, parce que je sais plus bien ce que j'ai fait ! -- Ajout du if pour les index vides if (hcIndex ~= nil or hpIndex ~= nil) then 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") setFakeDevice(FakedeviceId, conso) -- 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) else debug("index HP/HC vides - pas de MAJ", "red") end Et là aussi il me semble : function refreshDayStats() if (hcIndex ~= nil or hpIndex ~= nil) then day_HC_Conso = hcIndex - day_HC_Index day_HP_Conso = hpIndex - day_HP_Index else debug("Pas de calcul des stats", "orange") end 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
  3. Je te dirai demain, j'ai pas le code sous la main.
  4. Oui 3s ça marche. Moi aussi ça plantait quand l'ecodevice remontait une chaine vide. J'ai donc un peu adapté le code pour éviter celà.
  5. Ah merde désolé, j'avais pas vu !
  6. Hey Stef, je t'avais parlé un jour d'un dessin pour un chauffe eau allumé/éteint tu pourrais me faire un petit truc ? Moi j'ai fait ça mais peut être qu'on peut faire mieux.
  7. Putain c'est nickel tes présentations de code comme ça @Krikroff ! Ça donne envie d'acheter, tu fais iech
  8. Y'a pas à chier, graphiste c'est un métier
  9. Dans le même genre, le coup des visières : https://retrolabs.com/3d-prints/3d-printed-face-shield-with-10-mil-pvc et https://www.youmagine.com/designs/protective-visor-by-3dverkstan
  10. Dis moi , tu te fais payer les matières premières ?
  11. On doit être plusieurs, rien qu'ici, à pouvoir fabriquer je pense.
  12. T'as vu que dans le nouveau slic3r ils ont amélioré la tour de changement de couleur pour moins en perdre justement :
  13. T'as des contraintes géométriques là, fais attention à bien les respecter.
  14. Elle est orienté dans ce sens ? Je l'aurai peut être pas fait comme ça en voyant la pièce de loin.
  15. Regarde si sur prusa t'as pas le fichier .m3f avec tous les paramètres.
  16. Ouais parce que moi ça me gênait grave quand il fallait faire des pièces qui s'assemblent assez précisément. D'office c'est très bien ! Comme quoi prusa ça déchire !
  17. 2 trucs sympa dans le nouveau slic3r : https://help.prusa3d.com/fr/article/elephant-foot-compensation_114487 et https://help.prusa3d.com/en/article/variable-layer-height-function_1750
  18. Oui mais qui dit prix officiel moins cher, dit prix d'achat moins cher.... donc prix artisan moins cher ! Faudra que je regarde à combien il est tombé en prix de gros tiens.
  19. Putain en regardant l'image, je me disais..... "Mais comment il fait tenir ses bobines ???" ...Et ça a bien mis 5min avant de me dire "Merde la photo est tournée !!" ...Quel con je suis....
  20. Moi j'achète les sachets de silicate sur Amazon en gros lot.
  21. Moi les bobines elles sont toutes sous vide d'air avec sachet deshydratant quand je les utilise pas.
  22. Oui Solidworks faut une licence. Moi je l'utilise parce que je l'enseigne Pour la marque de filament, j'ai exclusivement du Prusament. J'ai jamais rien testé d'autre.
  23. Moi c'est du PETG souvent aussi, et j'imprime des pièces que je dessine sous Solidworks. Surtout des gabarits d'usinage, ou des pièces mécaniques utiles...quasi pas de déco.
×
×
  • Créer...