Page 2 sur 20

Re: [DZVents]script de notifications ultime (mais pas que)

Publié : 06 mars 2019, 21:30
par papoo
tostring(description) : je convertie, si nécessaire, description au format string
string.find : je recherche dans le string description l'expression régulière (regex) suivante : '^{.*}$'
^ : l'accent circonflexe marque le début d'une chaîne
$ : le dollars marque la fin d'une chaîne
. : Le point indique n'importe quel caractère
* : l'étoile => zéro, une ou plusieurs occurrences du caractère ou de la classe précédente
je recherche donc un crochet ouvrant en début de chaîne et un crochet fermant en fin de chaîne avec entre les deux zéro un ou plusieurs caractères ce n'est pas un test de validation du json, c'est juste pour omettre tout ce qui ne ressemble pas a ce que l'on utilise pour ce script.

si tu as idées d'autres fonctionnalités, je me ferais un plaisir de tenter de les ajouter.

Re: [DZVents]script de notifications ultime (mais pas que)

Publié : 06 mars 2019, 21:59
par denis_brasseur
papoo a écrit : 06 mars 2019, 21:30 tostring(description) : je convertie, si nécessaire, description au format string
string.find : je recherche dans le string description l'expression régulière (regex) suivante : '^{.*}$'
^ : l'accent circonflexe marque le début d'une chaîne
$ : le dollars marque la fin d'une chaîne
. : Le point indique n'importe quel caractère
* : l'étoile => zéro, une ou plusieurs occurrences du caractère ou de la classe précédente
je recherche donc un crochet ouvrant en début de chaîne et un crochet fermant en fin de chaîne avec entre les deux zéro un ou plusieurs caractères ce n'est pas un test de validation du json, c'est juste pour omettre tout ce qui ne ressemble pas a ce que l'on utilise pour ce script.
C'est clair, et efficace.
si tu as idées d'autres fonctionnalités, je me ferais un plaisir de tenter de les ajouter.
Je regarde déjà pour exploiter les possibilités existantes, je n'hesiterais pas a proposer et à demander.
Je suis juste bluffé par les possibilités offertes par ce code.
Merci papoo.

Re: [DZVents]script de notifications ultime (mais pas que)

Publié : 10 mars 2019, 07:52
par denis_brasseur
papoo a écrit : 05 mars 2019, 20:50 Aucun include à prévoir
Global data est directement géré par dzvents
C’est le fichier ou tu peux stocker des données que tu utilises dans d’autres scripts


J'ai pris un peu de temps pour faire des test complémentaires.
Le script se déroule correctement, mais l'envoi de notification retourne une erreur :
2019-03-10 07:47:00.661 Status: dzVents: Error (2.4.6): Json Description v0.72: An error occured when calling event handler JsonDescription
2019-03-10 07:47:00.661 Status: dzVents: Error (2.4.6): Json Description v0.72: .../pi/domoticz/scripts/dzVents/scripts/JsonDescription.lua:301: attempt to index field 'helpers' (a nil value)
C'est ici que ça bloque :

Code : Tout sélectionner

domoticz.helpers.managedNotify(domoticz, subject, message, SubSystem, frequency_notifications , quiet_hours)

Re: [DZVents]script de notifications ultime (mais pas que)

Publié : 10 mars 2019, 09:11
par papoo
Il faut une version récente de dzvents
Tu as quelle version de domoticz/dzvents ?

Re: [DZVents]script de notifications ultime (mais pas que)

Publié : 10 mars 2019, 09:28
par denis_brasseur
papoo a écrit : 10 mars 2019, 09:11 Il faut une version récente de dzvents
Tu as quelle version de domoticz/dzvents ?
il s'agit de la 2.4.6
dzVents Version: 2.4.6
Je pense que quelque chose avait dut m'échapper dans l'utilisation de la fonction universelle de notification.
papoo a écrit : 05 mars 2019, 20:50 Aucun include à prévoir
Global data est directement géré par dzvents
C’est le fichier ou tu peux stocker des données que tu utilises dans d’autres scripts
J'ai placé la fonction managedNotify sous dzVents/scripts/global_data.lua, cela fonctionne maintenant.
Je l'avais placé à tort sous /scripts/lua
J'avais mal compris ;)

Re: [DZVents]script de notifications ultime (mais pas que)

