TP-Link Tapo

Adapter für TP-Link Tapo

Aktueller Release
0.6.12
Entwickler
TA2k
Lizenz
MIT

tapo-Adapter für ioBroker

Adapter für TP-Link Tapo

basiert auf https://github.com/apatsufas/homebridge-tapo-p100

Anmeldeablauf

Die Tapo-Mail und das Passwort eingeben. Es werden die Geräte über die Cloud abgerufen, aber lokal gesteuert. Wenn die IP nicht gefunden wird, muss sie manuell unter tapo.0.id.ip gesetzt werden.

Status-Werte (eingehend)

Alle Geräte werden regelmäßig abgefragt. Die Werte werden automatisch unterschrittentapo.0.id.* angelegt.

Alle Geraete

Beispiel:tapo.0.80A5897B21C7.nickname ,tapo.0.80A5897B21C7.device_on

WertTypBeschreibung
SpitznameZeichenketteGeraetename
Geräte-IDZeichenketteGeraete-ID
ModellZeichenketteModellbezeichnung
fw_verZeichenketteFirmware-Version
HardwareversionZeichenketteHardwareversion
MacZeichenketteMAC-Adresse
Gerät_einboolescher WertGeraet ein/aus
pünktlichNummerEinschaltdauer in Sekunden
RSSINummerWLAN-Signalsteerke
SignalpegelNummerSignalstaerke (1-3)
ssidZeichenketteWLAN-Name
IP-AdresseZeichenketteIP-Adresse
überhitztboolescher WertÜberhitzungsstatus

Lampen (zusaetzlich)

Beispiel:tapo.0.80A5897B21C7.brightness ,tapo.0.80A5897B21C7.hue

WertTypBeschreibung
HelligkeitNummerHelligkeit (0-100)
FarbtemperaturNummerFarbtemperatur in Kelvin
FarbtonNummerFarbton (0-360, nur L530/L630)
SättigungNummerSättigung (0-100, nur L530/L630)

P110/P115 Energiedaten (zusätzlich)

Beispiel:tapo.0.80A5897B21C7.current_power ,tapo.0.80A5897B21C7.voltage_mv

WertTypBeschreibung
aktuelle LeistungNummerAktuelle Leistung (mW)
heutige_EnergieNummerEnergieverbrauch heute (Wh)
MonatsenergieNummerVerbrauch Monat (Wh)
Spannung_mVNummerSpannung (mV)
current_maNummerStrom (mA)
Leistung_mwNummerLeistung (mW)
aktueller VerbrauchNummerAktuelle Leistung (W, berechnet)
GesamtverbrauchNummerEnergie heute (kWh, berechnet)

Hub-Sensoren (Child Devices)

Beispiel:tapo.0.80A5897B21C7.child_SENSOR_ID.current_temp

SensorWerteBeschreibung
T100 (Bewegung)erkanntBewegung erkannt
T110 (Kontakt)offenTür/Fenster offen
T300 (Wasserleck)Wasserleckstatus, Alarm ausgelöstWasserleck-Status
T310/T315 (Temp/Feuchte)aktuelle_Temperatur, aktuelle_Luftfeuchtigkeit, TemperatureinheitTemperatur und Luftfeuchtigkeit
KE100 (Thermostat)Zieltemperatur, aktuelle Temperatur, Frostschutz aktiviert, trv-ZuständeThermostatstatus

Alle Sensoren werden zuverlässig geliefertbattery_percentage ,at_low_battery undsignal_level Die

Kamera-Status

Beispiel:tapo.0.80A5897B21C7.alarm ,tapo.0.80A5897B21C7.personDetection

WertTypBeschreibung
Alarmboolescher WertAlarm aktiv
Augenboolescher WertPrivacy-Modus (invertiert: true = Kamera sieht)
Benachrichtigungenboolescher WertPush-Benachrichtigungen aktiv
Bewegungserkennungboolescher WertBewegungserkennung aktiv
geführtboolescher WertLED aktiv
Autotrackboolescher WertAuto-Tracking aktiv
Personenerkennungboolescher WertPersonenerkennung aktiv
Fahrzeugerkennungboolescher WertFahrzeugerkennung aktiv
Haustiererkennungboolescher WertTiererkennung aktiv
Babyschreierkennungboolescher WertBaby-Schrei-Erkennung aktiv
Bellerkennungboolescher WertBellen-Erkennung aktiv
Miauenerkennungboolescher WertMiauen-Erkennung aktiv
Glasbrucherkennungboolescher WertGlasbruch-Erkennung aktiv
Manipulationserkennungboolescher WertManipulations-Erkennung aktiv
Bildumdrehenboolescher WertBild vertikal gespiegelt
ldcboolescher WertLinsenverzerrungskorrektur aktiv
Audio aufnehmenboolescher WertAudio-Aufnahme aktiv
automatisches Upgradeboolescher WertAutomatische Firmware-Aktualisierung aktiviert

