Configurer les caméras Reolink et son hub

Bonjour @Will_71

J’espère ne pas m’être trompé de personne (désolé si c’est le cas).

Je dispose de 4 caméras reolink (une en réseau et 3 en wifi).

Elles sont toutes rattachées à un hub reolink pour le stockage des vidéos et images.

J’ai installé l’intégration reolink sous Gladys (je suis actuellement sous HA mais j’aimerai migrer, à terme, sous Gladys car je trouve le produit plus intuitif même s’il me manque encore des choses) mais je n’arrive pas à faire détecter mes caméras.

J’ai essayé la config en mettant l’adresse du hub puis une autre config en mettant l’adresse ip de ma caméra connectée en ethernet mais le scan ne me trouve aucune caméra ( à noter que les 3 caméras wifi ont bien une adresse ip mais ce n’est pas une adresse de mon réseau local).

Y a t-il des astuces à connaître pour la config ? une config particulière quand on a un hub ?

Sous HA, j’avais juste configuré le hub mais je pense que sous Gladys c’est différent.

Merci de ton aide

Re,

Je crois que j’ai ma réponse, en fait.

J’ai regardé sur le github et, à priori, l’intégration ne prend pas en charge le homehub.

@filbou40 je me suis permis de modifier le titre pour que ce soit plus explicite.

Salut @filbou40,

Tu t’es pas trompé de personne. A vrai dire pour l’instant je n’ai pas de réponse concernant le hub. J’ai une caméra pour ma part et elle a été reconnu tout de suite.
Mais on va essayé de faire en sorte que tu retrouves ton hub comme sur home assistant. Je serais pas disponible les 4 prochains jour mais dès que je peux je te solliterais pour faire des essais si cela ne te dérange pas.

En attendant est-ce que tu peux me préciser les modèles de ton hub et caméras.
Merci d’avance.

Merci @Will_71 pour ton retour ,

