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

Vous avez crée 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.
Soyez précis quant aux prérequis, les manips à faire pour que votre bijou fonctionne (des chmod ?, un apt-get à faire ...)
Décrivez précisément son fonctionnement
Entourez votre code source avec les balises Quote grâce au bouton correspondant
denis_brasseur
Messages : 673
Enregistré le : 24 déc. 2018, 17:05
Localisation : (26)

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

Message par denis_brasseur »

jeanmars a écrit : 21 févr. 2021, 22:54 Il n'y aurait pas un fonction à appeler depuis le .lua pour afficher tous les champs du device histoire de voir un peu plus ce que c'est?
Tu peux afficher les détails d'un périphérique comme ceci depuis un navigateur, en personnalisant IP, port et idx

Code : Tout sélectionner

http://192.168.1.106:8060/json.htm?type=devices&rid=3827
Voici les éléments intéressant qui en ressortent :
"Counter": "0.000",
"CounterDeliv": "0.000",
"CounterDelivToday": "0.000 kWh",
"CounterToday": "0.000 kWh",
"CustomImage": 0,
"Data": "0;0;0;0;0;0",

"SubType": "Energy",
J'ai utilisé à tort sensorType pour un P1, alors qu'il peut plutôt s'agir de counterToday.
Peut etre avec ceci

Code : Tout sélectionner

if device.counterToday~= nil and (settings.high_threshold_smart_meter ~= nil or settings.low_threshold_smart_meter ~= nil) then

Pi3 + DD PiDrive + RFXtrx433 + AEON Labs ZW090
7 Modules fil pilote ZMNHJD1
2 détecteur fumées CHACON 34131
5 Bresser Capteur thermo/hygro
1 contacteur porte Philio PST02-1A Z
OWL Micro+ CM180
D2L LINKY
FGR-223 "Roller Shutter 3"

denis_brasseur
Messages : 673
Enregistré le : 24 déc. 2018, 17:05
Localisation : (26)

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

Message par denis_brasseur »

Apres création d'un device P1, ceci à l'air de fonctionner :

Code : Tout sélectionner

--[[
être averti si un périphérique P1 smart meter dépasse les seuils minimal ou maximal de la valeur de counterToday
    avec fréquence de notifications en minutes et notification des heures calmes

  {
 "low_threshold_counter_today": 10,
 "high_threshold_counter_coday": 40,
 "frequency_notifications": 60,
 "quiet_hours":"23:00-07:15"
  }
  ]]--
 -----
elseif device.counterToday ~= nil and (settings.high_threshold_counter_today ~= nil or settings.low_threshold_counter_today ~= nil)  then
--alarme p1 smart meter
	logWrite('La valeur mesurée par '.. device.name .. ' est de  ' .. tostring(dz.utils.round(device.counterToday, 1)), dz.LOG_INFO)
	--str = tunumber(device.counterToday:gsub(' kWh', ''))
	if settings.low_threshold_counter_today ~= nil and tonumber(device.counterToday) < settings.low_threshold_counter_today then -- seuil bas %
		logWrite(device.name .. ' a un seuil bas défini à  ' .. settings.low_threshold_counter_today, dz.LOG_INFO)
		message = 'La valeur mesurée par '.. device.name .. ' est inférieure au seuil défini ('..settings.low_threshold_counter_today..'). Valeur : '..tostring(dz.utils.round(device.counterToday, 1))
		dz.helpers.managedNotify(dz, subject, message, notificationTable(subSystems), frequency_notifications, quiet_hours)
	end
	if settings.high_threshold_counter_today ~= nil and tonumber(device.counterToday) > settings.high_threshold_counter_today then -- seuil haut %
		logWrite(device.name .. ' a un seuil haut défini à  ' .. settings.high_threshold_counter_today, dz.LOG_INFO)
		message = 'La valeur mesurée par '.. device.name ..' est supérieure au seuil défini ('..settings.high_threshold_counter_today..'). Valeur : '..tostring(dz.utils.round(device.counterToday, 1))
		dz.helpers.managedNotify(dz, subject, message, notificationTable(subSystems), frequency_notifications, quiet_hours)
	end
elseif
----- 
J'ai remplacé low_threshold_smart_meter et high_threshold_smart_meter par low_threshold_counter_today et high_threshold_counter_today par souci de lisibilité, mais la modif porte bien sur device.counterToday
Pi3 + DD PiDrive + RFXtrx433 + AEON Labs ZW090
7 Modules fil pilote ZMNHJD1
2 détecteur fumées CHACON 34131
5 Bresser Capteur thermo/hygro
1 contacteur porte Philio PST02-1A Z
OWL Micro+ CM180
D2L LINKY
FGR-223 "Roller Shutter 3"

