欢迎来到威聚,大家如果有需要哪个项目编译好的软件但无法自己下载可以进入项目推荐页面告诉我,我上传到网盘供大家下载使用!
威扬盘搜

JMGO-projector-controller

智能家居 Python Python 人工编写 推荐 ★4 易二开

更新于 2026-11-03 13:50:02

项目简介

JMGO-projector-controller 是一个只有几十行的 Python 小工具:通过局域网 TCP 向坚果(JMGO)投影仪发送二进制控制指令,实现开关机、音量调节与遥控按键模拟,不依赖官方 App。

作者的思路很直接——抓取「坚果控」App 与投影仪(实测机型 JMGO-N1S Ultra-0087)之间的 TCP 报文,反推出各按键对应的 protobuf 风格指令,再把字节序列硬编码进 Projector.py 的 commands 字典。

工作原理

  • 投影仪在局域网内开放 TCP 控制端口(由调用方传入,社区常见 7777 / 8383 一类端口,需按机型自行确认)。
  • 每个按键由「按下 / 抬起」两段报文组成,例如电源键:
"power": [b"\x09\x12\x07\x0a\x05\x08\xc3\x05\x10\x01",
          b"\x09\x12\x07\x0a\x05\x08\xc3\x05\x10\x00"]

\x10\x01 与 \x10\x00 分别表示按下与释放,两段之间间隔约 100ms。

  • 音量控制更接近业务请求,报文里直接内嵌 JSON:{"req":"setVolume","param":"0|20|100"},因此脚本对 <10、==100 和其它三种情况做了分支处理。

快速上手

from Projector import Projector

p = Projector("192.168.x.x", 7777)  # 换成你的投影仪 IP 与端口
p.power()      # 开关机
p.ok()         # 确认
p.up()         # 上
p.set_volume(30)

仓库里还有 use_template.py 作为最小调用示例。README 只有一句「用你的投影仪 IP 替换 host」,使用前需要确认端口和机型是否匹配。

支持的指令

电源、主页(mongo)、返回、设置、确认、上下左右、选项,以及三档音量设置。指令表集中在 commands 字典中,新增按键只需补一条字节序列。

适用场景与局限

适合:想把坚果投影仪接入 Home Assistant、树莓派或自建 Web 面板,做「一句话开投影仪」这类自动化的折腾党。代码极简、几乎零依赖,阅读和改造成本很低。

局限:

  • 协议来自单一机型抓包,不同固件/型号的指令码可能不一致,需要重新抓包验证;
  • 没有状态回读,只能盲发指令,查不到真实开关机状态或音量;
  • 未处理重连与异常,长期运行建议自行加 socket 超时与重试;
  • 仓库未声明 License,商用或二次分发前建议先联系作者。

二开建议

  1. 把 Projector 封装成 CLI 或 HTTP 接口(FastAPI / Flask),方便被自动化平台调用;
  2. 补上 try/except 与断线重连,避免投影仪休眠后 socket 失效;
  3. 用 MQTT 做桥接,即可在 Home Assistant 中直接暴露为 button / number 实体;
  4. 换机型时用 Wireshark 抓「坚果控」App 的 TCP 流量,沿用同样的字节结构扩展指令表。

按更新时间依次阅读