import { v4 as uuidv4 } from "uuid"; import { IMqttClient } from "./mqtt/interface"; export function exposeSmarthubTools( ha: IMqttClient, fimp: IMqttClient, 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, qos: 2 } ); // // 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, qos: 2 }); // placeholder FIMP message – adjust to real API if different fimp.publish( hubAddr, JSON.stringify({ type: "cmd.pairing_mode.set", service: "zigbee", uid: uuidv4(), val_t: "str", val: turnOn ? "start" : "stop", }), { qos: 1 } ); }); // (optional) listen for hub-side confirmation and correct state here }