Dev Integration pour Zoneminder

Bonjour,

Je suis en cours de dev sur une intégration qui exploite les APIs de Zoneminder (logiciel de Vidéo surveillance Open source s’appuyant sur les caméra de son choix).

Sur Gladys V3, j’avais dev un module maison à base de ssh qui lancait une commande perl, donc pas super propre … mais ca me sert toujours aujourd’hui pour activer/désactiver la vidéo surveillance selon si on rentre ou quitte la maison.
Donc pour migrer en V4, j’ai impérativement besoin de disposer de cette solution.

Un apercu :

J’ai donc fait ca rapidos, je pense que je builderais une version maison dans un premier temps.

Donc je poste ca ici, si jamais d’autre utilise ZM et souhaiteraient l’intégrer à Gladys…
J’ai découvert que ZM expose pas mal d’API, pour ma part actuellement, je me limite pour l’heure à passer une caméra en Modect ou en Monitor mais à l’avenir, on pourrait envisager bien plus de chose…

2 Likes

Hello sympa l’intégration, du coup est-ce que ca met à jour l’image dans le dashboard ?

Non pour le moment je n’ai pas regardé comment intégrer une image dans le dashboard, après ca peut faire doublon avec la box Afficher une caméra déjà disponible.

Justement, tu peux ajouter une caméra et ajouter une image associé à cette caméra et l’a box marchera

1 Like

Carrément, c’est une intégration vraiment sympa en tout cas!

N’hésite pas si tu as besoin d’aide @Jean-Philippe pour intégrer ça avec la box “afficher une caméra” :slight_smile:

@damalgos oui j’ai cru voir ca quand j’avais mis le type CAMERA
Le hic, c’est que les features associés sont particulières (comme le mode d’usage, détection, passif…etc) donc pour avoir un mode switchable, j’ais mis une feature type SWITCH sauf que la categorie n’est pas la même, donc dans la box, ca donnait des undefined un peu partout et sans icone.
Dans ce cas je pourrais peut être ajouter des features type pour la categorie CAMERA ?

C’est quoi du coup le mode switchable ?
Mais du coup oui carrément si il faut rajouter rajoute :wink:

Pour l’image ça dépend de ce que l’API peut te donner, elle peut ptet te donner juste une URL et tu es tout bon (juste à faire pareil que le module caméra). Si par contre elle t’envoie un JPEG par exemple tu peux faire comme ca:
Gladys/netatmo.updateCamera.js at netatmo · thibautmery/Gladys · GitHub (intégration netatmo il y a une partie ou on télécharge l’image et on l’ajoute)

Exactement :slight_smile: Si ta caméra gère des choses en plus, tu créer des nouvelles feature types.

Dans Gladys v4 on essaie d’avoir quelque chose d’uniforme quelque soit le modèle/la marque/la techno, comme ça le comportement est générique partout.

Exemple ici: si tu donne le type camera de Gladys à tes caméras zoneminder, ça veut dire que nativement on pourra gérer les phrases dans Telegram style “montre moi la caméra du salon”, ainsi que l’affichage sur le dashboard.

ok je vais aller dans ce sens, je vais regarder ce que fait le module netatmo, après faut que je vois si je peux récupérer l’image via zoneminder.

Concernant les modes, le premier usage, c’est qu’une caméra (ou un monitor car on peut avoir plusieurs monitors de la même caméra pour des usages différents), peut être en plusieurs modes, par exemple:

  • Détection de mouvement avec en enregistrement sur détection
  • Lecture simple sans enregistrement
  • Lecture avec enregistrement en continue
  • Et d’autre mode que je n’utilise pas

Donc je veux pouvoir, en usage minimal du module, changer ce mode. Lorsqu’on est a la maison, on passe en Lecture simple, et quand la maison est vide, en Détection.

Rapidement j’ai vu ca: wget "http://yourserver/cgi-bin/zms?mode=single&monitor=1&user=xxx&pass=yyy" -O foo.jpg
Donc possible que tu puisses récupérer du coup l’image et donc faire comme j’ai fais dans netatmo :slight_smile:

Ca marche en effet, le mot de passe n’est même pas vérifié :shushing_face:

Faut activer l’authentification dans zoneminder, par défaut c’est open bar

1 Like

C’est le cas normalement, je sais pas très bien ce qui se passe … bon mon ZM est pas ouvert sur internet, c’est pas bien grave.

@damalgos j’ai regardé ton intégration netatmo, j’essaye de comprendre comment Gladys demande la mise à jour du jpg ?
Je n’envisage pas de poller l’image à intervalle régulier cote server, je pensais que l’image devrait être requetée quand l’utilisateur requête le dashboard, c’est bien ca ? auquel cas, comment intervient la demande du front vers le back ?

Edit 1:
Ok je vois dans server/lib/device/camera/camera.getImage.js :

return Promise.resolve(deviceFeature.last_value_string);

Edit 2:
Dois-je mettre du poll_frequency sur la feature Image …?

Edit 3:

C’est bon j’ai trouvé le truc ^^

Bon j’avance, j’ai ajouté les categories qui vont bien, j’ai mon image sur le dashboard.

Par contre, tant qu’à ajouter des catégories, j’ai ajouté :

CAMERA: {
    IMAGE: 'image',
    MODE: 'mode',
    MOTIONS: 'integer',
    POWER: 'power'
}

MODE = le mode de la caméra (capture de mouvement, enregistrement permanent…etc)
MOTIONS = le nombre d’évènements capturés (read only)
POWER = Si la caméra est on ou off (ici d’un point de vue Zoneminder)

Bon c’est bien mais coté Box, je vois ca :

// for now, we only supports binary on/off and sensors
if (feature.read_only || SUPPORTED_FEATURE_TYPES.includes(feature.type)) {
     roomDeviceFeatures.push(featureOption);
}

Donc je ne peux pas modifier dans le dashboard l’état ou le mode de la caméra.
De même, j’avais testé au début en mettant le mode en type SWITCH, met c’est pas top de savoir que 1 = enregistrement, 2 = surveillance …etc

Donc comment, d’une part, je pourrais avoir un menu déroulant par exemple avec les modes proposés, dans le dashboard ? je pense que c’est pas encoré prévu / codé / commencé ?

Mais est-ce que je peux le gérer dans une scène malgré tout ?

Coté model, le min et le max sont obligatoires dans la feature. Cela signifie-t-il qu’une valeur numérique doit systématiquement être enregistrée, et qu’on doit faire le mapping coté integration ?

Edit:
J’ai rajouté l’état de l’alarme Zoneminder, c’est à dire, est-ce que la camera est en Alarme suite à une détection d’intrusion.
Et donc j’ai cherché quelle catégorie.type mettre.
Coté box (SensorDeviceFeature.js), je vois qu’actuellement si c’est pas un Motion, Presence ou Opening sensor, le rendu est celui par défaut.

<td>{props.deviceFeature.name}</td>
    {SPECIAL_SENSORS.indexOf(props.deviceFeature.category) === -1 && (
      <td class={cx('text-right', { 'text-nowrap': props.deviceFeature.last_value !== null })}>
        {props.deviceFeature.last_value !== null && props.deviceFeature.last_value}
        {props.deviceFeature.last_value === null && <Text id="dashboard.boxes.devicesInRoom.noValue" />}
        {props.deviceFeature.last_value !== null && (
          <span>
            {' '}
            <Text id={`deviceFeatureUnitShort.${props.deviceFeature.unit}`} />
          </span>
        )}
      </td>
    )}

image

Y-a-t- il un type dédié à l’Alarme (de manière générale), j’ai vu une Catégorie “Siren” … j’attends vos retour avant d’aller plus loins sur ma classification du coup …

@pierre-gilles

