Skip to content

Home Assistant

Описание

Библиотека использует функционал MQTT discovery в Home Assistant. На основе названий топиков и meta информации генерируются конфигурации для каждого устройства.

Использование

go
package main

import (
	"fmt"
	"github.com/ValentinAlekhin/wb-go/examples/device"
	"github.com/ValentinAlekhin/wb-go/pkg/basedevice"
	"github.com/ValentinAlekhin/wb-go/pkg/control"
	"github.com/ValentinAlekhin/wb-go/pkg/homeassistant"
	wb "github.com/ValentinAlekhin/wb-go/pkg/mqtt"
	"log"
)

func main() {
	// Подключение к брокеру
	opt := wb.Options{
		Broker:   "192.168.1.150:1883",
		ClientId: "client-wb-go-test",
	}
	client, err := wb.NewClient(opt)
	if err != nil {
		log.Fatal(err)
	}

	// Создание устройств
	WbMswV4151 := device.NewWbMswV4151(client)
	rgbLed := device.NewWbLed106(client)
	cctLed := device.NewWbLed150(client)

	// Создание конфигурации Home Assistant
	discoveryOpt := homeassistant.DiscoveryOptions{
		Client: client,
		Prefix: "homeassistant",
	}
	discovery := homeassistant.NewDiscovery(discoveryOpt)

	// Удаление всех устройств из Home Assistant, добавленных с помощью wb-go.
	// Нужно вызывать, если есть необходимость удалить из Home Assistant ранее добавленные устройства,
	// но которые уже не используются
	discovery.Clear()

	// Добавление устройств в Home Assistant
	discovery.AddDevice(WbMswV4151.GetInfo())
	discovery.AddDevice(rgbLed.GetInfo())

	// Создаем карту, где ключ - название контрола, а значение - имя в Home Assistant
	nameMap := map[string]string{"CCT1": "Свет в гостиной", "CCT2": "Свет в спальне"}
	var configMiddleware homeassistant.ConfigMiddleware = func(domain *string, config *homeassistant.MqttDiscoveryConfig, device basedevice.Info, control control.Info) {
		name, ok := nameMap[control.Name]
		if !ok {
			return
		}

		config.Name = name
	}
	// Добавляем устройство с использованием промежуточного обработчика конфигурации
	discovery.AddDeviceWithMiddleware(cctLed.GetInfo(), configMiddleware)

	// Отключениие от брокера и завершение программы
	client.Disconnect(500)

	fmt.Println("Программа завершена!")
}