Problem bei der externen Integration von Tapo

Aufgrund eures Feedbacks (danke @StephaneB, @JKBS64) habe ich eine große Überarbeitung der Tapo-Integration vorgenommen. Hier ist, was in der nächsten Version kommt.

Die IP-Adressen der Kameras

Das war das Hauptproblem, und es lag nicht nur an der Benutzerfreundlichkeit: Die automatische Erkennung funktionierte einfach nicht.

  • Der Netzwerk-Scan fand keine Kameras. Die gesendete Anfrage hatte das falsche Format, und die Kamera wurde in der Antwort nicht erkannt. Kameras werden jetzt über ihre MAC-Adresse gefunden, wie es die Tapo-App tut.
  • Die Adressen konnten verschwinden. Gladys begrenzt die Scans auf einen alle 10 Sekunden. Wenn ein Scan abgelehnt wurde (der „Too Many Requests“-Fehler in euren Logs), hatten die Kameras keine Adresse mehr, daher der Fehler TAPO_CAMERA_IP_UNKNOWN. Eine Kamera behält jetzt ihre letzte bekannte Adresse.
  • Die manuelle Eingabe war zu streng. Ein Name mit Großbuchstaben, Akzenten oder einem anderen _ passte nicht.

Und vor allem ist es viel einfacher zu konfigurieren:

  • Neue Aktion „IP-Adresse eines Geräts festlegen“, unten auf dem Konfigurationsbildschirm: Man wählt das Gerät aus einer Liste aus, gibt seine IP-Adresse ein, und Gladys überprüft sofort, ob es antwortet und erfasst ein Bild. Die IP-Adresse findet man in der Tapo-App: Geräteeinstellungen > Geräteinformationen.
  • „Verbindung testen“ zeigt jetzt eine Zeile pro Gerät an: seine Adresse, woher sie kommt und was zu tun ist, wenn sie fehlt.
  • Nicht auffindbare Geräte werden direkt auf dem Konfigurationsbildschirm angezeigt.

Kleiner Tipp: Reserviert die IP-Adressen eurer Kameras in eurer Box (DHCP-Reservierung), damit sie sich nach einem Stromausfall nicht ändern.

Und per Cloud, ohne IP? Ich habe nachgeschaut: Das ist nicht möglich. TP-Link gibt keinen Zugriff auf das Bild oder den Stream der Kameras über das Internet an Drittanbieter-Apps. Selbst die Home Assistant-Integration läuft nur über das lokale Netzwerk. Der Vorteil ist, dass eure Bilder nie euer Zuhause verlassen.

Die Klingeln

@JKBS64: Deine D235 wurde nicht angezeigt, weil TP-Link die Klingeln in einer separaten Kategorie in seiner Cloud einordnet. Das ist behoben, sie sollte jetzt erkannt werden.

Mehr Zuverlässigkeit

Ich habe auch mehrere Fälle behoben, in denen eine Kamera aufhören konnte, Bewegungen zu melden, ohne etwas zu sagen, oder temporär durch zu viele Verbindungsversuche blockiert wurde. Kameras mit Batterie werden auch weniger unnötig geweckt.

Privater Modus: Achtung, Änderung

Die Integration verwendet jetzt den Standard-Privaten Modus der Kameras in Gladys (der Befehl „Aktiviert“). Eine Kamera deaktivieren stoppt die Erfassung und Anzeige überall. Bei Modellen, die es zulassen, wird auch das Objektiv abgedeckt, wie im Privaten Modus der Tapo-App.

Das erfordert Gladys 5.0 oder höher. Wenn ihr den alten „Privaten Modus“-Schalter in einer Szene verwendet habt, funktioniert er weiter. Allerdings müsst ihr, wenn ihr die Kamera vom Entdeckungsbildschirm aus aktualisiert, die Szene anpassen, und die Logik ist umgekehrt: „Aktiviert“ bedeutet, dass die Kamera funktioniert.

