[DzVents] Script de notifications ultime (mais pas que)
Re: [DZVents]script de notifications ultime (mais pas que)
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.
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.
-
denis_brasseur
- Messages : 898
- Inscription : 24 déc. 2018, 17:05
- Localisation : (26)
Re: [DZVents]script de notifications ultime (mais pas que)
C'est clair, et efficace.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.
Je regarde déjà pour exploiter les possibilités existantes, je n'hesiterais pas a proposer et à demander.si tu as idées d'autres fonctionnalités, je me ferais un plaisir de tenter de les ajouter.
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)
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 :
C'est ici que ça bloque :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)
Code : Tout sélectionner
domoticz.helpers.managedNotify(domoticz, subject, message, SubSystem, frequency_notifications , quiet_hours)Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
Re: [DZVents]script de notifications ultime (mais pas que)
Il faut une version récente de dzvents
Tu as quelle version de domoticz/dzvents ?
Tu as quelle version de domoticz/dzvents ?
-
denis_brasseur
- Messages : 898
- Inscription : 24 déc. 2018, 17:05
- Localisation : (26)
Re: [DZVents]script de notifications ultime (mais pas que)
il s'agit de la 2.4.6papoo a écrit : 10 mars 2019, 09:11 Il faut une version récente de dzvents
Tu as quelle version de domoticz/dzvents ?
Je pense que quelque chose avait dut m'échapper dans l'utilisation de la fonction universelle de notification.dzVents Version: 2.4.6
J'ai placé la fonction managedNotify sous dzVents/scripts/global_data.lua, cela fonctionne maintenant.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
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)
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
Le code à insérer dans les tests existants
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"
} 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
endPi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
Re: [DZVents]script de notifications ultime (mais pas que)
merci
j'ai ajouté tes modification au script
j'en ai profité aussi pour ajouter la gestion des devices Alert
j'ai ajouté tes modification au script
j'en ai profité aussi pour ajouter la gestion des devices Alert
-
denis_brasseur
- Messages : 898
- Inscription : 24 déc. 2018, 17:05
- Localisation : (26)
Re: [DZVents]script de notifications ultime (mais pas que)
Ajout du test de niveau de batterie, se cumule avec les autres tests comme la température ou l'hygrométrie par exemple.
Peut également s'utiliser seul
Ne pas mettre dans la boucle générale, mais par exemple avant le test suivant :
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"
}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
endCode : Tout sélectionner
if device.state == 'Off' or device.state == 'Close' then
-- Alarme dispositif inactifPi3 + 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)
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.
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.
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"
}Si vous êtes intéressé par les modifications, n'hésitez pas.
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
Re: [DZVents]script de notifications ultime (mais pas que)
Je suis intéressé 