prix conso EDF

Posez ici vos questions d'utilisation, de configuration de DomoticZ, de bugs, de conseils sur le logiciel lui même dans son utilisation et son paramétrage.
Des forums spécifiques sont ouverts ci-dessous pour regrouper les différents sujets.
sphinxou
Messages : 231
Inscription : 03 déc. 2016, 13:37

prix conso EDF

Message par sphinxou »

bonjour

je souhaiterai récupérer la valeur totale du compteur: conso électrique HP et la valeur totale du compteur: compteur électrique HC
la multiplier par les valeur du prix de l'edf et afficher le total dans un compteur
Sans titre.jpg
Sans titre.jpg (127.89 Kio) Consulté 9895 fois
pour la répartition des HP et HC dans leur compteur respectif j'ai le script suivant:

Code : Tout sélectionner

-- script domoticz/scripts/lua/script_device_compteurHC-HP.lua

-- Initialisation des variables locales
local capteurGlobal = uservariables['CapteurGlobal']
local capteurCptHP = uservariables['CapteurCptHP']
local capteurCptHC = uservariables['CapteurCptHC']
local idxCptHP = uservariables['IdxCptHP']
local idxCptHC = uservariables['IdxCptHC']
local flagHC = uservariables['FlagHC']
local flagHP = uservariables['FlagHP']
local lastValueCptElecGlobal = uservariables['LastValueCptElecGlobal']

-- Mode debug Oui / Non
local debug = uservariables['debug']


-- Fonction de mise à jour
function update(device, id, power, energy, index)
    commandArray[index] = {['UpdateDevice'] = id .. "|0|" .. power .. ";" .. energy}
    return
end

commandArray = {} 

-- On prend en compte a chaque changement de valeur du compteur global
if (devicechanged[capteurGlobal]) then
    if (debug == 'OUI') then
        print('-- Calcul Compteurs HC / HP --')
        print('CapteurGlobal = '..capteurGlobal)
        print('CapteurCptHP = '..capteurCptHP)
        print('CapteurCptHC = '..capteurCptHC)
        print('idxCptHP = '..tostring(idxCptHP))
        print('idxCptHC = '..tostring(idxCptHC))
        print('flagHP = '..tostring(flagHP))
        print('flagHC = '..tostring(flagHC))
        print('LastValueCptElecGlobal = '..tostring(lastValueCptElecGlobal))
    end 
    
    -- Recuperation des valeurs du compteur global
    local consoCumule
    local consoInstant
    consoInstant, consoCumule = otherdevices_svalues[capteurGlobal]:match("([^;]+);([^;]+)")
    consoInstant = tonumber(consoInstant)
    consoCumule = tonumber(consoCumule) 
    
    if (debug == 'OUI') then
        print('Conso Instant = '..tostring(consoInstant)..' / Conso Cumule = '..tostring(consoCumule)..' ')
    end

    -- Calcul de l'ecart avec le dernier envoi de donnees
    lastValueCptElecGlobal = tonumber(lastValueCptElecGlobal)
    local consoDelta = consoCumule - lastValueCptElecGlobal

    if (debug == 'OUI') then
        print('Delta conso = '..tostring(consoDelta))
    end

    local consoCumuleCible
    local consoInstantCible 

    if (otherdevices[flagHC] == 'On') then
        -- Periode heures creuse
        -- Recuperation des valeurs du compteur global
        consoInstantCible, consoCumuleCible = otherdevices_svalues[capteurCptHC]:match("([^;]+);([^;]+)")
        -- Seul le cumule du compteur nous interesse pour calculer la nouvelle valeur
        consoCumuleCible = tonumber(consoCumuleCible)

        if (debug == 'OUI') then
            print('Compteur cible = HC')
            print('Valeur precedente = '..tostring(consoCumuleCible))
            print('Valeur ajustee = '..tostring(consoCumuleCible + consoDelta))
        end

        consoCumuleCible = consoCumuleCible + consoDelta
        -- Mise à jour du compteur
        update(capteurCptHC, idxCptHC, consoInstant, consoCumuleCible, 1)

        -- Mise à 0 de la conso intantanee du compteur HP
        consoInstantHP, consoCumuleHP = otherdevices_svalues[capteurCptHP]:match("([^;]+);([^;]+)")
        consoInstantHP = 0
        update(capteurCptHP, idxCptHP, consoInstantHP, consoCumuleHP, 2)
    else     
        -- Periode heures pleines
        -- Recuperation des valeurs du compteur global
        consoInstantCible, consoCumuleCible = otherdevices_svalues[capteurCptHP]:match("([^;]+);([^;]+)")
        -- Seul le cumule du compteur nous interesse pour calculer la nouvelle valeur
        consoCumuleCible = tonumber(consoCumuleCible)

        if (debug == 'OUI') then
            print('Compteur cible = HP')
            print('Valeur precedente = '..tostring(consoCumuleCible))
            print('Valeur ajustee = '..tostring(consoCumuleCible + consoDelta))
        end

        consoCumuleCible = consoCumuleCible + consoDelta
        -- Mise à jour du compteur
        update(capteurCptHP, idxCptHP, consoInstant, consoCumuleCible, 3)

        -- Mise à 0 de la conso intantanee du compteur HC
        consoInstantHC, consoCumuleHC = otherdevices_svalues[capteurCptHC]:match("([^;]+);([^;]+)")
        consoInstantHC = 0
        update(capteurCptHC, idxCptHC, consoInstantHC, consoCumuleHC, 4)
    end

    -- Sauvegarde de la valeur du compteur global pour prochain calcul
    commandArray['Variable:LastValueCptElecGlobal'] = tostring(consoCumule)

    if (debug == 'OUI') then
        print('-- Fin Calcul Compteur HC / HP --')
    end
