简体中文 | English
查询内蒙古住户的电费余额、历史电量电费与每日电量情况
当前版本的数据来自蒙电e家app 接口。
仓库中仍然保留了早期的 energy_api.py 作为历史参考,但公众号相关接口目前已弃用,不再参与实际取数。
根据公众号中的说法
查询余额为结算系统余额=上月度结转电费+本月缴纳电费,实际电费余额以表计显示为准。
所以,余额不是实时余额,仅供参考。
可以通过在HACS中搜索插件名IMPC Energy进行安装
从这里下载最新版本
把压缩包内容解压到custom_components/impc_energy文件夹下
安装后需要重启hass
当前版本使用蒙电e家账号登录进行配置,不再手动输入户号。
-
进入 设置 -> 设备与服务 -> 添加集成(右下角)
-
在弹出的对话框中搜索
IMPC Energy并点击 -
在弹出的配置向导中输入
蒙电e家的用户名和密码 -
集成会自动调用
getUser接口,获取该账号下绑定的全部户号,并为每个户号各创建一个配置条目 -
每个条目的名称直接使用接口返回的地址/户名(
yhmc) -
等待配置完成
-
系统会自动生成实体名称, 如有需要可自行修改
如果后续
token失效,Home Assistant 会提示重新认证,此时重新输入一次密码即可刷新该账号下所有条目的登录凭证。
旧版本迁移指南
如果您从 v0.X.X 旧版本升级到 v1.X.X 及以上版本,可能需要注意以下事项:
- 旧版本配置文件配置方式已被移除,请改用图形界面添加。
- 由于
entity_id与unique_id的问题,旧版实体与新版不兼容,需要删除旧版实体。 - 需要删除配置文件中的
impc_energy配置 - 如果无法删除旧版实体,请尝试删除旧版
IMPC Energy集成,重启HomeAssistant,再重新安装。
插件会为每个户号创建 4 个传感器:电费余额、历史电费、阶梯电费 与 每日电量
image
image
电费余额是结算余额,所以理论上数值一个月才会改变一次(交了电费也可能改变,没有测试) image
过去 12 个月的历史数据(用电量与电费)放到了一个传感器里 "历史"实体中展示的数据是本期电费 image
阶梯电费实体会默认查询上一个月的阶梯电费信息。
实体状态(state)为该月总电费,额外属性中包含:
query_month:查询年月,格式YYYYMMcurrent_tier:当前阶梯档位current_price:当前阶梯电价total_consumption:总电量total_bill:总电费tier_spread_bill:阶梯差额电费price_name:电价名称price_code:电价编码tiers:阶梯明细数组,适合卡片和图表直接读取
每日电量会展示最近 30 天的每日用电量 image
有时会有负值是因为接口返回的就是负数, 不知道为什么
利用图表卡片 apexcharts-card 可以实现如下的效果:
(x轴步长没有生效可能是这个图表库的问题)
type: vertical-stack cards: - type: horizontal-stack cards: - type: markdown content: |- {% set home=states.sensor.impc_energy_01xxxxxxx70_balance %} ### {{home.state}} 当前余额(元) - type: markdown content: |- {% set home=states.sensor.impc_energy_0110xxxxxx970_history %} ### {{home.attributes['current']['bill']}} 本期总电费(元) - type: markdown content: |- {% set home=states.sensor.impc_energy_011xxxxxxx970_history %} ### {{home.attributes['current']['consumption']}} 本期总电量(kW⋅h) - type: custom:apexcharts-card header: show: true title: 用电历史 show_states: false colorize_states: true graph_span: 1y span: offset: '-1month' apex_config: legend: position: top xaxis: stepSize: 1 tooltip: enabled: false labels: datetimeFormatter: year: '' month: M月 tooltip: x: format: yyyy年M月 series: - name: 历史电量 entity: sensor.impc_energy_01xxxxxxxxx70_history type: column color: 3498DB unit: kW⋅h show: datalabels: false legend_value: false data_generator: | const data=[]; const attributes=entity.attributes; for(let item in attributes){ if(item.length==6&&item.startsWith("20")){ //202403 const timeStr=`${item.slice(0, 4)}-${item.slice(-2)}-01T00:00:00`; const dataObj=new Date(timeStr); data.push([dataObj.getTime(),attributes[item]["consumption"]]); } } //console.log("data1", data); return data; - name: 历史电费 entity: sensor.impc_energy_011xxxxxx970_history color: FF9F0b unit: 元 extend_to: false show: datalabels: false legend_value: false data_generator: | const data=[]; const attributes=entity.attributes; for(let item in attributes){ if(item.length==6&&item.startsWith("20")){ //202403 const timeStr=`${item.slice(0, 4)}-${item.slice(-2)}-01T00:00:00`; const dataObj=new Date(timeStr); data.push([dataObj.getTime(),attributes[item]["bill"]]); } } //console.log("data2", data); return data; - type: custom:apexcharts-card header: show: true title: 每日用电 show_states: false colorize_states: true graph_span: 30d apex_config: legend: position: top xaxis: stepSize: 1 tooltip: enabled: false labels: datetimeFormatter: year: '' month: '' day: d日 tooltip: x: format: yyyy年MM月dd日 series: - name: 日用电量 entity: sensor.impc_energy_011xxxxxx970_daily_consumption color: 4D55CC unit: kW⋅h show: datalabels: false legend_value: false data_generator: | const data=[]; const attributes=entity.attributes; for(let item in attributes){ if(item&&item.startsWith("20")){ //2024-03-01 const timeStr=`${item}T00:00:00`; const dataObj=new Date(timeStr); data.push([dataObj.getTime(),attributes[item]]); //data.push([item, attributes[item]]); } } console.log("data3", data); return data;
以下示例假设阶梯电费实体为 sensor.impc_energy_0110072xxxxx_tiered_bill
type: vertical-stack cards: - type: markdown content: |- {% set e = states.sensor.impc_energy_0110072xxxxx_tiered_bill %} ## 阶梯用电一览表 查询月份:**{{ e.attributes.query_month[:4] }}/{{ e.attributes.query_month[4:6] }}** - type: grid columns: 2 square: false cards: - type: markdown content: |- {% set e = states.sensor.impc_energy_0110072xxxxx_tiered_bill %} ### 当前阶梯档位 **{{ e.attributes.current_tier }} 档** - type: markdown content: |- {% set e = states.sensor.impc_energy_0110072xxxxx_tiered_bill %} ### 当前阶梯电价 **{{ e.attributes.current_price }} 元/度** - type: markdown content: |- {% set e = states.sensor.impc_energy_0110072xxxxx_tiered_bill %} ### 总电量 **{{ e.attributes.total_consumption }} kWh** - type: markdown content: |- {% set e = states.sensor.impc_energy_0110072xxxxx_tiered_bill %} ### 总电费 **{{ e.state }} 元** - type: markdown content: |- {% set e = states.sensor.impc_energy_0110072xxxxx_tiered_bill %} ### 阶梯差额电费 **{{ e.attributes.tier_spread_bill }} 元** - type: markdown content: |- {% set e = states.sensor.impc_energy_0110072xxxxx_tiered_bill %} {% set tiers = e.attributes.tiers if e and e.attributes.tiers is defined else [] %} ### 阶梯明细 {% for item in tiers %} - **{{ item.tier_name }}**:{{ item.consumption }} kWh / {{ item.price }} 元/度 / {{ item.bill }} 元 {% endfor %}
考虑到 apexcharts-card 更适合时间序列,当前版本的阶梯电费示例采用更稳定的摘要卡 + 明细列表方案,而不再强依赖类目柱状图。
没有找到现成能用的,就自己写一个吧。
我是搞Java的,Python勉强能看懂,但是还是有些蛋疼的 (╯‵□しろいしかく′)╯(┻━┻
这里鸣谢 @involute 大神,参考了他帖子中的代码
同样感谢大神@Aaron Godfrey 提供的插件开发教程