@digital-alchemy/hass 24.9.3 → 24.9.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/dist/dynamic.d.ts +1 -1
- package/dist/dynamic.js +7 -2
- package/dist/dynamic.js.map +1 -1
- package/dist/extensions/area.extension.d.ts +2 -12
- package/dist/extensions/area.extension.js +20 -26
- package/dist/extensions/area.extension.js.map +1 -1
- package/dist/extensions/backup.extension.d.ts +2 -7
- package/dist/extensions/backup.extension.js +5 -8
- package/dist/extensions/backup.extension.js.map +1 -1
- package/dist/extensions/call-proxy.extension.d.ts +1 -1
- package/dist/extensions/call-proxy.extension.js +3 -22
- package/dist/extensions/call-proxy.extension.js.map +1 -1
- package/dist/extensions/config.extension.d.ts +2 -6
- package/dist/extensions/config.extension.js +21 -25
- package/dist/extensions/config.extension.js.map +1 -1
- package/dist/extensions/conversation.extension.d.ts +2 -6
- package/dist/extensions/conversation.extension.js +5 -8
- package/dist/extensions/conversation.extension.js.map +1 -1
- package/dist/extensions/device.extension.d.ts +2 -5
- package/dist/extensions/device.extension.js +16 -22
- package/dist/extensions/device.extension.js.map +1 -1
- package/dist/extensions/entity.extension.d.ts +2 -61
- package/dist/extensions/entity.extension.js +42 -83
- package/dist/extensions/entity.extension.js.map +1 -1
- package/dist/extensions/events.extension.d.ts +3 -11
- package/dist/extensions/events.extension.js +8 -11
- package/dist/extensions/events.extension.js.map +1 -1
- package/dist/extensions/fetch-api.extension.d.ts +12 -4
- package/dist/extensions/fetch-api.extension.js +23 -35
- package/dist/extensions/fetch-api.extension.js.map +1 -1
- package/dist/extensions/floor.extension.d.ts +2 -9
- package/dist/extensions/floor.extension.js +17 -23
- package/dist/extensions/floor.extension.js.map +1 -1
- package/dist/extensions/id-by.extension.js +15 -20
- package/dist/extensions/id-by.extension.js.map +1 -1
- package/dist/extensions/index.d.ts +1 -0
- package/dist/extensions/index.js +16 -18
- package/dist/extensions/index.js.map +1 -1
- package/dist/extensions/internal.extension.d.ts +18 -0
- package/dist/extensions/internal.extension.js +102 -0
- package/dist/extensions/internal.extension.js.map +1 -0
- package/dist/extensions/label.extension.d.ts +2 -9
- package/dist/extensions/label.extension.js +17 -23
- package/dist/extensions/label.extension.js.map +1 -1
- package/dist/extensions/reference.extension.d.ts +2 -12
- package/dist/extensions/reference.extension.js +19 -25
- package/dist/extensions/reference.extension.js.map +1 -1
- package/dist/extensions/registry.extension.d.ts +2 -7
- package/dist/extensions/registry.extension.js +1 -4
- package/dist/extensions/registry.extension.js.map +1 -1
- package/dist/extensions/websocket-api.extension.d.ts +3 -78
- package/dist/extensions/websocket-api.extension.js +82 -165
- package/dist/extensions/websocket-api.extension.js.map +1 -1
- package/dist/extensions/zone.extension.d.ts +2 -7
- package/dist/extensions/zone.extension.js +15 -21
- package/dist/extensions/zone.extension.js.map +1 -1
- package/dist/hass.module.d.ts +47 -36
- package/dist/hass.module.js +70 -70
- package/dist/hass.module.js.map +1 -1
- package/dist/helpers/backup.helper.js +1 -2
- package/dist/helpers/constants.helper.js +15 -18
- package/dist/helpers/constants.helper.js.map +1 -1
- package/dist/helpers/device.helper.js +2 -5
- package/dist/helpers/device.helper.js.map +1 -1
- package/dist/helpers/entity-state.helper.d.ts +3 -8
- package/dist/helpers/entity-state.helper.js +1 -8
- package/dist/helpers/entity-state.helper.js.map +1 -1
- package/dist/helpers/features.helper.js +79 -85
- package/dist/helpers/features.helper.js.map +1 -1
- package/dist/helpers/fetch/calendar.js +1 -2
- package/dist/helpers/fetch/configuration.js +2 -5
- package/dist/helpers/fetch/configuration.js.map +1 -1
- package/dist/helpers/fetch/index.js +5 -8
- package/dist/helpers/fetch/index.js.map +1 -1
- package/dist/helpers/fetch/server-log.js +1 -2
- package/dist/helpers/fetch/server-log.js.map +1 -1
- package/dist/helpers/fetch/service-list.js +1 -2
- package/dist/helpers/fetch/weather-forecasts.js +1 -2
- package/dist/helpers/fetch/weather-forecasts.js.map +1 -1
- package/dist/helpers/fetch.helper.d.ts +162 -0
- package/dist/helpers/fetch.helper.js +161 -0
- package/dist/helpers/fetch.helper.js.map +1 -0
- package/dist/helpers/id-by.helper.js +1 -2
- package/dist/helpers/index.d.ts +2 -1
- package/dist/helpers/index.js +13 -15
- package/dist/helpers/index.js.map +1 -1
- package/dist/helpers/interfaces.helper.d.ts +228 -0
- package/dist/helpers/interfaces.helper.js +10 -0
- package/dist/helpers/interfaces.helper.js.map +1 -0
- package/dist/helpers/manifest.helper.d.ts +0 -1
- package/dist/helpers/manifest.helper.js +0 -1
- package/dist/helpers/notify.helper.d.ts +13 -5
- package/dist/helpers/notify.helper.js +1 -2
- package/dist/helpers/registry.js +7 -10
- package/dist/helpers/registry.js.map +1 -1
- package/dist/helpers/utility.helper.d.ts +6 -1
- package/dist/helpers/utility.helper.js +9 -13
- package/dist/helpers/utility.helper.js.map +1 -1
- package/dist/helpers/websocket.helper.d.ts +1 -2
- package/dist/helpers/websocket.helper.js +1 -2
- package/dist/index.js +5 -8
- package/dist/index.js.map +1 -1
- package/dist/mock_assistant/extensions/area.extension.d.ts +8 -0
- package/dist/mock_assistant/extensions/area.extension.js +51 -0
- package/dist/mock_assistant/extensions/area.extension.js.map +1 -0
- package/dist/mock_assistant/extensions/config.extension.d.ts +14 -0
- package/dist/mock_assistant/extensions/config.extension.js +29 -0
- package/dist/mock_assistant/extensions/config.extension.js.map +1 -0
- package/dist/mock_assistant/extensions/device.extension.d.ts +8 -0
- package/dist/mock_assistant/extensions/device.extension.js +33 -0
- package/dist/mock_assistant/extensions/device.extension.js.map +1 -0
- package/dist/mock_assistant/extensions/entity-registry.extension.d.ts +13 -0
- package/dist/mock_assistant/extensions/entity-registry.extension.js +28 -0
- package/dist/mock_assistant/extensions/entity-registry.extension.js.map +1 -0
- package/dist/mock_assistant/extensions/entity.extension.d.ts +30 -0
- package/dist/mock_assistant/extensions/entity.extension.js +77 -0
- package/dist/mock_assistant/extensions/entity.extension.js.map +1 -0
- package/dist/mock_assistant/extensions/events.extension.d.ts +1 -1
- package/dist/mock_assistant/extensions/events.extension.js +3 -6
- package/dist/mock_assistant/extensions/events.extension.js.map +1 -1
- package/dist/mock_assistant/extensions/fetch.extension.d.ts +1 -0
- package/dist/mock_assistant/extensions/fetch.extension.js +4 -0
- package/dist/mock_assistant/extensions/fetch.extension.js.map +1 -0
- package/dist/mock_assistant/extensions/fixtures.extension.d.ts +1 -1
- package/dist/mock_assistant/extensions/fixtures.extension.js +29 -33
- package/dist/mock_assistant/extensions/fixtures.extension.js.map +1 -1
- package/dist/mock_assistant/extensions/floor.extension.d.ts +8 -0
- package/dist/mock_assistant/extensions/floor.extension.js +51 -0
- package/dist/mock_assistant/extensions/floor.extension.js.map +1 -0
- package/dist/mock_assistant/extensions/index.d.ts +10 -0
- package/dist/mock_assistant/extensions/index.js +12 -5
- package/dist/mock_assistant/extensions/index.js.map +1 -1
- package/dist/mock_assistant/extensions/label.extension.d.ts +8 -0
- package/dist/mock_assistant/extensions/label.extension.js +51 -0
- package/dist/mock_assistant/extensions/label.extension.js.map +1 -0
- package/dist/mock_assistant/extensions/services.extension.d.ts +12 -0
- package/dist/mock_assistant/extensions/services.extension.js +20 -0
- package/dist/mock_assistant/extensions/services.extension.js.map +1 -0
- package/dist/mock_assistant/extensions/websocket-api.extension.d.ts +15 -0
- package/dist/mock_assistant/extensions/websocket-api.extension.js +68 -0
- package/dist/mock_assistant/extensions/websocket-api.extension.js.map +1 -0
- package/dist/mock_assistant/extensions/zone.extension.d.ts +8 -0
- package/dist/mock_assistant/extensions/zone.extension.js +51 -0
- package/dist/mock_assistant/extensions/zone.extension.js.map +1 -0
- package/dist/mock_assistant/helpers/fixtures.js +1 -2
- package/dist/mock_assistant/helpers/index.d.ts +0 -1
- package/dist/mock_assistant/helpers/index.js +1 -5
- package/dist/mock_assistant/helpers/index.js.map +1 -1
- package/dist/mock_assistant/index.js +3 -6
- package/dist/mock_assistant/index.js.map +1 -1
- package/dist/mock_assistant/main.js +11 -15
- package/dist/mock_assistant/main.js.map +1 -1
- package/dist/mock_assistant/mock-assistant.module.d.ts +156 -3
- package/dist/mock_assistant/mock-assistant.module.js +56 -11
- package/dist/mock_assistant/mock-assistant.module.js.map +1 -1
- package/dist/quickboot.module.js +5 -8
- package/dist/quickboot.module.js.map +1 -1
- package/dist/testing/area.spec.js +106 -194
- package/dist/testing/area.spec.js.map +1 -1
- package/dist/testing/backup.spec.js +97 -139
- package/dist/testing/backup.spec.js.map +1 -1
- package/dist/testing/config.spec.js +79 -153
- package/dist/testing/config.spec.js.map +1 -1
- package/dist/testing/device.spec.js +35 -69
- package/dist/testing/device.spec.js.map +1 -1
- package/dist/testing/entity.spec.js +94 -149
- package/dist/testing/entity.spec.js.map +1 -1
- package/dist/testing/events.spec.js +33 -57
- package/dist/testing/events.spec.js.map +1 -1
- package/dist/testing/fetch-api.spec.js +242 -427
- package/dist/testing/fetch-api.spec.js.map +1 -1
- package/dist/testing/fixtures.spec.d.ts +1 -0
- package/dist/testing/fixtures.spec.js +150 -0
- package/dist/testing/fixtures.spec.js.map +1 -0
- package/dist/testing/floor.spec.js +106 -194
- package/dist/testing/floor.spec.js.map +1 -1
- package/dist/testing/id-by.spec.js +68 -107
- package/dist/testing/id-by.spec.js.map +1 -1
- package/dist/testing/label.spec.js +106 -194
- package/dist/testing/label.spec.js.map +1 -1
- package/dist/testing/ref-by.spec.js +155 -219
- package/dist/testing/ref-by.spec.js.map +1 -1
- package/dist/testing/websocket.spec.d.ts +1 -8
- package/dist/testing/websocket.spec.js +35 -50
- package/dist/testing/websocket.spec.js.map +1 -1
- package/dist/testing/workflow.spec.js +82 -81
- package/dist/testing/workflow.spec.js.map +1 -1
- package/dist/testing/zone.spec.js +61 -113
- package/dist/testing/zone.spec.js.map +1 -1
- package/package.json +62 -44
- package/scripts/mock-assistant.sh +5 -0
- package/scripts/run-e2e.sh +7 -0
- package/scripts/test.sh +2 -0
- package/src/dynamic.ts +4254 -0
- package/src/extensions/area.extension.ts +118 -0
- package/src/extensions/backup.extension.ts +63 -0
- package/src/extensions/call-proxy.extension.ts +113 -0
- package/src/extensions/config.extension.ts +119 -0
- package/src/extensions/conversation.extension.ts +46 -0
- package/src/extensions/device.extension.ts +56 -0
- package/src/extensions/entity.extension.ts +344 -0
- package/src/extensions/events.extension.ts +25 -0
- package/src/extensions/fetch-api.extension.ts +269 -0
- package/src/extensions/floor.extension.ts +76 -0
- package/src/extensions/id-by.extension.ts +157 -0
- package/src/extensions/index.ts +16 -0
- package/src/extensions/internal.extension.ts +145 -0
- package/src/extensions/label.extension.ts +83 -0
- package/src/extensions/reference.extension.ts +330 -0
- package/src/extensions/registry.extension.ts +44 -0
- package/src/extensions/websocket-api.extension.ts +554 -0
- package/src/extensions/zone.extension.ts +69 -0
- package/src/hass.module.ts +217 -0
- package/src/helpers/backup.helper.ts +11 -0
- package/src/helpers/constants.helper.ts +30 -0
- package/src/helpers/device.helper.ts +25 -0
- package/src/helpers/entity-state.helper.ts +171 -0
- package/src/helpers/features.helper.ts +580 -0
- package/src/helpers/fetch/calendar.ts +54 -0
- package/src/helpers/fetch/configuration.ts +75 -0
- package/src/helpers/fetch/index.ts +5 -0
- package/src/helpers/fetch/server-log.ts +28 -0
- package/src/helpers/fetch/service-list.ts +64 -0
- package/src/helpers/fetch/weather-forecasts.ts +86 -0
- package/src/helpers/fetch.helper.ts +328 -0
- package/src/helpers/id-by.helper.ts +53 -0
- package/src/helpers/index.ts +13 -0
- package/src/helpers/interfaces.helper.ts +340 -0
- package/src/helpers/manifest.helper.ts +0 -0
- package/src/helpers/notify.helper.ts +302 -0
- package/src/helpers/registry.ts +281 -0
- package/src/helpers/utility.helper.ts +147 -0
- package/src/helpers/websocket.helper.ts +117 -0
- package/src/index.ts +5 -0
- package/src/mock_assistant/extensions/area.extension.ts +62 -0
- package/src/mock_assistant/extensions/config.extension.ts +33 -0
- package/src/mock_assistant/extensions/device.extension.ts +44 -0
- package/src/mock_assistant/extensions/entity-registry.extension.ts +41 -0
- package/src/mock_assistant/extensions/entity.extension.ts +114 -0
- package/src/mock_assistant/extensions/events.extension.ts +37 -0
- package/src/mock_assistant/extensions/fetch.extension.ts +3 -0
- package/src/mock_assistant/extensions/fixtures.extension.ts +79 -0
- package/src/mock_assistant/extensions/floor.extension.ts +64 -0
- package/src/mock_assistant/extensions/index.ts +12 -0
- package/src/mock_assistant/extensions/label.extension.ts +64 -0
- package/src/mock_assistant/extensions/services.extension.ts +25 -0
- package/src/mock_assistant/extensions/websocket-api.extension.ts +84 -0
- package/src/mock_assistant/extensions/zone.extension.ts +65 -0
- package/src/mock_assistant/helpers/fixtures.ts +22 -0
- package/src/mock_assistant/helpers/index.ts +1 -0
- package/src/mock_assistant/index.ts +3 -0
- package/src/mock_assistant/main.ts +46 -0
- package/src/mock_assistant/mock-assistant.module.ts +90 -0
- package/src/quickboot.module.ts +23 -0
- package/src/testing/area.spec.ts +189 -0
- package/src/testing/backup.spec.ts +157 -0
- package/src/testing/config.spec.ts +188 -0
- package/src/testing/device.spec.ts +89 -0
- package/src/testing/entity.spec.ts +171 -0
- package/src/testing/events.spec.ts +78 -0
- package/src/testing/fetch-api.spec.ts +410 -0
- package/src/testing/fixtures.spec.ts +158 -0
- package/src/testing/floor.spec.ts +186 -0
- package/src/testing/id-by.spec.ts +140 -0
- package/src/testing/label.spec.ts +186 -0
- package/src/testing/ref-by.spec.ts +300 -0
- package/src/testing/websocket.spec.ts +63 -0
- package/src/testing/workflow.spec.ts +195 -0
- package/src/testing/zone.spec.ts +109 -0
- package/dist/helpers/metrics.helper.d.ts +0 -29
- package/dist/helpers/metrics.helper.js +0 -62
- package/dist/helpers/metrics.helper.js.map +0 -1
- package/dist/mock_assistant/helpers/utils.d.ts +0 -4
- package/dist/mock_assistant/helpers/utils.js +0 -57
- package/dist/mock_assistant/helpers/utils.js.map +0 -1
|
@@ -1,14 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const core_1 = require("@digital-alchemy/core");
|
|
6
|
-
const dayjs_1 = tslib_1.__importDefault(require("dayjs"));
|
|
7
|
-
const process_1 = require("process");
|
|
8
|
-
const __1 = require("..");
|
|
1
|
+
import { debounce, each, eachSeries, INCREMENT, is, SECOND, sleep, START, } from "@digital-alchemy/core";
|
|
2
|
+
import dayjs from "dayjs";
|
|
3
|
+
import { ENTITY_REGISTRY_UPDATED, } from "..";
|
|
9
4
|
const MAX_ATTEMPTS = 10;
|
|
10
5
|
const RECENT = 5;
|
|
11
|
-
function EntityManager({ logger, hass, config, lifecycle, event, context, internal, }) {
|
|
6
|
+
export function EntityManager({ logger, hass, config, lifecycle, event, context, internal, }) {
|
|
12
7
|
// #MARK: Local vars
|
|
13
8
|
/**
|
|
14
9
|
* MASTER_STATE.switch.desk_light = {entity_id,state,attributes,...}
|
|
@@ -38,8 +33,8 @@ function EntityManager({ logger, hass, config, lifecycle, event, context, intern
|
|
|
38
33
|
logger.trace({ payload }, `looking up entity history`);
|
|
39
34
|
const result = (await hass.socket.sendMessage({
|
|
40
35
|
...payload,
|
|
41
|
-
end_time: (
|
|
42
|
-
start_time: (
|
|
36
|
+
end_time: dayjs(payload.end_time).toISOString(),
|
|
37
|
+
start_time: dayjs(payload.start_time).toISOString(),
|
|
43
38
|
type: "history/history_during_period",
|
|
44
39
|
}));
|
|
45
40
|
const entities = Object.keys(result);
|
|
@@ -49,7 +44,7 @@ function EntityManager({ logger, hass, config, lifecycle, event, context, intern
|
|
|
49
44
|
const value = states.map(data => {
|
|
50
45
|
return {
|
|
51
46
|
attributes: data.a,
|
|
52
|
-
date: new Date(data.lu *
|
|
47
|
+
date: new Date(data.lu * SECOND),
|
|
53
48
|
state: data.s,
|
|
54
49
|
};
|
|
55
50
|
});
|
|
@@ -63,16 +58,12 @@ function EntityManager({ logger, hass, config, lifecycle, event, context, intern
|
|
|
63
58
|
}
|
|
64
59
|
return Object.keys(MASTER_STATE).flatMap(domain => Object.keys(MASTER_STATE[domain]).map(id => `${domain}.${id}`));
|
|
65
60
|
}
|
|
66
|
-
// #MARK: findByDomain
|
|
67
|
-
function findByDomain(domain) {
|
|
68
|
-
return Object.keys(MASTER_STATE[domain] ?? {}).map(i => hass.refBy.id(`${domain}.${i}`));
|
|
69
|
-
}
|
|
70
61
|
// #MARK: refresh
|
|
71
|
-
async function refresh(recursion =
|
|
72
|
-
const now = (
|
|
62
|
+
async function refresh(recursion = START) {
|
|
63
|
+
const now = dayjs();
|
|
73
64
|
if (lastRefresh) {
|
|
74
65
|
const diff = lastRefresh.diff(now, "ms");
|
|
75
|
-
if (diff >= RECENT *
|
|
66
|
+
if (diff >= RECENT * SECOND) {
|
|
76
67
|
logger.warn({ diff }, `multiple refreshes in close time`);
|
|
77
68
|
}
|
|
78
69
|
}
|
|
@@ -80,14 +71,14 @@ function EntityManager({ logger, hass, config, lifecycle, event, context, intern
|
|
|
80
71
|
// - Fetch list of entities
|
|
81
72
|
const states = await hass.fetch.getAllEntities();
|
|
82
73
|
// - Keep retrying until max failures reached
|
|
83
|
-
if (!
|
|
74
|
+
if (!is.array(states) || is.empty(states)) {
|
|
84
75
|
if (recursion > MAX_ATTEMPTS) {
|
|
85
76
|
logger.fatal({ name: refresh }, `failed to load service list from Home Assistant. validate configuration`);
|
|
86
|
-
|
|
77
|
+
process.exit();
|
|
87
78
|
}
|
|
88
79
|
logger.warn({ name: refresh, response: states }, "failed to retrieve entity list. retrying {%s}/[%s]", recursion, MAX_ATTEMPTS);
|
|
89
|
-
await
|
|
90
|
-
await refresh(recursion +
|
|
80
|
+
await sleep(config.hass.RETRY_INTERVAL * SECOND);
|
|
81
|
+
await refresh(recursion + INCREMENT);
|
|
91
82
|
return;
|
|
92
83
|
}
|
|
93
84
|
// - Preserve old state for comparison
|
|
@@ -99,12 +90,12 @@ function EntityManager({ logger, hass, config, lifecycle, event, context, intern
|
|
|
99
90
|
states.forEach(entity => {
|
|
100
91
|
// ? Set first, ensure data is populated
|
|
101
92
|
// `nextTick` will fire AFTER loop finishes
|
|
102
|
-
internal.utils.object.set(MASTER_STATE, entity.entity_id, entity,
|
|
93
|
+
internal.utils.object.set(MASTER_STATE, entity.entity_id, entity, is.undefined(internal.utils.object.get(oldState, entity.entity_id)));
|
|
103
94
|
if (!init) {
|
|
104
95
|
return;
|
|
105
96
|
}
|
|
106
97
|
const old = internal.utils.object.get(oldState, entity.entity_id);
|
|
107
|
-
if (
|
|
98
|
+
if (is.equal(old, entity)) {
|
|
108
99
|
// logger.trace(
|
|
109
100
|
// { entity_id: entity.entity_id, name: refresh },
|
|
110
101
|
// `no change on refresh`,
|
|
@@ -116,15 +107,15 @@ function EntityManager({ logger, hass, config, lifecycle, event, context, intern
|
|
|
116
107
|
// Attempt to not blow up the system?
|
|
117
108
|
// TODO: does this gain anything? is a debounce needed somewhere else instead?
|
|
118
109
|
setImmediate(async () => {
|
|
119
|
-
await
|
|
110
|
+
await each(emitUpdates, async (entity) => await entityUpdateReceiver(entity.entity_id, entity, internal.utils.object.get(oldState, entity.entity_id)));
|
|
120
111
|
});
|
|
121
112
|
init = true;
|
|
122
113
|
}
|
|
123
114
|
// #MARK: EntityUpdateReceiver
|
|
124
|
-
function
|
|
115
|
+
function entityUpdateReceiver(entity_id, new_state, old_state) {
|
|
125
116
|
PREVIOUS_STATE.set(entity_id, old_state);
|
|
126
117
|
if (new_state === null) {
|
|
127
|
-
logger.warn({ name:
|
|
118
|
+
logger.warn({ name: entityUpdateReceiver }, `removing deleted entity [%s] from {MASTER_STATE}`, entity_id);
|
|
128
119
|
internal.utils.object.del(MASTER_STATE, entity_id);
|
|
129
120
|
return;
|
|
130
121
|
}
|
|
@@ -132,28 +123,25 @@ function EntityManager({ logger, hass, config, lifecycle, event, context, intern
|
|
|
132
123
|
if (!hass.socket.pauseMessages) {
|
|
133
124
|
event.emit(entity_id, new_state, old_state);
|
|
134
125
|
const unique_id = hass.entity.registry.current.find(i => i.entity_id === entity_id)?.unique_id;
|
|
135
|
-
if (
|
|
126
|
+
if (is.number(unique_id) || !is.empty(unique_id)) {
|
|
136
127
|
event.emit(unique_id, new_state, old_state);
|
|
137
128
|
}
|
|
138
129
|
}
|
|
139
130
|
}
|
|
140
131
|
// #MARK: onPostConfig
|
|
141
132
|
lifecycle.onPostConfig(async function HassEntityPostConfig() {
|
|
142
|
-
if (!config.hass.AUTO_CONNECT_SOCKET) {
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
133
|
logger.debug({ name: HassEntityPostConfig }, `pre populate {MASTER_STATE}`);
|
|
146
134
|
await hass.entity.refresh();
|
|
147
135
|
});
|
|
148
136
|
async function AddLabel({ entity, label }) {
|
|
149
|
-
await
|
|
150
|
-
const current = await
|
|
137
|
+
await each([entity].flat(), async (entity) => {
|
|
138
|
+
const current = await entityGet(entity);
|
|
151
139
|
if (current?.labels?.includes(label)) {
|
|
152
140
|
logger.debug({ name: entity }, `already has label {%s}`, label);
|
|
153
141
|
return;
|
|
154
142
|
}
|
|
155
143
|
return await new Promise(async (done) => {
|
|
156
|
-
event.once(
|
|
144
|
+
event.once(ENTITY_REGISTRY_UPDATED, done);
|
|
157
145
|
await hass.socket.sendMessage({
|
|
158
146
|
entity_id: entity,
|
|
159
147
|
labels: [...current.labels, label],
|
|
@@ -164,7 +152,9 @@ function EntityManager({ logger, hass, config, lifecycle, event, context, intern
|
|
|
164
152
|
}
|
|
165
153
|
// #MARK: EntitySource
|
|
166
154
|
async function EntitySource() {
|
|
167
|
-
return await hass.socket.sendMessage({
|
|
155
|
+
return await hass.socket.sendMessage({
|
|
156
|
+
type: "entity/source",
|
|
157
|
+
});
|
|
168
158
|
}
|
|
169
159
|
// #MARK: EntityList
|
|
170
160
|
async function EntityList() {
|
|
@@ -174,14 +164,14 @@ function EntityManager({ logger, hass, config, lifecycle, event, context, intern
|
|
|
174
164
|
}
|
|
175
165
|
// #MARK: RemoveLabel
|
|
176
166
|
async function RemoveLabel({ entity, label }) {
|
|
177
|
-
const current = await
|
|
167
|
+
const current = await entityGet(entity);
|
|
178
168
|
if (!current?.labels?.includes(label)) {
|
|
179
169
|
logger.debug({ name: entity }, `does not have label {%s}`, label);
|
|
180
170
|
return;
|
|
181
171
|
}
|
|
182
172
|
logger.debug({ name: entity }, `removing label [%s]`, label);
|
|
183
173
|
return await new Promise(async (done) => {
|
|
184
|
-
event.once(
|
|
174
|
+
event.once(ENTITY_REGISTRY_UPDATED, done);
|
|
185
175
|
await hass.socket.sendMessage({
|
|
186
176
|
entity_id: entity,
|
|
187
177
|
labels: current.labels.filter(i => i !== label),
|
|
@@ -190,33 +180,30 @@ function EntityManager({ logger, hass, config, lifecycle, event, context, intern
|
|
|
190
180
|
});
|
|
191
181
|
}
|
|
192
182
|
// #MARK: EntityGet
|
|
193
|
-
async function
|
|
183
|
+
async function entityGet(entity_id) {
|
|
194
184
|
return await hass.socket.sendMessage({
|
|
195
185
|
entity_id: entity_id,
|
|
196
186
|
type: "config/entity_registry/get",
|
|
197
187
|
});
|
|
198
188
|
}
|
|
199
|
-
hass.socket.subscribe({
|
|
200
|
-
context,
|
|
201
|
-
event_type: "entity_registry_updated",
|
|
202
|
-
async exec() {
|
|
203
|
-
await (0, core_1.debounce)(__1.ENTITY_REGISTRY_UPDATED, config.hass.EVENT_DEBOUNCE_MS);
|
|
204
|
-
logger.debug("entity registry updated");
|
|
205
|
-
hass.entity.registry.current = await hass.entity.registry.list();
|
|
206
|
-
event.emit(__1.ENTITY_REGISTRY_UPDATED);
|
|
207
|
-
},
|
|
208
|
-
});
|
|
209
189
|
// #MARK: onConnect
|
|
210
190
|
hass.socket.onConnect(async () => {
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
191
|
+
hass.socket.subscribe({
|
|
192
|
+
context,
|
|
193
|
+
event_type: "entity_registry_updated",
|
|
194
|
+
async exec() {
|
|
195
|
+
await debounce(ENTITY_REGISTRY_UPDATED, config.hass.EVENT_DEBOUNCE_MS);
|
|
196
|
+
logger.debug("entity registry updated");
|
|
197
|
+
hass.entity.registry.current = await hass.entity.registry.list();
|
|
198
|
+
event.emit(ENTITY_REGISTRY_UPDATED);
|
|
199
|
+
},
|
|
200
|
+
});
|
|
214
201
|
hass.entity.registry.current = await hass.entity.registry.list();
|
|
215
202
|
});
|
|
216
203
|
// #MARK: RemoveEntity
|
|
217
204
|
async function RemoveEntity(entity_id) {
|
|
218
205
|
warnEarly("RemoveEntity");
|
|
219
|
-
await
|
|
206
|
+
await eachSeries([entity_id].flat(), async (entity_id) => {
|
|
220
207
|
logger.debug({ name: entity_id }, `removing entity`);
|
|
221
208
|
await hass.socket.sendMessage({
|
|
222
209
|
entity_id,
|
|
@@ -226,49 +213,21 @@ function EntityManager({ logger, hass, config, lifecycle, event, context, intern
|
|
|
226
213
|
}
|
|
227
214
|
// #MARK: return object
|
|
228
215
|
return {
|
|
229
|
-
|
|
230
|
-
* Internal library use only
|
|
231
|
-
*/
|
|
232
|
-
_entityUpdateReceiver: EntityUpdateReceiver,
|
|
216
|
+
_entityUpdateReceiver: entityUpdateReceiver,
|
|
233
217
|
_masterState: () => MASTER_STATE,
|
|
234
|
-
/**
|
|
235
|
-
* Lists all entities within a specified domain. This is useful for
|
|
236
|
-
* domain-specific operations or queries.
|
|
237
|
-
*
|
|
238
|
-
* @deprecated use `hass.idBy.domain` | `hass.refBy.domain`
|
|
239
|
-
*/
|
|
240
|
-
findByDomain,
|
|
241
218
|
/**
|
|
242
219
|
* Retrieves the current state of a given entity. This method returns
|
|
243
220
|
* raw data, offering a direct view of the entity's state at a given moment.
|
|
244
221
|
*/
|
|
245
222
|
getCurrentState,
|
|
246
|
-
/**
|
|
247
|
-
* Retrieves the historical state data of entities over a specified time
|
|
248
|
-
* period. Useful for analysis or tracking changes over time.
|
|
249
|
-
*/
|
|
250
223
|
history,
|
|
251
|
-
/**
|
|
252
|
-
* Provides a simple listing of all entity IDs. Useful for enumeration
|
|
253
|
-
* and quick reference to all available entities.
|
|
254
|
-
*/
|
|
255
224
|
listEntities,
|
|
256
|
-
/**
|
|
257
|
-
* Returns the previous entity state (not a proxy)
|
|
258
|
-
*/
|
|
259
225
|
previousState: (entity_id) => PREVIOUS_STATE.get(entity_id),
|
|
260
|
-
/**
|
|
261
|
-
* Initiates a refresh of the current entity states. Useful for ensuring
|
|
262
|
-
* synchronization with the latest state data from Home Assistant.
|
|
263
|
-
*/
|
|
264
226
|
refresh,
|
|
265
|
-
/**
|
|
266
|
-
* Interact with the entity registry
|
|
267
|
-
*/
|
|
268
227
|
registry: {
|
|
269
228
|
addLabel: AddLabel,
|
|
270
229
|
current: [],
|
|
271
|
-
get:
|
|
230
|
+
get: entityGet,
|
|
272
231
|
list: EntityList,
|
|
273
232
|
registryList: EntityList,
|
|
274
233
|
removeEntity: RemoveEntity,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity.extension.js","sourceRoot":"","sources":["../../src/extensions/entity.extension.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"entity.extension.js","sourceRoot":"","sources":["../../src/extensions/entity.extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
export declare function Events({ event }: TServiceParams):
|
|
4
|
-
onAreaRegistryUpdate: (callback: SimpleCallback) => import("events")<[never]>;
|
|
5
|
-
onDeviceRegistryUpdate: (callback: SimpleCallback) => import("events")<[never]>;
|
|
6
|
-
onEntityRegistryUpdate: (callback: SimpleCallback) => import("events")<[never]>;
|
|
7
|
-
onFloorRegistryUpdate: (callback: SimpleCallback) => import("events")<[never]>;
|
|
8
|
-
onLabelRegistryUpdate: (callback: SimpleCallback) => import("events")<[never]>;
|
|
9
|
-
onZoneRegistryUpdate: (callback: SimpleCallback) => import("events")<[never]>;
|
|
10
|
-
};
|
|
11
|
-
export {};
|
|
1
|
+
import { TServiceParams } from "@digital-alchemy/core";
|
|
2
|
+
import { HassEventsService } from "../helpers";
|
|
3
|
+
export declare function Events({ event }: TServiceParams): HassEventsService;
|
|
@@ -1,15 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.Events = Events;
|
|
4
|
-
const helpers_1 = require("../helpers");
|
|
5
|
-
function Events({ event }) {
|
|
1
|
+
import { AREA_REGISTRY_UPDATED, DEVICE_REGISTRY_UPDATED, ENTITY_REGISTRY_UPDATED, FLOOR_REGISTRY_UPDATED, LABEL_REGISTRY_UPDATED, ZONE_REGISTRY_UPDATED, } from "../helpers";
|
|
2
|
+
export function Events({ event }) {
|
|
6
3
|
return {
|
|
7
|
-
onAreaRegistryUpdate: (callback) => event.on(
|
|
8
|
-
onDeviceRegistryUpdate: (callback) => event.on(
|
|
9
|
-
onEntityRegistryUpdate: (callback) => event.on(
|
|
10
|
-
onFloorRegistryUpdate: (callback) => event.on(
|
|
11
|
-
onLabelRegistryUpdate: (callback) => event.on(
|
|
12
|
-
onZoneRegistryUpdate: (callback) => event.on(
|
|
4
|
+
onAreaRegistryUpdate: (callback) => event.on(AREA_REGISTRY_UPDATED, callback),
|
|
5
|
+
onDeviceRegistryUpdate: (callback) => event.on(DEVICE_REGISTRY_UPDATED, callback),
|
|
6
|
+
onEntityRegistryUpdate: (callback) => event.on(ENTITY_REGISTRY_UPDATED, callback),
|
|
7
|
+
onFloorRegistryUpdate: (callback) => event.on(FLOOR_REGISTRY_UPDATED, callback),
|
|
8
|
+
onLabelRegistryUpdate: (callback) => event.on(LABEL_REGISTRY_UPDATED, callback),
|
|
9
|
+
onZoneRegistryUpdate: (callback) => event.on(ZONE_REGISTRY_UPDATED, callback),
|
|
13
10
|
};
|
|
14
11
|
}
|
|
15
12
|
//# sourceMappingURL=events.extension.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.extension.js","sourceRoot":"","sources":["../../src/extensions/events.extension.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"events.extension.js","sourceRoot":"","sources":["../../src/extensions/events.extension.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EAEtB,sBAAsB,EAEtB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAEpB,MAAM,UAAU,MAAM,CAAC,EAAE,KAAK,EAAkB;IAC9C,OAAO;QACL,oBAAoB,EAAE,CAAC,QAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,qBAAqB,EAAE,QAAQ,CAAC;QAC7F,sBAAsB,EAAE,CAAC,QAAwB,EAAE,EAAE,CACnD,KAAK,CAAC,EAAE,CAAC,uBAAuB,EAAE,QAAQ,CAAC;QAC7C,sBAAsB,EAAE,CAAC,QAAwB,EAAE,EAAE,CACnD,KAAK,CAAC,EAAE,CAAC,uBAAuB,EAAE,QAAQ,CAAC;QAC7C,qBAAqB,EAAE,CAAC,QAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,sBAAsB,EAAE,QAAQ,CAAC;QAC/F,qBAAqB,EAAE,CAAC,QAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,sBAAsB,EAAE,QAAQ,CAAC;QAC/F,oBAAoB,EAAE,CAAC,QAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,qBAAqB,EAAE,QAAQ,CAAC;KAC9F,CAAC;AACJ,CAAC"}
|
|
@@ -1,11 +1,19 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TServiceParams } from "@digital-alchemy/core";
|
|
2
2
|
import { Dayjs } from "dayjs";
|
|
3
|
-
import { ALL_SERVICE_DOMAINS, ANY_ENTITY, CalendarEvent, CalendarFetchOptions, CheckConfigResult, ENTITY_STATE, HassConfig, HassServiceDTO, HomeAssistantServerLogItem, PICK_SERVICE, PICK_SERVICE_PARAMETERS } from "..";
|
|
3
|
+
import { ALL_SERVICE_DOMAINS, ANY_ENTITY, CalendarEvent, CalendarFetchOptions, CheckConfigResult, ENTITY_STATE, FetchArguments, FilteredFetchArguments, HassConfig, HassServiceDTO, HomeAssistantServerLogItem, PICK_SERVICE, PICK_SERVICE_PARAMETERS, TFetchBody } from "..";
|
|
4
4
|
type SendBody<STATE extends string | number = string, ATTRIBUTES extends object = object> = {
|
|
5
5
|
attributes?: ATTRIBUTES;
|
|
6
6
|
state?: STATE;
|
|
7
7
|
};
|
|
8
|
-
export declare function FetchAPI({ logger, lifecycle, context, hass,
|
|
8
|
+
export declare function FetchAPI({ logger, lifecycle, context, hass, config }: TServiceParams): {
|
|
9
|
+
_fetcher: {
|
|
10
|
+
base_headers: Record<string, string>;
|
|
11
|
+
base_url: string;
|
|
12
|
+
download: ({ destination, body, headers, method, ...fetchWith }: import("..").DownloadOptions) => Promise<void>;
|
|
13
|
+
exec: <T, BODY extends TFetchBody = undefined>({ body, headers, method, process, ...fetchWith }: Partial<FetchArguments<BODY>>) => Promise<T>;
|
|
14
|
+
setBaseUrl: (url: string) => string;
|
|
15
|
+
setHeaders: (headers: Record<string, string>) => Record<string, string>;
|
|
16
|
+
};
|
|
9
17
|
calendarSearch: ({ calendar, start, end, }: CalendarFetchOptions) => Promise<CalendarEvent[]>;
|
|
10
18
|
callService: <DOMAIN extends ALL_SERVICE_DOMAINS, SERVICE extends PICK_SERVICE<DOMAIN>>(serviceName: SERVICE, data: PICK_SERVICE_PARAMETERS<DOMAIN, SERVICE>) => Promise<void>;
|
|
11
19
|
checkConfig: () => Promise<CheckConfigResult>;
|
|
@@ -13,7 +21,7 @@ export declare function FetchAPI({ logger, lifecycle, context, hass, internal, c
|
|
|
13
21
|
message: string;
|
|
14
22
|
} | string>;
|
|
15
23
|
download: (destination: string, fetchWith: FilteredFetchArguments) => Promise<void>;
|
|
16
|
-
fetch: <T, BODY extends TFetchBody = undefined>(
|
|
24
|
+
fetch: <T, BODY extends TFetchBody = undefined>(options: Partial<FetchArguments<BODY>>) => Promise<T>;
|
|
17
25
|
fetchEntityCustomizations: <T extends Record<never, unknown> = Record<"local" | "global", Record<string, string>>>(entityId: ANY_ENTITY) => Promise<T>;
|
|
18
26
|
fetchEntityHistory: <ENTITY extends ANY_ENTITY = import("..").TRawEntityIds, T extends ENTITY_STATE<ENTITY> = ENTITY_STATE<ENTITY>>(entity_id: ENTITY, from: Date | Dayjs, to: Date | Dayjs, extra?: {
|
|
19
27
|
minimal_response?: "";
|
|
@@ -1,42 +1,29 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
const process_1 = require("process");
|
|
8
|
-
const semver_1 = require("semver");
|
|
9
|
-
const __1 = require("..");
|
|
10
|
-
function FetchAPI({ logger, lifecycle, context, hass, internal, config, }) {
|
|
11
|
-
const fetcher = internal.boilerplate.fetch({ context });
|
|
1
|
+
import { DOWN, is, NO_CHANGE, SECOND, UP } from "@digital-alchemy/core";
|
|
2
|
+
import dayjs from "dayjs";
|
|
3
|
+
import { lt } from "semver";
|
|
4
|
+
import { MIN_SUPPORTED_HASS_VERSION, PostConfigPriorities, } from "..";
|
|
5
|
+
export function FetchAPI({ logger, lifecycle, context, hass, config }) {
|
|
6
|
+
const fetcher = hass.internals({ context });
|
|
12
7
|
const { download: downloader } = fetcher;
|
|
13
8
|
// Load configurations
|
|
14
9
|
lifecycle.onPostConfig(() => {
|
|
15
10
|
fetcher.base_url = config.hass.BASE_URL;
|
|
16
11
|
fetcher.base_headers = { Authorization: `Bearer ${config.hass.TOKEN}` };
|
|
17
|
-
},
|
|
12
|
+
}, PostConfigPriorities.FETCH);
|
|
18
13
|
lifecycle.onBootstrap(async () => {
|
|
19
|
-
if (!config.hass.AUTO_CONNECT_SOCKET) {
|
|
20
|
-
// shorthand for is unit test right now
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
14
|
const target = await hass.fetch.getConfig();
|
|
24
|
-
if (
|
|
25
|
-
logger.fatal({ target: target.version }, "minimum supported version of home assistant: %s",
|
|
26
|
-
|
|
15
|
+
if (lt(target.version, MIN_SUPPORTED_HASS_VERSION)) {
|
|
16
|
+
logger.fatal({ target: target.version }, "minimum supported version of home assistant: %s", MIN_SUPPORTED_HASS_VERSION);
|
|
17
|
+
process.exit();
|
|
27
18
|
}
|
|
28
19
|
logger.debug(`hass version %s`, target.version);
|
|
29
20
|
});
|
|
30
|
-
async function calendarSearch({ calendar, start = (
|
|
21
|
+
async function calendarSearch({ calendar, start = dayjs(), end, }) {
|
|
31
22
|
if (Array.isArray(calendar)) {
|
|
32
23
|
const list = await Promise.all(calendar.map(async (cal) => await calendarSearch({ calendar: cal, end, start })));
|
|
33
|
-
return list
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
? core_1.NO_CHANGE
|
|
37
|
-
: a.start.isAfter(b.start)
|
|
38
|
-
? core_1.UP
|
|
39
|
-
: core_1.DOWN);
|
|
24
|
+
return list.flat().sort((a, b) =>
|
|
25
|
+
// eslint-disable-next-line sonarjs/no-nested-conditional
|
|
26
|
+
a.start.isSame(b.start) ? NO_CHANGE : a.start.isAfter(b.start) ? UP : DOWN);
|
|
40
27
|
}
|
|
41
28
|
const params = { end: end.toISOString(), start: start.toISOString() };
|
|
42
29
|
const events = await hass.fetch.fetch({
|
|
@@ -46,8 +33,8 @@ function FetchAPI({ logger, lifecycle, context, hass, internal, config, }) {
|
|
|
46
33
|
logger.trace({ name: calendarSearch, params }, `%s search found %s events`, calendar, events.length);
|
|
47
34
|
return events.map(({ start, end, ...extra }) => ({
|
|
48
35
|
...extra,
|
|
49
|
-
end: (
|
|
50
|
-
start: (
|
|
36
|
+
end: dayjs(end.dateTime),
|
|
37
|
+
start: dayjs(start.dateTime),
|
|
51
38
|
}));
|
|
52
39
|
}
|
|
53
40
|
async function callService(serviceName, data) {
|
|
@@ -83,9 +70,9 @@ function FetchAPI({ logger, lifecycle, context, hass, internal, config, }) {
|
|
|
83
70
|
async function fetchEntityHistory(entity_id, from, to, extra = {}) {
|
|
84
71
|
logger.info({
|
|
85
72
|
entity_id,
|
|
86
|
-
from: (
|
|
73
|
+
from: dayjs(from).toISOString(),
|
|
87
74
|
name: fetchEntityHistory,
|
|
88
|
-
to: (
|
|
75
|
+
to: dayjs(to).toISOString(),
|
|
89
76
|
}, `fetch entity history`);
|
|
90
77
|
const result = await hass.fetch.fetch({
|
|
91
78
|
params: {
|
|
@@ -129,8 +116,8 @@ function FetchAPI({ logger, lifecycle, context, hass, internal, config, }) {
|
|
|
129
116
|
url: `/api/error/all`,
|
|
130
117
|
});
|
|
131
118
|
return results.map(i => {
|
|
132
|
-
i.timestamp = Math.floor(i.timestamp *
|
|
133
|
-
i.first_occurred = Math.floor(i.first_occurred *
|
|
119
|
+
i.timestamp = Math.floor(i.timestamp * SECOND);
|
|
120
|
+
i.first_occurred = Math.floor(i.first_occurred * SECOND);
|
|
134
121
|
return i;
|
|
135
122
|
});
|
|
136
123
|
}
|
|
@@ -149,7 +136,7 @@ function FetchAPI({ logger, lifecycle, context, hass, internal, config, }) {
|
|
|
149
136
|
const body = {};
|
|
150
137
|
// ! ORDER MATTERS FOR APPLYING
|
|
151
138
|
// Must be applied in alphabetical order for unit test reasons
|
|
152
|
-
if (!
|
|
139
|
+
if (!is.empty(attributes)) {
|
|
153
140
|
body.attributes = attributes;
|
|
154
141
|
}
|
|
155
142
|
if (state !== undefined) {
|
|
@@ -178,12 +165,13 @@ function FetchAPI({ logger, lifecycle, context, hass, internal, config, }) {
|
|
|
178
165
|
});
|
|
179
166
|
}
|
|
180
167
|
return {
|
|
168
|
+
_fetcher: fetcher,
|
|
181
169
|
calendarSearch,
|
|
182
170
|
callService,
|
|
183
171
|
checkConfig,
|
|
184
172
|
checkCredentials,
|
|
185
173
|
download,
|
|
186
|
-
fetch: fetcher.
|
|
174
|
+
fetch: async (options) => await fetcher.exec(options),
|
|
187
175
|
fetchEntityCustomizations,
|
|
188
176
|
fetchEntityHistory,
|
|
189
177
|
fireEvent,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-api.extension.js","sourceRoot":"","sources":["../../src/extensions/fetch-api.extension.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fetch-api.extension.js","sourceRoot":"","sources":["../../src/extensions/fetch-api.extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,3 @@
|
|
|
1
1
|
import { TServiceParams } from "@digital-alchemy/core";
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
export declare function Floor({ hass, config, context, event, logger, lifecycle, }: TServiceParams): {
|
|
5
|
-
create(details: FloorCreate): Promise<void>;
|
|
6
|
-
current: FloorDetails[];
|
|
7
|
-
delete(floor_id: TFloorId): Promise<void>;
|
|
8
|
-
list(): Promise<FloorDetails[]>;
|
|
9
|
-
update(details: FloorDetails): Promise<void>;
|
|
10
|
-
};
|
|
2
|
+
import { HassFloorService } from "../helpers";
|
|
3
|
+
export declare function Floor({ hass, config, context, event, logger, lifecycle, }: TServiceParams): HassFloorService;
|
|
@@ -1,34 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const core_1 = require("@digital-alchemy/core");
|
|
5
|
-
const helpers_1 = require("../helpers");
|
|
6
|
-
function Floor({ hass, config, context, event, logger, lifecycle, }) {
|
|
1
|
+
import { debounce } from "@digital-alchemy/core";
|
|
2
|
+
import { EARLY_ON_READY, FLOOR_REGISTRY_UPDATED, } from "../helpers";
|
|
3
|
+
export function Floor({ hass, config, context, event, logger, lifecycle, }) {
|
|
7
4
|
hass.socket.onConnect(async () => {
|
|
8
|
-
if (!config.hass.AUTO_CONNECT_SOCKET || !config.hass.MANAGE_REGISTRY) {
|
|
9
|
-
return;
|
|
10
|
-
}
|
|
11
5
|
let loading = new Promise(async (done) => {
|
|
12
6
|
hass.floor.current = await hass.floor.list();
|
|
13
7
|
loading = undefined;
|
|
14
8
|
done();
|
|
15
9
|
});
|
|
16
|
-
lifecycle.onReady(async () => loading && (await loading),
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
10
|
+
lifecycle.onReady(async () => loading && (await loading), EARLY_ON_READY);
|
|
11
|
+
hass.socket.subscribe({
|
|
12
|
+
context,
|
|
13
|
+
event_type: "floor_registry_updated",
|
|
14
|
+
async exec() {
|
|
15
|
+
await debounce(FLOOR_REGISTRY_UPDATED, config.hass.EVENT_DEBOUNCE_MS);
|
|
16
|
+
hass.floor.current = await hass.floor.list();
|
|
17
|
+
logger.debug(`floor registry updated`);
|
|
18
|
+
event.emit(FLOOR_REGISTRY_UPDATED);
|
|
19
|
+
},
|
|
20
|
+
});
|
|
27
21
|
});
|
|
28
22
|
return {
|
|
29
23
|
async create(details) {
|
|
30
24
|
return await new Promise(async (done) => {
|
|
31
|
-
event.once(
|
|
25
|
+
event.once(FLOOR_REGISTRY_UPDATED, done);
|
|
32
26
|
await hass.socket.sendMessage({
|
|
33
27
|
aliases: [],
|
|
34
28
|
type: "config/floor_registry/create",
|
|
@@ -39,7 +33,7 @@ function Floor({ hass, config, context, event, logger, lifecycle, }) {
|
|
|
39
33
|
current: [],
|
|
40
34
|
async delete(floor_id) {
|
|
41
35
|
return await new Promise(async (done) => {
|
|
42
|
-
event.once(
|
|
36
|
+
event.once(FLOOR_REGISTRY_UPDATED, done);
|
|
43
37
|
await hass.socket.sendMessage({
|
|
44
38
|
floor_id,
|
|
45
39
|
type: "config/floor_registry/delete",
|
|
@@ -53,7 +47,7 @@ function Floor({ hass, config, context, event, logger, lifecycle, }) {
|
|
|
53
47
|
},
|
|
54
48
|
async update(details) {
|
|
55
49
|
return await new Promise(async (done) => {
|
|
56
|
-
event.once(
|
|
50
|
+
event.once(FLOOR_REGISTRY_UPDATED, done);
|
|
57
51
|
await hass.socket.sendMessage({
|
|
58
52
|
type: "config/floor_registry/update",
|
|
59
53
|
...details,
|