mirror of
https://github.com/adrianjagielak/home-assistant-futurehome.git
synced 2025-10-11 15:02:06 -06:00
48 lines
1.6 KiB
TypeScript
48 lines
1.6 KiB
TypeScript
import { MqttClient } from 'mqtt';
|
|
import { v4 as uuid } from 'uuid';
|
|
|
|
export function handleLvlSwitch(client: MqttClient, dev: any, svc: any) {
|
|
const uid = `fh_${dev.id}_${svc.name}`;
|
|
const base = `homeassistant/light/${uid}`;
|
|
|
|
client.publish(`${base}/config`, JSON.stringify({
|
|
name: dev.name,
|
|
uniq_id: uid,
|
|
cmd_t: `${base}/set`,
|
|
stat_t: `${base}/state`,
|
|
bri_cmd_t: `${base}/brightness/set`,
|
|
bri_stat_t: `${base}/brightness/state`,
|
|
schema: "template",
|
|
device: { identifiers: [dev.id.toString()], name: dev.name, model: dev.model }
|
|
}), { retain: true });
|
|
|
|
const bin = svc.attributes?.find((a: any) => a.name === 'binary')?.values?.[0]?.val;
|
|
const lvl = svc.attributes?.find((a: any) => a.name === 'lvl')?.values?.[0]?.val;
|
|
client.publish(`${base}/state`, bin ? "ON" : "OFF", { retain: true });
|
|
if (lvl !== undefined) client.publish(`${base}/brightness/state`, String(lvl), { retain: true });
|
|
|
|
client.subscribe([`${base}/set`, `${base}/brightness/set`]);
|
|
|
|
client.on('message', (topic, payload) => {
|
|
if (topic === `${base}/set`) {
|
|
const on = payload.toString() === 'ON';
|
|
client.publish(`pt:j1/mt:cmd/${svc.address}`, JSON.stringify({
|
|
type: "cmd.binary.set",
|
|
service: svc.name,
|
|
uid: uuid(),
|
|
val_t: "bool",
|
|
val: on
|
|
}), { qos: 1 });
|
|
} else if (topic === `${base}/brightness/set`) {
|
|
const value = parseInt(payload.toString(), 10);
|
|
client.publish(`pt:j1/mt:cmd/${svc.address}`, JSON.stringify({
|
|
type: "cmd.lvl.set",
|
|
service: svc.name,
|
|
uid: uuid(),
|
|
val_t: "int",
|
|
val: value
|
|
}), { qos: 1 });
|
|
}
|
|
});
|
|
}
|