Pour ma part, je partirai en vacances demain pour 10 jours donc je ne serai pas vraiment dispo pendant ces 10 jours (mais, de toute manière, il n’y a aucune urgence :wink:

A mon retour, je serai bien sur disponible pour faire les tests que tu souhaites.

J’ai un home hub version 1 (Reolink Home Hub - Centre de surveillance sans fil avec stockage local chiffré et gestion multi-appareils | Reolink Officiel) sur lequel j’ai connecté :

  • une argus 3 ultra
  • une video doorbell sur batterie (alimentée par panneau solaire)
  • une RLC-510A
  • 2 E1 Zoom (dont une alimentée par panneau solaire).

la RLC est connectée sur une prise CPL

Je pourrai bien sur te donner des infos plus précises (config sur le home hub) si tu le souhaites.

Merci encore

Ok merci. Bonne vacances et je te tiens au courant pour les tests.

Bonjour @filbou40,

Bonne nouvelle : j’ai avancé sur le support du Home Hub pendant ton absence. C’est implémenté et testé côté code, il ne manque plus que la validation sur ton matériel réel.

Ce qui a été fait

L’intégration sait maintenant reconnaître un Home Hub (ou un NVR) et énumérer les caméras qui sont derrière. Chaque caméra devient un appareil Gladys distinct, avec ses propres fonctionnalités selon son modèle — la batterie sur l’Argus 3 Ultra, le bouton sur la Video Doorbell, les presets PTZ sur les E1 Zoom, etc. Le flux RTSP et les snapshots pointent chacun sur le bon canal.

Deux points ont demandé un peu de soin :

  • L’identité des caméras. Le numéro de canal est une position, pas une identité : une caméra ré-appairée peut changer de place, et des appareils Gladys identifiés par le canal pointeraient alors silencieusement sur la mauvaise caméra. J’utilise donc l’UID propre à chaque caméra quand le hub l’annonce.
  • Les caméras sur batterie. Le hub sait si une caméra dort et répond à sa place pendant ce temps. Réveiller une caméra coûte bien plus cher que la requête elle-même, donc une caméra endormie est exclue du rafraîchissement automatique — mais reste consultable quand tu ouvres son widget. C’est important pour ton installation, avec l’Argus et la Doorbell sur solaire.

J’ai simulé ton installation complète (Hub + Argus 3 Ultra + Doorbell + RLC-510A + 2 E1 Zoom) et les 5 caméras ressortent bien comme 5 appareils distincts.

Ce dont j’ai besoin de toi

Le code s’appuie sur le format de réponse documenté, mais je n’ai pas de Home Hub sous la main pour vérifier ce que le tien renvoie réellement. Deux champs sont optionnels selon les versions de firmware, et j’aimerais confirmer qu’ils sont bien présents chez toi.

Si tu peux lancer ces deux commandes depuis une machine de ton réseau (en remplaçant l’IP et le mot de passe) :

curl -k -s -X POST "http://<ip-du-hub>/cgi-bin/api.cgi?cmd=Login" \
  -d '[{"cmd":"Login","action":0,"param":{"User":{"userName":"admin","password":"TON_MDP"}}}]'

La réponse contient un « name » dans le bloc Token — c’est le jeton à reporter dans la seconde commande :

curl -k -s -X POST "http://<ip-du-hub>/cgi-bin/api.cgi?cmd=GetChannelstatus&token=LE_TOKEN" \
  -d '[{"cmd":"GetChannelstatus","action":0,"param":{}}]'

Pense à retirer le mot de passe de la sortie avant de la coller ici. Les UID de caméras ne sont pas sensibles, mais tu peux aussi les masquer partiellement si tu préfères — j’ai surtout besoin de savoir si les champs uid et sleep sont remplis, pas de leur valeur exacte.

Si ton hub est en HTTPS uniquement, remplace http:// par https:// (le -k est déjà là pour le certificat auto-signé).

Avec ça je pourrai confirmer que tout colle et te proposer une version à tester. Aucune urgence, prends le temps de rentrer de vacances !

Bonjour @Will_71 ,

Génial. Je regarde à mon retour (mardi prochain au plus tôt mais plutôt mercredi) et je te fais un retour.

A+

Hello,

Merci pour cette intégration !

J’ai une caméra solaire argus 4 pro qui fonctionne sur batterie. Est-ce que c’est compatible sans hub ?

J’ai tenté la connexion mais sans succès. Je me demande même si j’utilise les login/MDP qu’il faut…

Attention avec les caméras sur batterie, chez TAPO par exemple le flux en RTSP n’est pas autorisé sinon cela décharge trop rapidement la batterie, pour Reolink je pense que c’est similaire

Oui, je confirme. Merci pour ta réponse.

Salut @Will_71 ,

Bon , j’ai voulu lancer la commande sur mon portable sous windows mais la commande se lance mais je n’ai rien en sortie (aucun message). Par contre, elle met un peu de temps à me rendre la main donc j’imagine qu’elle tourne.

tu crois qu’il faut que je teste sur une machine sous linux ? auquel cas, il faut que j’en trouve une :smiling_face: .

Merci

je complète.

J’avais lancé la commande dans une fenêtre classique (non admin).

J’ai relancé dans une fenêtre de commande admin et cela me sort ca :

Invoke-WebRequest : Impossible de trouver un paramètre correspondant au nom « k ».
Au caractère Ligne:1 : 6

  • curl -k -s -X POST « https://192.168.1.69/cgi-bin/api.cgi?cmd=Login » - …
  •  ~~
    
    • CategoryInfo : InvalidArgument : (:slight_smile: [Invoke-WebRequest], ParameterBindingException
    • FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

bon, on recommence. Ne tiens pas compte des messages précédents.

Par contre, sous windows, dans une fenêtre CMD admin, j’obtiens çà :

[
{
« cmd » : « Login »,
« code » : 1,
« error » :
{
« detail » : « please login first »,
« rspCode » : -6
}
}
]

et ça en http (le précédent était en https)

302 Found

302 Found


nginx

Salut @filbou40,

Pas de souci, tu n’as rien cassé — le hub répond bien, c’est juste la commande qui arrive vide chez lui.

Ce qui se passe. Sous Windows, cmd.exe ne comprend pas les guillemets simples ‹ … › que j’avais mis autour du -d (c’est une syntaxe Linux/macOS). Du coup le JSON avec ton identifiant et ton mot de passe part en morceaux, le hub ne voit aucun identifiant, et il répond logiquement please login first. Rien à voir avec ton mot de passe ni avec ta config.

Pour le 302 Found en HTTP : c’est normal, ton hub force le HTTPS. Il faut donc bien garder https://, et c’est une info utile pour moi — je vais vérifier que l’intégration gère bien ce cas.

Les commandes corrigées pour Windows. À lancer dans une fenêtre CMD (pas PowerShell — dans PowerShell, curl est un alias qui ne connaît pas les mêmes options, d’où l’erreur « Impossible de trouver un paramètre correspondant au nom « k » » de ton message précédent). Une fenêtre normale suffit, pas besoin d’admin.

Tout sur une seule ligne, et les guillemets internes sont bien échappés par " et en remplaçant le mot de passe :

curl -k -s -X POST "https://192.168.1.69/cgi-bin/api.cgi?cmd=Login" -H "Content-Type: application/json" -d "[{\"cmd\":\"Login\",\"action\":0,\"param\":{\"User\":{\"userName\":\"admin\",\"password\":\"TON_MDP\"}}}]"

Tu devrais cette fois recevoir un bloc Token contenant un name — c’est le jeton à reporter dans la seconde commande, à la place de LE_TOKEN :

curl -k -s -X POST "https://192.168.1.69/cgi-bin/api.cgi?cmd=GetChannelstatus&token=LE_TOKEN" -H "Content-Type: application/json" -d "[{\"cmd\":\"GetChannelstatus\",\"action\":0,\"param\":{}}]"

Le jeton expire au bout d’un moment, donc enchaîne les deux commandes sans trop attendre.

Ce qui m’intéresse dans la réponse. C’est la sortie de la seconde commande. Pense à retirer ton mot de passe de la première avant de coller quoi que ce soit. Pour les UID des caméras, tu peux les tronquer si tu préfères — j’ai surtout besoin de savoir si les champs uid et sleep sont bien remplis pour chaque canal, pas de leur valeur exacte.

Merci

Salut @Will_71 ,

Voici la réponse à la deuxième commande:

[
{
« cmd » : « GetChannelstatus »,
« code » : 0,
« value » :
{
« count » : 8,
« status » :
[
{
« channel » : 0,
« name » : « Abri Jardin »,
« online » : 1,
« sleep » : 0,
« uid » : « 9527000IWMNL1B1K »
},
{
« channel » : 1,
« name » : « camera porche »,
« online » : 1,
« sleep » : 1,
« uid » : « 9527000KN95C1JG7 »
},
{
« channel » : 2,
« name » : « Portail »,
« online » : 1,
« sleep » : 1,
« uid » : « 9527000ICVT7S58V »
},
{
« channel » : 3,
« name » : « salon »,
« online » : 1,
« sleep » : 0,
« uid » : « 9527000IXL6TIQIB »
},
{
« channel » : 4,
« name » : « veranda »,
« online » : 1,
« sleep » : 0,
« uid » : « 9527000IXL7E1YS3 »
},
{
« channel » : 5,
« name » : «  »,
« online » : 0,
« sleep » : 0,
« uid » : «  »
},
{
« channel » : 6,
« name » : «  »,
« online » : 0,
« sleep » : 0,
« uid » : «  »
},
{
« channel » : 7,
« name » : «  »,
« online » : 0,
« sleep » : 0,
« uid » : «  »
}
]
}
}
]

Ok là on a une réponse de ton hub. Je regarde dans l’après-midi et je te dis quand la prochaine version est prête.

OK. Merci et aucune urgence bien sur.

Merci beaucoup, cette réponse est très parlante. :+1:

Elle confirme que le hub est bien détecté et que les 5 caméras sont vues correctement, avec leur UID et leur état de veille (« camera porche » et « Portail » dormaient au moment du test, ce qui est normal sur les modèles à batterie).

Tu as mentionné que Home Assistant récupérait bien tout : je suis allé voir comment ils s’y prennent, et ça m’a donné la réponse. Ton firmware ne renvoie pas le champ typeInfo dans la liste des canaux, mais il existe une autre commande, GetChnTypeInfo, qui donne le modèle canal par canal. C’est celle que j’aurais dû utiliser dès le départ.

:warning: À lancer dans cmd.exe, pas dans PowerShell (curl y est un alias qui ne comprend pas -k). Le token expire au bout d’une heure : si tu obtiens please login first (code -6), refais l’étape 1.

Étape 1 — récupérer un token (remplace le mot de passe) :

curl -k -s -X POST "https://192.168.1.69/cgi-bin/api.cgi?cmd=Login" -H "Content-Type: application/json" -d "[{\"cmd\":\"Login\",\"action\":0,\"param\":{\"User\":{\"userName\":\"admin\",\"password\":\"TON_MDP\"}}}]"

Repère « name » dans le bloc Token : c’est ton token.

Étape 2 — le type de chaque caméra (remplace LE_TOKEN) :

curl -k -s -X POST "https://192.168.1.69/cgi-bin/api.cgi?cmd=GetChnTypeInfo&token=LE_TOKEN" -H "Content-Type: application/json" -d "[{\"cmd\":\"GetChnTypeInfo\",\"action\":0,\"param\":{\"channel\":0}},{\"cmd\":\"GetChnTypeInfo\",\"action\":0,\"param\":{\"channel\":1}},{\"cmd\":\"GetChnTypeInfo\",\"action\":0,\"param\":{\"channel\":2}},{\"cmd\":\"GetChnTypeInfo\",\"action\":0,\"param\":{\"channel\":3}},{\"cmd\":\"GetChnTypeInfo\",\"action\":0,\"param\":{\"channel\":4}}]"

Elle interroge le hub et non les caméras : celles qui dorment ne seront pas réveillées. C’est le champ type de chaque bloc ChnTypeInfo qui m’intéresse.

Ça devrait me suffire pour identifier automatiquement ta sonnette et lui ajouter la capacité « bouton de sonnette ». Merci encore, ta remarque sur Home Assistant m’a mis sur la bonne piste.