Bonjour,

Je me suis inspiré du script précédent (merci pour la contribution !) et je l'ai adapté ainsi :

Utilisation directement depuis Domoticz (pas besoin de tâche cron) : Setup > More Options > Events > LUA au lieu de Blockly > Time Mise à jour en utilisant les fonctions lua de Domoticz sans passer par json (ça évite de gérer les utilisateurs) N'ayant pas la valeur de PAPP remontée, je fais un calcul de puissance basé sur la comparaison entre deux valeurs d'index total. J'utilise trois objets "dummy" : Text sensor, Electricity (instant and counter) nommé "Compteur_EDF", Ampere (1 phase)

Il y a un exemple intéressant ici que j'ai troué un peu (trop) vers la fin : https://www.domoticz.com/wiki/Capturing_Energy_Usage_with_Lua_Scripts

Voilà, je vous livre le script ci-dessous si ça peut aider quelqu'un. A noter que c'est pour un compteur tempo. A adapter selon votre configuration et vos besoins.

---- Script pour récupérer les informations sur un Wifinfo. A mettre dans Domoticz dans "Events" en tant que script LUA / Time ---------------------------------------------------------------------------------------------------------- -- Paramètres ---------------------------------------------------------------------------------------------------------- debug = "yes" -- Turn debugging on ("yes") or off ("no") frequence = 2 -- toutes les x minutes -- adresse du fichier JSON de Wifinfo local wifinfoURL = "http://192.168.1.210:80/json" -- index des dispositifs (colonne IDX de domoticz) -- Text sensor device1 = "Tarif_EDF" local colorIdx = otherdevices_idx[device1] -- Electricity (instant and counter) device2 = "Compteur_EDF" local compteurIdx = otherdevices_idx[device2] -- Ampere (1 phase) device3 = "Intensité_EDF" local intensiteIdx = otherdevices_idx[device3] if debug=="yes" then print(device1 .. " : idx " .. colorIdx) print(device2 .. " : idx " .. compteurIdx) print(device3 .. " : idx " .. intensiteIdx) end -- Domoticz (mise à jour de Domoticz par json, non utilisé) --local domoURL = "http://127.0.0.1:8080/json.htm?" --local urlParams = "type=command&param=udevice&idx=" ---------------------------------------------------------------------------------------------------------- -- Fonctions ---------------------------------------------------------------------------------------------------------- -- arrondi function round2(num, numDecimalPlaces) return tonumber(string.format("%." .. (numDecimalPlaces or 0) .. "f", num)) end -- écart de temps function timedifference (s) year = string.sub(s, 1, 4) month = string.sub(s, 6, 7) day = string.sub(s, 9, 10) hour = string.sub(s, 12, 13) minutes = string.sub(s, 15, 16) seconds = string.sub(s, 18, 19) t1 = os.time() print("t1 = " .. t1) t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds} print("t2 = " .. t2) difference = os.difftime (t1, t2) return difference end ---------------------------------------------------------------------------------------------------------- -- CommandArray ---------------------------------------------------------------------------------------------------------- commandArray = {} if ( ( os.time() / 60 ) % frequence ) == 0 then -- inclure les bibliothèques Lua json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- For Linux -- json = (loadfile "D:\\Domoticz\\scripts\\lua\\json.lua")() -- For Windows -- récupération des données json local config=assert(io.popen('/usr/bin/curl -s ' .. wifinfoURL)) local blocjson = config:read('*all') config:close() if debug=="yes" then print ("Fichier JSON : " .. blocjson) end -- décodage des données local jsonValeur = json:decode(blocjson) -- affectation dans des variables local papp = jsonValeur.PAPP local iinst = jsonValeur.IINST local coulJ = jsonValeur.PTEC local coulD = jsonValeur.DEMAIN local BBRHCJB = jsonValeur.BBRHCJB local BBRHPJB = jsonValeur.BBRHPJB local BBRHCJW = jsonValeur.BBRHCJW local BBRHPJW = jsonValeur.BBRHPJW local BBRHCJR = jsonValeur.BBRHCJR local BBRHPJR = jsonValeur.BBRHPJR local CPlein = BBRHPJB + BBRHPJW + BBRHPJR local CCreux = BBRHCJB + BBRHCJW + BBRHCJR local CTotal = CPlein + CCreux -- un peu de modification de texte pour faciliter la lecture coulJ = string.gsub(coulJ, "HPJB", "BLEU HP"); coulJ = string.gsub(coulJ, "HCJB", "BLEU HC"); coulJ = string.gsub(coulJ, "HPJW", "BLANC HP"); coulJ = string.gsub(coulJ, "HCJW", "BLANC HC"); coulJ = string.gsub(coulJ, "HPJR", "! ROUGE ! HP"); coulJ = string.gsub(coulJ, "HCJR", "! ROUGE ! HC"); -- obsolète - utilisation de deux variables utilisateur pour calculer les écarts et compenser l'absence de variable papp de certains compteurs --local CTotal_old = uservariables["Index_temp"] -- on récupère l'index stocké dans la variable utilisateur Index_temp --local time_old = uservariables["Time_temp"] -- on récupère l'heure stockée dans la variable utilisateur Time_temp --local time_now = os.time() --local ecart_index = CTotal - CTotal_old --local ecart_sec = time_now - time_old --commandArray['Variable:Index_temp']= tostring(CTotal) -- on met à jour la variable utilisateur avec le nouvel index --commandArray['Variable:Time_temp']= tostring(time_now) -- on met à jour la variable utilisateur avec la nouvelle heure -- on calcule l'écart de temps et d'index pour compenser l'absence de variable papp de certains compteurs puissance_old, CTotal_old = string.match(otherdevices_svalues[device2], "(%d+%.*%d*);(%d+%.*%d*)") -- on récupère les valeurs stockées - inspiré de https://www.domoticz.com/wiki/Capturing_Energy_Usage_with_Lua_Scripts puissance_old = tonumber(puissance_old) CTotal_old = tonumber(CTotal_old) local ecart_sec = timedifference(otherdevices_lastupdate[device2]) local ecart_index = CTotal - CTotal_old -- si PAPP n'est pas disponible, on calcule avec les écarts if (papp == nil) then -- obsolète - puissance = iinst * 230 -- pas bien précis puissance = ecart_index / ecart_sec * 3600 else puissance = papp * 0.9 -- en prenant un facteur de puissance à 0.9 end puissance = round2(puissance,0) if debug=="yes" then print("Index total (nouveau): " .. CTotal .. " Wh") print("Index total (ancien): " .. CTotal_old .. " Wh") print("Ecart index : " .. ecart_index .. " Wh") print("Ecart de temps : " .. ecart_sec .. " s") print ("Puissance : " .. puissance .. " W") end -- construction des paramètres -- voir https://www.domoticz.com/wiki/Domoticz_API/JSON_URL%27s pour la syntaxe de nvalue|svalue local param1 = colorIdx ..'|0|' .. coulJ .. ' / Demain : ' .. coulD local param2 = compteurIdx ..'|0|' .. puissance .. ';' .. CTotal local param3 = intensiteIdx ..'|0|' .. iinst -- construction des url (mise à jour de Domoticz par json, non utilisé) --url1 = domoURL .. urlParams .. teleinfoIdx .. '&nvalue=0&svalue=' .. CPlein .. ';' .. CCreux .. ';0;0;' .. papp .. ';0;' --url2 = domoURL .. urlParams .. colorIdx .. '&nvalue=0&svalue=' .. coulJ .. '%20%2F%20Demain%20' .. coulD if debug=="yes" then print("Paramètre 1 : " .. param1) print("Paramètre 2 : " .. param2) print("Paramètre 3 : " .. param3) end -- mise à jour des objets -- commandArray['UpdateDevice']='idx|nValue|sValue' -- for updating Dummy devices e.g. '96|0|Hello World' -- http://www.domoticz.com/wiki/LUA_commands table.insert (commandArray, { ['UpdateDevice'] = param1 } ) table.insert (commandArray, { ['UpdateDevice'] = param2 } ) table.insert (commandArray, { ['UpdateDevice'] = param3 } ) -- appel successif des url (mise à jour de Domoticz par json, non utilisé) --local doIt=assert(io.popen('/usr/bin/curl -s "' .. url1 .. '"')) --doIt:read('*all') --doIt:close() --doIt=assert(io.popen('/usr/bin/curl -s "' .. url2 .. '"')) --doIt:read('*all') --doIt:close() end return commandArray

Sébastien