1
0
mirror of https://github.com/home-assistant/frontend.git synced 2025-12-20 02:38:53 +00:00
Files
frontend/src/data/entity_attributes.ts

106 lines
2.2 KiB
TypeScript

import { formatNumericDuration } from "../common/datetime/format_duration";
import type { FrontendLocaleData } from "./translation";
export const STATE_ATTRIBUTES = [
"entity_id",
"assumed_state",
"attribution",
"custom_ui_more_info",
"custom_ui_state_card",
"device_class",
"editable",
"emulated_hue_name",
"emulated_hue",
"entity_picture",
"event_types",
"friendly_name",
"haaska_hidden",
"haaska_name",
"icon",
"initial_state",
"last_reset",
"restored",
"state_class",
"supported_features",
"unit_of_measurement",
"available_tones",
];
export const TEMPERATURE_ATTRIBUTES = new Set([
"temperature",
"current_temperature",
"target_temperature",
"target_temp_temp",
"target_temp_high",
"target_temp_low",
"target_temp_step",
"min_temp",
"max_temp",
]);
export const DOMAIN_ATTRIBUTES_UNITS = {
climate: {
humidity: "%",
current_humidity: "%",
target_humidity_low: "%",
target_humidity_high: "%",
target_humidity_step: "%",
min_humidity: "%",
max_humidity: "%",
},
cover: {
current_position: "%",
current_tilt_position: "%",
},
fan: {
percentage: "%",
},
humidifier: {
humidity: "%",
current_humidity: "%",
min_humidity: "%",
max_humidity: "%",
},
light: {
color_temp: "mired",
max_mireds: "mired",
min_mireds: "mired",
color_temp_kelvin: "K",
min_color_temp_kelvin: "K",
max_color_temp_kelvin: "K",
brightness: "%",
},
sun: {
azimuth: "°",
elevation: "°",
},
vacuum: {
battery_level: "%",
},
valve: {
current_position: "%",
},
sensor: {
battery_level: "%",
},
media_player: {
volume_level: "%",
},
} as const satisfies Record<string, Record<string, string>>;
type Formatter = (value: number, locale: FrontendLocaleData) => string;
export const DOMAIN_ATTRIBUTES_FORMATERS: Record<
string,
Record<string, Formatter>
> = {
light: {
brightness: (value) => Math.round((value / 255) * 100).toString(),
},
media_player: {
volume_level: (value) => Math.round(value * 100).toString(),
media_duration: (value, locale) =>
formatNumericDuration(locale, { seconds: value })!,
},
};