node-red-contrib-s2 0.1.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.
Files changed (40) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/LICENSE +21 -0
  3. package/README.md +119 -0
  4. package/dist/lib/index.d.ts +4 -0
  5. package/dist/lib/index.js +17 -0
  6. package/dist/lib/index.js.map +1 -0
  7. package/dist/lib/s2/messages.d.ts +342 -0
  8. package/dist/lib/s2/messages.js +330 -0
  9. package/dist/lib/s2/messages.js.map +1 -0
  10. package/dist/lib/s2/schedule.d.ts +35 -0
  11. package/dist/lib/s2/schedule.js +109 -0
  12. package/dist/lib/s2/schedule.js.map +1 -0
  13. package/dist/lib/s2/session.d.ts +138 -0
  14. package/dist/lib/s2/session.js +304 -0
  15. package/dist/lib/s2/session.js.map +1 -0
  16. package/dist/lib/transport/websocket.d.ts +58 -0
  17. package/dist/lib/transport/websocket.js +149 -0
  18. package/dist/lib/transport/websocket.js.map +1 -0
  19. package/dist/nodes/s2-cem-config/index.d.ts +3 -0
  20. package/dist/nodes/s2-cem-config/index.html +54 -0
  21. package/dist/nodes/s2-cem-config/index.js +16 -0
  22. package/dist/nodes/s2-cem-config/index.js.map +1 -0
  23. package/dist/nodes/s2-rm/icons/s2-logo.svg +14 -0
  24. package/dist/nodes/s2-rm/index.d.ts +34 -0
  25. package/dist/nodes/s2-rm/index.html +167 -0
  26. package/dist/nodes/s2-rm/index.js +655 -0
  27. package/dist/nodes/s2-rm/index.js.map +1 -0
  28. package/dist/nodes/s2-rm-config/index.d.ts +3 -0
  29. package/dist/nodes/s2-rm-config/index.html +254 -0
  30. package/dist/nodes/s2-rm-config/index.js +20 -0
  31. package/dist/nodes/s2-rm-config/index.js.map +1 -0
  32. package/dist/nodes/s2-websocket/icons/s2-logo.svg +14 -0
  33. package/dist/nodes/s2-websocket/index.d.ts +22 -0
  34. package/dist/nodes/s2-websocket/index.html +83 -0
  35. package/dist/nodes/s2-websocket/index.js +127 -0
  36. package/dist/nodes/s2-websocket/index.js.map +1 -0
  37. package/dist/types/config-nodes.d.ts +39 -0
  38. package/dist/types/config-nodes.js +3 -0
  39. package/dist/types/config-nodes.js.map +1 -0
  40. package/package.json +84 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/nodes/s2-rm/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { NodeRedApp } from '../../types/node-red';
