/
turn-on-off-entities.ts
41 lines (37 loc) · 1.13 KB
/
turn-on-off-entities.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import { HomeAssistant } from "./types";
import { STATES_OFF } from "./const";
import { computeDomain } from "./compute-domain";
export const turnOnOffEntities = (
hass: HomeAssistant,
entityIds: string[],
turnOn = true
): void => {
const domainsToCall = {};
entityIds.forEach((entityId) => {
if (STATES_OFF.includes(hass.states[entityId].state) === turnOn) {
const stateDomain = computeDomain(entityId);
const serviceDomain = ["cover", "lock"].includes(stateDomain)
? stateDomain
: "homeassistant";
if (!(serviceDomain in domainsToCall)) {
domainsToCall[serviceDomain] = [];
}
domainsToCall[serviceDomain].push(entityId);
}
});
Object.keys(domainsToCall).forEach((domain) => {
let service;
switch (domain) {
case "lock":
service = turnOn ? "unlock" : "lock";
break;
case "cover":
service = turnOn ? "open_cover" : "close_cover";
break;
default:
service = turnOn ? "turn_on" : "turn_off";
}
const entities = domainsToCall[domain];
hass.callService(domain, service, { entity_id: entities });
});
};