Update board.go and board_mqtt.go
This commit is contained in:
parent
54b24620ba
commit
bcfbbaba80
@ -94,6 +94,10 @@ func parseBoardsConfig() {
|
|||||||
outlets[num] = &o
|
outlets[num] = &o
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for b := range boards {
|
||||||
|
go boards[b].Init()
|
||||||
|
}
|
||||||
|
|
||||||
// dumpa tutto
|
// dumpa tutto
|
||||||
for b := range boards {
|
for b := range boards {
|
||||||
boards[b].Dump()
|
boards[b].Dump()
|
||||||
|
@ -4,7 +4,9 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
MQTT "github.com/eclipse/paho.mqtt.golang"
|
||||||
"github.com/spf13/viper"
|
"github.com/spf13/viper"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -24,10 +26,12 @@ type MQTTBoard struct {
|
|||||||
Name string
|
Name string
|
||||||
ChannelCount uint
|
ChannelCount uint
|
||||||
Channels []*MQTTChannel
|
Channels []*MQTTChannel
|
||||||
|
MQTTRemoteSchema string
|
||||||
MQTTRemoteHost string
|
MQTTRemoteHost string
|
||||||
MQTTRemotePort string
|
MQTTRemotePort string
|
||||||
MQTTRemoteUsername string
|
MQTTRemoteUsername string
|
||||||
MQTTRemotePassword string
|
MQTTRemotePassword string
|
||||||
|
MQTTClient MQTT.Client
|
||||||
}
|
}
|
||||||
|
|
||||||
func newMQTTChannel(v *viper.Viper, channelID string) MQTTChannel {
|
func newMQTTChannel(v *viper.Viper, channelID string) MQTTChannel {
|
||||||
@ -35,6 +39,7 @@ func newMQTTChannel(v *viper.Viper, channelID string) MQTTChannel {
|
|||||||
v.SetDefault("lastValue", false)
|
v.SetDefault("lastValue", false)
|
||||||
v.SetDefault("onboot", "off")
|
v.SetDefault("onboot", "off")
|
||||||
v.SetDefault("mqtttopic", v.GetString("name"))
|
v.SetDefault("mqtttopic", v.GetString("name"))
|
||||||
|
v.SetDefault("mqttremote.topic", v.GetString("name"))
|
||||||
|
|
||||||
value := false
|
value := false
|
||||||
switch v.GetString("onboot") {
|
switch v.GetString("onboot") {
|
||||||
@ -46,12 +51,13 @@ func newMQTTChannel(v *viper.Viper, channelID string) MQTTChannel {
|
|||||||
// newUUID := UUID.New().String()
|
// newUUID := UUID.New().String()
|
||||||
// v.SetDefault("id", newUUID)
|
// v.SetDefault("id", newUUID)
|
||||||
return MQTTChannel{
|
return MQTTChannel{
|
||||||
ID: channelID,
|
ID: channelID,
|
||||||
Num: v.GetUint("num"),
|
Num: v.GetUint("num"),
|
||||||
name: v.GetString("name"),
|
name: v.GetString("name"),
|
||||||
MQTTTopic: v.GetString("mqtttopic"),
|
MQTTTopic: v.GetString("mqtttopic"),
|
||||||
Value: value,
|
Value: value,
|
||||||
onboot: v.GetString("onboot"),
|
onboot: v.GetString("onboot"),
|
||||||
|
MQTTRemoteTopic: v.GetString("mqttremote.topic"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,6 +68,11 @@ func newMQTTBoard(v *viper.Viper, id string) *MQTTBoard {
|
|||||||
v.SetDefault("type", "mqtt")
|
v.SetDefault("type", "mqtt")
|
||||||
v.SetDefault("channelCount", 0)
|
v.SetDefault("channelCount", 0)
|
||||||
v.SetDefault("channels", "")
|
v.SetDefault("channels", "")
|
||||||
|
v.SetDefault("MQTTRemote.Schema", "tcp")
|
||||||
|
v.SetDefault("MQTTRemote.Host", "")
|
||||||
|
v.SetDefault("MQTTRemote.Port", "1883")
|
||||||
|
v.SetDefault("MQTTRemote.Username", "")
|
||||||
|
v.SetDefault("MQTTRemote.Password", "")
|
||||||
|
|
||||||
if v.GetInt("channelCount") > 0 {
|
if v.GetInt("channelCount") > 0 {
|
||||||
for i := 0; i < v.GetInt("channelCount"); i++ {
|
for i := 0; i < v.GetInt("channelCount"); i++ {
|
||||||
@ -70,9 +81,14 @@ func newMQTTBoard(v *viper.Viper, id string) *MQTTBoard {
|
|||||||
}
|
}
|
||||||
|
|
||||||
b = MQTTBoard{
|
b = MQTTBoard{
|
||||||
ID: id,
|
ID: id,
|
||||||
Name: v.GetString("name"),
|
Name: v.GetString("name"),
|
||||||
ChannelCount: v.GetUint("channelCount"),
|
ChannelCount: v.GetUint("channelCount"),
|
||||||
|
MQTTRemoteSchema: v.GetString("MQTTRemote.Schema"),
|
||||||
|
MQTTRemoteHost: v.GetString("MQTTRemote.Host"),
|
||||||
|
MQTTRemotePort: v.GetString("MQTTRemote.Port"),
|
||||||
|
MQTTRemoteUsername: v.GetString("MQTTRemote.Username"),
|
||||||
|
MQTTRemotePassword: v.GetString("MQTTRemote.Password"),
|
||||||
}
|
}
|
||||||
|
|
||||||
channels := make([]*MQTTChannel, v.GetInt("channelCount"))
|
channels := make([]*MQTTChannel, v.GetInt("channelCount"))
|
||||||
@ -124,6 +140,9 @@ func (c *MQTTChannel) ToString() string {
|
|||||||
|
|
||||||
func (c *MQTTChannel) UpdateMQTT() {
|
func (c *MQTTChannel) UpdateMQTT() {
|
||||||
MQTTpublish(c.MQTTTopic, c.ToString())
|
MQTTpublish(c.MQTTTopic, c.ToString())
|
||||||
|
if c.parent.MQTTClient.IsConnected() {
|
||||||
|
c.parent.MQTTClient.Publish(c.MQTTRemoteTopic, 0, false, c.ToString())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *MQTTChannel) OnChange() {
|
func (c *MQTTChannel) OnChange() {
|
||||||
@ -155,7 +174,44 @@ func (b *MQTTBoard) Dump() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (b *MQTTBoard) Init() {
|
func (b *MQTTBoard) Init() {
|
||||||
return
|
uri := b.MQTTRemoteSchema + "://" + b.MQTTRemoteHost + ":" + b.MQTTRemotePort
|
||||||
|
opts := MQTT.NewClientOptions().AddBroker(uri)
|
||||||
|
|
||||||
|
opts.SetClientID(b.ID)
|
||||||
|
|
||||||
|
if b.MQTTRemoteUsername != "" {
|
||||||
|
opts.SetUsername(b.MQTTRemoteUsername)
|
||||||
|
}
|
||||||
|
|
||||||
|
if b.MQTTRemotePassword != "" {
|
||||||
|
opts.SetPassword(b.MQTTRemotePassword)
|
||||||
|
}
|
||||||
|
|
||||||
|
opts.SetAutoReconnect(true)
|
||||||
|
opts.SetConnectRetryInterval(5 * time.Second)
|
||||||
|
opts.SetConnectTimeout(5 * time.Second)
|
||||||
|
|
||||||
|
opts.SetConnectionLostHandler(func(c MQTT.Client, err error) {
|
||||||
|
logErr("mqtt connection lost error: " + err.Error())
|
||||||
|
})
|
||||||
|
opts.SetReconnectingHandler(func(c MQTT.Client, options *MQTT.ClientOptions) {
|
||||||
|
logNotice("mqtt reconnecting")
|
||||||
|
})
|
||||||
|
opts.SetOnConnectHandler(func(c MQTT.Client) {
|
||||||
|
logNotice("mqtt connected")
|
||||||
|
// MQTTclient.Publish("openpdu/status", 0, false, "connected")
|
||||||
|
})
|
||||||
|
|
||||||
|
b.MQTTClient = MQTT.NewClient(opts)
|
||||||
|
|
||||||
|
for {
|
||||||
|
token := b.MQTTClient.Connect()
|
||||||
|
token.Wait()
|
||||||
|
if b.MQTTClient.IsConnected() {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
time.Sleep(5 * time.Second)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *MQTTBoard) Channel(num uint64) Channel {
|
func (b *MQTTBoard) Channel(num uint64) Channel {
|
||||||
|
Loading…
Reference in New Issue
Block a user