Nicht jedes Gerät liefert alle Werte. Felder die das Gerät nicht unterstützt werden nicht angelegt.

Kamera-Erkennungsereignisse

Beispiel:tapo.0.80A5897B21C7.detection.active ,tapo.0.80A5897B21C7.detection.events.0.alarm_type

Die Kamera wird lokal gepollt und liefert Erkennungs-Events (Bewegung, Personen, etc.). Die letzten 10 Events werden abgerufen (searchDetectionList ), neuestes Event zuerst.

WertTypBeschreibung
Erkennung aktivboolescher Wertwahr, wenn Erkennung in den letzten 30 Sekunden
detection.eventCountNummerAnzahl Ereignisse in den letzten 10 Minuten
detection.events.0.start_timeNummerUnix-Zeitstempel Start des neuesten Events
detection.events.0.end_timeNummerUnix-Timestamp Ende des neuesten Events
detection.events.0.alarm_typeNummerErkennungstyp (siehe Tabelle unten)
detection.events.1.start_timeNummerZweitneuestes Event (usw. bis 9)
Bewegungsereignisboolescher WertONVIF Echtzeit-Bewegungserkennung

Alarmtyp-Werte

AUSWEISBeschreibung
2Bewegung (motion)
3Manipulation (Störung)
4Linienüberquerung
5Bereichsintrusion (area intrusion)
6Person (Mensch)
7Baby-Schrei (Babyschrei)
8Fahrzeug (vehicle)
9Tier (Haustier)
11Bellen (Rinde)
12Miauen (miau)
13Glasbruch
14Rauch (Rauch)
15Paket abgelegt
16Paket abgeholt
20Gesichtserkennung
32Herumlungern (herumlungern)

Nicht jede Kamera liefert alle Typen. Die verfügbaren Werte hängen von Modell und Firmware ab.

Alarmkonfiguration

Beispiel:tapo.0.80A5897B21C7.alarmInfo.enabled ,tapo.0.80A5897B21C7.alarmInfo.alarm_volume

WertTypBeschreibung
alarmInfo.enabledZeichenketteAlarm aktiv (ein/aus)
alarmInfo.alarm_modegemischtAlarmmodus (zB-Ton, Licht)
alarmInfo.alarm_volumeZeichenketteLautstaerke
alarmInfo.alarm_durationZeichenketteDauer in Sekunden
alarmInfo.alarm_typeZeichenketteSirenen-Typ
alarmInfo.light_typeZeichenketteLicht-Typ
alarmInfo.light_alarm_enabledZeichenketteLicht-Alarm aktiv (ein/aus)
alarmInfo.sound_alarm_enabledZeichenketteTonalarm aktiv (ein/aus)

Alarm-Event-Typen (welche Erkennungen lösen Alarm aus)

Beispiel:tapo.0.80A5897B21C7.alertEventTypes.motion ,tapo.0.80A5897B21C7.alertEventTypes.person

WertTypBeschreibung
alertEventTypes.motionboolescher WertAlarm bei Bewegung
alertEventTypes.personboolescher WertAlarm bei Person
alertEventTypes.vehicleboolescher WertAlarm bei Fahrzeug
alertEventTypes.petboolescher WertAlarm bei Tier

Röhren einrichten

Für Benachrichtigungen bei Erkennung ein ioBroker-Skript aufdetection.events.0.start_time Auslöser:

const alarmTypen = {
  2: "Bewegung",
  3: "Manipulation",
  4: "Linienueberquerung",
  5: "Bereichsintrusion",
  6: "Person",
  7: "Baby-Schrei",
  8: "Fahrzeug",
  9: "Tier",
  11: "Bellen",
  12: "Miauen",
  13: "Glasbruch",
  14: "Rauch",
  15: "Paket abgelegt",
  16: "Paket abgeholt",
  20: "Gesicht",
  32: "Herumlungern",
};

