Tiré de l’article suivant  : http://www.domotique-info.fr/2015/04/creer-un-systeme-de-videosurveillance-et-plus-performant-et-a-moindre-cout/

Le principe :

Capturer une image, la réduire à 1 pixel et relever la luminosité de ce pixel pour alimenter un capteur domoticz.

Pré-requis :

Avoir installer ImageMagick qui permet au raspberry la command « convert » qui nous permettra de réduire notre photo à 1 pixel

Connaitre l’URL de sa caméra IP permettant de récupérer une image.
Pour la foscam j’utilise celle ci :
http://%5BIP FOSCAM]/snapshot.cgi?user=[USER]&pwd=[MOT DE PASSE]&count=0

sudo apt-get install imagemagick

Avoir créé un capteur virtuel pourcentage dans Domoticz et connaitre son idx.

Le script python Domoticz :

import os, sys
from subprocess import Popen, PIPE

process = Popen(['wget','-O','/home/pi/shot'+'foscam'+'.jpg','[IP FOSCAM]'+'/snapshot.cgi?user=[USER]&pwd=[MOT DE PASSE]&count=0'], stdout=PIPE)
(output, err) = process.communicate()
exit_code = process.wait()
process = Popen(["convert /home/pi/shot"+'foscam'+".jpg -colorspace hsb -resize 1x1 txt: | grep \",*%)\" | cut -f 6 -d ',' | cut -c -5"], stdout=PIPE, shell=True)
(output, err) = process.communicate()
exit_code = process.wait()
value = str(output).replace('\n','')
url = 'http://127.0.0.1:8080/json.htm?type=command&param=udevice&idx=[IDX Domoticz]&nvalue=0&svalue=' + value
r = requests.get(request)

Exécution du script toutes les 5 mins :

Ajouter une entrée dans la crontab avec « crontab -e »

*/5 * * * * python ./domoticz/scripts/pyhon/luminosite_test.py

Et voilà le travail :

domo1

Note : La vision nocturne de la caméra (infra rouge) perturbe la mesure car la luminosité reste élevée dans la nuit.

Le script python OpenHAB :

Avant d’utiliser Domoticz, j’utilisé OpenHAB pour lequel j’avais déjà mis en place cette solution, tant qu’on y est je le post aussi.

Le premier paramètre d’appel du script est l’IP de la caméra IP et le second est le nom de l’items dans OpennHAB.

import os, sys
import requests
import base64
from subprocess import Popen, PIPE
process = Popen(['wget','-O','/home/pi/shot'+'foscam'+'.jpg',sys.argv[1]+'/snapshot.cgi?user=[USER]&pwd=[MOT DE PASSE]&count=0'], stdout=PIPE)
(output, err) = process.communicate()
exit_code = process.wait()
process = Popen(["convert /home/pi/shot"+sys.argv[2]+".jpg -colorspace hsb -resize 1x1 txt: | grep \",*%)\" | cut -f 6 -d ',' | cut -c -5"], stdout=PIPE, shell=True)
(output, err) = process.communicate()
exit_code = process.wait()
print output
url = 'http://192.168.0.10:8080/rest/items/'+sys.argv[2]+'/state'
auth = base64.encodestring('%s:%s'%('[LOGIN OPENHAB]','[MOT DE PASSE]')).replace('\n', '')
basic_header= {#"Authorization" : "Basic %s" %auth, 
}
print basic_header
value = str(output).replace('\n','')
print '-' + value.replace('\n','')+'-'
req = requests.put(url, data=value,auth=('[LOGIN OPENHAB]','[MOT DE PASSE]),headers={'content-type':'text/plain'}) if req.status_code != requests.codes.ok: req.raise_for_status()

dans items :

Number Luminosite_Foscam "Luminosité SAM [%3.2f]" <camera>

dans sitemap

Text item=Luminosite_Foscam

dans rules

rule "REfresh luminosite Foscam"
 when 
 Time cron "0 * * * * ?" // every minute ("*/30 * * * * ?" Every 30 second calc luminosity)
 then
 executeCommandLine("python@@/opt/openhab-1.6.2/configurations/scripts/luminosite_ipcam.py@@http://[IP FOSCAM]@@Luminosite_Foscam");
end