Mercurial > code > home > repos > front-door-display
diff src/FdElectricity.ts @ 17:472003015880
restyle using css grid
author | drewp@bigasterisk.com |
---|---|
date | Fri, 07 Jun 2024 21:22:37 -0700 |
parents | 719c8cc4d8b2 |
children | 499996b8224a |
line wrap: on
line diff
--- a/src/FdElectricity.ts Thu Jun 06 17:52:46 2024 -0700 +++ b/src/FdElectricity.ts Fri Jun 07 21:22:37 2024 -0700 @@ -2,12 +2,11 @@ import { customElement, property } from "lit/decorators.js"; import { shared } from "./shared"; - @customElement("fd-electricity") export class FdElectricity extends LitElement { - static styles = [ - shared, - css` + static styles = [ + shared, + css` :host { font-size: 14px; } @@ -15,6 +14,10 @@ :host > table { margin-top: 10px; } + th, + td { + padding: 0 0; + } th { text-align: left; } @@ -34,37 +37,37 @@ background: pink; } `, + ]; + @property() seriesData: Map<string, number> = new Map(); + constructor() { + super(); + this.load(); + setInterval(this.load.bind(this), 10 * 1000); + } + async load() { + this.seriesData = new Map(); + const base = "https://bigasterisk.com/m/vmselect/select/0/prometheus/api/v1/query"; + const now = Date.now() / 1000 - 10; + const seriesUrls = [ + { url: base + `?query=powermeter_w&time=${now}&step=725ms`, label: "powermeter" }, + { 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" }, + { url: base + `?query=house_power_w&time=${now}&step=725ms`, label: "total" }, ]; - @property() seriesData: Map<string, number> = new Map(); - constructor() { - super(); - this.load(); - setInterval(this.load.bind(this), 10 * 1000); + + for (const series of seriesUrls) { + const response = await fetch(series.url); + const data = await response.json(); + for (let row of data.data.result) { + this.seriesData.set(series.label + (row.metric.sensor ? "-" + row.metric.sensor : ""), parseFloat(row.value[1])); + } } - async load() { - this.seriesData = new Map(); - const base = "https://bigasterisk.com/m/vmselect/select/0/prometheus/api/v1/query"; - const now = Date.now() / 1000 - 10; - const seriesUrls = [ - { url: base + `?query=powermeter_w&time=${now}&step=725ms`, label: "powermeter" }, - { 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" }, - { url: base + `?query=house_power_w&time=${now}&step=725ms`, label: "total" }, - ]; - - for (const series of seriesUrls) { - const response = await fetch(series.url); - const data = await response.json(); - for (let row of data.data.result) { - this.seriesData.set(series.label + (row.metric.sensor ? "-" + row.metric.sensor : ""), parseFloat(row.value[1])); - } - } - this.update(new Map() as PropertyValues); - } - render() { - const disp = (n: number | undefined) => (n ? `${n.toFixed(1)}` : ""); - const pxPerWatt = 150 / this.seriesData.get("total")!; - const bar = (n: number | undefined) => (n ? html`<div style="width: ${(n * pxPerWatt).toFixed(1)}px"></div>` : ""); - return html`<h1 data-text="Electricity">Electricity</h1> + this.update(new Map() as PropertyValues); + } + render() { + const disp = (n: number | undefined) => (n ? `${n.toFixed(1)}` : ""); + const pxPerWatt = 150 / this.seriesData.get("total")!; + const bar = (n: number | undefined) => (n ? html`<div style="width: ${(n * pxPerWatt).toFixed(1)}px"></div>` : ""); + return html`<h1 data-text="Electricity">Electricity</h1> <table> <tr> <th>(unmetered)</th> @@ -107,5 +110,5 @@ <td class="bar">${bar(this.seriesData.get("total"))}</td> </tr> </table> `; - } + } }