smart-nodes 0.3.36 → 0.4.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.
Files changed (116) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/README.md +35 -17
  3. package/central/central.html +27 -24
  4. package/central/central.js +84 -26
  5. package/central/locales/de-DE/central.html +10 -0
  6. package/central/locales/de-DE/central.json +14 -0
  7. package/central/locales/en-US/central.html +10 -0
  8. package/central/locales/en-US/central.json +14 -0
  9. package/compare/compare.html +64 -87
  10. package/compare/compare.js +69 -29
  11. package/compare/locales/de-DE/compare.html +36 -0
  12. package/compare/locales/de-DE/compare.json +35 -0
  13. package/compare/locales/en-US/compare.html +36 -0
  14. package/compare/locales/en-US/compare.json +35 -0
  15. package/counter/counter.html +70 -72
  16. package/counter/counter.js +43 -20
  17. package/counter/locales/de-DE/counter.html +48 -0
  18. package/counter/locales/de-DE/counter.json +21 -0
  19. package/counter/locales/en-US/counter.html +48 -0
  20. package/counter/locales/en-US/counter.json +21 -0
  21. package/delay/delay.html +30 -102
  22. package/delay/delay.js +63 -20
  23. package/delay/locales/de-DE/delay.html +71 -0
  24. package/delay/locales/de-DE/delay.json +19 -0
  25. package/delay/locales/en-US/delay.html +76 -0
  26. package/delay/locales/en-US/delay.json +19 -0
  27. package/forwarder/forwarder.html +11 -42
  28. package/forwarder/forwarder.js +59 -18
  29. package/forwarder/locales/de-DE/forwarder.html +32 -0
  30. package/forwarder/locales/de-DE/forwarder.json +15 -0
  31. package/forwarder/locales/en-US/forwarder.html +32 -0
  32. package/forwarder/locales/en-US/forwarder.json +15 -0
  33. package/heating-curve/heating-curve.html +10 -51
  34. package/heating-curve/heating-curve.js +38 -13
  35. package/heating-curve/locales/de-DE/heating-curve.html +38 -0
  36. package/heating-curve/locales/de-DE/heating-curve.json +12 -0
  37. package/heating-curve/locales/en-US/heating-curve.html +38 -0
  38. package/heating-curve/locales/en-US/heating-curve.json +12 -0
  39. package/hysteresis/hysteresis.html +49 -69
  40. package/hysteresis/hysteresis.js +94 -68
  41. package/hysteresis/locales/de-DE/hysteresis.html +36 -0
  42. package/hysteresis/locales/de-DE/hysteresis.json +27 -0
  43. package/hysteresis/locales/en-US/hysteresis.html +36 -0
  44. package/hysteresis/locales/en-US/hysteresis.json +27 -0
  45. package/light/light.html +250 -0
  46. package/{light-control/light-control.js → light/light.js} +151 -32
  47. package/light/locales/de-DE/light.html +149 -0
  48. package/light/locales/de-DE/light.json +24 -0
  49. package/light/locales/en-US/light.html +148 -0
  50. package/light/locales/en-US/light.json +24 -0
  51. package/logic/locales/de-DE/logic.html +12 -0
  52. package/logic/locales/de-DE/logic.json +26 -0
  53. package/logic/locales/en-US/logic.html +12 -0
  54. package/logic/locales/en-US/logic.json +26 -0
  55. package/logic/logic.html +48 -64
  56. package/logic/logic.js +63 -29
  57. package/long-press/locales/de-DE/long-press.html +5 -0
  58. package/long-press/locales/de-DE/long-press.json +13 -0
  59. package/long-press/locales/en-US/long-press.html +5 -0
  60. package/long-press/locales/en-US/long-press.json +13 -0
  61. package/{long-press-control/long-press-control.html → long-press/long-press.html} +10 -14
  62. package/long-press/long-press.js +163 -0
  63. package/mixing-valve/locales/de-DE/mixing-valve.html +65 -0
  64. package/mixing-valve/locales/de-DE/mixing-valve.json +19 -0
  65. package/mixing-valve/locales/en-US/mixing-valve.html +66 -0
  66. package/mixing-valve/locales/en-US/mixing-valve.json +19 -0
  67. package/mixing-valve/mixing-valve.html +27 -93
  68. package/mixing-valve/mixing-valve.js +87 -61
  69. package/multi-press/locales/de-DE/multi-press.html +5 -0
  70. package/multi-press/locales/de-DE/multi-press.json +12 -0
  71. package/multi-press/locales/en-US/multi-press.html +5 -0
  72. package/multi-press/locales/en-US/multi-press.json +12 -0
  73. package/{multi-press-control/multi-press-control.html → multi-press/multi-press.html} +9 -13
  74. package/{multi-press-control/multi-press-control.js → multi-press/multi-press.js} +53 -5
  75. package/package.json +7 -7
  76. package/persistence.js +1 -0
  77. package/scene/locales/de-DE/scene.html +105 -0
  78. package/scene/locales/de-DE/scene.json +21 -0
  79. package/scene/locales/en-US/scene.html +107 -0
  80. package/scene/locales/en-US/scene.json +20 -0
  81. package/{scene-control/scene-control.html → scene/scene.html} +30 -132
  82. package/{scene-control/scene-control.js → scene/scene.js} +76 -26
  83. package/scheduler/locales/de-DE/scheduler.html +30 -0
  84. package/scheduler/locales/de-DE/scheduler.json +21 -0
  85. package/scheduler/locales/en-US/scheduler.html +30 -0
  86. package/scheduler/locales/en-US/scheduler.json +21 -0
  87. package/scheduler/scheduler.html +34 -64
  88. package/scheduler/scheduler.js +85 -53
  89. package/shutter/locales/de-DE/shutter.html +127 -0
  90. package/shutter/locales/de-DE/shutter.json +11 -0
  91. package/shutter/locales/en-US/shutter.html +133 -0
  92. package/shutter/locales/en-US/shutter.json +11 -0
  93. package/{shutter-control/shutter-control.html → shutter/shutter.html} +7 -133
  94. package/{shutter-control/shutter-control.js → shutter/shutter.js} +116 -56
  95. package/shutter-complex/locales/de-DE/shutter-complex.html +120 -0
  96. package/shutter-complex/locales/de-DE/shutter-complex.json +20 -0
  97. package/shutter-complex/locales/en-US/shutter-complex.html +120 -0
  98. package/shutter-complex/locales/en-US/shutter-complex.json +20 -0
  99. package/{shutter-complex-control/shutter-complex-control.html → shutter-complex/shutter-complex.html} +36 -140
  100. package/shutter-complex/shutter-complex.js +578 -0
  101. package/smart_helper.js +52 -9
  102. package/statistic/locales/de-DE/statistic.html +10 -0
  103. package/statistic/locales/de-DE/statistic.json +29 -0
  104. package/statistic/locales/en-US/statistic.html +10 -0
  105. package/statistic/locales/en-US/statistic.json +29 -0
  106. package/statistic/statistic.html +38 -43
  107. package/statistic/statistic.js +57 -28
  108. package/text-exec/locales/de-DE/text-exec.html +18 -0
  109. package/text-exec/locales/de-DE/text-exec.json +7 -0
  110. package/text-exec/locales/en-US/text-exec.html +18 -0
  111. package/text-exec/locales/en-US/text-exec.json +7 -0
  112. package/text-exec/text-exec.html +9 -25
  113. package/text-exec/text-exec.js +43 -2
  114. package/light-control/light-control.html +0 -363
  115. package/long-press-control/long-press-control.js +0 -76
  116. package/shutter-complex-control/shutter-complex-control.js +0 -442
@@ -0,0 +1,163 @@
1
+ module.exports = function (RED)
2
+ {
3
+ "use strict";
4
+
5
+ function LongPressControlNode(config)
6
+ {
7
+ const node = this;
8
+ RED.nodes.createNode(node, config);
9
+
10
+
11
+ // ###################
12
+ // # Class constants #
13
+ // ###################
14
+ const ACTION_SHORT = 0;
15
+ const ACTION_LONG = 1;
16
+
17
+
18
+ // #######################
19
+ // # Global help objects #
20
+ // #######################
21
+ const smart_context = require("../persistence.js")(RED);
22
+ const helper = require("../smart_helper.js");
23
+
24
+
25
+ // ##################
26
+ // # Dynamic config #
27
+ // ##################
28
+ let long_press_ms = parseInt(config.long_press_ms || 1000, 10);
29
+ let short = helper.evaluateNodeProperty(RED, config.short, "json");
30
+ let long = helper.evaluateNodeProperty(RED, config.long, "json");
31
+
32
+
33
+ // ##################
34
+ // # Runtime values #
35
+ // ##################
36
+
37
+ // The date when the button was pressed
38
+ let on_time = null;
39
+
40
+ // Here the setTimeout return value is stored to detect a long press.
41
+ let timeout = null;
42
+
43
+ // Save the last state of the long press, this isn't needed as persistant value
44
+ let last_action = null;
45
+
46
+
47
+ // ###############
48
+ // # Node events #
49
+ // ###############
50
+ node.on("input", function (msg)
51
+ {
52
+ handleTopic(msg);
53
+
54
+ setStatus();
55
+ // smart_context.set(node.id, node_settings);
56
+ });
57
+
58
+ node.on("close", function ()
59
+ {
60
+ stopAutoOff();
61
+ });
62
+
63
+ // #####################
64
+ // # Private functions #
65
+ // #####################
66
+
67
+ /**
68
+ * This is the main function which handles all topics that was received.
69
+ */
70
+ let handleTopic = msg =>
71
+ {
72
+ if (msg.payload)
73
+ {
74
+ on_time = Date.now();
75
+ startAutoLongPress();
76
+ }
77
+ else if (on_time != null)
78
+ {
79
+ const pressTime = Date.now() - on_time;
80
+ on_time = null;
81
+
82
+ // Stop if any timeout is set
83
+ stopAutoOff();
84
+
85
+ if (pressTime < long_press_ms)
86
+ {
87
+ last_action = ACTION_SHORT;
88
+ if (short != null)
89
+ node.send([helper.cloneObject(short), null]);
90
+ }
91
+ else
92
+ {
93
+ last_action = ACTION_LONG;
94
+ if (long != null)
95
+ node.send([null, helper.cloneObject(long)]);
96
+ }
97
+ }
98
+ }
99
+
100
+ /**
101
+ * Start timer to detect a long press
102
+ */
103
+ let startAutoLongPress = () =>
104
+ {
105
+ stopAutoOff();
106
+ timeout = setTimeout(() =>
107
+ {
108
+ last_action = ACTION_LONG;
109
+ on_time = null;
110
+ timeout = null;
111
+
112
+ node.send([null, helper.cloneObject(long)]);
113
+
114
+ setStatus();
115
+ }, long_press_ms);
116
+ };
117
+
118
+ /**
119
+ * Stop current runnting timer
120
+ */
121
+ let stopAutoOff = () =>
122
+ {
123
+ if (timeout != null)
124
+ {
125
+ clearTimeout(timeout);
126
+ timeout = null;
127
+ }
128
+ };
129
+
130
+
131
+ /**
132
+ * Set the current node status
133
+ */
134
+ let setStatus = () =>
135
+ {
136
+ if (timeout != null)
137
+ {
138
+ node.status({ fill: "yellow", shape: "ring", text: helper.getCurrentTimeForStatus() + ": Wait for button release..." });
139
+ }
140
+ else
141
+ {
142
+ switch (last_action)
143
+ {
144
+ case ACTION_SHORT:
145
+ node.status({ fill: "green", shape: "dot", text: helper.getCurrentTimeForStatus() + ": Last was short" });
146
+ break;
147
+
148
+ case ACTION_LONG:
149
+ node.status({ fill: "green", shape: "dot", text: helper.getCurrentTimeForStatus() + ": Last was long" });
150
+ break;
151
+
152
+ default:
153
+ case null:
154
+ node.status({});
155
+ break;
156
+ }
157
+
158
+ }
159
+ }
160
+ }
161
+
162
+ RED.nodes.registerType("smart_long-press-control", LongPressControlNode);
163
+ }
@@ -0,0 +1,65 @@
1
+ <script type="text/html" data-help-name="smart_mixing-valve">
2
+ <p>
3
+ Diese Node steuert einen Heizungsmischer. Dieser kann sowohl fürs Heizen als auch fürs Kühlen verwendet werden.
4
+ Nach der eingestellten Abtastzeit wird geprüft, ob die Position des Mischers korrigiert werden muss.
5
+ </p>
6
+ <p>
7
+ Beim ersten Verwenden wird eine Kalibrierungsfahrt gestartet. D.h. der Mischer schließt für die eingestellte Laufzeit und befindet sich dann auf 0%.
8
+ Danach kann der Mischvorgang starten. Die zuletzt angefahrene Position wird persistent gespeichert, wodurch weitere Kalibrierungsfahrten in der Regel nicht mehr notwending sind.
9
+ </p>
10
+ <p>
11
+ <b>Hinweis:</b> Smart Nodes verwenden Topics im Format <code>name#nummer</code>, damit können verschiedene Smart Nodes mit dem gleichen Topic angesteuert werden.<br/>
12
+ Diese Node verwendet nur den Teil <code>name</code>. <code>#</code> und <code>nummer</code> sind dabei optional.
13
+ </p>
14
+ <p>
15
+ Folgende topics werden akzeptiert:
16
+ <table>
17
+ <thead>
18
+ <tr>
19
+ <th>Topic</th>
20
+ <th>Beschreibung</th>
21
+ </tr>
22
+ </thead>
23
+ <tbody>
24
+ <tr>
25
+ <td><code>enable</code></td>
26
+ <td>Aktiviert die Mischeransteuerung.</td>
27
+ </tr>
28
+ <tr>
29
+ <td><code>disable</code></td>
30
+ <td>Deaktiviert die Mischeransteuerung und fährt die Position an, die als Aus-Modus festgelegt ist.</td>
31
+ </tr>
32
+ <tr>
33
+ <td><code>set_state</code></td>
34
+ <td>Aktiviert das Weiterleiten, wenn <code>msg.payload = true</code> oder deaktiviert das Weiterleiten, wenn <code>msg.payload = false</code>.</td>
35
+ </tr>
36
+ <tr>
37
+ <td><code>setpoint</code></td>
38
+ <td>Überschreibt den Sollwert mit <code>msg.payload</code> °C.</td>
39
+ </tr>
40
+ <tr>
41
+ <td><code>off_mode</code></td>
42
+ <td>
43
+ Überschreibt den Aus-Modus mit <code>msg.payload</code>.
44
+ Gültige Werte für <code>msg.payload</code> sind <code>"NOTHING"</code>, <code>"OPEN"</code> und <code>"CLOSE"</code>.
45
+ </td>
46
+ </tr>
47
+ <tr>
48
+ <td><code>valve_mode</code></td>
49
+ <td>
50
+ Überschreibt den Modus mit <code>msg.payload</code>.
51
+ Gültige Werte für <code>msg.payload</code> sind <code>"HEATING"</code> und <code>"COOLING"</code>.
52
+ </td>
53
+ </tr>
54
+ <tr>
55
+ <td><code>current_temperature</code></td>
56
+ <td>Setzt die aktuelle Temperatur auf <code>msg.payload</code> °C.</td>
57
+ </tr>
58
+ <tr>
59
+ <td><code>calibrate</code></td>
60
+ <td>Erzwingt eine Kalibrierungsfahrt.</td>
61
+ </tr>
62
+ </tbody>
63
+ </table>
64
+ </p>
65
+ </script>
@@ -0,0 +1,19 @@
1
+ {
2
+ "mixing-valve": {
3
+ "ui": {
4
+ "name": "Name",
5
+ "enabled": "Aktiviert",
6
+ "setpoint": "Sollwert",
7
+ "runtime": "Laufzeit",
8
+ "sampling": "Abtastzeit",
9
+ "power_off": "Aus-Modus",
10
+ "mode": "Modus",
11
+
12
+ "nothing": "Nichts",
13
+ "open": "Öffnen (100%)",
14
+ "close": "Schließen (0%)",
15
+ "heating": "Heizen (normal)",
16
+ "cooling": "Kühlen (invertiert)"
17
+ }
18
+ }
19
+ }
@@ -0,0 +1,66 @@
1
+ <script type="text/html" data-help-name="smart_mixing-valve">
2
+ <p>
3
+ This node controls a heating mixer. This can be used for both heating and cooling.
4
+ After the set sampling time, a check is made to see whether the position of the mixer needs to be corrected.
5
+ </p>
6
+ <p>
7
+ When used for the first time, a calibration run is started. This means that the mixer closes for the set running time and is then at 0%.
8
+ The mixing process can then start. The last position reached is saved persistently, which means that further calibration runs are generally no longer necessary.
9
+ </p>
10
+ <p>
11
+ <b>Note:</b> Smart Nodes use topics in the format <code>name#number</code>, so that different Smart Nodes can be controlled with the same topic.<br />
12
+ This node only uses the <code>name</code> part. <code>#</code> and <code>number</code> are optional.
13
+ </p>
14
+ <p>
15
+ The following topics are accepted:
16
+ <table>
17
+ <thead>
18
+ <tr>
19
+ <th>Topic</th>
20
+ <th>Description</th>
21
+ </tr>
22
+ </thead>
23
+ <tbody>
24
+ <tr>
25
+ <td><code>enable</code></td>
26
+ <td>Activates the mixer control.</td>
27
+ </tr>
28
+ <tr>
29
+ <td><code>disable</code></td>
30
+ <td>Deactivates the mixer control and moves to the position that is set as the off mode.</td>
31
+ </tr>
32
+ <tr>
33
+ <td><code>set_state</code></td>
34
+ <td>Activates forwarding if <code>msg.payload = true</code> or deactivates forwarding if
35
+ <code>msg.payload = false</code>.</td>
36
+ </tr>
37
+ <tr>
38
+ <td><code>setpoint</code></td>
39
+ <td>Overrides the setpoint with <code>msg.payload</code> °C.</td>
40
+ </tr>
41
+ <tr>
42
+ <td><code>off_mode</code></td>
43
+ <td>
44
+ Overrides the off mode with <code>msg.payload</code>.
45
+ Valid values for <code>msg.payload</code> are <code>"NOTHING"</code>, <code>"OPEN"</code> and <code>"CLOSE"</code>.
46
+ </td>
47
+ </tr>
48
+ <tr>
49
+ <td><code>valve_mode</code></td>
50
+ <td>
51
+ Overrides the mode with <code>msg.payload</code>.
52
+ Valid values for <code>msg.payload</code> are <code>"HEATING"</code> and <code>"COOLING"</code>.
53
+ </td>
54
+ </tr>
55
+ <tr>
56
+ <td><code>current_temperature</code></td>
57
+ <td>Sets the current temperature to <code>msg.payload</code> °C.</td>
58
+ </tr>
59
+ <tr>
60
+ <td><code>calibrate</code></td>
61
+ <td>Forces a calibration run.</td>
62
+ </tr>
63
+ </tbody>
64
+ </table>
65
+ </p>
66
+ </script>
@@ -0,0 +1,19 @@
1
+ {
2
+ "mixing-valve": {
3
+ "ui": {
4
+ "name": "Name",
5
+ "enabled": "Enabled",
6
+ "setpoint": "Setpoint",
7
+ "runtime": "Runtime",
8
+ "sampling": "Sampling",
9
+ "power_off": "Off mode",
10
+ "mode": "Mode",
11
+
12
+ "nothing": "Nothing",
13
+ "open": "Open (100%)",
14
+ "close": "Close (0%)",
15
+ "heating": "Heating (normal)",
16
+ "cooling": "Cooling (inverted)"
17
+ }
18
+ }
19
+ }
@@ -22,6 +22,8 @@
22
22
  },
