Improve person/alarm/lock state (#14633)

* Opening device_class as alerting

* Don't use blue color for default active color

* Improve lock colors

* Green color for disarmed alarm

* Revert "Opening device_class as alerting"

This reverts commit b78342678d430eb3967f82e759342955b44417ad.

* Don't use active color

* Revert amber color because fixed in another PR

* Improve person, lock and alarm color state

* Sort variables

* Use alarm color in alarm card
This commit is contained in:
Paul Bottein 2022-12-10 03:38:59 +01:00 committed by GitHub
parent 3f1903bd87
commit 6e4a6cb0db
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 38 additions and 39 deletions

View File

@ -13,6 +13,8 @@ export const alarmControlPanelColor = (state?: string): string | undefined => {
return "alarm-arming"; return "alarm-arming";
case "triggered": case "triggered":
return "alarm-triggered"; return "alarm-triggered";
case "disarmed":
return "alarm-disarmed";
default: default:
return undefined; return undefined;
} }

View File

@ -1,5 +1,7 @@
export const lockColor = (state?: string): string | undefined => { export const lockColor = (state?: string): string | undefined => {
switch (state) { switch (state) {
case "unlocked":
return "lock-unlocked";
case "locked": case "locked":
return "lock-locked"; return "lock-locked";
case "jammed": case "jammed":

View File

@ -2,6 +2,8 @@ export const personColor = (state: string): string | undefined => {
switch (state) { switch (state) {
case "home": case "home":
return "person-home"; return "person-home";
case "not_home":
return "person-not-home";
default: default:
return "person-zone"; return "person-zone";
} }

View File

@ -16,15 +16,15 @@ export function stateActive(stateObj: HassEntity, state?: string): boolean {
// Custom cases // Custom cases
switch (domain) { switch (domain) {
case "alarm_control_panel":
return compareState !== "disarmed";
case "cover": case "cover":
return !["closed", "closing"].includes(compareState); return !["closed", "closing"].includes(compareState);
case "device_tracker": case "device_tracker":
case "person": case "person":
return compareState !== "not_home"; return compareState !== "not_home";
case "alarm_control_panel":
return compareState !== "disarmed";
case "lock": case "lock":
return compareState !== "unlocked"; return compareState !== "locked";
case "media_player": case "media_player":
return compareState !== "standby"; return compareState !== "standby";
case "vacuum": case "vacuum":

View File

@ -11,7 +11,7 @@ import { sensorColor } from "./color/sensor_color";
import { computeDomain } from "./compute_domain"; import { computeDomain } from "./compute_domain";
import { stateActive } from "./state_active"; import { stateActive } from "./state_active";
const STATIC_COLORED_DOMAIN = new Set([ const STATIC_ACTIVE_COLORED_DOMAIN = new Set([
"alert", "alert",
"automation", "automation",
"calendar", "calendar",
@ -37,16 +37,16 @@ export const stateColorCss = (stateObj: HassEntity, state?: string) => {
return `var(--rgb-state-unavailable-color)`; return `var(--rgb-state-unavailable-color)`;
} }
if (!stateActive(stateObj, state)) {
return `var(--rgb-state-inactive-color)`;
}
const domainColor = stateColor(stateObj, state); const domainColor = stateColor(stateObj, state);
if (domainColor) { if (domainColor) {
return `var(--rgb-state-${domainColor}-color)`; return `var(--rgb-state-${domainColor}-color)`;
} }
if (!stateActive(stateObj, state)) {
return `var(--rgb-state-inactive-color)`;
}
return undefined; return undefined;
}; };
@ -54,7 +54,10 @@ export const stateColor = (stateObj: HassEntity, state?: string) => {
const compareState = state !== undefined ? state : stateObj?.state; const compareState = state !== undefined ? state : stateObj?.state;
const domain = computeDomain(stateObj.entity_id); const domain = computeDomain(stateObj.entity_id);
if (STATIC_COLORED_DOMAIN.has(domain)) { if (
STATIC_ACTIVE_COLORED_DOMAIN.has(domain) &&
stateActive(stateObj, state)
) {
return domain.replace("_", "-"); return domain.replace("_", "-");
} }

View File

@ -56,22 +56,19 @@ function computeTimelineStateColor(
return rgb2hex(rgb); return rgb2hex(rgb);
} }
if (!stateActive(stateObj, state)) { const color = stateColor(stateObj, state);
if (!color && !stateActive(stateObj, state)) {
const rgb = cssToRgb("--rgb-state-inactive-color", computedStyles); const rgb = cssToRgb("--rgb-state-inactive-color", computedStyles);
if (!rgb) return undefined; if (!rgb) return undefined;
return rgb2hex(rgb); return rgb2hex(rgb);
} }
const color = stateColor(stateObj, state);
if (!color) return undefined;
const domain = computeDomain(stateObj.entity_id);
const rgb = cssToRgb(`--rgb-state-${color}-color`, computedStyles); const rgb = cssToRgb(`--rgb-state-${color}-color`, computedStyles);
if (!rgb) return undefined; if (!rgb) return undefined;
const domain = computeDomain(stateObj.entity_id);
const shade = DOMAIN_STATE_SHADES[domain]?.[state] as number | number; const shade = DOMAIN_STATE_SHADES[domain]?.[state] as number | number;
if (!shade) { if (!shade) {
return rgb2hex(rgb); return rgb2hex(rgb);

View File

@ -269,12 +269,7 @@ class HuiAlarmPanelCard extends LitElement implements LovelaceCard {
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
box-sizing: border-box; box-sizing: border-box;
--alarm-color-disarmed: var(--label-badge-green); --alarm-state-color: rgb(var(--rgb-state-alarm-armed-color));
--alarm-color-pending: var(--label-badge-yellow);
--alarm-color-triggered: var(--label-badge-red);
--alarm-color-armed: var(--label-badge-red);
--alarm-color-autoarm: rgba(0, 153, 255, 0.1);
--alarm-state-color: var(--alarm-color-armed);
} }
ha-chip { ha-chip {
@ -292,25 +287,25 @@ class HuiAlarmPanelCard extends LitElement implements LovelaceCard {
} }
.unavailable { .unavailable {
--alarm-state-color: var(--state-unavailable-color); --alarm-state-color: rgb(var(--rgb-state-unavailable-color));
} }
.disarmed { .disarmed {
--alarm-state-color: var(--alarm-color-disarmed); --alarm-state-color: rgb(var(--rgb-state-alarm-disarmed-color));
} }
.triggered { .triggered {
--alarm-state-color: var(--alarm-color-triggered); --alarm-state-color: rgb(var(--rgb-state-alarm-trigger-color));
animation: pulse 1s infinite; animation: pulse 1s infinite;
} }
.arming { .arming {
--alarm-state-color: var(--alarm-color-pending); --alarm-state-color: rgb(var(--rgb-state-alarm-arming-color));
animation: pulse 1s infinite; animation: pulse 1s infinite;
} }
.pending { .pending {
--alarm-state-color: var(--alarm-color-pending); --alarm-state-color: rgb(var(--rgb-state-alarm-pending-color));
animation: pulse 1s infinite; animation: pulse 1s infinite;
} }

View File

@ -22,11 +22,11 @@ function personBadgeIcon(entity: HassEntity) {
function personBadgeColor(entity: HassEntity) { function personBadgeColor(entity: HassEntity) {
switch (entity.state) { switch (entity.state) {
case "home": case "home":
return "var(--rgb-badge-person-home-color)"; return "var(--rgb-state-person-home-color)";
case "not_home": case "not_home":
return "var(--rgb-badge-person-not-home-color)"; return "var(--rgb-state-person-not-home-color)";
default: default:
return "var(--rgb-badge-person-zone-color)"; return "var(--rgb-state-person-zone-color)";
} }
} }

View File

@ -136,12 +136,13 @@ documentContainer.innerHTML = `<custom-style>
/* rgb state color */ /* rgb state color */
--rgb-state-default-color: var(--rgb-dark-primary-color, 68, 115, 158); --rgb-state-default-color: var(--rgb-dark-primary-color, 68, 115, 158);
--rgb-state-unavailable-color: var(--rgb-disabled-color);
--rgb-state-inactive-color: var(--rgb-inactive-color); --rgb-state-inactive-color: var(--rgb-inactive-color);
--rgb-state-unavailable-color: var(--rgb-disabled-color);
/* rgb state color */ /* rgb state domain colors */
--rgb-state-alarm-armed-color: var(--rgb-red-color); --rgb-state-alarm-armed-color: var(--rgb-green-color);
--rgb-state-alarm-arming-color: var(--rgb-orange-color); --rgb-state-alarm-arming-color: var(--rgb-orange-color);
--rgb-state-alarm-disarmed-color: var(--rgb-inactive-color);
--rgb-state-alarm-pending-color: var(--rgb-orange-color); --rgb-state-alarm-pending-color: var(--rgb-orange-color);
--rgb-state-alarm-triggered-color: var(--rgb-red-color); --rgb-state-alarm-triggered-color: var(--rgb-red-color);
--rgb-state-alert-color: var(--rgb-red-color); --rgb-state-alert-color: var(--rgb-red-color);
@ -164,10 +165,12 @@ documentContainer.innerHTML = `<custom-style>
--rgb-state-input-boolean-color: var(--rgb-amber-color); --rgb-state-input-boolean-color: var(--rgb-amber-color);
--rgb-state-light-color: var(--rgb-amber-color); --rgb-state-light-color: var(--rgb-amber-color);
--rgb-state-lock-jammed-color: var(--rgb-red-color); --rgb-state-lock-jammed-color: var(--rgb-red-color);
--rgb-state-lock-locked-color: var(--rgb-red-color); --rgb-state-lock-locked-color: var(--rgb-green-color);
--rgb-state-lock-pending-color: var(--rgb-orange-color); --rgb-state-lock-pending-color: var(--rgb-orange-color);
--rgb-state-lock-unlocked-color: var(--rgb-red-color);
--rgb-state-media-player-color: var(--rgb-indigo-color); --rgb-state-media-player-color: var(--rgb-indigo-color);
--rgb-state-person-home-color: var(--rgb-green-color); --rgb-state-person-home-color: var(--rgb-green-color);
--rgb-state-person-not-home-color: var(--rgb-inactive-color);
--rgb-state-person-zone-color: var(--rgb-blue-color); --rgb-state-person-zone-color: var(--rgb-blue-color);
--rgb-state-remote-color: var(--rgb-amber-color); --rgb-state-remote-color: var(--rgb-amber-color);
--rgb-state-script-color: var(--rgb-amber-color); --rgb-state-script-color: var(--rgb-amber-color);
@ -184,11 +187,6 @@ documentContainer.innerHTML = `<custom-style>
--rgb-state-update-installing-color: var(--rgb-orange-color); --rgb-state-update-installing-color: var(--rgb-orange-color);
--rgb-state-vacuum-color: var(--rgb-teal-color); --rgb-state-vacuum-color: var(--rgb-teal-color);
/* rgb state badge color */
--rgb-badge-person-home-color: var(--rgb-state-person-home-color);
--rgb-badge-person-zone-color: var(--rgb-state-person-zone-color);
--rgb-badge-person-not-home-color: var(--rgb-red-color);
/* input components */ /* input components */
--input-idle-line-color: rgba(0, 0, 0, 0.42); --input-idle-line-color: rgba(0, 0, 0, 0.42);
--input-hover-line-color: rgba(0, 0, 0, 0.87); --input-hover-line-color: rgba(0, 0, 0, 0.87);