couillerot Posté(e) le 25 avril 2021 Signaler Posté(e) le 25 avril 2021 (modifié) En complément de la version Eco Devices Light "T", voici la version "C" soit le compteur d'eau (enfin dans mon cas) . Ce QA est inspiré d'un VD existant sur HC2 dont je ne connais pas l'auteur. Pour l'installation, rien de plus simple : - installer le QA - renseigner l'adresse IP dans le tableau des variables ("ip_Ecodevice") et l'id utilisateur pour recevoir le rapport journalier ("id_Mail) - c'est tout... Pour un calcul au plus juste, ce QA prend en compte toutes les taxes annexes (qui seront à modifier selon : cf taxes et abonnement dans la partie du code "Calcul des prix HT") Un rapport journalier est envoyé automatiquement avec la conso du jour et le coût. Un reset auto de la conso est effectué tous les soirs à minuit. function QuickApp:onInit() self:updateProperty("deviceIcon", 1044) self.http = net.HTTPClient({timeout=3000}) self:loop() end function QuickApp:loop() local interval = 60 -- Refresh ipecodevice = self:getVariable("ip_Ecodevice") idmail = self:getVariable("id_Mail") self.http:request("http://"..ipecodevice.."/api/xdevices.json?cmd=10", { success = function(response) if response.status == 200 then response = json.decode(response.data) self:setVariable("eau", tostring(response.INDEX_C1)) --------------------------------------- --------------------------------------- --------- CALCULS DES PRIX HT --------- --------------------------------------- --------------------------------------- ------------------------------------------- -- VARIABLES POUR CALCUL DU COUT (en HT) -- cout_consommation = 0.001603 --++ (consommation eau / fond renouvellement distribution) cout_abonnement = 0.1780 --++ cout_assainissement = 0.00003 --++ cout_modernisation = 0.00015 --++ cout_pollution = 0.000316 --++ (Pollution / Prerservation) cout_collecte = 0.1287 --++ cout_consocollecte = 0.0024 --++ ------------------------------------------- ------------------------------------------- -- TVA local TVA5_5 = 1.055 local TVA10 = 1.10 ---------------------------------------- local function roundToNthDecimal(num, n) local mult = 10^(n or 0) return math.floor(num * mult + 0.5) / mult end -- consommation eau / fond renouvellement distribution TVA 5_5 --++ local function consommation(L) local cout = tonumber(L * cout_consommation * TVA5_5) return cout end -- redevance abonnement Distrib Eau TVA 5_5 --++ local function abonnement(J) local abonnement = tonumber(J * cout_abonnement * TVA5_5) return abonnement end -- taxe assainissement TVA 10 --++ local function assainissement(L) local assainissement = tonumber(L * cout_assainissement * TVA10) return assainissement end -- taxe modernisation TVA 10 --++ local function modernisation(L) local modernisation = tonumber(L * cout_modernisation * TVA10) return modernisation end -- taxes Pollution / Prerservation TVA 5_5 --++ local function pollution(L) local pollution = tonumber(L * cout_pollution * TVA5_5) return pollution end -- Abonnement collecte eau TVA 10 --++ local function collecte(J) local collecte = tonumber(J * cout_collecte * TVA10) return collecte end -- Consommation collecte eau TVA 10 --++ local function consocollecte(L) local consocollecte = tonumber(L * cout_consocollecte * TVA10) return consocollecte end ---------------------------------------------------------- -------- CALCULS DES PRIX JOUR / MOIS / ANNEE ------------ ---------------------------------------------------------- local eau, _ = self:getVariable("eau") eau = tonumber(eau) local eau_jour, _ = self:getVariable("eau_jour") eau_jour = tonumber(eau_jour) local eau_mois, _ = self:getVariable("eau_mois") eau_mois = tonumber(eau_mois) local eau_annee, _ = self:getVariable("eau_annee") eau_annee = tonumber(eau_annee) local total = eau / 1000 -- local prixjour = ( euro * calc_jour) local calc_jour = (tonumber(eau) - tonumber(eau_jour)) self:setVariable("conso_jour", tostring(calc_jour)) -- local prixmois = ( euro * calc_mois) local calc_mois = (tonumber(eau) - tonumber(eau_mois)) --local prixannee = ( euro * calc_annee) local calc_annee = (tonumber(eau) - tonumber(eau_annee)) ---------- local prixjour = roundToNthDecimal( consommation(calc_jour) + assainissement(calc_jour) + modernisation(calc_jour) + pollution(calc_jour) + consocollecte(calc_jour) + collecte(1) + abonnement(1) ,2) jour = string.sub(prixjour, 1, 6) ---------- local prixmois = roundToNthDecimal( consommation(calc_mois) + assainissement(calc_mois) + modernisation(calc_mois) + pollution(calc_mois) + consocollecte(calc_mois) + collecte(30) + abonnement(30) ,2) mois = string.sub(prixmois, 1, 6) ---------- local prixannee = roundToNthDecimal( consommation(calc_annee) + assainissement(calc_annee) + modernisation(calc_annee) + pollution(calc_annee) + consocollecte(calc_annee) + collecte(365) + abonnement(365) ,2) annee = string.sub(prixannee, 1, 6) self:setVariable("prix_du_jour", tostring(prixjour)) self:updateProperty("log", ""..tostring(calc_jour).." L / " ..jour.. " €") self:updateView("labeleau", "text", "Index EAU au " ..(string.format(os.date("%d/%m/%Y"))).. " : " ..total.. " m³") self:updateView("labeleau_jour", "text", "Consommation d'EAU aujourd'hui : " ..calc_jour.. " Litres") self:updateView("labeleau_mois", "text", "Consommation du mois : " ..calc_mois.. " Litres soit " ..mois.. " €") self:updateView("labeleau_annee", "text", "Consommation de l'année : " ..calc_annee.. " Litres soit " ..annee.. " €") self:updateView("labelcout", "text", "Coût de l'EAU aujourd'hui : " ..jour.. " €") else print("Erreur : status=" .. tostring(response.status)) end end, error = function(error) self:debug('error: ' .. json.encode(error)) end }) self:refreshTime() fibaro.setTimeout(tonumber(interval) * 1000 * 2, function() self:loop() end) end ----------------------------------------------------------- function QuickApp:refreshTime() local currentDate = os.date("*t") local Jour = tonumber(os.date("%d", os.time())) local Mois = tonumber(os.date("%m", os.time())) local Annee = tonumber(os.date("%y", os.time())) local Heure = tonumber(os.date("%H", os.time())) local Minute = tonumber(os.date("%M", os.time())) ------------------------------------------------------------- ---------------- ENVOI DU RAPPORT JOURNALIER ---------------- ------------------------------------------------------------- if Heure == tonumber("23") and Minute == tonumber("58") then prixdujour = self:getVariable("prix_du_jour") consodujour = self:getVariable("conso_jour") local message = ("Coût : "..prixdujour.." €\nConsommation : "..consodujour.." litres") fibaro.call(tonumber(idmail), "sendEmail", "Consommation EAU maison du "..os.date("%d/%m/%Y"), message) fibaro.call(20, "sendEmail", "Consommation EAU Maison du "..os.date("%d/%m/%Y"), message) fibaro.sleep(60 * 1000) end -- Envoi index dans variable à minuit tous les jours if Heure == tonumber("00") and Minute == tonumber("00") then local compteur = self:getVariable("eau") self:setVariable("eau_jour", compteur) end -------------------------------------------- -- Envoi index au 1er du mois if Jour == tonumber("01") then local compteur = self:getVariable("eau") self:setVariable("eau_mois", compteur) end -------------------------------------------- -- Envoi index au 1er janvier if Jour == tonumber("01") and Mois == tonumber("01") then local compteur = self:getVariable("eau") self:setVariable("eau_annee", compteur) end fibaro.setTimeout(1000 * 60, function() self:refreshTime() end) end EcoDevice_Borne_C1.fqa Stef Modifié le 22 juin 2021 par couillerot 2
Messages recommandés