end

return commandArray 
étant nul en script merci pour votre aide :) :) :)
Domoticz 4.9700/ rfxcom /sonde diy/raspberry pi3+HDD/cirusms/contact de porte diy
sphinxou
Messages : 231
Inscription : 03 déc. 2016, 13:37

Re: prix conso EDF

Message par sphinxou »

bonsoir

personne pour m'aider??

j'essaye par moi même mais pas évident


merci d'avance
Domoticz 4.9700/ rfxcom /sonde diy/raspberry pi3+HDD/cirusms/contact de porte diy
Julien
Messages : 31
Inscription : 26 nov. 2015, 23:54

Re: prix conso EDF

Message par Julien »

bonsoir sphinxou,
Question bête : tu veux afficher le coût de ta conso electrique ?
Sinon il suffit de paramétrer tes tarifs heures pleines / heures creuses directement dans Domoticz .... tu auras le calcul fait automatiquement par l'appli , et avec une petite requete sqlite tu récupéres l'info.
sphinxou
Messages : 231
Inscription : 03 déc. 2016, 13:37

Re: prix conso EDF

Message par sphinxou »

Bonjour
Je voudrais l'afficher dans un widget mesure

Merci
Domoticz 4.9700/ rfxcom /sonde diy/raspberry pi3+HDD/cirusms/contact de porte diy
rapinou
Messages : 119
Inscription : 17 nov. 2016, 01:44

Re: prix conso EDF

Message par rapinou »

Pour ma part, je le fais directement dans mon script chauffage.
Le voici :

Code : Tout sélectionner

--------------------------------
------ Variables à éditer ------
--------------------------------

local zone = 'RDC' -- Nom de la zone de chauffe
local inter = 'Interrupteur général chauffage' -- Nom de l'interrupteur virtuel général des radiateurs de la maison
local absence = 'Absence' -- Nom de l'interrupteur virtuel d'absence
local boost = 'Marche forcée RDC' -- Nom de l'interrupteur virtuel de marche forcée
local planning = 'Planning chauffage RDC' -- Nom du sélecteur virtuel de planning chauffage
local radiateur = 'Fil pilote RDC' -- Nom de l'interrupteur virtuel d'action fil pilote
local puissance = 3500 -- Puissance du chauffage en watt
local conso = 'Consommation chauffage RDC' -- Nom du compteur virtuel de consommation électrique
local conso_id = 20 -- idx du compteur virtuel de consommation électrique
local sonde = 'RDC' -- Nom de la sonde de température
local consigne_conf = 'Thermostat RDC' -- Nom de thermostat virtuel de gestion de la température de confort
local diff_eco = 3 -- Différence de température entre les modes Confort et Eco
local selec_mode = 'Mode chauffage RDC' -- Nom du sélecteur virtuel d'indication de mode de chauffage Off/Confort/Eco
local lvl_off = 00 -- Niveaux du sélecteur virtuel de mode de chauffage
local lvl_conf = 10
local lvl_eco = 20
local tarifhp = 'Tarif HP' -- Nom de la variable utilisateur
local tarifhc = 'Tarif HC' -- Nom de la variable utilisateur
local hp_hc = 'EDF HP / HC' -- Nom du sélecteur Heures pleines/Heures creuses
local lvl_hp = 10 -- Niveaux du sélecteur HP/HC
local lvl_hc = 20
local inc_meter = 'Coût chauffage RDC' -- Nom du compteur virtuel de coût EDF
local inc_meter_id = 23 -- idx du compteur virtuel de coût EDF
local tps_confort = 'Temps Confort RDC' -- Nom de la variable utilisateur
local var_cout = 'Coût chauffage RDC' -- Nom de la variable utilisateur
local var_planning = 'Mode_planning_RDC' -- Nom de la variable utilisateur