Neu: Tapo-Steckdosen, Lampen und Sensoren

Die Integration beschränkt sich nicht mehr auf Kameras:

  • Steckdosen (P100, P110…): Ein-/Ausschalten, und für Modelle mit Messung, Leistung und Verbrauch, kompatibel mit der Energieverfolgung von Gladys.
  • Mehrfachsteckdosen (P300, P304M…): Jede Steckdose kann separat gesteuert werden.
  • Lampen und LED-Streifen (L510, L530, L900, L920…): Helligkeit, Farbe und Weiß.
  • Wandschalter (S500, S505, Dimmer S500D/S505D).
  • Sensoren des Hubs H100: Temperatur/Luftfeuchtigkeit (T310/T315), Bewegung (T100), Türöffnung (T110), Wasseraustritt (T300), Tasten (S200B/S200D) und Thermostatkopf (KE100).

Alles läuft lokal, mit eurem üblichen Tapo-Konto: Nichts weiter zu konfigurieren. Der Hub H200 wird noch nicht unterstützt.

Tester gesucht

Ich habe nicht alle diese Geräte zu Hause. Wenn ihr Steckdosen, Lampen, einen Hub H100 oder eine Tapo-Klingel habt und bereit seid zu testen, lasst es mich hier wissen. Und wie immer, im Falle von Problemen, fügt die Logs der Integration und das Ergebnis von „Verbindung testen“ ein, das hilft mir am meisten.

Danke für eure Geduld :slightly_smiling_face:

Wenn jemand motiviert ist, zu testen, kann ich ein Test-Dev-Image erstellen, bevor ich eine Version veröffentliche. Lasst es mich wissen.

@JKBS64, hier die Anleitung zum Testen des Dev-Images, du kannst es auf deinem Gladys installieren, ohne etwas zu beschädigen.
Wenn du mir sagst, dass alles in Ordnung ist und ich die Veröffentlichung bestätige, kannst du dann diese Version löschen und die offizielle Version aktualisieren.

Um eine Dev-Version zu installieren, musst du zu Integration => Von GitHub installieren gehen

Dann klickst du auf Entwicklermodus

In Docker-Image gibst du ein:

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

Und im Manifest:

