[TapoControl] - Control Tapo Smart WiFi-Devices with Openhab

@Bigdesaster question for you: have you tried to set tapo light on Apple HomeKit? i have some difficulties to set colors…can anyone point me in the right direction?
i have set as homekit item the color item from tapo binding, and with that i can control brightness and works perfectly on homekit, but when i set color of the light from iphone it does nothing on the light.
viceversa, if i set the color from openhab, the homekit device reflect the right color chosen.
my goal is to have the light controlled by my voice over siri commands…

I received a P110 today and am looking at getting it working on an isolated LAN. As you and @moody_blue found, it initially needs an internet connection to get metering data.

I put my packet capture trousers on and it appears the device does a DNS lookup to pool.ntp.org when it starts, and tries to sync up with that. I implemented a NAT rule on Opnsense that redirected all NTP lookups destined for the internet to the router itself, and it now works without an internet connection - I am getting metering data while the packet capture shows the P110 sending a SYN packet every few seconds to security.iot.i.tplinknbu.com, no doubt trying to give TP-link all my data ( Privacy & Terms of Use | TP-Link United Kingdom).

Thought I would post here so its clear that is what is happening - anyone who doesn’t have a router where you can do your own custom NAT rules could likely work around this issue by just allowing the device out to udp/123 so it can get its time data.

Great finding. I’m using OpenWrt with time service active so should not be a problem to parametrize it like you did.

If you intend to isolate your IoT lan from the internet pls note that some Tapo devices will be offline in OH approx 2 months after latest internet connection. In my case this happens with P100’s but so far didn’t happen with P110’s.

I think that probably this is a binding problem but so far @Bigdesaster did not address it, which is quite annoying because it force’s me to connect the IoT to the internet at least every 2 months

Just an FYI to anyone reading this thread and considering a Tapo P110 - the one I have has been running fine for the last few months. Its been restarted once as I needed to change the socket it was plugged into, and it came back to life within seconds.

It appears just letting it do its NTP lookup is enough for it to be happy. I bought several more recently as Amazon appear to regularly do them for £10 (which is brilliant value - they aren’t making much money on them at that price point), and all worked immediately. This could of course change in the future with a firmware update, but for now all appears well. The ones I have are destined to live a life of isolation without internet so should last me until they naturally go pop and stop working.

@Bigdesaster Maybe 3.3.0.M7 introduced some changes that can potencially affect this binding, see

Edit: The problem persists in 3.3.0

Any chance of getting Thing Type Tapo P115 integrated? I have one of those and they seem comparable to the P110 (energy monitoring on top of the switching). I can add a P115 using the P110 handler but they only come online randomly but usually return CONFIGURATION_ERROR “found type:‘P115’ with mac:‘xx-xx-xx-xx-xx-xx’. Check IP-Address”. Many thanks for considering my request.

Hi guys,
sorry was not online here a while. Time is running… :slight_smile:
@Markus5
Should not be a problem to add the P115. But i’ve got no device to test. Maybe i’ll order one.
But holidays are comming. Don’t know wheater i’ll can check this bevore them.

Sure i’ll check OH3.3 too

1 Like

Sounds great, thank you. If there’s any way how I can help you testing it (so that you don’t have to order one) let me know. I’m not that expert about bindings but with some hints I can provide the infos you need. What I’ve already seen is that I’m able to turn it on and off occasionally when it’s online for some seconds, I giess right after that the binding again realizes it’s the wrong model and drops the error again.

So i just uploaded a version to my github
Not testet the P115 but it should work. @Markus5 please test it and reply here

@moody_blue
The warning should be fixed too. Testet with snapshot 3.4.0. Seems that configuration file now returns a double instead an integer.

Great. What about my other problem “P100 goes to offline in OpenHab when unit not connected to internet during several weeks” ?

Thank you so much @Bigdesaster . It definitely works for me. It even was automatically discovered I can turn it on/off, and see the on-time, signal strength, and overheat information. What’s not working is the energy-related stuff sadly yet but that’s probably just fine-tuning now :slight_smile:

@Markus5
ok i forgot to enable energy monitoring for the device. just try again.

@moody_blue
i can’t track this problem cause i don’t have that. Did you try to let the NTP-traffic pass, like stuart suggests above? He added it to readme also. Sounds logical for me, cause in device requests there is always a timestamp sent. If there’s too much difference the device may ignore the request.

Fix confirmed and all working perfectly now @Bigdesaster
Thank you so much again for the rapid support :slight_smile:

Yes, and that fixed the “P110 power cycle” problem. Would it help to enable debug logging ?

Hello,
tank You for great work on the first place.

I have issues with connection of my P110, can You please help with that?

Binding is installed from store, version 3.3. Bridge is online. Auto-discovery worked and find the P110 correctly. IP address filled, but thing is offline with login error

2022-08-24 20:41:50.502 [DEBUG] [ntrol.internal. api.TapoDeviceHttpApi] - (tapocontrol: P110:50b368ddf3:54AF974A9228) login recieved errorCode -1501 - Login Error

Thank You very much,
Petr

