智能电表教程
电表简介
联网方式:WiFi
WIFI芯片:ESP8266
计量模块:PZEM-004T V3
视频简介:https://www.bilibili.com/video/BV1Ua4y1z7WC/
电表样式
1、盒装款
2、导轨款
电表接线方式
1、接线示意图
2、接线要求
(1)接在总空开下
测总用电时,电表电源必须接在总空开下方(与总火线并联)
原因:
电表的计量芯片在计量时,会判断有功功率和无功功率。(分路空开下,只是总电流的一部分,导致功率因数低,计量不准。)
空开有家庭电路保护功能,可以放心接入(不要接总空开的上方入户线,没有保护,且一直是带电状态!!!)
接线正确判断标准:
待机功率因数应在 0.6 以上(低于50W时,功率因数会更低)。
用电时(电流越大功率因数越大),应在 0.9 以上。
(2)禁止带电接线
断闸接线,带电作业十分危险!
(3)铜线不外露
断电后,将电表的零火线,缠绕在空开出线上。电线塞进空开后,不要让铜线漏出来!
铜线外露,一是有触电的危险,二是有短路的危险!
(4)互感器方向
需要和电流方向一致,(同时需要扣紧,否则影响测量精度)
ESPHome固件
固件介绍
优点:
(1)可直接接入homeassistant,无需其他设置(homeassistant自动发现设备)
(2)不接入HA时,网页输入IP,也可以查看设备信息,可OTA升级
(3)传感器更新间隔,最低可设置为1秒。(默认为3秒的间隔,不推荐特别低!)
(4)可电量清零
缺点:
(1)esphome需要代码操作(比如ds18b20温度传感器,必须在日志里找到address,手动配置才行)
首推esphome固件,因为电表通常不需要改变参数!
功能介绍
1、Reset Energy
点击后,执行电量清零
2、Restart
重启esp8266芯片
3、Current
电流
4、Energy
电量
5、Frequency
频率
6、Power
功率
7、Power Factor
功率因数
8、Temperature
电表温度
9、uptime
设备运行时长
10、Voltage
电压
接入步骤
只需要在设备通电后,找到“esp-meter”的wifi热点。
配网后,可在homeassistant的集成顶部,发现esp-meter设备。
点击配置,就自动接入homeassistant!
1、没有自动发现,可以在“配置——设备与服务”,添加“esphome“集成,输入设备IP即可添加。
2、有esphome集成情况下,点击添加设备。
总之,接入非常简单!
EspHome年、月、日电量
在configuration.yaml里添加如下代码,保存后重启!
#每日用电统计
utility_meter:
daily_energy:
source: sensor.esp_meter_energy
cycle: daily
#月度用电统计
monthly_energy:
source: sensor.esp_meter_energy
cycle: monthly
#年度用电统计
yearly_energy:
source: sensor.esp_meter_energy
cycle: yearly
Tasmota固件
固件介绍
优点:
(1)通过MQTT方式接入,可以使用公网MQTT,也可以使用带TSL加密的MQTT服务器
(2)使用公网MQTT,可以将多个网络下的设备,接入同一个homeassistant主机
(3)可电量清零,电量数值设定
缺点:
(1)对于不会添加MQTT服务的玩家,接入比较麻烦
(2)传感器更新间隔最低为10秒
1、设备通电后,会生成WiFi热点,通过手机或者电脑连接
2、连接后即可配置网络(如果不跳出,浏览器输入:192.168.4.1)
3、配网成功后,通过路由器后台查看ip
4、浏览器输入该设备ip,查看、配置设备
1、电表配置MQTT
点击“设置”,即可看到MQTT选项
2、查看是否连接MQTT成功
进入“控制台”
成功接入的样子
未成功的样子(需要检查MQTT地址,端口,账号密码是否正确)
2、接入HA
在homeassistant添加MQTT集成(本地化需先安装MQTT服务,或使用公网MQTT服务器)
MQTT安装和配置,请看:https://www.bilibili.com/video/BV1EC4y1D7yT/
配置好后,会自动发现tasmota集成
接入的成功的样子(可对照网页里中文,手动翻译一下)
中文翻译
默认设备接入homeassistant,都是英文格式。可以手动对每个实体翻译,也可以通过配置文件,转为中文。
1、打开configuration.yaml文件
configuration.yaml,在homeassistant的同级目录下,是HA的配置文件。
在代码里,输入下方需要翻译的固件,保存后,重启homeassistant。
PS:翻译只改变设备在HA页面上的名称。
2、tasmota固件翻译
homeassistant:
customize:
sensor.tasmota_energy_apparentpower:
friendly_name: 视在功率
sensor.tasmota_energy_current:
friendly_name: 电流
sensor.tasmota_energy_factor:
friendly_name: 功率因数
sensor.tasmota_energy_frequency:
friendly_name: 频率
sensor.tasmota_energy_power:
friendly_name: 功率
sensor.tasmota_energy_reactivepower:
friendly_name: 无功功率
sensor.tasmota_energy_today:
friendly_name: 今日用电
sensor.tasmota_energy_total:
friendly_name: 总用电
sensor.tasmota_energy_totalstarttime:
friendly_name: 启动时间
sensor.tasmota_energy_voltage:
friendly_name: 电压
sensor.tasmota_energy_yesterday:
friendly_name: 昨日用电
sensor.tasmota_restart_reason:
friendly_name: 重启原因
sensor.tasmota_last_restart_time:
friendly_name: 上次重启时间
sensor.tasmota_ssid:
friendly_name: 无线网名称
3、EspHome固件翻译
homeassistant:
customize:
button.esp_meter_reset_energy:
friendly_name: 电量重置
sensor.esp_meter_current:
friendly_name: 电流
sensor.esp_meter_power_factor:
friendly_name: 功率因数
sensor.esp_meter_frequency:
friendly_name: 频率
sensor.esp_meter_power:
friendly_name: 功率
sensor.esp_meter_energy:
friendly_name: 总用电
sensor.esp_meter_uptime:
friendly_name: 运行时长
sensor.esp_meter_voltage:
friendly_name: 电压
sensor.esp_meter_temperature:
friendly_name: 温度
button.esp_meter_restart:
friendly_name: 重启
sensor.esp_meter_wifi_signal:
friendly_name: WIFI信号强度
sensor.esp_meter_ip:
friendly_name: IP地址
能源面板接入
1、配置——仪表盘——能源
添加消耗电能实体(选择总用电,今日用电会在断电后,当日清零)
接入后,会开始统计(数据是整点更新)
实时电价配置
1、阶梯电价
进入 配置——辅助元素
创建template sensor
(1)阶梯
EspHome代码
{% if states("sensor.esp_meter_energy") | float <= 2760 %}
1
{% elif states("sensor.esp_meter_energy") | float >2760 and states("sensor.esp_meter_energy") | float <= 4800 %}
2
{% elif states("sensor.esp_meter_energy") | float > 4800 %}
3
{% endif %}
Tasmota代码 (删除备注)
{% if states("sensor.tasmota_energy_total") | float <= 2760 %}
1
#如果不是"sensor.tasmota_energy_total",需要修改为自己电表的总电流实体#
#当电量低于2760kWH,第一阶梯,根据地区修改#
{% elif states("sensor.tasmota_energy_total") | float >2760 and states("sensor.tasmota_energy_total") | float <= 4800 %}
#当电量大于2760kWH,小于4800kWh,第二阶梯#
2
{% elif states("sensor.tasmota_energy_total") | float > 4800 %}
#当电量大于4800kWh,第三阶梯#
3
{% endif %}
(2)实时电价
(实体电价依赖上面创建的阶梯传感器,如果报错,需删除备注)
EspHome代码
代码备注见下面tasmota代码
{% if now().strftime("%H")| int >= 8 and now().strftime("%H")|int < 22 and
states("sensor.dang_qian_jie_ti")=="1" %}
0.5953
{%elif now().strftime("%H")| int >= 8 and now().strftime("%H")|int < 22 and states("sensor.dang_qian_jie_ti")=="2" %}
0.6453
{%elif now().strftime("%H")| int >= 8 and now().strftime("%H")|int < 22 and states("sensor.dang_qian_jie_ti")=="3" %}
0.8953
{% elif states("sensor.dang_qian_jie_ti")=="1"%}
0.3583
{% elif states("sensor.dang_qian_jie_ti")=="2" %}
0.4083
{% elif states("sensor.dang_qian_jie_ti")=="3" %}
0.6583
{% endif %}
Tasmota代码 (删除备注)
{% if now().strftime("%H")| int >= 8 and now().strftime("%H")|int < 22 and
states("sensor.dang_qian_jie_ti")=="1" %}
#8点到22点,峰电;其余时段,谷电;可根据地区自行修改代码里的数字"int >= 8 " "int < 22 "
0.5953
#阶梯1,峰电#
{%elif now().strftime("%H")| int >= 8 and now().strftime("%H")|int < 22 and states("sensor.dang_qian_jie_ti")=="2" %}
0.6453
#阶梯2,峰电#
{%elif now().strftime("%H")| int >= 8 and now().strftime("%H")|int < 22 and states("sensor.dang_qian_jie_ti")=="3" %}
0.8953
#阶梯3,峰电#
#阶梯1,谷电#
{% elif states("sensor.dang_qian_jie_ti")=="1"%}
0.3583
{% elif states("sensor.dang_qian_jie_ti")=="2" %}
0.4083
#阶梯2,谷电#
{% elif states("sensor.dang_qian_jie_ti")=="3" %}
0.6583
#阶梯3,谷电#
{% endif %}
2、添加实时电价
进入 配置——仪表盘——能源,选择实时电价传感器实体
添加完成后,能源页面会显示“费用”,费用初始值为0,整点更新
峰谷电统计
峰谷电统计
1、峰谷电传感器
在configuration.yaml里,添加以下代码。(重启homeassistant生效)
(1)EspHome代码
utility_meter:
daily_energy:
source: sensor.esp_meter_energy
cycle: daily
tariffs:
- peak
- offpeak
#每日峰谷电统计
monthly_energy:
source: sensor.esp_meter_energy
cycle: monthly
tariffs:
- peak
- offpeak
#月度峰谷电统计
yearly_energy:
source: sensor.esp_meter_energy
cycle: yearly
tariffs:
- peak
- offpeak
#年度峰谷电统计
#还可以添加每周、每半月、季度的峰谷统计,详细查看官网说明
https://www.home-assistant.io/integrations/utility_meter/
(2)Tasmota代码
utility_meter:
daily_energy:
source: sensor.tasmota_energy_total
cycle: daily
tariffs:
- peak
- offpeak
#每日峰谷电统计
monthly_energy:
source: sensor.tasmota_energy_total
cycle: monthly
tariffs:
- peak
- offpeak
#月度峰谷电统计
yearly_energy:
source: sensor.tasmota_energy_total
cycle: yearly
tariffs:
- peak
- offpeak
#年度峰谷电统计
#还可以添加每周、每半月、季度的峰谷统计,详细查看官网说明
https://www.home-assistant.io/integrations/utility_meter/
2、峰谷电自动化
自动化作用是设置峰谷电切换时间
进入 配置——场景与自动化——创建自动化,以YAML编辑,粘贴下方代码,保存
alias: 峰谷电
description: ""
trigger:
- platform: time
at: "08:00:00"
variables:
tariff: peak
- platform: time
at: "22:00:00"
variables:
tariff: offpeak
condition: []
action:
- service: select.select_option
data:
option: "{{ tariff }}"
target:
entity_id:
- select.daily_energy
- select.monthly_energy
- select.yearly_energy
mode: single
季节电价设置
以湖南电费举例
1、创建月度用电传感器
在configuration.yaml里添加如下代码(实体是总用电量,如果不同,需修改为自己的)
utility_meter:
monthly_energy:
source: sensor.tasmota_energy_total
cycle: monthly
#重启homeassistant生效,得到sensor.monthly_energy实体,这个实体用在下面的代码里
2、创建实时电价传感器
重启后,homeassistant点击配置——设备与服务——辅助元素——template,创建template传感器
{% set energy = states('sensor.monthly_energy') | float %}
{% set month = now().month %}
{% set spring_autumn = [3, 4, 5, 9, 10, 11] %}
{% set winter_summer = [1, 2, 6, 7, 8, 12] %}
{% if energy < 200 %}
0.588
{% elif energy < 350 and month in spring_autumn %}
0.638
{% elif energy < 450 and month in winter_summer %}
0.638
{% elif energy >= 350 and month in spring_autumn %}
0.888
{% elif energy >= 400 and month in winter_summer %}
0.888
{% endif %}
3、实时电价添加到能源面板当中即可
UI卡片
1、卡片安装
(1)需要hacs商店安装卡片:apexcharts-card
2、卡片添加
点击“添加卡片”,拉到最下面,点击手动模式,粘贴下方代码
(如果传感器实体不同,需自行更改)
(1)EspHome代码
type: vertical-stack
cards:
- type: horizontal-stack
cards:
- type: entity
entity: sensor.daily_energy #需要先设置年、月、日用电
name: 今日用电
- type: entity
entity: sensor.monthly_energy
name: 本月用电
- type: entity
entity: sensor.esp_meter_temperature
name: 电表温度
- type: custom:apexcharts-card
header:
show: true
show_states: true
colorize_states: true
experimental:
color_threshold: true
series:
- entity: sensor.esp_meter_power
color: red
name: 功率
color_threshold:
- value: 100
color: '#a8d4ff'
- value: 500
color: '#085eb4'
- value: 1500
color: '#5c08b4'
- value: 3000
color: '#b40878'
- value: 5000
color: '#b40810'
- type: custom:apexcharts-card
apex_config:
chart:
stacked: true
legend:
show: true
graph_span: 14d
span:
end: day
show:
loading: false
last_updated: false
header:
show: true
show_states: false
colorize_states: true
series:
- entity: sensor.esp_meter_energy
name: 每日用电
type: column
unit: kWh
color: '#5dabf9'
group_by:
func: diff
duration: 1d
show:
datalabels: true
(2)Tasmota代码
type: vertical-stack
cards:
- type: horizontal-stack
cards:
- type: entity
entity: sensor.tasmota_energy_today
- type: entity
entity: sensor.tasmota_energy_yesterday
- type: entity
entity: sensor.tasmota_ds18b20_temperature
name: 电表温度
- type: custom:apexcharts-card
header:
show: true
show_states: true
colorize_states: true
experimental:
color_threshold: true
series:
- entity: sensor.tasmota_energy_power
color: red
name: 功率
color_threshold:
- value: 100
color: '#a8d4ff'
- value: 500
color: '#085eb4'
- value: 1500
color: '#5c08b4'
- value: 3000
color: '#b40878'
- value: 5000
color: '#b40810'
- type: custom:apexcharts-card
apex_config:
chart:
stacked: true
legend:
show: true
graph_span: 14d
span:
end: day
show:
loading: false
last_updated: false
header:
show: true
show_states: false
colorize_states: true
series:
- entity: sensor.tasmota_energy_total
name: 每日用电
type: column
unit: kWh
color: '#5dabf9'
group_by:
func: diff
duration: 1d
show:
datalabels: true
type: custom:apexcharts-card
header:
show: true
title: 每日峰谷电
show_states: true
colorize_states: true
chart_type: donut
series:
- entity: sensor.daily_energy_peak
name: 峰电
color: orange
- entity: sensor.daily_energy_offpeak
name: 谷电
color: green
电量校准
只要是外接的计量电表,和国网的电表数据,都会有出入(没有百分百一致的)。但正常数字变化都会有一定的规律。
所以,可以通过homeassistant的自动化,对计量数据进行一定的校准。
1、创建校准传感器
utility_meter:
jiaozhun_energy:
source: sensor.tasmota_energy_total
cycle: daily
#如果之前在configuration.yaml里创建过峰谷电,则只需要把下方代码放到后面,不需要带utility_meter:
jiaozhun_energy:
source: sensor.tasmota_energy_total
cycle: daily
创建传感器后,重启homeassistant,会生成sensor.jiaozhun_energy传感器
2、传感器校准自动化
以YAML编辑,粘贴下方代码
alias: 电量每日校准
description: ""
trigger:
- platform: time
at: "00:01:00"
condition: []
action:
- service: utility_meter.calibrate
data:
value: "0.5"
target:
entity_id: sensor.jiaozhun_energy
mode: single
#这个自动化里,设置了每天0点后,自动增加0.5度电量(自行设置)。弥补缺少的计量
3、更改能源面板电量实体
使用了校准传感器后,能源面板的实体也需要更改。
日历显示用电统计
日历里统计电量,可以看的很直观
1、创建本地日历
配置——设备与服务——添加集成——搜索“本地日历”
2、创建自动化
alias: 日历——用电记录
description: ""
trigger:
- platform: time
at: "23:59:58"
condition: []
action:
- service: calendar.create_event
data:
summary: "{{ states.sensor.tasmota_energy_today.state}}度"
start_date: "{{ now().strftime('%Y-%m-%d')}}"
end_date: "{{ (now() + timedelta(days=1)).strftime('%Y-%m-%d') }}"
target:
entity_id: calendar.yong_dian
mode: single
#这个自动化,是在11:59分,创建日历事件,事件就是每日用电的数据
Tasmota电量设定与清零
tasmota固件有电量设置与清零的功能,可以将总电量设置为当前电网数值
1、进入控制台
2、输入框中,输入设置的电量数值
比如设置100度电,则输入energytotal 100000 (在100的数值上,加3个0)
设置电量前,最好先清零今日用电,输入energytoday 0,因为默认将设置的与当前数值相加
设置成功后,总用电量就会变为100kWh
3、电量清零
电量清零,输入 energytotal 0
清零后会变为0,剩余的0.238是今日电量,如果也需要清零,则输入 energytoday 0
Tasmota转为Esphome固件
前言:不喜欢折腾的,不必这样做,因为比较麻烦,且功能没有大的区别!
1、固件升级为minimal
(必须先升级为最小体积版本,原先的固件因为存储空间不足,无法直接OTA其他固件)
固件地址地址:http://ota.tasmota.com/tasmota/tasmota-minimal.bin.gz
或者直接点击下载tasmota-minimal.bin.gz
升级后的样子
2、制作esphome固件
(1)esphome控制台创建新的设备
(2)输入设备名称
(3)选择esp8266芯片
(4)跳过install
(5)新建设备
原始设备代码是默认的
全选删除,粘贴电表配置文件
esphome:
name: esp_meter
friendly_name: Esp_meter
esp8266:
board: esp01_1m
# Enable logging
logger:
baud_rate: 0
# Enable Home Assistant API
api:
ota:
web_server:
port: 80
wifi:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Esp_meter"
password: ""
captive_portal:
uart:
rx_pin: GPIO03
tx_pin: GPIO01
baud_rate: 9600
id: ubus
modbus:
id: mbus
uart_id: ubus
#DS18B20传感器
dallas:
- pin: GPIO14
update_interval: 20s
sensor:
#DS18B20传感器
- platform: dallas
address: 0x603ce1d444789328
#address需要在log里找到,替换后重新install
name: "Temperature"
#pzem004t电表传感器
- platform: pzemac
id: pzem_ac
modbus_id: mbus
energy:
name: "Energy"
filters:
- multiply: 0.001
unit_of_measurement: kWh
accuracy_decimals: 2
device_class: "energy"
state_class: "total_increasing"
voltage:
name: "Voltage"
current:
name: "Current"
power:
name: "Power"
power_factor:
name: "Power Factor"
frequency:
name: "Frequency"
update_interval: 3s
- platform: uptime
id: uptime_s
update_interval: 300s
internal: true
- platform: wifi_signal
name: "WiFi Signal"
id: wifi_signal_db
update_interval: 30s
internal: true
entity_category: "diagnostic"
- platform: copy
source_id: wifi_signal_db
name: "WiFi Signal"
filters:
- lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
unit_of_measurement: "Signal %"
entity_category: "diagnostic"
text_sensor:
- platform: wifi_info
ip_address:
name: "IP"
id: id_sensor_ip
icon: mdi:ip
- platform: template
name: "Uptime"
lambda: |-
uint32_t dur = id(uptime_s).state;
int dys = 0;
int hrs = 0;
int mnts = 0;
if (dur > 86399) {
dys = trunc(dur / 86400);
dur = dur - (dys * 86400);
}
if (dur > 3599) {
hrs = trunc(dur / 3600);
dur = dur - (hrs * 3600);
}
if (dur > 59) {
mnts = trunc(dur / 60);
dur = dur - (mnts * 60);
}
char buffer[17];
sprintf(buffer, "%ud %02uh %02um %02us", dys, hrs, mnts, dur);
return {buffer};
icon: mdi:clock-start
update_interval: 60s
button:
- platform: restart
name: "Restart"
- platform: template
name: "Reset Energy"
icon: mdi:cached
on_press:
then:
- delay: 1s
- pzemac.reset_energy: pzem_ac
- delay: 1s
- pzemac.reset_energy: pzem_ac
- delay: 1s
- pzemac.reset_energy: pzem_ac
- delay: 1s
- pzemac.reset_energy: pzem_ac
- delay: 1s
- pzemac.reset_energy: pzem_ac
time:
- platform: homeassistant
id: homeassistant_time
(6)OTA更新固件
(7)等待编译
如果是第一次编译,通常要等待几分钟至十几分钟
(8)上传成功
可以通过路由器查看ip地址,网页里输入电表ip,即可查看
3、温度传感器更改
tasmota里是自动寻找配置DS18b20传感器,esphome必须手动在日志里查找ds18b20的地址
(1)在esphome控制台里,点击设备LOGS
(2)在日志开头部分,会有ds18b20地址
(3)复制地址,粘贴到原先yaml文件
(4)再次点击install,成功后即可显示温度传感器
Esphome转为Tasmota固件
1、上传固件
esphome默认可被homeassistant发现,接入后可以在设备页看到IP地址,浏览器打开IP地址,即可OTA升级。(或者在路由器里查看,wifi名称为:“Esp-meter”)
中文固件下载:tasmota-CN.bin.gz
2、内存不足ota失败
先上传tasmota最小固件
然后在tasmota里,点击 Firmware Upgrade 上传中文固件
3、tasmota设置
OTA成功后,会自动生成tasmota开头的wifi热点,连接后即可配置网络。随后路由器中找到tasmota的IP地址,浏览器打开。
或可以按下面模块设置:
配置后的样子:
4、数据更新间隔设置
4、时区、wifi设置
在控制台里输入命令,回车运行。
1、设置时区
timezone 8
2、WiFi模式
wificonfig 2
wificonfig 2,可以让设备在连接不到网络时,自动生成热点。方便后面重新换其他地方使用。
默认是wificonfig 4,如果路由器wifi更改信息了,电表就无法配置,
3、静态IP设置
IPAddress1 192.168.0.123
不建议设置静态IP,因为设备本身就是通过MQTT通讯的,不要求固定IP。
并且接入HA后,在tasmota里集成里可以直接访问设备。