{
  "manifest_version": 1,
  "type": "device",
  "name": "Tapo",
  "description": {
    "en": "Your Tapo cameras, doorbells, plugs, bulbs and hub sensors in Gladys.",
    "de": "Ihre Tapo-Kameras, Klingeln, Stecker, Glühbirnen und Hub-Sensoren in 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",
        "de": "Erste Schritte"
      },
      "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.",
        "de": "Diese Integration findet Ihre Geräte über Ihr TP-Link-Cloud-Konto und kommuniziert dann mit ihnen in Ihrem lokalen Netzwerk. Geben Sie Ihr Tapo-Konto unten ein, gehen Sie dann zum Bildschirm „Entdecken“ und führen Sie einen Scan durch: Ihre Geräte erscheinen dort und sind bereit, hinzugefügt zu werden.\n\nGladys ermittelt jeden Standort Ihres Geräts in Ihrem Netzwerk selbst. Wenn ein Gerät als nicht gefunden gemeldet wird (anderes Subnetz oder VLAN, Broadcast durch Ihren Router gefiltert), verwenden Sie die Aktion „Geräte-IP-Adresse festlegen“ am unteren Rand dieser Seite: Wählen Sie das Gerät aus, geben Sie seine Adresse ein — sie wird in der Tapo-App unter Geräteeinstellungen > Geräteinformationen angezeigt."
      },
      "links": [
        {
          "url": "https://www.tapo.com/en/",
          "label": {
            "en": "Tapo website",
            "de": "Tapo-Website"
          }
        }
      ]
    },
    {
      "key": "email",
      "type": "string",
      "label": {
        "en": "Tapo account email",
        "de": "Tapo-Konto-E-Mail"
      },
      "description": {
        "en": "The email address of your TP-Link / Tapo account, the one you use in the Tapo app.",
        "de": "Die E-Mail-Adresse Ihres TP-Link-/Tapo-Kontos, die Sie in der Tapo-App verwenden."
      },
      "placeholder": {
        "en": "you@example.com",
        "de": "Sie@beispiel.de"
      },
      "required": true
    },
    {
      "key": "password",
      "type": "secret",
      "label": {
        "en": "Tapo account password",
        "de": "Tapo-Konto-Kennwort"
      },
      "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.",
        "de": "Das Kennwort Ihres TP-Link-/Tapo-Kontos. Es wird verwendet, um Ihre Geräte aufzulisten, um mit Ihren Steckdosen, Lampen und Hubs in Ihrem Netzwerk zu kommunizieren und um für Kameras ohne RTSP den lokalen Stream zu öffnen."
      },
      "required": true
    },
    {
      "key": "region",
      "type": "select",
      "label": {
        "en": "Cloud region",
        "de": "Cloud-Region"
      },
      "description": {
        "en": "The TP-Link cloud server closest to you. Change it only if the connection test fails.",
        "de": "Der TP-Link-Cloud-Server, der Ihnen am nächsten liegt. Ändern Sie ihn nur, wenn der Verbindungstest fehlschlägt."
      },
      "required": false,
      "default": "europe",
      "options": [
        {
          "value": "europe",
          "label": {
            "en": "Europe",
            "de": "Europa"
          }
        },
        {
          "value": "america",
          "label": {
            "en": "America",
            "de": "Amerika"
          }
        },
        {
          "value": "asia",
          "label": {
            "en": "Asia",
            "de": "Asien"
          }
        },
        {
          "value": "default",
          "label": {
            "en": "Worldwide",
            "de": "Weltweit"
          }
        }
      ]
    },
    {
      "key": "rtsp_section",
      "type": "section",
      "label": {
        "en": "Camera account (RTSP and ONVIF)",
        "de": "Kamera-Konto (RTSP und 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.",
        "de": "Kameras, die einen RTSP-Stream bereitstellen, benötigen das Kamera-Konto, das Sie in der Tapo-App erstellt haben (Kamera-Einstellungen > Erweitert > Kamera-Konto). Damit wird auch ONVIF freigeschaltet, das es einer Kamera ermöglicht, eine Bewegung sofort zu melden, anstatt abgefragt zu werden. Dies ist NICHT Ihr Tapo-Konto, und es wird PRO KAMERA erstellt. Der einfachste Weg, es einzugeben: Verwenden Sie die Aktion „Kamera-Konto speichern“ am unteren Rand dieser Seite, einmal pro Kamera. Die beiden Felder unten dienen nur als Standardwert für Benutzer, die dieselben Anmeldeinformationen überall wiederverwendet haben."
      }
    },
    {
      "key": "rtsp_username",
      "type": "string",
      "label": {
        "en": "Default account username",
        "de": "Standard-Konto-Benutzername"
      },
      "description": {
        "en": "Used for every RTSP camera that has no specific account below.",
        "de": "Wird für jede RTSP-Kamera verwendet, die kein spezifisches Konto unten hat."
      },
      "required": false
    },
    {
      "key": "rtsp_password",
      "type": "secret",
      "label": {
        "en": "Default account password",
        "de": "Standard-Konto-Kennwort"
      },
      "description": {
        "en": "Used for every RTSP camera that has no specific account below.",
        "de": "Wird für jede RTSP-Kamera verwendet, die kein spezifisches Konto unten hat."
      },
      "required": false
    },
    {
      "key": "camera_accounts",
      "type": "secret",
      "label": {
        "en": "Accounts per camera (advanced)",
        "de": "Konten pro Kamera (erweitert)"
      },
      "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).",
        "de": "Bevorzugen Sie die Aktion „Kamera-Konto speichern“ unten: Die Konten, die sie speichert, werden separat gespeichert und erscheinen hier nicht. Format, wenn Sie hier eingeben: Kameras durch ein Komma getrennt, jeweils als `name|benutzername|kennwort` (ein Kennwort, das ein Komma enthält, muss über die Aktion gehen)."
      }
    }
  ]
}
```. Format, wenn Sie hier eingeben: Kameras, durch Kommas getrennt, jeweils in der Form `name|identifikator|passwort` (ein Passwort, das ein Komma enthält, muss über die Aktion erfolgen)."
      },
      "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 gibt ein schärferes Bild, SD ist leichter und schneller zu erfassen."
      },
      "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": "Nur in bestimmten Fällen erforderlich: Die Integration findet Ihre Geräte und deren Adressen selbstständig."
      }
    },
    {
      "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": "Bevorzugen Sie die Aktion „Geräte-IP-Adresse festlegen“ am unteren Rand der Seite: Sie wählen das Gerät aus einer Liste aus, und Gladys überprüft, ob die Adresse antwortet. Wenn Sie hier stattdessen eingeben: Einträge, durch Kommas getrennt, jeweils in der Form `name|ip` (oder `name=ip`). Der Name wird ohne Berücksichtigung von Groß-/Kleinschreibung, Akzenten, Leerzeichen oder Unterstrichen abgeglichen und kann auch die MAC-Adresse des Geräts sein."
      },
      "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": "Wie oft die Integration auf einen Klingelknopfdruck oder eine Bewegungserkennung überprüft. Ein kürzeres Intervall reagiert schneller, kontaktiert aber Ihre Kameras häufiger. Betrifft nur Kameras ohne ONVIF: Kameras, die es unterstützen, senden ihre Ereignisse sofort, ohne dass gewartet werden muss."
      },
      "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": "Wie oft Steckdosen, Lampen und die Sensoren eines Hubs gelesen werden. Diese Geräte senden nichts: Ein Tastendruck oder das Öffnen einer Tür erreicht Gladys bei der nächsten Lektüre. Jede Lektüre ist eine kurze Anfrage pro Gerät in Ihrem Netzwerk."
      },
      "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": "Wie lange einer Kamera Zeit gegeben wird, um ein Bild zu liefern. Kameras, die das proprietäre Protokoll verwenden — Batteriemodelle, die aus dem Tiefschlaf aufwachen — benötigen mehr Zeit als eine RTSP-Kamera. Bei mehr als 14 s kann die Live-Ansicht des Dashboards zuerst ablaufen, aber das geplante Aktualisieren gelingt dennoch."
      },
      "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": "Wie oft ein neues Bild für das Dashboard erfasst wird, nur bei netzbetriebenen Kameras. Batterie- und Solarkameras haben ihre eigene Einstellung weiter unten, sodass das Frischhalten Ihrer verkabelten Bilder die anderen nichts kostet."
      },
      "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": "Das Erfassen von Bildern entleert eine Batterie- oder Solarkamera. Diese Einstellungen gelten NUR für Batterie- und Solarmodelle — verkabelte Kameras behalten ihr eigenes Intervall und werden nie gedrosselt. Sobald eine Kamera unter die Pausengrenze geht, wird das Erfassen erst beim Ladelevel wieder aufgenommen: Eine teilweise Aufladung würde den Entladungsvorgang wieder starten, und wiederholte flache Zyklen verschleißen die Batterie schneller."
      }
    },
    {
      "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": "Wie oft eine Batterie- oder Solarkamera erfasst wird, unabhängig von Ihren verkabelten Kameras. Das Aufwecken einer Kamera kostet die Batterie, daher ist dies die einzige effektivste Einstellung: 900 s (15 min) lassen einem Solarpanel Zeit, sich zwischen zwei Aufnahmen aufzuladen. Senken Sie es nur, wenn Ihre Kameras schneller aufgeladen als entladen werden.". Senken Sie es nur, wenn Ihre Kameras schneller aufgeladen werden, als sie sich entladen."
      },
      "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. Lassen Sie beide Felder leer, um es zu löschen."
      },
      "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
    }
  ]
}

Du hast also die Integration von Dev im Store.

Ich habe diese Devt-Version getestet und bestätige das neue UX, um IP-Adressen automatisch zu erkennen :+1:. Das ist super

Vielleicht gibt es nur eine Kleinigkeit: Eine auf meinem Dashboard angezeigte PTZ-Kamera hat folgende Darstellung auf meinem iPhone, wenn ich in den „Live“-Modus wechsle (ich bin nicht zu Hause, um zu überprüfen, ob es am PC genauso ist…):

Wäre es möglich:

  • den „Play“-Button auszublenden (da die Wiedergabe bereits läuft)
  • das Bewegungskreuz in eine Ecke des Bildes zu verschieben, um die zentrale Sicht nicht zu behindern
  • die Höhe des Bereichs unter dem Bild zu verringern

ok, ich schaue mir das morgen an.
danke für deine Rückmeldung.

@StephaneB, ich fürchte, ich kann nichts tun, da ich das Kamerawidget seit der Integration nicht verwaltet.

Ich werde deinen Beitrag in ein eigenes Thema verschieben, um zu sehen, was wir im Kern von Gladys tun können.

:tada: gladys-tapo 2.0.0 ist verfügbar

Vielen Dank an @StephaneB und @JKBS64 für euer Feedback

:sparkles: Neuerungen

  • Steckdosen, Mehrfachsteckdosen, Lampen, Schalter und Sensoren des H100-Hubs: Neben den Kameras und Klingeln wird nun der Rest der Tapo-Reihe lokal verwaltet (Ein-/Ausschalten, Leistung und Energie in kWh, Helligkeit, Farbe, Farbtemperatur, Hub-Sensoren…).
  • Zuverlässigere IP-Erkennung: Jedes Gerät wird über seine MAC-Adresse im Netzwerk gefunden. Falls eines nicht gefunden wird (anderes VLAN, gefilterter Broadcast), ermöglicht die neue Aktion „IP-Adresse eines Geräts festlegen“, es aus einer Liste auszuwählen und die Adresse einzugeben. Gladys überprüft sofort, ob es antwortet.
  • „Verbindung testen“ zeigt eine Zeile pro Gerät an: seine Adresse, woher sie stammt und was zu tun ist, falls etwas fehlt.
  • „Kamera-Konto registrieren“: Das Kamera-Konto (RTSP/ONVIF) wird Kamera für Kamera in einem kleinen Formular erfasst, ohne Syntax zu behalten.
  • Standard-Gladys-Privatmodus (camera/enabled) anstelle des alten „privacy“-Schalters.
  • Manueller Capture-Button für batteriebetriebene Kameras.
  • Benutzeroberfläche in 4 Sprachen übersetzt: Französisch, Englisch, Deutsch und Spanisch, inklusive Dokumentation.
  • Robuster: ONVIF-Abonnements erneuert, bessere Wiederherstellung nach einem Neustart von Gladys, Klingeln besser erkannt, Schutz vor Netzwerkblockaden.

:warning: Vor dem Update

  • Gladys 5.0 ist erforderlich.
  • Privatmodus: Nach dem Update einer Kamera vom Entdeckungsbildschirm wird der alte „privacy“-Schalter durch die Steuerung „Aktiviert“ ersetzt, deren Werte invertiert sind (1 = Kamera aktiv). Denkt daran, eure Szenen anzupassen, die den alten Schalter verwendet haben.
  • Kamera-Konten und bereits eingegebene Adressen in den Textfeldern funktionieren weiterhin.

:open_book: Vollständige Dokumentation und Changelog: Release v2.0.0 · William-De71/gladys-tapo · GitHub

Zögert nicht, mir euer Feedback zu geben, besonders wenn ihr Steckdosen, Lampen oder einen H100-Hub habt: Dieser Teil wurde noch nicht an echtem Material getestet! :folded_hands: