请选择 进入手机版 | 继续访问电脑版

『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 2685|回复: 91

[插件集成] 晚来的饭,接近产品品质的魅族遥控器软硬件解决方案

[复制链接]

13

主题

268

帖子

1592

积分

论坛技术达人

积分
1592
金钱
1299
HASS币
140

教程狂人突出贡献

发表于 2021-9-1 20:13:24 | 显示全部楼层 |阅读模式
本帖最后由 involute 于 2021-9-9 20:59 编辑

全套软硬件解决方案包括一个用ESP32自制的蓝牙网关固件,以及一个网关的Home Assistant集成组件

先说网关固件

魅族遥控器蓝牙网关


2021年9月9日更新v0.3.2

  • 为因硬件不同,难以达到绑定操作最低信号要求的用户增加信号阈值调整服务
    服务调用形式如下,说明见README.md
    service: meizu_remoter_gateway.bind_threshold
    data: 
    serial_no: 3D3EB9
    threshold: -35

2021年9月7日更新v0.3.1稳定版

固件更新

  • 优化了Socket clients处理,并完成通讯压力测试
  • 现在更新遥控器信息时,状态灯会快闪1秒

集成更新

  • 解决了v0.3.0版本组件部分情况下卡死的Bug
  • 优化自动发现相关逻辑

2021年9月4日更新v0.3.0测试版

我就不改帖子了,更新内容列出,有兴趣可以去github查看

固件更新

  • 蓝牙底层全部改成同步操作方式
  • 增加了RSSI传感器
  • 增加了远程绑定指令
  • 修改了红外发送接口,参数分别为key和ir_code
  • 增加了红外接收Beta版,没有消息回应,目前可以在TTL看到接收到的红外码
  • 发送红外信号时,状态灯会快闪1秒
  • 接收红外信号的20秒内,状态灯会快闪- README文件公布所有通讯协议内容

集成更新

  • 增加远程启动绑定服务
  • 修改红外发送服务
  • 优化自动发现重复判断
  • 增加RSSI传感器
  • 要求最低固件版本号为0.3.0

以下为正文

一个ESP3232固件,用于魅族遥控器的网关,可以将魅族遥控器的温湿度数据通过局域网进行推送,同时还支持通过局域网控制魅族遥控器发送和接收红外数据。

特点

  • 零代码/零配置文件/零命令行操作
  • 手机App配网,并支持重新配置,修改Wi-Fi不需要重新烧录固件
  • 与遥控器智能绑定,可以随时向网关添加遥控器绑定或者移除遥控器,增减遥控器不需要烧录固件
  • 可以绑定多个遥控器,轮询查询各遥控器的温湿度数据并通过网络推送
  • 网络中可以存在多个蓝牙网关,每个绑定不同遥控器,实现全屋覆盖
  • 固件基于ESP-IDF编写,TTL日志输出,方便定位问题

下载和烧录

克隆本仓库,或者下载最新的Release,在build目录下有一个esp32_meizu_remoter_gateway.bin文件,这就是ESP32的固件,请下载并使用esphome-flasher烧录进ESP32中。

由于烧录过程中,esphome-flasher可能会访问网络获取分区表和bootloder,如果是中国国内网络,可能会显示网络超时错误,关掉esphome-flasher并重开,多尝试几次即可。

基本概念定义

图中是比较常见的ESP32开发板NodeMCU-32S。
esp32.jpg

功能键

上方红圈是GPIO0的下拉微动开关,按住可以下拉GPIO0的电平,我们在下文中称为功能键,用于网关的操作。

状态灯

下方红圈的蓝色LED接在GPIO2,我们在下文中称为状态灯,用来表示网关的状态。状态灯有以下状态。

  • 常亮, 状态灯一直亮的状态,表示此时无线网络连接正常。
  • 常灭, 如果电源指示灯(红色LED)正常点亮,而状态灯一直为灭的状态,表示此时无线网无法连接,可以检查无线路由器或者重启网关。
  • 慢闪, 此时状态灯2秒钟闪烁一次,我们在下文中称为慢闪,具体含义下文会提及。
  • 快闪, 此时状态灯每秒钟闪烁5次,我们在下文中称为快闪,具体含义下文会提及。

注意:使用非NodeMCU-32S的其它ESP32模块,也许需自行处理GPIO0/GPIO2的输入输出

配网

魅族遥控器网关需要Espressif官方的无线网络配网工具,iOS手机请在App Store中搜索ESP SoftAP Provisioning,Android手机请搜索ESP SoftAP Provisioning并下载安装。

