But :
lire une information d'un raspberry distant, et l'envoyer vers Jeedom
Ce tuto a pour but d'expliquer au travers un exemple fonctionnel à ce jour, comment détecter un changement d'état sur une information cablée en TOR.
Prérequis :
Un raspberry type B, le B+ ne devrait pas poser de probleme (pas testé)
Savoir câbler un capteur sur les gpio d'un raspberry s'y connaitre un minimum en SSH et python (niveau débutant)
Rasbian wheezy fonctionelle, ce script à été développé sur la version 2014-06-20-wheezy-raspbian.img
et bien sur un jeedom accessible sur votre réseau local.
Principe retenu
L'information cablée sur le raspberry distant est "captée" puis envoyé à jeedom à l'aide d'un plugin type virtuel
Le code
A mettre sur le raspberry distant, par exemple /home/pi/scripts/ !#/usr/bin/env python
Les imports nécessaires:
Code : Tout sélectionner
import time
import RPi.GPIO as GPIO
import urllib
import os as os
Code : Tout sélectionner
#Configuration
ip_jeedom = "XXX.XXX.XXX.XXX"
Api_key = "XXXX"
Code : Tout sélectionner
#Configuration Num GPIO
N_GPIO = XX #METTRE ICI LE NUMERO DU GPIO CONCERNE EX:22
#Num Virtual
N_virtual = XXXX #METTRE ICI LE NUMERO DU GPIO CONCERNE EX:1977
Code : Tout sélectionner
def My_time():
temp = time.strftime('%H:%M:%S',time.localtime())
return str(temp) + " : "
Code : Tout sélectionner
def Jeedom(id,value):
base = "http://" + ip_jeedom + "/jeedom/core/api/jeeApi.php?api="
type = "virtual"
req = base + Api_key + "&type=" + type + "&id=" + str(id) + "&value=" + str(value)
urllib.urlopen(req)
#print "Req Virtuel : " + My_time() + req
Code : Tout sélectionner
#print "Req Virtuel : " + My_time() + req en supprimant le # , l'affichage de le requête s'affiche
Code : Tout sélectionner
def affiche_on(what):
Jeedom(N_virtual,1)
time.sleep(2)
Jeedom(N_virtual,0)
Un peu de conf pour les GPIO (pour les détails, voir google)
Code : Tout sélectionner
#Conf GPIO
GPIO.setwarnings(False)
GPIO.setmode( GPIO.BCM )
GPIO.setup( N_GPIO, GPIO.IN, pull_up_down=GPIO.PUD_UP )
Code : Tout sélectionner
GPIO.add_event_detect(N_GPIO, GPIO.RISING, callback=affiche_on, bouncetime=200)
Une boucle pour "rester" dans le programme et testé une interruption de sortie
Code : Tout sélectionner
try:
while 1:
time.sleep(0.02)
except KeyboardInterrupt:
GPIO.cleanup() # clean up GPIO on CTRL+C exit
GPIO.cleanup() # clean up GPIO on normal exit
Le lancement de ce script doit se faire en ssh avec une commande du genre :
Code : Tout sélectionner
sudo python /home/pi/scripts/NOM_DU_SCRIPT.py
si tout va bien et que vous avez décommenter le # du print, vous voyez les trames vers jeedom partir !
donc un control-c permet de stopper proprement le programme
Evolution :
1) rendre le script paramétrable pour utiliser le même code pour plusieurs Entrées tor !
2) lancer le programme au démarrage du raspberry
Une méthode : modifier le fichier rc.local, fichier lancé lors du démarrage du raspberry, se connecter en ssh et faire :
Code : Tout sélectionner
sudo nano /etc/rc.local
"sudo /usr/bin/python /home/pi/shares/<NOM DE VOTRE SCRIPT>.py" AVANT la ligne exit 0,
voici un exemple:
Code : Tout sélectionner
# !/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
# By default this script does nothing.
#
# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi
#lancement du script de detection de presence
sudo /usr/bin/python /home/pi/shares/event_gpio.py
exit 0