# Dev Integration pour Zoneminder

**URL:** <https://community.gladysassistant.com/t/dev-integration-pour-zoneminder/6483>\
**Category:** Développement\
**Created:** [Août 28, 2021, 3:58 UTC](https://community.gladysassistant.com/t/dev-integration-pour-zoneminder/6483 "2021-08-28T15:58:45Z")\
**Posts on this page:** 12\
**Page:** 2

<div class="post-metadata">

**Author:** ![Jean-Philippe](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/j/5fc32e/32.png) [@Jean-Philippe](https://community.gladysassistant.com/u/Jean-Philippe)\
**Post date:** [Septembre 13, 2021, 7:29 UTC](https://community.gladysassistant.com/t/dev-integration-pour-zoneminder/6483/21 "2021-09-13T19:29:36Z")

</div>

J’ai 2 cas d’usage en particulier.  
Dans les 2 cas, il s’agirait d’une action avec un choix déroulant. (et pour l’un, le top ce serait un choix dynamique sur la base de ce que permet le device. (ici l’effet de couleur d’un ruban led, pas simplement la couleur)  
Pour Zoneminder, c’était ce dont je parlais, l’activation d’un mode spécifique d’une caméra, je peux prendre un choix de type SWITCH, mais c’est pas intuitif de dire 1 = normal, 2 = surveillance, 3 = enregistrement…etc

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Septembre 14, 2021, 1:21 UTC](https://community.gladysassistant.com/t/dev-integration-pour-zoneminder/6483/22 "2021-09-14T01:21:04Z")

</div>

Ok, dans les deux cas je pense on peut faire un contrôle “custom” avec les traductions et cie

Pour le switch zoneminder, ça va être du super custom (propre à ZoneMinder), pour l’effet ruban led, à voir à quel point il y a des similitudes avec d’autres marques de ruban de LED pour factoriser.

Dans tous les cas, si on se rend compte que factoriser ça dégrade l’expérience utilisateur, on fera du custom 🙂

---

<div class="post-metadata">

**Author:** ![Jean-Philippe](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/j/5fc32e/32.png) [@Jean-Philippe](https://community.gladysassistant.com/u/Jean-Philippe)\
**Post date:** [Septembre 15, 2021, 7:32 UTC](https://community.gladysassistant.com/t/dev-integration-pour-zoneminder/6483/23 "2021-09-15T19:32:06Z")

</div>

Pour le ruban LED, en fait c’est surtout pour gérer Hyperion ([GitHub - hyperion-project/hyperion.ng: The successor to Hyperion aka Hyperion Next Generation](https://github.com/hyperion-project/hyperion.ng))

Bon le lien c’est la dernière version que j’ai pas testé.  
Sur l’ancienne version, et bien on peut lui passer soit une couleur, soit un effet, les 2 via une chaine de caractères… je ne sais pas trop comment le gérer.

Pour la box custom, tu aurais un exemple sur comment je déclare ca dans mon integration ?

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Septembre 16, 2021, 1:07 UTC](https://community.gladysassistant.com/t/dev-integration-pour-zoneminder/6483/24 "2021-09-16T01:07:16Z")

</div>

> [@Jean-Philippe](#):
>
> Sur l’ancienne version, et bien on peut lui passer soit une couleur, soit un effet, les 2 via une chaine de caractères… je ne sais pas trop comment le gérer.

Les couleurs tu peux les gérer avec le contrôle couleur qui existe déjà:

 ![Screenshot 2021-09-16 at 08.58.14](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/e/ec33b5153fae459b3f847122107ab10512d76829.png)

Il faut juste que tu gère une petite routine de conversion du format de couleur entre Hyperion et Gladys (regarde comment font les autres services, on a déjà quelques fonctions de conversions)

> [@Jean-Philippe](#):
>
> Pour la box custom, tu aurais un exemple sur comment je déclare ca dans mon integration ?

Ce n’est pas dans ton intégration, c’est dans la box «&nbsp;device-in-rooms&nbsp;» dans le frontend, tu peux coder ça ici:

> <https://github.com/GladysAssistant/Gladys/tree/master/front/src/components/boxs/device-in-room/device-features>
>
> //github.com/GladysAssistant/Gladys/tree/master/front/src/components/boxs/device-in-room/device-features

Après avant de te lancer si tu pouvais écrire une petite spec ici pour qu’on en discute, c’est mieux 🙂 L’idée c’est vraiment de voir si c’est pas un comportement qu’on peut factoriser avec d’autres intégrations, et si c’est pas factorisable, je pense qu’on peut en discuter quand même pour que tu partes dans la bonne direction !

---

<div class="post-metadata">

**Author:** ![Jean-Philippe](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/j/5fc32e/32.png) [@Jean-Philippe](https://community.gladysassistant.com/u/Jean-Philippe)\
**Post date:** [Septembre 16, 2021, 5:56 UTC](https://community.gladysassistant.com/t/dev-integration-pour-zoneminder/6483/25 "2021-09-16T05:56:08Z")

</div>

Pour la conversion des couleurs, je vais regarder, Hyperion, actuellement dans sa vieille version, demande par exemple `red` ou `blue`.

Pour la feature, c’est pareil, le besoin actuel, si je prends zoneminder, c’est que je vais passer ca à l’API:

`Monitor[Function]=Modect`

Ce qui m’intéresse ici, c’est `Modect`  
C’est donc cette chaine de caractère qu’il me faut. Auparavant, dans la V3, je faisais différement car j’exploitais pas l’API, j’avais un truc custom juste chez moi qui appelait un script… Mais la finalité était la même, coté Gladys, j’envoyais un `Integer` (1, 2, 3…) et je fais le mapping.  
Mais coté UI, c’est nul, tu dois savoir que 1=Modect, 2=Monitor…

Donc j’aimerais avoir soit un Menu déroulant avec les `String` qui vont bien, soit autre chose.

Je pourrais aussi a la rigueur avoir `N features` pour chaque mode possible, chacune étant un `Binary` et quand l’une est `On`, toutes les autres sont basculées en `Off`.  
Ca ne nécessite pas de dev ailleurs que dans l’integration.

---

<div class="post-metadata">

**Author:** ![VonOx](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/vonox/32/10128_2.png) [@VonOx](https://community.gladysassistant.com/u/VonOx)\
**Post date:** [Septembre 16, 2021, 6:06 UTC](https://community.gladysassistant.com/t/dev-integration-pour-zoneminder/6483/26 "2021-09-16T06:06:34Z")

</div>

Hésite pas à regarder la logique côté home assistant, il y’a une integration avec auto detection

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Septembre 16, 2021, 6:06 UTC](https://community.gladysassistant.com/t/dev-integration-pour-zoneminder/6483/27 "2021-09-16T06:06:51Z")

</div>

> [@Jean-Philippe](#):
>
> Donc j’aimerais avoir soit un Menu déroulant avec les `String` qui vont bien, soit autre chose.

Je pense que dans ce cas, c’est le mieux 🙂 Avec les bonnes traductions qui vont bien comme ça ça marche en français et en anglais

---

<div class="post-metadata">

**Author:** ![Jean-Philippe](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/j/5fc32e/32.png) [@Jean-Philippe](https://community.gladysassistant.com/u/Jean-Philippe)\
**Post date:** [Septembre 18, 2021, 11:58 UTC](https://community.gladysassistant.com/t/dev-integration-pour-zoneminder/6483/28 "2021-09-18T11:58:07Z")

</div>

Bon en fait c’est super le color picker, je croyais passer à mon instance Hyperion, une couleur du type `red` ou `blue` mais pas du tout, je lui passe du RGB comme Hue, donc ca fonctionne direct.  
Je n’ai que les Effets à gérer.

---

<div class="post-metadata">

**Author:** ![Jean-Philippe](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/j/5fc32e/32.png) [@Jean-Philippe](https://community.gladysassistant.com/u/Jean-Philippe)\
**Post date:** [Septembre 18, 2021, 12:02 UTC](https://community.gladysassistant.com/t/dev-integration-pour-zoneminder/6483/29 "2021-09-18T12:02:35Z")

</div>

> [@pierre-gilles](#):
>
> Je pense que dans ce cas, c’est le mieux 🙂 Avec les bonnes traductions qui vont bien comme ça ça marche en français et en anglais

Donc tu me suggères de développer une box sur le front qui gère un menu déroulant avec des options issues de l’integration qui gère ce device, c’est bien l’idée ?  
Dans ce cas, comme la value reste un `Integer`, il faudrait donc que l’option retournée soit un objet du type:

```auto
{ 
  name: <string: Nom de la valeur>,
  id: <int:value>
}

```

Donc j’aurais dans l’idée une API sur l’intégration qui retourne la liste a proposer coté front…  
Coté back, c’est l’intégration qui gérerait donc le mapping entre la valeur reçue au `setValue` et le nom à balancer au client derrière.  
Suis-je dans la bonne direction ?

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Septembre 20, 2021, 3:00 UTC](https://community.gladysassistant.com/t/dev-integration-pour-zoneminder/6483/30 "2021-09-20T03:00:49Z")

</div>

> [@Jean-Philippe](#):
>
> Donc tu me suggères de développer une box sur le front qui gère un menu déroulant avec des options issues de l’integration qui gère ce device, c’est bien l’idée ?

Pas exactement une box, juste un component de la box «&nbsp;devices-in-room&nbsp;», mais oui c’est l’idée, ça sera juste un simple component avec une select box qui envoie les bonnes valeurs entières.

Si tu as besoin d’aide on peut le faire ensemble, n’hésite pas 🙂

> [@Jean-Philippe](#):
>
> Donc j’aurais dans l’idée une API sur l’intégration qui retourne la liste a proposer coté front…

Pas besoin, c’est du statique, c’est juste un component front et des traductions dans les trads frontend.

> [@Jean-Philippe](#):
>
> Coté back, c’est l’intégration qui gérerait donc le mapping entre la valeur reçue au `setValue` et le nom à balancer au client derrière.

Exactement!

---

<div class="post-metadata">

**Author:** ![Jean-Philippe](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/j/5fc32e/32.png) [@Jean-Philippe](https://community.gladysassistant.com/u/Jean-Philippe)\
**Post date:** [Novembre 20, 2021, 2:52 UTC](https://community.gladysassistant.com/t/dev-integration-pour-zoneminder/6483/31 "2021-11-20T14:52:59Z")

</div>

Hello,

Je reprends un peu ce sujet de la box avec un select.  
Je me disais qu’une solution de facilité, c’état de créer un device\_feature pour chaque option possible du mode (ici le mode de la camera).  
Mais dans le cas de l’integration que j’écris pour gérer mon install Hyperion, j’ai une 15ne de modes pour le ruban derrière ma TV, ce qui me ferait une 15ne de device feature, tous en binary… bref je trouve pas ca élégant.

Donc l’option de modifier le composant `devices-in-room` me parait le mieux. Je regardais le code, et notamment:

```auto
const ROW_TYPE_BY_FEATURE_TYPE = {
  [DEVICE_FEATURE_TYPES.LIGHT.BINARY]: BinaryDeviceFeature,
  [DEVICE_FEATURE_TYPES.LIGHT.COLOR]: ColorDeviceFeature,
  [DEVICE_FEATURE_TYPES.SWITCH.DIMMER]: MultiLevelDeviceFeature,
  [DEVICE_FEATURE_TYPES.LIGHT.BRIGHTNESS]: MultiLevelDeviceFeature,
  [DEVICE_FEATURE_TYPES.LIGHT.TEMPERATURE]: LightTemperatureDeviceFeature
};

```

Mais la ou je sais pas comment gérer, c’est pour les options du `SELECT` que je veux créer, tu indiques de mettre des valeurs entières en statique, ok, mais on est d’accord qu’il faut différencier les valeurs selon le service ? donc vi une détection du service au travers du selector de la device\_feature par exemple ?

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Novembre 22, 2021, 1:43 UTC](https://community.gladysassistant.com/t/dev-integration-pour-zoneminder/6483/32 "2021-11-22T13:43:13Z")

</div>

> [@Jean-Philippe](#):
>
> Donc l’option de modifier le composant `devices-in-room` me parait le mieux. Je regardais le code, et notamment:

ça me parait plus clean aussi !

> [@Jean-Philippe](#):
>
> Mais la ou je sais pas comment gérer, c’est pour les options du `SELECT` que je veux créer, tu indiques de mettre des valeurs entières en statique, ok, mais on est d’accord qu’il faut différencier les valeurs selon le service ? donc vi une détection du service au travers du selector de la device\_feature par exemple ?

> [@Jean-Philippe](#):
>
> Mais la ou je sais pas comment gérer, c’est pour les options du `SELECT` que je veux créer, tu indiques de mettre des valeurs entières en statique, ok, mais on est d’accord qu’il faut différencier les valeurs selon le service ?

Bah dans ton cas je te recommanderais de créer un couple category/type spécifique pour ce select, et de différencier sur ça.

[Page précédente](https://community.gladysassistant.com/t/dev-integration-pour-zoneminder/6483.md?page=1)
