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

 找回密码
 立即注册
查看: 6676|回复: 9

[求助] 关于mini-graph-card的使用问题

[复制链接]

106

主题

551

帖子

2793

积分

金牌会员

Rank: 6Rank: 6

积分
2793
金钱
2242
HASS币
20
发表于 2021-8-8 22:27:14 | 显示全部楼层 |阅读模式
mini-graph-card只能显示日耗电量的柱形图,没办法显示月耗电量的柱形图,大家有解决办法吗
HA已经有按月统计的耗电量实例了,按道理mini-graph-card只要能按月显示就可以,可是研究它的使用方法,好像没有按月显示的能力
回复

使用道具 举报

40

主题

3056

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11149
金钱
8042
HASS币
182
发表于 2021-8-9 08:56:06 | 显示全部楼层
本帖最后由 neroxps 于 2021-8-9 09:07 编辑

我仔细研究过,有大佬用 InfluxDB 来做数据后端,用 Grafana 来统计月,但好像很复杂,也没我想要的。
2.jpg
后来我就自己在 node-red 那边写了个月统计接口,推送给 HA

使用 custom:apexcharts-card 卡片显示出来,这个卡片支持内嵌 JavaScript ,允许你使用 JavaScript 语法去处理数据,甚至可以在 JavaScript 嵌套查询语句,调用前端的 ha 数据库查询功能,我为了节省前端资源,加快 lovelace 加载,没做在前端,直接搞了一个 sensor 专门在属性里面存月用电量总数。最终使用 custom:apexcharts-card 卡片展示。

1.jpg

