[DzVents] Script de notifications ultime (mais pas que)

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

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

Message 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.
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

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

Message 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.
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

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

Message 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)
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

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

Message par papoo »

Il faut une version récente de dzvents
Tu as quelle version de domoticz/dzvents ?
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

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

Message 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 ;)
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

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

Message 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
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

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

Message par papoo »

merci
j'ai ajouté tes modification au script
j'en ai profité aussi pour ajouter la gestion des devices Alert
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

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

Message 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
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

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

Message 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.
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

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

Message par papoo »

Je suis intéressé 😃
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
Répondre