Page 18 sur 33

Re: Repartition Consommation HC / HP...

Publié : 31 oct. 2016, 18:00
par stephdes
Ah oui, effectivement j'étais à côté de la plaque... Merci Thier

Donc, j'ai enlevé les "--" sur chaque ligne. Ligne par ligne à chaque fois j'ai attendu que le script s’exécute.

C'est arrivé une fois où le script s'est lancé sans erreur donc en vert mais rien n'a changé : les compteurs restent à 0 et en rouge.

Au mieux j'ai une erreur :

Error: EventSystem: in C:\Program Files (x86)\Domoticz\scripts\lua\script_device_compteurHC-HP.lua: ...86)\Domoticz\scripts\lua\script_device_compteurHC-HP.lua:28: attempt to concatenate local 'id' (a nil value)

Je vais continuer de tenter

Re: Repartition Consommation HC / HP...

Publié : 31 oct. 2016, 18:04
par stephdes
En fait en faisant :

Code : Tout sélectionner

-- update(HistoHCHP, idxCptHisto,  0, 0, 1)
-- update(capteurCptHP, 726,  0, 0, 5)
-- update(capteurCptHC, idxCptHC,  0, 0, 5)
-- update(euro, idxEuro, 0, 0, 1)
update(euro, 728, 0,0, 5)
EDIT : et en faisant ça aussi :

Code : Tout sélectionner

-- update(HistoHCHP, idxCptHisto,  0, 0, 1)
-- update(capteurCptHP, 726,  0, 0, 5)
update(capteurCptHC, idxCptHC,  0, 0, 5)
-- update(euro, idxEuro, 0, 0, 1)
-- update(euro, 728, 0,0, 5)
Le script se lance bien :

EventSystem: Script event triggered: C:\Program Files (x86)\Domoticz\scripts\lua\script_device_compteurHC-HP.lua

Mais mes compteurs ne bougent pas

Sinon c'est :

Code : Tout sélectionner

Error: EventSystem: in C:\Program Files (x86)\Domoticz\scripts\lua\script_device_compteurHC-HP.lua: ...86)\Domoticz\scripts\lua\script_device_compteurHC-HP.lua:28: attempt to concatenate local 'id' (a nil value)

Re: Repartition Consommation HC / HP...

Publié : 31 oct. 2016, 18:45
par thier
Ton erreur lua:28: attempt to concatenate local 'id' (a nil value) veut dire qu'à la ligne 28 tu appels l'id d'un device mais que cette valeur est nulle. Vérifie la ligne 28 et attention aux fautes de frappe!!!

Re: Repartition Consommation HC / HP...

Publié : 31 oct. 2016, 22:21
par jfpiat
Bonsoir,

Effectivement, les lignes sont a "décommenter" une à une.

Pour ce qui est des valeurs, elles doivent "rapidement" évoluer.
Sauf pour la comptabilisation des €. 0.15 centimes chaque kwh, ne permet pas d'avoir une augmentation visible rapidement.
Par ailleurs, le type compteur n'affichant que des valeurs entières, il faut attendre les Tops d'un euro pour comptabiliser.

Bref, j'sais pas si je suis très clair. Si c'est le cas, dites le moi, je ferai des copies d'écran.

jfp

Re: Repartition Consommation HC / HP...

Publié : 01 nov. 2016, 11:06
par manu512
Bonjour a tous,

Merci de votre aide c'est super :)

Je me suis permis de reprendre le code de jfpiat et de la mettre a ma sauce car je suis avec un mode Teleinfo USB.

De plus, j'ai rajouter un compteur P1 Smart Intelligent pour avoir les graphiques T1 et T2.

Si vous voulez juste avoir le script de jfpiat de fonctionnel avec un module opto
changer la ligne :

Code : Tout sélectionner

Conso_Instant, Conso_Cumul = otherdevices_svalues[capteurGlobal]:match("([^;]+);([^;]+)")
en

Code : Tout sélectionner

Conso_Cumul, Conso_Instant = otherdevices_svalues[capteurGlobal]:match("([^;]+);0;0;0;([^;]+)")

