本帖最后由 polisher 于 2023-4-12 09:47 编辑
一、背景 家里的配电箱共计6路,一直想获得实时用电情况,奈何市面上竟然找不到适用的产品。 才玩HA不久,论坛瞎逛中深受启发,于是产生用ESPhome自制一个多路电量检测的想法,通过不断的抄袭官方资料和剽窃各位大神的代码,终于做出了样机并通电测试完成。 奈何本人不懂C++、python,没有电路和PCB设计经验,英文也很烂,必须赶紧把这种拼凑出来的东西奉上,期盼各位大神不吝赐教,以便进一步完善。 二、成品 外壳采用某宝的ABS塑料导轨壳体,可以很方便的装在家里的配电箱中,且与配电箱中的空气开关浑然一体。只需将空气开关下端的电线串过电流互感器即可。如果觉得串线不方便,也可以使用开合式电流互感器,但价格要贵一些。
可测量电压、电流、频率、芯片温度、功率、电量等等。 三、原理 采用上海贝岭生产的BL0906(六相交/直流电能计量芯片)测量电参数,如果您觉得六路通道不够用,可以采用BL0910(10个通道),通过ESP8266作为MCU通过串口发送指令给BL0906,轮询或校正电参数,同时将电参数发送给homeassistant. 由于ESPhome并不直接支持BL0906芯片,于是在论坛翻案例,终于东拼西凑出一个外部组件。 PCB 以上电路图和PCB均使用立创EDA制作,工程详情可在立创开源硬件平台直接访问(点击这里) 四、材料分享 五、组件 组件安装:只需把压缩包中的目录解出来放置于ESPhome目录中即可,关于外部组件的使用可参看HA官方文档(点击这里) 组件包含bl0906.cpp、bl0906.h、sensor.py文件。 如需对电量表的测量值进行校正,可打开bl0906.cpp文件,在BL0906::setup()中进行校正。校正函数有Bias_correction和gain_correction,分别为偏置校正和增益校正,由于本人手里没有专业设备,也只是简单校正就完事了,呵呵。 六、meter.yaml
esphome:
name: meter
esp8266:
board: esp01_1m
# Enable logging
logger:
baud_rate: 0
# level: NONE
# Enable Home Assistant API
api:
encryption:
key: "8o5uVbBcX6HInU2yxGLCqLQ8bmAobqJ55cxpj4FTtHw="
ota:
password: "655623c399338f280a91e4cd4770bec3"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Meter Fallback Hotspot"
password: "6SfKbzLuv3f8"
captive_portal:
external_components:
- source: mycomponents
uart:
tx_pin: GPIO1
rx_pin: GPIO3
baud_rate: 19200
id: utt2
sensor:
- platform: bl0906
#update_interval: 60s
Frequency:
name: 'Frequency'
Temperature:
name: 'Temperature'
Voltage:
name: 'Voltage'
Current_1:
name: 'Current_1'
Current_2:
name: 'Current_2'
Current_3:
name: 'Current_3'
Current_4:
name: 'Current_4'
Current_5:
name: 'Current_5'
Current_6:
name: 'Current_6'
Power_1:
name: 'Power_1'
Power_2:
name: 'Power_2'
Power_3:
name: 'Power_3'
Power_4:
name: 'Power_4'
Power_5:
name: 'Power_5'
Power_6:
name: 'Power_6'
#Power_sum:
# name: 'Power_sum'
Energy_1:
name: 'Energy_1'
Energy_2:
name: 'Energy_2'
Energy_3:
name: 'Energy_3'
Energy_4:
name: 'Energy_4'
Energy_5:
name: 'Energy_5'
Energy_6:
name: 'Energy_6'
#Energy_sum:
# name: 'Energy_sum'
|