Skip to content

Commit

Permalink
Merge pull request RapidScada#10 from RapidScada/feature-mqtt-parameters
Browse files Browse the repository at this point in the history
Feature mqtt parameters
  • Loading branch information
2mik authored Jul 28, 2020
2 parents 60c8798 + 52a6bf0 commit 75ca0cf
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 12 deletions.
3 changes: 1 addition & 2 deletions Drivers/KpMqtt/KpMqtt/Config/KpMqtt_Config.xml
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<DevTemplate>

<MqttParams Hostname="iot.eclipse.org" ClientID="KpMQTTrs111" Port="1883" UserName="" Password=""/>
<RapSrvCnf ServerHost="127.0.0.1" ServerPort="10000" ServerUser="ScadaComm" ServerPwd="12345"/>
<MqttSubTopics>
<Topic TopicName="/mesparam1" QosLevel="0" NumCnl="600"/>
</MqttSubTopics>
<MqttPubTopics>
<Topic TopicName="/mesparam10" QosLevel="0" NumCnl="600" PubBehavior="OnChange" Retain="true" NDS="."/>
<Topic TopicName="/mesparam10" QosLevel="0" NumCnl="600" PubBehavior="OnChange" Retain="true" NDS="." Prefix ="" Suffix =""/>
</MqttPubTopics>
<MqttPubCmds>
<Topic TopicName="/mesparam100" QosLevel="0" NumCmd="1"/>
Expand Down
23 changes: 17 additions & 6 deletions Drivers/KpMqtt/KpMqtt/KpMqttLogic.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -643,7 +645,7 @@ 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)
});

mqtttp.IsPub = false;
Expand Down Expand Up @@ -682,28 +684,37 @@ public override void OnAddedToCommLine()

MQTTPTs = new List<MQTTPubTopic>();
MQTTCmds = new List<MQTTPubCmd>();
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()
{
NumCnl = Convert.ToInt32(MqttPTCnf.GetAttribute("NumCnl")),
QosLevels = (MqttQos)Convert.ToByte(MqttPTCnf.GetAttribute("QosLevel")),
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
Value = 0,
Prefix = MqttPTCnf.GetAttribute("Prefix"),
Suffix = MqttPTCnf.GetAttribute("Suffix")
});
}

foreach (XmlElement MqttPTCnf in MQTTPubCmds)
{
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")
});
}

Expand Down
8 changes: 5 additions & 3 deletions Drivers/KpMqtt/README-RU.md
Original file line number Diff line number Diff line change
Expand Up @@ -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".
Expand All @@ -107,7 +109,7 @@ MQTT - является простым сетевым протоколом, ко
<Topic TopicName="/rsparam1" QosLevel="0" NumCnl="600"/>
</MqttSubTopics>
<MqttPubTopics>
<Topic TopicName="/rsparam10" QosLevel="0" NumCnl="600" PubBehavior="OnChange" Retain="true" NDS="."/>
<Topic TopicName="/rsparam10" QosLevel="0" NumCnl="600" PubBehavior="OnChange" Retain="true" NDS="." Prefix ="" Suffix =""/>
</MqttPubTopics>
<MqttPubCmds>
<Topic TopicName="/rsparam100" QosLevel="0" NumCmd="1"/>
Expand Down
4 changes: 3 additions & 1 deletion Drivers/KpMqtt/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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. 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:

Expand All @@ -105,7 +107,7 @@ An example of the contents of the configuration file for the **KpMqtt** driver i
<Topic TopicName="/rsparam1" QosLevel="0" NumCnl="600"/>
</MqttSubTopics>
<MqttPubTopics>
<Topic TopicName="/rsparam10" QosLevel="0" NumCnl="600" PubBehavior="OnChange" Retain="true" NDS="."/>
<Topic TopicName="/rsparam10" QosLevel="0" NumCnl="600" PubBehavior="OnChange" Retain="true" NDS="." Prefix ="" Suffix =""/>
</MqttPubTopics>
<MqttPubCmds>
<Topic TopicName="/rsparam100" QosLevel="0" NumCmd="1"/>
Expand Down

0 comments on commit 75ca0cf

Please sign in to comment.