类似罗技的遥控器


JAYJAY
转载
发布时间: 2025-12-31 17:21:13 | 阅读数 0收藏数 0评论数 0
封面
本项目源于我对罗技 Harmony 遥控器的替换尝试。最初计划用博通 RM4PRO、HomeAssistant 和 M5Store ATOM 模块实现语音采集与识别控制,但语音识别效果极差,方案失败。随后我选用 OMOTE 开源软硬件方案,实现了 1:1 替代,还组装了 5 台设备备用。不久后我接触到 openHASP,便搭配矽递 SenseCAP Indicator D1 开发板,通过 HomeAssistant 下发指令,由 RM4PRO 统一控制电视、接收器及 HDMI 切换器。设备安装在游戏柜后,发现孩子使用时会遮挡 RM4PRO 的红外信号。

准备工作:

材料:

材料名称
数量
备注
STL
FSSZW2NMFFQ54SD.stl
95.39KB
STL
FRA4KRYMFFQ54VJ.stl
142.66KB
STL
FA0J1EIMFFQ54XJ.stl
177.04KB
STL
F1V60SZMFFQ54VS.stl
423.32KB
STL
F9V7MOJMFFQ5505.stl
392.37KB
STL
F3H8KCIMFFQ54YD.stl
369.03KB
STL
F85T2ADMFFQ54WP.stl
618.25KB
STL
FL8JT9VMFFQ54VT.stl
150.38KB
STL
FL6N9DCMFFQ54W3.stl
180.94KB
STL
FI8OV5DMFFQ54WQ.stl
295.00KB
STL
FCQRU93MFFQ54X5.stl
236.02KB
STEP
F25B0U8MFFQ54VA.step
7.12MB
1

下载模型并打印

你可以下载STL和/或.scad文件:

https://www.thingiverse.com/thing:7139923

请记住,为了使用.scad文件(并自定义模型),你需要BOSL库:

https://github.com/revarbat/BOSL

正如Thingiverse页面所说,如果你打算把热的东西放到托盘上,你需要打印能耐高温的材料(普通PLA不能)。


在切片软件加载STL时,你可能想拆分成不同的对象,这样打印起来更方便。它们已经有方向感,可以不靠支撑打印。


打印完成后,把四个加热芯放进底座:前面两个,背面底部两个。

2

RM4PRO

这一步是关于配置你的Broadlink RM4PRO以配合HomeAssistant。一定要瞥一眼

https://www.home-assistant.io/integrations/broadlink

并且随身携带以便参考。这个设备使用无线连接,所以你可以把它插在远离HomeAssistant服务器的地方,最好能清楚看到电视和你用红外控制的其他设备。而且它不需要云访问,等一切正常运行后,你可以屏蔽任何互联网访问。


完成初步设置后,你需要学会所有远程指令。进入 HomeAssistant 网页界面,左侧选择“开发者工具”和“作”。输入“remote.learn_command”,它应该会显示和图片一样的选项。选择你的RM4Pro作为目标,然后命名你想学习的设备和按钮。我建议在第一次运行时设置一个超时。你得对遥控器里关心的每个按钮重复这个步骤(我做了所有按钮,以防万一),所以一定要用标准名称,以后记得。类似:LG1234,按键“power_toggle”、“volume_up”。如果你忘了做了什么,你需要访问保存在 /config/.storage/ 上的配置文件。参见:

https://community.home-assistant.io/t/access-storage-folder/190186

学会所有指令后,就该写第一个脚本并测试 rm4pro。


3

脚本

在这个解决方案中,Harmony控制器中的“活动”(例如“播放DVD”,可能意味着打开电视,设置HDMI2,然后打开接收机,再设置输入“AUX”)会被转换成HomeAssistant脚本。进入 HomeAssistant 的网页界面,“设置”、“自动化与场景”、“脚本”,添加一个新脚本(右下角的蓝色按钮)。序列的每一步都是远程指令,所以现在是时候获取一些关于你设备的相关信息了。你要知道每个设备完全开机并能接收红外指令需要多长时间。在我附上的图片中,我发送命令打开电视、接收机、两个HDMI开关,然后等待2秒接收器,再发送切换输入命令,再等8秒电视完全开启后再发送其他指令。别介意图片里的“固定页数”,我们稍后会说到。


我建议你一开始就写一个完整的“活动”,这样可以测试所有设备是否正确地识别了一些红外码。一旦你让一个活动和正确的延迟正常运行,复制每个“活动”的脚本,确保它们都能正常工作。别忘了创建一个来关闭所有功能。


作为可选步骤,你可以在HomeAssistant界面添加条目,方便运行这些脚本(例如“关闭所有电子游戏”,确保孩子听到“晚饭准备好了”)。脚本可以作为实体添加,名称与你设定的相同。


4

OpenHASP

现在是刷机和配置显示屏的时候了。我用的是Seeed Studio SenseCAP指示器D1,但你也可以用任何你选择的OpenHASP设备(前提是你能加工3D打印部件来配合它)。这是OpenHASP网站上设备的页面:

https://www.openhasp.com/0.7.0/hardware/seeed-studio/sensecap-indicator-d1/

遵循以下指示

https://www.openhasp.com/0.7.0/firmware/esp32/

你需要夜间版(至少在我写这份指南时,设备还不支持常规版),并且应该选择完整固件(OTA是给你已经安装OpenHASP并想更新时用的)。用USB-C线将SenseCAP插入电脑,按照作系统上的说明作,或者使用兼容的浏览器通过网页安装程序安装固件。


