mirror of
https://github.com/adrianjagielak/home-assistant-futurehome.git
synced 2025-10-12 07:22:06 -06:00
56 lines
1.3 KiB
TypeScript
56 lines
1.3 KiB
TypeScript
|
import { MqttClient } from "mqtt";
|
|||
|
import { v4 as uuid } from "uuid";
|
|||
|
|
|||
|
export function exposeSmarthubTools(
|
|||
|
ha: MqttClient,
|
|||
|
fimp: MqttClient,
|
|||
|
hubAddr = "pt:j1/mt:cmd/rt:app/rn:zb/ad:1"
|
|||
|
) {
|
|||
|
const base = "homeassistant/switch/fh_zb_pairing";
|
|||
|
const device = {
|
|||
|
identifiers: ["futurehome_hub"],
|
|||
|
name: "Futurehome Hub",
|
|||
|
model: "Smarthub",
|
|||
|
};
|
|||
|
|
|||
|
ha.publish(
|
|||
|
`${base}/config`,
|
|||
|
JSON.stringify({
|
|||
|
name: "Zigbee Pairing",
|
|||
|
uniq_id: "fh_zb_pairing",
|
|||
|
cmd_t: `${base}/set`,
|
|||
|
stat_t: `${base}/state`,
|
|||
|
device,
|
|||
|
}),
|
|||
|
{ retain: true }
|
|||
|
);
|
|||
|
|
|||
|
// // keep last known state locally
|
|||
|
// let pairingOn = false;
|
|||
|
|
|||
|
ha.subscribe(`${base}/set`);
|
|||
|
ha.on("message", (topic, payload) => {
|
|||
|
if (topic !== `${base}/set`) return;
|
|||
|
const turnOn = payload.toString() === "ON";
|
|||
|
|
|||
|
// // optimistic update so the UI flips instantly
|
|||
|
// pairingOn = turnOn;
|
|||
|
ha.publish(`${base}/state`, turnOn ? "ON" : "OFF", { retain: true });
|
|||
|
|
|||
|
// placeholder FIMP message – adjust to real API if different
|
|||
|
fimp.publish(
|
|||
|
hubAddr,
|
|||
|
JSON.stringify({
|
|||
|
type: "cmd.pairing_mode.set",
|
|||
|
service: "zigbee",
|
|||
|
uid: uuid(),
|
|||
|
val_t: "str",
|
|||
|
val: turnOn ? "start" : "stop",
|
|||
|
}),
|
|||
|
{ qos: 1 }
|
|||
|
);
|
|||
|
});
|
|||
|
|
|||
|
// (optional) listen for hub-side confirmation and correct state here
|
|||
|
}
|