--------------------------------
-- Fin des variables à éditer --
--------------------------------

function timedifference(d)
	s = otherdevices_lastupdate[d]
	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()
	t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
	difference = os.difftime (t1, t2)
	return difference
end

-- Date du dernier relevé de température
local lastSeen = string.sub(os.date("!%X", timedifference(sonde)), 1, 5)

commandArray = {}

-- Relevé de température
	local temperature = tonumber(string.sub(otherdevices_svalues[sonde],1,4))

-- Récupération de la valeur du thermostat et du planning
	consigne_conf = tonumber(otherdevices_svalues[consigne_conf])
	consigne_eco = tonumber(consigne_conf - diff_eco)
	planning = tonumber(otherdevices_svalues[planning])

-- Incrémentation de la variable Temps Confort pour les stats
	tps_confort_init = tonumber(uservariables[tps_confort])
	if planning == lvl_conf then
		tps_confort_maj = tps_confort_init + 1
	else
		tps_confort_maj = tps_confort_init
	end
	commandArray['Variable:'..tps_confort] = tostring(tps_confort_maj)

-- Modification du sélecteur de mode
	var_planning = uservariables[var_planning] -- Récupération de la variable mode planning générée par le script planning.sh
	if (otherdevices[inter] == 'Off') then -- Si l'interrupteur général est coupé :
		commandArray[selec_mode]='Set Level: '..lvl_off..'' -- On passe le sélecteur sur Off,
		mode = tonumber(lvl_off) -- Et on enregistre le niveau correspondant pour la suite du script.
	elseif (otherdevices[absence] == 'On') or (lastSeen > '00:10') then -- Si mode absence activé ou sonde muette depuis +10 min :
		commandArray[selec_mode]='Set Level: '..lvl_eco..'' -- On passe le sélecteur sur ECO,
		mode = tonumber(lvl_eco) -- Et on enregistre le niveau correspondant pour la suite du script.
	elseif (otherdevices[boost] == 'On') then -- Si marche forcée activée :
		commandArray[selec_mode]='Set Level: '..lvl_conf..'' -- On passe le sélecteur sur CONFORT,
		mode = tonumber(lvl_conf) -- Et on enregistre le niveau correspondant pour la suite du script.
	else
		commandArray[selec_mode]='Set Level: '..var_planning..'' -- Si aucune de ces conditions n'est remplie, on passe sur la variable mode planning,
		mode = tonumber(var_planning) -- Et on enregistre le niveau correspondant pour la suite du script.
		print('Level mode planning: '..var_planning) -- logs
	end

-- Récupération de la consigne à appliquer
	if mode == lvl_conf then -- Si le mode enregistré correspond au mode CONFORT :
		consigne = consigne_conf -- Consigne confort.
	else -- Sinon :
		consigne = consigne_eco -- Consigne ECO.
	end

-- Comparaison température/consigne et action fil pilote
	if (mode == lvl_off or temperature >= consigne) then
		commandArray[radiateur]='Off'
		-- Envoi de la conso dans le capteur virtuel d'énergie
		npower, energy = string.match(otherdevices_svalues[conso], "(%d+%.*%d*);(%d+%.*%d*)")
		if (otherdevices[radiateur] == 'On') then
			power = tonumber(npower - puissance)
			if (power < 0) then
				power = 0
			end
		else
			power = tonumber(npower)
		end
		energy = tonumber(energy)
	else
		commandArray[radiateur]='On'
		-- Envoi de la conso dans le capteur virtuel d'énergie
		npower, energy = string.match(otherdevices_svalues[conso], "(%d+%.*%d*);(%d+%.*%d*)")
		if (otherdevices[radiateur] == 'On') then
			power = tonumber(npower)
		else
			power = tonumber(npower + puissance)
		end
		energy = tonumber(energy + (puissance / 60))
	end

-- Mise à jour du compteur conso
	commandArray[1]={['UpdateDevice'] = conso_id .. '|0|' .. power .. ';' .. energy}