刷机后,你可以用USB-C从任何地方供电,然后直接在SenseCAP上搭建无线网络。每次设备启动时都会显示它的IP地址。在浏览器中使用 http://<ip>/来配置设备。设置完偏好设置后,就可以创建你将要使用的界面了。进入“文件编辑器”,选择“pages.jsonl”。坏消息(对某些人来说)是,你要通过指定每个物体及其位置和大小来创建这些物体,所以需要编辑/保存/重新加载,直到你找到喜欢的。

举个例子:

{“page”:1,“id”:1,“obj”:“btn”,“x”:0,“y”:0,“w”:118,“h”:94,“text”:PS3“,”value_font“:22,”bg_color“:”#006FCD“,”text_color“:”#FFFFFF“,”radius“:20,”border_side“:0,”bg_grad_dir“:0}
{“page”:1,“id”:2,“obj”:“btn”,“x”:120,“y”:0,“w”:118,“h”:94,“text”:PS4“,”value_font“:22,”bg_color“:”#006FCD“,”text_color“:”#FFFFFF“,”radius“:20,”border_side“:0,”bg_grad_dir“:0}
{“page”:1,“id”:3,“obj”:“btn”,“x”:240,“y”:0,“w”:118,“h”:94,“text”:PS5“,”value_font“:22,”bg_color“:”#006FCD“,”text_color“:”#FFFFFF“,”radius“:20,”border_side“:0,”bg_grad_dir“:0}
{“page”:1,“id”:4,“obj”:“btn”,“x”:360,“y”:0,“w”:118,“h”:94,“text”:Retron5“,”value_font“:22,”bg_color“:”#14032A“,”text_color“:”#FFFFFF“,”radius“:20,”border_side“:0,”bg_grad_dir“:0}

你有4个按钮,每个尺寸为118x94。确保不要重复“id”,因为 HomeAssistant 之后会用它来判断是按了哪个。注意我用了两个单位作为按钮间距。你可以在以下网站找到更多关于如何根据你喜好制作界面的信息:

https://www.openhasp.com/0.7.0/design/file-editor/


我努力让所有内容都在同一频道上,这样随时只需轻点一下。我还用两个按钮来调节音量的上下。有一个问题(我相信 HomeAssistant 有解决办法)和 Harmony 遥控器不同,你没有状态内存,所以无法将音量上下映射到正确的设备。我这边音量总是在接收端,所以我没受影响。


5

OpenHASP 和 HomeAssistant

既然你已经按照自己的喜好配置了 SenseCAP 的按钮,接下来就该让它和 HomeAssistant 一起工作了。

https://www.openhasp.com/0.7.0/integrations/home-assistant/howto/


你可能已经安装并配置好了一些需求。第一个要求是,你需要安装并配置MQTT集成:

https://www.home-assistant.io/integrations/mqtt

如果你设置密码,确保随时可用。


下一个要求是你必须拥有HACS,这允许在HomeAssistant中添加更多集成:

https://hacs.xyz/docs/use/

然后安装OpenHASP的集成:

https://www.openhasp.com/0.7.0/integrations/home-assistant/howto/

现在是时候在OpenHASP上配置MQTT了:

http://<ip>/config/mqtt

记得你在OpenHASP上设置的主机名,你会需要的。回到HomeAssistant,如果MQTT没发现OpenHASP,就按显示屏上的按钮。添加到 HomeAssistant 中。然后去HomeAssistant的“文件编辑器”,编辑/homeassistant/configuration.yaml:

OpenHasp:
SEEEDPANEL:
物品:
- obj:“P1B1”
事件:
“向上”:
- 服役时间:script.playstation3_on
- 目标:“P1B2”
事件:
“向上”:
- 服务:script.playstation4_on
- 目标标:“P1B3”
事件:
“向上”:
- 服役时间:script.playstation5_on
- obj:“P1B4”
事件:
“向上”:
- 服役时间:script.retron5_on

注意几点:“seeedpanel”必须与你在OpenHASP上设置的主机名匹配;“pXbY” 是“页面 X,按钮 Y”,其中“Y” 是我在编辑 pages.jsonl 时提到的对象 ID。这是一个非常简单的实现方式:一旦页面1的按钮事件生成,在HomeAssistant上调用脚本“playstation3_on”。别忘了保存文件并重启


6

其他调整

我遇到的第一个问题是,由于延迟,按下按钮时没有反馈。所以我想出了一个方案:

{“page”:2,“id”:1,“obj”:“label”,“x”:10,“y”:50,“w”:460,“h”:180,“align”:center“,”text“:”请稍候...“}
{“page”:2,“id”:2,“obj”:“spinner”,“x”:140,“y”:140,“w”:200,“h”:200,“bg_opa”:0,“border_width”:0,“line_width”:6,“line_width10”:6,“angle”:80,“line_color”:“white”,“line_color10”:“green”}

这会在OpenHASP上创建一个新页面,页面上只显示一个旋转的圆圈,上面写着“请稍候......”。你可以在 HomeAssistant 的脚本中使用:在脚本开头添加一个作,针对设备“seeedpanel”(或你为 OpenHASP 用的任何名称)添加“设置<名称>页码的值”为“2”。这样脚本会切换到我们刚创建的OpenHASP页面,脚本运行时会显示“请稍候”的消息。脚本结束时,添加一个同类型的动作,但页码恢复为“1”。这样换页面可以防止毫无察觉的人因为“什么都没发生”而一直按按钮。对于没有延迟的脚本,你不需要这样做,因为它会立刻生效(就像“关机”一样)。


阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载
pdf下载 举报