23
23
  oneditprepare: function ()
24
24
  {
25
+ let node = this;
26
+
25
27
  $("#node-input-setpoint")
26
28
  .spinner({
27
29
  min: -30,
@@ -63,28 +65,26 @@
63
65
  }).css("max-width", "4rem");
64
66
 
65
67
  $("#node-input-off_mode").typedInput({
66
- types: [
67
- {
68
- default: "NOTHING",
69
- options: [
70
- { value: "NOTHING", label: "Nichts" },
71
- { value: "OPEN", label: "Öffnen (100%)" },
72
- { value: "CLOSE", label: "Schließen (0%)" }
73
- ],
74
- },
75
- ],
68
+ types: [{
69
+ default: "NOTHING",
70
+ value: "off_mode",
71
+ options: [
72
+ { value: "NOTHING", label: node._("mixing-valve.ui.nothing") },
73
+ { value: "OPEN", label: node._("mixing-valve.ui.open") },
74
+ { value: "CLOSE", label: node._("mixing-valve.ui.close") }
75
+ ],
76
+ }],
76
77
  });
77
78
 
78
79
  $("#node-input-valve_mode").typedInput({
79
- types: [
80
- {
81
- default: "HEATING",
82
- options: [
83
- { value: "HEATING", label: "Heizen (normal)" },
84
- { value: "COOLING", label: "Kühlen (invertiert)" }
85
- ],
86
- },
87
- ],
80
+ types: [{
81
+ default: "HEATING",
82
+ value: "valve_mode",
83
+ options: [
84
+ { value: "HEATING", label: node._("mixing-valve.ui.heating") },
85
+ { value: "COOLING", label: node._("mixing-valve.ui.cooling") }
86
+ ],
87
+ }],
88
88
  });
89
89
  },
