From 206140f92206c991c73cb25177b4985078d23fa5 Mon Sep 17 00:00:00 2001 From: Adrian Jagielak Date: Mon, 21 Jul 2025 23:04:44 +0200 Subject: [PATCH] Get HA MQTT Broker values from bashio --- futurehome/config.yaml | 2 +- futurehome/rootfs/etc/services.d/futurehome/run | 6 ++++++ futurehome/src/client.ts | 12 ++++++------ futurehome/src/index.ts | 10 ++++++++-- 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/futurehome/config.yaml b/futurehome/config.yaml index b36f740..61b4af8 100644 --- a/futurehome/config.yaml +++ b/futurehome/config.yaml @@ -1,6 +1,6 @@ # https://developers.home-assistant.io/docs/add-ons/configuration#add-on-config name: Futurehome -version: "0.0.6" +version: "0.0.7" slug: futurehome description: Local Futurehome Smarthub integration url: "https://github.com/adrianjagielak/home-assistant-futurehome" diff --git a/futurehome/rootfs/etc/services.d/futurehome/run b/futurehome/rootfs/etc/services.d/futurehome/run index 5aa9fee..eb868cc 100755 --- a/futurehome/rootfs/etc/services.d/futurehome/run +++ b/futurehome/rootfs/etc/services.d/futurehome/run @@ -8,6 +8,12 @@ set -e export FH_HUB_IP=$(bashio::config 'hub_ip') export FH_USERNAME=$(bashio::config 'username') export FH_PASSWORD=$(bashio::config 'password') + +export MQTT_HOST=$(bashio::services mqtt "host") +export MQTT_PORT=$(bashio::services mqtt "port") +export MQTT_USER=$(bashio::services mqtt "username") +export MQTT_PWD=$(bashio::services mqtt "password") + export LOG_LEVEL=${LOG_LEVEL:-info} /usr/bin/node /usr/src/app/dist/index.js diff --git a/futurehome/src/client.ts b/futurehome/src/client.ts index 1a08672..687cd62 100644 --- a/futurehome/src/client.ts +++ b/futurehome/src/client.ts @@ -2,17 +2,17 @@ import mqtt, { MqttClient } from "mqtt"; export function connectHub(opts: { hubIp: string; username: string; password: string; }): Promise { const url = `mqtt://${opts.hubIp || "futurehome-smarthub.local"}`; - return makeClient(url, opts.username, opts.password); + return makeClient(url, 1884, opts.username, opts.password); } -export function connectHA(): Promise { - const url = "mqtt://homeassistant"; - return makeClient(url); +export function connectHA(opts: { mqttHost: string; mqttPort: number; mqttUsername: string; mqttPassword: string; }): Promise { + const url = `mqtt://${opts.mqttHost}`; + return makeClient(url, opts.mqttPort, opts.mqttUsername, opts.mqttPassword); } -function makeClient(url: string, username = "", password = ""): Promise { +function makeClient(url: string, port: number, username: string, password: string): Promise { return new Promise((resolve, reject) => { - const client = mqtt.connect(url, { username, password, protocolVersion: 4 }); + const client = mqtt.connect(url, { port, username, password, protocolVersion: 4 }); client.once("connect", () => resolve(client)); client.once("error", reject); }); diff --git a/futurehome/src/index.ts b/futurehome/src/index.ts index 9f36b79..9569a70 100644 --- a/futurehome/src/index.ts +++ b/futurehome/src/index.ts @@ -2,12 +2,18 @@ import { connectHub, connectHA } from "./client"; import { publishDiscovery } from "./discovery"; (async () => { - const hubIp = process.env.FH_HUB_IP || ""; + const hubIp = process.env.FH_HUB_IP || ""; const user = process.env.FH_USERNAME || ""; const pass = process.env.FH_PASSWORD || ""; + const mqttHost = process.env.MQTT_HOST || ""; + const mqttPort = Number(process.env.MQTT_PORT || "1883"); + const mqttUsername = process.env.MQTT_USER || ""; + const mqttPassword = process.env.MQTT_PWD || ""; + + // 1) Connect to HA broker (for discovery + state) - const ha = await connectHA(); + const ha = await connectHA({ mqttHost, mqttPort, mqttUsername, mqttPassword, }); // 2) Connect to Futurehome hub (FIMP traffic) const fimp = await connectHub({ hubIp, username: user, password: pass });