2
+ declare const _default: (RED: NodeRedApp) => void;
3
+ export = _default;
@@ -0,0 +1,254 @@
1
+ <script src="resources/node-red-contrib-s2/s2-common.js"></script>
2
+ <script type="text/javascript">
3
+ var GRID_CONNECTIONS = {
4
+ '1x16A': 3680,
5
+ '3x16A': 11040,
6
+ '3x25A': 17250,
7
+ '3x32A': 22080,
8
+ '3x40A': 27600,
9
+ '3x63A': 43470
10
+ }
11
+
12
+ RED.nodes.registerType('s2-rm-config', {
13
+ category: 'config',
14
+ defaults: {
15
+ name: { value: '' },
16
+ resourceId: { value: '' },
17
+ rmName: { value: 'RM: Virtual' },
18
+ roles: { value: 'ENERGY_CONSUMER' },
19
+ controlTypes: { value: 'OPERATION_MODE_BASED_CONTROL' },
20
+ serialNumber: { value: '' },
21
+ manufacturer: { value: 'Victron Energy' },
22
+ model: { value: 'Virtual RM' },
23
+ firmwareVersion: { value: '1.0.0' },
24
+ maxBatteryChargePower: { value: 0, validate: RED.validators.number() },
25
+ maxBatteryDischargePower: { value: 0, validate: RED.validators.number() },
26
+ gridConnection: { value: '' },
27
+ customMaxPowerW: { value: '' },
28
+ instructionPollIntervalMs: { value: 2000, validate: RED.validators.number() },
29
+ skipInstructionStatus: { value: false }
30
+ },
31
+ label: function () {
32
+ return this.name || this.rmName || 's2-rm-config'
33
+ },
34
+ oneditprepare: function () {
35
+ if (!this.resourceId) {
36
+ var id = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
37
+ var r = Math.random() * 16 | 0
38
+ return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16)
39
+ })
40
+ $('#node-config-input-resourceId').val(id)
41
+ }
42
+
43
+ var saved = ($('#node-config-input-controlTypes').val() || '').split(',').map(function (s) { return s.trim() })
44
+ $('.s2-rm-config-ct-checkbox').each(function () {
45
+ $(this).prop('checked', saved.indexOf($(this).val()) !== -1)
46
+ })
47
+
48
+ $('.s2-rm-config-ct-checkbox').on('change', function () {
49
+ if ($('.s2-rm-config-ct-checkbox:checked').length === 0) {
50
+ $(this).prop('checked', true)
51
+ }
52
+ })
53
+
54
+ var savedRoles = ($('#node-config-input-roles').val() || '').split(',').map(function (s) { return s.trim() })
55
+ $('.s2-rm-config-role-checkbox').each(function () {
56
+ $(this).prop('checked', savedRoles.indexOf($(this).val()) !== -1)
57
+ })
58
+
59
+ function updateBatteryLimitsVisibility () {
60
+ var hasStorage = $('.s2-rm-config-role-checkbox[value="ENERGY_STORAGE"]').is(':checked')
61
+ $('#s2-rm-config-battery-section').toggle(hasStorage)
62
+ }
63
+
64
+ $('.s2-rm-config-role-checkbox').on('change', function () {
65
+ if ($('.s2-rm-config-role-checkbox:checked').length === 0) {
66
+ $(this).prop('checked', true)
67
+ }
68
+ updateBatteryLimitsVisibility()
69
+ })
70
+
71
+ updateBatteryLimitsVisibility()
72
+
73
+ function updateCustomPowerVisibility () {
74
+ var val = $('#node-config-input-gridConnection').val()
75
+ $('#s2-rm-config-custom-power-row').toggle(val === 'custom')
76
+ }
77
+ $('#node-config-input-gridConnection').on('change', updateCustomPowerVisibility)
78
+ updateCustomPowerVisibility()
79
+
80
+ $('#node-config-input-skipInstructionStatus').prop('checked', this.skipInstructionStatus === true)
81
+
82
+ var DEFAULT_POLL_INTERVAL = 2000
83
+ var hasNonDefaultAdvanced = (this.instructionPollIntervalMs && this.instructionPollIntervalMs !== DEFAULT_POLL_INTERVAL) ||
84
+ this.skipInstructionStatus === true
85
+ if (hasNonDefaultAdvanced) {
86
+ $('#s2-rm-config-advanced-section').show()
87
+ $('#s2-rm-config-advanced-toggle .s2-advanced-chevron').removeClass('fa-chevron-down').addClass('fa-chevron-up')
88
+ }
89
+
90
+ $('#s2-rm-config-advanced-toggle').on('click', function (e) {
91
+ e.preventDefault()
92
+ var $section = $('#s2-rm-config-advanced-section')
93
+ $section.toggle()
94
+ $(this).find('.s2-advanced-chevron').toggleClass('fa-chevron-down fa-chevron-up')
95
+ })
96
+
97
+ window.__s2Common.initializeTooltips()
98
+ },
99
+ oneditsave: function () {
100
+ var checked = []
101
+ $('.s2-rm-config-ct-checkbox:checked').each(function () {
102
+ checked.push($(this).val())
103
+ })
104
+ $('#node-config-input-controlTypes').val(checked.join(','))
105
+
106
+ var checkedRoles = []
107
+ $('.s2-rm-config-role-checkbox:checked').each(function () {
108
+ checkedRoles.push($(this).val())
109
+ })
110
+ $('#node-config-input-roles').val(checkedRoles.join(','))
111
+ }
112
+ })
113
+ </script>
114
+
115
+ <script type="text/html" data-template-name="s2-rm-config">
116
+ <div class="s2-form">
117
+
118
+ <div class="form-row">
119
+ <label for="node-config-input-name"><i class="fa fa-tag"></i> Name</label>
120
+ <input type="text" id="node-config-input-name" placeholder="Name (optional)">
121
+ </div>
122
+
123
+ <div class="form-row">
124
+ <label for="node-config-input-rmName"><i class="fa fa-tag"></i> RM Name<i class="fa fa-info-circle tooltip-icon" data-tooltip="Human-readable name sent to the CEM in ResourceManagerDetails"></i></label>
125
+ <input type="text" id="node-config-input-rmName" placeholder="e.g. Victron Virtual RM">
126
+ </div>
127
+
128
+ <div class="form-row">
129
+ <label for="node-config-input-resourceId"><i class="fa fa-id-card"></i> Resource ID<i class="fa fa-info-circle tooltip-icon" data-tooltip="Stable UUID identifying this Resource Manager. Used in both the CEM URL and ResourceManagerDetails. Auto-generated on first use - do not change after deployment."></i></label>
130
+ <input type="text" id="node-config-input-resourceId" placeholder="Auto-generated UUID">
131
+ </div>
132
+
133
+ <div class="form-row">
134
+ <label class="s2-section-label"><i class="fa fa-bolt"></i> Roles<i class="fa fa-info-circle tooltip-icon" data-tooltip="Energy roles advertised to the CEM in ResourceManagerDetails. At least one must be selected."></i></label>
135
+ </div>
136
+ <div class="form-row s2-full-row">
137
+ <div class="s2-control-types-container">
138
+ <label class="s2-checkbox-label"><input type="checkbox" class="s2-rm-config-role-checkbox" value="ENERGY_CONSUMER"> Consumer <i class="fa fa-info-circle tooltip-icon" data-tooltip="Site consumes energy from the grid"></i></label>
139
+ <label class="s2-checkbox-label"><input type="checkbox" class="s2-rm-config-role-checkbox" value="ENERGY_PRODUCER"> Producer <i class="fa fa-info-circle tooltip-icon" data-tooltip="Site produces energy (battery, solar)"></i></label>
140
+ <label class="s2-checkbox-label"><input type="checkbox" class="s2-rm-config-role-checkbox" value="ENERGY_STORAGE"> Storage <i class="fa fa-info-circle tooltip-icon" data-tooltip="Site has energy storage (battery)"></i></label>
141
+ </div>
142
+ <input type="hidden" id="node-config-input-roles">
143
+ </div>
144
+
145
+ <div class="form-row">
146
+ <label class="s2-section-label"><i class="fa fa-sliders"></i> Control Types<i class="fa fa-info-circle tooltip-icon" data-tooltip="S2 control types advertised to the CEM in ResourceManagerDetails. At least one must be selected."></i></label>
147
+ </div>
148
+ <div class="form-row s2-full-row">
149
+ <div class="s2-control-types-container">
150
+ <label class="s2-checkbox-label"><input type="checkbox" class="s2-rm-config-ct-checkbox" value="OPERATION_MODE_BASED_CONTROL"> OMBC <i class="fa fa-info-circle tooltip-icon" data-tooltip="Operation Mode Based Control"></i></label>
151
+ <label class="s2-checkbox-label"><input type="checkbox" class="s2-rm-config-ct-checkbox" value="FILL_RATE_BASED_CONTROL"> FRBC <i class="fa fa-info-circle tooltip-icon" data-tooltip="Fill-rate Based Control"></i></label>
152
+ <label class="s2-checkbox-label"><input type="checkbox" class="s2-rm-config-ct-checkbox" value="DEMAND_DRIVEN_BASED_CONTROL"> DDBC <i class="fa fa-info-circle tooltip-icon" data-tooltip="Demand Driven Based Control"></i></label>
153
+ <label class="s2-checkbox-label"><input type="checkbox" class="s2-rm-config-ct-checkbox" value="POWER_PROFILE_BASED_CONTROL"> PPBC <i class="fa fa-info-circle tooltip-icon" data-tooltip="Power Profile Based Control"></i></label>
154
+ <label class="s2-checkbox-label"><input type="checkbox" class="s2-rm-config-ct-checkbox" value="POWER_ENVELOPE_BASED_CONTROL"> PEBC <i class="fa fa-info-circle tooltip-icon" data-tooltip="Power Envelope Based Control"></i></label>
155
+ <label class="s2-checkbox-label"><input type="checkbox" class="s2-rm-config-ct-checkbox" value="NOT_CONTROLABLE"> Not Ctrl <i class="fa fa-info-circle tooltip-icon" data-tooltip="Not Controllable - device cannot be controlled by the CEM"></i></label>
156
+ </div>
157
+ <input type="hidden" id="node-config-input-controlTypes">
158
+ </div>
159
+
160
+ <div class="form-row">
161
+ <label for="node-config-input-gridConnection"><i class="fa fa-plug"></i> Grid Fuse<i class="fa fa-info-circle tooltip-icon" data-tooltip="Fuse/breaker capacity at the grid connection point. Sets the outer PEBC power limits sent to the CEM as [-max, +max] watts."></i></label>
162
+ <select id="node-config-input-gridConnection">
163
+ <option value="">-- Not set --</option>
164
+ <option value="1x16A">1x16A (3.7 kW)</option>
165
+ <option value="3x16A">3x16A (11 kW)</option>
166
+ <option value="3x25A">3x25A (17.3 kW)</option>
167
+ <option value="3x32A">3x32A (22 kW)</option>
168
+ <option value="3x40A">3x40A (27.6 kW)</option>
169
+ <option value="3x63A">3x63A (43.5 kW)</option>
170
+ <option value="custom">Custom</option>
171
+ </select>
172
+ </div>
173
+
174
+ <div class="form-row" id="s2-rm-config-custom-power-row" style="display:none">
175
+ <label for="node-config-input-customMaxPowerW"><i class="fa fa-bolt"></i> Max Power (W)<i class="fa fa-info-circle tooltip-icon" data-tooltip="Maximum power in watts for a custom grid connection. Used as both import and export limit."></i></label>
176
+ <input type="number" id="node-config-input-customMaxPowerW" placeholder="e.g. 15000" min="1">
177
+ </div>
178
+
179
+ <div class="form-row">
180
+ <label for="node-config-input-manufacturer"><i class="fa fa-industry"></i> Manufacturer</label>
181
+ <input type="text" id="node-config-input-manufacturer" placeholder="e.g. Victron Energy">
182
+ </div>
183
+
184
+ <div class="form-row">
185
+ <label for="node-config-input-model"><i class="fa fa-cube"></i> Model</label>
186
+ <input type="text" id="node-config-input-model" placeholder="e.g. Virtual AC Load">
187
+ </div>
188
+
189
+ <div class="form-row">
190
+ <label for="node-config-input-serialNumber"><i class="fa fa-barcode"></i> Serial Number<i class="fa fa-info-circle tooltip-icon" data-tooltip="Serial number sent in ResourceManagerDetails. Supports context variables: {{global.vrmId}}, {{flow.siteId}}. Defaults to the node ID if empty."></i></label>
191
+ <input type="text" id="node-config-input-serialNumber" placeholder="e.g. {{global.vrmId}} or leave empty for node ID">
192
+ </div>
193
+
194
+ <div class="form-row">
195
+ <label for="node-config-input-firmwareVersion"><i class="fa fa-code-fork"></i> Firmware</label>
196
+ <input type="text" id="node-config-input-firmwareVersion" placeholder="e.g. 1.0.0">
197
+ </div>
198
+
199
+ <div id="s2-rm-config-battery-section">
200
+ <div class="form-row">
201
+ <label class="s2-section-label">
202
+ <i class="fa fa-battery-three-quarters"></i> Battery Limits
203
+ <i class="fa fa-info-circle tooltip-icon" data-tooltip="Hardware ceiling for battery power. CEM instructions are clamped to these values. Set to 0 for no limit."></i>
204
+ </label>
205
+ </div>
206
+
207
+ <div class="form-row s2-battery-row">
208
+ <label for="node-config-input-maxBatteryChargePower">
209
+ <i class="fa fa-arrow-circle-down"></i> Charge
210
+ <i class="fa fa-info-circle tooltip-icon" data-tooltip="Maximum battery charge power in Watts. Never exceeded when writing DESS limits."></i>
211
+ </label>
212
+ <input type="number" id="node-config-input-maxBatteryChargePower" placeholder="0 = no limit" min="0" step="1">
213
+ <span class="s2-unit-label">W</span>
214
+ </div>
215
+
216
+ <div class="form-row s2-battery-row">
217
+ <label for="node-config-input-maxBatteryDischargePower">
218
+ <i class="fa fa-arrow-circle-up"></i> Discharge
219
+ <i class="fa fa-info-circle tooltip-icon" data-tooltip="Maximum battery discharge power in Watts. Never exceeded when writing DESS limits."></i>
220
+ </label>
221
+ <input type="number" id="node-config-input-maxBatteryDischargePower" placeholder="0 = no limit" min="0" step="1">
222
+ <span class="s2-unit-label">W</span>
223
+ </div>
224
+ </div>
225
+
226
+ <div class="form-row">
227
+ <a href="#" class="s2-advanced-toggle" id="s2-rm-config-advanced-toggle">
228
+ <i class="fa fa-cog"></i> Advanced
229
+ <i class="fa fa-chevron-down s2-advanced-chevron"></i>
230
+ </a>
231
+ </div>
232
+
233
+ <div id="s2-rm-config-advanced-section" style="display:none">
234
+ <div class="form-row s2-advanced-row">
235
+ <label for="node-config-input-instructionPollIntervalMs">
236
+ <i class="fa fa-clock-o"></i> Poll interval
237
+ <i class="fa fa-info-circle tooltip-icon" data-tooltip="How often (ms) the RM checks for pending future instructions that are now due. Default: 2000."></i>
238
+ </label>
239
+ <input type="number" id="node-config-input-instructionPollIntervalMs" placeholder="2000" min="100" step="100">
240
+ <span class="s2-unit-label">ms</span>
241
+ </div>
242
+ <div class="form-row s2-full-row">
243
+ <label class="s2-checkbox-label">
244
+ <input type="checkbox" id="node-config-input-skipInstructionStatus">
245
+ Skip instruction status updates
246
+ <i class="fa fa-info-circle tooltip-icon" data-tooltip="When enabled, InstructionStatusUpdate(ACCEPTED/STARTED) messages are not sent automatically. ReceptionStatus and OMBC.Status are still sent. Use when the CEM generates high CPU load from frequent instructions." style="position:static;transform:none;"></i>
247
+ </label>
248
+ </div>
249
+ </div>
250
+
251
+ </div>
252
+ </script>
253
+
254
+ <link rel="stylesheet" href="resources/node-red-contrib-s2/s2-styles.css">
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ module.exports = function (RED) {
3
+ function S2RmConfigNodeConstructor(config) {
4
+ RED.nodes.createNode(this, config);
5
+ this.resourceId = config.resourceId;
6
+ this.rmName = config.rmName;
7
+ this.roles = config.roles;
8
+ this.serialNumber = config.serialNumber;
9
+ this.manufacturer = config.manufacturer;
10
+ this.model = config.model;
11
+ this.firmwareVersion = config.firmwareVersion;
12
+ this.controlTypes = config.controlTypes;
13
+ this.gridConnection = config.gridConnection;
14
+ this.customMaxPowerW = config.customMaxPowerW != null ? Number(config.customMaxPowerW) : undefined;
15
+ this.instructionPollIntervalMs = config.instructionPollIntervalMs != null ? Number(config.instructionPollIntervalMs) : 2000;
16
+ this.skipInstructionStatus = config.skipInstructionStatus === true;
17
+ }
18
+ RED.nodes.registerType('s2-rm-config', S2RmConfigNodeConstructor);
19
+ };
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/nodes/s2-rm-config/index.ts"],"names":[],"mappings":";AAGA,iBAAS,UAAU,GAAe;IAChC,SAAS,yBAAyB,CAAwB,MAAkB;QAC1E,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAClC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAoB,CAAA;QAC7C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAgB,CAAA;QACrC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAe,CAAA;QACnC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAsB,CAAA;QACjD,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAsB,CAAA;QACjD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAe,CAAA;QACnC,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAyB,CAAA;QACvD,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAsB,CAAA;QACjD,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAwB,CAAA;QACrD,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAClG,IAAI,CAAC,yBAAyB,GAAG,MAAM,CAAC,yBAAyB,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAC3H,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,KAAK,IAAI,CAAA;IACpE,CAAC;IAED,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,cAAc,EAAE,yBAAyB,CAAC,CAAA;AACnE,CAAC,CAAA"}
@@ -0,0 +1,14 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1042 1042" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
2
+ <g transform="matrix(1,0,0,1,-312,-142)">
3
+ <g transform="matrix(1038.75,-1038.75,-1038.75,-1038.75,314.531,1181.19)">
4
+ <path d="M0.75,0.251C0.739,0.262 0.727,0.272 0.715,0.281C0.708,0.286 0.701,0.291 0.694,0.296C0.65,0.325 0.6,0.344 0.549,0.351C0.516,0.356 0.482,0.356 0.449,0.351C0.398,0.344 0.348,0.325 0.303,0.296C0.284,0.283 0.265,0.268 0.248,0.251C0.22,0.223 0.22,0.178 0.248,0.15C0.276,0.123 0.321,0.123 0.348,0.15C0.366,0.168 0.386,0.182 0.407,0.192C0.465,0.22 0.533,0.22 0.591,0.192C0.612,0.182 0.632,0.168 0.649,0.15L0.758,0.042C0.773,0.027 0.789,0.015 0.806,0.006C0.821,-0.003 0.837,-0.009 0.853,-0.013C0.902,-0.026 0.954,-0.022 1,-0L0.75,0.251ZM0.525,0.115C0.499,0.112 0.482,0.097 0.474,0.088C0.465,0.078 0.466,0.062 0.477,0.052C0.487,0.043 0.503,0.044 0.513,0.054C0.515,0.057 0.521,0.063 0.531,0.064C0.541,0.065 0.551,0.061 0.557,0.052C0.564,0.042 0.564,0.026 0.556,0.016C0.549,0.008 0.538,0.006 0.535,0.005L0.33,-0.014L0.447,-0.132C0.457,-0.142 0.474,-0.142 0.483,-0.132C0.493,-0.122 0.493,-0.106 0.483,-0.096L0.443,-0.055L0.541,-0.045C0.551,-0.044 0.577,-0.039 0.596,-0.015C0.618,0.013 0.619,0.052 0.599,0.081C0.596,0.085 0.593,0.089 0.59,0.092C0.573,0.109 0.549,0.118 0.525,0.115ZM0.649,-0.15C0.632,-0.168 0.612,-0.182 0.591,-0.192C0.533,-0.22 0.465,-0.22 0.407,-0.192C0.386,-0.182 0.366,-0.168 0.348,-0.15L0.24,-0.042C0.225,-0.027 0.209,-0.015 0.192,-0.006C0.177,0.003 0.161,0.009 0.145,0.013C0.096,0.026 0.044,0.022 -0.003,0L0.248,-0.251C0.259,-0.262 0.271,-0.272 0.282,-0.281C0.289,-0.286 0.296,-0.291 0.303,-0.296C0.348,-0.325 0.398,-0.344 0.449,-0.351C0.482,-0.356 0.516,-0.356 0.549,-0.351C0.6,-0.344 0.65,-0.325 0.694,-0.296C0.714,-0.283 0.732,-0.268 0.75,-0.251C0.777,-0.223 0.777,-0.178 0.75,-0.15C0.722,-0.123 0.677,-0.123 0.649,-0.15Z" style="fill:url(#s2logo-gradient);fill-rule:nonzero;"/>
5
+ </g>
6
+ </g>
7
+ <defs>
8
+ <linearGradient id="s2logo-gradient" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1,0,0,-1,0,3.73045e-07)">
9
+ <stop offset="0" style="stop-color:rgb(45,19,75);stop-opacity:1"/>
10
+ <stop offset="0.37" style="stop-color:rgb(25,38,101);stop-opacity:1"/>
11
+ <stop offset="1" style="stop-color:rgb(17,88,163);stop-opacity:1"/>
12
+ </linearGradient>
13
+ </defs>
14
+ </svg>
@@ -0,0 +1,22 @@
1
+ import { NodeRedApp } from '../../types/node-red';
2
+ /**
3
+ * s2-websocket node - WebSocket transport for S2 protocol
4
+ *
5
+ * Acts as a drop-in transport replacement for the victron-virtual acload node.
6
+ * The RM dials out to a CEM via WebSocket; the s2-rm node handles the S2 protocol.
7
+ *
8
+ * Wiring:
9
+ * [s2-rm port 1] -> [s2-websocket input] (s2Signal messages to send to CEM)
10
+ * [s2-websocket output] -> [s2-rm input] (commands from CEM)
11
+ *
12
+ * Input (from s2-rm port 1):
13
+ * { payload: { s2Signal: 'Message', message: <S2 object> }, cemId }
14
+ * { payload: { s2Signal: 'PowerMeasurementStart', ... }, cemId } (acknowledged, no WS action)
15
+ *
16
+ * Output (to s2-rm input):
17
+ * { payload: { command: 'Connect', cemId: 'cem', keepAliveInterval: 0 } }
18
+ * { payload: { command: 'Message', cemId: 'cem', message: '<raw JSON>' } }
19
+ * { payload: { command: 'Disconnect', cemId: 'cem' } }
20
+ */
21
+ declare const _default: (RED: NodeRedApp) => void;
22
+ export = _default;
@@ -0,0 +1,83 @@
1
+ <script src="resources/node-red-contrib-s2/s2-common.js"></script>
2
+ <script type="text/javascript">
3
+ RED.nodes.registerType('s2-websocket', {
4
+ category: 's2',
5
+ color: '#5A8EC2',
6
+ defaults: {
7
+ name: { value: '' },
8
+ cem: { value: '', type: 's2-cem-config', required: true },
9
+ rmConfig: { value: '', type: 's2-rm-config', required: true },
10
+ reconnectInterval: { value: 5 },
11
+ debug: { value: false }
12
+ },
13
+ inputs: 1,
14
+ outputs: 1,
15
+ icon: 's2-logo.svg',
16
+ outputLabels: ['to s2-rm'],
17
+ inputLabels: ['from s2-rm'],
18
+ label: function () {
19
+ return this.name || 's2-websocket'
20
+ },
21
+ labelStyle: function () {
22
+ return this.name ? 'node_label_italic' : ''
23
+ },
24
+ oneditprepare: function () {
25
+ window.__s2Common.initializeTooltips()
26
+ }
27
+ })
28
+ </script>
29
+
30
+ <script type="text/html" data-template-name="s2-websocket">
31
+ <div class="s2-form">
32
+
33
+ <div class="form-row">
34
+ <label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
35
+ <input type="text" id="node-input-name" placeholder="Name (optional)">
36
+ </div>
37
+
38
+ <div class="form-row">
39
+ <label for="node-input-cem"><i class="fa fa-globe"></i> CEM<i class="fa fa-info-circle tooltip-icon" data-tooltip="CEM connection: URL template and credentials"></i></label>
40
+ <input type="text" id="node-input-cem">
41
+ </div>
42
+
43
+ <div class="form-row">
44
+ <label for="node-input-rmConfig"><i class="fa fa-id-card"></i> RM Config<i class="fa fa-info-circle tooltip-icon" data-tooltip="Resource Manager identity: UUID (used in the CEM URL), name, control types. Must match the s2-rm node."></i></label>
45
+ <input type="text" id="node-input-rmConfig">
46
+ </div>
47
+
48
+ <div class="form-row">
49
+ <label for="node-input-reconnectInterval"><i class="fa fa-refresh"></i> Reconnect (s)<i class="fa fa-info-circle tooltip-icon" data-tooltip="Seconds to wait before reconnecting after a lost connection"></i></label>
50
+ <input type="number" id="node-input-reconnectInterval" min="1" max="300">
51
+ </div>
52
+
53
+ <div class="form-row">
54
+ <label for="node-input-debug"><i class="fa fa-bug"></i> Debug</label>
55
+ <input type="checkbox" id="node-input-debug" style="width: auto; margin-top: 6px;">
56
+ <span style="margin-left: 6px;">Log messages to Node-RED log</span>
57
+ </div>
58
+
59
+ </div>
60
+ </script>
61
+
62
+ <link rel="stylesheet" href="resources/node-red-contrib-s2/s2-styles.css">
63
+
64
+ <script type="text/html" data-help-name="s2-websocket">
65
+ <p>WebSocket transport for S2 protocol. The RM dials out to a CEM and speaks the same command interface as the victron-virtual acload node.</p>
66
+ <p>Wire port 1 of the paired <b>s2-rm</b> node to the input of this node, and the output of this node to the input of <b>s2-rm</b>.</p>
67
+ <p>Both this node and <b>s2-rm</b> must reference the same <b>s2-rm-config</b> node so the Resource ID is consistent between the URL and ResourceManagerDetails.</p>
68
+ <h3>Input</h3>
69
+ <dl class="message-properties">
70
+ <dt>payload.s2Signal <span class="property-type">string</span></dt>
71
+ <dd><code>Message</code> - serialise and send the S2 message object to the CEM.<br>
72
+ <code>PowerMeasurementStart</code> - acknowledged, no WebSocket action.</dd>
73
+ </dl>
74
+ <h3>Output</h3>
75
+ <dl class="message-properties">
76
+ <dt>payload.command <span class="property-type">string</span></dt>
77
+ <dd><code>Connect</code> when the WebSocket opens.<br>
78
+ <code>Message</code> when the CEM sends a message (raw JSON string in <code>payload.message</code>).<br>
79
+ <code>Disconnect</code> when the WebSocket closes.</dd>
80
+ <dt>payload.cemId <span class="property-type">string</span></dt>
81
+ <dd>Always <code>"cem"</code> - identifies the single CEM this node connects to.</dd>
82
+ </dl>
83
+ </script>
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ const websocket_1 = require("../../lib/transport/websocket");
3
+ module.exports = function (RED) {
4
+ function S2WebSocketNode(config) {
5
+ RED.nodes.createNode(this, config);
6
+ const node = this;
7
+ const cemConfig = RED.nodes.getNode(config.cem);
8
+ if (!cemConfig) {
9
+ node.status({ fill: 'red', shape: 'dot', text: 'CEM config missing' });
10
+ return;
11
+ }
12
+ const rmConfig = RED.nodes.getNode(config.rmConfig);
13
+ if (!rmConfig) {
14
+ node.status({ fill: 'red', shape: 'dot', text: 'RM config missing' });
15
+ return;
16
+ }
17
+ // Substitute {resourceId} in the URL template, or append the UUID if no placeholder is present
18
+ const resourceId = rmConfig.resourceId || '';
19
+ const url = cemConfig.url.includes('{resourceId}')
20
+ ? cemConfig.url.replace('{resourceId}', resourceId)
21
+ : (cemConfig.url.endsWith('/') ? cemConfig.url : cemConfig.url + '/') + resourceId;
22
+ // Build Basic auth header if credentials are configured
23
+ const { username, password } = cemConfig.credentials || {};
24
+ const headers = (username || password)
25
+ ? { Authorization: 'Basic ' + Buffer.from(`${username || ''}:${password || ''}`).toString('base64') }
26
+ : undefined;
27
+ const reconnectIntervalMs = (config.reconnectInterval || 5) * 1000;
28
+ const transport = new websocket_1.S2WebSocketTransport({ url, reconnectInterval: reconnectIntervalMs, headers });
29
+ // cemId used in all commands emitted to s2-rm (fixed; only one CEM per node)
30
+ const CEM_ID = 'cem';
31
+ let hasConnected = false;
32
+ node.log(`[s2-websocket] connecting to ${url} (auth: ${headers ? 'Basic' : 'none'}, resourceId: ${resourceId || '(empty)'})`);
33
+ node.status({ fill: 'yellow', shape: 'ring', text: 'connecting...' });
34
+ transport.on('open', () => {
35
+ hasConnected = true;
36
+ node.log(`[s2-websocket] connected to ${url}`);
37
+ node.status({ fill: 'green', shape: 'ring', text: 'connected' });
38
+ node.send({ payload: { command: 'Connect', cemId: CEM_ID, keepAliveInterval: 0 } });
39
+ });
40
+ transport.on('activity', (lastContact) => {
41
+ const timeStr = lastContact.toLocaleTimeString();
42
+ node.status({ fill: 'green', shape: 'dot', text: `connected (${timeStr})` });
43
+ });
44
+ transport.on('message', (raw) => {
45
+ if (config.debug)
46
+ node.log(`[s2-websocket] <- ${raw}`);
47
+ node.send({ payload: { command: 'Message', cemId: CEM_ID, message: raw } });
48
+ });
49
+ transport.on('close', () => {
50
+ node.send({ payload: { command: 'Disconnect', cemId: CEM_ID } });
51
+ const reconnectSec = (config.reconnectInterval || 5);
52
+ if (hasConnected) {
53
+ node.log(`[s2-websocket] disconnected - reconnecting in ${reconnectSec}s`);
54
+ node.status({ fill: 'yellow', shape: 'ring', text: 'reconnecting...' });
55
+ }
56
+ else {
57
+ node.status({ fill: 'red', shape: 'ring', text: 'disconnected' });
58
+ }
59
+ });
60
+ transport.on('error', (err) => {
61
+ node.error(`[s2-websocket] WebSocket error: ${err.message} (url: ${url})`);
62
+ });
63
+ node.on('input', (msg, _send, done) => {
64
+ // Lifecycle control via msg.connection
65
+ if (msg.connection === 'Reconnect') {
66
+ node.log('[s2-websocket] manual reconnect triggered');
67
+ transport.disconnect();
68
+ transport.connect();
69
+ done();
70
+ return;
71
+ }
72
+ else if (msg.connection === 'Disconnect') {
73
+ node.log('[s2-websocket] manual disconnect triggered');
74
+ transport.disconnect();
75
+ done();
76
+ return;
77
+ }
78
+ else if (msg.connection === 'Connect') {
79
+ node.log('[s2-websocket] manual connect triggered');
80
+ transport.connect();
81
+ done();
82
+ return;
83
+ }
84
+ if (!msg.payload || typeof msg.payload !== 'object') {
85
+ done();
86
+ return;
87
+ }
88
+ const { s2Signal, message } = msg.payload;
89
+ switch (s2Signal) {
90
+ case 'Message': {
91
+ if (!message) {
92
+ done(new Error('s2Signal Message received without a message object'));
93
+ return;
94
+ }
95
+ const raw = JSON.stringify(message);
96
+ if (config.debug)
97
+ node.log(`[s2-websocket] -> ${raw}`);
98
+ try {
99
+ transport.send(raw);
100
+ }
101
+ catch (err) {
102
+ node.warn(`[s2-websocket] send failed (not connected?): ${err.message}`);
103
+ }
104
+ done();
105
+ break;
106
+ }
107
+ case 'PowerMeasurementStart':
108
+ // No WebSocket action - s2-rm will send measurements via Message signals
109
+ if (config.debug)
110
+ node.log('[s2-websocket] PowerMeasurementStart acknowledged');
111
+ done();
112
+ break;
113
+ default:
114
+ // Unknown or missing signal - pass through silently
115
+ done();
116
+ }
117
+ });
118
+ transport.connect();
119
+ node.on('close', (done) => {
120
+ transport.disconnect();
121
+ node.status({});
122
+ done();
123
+ });
124
+ }
125
+ RED.nodes.registerType('s2-websocket', S2WebSocketNode);
126
+ };
127
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/nodes/s2-websocket/index.ts"],"names":[],"mappings":"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"}