Publié : 10 mars 2019, 09:52
par denis_brasseur
J'ai ajouté la possibilité de gerer un périphérique % et un périphérique Custom Sensor si ils dépassent les seuils minimal ou maximal avec fréquence de notifications en minutes et notification des heures calmes

Code : Tout sélectionner

Exemple 8 : être averti si un périphérique % dépasse les seuils minimal ou maximal
avec fréquence de notifications en minutes et notification des heures calmes

{
 "low_threshold_purcent": 10,
 "high_threshold_purcent": 40,
 "frequency_notifications": 60,
 "quiet_hours":"23:00-07:15"
  }
  
  Exemple 9 :être averti si un périphérique Custom Sensor dépasse les seuils minimal ou maximal
avec fréquence de notifications en minutes et notification des heures calmes
{
 "low_threshold_custom": 1000,
 "high_threshold_custom": 4000,
 "frequency_notifications": 60,
 "quiet_hours":"23:00-07:15"
  }  
Le code à insérer dans les tests existants

Code : Tout sélectionner

if device.sensorType ~= nil and (settings.high_threshold_custom ~= nil or settings.low_threshold_custom ~= nil)  then
	--alarme custom sensor
	domoticz.log('La valeur mesurée par '.. device.name .. ' est de  ' .. tostring(domoticz.utils.round(device.state, 1)) .. device.sensorUnit, domoticz.LOG_INFO)   
	if settings.low_threshold_custom ~= nil and tonumber(device.state) < settings.low_threshold_custom then  -- seuil bas %
		domoticz.log(device.name .. ' a un seuil bas défini à  ' .. settings.low_threshold_custom..device.sensorUnit, domoticz.LOG_INFO)
		message = 'La valeur mesurée par '.. device.name .. ' est inférieure au seuil défini ('..settings.low_threshold_custom..device.sensorUnit..'). Valeur : '..tostring(domoticz.utils.round(device.state, 1))..device.sensorUnit
		domoticz.helpers.managedNotify(domoticz, subject, message, SubSystem, frequency_notifications , quiet_hours)
	end    
	if settings.high_threshold_custom ~= nil and tonumber(device.state) > settings.high_threshold_custom then  -- seuil haut %                               
		domoticz.log(device.name .. ' a un seuil haut défini à  ' .. settings.high_threshold_custom..device.sensorUnit, domoticz.LOG_INFO)
		message = 'La valeur mesurée par '.. device.name ..' est supérieure au seuil défini ('..settings.high_threshold_custom..device.sensorUnit..'). Valeur : '..tostring(domoticz.utils.round(device.state, 1))..device.sensorUnit
		domoticz.helpers.managedNotify(domoticz, subject, message, SubSystem, frequency_notifications , quiet_hours)
	end 	

elseif device.percentage ~= nil and (settings.high_threshold_purcent ~= nil or settings.low_threshold_purcent ~= nil)  then
	--alarme pourcentage
	domoticz.log('La valeur mesurée par '.. device.name .. ' est de  ' .. tostring(domoticz.utils.round(device.percentage, 1)) ..'%', domoticz.LOG_INFO)   
	if settings.low_threshold_purcent ~= nil and device.percentage < settings.low_threshold_purcent then  -- seuil bas %
		domoticz.log(device.name .. ' a un seuil % bas défini à  ' .. settings.low_threshold_purcent..'%', domoticz.LOG_INFO)
		message = 'La valeur mesurée par '.. device.name .. ' est inférieure au seuil défini ('..settings.low_threshold_purcent..'%). Valeur : '.. tostring(domoticz.utils.round(device.percentage, 1)) ..'%'
		domoticz.helpers.managedNotify(domoticz, subject, message, SubSystem, frequency_notifications , quiet_hours)
	end    
	if settings.high_threshold_purcent ~= nil and device.percentage > settings.high_threshold_purcent then  -- seuil haut %                               
		domoticz.log(device.name .. ' a un seuil % haut défini à  ' .. settings.high_threshold_purcent..'%', domoticz.LOG_INFO)
		message = 'La valeur mesurée par '.. device.name ..' est supérieure au seuil défini ('..settings.high_threshold_purcent..'%). Valeur : '.. tostring(domoticz.utils.round(device.percentage, 1)) ..'%'
		--domoticz.log(message, domoticz.LOG_INFO)
		domoticz.helpers.managedNotify(domoticz, subject, message, SubSystem, frequency_notifications , quiet_hours)
	end
