Sommaire

Le package ZoneMinder vous permet de connecter un serveur ZoneMinder dans Constellation.

image

Installation

Prérequis : ZoneMinder

Avant d’installer le package vous devez configurer votre serveur ZoneMinder.

Tout d’abord vous devez disposer de la version 1.29 de ZoneMinder. C’est à partir de cette version que ZM a intégré une API REST exploitée par la package Constellation. Sans cette API impossible de se connecter à votre serveur ZoneMinder.

image

Ensuite dans les options de ZoneMinder, veuillez définir les paramètres suivants :

  • AUTH_TYPE : builtin
  • AUTH_HASH_SECRET : une chaine de caractère aléatoire
  • AUTH_HASH_LOGINS : YES
  • OPT_USE_API : YES

image

Dans votre navigateur après vous être identifier sur votre serveur ZM, aller sur l’URI : http://server/zm/api/host/getVersion.json

Si votre serveur est opérationnel vous devriez voir le JSON suivant :

image

Pour finir vous devez récupérer le HASH de votre mot de passe ZoneMinder. Le mot de passe est hasher avec la fonction “PASSWORD” du serveur MySQL configuré pour ZoneMinder.

VOus devez donc vous connectr sur votre serveur MySQL est tapper la commande :

Où “xxxx” est votre mot de passe du compte ZoneMinder utilisé.

image

Par exemple sur mon serveur MySQL, le hash du mot de passe “Password123!” est “*4F56EF3FCEF3F995F03D1E37E2D692D420111476”.

Installation du package Constellation

Depuis le “Online Package Repository” de votre Console Constellation, déployez le package ZoneMinder :

image

Une fois le package télécharger votre repository local, sélectionnez la sentinelle sur laquelle déployer le package.

