mirror of
https://github.com/adrianjagielak/home-assistant-futurehome.git
synced 2025-09-13 15:47:08 +00:00
Add mock admin tools
This commit is contained in:
parent
ba1be7766c
commit
5d687f90e6
@ -1,6 +1,6 @@
|
|||||||
# https://developers.home-assistant.io/docs/add-ons/configuration#add-on-config
|
# https://developers.home-assistant.io/docs/add-ons/configuration#add-on-config
|
||||||
name: Futurehome
|
name: Futurehome
|
||||||
version: "0.0.12"
|
version: "0.0.13"
|
||||||
slug: futurehome
|
slug: futurehome
|
||||||
description: Local Futurehome Smarthub integration
|
description: Local Futurehome Smarthub integration
|
||||||
url: "https://github.com/adrianjagielak/home-assistant-futurehome"
|
url: "https://github.com/adrianjagielak/home-assistant-futurehome"
|
||||||
|
55
futurehome/src/admin.ts
Normal file
55
futurehome/src/admin.ts
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
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
|
||||||
|
}
|
@ -1,6 +1,7 @@
|
|||||||
import { v4 as uuid } from "uuid";
|
import { v4 as uuid } from "uuid";
|
||||||
import { connectHub, connectHA } from "./client";
|
import { connectHub, connectHA } from "./client";
|
||||||
import { publishDiscovery } from "./discovery";
|
import { publishDiscovery } from "./discovery";
|
||||||
|
import { exposeSmarthubTools } from "./admin";
|
||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
const hubIp = process.env.FH_HUB_IP || "";
|
const hubIp = process.env.FH_HUB_IP || "";
|
||||||
@ -30,6 +31,8 @@ import { publishDiscovery } from "./discovery";
|
|||||||
const fimp = await connectHub({ hubIp, username: hubUsername, password: hubPassword });
|
const fimp = await connectHub({ hubIp, username: hubUsername, password: hubPassword });
|
||||||
console.log("Connected to Futurehome hub");
|
console.log("Connected to Futurehome hub");
|
||||||
|
|
||||||
|
exposeSmarthubTools(ha, fimp);
|
||||||
|
|
||||||
// -- subscribe to FIMP events -----------------------------------------
|
// -- subscribe to FIMP events -----------------------------------------
|
||||||
fimp.subscribe("#");
|
fimp.subscribe("#");
|
||||||
fimp.on("message", (topic, buf) => {
|
fimp.on("message", (topic, buf) => {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user