Code : Tout sélectionner

-- script domoticz/scripts/lua/script_device_compteurHC-HP.lua
local script_label = "EDF"

-- Initialisation des variables locales
local capteurGlobal = "Compteur ES"
local capteurCptHP = "Compteur Electrique HP"
local capteurCptHC = "Compteur Electrique HC"
local HistoHCHP = "Compteur_Histo"
local euro = "EURO_EDF"

-- Mes ajouts pour les compteurs 
local es = "ES"

local idxEs = otherdevices_idx[es]



local idxCptHP = otherdevices_idx[capteurCptHP]
local idxCptHC = otherdevices_idx[capteurCptHC]
local idxCptHisto = otherdevices_idx[HistoHCHP]
local idxEuro = otherdevices_idx[euro]
local flagHC = "EDF Heures Creuses"

local euro_HC = uservariables['Cout_KW_HC']
local euro_HP = uservariables['Cout_KW_HP']

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

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

commandArray = {} 

if otherdevices["Standbye_Signal"] == "On" then 
    print (script_label .. " : Standbye_Signal configuré, aucun pilotage")
    return commandArray    
end

print(script_label .. ' Start')
print(script_label .. ' Debug : ' .. debug)   
print(script_label .. ' capteurGlobal : ' .. capteurGlobal)

Conso_Cumul, Conso_Instant = otherdevices_svalues[capteurGlobal]:match("([^;]+);0;0;0;([^;]+)")

Conso_Instant = tonumber (Conso_Instant)
    print (script_label .. ' Conso Instant = ' .. Conso_Instant .. "/Watts")
    print (script_label .. ' Conso Cumul = ' .. Conso_Cumul .. "/Watts")
    print (script_label .. ' Conso Cumul/1000 = ' .. Conso_Cumul/1000 .. "/kWh")

-- update(HistoHCHP, idxCptHisto,  0, 0, 1)
-- update(capteurCptHP, 726,  0, 0, 5)
-- update(capteurCptHC, idxCptHC,  0, 0, 5)
-- update(euro, idxEuro, 0, 0, 1)
-- update(euro, 728, 0,0, 5)

if (devicechanged[capteurGlobal]) then
    print (script_label .. ' Il y a eu augmentation de la consommation')
    -- Mise à jour du compteur
    Histo_Instant, Histo_Cumul = otherdevices_svalues[HistoHCHP]:match("([^;]+);([^;]+)")
    print (script_label .. ' Conso Histo Instant = ' .. Histo_Instant .. "/kWh")
    print (script_label .. ' Conso Histo Cumul = ' .. Histo_Cumul .. "/kWh")
    print (script_label .. ' Conso Histo Cumul/1000 = ' .. Histo_Cumul/1000 .. "/kWh")
    

    -- commandArray[capteurCptHP]= tostring(Delta_Conso)
    print (script_label .. ' flagHC = ' .. otherdevices[flagHC])
    
    if (otherdevices[flagHC]=='On') then
        print (script_label .. ' On est en heures creuses')
        Delta_Conso = (Conso_Cumul-Histo_Cumul)
        print (script_label .. ' Delta Conso = ' .. Delta_Conso .. "/Wh")
        print (script_label .. ' Delta Conso = ' .. Delta_Conso/1000 .. "/kWh")
        print (script_label .. ' La conso du kWh HC est de : ' .. euro_HC)
        -- Seul le cumule du compteur nous interesse pour calculer la nouvelle valeur
        conso_Cumul = tonumber(conso_Cumul)
        euro_HCHP = euro_HC
        print(script_label .. ' Compteur cible = HC')
        print(script_label .. ' Valeur capteurCptHC = '..tostring(capteurCptHC))
        print(script_label .. ' Valeur idxCptHC = '..tostring(idxCptHC))
        print(script_label .. ' Valeur consoInstant = '..tostring(Conso_Instant))

        -- Mise à jour du compteur
        consoInstantHC, consoCumuleHC = otherdevices_svalues[capteurCptHC]:match("([^;]+);([^;]+)")
        print(script_label .. ' Valeur consoInstantHC = '..tostring(capteurCptHC))
        print(script_label .. ' Valeur consoCumuleHC = '..tostring(capteurCptHC))
        update(capteurCptHC, idxCptHC, tonumber(Conso_Instant), consoCumuleHC+Delta_Conso, 1)
        
        -- Mise à 0 de la conso intantanee du compteur HP
        consoInstantHP, consoCumuleHP = otherdevices_svalues[capteurCptHP]:match("([^;]+);([^;]+)")
        consoInstantHP = 0
        update(capteurCptHP, idxCptHP, consoInstantHP, consoCumuleHP, 2)

        -- Sauvegarde de la valeur du compteur global pour prochain calcul
        update(HistoHCHP, idxCptHisto,  Conso_Instant, Conso_Cumul, 3)    
        euro_HCHP = euro_HC
    else
        -- Periode heures pleines
        -- Recuperation des valeurs du compteur global
        print (script_label .. ' On est en heures pleines')
        Delta_Conso = (Conso_Cumul-Histo_Cumul)
        print (script_label .. ' Delta Conso = ' .. Delta_Conso .. "/Wh")
        print (script_label .. ' Delta Conso = ' .. Delta_Conso/1000 .. "/kWh")
        print (script_label .. ' La conso du kWh HP est de : ' .. euro_HP)
        -- Seul le cumule du compteur nous interesse pour calculer la nouvelle valeur
        conso_Cumul = tonumber(conso_Cumul)
        euro_HCHP = euro_HP
        print(script_label .. ' Compteur cible = HP')
        print(script_label .. ' Valeur capteurCptHP = '..tostring(capteurCptHP))
        print(script_label .. ' Valeur idxCptHP = '..tostring(idxCptHP))
        print(script_label .. ' Valeur consoInstant = '..tostring(Conso_Instant))

        -- Mise à jour du compteur
        consoInstantHP, consoCumuleHP = otherdevices_svalues[capteurCptHP]:match("([^;]+);([^;]+)")
        update(capteurCptHP, idxCptHP, tonumber(Conso_Instant), consoCumuleHP+Delta_Conso, 1)
        
        -- Mise à 0 de la conso intantanee du compteur HC
        consoInstantHC, consoCumuleHC = otherdevices_svalues[capteurCptHC]:match("([^;]+);([^;]+)")
        consoInstantHC = 0
        update(capteurCptHC, idxCptHC, consoInstantHC, consoCumuleHC, 2)

        -- Sauvegarde de la valeur du compteur global pour prochain calcul
        update(HistoHCHP, idxCptHisto, Conso_Instant, Conso_Cumul, 3)
        euro_HCHP = euro_HP
    end
    print(script_label .. ' Calcul Tarifaire')
    print(script_label .. ' Calcul Tarifaire => Delta_Conso /Wh: ' .. Delta_Conso)
    print(script_label .. ' Calcul Tarifaire => Delta_Conso /kWh: ' .. Delta_Conso/1000)
    print(script_label .. ' Calcul Tarifaire => Tarif kWh : ' .. euro_HCHP)
    print(script_label .. ' Calcul Tarifaire => Cout : ' .. Delta_Conso/1000*euro_HCHP)

    Cout_Instant, Cout_Cumul = otherdevices_svalues[euro]:match("([^;]+);([^;]+)")
    print(script_label .. ' Calcul Tarifaire => Cout_Cumul actuel : ' .. Cout_Cumul)    
    print(script_label .. ' Calcul Tarifaire => Cout_Cumul+Delta_Conso*euro_HCHP : ' .. Cout_Cumul+Delta_Conso/1000*euro_HCHP)    
    update(euro, idxEuro,  Cout_Cumul+ Delta_Conso/1000*euro_HCHP, Cout_Cumul+ Delta_Conso/1000*euro_HCHP, 4)
    
-- ajout pour compteur    
    commandArray[idxEs] = { ['UpdateDevice'] = idxEs ..'|0|'.. consoCumuleHP ..';'.. consoCumuleHC ..';0;0;'.. Conso_Instant ..';0' }
else
    print (script_label .. " Il n'y a PAS eu augmentation de la consommation")
end


return commandArray 

Merci a tous :)

P.S : Pour eviter de longues recherches si vous avez un retour :
attempt to index global 'devicechanged' (a nil value)
Dans les logs d'erreurs et que vous utilisez l'editeur integré a Domoticz, pensez a mettre device a la place de all en haut a droite dans la liste deroulante... :)

J'ai cherché super longtemps :oops:

Re: Repartition Consommation HC / HP...

Publié : 01 nov. 2016, 12:50
par stephdes
Je continue de chercher mais... Franchement je sèche :

Code : Tout sélectionner

 2016-11-01 12:46:54.069 LUA: EDF Start
2016-11-01 12:46:54.077 LUA: EDF Debug : 1
2016-11-01 12:46:54.077 LUA: EDF capteurGlobal : Compteur EDF
2016-11-01 12:46:54.077 LUA: EDF Conso Instant = 804/Watts
2016-11-01 12:46:54.077 LUA: EDF Conso Cumul = 167308.672/Watts
2016-11-01 12:46:54.077 LUA: EDF Conso Cumul/1000 = 167.308672/kWh
2016-11-01 12:46:54.078 Error: EventSystem: in C:\Program Files (x86)\Domoticz\scripts\lua\script_device_compteurHC-HP.lua: ...86)\Domoticz\scripts\lua\script_device_compteurHC-HP.lua:28: attempt to concatenate local 'id' (a nil value) 

Et la fameuse ligne 28 :

Code : Tout sélectionner

 print(script_label .. ' Update ' .. device .. ' ID : ' .. id .. ' => power : ' .. power .. ' energy :' .. energy)

Re: Repartition Consommation HC / HP...

Publié : 01 nov. 2016, 13:17
par thier
Ta ligne 28 est une ligne de print, c'est juste pour afficher "script_label .. ' Update ' .. device .. ' ID : ' .. id .. ' => power : ' .. power .. ' energy :' .. energy" dans les lignes de log de domoticz. device, id, power et energy sont définis avant dans ton script.
Déjà tu peux la commenter la ligne28 avec "--" en début de ligne pour savoir si le reste du script se déroule normalement.
Dans ta ligne 28 tu demande d'écrire dans les logs ..id.., hors le message d'erreur te dit "attempt to concatenate local 'id' (a nil value)". tu veux concaténer id qui pour ton programme n'est pas défini "a nil value". Regarde en tête de script ou tu définis "Local id", c'est là qu'est ton problème.
Je ne sais pas si tu as mis tout ton script, mais en tête de script je ne vois nulle part "Local id= blablabla". J'essaierai de remplacer ..id.. par ..idx.. sans rien changer d'autre pour voir...

Re: Repartition Consommation HC / HP...

Publié : 01 nov. 2016, 13:35
par stephdes
Merci Thier, je vais essayer.

Voici le script :

Code : Tout sélectionner

-- script domoticz/scripts/lua/script_device_compteurHC-HP.lua
local script_label = "EDF"

-- Initialisation des variables locales
local capteurGlobal = "Compteur EDF"
local capteurCptHP = "Compteur_HP"
local capteurCptHC = "Compteur_HC"
local HistoHCHP = "Compteur_Histo"
local euro = "EURO_EDF"

local idxCptHP = otherdevices_idx[capteurCptHP]
local idxCptHC = otherdevices_idx[capteurCptHC]
local idxCptHisto = otherdevices_idx[HistoHCHP]
local idxEuro = otherdevices_idx[euro]
local flagHC = "EDF_HC"

local euro_HC = uservariables['Cout_KW_HC']
local euro_HP = uservariables['Cout_KW_HP']

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




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

commandArray = {}

if otherdevices["Standbye_Signal"] == "On" then
    print (script_label .. " : Standbye_Signal configuré, aucun pilotage")
    return commandArray   
end

print(script_label .. ' Start')
print(script_label .. ' Debug : ' .. debug)   
print(script_label .. ' capteurGlobal : ' .. capteurGlobal)