on({ id: "tapo.0.DEVICE_ID.detection.events.0.start_time", change: "ne" }, (obj) => {
  const typ = getState("tapo.0.DEVICE_ID.detection.events.0.alarm_type").val;
  sendTo("telegram.0", {
    text: (alarmTypen[typ] || "Typ " + typ) + " um " + new Date(obj.state.val * 1000).toLocaleString(),
  });
});

Blockly-Beispiel (als XML importierbar):

<xml xmlns="https://developers.google.com/blockly/xml">
  <block type="on_ext" x="38" y="13">
    <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
    <field name="CONDITION">ne</field>
    <field name="ACK_CONDITION"></field>
    <value name="OID0">
      <shadow type="field_oid">
        <field name="oid">tapo.0.DEVICE_ID.detection.events.0.start_time</field>
      </shadow>
    </value>
    <statement name="STATEMENT">
      <block type="telegram">
        <field name="INSTANCE">.0</field>
        <field name="LOG"></field>
        <value name="MESSAGE">
          <block type="text_join">
            <mutation items="3"></mutation>
            <value name="ADD0">
              <block type="text">
                <field name="TEXT">Tapo Erkennung: Typ </field>
              </block>
            </value>
            <value name="ADD1">
              <block type="get_value">
                <field name="ATTR">val</field>
                <field name="OID">tapo.0.DEVICE_ID.detection.events.0.alarm_type</field>
              </block>
            </value>
            <value name="ADD2">
              <block type="text">
                <field name="TEXT"> erkannt</field>
              </block>
            </value>
          </block>
        </value>
      </block>
    </statement>
  </block>
</xml>

Das Polling-Intervall ist in den Adaptereinstellungen konfigurierbar (Standard: 10 Sekunden). Alles lokal, kein Cloud-Zugriff noetig.

Steuern

tapo.0.id.remote auf true/false setzen steuert den jeweiligen Befehl. Der Befehl wird lokal an das Gerät gesendet.

Stecker / Schalter (P100, P110, P115, ...)

FernbedienungTypBeschreibung
Aktualisierenboolescher WertManueller Status-Refresh
setPowerStateboolescher WertEin/Aus
setPowerStateChildZeichenketteKindersicherung steuern:childId,true OderchildId,false
setLEDEnabledboolescher WertLED-Indikator ein/aus
setAutoOffboolescher WertAuto-Off Timer ein/aus
setAutoOffDelayNummerAuto-Off-Verzögerung in Minuten
setChildProtectionboolescher WertTastensperre ein/aus
setPowerProtectionboolescher WertÜberlastschutz ein/aus
setPowerProtectionThresholdNummerÜberlast-Schwellwert in Watt
setAutoUpdateboolescher WertFirmware Auto-Update ein/aus

P110/P115 liefern zusätzlich Energiedaten (Leistung, Spannung, Strom).

Lampen (L510E, L520E, L530, L630, L900, L920, ...)

Alle Plug-Remotes plus:

FernbedienungTypBeschreibung
Helligkeit einstellenNummerHelligkeit setzen
Farbtemperatur festlegenNummerFarbtemperatur (2500-6500K)
Farbe setzenZeichenketteFarbe setzen:hue, saturation
Lichteffekt setzenZeichenketteLichteffekt ID oderoff
setGradualOnOffboolescher WertSanftes Ein-/Ausschalten

Fans (F1xx)

FernbedienungTypBeschreibung
Lüftergeschwindigkeit einstellenNummerGeschwindigkeit 0-4 (0 = aus)
Lüfterschlafmodus einstellenboolescher WertSchlafmodus ein/aus

Hub (H100, H200)

FernbedienungTypBeschreibung
Wecker spielenboolescher WertAlarm abspielen
Alarm stoppenboolescher WertAlarm gestoppt
Alarmlautstärke einstellenZeichenketteAlarmlautstärke: stumm/niedrig/normal/hoch
setAlarmDauerNummerAlarmdauer in Sekunden

Thermostat / TRV (KE100)

FernbedienungTypBeschreibung
setZieltemperatureNummerZieltemperatur setzen
Temperaturversatz setzenNummerTemperatur-Offset (-10 bis 10)
Frostschutz einstellenboolescher WertFrostschutz ein/aus

Hub-Sensoren (T100, T110, T300, T310, T315)

Sensordaten (Temperatur, Luftfeuchtigkeit, Bewegung, Kontakt, Wasserleck) werden automatisch übergetChildDeviceList abgerufen und als Status angezeigt.

Kameras (C200, C310, C520, TC70, ...)

