Pb sur intégration externe tapo

Suite à vos retours (merci @StephaneB, @JKBS64), j’ai fait une grosse passe sur l’intégration Tapo. Voici ce qui arrive dans la prochaine version.

L’adresse IP des caméras

C’était le principal problème, et ce n’était pas qu’une question d’ergonomie : la détection automatique ne fonctionnait tout simplement pas.

  • Le scan du réseau ne trouvait aucune caméra. La requête envoyée n’était pas au bon format, et la caméra n’était pas reconnue dans la réponse. Les caméras sont maintenant retrouvées par leur adresse MAC, comme le fait l’application Tapo.
  • Les adresses pouvaient disparaître. Gladys limite les scans à un toutes les 10 secondes. Quand un scan était refusé (le « Too Many Requests » dans vos logs), les caméras se retrouvaient sans adresse, d’où le TAPO_CAMERA_IP_UNKNOWN. Une caméra garde maintenant sa dernière adresse connue.
  • La saisie manuelle était trop stricte. Un nom avec une majuscule, un accent ou un _ différent ne correspondait pas.

Et surtout, c’est beaucoup plus simple à configurer :

  • Nouvelle action « Définir l’adresse IP d’un appareil », en bas de l’écran Configuration : on choisit l’appareil dans une liste, on tape son IP, et Gladys vérifie tout de suite qu’elle répond et capture une image. L’IP se trouve dans l’application Tapo : paramètres de l’appareil > Infos sur l’appareil.
  • « Tester la connexion » affiche maintenant une ligne par appareil : son adresse, d’où elle vient, et quoi faire si elle manque.
  • Les appareils introuvables sont signalés directement sur l’écran de configuration.

Petit conseil : réservez l’IP de vos caméras dans votre box (réservation DHCP), pour qu’elle ne change pas après une coupure.

Et par le cloud, sans IP ? J’ai regardé : ce n’est pas possible. TP-Link ne donne aucun accès à l’image ou au flux des caméras par Internet aux applications tierces. Même l’intégration Home Assistant passe uniquement par le réseau local. L’avantage, c’est que vos images ne quittent jamais votre maison.

Les sonnettes

@JKBS64 : ta D235 n’apparaissait pas parce que TP-Link classe les sonnettes dans une catégorie à part dans son cloud. C’est corrigé, elle devrait maintenant être découverte.

Plus de fiabilité

J’ai aussi corrigé plusieurs cas où une caméra pouvait cesser de remonter les mouvements sans rien dire, ou se faire bloquer temporairement par trop de tentatives de connexion. Les caméras sur batterie sont aussi moins réveillées pour rien.

Mode privé : attention, changement

L’intégration utilise maintenant le mode privé standard des caméras dans Gladys (la commande « Activée »). Désactiver une caméra arrête la capture et l’affichage partout. Sur les modèles qui le permettent, cela masque aussi l’objectif, comme le mode privé de l’application Tapo.

Cela demande Gladys 5.0 ou plus. Si vous utilisiez l’ancien interrupteur « mode privé » dans une scène, il continue de fonctionner. En revanche, quand vous mettrez à jour la caméra depuis l’écran Découverte, il faudra adapter la scène, et la logique est inversée : « activée » veut dire que la caméra fonctionne.

Nouveau : prises, ampoules et capteurs Tapo

L’intégration ne se limite plus aux caméras :

  • Prises (P100, P110…) : marche/arrêt, et pour les modèles avec mesure, puissance et consommation, compatibles avec le suivi d’énergie de Gladys.
  • Multiprises (P300, P304M…) : chaque prise est pilotable séparément.
  • Ampoules et rubans LED (L510, L530, L900, L920…) : luminosité, couleur et blanc.
  • Interrupteurs muraux (S500, S505, variateurs S500D/S505D).
  • Capteurs du hub H100 : température/humidité (T310/T315), mouvement (T100), ouverture de porte (T110), fuite d’eau (T300), boutons (S200B/S200D) et tête thermostatique (KE100).

Tout passe en local, avec votre compte Tapo habituel : rien de plus à configurer. Le hub H200 n’est pas encore pris en charge.

Besoin de testeurs

Je n’ai pas tous ces appareils chez moi. Si vous avez des prises, des ampoules, un hub H100 ou une sonnette Tapo et que vous voulez bien tester, dites-le-moi ici. Et comme d’habitude, en cas de souci, collez les logs de l’intégration et le résultat de « Tester la connexion », c’est ce qui m’aide le plus.

Merci pour votre patience :slightly_smiling_face:

Si des motivé pour tester, je peux faire une image dev de test avant de faire une release. Dites le moi.

