[LUA] Repartition Consommation HC / HP...

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
Pinpin
Messages : 7
Inscription : 01 janv. 2016, 19:07

Re: Repartition Consommation HC / HP...

Message par Pinpin »

Bonjour à tous,

Je lutte depuis plusieurs heure avec ce script ! J'ai utilisé le script de la première page et niveau compteurs, switchs et variables tout semble correct

Code : Tout sélectionner

LUA: -- Calcul Compteurs HC / HP --
2017-03-25 17:12:32.216 LUA: CapteurGlobal = CM180
2017-03-25 17:12:32.216 LUA: CapteurCptHP = Compteur Heures Pleines
2017-03-25 17:12:32.217 LUA: CapteurCptHC = Compteur Heures Creuses
2017-03-25 17:12:32.217 LUA: idxCptHP = 2131
2017-03-25 17:12:32.217 LUA: idxCptHC = 2132
2017-03-25 17:12:32.217 LUA: flagHP = EDF Heures Pleines
2017-03-25 17:12:32.217 LUA: flagHC = EDF Heures Creuses
2017-03-25 17:12:32.217 LUA: LastValueCptElecGlobal = 15920.76
2017-03-25 17:12:32.217 LUA: Conso Instant = 434 / Conso Cumule = 15921458
2017-03-25 17:12:32.217 LUA: Delta conso = 15905537.24
2017-03-25 17:12:32.217 LUA: Compteur cible = HP
2017-03-25 17:12:32.217 LUA: Valeur precedente = nil


Mais dans les logs j'ai toujour cette erreur là.

Code : Tout sélectionner

EventSystem: in LUA Compteur HC/HP: [string "-- script domoticz/scripts/lua/script_device_..."]:91: attempt to perform arithmetic on local 'consoCumuleCible' (a nil value)
Je vois pas comment récupérer l'info.

Si quelqu'un à la solution...

Bonne journée :)
Starnight
Messages : 65
Inscription : 20 déc. 2016, 10:54

Re: Repartition Consommation HC / HP...

Message par Starnight »

Est ce que la variable de idxcpthp est bien en nombre ? On dirait qu'il ne trouve pas une chaine arithmetic. Ou il y a une erreur dans le script qui empeche le calcul...
Pinpin
Messages : 7
Inscription : 01 janv. 2016, 19:07

Re: Repartition Consommation HC / HP...

Message par Pinpin »

Oui, c'est 2131 comme dans mon post au-dessus.
Seb13
Messages : 273
Inscription : 07 janv. 2016, 23:46

Re: Repartition Consommation HC / HP...

Message par Seb13 »

Tu peux nous donner la ligne 91 de ton script ?
Pinpin
Messages : 7
Inscription : 01 janv. 2016, 19:07

Re: Repartition Consommation HC / HP...

Message par Pinpin »

oui biensur et merci pour ton aide,

Code : Tout sélectionner

 print('Valeur ajustee = '..tostring(consoCumuleCible + consoDelta))
[Edit] Je rajoute les captures d'écran de mon installation et le script entier. Si ça peut servir...

Image
Image
Image
Image

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 
Starnight
Messages : 65
Inscription : 20 déc. 2016, 10:54

Re: Repartition Consommation HC / HP...

Message par Starnight »

Je ne suis pas un expert mais ne faut il pas que ta ligne

Code : Tout sélectionner

consoCumuleCible = consoCumuleCible + consoDelta
Soit avant les print et non apres ? Car il appelle une valeur qui n'a pas encore ete calculee par le script.

En gros que ca donne ca :

Code : Tout sélectionner

-- 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))
consoCumuleCible = consoCumuleCible + consoDelta
            print('Valeur ajustee = '..tostring(consoCumuleCible + consoDelta))
        end

        
Jme trompe peut etre je debute...
Seb13
Messages : 273
Inscription : 07 janv. 2016, 23:46

Re: Repartition Consommation HC / HP...

Message par Seb13 »

Je commencerai par mettre en commentaire :

print('Valeur ajustee = '..tostring(consoCumuleCible + consoDelta))

Pour voir si j'ai toujours un message d'erreur, histoire de valider la ligne.

Ensuite, je ferai un print de consoCumuleCible et un print de consoDelta sur 2 lignes, pour savoir qui a un problème.
Si pas de pb alors c'est le "+" qui ne va pas... c'est à dire que l'on peut pas faire d’addition dans un tostring (A confirmer)

Dit nous ce que cela donne avec ces tests.
Pinpin
Messages : 7
Inscription : 01 janv. 2016, 19:07

Re: Repartition Consommation HC / HP...

Message par Pinpin »

Ok, merci pour votre aide.
Je pars au travail maintenant, je testerais ca demain matin.

Bonne journée
Starnight
Messages : 65
Inscription : 20 déc. 2016, 10:54

Re: Repartition Consommation HC / HP...

Message par Starnight »

Des news ca fonctionne ?
Pinpin
Messages : 7
Inscription : 01 janv. 2016, 19:07

Re: Repartition Consommation HC / HP...

Message par Pinpin »

Bonjours,
Non j'ai toujours des soucis dans les logs...je creuse mais je suis pas mal occupé ailleurs.
Répondre