Page 21 sur 33
Re: Repartition Consommation HC / HP...
Publié : 25 mars 2017, 17:20
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

Re: Repartition Consommation HC / HP...
Publié : 25 mars 2017, 18:17
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...
Re: Repartition Consommation HC / HP...
Publié : 25 mars 2017, 18:24
par Pinpin
Oui, c'est 2131 comme dans mon post au-dessus.
Re: Repartition Consommation HC / HP...
Publié : 25 mars 2017, 18:54
par Seb13
Tu peux nous donner la ligne 91 de ton script ?
Re: Repartition Consommation HC / HP...
Publié : 25 mars 2017, 19:52
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...
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
Re: Repartition Consommation HC / HP...
Publié : 26 mars 2017, 22:04
par Starnight
Je ne suis pas un expert mais ne faut il pas que ta ligne
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...
Re: Repartition Consommation HC / HP...
Publié : 27 mars 2017, 11:09
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.
Re: Repartition Consommation HC / HP...
Publié : 27 mars 2017, 14:56
par Pinpin
Ok, merci pour votre aide.
Je pars au travail maintenant, je testerais ca demain matin.
Bonne journée
Re: Repartition Consommation HC / HP...
Publié : 02 avr. 2017, 11:06
par Starnight
Des news ca fonctionne ?
Re: Repartition Consommation HC / HP...
Publié : 03 avr. 2017, 09:28
par Pinpin
Bonjours,
Non j'ai toujours des soucis dans les logs...je creuse mais je suis pas mal occupé ailleurs.