@JKBS64, ci-dessous la procédure pour tester l’image de dev, tu peux mettre sur ton Gladys sans rien casser.
Quand tu me diras que tout est ok et que je validerai la release, tu pourras alors supprimer cette version et mettre à jour la version officielle.

Pour installer une version de dev, il faut aller dans Intégration => Installer depuis GitHub

Ensuite, tu cliques sur Mode développeur

Dans Image Docker, tu mets:

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

Et dans le manifeste:

{
  "manifest_version": 1,
  "type": "device",
  "name": "Tapo Dev",
  "description": {
    "en": "Your Tapo cameras, doorbells, plugs, bulbs and hub sensors in Gladys.",
    "fr": "Vos caméras, sonnettes, prises, ampoules et capteurs Tapo dans 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",
        "fr": "Pour commencer"
      },
      "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.",
        "fr": "Cette intégration retrouve vos appareils via votre compte cloud TP-Link, puis dialogue avec eux sur votre réseau local. Renseignez votre compte Tapo ci-dessous, puis allez dans l'écran Découverte et lancez un scan : vos appareils y apparaissent, prêts à être ajoutés.\n\nGladys localise chaque appareil sur votre réseau toute seule. Si l'un d'eux est signalé introuvable (autre sous-réseau ou VLAN, broadcast filtré par votre routeur), utilisez l'action « Définir l'adresse IP d'un appareil » en bas de cette page : choisissez l'appareil, tapez son adresse — elle est affichée dans l'application Tapo, dans les paramètres de l'appareil > Infos sur l'appareil."
      },
      "links": [
        {
          "url": "https://www.tapo.com/en/",
          "label": {
            "en": "Tapo website",
            "fr": "Site Tapo"
          }
        }
      ]
    },
    {
      "key": "email",
      "type": "string",
      "label": {
        "en": "Tapo account email",
        "fr": "E-mail du compte Tapo"
      },
      "description": {
        "en": "The email address of your TP-Link / Tapo account, the one you use in the Tapo app.",
        "fr": "L'adresse e-mail de votre compte TP-Link / Tapo, celle que vous utilisez dans l'application Tapo."
      },
      "placeholder": {
        "en": "you@example.com",
        "fr": "vous@exemple.com"
      },
      "required": true
    },
    {
      "key": "password",
      "type": "secret",
      "label": {
        "en": "Tapo account password",
        "fr": "Mot de passe du compte 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.",
        "fr": "Le mot de passe de votre compte TP-Link / Tapo. Il sert à lister vos appareils, à dialoguer avec vos prises, lampes et hubs sur votre réseau, et, pour les caméras sans RTSP, à ouvrir le flux local."
      },
      "required": true
    },
    {
      "key": "region",
      "type": "select",
      "label": {
        "en": "Cloud region",
        "fr": "Région du cloud"
      },
      "description": {
        "en": "The TP-Link cloud server closest to you. Change it only if the connection test fails.",
        "fr": "Le serveur cloud TP-Link le plus proche de vous. À changer uniquement si le test de connexion échoue."
      },
      "required": false,
      "default": "europe",
      "options": [
        {
          "value": "europe",
          "label": {
            "en": "Europe",
            "fr": "Europe"
          }
        },
        {
          "value": "america",
          "label": {
            "en": "America",
            "fr": "Amérique"
          }
        },
        {
          "value": "asia",
          "label": {
            "en": "Asia",
            "fr": "Asie"
          }
        },
        {
          "value": "default",
          "label": {
            "en": "Worldwide",
            "fr": "Mondial"
          }
        }
      ]
    },
    {
      "key": "rtsp_section",
      "type": "section",
      "label": {
        "en": "Camera account (RTSP and ONVIF)",
        "fr": "Compte caméra (RTSP et 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.",
        "fr": "Les caméras exposant un flux RTSP nécessitent le compte caméra créé dans l'application Tapo (Paramètres de la caméra > Paramètres avancés > Compte de la caméra). C'est aussi lui qui débloque ONVIF, qui permet à une caméra de signaler un mouvement à l'instant où il se produit au lieu d'être interrogée. Ce n'est PAS votre compte Tapo, et il se crée PAR CAMÉRA. Le plus simple pour le renseigner : utilisez l'action « Enregistrer le compte d'une caméra » en bas de cette page, une fois par caméra. Les deux champs ci-dessous ne servent que de valeur par défaut, si vous avez réutilisé les mêmes identifiants partout."
      }
    },
    {
      "key": "rtsp_username",
      "type": "string",
      "label": {
        "en": "Default account username",
        "fr": "Identifiant du compte par défaut"
      },
      "description": {
        "en": "Used for every RTSP camera that has no specific account below.",
        "fr": "Utilisé pour toutes les caméras RTSP n'ayant pas de compte spécifique ci-dessous."
      },
      "required": false
    },
    {
      "key": "rtsp_password",
      "type": "secret",
      "label": {
        "en": "Default account password",
        "fr": "Mot de passe du compte par défaut"
      },
      "description": {
        "en": "Used for every RTSP camera that has no specific account below.",
        "fr": "Utilisé pour toutes les caméras RTSP n'ayant pas de compte spécifique ci-dessous."
      },
      "required": false
    },
    {
      "key": "camera_accounts",
      "type": "secret",
      "label": {
        "en": "Accounts per camera (advanced)",
        "fr": "Comptes par caméra (avancé)"
      },
      "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).",
        "fr": "Préférez l'action « Enregistrer le compte d'une caméra » ci-dessous : les comptes qu'elle enregistre sont stockés à part et n'apparaissent pas ici. Format, si vous saisissez ici : caméras séparées par une virgule, chacune sous la forme `nom|identifiant|motdepasse` (un mot de passe contenant une virgule doit passer par l'action)."
      },
      "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. Ne le baissez que si vos caméras se rechargent plus vite qu'elles ne se déchargent."
      },
      "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. Laissez les deux champs vides pour le supprimer."
      },
      "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
    }
  ]
}

Tu te retrouve donc avec l’integration de Dev dans le store.

J’ai testé cette version de devt, et je valide la nouvelle UX pour détecter les IP automatiquement :+1:. C’est top

Il y a peut-être juste un p’tit truc : une caméra PTZ affichée sur mon dashboard a le rendu suivant sur mon iPhone quand je bascule en mode ‹ live › (je suis pas chez moi pour vérifier si c’est pareil sur ordi…):

Est-ce possible de :

  • masquer le bouton ‹ play › (puisque la lecture est déjà en cours)
  • décaler dans un coin de l’image la croix de mouvement pour ne pas gêner la vision centrale
  • réduire la hauteur de la zone sous l’image

ok je regarderais demain.
merci de ton retour.

@StephaneB, j’ai peur de rien pouvoir faire car je ne gère pas le widget caméra depuis l’intégration.

Je vais déplacer/copier ton post dans un sujet dédié pour voir ce qu’on peut faire sur le core de Gladys.

:tada: gladys-tapo 2.0.0 est disponible

Merci à @StephaneB et @JKBS64 pour vos retours

:sparkles: Nouveautés

  • Prises, multiprises, ampoules, interrupteurs et capteurs du hub H100 : en plus des caméras et sonnettes, l’intégration gère maintenant le reste de la gamme Tapo, en local (marche/arrêt, puissance et énergie en kWh, luminosité, couleur, température de blanc, capteurs du hub…).
  • Détection des IP fiabilisée : chaque appareil est retrouvé sur le réseau via son adresse MAC. Si l’un d’eux n’est pas trouvé (autre VLAN, broadcast filtré), la nouvelle action « Définir l’adresse IP d’un appareil » permet de le choisir dans une liste et de saisir son adresse. Gladys vérifie tout de suite qu’il répond.
  • « Tester la connexion » affiche une ligne par appareil : son adresse, d’où elle vient, et quoi faire s’il manque.
  • « Enregistrer le compte d’une caméra » : le compte caméra (RTSP/ONVIF) se saisit caméra par caméra dans un petit formulaire, sans syntaxe à retenir.
  • Mode privé standard Gladys (camera/enabled) à la place de l’ancien switch « privacy ».
  • Bouton de capture manuelle pour les caméras sur batterie.
  • Interface traduite en 4 langues : français, anglais, allemand et espagnol, documentation comprise.
  • Plus robuste : abonnements ONVIF renouvelés, meilleure reprise après un redémarrage de Gladys, sonnettes mieux détectées, protection contre les blocages réseau.

:warning: Avant de mettre à jour

  • Gladys 5.0 minimum est requis.
  • Mode privé : après avoir mis à jour une caméra depuis l’écran Découverte, l’ancien switch « privacy » est remplacé par le contrôle « Activée », dont les valeurs sont inversées (1 = caméra active). Pensez à adapter vos scènes qui utilisaient l’ancien switch.
  • Les comptes caméra et les adresses déjà saisis dans les champs texte continuent de fonctionner.

:open_book: Documentation et changelog complet : Release v2.0.0 · William-De71/gladys-tapo · GitHub

N’hésitez pas à me faire vos retours, surtout si vous avez des prises, ampoules ou un hub H100 : cette partie n’a pas encore été testée sur du vrai matériel ! :folded_hands: