Problema con la integración externa de tapo

Según sus comentarios (gracias @StephaneB, @JKBS64), he realizado una gran revisión de la integración Tapo. Aquí está lo que llega en la próxima versión.

La dirección IP de las cámaras

Este era el principal problema, y no era solo una cuestión de ergonomía: la detección automática simplemente no funcionaba.

  • El escaneo de la red no encontraba ninguna cámara. La consulta enviada no estaba en el formato correcto, y la cámara no era reconocida en la respuesta. Las cámaras ahora se encuentran por su dirección MAC, como lo hace la aplicación Tapo.
  • Las direcciones podían desaparecer. Gladys limita los escaneos a uno cada 10 segundos. Cuando se rechazaba un escaneo (el « Too Many Requests » en sus registros), las cámaras quedaban sin dirección, de ahí el TAPO_CAMERA_IP_UNKNOWN. Una cámara ahora conserva su última dirección conocida.
  • La entrada manual era demasiado estricta. Un nombre con mayúscula, un acento o un _ diferente no coincidía.

Y sobre todo, es mucho más fácil de configurar:

  • Nueva acción « Definir la dirección IP de un dispositivo », al final de la pantalla Configuración: se elige el dispositivo en una lista, se escribe su IP, y Gladys verifica de inmediato que responde y captura una imagen. La IP se encuentra en la aplicación Tapo: parámetros del dispositivo > Información del dispositivo.
  • « Probar la conexión » ahora muestra una línea por dispositivo: su dirección, de dónde proviene, y qué hacer si falta.
  • Los dispositivos no encontrados se señalan directamente en la pantalla de configuración.

Pequeño consejo: reserve la IP de sus cámaras en su box (reserva DHCP), para que no cambie después de un corte.

¿Y por la nube, sin IP? Lo he mirado: no es posible. TP-Link no da ningún acceso a la imagen o al flujo de las cámaras por Internet a aplicaciones de terceros. Incluso la integración Home Assistant solo pasa por la red local. La ventaja es que sus imágenes nunca salen de su casa.

Los timbres

@JKBS64: tu D235 no aparecía porque TP-Link clasifica los timbres en una categoría aparte en su nube. Esto se ha corregido, debería ser descubierto ahora.

Más fiabilidad

También he corregido varios casos en los que una cámara podía dejar de subir movimientos sin decir nada, o ser bloqueada temporalmente por demasiados intentos de conexión. Las cámaras con batería también se despiertan menos sin motivo.

Modo privado: atención, cambio

La integración ahora utiliza el modo privado estándar de las cámaras en Gladys (el comando « Activada »). Desactivar una cámara detiene la captura y la visualización en todas partes. En los modelos que lo permiten, esto también enmascara el objetivo, como el modo privado de la aplicación Tapo.

Esto requiere Gladys 5.0 o superior. Si utilizaba el antiguo interruptor « modo privado » en una escena, sigue funcionando. Sin embargo, cuando actualice la cámara desde la pantalla Descubrimiento, deberá adaptar la escena, y la lógica es inversa: « activada » significa que la cámara funciona.

Nuevo: enchufes, bombillas y sensores Tapo

La integración ya no se limita a las cámaras:

  • Enchufes (P100, P110…): encendido/apagado, y para los modelos con medición, potencia y consumo, compatibles con el seguimiento de energía de Gladys.
  • Regletas (P300, P304M…): cada enchufes es controlable por separado.
  • Bombillas y tiras LED (L510, L530, L900, L920…): luminosidad, color y blanco.
  • Interruptores de pared (S500, S505, variadores S500D/S505D).
  • Sensores del hub H100: temperatura/humedad (T310/T315), movimiento (T100), apertura de puerta (T110), fuga de agua (T300), botones (S200B/S200D) y cabeza termostática (KE100).

Todo pasa en local, con su cuenta Tapo habitual: nada más que configurar. El hub H200 aún no está soportado.

Necesidad de probadores

No tengo todos estos dispositivos en mi casa. Si tiene enchufes, bombillas, un hub H100 o un timbre Tapo y quiere probar, dígamelo aquí. Y como de costumbre, en caso de problema, pegue los registros de la integración y el resultado de « Probar la conexión », es lo que más me ayuda.

Gracias por su paciencia :slightly_smiling_face:

Si hay alguien motivado para probar, puedo hacer una imagen dev de prueba antes de hacer un lanzamiento. Dígamelo.

@JKBS64, a continuación el procedimiento para probar la imagen de desarrollo, puedes ponerla en tu Gladys sin romper nada.
Cuando me digas que todo está bien y yo valide la versión, podrás entonces eliminar esta versión y actualizar la versión oficial.

Para instalar una versión de desarrollo, hay que ir a Integración => Instalar desde GitHub

Luego, haces clic en Modo desarrollador

En Imagen Docker, pones:

ghcr.io/william-de71/gladys-tapo:dev

Y en el manifiesto:

{
  "manifest_version": 1,
  "type": "device",
  "name": "Tapo",
  "description": {
    "en": "Your Tapo cameras, doorbells, plugs, bulbs and hub sensors in Gladys.",
    "es": "Tus cámaras, timbres, enchufes, bombillas y sensores de hub Tapo en Gladys."
  },
  "version": "1.2.5",
  "docker_image": "ghcr.io/william-de71/gladys-tapo:dev",
  "gladys_version": ">=5.0.0",
  "categories": [
    "security",
    "lighting",
    "energy"
  ],
  "cover_image": "https://raw.githubusercontent.com/William-De71/gladys-tapo/master/cover.jpg",
  "transports": [
    "local",
    "cloud"
  ],
  "network_discovery": [
    {
      "type": "udp-active-broadcast",
      "ports": [
        20002
      ]
    }
  ],
  "config_schema": [
    {
      "key": "intro",
      "type": "section",
      "label": {
        "en": "Getting started",
        "es": "Para empezar"
      },
      "description": {
        "en": "This integration finds your devices through your TP-Link cloud account, then talks to them on your local network. Enter your Tapo account below, then go to the Discover screen and run a scan: your devices appear there, ready to be added.\n\nGladys locates each device on your network by itself. If one is reported as not found (another subnet or VLAN, broadcast filtered by your router), use the \"Set a device IP address\" action at the bottom of this page: pick the device, type its address — it is shown in the Tapo app, under the device settings > Device info.",
        "es": "Esta integración encuentra tus dispositivos a través de tu cuenta en la nube de TP-Link, luego se comunica con ellos en tu red local. Introduce tu cuenta Tapo a continuación, luego ve a la pantalla Descubrir y ejecuta un escaneo: tus dispositivos aparecen allí, listos para ser añadidos.\n\nGladys localiza cada dispositivo en tu red por sí misma. Si uno de ellos se informa como no encontrado (otra subred o VLAN, difusión filtrada por tu router), usa la acción "Establecer la dirección IP de un dispositivo" al final de esta página: selecciona el dispositivo, escribe su dirección — se muestra en la aplicación Tapo, bajo la configuración del dispositivo > Información del dispositivo."
      },
      "links": [
        {
          "url": "https://www.tapo.com/en/",
          "label": {
            "en": "Tapo website",
            "es": "Sitio web de Tapo"
          }
        }
      ]
    },
    {
      "key": "email",
      "type": "string",
      "label": {
        "en": "Tapo account email",
        "es": "Correo electrónico de la cuenta Tapo"
      },
      "description": {
        "en": "The email address of your TP-Link / Tapo account, the one you use in the Tapo app.",
        "es": "La dirección de correo electrónico de tu cuenta TP-Link / Tapo, la que usas en la aplicación Tapo."
      },
      "placeholder": {
        "en": "you@example.com",
        "es": "tú@ejemplo.com"
      },
      "required": true
    },
    {
      "key": "password",
      "type": "secret",
      "label": {
        "en": "Tapo account password",
        "es": "Contraseña de la cuenta Tapo"
      },
      "description": {
        "en": "The password of your TP-Link / Tapo account. It is used to list your devices, to talk to your plugs, lights and hubs on your network, and, for cameras without RTSP, to open the local stream.",
        "es": "La contraseña de tu cuenta TP-Link / Tapo. Se utiliza para listar tus dispositivos, para comunicarte con tus enchufes, luces y hubs en tu red, y, para cámaras sin RTSP, para abrir el flujo local."
      },
      "required": true
    },
    {
      "key": "region",
      "type": "select",
      "label": {
        "en": "Cloud region",
        "es": "Región de la nube"
      },
      "description": {
        "en": "The TP-Link cloud server closest to you. Change it only if the connection test fails.",
        "es": "El servidor en la nube de TP-Link más cercano a ti. Cámbialo solo si la prueba de conexión falla."
      },
      "required": false,
      "default": "europe",
      "options": [
        {
          "value": "europe",
          "label": {
            "en": "Europe",
            "es": "Europa"
          }
        },
        {
          "value": "america",
          "label": {
            "en": "America",
            "es": "América"
          }
        },
        {
          "value": "asia",
          "label": {
            "en": "Asia",
            "es": "Asia"
          }
        },
        {
          "value": "default",
          "label": {
            "en": "Worldwide",
            "es": "Mundial"
          }
        }
      ]
    },
    {
      "key": "rtsp_section",
      "type": "section",
      "label": {
        "en": "Camera account (RTSP and ONVIF)",
        "es": "Cuenta de la cámara (RTSP y ONVIF)"
      },
      "description": {
        "en": "Cameras that expose an RTSP stream need the camera account you created in the Tapo app (Camera settings > Advanced settings > Camera account). It is also what unlocks ONVIF, which lets a camera report a motion the instant it happens instead of being polled. This is NOT your Tapo account, and it is created PER CAMERA. The simplest way to enter it: use the \"Save a camera account\" action at the bottom of this page, once per camera. The two fields below only serve as a default, for users who reused the same credentials everywhere.",
        "es": "Las cámaras que exponen un flujo RTSP necesitan la cuenta de la cámara que creaste en la aplicación Tapo (Configuración de la cámara > Configuración avanzada > Cuenta de la cámara). También es lo que desbloquea ONVIF, lo que permite que una cámara informe un movimiento en el instante en que ocurre en lugar de ser interrogada. ESTO NO ES tu cuenta Tapo, y se crea POR CÁMARA. La manera más sencilla de introducirla: usa la acción "Guardar la cuenta de una cámara" al final de esta página, una vez por cámara. Los dos campos de abajo solo sirven como valor predeterminado, para usuarios que reutilizaron las mismas credenciales en todas partes."
      }
    },
    {
      "key": "rtsp_username",
      "type": "string",
      "label": {
        "en": "Default account username",
        "es": "Nombre de usuario de la cuenta predeterminada"
      },
      "description": {
        "en": "Used for every RTSP camera that has no specific account below.",
        "es": "Usado para todas las cámaras RTSP que no tienen una cuenta específica a continuación."
      },
      "required": false
    },
    {
      "key": "rtsp_password",
      "type": "secret",
      "label": {
        "en": "Default account password",
        "es": "Contraseña de la cuenta predeterminada"
      },
      "description": {
        "en": "Used for every RTSP camera that has no specific account below.",
        "es": "Usado para todas las cámaras RTSP que no tienen una cuenta específica a continuación."
      },
      "required": false
    },
    {
      "key": "camera_accounts",
      "type": "secret",
      "label": {
        "en": "Accounts per camera (advanced)",
        "es": "Cuentas por cámara (avanzado)"
      },
      "description": {
        "en": "Prefer the \"Save a camera account\" action below: the accounts it saves are stored separately and do not appear here. Format, if you type here: cameras separated by a comma, each as `name|username|password` (a password containing a comma must go through the action).",
        "es": "Prefiere la acción "Guardar la cuenta de una cámara" a continuación: las cuentas que guarda se almacenan por separado y no aparecen aquí. Formato, si escribes aquí: cámaras separadas por una coma, cada una como `nombre|nombre de usuario|contraseña` (una contraseña que contenga una coma debe pasar por la acción)."
      }
    }
  ]
}
```. Formato, si lo ingresa aquí: cámaras separadas por una coma, cada una en el formato `nombre|identificador|contraseña` (una contraseña que contenga una coma debe pasar por la acción)."
      },
      "placeholder": {
        "en": "Camera_jardin|gladys|MyPassword, Camera_salon|gladys|OtherPassword",
        "fr": "Camera_jardin|gladys|MonMotDePasse, Camera_salon|gladys|AutreMotDePasse"
      },
      "required": false
    },
    {
      "key": "stream_quality",
      "type": "select",
      "label": {
        "en": "Image quality",
        "fr": "Qualité de l'image"
      },
      "description": {
        "en": "HD gives a sharper image, SD is lighter and faster to capture.",
        "fr": "HD donne une image plus nette, SD est plus légère et plus rapide à capturer."
      },
      "required": false,
      "default": "HD",
      "options": [
        {
          "value": "HD",
          "label": {
            "en": "HD",
            "fr": "HD"
          }
        },
        {
          "value": "SD",
          "label": {
            "en": "SD",
            "fr": "SD"
          }
        }
      ]
    },
    {
      "key": "advanced",
      "type": "section",
      "label": {
        "en": "Advanced",
        "fr": "Avancé"
      },
      "description": {
        "en": "Only needed in particular cases: the integration finds your devices and their addresses by itself.",
        "fr": "Utile seulement dans des cas particuliers : l'intégration trouve vos appareils et leurs adresses toute seule."
      }
    },
    {
      "key": "camera_ips",
      "type": "string",
      "label": {
        "en": "Manual addresses (advanced)",
        "fr": "Adresses manuelles (avancé)"
      },
      "description": {
        "en": "Prefer the \"Set a device IP address\" action at the bottom of the page: you pick the device in a list, and Gladys checks the address answers. If you type here instead: entries separated by commas, each as `name|ip` (or `name=ip`). The name is matched without regard to case, accents, spaces or underscores, and may also be the device's MAC address.",
        "fr": "Préférez l'action « Définir l'adresse IP d'un appareil » en bas de la page : vous choisissez l'appareil dans une liste, et Gladys vérifie que l'adresse répond. Si vous saisissez ici : entrées séparées par des virgules, chacune sous la forme `nom|ip` (ou `nom=ip`). Le nom est comparé sans tenir compte des majuscules, accents, espaces ou tirets bas, et peut aussi être l'adresse MAC de l'appareil."
      },
      "placeholder": {
        "en": "Garden camera|192.168.1.42, Living room|192.168.1.43",
        "fr": "Caméra jardin|192.168.1.42, Salon|192.168.1.43"
      },
      "required": false
    },
    {
      "key": "event_poll_interval",
      "type": "number",
      "label": {
        "en": "Event check interval (s)",
        "fr": "Intervalle de vérification des événements (s)"
      },
      "description": {
        "en": "How often the integration checks for a doorbell press or a motion detection. A shorter interval reacts faster but talks to your cameras more often. Only affects cameras without ONVIF: cameras that support it push their events instantly, with nothing to wait for.",
        "fr": "Fréquence à laquelle l'intégration vérifie un appui sonnette ou une détection de mouvement. Un intervalle plus court réagit plus vite mais sollicite davantage vos caméras. Ne concerne que les caméras sans ONVIF : celles qui le proposent remontent leurs événements instantanément, sans attente."
      },
      "required": false,
      "default": 20,
      "min": 5,
      "max": 300
    },
    {
      "key": "device_poll_interval",
      "type": "number",
      "label": {
        "en": "Plugs, lights and sensors check interval (seconds)",
        "fr": "Intervalle de lecture des prises, lampes et capteurs (secondes)"
      },
      "description": {
        "en": "How often the plugs, lights and the sensors of a hub are read. These devices push nothing: a button press or a door opening reaches Gladys at the next read. Each read is one short request per device on your network.",
        "fr": "La fréquence à laquelle les prises, lampes et capteurs d'un hub sont lus. Ces appareils ne préviennent pas d'eux-mêmes : un appui sur un bouton ou l'ouverture d'une porte remonte à la lecture suivante. Chaque lecture est une courte requête par appareil sur votre réseau."
      },
      "required": false,
      "default": 5,
      "min": 2,
      "max": 300
    },
    {
      "key": "capture_timeout",
      "type": "number",
      "label": {
        "en": "Capture timeout (s)",
        "fr": "Délai de capture (s)"
      },
      "description": {
        "en": "How long a camera is given to deliver an image. Cameras using the proprietary protocol — battery models waking from deep sleep — need more time than an RTSP one. Above 14s the dashboard live view may time out first, but the scheduled refresh still succeeds.",
        "fr": "Temps accordé à une caméra pour fournir une image. Les caméras utilisant le protocole propriétaire — modèles sur batterie sortant de veille — ont besoin de plus de temps qu'une caméra RTSP. Au-delà de 14 s, la vue live du tableau de bord peut expirer avant, mais le rafraîchissement automatique aboutit quand même."
      },
      "required": false,
      "default": 14,
      "min": 5,
      "max": 60
    },
    {
      "key": "image_refresh_interval",
      "type": "number",
      "label": {
        "en": "Image refresh interval (s)",
        "fr": "Intervalle de rafraîchissement des images (s)"
      },
      "description": {
        "en": "How often a new image is captured for the dashboard, on MAINS-POWERED cameras only. Battery and solar cameras have their own setting below, so keeping your wired images fresh costs nothing to the others.",
        "fr": "Fréquence à laquelle une nouvelle image est capturée pour le tableau de bord, pour les caméras SUR SECTEUR uniquement. Les caméras sur batterie ou solaires ont leur propre réglage ci-dessous : garder vos images filaires fraîches ne coûte donc rien aux autres."
      },
      "required": false,
      "default": 60,
      "min": 15,
      "max": 3600
    },
    {
      "key": "battery_section",
      "type": "section",
      "label": {
        "en": "Battery protection",
        "fr": "Protection de la batterie"
      },
      "description": {
        "en": "Capturing images is what drains a battery or solar camera. These settings apply ONLY to battery and solar models — wired cameras keep their own interval and are never throttled. Once a camera goes below the pause limit, capturing only resumes at the recharge level: a partial recharge would restart the drain, and repeated shallow cycles wear the battery faster.",
        "fr": "La capture d'images est ce qui vide une caméra sur batterie ou solaire. Ces réglages s'appliquent UNIQUEMENT aux modèles sur batterie ou solaires — les caméras filaires gardent leur propre intervalle et ne sont jamais ralenties. Une fois passée sous la limite de pause, la capture ne reprend qu'au niveau de recharge : une recharge partielle relancerait la décharge, et les cycles courts répétés usent la batterie plus vite."
      }
    },
    {
      "key": "battery_image_refresh_interval",
      "type": "number",
      "label": {
        "en": "Battery camera refresh interval (s)",
        "fr": "Intervalle de rafraîchissement des caméras sur batterie (s)"
      },
      "description": {
        "en": "How often a battery or solar camera is captured, independently of your wired cameras. Waking a camera up is what costs the battery, so this is the single most effective setting: 900s (15 min) lets a solar panel refill between two captures. Lower it only if your cameras recharge faster than they discharge.",
        "fr": "Fréquence à laquelle une caméra sur batterie ou solaire est capturée, indépendamment de vos caméras filaires. C'est le réveil de la caméra qui coûte de la batterie : ce réglage est donc le plus efficace de tous. 900 s (15 min) laisse à un panneau solaire le temps de recharger entre deux captures. Solo bájelo si sus cámaras se cargan más rápido de lo que se descargan."
      },
      "required": false,
      "default": 900,
      "min": 60,
      "max": 86400
    },
    {
      "key": "battery_event_poll_interval",
      "type": "number",
      "label": {
        "en": "Battery camera check interval (s)",
        "fr": "Intervalle de vérification des caméras sur batterie (s)"
      },
      "description": {
        "en": "How often a battery or solar camera is contacted to read its level and its detections, independently of your wired cameras. Waking the camera is what costs the battery, and this happens far more often than a capture: at the wired 20s a camera is woken 180 times an hour, which drains a solar model faster than the panel refills it. Raise it if your camera keeps losing charge overnight.",
        "fr": "Fréquence à laquelle une caméra sur batterie ou solaire est contactée pour lire son niveau et ses détections, indépendamment de vos caméras filaires. C'est le réveil de la caméra qui coûte de la batterie, et il a lieu bien plus souvent qu'une capture : à 20 s, une caméra est réveillée 180 fois par heure, ce qui vide un modèle solaire plus vite que le panneau ne le recharge. Augmentez-le si votre caméra perd de la charge pendant la nuit."
      },
      "required": false,
      "default": 300,
      "min": 20,
      "max": 3600
    },
    {
      "key": "battery_pause_refresh",
      "type": "number",
      "label": {
        "en": "Pause automatic capture below (%)",
        "fr": "Suspendre la capture automatique sous (%)"
      },
      "description": {
        "en": "Below this level the automatic refresh stops. Opening the camera widget or a doorbell press still captures an image. This level is also the ceiling of the one below: a \"stop every capture\" set higher is lowered to it, so that the on-demand band does not vanish.",
        "fr": "Sous ce niveau, le rafraîchissement automatique s'arrête. Ouvrir le widget de la caméra ou un appui sonnette capture toujours une image. Ce niveau plafonne aussi le suivant : un « bloquer toute capture » réglé plus haut est ramené à cette valeur, pour que la plage à la demande ne disparaisse pas."
      },
      "required": false,
      "default": 60,
      "min": 0,
      "max": 100
    },
    {
      "key": "battery_stop_all",
      "type": "number",
      "label": {
        "en": "Stop every capture below (%)",
        "fr": "Bloquer toute capture sous (%)"
      },
      "description": {
        "en": "Below this level no image is captured at all, not even on request. Motion detection stops here too, and so does the privacy mode: the camera is only woken every 15 minutes for its battery level, which is what tells when it has recharged. Capture resumes a few points above this level, so a camera sitting right on it does not flip back and forth.",
        "fr": "Sous ce niveau, plus aucune image n'est capturée, même à la demande. La détection de mouvement s'arrête aussi, ainsi que le mode privé : la caméra n'est plus réveillée que toutes les 15 minutes pour lire son niveau, ce qui permet de savoir quand elle est rechargée. La reprise se fait quelques points au-dessus de ce niveau, pour qu'une caméra posée dessus ne bascule pas sans arrêt."
      },
      "required": false,
      "default": 40,
      "min": 0,
      "max": 100
    },
    {
      "key": "battery_resume",
      "type": "number",
      "label": {
        "en": "Resume automatic capture at (%)",
        "fr": "Reprendre la capture automatique à (%)"
      },
      "description": {
        "en": "Once a camera has been paused, it stays paused until it reaches this level — deliberately well above the pause limit, so it does not immediately fall back into the drain it was pulled out of. Avoid 100%: a solar camera charges in bursts and rarely reads exactly full, which would keep it paused for good.",
        "fr": "Une fois une caméra mise en pause, elle le reste jusqu'à ce niveau — volontairement bien au-dessus de la limite de pause, pour qu'elle ne retombe pas aussitôt dans la décharge dont elle vient de sortir. Évitez 100 % : une caméra solaire se recharge par à-coups et atteint rarement le plein exact, ce qui la laisserait en pause indéfiniment."
      },
      "required": false,
      "default": 80,
      "min": 0,
      "max": 100
    }
  ],
  "actions": [
    {
      "key": "test_connection",
      "label": {
        "en": "Test the connection",
        "fr": "Tester la connexion"
      },
      "timeout_seconds": 60,
      "description": {
        "en": "Connects to the Tapo cloud, scans your network, and lists every device with its address and where it came from — and what to do for those that are not found.",
        "fr": "Se connecte au cloud Tapo, scanne votre réseau, et liste chaque appareil avec son adresse et sa provenance — et quoi faire pour ceux qui ne sont pas trouvés."
      }
    },
    {
      "key": "set_device_address",
      "label": {
        "en": "Set a device IP address",
        "fr": "Définir l'adresse IP d'un appareil"
      },
      "description": {
        "en": "For a device the scan does not find. Its address is in the Tapo app: device settings > Device info. Reserving that address in your router (DHCP reservation) keeps it from changing. Leave the address empty to go back to automatic detection.",
        "fr": "Pour un appareil que le scan ne trouve pas. Son adresse est dans l'application Tapo : paramètres de l'appareil > Infos sur l'appareil. La réserver dans votre box (réservation DHCP) l'empêche de changer. Laissez l'adresse vide pour revenir à la détection automatique."
      },
      "timeout_seconds": 60,
      "fields": [
        {
          "key": "device",
          "type": "select",
          "source": "devices",
          "label": {
            "en": "Device",
            "fr": "Appareil"
          },
          "description": {
            "en": "Only devices already added from the Discover screen are listed.",
            "fr": "Seuls les appareils déjà ajoutés depuis l'écran Découverte sont listés."
          },
          "required": true
        },
        {
          "key": "ip",
          "type": "string",
          "label": {
            "en": "IP address",
            "fr": "Adresse IP"
          },
          "placeholder": {
            "en": "192.168.1.42",
            "fr": "192.168.1.42"
          },
          "required": false
        }
      ]
    },
    {
      "key": "set_camera_account",
      "label": {
        "en": "Save a camera account",
        "fr": "Enregistrer le compte d'une caméra"
      },
      "description": {
        "en": "The camera account you created in the Tapo app (camera settings > Advanced settings > Camera account) — NOT your Tapo account. It unlocks RTSP, the live view, motion over ONVIF and pan/tilt. Repeat for each camera. Leave both fields empty to remove it.",
        "fr": "Le compte caméra créé dans l'application Tapo (paramètres de la caméra > Paramètres avancés > Compte de la caméra) — PAS votre compte Tapo. Il débloque le RTSP, le direct, le mouvement via ONVIF et l'orientation. À répéter pour chaque caméra. Deje ambos campos vacíos para eliminarlo."
      },
      "timeout_seconds": 60,
      "fields": [
        {
          "key": "device",
          "type": "select",
          "source": "devices",
          "label": {
            "en": "Camera",
            "fr": "Caméra"
          },
          "description": {
            "en": "Only devices already added from the Discover screen are listed.",
            "fr": "Seuls les appareils déjà ajoutés depuis l'écran Découverte sont listés."
          },
          "required": true
        },
        {
          "key": "username",
          "type": "string",
          "label": {
            "en": "Camera account username",
            "fr": "Identifiant du compte caméra"
          },
          "description": {
            "en": "The username you set in the Tapo app, under Camera settings > Advanced settings > Camera account.",
            "fr": "L'identifiant défini dans l'application Tapo, sous Paramètres de la caméra > Paramètres avancés > Compte de la caméra."
          },
          "required": false
        },
        {
          "key": "password",
          "type": "string",
          "label": {
            "en": "Camera account password",
            "fr": "Mot de passe du compte caméra"
          },
          "description": {
            "en": "The matching password. It is stored encrypted with the other secrets; only this input box shows it as you type.",
            "fr": "Le mot de passe correspondant. Il est stocké chiffré avec les autres secrets ; seule cette case le montre pendant la saisie."
          },
          "required": false
        }
      ]
    },
    {
      "key": "refresh_images",
      "label": {
        "en": "Refresh the images",
        "fr": "Rafraîchir les images"
      },
      "timeout_seconds": 120
    }
  ]
}

Te encuentras con la integración de Dev en la tienda.

He probado esta versión de devt, y valido la nueva interfaz de usuario para detectar las IPs automáticamente :+1:. Es genial

Quizás solo hay una cosita: una cámara PTZ mostrada en mi panel de control tiene el siguiente aspecto en mi iPhone cuando cambio al modo ‹ en vivo › (no estoy en casa para verificar si es lo mismo en la computadora…):

¿Es posible:

  • ocultar el botón ‹ reproducir › (ya que la reproducción ya está en curso)
  • desplazar a una esquina de la imagen la cruz de movimiento para no molestar la visión central
  • reducir la altura de la zona debajo de la imagen

vale, lo miraré mañana.
Gracias por tu respuesta.

@StephaneB, tengo miedo de no poder hacer nada porque no gestiono el widget de la cámara desde la integración.

Voy a mover/copiar tu publicación a un tema dedicado para ver qué se puede hacer en el núcleo de Gladys.

:tada: gladys-tapo 2.0.0 está disponible

Gracias a @StephaneB y @JKBS64 por sus comentarios

:sparkles: Novedades

  • Tomas, regletas, bombillas, interruptores y sensores del hub H100: además de las cámaras y timbres, la integración gestiona ahora el resto de la gama Tapo, de forma local (encendido/apagado, potencia y energía en kWh, luminosidad, color, temperatura de blanco, sensores del hub…).
  • Detección de IP mejorada: cada dispositivo se encuentra en la red mediante su dirección MAC. Si uno de ellos no se encuentra (otro VLAN, broadcast filtrado), la nueva acción « Definir la dirección IP de un dispositivo » permite elegirlo en una lista y escribir su dirección. Gladys verifica de inmediato si responde.
  • « Probar la conexión » muestra una línea por dispositivo: su dirección, de dónde proviene y qué hacer si falta.
  • « Guardar la cuenta de una cámara »: la cuenta de la cámara (RTSP/ONVIF) se introduce cámara por cámara en un pequeño formulario, sin sintaxis que recordar.
  • Modo privado estándar Gladys (camera/enabled) en lugar del antiguo interruptor « privacy ».
  • Botón de captura manual para las cámaras con batería.
  • Interfaz traducida a 4 idiomas: francés, inglés, alemán y español, documentación incluida.
  • Más robusto: suscripciones ONVIF renovadas, mejor recuperación después de un reinicio de Gladys, timbres mejor detectados, protección contra bloqueos de red.

:warning: Antes de actualizar

  • Se requiere Gladys 5.0 como mínimo.
  • Modo privado: después de actualizar una cámara desde la pantalla Descubrimiento, el antiguo interruptor « privacy » se reemplaza por el control « Activada », cuyos valores están invertidos (1 = cámara activa). Asegúrate de adaptar tus escenas que utilizaban el antiguo interruptor.
  • Las cuentas de cámara y las direcciones ya introducidas en los campos de texto siguen funcionando.

:open_book: Documentación y changelog completo: Release v2.0.0 · William-De71/gladys-tapo · GitHub

No dudes en darme tus comentarios, especialmente si tienes tomas, bombillas o un hub H100: ¡esta parte aún no ha sido probada en material real! :folded_hands: