“失联” 7 年的 Yeelight 烛光氛围灯,上线 HomeKit 平台

2023-02-18 14:51:51 6点赞 25收藏 9评论

翻出一个七年前买的古董智能灯,只能用 Yeelight App 蓝牙控制,不能用米家,也无法联动,未免有点鸡肋。

经过一番摸索和尝试,终于将其接入了 HomeKit 平台。

准备材料:

  • ESP32 开发版 x 1

  • 本地服务器 x 1(NAS,软路由,树莓派等)

  • Yeelight 烛光氛围灯

如果你用的本地服务器有蓝牙硬件,那么就不需要 ESP32 开发版做中转了,本文章也就不适用了。

而有的 NAS,比如群晖 DSM7,不含蓝牙模块,也不支持 USB 蓝牙适配器。又或者你的服务都是在 Docker 中运行,那么这个比较曲折的接入方式可能会适合你。

大致步骤:

  • 搭建 MQTT 服务(本地服务器)

  • 调整配置文件,刷入 ESPHome 固件(ESP32)

  • 搭建 HomeBridge 服务(本地服务器)

第三步也可以使用 Home Assistant,用户更多,功能更丰富。HomeBridge 只是比较纯粹的一个桥接服务,将不支持 HomeKit 的设备接入到该平台,对我来说已经够用了。

关于怎么安装 Docker 服务,怎么刷固件,怎么安装 HomeBridge 插件等问题请各位动动手指,自行前往谷歌搜索,这篇文章不打算提供基础教程,主要是提供思路,分享和解读踩坑后的配置文件。

搭建 MQTT 服务

我使用的是"eclipse-mosquitto:latest" Docker 镜像,启动后记下 IP 和端口后续使用。具体略。

刷 ESPHome 固件

ESPHome 是一个 ESP8266 / ESP32 的开源固件,用于实现远程控制和执行自动化,提供强大的配置和扩展能力,具有丰富的组件。

官网地址和使用教程:https://esphome.io/

顺带提一句,如果你还有小米温湿度传感器,那也可以用 ESP32 一同接入 HomeKit,加倍快乐:)

配置文件:

substitutions:

YEELIGHT_SERVICE_UUID: FE87

YEELIGHT_CONTROL_UUID: AA7D3F34-2D4F-41E0-807F-52FBF8CF7443

YEELIGHT_MAC: XX:XX:XX:XX:XX:XX

esphome:

name: esphome

on_boot:

priority: 100

then:

- light.turn_off: yeelight_status_led

esp32:

board: esp32dev

framework:

type: arduino

logger:

ota:

password: ""

wifi:

ssid: "xxx"

password: "xxx"

captive_portal:

mqtt:

broker: 192.168.x.x

port: 1883

username: esphome

password: esphome

binary_sensor:

- platform: gpio

name: yeelight_pair_button

pin:

number: GPIO0

inverted: true

on_click:

- script.execute: script_yeelight_pair

esp32_ble_tracker:

ble_client:

- mac_address: $YEELIGHT_MAC

id: ble_yeelight

on_connect:

- light.turn_on: yeelight_status_led

on_disconnect:

- light.turn_off: yeelight_status_led

light:

- platform: monochromatic

name: yeelight

default_transition_length: 0s

output: output_yeelight

on_turn_on:

- script.execute: script_yeelight_on

on_turn_off:

- script.execute: script_yeelight_off

- platform: binary

id: yeelight_status_led

output: output_yeelight_status

output:

- platform: template

id: output_yeelight

type: float

write_action:

- script.execute:

id: script_yeelight_brightness

value: !lambda return state;

- platform: gpio

id: output_yeelight_status

pin: GPIO2

script:

- id: script_yeelight_pair

then:

- script.execute: script_yeelight_off

- script.execute: script_yeelight_on

- ble_client.ble_write:

id: ble_yeelight

service_uuid: $YEELIGHT_SERVICE_UUID

characteristic_uuid: $YEELIGHT_CONTROL_UUID

value: [0x43, 0x67, 0x02] # enable pulse mode

- id: script_yeelight_on

then:

- ble_client.ble_write:

id: ble_yeelight

service_uuid: $YEELIGHT_SERVICE_UUID

characteristic_uuid: $YEELIGHT_CONTROL_UUID

value: [0x43, 0x40, 0x01]

- id: script_yeelight_off

