node-red-contrib-knx-ultimate 7.0.4 → 7.1.0-beta.0
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 -0
- package/README.md +2 -0
- package/examples/HA Translator - Payload Conversion.json +18 -8
- package/examples/KNX Utility - All functions.json +389 -0
- package/nodes/commonFunctions.js +5 -4
- package/nodes/knxUltimateAlerter.html +15 -4
- package/nodes/knxUltimateAutoResponder.html +15 -4
- package/nodes/knxUltimateDateTime.html +16 -5
- package/nodes/knxUltimateDateTime.js +2 -26
- package/nodes/knxUltimateGarage.html +15 -4
- package/nodes/knxUltimateGlobalContext.html +15 -4
- package/nodes/knxUltimateHATranslator.html +15 -4
- package/nodes/knxUltimateHueController.html +3 -4
- package/nodes/knxUltimateLoadControl.html +15 -4
- package/nodes/knxUltimateLogger.html +15 -4
- package/nodes/knxUltimateSceneController.html +15 -4
- package/nodes/knxUltimateStaircase.html +15 -4
- package/nodes/knxUltimateUtility.html +325 -0
- package/nodes/knxUltimateUtility.js +24 -0
- package/nodes/knxUltimateViewer.html +16 -3
- package/nodes/knxUltimateViewer.js +106 -27
- package/nodes/knxUltimateWatchDog.html +15 -4
- package/nodes/locales/de/knxUltimateAlerter.html +2 -0
- package/nodes/locales/de/knxUltimateAlerter.json +5 -3
- package/nodes/locales/de/knxUltimateAutoResponder.html +2 -0
- package/nodes/locales/de/knxUltimateAutoResponder.json +4 -2
- package/nodes/locales/de/knxUltimateDateTime.html +2 -0
- package/nodes/locales/de/knxUltimateDateTime.json +5 -3
- package/nodes/locales/de/knxUltimateGarage.html +2 -0
- package/nodes/locales/de/knxUltimateGarage.json +5 -2
- package/nodes/locales/de/knxUltimateGlobalContext.html +2 -0
- package/nodes/locales/de/knxUltimateGlobalContext.json +21 -18
- package/nodes/locales/de/knxUltimateHATranslator.html +2 -0
- package/nodes/locales/de/knxUltimateHATranslator.json +4 -2
- package/nodes/locales/de/knxUltimateHueController.html +2 -1
- package/nodes/locales/de/knxUltimateHueController.json +4 -3
- package/nodes/locales/de/knxUltimateLoadControl.html +2 -0
- package/nodes/locales/de/knxUltimateLoadControl.json +5 -2
- package/nodes/locales/de/knxUltimateLogger.html +2 -0
- package/nodes/locales/de/knxUltimateLogger.json +6 -3
- package/nodes/locales/de/knxUltimateSceneController.html +2 -0
- package/nodes/locales/de/knxUltimateSceneController.json +8 -6
- package/nodes/locales/de/knxUltimateStaircase.html +2 -0
- package/nodes/locales/de/knxUltimateStaircase.json +5 -2
- package/nodes/locales/de/knxUltimateUtility.html +922 -0
- package/nodes/locales/de/knxUltimateUtility.json +56 -0
- package/nodes/locales/de/knxUltimateViewer.html +19 -453
- package/nodes/locales/de/knxUltimateViewer.json +9 -1
- package/nodes/locales/de/knxUltimateWatchDog.html +2 -0
- package/nodes/locales/de/knxUltimateWatchDog.json +5 -2
- package/nodes/locales/en/knxUltimateAlerter.html +2 -0
- package/nodes/locales/en/knxUltimateAlerter.json +5 -3
- package/nodes/locales/en/knxUltimateAutoResponder.html +2 -0
- package/nodes/locales/en/knxUltimateAutoResponder.json +4 -2
- package/nodes/locales/en/knxUltimateDateTime.html +2 -0
- package/nodes/locales/en/knxUltimateDateTime.json +5 -3
- package/nodes/locales/en/knxUltimateGarage.html +2 -0
- package/nodes/locales/en/knxUltimateGarage.json +5 -2
- package/nodes/locales/en/knxUltimateGlobalContext.html +2 -0
- package/nodes/locales/en/knxUltimateGlobalContext.json +21 -18
- package/nodes/locales/en/knxUltimateHATranslator.html +2 -0
- package/nodes/locales/en/knxUltimateHATranslator.json +4 -2
- package/nodes/locales/en/knxUltimateHueController.html +2 -1
- package/nodes/locales/en/knxUltimateHueController.json +4 -3
- package/nodes/locales/en/knxUltimateLoadControl.html +2 -0
- package/nodes/locales/en/knxUltimateLoadControl.json +5 -2
- package/nodes/locales/en/knxUltimateLogger.html +2 -0
- package/nodes/locales/en/knxUltimateLogger.json +6 -3
- package/nodes/locales/en/knxUltimateSceneController.html +2 -0
- package/nodes/locales/en/knxUltimateSceneController.json +15 -14
- package/nodes/locales/en/knxUltimateStaircase.html +2 -0
- package/nodes/locales/en/knxUltimateStaircase.json +5 -2
- package/nodes/locales/en/knxUltimateUtility.html +1100 -0
- package/nodes/locales/en/knxUltimateUtility.json +56 -0
- package/nodes/locales/en/knxUltimateViewer.html +18 -457
- package/nodes/locales/en/knxUltimateViewer.json +9 -1
- package/nodes/locales/en/knxUltimateWatchDog.html +2 -0
- package/nodes/locales/en/knxUltimateWatchDog.json +5 -3
- package/nodes/locales/es/knxUltimateAlerter.html +2 -0
- package/nodes/locales/es/knxUltimateAlerter.json +5 -2
- package/nodes/locales/es/knxUltimateAutoResponder.html +2 -0
- package/nodes/locales/es/knxUltimateAutoResponder.json +4 -1
- package/nodes/locales/es/knxUltimateDateTime.html +2 -0
- package/nodes/locales/es/knxUltimateDateTime.json +5 -3
- package/nodes/locales/es/knxUltimateGarage.html +2 -0
- package/nodes/locales/es/knxUltimateGarage.json +5 -2
- package/nodes/locales/es/knxUltimateGlobalContext.html +2 -0
- package/nodes/locales/es/knxUltimateGlobalContext.json +5 -2
- package/nodes/locales/es/knxUltimateHATranslator.html +2 -0
- package/nodes/locales/es/knxUltimateHATranslator.json +4 -1
- package/nodes/locales/es/knxUltimateHueController.html +2 -1
- package/nodes/locales/es/knxUltimateHueController.json +4 -3
- package/nodes/locales/es/knxUltimateLoadControl.html +2 -0
- package/nodes/locales/es/knxUltimateLoadControl.json +5 -2
- package/nodes/locales/es/knxUltimateLogger.html +2 -0
- package/nodes/locales/es/knxUltimateLogger.json +5 -2
- package/nodes/locales/es/knxUltimateSceneController.html +2 -0
- package/nodes/locales/es/knxUltimateSceneController.json +5 -2
- package/nodes/locales/es/knxUltimateStaircase.html +2 -0
- package/nodes/locales/es/knxUltimateStaircase.json +5 -2
- package/nodes/locales/es/knxUltimateUtility.html +1080 -0
- package/nodes/locales/es/knxUltimateUtility.json +56 -0
- package/nodes/locales/es/knxUltimateViewer.html +18 -450
- package/nodes/locales/es/knxUltimateViewer.json +16 -8
- package/nodes/locales/es/knxUltimateWatchDog.html +2 -0
- package/nodes/locales/es/knxUltimateWatchDog.json +5 -2
- package/nodes/locales/fr/knxUltimateAlerter.html +2 -0
- package/nodes/locales/fr/knxUltimateAlerter.json +5 -2
- package/nodes/locales/fr/knxUltimateAutoResponder.html +2 -0
- package/nodes/locales/fr/knxUltimateAutoResponder.json +4 -1
- package/nodes/locales/fr/knxUltimateDateTime.html +2 -0
- package/nodes/locales/fr/knxUltimateDateTime.json +5 -3
- package/nodes/locales/fr/knxUltimateGarage.html +2 -0
- package/nodes/locales/fr/knxUltimateGarage.json +5 -2
- package/nodes/locales/fr/knxUltimateGlobalContext.html +2 -0
- package/nodes/locales/fr/knxUltimateGlobalContext.json +5 -2
- package/nodes/locales/fr/knxUltimateHATranslator.html +2 -0
- package/nodes/locales/fr/knxUltimateHATranslator.json +4 -1
- package/nodes/locales/fr/knxUltimateHueController.html +2 -1
- package/nodes/locales/fr/knxUltimateHueController.json +4 -3
- package/nodes/locales/fr/knxUltimateLoadControl.html +2 -0
- package/nodes/locales/fr/knxUltimateLoadControl.json +5 -2
- package/nodes/locales/fr/knxUltimateLogger.html +2 -0
- package/nodes/locales/fr/knxUltimateLogger.json +5 -2
- package/nodes/locales/fr/knxUltimateSceneController.html +2 -0
- package/nodes/locales/fr/knxUltimateSceneController.json +5 -2
- package/nodes/locales/fr/knxUltimateStaircase.html +2 -0
- package/nodes/locales/fr/knxUltimateStaircase.json +5 -2
- package/nodes/locales/fr/knxUltimateUtility.html +1081 -0
- package/nodes/locales/fr/knxUltimateUtility.json +56 -0
- package/nodes/locales/fr/knxUltimateViewer.html +18 -450
- package/nodes/locales/fr/knxUltimateViewer.json +16 -8
- package/nodes/locales/fr/knxUltimateWatchDog.html +2 -0
- package/nodes/locales/fr/knxUltimateWatchDog.json +5 -2
- package/nodes/locales/it/knxUltimateAlerter.html +2 -0
- package/nodes/locales/it/knxUltimateAlerter.json +5 -3
- package/nodes/locales/it/knxUltimateAutoResponder.html +2 -0
- package/nodes/locales/it/knxUltimateAutoResponder.json +4 -2
- package/nodes/locales/it/knxUltimateDateTime.html +2 -0
- package/nodes/locales/it/knxUltimateDateTime.json +5 -3
- package/nodes/locales/it/knxUltimateGarage.html +2 -0
- package/nodes/locales/it/knxUltimateGarage.json +5 -2
- package/nodes/locales/it/knxUltimateGlobalContext.html +2 -0
- package/nodes/locales/it/knxUltimateGlobalContext.json +21 -18
- package/nodes/locales/it/knxUltimateHATranslator.html +2 -0
- package/nodes/locales/it/knxUltimateHATranslator.json +4 -2
- package/nodes/locales/it/knxUltimateHueController.html +2 -1
- package/nodes/locales/it/knxUltimateHueController.json +4 -3
- package/nodes/locales/it/knxUltimateLoadControl.html +2 -0
- package/nodes/locales/it/knxUltimateLoadControl.json +5 -2
- package/nodes/locales/it/knxUltimateLogger.html +2 -0
- package/nodes/locales/it/knxUltimateLogger.json +6 -3
- package/nodes/locales/it/knxUltimateSceneController.html +2 -0
- package/nodes/locales/it/knxUltimateSceneController.json +8 -7
- package/nodes/locales/it/knxUltimateStaircase.html +2 -0
- package/nodes/locales/it/knxUltimateStaircase.json +5 -2
- package/nodes/locales/it/knxUltimateUtility.html +959 -0
- package/nodes/locales/it/knxUltimateUtility.json +56 -0
- package/nodes/locales/it/knxUltimateViewer.html +19 -453
- package/nodes/locales/it/knxUltimateViewer.json +9 -1
- package/nodes/locales/it/knxUltimateWatchDog.html +2 -0
- package/nodes/locales/it/knxUltimateWatchDog.json +6 -6
- package/nodes/locales/zh-CN/knxUltimateAlerter.html +2 -0
- package/nodes/locales/zh-CN/knxUltimateAlerter.json +5 -3
- package/nodes/locales/zh-CN/knxUltimateAutoResponder.html +2 -0
- package/nodes/locales/zh-CN/knxUltimateAutoResponder.json +4 -2
- package/nodes/locales/zh-CN/knxUltimateDateTime.html +2 -0
- package/nodes/locales/zh-CN/knxUltimateDateTime.json +5 -3
- package/nodes/locales/zh-CN/knxUltimateGarage.html +2 -0
- package/nodes/locales/zh-CN/knxUltimateGarage.json +5 -2
- package/nodes/locales/zh-CN/knxUltimateGlobalContext.html +2 -0
- package/nodes/locales/zh-CN/knxUltimateGlobalContext.json +21 -18
- package/nodes/locales/zh-CN/knxUltimateHATranslator.html +2 -0
- package/nodes/locales/zh-CN/knxUltimateHATranslator.json +4 -2
- package/nodes/locales/zh-CN/knxUltimateHueController.html +2 -1
- package/nodes/locales/zh-CN/knxUltimateHueController.json +4 -3
- package/nodes/locales/zh-CN/knxUltimateLoadControl.html +2 -0
- package/nodes/locales/zh-CN/knxUltimateLoadControl.json +5 -2
- package/nodes/locales/zh-CN/knxUltimateLogger.html +2 -0
- package/nodes/locales/zh-CN/knxUltimateLogger.json +6 -3
- package/nodes/locales/zh-CN/knxUltimateSceneController.html +2 -0
- package/nodes/locales/zh-CN/knxUltimateSceneController.json +12 -10
- package/nodes/locales/zh-CN/knxUltimateStaircase.html +2 -0
- package/nodes/locales/zh-CN/knxUltimateStaircase.json +5 -2
- package/nodes/locales/zh-CN/knxUltimateUtility.html +930 -0
- package/nodes/locales/zh-CN/knxUltimateUtility.json +56 -0
- package/nodes/locales/zh-CN/knxUltimateViewer.html +19 -452
- package/nodes/locales/zh-CN/knxUltimateViewer.json +9 -1
- package/nodes/locales/zh-CN/knxUltimateWatchDog.html +2 -0
- package/nodes/locales/zh-CN/knxUltimateWatchDog.json +5 -3
- package/nodes/plugins/knxUltimateViewer-vue/assets/app.css +1 -1
- package/nodes/plugins/knxUltimateViewer-vue/assets/app.js +2 -2
- package/nodes/utils/knxDateTimeSendNow.js +30 -0
- package/nodes/utils/knxUtilityProfileAdapter.js +66 -0
- package/nodes/utils/knxUtilityProfiles/runtime/alerter.js +305 -0
- package/nodes/utils/knxUtilityProfiles/runtime/autoresponder.js +266 -0
- package/nodes/utils/knxUtilityProfiles/runtime/datetime.js +279 -0
- package/nodes/utils/knxUtilityProfiles/runtime/garage.js +513 -0
- package/nodes/utils/knxUtilityProfiles/runtime/globalcontext.js +218 -0
- package/nodes/utils/knxUtilityProfiles/runtime/hatranslator.js +95 -0
- package/nodes/utils/knxUtilityProfiles/runtime/loadcontrol.js +448 -0
- package/nodes/utils/knxUtilityProfiles/runtime/logger.js +233 -0
- package/nodes/utils/knxUtilityProfiles/runtime/profileTimers.js +35 -0
- package/nodes/utils/knxUtilityProfiles/runtime/scenecontroller.js +487 -0
- package/nodes/utils/knxUtilityProfiles/runtime/staircase.js +472 -0
- package/nodes/utils/knxUtilityProfiles/runtime/watchdog.js +240 -0
- package/nodes/utils/knxViewerHistory.js +424 -0
- package/package.json +9 -6
- package/resources/flowMigrationBackup.js +81 -0
- package/resources/hueControllerMigrationDialog.js +15 -4
- package/resources/knxUtilityMigration.js +276 -0
- package/resources/knxUtilityProfiles.js +2488 -0
|
@@ -1,33 +1,9 @@
|
|
|
1
1
|
const loggerClass = require('./utils/sysLogger')
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
const registerSendNowEndpoint = require('./utils/knxDateTimeSendNow')
|
|
4
4
|
|
|
5
5
|
module.exports = function (RED) {
|
|
6
|
-
|
|
7
|
-
RED.httpAdmin.post('/knxUltimateDateTime/sendNow', RED.auth.needsPermission('knxUltimate-config.write'), (req, res) => {
|
|
8
|
-
try {
|
|
9
|
-
const { id } = req.body || {}
|
|
10
|
-
if (!id) {
|
|
11
|
-
res.status(400).json({ error: 'Missing node id' })
|
|
12
|
-
return
|
|
13
|
-
}
|
|
14
|
-
const targetNode = RED.nodes.getNode(id)
|
|
15
|
-
if (!targetNode) {
|
|
16
|
-
res.status(404).json({ error: 'KNX DateTime node not found' })
|
|
17
|
-
return
|
|
18
|
-
}
|
|
19
|
-
if (typeof targetNode.triggerSend !== 'function') {
|
|
20
|
-
res.status(400).json({ error: 'Node does not support sendNow' })
|
|
21
|
-
return
|
|
22
|
-
}
|
|
23
|
-
const result = targetNode.triggerSend({ reason: 'button' })
|
|
24
|
-
res.json({ status: 'ok', queued: result && result.queued === true })
|
|
25
|
-
} catch (error) {
|
|
26
|
-
res.status(500).json({ error: error.message || 'KNX DateTime send failed' })
|
|
27
|
-
}
|
|
28
|
-
})
|
|
29
|
-
sendNowEndpointRegistered = true
|
|
30
|
-
}
|
|
6
|
+
registerSendNowEndpoint(RED)
|
|
31
7
|
|
|
32
8
|
function knxUltimateDateTime (config) {
|
|
33
9
|
RED.nodes.createNode(this, config)
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
<script type="text/javascript" src="resources/node-red-contrib-knx-ultimate/flowMigrationBackup.js"></script>
|
|
2
|
+
<script type="text/javascript" src="resources/node-red-contrib-knx-ultimate/knxUtilityMigration.js"></script>
|
|
1
3
|
<script type="text/javascript" src="resources/node-red-contrib-knx-ultimate/htmlUtils.js"></script>
|
|
2
4
|
|
|
3
5
|
<script type="text/javascript">
|
|
4
6
|
RED.nodes.registerType('knxUltimateGarage', {
|
|
5
|
-
category: '
|
|
6
|
-
color: '#
|
|
7
|
+
category: 'deprecated',
|
|
8
|
+
color: '#E5F0E2',
|
|
7
9
|
defaults: {
|
|
8
10
|
server: { type: 'knxUltimate-config', required: true },
|
|
9
11
|
name: { value: '' },
|
|
@@ -37,9 +39,9 @@
|
|
|
37
39
|
outputs: 1,
|
|
38
40
|
icon: 'node-knx-icon.svg',
|
|
39
41
|
label: function () {
|
|
40
|
-
return this.name || 'KNX Garage';
|
|
42
|
+
return (this.name || 'KNX Garage') + " (deprecated)";
|
|
41
43
|
},
|
|
42
|
-
paletteLabel: 'KNX Garage',
|
|
44
|
+
paletteLabel: 'KNX Garage (deprecated)',
|
|
43
45
|
oneditprepare: function () {
|
|
44
46
|
const node = this;
|
|
45
47
|
const $knxServerInput = $('#node-input-server');
|
|
@@ -183,6 +185,15 @@
|
|
|
183
185
|
</script>
|
|
184
186
|
|
|
185
187
|
<script type="text/html" data-template-name="knxUltimateGarage">
|
|
188
|
+
<div class="form-row knx-utility-legacy-notice" role="note" style="box-sizing:border-box; padding:10px 12px; margin-bottom:12px; border-left:4px solid #d79b00; background:#fff8df; color:#4d3a00;">
|
|
189
|
+
<i class="fa fa-exclamation-triangle" aria-hidden="true"></i>
|
|
190
|
+
<span data-i18n="knxUltimateGarage.legacy_notice"></span>
|
|
191
|
+
</div>
|
|
192
|
+
<div class="form-row knx-utility-legacy-migration-action" style="margin-bottom:14px;">
|
|
193
|
+
<button type="button" class="red-ui-button knx-utility-migrate-flow" style="background:#d97706; border-color:#b45309; color:#fff !important; font-weight:700;" data-i18n="[title]knxUltimateGarage.migration_button_title">
|
|
194
|
+
<i class="fa fa-exchange" style="color:#fff !important;"></i> <span style="color:#fff !important;" data-i18n="knxUltimateGarage.migration_button"></span>
|
|
195
|
+
</button>
|
|
196
|
+
</div>
|
|
186
197
|
<div class="form-row" style="margin-bottom:10px;">
|
|
187
198
|
<span style="color:#ff0000"><i class="fa fa-youtube"></i></span> <a target="_blank" href="https://www.youtube.com/playlist?list=PL9Yh1bjbLAYrU8PsVhW4xzEug2WtVFv3E"><b>KNX-Ultimate video tutorials (YouTube playlist)</b></a>
|
|
188
199
|
</div>
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
<script type="text/javascript" src="resources/node-red-contrib-knx-ultimate/flowMigrationBackup.js"></script>
|
|
2
|
+
<script type="text/javascript" src="resources/node-red-contrib-knx-ultimate/knxUtilityMigration.js"></script>
|
|
1
3
|
<script type="text/javascript" src="resources/node-red-contrib-knx-ultimate/htmlUtils.js"></script>
|
|
2
4
|
|
|
3
5
|
<script type="text/javascript">
|
|
4
6
|
RED.nodes.registerType('knxUltimateGlobalContext', {
|
|
5
|
-
category:
|
|
6
|
-
color: '#
|
|
7
|
+
category: 'deprecated',
|
|
8
|
+
color: '#E5F0E2',
|
|
7
9
|
defaults: {
|
|
8
10
|
//buttonState: {value: true},
|
|
9
11
|
server: { type: "knxUltimate-config", required: true },
|
|
@@ -16,9 +18,9 @@
|
|
|
16
18
|
outputs: 0,
|
|
17
19
|
icon: "node-knx-icon.svg",
|
|
18
20
|
label: function () {
|
|
19
|
-
return (this.name);
|
|
21
|
+
return ((this.name)) + " (deprecated)";
|
|
20
22
|
},
|
|
21
|
-
paletteLabel: "KNX Global Context",
|
|
23
|
+
paletteLabel: "KNX Global Context (deprecated)",
|
|
22
24
|
// button: {
|
|
23
25
|
// enabled: function() {
|
|
24
26
|
// // return whether or not the button is enabled, based on the current
|
|
@@ -64,6 +66,15 @@
|
|
|
64
66
|
</script>
|
|
65
67
|
|
|
66
68
|
<script type="text/html" data-template-name="knxUltimateGlobalContext">
|
|
69
|
+
<div class="form-row knx-utility-legacy-notice" role="note" style="box-sizing:border-box; padding:10px 12px; margin-bottom:12px; border-left:4px solid #d79b00; background:#fff8df; color:#4d3a00;">
|
|
70
|
+
<i class="fa fa-exclamation-triangle" aria-hidden="true"></i>
|
|
71
|
+
<span data-i18n="knxUltimateGlobalContext.legacy_notice"></span>
|
|
72
|
+
</div>
|
|
73
|
+
<div class="form-row knx-utility-legacy-migration-action" style="margin-bottom:14px;">
|
|
74
|
+
<button type="button" class="red-ui-button knx-utility-migrate-flow" style="background:#d97706; border-color:#b45309; color:#fff !important; font-weight:700;" data-i18n="[title]knxUltimateGlobalContext.migration_button_title">
|
|
75
|
+
<i class="fa fa-exchange" style="color:#fff !important;"></i> <span style="color:#fff !important;" data-i18n="knxUltimateGlobalContext.migration_button"></span>
|
|
76
|
+
</button>
|
|
77
|
+
</div>
|
|
67
78
|
<div class="form-row" style="margin-bottom:10px;">
|
|
68
79
|
<span style="color:#ff0000"><i class="fa fa-youtube"></i></span> <a target="_blank" href="https://www.youtube.com/playlist?list=PL9Yh1bjbLAYrU8PsVhW4xzEug2WtVFv3E"><b>KNX-Ultimate video tutorials (YouTube playlist)</b></a>
|
|
69
80
|
</div>
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
<script type="text/javascript" src="resources/node-red-contrib-knx-ultimate/flowMigrationBackup.js"></script>
|
|
2
|
+
<script type="text/javascript" src="resources/node-red-contrib-knx-ultimate/knxUtilityMigration.js"></script>
|
|
1
3
|
<script type="text/javascript">
|
|
2
4
|
RED.nodes.registerType('knxUltimateHATranslator', {
|
|
3
|
-
category: '
|
|
5
|
+
category: 'deprecated',
|
|
4
6
|
defaults: {
|
|
5
7
|
name: { value: "" },
|
|
6
8
|
payloadPropName: { value: "payload", required: false },
|
|
@@ -10,10 +12,10 @@
|
|
|
10
12
|
outputs: 1,
|
|
11
13
|
icon: "node-ha-icon.svg",
|
|
12
14
|
label: function () {
|
|
13
|
-
return (this.name || 'HA -> KNX');
|
|
15
|
+
return (this.name || 'HA -> KNX') + ' (deprecated)';
|
|
14
16
|
},
|
|
15
|
-
color: '#
|
|
16
|
-
paletteLabel: "Home Assistant translator",
|
|
17
|
+
color: '#E5F0E2',
|
|
18
|
+
paletteLabel: "Home Assistant translator (deprecated)",
|
|
17
19
|
oneditprepare: function () {
|
|
18
20
|
// Go to the help panel
|
|
19
21
|
try {
|
|
@@ -47,6 +49,15 @@
|
|
|
47
49
|
</script>
|
|
48
50
|
|
|
49
51
|
<script type="text/html" data-template-name="knxUltimateHATranslator">
|
|
52
|
+
<div class="form-row knx-utility-legacy-notice" role="note" style="box-sizing:border-box; padding:10px 12px; margin-bottom:12px; border-left:4px solid #d79b00; background:#fff8df; color:#4d3a00;">
|
|
53
|
+
<i class="fa fa-exclamation-triangle" aria-hidden="true"></i>
|
|
54
|
+
<span data-i18n="knxUltimateHATranslator.legacy_notice"></span>
|
|
55
|
+
</div>
|
|
56
|
+
<div class="form-row knx-utility-legacy-migration-action" style="margin-bottom:14px;">
|
|
57
|
+
<button type="button" class="red-ui-button knx-utility-migrate-flow" style="background:#d97706; border-color:#b45309; color:#fff !important; font-weight:700;" data-i18n="[title]knxUltimateHATranslator.migration_button_title">
|
|
58
|
+
<i class="fa fa-exchange" style="color:#fff !important;"></i> <span style="color:#fff !important;" data-i18n="knxUltimateHATranslator.migration_button"></span>
|
|
59
|
+
</button>
|
|
60
|
+
</div>
|
|
50
61
|
<div class="form-row" style="margin-bottom:10px;">
|
|
51
62
|
<span style="color:#ff0000"><i class="fa fa-youtube"></i></span> <a target="_blank" href="https://www.youtube.com/playlist?list=PL9Yh1bjbLAYrU8PsVhW4xzEug2WtVFv3E"><b>KNX-Ultimate video tutorials (YouTube playlist)</b></a>
|
|
52
63
|
</div>
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
<script type="text/javascript" src="resources/node-red-contrib-knx-ultimate/hueControllerEditorSelection.js"></script>
|
|
4
4
|
<script type="text/javascript" src="resources/node-red-contrib-knx-ultimate/hueControllerProfiles.js"></script>
|
|
5
5
|
<script type="text/javascript" src="resources/node-red-contrib-knx-ultimate/hueControllerMigration.js"></script>
|
|
6
|
+
<script type="text/javascript" src="resources/node-red-contrib-knx-ultimate/flowMigrationBackup.js"></script>
|
|
6
7
|
<script type="text/javascript" src="resources/node-red-contrib-knx-ultimate/hueControllerMigrationDialog.js"></script>
|
|
7
8
|
|
|
8
9
|
<script type="text/javascript">
|
|
@@ -1067,11 +1068,9 @@ The controller supports lights and grouped lights, plugs, buttons, Tap dial, mot
|
|
|
1067
1068
|
|
|
1068
1069
|
## Convert a legacy HUE flow
|
|
1069
1070
|
|
|
1070
|
-
Use **Convert legacy HUE flow
|
|
1071
|
+
Use **Convert legacy HUE flow** in HUE Controller or the conversion button in a legacy HUE editor. After confirmation, the browser automatically starts downloading a dated JSON backup of all current editor flows, including tabs, subflows, configuration nodes, groups and wires. The backup uses the standard Node-RED export format and excludes declared credentials. Your browser may ask where to save the file. If the backup cannot be created or its download cannot be started, no nodes are converted.
|
|
1071
1072
|
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
**Copy converted flow** uses the browser Clipboard API and falls back to a temporary selected textarea when direct clipboard access is unavailable. If the browser blocks both methods, the output JSON is selected so it can be copied manually.
|
|
1073
|
+
The current editor then closes and discards unsaved form edits. Conversion runs locally in the editor and preserves node IDs, settings, configuration references, positions, groups and wiring. A single Undo restores the original nodes. Review the converted flows and click **Deploy** yourself; conversion does not deploy automatically.
|
|
1075
1074
|
|
|
1076
1075
|
## Compatibility and loop protection
|
|
1077
1076
|
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
<script type="text/javascript" src="resources/node-red-contrib-knx-ultimate/flowMigrationBackup.js"></script>
|
|
2
|
+
<script type="text/javascript" src="resources/node-red-contrib-knx-ultimate/knxUtilityMigration.js"></script>
|
|
1
3
|
<script type="text/javascript" src="resources/node-red-contrib-knx-ultimate/htmlUtils.js"></script>
|
|
2
4
|
|
|
3
5
|
<script type="text/javascript">
|
|
4
6
|
RED.nodes.registerType('knxUltimateLoadControl', {
|
|
5
|
-
category:
|
|
6
|
-
color: '#
|
|
7
|
+
category: 'deprecated',
|
|
8
|
+
color: '#E5F0E2',
|
|
7
9
|
defaults: {
|
|
8
10
|
//buttonState: {value: true},
|
|
9
11
|
server: { type: "knxUltimate-config", required: false },
|
|
@@ -54,9 +56,9 @@
|
|
|
54
56
|
outputs: 1,
|
|
55
57
|
icon: "node-alerter-icon.svg",
|
|
56
58
|
label: function () {
|
|
57
|
-
return (this.name || this.topic || "KNX Load Control");
|
|
59
|
+
return ((this.name || this.topic || "KNX Load Control")) + " (deprecated)";
|
|
58
60
|
},
|
|
59
|
-
paletteLabel: "KNX Load Control",
|
|
61
|
+
paletteLabel: "KNX Load Control (deprecated)",
|
|
60
62
|
// button: {
|
|
61
63
|
// enabled: function() {
|
|
62
64
|
// // return whether or not the button is enabled, based on the current
|
|
@@ -205,6 +207,15 @@
|
|
|
205
207
|
</script>
|
|
206
208
|
|
|
207
209
|
<script type="text/html" data-template-name="knxUltimateLoadControl">
|
|
210
|
+
<div class="form-row knx-utility-legacy-notice" role="note" style="box-sizing:border-box; padding:10px 12px; margin-bottom:12px; border-left:4px solid #d79b00; background:#fff8df; color:#4d3a00;">
|
|
211
|
+
<i class="fa fa-exclamation-triangle" aria-hidden="true"></i>
|
|
212
|
+
<span data-i18n="knxUltimateLoadControl.legacy_notice"></span>
|
|
213
|
+
</div>
|
|
214
|
+
<div class="form-row knx-utility-legacy-migration-action" style="margin-bottom:14px;">
|
|
215
|
+
<button type="button" class="red-ui-button knx-utility-migrate-flow" style="background:#d97706; border-color:#b45309; color:#fff !important; font-weight:700;" data-i18n="[title]knxUltimateLoadControl.migration_button_title">
|
|
216
|
+
<i class="fa fa-exchange" style="color:#fff !important;"></i> <span style="color:#fff !important;" data-i18n="knxUltimateLoadControl.migration_button"></span>
|
|
217
|
+
</button>
|
|
218
|
+
</div>
|
|
208
219
|
<div class="form-row" style="margin-bottom:10px;">
|
|
209
220
|
<span style="color:#ff0000"><i class="fa fa-youtube"></i></span> <a target="_blank" href="https://www.youtube.com/playlist?list=PL9Yh1bjbLAYrU8PsVhW4xzEug2WtVFv3E"><b>KNX-Ultimate video tutorials (YouTube playlist)</b></a>
|
|
210
221
|
</div>
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
<script type="text/javascript" src="resources/node-red-contrib-knx-ultimate/flowMigrationBackup.js"></script>
|
|
2
|
+
<script type="text/javascript" src="resources/node-red-contrib-knx-ultimate/knxUtilityMigration.js"></script>
|
|
1
3
|
<script type="text/javascript" src="resources/node-red-contrib-knx-ultimate/htmlUtils.js"></script>
|
|
2
4
|
|
|
3
5
|
<script type="text/javascript">
|
|
4
6
|
RED.nodes.registerType('knxUltimateLogger', {
|
|
5
|
-
category:
|
|
6
|
-
color: '#
|
|
7
|
+
category: 'deprecated',
|
|
8
|
+
color: '#E5F0E2',
|
|
7
9
|
defaults: {
|
|
8
10
|
server: { type: "knxUltimate-config", required: true },
|
|
9
11
|
topic: { value: "" },
|
|
@@ -22,9 +24,9 @@
|
|
|
22
24
|
outputLabels: ["ETS Diag file", "Telegram Count"],
|
|
23
25
|
icon: "node-logger-icon.svg",
|
|
24
26
|
label: function () {
|
|
25
|
-
return ((this.name || "KNX Logger") + " " + this.topic);
|
|
27
|
+
return (((this.name || "KNX Logger") + " " + this.topic)) + " (deprecated)";
|
|
26
28
|
},
|
|
27
|
-
paletteLabel: "KNX Logger",
|
|
29
|
+
paletteLabel: "KNX Logger (deprecated)",
|
|
28
30
|
oneditprepare: function () {
|
|
29
31
|
// Go to the help panel
|
|
30
32
|
try {
|
|
@@ -110,6 +112,15 @@
|
|
|
110
112
|
</script>
|
|
111
113
|
|
|
112
114
|
<script type="text/html" data-template-name="knxUltimateLogger">
|
|
115
|
+
<div class="form-row knx-utility-legacy-notice" role="note" style="box-sizing:border-box; padding:10px 12px; margin-bottom:12px; border-left:4px solid #d79b00; background:#fff8df; color:#4d3a00;">
|
|
116
|
+
<i class="fa fa-exclamation-triangle" aria-hidden="true"></i>
|
|
117
|
+
<span data-i18n="knxUltimateLogger.legacy_notice"></span>
|
|
118
|
+
</div>
|
|
119
|
+
<div class="form-row knx-utility-legacy-migration-action" style="margin-bottom:14px;">
|
|
120
|
+
<button type="button" class="red-ui-button knx-utility-migrate-flow" style="background:#d97706; border-color:#b45309; color:#fff !important; font-weight:700;" data-i18n="[title]knxUltimateLogger.migration_button_title">
|
|
121
|
+
<i class="fa fa-exchange" style="color:#fff !important;"></i> <span style="color:#fff !important;" data-i18n="knxUltimateLogger.migration_button"></span>
|
|
122
|
+
</button>
|
|
123
|
+
</div>
|
|
113
124
|
<div class="form-row" style="margin-bottom:10px;">
|
|
114
125
|
<span style="color:#ff0000"><i class="fa fa-youtube"></i></span> <a target="_blank" href="https://www.youtube.com/playlist?list=PL9Yh1bjbLAYrU8PsVhW4xzEug2WtVFv3E"><b>KNX-Ultimate video tutorials (YouTube playlist)</b></a>
|
|
115
126
|
</div>
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
<script type="text/javascript" src="resources/node-red-contrib-knx-ultimate/flowMigrationBackup.js"></script>
|
|
2
|
+
<script type="text/javascript" src="resources/node-red-contrib-knx-ultimate/knxUtilityMigration.js"></script>
|
|
1
3
|
<script type="text/javascript" src="resources/node-red-contrib-knx-ultimate/htmlUtils.js"></script>
|
|
2
4
|
|
|
3
5
|
<script type="text/javascript">
|
|
4
6
|
RED.nodes.registerType('knxUltimateSceneController', {
|
|
5
|
-
category:
|
|
6
|
-
color: '#
|
|
7
|
+
category: 'deprecated',
|
|
8
|
+
color: '#E5F0E2',
|
|
7
9
|
defaults: {
|
|
8
10
|
//buttonState: {value: true},
|
|
9
11
|
server: { type: "knxUltimate-config", required: true },
|
|
@@ -24,9 +26,9 @@
|
|
|
24
26
|
outputs: 1,
|
|
25
27
|
icon: "node-scene-icon.svg",
|
|
26
28
|
label: function () {
|
|
27
|
-
return (this.outputRBE == true ? "|rbe| " : "") + (this.name || this.topic || "KNX Scene Controller") + (this.inputRBE == true ? " |rbe|" : "")
|
|
29
|
+
return ((this.outputRBE == true ? "|rbe| " : "") + (this.name || this.topic || "KNX Scene Controller") + (this.inputRBE == true ? " |rbe|" : "")) + " (deprecated)";
|
|
28
30
|
},
|
|
29
|
-
paletteLabel: "KNX Scene Controller",
|
|
31
|
+
paletteLabel: "KNX Scene Controller (deprecated)",
|
|
30
32
|
// button: {
|
|
31
33
|
// enabled: function() {
|
|
32
34
|
// // return whether or not the button is enabled, based on the current
|
|
@@ -451,6 +453,15 @@
|
|
|
451
453
|
</script>
|
|
452
454
|
|
|
453
455
|
<script type="text/html" data-template-name="knxUltimateSceneController">
|
|
456
|
+
<div class="form-row knx-utility-legacy-notice" role="note" style="box-sizing:border-box; padding:10px 12px; margin-bottom:12px; border-left:4px solid #d79b00; background:#fff8df; color:#4d3a00;">
|
|
457
|
+
<i class="fa fa-exclamation-triangle" aria-hidden="true"></i>
|
|
458
|
+
<span data-i18n="knxUltimateSceneController.legacy_notice"></span>
|
|
459
|
+
</div>
|
|
460
|
+
<div class="form-row knx-utility-legacy-migration-action" style="margin-bottom:14px;">
|
|
461
|
+
<button type="button" class="red-ui-button knx-utility-migrate-flow" style="background:#d97706; border-color:#b45309; color:#fff !important; font-weight:700;" data-i18n="[title]knxUltimateSceneController.migration_button_title">
|
|
462
|
+
<i class="fa fa-exchange" style="color:#fff !important;"></i> <span style="color:#fff !important;" data-i18n="knxUltimateSceneController.migration_button"></span>
|
|
463
|
+
</button>
|
|
464
|
+
</div>
|
|
454
465
|
<div class="form-row" style="margin-bottom:10px;">
|
|
455
466
|
<span style="color:#ff0000"><i class="fa fa-youtube"></i></span> <a target="_blank" href="https://www.youtube.com/playlist?list=PL9Yh1bjbLAYrU8PsVhW4xzEug2WtVFv3E"><b>KNX-Ultimate video tutorials (YouTube playlist)</b></a>
|
|
456
467
|
</div>
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
<script type="text/javascript" src="resources/node-red-contrib-knx-ultimate/flowMigrationBackup.js"></script>
|
|
2
|
+
<script type="text/javascript" src="resources/node-red-contrib-knx-ultimate/knxUtilityMigration.js"></script>
|
|
1
3
|
<script type="text/javascript" src="resources/node-red-contrib-knx-ultimate/htmlUtils.js"></script>
|
|
2
4
|
|
|
3
5
|
<script type="text/javascript">
|
|
4
6
|
RED.nodes.registerType('knxUltimateStaircase', {
|
|
5
|
-
category: '
|
|
6
|
-
color: '#
|
|
7
|
+
category: 'deprecated',
|
|
8
|
+
color: '#E5F0E2',
|
|
7
9
|
defaults: {
|
|
8
10
|
server: { type: 'knxUltimate-config', required: true },
|
|
9
11
|
name: { value: '' },
|
|
@@ -37,9 +39,9 @@
|
|
|
37
39
|
outputs: 1,
|
|
38
40
|
icon: 'node-knx-icon.svg',
|
|
39
41
|
label: function () {
|
|
40
|
-
return this.name || 'KNX Staircase';
|
|
42
|
+
return (this.name || 'KNX Staircase') + " (deprecated)";
|
|
41
43
|
},
|
|
42
|
-
paletteLabel: 'KNX Staircase',
|
|
44
|
+
paletteLabel: 'KNX Staircase (deprecated)',
|
|
43
45
|
oneditprepare: function () {
|
|
44
46
|
const node = this;
|
|
45
47
|
const $knxServerInput = $('#node-input-server');
|
|
@@ -195,6 +197,15 @@
|
|
|
195
197
|
|
|
196
198
|
|
|
197
199
|
<script type="text/html" data-template-name="knxUltimateStaircase">
|
|
200
|
+
<div class="form-row knx-utility-legacy-notice" role="note" style="box-sizing:border-box; padding:10px 12px; margin-bottom:12px; border-left:4px solid #d79b00; background:#fff8df; color:#4d3a00;">
|
|
201
|
+
<i class="fa fa-exclamation-triangle" aria-hidden="true"></i>
|
|
202
|
+
<span data-i18n="knxUltimateStaircase.legacy_notice"></span>
|
|
203
|
+
</div>
|
|
204
|
+
<div class="form-row knx-utility-legacy-migration-action" style="margin-bottom:14px;">
|
|
205
|
+
<button type="button" class="red-ui-button knx-utility-migrate-flow" style="background:#d97706; border-color:#b45309; color:#fff !important; font-weight:700;" data-i18n="[title]knxUltimateStaircase.migration_button_title">
|
|
206
|
+
<i class="fa fa-exchange" style="color:#fff !important;"></i> <span style="color:#fff !important;" data-i18n="knxUltimateStaircase.migration_button"></span>
|
|
207
|
+
</button>
|
|
208
|
+
</div>
|
|
198
209
|
<div class="form-row" style="margin-bottom:10px;">
|
|
199
210
|
<span style="color:#ff0000"><i class="fa fa-youtube"></i></span> <a target="_blank" href="https://www.youtube.com/playlist?list=PL9Yh1bjbLAYrU8PsVhW4xzEug2WtVFv3E"><b>KNX-Ultimate video tutorials (YouTube playlist)</b></a>
|
|
200
211
|
</div>
|