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

 找回密码
 立即注册
查看: 1753|回复: 23

[技术探讨] ESPHome如何创建变量与HA进行交互,用于培正电量校准

[复制链接]

18

主题

278

帖子

2263

积分

金牌会员

Rank: 6Rank: 6

积分
2263
金钱
1985
HASS币
0
发表于 2024-7-8 15:31:08 | 显示全部楼层 |阅读模式
背景:
我有一个培正电表,但他与国家电网的数据有1%~5%左右的误差,这个误差会根据当前的负载(功耗)变化而变化,当负载越小的时候,误差越大,负载越大的时候,误差越小

解决方案:
之前我的解决方案是在esphome固件中,让电能和功耗在返回给ha的时候,乘上一个系数,根据我之前用电量的计算,数值在1.0404与电网的误差最小,但随着现在天气炎热,用电量越来越大,这个系数就不准了,所以我希望这个系数不再是写死在ESPHOME固件中,而是可以通过HA中的NR进行计算后返回
原先的部分代码:
power: # 当前功率
name: '${friendly_name} Power3'
id: 'pzemac3_power'
filters:
- multiply: 1
- lambda: return x * 1.0404592573633;
unit_of_measurement: 'W'
accuracy_decimals: 1
希望可以实现:1、首先NR获取当前的实时功率(这个没问题)
2、NR根据当前的功率进行计算最合适的系数(这个需要长时间的测试,目前功耗在500W左右时 系数在1.0404592573633比较合适,那就以500w为基准,每高1w,系数减小0.000001(这是我现在随便想的,需要长时间去尝试))
3、NR计算返回这个系数到一个sensor,假设取名叫'a'(这个也没问题)
4、ESPHOME每次在计算的时候,都读取一下a,然后将自身的原始数据乘上a,最终在ha中读取到的数据就是自身数据乘a后的校准数据了,如果读取不到a的数据,那就直接返回自身数据(一直无法实现)
回复

使用道具 举报

18

主题

278

帖子

2263

积分

金牌会员

Rank: 6Rank: 6

积分
2263
金钱
1985
HASS币
0
 楼主| 发表于 2024-7-8 15:59:59 | 显示全部楼层
突然想到一个不需要NR 直接在ESPHOME中计算的方法
根据chatgpt的计算 负载每增加1w 系数减小0.0000065465
那么我直接在esphome固件中去计算
lambda: return x * (1.0404592573633 - (x - 500) * 0.0000065465)

这样的话 功耗的问题是解决了,但怎么把这个系数的值 共享给电能 让电能去参与计算呢,这个就需要用到esphome的动态变量了
现在就是卡在这了   功耗在计算的时候  (1.0404592573633 - (x - 500) * 0.0000065465) 这个就相当于是动态系数了
回复

使用道具 举报

1

主题

44

帖子

382

积分

中级会员

Rank: 3Rank: 3

积分
382
金钱
338
HASS币
10
发表于 2024-7-8 17:20:48 | 显示全部楼层
你在电能里重新计算一次就可以了啊,还可以把系数做成数值实体,在功率和电能部分别乘上去。
回复

使用道具 举报

46

主题

1654

帖子

6678

积分

论坛元老

Rank: 8Rank: 8

积分
6678
金钱
5014
HASS币
40
发表于 2024-7-8 19:47:12 | 显示全部楼层
参考带实时年度阶梯电价和峰谷电统计的培正ESPHOME
https://bbs.hassbian.com/thread-24535-1-1.html
(出处: 『瀚思彼岸』» 智能家居技术论坛)
折腾精神永存,感恩感谢论坛每一位愿意分享和帮助过我的大佬,论坛有你更精彩
回复

使用道具 举报

25

主题

272

帖子

1860

积分

金牌会员

Rank: 6Rank: 6

积分
1860
金钱
1588
HASS币
0
发表于 2024-7-8 20:04:23 | 显示全部楼层
本帖最后由 wpw72 于 2024-7-8 20:08 编辑

试试在hass中创建一个模板传感器a,a根据变量如功率变化,esphome中取这个辅助元素a参与计算结果。
回复

使用道具 举报

46

主题

1654

帖子

6678

积分

论坛元老

Rank: 8Rank: 8

积分
6678
金钱
5014
HASS币
40
发表于 2024-7-8 20:19:05 | 显示全部楼层
wpw72 发表于 2024-7-8 20:04
试试在hass中创建一个模板传感器a,a根据变量如功率变化,esphome中取这个辅助元素a参与计算结果。 ...

能在esphome解决最好,降低耦合
折腾精神永存,感恩感谢论坛每一位愿意分享和帮助过我的大佬,论坛有你更精彩
回复

使用道具 举报

0

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
金钱
12
HASS币
0
发表于 2024-7-8 21:03:18 | 显示全部楼层
这个可以试试看啊啊啊
回复

使用道具 举报

18

主题

278

帖子

2263

积分

金牌会员

Rank: 6Rank: 6

积分
2263
金钱
1985
HASS币
0
 楼主| 发表于 2024-7-8 23:33:17 | 显示全部楼层
jjcs 发表于 2024-7-8 20:19
能在esphome解决最好,降低耦合

我也是想着在esphome能解决最好 现在卡在这个地方
globals:
  - id: diannengxishu
    restore_value: yes
    type: float
    initial_value: '1.0'

理论来说 他应该创建了一个变量 并且初始值为1  但是发现实际上导致并没有初始化,值是nan,导致在计算系数的时候需要取当前功耗,但又因为功耗也需要原始数据乘系数,因为系数并没有初始化导致算不出来,所以功耗数据没了 系数也算不出来  死循环了
回复

使用道具 举报

18

主题

278

帖子

2263

积分

金牌会员

Rank: 6Rank: 6

积分
2263
金钱
1985
HASS币
0
 楼主| 发表于 2024-7-8 23:44:50 | 显示全部楼层
jjcs 发表于 2024-7-8 20:19
能在esphome解决最好,降低耦合

我现在搞了个偏门的办法,既然不能初始化(github上很多人讨论这个 但是没有解决方案) 那我就干脆功耗的展示不参与计算了,反正功耗数据展示最多也就误差了3% 100W相差3W 5000W也就差了150W 无伤大雅,直接在电能那边进行计算 这样就不会死循环了,强迫症有点难受 但是暂时就这样吧
回复

使用道具 举报

1

主题

70

帖子

460

积分

中级会员

Rank: 3Rank: 3

积分
460
金钱
390
HASS币
0
发表于 2024-7-9 09:40:21 | 显示全部楼层
本帖最后由 二十四书生 于 2024-7-9 09:42 编辑

既然你愿意花时间计算不同功率下实际功率和测量读数之间的误差,为什么非要从nodered读这个系数,不直接用一个高次多项式函数拟合呢
弄个三次多项式函数y=ax^3+bx^2+cx+c(abcd根据统计数据拟合),输入是测量原始值,输出是校正之后的值,然后直接向HA上报校正好的数据
这是仪器仪表开发的正确做法,而不是让客户自己拿着一堆系数口算修正不准确的读数

评分

参与人数 1金钱 +12 收起 理由
jjcs + 12 高手,这是高手!

查看全部评分

回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-24 13:41 , Processed in 0.243406 second(s), 34 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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