Page 31 sur 33

Re: Repartition Consommation HC / HP...

Publié : 07 août 2020, 17:22
par Keros
C'est DomoticZ qui gère les deux usages jours/nuit nativement dans le device de compteur (ce n'est pas celui de puissance)

Re: Repartition Consommation HC / HP...

Publié : 07 août 2020, 17:44
par dg-59
ah ok il prend les infos d'un compteur total moi en étant juste en hc ou hp sa ne le fera pas

Re: Repartition Consommation HC / HP...

Publié : 07 août 2020, 18:41
par vil1driver
bon j'étais optimiste avec mon script à 5 ou 6 lignes :D

j'ai écris ceci, pas de domoticz sous la main donc pas testé

J'ai tenté de faire simple

peux tu essayer (pense à désactiver l'autre)

ce script doit être de type (trigger) DEVICE !
Image

Code : Tout sélectionner

-- script de type DEVICE

local capteurKWH = 'OWL_Intuition'			-- nom du capteur remontant des kwh
local capteurW = 'OWL1'						-- nom du capteur remontant des watt
local memo = 'CONSO_LAST'					-- nom de la variable utilisateur de type chaîne pour mémo
local CptHP = 'Compteur Electrique HP'		-- nom du capteur virtuel de type intant+compter pour les heures pleines
local CptHC = 'Compteur Electrique HC'		-- nom du capteur virtuel de type intant+compter pour les heures creuse
local debutHP = '07:00'						-- heure au format '00:00' de début de la plage heures pleines
local finHP = '22:00'						-- heure au format '00:00' de fin de la plage heures pleines

-- initialisation
local init = true							-- true = mettre les capteurs virtuels à zero
											-- false = fonctionnement normal du script
											
											
											
-- fin de la partie modifiable

commandArray = {}

-- initialisation
if init then
	commandArray['Variable:'..memo] = 'HP;0'
	commandArray[#commandArray+1] = {['UpdateDevice'] = otherdevices_idx[CptHP] .. "|0|0;0"}
	commandArray[#commandArray+1] = {['UpdateDevice'] = otherdevices_idx[CptHC] .. "|0|0;0"}
	print("script HP HC initialisé")
	print("penser à passer init à false")
	do return end
end


-- récupère l'heure actuelle au format '00:00'
local heure = string.sub(os.date("%X"), 1, 5)

-- lancement du script sur détection maj compteur
if devicechanged[capteurW] then

	-- extraction valeurs compteurs physiques
	val_1, val_2 = otherdevices_svalues[capteurW]:match("([^;]+);([^;]+)")
	local watt = tonumber(val_1)
	val_1, val_2 = otherdevices_svalues[capteurKWH]:match("([^;]+);([^;]+)")
	local kwh = tonumber(val_2)
	
	-- lecture memo
	val_1, val_2 = uservariables[memo]:match("([^;]+);([^;]+)")
	local cycle_last = val_1
	local kwh_last = tonumber(val_2)
		
	-- en HP
	if heure > debutHP and heure < finHP then
		
		-- détection changement de cycle
		if cycle_last == 'HC' then
			-- écriture memo
			commandArray['Variable:'..memo] = 'HP;'..kwh
		end
		
		-- calcul écart
		if kwh >= kwh_last then
			kwh = kwh - kwh_last
		end	

		-- maj compteur HP
		commandArray[#commandArray+1] = {['UpdateDevice'] = otherdevices_idx[CptHP] .. "|0|" .. watt .. ";" .. kwh}
		-- maj compteur HC
		commandArray[#commandArray+1] = {['UpdateDevice'] = otherdevices_idx[CptHC] .. "|0|0;" .. kwh_last}
		
	-- en HC
	else
	
		-- détection changement de cycle
		if cycle_last == 'HP' then
			-- écriture memo
			commandArray['Variable:'..memo] = 'HC;'..kwh
		end
		
		-- calcul écart
		if kwh >= kwh_last then
			kwh = kwh - kwh_last
		end	
		
		-- maj compteur HP
		commandArray[#commandArray+1] = {['UpdateDevice'] = otherdevices_idx[CptHP] .. "|0|0;" .. kwh_last}
		-- maj compteur HC
		commandArray[#commandArray+1] = {['UpdateDevice'] = otherdevices_idx[CptHC] .. "|0|" .. watt .. ";" .. kwh}
	
	
	
	end
	
end

return commandArray
	

pas certain que ça fonctionne sans couac (il faudra probablement aller lire le compteur HC pour ajouter sa valeur au changement de cycle..hp->hc.) mais on est sur une meilleure base je pense.

Sur ce bonnes vacances à tous ;)

Re: Repartition Consommation HC / HP...

Publié : 07 août 2020, 21:00
par dg-59
il ne veux pas importé dans Blockly script data n'es pas valide

Re: Repartition Consommation HC / HP...

Publié : 07 août 2020, 21:22
par vil1driver
J'ai pris la première photo sur Google qui montre le Trigger

Mais il va de soi que c'est un script lua.

Re: Repartition Consommation HC / HP...

Publié : 07 août 2020, 21:46
par dg-59
ok mais vue que Blockly je ne connais pas du tout lol

écrire ça comme ça sens rien chapeau

ok mais vue que Blockly je ne connais pas du tout lol
cette ligne me renvoie une erreur

Code : Tout sélectionner

commandArray['Variable:'..memo] = 'HP;0'
 
  attempt to index a nil value (global 'commandArray')
 

Re: Repartition Consommation HC / HP...

Publié : 07 août 2020, 22:15
par vil1driver
Ahh :D

Autant pour moi

Il manque cette ligne

Code : Tout sélectionner

commandArray = {}
Que tu peux placer juste après celle ci

Code : Tout sélectionner

-- fin de la partie modifiable

Re: Repartition Consommation HC / HP...

Publié : 07 août 2020, 22:53
par dg-59
il aime pas cette partie comme pour l'autre script

Code : Tout sélectionner

-- extraction valeurs compteurs physiques
	val_1, val_2 = otherdevices_svalues[capteurW]:match("([^;]+);([^;]+)")
	local watt = tonumber(val_1)
	val_1, val_2 = otherdevices_svalues[capteurKWH]:match("([^;]+);([^;]+)")
	local kwh = tonumber(val_2)
	
	-- lecture memo
	val_1, val_2 = uservariables[memo]:match("([^;]+);([^;]+)")

Code : Tout sélectionner

 print(otherdevices_svalues['OWL_Intuition']) 
 print(otherdevices_svalues['OWL1'])
 
 2020-08-07 15:16:09.564 Status: LUA: 0.000;18882.000
2020-08-07 15:16:09.564 Status: LUA: 640.000;0.000
  
si je met une valeur famtome plus d"erreur pour ces ligne alors que la formule dit bien de prendre la 1er ou 2eme valeur ("([^;]+);([^;]+)")

Code : Tout sélectionner

	-- extraction valeurs compteurs physiques
	--val_1, val_2 = otherdevices_svalues[capteurW]:match("([^;]+);([^;]+)")
	
	val_1 = otherdevices_svalues[capteurW]:match("([^;]+)")
        val_2 = otherdevices_svalues[capteurW]:match("([^;]+)")
    
	local watt = tonumber(val_1)
	--val_1, val_2 = otherdevices_svalues[capteurKWH]:match("([^;]+);([^;]+)")
	val_0, val_1 = otherdevices_svalues[capteurKWH]:match("([^;]+);([^;]+)")
	val_0, val_2 = otherdevices_svalues[capteurKWH]:match("([^;]+);([^;]+)")
	
	local kwh = tonumber(val_2)
pour cette partie j'ai pas encore réussis a trouver l'erreur

Code : Tout sélectionner

val_1, val_2 = uservariables[memo]:match("([^;]+);([^;]+)")

attempt to index a nil value (field '?')
il faudrai un capteur virtuel instantane + constant 640.000;18882.000
j'ai pas encore trouver pour le faire

Re: Repartition Consommation HC / HP...

Publié : 07 août 2020, 23:27
par vil1driver
Tu as bien créé la variable utilisateur ?

Code : Tout sélectionner

local memo = 'CONSO_LAST'					
-- nom de la variable utilisateur de type chaîne pour mémo
Image

Pour les erreurs avec val_1 val_2,
que te dit domoticz au juste ?

Re: Repartition Consommation HC / HP...

Publié : 08 août 2020, 07:40
par dg-59
Bonjour, oui mais je sais pas si je l'ai bien rentré

Code : Tout sélectionner

Nom de la variable:	
memo 
Type de variable:	
Chaîne
Valeur de la variable:	
CONSO_LAST
pour

Code : Tout sélectionner

 val_1, val_2 = uservariables[memo]:match("([^;]+);([^;]+)")
l'erreur est

Code : Tout sélectionner

attempt to index a nil value (field '?')