Skip to content

О библиотеке

WARNING

Библиотека находится на раннем этапе разработки.

Цель проекта — предоставить интеграторам и разработчикам удобный инструмент для написания скриптов управления устройствами Wiren Board на языке Go, используя современные IDE с поддержкой автодополнения, возможностью написания тестов и удобной отладки.

Особенности

Библиотека позволяет автоматически генерировать файлы на основе MQTT-топиков, что упрощает получение данных от устройств и подписку на изменения их состояния.

Файлы, сгенерированные на основании топика /devices/wb-led_150.

go
package device

import (
	"github.com/ValentinAlekhin/wb-go/pkg/basedevice"
	"github.com/ValentinAlekhin/wb-go/pkg/control"
	"github.com/ValentinAlekhin/wb-go/pkg/mqtt"
	"sync"
)

type WbLed150Controls struct {
	Cct1             *control.SwitchControl
	Cct1Temperature  *control.RangeControl
	Cct1Brightness   *control.RangeControl
	Cct2             *control.SwitchControl
	Cct2Temperature  *control.RangeControl
	Cct2Brightness   *control.RangeControl
	BoardTemperature *control.ValueControl
	AllowedPower     *control.ValueControl
	Overcurrent      *control.SwitchControl
	Input1           *control.SwitchControl
	Input2           *control.SwitchControl
	Input2Counter    *control.ValueControl
	Input3           *control.SwitchControl
	Input3Counter    *control.ValueControl
	Input4           *control.SwitchControl
	Input4Counter    *control.ValueControl
	Serial           *control.TextControl
}

type WbLed150 struct {
	name     string
	Controls *WbLed150Controls
}

func (w *WbLed150) GetInfo() basedevice.Info {
	return basedevice.Info{
		Name:         w.name,
		ControlsInfo: basedevice.GetControlsInfo(w.Controls),
	}
}

var (
	onceWbLed150     sync.Once
	instanceWbLed150 *WbLed150
)

func NewWbLed150(client mqtt.ClientInterface) *WbLed150 {
	onceWbLed150.Do(func() {
		name := "wb-led_150"

		controlList := &WbLed150Controls{
			Cct1: control.NewSwitchControl(client, name, "CCT1", control.Meta{
				Type: "switch",

				Order:    1,
				ReadOnly: false,
				Title:    control.MultilingualText{"ru": `Лента CCT1`},
			}),
			Cct1Temperature: control.NewRangeControl(client, name, "CCT1 Temperature", control.Meta{
				Type: "range",

				Max: 100,

				Order:    2,
				ReadOnly: false,
				Title:    control.MultilingualText{"ru": `Цветовая температура ленты CCT1`},
			}),
			Cct1Brightness: control.NewRangeControl(client, name, "CCT1 Brightness", control.Meta{
				Type: "range",

				Max: 100,

				Order:    3,
				ReadOnly: false,
				Title:    control.MultilingualText{"ru": `Яркость ленты CCT1`},
			}),
			Cct2: control.NewSwitchControl(client, name, "CCT2", control.Meta{
				Type: "switch",

				Order:    4,
				ReadOnly: false,
				Title:    control.MultilingualText{"ru": `Лента CCT2`},
			}),
			Cct2Temperature: control.NewRangeControl(client, name, "CCT2 Temperature", control.Meta{
				Type: "range",

				Max: 100,

				Order:    5,
				ReadOnly: false,
				Title:    control.MultilingualText{"ru": `Цветовая температура ленты CCT2`},
			}),
			Cct2Brightness: control.NewRangeControl(client, name, "CCT2 Brightness", control.Meta{
				Type: "range",

				Max: 100,

				Order:    6,
				ReadOnly: false,
				Title:    control.MultilingualText{"ru": `Яркость ленты CCT2`},
			}),
			BoardTemperature: control.NewValueControl(client, name, "Board Temperature", control.Meta{
				Type:  "value",
				Units: "deg C",

				Order:    7,
				ReadOnly: true,
				Title:    control.MultilingualText{"ru": `Температура платы`},
			}),
			AllowedPower: control.NewValueControl(client, name, "Allowed Power", control.Meta{
				Type:  "value",
				Units: "%",

				Order:    8,
				ReadOnly: true,
				Title:    control.MultilingualText{"ru": `Разрешенная мощность`},
			}),
			Overcurrent: control.NewSwitchControl(client, name, "Overcurrent", control.Meta{
				Type: "switch",

				Order:    9,
				ReadOnly: true,
				Title:    control.MultilingualText{"ru": `Перегрузка по току`},
			}),
			Input1: control.NewSwitchControl(client, name, "Input 1", control.Meta{
				Type: "switch",

				Order:    10,
				ReadOnly: true,
				Title:    control.MultilingualText{"ru": `Вход 1`},
			}),
			Input2: control.NewSwitchControl(client, name, "Input 2", control.Meta{
				Type: "switch",

				Order:    11,
				ReadOnly: true,
				Title:    control.MultilingualText{"ru": `Вход 2`},
			}),
			Input2Counter: control.NewValueControl(client, name, "Input 2 Counter", control.Meta{
				Type: "value",

				Order:    12,
				ReadOnly: true,
				Title:    control.MultilingualText{"ru": `Счетчик 2`},
			}),
			Input3: control.NewSwitchControl(client, name, "Input 3", control.Meta{
				Type: "switch",

				Order:    13,
				ReadOnly: true,
				Title:    control.MultilingualText{"ru": `Вход 3`},
			}),
			Input3Counter: control.NewValueControl(client, name, "Input 3 Counter", control.Meta{
				Type: "value",

				Order:    14,
				ReadOnly: true,
				Title:    control.MultilingualText{"ru": `Счетчик 3`},
			}),
			Input4: control.NewSwitchControl(client, name, "Input 4", control.Meta{
				Type: "switch",

				Order:    15,
				ReadOnly: true,
				Title:    control.MultilingualText{"ru": `Вход 4`},
			}),
			Input4Counter: control.NewValueControl(client, name, "Input 4 Counter", control.Meta{
				Type: "value",

				Order:    16,
				ReadOnly: true,
				Title:    control.MultilingualText{"ru": `Счетчик 4`},
			}),
			Serial: control.NewTextControl(client, name, "Serial", control.Meta{
				Type: "text",

				Order:    17,
				ReadOnly: true,
				Title:    control.MultilingualText{"ru": `Серийный номер`},
			}),
		}

		instanceWbLed150 = &WbLed150{
			name:     name,
			Controls: controlList,
		}
	})

	return instanceWbLed150
}

Планы

  • Поддержка виртуальных устройств.
  • Автоматическая генерация нового проекта.