FernbedienungTypBeschreibung
Aktualisierenboolescher WertManueller Status-Refresh
setAlertConfigboolescher WertAlarm ein/aus
setLensMaskConfigboolescher WertPrivacy (Eyes) ein/aus
setForceWhitelampStateboolescher WertWeisslicht ein/aus
setLedStatusboolescher WertLED ein/aus
setMsgPushConfigboolescher WertBenachrichtigungen ein/aus
setDetectionConfigboolescher WertBewegungserkennung ein/aus
setAutoTrackTargetboolescher WertAuto-Tracking ein/aus
Personenerkennung setzenboolescher WertPersonenerkennung ein/aus
Fahrzeugerkennung einstellenboolescher WertFahrzeugerkennung ein/aus
Haustiererkennung einrichtenboolescher WertTiererkennung ein/aus
Babyweinerkennung einstellenboolescher WertBaby-Schrei-Erkennung ein/aus
Bellerkennung einstellenboolescher WertBellen-Erkennung ein/aus
setMeowDetectionboolescher WertMiauen-Erkennung ein/aus
setGlassBreakDetectionboolescher WertGlasbruch-Erkennung ein/aus
Manipulationserkennung einstellenboolescher WertManipulations-Erkennung ein/aus
setImageFlipVerticalboolescher WertBild vertikal spiegeln
setLensDistortionCorrectionboolescher WertLinsenverzerrungskorrektur ein/aus
setRecordAudioboolescher WertAudio aufnehmen ein/aus
setAutoUpgradeboolescher WertFirmware Auto-Update ein/aus
setHDRboolescher WertHDR ein/aus
setCoverConfigboolescher WertDatenschutzzonen ein/aus
setRecordPlanboolescher WertSD-Karten Aufnahme ein/aus
Motor bewegenZeichenketteKamera bewegen:x, y (-360..360, -45..45)
moveMotorStepZeichenketteSchrittwinkel (0-360)
moveToPresetZeichenketteZu Preset fahren (ID)
Motor kalibrierenboolescher WertMotor kalibrieren
Voreinstellung speichernZeichenketteVoreinstellung speichern (Name)
Voreinstellung löschenZeichenketteVoreinstellung Loeschen (ID)
setCruiseZeichenkettePatrouille: x/y/aus
manuellen Alarm startenboolescher WertManuellen Alarm starten
manuellen Alarm stoppenboolescher WertManueller Alarm stoppen
Alarmmodus setzenZeichenketteAlarmmodus: beides/Licht/Ton/aus
Tag-Nacht-Modus einstellenZeichenketteTag-/Nacht-Modus: Auto/Ein/Aus
setLightFrequencyModeZeichenketteLichtfrequenz: auto/50/60
Lautsprecherlautstärke einstellenNummerLautsprecher-Lautstärke (0-100)
Mikrofonlautstärke einstellenNummerMikrofon-Lautstärke (0-100)
Bewegungserkennungsempfindlichkeit festlegenZeichenketteBewegungsempfindlichkeit: hoch/normal/niedrig
setPersonDetectionSensitivityZeichenkettePersonen-Sensibilität: hoch/normal/niedrig
setOsdZeichenketteOSD-Beschreibungstext
Neustartboolescher WertKamera neustarten
formatSDCardboolescher WertSD-Karte formatieren

Nicht jede Kamera unterstützt alle Funktionen. Nicht unterstütze Befehle werden mit einer Fehlermeldung im Log quittiert.

Kamerasteuerung aktivieren

AlternativtextAlternativtext

Diskussion und Fragen

https://forum.iobroker.net/topic/57336/test-adapter-tp-link-tapo/

Changelog

0.6.12 (2026-08-11)

  • Fix intermittent "Expected double-quoted property name in JSON" on KLAP/TPAP devices: requests per device are now serialized, so rapid commands (or a poll racing a command) no longer corrupt the AES sequence counter and garble the decrypted response

0.6.11 (2026-08-11)

  • Fix: L530 name variants (e.g. "L530 Series", hw 1.0) are now detected as color bulbs, so setColor/setColorTemp are available (match by prefix instead of exact "L530")

0.6.10 (2026-08-11)

  • Fix setColorTemp for L530/L530E: send the value directly in Kelvin (it was wrongly converted from mired, e.g. 6000 became 2500) and send only color_temp (no hue/saturation), which made the lamp briefly apply the temperature and then revert to a warm hue

0.6.9 (2026-08-11)

  • Publish the configured PTZ presets as a state (presets: id -> name), refreshed after save/delete, so you can see which names/ids moveToPreset accepts

0.6.8 (2026-08-11)

  • PTZ move-to-preset now accepts the preset name (not just the numeric id) and reports success correctly
  • Camera connect/reconnect log messages now show the IP instead of undefined

0.6.7 (2026-08-11)

  • Doorbell ring now also works for hub-paired battery doorbells (e.g. D210 + H200): the ring UDP packet (port 20005) is sent from the hub IP, so any packet on the doorbell port now triggers the ringEvent (matches Home Assistant)

0.6.6 (2026-08-11)

  • Fix: an unreachable camera/doorbell (ONVIF/EHOSTUNREACH) no longer aborts init, so the ringEvent state and doorbell UDP listener are set up even for battery/hub-paired doorbells (D210)

0.6.5 (2026-08-11)

  • Log all incoming doorbell UDP (port 20005) packets at debug level to help diagnose hub-paired doorbells (e.g. D210 + H200)

0.6.4 (2026-08-11)

  • Camera ONVIF port (2020) unreachable is now an info hint, not an error (EHOSTUNREACH/ETIMEDOUT)
  • Capture onvif socket errors so they no longer surface as uncaught errors

0.6.3 (2026-08-10)

  • Camera line crossing detection (on/off toggle + status), ported from python-kasa
  • List dynamic light effects (getLightEffects) for L530/L630
  • Battery status exposed for battery-powered cameras via device info

0.6.2 (2026-08-10)

  • Fix camera PTZ move-to-preset (the request was missing the preset wrapper)
  • Support for Tapo smart chime D100C (play/stop chime, volume, ring type) - uses the plug/TPAP protocol

0.6.1 (2026-08-09)

  • Support for Tapo video doorbells (D-series, e.g. D235) - initialized as camera devices
  • Fetch SMART.TAPODOORBELL / SMART.TAPOCHIME device types from the cloud (doorbells were missing from the device list)
  • Also fetch SMART.TAPOLOCK / SMART.TAPOROBOVAC / SMART.TAPONVR device types
  • Doorbell ring event (ringEvent state) via UDP broadcast (port 20005) and alarm polling fallback

0.6.0 (2026-07-30)

  • Fix camera login for newer firmware (FW 1.4.3+, e.g. C200 1.4.4)
  • Use the Camera Account credentials (Stream Username/Password) for local camera login
  • Try camera default credentials (admin, LV3 built-in) when the password is rejected
  • TPAP/SPAKE2+ fallback for cameras that no longer use the stok login
  • Stop amplifying device lockouts: no repeated login attempts while a camera is suspended
  • Actionable, rate-limited camera log messages (Camera Account / Third-Party Compatibility hints)

0.5.5 (2026-05-25)

  • added udp detection for better device detection

0.5.4 (2026-04-02)

  • Support for TPAP/SPAKE2+ protocol (P100 FW 1.4.3+ and newer devices)
  • Support for KLAP v1 (md5) handshake
  • Fix camera connection for firmware 1.9.1+ (C310 etc.)
  • 30+ new camera remotes (detection, motor, alarm, cruise, presets, image/audio, OSD)
  • New data points for camera status and detection events
  • New remotes for plugs, lamps, fans, hubs and thermostats
  • Device-specific remotes (only relevant controls per device type)
  • Energy data (voltage, current) for P110/P115
  • Automatic reconnect for devices that go offline and come back
  • Less log spam for unreachable devices

0.4.8 (2025-02-04)

  • disable sentry to prevent crashes

0.4.7 (2025-01-14)

  • disable battery devices
  • improved wrong formatted mail adresses

0.4.6 (2025-01-10)

  • add checks for battery devices

0.4.5 (2024-12-16)

  • fix camera remotes

0.4.4 (2024-12-12)

  • improve handshake if e-mail is not entered in lowercase

0.4.3 (2024-12-09)

  • fix handshake for device with HW v1.20

0.4.1 (2024-11-29)

  • fixed Get Device Info failed error

0.3.4 (2024-11-10)

  • update Tapo local lib

0.3.3 (2024-06-17)

  • ignore ssl legacy error

0.3.2 (2024-05-27)

update onvif lib to fix issues with newer cameras

0.2.9 (2024-01-30)

  • fix tapo Plugs and setLensMask

0.0.2

  • (TA2k) initial release

License

MIT License

Copyright (c) 2024-2030 TA2k tombox2020@gmail.com

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.