end

Re: [DZVents]script de notifications ultime (mais pas que)

Publié : 10 mars 2019, 10:58
par papoo
merci
j'ai ajouté tes modification au script
j'en ai profité aussi pour ajouter la gestion des devices Alert

Re: [DZVents]script de notifications ultime (mais pas que)

Publié : 10 mars 2019, 17:34
par denis_brasseur
Ajout du test de niveau de batterie, se cumule avec les autres tests comme la température ou l'hygrométrie par exemple.

Code : Tout sélectionner

 --Niveau de batterie
 --Exemple 11 : être averti si la batterie d'un périphérique est inférieure à un seuil bas
--avec fréquence de notifications en minutes et notification des heures calmes
  {
 "low_battery_level": 30,
 "high_threshold_temp": 25,
 "frequency_notifications": 120,
 "quiet_hours":"23:00-07:15"
  }
Peut également s'utiliser seul

Code : Tout sélectionner

 --Niveau de batterie
  {
 "low_battery_level": 30,
 "frequency_notifications": 120,
 "quiet_hours":"23:00-07:15"
  }

Code : Tout sélectionner

--batterie
if device.batteryLevel ~= nil and device.batteryLevel ~= 255 and settings.low_battery_level ~= nil then 
	--domoticz.log('le niveau de batterie de '.. device.name .. ' est de  ' .. device.batteryLevel .. '%', domoticz.LOG_INFO)
	if settings.low_battery_level ~= nil and device.batteryLevel < settings.low_battery_level then  -- seuil bas batterie
		domoticz.log(device.name .. ' a un niveau de batterie de ' .. device.batteryLevel..'%', domoticz.LOG_INFO)
		message = 'Le niveau de batterie '.. device.name .. ' est inférieur au seuil défini ('..settings.low_battery_level..'%). Valeur : '..tostring(domoticz.utils.round(device.batteryLevel, 1)) ..'%'
		domoticz.helpers.managedNotify(domoticz, subject, message, SubSystem, frequency_notifications , quiet_hours)
	end    
end
Ne pas mettre dans la boucle générale, mais par exemple avant le test suivant :

Code : Tout sélectionner

if device.state == 'Off' or device.state == 'Close' then    
      -- Alarme dispositif inactif

Re: [DZVents]script de notifications ultime (mais pas que)

Publié : 07 avr. 2019, 13:50
par denis_brasseur
Un petit up, pour 2 raisons, parce que déjà je pense que ce script est une merveille, et également pour faire part de quelques modification sans prétention mais qui correspondent à mon besoin.

Concernant "la merveille", ce script en plus de remplacer quelques autres script, et combiné aux autres possibilités de celui ci, permet vraiment de faire des merveilles.

J'ai apporté quelques modifs à ce script, en plus du niveau de batterie, j'ai ajouté la notification pour être averti si le niveau de signal d'un périphérique est inférieure un seuil bas, notification pour seuil haut/bas pour les périphériques puissance (WActual) et intensité (Current).

J'ai également ajouté la possibilité de n'avoir une notification que si la valeur haute ou basse est dépassée pendant un temps défini (en mn).

Pour une sonde température Oregon, j'ai régulièrement une notification de température pour une température haute qui ne correspond pas à une valeur mesurée ("duration_exceeded_temp": 10).
Idem pour "duration_exceeded_hr": 10", permet de ne pas avoir de notification à la première douche, mais au bout de 10 mn si la valeur est dépassée pendant 10 mn.

Code : Tout sélectionner

Etre averti si la température ou l'hygrométrie dépasse les seuils minimal ou maximal
pendant un certain nombre de minutes
avec fréquence de notifications en minutes et notification des heures calmes
{
 "low_threshold_temp": 10,
 "high_threshold_temp": 40,
 "duration_exceeded_temp": 10,
 "low_threshold_hr": 25,
 "high_threshold_hr": 75,
 "duration_exceeded_hr": 10,
 "frequency_notifications": 60,
 "quiet_hours":"23:00-07:15"
  }
Le post n'ayant pas à mon avis pas été jugé à sa juste valeur, je vous laisse vous le remettre en mémoire.

Si vous êtes intéressé par les modifications, n'hésitez pas.

Re: [DZVents]script de notifications ultime (mais pas que)

Publié : 07 avr. 2019, 14:07
par papoo
Je suis intéressé 😃