Conso_Instant, Conso_Cumul = otherdevices_svalues[capteurGlobal]:match("([^;]+);([^;]+)")

Conso_Instant = tonumber (Conso_Instant)
    print (script_label .. ' Conso Instant = ' .. Conso_Instant .. "/Watts")
    print (script_label .. ' Conso Cumul = ' .. Conso_Cumul .. "/Watts")
    print (script_label .. ' Conso Cumul/1000 = ' .. Conso_Cumul/1000 .. "/kWh")

-- update(HistoHCHP, idxCptHisto,  0, 0, 1)
-- update(capteurCptHP, 726,  0, 0, 5)
-- update(capteurCptHC, idxCptHC,  0, 0, 5)
-- update(euro, idxEuro, 0, 0, 1)
-- update(euro, 728, 0,0, 5)

if (devicechanged[capteurGlobal]) then
    print (script_label .. ' Il y a eu augmentation de la consommation')
    -- Mise à jour du compteur
    Histo_Instant, Histo_Cumul = otherdevices_svalues[HistoHCHP]:match("([^;]+);([^;]+)")
    print (script_label .. ' Conso Histo Instant = ' .. Histo_Instant .. "/kWh")
    print (script_label .. ' Conso Histo Cumul = ' .. Histo_Cumul .. "/kWh")
    print (script_label .. ' Conso Histo Cumul/1000 = ' .. Histo_Cumul/1000 .. "/kWh")
   

    -- commandArray[capteurCptHP]= tostring(Delta_Conso)
    print (script_label .. ' flagHC = ' .. otherdevices[flagHC])
   
    if (otherdevices[flagHC]=='On') then
        print (script_label .. ' On est en heures creuses')
        Delta_Conso = (Conso_Cumul-Histo_Cumul)
        print (script_label .. ' Delta Conso = ' .. Delta_Conso .. "/Wh")
        print (script_label .. ' Delta Conso = ' .. Delta_Conso/1000 .. "/kWh")
        print (script_label .. ' La conso du kWh HC est de : ' .. euro_HC)
        -- Seul le cumule du compteur nous interesse pour calculer la nouvelle valeur
        conso_Cumul = tonumber(conso_Cumul)
        euro_HCHP = euro_HC
        print(script_label .. ' Compteur cible = HC')
        print(script_label .. ' Valeur capteurCptHC = '..tostring(capteurCptHC))
        print(script_label .. ' Valeur idxCptHC = '..tostring(idxCptHC))
        print(script_label .. ' Valeur consoInstant = '..tostring(Conso_Instant))

        -- Mise à jour du compteur
        consoInstantHC, consoCumuleHC = otherdevices_svalues[capteurCptHC]:match("([^;]+);([^;]+)")
        print(script_label .. ' Valeur consoInstantHC = '..tostring(capteurCptHC))
        print(script_label .. ' Valeur consoCumuleHC = '..tostring(capteurCptHC))
        update(capteurCptHC, idxCptHC, tonumber(Conso_Instant), consoCumuleHC+Delta_Conso, 1)
       
        -- Mise à 0 de la conso intantanee du compteur HP
        consoInstantHP, consoCumuleHP = otherdevices_svalues[capteurCptHP]:match("([^;]+);([^;]+)")
        consoInstantHP = 0
        update(capteurCptHP, idxCptHP, consoInstantHP, consoCumuleHP, 2)

        -- Sauvegarde de la valeur du compteur global pour prochain calcul
        update(HistoHCHP, idxCptHisto,  Conso_Instant, Conso_Cumul, 3)   
        euro_HCHP = euro_HC
    else
        -- Periode heures pleines
        -- Recuperation des valeurs du compteur global
        print (script_label .. ' On est en heures pleines')
        Delta_Conso = (Conso_Cumul-Histo_Cumul)
        print (script_label .. ' Delta Conso = ' .. Delta_Conso .. "/Wh")
        print (script_label .. ' Delta Conso = ' .. Delta_Conso/1000 .. "/kWh")
        print (script_label .. ' La conso du kWh HP est de : ' .. euro_HP)
        -- Seul le cumule du compteur nous interesse pour calculer la nouvelle valeur
        conso_Cumul = tonumber(conso_Cumul)
        euro_HCHP = euro_HP
        print(script_label .. ' Compteur cible = HP')
        print(script_label .. ' Valeur capteurCptHP = '..tostring(capteurCptHP))
        print(script_label .. ' Valeur idxCptHP = '..tostring(idxCptHP))
        print(script_label .. ' Valeur consoInstant = '..tostring(Conso_Instant))

        -- Mise à jour du compteur
        consoInstantHP, consoCumuleHP = otherdevices_svalues[capteurCptHP]:match("([^;]+);([^;]+)")
        update(capteurCptHP, idxCptHP, tonumber(Conso_Instant), consoCumuleHP+Delta_Conso, 1)
       
        -- Mise à 0 de la conso intantanee du compteur HC
        consoInstantHC, consoCumuleHC = otherdevices_svalues[capteurCptHC]:match("([^;]+);([^;]+)")
        consoInstantHC = 0
        update(capteurCptHC, idxCptHC, consoInstantHC, consoCumuleHC, 2)

        -- Sauvegarde de la valeur du compteur global pour prochain calcul
        update(HistoHCHP, idxCptHisto, Conso_Instant, Conso_Cumul, 3)
        euro_HCHP = euro_HP
    end
    print(script_label .. ' Calcul Tarifaire')
    print(script_label .. ' Calcul Tarifaire => Delta_Conso /Wh: ' .. Delta_Conso)
    print(script_label .. ' Calcul Tarifaire => Delta_Conso /kWh: ' .. Delta_Conso/1000)
    print(script_label .. ' Calcul Tarifaire => Tarif kWh : ' .. euro_HCHP)
    print(script_label .. ' Calcul Tarifaire => Cout : ' .. Delta_Conso/1000*euro_HCHP)

    Cout_Instant, Cout_Cumul = otherdevices_svalues[euro]:match("([^;]+);([^;]+)")
    print(script_label .. ' Calcul Tarifaire => Cout_Cumul actuel : ' .. Cout_Cumul)   
    print(script_label .. ' Calcul Tarifaire => Cout_Cumul+Delta_Conso*euro_HCHP : ' .. Cout_Cumul+Delta_Conso/1000*euro_HCHP)   
    update(euro, idxEuro,  Cout_Cumul+ Delta_Conso/1000*euro_HCHP, Cout_Cumul+ Delta_Conso/1000*euro_HCHP, 4)

