Configurar las cámaras Reolink y su hub

Hola @Will_71

Espero no haberme equivocado de persona (disculpa si es así).

Tengo 4 cámaras reolink (una en red y 3 en wifi).

Todas están conectadas a un hub reolink para el almacenamiento de videos e imágenes.

He instalado la integración reolink en Gladys (actualmente estoy en HA pero me gustaría migrar, a largo plazo, a Gladys porque me parece el producto más intuitivo, aunque aún me faltan algunas cosas) pero no logro detectar mis cámaras.

He probado la configuración poniendo la dirección del hub y luego otra configuración poniendo la dirección IP de mi cámara conectada por ethernet, pero el escaneo no encuentra ninguna cámara (a destacar que las 3 cámaras wifi tienen una dirección IP, pero no es una dirección de mi red local).

¿Hay trucos para la configuración? ¿Alguna configuración particular cuando se tiene un hub?

En HA, solo había configurado el hub, pero creo que en Gladys es diferente.

Gracias por tu ayuda

Re,

Creo que ya tengo mi respuesta, después de todo.

He mirado en GitHub y, al parecer, la integración no admite el homehub.

@filbou40 me he permitido modificar el título para que sea más explícito.

Hola @filbou40,

No te has equivocado de persona. De hecho, por ahora no tengo una respuesta sobre el hub. Tengo una cámara por mi parte y fue reconocida de inmediato.
Pero vamos a intentar que recuperes tu hub como en Home Assistant. No estaré disponible los próximos 4 días, pero en cuanto pueda te contactaré para hacer pruebas si no te importa.

Mientras tanto, ¿podrías especificarme los modelos de tu hub y cámaras?
Gracias de antemano.

Gracias @Will_71 por tu respuesta,

Por mi parte, me voy de vacaciones mañana durante 10 días, así que no estaré muy disponible durante estos 10 días (pero, de todos modos, no hay ninguna urgencia :wink:

A mi regreso, estaré disponible para realizar las pruebas que desees.

Tengo un home hub versión 1 (Reolink Home Hub | Hub WiFi avec Stockage Local Chiffré) al que he conectado:

  • una argus 3 ultra
  • un videoportero con batería (alimentado por panel solar)
  • una RLC-510A
  • 2 E1 Zoom (una de ellas alimentada por panel solar).

La RLC está conectada a un enchufe CPL

Por supuesto, puedo darte más información precisa (configuración en el home hub) si lo deseas.

Gracias de nuevo

Vale, gracias. ¡Buenas vacaciones y te aviso sobre las pruebas.

Hola @filbou40,

Buenas noticias: he avanzado en el soporte del Home Hub durante tu ausencia. Está implementado y probado en el código, solo falta la validación en tu hardware real.

Lo que se ha hecho

La integración ahora puede reconocer un Home Hub (o un NVR) y enumerar las cámaras que están detrás. Cada cámara se convierte en un dispositivo Gladys distinto, con sus propias funcionalidades según su modelo — la batería en el Argus 3 Ultra, el botón en la Video Doorbell, los presets PTZ en los E1 Zoom, etc. El flujo RTSP y las instantáneas apuntan cada una al canal correcto.

Dos puntos han requerido un poco de cuidado:

  • La identidad de las cámaras. El número de canal es una posición, no una identidad: una cámara reapareada puede cambiar de lugar, y los dispositivos Gladys identificados por el canal apuntarían entonces silenciosamente a la cámara equivocada. Por lo tanto, utilizo el UID propio de cada cámara cuando el hub lo anuncia.
  • Las cámaras con batería. El hub sabe si una cámara está en modo de suspensión y responde en su lugar durante este tiempo. Despertar una cámara cuesta mucho más que la consulta en sí, por lo que una cámara en modo de suspensión se excluye de la actualización automática — pero sigue siendo consultable cuando abres su widget. Esto es importante para tu instalación, con el Argus y la Doorbell en solar.

He simulado tu instalación completa (Hub + Argus 3 Ultra + Doorbell + RLC-510A + 2 E1 Zoom) y las 5 cámaras aparecen correctamente como 5 dispositivos distintos.

Lo que necesito de ti

El código se basa en el formato de respuesta documentado, pero no tengo un Home Hub a mano para verificar lo que el tuyo realmente devuelve. Dos campos son opcionales según las versiones de firmware, y me gustaría confirmar que están presentes en tu caso.

Si puedes ejecutar estos dos comandos desde una máquina de tu red (reemplazando la IP y la contraseña):

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

La respuesta contiene un « name » en el bloque Token — es el token a reportar en el segundo comando:

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

No olvides eliminar la contraseña de la salida antes de pegarla aquí. Los UID de las cámaras no son sensibles, pero también puedes ocultarlos parcialmente si lo prefieres — solo necesito saber si los campos uid y sleep están llenos, no su valor exacto.

Si tu hub está en HTTPS solo, reemplaza http:// por https:// (el -k ya está allí para el certificado auto-firmado).

Con esto podré confirmar que todo encaja y ofrecerte una versión para probar. Sin prisas, tómate tu tiempo para volver de vacaciones.

Hola @Will_71,

Genial. Lo miro a mi vuelta (a más tardar el próximo martes, pero más bien el miércoles) y te doy mi opinión.

Hasta luego

Hola,

¡Gracias por esta integración!

Tengo una cámara solar Argus 4 Pro que funciona con batería. ¿Es compatible sin hub?

He intentado conectarla, pero sin éxito. Incluso me pregunto si estoy usando el nombre de usuario y la contraseña correctos…

Cuidado con las cámaras con batería, por ejemplo, en TAPO el flujo en RTSP no está permitido, ya que la batería se descarga demasiado rápido. Creo que en Reolink es similar.

Sí, lo confirmo. Gracias por tu respuesta.

Hola @Will_71,

Bueno, intenté ejecutar el comando en mi portátil con Windows, pero el comando se ejecuta pero no obtengo ninguna salida (ningún mensaje). Sin embargo, tarda un poco en devolverme el control, así que supongo que está funcionando.

do crees que debería probarlo en una máquina con Linux? En ese caso, tendré que encontrar una :smiling_face: .

Gracias

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 ça :

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

bueno, volvamos a empezar. No tengas en cuenta los mensajes anteriores.

Pero bajo Windows, en una ventana de CMD como administrador, obtengo esto:

[
{
« cmd » : « Login »,
« code » : 1,
« error » :
{
« detail » : « por favor, inicie sesión primero »,
« rspCode » : -6
}
}
]

y esto en http (el anterior era en https)

302 Found

302 Found


nginx

Hola @filbou40,

No hay problema, no has roto nada — el hub responde bien, es solo que la orden llega vacía a él.

Lo que pasa. En Windows, cmd.exe no entiende las comillas simples ‹ … › que puse alrededor de -d (es una sintaxis de Linux/macOS). Por lo tanto, el JSON con tu identificador y tu contraseña se envía en pedazos, el hub no ve ningún identificador, y responde lógicamente please login first. No tiene nada que ver con tu contraseña ni con tu configuración.

Sobre el 302 Found en HTTP: es normal, tu hub fuerza el HTTPS. Por lo tanto, debes mantener https://, y es una información útil para mí — voy a verificar que la integración maneje bien este caso.

Las órdenes corregidas para Windows. Para ejecutar en una ventana CMD (no PowerShell — en PowerShell, curl es un alias que no conoce las mismas opciones, de ahí el error « No se puede encontrar un parámetro con el nombre ‹ k › » de tu mensaje anterior). Una ventana normal es suficiente, no necesitas administrador.

Todo en una sola línea, y las comillas internas están bien escapadas con " y reemplazando la contraseña:

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\":\"TU_CONTRASEÑA\"}}}]"

Esta vez deberías recibir un bloque Token que contiene un nombre — es el token a reportar en la segunda orden, en lugar 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\":{}}]"

El token expira después de un tiempo, por lo que encadena las dos órdenes sin esperar demasiado.

Lo que me interesa en la respuesta. Es la salida de la segunda orden. Asegúrate de eliminar tu contraseña de la primera antes de pegar cualquier cosa. Para los UID de las cámaras, puedes truncarlos si lo prefieres — principalmente necesito saber si los campos uid y sleep están bien llenos para cada canal, no su valor exacto.

Gracias

Hola @Will_71,

Aquí está la respuesta al segundo comando:

[
{
« cmd » : « GetChannelstatus »,
« code » : 0,
« value » :
{
« count » : 8,
« status » :
[
{
« channel » : 0,
« name » : « Abri Jardin »,
« online » : 1,
« sleep » : 0,
« uid » : « 9527000IWMNL1B1K »
},
{
« channel » : 1,
« name » : « cámara porche »,
« online » : 1,
« sleep » : 1,
« uid » : « 9527000KN95C1JG7 »
},
{
« channel » : 2,
« name » : « Portail »,
« online » : 1,
« sleep » : 1,
« uid » : « 9527000ICVT7S58V »
},
{
« channel » : 3,
« name » : « sala »,
« 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 » : «  »
}
]
}
}
]

Vale, ya tenemos una respuesta de tu hub. La reviso esta tarde y te aviso cuando esté lista la próxima versión.

De acuerdo. Gracias y no hay ninguna urgencia, por supuesto.

Muchas gracias, esta respuesta es muy esclarecedora. :+1:

Confirma que el hub se detecta correctamente y que las 5 cámaras se ven correctamente, con su UID y su estado de inactividad (« camera porche » y « Portail » estaban dormidas en el momento de la prueba, lo cual es normal en los modelos con batería).

Mencionaste que Home Assistant recupera todo bien: fui a ver cómo lo hacen, y eso me dio la respuesta. Tu firmware no devuelve el campo typeInfo en la lista de canales, pero existe otro comando, GetChnTypeInfo, que da el modelo canal por canal. Es el que debería haber usado desde el principio.

:warning: Ejecutar en cmd.exe, no en PowerShell (curl es un alias que no entiende -k). El token expira después de una hora: si obtienes please login first (código -6), repite el paso 1.

Paso 1 — obtener un token (reemplaza la contraseña):

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\":\"TU_CONTRASEÑA\"}}}]"

Busca « name » en el bloque Token: ese es tu token.

Paso 2 — el tipo de cada cámara (reemplaza EL_TOKEN):

curl -k -s -X POST "https://192.168.1.69/cgi-bin/api.cgi?cmd=GetChnTypeInfo&token=EL_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}}]"

Consulta el hub y no las cámaras: las que están dormidas no se despertarán. Es el campo type de cada bloque ChnTypeInfo el que me interesa.

Esto debería ser suficiente para identificar automáticamente tu timbre y agregarle la capacidad « botón del timbre ». Muchas gracias, tu comentario sobre Home Assistant me puso en la pista correcta.