node-red-contrib-knx-ultimate 3.2.0 → 3.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -1
- package/nodes/commonFunctions.js +0 -1
- package/nodes/hue-config.js +12 -6
- package/nodes/knxUltimate-config copy.html +456 -0
- package/nodes/knxUltimate-config copy.js +1939 -0
- package/nodes/knxUltimate-config.html +4 -9
- package/nodes/knxUltimate-config.js +128 -213
- package/nodes/knxUltimate.js +41 -32
- package/nodes/knxUltimateAlerter.js +11 -15
- package/nodes/knxUltimateAutoResponder.js +21 -13
- package/nodes/knxUltimateGarageDoorBarrierOpener.js +16 -8
- package/nodes/knxUltimateGlobalContext.js +10 -10
- package/nodes/knxUltimateHueBattery.js +8 -8
- package/nodes/knxUltimateHueButton.js +9 -9
- package/nodes/knxUltimateHueContactSensor.js +7 -7
- package/nodes/knxUltimateHueLight.js +26 -26
- package/nodes/knxUltimateHueLightSensor.js +8 -8
- package/nodes/knxUltimateHueMotion.js +7 -7
- package/nodes/knxUltimateHueScene.js +17 -9
- package/nodes/knxUltimateHueTapDial.js +13 -13
- package/nodes/knxUltimateHueTemperatureSensor.js +8 -8
- package/nodes/knxUltimateHueZigbeeConnectivity.js +8 -8
- package/nodes/knxUltimateHuedevice_software_update.js +8 -8
- package/nodes/knxUltimateLoadControl.js +24 -21
- package/nodes/knxUltimateLogger.js +8 -8
- package/nodes/knxUltimateSceneController.js +20 -13
- package/nodes/knxUltimateViewer.js +8 -8
- package/nodes/knxUltimateWatchDog.js +14 -14
- package/nodes/utils/http.js +0 -1
- package/nodes/utils/hueEngine.js +13 -6
- package/nodes/utils/payloadManipulation.js +2 -2
- package/nodes/utils/sysLogger.js +23 -60
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -6,9 +6,15 @@
|
|
|
6
6
|
|
|
7
7
|
# CHANGELOG
|
|
8
8
|
|
|
9
|
+
|
|
10
|
+
**Version 3.2.1-beta.0** - September 2024<br/>
|
|
11
|
+
- Rewrote the logger engine and fixed some issues in the KNXUltimate package.<br/>
|
|
12
|
+
- KNX engine: implemented a new "limiter" package for better calculate the maximum numbers of telegrams accepted by the KNX BUS.<br/>
|
|
13
|
+
|
|
9
14
|
**Version 3.2.0** - September 2024<br/>
|
|
10
15
|
- Major Version.<br/>
|
|
11
|
-
- HUE engine: implemented a new "limiter" package for better calculate the maximum numbers of telegrams accepted by HUE Bridge.<br/>
|
|
16
|
+
- HUE engine: implemented a new "limiter" package for better calculate the maximum numbers of telegrams accepted by the HUE Bridge.<br/>
|
|
17
|
+
|
|
12
18
|
|
|
13
19
|
**Version 3.1.9** - September 2024<br/>
|
|
14
20
|
- HUE Bridge: you can now register to a bridge with your own credentials.<br/>
|
package/nodes/commonFunctions.js
CHANGED
package/nodes/hue-config.js
CHANGED
|
@@ -6,26 +6,32 @@
|
|
|
6
6
|
/* eslint-disable max-len */
|
|
7
7
|
const cloneDeep = require("lodash/cloneDeep");
|
|
8
8
|
const HueClass = require("./utils/hueEngine").classHUE;
|
|
9
|
-
const loggerEngine = require("./utils/sysLogger");
|
|
10
9
|
const hueColorConverter = require("./utils/colorManipulators/hueColorConverter");
|
|
11
10
|
|
|
12
11
|
|
|
12
|
+
// 10/09/2024 Setup the color logger
|
|
13
|
+
loggerSetup = (options) => {
|
|
14
|
+
let clog = require("node-color-log").createNamedLogger(options.setPrefix);
|
|
15
|
+
clog.setLevel(options.loglevel);
|
|
16
|
+
clog.setDate(() => (new Date()).toLocaleString());
|
|
17
|
+
return clog;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
|
|
13
21
|
module.exports = (RED) => {
|
|
14
22
|
function hueConfig(config) {
|
|
15
23
|
RED.nodes.createNode(this, config);
|
|
16
24
|
const node = this;
|
|
17
25
|
node.host = config.host;
|
|
18
26
|
node.nodeClients = []; // Stores the registered clients
|
|
19
|
-
node.loglevel = config.loglevel !== undefined ? config.loglevel : "error"; //
|
|
27
|
+
node.loglevel = config.loglevel !== undefined ? config.loglevel : "error"; // loglevel doesn'e exists yet
|
|
20
28
|
node.sysLogger = null;
|
|
21
29
|
node.hueAllResources = undefined;
|
|
22
30
|
node.timerHUEConfigCheckState = null; // Timer that check the connection to the hue bridge every xx seconds
|
|
23
31
|
node.linkStatus = "disconnected";
|
|
24
32
|
try {
|
|
25
|
-
node.sysLogger =
|
|
26
|
-
} catch (error) {
|
|
27
|
-
/* empty */
|
|
28
|
-
}
|
|
33
|
+
node.sysLogger = loggerSetup({ loglevel: node.loglevel, setPrefix: "hue-config.js" });
|
|
34
|
+
} catch (error) { console.log(error.stack) }
|
|
29
35
|
node.name = config.name === undefined || config.name === "" ? node.host : config.name;
|
|
30
36
|
|
|
31
37
|
// Connect to Bridge and get the resources
|
|
@@ -0,0 +1,456 @@
|
|
|
1
|
+
<script type="text/javascript" src="resources/node-red-contrib-knx-ultimate/htmlUtils.js"></script>
|
|
2
|
+
|
|
3
|
+
<script type="text/javascript">
|
|
4
|
+
RED.nodes.registerType('knxUltimate-config', {
|
|
5
|
+
category: 'config',
|
|
6
|
+
defaults: {
|
|
7
|
+
host: { value: "224.0.23.12", required: true },
|
|
8
|
+
port: { value: 3671, required: true, validate: RED.validators.number() },
|
|
9
|
+
// the KNX physical address we'd like to use
|
|
10
|
+
physAddr: { value: "15.15.22", required: true },
|
|
11
|
+
hostProtocol: { value: "Auto", required: false }, // TunnelUDP/TunnelTCP/Multicast
|
|
12
|
+
// enable this option to suppress the acknowledge flag with outgoing L_Data.req requests. LoxOne needs this
|
|
13
|
+
suppressACKRequest: { value: false },
|
|
14
|
+
csv: { value: "", required: false },
|
|
15
|
+
KNXEthInterface: { value: "Auto" },
|
|
16
|
+
KNXEthInterfaceManuallyInput: { value: "" },
|
|
17
|
+
stopETSImportIfNoDatapoint: { value: "fake" },
|
|
18
|
+
loglevel: { value: "error" },
|
|
19
|
+
name: { value: "KNX Gateway" },
|
|
20
|
+
localEchoInTunneling: { value: true },
|
|
21
|
+
delaybetweentelegrams: { value: 50, required: false },
|
|
22
|
+
delaybetweentelegramsfurtherdelayREAD: { value: 1, required: false },
|
|
23
|
+
ignoreTelegramsWithRepeatedFlag: { value: false, required: false },
|
|
24
|
+
keyringFileXML: { value: "" },
|
|
25
|
+
knxSecureSelected: { value: false },
|
|
26
|
+
autoReconnect: { value: "yes" }
|
|
27
|
+
},
|
|
28
|
+
credentials: {
|
|
29
|
+
keyringFilePassword: { type: "password" }
|
|
30
|
+
},
|
|
31
|
+
oneditprepare: function () {
|
|
32
|
+
var node = this;
|
|
33
|
+
|
|
34
|
+
// 22/07/2021 Main tab
|
|
35
|
+
$("#tabsMain").tabs({
|
|
36
|
+
active: node.knxSecureSelected ? 1 : 0,
|
|
37
|
+
activate: function (event, ui) {
|
|
38
|
+
node.knxSecureSelected = $(ui.newTab).index() === 1;
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
$("#node-config-input-KNXEthInterface").append($("<option></option>")
|
|
43
|
+
.attr("value", "Auto")
|
|
44
|
+
.text("Auto")
|
|
45
|
+
);
|
|
46
|
+
$("#node-config-input-KNXEthInterface").append($("<option></option>")
|
|
47
|
+
.attr("value", "Manual")
|
|
48
|
+
.text("Manually enter interface's name")
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
$.getJSON('knxUltimateETHInterfaces', (data) => {
|
|
52
|
+
data.sort().forEach(iFace => {
|
|
53
|
+
$("#node-config-input-KNXEthInterface").append($("<option></option>")
|
|
54
|
+
.attr("value", iFace.name)
|
|
55
|
+
.text(iFace.name + " (" + iFace.address + ")")
|
|
56
|
+
)
|
|
57
|
+
});
|
|
58
|
+
$("#node-config-input-KNXEthInterface").val(typeof node.KNXEthInterface === "undefined" ? "Auto" : node.KNXEthInterface)
|
|
59
|
+
if (node.KNXEthInterface === "Manual") {
|
|
60
|
+
// Show input
|
|
61
|
+
$("#divKNXEthInterfaceManuallyInput").show();
|
|
62
|
+
} else {
|
|
63
|
+
$("#divKNXEthInterfaceManuallyInput").hide()
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
$("#node-config-input-KNXEthInterface").on('change', function () {
|
|
67
|
+
if ($("#node-config-input-KNXEthInterface").val() === "Manual") {
|
|
68
|
+
// Show input
|
|
69
|
+
$("#divKNXEthInterfaceManuallyInput").show();
|
|
70
|
+
} else {
|
|
71
|
+
// Hide input
|
|
72
|
+
$("#divKNXEthInterfaceManuallyInput").hide()
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
// 14/08/2021 Elimino il file delle persistenze di questo nodo
|
|
79
|
+
$.getJSON("deletePersistGAFile?serverId=" + node.id, (data) => { });
|
|
80
|
+
|
|
81
|
+
// 06/07/2023 Tabs
|
|
82
|
+
// *****************************
|
|
83
|
+
$("#tabs").tabs();
|
|
84
|
+
// *****************************
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
var sRetDebugText = "";
|
|
89
|
+
$("#getinfocam").click(function () {
|
|
90
|
+
sRetDebugText = "";
|
|
91
|
+
$("#divDebugText").show();
|
|
92
|
+
for (const [key, value] of Object.entries(node)) {
|
|
93
|
+
sRetDebugText += (`-> ${key}: ${value}\r`);
|
|
94
|
+
}
|
|
95
|
+
sRetDebugText = 'Open a new github issue and paste this text into it. https://github.com/Supergiovane/node-red-contrib-knx-ultimate/issues/new?assignees=Supergiovane&labels=&template=bug_report.md&title=KNXDebugText\r\r' + sRetDebugText;
|
|
96
|
+
$("#debugText").val(sRetDebugText); // Store the config-node);
|
|
97
|
+
});
|
|
98
|
+
$("#getallgaused").click(function () {
|
|
99
|
+
sRetDebugText = "";
|
|
100
|
+
$("#divDebugText").show();
|
|
101
|
+
let aFound = [];
|
|
102
|
+
RED.nodes.eachNode(function (node) {
|
|
103
|
+
if (!aFound.includes(node.topic)) {
|
|
104
|
+
aFound.push(node.topic);
|
|
105
|
+
sRetDebugText += node.topic + "\r"
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
sRetDebugText = 'Copy these group addresses in your routing table list of your KNX/IP router.\r' + sRetDebugText;
|
|
109
|
+
$("#debugText").val(sRetDebugText); // Store the config-node);
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
},
|
|
115
|
+
oneditsave: function () {
|
|
116
|
+
var node = this;
|
|
117
|
+
// Check if the csv file contains errors
|
|
118
|
+
if (($("#node-config-input-csv").val() != 'undefined' && $("#node-config-input-csv").val() != "") || ($("#node-config-input-keyring").val() != 'undefined' && $("#node-config-input-keyring").val() != "")) {
|
|
119
|
+
var checkResult = node._("knxUltimate-config.ets.deploywithETS");
|
|
120
|
+
var myNotification = RED.notify(checkResult,
|
|
121
|
+
{
|
|
122
|
+
modal: true,
|
|
123
|
+
fixed: true,
|
|
124
|
+
type: 'info',
|
|
125
|
+
buttons: [
|
|
126
|
+
{
|
|
127
|
+
text: "OK",
|
|
128
|
+
click: function (e) {
|
|
129
|
+
myNotification.close();
|
|
130
|
+
}
|
|
131
|
+
}]
|
|
132
|
+
})
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
label: function () {
|
|
136
|
+
return typeof this.name === undefined ? (this.host + ":" + this.port) : this.name + " " + (this.host + ":" + this.port);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
</script>
|
|
140
|
+
<style>
|
|
141
|
+
.ui-tabs {
|
|
142
|
+
background: transparent;
|
|
143
|
+
border: none;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.ui-tabs .ui-widget-header {
|
|
147
|
+
background: transparent;
|
|
148
|
+
border: none;
|
|
149
|
+
border-bottom: 1px solid #c0c0c0;
|
|
150
|
+
-moz-border-radius: 0px;
|
|
151
|
+
-webkit-border-radius: 0px;
|
|
152
|
+
border-radius: 0px;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.ui-tabs .ui-tabs-nav .ui-state-default {
|
|
156
|
+
background: transparent;
|
|
157
|
+
border: none;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
.ui-tabs .ui-tabs-nav .ui-state-active {
|
|
161
|
+
background: transparent no-repeat bottom center;
|
|
162
|
+
border: none;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.ui-tabs .ui-tabs-nav .ui-state-default a {
|
|
166
|
+
color: #878787;
|
|
167
|
+
outline: none;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.ui-tabs .ui-tabs-nav .ui-state-active a {
|
|
171
|
+
color: #377e00;
|
|
172
|
+
border-bottom: 1px solid#377e00;
|
|
173
|
+
outline: none;
|
|
174
|
+
}
|
|
175
|
+
</style>
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
<script type="text/html" data-template-name="knxUltimate-config">
|
|
179
|
+
<div class="form-row">
|
|
180
|
+
<b><span data-i18n="knxUltimate-config.properties.title"></span></b>  <span style="color:red" data-i18n="[html]knxUltimate-config.properties.helplink"></span>
|
|
181
|
+
<br/><br/>
|
|
182
|
+
</div>
|
|
183
|
+
|
|
184
|
+
<div class="form-row">
|
|
185
|
+
<label for="node-config-input-name" style="width: 200px" >
|
|
186
|
+
<i class="fa fa-tag"></i> Name </label>
|
|
187
|
+
<input type="text" id="node-config-input-name" style="width: 200px">
|
|
188
|
+
</div>
|
|
189
|
+
<div class="form-row">
|
|
190
|
+
<label for="node-config-input-host" style="width: 200px">
|
|
191
|
+
<i class="fa fa-server"></i> IP/Hostname</label>
|
|
192
|
+
<input type="text" id="node-config-input-host" style="width: 200px">
|
|
193
|
+
</div>
|
|
194
|
+
|
|
195
|
+
<!-- KNX Secure / Unsecure tabbed selector-->
|
|
196
|
+
<!-- <div id="tabsMain" style="display: none;"> -->
|
|
197
|
+
<!-- <div id="tabsMain">
|
|
198
|
+
<ul>
|
|
199
|
+
<li><a href="#unsecureKNX"><i class="fa fa-circle-o"></i> <span data-i18n="knxUltimate-config.properties.unsecureKNX"></span></a></li>
|
|
200
|
+
<li><a href="#SecureKNX"><i class="fa fa-shield"></i> <span data-i18n="knxUltimate-config.properties.secureKNX"></span></a></li>
|
|
201
|
+
</ul>
|
|
202
|
+
<div id="unsecureKNX" style="margin: 5px 5px 5px 5px;">
|
|
203
|
+
<p>
|
|
204
|
+
</p>
|
|
205
|
+
</div>
|
|
206
|
+
<div id="SecureKNX" style="margin: 5px 5px 5px 5px;" >
|
|
207
|
+
<p>
|
|
208
|
+
<p>WARNING: KNX SECURE IS STILL UNDER DEVELOPMENT</p>
|
|
209
|
+
<div class="form-row">
|
|
210
|
+
<i class="fa fa-youtube"></i>
|
|
211
|
+
<a href="https://youtu.be/OpR7ZQTlMRU" target="_blank">
|
|
212
|
+
<span data-i18n="knxUltimate-config.ets.youtubeKeyring"></span>
|
|
213
|
+
</a>
|
|
214
|
+
</div>
|
|
215
|
+
<div class="form-row">
|
|
216
|
+
Keyring file
|
|
217
|
+
<textarea rows="5" id="node-config-input-keyringFileXML" style="width:100%" data-i18n="[placeholder]knxUltimate-config.ets.keyring"></textarea>
|
|
218
|
+
</div>
|
|
219
|
+
<div class="form-row">
|
|
220
|
+
<label for="node-config-input-keyringFilePassword"><i class="fa fa-shield"></i> Password</label>
|
|
221
|
+
<input type="password" id="node-config-input-keyringFilePassword" style="width:200px;">
|
|
222
|
+
</div>
|
|
223
|
+
</p>
|
|
224
|
+
</div>
|
|
225
|
+
</div> -->
|
|
226
|
+
|
|
227
|
+
<br/>
|
|
228
|
+
|
|
229
|
+
<div id="tabs">
|
|
230
|
+
<ul>
|
|
231
|
+
<li><a href="#tabs-1"><i class="fa fa-list-ol"></i> Configuration</a></li>
|
|
232
|
+
<li><a href="#tabs-2"><i class="fa fa-braille"></i> Advanced</a></li>
|
|
233
|
+
<li><a href="#tabs-3"><i class="fa fa-code"></i> ETS file import</a></li>
|
|
234
|
+
<li><a href="#tabs-4"><i class="fa fa-key"></i> Utility</a></li>
|
|
235
|
+
</ul>
|
|
236
|
+
<div id="tabs-1">
|
|
237
|
+
<p>
|
|
238
|
+
|
|
239
|
+
<div class="form-row">
|
|
240
|
+
<label for="node-config-input-port" style="width: 200px">
|
|
241
|
+
IP Port
|
|
242
|
+
</label>
|
|
243
|
+
<input type="text" id="node-config-input-port" style="width: 100px">
|
|
244
|
+
</div>
|
|
245
|
+
<div class="form-row">
|
|
246
|
+
<label for="node-config-input-hostProtocol" style="width: 200px">
|
|
247
|
+
IP Protocol
|
|
248
|
+
</label>
|
|
249
|
+
<select id="node-config-input-hostProtocol" >
|
|
250
|
+
<option value="Auto" >Auto</option>
|
|
251
|
+
<option value="TunnelUDP" >Tunnel UDP (KNX/IP Interface)</option>
|
|
252
|
+
<option value="Multicast" >Multicast (KNX/IP Router)</option>
|
|
253
|
+
<!-- <option value="TunnelTCP" >Tunnel TCP</option> -->
|
|
254
|
+
</select>
|
|
255
|
+
</div>
|
|
256
|
+
<div class="form-row">
|
|
257
|
+
<label for="node-config-input-physAddr" style="width: 200px">
|
|
258
|
+
<i class="fa fa-microchip"></i>
|
|
259
|
+
<span data-i18n="knxUltimate-config.advanced.knx_phy_addr"></span>
|
|
260
|
+
</label>
|
|
261
|
+
<input type="text" id="node-config-input-physAddr" style="width:100px">
|
|
262
|
+
</div>
|
|
263
|
+
|
|
264
|
+
<div class="form-row">
|
|
265
|
+
<label for="node-config-input-KNXEthInterface" style="width: 200px">
|
|
266
|
+
<i class="fa fa-wifi"></i>
|
|
267
|
+
<span data-i18n="knxUltimate-config.properties.bind_local_int"></span>
|
|
268
|
+
</label>
|
|
269
|
+
<select id="node-config-input-KNXEthInterface"></select>
|
|
270
|
+
</div>
|
|
271
|
+
<div class="form-row" id="divKNXEthInterfaceManuallyInput" style="display: none;">
|
|
272
|
+
<label for="node-config-input-KNXEthInterfaceManuallyInput">Interface name:</label>
|
|
273
|
+
<input type="text" id="node-config-input-KNXEthInterfaceManuallyInput"
|
|
274
|
+
placeholder="Interface name, ex: eth0 or ens1 or Ethernet 1 and so on...">
|
|
275
|
+
</div>
|
|
276
|
+
<div class="form-row">
|
|
277
|
+
<label for="node-config-input-autoReconnect" style="width: 200px">
|
|
278
|
+
<i class="fa fa-plug"></i>
|
|
279
|
+
<span data-i18n="knxUltimate-config.properties.autoReconnect"></span>
|
|
280
|
+
</label>
|
|
281
|
+
<select id="node-config-input-autoReconnect">
|
|
282
|
+
<option value="yes" data-i18n="knxUltimate-config.properties.autoReconnect_yes"></option>
|
|
283
|
+
<option value="no" data-i18n="knxUltimate-config.properties.autoReconnect_no"></option>
|
|
284
|
+
</select>
|
|
285
|
+
</div>
|
|
286
|
+
</p>
|
|
287
|
+
</div>
|
|
288
|
+
<div id="tabs-2">
|
|
289
|
+
<p>
|
|
290
|
+
<div class="form-row">
|
|
291
|
+
<input type="checkbox" id="node-config-input-localEchoInTunneling"
|
|
292
|
+
style="display:inline-block; width:auto; vertical-align:top;">
|
|
293
|
+
<label style="width:85%" for="node-config-input-localEchoInTunneling">
|
|
294
|
+
<i class="fa fa-bullhorn"></i>
|
|
295
|
+
<span data-i18n="knxUltimate-config.advanced.localEchoInTunneling"></span>
|
|
296
|
+
</label>
|
|
297
|
+
</div>
|
|
298
|
+
|
|
299
|
+
<div class="form-row">
|
|
300
|
+
<input type="checkbox" id="node-config-input-ignoreTelegramsWithRepeatedFlag"
|
|
301
|
+
style="display:inline-block; width:auto; vertical-align:top;">
|
|
302
|
+
<label style="width:85%" for="node-config-input-ignoreTelegramsWithRepeatedFlag">
|
|
303
|
+
<i class="fa fa-ban"></i>
|
|
304
|
+
<span data-i18n="knxUltimate-config.advanced.ignoreTelegramsWithRepeatedFlag"></span>
|
|
305
|
+
</label>
|
|
306
|
+
</div>
|
|
307
|
+
|
|
308
|
+
<div class="form-row">
|
|
309
|
+
<input type="checkbox" id="node-config-input-suppressACKRequest"
|
|
310
|
+
style="display:inline-block; width:auto; vertical-align:top;">
|
|
311
|
+
<label style="width:85%" for="node-config-input-suppressACKRequest">
|
|
312
|
+
<i class="fa fa-ban"></i>
|
|
313
|
+
<span data-i18n="knxUltimate-config.advanced.suppress_ack"></span>
|
|
314
|
+
</label>
|
|
315
|
+
</div>
|
|
316
|
+
|
|
317
|
+
<div class="form-row">
|
|
318
|
+
<label for="node-config-input-delaybetweentelegrams" style="width:auto">
|
|
319
|
+
<i class="fa fa-hourglass-start"></i>
|
|
320
|
+
<span data-i18n="knxUltimate-config.advanced.delaybetweentelegrams"></span>
|
|
321
|
+
</label>
|
|
322
|
+
<input type="number" id="node-config-input-delaybetweentelegrams" style="width:20%">
|
|
323
|
+
<span data-i18n="knxUltimate-config.advanced.delaybetweentelegramsfurtherdelayREAD"></span><input type="number"
|
|
324
|
+
id="node-config-input-delaybetweentelegramsfurtherdelayREAD" style="width:15%">X
|
|
325
|
+
</div>
|
|
326
|
+
|
|
327
|
+
<div class="form-row">
|
|
328
|
+
<label for="node-config-input-loglevel">
|
|
329
|
+
<i class="fa fa-question-circle"></i>
|
|
330
|
+
<span data-i18n="knxUltimate-config.advanced.log_level"></span>
|
|
331
|
+
</label>
|
|
332
|
+
<select id="node-config-input-loglevel" style="width:40%;">
|
|
333
|
+
<option value="silent" data-i18n="knxUltimate-config.advanced.select_silent"></option>
|
|
334
|
+
<option value="error" data-i18n="knxUltimate-config.advanced.select_error"></option>
|
|
335
|
+
<option value="warn" data-i18n="knxUltimate-config.advanced.select_warning"></option>
|
|
336
|
+
<option value="info" data-i18n="knxUltimate-config.advanced.select_info"></option>
|
|
337
|
+
<option value="debug" data-i18n="knxUltimate-config.advanced.select_debug"></option>
|
|
338
|
+
<option value="trace" data-i18n="knxUltimate-config.advanced.select_trace"></option>
|
|
339
|
+
</select>
|
|
340
|
+
<!-- <div class="form-tips" style="margin-top: 11px;background-color:#FFEEEE;text-align:center">
|
|
341
|
+
<b><span data-i18n="knxUltimate-config.properties.restart_hint"></span></b>
|
|
342
|
+
</div> -->
|
|
343
|
+
</div>
|
|
344
|
+
</p>
|
|
345
|
+
</div>
|
|
346
|
+
<div id="tabs-3">
|
|
347
|
+
<p>
|
|
348
|
+
<div id="etsCSVListBox">
|
|
349
|
+
<h3><span data-i18n="knxUltimate-config.properties.ets_import"></span></h3>
|
|
350
|
+
<div>
|
|
351
|
+
<div class="form-row">
|
|
352
|
+
<span data-i18n="knxUltimate-config.ets.description"></span>
|
|
353
|
+
</div>
|
|
354
|
+
<div class="form-row">
|
|
355
|
+
<span style="color:red" data-i18n="[html]knxUltimate-config.ets.instruction"></span>
|
|
356
|
+
</div>
|
|
357
|
+
<div class="form-row">
|
|
358
|
+
<span style="color:red" data-i18n="[html]knxUltimate-config.ets.youtube"></span>
|
|
359
|
+
</div>
|
|
360
|
+
<div class="form-row">
|
|
361
|
+
<label for="node-config-input-stopETSImportIfNoDatapoint" style="width:250px">
|
|
362
|
+
<i class="fa fa-question-circle"></i>
|
|
363
|
+
<span data-i18n="knxUltimate-config.ets.help_ga"></span>
|
|
364
|
+
</label>
|
|
365
|
+
<select id="node-config-input-stopETSImportIfNoDatapoint" style="width:210px">
|
|
366
|
+
<option value="stop" data-i18n="knxUltimate-config.ets.import_select_stop"></option>
|
|
367
|
+
<option value="fake" data-i18n="knxUltimate-config.ets.import_select_fake"></option>
|
|
368
|
+
<option value="skip" data-i18n="knxUltimate-config.ets.import_select_skip"></option>
|
|
369
|
+
</select>
|
|
370
|
+
</div>
|
|
371
|
+
<div class="form-row">
|
|
372
|
+
<label style="width:auto" for="node-config-input-csv">
|
|
373
|
+
<i class="fa fa-th-list"></i> ETS group address list
|
|
374
|
+
</label>
|
|
375
|
+
</div>
|
|
376
|
+
<div class="form-row">
|
|
377
|
+
<textarea rows="20" id="node-config-input-csv" style="width:100%"
|
|
378
|
+
data-i18n="[placeholder]knxUltimate-config.ets.ga_list_help"></textarea>
|
|
379
|
+
</div>
|
|
380
|
+
</div>
|
|
381
|
+
</div>
|
|
382
|
+
</p>
|
|
383
|
+
</div>
|
|
384
|
+
|
|
385
|
+
<div id="tabs-4">
|
|
386
|
+
<p>
|
|
387
|
+
<div class="form-row">
|
|
388
|
+
<label style="width:300px"><i class="fa fa-sign-in"></i> Gather debug info for troubleshoot</label>
|
|
389
|
+
<input type="button" id="getinfocam" class="ui-button ui-corner-all ui-widget"
|
|
390
|
+
style="background-color:#AEE1FF;width:150px" value="Read">
|
|
391
|
+
</div>
|
|
392
|
+
<div class="form-row">
|
|
393
|
+
<label style="width:300px"><i class="fa fa-sign-in"></i> Get all used GA for KNX routing filter</label>
|
|
394
|
+
<input type="button" id="getallgaused" class="ui-button ui-corner-all ui-widget"
|
|
395
|
+
style="background-color:#AEE1FF;width:150px" value="Read">
|
|
396
|
+
</div>
|
|
397
|
+
<div class="form-row" id="divDebugText" style="display: none;">
|
|
398
|
+
<textarea rows="10" id="debugText" style="width:100%"></textarea>
|
|
399
|
+
</div>
|
|
400
|
+
</p>
|
|
401
|
+
</div>
|
|
402
|
+
</div>
|
|
403
|
+
|
|
404
|
+
</script>
|
|
405
|
+
<script type="text/markdown" data-help-name="knxUltimate-config">
|
|
406
|
+
<p>This node connects to your KNX/IP Gateway.</p>
|
|
407
|
+
|
|
408
|
+
**General**
|
|
409
|
+
|Property|Description|
|
|
410
|
+
|--|--|
|
|
411
|
+
| Name | Node name. |
|
|
412
|
+
| IP/Hostname | ETH/KNX Router multicast address or Interface unicast IP address. If you have an KNX/IP interface, use the interface's IP address, for example 1982.168.1.22, otherwise, if you have a KNX/IP router, put the multicast address 224.0.23.12. You can also type an **Hostname** instead of an IP. |
|
|
413
|
+
|
|
414
|
+
<br/>
|
|
415
|
+
|
|
416
|
+
**Configuration**
|
|
417
|
+
|Property|Description|
|
|
418
|
+
|--|--|
|
|
419
|
+
| IP Port | The port. |
|
|
420
|
+
| IP Protocol | *Tunnel UDP* is for KNX/IP interfaces, *Multicast UDP* is for KNX/IP Routers. Leave **Auto** for auto detect. |
|
|
421
|
+
| Bind to local interface | The Node will use this local interface for communications. Leave "Auto" for automatic selection. If you have more than one lan connection, for example Ethernet and Wifi, it's strongly recommended to manually select the interface, otherwise not all UDP telegram will reach your computer, thus the Node may not work as expected. |
|
|
422
|
+
| Automatically connect to KNX BUS at start | Auto connect to the bus at start. You want to leave it enabled. |
|
|
423
|
+
| KNX Physical Address | The physical KNX address, example 1.1.200 |
|
|
424
|
+
|
|
425
|
+
<br/>
|
|
426
|
+
|
|
427
|
+
**Advanced**
|
|
428
|
+
|Property|Description|
|
|
429
|
+
|--|--|
|
|
430
|
+
| Suppress repeated (R-Flag) telegrams fom BUS | Ignore repeated KNX telegrams coming from the bus. |
|
|
431
|
+
| Suppress ACK request in tunneling mode | Enable it if you have a very old KNX/IP gateway. You want to leave it disabled. |
|
|
432
|
+
| Delay between each telegram (in milliseconds) | Leave it 50ms, unless you're connecting to a remote KNX Gateway via a slow internet connection. |
|
|
433
|
+
| and further multiply delay only between -read- telegrams | Multiply the delay for read requests to the KNX bus. Again, for slow KNX Gateways. |
|
|
434
|
+
| Loglevel | Log level, in case you need to debug something with the dev. |
|
|
435
|
+
|
|
436
|
+
<br/>
|
|
437
|
+
|
|
438
|
+
**ETS file import**
|
|
439
|
+
|Property|Description|
|
|
440
|
+
|--|--|
|
|
441
|
+
| If Group Address has no Datapoint | If a group address doesn't have a datapoint, it allow to choose wether to stop import, import quth a fake datapoint of 1.001 or to skip import of that group address |
|
|
442
|
+
| ETS group address list | Use this section to import your ETS CSV or ESF file. You can either **paste the CSV or ESF file content** or **set the file path**, for example *./pi/homecsv.csv*. Please refer to the help links for further infos. |
|
|
443
|
+
|
|
444
|
+
<br/>
|
|
445
|
+
|
|
446
|
+
**Utility**
|
|
447
|
+
|Property|Description|
|
|
448
|
+
|--|--|
|
|
449
|
+
| Gather debug info for troubleshoot | Please click the button and add it to the gitHub issue you want to open, it will help me a lot to helping you. |
|
|
450
|
+
| Get all used GA for KNX routing filter | Press READ to retrieve a plain text list of all group address belonging to this gateway, that has been used in the flows. You can use this list to populate your KNX/IP router filter table. |
|
|
451
|
+
|
|
452
|
+
<br/>
|
|
453
|
+
|
|
454
|
+
[](https://www.paypal.com/donate/?hosted_button_id=S8SKPUBSPK758)
|
|
455
|
+
|
|
456
|
+
</script>
|