[Python] Interfacer un INA219 avec une passerelle Domoticz sous Raspberry Pi
Publié : 30 nov. 2020, 11:10
Bonjour,
Pour ceux qui souhaitent mesurer des consommations continues de faible puissance (~80W), comme par exemple sur un petit panneau photovoltaïque, il existe un composant intéressant qui est l'INA219.
En cherchant j'ai pas trouvé grand chose pour interfacer directement l'INA219 avec la passerelle sans passer par un arduino, ESP easy ou autre carte déportée.
Dans mon cas la passerelle Domoticz est une Raspberry Pi, mais la démarche peut s’adapter à toute autre plateforme linux capable de s'interfacer avec le capteur.
Voici les sources dont je me suis inspiré:
Tuto INA219 + raspberry pi
Interfacer un capteur DHT avec Domoticz
L'idée est donc de récupérer les données en I2C en branchant le capteur suivant le schéma:
Dans une console de la Raspberry, activer l’I2C en tapant :
Aller dans interfacing option->I2C->Yes
Installation de i2c-tools pour vérifier le branchement du capteur:
Faire un reboot
Scanner le bus I2C :
On voit apparaître l'INA219 à l'adresse 40:
Le capteur est bien branché.
Installation de Python et des dépendances
Mise à jour générale:
Installation de Python si ce n'est pas déjà fait:
Installation de la librairie Python requests pour Domoticz:
Installation de la librairie Python pour l'INA219:
Vérifier que les librairies sont bien installées:
Doivent apparaitre pi-ina219 et requests
Faire apparaître la puissance INA219 sous Domoticz
Sous Domoticz, créer un nouveau capteur en allant dans Configuration->Matériel, lui donner un nom (ex : « Puissance INA219 »), puis sélectionner le type « Dummy », cliquer sur « Ajouter » :
Ensuite une nouvelle ligne apparaît au-dessus cliquer sur « créer un capteur virtuel » :
Donner un nom au capteur (ex « Puissance INA219 »), choisir le type « Custom Sensor» et remplir « mW » comme nom de l’axe, puis cliquer sur OK :
Aller dans Configuration->Dispositifs vérifier qu’il y a bien le nouveau capteur, et noter l’index « Idx » (ici 2) :
Le nouveau capteur doit apparaitre dans l’onglet « Mesures » de Domoticz, on peut cliquer sur l’étoile pour l’ajouter sur la page d’accueil :
Nous allons maintenant créer un script Python qui va lire la valeur de puissance de l’INA219 et l’envoyer via une requête à Domoticz.
Pour cela, dans la console de la Raspberry Pi, se placer dans le dossier :
Créer un nouveau script, ici nommé « powersensor.py » (ne surtout pas l'appeler « ina219.py »!)
Coller le script suivant en prenant soin de bien renseigner l’index du capteur précédemment créé, et éventuellement l’utilisateur et mot de passe s’il y en a un (sinon laisser tel quel) :
Sauvegarder puis quitter (Ctrl-S Ctrl-X)
Ensuite rendre le script exécutable :
Tester le bon fonctionnement du script :
Le script doit afficher la puissance mesurée (en mW) et la requête :
Pour que le script s’exécute tout seul à intervalles réguliers, nous allons utiliser le planifieur des taches cron :
La première fois qu’on lance crontab il faut sélectionner l’éditeur, dans mon cas j’utilise nano
Puis le fichier des taches doit s’ouvrir, ajouter la ligne suivante qui permet de lancer le script toutes les 1 minutes:
Sauvegarder puis quitter (Ctrl-S Ctrl-X)
Attendre quelques minutes et vérifier les valeurs sous Domoticz :
Voilà !
Pour ceux qui souhaitent mesurer des consommations continues de faible puissance (~80W), comme par exemple sur un petit panneau photovoltaïque, il existe un composant intéressant qui est l'INA219.
En cherchant j'ai pas trouvé grand chose pour interfacer directement l'INA219 avec la passerelle sans passer par un arduino, ESP easy ou autre carte déportée.
Dans mon cas la passerelle Domoticz est une Raspberry Pi, mais la démarche peut s’adapter à toute autre plateforme linux capable de s'interfacer avec le capteur.
Voici les sources dont je me suis inspiré:
Tuto INA219 + raspberry pi
Interfacer un capteur DHT avec Domoticz
L'idée est donc de récupérer les données en I2C en branchant le capteur suivant le schéma:
Dans une console de la Raspberry, activer l’I2C en tapant :
Code : Tout sélectionner
sudo raspi-configInstallation de i2c-tools pour vérifier le branchement du capteur:
Code : Tout sélectionner
sudo apt-get install -y i2c-toolsCode : Tout sélectionner
sudo rebootScanner le bus I2C :
Code : Tout sélectionner
sudo i2cdetect -y 1On voit apparaître l'INA219 à l'adresse 40:
Le capteur est bien branché.
Installation de Python et des dépendances
Mise à jour générale:
Code : Tout sélectionner
sudo apt-get update
sudo apt-get upgradeCode : Tout sélectionner
sudo apt-get install build-essential python-dev python-openssl
sudo apt-get install python-pipCode : Tout sélectionner
sudo pip install requestsCode : Tout sélectionner
sudo pip install pi-ina219Code : Tout sélectionner
pip listFaire apparaître la puissance INA219 sous Domoticz
Sous Domoticz, créer un nouveau capteur en allant dans Configuration->Matériel, lui donner un nom (ex : « Puissance INA219 »), puis sélectionner le type « Dummy », cliquer sur « Ajouter » :
Ensuite une nouvelle ligne apparaît au-dessus cliquer sur « créer un capteur virtuel » :
Donner un nom au capteur (ex « Puissance INA219 »), choisir le type « Custom Sensor» et remplir « mW » comme nom de l’axe, puis cliquer sur OK :
Aller dans Configuration->Dispositifs vérifier qu’il y a bien le nouveau capteur, et noter l’index « Idx » (ici 2) :
Le nouveau capteur doit apparaitre dans l’onglet « Mesures » de Domoticz, on peut cliquer sur l’étoile pour l’ajouter sur la page d’accueil :
Nous allons maintenant créer un script Python qui va lire la valeur de puissance de l’INA219 et l’envoyer via une requête à Domoticz.
Pour cela, dans la console de la Raspberry Pi, se placer dans le dossier :
Code : Tout sélectionner
cd ~/domoticz/scripts/Code : Tout sélectionner
sudo nano powersensor.pyCode : Tout sélectionner
#!/usr/bin/python
# -*- coding: latin-1 -*-
import os
import sys
import socket
from requests.auth import HTTPBasicAuth
from ina219 import INA219
import requests
############# Parametres #################################
#recupération de l'IP utilisée
from subprocess import check_output
host_return= check_output(['hostname', '-I'])
domoticz_ip=host_return.split()[0]
domoticz_port='8080'
# a changer si nécéssaire:
user=''
password=''
domoticz_idx=2 # a changer en fonction de l'index attribué par domoticz
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# le fomat pour le capteur custom est celui ci:
#/json.htm?type=command¶m=udevice&idx=IDX&nvalue=0&svalue=VALUE;
def maj_widget(val_url):
requete='http://'+domoticz_ip+':'+domoticz_port+val_url
r=requests.get(requete,auth=HTTPBasicAuth(user,password))
if r.status_code != 200:
print "Erreur API Domoticz"
#recuperation de la puissance mesuree par l'INA219
ina = INA219(0.1)
ina.configure()
puissance=ina.power()
if puissance is not None:
print('Puissance={0:0.1f}'.format(puissance))
url='/json.htm?type=command¶m=udevice&idx='+str(domoticz_idx)
url+='&nvalue=0&svalue='
url+=str('{0:0.1f};0').format(puissance)
maj_widget(url)
else:
print('Probleme avec la lecture de l INA219')
sys.exit(1)
Ensuite rendre le script exécutable :
Code : Tout sélectionner
sudo chmod +x powersensor.pyCode : Tout sélectionner
sudo python powersensor.pyPour que le script s’exécute tout seul à intervalles réguliers, nous allons utiliser le planifieur des taches cron :
Code : Tout sélectionner
crontab –ePuis le fichier des taches doit s’ouvrir, ajouter la ligne suivante qui permet de lancer le script toutes les 1 minutes:
Code : Tout sélectionner
*/1 * * * * sudo /home/pi/domoticz/scripts/powersensor.pySauvegarder puis quitter (Ctrl-S Ctrl-X)
Attendre quelques minutes et vérifier les valeurs sous Domoticz :
Voilà !