Page 2 sur 4
Re: Consommation virtuelle
Publié : 30 oct. 2017, 14:24
par foudepc83
J'ai essayé de mettre un intérrupteur à la place du selecteur pour simuler, j’obtiens le même résultat.
J'ai essayé aussi de remplacer On et Off par Level 0 et Level 30. Idem ...
J'utilise le script lua directement dans domoticz, peut etre il faut faire un script dans un fichier non ?
Merci beaucoup !!!
Re: Consommation virtuelle
Publié : 30 oct. 2017, 14:27
par rapinou
Et qu'est-il indiqué au niveau de ta variable ? Type et valeur ?
foudepc83 a écrit :J'utilise le script lua directement dans domoticz, peut etre il faut faire un script dans un fichier non ?
Non, moi tous mes scripts lua sont dans Dz, pas de soucis. Il faut juste faire attention à bien renseigner le type.
Re: Consommation virtuelle
Publié : 30 oct. 2017, 14:46
par foudepc83
rapinou a écrit :Et qu'est-il indiqué au niveau de ta variable ? Type et valeur ?
foudepc83 a écrit :J'utilise le script lua directement dans domoticz, peut etre il faut faire un script dans un fichier non ?
Non, moi tous mes scripts lua sont dans Dz, pas de soucis. Il faut juste faire attention à bien renseigner le type.
Ha ... alors je vais essayer d'etre plus précis possible :
Code : Tout sélectionner
local devices = {}
-- tableau a renseigner {'dispositif', puissance, 'compteur'}
devices[1] = { 'Chauffage Cuisine', 2000, 'Consommation Chauffage Cuisine'}
-- etc..
Chauffage Cuisine => Selector ( 0 = Off , 30 = On ) (j'ai même essayé avec un simple switch).
2000 => Puissance de mon chauffage
Consommation Chauffage Cuisine => Compteur electrique
Re: Consommation virtuelle
Publié : 30 oct. 2017, 14:52
par rapinou
La fonction stateChange de modules.lua crée la variable si elle n'existe pas au préalable :
Code : Tout sélectionner
-- vérifie s'il y a eu changement d'état
function stateChange(device)
if (uservariables['lastState_'..device] == nil) then
creaVar('lastState_'..device,otherdevices[device])
log('stateChange : création variable manquante lastState_'..device,debug)
return false
elseif (devicechanged[device] == nil) then
return false
elseif (devicechanged[device] == uservariables['lastState_'..device]) then
return false
else
duree = lastSeen(uservariables_lastupdate['lastState_'..device])
updateVar('lastState_'..device,otherdevices[device])
return otherdevices[device]
end
end
Donc si le script essaie sans cesse de l'enregistrer, c'est qu'il y a un problème de ce côté.
Qu'est-il indiqué pour la variable (type, valeur) dans Dz > Réglages > Plus d'options > Variables utilisateur ?
Re: Consommation virtuelle
Publié : 30 oct. 2017, 15:50
par rapinou
Après quelques test, voici mes modifs au script de vil1driver pour ajouter la gestion des coûts EDF et la gestion des heures pleines et creuses.
Il nécessite deux variables pour stocker les tarifs du kWh en HP et HC, un sélecteur pour enregistrer le planning des HP et HC, et un compteur par dispositif.
Code : Tout sélectionner
-- Chargement des modules vil1driver
dofile('/home/pi/domoticz/scripts/lua/modules.lua')
------------------------------------------------------------------
------------------------ Tableau à éditer ------------------------
-- {'dispositif', puissance, 'compteur conso', 'compteur coût'} --
------------------------------------------------------------------
local devices = {}
devices[1] = {'Fil pilote RDC', 3500, 'Consommation chauffage RDC', 'Coût chauffage RDC'}
--devices[2] = {'radiateur SDB', 1200, 'conso SDB'}
--devices[3] = {'radiateur salon', 3200, 'conso salon'}
--devices[4] = {'radiateur parents', 800, 'conso parents'}
-- etc..
------------------------------------------------------------------
------------------------- Fin du tableau -------------------------
------------------------------------------------------------------
--------------------------------
------ Variables à éditer ------
--------------------------------
local tarifhp = 'Tarif HP' -- Nom de la variable utilisateur Tarif HP
local tarifhc = 'Tarif HC' -- Nom de la variable utilisateur Tarif HC
local hp_hc = 'EDF HP / HC' -- Nom du sélecteur Heures pleines/Heures creuses
local lvl_hp = 10 -- Niveaux du sélecteur HP/HC
local lvl_hc = 20
--------------------------------
-- Fin des variables à éditer --
--------------------------------
commandArray = {}
for n,device in pairs(devices) do
if stateChange(device[1]) == 'On' then -- Si l'état du device passe à On :
-- Affichage puissance instantanée
power, energy = string.match(otherdevices_svalues[device[3]], "(%d+%.*%d*);(%d+%.*%d*)") -- Récupération de la valeur du compteur de consommation électrique
commandArray['UpdateDevice'] = otherdevices_idx[device[3]] .. '|0|' .. device[2] .. ';' .. energy -- Mise à jour du compteur (puissance instantanée)
break
end
if stateChange(device[1]) == 'Off' then -- Si l'état du device passe à Off :
log(device[1]..' est resté allumé '..duree..'s')
-- Envoi de la consommation dans le compteur de consommation électrique
power, energy = string.match(otherdevices_svalues[device[3]], "(%d+%.*%d*);(%d+%.*%d*)") -- Récupération de la valeur du compteur de consommation électrique
local conso_cycle = tonumber(device[2] / 3600 * duree) -- Consommation du cycle
energy = tonumber(energy + conso_cycle) -- Somme valeur initiale + consommation du cycle
commandArray[1] = {['UpdateDevice'] = otherdevices_idx[device[3]] .. '|0|0;' .. energy} -- Mise à jour du compteur (puissance instantanée à zéro + conso du cycle)
-- Calcul du coût EDF et envoi dans le compteur virtuel
hp_hc = tonumber(otherdevices_svalues[hp_hc]) -- Récupération du planning HP/HC
tarifhp = tonumber(uservariables[tarifhp]) -- Récupération des tarifs HP/HC
tarifhc = tonumber(uservariables[tarifhc])
if hp_hc == lvl_hp then -- Si on est en heures pleines :
cout_cycle = tonumber(conso_cycle * tarifhp / 1000) -- On calcule le coût du cycle
elseif hp_hc == lvl_hc then -- Si on est en heures creuses :
cout_cycle = tonumber(conso_cycle * tarifhc / 1000) -- On calcule le coût du cycle
end
local compteur_init = tonumber(otherdevices_svalues[device[4]]) -- Récupération de la valeur initiale du compteur
local compteur_maj = tonumber(compteur_init + cout_cycle) -- On ajoute le coût du cycle au compteur
commandArray[2] = {['UpdateDevice'] = otherdevices_idx[device[4]] .. '|0|' .. compteur_maj} -- Mise à jour du compteur
break
end
end
return commandArray
Re: Consommation virtuelle
Publié : 30 oct. 2017, 19:18
par vil1driver
2017-10-30 12:50:17.305 dzVents: stateChange : création variable manquante
Ce devrait être indiqué Lua..
Re: Consommation virtuelle
Publié : 31 oct. 2017, 10:16
par foudepc83
Bonjour,
J'ai trouvé mon problème , c'est de ma faute , je suis allé trop vite,
En effet je n'ai pas rentré les informations ( IP ect...) dans le fichier module.lua.
Re: Consommation virtuelle
Publié : 31 oct. 2017, 10:17
par foudepc83
vil1driver a écrit :2017-10-30 12:50:17.305 dzVents: stateChange : création variable manquante
Ce devrait être indiqué Lua..
C'est une bonne question , tous mes scripts affichent en dsVents , je n'ai pas fais attention.
Mais ou peut t'on configurer pour mettre en Lua , pourtant mes scripts fonctionnent bien.
Re: Consommation virtuelle
Publié : 31 oct. 2017, 10:36
par Neutrino
C'est juste un problème de cache.
J'ai eu la même chose après une MAJ.
Re: Consommation virtuelle
Publié : 31 oct. 2017, 12:28
par foudepc83
Neutrino a écrit :C'est juste un problème de cache.
J'ai eu la même chose après une MAJ.
D'accord merci beaucoup
