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

 找回密码
 立即注册
查看: 2830|回复: 19

[进阶教程] 通过HomeAssistant来模拟家里的设备能源消耗

[复制链接]

7

主题

190

帖子

1635

积分

金牌会员

Rank: 6Rank: 6

积分
1635
金钱
1440
HASS币
30
发表于 2023-2-6 18:04:15 | 显示全部楼层 |阅读模式
本帖最后由 sephrioth 于 2023-2-7 10:14 编辑

2023.02.07 更新为dscao 大佬的写法

--------------------------------------------

说明下,这个是通过模拟, 如果需要精确,请使用对应的智能电表接入(但是这种接入无法区分设备),或者每个设备上都加一个能检测功率的智能插座(也不太现实)...

首先,我们需要你想监测的设备的大概功率,然后通过HA来获取设备开机时间进行计算, 我这里用我家里的 iMac 台式机举例
查了下,手上这台 iMac 的待机功率75w,正常功率是150-200w, 所以待机功率没法忽略(很多设备待机就几w的可以忽略不计)

创建两个 history_statistics sensor 来计算开机/待机的时间
sensor:
  - platform: history_stats
    name: Stats  iMac
    entity_id: binary_sensor.imac   #你要监控的设备 entity_id
    state: 
    - 'on'   #监控开机状态
    type: time
    start: "{{ now().replace(hour=0, minute=0, second=0, microsecond=0) }}"  #从0点开始
    end: "{{ now() }}"   #到现在经过了多久

  - platform: history_stats
    name: Stats  iMac Off
    entity_id: binary_sensor.imac  #你要监控的设备 entity_id
    state: 
    - 'off'  #监控待机状态
    type: time
    start: "{{ now().replace(hour=0, minute=0, second=0, microsecond=0) }}"
    end: "{{ now() }}"



然后创建一个 template 的 sensor 来计算功耗

template:
  - sensor:
    - name: "Energy  iMac"
      unique_id: energy_imac
      state_class: total_increasing  #状态类型为 total_increasing
      device_class: energy    #设备类型为能源
      unit_of_measurement: 'kWh'   #单位为千瓦
      state: >
         {% set x = states('sensor.stats_imac') | float %}     # 这里的entity 就是上面创建的监控开机时间的sensor,值赋给 x
         {% set y = states('sensor.stats_imac_off') | float %}  # 这里的entity 就是上面创建的监控待机时间的sensor,值赋给 y
           {{ (x*0.15)|round(3) + (y*0.075)|round(3)  }}      # 开机功率算150w,因为这个sensor单位是千瓦,所以也就是 0.15,待机功率计算为 0.075
         {% endif %}  
      attributes:
        last_reset: '2023-01-01T00:00:00+00:00'



最后把这个sensor添加到能源面板,在电网数据那里添加后就可以看到每个小时的能耗分布, 在单独设备那里添加后可以看设备当前的总能耗, 我这里设备比较多,大概就长这样
download.png

在独立设备那里大概长这样
download (1).png

最后可以根据实际电网数据进行一些微调, 我现在和实际耗电的误差大概在3-5% 之间。

-----------------------------------

本来教程差不多可以结束了,最后再附送下如何加入价格计算。
楼主本人在魔都,电费是晚上10点到早上6点是谷用电, 其余时间是峰用电; 然后魔都还有个年度阶梯,但是这个数据在电网那边更新延迟的厉害,没法实时,所以我就打算手动调整了, 毕竟一年最多也就调2次

针对峰用电和谷用电创建 input_select

input_select:
  electric_price_level:
    name: 'Price'
    options:    #用电的3档价格
      - 0.617,0.317
      - 0.623,0.31
      - 0.977,0.487
    icon: mdi:currency-cny   



然后再生成一个 template sensor 来根据时间来判断当前是峰用电还是谷用电, 先准备好系统的 time 这个sensor
template:
  - sensor:
    - name: "Electric Price"
      unique_id: sensor_electric_price
      icon: mdi:home-lightning-bolt
      unit_of_measurement: 'CNY/kWh'
      state: >
        {% set current_hour = strptime(states('sensor.time'), "%H:%M").hour %}   #获取当前时间
        {% if current_hour > 6 and current_hour < 22 %}  #如果是在6点后, 22点前
          {{ states('input_select.electric_price_level').split(",")[0]|float }}   #使用峰用电价格
        {% else %}
          {{ states('input_select.electric_price_level').split(",")[1]|float }}
        {% endif %}  



然后在能源配置页面, 电网数据那里, 编辑你刚刚添加的设备, 选择 use an entity with current price, 然后选中刚刚新增的这个 sensor, 就可以了

download (2).png


这样你就可以在能源面板看到当天的电费了

download (3).png

最后提醒一句就是, 相关的 entities 必须要记录在 record 中, 如果你排除了就没有数据了

评分

参与人数 4金钱 +40 收起 理由
ruike007 + 8 高端
sorrypqa + 10 大神666!
dscao + 10 感谢楼主分享!
jjcs + 12 感谢楼主分享!