jeanmars
Messages : 7
Enregistré le : 20 févr. 2021, 18:16

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

Message par jeanmars »

Salut Denis,

merci pour ces modifs, j'ai cependant un comportement un peu différent chez moi:
counterToday est toujours à 0; par contre counter semble refléter la consommation journalière (ce qui devrait me convenir). Pourtant j'ai autorisé l'appli domoticz à récupérer les valeurs toutes les 30 min. J'ai peu être raté un truc.

Autre chose, pour tester le device de type smart P1, il ne vaudrait pas mieux tester le champ Type et le comparer à "P1 Smart Meter" plutôt que de tester l'existence de device.counterToday qui pourrait être présent pour d'autres types de device?

Merci pour ton aide,
Jean

denis_brasseur
Messages : 673
Enregistré le : 24 déc. 2018, 17:05
Localisation : (26)

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

Message par denis_brasseur »

jeanmars a écrit : 22 févr. 2021, 22:38 counterToday est toujours à 0; par contre counter semble refléter la consommation journalière (ce qui devrait me convenir). Pourtant j'ai autorisé l'appli domoticz à récupérer les valeurs toutes les 30 min. J'ai peu être raté un truc.
Si tu utilise la récupération du compteur via le plugin en lien avec le site Enedis, les données ne sont remonté qu'a J+1, dons pas de conso instantanée ni de conso dans le counterToday.
jeanmars a écrit : 22 févr. 2021, 22:38
Autre chose, pour tester le device de type smart P1, il ne vaudrait pas mieux tester le champ Type et le comparer à "P1 Smart Meter" plutôt que de tester l'existence de device.counterToday qui pourrait être présent pour d'autres types de device?
C'est effectivement un autre solution. Je me suis contenté de reprendre le code initial de papoo qui est basé sur lss valeurs présentes des devices. Regarde la valeur remontée dans le device et qui correspond à ton utilisation.
denis_brasseur a écrit : 22 févr. 2021, 05:10
Tu peux afficher les détails d'un périphérique comme ceci depuis un navigateur, en personnalisant IP, port et idx

Code : Tout sélectionner

http://192.168.1.106:8060/json.htm?type=devices&rid=3827
Voici les éléments intéressant qui en ressortent :
"Counter": "0.000",
"CounterDeliv": "0.000",
"CounterDelivToday": "0.000 kWh",
"CounterToday": "0.000 kWh",
,
Pour en revenir au test du device, par exemple, if device.percentage ~= nil testera tout les devices pourcentage

Code : Tout sélectionner

if description ~= nil and description ~= '' and j ~= nil then
     local ok, settings = pcall( dz.utils.fromJSON, description)
     if ok and settings then
          if device.counterToday ~= nil and (settings.high_threshold_counter_today ~= nil or settings.low_threshold_counter_today ~= nil)  then
Le test ne se fera que pour les device avec champ description renseigné et au bon format, avec counterToday ET une valeur au bon format json dans le champ description.
Si counterToday est présent pour un autre dispositif, il doit etre associé à une description au bon format json pour être testé.
Pi3 + DD PiDrive + RFXtrx433 + AEON Labs ZW090
7 Modules fil pilote ZMNHJD1
2 détecteur fumées CHACON 34131
5 Bresser Capteur thermo/hygro
1 contacteur porte Philio PST02-1A Z
OWL Micro+ CM180
D2L LINKY
FGR-223 "Roller Shutter 3"

jyboo
Messages : 1
Enregistré le : 11 avr. 2021, 22:27

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

Message par jyboo »

Bonjour,

j'ai 2 questions par rapport à ce script.
1. de ce que je comprend, il faut
- mettre le script dans le chemin indiqué
- mettre des droits étendus sur le fichier (pour une lecture du script par le user "domoticz")
- paramétrer l'objet à surveiller, en indiquant un format json des attributs de notification
- .... et rajouter une notification pour l'objet ?

2. est-il possible que cela execute un script shell au lieu d'envoyer une notification ?

Je vous explique: le domoticz n'a pas accès à internet, mais peut envoyer des SMS, par l'intermédiaire d'une clé huawei (c'est notamment pour surveiller une cave). l'idée, c'est de savoir quand un device n'est plus joignable depuis X temps (que les piles du capteur sont usées...) et que cela puisse notifier par SMS la nécessité de changer les piles.

Une petite idée pour le second point ?

Répondre