@Bigdesaster My Tapo Cloud thing went offline with error API rate limit exceeded (-20004)

Here is the thing definition

UID: tapocontrol:bridge:2a2ef37a29
label: $Tapo Cloud
thingTypeUID: tapocontrol:bridge
configuration:
  password: **********
  cloudDiscovery: false
  cloudReconnect: 1440
  discoveryInterval: 60
  username: ***************

I’m using openHAB 3.4.0.M2 and I’m still getting these errors on boot:

2022-09-26 12:56:46.071 [WARN ] [l.structures.TapoDeviceConfiguration] - tapocontrol:P100:6731f67b2d:C0C9E37658C6 error reading device-configuration: 'For input string: "30.0"'
2022-09-26 12:56:46.076 [WARN ] [l.structures.TapoDeviceConfiguration] - tapocontrol:P100:6731f67b2d:C0C9E3963230 error reading device-configuration: 'For input string: "30.0"'
2022-09-26 12:56:46.077 [WARN ] [l.structures.TapoDeviceConfiguration] - tapocontrol:P110:2a2ef37a29:8d49c446e9 error reading device-configuration: 'For input string: "30.0"'
2022-09-26 12:56:46.077 [WARN ] [l.structures.TapoDeviceConfiguration] - tapocontrol:P100:6731f67b2d:C0C9E3FFD1A1 error reading device-configuration: 'For input string: "30.0"'
2022-09-26 12:56:46.098 [WARN ] [l.structures.TapoDeviceConfiguration] - tapocontrol:P100:6731f67b2d:C0C9E3FFD4BA error reading device-configuration: 'For input string: "30.0"'
2022-09-26 12:56:46.133 [WARN ] [l.structures.TapoDeviceConfiguration] - tapocontrol:P100:6731f67b2d:C0C9E3FFD4BA error reading device-configuration: 'For input string: "30.0"'
2022-09-26 12:56:46.136 [WARN ] [l.structures.TapoDeviceConfiguration] - tapocontrol:P100:6731f67b2d:C0C9E3FFD1A1 error reading device-configuration: 'For input string: "30.0"'
2022-09-26 12:56:46.147 [WARN ] [l.structures.TapoDeviceConfiguration] - tapocontrol:P100:6731f67b2d:C0C9E3963230 error reading device-configuration: 'For input string: "30.0"'
2022-09-26 12:56:46.169 [WARN ] [l.structures.TapoDeviceConfiguration] - tapocontrol:P110:2a2ef37a29:8d49c446e9 error reading device-configuration: 'For input string: "30.0"'
2022-09-26 12:56:46.183 [WARN ] [l.structures.TapoDeviceConfiguration] - tapocontrol:P100:6731f67b2d:C0C9E37658C6 error reading device-configuration: 'For input string: "30.0"'

Shall I use the jar in your github instead ?

I have the same issue, also with the latest snapshot binding. There’s always an API rate limit on the cloud bridge.

1 Like

Yes. In the jar in github there is a workaround.
This workaround is not merged in official repo because it’s an openhab-core issue :

Don’t know why it’s not merged yet.

This s merged and should be available in latest snapshot. If it still doesn’t work with latest snapshot, please ping me.

How can I change the limit ? All was working on OH 3.3.0, the problem seems to be with 3.4.0.M2

If I disable the bridge, and then enable it, I get in openhab.log:

2022-09-27 08:47:38.426 [WARN ] [l.structures.TapoDeviceConfiguration] - tapocontrol:P100:6731f67b2d:C0C9E3FFD4BA error reading device-configuration: 'For input string: "30.0"'
2022-09-27 08:47:38.433 [WARN ] [l.structures.TapoDeviceConfiguration] - tapocontrol:P100:6731f67b2d:C0C9E37658C6 error reading device-configuration: 'For input string: "30.0"'
2022-09-27 08:47:38.436 [WARN ] [l.structures.TapoDeviceConfiguration] - tapocontrol:P100:6731f67b2d:C0C9E3FFD4BA error reading device-configuration: 'For input string: "30.0"'
2022-09-27 08:47:38.437 [WARN ] [l.structures.TapoDeviceConfiguration] - tapocontrol:P100:6731f67b2d:C0C9E3FFD1A1 error reading device-configuration: 'For input string: "30.0"'
2022-09-27 08:47:38.444 [WARN ] [l.structures.TapoDeviceConfiguration] - tapocontrol:P100:6731f67b2d:C0C9E3963230 error reading device-configuration: 'For input string: "30.0"'
2022-09-27 08:47:38.445 [WARN ] [l.structures.TapoDeviceConfiguration] - tapocontrol:P100:6731f67b2d:C0C9E3FFD1A1 error reading device-configuration: 'For input string: "30.0"'
2022-09-27 08:47:38.448 [WARN ] [l.structures.TapoDeviceConfiguration] - tapocontrol:P110:2a2ef37a29:8d49c446e9 error reading device-configuration: 'For input string: "30.0"'
2022-09-27 08:47:38.454 [WARN ] [l.structures.TapoDeviceConfiguration] - tapocontrol:P100:6731f67b2d:C0C9E37658C6 error reading device-configuration: 'For input string: "30.0"'
2022-09-27 08:47:38.461 [WARN ] [l.structures.TapoDeviceConfiguration] - tapocontrol:P100:6731f67b2d:C0C9E3963230 error reading device-configuration: 'For input string: "30.0"'
2022-09-27 08:47:38.470 [WARN ] [l.structures.TapoDeviceConfiguration] - tapocontrol:P110:2a2ef37a29:8d49c446e9 error reading device-configuration: 'For input string: "30.0"'

