Support binary sensor batteries (#8367)

This commit is contained in:
Álvaro Fernández Rojas 2021-02-24 17:00:07 +01:00 committed by GitHub
parent 781c0701fc
commit f5fb6c1e03
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 5 deletions

View File

@ -8,12 +8,19 @@ export const batteryIcon = (
const battery = Number(batteryState.state); const battery = Number(batteryState.state);
const battery_charging = const battery_charging =
batteryChargingState && batteryChargingState.state === "on"; batteryChargingState && batteryChargingState.state === "on";
let icon = "hass:battery";
if (isNaN(battery)) { if (isNaN(battery)) {
return "hass:battery-unknown"; if (batteryState.state === "off") {
icon += "-full";
} else if (batteryState.state === "on") {
icon += "-alert";
} else {
icon += "-unknown";
}
return icon;
} }
let icon = "hass:battery";
const batteryRound = Math.round(battery / 10) * 10; const batteryRound = Math.round(battery / 10) * 10;
if (battery_charging && battery > 10) { if (battery_charging && battery > 10) {
icon += `-charging-${batteryRound}`; icon += `-charging-${batteryRound}`;

View File

@ -12,6 +12,7 @@ import {
import { ifDefined } from "lit-html/directives/if-defined"; import { ifDefined } from "lit-html/directives/if-defined";
import memoizeOne from "memoize-one"; import memoizeOne from "memoize-one";
import { isComponentLoaded } from "../../../common/config/is_component_loaded"; import { isComponentLoaded } from "../../../common/config/is_component_loaded";
import { computeStateDomain } from "../../../common/entity/compute_state_domain";
import { computeStateName } from "../../../common/entity/compute_state_name"; import { computeStateName } from "../../../common/entity/compute_state_name";
import { compare } from "../../../common/string/compare"; import { compare } from "../../../common/string/compare";
import { slugify } from "../../../common/string/slugify"; import { slugify } from "../../../common/string/slugify";
@ -160,6 +161,8 @@ export class HaConfigDevicePage extends LitElement {
const batteryState = batteryEntity const batteryState = batteryEntity
? this.hass.states[batteryEntity.entity_id] ? this.hass.states[batteryEntity.entity_id]
: undefined; : undefined;
const batteryIsBinary = batteryState
&& computeStateDomain(batteryState) === "binary_sensor";
const batteryChargingState = batteryChargingEntity const batteryChargingState = batteryChargingEntity
? this.hass.states[batteryChargingEntity.entity_id] ? this.hass.states[batteryChargingEntity.entity_id]
: undefined; : undefined;
@ -215,7 +218,7 @@ export class HaConfigDevicePage extends LitElement {
batteryState batteryState
? html` ? html`
<div class="battery"> <div class="battery">
${batteryState.state}% ${batteryIsBinary ? "" : batteryState.state + "%"}
<ha-battery-icon <ha-battery-icon
.hass=${this.hass!} .hass=${this.hass!}
.batteryStateObj=${batteryState} .batteryStateObj=${batteryState}

View File

@ -15,6 +15,7 @@ import {
import { classMap } from "lit-html/directives/class-map"; import { classMap } from "lit-html/directives/class-map";
import memoizeOne from "memoize-one"; import memoizeOne from "memoize-one";
import { HASSDomEvent } from "../../../common/dom/fire_event"; import { HASSDomEvent } from "../../../common/dom/fire_event";
import { computeStateDomain } from "../../../common/entity/compute_state_domain";
import { navigate } from "../../../common/navigate"; import { navigate } from "../../../common/navigate";
import { LocalizeFunc } from "../../../common/translations/localize"; import { LocalizeFunc } from "../../../common/translations/localize";
import { computeRTL } from "../../../common/util/compute_rtl"; import { computeRTL } from "../../../common/util/compute_rtl";
@ -293,9 +294,11 @@ export class HaConfigDeviceDashboard extends LitElement {
batteryEntityPair && batteryEntityPair[1] batteryEntityPair && batteryEntityPair[1]
? this.hass.states[batteryEntityPair[1]] ? this.hass.states[batteryEntityPair[1]]
: undefined; : undefined;
return battery && !isNaN(battery.state as any) const batteryIsBinary =
battery && computeStateDomain(battery) === "binary_sensor";
return battery && (batteryIsBinary || !isNaN(battery.state as any))
? html` ? html`
${battery.state}% ${batteryIsBinary ? "" : battery.state + "%"}
<ha-battery-icon <ha-battery-icon
.hass=${this.hass!} .hass=${this.hass!}
.batteryStateObj=${battery} .batteryStateObj=${battery}