ZoneMinder : intégrez la vidéo-surveillance dans Constellation

Original publié sur: https://developer.myconstellation.io/package-library/zoneminder/

Sommaire1 Installation1.1 Prérequis : ZoneMinder1.2 Installation du package Constellation2 Détails du package2.1 Les Settings2.2 Les StateObjects2.3 Les MessageCallbacks3 Quelques exemples Le package ZoneMinder vous permet de connecter un serveur ZoneMinder dans Constellation. 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…

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.

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;)

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

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.

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*

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,

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.