Page 9 sur 33

Re: Repartition Consommation HC / HP...

Publié : 23 sept. 2015, 15:16
par Triple0s
Bonjour

Moi je rencontre un petit soucis :-(

En fait pour le compteur total, j'utilise un compteur virtuel.
De ce fait, le script ne détecte pas le changement d'état :(

Quelqu'un aurait une solution, a part d'acheter un vrai compteur :mrgreen:

Re: Repartition Consommation HC / HP...

Publié : 23 sept. 2015, 15:29
par jackslayter
faire pour que le script se lance toute les minutes

Re: Repartition Consommation HC / HP...

Publié : 23 sept. 2015, 15:58
par Triple0s
J'y est bien pensé à transformer en script_TIME et en enlevant du coup la condition de mise à jour du device mais j'obtient une belle erreur qui est incompréhensible pour moi pour le moment :-(

".....2015-09-23 15:57:00.138 Error: EventSystem: /home/pi/domoticz/scripts/lua/script_time_cpthchp.lua:28: attempt to concatenate local 'capteurGlobal' (a nil value)"

autant j'arrive à relire et modifier quelques scripts mais la je n'y arrive pas :cry:

Re: Repartition Consommation HC / HP...

Publié : 24 sept. 2015, 22:30
par Triple0s
jackslayter a écrit :faire pour que le script se lance toute les minutes
Si quelqu'un aune solution :oops: parce quela je ne vois pas :evil:

Re: Repartition Consommation HC / HP...

Publié : 25 sept. 2015, 11:34
par jacques68
Pour moi d'après ton erreur, ton capteur global n'a aucune valeur récupérable par le script!!!
Comment renseignes tu ce capteur global?

Re: Repartition Consommation HC / HP...

Publié : 25 sept. 2015, 11:35
par heartblood
Triple0s a écrit :
jackslayter a écrit :faire pour que le script se lance toute les minutes
Si quelqu'un aune solution :oops: parce quela je ne vois pas :evil:
Au pire, envoie ton script modifié, on verra comment ton capteur global est implémenté.

Re: Repartition Consommation HC / HP...

Publié : 25 sept. 2015, 13:50
par Triple0s
Pour le capteur global il s'agit d'un capteur virtuel electrique (Instant + Compteur)
Si je change le type, c'est mon script de chauffage qui plante.

Je me sert du script de ce topic

Code : Tout sélectionner

-- script domoticz/scripts/lua/script_device_compteurHCHP.lua

-- Initialisation des variables locales
local capteurGlobal = uservariables['Conso Totale']
local capteurCptHP = uservariables['Conso HPleines']
local capteurCptHC = uservariables['Conso HCreuses']
local idxCptHP = uservariables['112']
local idxCptHC = uservariables['111']
local flagHC = uservariables['HC_HP']
-- local flagHP = uservariables['FlagHP']


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

-- 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
    
        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))
        
    
   
