Skip to content

Commit f7eebd3

Browse files
Release 2.1.0 (#5)
# Release 2.1.0 ## New features - Optionally send a BirthMessage if connected to MQTT broker - Optionally set global prefix for all topics - Optionally deactivate logging of communication to reduce CPU load - Check if persistent data to load provides all relevant parameters. Otherwise add default values ## Improvements - Check if client is connected to broker before trying to publish ## Bugfix - Did not use topic prefix for WillMessage - Did not update topic prefix / status if WillMessage is active within UI - Legacy bindings of ValueDisplay elements within UI did not work if deployed with VS Code AppSpace SDK - UI differs if deployed via Appstudio or VS Code AppSpace SDK - Fullscreen icon of iFrame was visible
1 parent 155701f commit f7eebd3

13 files changed

Lines changed: 1038 additions & 360 deletions

File tree

CHANGELOG.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,24 @@
11
# Changelog
22
All notable changes to this project will be documented in this file.
33

4+
## Release 2.1.0
5+
6+
### New features
7+
- Optionally send a BirthMessage if connected to MQTT broker
8+
- Optionally set global prefix for all topics
9+
- Optionally deactivate logging of communication to reduce CPU load
10+
- Check if persistent data to load provides all relevant parameters. Otherwise add default values
11+
12+
### Improvements
13+
- Check if client is connected to broker before trying to publish
14+
15+
### Bugfix
16+
- Did not use topic prefix for WillMessage
17+
- Did not update topic prefix / status if WillMessage is active within UI
18+
- Legacy bindings of ValueDisplay elements within UI did not work if deployed with VS Code AppSpace SDK
19+
- UI differs if deployed via Appstudio or VS Code AppSpace SDK
20+
- Fullscreen icon of iFrame was visible
21+
422
## Release 2.0.0
523

624
### New features

CSK_Module_MQTTClient/pages/pages/CSK_Module_MQTTClient/CSK_Module_MQTTClient.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,5 +90,5 @@
9090

9191
.myCustomButton_CSK_Module_MQTTClient {
9292
border-radius: 30px;
93-
padding-right: 0px;
93+
padding: 11px;
9494
}

CSK_Module_MQTTClient/pages/pages/CSK_Module_MQTTClient/CSK_Module_MQTTClient.html

Lines changed: 154 additions & 44 deletions
Large diffs are not rendered by default.

CSK_Module_MQTTClient/pages/src/converter.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,14 @@ export function convertToList(value) {
55
export function changeStyle(theme) {
66
const style: HTMLStyleElement = document.createElement('style');
77
style.id ='blub'
8+
9+
const toggleSW = document.querySelectorAll("davinci-toggle-switch")
10+
toggleSW.forEach((userItem) => {
11+
const shadowToggle = userItem.shadowRoot
12+
const finalToggleSW = shadowToggle?.querySelector('div')
13+
finalToggleSW?.classList.add('hasIcon')
14+
});
15+
816
if (theme == 'CSK_Style'){
917
var headerToolbar = `.sopasjs-ui-header-toolbar-wrapper { background-color: #FFFFFF; }`
1018
var uiHeader = `.sopasjs-ui-header>.app-logo { margin-right:0px; }`
@@ -31,6 +39,7 @@ export function changeStyle(theme) {
3139
style.innerHTML += toolbarButton;
3240

3341
style.innerHTML += customBackground;
42+
3443
}
3544
else if (theme == 'None'){
3645
var headerToolbar = `.sopasjs-ui-header-toolbar-wrapper { background-color: #007fc3; }`
@@ -45,7 +54,7 @@ export function changeStyle(theme) {
4554
var toolbarButton = `.sopasjs-ui-header-toolbar-button>a { color: #cce5f3; }`
4655

4756
var customBackground = `.CSK_Module_MQTTClient .myCustomBackground_CSK_Module_MQTTClient { background-color: #fff; }` // font-family: "sans-serif"; }`
48-
57+
4958
style.innerHTML = headerToolbar;
5059
style.innerHTML += uiHeader;
5160
style.innerHTML += appLogo;
@@ -58,6 +67,7 @@ export function changeStyle(theme) {
5867
style.innerHTML += toolbarButton;
5968

6069
style.innerHTML += customBackground;
70+
6171
}
6272
document.head.append(style);
6373
return theme

CSK_Module_MQTTClient/pages/src/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ document.addEventListener('sopasjs-ready', () => {
1212
page_Setup.remove();
1313

1414
setTimeout(() => {
15+
const element = document.querySelector("div.sjs-wrapper > div > div.sjs-fullscreen-toggle")
16+
if(element) {
17+
element.parentElement.removeChild(element)
18+
}
1519
document.title = 'CSK_Module_MQTTClient'
1620
}, 500);
1721
})

CSK_Module_MQTTClient/project.mf.xml

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,22 @@ Additionally you can set via 'setDisconnectWithWillMessage' if the WillMessage s
246246
<desc>Event notified with the connection status.</desc>
247247
<param desc="Connection status message." multiplicity="1" name="status" type="string"/>
248248
</event>
249+
<event name="OnNewStatusTopicPrefix">
250+
<desc>Notify prefix to use for all topics.</desc>
251+
<param desc="Prefix for all topics." multiplicity="1" name="prefix" type="string"/>
252+
</event>
253+
<event name="OnNewStatusLogAllMessages">
254+
<desc>Notify if all messages regarding received / send data should be logged in UI.</desc>
255+
<param desc="Status" multiplicity="1" name="status" type="bool"/>
256+
</event>
257+
<event name="OnNewStatusBirthMessageActive">
258+
<desc>Notify if BirthMessage is used.</desc>
259+
<param desc="Status" multiplicity="1" name="status" type="bool"/>
260+
</event>
261+
<event name="OnNewStatusBirthMessageConfig">
262+
<desc>Notify BirthMessage config.</desc>
263+
<param desc="Config as text" multiplicity="1" name="config" type="string"/>
264+
</event>
249265
<function name="setParameterName">
250266
<desc>Function to set the name of the parameters if saved/loaded via the CSK_PersistentData module.</desc>
251267
<param desc="Name of the parameter" multiplicity="1" name="name" type="string"/>
@@ -469,6 +485,21 @@ Additionally you can set via 'setDisconnectWithWillMessage' if the WillMessage s
469485
<function name="resetModule">
470486
<desc>Function to reset main configuration of module.</desc>
471487
</function>
488+
<function name="setTopicPrefix">
489+
<desc>Function to set prefix for all topics.</desc>
490+
<param desc="Prefix to use for all topics." multiplicity="1" name="prefix" type="string"/>
491+
</function>
492+
<function name="setLogAllMessages">
493+
<desc>Function to set if all messages regarding send/received data should be logged in UI.</desc>
494+
<param desc="Status" multiplicity="1" name="status" type="bool"/>
495+
</function>
496+
<function name="setBirthMessageActivation">
497+
<desc>Function to set activation of BirthMessage.</desc>
498+
<param desc="Status" multiplicity="1" name="status" type="bool"/>
499+
</function>
500+
<function name="setBirthMessageConfigViaUI">
501+
<desc>Function to set config of BirthMessage via UI with preset configuration (check "presetPublish..."-functions).</desc>
502+
</function>
472503
</serves>
473504
</crown>
474505
<crown name="MQTTClient_FC">
@@ -528,7 +559,7 @@ Additionally you can set via 'setDisconnectWithWillMessage' if the WillMessage s
528559
</crown>
529560
</crown>
530561
<meta key="author">SICK AG</meta>
531-
<meta key="version">2.0.0</meta>
562+
<meta key="version">2.1.0</meta>
532563
<meta key="priority">low</meta>
533564
<meta key="copy-protected">false</meta>
534565
<meta key="read-protected">false</meta>

CSK_Module_MQTTClient/scripts/Communication/MQTTClient/MQTTClient_Controller.lua

Lines changed: 64 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ Script.serveEvent('CSK_MQTTClient.OnNewConnectionStatus', 'MQTTClient_OnNewConne
3131
Script.serveEvent('CSK_MQTTClient.OnNewStatusCurrentlyConnected', 'MQTTClient_OnNewStatusCurrentlyConnected')
3232
Script.serveEvent('CSK_MQTTClient.OnNewStatusActivateConnection', 'MQTTClient_OnNewStatusActivateConnection')
3333

34+
Script.serveEvent('CSK_MQTTClient.OnNewStatusLogAllMessages', 'MQTTClient_OnNewStatusLogAllMessages')
35+
3436
Script.serveEvent('CSK_MQTTClient.OnNewMQTTPort', 'MQTTClient_OnNewMQTTPort')
3537
Script.serveEvent('CSK_MQTTClient.OnNewBrokerIP', 'MQTTClient_OnNewBrokerIP')
3638
Script.serveEvent('CSK_MQTTClient.OnNewStatusForwardReceivedMsg', 'MQTTClient_OnNewStatusForwardReceivedMsg')
@@ -59,6 +61,8 @@ Script.serveEvent('CSK_MQTTClient.OnNewLog', 'MQTTClient_OnNewLog')
5961
Script.serveEvent('CSK_MQTTClient.OnNewStatusSubscriptionTopic', 'MQTTClient_OnNewStatusSubscriptionTopic')
6062
Script.serveEvent('CSK_MQTTClient.OnNewStatusSubscriptionQOS', 'MQTTClient_OnNewStatusSubscriptionQOS')
6163

64+
Script.serveEvent('CSK_MQTTClient.OnNewStatusTopicPrefix', 'MQTTClient_OnNewStatusTopicPrefix')
65+
6266
Script.serveEvent('CSK_MQTTClient.OnNewStatusPublishEventName', 'MQTTClient_OnNewStatusPublishEventName')
6367
Script.serveEvent('CSK_MQTTClient.OnNewStatusPublishTopic', 'MQTTClient_OnNewStatusPublishTopic')
6468
Script.serveEvent('CSK_MQTTClient.OnNewStatusPublishData', 'MQTTClient_OnNewStatusPublishData')
@@ -71,6 +75,9 @@ Script.serveEvent('CSK_MQTTClient.OnNewStatusWillMessageActive', 'MQTTClient_OnN
7175
Script.serveEvent('CSK_MQTTClient.OnNewStatusWillMessageConfig', 'MQTTClient_OnNewStatusWillMessageConfig')
7276
Script.serveEvent('CSK_MQTTClient.OnNewStatusDisconnectWithWillMessage', 'MQTTClient_OnNewStatusDisconnectWithWillMessage')
7377

78+
Script.serveEvent('CSK_MQTTClient.OnNewStatusBirthMessageActive', 'MQTTClient_OnNewStatusBirthMessageActive')
79+
Script.serveEvent('CSK_MQTTClient.OnNewStatusBirthMessageConfig', 'MQTTClient_OnNewStatusBirthMessageConfig')
80+
7481
Script.serveEvent('CSK_MQTTClient.OnNewStatusFlowConfigPriority', 'MQTTClient_OnNewStatusFlowConfigPriority')
7582
Script.serveEvent("CSK_MQTTClient.OnNewStatusLoadParameterOnReboot", "MQTTClient_OnNewStatusLoadParameterOnReboot")
7683
Script.serveEvent("CSK_MQTTClient.OnPersistentDataModuleAvailable", "MQTTClient_OnPersistentDataModuleAvailable")
@@ -152,6 +159,8 @@ local function handleOnExpiredTmrMQTTClient()
152159
Script.notifyEvent("MQTTClient_OnNewStatusCSKStyle", mqttClient_Model.styleForUI)
153160
Script.notifyEvent("MQTTClient_OnNewStatusModuleIsActive", _G.availableAPIs.default and _G.availableAPIs.specific)
154161

162+
Script.notifyEvent("MQTTClient_OnNewStatusLogAllMessages", mqttClient_Model.parameters.logAllMessages)
163+
155164
Script.notifyEvent("MQTTClient_OnNewStatusCurrentlyConnected", mqttClient_Model.isConnected)
156165
Script.notifyEvent("MQTTClient_OnNewStatusActivateConnection", mqttClient_Model.parameters.connect)
157166

@@ -181,6 +190,8 @@ local function handleOnExpiredTmrMQTTClient()
181190

182191
Script.notifyEvent("MQTTClient_OnNewStatusSubscriptionTopic", mqttClient_Model.tempSubscriptionTopic)
183192
Script.notifyEvent("MQTTClient_OnNewStatusSubscriptionQOS", mqttClient_Model.tempSubscriptionQOS)
193+
Script.notifyEvent("MQTTClient_OnNewStatusTopicPrefix", mqttClient_Model.parameters.topicPrefix)
194+
184195
Script.notifyEvent("MQTTClient_OnNewStatusSubscriptionList", mqttClient_Model.helperFuncs.createJsonListSubscriptions(mqttClient_Model.parameters.subscriptions))
185196
Script.notifyEvent("MQTTClient_OnNewStatusPublishEventList", mqttClient_Model.helperFuncs.createJsonListPublishEvents(mqttClient_Model.parameters.publishEvents))
186197

@@ -195,10 +206,16 @@ local function handleOnExpiredTmrMQTTClient()
195206
Script.notifyEvent("MQTTClient_OnNewStatusWillMessageConfig", "Topic = '" .. mqttClient_Model.parameters.willMessageTopic ..
196207
"', Data = '" .. mqttClient_Model.parameters.willMessageData ..
197208
"', QoS = '" .. mqttClient_Model.parameters.willMessageQOS ..
198-
"', Retain = '" .. mqttClient_Model.parameters.willMessageRetain)
209+
"', Retain = '" .. mqttClient_Model.parameters.willMessageRetain .. "'")
199210

200211
mqttClient_Model.sendLog()
201212

213+
Script.notifyEvent("MQTTClient_OnNewStatusBirthMessageActive", mqttClient_Model.parameters.useBirthMessage)
214+
Script.notifyEvent("MQTTClient_OnNewStatusBirthMessageConfig", "Topic = '" .. mqttClient_Model.parameters.birthMessageTopic ..
215+
"', Data = '" .. mqttClient_Model.parameters.birthMessageData ..
216+
"', QoS = '" .. mqttClient_Model.parameters.birthMessageQOS ..
217+
"', Retain = '" .. mqttClient_Model.parameters.birthMessageRetain .. "'")
218+
202219
Script.notifyEvent("MQTTClient_OnNewStatusFlowConfigPriority", mqttClient_Model.parameters.flowConfigPriority)
203220
Script.notifyEvent("MQTTClient_OnNewStatusLoadParameterOnReboot", mqttClient_Model.parameterLoadOnReboot)
204221
Script.notifyEvent("MQTTClient_OnPersistentDataModuleAvailable", mqttClient_Model.persistentModuleAvailable)
@@ -220,6 +237,12 @@ local function getMQTTHandle()
220237
end
221238
Script.serveFunction('CSK_MQTTClient.getMQTTHandle', getMQTTHandle)
222239

240+
local function setLogAllMessages(status)
241+
_G.logger:fine(nameOfModule .. ": Set status to log all MQTT messages to " .. tostring(status))
242+
mqttClient_Model.parameters.logAllMessages = status
243+
end
244+
Script.serveFunction('CSK_MQTTClient.setLogAllMessages', setLogAllMessages)
245+
223246
local function connectMQTT(status)
224247
_G.logger:fine(nameOfModule .. ": Set connection status to " .. tostring(status))
225248

@@ -515,6 +538,13 @@ Script.serveFunction('CSK_MQTTClient.unsubscribeViaUI', unsubscribeViaUI)
515538
------------------ Publish ------------------
516539
---------------------------------------------
517540

541+
local function setTopicPrefix(prefix)
542+
_G.logger:info(nameOfModule .. ": Set topic prefix to " .. tostring(prefix))
543+
mqttClient_Model.parameters.topicPrefix = prefix
544+
Script.notifyEvent("MQTTClient_OnNewStatusTopicPrefix", mqttClient_Model.parameters.topicPrefix)
545+
end
546+
Script.serveFunction('CSK_MQTTClient.setTopicPrefix', setTopicPrefix)
547+
518548
local function presetPublishTopic(topic)
519549
mqttClient_Model.tempPublishTopic = topic
520550
end
@@ -633,9 +663,18 @@ Script.serveFunction('CSK_MQTTClient.selectPublishEvent', selectPublishEvent)
633663
local function setWillMessageActivation(status)
634664
_G.logger:fine(nameOfModule .. ": Set WillMessage activation to " .. tostring(status))
635665
mqttClient_Model.parameters.useWillMessage = status
666+
Script.notifyEvent("MQTTClient_OnNewStatusWillMessageActive", mqttClient_Model.parameters.useWillMessage)
636667
end
637668
Script.serveFunction('CSK_MQTTClient.setWillMessageActivation', setWillMessageActivation)
638669

670+
local function setBirthMessageActivation(status)
671+
_G.logger:fine(nameOfModule .. ": Set BirthMessage activation to " .. tostring(status))
672+
mqttClient_Model.parameters.useBirthMessage = status
673+
Script.notifyEvent("MQTTClient_OnNewStatusBirthMessageActive",mqttClient_Model.parameters.useBirthMessage)
674+
end
675+
676+
Script.serveFunction('CSK_MQTTClient.setBirthMessageActivation', setBirthMessageActivation)
677+
639678
local function setDisconnectWithWillMessage(status)
640679
_G.logger:info(nameOfModule .. ": Set DisconnectWithWillMessage to " .. tostring(status))
641680
mqttClient_Model.parameters.disconnectWithWillMessage = status
@@ -644,15 +683,15 @@ Script.serveFunction('CSK_MQTTClient.setDisconnectWithWillMessage', setDisconnec
644683

645684
local function setWillMessageConfig(topic, data, qos, retain)
646685
_G.logger:fine(nameOfModule .. ": Set WillMessage config with data '" .. data .. "' to topic '" .. topic .. "' with QoS '" .. qos .. "' and '" .. retain .. "'")
647-
mqttClient_Model.parameters.willMessageTopic = topic
686+
mqttClient_Model.parameters.willMessageTopic = mqttClient_Model.parameters.topicPrefix .. topic
648687
mqttClient_Model.parameters.willMessageData = data
649688
mqttClient_Model.parameters.willMessageQOS = qos
650689
mqttClient_Model.parameters.willMessageRetain = retain
651690

652691
Script.notifyEvent("MQTTClient_OnNewStatusWillMessageConfig", "Topic = '" .. mqttClient_Model.parameters.willMessageTopic ..
653692
"', Data = '" .. mqttClient_Model.parameters.willMessageData ..
654693
"', QoS = '" .. mqttClient_Model.parameters.willMessageQOS ..
655-
"', Retain = '" .. mqttClient_Model.parameters.willMessageRetain)
694+
"', Retain = '" .. mqttClient_Model.parameters.willMessageRetain .. "'")
656695

657696
end
658697
Script.serveFunction('CSK_MQTTClient.setWillMessageConfig', setWillMessageConfig)
@@ -662,6 +701,26 @@ local function setWillMessageConfigViaUI()
662701
end
663702
Script.serveFunction('CSK_MQTTClient.setWillMessageConfigViaUI', setWillMessageConfigViaUI)
664703

704+
local function setBirthMessageConfig(topic, data, qos, retain)
705+
_G.logger:fine(nameOfModule .. ": Set BirthMessage config with data '" .. data .. "' to topic '" .. topic .. "' with QoS '" .. qos .. "' and '" .. retain .. "'")
706+
mqttClient_Model.parameters.birthMessageTopic = topic
707+
mqttClient_Model.parameters.birthMessageData = data
708+
mqttClient_Model.parameters.birthMessageQOS = qos
709+
mqttClient_Model.parameters.birthMessageRetain = retain
710+
711+
Script.notifyEvent("MQTTClient_OnNewStatusBirthMessageConfig", "Topic = '" .. mqttClient_Model.parameters.birthMessageTopic ..
712+
"', Data = '" .. mqttClient_Model.parameters.birthMessageData ..
713+
"', QoS = '" .. mqttClient_Model.parameters.birthMessageQOS ..
714+
"', Retain = '" .. mqttClient_Model.parameters.birthMessageRetain .. "'")
715+
716+
end
717+
Script.serveFunction('CSK_MQTTClient.setBirthMessageConfig', setBirthMessageConfig)
718+
719+
local function setBirthMessageConfigViaUI()
720+
setBirthMessageConfig(mqttClient_Model.tempPublishTopic, mqttClient_Model.tempPublishData, mqttClient_Model.tempPublishQOS, mqttClient_Model.tempPublishRetain)
721+
end
722+
Script.serveFunction('CSK_MQTTClient.setBirthMessageConfigViaUI', setBirthMessageConfigViaUI)
723+
665724
local function getStatusModuleActive()
666725
return _G.availableAPIs.default and _G.availableAPIs.specific
667726
end
@@ -718,6 +777,8 @@ local function loadParameters()
718777
mqttClient_Model.parameters = mqttClient_Model.helperFuncs.convertContainer2Table(data)
719778
mqttClient_Model.publishEventsFunctions = {}
720779

780+
mqttClient_Model.parameters = mqttClient_Model.helperFuncs.checkParameters(mqttClient_Model.parameters, mqttClient_Model.helperFuncs.defaultParameters.getParameters())
781+
721782
-- Configured/activated with new loaded data
722783
for key in pairs(mqttClient_Model.parameters.publishEvents.topic) do
723784
createInternalPublishFunctions(key)

0 commit comments

Comments
 (0)