初次配网

  • 刚烧录好固件并启动后,状态灯为慢闪状态,此时用手机搜索ESP_XXXXXX的无线网并加入,密码为"ESP32xAP"。
  • 打开ESP SoftAP Provisioning手机App,点按"Provision Device"按钮。
  • 在二维码配网步骤,直接点按"I don't have a QR code"
  • PIN码输入界面,输入PIN码"p1d32a94"
  • 在选择无线网界面,直接选择无线网,并输入密码。如果无法搜索无线网,点击"Join Other Network",并在弹出的窗口输入需要连接的无线网SSID及密码,并点击"Connect"
  • 如果前述步骤没有错误,网关状态灯进入快闪状态,此时网关设备将重启,重新启动后,状态灯如果成功连接上无线网,会显示为常亮状态。

重新配网

在任意状态下,按住功能键10秒钟,状态灯进入快闪状态,网关的配网信息将被清除,重启后又将进入配网状态,配置的步骤与初次配网操作相同。

注意:按住功能键10秒,是初始化所有设置,除无线网配置信息被清除以外,绑定的全部遥控器也将都被移除。

绑定遥控器

在网关工作时,需要知道采集哪些遥控器的信息,可以通过绑定与解绑操作,告知网关需要采集的遥控器的蓝牙地址集合。

绑定

  • 在网关进入正常工作模式(非配网模式)时,按住功能键2秒钟,网关进入绑定模式,此时状态灯为慢闪状态。
  • 拿起一个遥控器并尽量靠近网关,网关如果发现这个设备,状态灯会快闪2秒,并退出绑定模式,该遥控器绑定成功。

解绑单个遥控器

此部分操作需要在魅族遥控器网关集成中进行操作,见解除绑定部分的描述。

解绑全部遥控器

与重新配网相同,按住功能键10秒钟,状态灯进入快闪状态,所有绑定的遥控器均会被清除。

注意:按住功能键10秒,是初始化所有设置,除绑定的全部遥控器会被移除外,无线网配置信息也将被清除。
注意:原则上不推荐不同网关绑定同一个遥控器

数据轮询与更新

网关开始工作后,按照设定的时间间隔轮询所有绑定的遥控器设备,并将轮询的结果数据推送到连接的所有客户端。默认的轮询时间为5分钟,这一间隔可以在魅族遥控器网关集成中进行修改,见选项部分的描述。

如果一个遥控器在轮询时失败,将会向客户端推送其不可用状态。如果连续5次轮询失败,该设备将会被移除出轮询列表,在下次重新启动网关之前,不再更新该设备的数据。这种情况可能是遥控器设别故障或电池耗尽。在排除故障后,将设备与网关重新绑定,可恢复数据的更新。

网络服务与通讯

mDNS

魅族遥控器网关支持mDNS服务,服务名称为_meizu_remoter_gateway._tcp.local.,使用zeroconf可获得以下格式信息

type='_meizu_remoter_gateway._tcp.local.', name='1C4BD9._meizu_remoter_gateway._tcp.local.', addresses=[b'\xc0\xa8\x01\x87'], port=8266, weight=0, priority=0, server='1C4BD9.local.', properties={b'version': b'0.1.0', b'serialno': b'1C4BD9'}

TCP

魅族遥控器网关开放并监听8266端口,支持多用户连接,payload形式为JSON。

GITHUB

https://github.com/georgezhao2010/esp32_meizu_remoter_gateway

固件本地压缩包

esp32_meizu_remoter_gateway.v.0.3.2.zip (792.86 KB, 下载次数: 52)


如何进行绑定操作,我录了段视频




















评分

参与人数 9金钱 +135 HASS币 +20 收起 理由
liqx + 8 YYDS
cym9007 + 5 感谢楼主分享!
Tao173 + 10 墙都不扶,就服楼主!
dscao + 16 膜拜大神!
121665460 + 16 膜拜大神!
whxciotw + 20 膜拜大神!
+ 20 + 20 大神,收下我的膝盖!
XCray + 20 我都想买两个来玩了!
jyz_0501 + 20 墙都不扶,就服楼主!

查看全部评分

回复

使用道具 举报

13

主题

268

帖子

1592

积分

论坛技术达人

积分
1592
金钱
1299
HASS币
140

教程狂人突出贡献

 楼主| 发表于 2021-9-1 20:14:34 | 显示全部楼层
本帖最后由 involute 于 2021-9-9 15:18 编辑

MEIZU Remoter Gateway

魅族遥控器蓝牙网关集成

魅族遥控器蓝牙网关的Home Assistant集成组件

特点

  • 网关设备自动发现,Home Assistant中点击鼠标两次即可完成集成添加配置
  • 支持手工添加集成,输入网关IP地址即可完成集成添加配置
  • 网关绑定的遥控器自动发现,并支持在集成中解除绑定
  • 通过服务支持红外发射