90
90
  });
@@ -92,97 +92,31 @@
92
92
 
93
93
  <script type="text/html" data-template-name="smart_mixing-valve">
94
94
  <div class="form-row">
95
- <label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
96
- <input type="text" id="node-input-name" placeholder="Name" />
95
+ <label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="mixing-valve.ui.name"></span></label>
96
+ <input type="text" id="node-input-name" data-i18n="[placeholder]mixing-valve.ui.name" />
97
97
  </div>
98
98
  <div class="form-row">
99
99
  <input type="checkbox" id="node-input-enabled" style="width: 20px;" />
100
- <span for="node-input-enabled" style="width: 200px;"> Aktiviert</span>
100
+ <span for="node-input-enabled" style="width: 200px;"> <span data-i18n="mixing-valve.ui.enabled"></span></span>
101
101
  </div>
102
102
  <div class="form-row">
103
- <label for="node-input-setpoint"><i class="fa fa-sliders"></i> Sollwert</label>
103
+ <label for="node-input-setpoint"><i class="fa fa-sliders"></i> <span data-i18n="mixing-valve.ui.setpoint"></span></label>
104
104
  <input id="node-input-setpoint" value="0" /> °C
105
105
  </div>
106
106
  <div class="form-row">
107
- <label for="node-input-time_total"><i class="fa fa-clock-o"></i> Laufzeit</label>
107
+ <label for="node-input-time_total"><i class="fa fa-clock-o"></i> <span data-i18n="mixing-valve.ui.runtime"></span></label>
108
108
  <input id="node-input-time_total" value="0" /> s
