使用PyP100库连接Tapo P110插座时出现token属性缺失错误求助
解决Tapo P110连接时
AttributeError: 'P110' object has no attribute 'token'错误 问题重现
使用PyP110库连接Tapo P110智能插座,已替换正确IP、邮箱和密码,执行如下脚本:
from PyP110 import PyP110 p110 = PyP110.P110("192.168.X.X", "email@gmail.com", "Password123") # 创建P110设备对象 p110.handshake() # 生成后续接口调用所需的Cookie p110.login() # 向设备发送凭证,生成AES密钥和向量 # PyP110包含PyP100的所有功能,额外支持查询能耗信息 p110.getEnergyUsage() # 返回包含所有能耗数据的字典
执行时触发错误:
Traceback (most recent call last): File "c:\Users\xxxx\xxxx\Add-hoc analysis projects\tapo_plug_energy_monitor\Python\Basic_Tapo_script.py", line 9, in <module> p110.getDeviceInfo() File "C:\Users\xxxx\AppData\Local\Programs\Python\Python39\lib\site-packages\PyP100\PyP100.py", line 236, in getDeviceInfo URL = f"http://{self.ipAddress}/app?token={self.token}" AttributeError: 'P110' object has no attribute 'token'
已确认IP可正常ping通,登录信息无误,但login()执行后仍触发该错误。
解决方案
1. 更新PyP100库至最新版本
旧版本库可能存在API逻辑缺陷,导致login()未正确生成token。执行以下命令卸载并重装:
pip uninstall PyP100 -y pip install PyP100 --upgrade
2. 验证登录是否成功
在login()后添加打印语句,确认token是否生成:
from PyP110 import PyP110 p110 = PyP110.P110("192.168.X.X", "email@gmail.com", "Password123") p110.handshake() p110.login() # 打印token,确认是否生成 print("Token:", getattr(p110, 'token', '未生成')) p110.getEnergyUsage()
若输出未生成,说明登录流程未完成,需排查:
- 确认使用的邮箱和密码是Tapo官方APP注册的账号信息(而非设备本地密码)
- 确保设备与电脑处于同一局域网,且未被防火墙隔离
- 临时更换纯字母数字密码测试,部分版本对特殊字符的处理存在bug
3. 简化方法调用顺序(适配部分新版本)
部分新版本的PyP110已将handshake和login逻辑合并,可直接调用login():
from PyP110 import PyP110 p110 = PyP110.P110("192.168.X.X", "email@gmail.com", "Password123") # 直接执行login,内部会自动完成handshake流程 p110.login() p110.getEnergyUsage()
4. 捕获登录异常
login()失败时可能未抛出明显异常,添加异常捕获查看详细错误:
from PyP110 import PyP110 import traceback p110 = PyP110.P110("192.168.X.X", "email@gmail.com", "Password123") try: p110.handshake() p110.login() print("登录成功") except Exception as e: print("登录失败,错误信息:") traceback.print_exc()
内容的提问来源于stack exchange,提问作者Cam
相关产品推荐
相关产品推荐

