La version de Domoticz v2152 généralise la récupération par Domoticz de l’état des batteries des périphériques Z-Wave.
Certains de nos équipements étant relativement inaccessibles,
Voyons comment récupérer le % de batteries restant et se faire avertir en dessous d’un seuil, histoire d’avoir le temps de changer les piles.
Ce pourcentage est visible depuis le menu de configuration des dispositifs.
C’est celui ci que nous récupérerons grâce à un script python qui alimente un widget « Pourcentage » auquel nous pourrons associer des notifications.
N.B les versions récentes de Domoticz (>2563 de Juin 2015) incluent nativement ce contrôle automatique, utilisez cet article pour en savoir plus.
I – Domoticz
Commençons par créer un virtual sensor Pourcentage
Comme d’habitude dans « Matériel » et « Create virtual sensor » créons un capteur « Pourcentage »
Puis dans l’onglet des dispositifs, utiliser la flèche verte pour le nommer et le « pousser » dans l’onglet. Noter son Idx (38 ici)
Récupérons l ‘IDX du périphérique Z-wave pour lequel l’etat des batteries m’intéresse , ici 105.
2 – Prérequis
L’idée est d’interroger Domoticz pour récupérer l’information sur la batterie de ce composant z-wave.
On utilise l’API Json de Domoticz qui renvoie l’état d’un périphérique et comme depuis la version 2152 on a le % de batterie on peut traiter cela facilement.
L’url interrogée est celle ci : avec IDX qui est la valeur du périphérique Z-Wave
Donc si dans votre navigateur vous lancez un
http://ip:port/json.htm?type=devices&rid=IDX_ZWave_quivabien
Vous obtenez cela :
On voit que c’est le terme « BatteryLevel » qui contient le niveau des batteries et qu’il y a un guillemet,espace,deux point avant la valeur.
Bien,
3 – Le script de récupération
Le script python nécessite la bibliothèque requests un sudo pip install requests fera l’affaire. Si le module pip n’est pas présent : sudo apt-get install python-pip
Dans le script on peut placer debug=1 pour voir ce que l’on reçoit de Domoticz.
On y définit :
- l’adresse et le port Domoticz, l’Idx du Z-wave a interroger,
- l’idx du virtual sensor, le terme a rechercher dans la chaine envoyée par Domoticz (BatteryLevel) attention aux majuscules/minuscules.
- N.B ce script doit pouvoir extraire n’importe quoi de n’importe quelle url JSON Domoticz dans le bloc JSON ‘result’.
#!/usr/bin/python
# -*- coding: utf-8 -*-
# la 2eme version du script python pour les batteries
# utilise le dict JSON que renvoie Domoticz
# Domoticz renvoie 2 pavés de données ,1 pave concernant les géneralités (long/lat, status ...)
# on peut aller chercher ces données par un r[terme] si les données sont dans la partie haute (avant le result[
# 1 autre pavé qui content les datas spécifiques au capteur en question , ces valeurs sont dans la liste result
# on utilise alors r['result'][0][terme] pour aller chercher dans le dict de la liste result
# il faut le module requests
# sudo pip install requests
import time
import requests
from requests.auth import HTTPBasicAuth
############# Parametres #################################
#debug = 1 on affiche les chaines de caracteres recues
debug=1
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# les parametres de Domoticz
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
domoticz_ip='192.168.1.81'
domoticz_port='8080'
user=''
password=''
# l'idx du peripherique ZWave a interroger pour batterie (cf Idx Domoticz)
periph_zwave_idx='105'
#terme a rechercher
terme='BatteryLevel'
# ici l'idx Domoticz du widget a alimenter avec la valeur lue
# un widget pourcentage est adatpté pour les capacité des batteries
idx_widget_pourcent='28'
# fin du parametrage #
############### fin des parametres #############################
############### ce qui suit est repute fonctionner ############
def maj_widget(valeur_batterie):
requete='http://'+domoticz_ip+':'+domoticz_port+json_url_text1+idx_widget_pourcent+json_url_text2+valeur_batterie
r=requests.get(requete,auth=HTTPBasicAuth(user,password))
# l URL Domoticz a interroger pour recuperer les infos est type=devices&rid=XXX
json_url1='/json.htm?type=devices&rid='
requete='http://'+domoticz_ip+':'+domoticz_port+json_url1+periph_zwave_idx
# l URL Domoticz pour le widget virtuel
json_url_text1='/json.htm?type=command¶m=udevice&idx='
json_url_text2='&nvalue=0&svalue='
#http://IP:PORT/json.htm?type=command¶m=udevice&idx=mon_idx&nvalue=0svalue=POURCENTAGE
##### main ##
result={}
r=requests.get (requete).json()
valeur_batterie=str(r['result'][0][terme])
if debug==1:
print r
print valeur_batterie
maj_widget(valeur_batterie)
adaptez ce qui est nécessaire, puis un chmod +x sur le script pour le rendre exécutable.
Utilisez l’option debug=1 pour consulter les messages envoyés par Domoticz et ce que le script décode.
N.B : En python 3 pensez à parenthèser les print en bas et à modifier la ligne
r=requests.get (requete).json()
en
r=requests.get (requete).json
4 – Les notifications
Il suffit maintenant d’établir une notification sur ce composant pour être averti à bon escient.
Dupliquez et adaptez ce script pour chaque capteur dont vous voulez suivre la consommation.
5 – Déclenchement régulier
Utiliser crontab -e pour déclencher votre script une fois par jour.