Node-red 配置(记得修改查询12个月电费数据,数据库语句‘sensor.ddsd720_l_total_cost’改成你自己的传感器 ID),我这里使用 mariadb 提供数据库,所以使用 mysql 语句查询每个月最后一天的电费,‘sensor.ddsd720_l_total_cost’会每月重置,所以我只需要找出每月最后一天最后一个电费数据即可。有点粗糙,我自己够用。
[{"id":"dc70049.c7886f8","type":"change","z":"ab22dd27.5356f","name":"查询12个月电费数据","rules":[{"t":"set","p":"topic","pt":"msg","to":"SELECT DATE_FORMAT(last_updated, '%Y-%m') months, MAX(state+0) FROM (SELECT * FROM states WHERE entity_id='sensor.ddsd720_l_total_cost' AND DATE_FORMAT(last_updated, "%H") = 15) a GROUP BY DATE_FORMAT(last_updated, '%Y-%m');","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":280,"y":1640,"wires":[["92be10.53cda1f"]]},{"id":"92be10.53cda1f","type":"mysql","z":"ab22dd27.5356f","mydb":"f1a53946.8f9908","name":"","x":470,"y":1640,"wires":[["1b79c901.821db7"]]},{"id":"1b79c901.821db7","type":"function","z":"ab22dd27.5356f","name":"字段翻译","func":"// 日期格式化 Function \nDate.prototype.Format = function (fmt) {\n  var o = {\n    "y+": this.getFullYear(),\n    "M+": this.getMonth() + 1,                 //月份\n    "d+": this.getDate(),                    //日\n    "h+": this.getHours(),                   //小时\n    "m+": this.getMinutes(),                 //分\n    "s+": this.getSeconds(),                 //秒\n    "q+": Math.floor((this.getMonth() + 3) / 3), //季度\n    "S+": this.getMilliseconds()             //毫秒\n  };\n  for (var k in o) {\n    if (new RegExp("(" + k + ")").test(fmt)){\n      if(k == "y+"){\n        fmt = fmt.replace(RegExp.$1, ("" + o[k]).substr(4 - RegExp.$1.length));\n      }\n      else if(k=="S+"){\n        var lens = RegExp.$1.length;\n        lens = lens==1?3:lens;\n        fmt = fmt.replace(RegExp.$1, ("00" + o[k]).substr(("" + o[k]).length - 1,lens));\n      }\n      else{\n        fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));\n      }\n    }\n  }\n  return fmt;\n}\n\nvar arr=msg.payload\nvar time=[]\nvar states=[]\nfor (var i in arr){\n    var date=new Date(Date.parse(arr[i].months))\n    time.push(date.getTime())\n    states.push(arr[i]['MAX(state+0)'])\n}\nmsg.payload={\n    "attributes":{"time":time,"states":states},\n    "status":"ok"\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":620,"y":1640,"wires":[["5d68f0b7.91c6b"]]},{"id":"db027ecb.9ee06","type":"http in","z":"ab22dd27.5356f","name":"获取12个月电费","url":"/get_12m_cost","method":"get","upload":false,"swaggerDoc":"","x":80,"y":1640,"wires":[["dc70049.c7886f8"]]},{"id":"5d68f0b7.91c6b","type":"http response","z":"ab22dd27.5356f","name":"","statusCode":"200","headers":{},"x":800,"y":1640,"wires":[]},{"id":"f1a53946.8f9908","type":"MySQLdatabase","name":"HASS","host":"core-mariadb","port":"3306","db":"homeassistant","tz":"UTC"}]


HomeAssistant 配置

sensor:
  - platform: rest
    name: "ddsd720_l_12m_cost"
    resource: !secret ddsd720_l_12m_cost_url # 这里是 node-red 的URL,例如:http://HaUser@HaPassword:192.168.1.2/endpoint/get_12m_cost
    unit_of_measurement: '元'
    value_template: >-
          {% if value_json.status == 'ok' %}
            有效
          {% else %}
            无效
          {% endif %}
    scan_interval: 600 #十分钟一次
    timeout: 20
    json_attributes:
      - attributes


Lovelace 配置
type: custom:apexcharts-card
header:
  show: true
  title: 近12个月电费
  colorize_states: true
graph_span: 340d
series:
  - entity: sensor.ddsd720_l_12m_cost
    type: column
    show:
      as_duration: month
      datalabels: true
    data_generator: |
      return entity.attributes.attributes.time.map((peak, index) => {
       return [new Date(peak).getTime(), entity.attributes.attributes.states[index]];
      });

评分

参与人数 1金钱 +10 收起 理由
firewater + 10 赠人玫瑰,手留余香!

查看全部评分

Nero
回复

使用道具 举报

106

主题

551

帖子

2793

积分

金牌会员

Rank: 6Rank: 6

积分
2793
金钱
2242
HASS币
20
 楼主| 发表于 2021-8-9 23:11:25 | 显示全部楼层
neroxps 发表于 2021-8-9 08:56
我仔细研究过,有大佬用 InfluxDB 来做数据后端,用 Grafana 来统计月,但好像很复杂,也没我想要的。

后 ...

感谢N大细心指导,受教了!
回复

使用道具 举报

2

主题

367

帖子

2512

积分

金牌会员

Rank: 6Rank: 6

积分
2512
金钱
2140
HASS币
30
发表于 2021-8-10 12:17:27 | 显示全部楼层
只能顯示過往30天
回复

使用道具 举报

42

主题

524

帖子

2981

积分

金牌会员

Rank: 6Rank: 6

积分
2981
金钱
2457
HASS币
10
发表于 2022-6-6 19:50:33 | 显示全部楼层
neroxps 发表于 2021-8-9 08:56
我仔细研究过,有大佬用 InfluxDB 来做数据后端,用 Grafana 来统计月,但好像很复杂,也没我想要的。

后 ...

大佬能麻烦把这一楼的flow发个json文件吗,复制导入有语法错误,我想要学习下怎么把日期和金额数据导入到HA中,像你贴图中的那样的sensor格式
回复

使用道具 举报

40

主题

3056

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11149
金钱
8042
HASS币
182
发表于 2022-6-7 08:57:41 | 显示全部楼层
yinghu183 发表于 2022-6-6 19:50
大佬能麻烦把这一楼的flow发个json文件吗,复制导入有语法错误,我想要学习下怎么把日期和金额数据导入到 ...

flows.zip (2.24 KB, 下载次数: 3)


Nero
回复

使用道具 举报

42

主题

524

帖子

2981

积分

金牌会员

Rank: 6Rank: 6

积分
2981
金钱
2457
HASS币
10
发表于 2022-6-7 18:40:19 | 显示全部楼层

感谢大佬,困扰我大半年的问题终于解决了
回复

使用道具 举报

7

主题

166

帖子

1302

积分

论坛技术达人

积分
1302
金钱
1131
HASS币
60
发表于 2022-9-27 11:05:58 | 显示全部楼层
neroxps 发表于 2021-8-9 08:56
我仔细研究过,有大佬用 InfluxDB 来做数据后端,用 Grafana 来统计月,但好像很复杂,也没我想要的。

后 ...

请教大佬,我的实体属性(名字叫everydaylisted),里面的数组形式是日期、对应数值的数组,请问这样需要怎么改下面的data_generator代码?
data_generator: |
      return entity.attributes.attributes.time.map((peak, index) => {
       return [new Date(peak).getTime(), entity.attributes.attributes.states[index]];
      });


everydaylisted:
- date: '2022-09-01'
  power: '36.03'
- date: '2022-09-02'
  power: '24.57'
- date: '2022-09-03'
  power: '30.88'
- date: '2022-09-04'
  power: '32.9'
- date: '2022-09-05'
  power: '64.2'
- date: '2022-09-06'
  power: '42.6'
回复

使用道具 举报

1

主题

42

帖子

122

积分

禁止访问

积分
122
金钱
80
HASS币
0
发表于 2022-11-6 17:26:42 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

2

主题

38

帖子

180

积分

注册会员

Rank: 2

积分
180
金钱
142
HASS币
0
发表于 2023-10-12 10:07:44 来自手机 | 显示全部楼层
这个可以有,
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-12-26 22:45 , Processed in 0.059073 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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