Alarmes avec le mode DETECT notifications e-mail et SMS
Quelques liens:La première fois ,la description d'une zone de détection apparait assez difficile;en fait pour des conditions extérieures normales, c'est assez simple. Ça se complique lorsqu'il pleut , lorsqu’il y a des éclairs dus à la foudre, lorsqu'il y a des phares de voiture ,.... https://zoneminder.readthedocs.io/en/stable/userguide/definezone.html https://wiki.zoneminder.com/index.php/Understanding_ZoneMinder%27s_Zoning_system_for_Dummies
Configuration d'une zone d'alarmeLe moteur Zoneminder de base ne détecte que les changements de pixels,la configuration est basé sur ce principe. Cliquez sur le 1 (il y a une zone par défaut qui regroupe toute la vue de la caméra) de la colonne Zones lorsque vous êtes sur la fenêtre "console".
une image de la caméra sur fond opaque rouge et d'un cadre rouge est affichée,
cette zone est importante et n'est pas intéressante, supprimons cette zone (ALL):
La couleur des zones est déterminée par leur type.- La zone par défaut est active et rouge- les zones inclusives sont orange- les zones exclusives sont violettes- les zones préclusives sont bleues- les zones inactives sont blanchesAjoutons une zone d'alarme:Pour rétrécir la zone , avec la souris , déplacer les coins de l'image et commencer la configuration.
La zone est maintenant définie mais il faut définir d'autres valeurs pour pouvoir la sauvegarder:
Les différentes options possibles :
Type de zone:C'est l'un des concepts les plus importants de ZoneMinder :
- Active : déclenche une alarme lorsqu'un mouvement est détecté. c'est le type le plus souvent utilisé;il est défini lors du pré réglage par défaut. seules les zones actives et exclusives peuvent déclencher une alarme. - Inclusive : Ce type de zone peut être utilisé si il existe au moins une zone active ; déclenche une alarme si une zone active en a déjà déclenché une. - Exclusive : déclenche une alarme lorsqu'un mouvement est détecté à l'intérieur, tant qu'aucune alarme n'a déjà été déclenchée dans une zone active.- Preclusive : La zone Préclusive est traitée en premier ; si elle est petite, et l'alarme déclenchée, le reste de la zone/image ne sera pas traité.- Inactive : Supprime la détection de mouvement . cette zone peut être superposée à tout autre type de zone.- Privacy : Noircit les pixels , utilisé pour masquer certaines régions de l'image
Travailler en pixels plutôt qu'en pourcentage
le pourcentage permet au départ d'appréhender plus facilement la surface d'une zone Pré réglage : il n'est pas nécessaire de sélectionner un pré réglage et vous pouvez modifier n'importe lequel des paramètres après avoir choisi un pré réglage.
il existe 3 méthodes de détection :- Pixels alarmés- Pixels filtrés- Blobs
Pixels alarmés-AlarmedPixels AlarmedPixels ne traitent que les changements de pixels. Si nous spécifions un minimum de changements de "5 pixels" pour une chaque zone ,le nombre de nouveaux pixels de l'image (les pixels alarmés) sera au nombre de 5x nb de zone (exemple pour 4 zones 5x4=20) ; ce calcul permettra de définir le nombre maximum de pixels alarmés.
Pixels filtrès-FilteredPixels FilteredPixels, en plus de calculer les pixels alarmés (pour toutes les zones), il retiendra combien de pixels ,sur la surface filtrée ont au moins 2 pixels autour d'eux qui sont également des pixels alarmés.
Gouttes-Blobs Blobs,est basé sur le calcul des pixels filtrés mais en plus il recherche des gouttes contiguës de 10 pixels et ne retiendra que ces pixels pour l'alarme.
Seuil pixels min/max : Le paramètre de seuil de pixel minimum doit être suffisamment élevé pour que soient ignorées de légères modification. Un bon réglage de départ est 40 pour le seuil minimum (différence de pixels>40 ). Une bonne valeur par défaut pour le seuil de pixel maximum est 0 : toutes les différences au-dessus du seuil minimum sont considérées comme une modification.Surface en alarme min/max: Si le nombre de pixels ou le pourcentage est supérieur à la surface minimale et inférieur à la surface maximale, une alarme est déclenchée. - une valeur trop faible peut provoquer de fausses alarmes- une valeur trop élevée peut ne pas détecter de petits objets. Un bon réglage de départ est 0 / 0Largeur/hauteur surface filtrée : toujours spécifié en pixels, La largeur et la hauteur doivent toujours être un nombre impair.- 3 x 3 est la valeur par défaut- 5 x 5 est également suggéré comme une bonne alternativeSurface filtrée min/max : les minimum et maximum doivent être égaux ou inférieurs aux paramètres de la surface d'alarme correspondante pour FilteredPixels se déclenche. Surface des formes(Blobs) min/max : la valeur min par défaut est 1 ,c'est la valeur courante. Une bonne valeur pour le maximum est 0 (valeur par défaut). Nb images ignorées après dépassement de seuil : nombre d'images considéré comme trop gros pour être considéré comme une alarme.Nb images pour extension alarme : uniquement pour les zones exclusives et préclusives; paramètre utilisé pour un changement soudain du niveau de lumière
Notification par émail Toutes les infos que l'on trouve sur le net utilise ssmtp ; mais ce paquet est déprécié sous debian, il faut installer msmtp.....et peu de documentation existe.
Je me suis inspiré de cette page, mais en corrigeant quelques commandes du certainement au traitement de texte. https://bkjaya.wordpress.com/2019/10/21/draft-how-to-use-msmtp-as-email-software-in-zoneminder-v1-33-14-on-ubuntu-19-04autre lien:https://wiki.zoneminder.com/SMS_Notifications
Installer MSMTP voir un exemple sur la page concernant la surveillance du réseau par Nagios mutt ne fonctionne pas avec msmtp, utiliser mailutils
Configurer MSMTP : sudo nano /etc/msmtprc
Test de msmtp avec sendmail:
Envoi d'un message
Pour corriger l’erreur concernant le fichier log:
Configuration de Zoneminder pour les mails zmfilter.pl appelle /usr/sbin/sendmail ; pour utiliser msmtp, il faut rediriger l'appel vers redirige vers msmtp qui est le fichier exécutable dans /usr/bin/. Pour cela il faut créer un lien symbolique:- vérifier auparavant que sendmail n'existe pas- pour créer le lien :sudo ln -s /usr/bin/msmtp /usr/sbin/sendmail
Si sendmail existe: le remplacer avec une extension bak
Vérifier l'installation des packages Perl suivant , sinon les installer:sudo perl -MCPAN -e shellinstall MIME::Liteinstall Net::SMTP Configuration de Zoneminder avec l'interface Web:
Création d'un filtre pour l'envoi d'un e-mail assurez-vous que l'e-mail est coché dans les filtres. Il est facilement décoché.exemple d'un filtre pour sélectionner les événements dont le score maximum est >= à 1 et le nom de la caméra = NVT AR Cuisine ;alertes envoyées par e-mail
Ici j'ai choisi le nom de la camera, on peut utiliser l'ID; On peut ajouter plusieurs conditions
Le fichier journal :
La liste des évènements:
Pour forcer une alarme :
la réception de l’émail:
Il reste , suivant les différents cas de figure à peaufiner les réglages pour éviter un trop grand nombre d'alarmes Lors d'un essai en alarme forcée ,limiter l'essai au plus à une ou deux secondes sinon, la liste des mails sera longue ;
Notification Pushover Plusieurs solutions sont possibles:- par zmeventnotification , voir cette page pour installer zmeventserver - par zoneminder , voir ce lien : https://www.jens.bruntt.dk/zoneminder-with-pushover-notifications/ - par mqtt et ensuite un script python , voir ci-après MQTT avec zmEventServer - ......Ma configuration dans zmeventnotification.ini:
# Configuration file for zmeventnotification.pl [general] secrets = /etc/zm/secrets.ini base_data_path=/var/lib/zmeventnotification use_escontrol_interface=no escontrol_interface_file=/var/lib/zmeventnotification/misc/escontrol_interface.$ escontrol_interface_password=!ESCONTROL_INTERFACE_PASSWORD restart_interval = 0 [network] port = 9000 [auth] enable = yes timeout = 20 [push] use_api_push = yes api_push_script=/var/lib/zmeventnotification/bin/pushapi_pushover.py [fcm] enable = yes use_fcmv1 = yes replace_push_messages = no token_file = {{base_data_path}}/push/tokens.txt date_format = %I:%M %p, %d-%b fcm_android_priority = high fcm_log_raw_message=no [mqtt] enable = yes # default: zoneminder #topic = my topic name server = 192.168.1.42 # username = michel # password = xxxxxxx retain = no # MQTT over TLS # Location to MQTT broker CA certificate. Uncomment this line will enable MQTT $ # tls_ca = /config/certs/ca.pem # To enable 2-ways TLS, add client certificate and private key # Location to client certificate and private key # tls_cert = /config/es-pub.pem # tls_key = /config/es-key.pem # To allow insecure TLS (disable peer verifier), (default: no) # tls_insecure = yes [ssl] enable = no [customize] console_logs = yes es_debug_level = 4 event_check_interval = 5 monitor_reload_interval = 300 read_alarm_cause = yes tag_alarm_event_id = yes use_custom_notification_sound = no include_picture = yes send_event_start_notification = yes send_event_end_notification = yes picture_url = !ZMES_PICTURE_URL picture_portal_username=!ZM_USER picture_portal_password=!ZM_PASSWORD use_hooks = no [hook] max_parallel_hooks=0 event_start_hook = '{{base_data_path}}/bin/zm_event_start.sh' event_start_notify_on_hook_success = all event_start_notify_on_hook_fail = none event_end_notify_on_hook_success = fcm,web,api event_end_notify_on_hook_fail = none event_end_notify_if_start_success = yes
le fichier "pushapi_pushover.py":il faut indiquer l'user et le token pour Pushover
Ca fonctionne au premier essaiquelques copies d'écran avec :sudo -u www-data /usr/bin/zmeventnotification.pl --debug --config/etc/zm/zmeventnotification.ini -u www-dataapacheStopper le serveur auparavant.
la notification Pushover:
Messages MQTTLer fichier zmeventnotification.ini est déjà configuré pour cela , voir le paragraphe précédent Pour voir les messages avec le boker mosquitto (avec Putty sur l'IP de mosquitto): sudo mosquitto_sub -t zoneminder/# -v
Avec Npde-red, on reformate le message pour la destination souhaitée:exemple pour domoticz
Mise à jour d'une variable on pourrait aussi utiliser un interrupteur virtuel; A partir de cette variable on va envoyer un SMS par GSM , c'est le 2eme article de ce paragraphe
Schéma Node-red: voir aussi cette page
MQTT IN et MQTT OUT on été configuré sur le serveur Mosquitto,La fonction:
.
On peut remplacer monitor(N° caméra) par name (plus explicite )Le Flow:
[{"id":"2095cb81.7078ec","type":"tab","label":"Flow 4","disabled":false,"info":""},{"id":"942b4154.10b4f","type":"mqtt in","z":"2095cb81.7078ec", "name":"zoneminder","topic":"zoneminder/#","qos":"2","datatype":"auto","broker":"b834e369.1673c","x":290,"y":300,"wires":[["a972045a.a337f8", "b35f8f1f.1df9c"]]},{"id":"107f5226.34337e","type":"mqtt out","z":"2095cb81.7078ec","name":"camera","topic":"domoticz/in","qos":"","retain":"", "broker":"b834e369.1673c","x":730,"y":280,"wires":[]},{"id":"a972045a.a337f8","type":"function","z":"2095cb81.7078ec","name":"zm vers dz", "func":"\nfunction vers_dz(id){\n msg.payload = {\n \"command\": \"setuservariable\", \n \"idx\" : 24,\n \"value\": id\n }\n}\nvar m = JSON.parse(msg.payload); \nvers_dz(m.monitor);\nreturn msg;","outputs":1,"noerr":0, "initialize":"","finalize":"","x":510,"y":260,"wires":[["107f5226.34337e","2d87d8c6.513338"]]},{"id":"b35f8f1f.1df9c","type":"debug", "z":"2095cb81.7078ec","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"", "statusType":"auto","x":560,"y":380,"wires":[]},{"id":"2d87d8c6.513338","type":"debug","z":"2095cb81.7078ec","name":"","active":true, "tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":840,"y":380,"wires":[]}, {"id":"b834e369.1673c","type":"mqtt-broker","name":"mosquitto","broker":"192.168.1.42","port":"1883","clientid":"","usetls":false, "compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0", "birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]
extrait de la console debug:
Et dans Domoticz , mise à jour de la variable:
Envoi d'un SMS par GSMPré-requis: avoir installé un modem GSM On utilise le module Python import reload car le broker MQTT ne se trouve pas sur le même serveur que Domotivcz. des explications sur cette pageLe script dz qui exploite le contenu de la variable "zm_cam" décrite précédement
-- script notifications_autres function alerte_gsm(txt) f = io.open("/home/michel/domoticz/scripts/python/aldz.py", "w") env="#!/usr/bin/env python3.7" f:write(env.." -*- coding: utf-8 -*-\nx='"..txt.."'") f:close() end return { on = { variables = { 'alarme_bat', 'boite_lettres', 'upload', 'zm_cam', } }, execute = function(domoticz, variable) domoticz.log('Variable ' .. variable.name .. ' was changed', domoticz.LOG_INFO) if ((domoticz.variables('zm_cam').changed) and (domoticz.variables('zm_cam').value ~= "0")) then txt=tostring(domoticz.variables('zm_cam').value) domoticz.variables('zm_cam').set('0') print("envoi SMS alarme zm") alerte_gsm('alarme_zoneminder_'..txt) end }
Les scripts bassh et Python sont sur ces pages : - liaison série rpi-PC - Configuration du modem Ebyte Pour faire un essai sans la détection dans zoneminder, il suffit de changer dans Domoticz la valeur de la variable Avec cet exemple le SMS indique uniquement une alarme sur un N° de caméra, avec Node-red il est facile de choisir une autre information et en créant d'autres variables d'afficher toutes les infos de ZM.
Avec cette information MQTT il est alors possible avec Domoticz de commander une sirène,un projecteur,......On peut aussi ,au lieu d'utiliser zoneminder, utiliser Domoticz pour envoyer la notification PUSH