diff --git a/src/state/connection-mixin.ts b/src/state/connection-mixin.ts index 5858ac67ef..5d896360c8 100644 --- a/src/state/connection-mixin.ts +++ b/src/state/connection-mixin.ts @@ -18,13 +18,16 @@ import { serviceCallWillDisconnect } from "../data/service"; import { NumberFormat, TimeFormat } from "../data/translation"; import { subscribePanels } from "../data/ws-panels"; import { translationMetadata } from "../resources/translations-metadata"; -import { Constructor, ServiceCallResponse } from "../types"; +import { Constructor, HomeAssistant, ServiceCallResponse } from "../types"; import { fetchWithAuth } from "../util/fetch-with-auth"; import { getState } from "../util/ha-pref-storage"; import hassCallApi from "../util/hass-call-api"; import { getLocalLanguage } from "../util/common-translation"; import { HassBaseEl } from "./hass-base-mixin"; import { polyfillsLoaded } from "../common/translations/localize"; +import { subscribeAreaRegistry } from "../data/area_registry"; +import { subscribeDeviceRegistry } from "../data/device_registry"; +import { subscribeEntityRegistry } from "../data/entity_registry"; export const connectionMixin = >( superClass: T @@ -38,6 +41,9 @@ export const connectionMixin = >( connection: conn, connected: true, states: null as any, + entities: null as any, + devices: null as any, + areas: null as any, config: null as any, themes: null as any, selectedTheme: null, @@ -180,6 +186,27 @@ export const connectionMixin = >( }); subscribeEntities(conn, (states) => this._updateHass({ states })); + subscribeEntityRegistry(conn, (entityReg) => { + const entities: HomeAssistant["entities"] = {}; + for (const entity of entityReg) { + entities[entity.entity_id] = entity; + } + this._updateHass({ entities }); + }); + subscribeDeviceRegistry(conn, (deviceReg) => { + const devices: HomeAssistant["devices"] = {}; + for (const device of deviceReg) { + devices[device.id] = device; + } + this._updateHass({ devices }); + }); + subscribeAreaRegistry(conn, (areaReg) => { + const areas: HomeAssistant["areas"] = {}; + for (const area of areaReg) { + areas[area.area_id] = area; + } + this._updateHass({ areas }); + }); subscribeConfig(conn, (config) => { if (this.hass?.config?.time_zone !== config.time_zone) { if (__BUILD__ === "latest" && polyfillsLoaded) { diff --git a/src/types.ts b/src/types.ts index 62f6e89366..44479f9168 100644 --- a/src/types.ts +++ b/src/types.ts @@ -8,6 +8,9 @@ import { MessageBase, } from "home-assistant-js-websocket"; import { LocalizeFunc } from "./common/translations/localize"; +import { AreaRegistryEntry } from "./data/area_registry"; +import { DeviceRegistryEntry } from "./data/device_registry"; +import { EntityRegistryEntry } from "./data/entity_registry"; import { CoreFrontendUserData } from "./data/frontend"; import { FrontendLocaleData, getHassTranslations } from "./data/translation"; import { Themes } from "./data/ws-themes"; @@ -197,6 +200,9 @@ export interface HomeAssistant { connection: Connection; connected: boolean; states: HassEntities; + entities: { [id: string]: EntityRegistryEntry }; + devices: { [id: string]: DeviceRegistryEntry }; + areas: { [id: string]: AreaRegistryEntry }; services: HassServices; config: HassConfig; themes: Themes;