Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
J'envoi une requête curl en automatique pour transmettre la valeur heure creuse de mon compteur. Cette requête est récupérée dans un virtual device de type compteur. Le soucis c'est que le graphique généré prend la valeur du comptage journalier ( chiffre en haut à droite ) qui n'est pas celui envoyé ( au milieu dans status).
Comment changer le chiffre ou les stats? Je souhaite avoir un historique de ma valeur Heure creuse.
Je me suis mis à Domoticz depuis peu, mais j'ai réussi à faire quelque chose pour avoir les stats HC / HP de mon compteur... Est ce que c'est quelque chose de ce genre que vous voulez ?
Cpt.JPG (48.77 Kio) Consulté 11973 fois
Je précise, j'ai un capteur CM180 sur mon compteur qui ne m'envoie que que la conso globale (à droite sur la capture).
Pas de soucis.. Alors j'ai commencé par créé 2 switchs : Heures Creuses / Heures Pleines. Je pilote les changements des 2 switchs par un blocky :
blocky.JPG (54.55 Kio) Consulté 11956 fois
Ensuite j'ai créé 2 capteurs virtuels de type "Electrique (Instant+Compteur)". J'ai pris ces capteurs vu qu'ils correspondent à celui qui est branché à mon compteur.
--script /domoticz/scripts/lua/script_device_compteurHC-HP.lua
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']
local debug = uservariables['debug']
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)
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)
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
Pour les variables :
CapteurGlobal : Nom du capteur physique
CapteurCptHP : nom du capteur virtuelle HP
CapteurCptHC : nom du capteur virtuelle HC
idxCptHP : IDX du capteur virtuelle HP
idxCptHC : IDX du capteur virtuelle HC
flagHP : Nom du switch HP
flagHC : Nom du switch HC
LastValueCptElecGlobal : valeur du compteur cumulé pour calculer l'écart par rapport au dernier relevé
J'ai essayé de commenter un minimum mon code en le faisant...
manuloup, ta capture, c'est ton capteur "réel" ou un capteur virtuel ? Parce que le zéro c'est la consommation instantanée... Si c'est ton capteur physique, est ce que tu es sûr que ton capteur renvoi cette information là ? Parce qu'il a l'air de fonctionner sinon... Et si c'est un capteur virtuel, il faut lui envoyer les 2 informations (cumulé + instantané) lors de la mise à jour, comme tu pourras le voir dans le script...
C'est le capteur qui apparait sur le dashboard et dans l'onglet Utility. J'imagine que c'est un capteur virtuel créé automatiquement par Domoticz à partir du device.
2015-03-10_095208.jpg (183.03 Kio) Consulté 11936 fois
Par contre, si je regarde dans les logs du device, dans la page Devices, je vois bien les chiffres corrects dans les logs. En gros j'aimerais avoir la dernière valeur en watts (ici 922) à la place du 0 sur le Dashboard.
2015-03-10_092141.jpg (133.71 Kio) Consulté 11939 fois
2015-03-10_092308b.jpg (61.36 Kio) Consulté 11939 fois
Synology DS920+ avec VM Debian 12, Aeon Labs Z-Stick Gen5, Aeon Zwave et devices zwaves , Teleinfo USB, devices Zigbee, batterie Marstek Venus E, Shelly Pro 3EM...
Alors, le capteur qui apparait sur ton dashboard est bien ton capteur "physique", c'est à dire celui qui correspond réellement à ton matériel... donc celui qui doit fonctionner tout seul... J'ai regardé un peu, et je pense que c'est Domoticz qui ne gère pas l'information de consommation instantanée envoyée par ton capteur.