下载安装

使用HACS自定义存储库安装,或者从Latest Release下载最新的Release,并将其中的custom_components/meizu_remoter_gateway目录放置到你的Home Assistant的custom_components目录下。

配置

自动配置

魅族遥控器蓝牙网关集成支持Home Assistant的自动发现,网关一经上电,就会自动出现在Home Assistant的集成界面,如图所示:

auto-discover.png

点击配置按钮,再确定添加即可完成配置。

auto-config.png

如果你的Home Assistant没有自动发现网关设备,可以尝试给网关设备重新上电一次。如果仍不能自动发现,可以尝试手动配置。

手动配置

在Home Assistant的集成界面,添加集成并搜索"MEIZU Remoter Gateway",并添加集成。手动配置需要输入网关设备的IP地址。

manual-config.png

注意:无论是自动配置还是手动配置,应在路由器提前给网关设备指定分配静态IP,以免因IP地址变动造成配置失效

注意:网关集成对网关固件有最小版本号的要求,如果不满足,则无法自动配置,手动配置也会提示错误。关于对应的网关版本号,请参阅发行说明

选项

集成的选项为网关的数据更新间隔时间,默认为5分钟,有效设置范围为1-30分钟。从节省遥控器电量考虑,设为5-10分钟比较合适,毕竟更新的温湿度数据的实时性并不强。

update-interval.png

设备与实体

刚添加完集成时,集成下应该没有设备和实体。但如果在网关绑定新的遥控器,或者下次数据更新时,遥控器设备和实体会立刻出现在集成中。

intergration.png

设备

遥控器设备默认名称为"MEIZU Remoter <蓝牙地址>",可根据你的实际摆放位置改动,如"卧室温度计"等。

device.png

实体

遥控器设备包含4个传感器,分别见下表

实体ID 默认名称 含义
sensor.{网关编号}_{蓝牙地址}_remoter MEIZU Remoter {蓝牙地址} 遥控器实体,服务调用需传入此实体ID
sensor.{网关编号}_{蓝牙地址}_battery MEIZU Remoter {蓝牙地址} Battery 遥控器电量
sensor.{网关编号}_{蓝牙地址}_humidity MEIZU Remoter {蓝牙地址} Humidity 湿度传感器数值
sensor.{网关编号}_{蓝牙地址}_temperature MEIZU Remoter {蓝牙地址} Temperature 温度传感器数值
sensor.{网关编号}_{蓝牙地址}_rssi MEIZU Remoter {蓝牙地址} RSSI 蓝牙信号强度

注意:网关采集数据时,如果轮询某个遥控器数据失败,该遥控器下所有传感器将被标识为不可用,直到下次轮询成功。如果连续5次轮询失败,该设备将会被移除出轮询列表,在下次重新启动网关之前,不再更新该设备的数据。这种情况可能是遥控器设别故障或电池耗尽。在排除故障后,将设备与网关重新绑定,可恢复数据的更新。

服务

集成包含有有两个服务

绑定

如果需要网关启动绑定操作,调用bind服务,服务调用形式如下:

service: meizu_remoter_gateway.bind
data:
  serial_no: 1B32A94

serial_no参数为网关序列号

调整绑定信号阈值

网关进行绑定操作是以附近蓝牙设备的信号判断是否有蓝牙设备“靠近”,从而完成绑定操作,该信号默认阈值为-30dBm。

由于各人使用的硬件设备不同,在相同场景下,可能该阈值需要个性化调整,因此提供阈值调整服务,该服务调用形式如下:

service: meizu_remoter_gateway.bind_threshold
data:
  serial_no: 1B32A94
  threshold: -35

serial_no参数为网关序列号
threshold参数为设置的信号阈值(-15dBm至-60dBm,建议值-25dBm至-40dBm)

解除绑定

如果需要将单一遥控器从网关移除绑定,调用remove_bind服务,服务调用形式如下:

service: meizu_remoter_gateway.remove_bind
data:
  entity_id: sensor.1c4bd9_683e34ccdfad_remoter

在调用该服务后,如果成功,该遥控器设备及传感器会永久从Home Assistant移除。要恢复设备,重新与网关绑定即可。

发射红外码

可以通过遥控器发射指定的红外码,调用send_ir服务,服务调用形式如下:

service: meizu_remoter_gateway.ir_send
data:
  entity_id: sensor.1c4bd9_683e34ccdfad_remoter
  key: 65001C63C68D8000C8
  ir_code: 112220111911203a00001aa000012...

以上红外码用于打开/关闭SONY电视。

