From 355bb6532b919c788afcc823854f7e133055b6b7 Mon Sep 17 00:00:00 2001 From: Paolo Asperti Date: Tue, 5 Jan 2021 17:15:36 +0100 Subject: [PATCH] Update board_mqtt.go --- src/board_mqtt.go | 53 +++++++++++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 20 deletions(-) diff --git a/src/board_mqtt.go b/src/board_mqtt.go index 985b356..a933051 100644 --- a/src/board_mqtt.go +++ b/src/board_mqtt.go @@ -12,14 +12,17 @@ import ( ) type MQTTChannel struct { - ID string - Num uint - name string - MQTTTopic string - Value bool - onboot string - parent *MQTTBoard - MQTTRemoteTopic string + ID string + Num uint + name string + MQTTTopic string + Value bool + onboot string + parent *MQTTBoard + MQTTRemoteStateTopic string + MQTTRemoteCommandTopic string + MQTTRemotePayloadOn string + MQTTRemotePayloadOff string } type MQTTBoard struct { @@ -40,7 +43,10 @@ func newMQTTChannel(v *viper.Viper, channelID string) MQTTChannel { v.SetDefault("lastValue", false) v.SetDefault("onboot", "off") v.SetDefault("mqtttopic", v.GetString("name")) - v.SetDefault("mqttremote.topic", v.GetString("name")) + v.SetDefault("mqttremote.statetopic", v.GetString("name")) + v.SetDefault("mqttremote.commandtopic", v.GetString("name")) + v.SetDefault("mqttremote.payloadon", "on") + v.SetDefault("mqttremote.payloadoff", "off") value := false switch v.GetString("onboot") { @@ -52,13 +58,16 @@ func newMQTTChannel(v *viper.Viper, channelID string) MQTTChannel { // newUUID := UUID.New().String() // v.SetDefault("id", newUUID) return MQTTChannel{ - ID: channelID, - Num: v.GetUint("num"), - name: v.GetString("name"), - MQTTTopic: v.GetString("mqtttopic"), - Value: value, - onboot: v.GetString("onboot"), - MQTTRemoteTopic: v.GetString("mqttremote.topic"), + ID: channelID, + Num: v.GetUint("num"), + name: v.GetString("name"), + MQTTTopic: v.GetString("mqtttopic"), + Value: value, + onboot: v.GetString("onboot"), + MQTTRemoteStateTopic: v.GetString("mqttremote.statetopic"), + MQTTRemoteCommandTopic: v.GetString("mqttremote.commandtopic"), + MQTTRemotePayloadOn: v.GetString("mqttremote.payloadon"), + MQTTRemotePayloadOff: v.GetString("mqttremote.payloadoff"), } } @@ -159,7 +168,11 @@ func (c *MQTTChannel) SaveLastState() { func (c *MQTTChannel) UpdateRemoteMQTT() { if c.parent.MQTTClient.IsConnected() { - c.parent.MQTTClient.Publish(c.MQTTRemoteTopic, 0, false, c.ToString()) + v := c.MQTTRemotePayloadOff + if c.Value { + v = c.MQTTRemotePayloadOn + } + c.parent.MQTTClient.Publish(c.MQTTRemoteCommandTopic, 0, false, v) } } @@ -223,7 +236,7 @@ func (b *MQTTBoard) Init() { } for i := range b.Channels { - topic := b.Channels[i].MQTTRemoteTopic + topic := b.Channels[i].MQTTRemoteStateTopic if topic == "" { continue } @@ -233,13 +246,13 @@ func (b *MQTTBoard) Init() { func (c *MQTTChannel) MQTTSubHandler(client mqtt.Client, msg mqtt.Message) { switch string(msg.Payload()) { - case "on": + case c.MQTTRemotePayloadOn: if !c.Value { c.Value = true c.SaveLastState() c.UpdateMQTT() } - case "off": + case c.MQTTRemotePayloadOff: if c.Value { c.Value = false c.SaveLastState()