From 6daa667cc6b0c9e0fdab381278746fd3c72b34ed Mon Sep 17 00:00:00 2001 From: greenfoxx Date: Wed, 22 Jul 2020 17:09:52 +0300 Subject: [PATCH 1/7] new parameters have been added --- Drivers/KpMqtt/KpMqtt/Config/KpMqtt_Config.xml | 3 +-- Drivers/KpMqtt/KpMqtt/KpMqttLogic.cs | 9 +++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Drivers/KpMqtt/KpMqtt/Config/KpMqtt_Config.xml b/Drivers/KpMqtt/KpMqtt/Config/KpMqtt_Config.xml index 209b8d5..043973f 100644 --- a/Drivers/KpMqtt/KpMqtt/Config/KpMqtt_Config.xml +++ b/Drivers/KpMqtt/KpMqtt/Config/KpMqtt_Config.xml @@ -1,13 +1,12 @@ - - + diff --git a/Drivers/KpMqtt/KpMqtt/KpMqttLogic.cs b/Drivers/KpMqtt/KpMqtt/KpMqttLogic.cs index 24cdb20..1101248 100644 --- a/Drivers/KpMqtt/KpMqtt/KpMqttLogic.cs +++ b/Drivers/KpMqtt/KpMqtt/KpMqttLogic.cs @@ -32,6 +32,8 @@ private class MQTTPubTopic : MQTTPubParam public string NumberDecimalSeparator { get; set; } public double Value { get; set; } public bool IsPub { get; set; } + public string Prefix { get; set; } + public string Suffix { get; set; } } private class MQTTPubCmd : MQTTPubParam @@ -643,7 +645,8 @@ public override void Session() Topic = mqtttp.TopicName, QosLevel = mqtttp.QosLevels, Retain = mqtttp.Retain, - Message = Encoding.UTF8.GetBytes(mqtttp.Value.ToString(Nfi)) + //Message = Encoding.UTF8.GetBytes(mqtttp.Value.ToString(Nfi)) + Message = Encoding.UTF8.GetBytes(mqtttp.Prefix + mqtttp.Value.ToString(Nfi) + mqtttp.Suffix) }); mqtttp.IsPub = false; @@ -692,7 +695,9 @@ public override void OnAddedToCommLine() TopicName = MqttPTCnf.GetAttribute("TopicName"), PubBehavior = MqttPTCnf.GetAttribute("PubBehavior"), NumberDecimalSeparator = MqttPTCnf.GetAttribute("NDS"), - Value = 0 + Value = 0, + Prefix = MqttPTCnf.GetAttribute("Prefix"), + Suffix = MqttPTCnf.GetAttribute("Suffix") }); } From 6ca8629c413da51d94cccb0d00d6a25507e880fe Mon Sep 17 00:00:00 2001 From: greenfoxx Date: Thu, 23 Jul 2020 09:05:23 +0300 Subject: [PATCH 2/7] The order in MQTTPTs.Add has been updated --- Drivers/KpMqtt/KpMqtt/KpMqttLogic.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Drivers/KpMqtt/KpMqtt/KpMqttLogic.cs b/Drivers/KpMqtt/KpMqtt/KpMqttLogic.cs index 1101248..32e4ab0 100644 --- a/Drivers/KpMqtt/KpMqtt/KpMqttLogic.cs +++ b/Drivers/KpMqtt/KpMqtt/KpMqttLogic.cs @@ -645,7 +645,6 @@ public override void Session() Topic = mqtttp.TopicName, QosLevel = mqtttp.QosLevels, Retain = mqtttp.Retain, - //Message = Encoding.UTF8.GetBytes(mqtttp.Value.ToString(Nfi)) Message = Encoding.UTF8.GetBytes(mqtttp.Prefix + mqtttp.Value.ToString(Nfi) + mqtttp.Suffix) }); @@ -691,11 +690,11 @@ public override void OnAddedToCommLine() MQTTPTs.Add(new MQTTPubTopic() { NumCnl = Convert.ToInt32(MqttPTCnf.GetAttribute("NumCnl")), - QosLevels = (MqttQos)Convert.ToByte(MqttPTCnf.GetAttribute("QosLevel")), - TopicName = MqttPTCnf.GetAttribute("TopicName"), PubBehavior = MqttPTCnf.GetAttribute("PubBehavior"), NumberDecimalSeparator = MqttPTCnf.GetAttribute("NDS"), Value = 0, + TopicName = MqttPTCnf.GetAttribute("TopicName"), + QosLevels = (MqttQos)Convert.ToByte(MqttPTCnf.GetAttribute("QosLevel")), Prefix = MqttPTCnf.GetAttribute("Prefix"), Suffix = MqttPTCnf.GetAttribute("Suffix") }); From 086b4741fe1e81c1f3bd60e8717cacb7cfb98e8b Mon Sep 17 00:00:00 2001 From: greenfoxx <53298750+greenfoxx@users.noreply.github.com> Date: Thu, 23 Jul 2020 09:37:57 +0300 Subject: [PATCH 3/7] Update README.md --- Drivers/KpMqtt/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Drivers/KpMqtt/README.md b/Drivers/KpMqtt/README.md index 9e9403b..b5c2b71 100644 --- a/Drivers/KpMqtt/README.md +++ b/Drivers/KpMqtt/README.md @@ -81,6 +81,8 @@ When creating a configuration file for the KpMqtt driver, the following block se "." - the symbol "." will be used as the decimal place. "," - the symbol "," will be used as a decimal place. +- **Prefix** attribute - this attribute used for MQTT messages. Should not contain trailing slash. Used for the MqttPubTopics section. +- **Suffix** attribute - this attribute used for MQTT messages. Should not contain trailing slash. Used for the MqttPubTopics section. - **NumCmd** attribute - this attribute must contain the command number from the control channel. Used in the MqttPubCmds and MqttSubCmds sections. - **CmdType** attribute - this attribute must contain the type of command. Used in the MqttSubCmds section. Must contain one of the following values: @@ -105,7 +107,7 @@ An example of the contents of the configuration file for the **KpMqtt** driver i - + From 85d8d73a31ad419051f9f8b6b389f8d3ebf15b1a Mon Sep 17 00:00:00 2001 From: greenfoxx <53298750+greenfoxx@users.noreply.github.com> Date: Thu, 23 Jul 2020 09:42:44 +0300 Subject: [PATCH 4/7] Update README-RU.md --- Drivers/KpMqtt/README-RU.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Drivers/KpMqtt/README-RU.md b/Drivers/KpMqtt/README-RU.md index 63c8fb5..64cdaca 100644 --- a/Drivers/KpMqtt/README-RU.md +++ b/Drivers/KpMqtt/README-RU.md @@ -79,9 +79,11 @@ MQTT - является простым сетевым протоколом, ко - Атрибут **Retain** - данный атрибут определяет поведение сервера при подписке на этот топик. Используется для секции **MqttPubTopics** . "true" - при подписке на топик, сервер сразу же отправит последнее актуальное на момент подписки значение клиенту. "false" - при подписке на топик, сервер отправит значение только в момент следующей публикации значения для этого топика. - - Атрибут **NDS** - данный атрибут определяет разделитель десятичного разряда для чисел с плавающей точкой. Исользуется для секции **MqttPubTopics** . + - Атрибут **NDS** - данный атрибут определяет разделитель десятичного разряда для чисел с плавающей точкой. Используется для секции **MqttPubTopics** . "." - в качестве десятичного разряда будет использован символ "." . - "," - в качестве десятичного разряда будет использован символ "," . + "," - в качестве десятичного разряда будет использован символ "," . + - Атрибут **Prefix** - этот атрибут используется для MQTT message. Не должен содержать косую черту. Используется для секции **MqttPubTopics** . + - Атрибут **Suffix** - этот атрибут используется для MQTT message. Не должен содержать косую черту. Используется для секции **MqttPubTopics** . - Атрибут **NumCmd** - данный атрибут должен содержать номер команды из канала управления. Используется в секциях **MqttPubCmds** и **MqttSubCmds** . - Атрибут **CmdType** - данный атрибут должен содержать тип команды. Используется в секции **MqttSubCmds** . Должен содержать одно из следующих значений: "St" - формируется стандартная команда управления. Формат входного значения: "20.02", "20". @@ -107,7 +109,7 @@ MQTT - является простым сетевым протоколом, ко - + From 7a9dc269743e7224e8b2abb594f0c32e1d58d179 Mon Sep 17 00:00:00 2001 From: greenfoxx <53298750+greenfoxx@users.noreply.github.com> Date: Thu, 23 Jul 2020 12:07:12 +0300 Subject: [PATCH 5/7] Update README.md --- Drivers/KpMqtt/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Drivers/KpMqtt/README.md b/Drivers/KpMqtt/README.md index b5c2b71..29b1d81 100644 --- a/Drivers/KpMqtt/README.md +++ b/Drivers/KpMqtt/README.md @@ -81,8 +81,8 @@ When creating a configuration file for the KpMqtt driver, the following block se "." - the symbol "." will be used as the decimal place. "," - the symbol "," will be used as a decimal place. -- **Prefix** attribute - this attribute used for MQTT messages. Should not contain trailing slash. Used for the MqttPubTopics section. -- **Suffix** attribute - this attribute used for MQTT messages. Should not contain trailing slash. Used for the MqttPubTopics section. +- **Prefix** attribute - this attribute used for MQTT messages. Added before the value that is sent. Should not contain trailing slash. Used for the MqttPubTopics section. +- **Suffix** attribute - this attribute used for MQTT messages. Added after the value that is sent. Should not contain trailing slash. Used for the MqttPubTopics section. - **NumCmd** attribute - this attribute must contain the command number from the control channel. Used in the MqttPubCmds and MqttSubCmds sections. - **CmdType** attribute - this attribute must contain the type of command. Used in the MqttSubCmds section. Must contain one of the following values: From 1705a01de0b931c714b67b0222e0e51f520e8c05 Mon Sep 17 00:00:00 2001 From: greenfoxx <53298750+greenfoxx@users.noreply.github.com> Date: Thu, 23 Jul 2020 12:08:15 +0300 Subject: [PATCH 6/7] Update README-RU.md --- Drivers/KpMqtt/README-RU.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Drivers/KpMqtt/README-RU.md b/Drivers/KpMqtt/README-RU.md index 64cdaca..27074a5 100644 --- a/Drivers/KpMqtt/README-RU.md +++ b/Drivers/KpMqtt/README-RU.md @@ -82,8 +82,8 @@ MQTT - является простым сетевым протоколом, ко - Атрибут **NDS** - данный атрибут определяет разделитель десятичного разряда для чисел с плавающей точкой. Используется для секции **MqttPubTopics** . "." - в качестве десятичного разряда будет использован символ "." . "," - в качестве десятичного разряда будет использован символ "," . - - Атрибут **Prefix** - этот атрибут используется для MQTT message. Не должен содержать косую черту. Используется для секции **MqttPubTopics** . - - Атрибут **Suffix** - этот атрибут используется для MQTT message. Не должен содержать косую черту. Используется для секции **MqttPubTopics** . + - Атрибут **Prefix** - этот атрибут используется для MQTT message. Добавляется до передаваемого значения. Не должен содержать косую черту. Используется для секции **MqttPubTopics** . + - Атрибут **Suffix** - этот атрибут используется для MQTT message. Добавляется после передаваемого значения. Не должен содержать косую черту. Используется для секции **MqttPubTopics** . - Атрибут **NumCmd** - данный атрибут должен содержать номер команды из канала управления. Используется в секциях **MqttPubCmds** и **MqttSubCmds** . - Атрибут **CmdType** - данный атрибут должен содержать тип команды. Используется в секции **MqttSubCmds** . Должен содержать одно из следующих значений: "St" - формируется стандартная команда управления. Формат входного значения: "20.02", "20". From b22ac33e468adb878095bd85d06afd1241825f73 Mon Sep 17 00:00:00 2001 From: greenfoxx Date: Thu, 23 Jul 2020 12:48:36 +0300 Subject: [PATCH 7/7] Added retain --- Drivers/KpMqtt/KpMqtt/KpMqttLogic.cs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/Drivers/KpMqtt/KpMqtt/KpMqttLogic.cs b/Drivers/KpMqtt/KpMqtt/KpMqttLogic.cs index 32e4ab0..02d87e6 100644 --- a/Drivers/KpMqtt/KpMqtt/KpMqttLogic.cs +++ b/Drivers/KpMqtt/KpMqtt/KpMqttLogic.cs @@ -684,17 +684,24 @@ public override void OnAddedToCommLine() MQTTPTs = new List(); MQTTCmds = new List(); + bool checkRetain; foreach (XmlElement MqttPTCnf in MQTTPubTopics) { + if (Boolean.TryParse(MqttPTCnf.GetAttribute("Retain"), out bool retain)) + checkRetain = retain; + else + checkRetain = false; + MQTTPTs.Add(new MQTTPubTopic() { + TopicName = MqttPTCnf.GetAttribute("TopicName"), + QosLevels = (MqttQos)Convert.ToByte(MqttPTCnf.GetAttribute("QosLevel")), + Retain = checkRetain, NumCnl = Convert.ToInt32(MqttPTCnf.GetAttribute("NumCnl")), PubBehavior = MqttPTCnf.GetAttribute("PubBehavior"), NumberDecimalSeparator = MqttPTCnf.GetAttribute("NDS"), - Value = 0, - TopicName = MqttPTCnf.GetAttribute("TopicName"), - QosLevels = (MqttQos)Convert.ToByte(MqttPTCnf.GetAttribute("QosLevel")), + Value = 0, Prefix = MqttPTCnf.GetAttribute("Prefix"), Suffix = MqttPTCnf.GetAttribute("Suffix") }); @@ -704,10 +711,10 @@ public override void OnAddedToCommLine() { MQTTCmds.Add(new MQTTPubCmd() { - NumCmd = MqttPTCnf.GetAttrAsInt("NumCmd"), + TopicName = MqttPTCnf.GetAttribute("TopicName"), QosLevels = (MqttQos)Convert.ToByte(MqttPTCnf.GetAttribute("QosLevel")), Retain = false, - TopicName = MqttPTCnf.GetAttribute("TopicName") + NumCmd = MqttPTCnf.GetAttrAsInt("NumCmd") }); }