Разработка HomeKit аксессуара на Golang

https://github.com/brutella/hc — прекрасная библиотека для написания обработчиков своих аксессуаров по протоколу HomeKit.

Что предоставляет библиотека? Удобный интерфейс для объявления своего аксессуара и обработка сигналов с пульта управления Home App в ios. Давайте попробуем написать новый обработчик аксессуара и добавить его внутри домашней сети.

Простейшая реализация будет выглядеть как-то так:

package main

import (
	"log"

	"github.com/brutella/hc"
	"github.com/brutella/hc/accessory"
)

func main() {
	// create an accessory, let's assume that we are managing new fancy Lamp
	info := accessory.Info{Name: "New Lamp"}
	ac := accessory.NewSwitch(info)

	// configure the ip transport, setup PIN to be able to pair with client
	config := hc.Config{Pin: "00102003"}
	t, err := hc.NewIPTransport(config, ac.Accessory)
	if err != nil {
		log.Panic(err)
	}

	ac.Switch.On.OnValueRemoteUpdate(func(on bool) {
		if on == true {
			log.Println("Switch is on")
		} else {
			log.Println("Switch is off")
		}
	})

	hc.OnTermination(func() {
		<-t.Stop()
	})

	t.Start()
}

Здесь мы создаем новый аксессуар и называем его New Lamp. Далее мы добавляем пароль для добавления аксессуара и стартуем сервер для получения сигналов с Apple HomeKit приложения.

Окей, запускаем приложение:

go run main.go
INFO 2020/09/20 20:41:43 ip_transport.go:184: Listening on port 58420

Далее идем в приложение Дом на ios, жмем Добавить аксессуар — пропускаем шаг со сканированием кода и выбираем ручное добавление найденного нового аксессуара — New Lamp. Вводим PIN код и готово!

Теперь наше приложение может отслеживать сигналы включения — включим нашу импровизированную лампу из приложения Дом:

INFO 2020/09/20 20:49:20 ip_transport.go:184: Listening on port 58487
2020/09/20 20:52:53 Switch is on

Выключим:

2020/09/20 20:53:25 Switch is off

Теперь у нас есть способ создания собственных аксессуаров и подключения их в Apple HomeKit.

Также как и любое другое устройство HomeKit важно понимать, что оно всегда должно быть в домашней сети чтобы нормально работать. Как решение мы можем залить приложение на Raspberry Pi и всегда держать его подключенным.

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *