Note: Cela tourne sur une VM Debian 8.
Note: Cela répond à mon besoin et rien de plus .
Récupérer une alarme ZoneMinder dans Jeedom:
Principe:
Faire tourner en boucle un petit script bash (note: à lancer avec la commande bash et pas sh) afin d’écouter le daemon zmtrigger.pl; lors de la détection d'une alarme, on intercepte le message (par ex 10|off|1513113876|119), on identifie l'Id de la camera concernée (1iere valeur de la ligne), et on lance l'action que l'on veut. Dans mon cas, je met à jour un virtuel Jeedom binaire.
Exemple de script (récupéré sur le Net):
Code : Tout sélectionner
#!/bin/bash
#--------------------------------------------------------------------------
# Detection des alarmes dans ZoneMinder
#--------------------------------------------------------------------------
# Script permettant d'ecouter le daemon ZoneMinder zmtrigger.pl,
# identifier les alarmes et faire une action en fonction.
# Dans mon cas, on pilote un virtuel Jeedom
#-------------------------------------
# Ekinox - 12/12/2017 - Creation
#-------------------------------------
ZMHOST=192.168.1.6
ZMPORT=6802
CURL='/usr/bin/curl'
CURLARGS="-f -s -S -k"
# Connect TCP socket to ZoneMinder zmtrigger.pl
exec 6<>/dev/tcp/${ZMHOST}/${ZMPORT}
# Read ZM events from zmtrigger.pl
while read <&6
do
# Show the line on standard output just for debugging.
# echo "${REPLY}" >&1
case "${REPLY}" in
*\|on\|*)
CAM=${REPLY%%|*} # extract camera number
# echo "${CAM} on"
#--------- Mettre ici le code à traiter sur alarme ON (DEBUT)
# MAJ Info Jeedom
wget --output-document=/dev/null "http://192.168.1.2/core/api/jeeApi.php?api=votre_API&type=virtual&id=4983&value=on"
#--------- Mettre ici le code à traiter sur alarme OFF (FIN)
;;
*\|off\|*)
CAM=${REPLY%%|*} # extract camera number
# echo "${CAM} off"
#--------- Mettre ici le code à traiter sur alarme OFF (DEBUT)
# MAJ Info Jeedom
wget --output-document=/dev/null "http://192.168.1.2/core/api/jeeApi.php?api=votre_API&type=virtual&id=4983&value=off"
#--------- Mettre ici le code à traiter sur alarme OFF (FIN)
;;
esac
done
Principe:
Jeedom pousse une commande, en TELNET (y'a sans doute plus propre mais je n'ai trouvé que cet exemple et je ne m'y connais pas assez pour adapter), vers le daemon zmtrigger.pl afin de déclencher une alarme sur une caméra de ZoneMinder. En pratique, un scénario Jeedom lance un script en passant les infos en paramètre (Id de la caméra, alarme ON ou OFF, durée éventuelle, nom de l’événement, etc...).
Note: Il m'a fallu installer le serveur TELNET (telnetd) sur le système où tourne ZoneMinder
Exemple de script (récupéré sur le Net):
Il prend en paramètre les infos à passer au daemon (par ex '10|on+2|1|motion|text|showtext'). Vous trouverez comment adapter ces paramètres sur le Net ou directement dans l'entête du fichier en éditant zmtrigger.pl.
Code : Tout sélectionner
#!/bin/sh
#-------------------------------------
# Script permettant de lancer une commande
# telnet (passee en parametre du script)
# sur une autre machine.
# Utilisé pour trigger un event sur ZoneMinder
#-------------------------------------
# Ekinox - 11/12/2017 - Creation
#-------------------------------------
# Replace cmd for the command to execute
# Par ex: cmd='10|on+2|1|motion|text|showtext'
#-------------------------------------
host=192.168.1.6
port=6802
# On recupere l'argument comme ligne de commande
cmd=$1
{ echo ${cmd}; } | telnet ${host} ${port}
exit 0
Et un scénario fait appel à ce script #[Aucun][zmTrigger.sh][Test]# en passant dans "Message" les paramètres pour le script (10|on+2|1|motion|text|showtext dans mon exemple)...
Et voilà !
En espérant que ca puisse vous être utile et que ca puisse s'intégrer au plugin prochainement... ;o)
Bye.