annotate src/FdElectricity.ts @ 16:719c8cc4d8b2

electricity report
author drewp@bigasterisk.com
date Thu, 06 Jun 2024 17:52:46 -0700
parents
children 472003015880
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
1 import { LitElement, PropertyValues, css, html } from "lit";
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
2 import { customElement, property } from "lit/decorators.js";
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
3 import { shared } from "./shared";
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
4
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
5
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
6 @customElement("fd-electricity")
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
7 export class FdElectricity extends LitElement {
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
8 static styles = [
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
9 shared,
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
10 css`
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
11 :host {
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
12 font-size: 14px;
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
13 }
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
14
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
15 :host > table {
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
16 margin-top: 10px;
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
17 }
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
18 th {
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
19 text-align: left;
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
20 }
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
21 td {
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
22 text-align: right;
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
23 }
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
24 tr.total td,
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
25 tr.total th {
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
26 border-top: 1px solid white;
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
27 }
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
28 .bar {
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
29 background: yellow;
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
30 display: inline-block;
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
31 height: 10px;
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
32 }
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
33 .total .bar {
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
34 background: pink;
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
35 }
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
36 `,
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
37 ];
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
38 @property() seriesData: Map<string, number> = new Map();
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
39 constructor() {
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
40 super();
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
41 this.load();
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
42 setInterval(this.load.bind(this), 10 * 1000);
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
43 }
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
44 async load() {
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
45 this.seriesData = new Map();
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
46 const base = "https://bigasterisk.com/m/vmselect/select/0/prometheus/api/v1/query";
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
47 const now = Date.now() / 1000 - 10;
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
48 const seriesUrls = [
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
49 { url: base + `?query=powermeter_w&time=${now}&step=725ms`, label: "powermeter" },
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
50 { url: base + `?query=(sum%20by%20%20(s)%20(house_power_w))%20-%20(sum%20by(s)%20(powermeter_w))&time=${now}&step=725ms`, label: "unmetered" },
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
51 { url: base + `?query=house_power_w&time=${now}&step=725ms`, label: "total" },
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
52 ];
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
53
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
54 for (const series of seriesUrls) {
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
55 const response = await fetch(series.url);
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
56 const data = await response.json();
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
57 for (let row of data.data.result) {
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
58 this.seriesData.set(series.label + (row.metric.sensor ? "-" + row.metric.sensor : ""), parseFloat(row.value[1]));
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
59 }
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
60 }
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
61 this.update(new Map() as PropertyValues);
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
62 }
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
63 render() {
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
64 const disp = (n: number | undefined) => (n ? `${n.toFixed(1)}` : "");
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
65 const pxPerWatt = 150 / this.seriesData.get("total")!;
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
66 const bar = (n: number | undefined) => (n ? html`<div style="width: ${(n * pxPerWatt).toFixed(1)}px"></div>` : "");
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
67 return html`<h1 data-text="Electricity">Electricity</h1>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
68 <table>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
69 <tr>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
70 <th>(unmetered)</th>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
71 <td>${disp(this.seriesData.get("unmetered"))}</td>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
72 <td class="bar">${bar(this.seriesData.get("unmetered"))}</td>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
73 </tr>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
74 <tr>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
75 <th>dash</th>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
76 <td>${disp(this.seriesData.get("powermeter-do_r"))}</td>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
77 <td class="bar">${bar(this.seriesData.get("powermeter-do_r"))}</td>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
78 </tr>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
79 <tr>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
80 <th>washer</th>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
81 <td>${disp(this.seriesData.get("powermeter-ga_washer"))}</td>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
82 <td class="bar">${bar(this.seriesData.get("powermeter-ga_washer"))}</td>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
83 </tr>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
84 <tr>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
85 <th>fridge</th>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
86 <td>${disp(this.seriesData.get("powermeter-ki_fridge"))}</td>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
87 <td class="bar">${bar(this.seriesData.get("powermeter-ki_fridge"))}</td>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
88 </tr>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
89 <tr>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
90 <th>server closet</th>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
91 <td>${disp(this.seriesData.get("powermeter-st_wall"))}</td>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
92 <td class="bar">${bar(this.seriesData.get("powermeter-st_wall"))}</td>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
93 </tr>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
94 <tr>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
95 <th>theater console</th>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
96 <td>${disp(this.seriesData.get("powermeter-tt_console"))}</td>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
97 <td class="bar">${bar(this.seriesData.get("powermeter-tt_console"))}</td>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
98 </tr>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
99 <tr>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
100 <th>workshop desk</th>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
101 <td>${disp(this.seriesData.get("powermeter-ws_desk"))}</td>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
102 <td class="bar">${bar(this.seriesData.get("powermeter-ws_desk"))}</td>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
103 </tr>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
104 <tr class="total">
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
105 <th>Total</th>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
106 <td>${this.seriesData.get("total")} W</td>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
107 <td class="bar">${bar(this.seriesData.get("total"))}</td>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
108 </tr>
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
109 </table> `;
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
110 }
719c8cc4d8b2 electricity report
drewp@bigasterisk.com
parents:
diff changeset
111 }