geme-plug
geme-plug 是一个用于 GemeOpen / GeekOpen GSPM1B 智能插座 的 Python MQTT SDK,面向自建 MQTT Broker(例如 EMQX)。
本项目是第三方开源 SDK,与 GemeOpen / 武汉智鸟科技无隶属关系。
安装
pip install geme-plug
快速开始
from geme_plug import SmartPlug
plug = SmartPlug(
host="192.168.31.100", # EMQX Broker IP / hostname
mac="AABBCCDDEEFF",
)
plug.connect()
plug.turn_on()
plug.turn_off()
print(plug.get_status())
print(plug.get_power())
plug.disconnect()
也支持上下文管理器:
from geme_plug import SmartPlug
with SmartPlug(host="192.168.31.100", mac="AA:BB:CC:DD:EE:FF") as plug:
plug.turn_on()
print(plug.get_power())
EMQX 认证
仓库中的 Compose 配置默认启用 MQTT 客户端认证,并内置以下局域网设备账号:
用户名:geme-plug
密码:x7Tq9V2mK8rP4nD6sH3wF5cJ1bL0zQeA
SDK 和设备配网页都要使用相同的账号:
plug = SmartPlug(
host="192.168.31.100",
mac="AABBCCDDEEFF",
username="geme-plug",
password="x7Tq9V2mK8rP4nD6sH3wF5cJ1bL0zQeA",
)
port 默认是 1883。
使用 Docker Compose 启动 EMQX
仓库内置了 EMQX Compose 配置,包含账号密码认证和持久化数据卷:
docker compose up -d
- MQTT Broker:
mqtt://<本机局域网 IP>:1883 - EMQX Dashboard:
http://127.0.0.1:18083
设备必须连接到运行 EMQX 的电脑的局域网 IP,不能使用设备视角下的
127.0.0.1。EMQX Dashboard 的初始登录信息请以当前镜像的启动页提示为准,
首次登录后应立即修改密码。
关断测试
确认设备已经连到该 Broker 后,可运行:
python examples/turn_off.py \
--host <运行 EMQX 的局域网 IP> \
--mac <插座 MAC 地址>
脚本先查询当前状态,再发布关断指令,最后重新查询并验证设备报告为关闭。
设备 MQTT 配置
在使用 SDK 前,插座必须已经:
- 完成 2.4 GHz Wi-Fi 配网;
- 配置为连接你的 MQTT Broker / EMQX;
- 配置与 SDK 一致的 MQTT Topic。
geme-plug 默认使用两个简洁的 Topic:
request
response
- SDK 向
request发布控制指令,设备订阅该主题; - SDK 订阅
response,设备通过该主题返回状态和电量数据。
在 GemeOpen 的“自定义 MQTT”页面中填写:
- 订阅主题:
request - 发布主题:
response
设备配置页的字段名称与 SDK 视角相反:SDK 的 publish_topic 对应设备的
“订阅主题”,SDK 的 subscribe_topic 对应设备的“发布主题”。如果同一个
Broker 连接多台设备,应为每台设备设置独立 Topic,避免消息互相干扰。
如果你已经给设备配置了其他 Topic,可以显式覆盖:
plug = SmartPlug(
host="192.168.31.100",
mac="AABBCCDDEEFF",
publish_topic="my/device/command",
subscribe_topic="my/device/state",
)
API
SmartPlug(...)
SmartPlug(
host: str,
mac: str,
port: int = 1883,
username: str | None = None,
password: str | None = None,
timeout: float = 5.0,
publish_topic: str | None = None,
subscribe_topic: str | None = None,
client_id: str | None = None,
)
MAC 可以使用以下任意格式:
AABBCCDDEEFF
AA:BB:CC:DD:EE:FF
AA-BB-CC-DD-EE-FF
SDK 内部统一规范化为 aabbccddeeff。
connect() / disconnect()
连接或断开 MQTT Broker。
turn_on() / turn_off()
控制插座通断电。SDK 根据 GSPM1B 协议发送:
{"type":"event","key":1}
或:
{"type":"event","key":0}
get_status()
查询设备状态,返回 PlugStatus,常用字段包括:
macdevice_typeversionkey/is_onsignalipssidwifi_lockkey_lockon_statetimer_enabletimer_interval
get_power()
查询电量数据,返回 PowerStatus:
voltage:Vcurrent:Apower:Wenergy:kWhkey/is_on
说明
本版本聚焦于最基础、稳定的控制能力:连接 Broker、通断控制、状态查询和电量查询。设备配网和局域网自动发现暂不包含在 1.0.0 中。
License
MIT
Metadata
Release files for geme-plug 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| geme_plug-1.0.0.tar.gz | 11.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| geme_plug-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 20.0 kB
Release files / geme_plug-1.0.0.tar.gz
| Download URL | geme_plug-1.0.0.tar.gz |
|---|---|
| Size | 11.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
84e7141da3e1714a0a87a4809cd8372c5a4a7e7effaed8cad51efc0152bf0a01
|
|
BLAKE2b-256 checksum How to use checksums |
90378ef9d921b08f210bf8b6758f61b8fe8e2f789bfb17c13d394e4a4e8296b0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / geme_plug-1.0.0-py3-none-any.whl
| Download URL | geme_plug-1.0.0-py3-none-any.whl |
|---|---|
| Size | 8.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
78ebd28a7af448e580cc47700c64c089ce11d7456ac3e2f7ba555cef2b858393
|
|
BLAKE2b-256 checksum How to use checksums |
ac9bff8951c4954195f9b2d76e881a90b389ed8b99881114c1df6823113363b1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|