Dzvents Calcul d'une moyenne de température

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 <\>.
Répondre
pchatill
Messages : 139
Inscription : 12 août 2015, 15:57

Dzvents Calcul d'une moyenne de température

Message par pchatill »

Bonjour.
J'ai un script qui me permet de calculer la moyenne de température de mon potager.
Celui ci s'exécute bien quand la température de mon potager change.
Mais je n'arrive pas à l’exécuter sans erreur en mettant le trigger sur un switch nommé ici: historyTrigger

Code : Tout sélectionner

return {
    active = true,
	on = {
		devices = {'Potager',
			'historyTrigger', --marche pas
		}
	},
	data = {
		temperatures = { history = true, maxItems = 10 }
	},
    execute = function(domoticz, triggeredItem,info)
        
		-- add new data
		domoticz.data.temperatures.add(triggeredItem.temperature)

		-- average
		local average = domoticz.data.temperatures.avg()
        print("average= " .. average .."  " .. type(average) )
		-- maximum value in the past hour:
		local max = domoticz.data.temperatures.maxSince('01:00:00')
		print("temperatures.max depuis 1h= " .. max .."  " .. type(max) )
    end
}
J'ai compris que "triggeredItem.temperature" ne voulait rien dire si le script est actionné par un switch,
mais je ne vois pas la bonne syntaxe malgré mes nombreux essais.
Je débute en dzvents et je tourne en rond...
Une bonne âme pour m'aider à le corriger?
Merci d'avance
PRETTY_NAME="Debian GNU/Linux 13 (trixie)"
NAME="Debian GNU/Linux"
VERSION_ID="13"
VERSION="13 (trixie)"
VERSION_CODENAME=trixie
DEBIAN_VERSION_FULL=13.4
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Dzvents Calcul d'une moyenne de température

Message par Keros »

Dans ton code, triggeredItem correspond à l'élément qui a déclenché le script : c'est soit un changement de Potager ou de historyTrigger.

Plus loin dans ton script, tu demandes de récupérer la température du déclencheur. Avec le switch, cela ne fonctionne pas.
Mais, à cet endroit, au lieu de récupérer la température du déclencheur, tu peux récupérer la température du Potager.

J'ai écrit des petits guides dans ma présentation dont certains au sujet de la programmation (lien dans ma signature) : tu y trouveras peut-être des infos utiles.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
pchatill
Messages : 139
Inscription : 12 août 2015, 15:57

Re: Dzvents Calcul d'une moyenne de température

Message par pchatill »

Merci Keros.
Ca marche maintenant!

Code : Tout sélectionner

return {
    active = true,
	on = {
		devices = {'Potager',
			'historyTrigger', 
		}
	},
	data = {
		temperatures = { history = true, maxItems = 10 }
	},
    execute = function(domoticz, triggeredItem,info)
        
        local PotTemp = domoticz.devices("Potager").temperature
        print("PotTemp= " .. PotTemp .."  " .. type(PotTemp) )
		-- add new data
		domoticz.data.temperatures.add(PotTemp)-- store current temperature in persistent data
		local average = domoticz.data.temperatures.avg()
        print("average= " .. average .."  " .. type(average) )
		-- maximum value in the past hour:
		local max = domoticz.data.temperatures.maxSince('00:01:00')
		--max = tonumber(max)
		print(max)
		print("temperatures.max depuis 1h= " .. max .."  " .. type(max) )
    end
}
PRETTY_NAME="Debian GNU/Linux 13 (trixie)"
NAME="Debian GNU/Linux"
VERSION_ID="13"
VERSION="13 (trixie)"
VERSION_CODENAME=trixie
DEBIAN_VERSION_FULL=13.4
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Dzvents Calcul d'une moyenne de température

Message par Keros »

Bonne continuation ;)
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
pchatill
Messages : 139
Inscription : 12 août 2015, 15:57

Re: Dzvents Calcul d'une moyenne de température

Message par pchatill »

