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.
- package/CHANGELOG.md +16 -0
- package/LICENSE +21 -0
- package/README.md +119 -0
- package/dist/lib/index.d.ts +4 -0
- package/dist/lib/index.js +17 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/s2/messages.d.ts +342 -0
- package/dist/lib/s2/messages.js +330 -0
- package/dist/lib/s2/messages.js.map +1 -0
- package/dist/lib/s2/schedule.d.ts +35 -0
- package/dist/lib/s2/schedule.js +109 -0
- package/dist/lib/s2/schedule.js.map +1 -0
- package/dist/lib/s2/session.d.ts +138 -0
- package/dist/lib/s2/session.js +304 -0
- package/dist/lib/s2/session.js.map +1 -0
- package/dist/lib/transport/websocket.d.ts +58 -0
- package/dist/lib/transport/websocket.js +149 -0
- package/dist/lib/transport/websocket.js.map +1 -0
- package/dist/nodes/s2-cem-config/index.d.ts +3 -0
- package/dist/nodes/s2-cem-config/index.html +54 -0
- package/dist/nodes/s2-cem-config/index.js +16 -0
- package/dist/nodes/s2-cem-config/index.js.map +1 -0
- package/dist/nodes/s2-rm/icons/s2-logo.svg +14 -0
- package/dist/nodes/s2-rm/index.d.ts +34 -0
- package/dist/nodes/s2-rm/index.html +167 -0
- package/dist/nodes/s2-rm/index.js +655 -0
- package/dist/nodes/s2-rm/index.js.map +1 -0
- package/dist/nodes/s2-rm-config/index.d.ts +3 -0
- package/dist/nodes/s2-rm-config/index.html +254 -0
- package/dist/nodes/s2-rm-config/index.js +20 -0
- package/dist/nodes/s2-rm-config/index.js.map +1 -0
- package/dist/nodes/s2-websocket/icons/s2-logo.svg +14 -0
- package/dist/nodes/s2-websocket/index.d.ts +22 -0
- package/dist/nodes/s2-websocket/index.html +83 -0
- package/dist/nodes/s2-websocket/index.js +127 -0
- package/dist/nodes/s2-websocket/index.js.map +1 -0
- package/dist/types/config-nodes.d.ts +39 -0
- package/dist/types/config-nodes.js +3 -0
- package/dist/types/config-nodes.js.map +1 -0
- 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,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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"}
|