Improve error handling in automation i18n (#25266)

This commit is contained in:
Bram Kragten 2025-05-01 20:06:42 +03:00 committed by GitHub
parent dddba58d38
commit f608783551
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 103 additions and 80 deletions

View File

@ -73,16 +73,20 @@ class HaEntityAttributePicker extends LitElement {
return nothing;
}
const stateObj = this.hass.states[this.entityId!] as HassEntity | undefined;
return html`
<ha-combo-box
.hass=${this.hass}
.value=${this.value
? computeAttributeNameDisplay(
this.hass.localize,
this.hass.states[this.entityId!],
this.hass.entities,
this.value
)
? stateObj
? computeAttributeNameDisplay(
this.hass.localize,
stateObj,
this.hass.entities,
this.value
)
: this.value
: ""}
.autofocus=${this.autofocus}
.label=${this.label ??

View File

@ -1,4 +1,4 @@
import type { HassConfig } from "home-assistant-js-websocket";
import type { HassConfig, HassEntity } from "home-assistant-js-websocket";
import { ensureArray } from "../common/array/ensure-array";
import {
formatDurationLong,
@ -155,7 +155,7 @@ const tryDescribeTrigger = (
const stateObj = Array.isArray(trigger.entity_id)
? hass.states[trigger.entity_id[0]]
: hass.states[trigger.entity_id];
: (hass.states[trigger.entity_id] as HassEntity | undefined);
if (Array.isArray(trigger.entity_id)) {
for (const entity of trigger.entity_id.values()) {
@ -172,12 +172,14 @@ const tryDescribeTrigger = (
}
const attribute = trigger.attribute
? computeAttributeNameDisplay(
hass.localize,
stateObj,
hass.entities,
trigger.attribute
)
? stateObj
? computeAttributeNameDisplay(
hass.localize,
stateObj,
hass.entities,
trigger.attribute
)
: trigger.attribute
: undefined;
const duration = trigger.for
@ -232,13 +234,15 @@ const tryDescribeTrigger = (
if (trigger.attribute) {
const stateObj = Array.isArray(trigger.entity_id)
? hass.states[trigger.entity_id[0]]
: hass.states[trigger.entity_id];
attribute = computeAttributeNameDisplay(
hass.localize,
stateObj,
hass.entities,
trigger.attribute
);
: (hass.states[trigger.entity_id] as HassEntity | undefined);
attribute = stateObj
? computeAttributeNameDisplay(
hass.localize,
stateObj,
hass.entities,
trigger.attribute
)
: trigger.attribute;
}
const entityArray: string[] = ensureArray(trigger.entity_id);
@ -250,7 +254,7 @@ const tryDescribeTrigger = (
}
}
const stateObj = hass.states[entityArray[0]];
const stateObj = hass.states[entityArray[0]] as HassEntity | undefined;
let fromChoice = "other";
let fromString = "";
@ -266,15 +270,17 @@ const tryDescribeTrigger = (
const from: string[] = [];
for (const state of fromArray) {
from.push(
trigger.attribute
? hass
.formatEntityAttributeValue(
stateObj,
trigger.attribute,
state
)
.toString()
: hass.formatEntityState(stateObj, state)
stateObj
? trigger.attribute
? hass
.formatEntityAttributeValue(
stateObj,
trigger.attribute,
state
)
.toString()
: hass.formatEntityState(stateObj, state)
: state
);
}
if (from.length !== 0) {
@ -298,15 +304,17 @@ const tryDescribeTrigger = (
const to: string[] = [];
for (const state of toArray) {
to.push(
trigger.attribute
? hass
.formatEntityAttributeValue(
stateObj,
trigger.attribute,
state
)
.toString()
: hass.formatEntityState(stateObj, state).toString()
stateObj
? trigger.attribute
? hass
.formatEntityAttributeValue(
stateObj,
trigger.attribute,
state
)
.toString()
: hass.formatEntityState(stateObj, state).toString()
: state
);
}
if (to.length !== 0) {
@ -725,7 +733,9 @@ const tryDescribeTrigger = (
if (localized) {
return localized;
}
const stateObj = hass.states[config.entity_id as string];
const stateObj = hass.states[config.entity_id as string] as
| HassEntity
| undefined;
return `${stateObj ? computeStateName(stateObj) : config.entity_id} ${
config.type
}`;
@ -894,13 +904,15 @@ const tryDescribeCondition = (
if (condition.attribute) {
const stateObj = Array.isArray(condition.entity_id)
? hass.states[condition.entity_id[0]]
: hass.states[condition.entity_id];
attribute = computeAttributeNameDisplay(
hass.localize,
stateObj,
hass.entities,
condition.attribute
);
: (hass.states[condition.entity_id] as HassEntity | undefined);
attribute = stateObj
? computeAttributeNameDisplay(
hass.localize,
stateObj,
hass.entities,
condition.attribute
)
: condition.attribute;
}
const entities: string[] = [];
@ -919,37 +931,40 @@ const tryDescribeCondition = (
}
const states: string[] = [];
const stateObj =
hass.states[
Array.isArray(condition.entity_id)
? condition.entity_id[0]
: condition.entity_id
];
const stateObj = hass.states[
Array.isArray(condition.entity_id)
? condition.entity_id[0]
: condition.entity_id
] as HassEntity | undefined;
if (Array.isArray(condition.state)) {
for (const state of condition.state.values()) {
states.push(
condition.attribute
? hass
.formatEntityAttributeValue(
stateObj,
condition.attribute,
state
)
.toString()
: hass.formatEntityState(stateObj, state)
stateObj
? condition.attribute
? hass
.formatEntityAttributeValue(
stateObj,
condition.attribute,
state
)
.toString()
: hass.formatEntityState(stateObj, state)
: state
);
}
} else if (condition.state !== "") {
states.push(
condition.attribute
? hass
.formatEntityAttributeValue(
stateObj,
condition.attribute,
condition.state
)
.toString()
: hass.formatEntityState(stateObj, condition.state.toString())
stateObj
? condition.attribute
? hass
.formatEntityAttributeValue(
stateObj,
condition.attribute,
condition.state
)
.toString()
: hass.formatEntityState(stateObj, condition.state.toString())
: condition.state.toString()
);
}
@ -979,7 +994,7 @@ const tryDescribeCondition = (
// Numeric State Condition
if (condition.condition === "numeric_state" && condition.entity_id) {
const entity_ids = ensureArray(condition.entity_id);
const stateObj = hass.states[entity_ids[0]];
const stateObj = hass.states[entity_ids[0]] as HassEntity | undefined;
const entity = formatListWithAnds(
hass.locale,
entity_ids.map((id) =>
@ -988,12 +1003,14 @@ const tryDescribeCondition = (
);
const attribute = condition.attribute
? computeAttributeNameDisplay(
hass.localize,
stateObj,
hass.entities,
condition.attribute
)
? stateObj
? computeAttributeNameDisplay(
hass.localize,
stateObj,
hass.entities,
condition.attribute
)
: condition.attribute
: undefined;
if (condition.above !== undefined && condition.below !== undefined) {
@ -1187,7 +1204,9 @@ const tryDescribeCondition = (
if (localized) {
return localized;
}
const stateObj = hass.states[config.entity_id as string];
const stateObj = hass.states[config.entity_id as string] as
| HassEntity
| undefined;
return `${stateObj ? computeStateName(stateObj) : config.entity_id} ${
config.type
}`;