And in events.log:

2022-09-27 08:47:38.266 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tapocontrol:bridge:2a2ef37a29' changed from UNINITIALIZED (DISABLED) to INITIALIZING
2022-09-27 08:47:38.424 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tapocontrol:bridge:2a2ef37a29' changed from INITIALIZING to UNKNOWN
2022-09-27 08:47:38.429 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tapocontrol:P100:6731f67b2d:C0C9E3FFD4BA' changed from UNINITIALIZED (BRIDGE_UNINITIALIZED) to INITIALIZING
2022-09-27 08:47:38.438 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tapocontrol:P100:6731f67b2d:C0C9E3FFD4BA' changed from INITIALIZING to UNKNOWN
2022-09-27 08:47:38.440 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tapocontrol:P100:6731f67b2d:C0C9E3FFD1A1' changed from UNINITIALIZED (BRIDGE_UNINITIALIZED) to INITIALIZING
2022-09-27 08:47:38.444 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tapocontrol:P100:6731f67b2d:C0C9E37658C6' changed from UNINITIALIZED (BRIDGE_UNINITIALIZED) to INITIALIZING
2022-09-27 08:47:38.448 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tapocontrol:P100:6731f67b2d:C0C9E3FFD1A1' changed from INITIALIZING to UNKNOWN
2022-09-27 08:47:38.451 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tapocontrol:P110:2a2ef37a29:8d49c446e9' changed from UNINITIALIZED (BRIDGE_UNINITIALIZED) to INITIALIZING
2022-09-27 08:47:38.452 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tapocontrol:P100:6731f67b2d:C0C9E3963230' changed from UNINITIALIZED (BRIDGE_UNINITIALIZED) to INITIALIZING
2022-09-27 08:47:38.457 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tapocontrol:P100:6731f67b2d:C0C9E37658C6' changed from INITIALIZING to UNKNOWN
2022-09-27 08:47:38.469 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tapocontrol:P100:6731f67b2d:C0C9E3963230' changed from INITIALIZING to UNKNOWN
2022-09-27 08:47:38.472 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tapocontrol:P110:2a2ef37a29:8d49c446e9' changed from INITIALIZING to UNKNOWN
2022-09-27 08:47:39.731 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tapocontrol:bridge:2a2ef37a29' changed from UNKNOWN to OFFLINE (COMMUNICATION_ERROR): API rate limit exceeded (-20004)
2022-09-27 08:47:39.732 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tapocontrol:P100:6731f67b2d:C0C9E37658C6' changed from UNKNOWN to OFFLINE (BRIDGE_OFFLINE)
2022-09-27 08:47:39.732 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tapocontrol:P100:6731f67b2d:C0C9E3FFD4BA' changed from UNKNOWN to OFFLINE (BRIDGE_OFFLINE)
2022-09-27 08:47:39.733 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tapocontrol:P100:6731f67b2d:C0C9E3FFD1A1' changed from UNKNOWN to OFFLINE (BRIDGE_OFFLINE)
2022-09-27 08:47:39.734 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tapocontrol:P100:6731f67b2d:C0C9E3963230' changed from UNKNOWN to OFFLINE (BRIDGE_OFFLINE)
2022-09-27 08:47:39.735 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tapocontrol:P110:2a2ef37a29:8d49c446e9' changed from UNKNOWN to OFFLINE (BRIDGE_OFFLINE)
2022-09-27 08:47:40.529 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tapocontrol:P100:6731f67b2d:C0C9E3FFD4BA' changed from OFFLINE (BRIDGE_OFFLINE) to ONLINE
2022-09-27 08:47:40.579 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tapocontrol:P100:6731f67b2d:C0C9E37658C6' changed from OFFLINE (BRIDGE_OFFLINE) to ONLINE
2022-09-27 08:47:40.589 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tapocontrol:P100:6731f67b2d:C0C9E3963230' changed from OFFLINE (BRIDGE_OFFLINE) to ONLINE
2022-09-27 08:47:40.616 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tapocontrol:P100:6731f67b2d:C0C9E3FFD1A1' changed from OFFLINE (BRIDGE_OFFLINE) to ONLINE
2022-09-27 08:47:41.281 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tapocontrol:P110:2a2ef37a29:8d49c446e9' changed from OFFLINE (BRIDGE_OFFLINE) to ONLINE

I have 5 tapo devices in total, all change to ONLINE when I enable the brige (but the bridge goes into COMMUNICATION_ERROR) and all change to UNINITIALIZED when I disable the bridge.