Pour finir sur la page de Settings vous devez obligatoirement spécifier :

  • RootUri : URI “racine” de votre serveur ZoneMinder (ex: http://server/zm)
  • Username : nom d’utilisateur ZoneMinder
  • PasswordHash : le hash du password de l’utilsateur (récupéré via la fonction”PASSWORD” sur votre serveur MySQL)
  • SecretHash : la chaine de caractère aléatoire spécifiée dans les options de ZoneMinder (paramètre AUTH_HASH_SECRET)

image

Vous pouvez également déployer ce package manuellement dans la configuration de votre Constellation :

Détails du package

Les Settings

Nom Type Détail Description
RootUri String Obligatoire URI “racine” de votre serveur ZoneMinder (ex: http://server/zm)
Username String Obligatoire Nom d’utilisateur ZoneMinder utilisé pour se connecter au serveur
PasswordHash String Obligatoire Le hash du mot de passe de l’utilisateur (récupéré via la fonction”PASSWORD” sur votre serveur MySQL)
SecretHash String Obligatoire La chaine de caractère aléatoire spécifiée dans les options de ZoneMinder (paramètre AUTH_HASH_SECRET)
SystemRefreshInterval Int32 Optionnel
Par défaut :  5000
L’intervalle de temps en milliseconde pour rafraichir le StateObject représentant le serveur ZoneMinder (par défaut 5 secondes)
MonitorsRefreshInterval Int32 Optionnel
Par défaut :  2000
L’intervalle de temps en milliseconde pour rafraichir les StateObjects représentant les cameras ZoneMinder (par défaut 2 secondes)
EventsRefreshInterval Int32 Optionnel
Par défaut :  2000
L’intervalle de temps en milliseconde pour interroger les évènements ZoneMinder (par défaut 2 secondes)

Les StateObjects

Vous retrouverez autant de StateObjects que de caméras ZoneMinder ainsi qu’un StateObject sur le serveur ZoneMinder :

Nom Type Description
Host ZoneMinder.Host Représente l’état du serveur ZoneMinder (URI, Version, espace disque utilisé, charge CPU, etc…)
<< Nom de la camera >> ZoneMinder.Monitor Représente l’état d’une caméra (ID, nom, type, fonction, taille, URI du flux vidée, état, nombre d’évènements, etc..)

Les MessageCallbacks

Le package expose 5 MessageCallbacks :

Nom Réponse (saga) Description
CancelForcedAlarm Aucune Annule l’alarme sur une caméra donnée.
ChangeState Aucune Change l’état de ZoneMinder (Start/Stop).
ForceAlarm Aucune Force l’alarme sur une caméra donnée.
Restart Aucune Redémarre le service ZoneMinder.
SetMonitorFunction Aucune Défini la fonction d’une caméra (Monitor, Record, Modect, etc…)

image

Le package envoi également un message “Alarm” au groupe “Motion” à chaque évènement levé par les caméras.

Quelques exemples

  • Afficher le flux des caméras dans une page Web ou dans une application mobile multi-plateforme
  • Activer la détection des mouvements des caméras en fonction du statuts de l’alarme
  • Force l’enregistrement d’une camera lorsque l’on ouvre une porte ou une fenêtre
  • Allumer la lumière en cas de mouvement détecté par une camera
  • Envoyer une capture vidéo sur son Smartphone lorsqu’une porte est restée ouverte trop longtemps
ZoneMinder : intégrez la vidéo-surveillance dans Constellation
Étiqueté avec :                

Sur le forum :

  1. Avatar for jose jose says:

    Bonjour,
    Grace au package ZoneMinder pour constellation, je souhaite modifier via une application Cordova, le mode d’une caméra (basculer du mode Monitor au mode Modect par exemple). J’utilise pour cela le Message CallBacks (MC) SetMonitorFunction avec la syntaxe suivante (id de la caméra = 8) :
    constellation.server.sendMessage({ Scope: ‘Package’, Args: [‘sentinelle/ZoneMinder’] }, ‘SetMonitorFunction’, 8, 1);
    La valeur 1 ne semble pas comprise (type énumération ?). En remplaçant le chiffre 1 par Monitor cela ne fonctionne pas non plus.
    Par contre, d’autres MC comme ForceAlarm fonctionnent.
    Pouvez-vous m’indiquer la syntaxe correcte pour le MC SetMonitorFunction.
    En vous remerciant.

  2. Avatar for jose jose says:

    Bonjour,
    La documentation de Constellation qui évoque la création de MC précise que les arguments d’un MC doivent être déclarés via un tableau lorsque leur nombre est supérieur à 1.
    Par conséquent, pour le package ZoneMinder et son MC SetMonitorFunction la syntaxe correcte pour invoquer le MC est de la forme :
    constellation.server.sendMessage({ Scope: ‘Package’, Args: [‘sentinelle/ZoneMinder’] }, ‘SetMonitorFunction’, monitorFunction);monitorFunction est un tableau (ex. : monitorFunction[0] = 8; monitorFunction[1] = 2;)

  3. Bonjour Jose,

    Quelle version de la lib JS utilisez-vous ?

    Historiquement jusqu’en Juillet 2017 on devait passer les arguments d’un MC dans un tableau, dans votre cas vous pouvez écrire :
    constellation.server.sendMessage({ Scope: ‘Package’, Args: [‘sentinelle/ZoneMinder’] }, ‘SetMonitorFunction’, [ 8, 2 ])

    Cependant depuis la version 1.8.2 de la librairie JS (Juillet 2017), on peut passer les différents paramètres à la suite :
    constellation.server.sendMessage({ Scope: ‘Package’, Args: [‘sentinelle/ZoneMinder’] }, ‘SetMonitorFunction’, 8, 2)

    Plus d’info voir le post ci-dessous:

    Bien à vous,
    Sébastien

  4. Avatar for jose jose says:

    Bonjour Sébastien,
    oui effectivement j’utilisais la version 1.8.1. Après une mise à jour du projet Cordova avec la version 1.8.2 de Constellation, le passage d’arguments multiples sans tableau fonctionne.
    Merci, bonne continuation.

  5. Avatar for jose jose says:

    Bonjour,
    j’utilise le package Constellation/ZoneMinder v2.0.7 sur un ZoneMinder v 1.30 (installé sur un Raspberry).
    Constellation server : 1.8.4.18094
    Constellation sentinel : 1.8.4.18094
    Constellation Console : 1.8.5.703

    Le package ZoneMinder génère les traces suivantes dans la console.
    Le seul StateObject « ZoneMinder » visible dans la console est « Host ». Il n’y a pas de StateObject relatif aux caméras.
    Avez-vous une idée ?
    En vous remerciant.

    Error to query ZoneMinder’s monitors : System.FormatException: Input string was not in a correct format.

    • at System.Number.StringToNumber (System.String str, System.Globalization.NumberStyles options, System.Number+NumberBuffer& number, System.Globalization.NumberFormatInfo info, System.Boolean parseDecimal) [0x00057] in <65984520577646ec9044386ec4a7b3dd>:0 *
    • at System.Number.ParseDecimal (System.String value, System.Globalization.NumberStyles options, System.Globalization.NumberFormatInfo numfmt) [0x00019] in <65984520577646ec9044386ec4a7b3dd>:0 at System.Decimal.Parse (System.String s, System.IFormatProvider provider) [0x00009] in <65984520577646ec9044386ec4a7b3dd>:0 *
    • at (wrapper dynamic-method) System.Object.CallSite.Target(System.Runtime.CompilerServices.Closure,System.Runtime.CompilerServices.CallSite,System.Type,object,System.Globalization.CultureInfo)*
    • at ZoneMinder.Interfaces.ZoneMinder129.get_Monitors () [0x013b3] in :0 *
    • at ZoneMinder.Program.b__2_2 () [0x00000] in :0 *
    • at ZoneMinder.Program+<>c__DisplayClass15_0.b__0 () [0x0002e] in :0*
  6. Bonjour José,

    En général cette erreur se produit lorsque les données retournées par l’API ZM ne sont pas complètes (selon l’état de la camera, toutes les infos ne sont pas là. Exemple pas de FPS si stream OFF, etc…).

    La version 2.0.7 corrigée justement « ce type de bug » mais pour l’interface 1.32 (API différente).

    Je viens donc de commiter le même type de correctif pour le connecteur pre-1.32 utilisé pour les versions 1.29 et 1.30 comme dans ton cas : https://github.com/myconstellation/constellation-packages/commit/7b65e7ed8c088d4798d3ef2540075943ebacf457

    Tu devrais voir l’update dans les notifications de la Console Constellation. Je te laisse tester et me dire si cela corrige ton problème (mon ZM est >= 1.32, je n’ai donc pu tester le correctif).

    Bien à toi,

  7. Avatar for jose jose says:

    Bonjour Sébastien,
    merci pour la réponse et le correctif très rapides. Le problème persiste néanmoins. Je vais opter pour une montée de version de ZM. Cependant, je peux rester en 1.30 si tu souhaites proposer un correctif à la communauté et servir de bêta testeur en quelque sorte.
    Merci, à bientôt.

Continuez la discussion sur le forum Constellation

Participants

Avatar for jose Avatar for sebastien_warin