:heart_eyes: :heart_eyes: :heart_eyes:

Je vois trop l’usage quand tu es pas chez toi via Telegram, finis de lancer mon OpenVPN, le navigateur, d’aller sur l’interface du Zoneminder …

Yes c’est normal, on affiche dans cette box que les appareils qu’on est capable de gérer dans l’UI :slight_smile: Après rien n’empêche d’ajouter dans le front un nouveau component pour gérer un nouveau type d’appareil !

Chaque affichage d’appareil dans le front est géré ici: https://github.com/GladysAssistant/Gladys/tree/master/front/src/components/boxs/device-in-room/device-features

C’est à toi de créer une component frontend qui le fait :slight_smile:

Dans Gladys 4, on évite de faire des composants “super générique” (sauf quand ça peut être factorisé entre intégrations) pour au contraire faire des composants vraiment adapté, défini dans le code (et pas en base de donnée), ça permet:

  • D’avoir des traductions (car Gladys est disponible en plusieurs langues)
  • Que les comportements de ces components soient versionés et testés (on utilise Cypress pour les tests frontends)

En gros toi ce serait un component “liste déroulante” avec plusieurs états, propre à l’intégration Zoneminder on est d’accord ?

Pareil, il faut ajouter dans l’action de contrôle de scène et dans le déclencheur de scène ce component avec les valeurs que tu veux

Exemple: https://github.com/GladysAssistant/Gladys/blob/master/front/src/routes/scene/edit-scene/triggers/DeviceFeatureState.jsx#L54

Note: ça peut paraitre être beaucoup de travail, mais c’est la philosophie de la v4: on prend du temps à faire bien les choses, et on préfère avoir un produit qui demande un poil plus de travail au développeur, mais pour qu’en bout de course l’expérience utilisateur soit la meilleure :slight_smile:

Alarme de quoi ? Je crois pas. Siren c’est juste une sirène extérieur (tu sais les boitiers qui font du bruit)

Magnifique !! :heart_eyes:

Sinon tu as déjà testé Gladys Plus pour l’accès à distance ? C’est chiffré de bout en bout, et j’ai rajouté un essai gratuit de 14 jours récemment si tu veux tester :slight_smile:

Je vais regarder comment faire pour ajouter le component en front pour gérer cela.

Concernant l’alarme, je pensais aux alarmes de surveillance, celle qui sonne quand un voleur rentre :smiley:
Dans mon cas, si ma caméra voit un mouvement, elle passe en “alarme” et sur mon instance Gladys3, m’envoit une notification.

Pour Gladys Plus, je n’ai pas testé sur Gladys4, actuellement mon instance est simplement en dev sur mon pc, je testerais lorsque je basculerais :wink:

On a pas encore une gestion native des alarmes, je voudrais faire un truc vraiment propre en mode “armer/désarmer” pour ta maison avec une belle UI et des triggers / actions dans les scènes pour pouvoir réagir à ce changement d’état (SI mouvement ET alarme armée ALORS…)

Mais je pense qu’en attendant tu peux te débrouiller avec un autre type binaire (0/1), ça fera le boulot en attendant :slight_smile:

Tu peux upvoter la fonctionnalité ici si tu veux la voir dans Gladys:

Cool, hésite pas à ce moment là si tu as des questions, on peut prendre du temps ensemble pour que tout soit bien configuré, il y a plein de possibilité avec Gladys Plus et j’essaie d’accompagner au maximum l’installation !

J’ai vu sur l’integration rtsp-camera qu’on pouvait ajouter une box au dashboard.
Mais est-ce possible, via une integration, d’ajouter des fonctionnalités aux devices utilisable depuis la box device d'une pièce afin d’éviter de rajouter une box dédiée ?

Tout à fait! :slight_smile: Si tu créé une nouveau couple (Category + type) pour un device, il est tout à fait possible de gérer ce nouveau couple dans la box “appareil de la pièce”.

Tu pense à quel genre de contrôle ?