-- Calcul du coût EDF
	if (otherdevices[radiateur] == 'On') then
		instant_energy = tonumber(puissance / 60) -- Consommation instantanée
	else
		instant_energy = 0
	end
	
	hp_hc = tonumber(otherdevices_svalues[hp_hc]) -- Récupération du planning HP/HC
	tarifhp = tonumber(uservariables[tarifhp]) -- Récupération des tarifs HP/HC
	tarifhc = tonumber(uservariables[tarifhc])

	if hp_hc == lvl_hp then
		instant_cout = instant_energy * tarifhp / 1000
	elseif hp_hc == lvl_hc then
		instant_cout = instant_energy * tarifhc / 1000
	end

	compteur_init = tonumber(otherdevices_svalues[inc_meter]) -- Récupération de la valeur initiale du compteur

	compteur_maj = compteur_init + instant_cout -- On ajoute la conso instantanée au compteur

-- Mise à jour compteur tarif
	commandArray[2]={['UpdateDevice'] = inc_meter_id .. '|0|' .. compteur_maj}

-- Mise à jour variable tarif pour stats quotidiennes
	var_cout_init = tonumber(uservariables[var_cout]) -- Récupération de la valeur initiale de la variable
	var_cout_maj =  var_cout_init + instant_cout -- Ajout du coût instantanée
	commandArray['Variable:'..var_cout] = tostring(var_cout_maj) -- Mise à jour de la variable

-- Logs
	print('Température '..zone..': '..temperature..' °C / Consigne : '..consigne..' °C')
	print('Coût chauffage '..zone..': '..compteur_maj..' €')

return commandArray
C'est le script de vil1driver que j'ai adapté à mon utilisation.
La partie concernant le coût EDF commence à la ligne 125.

Je dois l'améliorer ces prochains jours en changeant le type de compteur car celui-ci ne prend pas en compte les décimales, mais ça donne une base.
Il me semble que patrice avait parlé de custom sensor dans un autre sujet, je vais regarder ça.
Edit : C'est bien ça, le sujet en question : https://easydomoticz.com/forum/viewtopic.php?f=8&t=2919
RPI 3 - Raspbian 8 (Jessie) - Domoticz V3.5877
sphinxou
Messages : 231
Inscription : 03 déc. 2016, 13:37

Re: prix conso EDF

Message par sphinxou »

bonsoir

merci mais comment adapter se code à mon installation??

merci





Code : Tout sélectionner

-- Calcul du coût EDF
   if (otherdevices[radiateur] == 'On') then
      instant_energy = tonumber(puissance / 60) -- Consommation instantanée
   else
      instant_energy = 0
   end
   
   hp_hc = tonumber(otherdevices_svalues[hp_hc]) -- Récupération du planning HP/HC
   tarifhp = tonumber(uservariables[tarifhp]) -- Récupération des tarifs HP/HC
   tarifhc = tonumber(uservariables[tarifhc])

   if hp_hc == lvl_hp then
      instant_cout = instant_energy * tarifhp / 1000
   elseif hp_hc == lvl_hc then
      instant_cout = instant_energy * tarifhc / 1000
   end

   compteur_init = tonumber(otherdevices_svalues[inc_meter]) -- Récupération de la valeur initiale du compteur

   compteur_maj = compteur_init + instant_cout -- On ajoute la conso instantanée au compteur

-- Mise à jour compteur tarif
   commandArray[2]={['UpdateDevice'] = inc_meter_id .. '|0|' .. compteur_maj}
Domoticz 4.9700/ rfxcom /sonde diy/raspberry pi3+HDD/cirusms/contact de porte diy
rapinou
Messages : 119
Inscription : 17 nov. 2016, 01:44

Re: prix conso EDF

Message par rapinou »

Il faut que tu apprennes les langages des scripts :D
Ici lua.

Car sur le forum tu vas pouvoir récupérer pas mal de choses pour débuter, mais ce sera toujours à adapter à ta propre utilisation.

Quelques ressources :

- https://easydomoticz.com/articles-synthese/
- https://www.domoticz.com/wiki/Events
- https://www.domoticz.com/wiki/Event_script_examples
- https://www.domoticz.com/wiki/LUA_commands
RPI 3 - Raspbian 8 (Jessie) - Domoticz V3.5877
sphinxou
Messages : 231
Inscription : 03 déc. 2016, 13:37

Re: prix conso EDF

Message par sphinxou »

bonsoir

j'essaye mais ce n'est pas évident

merci
Domoticz 4.9700/ rfxcom /sonde diy/raspberry pi3+HDD/cirusms/contact de porte diy
Répondre