查看全部评分

回复

使用道具 举报

76

主题

1357

帖子

1万

积分

元老级技术达人

积分
18296
金钱
16899
HASS币
290
发表于 2023-2-6 22:23:02 | 显示全部楼层
本帖最后由 dscao 于 2023-2-6 22:30 编辑

这个思路也很好,对于年用电量统计不太准确的时候比较好用。另外可以简化成一个input,简化选择的人工操作。

input_select:
  electric_price:
    name: 'Electric Price'
    options:    #用电的3档价格,峰谷价用逗号分隔,第三部分可以当备注方便选择)
      - 0.617,0.307
      - 0.623,0.31,(第二档电价)
      - 0.977,0.487,(第三档电价)
    icon: mdi:currency-cny
template:
  - sensor:
    - name: "Electric Price"
      unique_id: sensor_electric_price
      icon: mdi:home-lightning-bolt
      unit_of_measurement: 'CNY/kWh'
      state: >
        {% set current_hour = strptime(states('sensor.time'), "%H:%M").hour %}   #获取当前时间
        {% if current_hour > 6 and current_hour < 22 %}  #如果是在6点后, 22点前
          {{ states('input_select.electric_price') .split(",")[0]|float}}   #使用峰用电价格
        {% else %}
          {{ states('input_select.electric_price') .split(",")[1]|float}}   #使用谷用电价格
        {% endif %} 

回复

使用道具 举报

3

主题

119

帖子

1175

积分

金牌会员

Rank: 6Rank: 6

积分
1175
金钱
1056
HASS币
0
发表于 2023-2-7 08:50:23 来自手机 | 显示全部楼层
好思路,这样可以省不少智能插座的钱
回复

使用道具 举报

45

主题

249

帖子

1528

积分

金牌会员

Rank: 6Rank: 6

积分
1528
金钱
1279
HASS币
0
发表于 2023-2-7 09:41:37 | 显示全部楼层
你好,请问一下,是如何判断监控设备 是开机还是 待机 呢?
回复

使用道具 举报

7

主题

190

帖子

1635

积分

金牌会员

Rank: 6Rank: 6

积分
1635
金钱
1440
HASS币
30
 楼主| 发表于 2023-2-7 09:56:49 | 显示全部楼层
dscao 发表于 2023-2-6 22:23
这个思路也很好,对于年用电量统计不太准确的时候比较好用。另外可以简化成一个input,简化选择的人工操作 ...

大佬厉害, 我当时就是懒的弄了。。哈哈哈, 这个更好!
回复

使用道具 举报

7

主题

190

帖子

1635

积分

金牌会员

Rank: 6Rank: 6

积分
1635
金钱
1440
HASS币
30
 楼主| 发表于 2023-2-7 09:58:36 | 显示全部楼层
mobility 发表于 2023-2-7 09:41
你好,请问一下,是如何判断监控设备 是开机还是 待机 呢?

你看我最开始的两个 history_statistics sensor
里面的 state 就是代表你监控的状态, 一般off都代表待机/关机, on代表开机, 根据你监控设备的类型,可能有细微差别。
回复

使用道具 举报

5

主题

105

帖子

817

积分

高级会员

Rank: 4

积分
817
金钱
712
HASS币
0
发表于 2023-2-7 10:15:52 | 显示全部楼层
厉害了 666
回复

使用道具 举报

45

主题

249

帖子

1528

积分

金牌会员

Rank: 6Rank: 6

积分
1528
金钱
1279
HASS币
0
发表于 2023-2-7 10:25:37 | 显示全部楼层
sephrioth 发表于 2023-2-7 09:58
你看我最开始的两个 history_statistics sensor
里面的 state 就是代表你监控的状态, 一般off都代表待机 ...

哦,那如何获取到 用电设备的 ON 和 OFF 状态的呢 ?
回复

使用道具 举报

0

主题

36

帖子

290

积分

中级会员

Rank: 3Rank: 3

积分
290
金钱
254
HASS币
0
发表于 2023-2-7 12:34:47 | 显示全部楼层
mobility 发表于 2023-2-7 10:25
哦,那如何获取到 用电设备的 ON 和 OFF 状态的呢 ?

接入HA的用电设备不都是有ON和OFF状态吗?你是想问,如何把用电设备接入HA吧?哈哈哈哈
回复

使用道具 举报

45

主题

249

帖子

1528

积分

金牌会员

Rank: 6Rank: 6

积分
1528
金钱
1279
HASS币
0
发表于 2023-2-7 14:31:56 | 显示全部楼层
sunofsun 发表于 2023-2-7 12:34
接入HA的用电设备不都是有ON和OFF状态吗?你是想问,如何把用电设备接入HA吧?哈哈哈哈 ...

是呀,UP这么多设备,是通过什么方式接入 HA的 呢?
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-25 14:59 , Processed in 0.117986 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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