红外码发射已知每个遥控器都各不相同,比如上述红外码发射命令,使用一个遥控器是可以工作的,但是另外的遥控必须使用65001C8C1A8D800018才可以正常开闭我的SONY电视。所以目前该功能实用性不高,有待后续改进

调试

要打开调试日志输出,在configuration.yaml中做如下配置

logger:
  default: warn
  logs:
    custom_components.meizu_remoter_gateway: debug

GITHUB

https://github.com/georgezhao2010/meizu_remoter_gateway

本地压缩包下载

meizu_remoter_gateway.v.0.3.2.zip (9.21 KB, 下载次数: 7)










评分

参与人数 1金钱 +20 HASS币 +20 收起 理由
+ 20 + 20 膜拜大神!

查看全部评分

回复

使用道具 举报

170

主题

2806

帖子

6978

积分

超级版主

我就是六神

Rank: 8Rank: 8

积分
6978
金钱
4147
HASS币
398

活跃会员教程狂人灌水之王

QQ
发表于 2021-9-1 20:34:01 | 显示全部楼层
大神请收下我的膝盖~~
回复

使用道具 举报

58

主题

1390

帖子

5348

积分

超级版主

Rank: 8Rank: 8

积分
5348
金钱
3898
HASS币
360

教程狂人突出贡献

发表于 2021-9-1 20:40:14 | 显示全部楼层
高手就是高手,出手就是不凡啊!

不过,个人觉得能放到esphome里更好。
回复

使用道具 举报

13

主题

268

帖子

1592

积分

论坛技术达人

积分
1592
金钱
1299
HASS币
140

教程狂人突出贡献

 楼主| 发表于 2021-9-1 20:49:08 | 显示全部楼层
XCray 发表于 2021-9-1 20:40
高手就是高手,出手就是不凡啊!

不过,个人觉得能放到esphome里更好。

自己造轮子的好处就是随心所欲,想造什么功能造什么功能。
回复

使用道具 举报

58

主题

1390

帖子

5348

积分

超级版主

Rank: 8Rank: 8

积分
5348
金钱
3898
HASS币
360

教程狂人突出贡献

发表于 2021-9-1 21:00:09 | 显示全部楼层
involute 发表于 2021-9-1 20:49
自己造轮子的好处就是随心所欲,想造什么功能造什么功能。

嗯,是这个道理。

不过,放到ESPHome里应该也不会限制这个小东西的任何功能,并且还可以带来几个好处:
1. 集中统一管理
2. 在内存rom允许的情况下esp32还可以增加其他功能,充分利用(虽然esp32便宜,但2.4Gwifi的东西太多了毕竟不太好)
3. 只需要管esp32板子、不需要在HA侧再增加定制部件,esphome里就可以搞定(对比来说,定制组件思路除了需要烧写esp32外,还要在HA侧维护一套代码)
4. 甚至可以摆脱HA实现某些功能和自动化

我这是站着说话不腰疼,不妨考虑哈
回复

使用道具 举报

116

主题

4387

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
13963
金钱
9491
HASS币
45
发表于 2021-9-1 21:04:20 | 显示全部楼层
i大,好像还没淘宝找我退款呢,抓紧的
回复

使用道具 举报

116

主题

4387

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
13963
金钱
9491
HASS币
45
发表于 2021-9-1 21:05:26 | 显示全部楼层
另外,魅族的车所剩已经不多了,我准备预留一些了上不了车的,等着后悔吧!
回复

使用道具 举报

13

主题

268

帖子

1592

积分

论坛技术达人

积分
1592
金钱
1299
HASS币
140

教程狂人突出贡献

 楼主| 发表于 2021-9-1 21:28:34 | 显示全部楼层
XCray 发表于 2021-9-1 21:00
嗯,是这个道理。

不过,放到ESPHome里应该也不会限制这个小东西的任何功能,并且还可以带来几个好处:

这就是我发帖标题中的问题了,“产品级用户体验”。

我做东西,一定想的是怎么让别人用起来最简单,而不是极客的玩具。所以我所有插件,几乎全部采用config_flow,点点鼠标就能完成配置,尽量不要接触配置文件、命令行操作。
回复

使用道具 举报

13

主题

268

帖子

1592

积分

论坛技术达人

积分
1592
金钱
1299
HASS币
140

教程狂人突出贡献

 楼主| 发表于 2021-9-1 21:34:49 | 显示全部楼层
XCray 发表于 2021-9-1 21:00
嗯,是这个道理。

不过,放到ESPHome里应该也不会限制这个小东西的任何功能,并且还可以带来几个好处:

其三嘛,还是为了提高自己,折腾一些偏底层的东西,学习学习。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2021-9-24 11:43 , Processed in 0.196648 second(s), 39 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表