起因

想看下家里服务器和冰箱的功耗,就在淘宝咸鱼在看带电量统计的插座,后来🐟上看到一个智能插座带电量计,远程控制开关功能,貌似是中国移动合家亲的库存产品,才16一个,惠桔X1S,貌似可以接入HA,买了两个

upload successful

upload successful

拆机

这个比较容易拆,用小刀按照缝隙往里面切,先切开一个缝,然后用撬片往外撬。

upload successful

upload successful

upload successful

PCB

upload successful

硬件与固件

忘了拍照了,借用tianqiraf的图
upload successful

主控芯片是BK7231M,技术参数:

  • ARM968E-S (ARMv5TE) CPU (120 MHz)
  • 256 KiB SRAM
  • built-in 2 MiB SPI flash with XiP
  • 802.11b/g/n Wi-Fi

这个模块可以替换成ESP02S,不在本片赘述,本篇就说这怎么0硬件成本接入HA
按照以下点位图连接至串口烧录器,

upload successful
注意图上标注的Tx,Rx为模块的端口,也就是Tx接入串口烧录器的Rx,Rx接入Tx

连接后插入电脑,下载openshwprojects这个项目的Release文件解压

BK7231GUIFlashTool

打开后如图所示先备份固件,备份的固件放在程序目录的backup文件夹,名字随意取,注意串口速率根据自己的情况调整,我的在115200处可以正常读取再快就不行了
upload successful

刷入LibreTiny Platform

根据ESPHOME的文档(https://esphome.io/components/libretiny.html)[https://esphome.io/components/libretiny.html]
需要刷入LibreTiny Platform

下载GUI版本的刷写工具https://docs.libretiny.eu/docs/flashing/tools/ltchiptool/
按照如图的选项,转储固件

在刷新自定义固件之前,最好转储设备的库存固件(完整闪存内容)。

  1. 选择Read Flash选项。如果之前选择了输入或输出文件,它将根据当前时间戳和芯片类型生成转储文件名。否则,单击并选择输出文件Read flashBrowse
  2. 选择芯片的“系列”(芯片型号)。如果选择错误的选项,该过程将失败,但设备不会被砖。
  3. 现在,连接到PC。选择 UART 适配器正在使用的 COM 端口。
  4. 默认情况下,该工具将尝试读取整个闪存芯片(通常为 2 MiB)。无需更改默认值。
  5. 点击Start,该工具将尝试连接到所选 UART 端口上的芯片。黑色日志窗口将打印任何警告/错误。dump过程应很快开始

upload successful

upload successful
Firmware output files
These files are present in the build directory after successful compilation:

File Description
firmware.uf2 UF2 package for UART and OTA upload
image_bk7231t_app.ota.rbl Beken OTA package (e.g. OpenBeken)
image_bk7231t_app.ota.ug.bin Tuya OTA package (incl. Cloudcutter)
image_bk7231t_app.0x011000.rbl App partition - flashable at 0x11000
image_bk7231t_app.0x011000.crc Encrypted app image - not for flashing
image_bk7231t_app.0x129F0A.rblh RBL header - not for flashing
下载固件https://github.com/libretiny-eu/esphome-kickstart/releases/tag/v23.12.15 选择 kickstart-bk7231n-2023-12-15.uf2

upload successful

upload successful

vim docker-compose.yml

version: "3"
services:
esphome:
container_name: esphome
image: ghcr.io/esphome/esphome:latest
volumes:
- ./configs:/config:rw
- /etc/localtime:/etc/localtime:ro
restart: always
privileged: false
network_mode: host