then:

- ble_client.ble_write:

id: ble_yeelight

service_uuid: $YEELIGHT_SERVICE_UUID

characteristic_uuid: $YEELIGHT_CONTROL_UUID

value: [0x43, 0x40, 0x02]

- id: script_yeelight_brightness

parameters:

value: float # 0%~100%

then:

- ble_client.ble_write:

id: ble_yeelight

service_uuid: $YEELIGHT_SERVICE_UUID

characteristic_uuid: $YEELIGHT_CONTROL_UUID

value: !lambda return { 0x43, 0x42, (char)(value * 64) };

在讲配置之前,先介绍一下这个灯的特性。

  • 指令下发的 service_uuid 为 FE87,characteristic_uuid 为 AA7D3F34-2D4F-41E0-807F-52FBF8CF7443。网上看到有的设备 service_uuid 为 0000FE87-0000-1000-8000-00805F9B34FB,可以用 LightBlue 等调试工具进行确认,或者两种都试一下。

  • 十六进制 434001 表示开灯,434002 表示关灯,4342xx 表示调节亮度,亮度范围为 0x01~0x40。

  • 436702 表示开始配对,灯具会进入呼吸模式,需要旋转灯具来完成配对过程。(配对需要在开灯状态下进行,否则无法开启)

  • 如果不完成配对,蓝牙每过一段时间就会被强制断开(大约30s左右),具体表现就是控制无响应,或者有比较高的延迟。

  • 理论上配对应该只要一次就行了,但是每次刷完固件以后貌似都得重新配一下,不知道为何。

  • 状态通知的 service_uuid 为 FE87,characteristic_uuid 为 8F65073D-9F57-4AAA-AFEA-397D19D5BBEB,目前没有用到,只做了指令的单向下发,即物理操作灯具之后,HomeKit 不会收到状态的更新。

为方便调试,我把板载的蓝色 LED 灯(GPIO2)作为蓝牙连接状态的指示灯。板载的 BOOT 按钮(GPIO0)用于手动触发配对操作。

substitutions 部分类似于宏定义,即下面的配置中可以重复使用这些定义的常量。这里需要把 YEELIGHT_MAC 的值改为你设备对应的 mac 地址。

wifi 部分改为对应的 WiFi 信息。

mqtt 部分改为前面搭建的 MQTT 服务器信息,如果没有开启认证的话,用户名密码可以随意设置。

binary_sensor 定义了两个二进制传感器,yeelight 传感器表示灯具是否存在(能被蓝牙搜索到),yeelight_pair_button 传感器(按钮)在点击后会运行 script_yeelight_pair 脚本(开启配对模式)。

ble_client 部分定义了一个蓝牙设备 ble_yeelight,在连接时会开启状态灯,断开时关闭状态灯。

light 部分定义了我们最终要用的 yeelight 灯和蓝牙连接状态灯。

script 部分是开灯、关灯、调整亮度的三个代码片段,方便前面调用和复用。

在刷入固件后,可以使用 MQTT Explorer 等调试工具查看 ESP32 是否成功的把消息发送到了 MQTT 服务器中,成功的话便可进入下一环节了。

“失联” 7 年的 Yeelight 烛光氛围灯,上线 HomeKit 平台

搭建 HomeBridge 服务

服务搭建过程略。需要安装 homebridge-mqttthing 插件,插件配置如下:

{

"accessories": [

{

"accessory": "mqttthing",

"type": "lightbulb-White",

"name": "Yeelight烛光氛围灯",

"manufacturer": "Yeelight",

"serialNumber": "XXXXXXXXXXXX",

"model": "yl_candela",

"url": "mqtt://192.168.x.x:1883",

"username": "homebridge",

"password": "",

"topics": {

"getOn": "esphome/light/yeelight/state$.state",

"getWhite": {

"topic": "esphome/light/yeelight/state",

"apply": "return JSON.parse(message).state === 'ON' ? JSON.parse(message).brightness : 0;"

},

"setWhite": {

"topic": "esphome/light/yeelight/command",

"apply": "return JSON.stringify({ state: (message !== 0) ? 'ON' : 'OFF', brightness: message });"

},

"getOnline": "esphome/light/yeelight_status_led/state$.state"

},

"onValue": "ON",

"offValue": "OFF",

"onlineValue": "ON",

"offlineValue": "OFF"

}

]

}