Bonjour.
Désolé re revenir sur ce post... Le script pour récupérer la température d'un capteur de température fonctionne parfaitement, mais quand je le modifie pour un custom sensor (ici une pince amperemétrique) , cela ne fonctionne pas;
Je m'en sors pas...
Voici mon script: ( C'est la ligne "local average = domoticz.data.var1.avg() " qui pose probleme)

Code : Tout sélectionner

return {
    active = true,
	on = {
		devices = {'historyTrigger',}
	},
	data = {
		var1 = { history = true, maxItems = 5 }
	},
    execute = function(domoticz, triggeredItem,info)
        
 
         local toto=tonumber(domoticz.devices('Prises_Maison_CT0_3').rawData[1])
        print("Amperes_Prises_Maison3= " .. toto.."  ".. type(toto))  --Renvoie Amperes_Prises_Maison3= 2.2 number
		-- add new data
		
	    domoticz.data.var1.add(3.2)-- store current temperature in persistent data   	
        local average = domoticz.data.var1.avg()
        print("average= " .. average .."  " .. type(average) )
		-- maximum value in the past hour:
		local max = domoticz.data.var1.maxSince('00:01:00')
		--max = tonumber(max)
		print(max)
		print("temperatures.max depuis 1h= " .. max .."  " .. type(max) )
		
    end
}
Et voici mon log:

2026-01-29 09:12:27.805 dzVents: ------ Start internal script: Moyenne_Pince_Amperemetrique: Device: "historyTrigger (Virtuel (Http))", Index: 179
2026-01-29 09:12:27.820 dzVents: Amperes_Prises_Maison3= 0.78 number
2026-01-29 09:12:27.820 Error: dzVents: Item data is not a number type. Type is nil
2026-01-29 09:12:27.820 Error: dzVents: Item data is not a number type. Type is nil
2026-01-29 09:12:27.820 Error: dzVents: Item data is not a number type. Type is nil
2026-01-29 09:12:27.820 Error: dzVents: Item data is not a number type. Type is nil
2026-01-29 09:12:27.820 Error: dzVents: An error occurred when calling event handler Moyenne_Pince_Amperemetrique
2026-01-29 09:12:27.820 Error: dzVents: ...les (x86)\Domoticz\dzVents\runtime\HistoricalStorage.lua:289: attempt to perform arithmetic on a nil value (local 'sum')
2026-01-29 09:12:27.820 dzVents: ------ Finished Moyenne_Pince_Amperemetrique
Une idée?
Merci d'avance...
PRETTY_NAME="Debian GNU/Linux 13 (trixie)"
NAME="Debian GNU/Linux"
VERSION_ID="13"
VERSION="13 (trixie)"
VERSION_CODENAME=trixie
DEBIAN_VERSION_FULL=13.4
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Dzvents Calcul d'une moyenne de température

Message par Keros »

Oui l'erreur indique une ligne, mais, souvent, le problème vient d'avant.

Tu peux vérifier que tu as des valeurs dans data.var1 en affichant le résultat de domoticz.data.var1.get(1) ? Ca devrait afficher la dernière valeur rentrée.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
pchatill
Messages : 139
Inscription : 12 août 2015, 15:57

Re: Dzvents Calcul d'une moyenne de température

Message par pchatill »

Merci Keros
(Désolé, je m'étais absenté qqs jours: je m'y recolle aujourd'hui)
Quand je rajoute la ligne
print("domoticz.data.var1.get= " ..domoticz.data.var1.get(1))
J'ai le message d'erreur:
lua:22: attempt to concatenate a table value
Et si je mets:
print("domoticz.data.var1.get= " ..tostring(domoticz.data.var1.get(1)))
Plus d'erreur et j'ai
dzVents: domoticz.data.var1.get= table: 062C7828
Je vois bien certaine données sont des tables mais c'est pas clair du tout pour moi ...
PRETTY_NAME="Debian GNU/Linux 13 (trixie)"
NAME="Debian GNU/Linux"
VERSION_ID="13"
VERSION="13 (trixie)"
VERSION_CODENAME=trixie
DEBIAN_VERSION_FULL=13.4
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Dzvents Calcul d'une moyenne de température

Message par Keros »

Il semblerait que la valeur stockée soit sous forme de tableau et non de valeur.

Tu peux essayer de pousser uniquement domoticz.data.var1.add(2) et voir ce qui est enregistré.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
pchatill
Messages : 139
Inscription : 12 août 2015, 15:57

Re: Dzvents Calcul d'une moyenne de température [Résolu]

Message par pchatill »

Bonjour Keros.
Ca marche maintenant, et je sais pas pourquoi.......
J'ai refait un copié/collé de mon dernier code posté ici pour être sur d'avoir rien modifié
entre temps et ... ça marche
Je comprends pas.
Si j'ai rien touché dans mon code, j'ai peut être fait une modif. sur mon custom.sensor.
Laquelle?
En tout cas, merci beaucoup Keros!!!!!
PRETTY_NAME="Debian GNU/Linux 13 (trixie)"
NAME="Debian GNU/Linux"
VERSION_ID="13"
VERSION="13 (trixie)"
VERSION_CODENAME=trixie
DEBIAN_VERSION_FULL=13.4
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Dzvents Calcul d'une moyenne de température

Message par Keros »

Ah, j'aurais aimé savoir pourquoi. Je penche pour une "mauvaise" donnée qui avait été poussé dans l'historique et qui te plantait le calcul.

Ça fonctionne, c'est le principal.

Bonne continuation
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Répondre