else
    print (script_label .. " Il n'y a PAS eu augmentation de la consommation")
end


return commandArray

Re: Repartition Consommation HC / HP...

Publié : 01 nov. 2016, 13:54
par manu512
Salut stephdes,

la ligne 28 est sur la fonction d'update.
Tu a bien crée 4 compteurs virtuels ?

local capteurGlobal = "Compteur EDF" = > Compteur réel qui permet de relever la conso.
local capteurCptHP = "Compteur_HP" => Compteur electrique instant + compteur avec comme Nom "Compteur_HP"
local capteurCptHC = "Compteur_HC" => Compteur electrique instant + compteur avec comme Nom "Compteur_HC"
local HistoHCHP = "Compteur_Histo" => Compteur electrique instant + compteur avec comme Nom "Compteur_Histo"
local euro = "EURO_EDF" => Compteur avec comme Nom "EURO_EDF"
local flagHC = "EDF_HC" => Interrupeur virtuel a ON quand tu es en heure creuse avec comme Nom "EDF_HC"

Parce qu’apparemment le id en question, est l'idx de tes compteurs qui sont récupérés grace a leur nom puis envoyé a la fonction pour mettre a jour les informations.

En esperant t'avoir aidé :)

Au pire fait une copie d’écran de la page mesure :)

Re: Repartition Consommation HC / HP...

Publié : 01 nov. 2016, 14:03
par stephdes
Alors, voici ma page de mesure :

Image

Et mes variables :

Image

Et mon EDF HC

Image


Il faut que je mette les compteurs en utilisation ou en retour ? (là j'ai laissé en utilisation ce qui me semble logique mais...)