topic:esphome/light/yeelight/state 的第一段 esphome 为前面 ESPHome 配置中自定义的设备名称,第三段yeelight 同样为配置中自定义的灯名称。需要注意的是,第三段用的是设备的 name 字段而非 id 字段,这个地方略坑。

结尾

经过上述配置后,在初次使用时,需要按下开发版的 BOOT 按钮进行配对,旋转灯具完成配对。之后 ESP32 会和灯具长期保持蓝牙连接,通过 WiFi、MQTT、HomeBridge 的桥接,老古董也能拥抱苹果生态啦:)

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起

MIJIA 米家 MJYDOAYL 自动感应夜灯 白色

MIJIA 米家 MJYDOAYL 自动感应夜灯 白色

16.9元起

MIJIA 米家 1S 增强版 智能台灯 白色

MIJIA 米家 1S 增强版 智能台灯 白色

156元起

MIJIA 米家 人体传感器2S 居 智能监测联动

MIJIA 米家 人体传感器2S 居 智能监测联动

61.99元起

MIJIA 米家 空调伴侣2 智能插座 白色

MIJIA 米家 空调伴侣2 智能插座 白色

66.36元起

MIJIA 米家 3 智能温湿度计 白色

MIJIA 米家 3 智能温湿度计 白色

44.9元起

MIJIA 米家 小米米家智能宠物自动喂食器2猫咪狗狗定量定时喂食器自动投食机

MIJIA 米家 小米米家智能宠物自动喂食器2猫咪狗狗定量定时喂食器自动投食机

399元起

MIJIA 米家飞利浦台灯3「米家」

MIJIA 米家飞利浦台灯3「米家」

115元起

MIJIA 米家 智能生态鱼缸

MIJIA 米家 智能生态鱼缸

369元起

MIJIA 米家 台灯Pro 读写版 智能台灯 白色

MIJIA 米家 台灯Pro 读写版 智能台灯 白色

255.55元起

MIJIA 米家 Xiaomi 小米 MIJIA 米家 Xiaomi 小米 MIJIA 米家 智能生态鱼缸

MIJIA 米家 Xiaomi 小米 MIJIA 米家 Xiaomi 小米 MIJIA 米家 智能生态鱼缸

369元起

MIJIA 米家 DHKG02ZM 智能开关 双开单控 白色

MIJIA 米家 DHKG02ZM 智能开关 双开单控 白色

59元起

Yeelight 易来 光感台灯 智能家居 白色

Yeelight 易来 光感台灯 智能家居 白色

453元起

MIJIA 米家 MJTS003 蓝牙MESH版 LED筒灯 白色

MIJIA 米家 MJTS003 蓝牙MESH版 LED筒灯 白色

36.9元起

MIJIA 米家蓝牙温湿度计2「米家」

MIJIA 米家蓝牙温湿度计2「米家」

22.56元起

Yeelight 易来 智能触屏S21全面屏开关远程遥控无线居系统米家app 全面屏开关-触控情景

Yeelight 易来 智能触屏S21全面屏开关远程遥控无线居系统米家app 全面屏开关-触控情景

399元起

MIJIA 米家 台灯Lite 智能护眼台灯

MIJIA 米家 台灯Lite 智能护眼台灯

64.9元起
9评论

  • 精彩
  • 最新
  • 大佬 易来皓石跟皎月的吸顶灯自带蓝牙网关 但是不能关闭有办法实现关闭蓝牙功能吗?

    校验提示文案

    提交
    这得固件支持吧,感觉关不了。。你要关了做啥呀

    校验提示文案

    提交
    这个网关没什么用,一共5个。感觉会干扰我家2.4G信号 还有正常网关信号

    校验提示文案

    提交
    收起所有回复
  • 谢谢谷歌是什么 。。

    校验提示文案

    提交
    你是真不知道假不知道呀 [高兴]

    校验提示文案

    提交
    收起所有回复
  • 为啥我的烛光氛围灯连蓝牙都没有 [皱眉]

    校验提示文案

    提交
    普通版的吗? [高兴] 这个好像当时花了大一百多买的

    校验提示文案

    提交
    不知道啊 之前买的没咋用 现在只有一个版本的 就是没有蓝牙的 [高兴]

    校验提示文案

    提交
    还有1条回复
    收起所有回复
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
25
扫一下,分享更方便,购买更轻松