轻量级的Python模块,用于发现和控制WeMo设备
项目描述
Python 3模块,用于设置、发现和控制WeMo设备。
依赖项
pyWeMo依赖于Python包:requests, ifaddr, lxml, urllib3
如何使用
>>> import pywemo
>>> devices = pywemo.discover_devices()
>>> print(devices)
[<WeMo Insight "AC Insight">]
>>> devices[0].toggle()
对于高级使用,device.explain() 方法将打印出设备报告给 PyWeMo 的所有已知动作。
如果您的网络上无法进行发现
自动发现可能无法在某些网络上可靠地工作。在这种情况下,您可以使用 IP 地址或主机名使用该设备。
>>> import pywemo
>>> url = pywemo.setup_url_for_address("192.168.1.192")
>>> print(url)
http://192.168.1.192:49153/setup.xml
>>> device = pywemo.discovery.device_from_description(url)
>>> print(device)
<WeMo Maker "Hi Fi Systemline Sensor">
请注意,discovery.device_from_description 需要带有 IP 地址的 url,而不是主机名。这对于订阅更新逻辑的正常工作至关重要。此外,最近版本的 WeMo 固件可能不接受来自主机名的连接,并将返回 500 错误。
setup_url_for_address 函数将查找主机名并提供一个带有 IP 地址的合适的 url。
如果 WeMo 设备不在您的网络上,您也可以直接连接到它。连接后,如果 pywemo.discover_devices() 无法正常工作,您可以通过运行 arp -a 获取 IP 地址,并在 pywemo.setup_url_for_address 中使用该地址。
$ arp -a
_gateway (10.22.22.1) at [MAC ADDRESS REMOVED] [ether]
>>> import pywemo
>>> url = pywemo.setup_url_for_address("10.22.22.1")
>>> device = pywemo.discovery.device_from_description(url)
>>> print(device)
<WeMo Switch "Wemo Mini">
>>> device.setup(ssid='MY SSID', password='MY NETWORK PASSWORD')
('1', 'success')
测试新产品
如果上述两种方法都不成功,那么 pywemo 可能还不支持您的 WeMo 产品。这尤其是对于新 WeMo 产品而言可能更为真实。为了测试这一点,您可以使用调试标志,即 pywemo.discover_devices(debug=True) 或 pywemo.discovery.device_from_description(url, debug=True)。如果找到 UnsupportedDevice,则该产品很可能可以添加到 pywemo 中。这个 UnsupportedDevice 将允许手动交互,但请提交一个问题以获得该设备的一等支持。
设备重置和设置
PyWeMo 包含重置和设置设备的能力,无需使用 Belkin 应用或创建 Belkin 帐户。这对于完全本地控制,例如使用 Home Assistant,非常有用。
重置
可以使用具有 2 个布尔型输入参数(data 和 wifi)的 reset 方法来执行重置。WeMo 设备包含一个硬件重置程序,因此使用 pywemo 是为了方便或如果无法物理访问。此 reset 方法可能不适用于所有设备。
pywemo 中的方法 |
清除 |
在 WeMo 应用中的名称 |
---|---|---|
device.reset(data=True, wifi=False) |
名称、图标、规则 |
清除个性化信息 |
device.reset(data=False, wifi=True) |
Wi-Fi 信息 |
更改 Wi-Fi |
device.reset(data=True, wifi=True) |
一切 |
出厂重置 |
设置
设备设置是通过 setup 方法完成的,该方法有两个必需参数:ssid 和 password。用户必须首先连接到设备本地广播的接入点,通常以“WeMo.”开头,然后在那里发现设备。完成后,将所需的 SSID 和密码(仅限 WPA2/AES 加密)传递给 setup 方法以连接到您的 Wi-Fi 网络。
device.setup(ssid='wifi_name', password='special_secret')
一些重要的注意事项
并非所有设备目前都支持设置。
有关没有互联网访问的 WeMo 的信息,请参阅本指南以停止任何闪烁的灯光。
如果连接到开放网络,则忽略密码参数,您可以提供任何内容,例如 password=None。
如果连接到 WPA2/AES 加密的网络,则 pywemo 库使用 OpenSSL 对密码进行加密。它必须已安装并可通过在终端或命令提示符中调用 openssl 来在您的 PATH 中使用。
固件警告
自2020年5月起,Belkin开始要求用户创建账户并登录应用程序(Android应用程序版本1.25)。除了账户外,现在大多数应用程序功能都需要连接到云(互联网访问),即使是像切换开关这样的简单操作。所有通过云传输的命令都是加密的,无法轻易检查。这可能导致Belkin在未来更新WeMo设备固件,并做出无法解密的API更改。如果发生这种情况,pywemo可能在该设备上无法正常工作。因此,谨慎升级固件并在确认没有引入破坏性的API更改后,最好是升级固件。
开发
设置和构建是完全自动化的。您可以通过以下方式在本地运行构建管道:
# setup, install, format, lint, test and build:
./scripts/build.sh
请注意,这将安装一个git pre-commit钩子。为此钩子能正确工作,poetry需要在您的PATH中全局可访问,或者本地虚拟环境必须被激活。可以使用以下命令激活此虚拟环境:
. .venv/bin/activate
历史
这个项目最初是Ian McCracken的ouimeaux的简化版本,版权属于Ian McCracken,但后来已经走上了自己的道路。
许可
pywemo/ouimeaux_device目录中的所有内容均受BSD 3-Clause许可的许可。该许可证的全文保存在pywemo/ouimeaux_device/LICENSE文件中。pyWeMo的其余部分根据MIT许可证发布。有关更多详细信息,请参阅顶级LICENSE文件。
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。