-- extraction de la puissance consommé en watt
-- Attention remplacer dans la ligne ci-dessous 'Compteur EDF' par le nom de votre capteur principal, ne pas mettre l'uservariable 'CapteurGlobal' ca ne marche pas
-- extraction de la valeur en watt , (P1 smart meter, ex: "Data" : "17564059;9855288;0;0;517;0")
a, b, x, y, watt, z = string.match(otherdevices_svalues[capteurGlobal], "(%d+%.*%d*);(%d+%.*%d*);(%d+%.*%d*);(%d+%.*%d*);(%d+%.*%d*);(%d+%.*%d*)")
usage = tonumber(watt)



    -- Recuperation des valeurs du compteur principal 
    local heurescreuses
    local heurespleines
    heurespleines, heurescreuses = otherdevices_svalues[capteurGlobal]:match("([^;]+);([^;]+)")
    heurespleines = tonumber(heurespleines)
    heurescreuses = tonumber(heurescreuses)
    watt = tonumber(watt)
   
    
        print('Heures pleines = '..tostring(heurespleines)..' / Heures Creuses = '..tostring(heurescreuses)..' / Watt = '..tostring(usage)..' ')
   

    local consoCumuleCible
    local consoInstantCible

    if (otherdevices[flagHP] == 'Off') then

        -- Periode heures creuse
        -- Recupération des valeurs actuelles du compteur Heures Creuses
        consoInstantCible, consoCumuleCible = otherdevices_svalues[capteurCptHC]:match("([^;]+);([^;]+)")
        -- Seul le cumule du compteur nous interesse pour calculer la nouvelle valeur
        consoCumuleCible = tonumber(consoCumuleCible)


        
            print('Compteur cible = HC')
            print('Valeur precedente = '..tostring(consoCumuleCible))
        

        -- Calcul de la conso journalière HC
        consoCumuleCible = consoCumuleCible + heurescreuses
        -- Mise à jour du compteur
        update(capteurCptHC, idxCptHC, usage , heurescreuses, 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  




   if (otherdevices[flagHP] == 'On') then

        -- Periode heures pleines
        -- Récuperation des valeurs du compteur Heures Pleines
        consoInstancible, consoCumuleCible = otherdevices_svalues[capteurCptHP]:match("([^;]+);([^;]+)")
        -- Seul le cumule du compteur nous interesse pour calculer la nouvelle valeur
        consoCumuleCible = tonumber(consoCumuleCible)

        
            print('Compteur cible = HP')
            print('Valeur precedente = '..tostring(consoCumuleCible))
       

        -- calcul de la conso journaliere HP
        consoCumuleCible = consoCumuleCible + heurespleines
        -- Mise à jour du compteur
        update(capteurCptHP, idxCptHP, usage , heurespleines, 3)

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


    
        print('-- Fin Calcul Compteur HC / HP --')
    
end
end

return commandArray

le capteur "conso totale" est renseigné par ce script de chauffage

Code : Tout sélectionner

-- Ce script permet de maintenir la température
 
--------------------------------
------ Variables à éditer ------
--------------------------------
nom = 'chambre d amis'  --Affichage dans le log
local consigne_conf = tonumber(otherdevices_svalues['Therm_Chambres'])  -- Température de consigne confort
local consigne_eco = tonumber(otherdevices_svalues['Therm_Eco'])  -- Température de consigne économique

local sonde = 'Temp Amis' -- Nom de la sonde de température
local mode = 'Chauffage_mode_confort' -- Nom de l'interrupteur virtuel de sélection de mode Off=eco On=confort
local presence = 'Presence' -- Nom de l'interrupteur virtuel de thermostat (Off=abscence prolongée)

local radiateur = 'Radiateur Amis' -- Nom de l'interrupteur de chauffage
local puissance = 1000   -- puissance du chauffage en watt
local conso = 'Conso_Amis'   -- nom du capteur virtuel de consommation électrique
local conso_id = 102  -- idx du capteur virtuel de consommation électrique

local conso_total = 'Conso Totale'   -- nom du capteur virtuel de consommation électrique totale
local conso_total_id = 117   -- idx du capteur virtuel de consommation électrique totale
--------------------------------
-- Fin des variables à éditer --
--------------------------------
 
commandArray = {}
   
    local temperature = tonumber(string.sub(otherdevices_svalues[sonde],1,4)) -- Température relevée

   
-- si présence détectée et chauffage sur normal
if ((otherdevices[presence] == 'On') and (otherdevices[mode] == 'On')) then
	consigne = consigne_conf
else 
	consigne = consigne_eco
end

  
   if (temperature < consigne) then
   
      commandArray[radiateur]='On'
      print('Chauffage ' .. nom .. ' -. ON .-')
      
                  
      -- envoie de la conso dans le capteur virtuel d'énergie
      npower, energy = string.match(otherdevices_svalues[conso], "(%d+%.*%d*);(%d+%.*%d*)")
      energy = tonumber(energy) + (puissance / 60)    
      
	  -- conso dans le capteur virtuel d'énergie total
      npower2, energy2 = string.match(otherdevices_svalues[conso_total], "(%d+%.*%d*);(%d+%.*%d*)")
      energy2 = tonumber(energy2) + (puissance / 60)    
       
     
     -- envoi
     commandArray[1]={['UpdateDevice'] = conso_id .. '|0|' .. puissance .. ';' .. energy }
      commandArray[2]={['UpdateDevice'] = conso_total_id .. '|0|' .. puissance .. ';' .. energy2 } 
   else
      
      commandArray[radiateur]='Off'
      print('Chauffage ' .. nom .. ' -. OFF .-')
      
         
      -- envoie de la conso dans le capteur virtuel d'énergie
      npower, energy = string.match(otherdevices_svalues[conso], "(%d+%.*%d*);(%d+%.*%d*)")
      energy = tonumber(energy)
      
	   -- envoie de la conso dans le capteur virtuel d'énergie total
      npower2, energy2 = string.match(otherdevices_svalues[conso_total], "(%d+%.*%d*);(%d+%.*%d*)")
      energy2 = tonumber(energy2)   
           
     -- envoi
     commandArray[1]={['UpdateDevice'] = conso_id .. '|0|' .. 0 .. ';' .. energy }
      commandArray[2]={['UpdateDevice'] = conso_total_id .. '|0|' .. 0 .. ';' .. energy2 } 
     
   end

   print('il fait '..temperature..'C pour une consigne de '..consigne..'C souhaite dans la ' .. nom .. '')
      
return commandArray

Re: Repartition Consommation HC / HP...

Publié : 25 sept. 2015, 14:31
par heartblood
"Conso Totale" est un module virtuel, dans le script, il ressort comme une variable. Je me trompe peut être mais le problème doit venir de là.

Re: Repartition Consommation HC / HP...

Publié : 25 sept. 2015, 14:37
par heartblood
Tu as bien fait les déclarations des variables en page 2 ?

Re: Repartition Consommation HC / HP...

Publié : 25 sept. 2015, 15:07
par Triple0s
Ok je crois bien que cela vient de la alors

Car mes consos sont des capteurs virtuel normalement

donc en virant uservariables[] et en laissant juste le nom du capteur, si ma logique est bonne, cela devrais fonctionner non ?


Que c'est dure de débuter :-)

Heureusement que vous êtes la pour aider :-)