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 :)