109
109
  </div>
110
110
  <div class="form-row">
111
- <label for="node-input-time_sampling"><i class="fa fa-clock-o"></i> Abtastzeit</label>
111
+ <label for="node-input-time_sampling"><i class="fa fa-clock-o"></i> <span data-i18n="mixing-valve.ui.sampling"></span></label>
112
112
  <input id="node-input-time_sampling" value="0" /> s
113
113
  </div>
114
114
  <div class="form-row">
115
- <label for="node-input-off_mode"><i class="fa fa-power-off"></i> Aus-Modus</label>
115
+ <label for="node-input-off_mode"><i class="fa fa-power-off"></i> <span data-i18n="mixing-valve.ui.power_off"></span></label>
116
116
  <input id="node-input-off_mode" />
117
117
  </div>
118
118
  <div class="form-row">
119
- <label for="node-input-valve_mode"><i class="fa fa-fire"></i> Modus</label>
119
+ <label for="node-input-valve_mode"><i class="fa fa-fire"></i> <span data-i18n="mixing-valve.ui.mode"></span></label>
120
120
  <input id="node-input-valve_mode" />
121
121
  </div>
122
- </script>
123
-
124
- <script type="text/html" data-help-name="smart_mixing-valve">
125
- <p>
126
- Diese Node steuert einen Heizungsmischer. Dieser kann sowohl fürs Heizen als auch fürs Kühlen verwendet werden.
127
- Nach der eingestellten Abtastzeit wird geprüft, ob die Position des Mischers korrigiert werden muss.
128
- </p>
129
- <p>
130
- Beim ersten Verwenden wird eine Kalibrierungsfahrt gestartet. D.h. der Mischer schließt für die eingestellte Laufzeit und befindet sich dann auf 0%.
131
- Danach kann der Mischvorgang starten. Die zuletzt angefahrene Position wird persistent gespeichert, wodurch weitere Kalibrierungsfahrten in der Regel nicht mehr notwending sind.
132
- </p>
133
- <p>
134
- <b>Hinweis:</b> Smart Nodes verwenden Topics im Format <code>name#nummer</code>, damit können verschiedene Smart Nodes mit dem gleichen Topic angesteuert werden.<br/>
135
- Diese Node verwendet nur den Teil <code>name</code>. <code>#</code> und <code>nummer</code> sind dabei optional.
136
- </p>
137
- <p>
138
- Folgende topics werden akzeptiert:
139
- <table>
140
- <thead>
141
- <tr>
142
- <th>Topic</th>
143
- <th>Beschreibung</th>
144
- </tr>
145
- </thead>
146
- <tbody>
147
- <tr>
148
- <td><code>enable</code></td>
149
- <td>Aktiviert die Mischeransteuerung.</td>
150
- </tr>
151
- <tr>
152
- <td><code>disable</code></td>
153
- <td>Deaktiviert die Mischeransteuerung und fährt die Position an, die als Aus-Modus festgelegt ist.</td>
154
- </tr>
155
- <tr>
156
- <td><code>set_state</code></td>
157
- <td>Aktiviert das Weiterleiten, wenn <code>msg.payload = true</code> oder deaktiviert das Weiterleiten, wenn <code>msg.payload = false</code>.</td>
158
- </tr>
159
- <tr>
160
- <td><code>setpoint</code></td>
161
- <td>Überschreibt den Sollwert mit <code>msg.payload</code> °C.</td>
162
- </tr>
163
- <tr>
164
- <td><code>off_mode</code></td>
165
- <td>
166
- Überschreibt den Aus-Modus mit <code>msg.payload</code>.
167
- Gültige Werte für <code>msg.payload</code> sind <code>"NOTHING"</code>, <code>"OPEN"</code> und <code>"CLOSE"</code>.
168
- </td>
169
- </tr>
170
- <tr>
171
- <td><code>valve_mode</code></td>
172
- <td>
173
- Überschreibt den Modus mit <code>msg.payload</code>.
174
- Gültige Werte für <code>msg.payload</code> sind <code>"HEATING"</code> und <code>"COOLING"</code>.
175
- </td>
176
- </tr>
177
- <tr>
178
- <td><code>current_temperature</code></td>
179
- <td>Setzt die aktuelle Temperatur auf <code>msg.payload</code> °C.</td>
180
- </tr>
181
- <tr>
182
- <td><code>calibrate</code></td>
183
- <td>Erzwingt eine Kalibrierungsfahrt.</td>
184
- </tr>
185
- </tbody>
186
- </table>
187
- </p>
188
122
  </script>