Project

Algemeen

Profiel

Ess » Geschiedenis » Versie 16

Micha Kersloot, 03-11-2023 18:51

1 1 Micha Kersloot
h1. Ess
2
3 4 Micha Kersloot
{{>toc}}
4
5 11 Micha Kersloot
Gathered info about the Victron Dynamic ESS algorithm
6
7
* The algorithm does consider tomorrow's prices, consumption and PV yield estimates (from the moment tomorrow's prices are published). This is not expressed visually on the graphs because Node-RED implementation is only a proof-of-concept :). But the documentation perhaps should reflect this fact to make it clear.
8
* It seems you have understood the reason behind why the discharge is always happening: because it is still profitable to do so since it is energy that is present in the battery. It is important to note that the algorithm only works with the future, so what happens in the past (the price at which it charged) is irrelevant because the algorithm only sees it as the available energy in the battery at a given moment.
9
* The partial charge that happens at 13 when the b_cost is below 0.04 is because it only considers the PV-yield as the profitable energy at that time. Looking at the buy/sell prices of the installation, it is hardly ever profitable to do energy trading using the grid since buy price is greatly higher than the sell price. But PV yield is 'free' in that way. And the reason why the charge/discharge (at 13 and evening) does not happen with prices above 0.05 is because the battery costs of that operation outweighs the earnings you would get from selling it to the grid.
10
* The reason why the controls do not reflect what you see on the graph is because the system is trying to be conservative with allowing the battery to be idle. Since the forecasts for both consumption and solar yield can be inaccurate and the battery costs are a factor to consider, we have seen that it is best to disallow the battery to be non-idle when its planned usage is below 10% of its charge/discharge capabilities.
11
* For the hours 1 and 2, the planned battery discharge was below 0.3 (10% of the FB_max) looking at the screenshot you have provided in the original post. In this case the battery is set to be idle in order to be conservative with its usage. But for the hour 3, the planned discharge was above 0.3 hence the battery was not idle (as you can see from the screenshot you posted the last) It is important to note that the decision-making with regards to this conservative usage is made based on the forecasts not what happens in reality in that hour: for hour 2 the usage was actually above 0.3 while for hour 3 it was the opposite.
12 12 Micha Kersloot
* For instance, for the first installation screenshots you have provided, the reason why it charges at 11 is because it expects
13
consumption of around 4 kWh in the hours after and the FG_max is 3.5 kWh, meaning there is a need for battery to meet that 1 kWh in those hours. Hence it plans to discharge till 14. After 14 it starts charging at a high rate because the prices are the lowest at that time. It continues charging till 17, to be ready to meet the consumption needs in the evening where the prices will be more expensive. And then it discharges.
14
  In doing these it never aims to charge fully, because that is not necessarily the most cost-effective way to go according to the algorithm. I hope this provides more context as to how the algorithm functions, if you have any more questions feel free to ask.
15 15 Micha Kersloot
* There are two minSoc settings, one of them is set via the RemoteConsole in the ESS part, the otherone can be synced with the followin flow:
16
  <pre>
17
[{"id":"fbce6d35fe3e1aa8","type":"victron-input-custom","z":"b9bfd7d55fb5c6e4","service":"com.victronenergy.settings","path":"/Settings/CGwacs/BatteryLife/MinimumSocLimit","serviceObj":{"service":"com.victronenergy.settings","name":"com.victronenergy.settings"},"pathObj":{"path":"/Settings/CGwacs/BatteryLife/MinimumSocLimit","name":"/Settings/CGwacs/BatteryLife/MinimumSocLimit","type":"number"},"name":"","onlyChanges":false,"x":410,"y":720,"wires":[["e25f1acc1d3799b5"]]},{"id":"e25f1acc1d3799b5","type":"victron-output-custom","z":"b9bfd7d55fb5c6e4","service":"com.victronenergy.settings","path":"/Settings/DynamicEss/MinSoc","serviceObj":{"service":"com.victronenergy.settings","name":"com.victronenergy.settings"},"pathObj":{"path":"/Settings/DynamicEss/MinSoc","name":"/Settings/DynamicEss/MinSoc","type":"number"},"name":"","onlyChanges":false,"x":1000,"y":720,"wires":[]}] </pre>
18 11 Micha Kersloot
19 16 Micha Kersloot
https://github.com/victronenergy/dynamic-ess
20
21 9 Micha Kersloot
h1. EasySolar II
22 1 Micha Kersloot
23 10 Micha Kersloot
ESS #1 means low SOC
24
25 9 Micha Kersloot
h2. Multiplus II
26 1 Micha Kersloot
27 9 Micha Kersloot
{{collapse(Configuration)
28 1 Micha Kersloot
<pre>
29
TAB: GeneralSystem frequency	50Hz
30
31
Shore current	19.0	A
32
Overruled by remote	checked
33
Dynamic current limiter	unchecked
34
External current sensor connected (see manual)	unchecked
35
State of charge when Bulk finished	95.0	%
36
Battery capacity	200	Ah
37
Charge efficiency	0.95	TAB: Grid
38
Country / grid code standard	Germany:             VDE-AR-N 4105:2018-11, internal NS protection
39
40
AC input 1	Above selected gridcode plus LOM B (compliant)
41
rise-in-voltage protection U>	253.0	V
42
start network service HF treshold	50.20	Hz
43
P(f>) droop	5.00	%
44
Use Aux1 as disable FeedIn signal	checked
45
Maximum AC current for charge or feed in	100.0	%
46
Reactive power regulation	Use a fixed Cos Phi
47
Filter time for reactive power	3.3	s
48
Cos phi at point 1	1.00	TAB: Inverter
49
PowerAssist	unchecked
50
51
Inverter output voltage	230	V
52
Inverter DC shut-down voltage	44.00	V
53
Inverter DC restart voltage	48.00	V
54
Low DC alarm level	48.00	V
55
Do not restart after short-circuit (VDE 2510-2  safety)	unchecked
56
enable AES	uncheckedTAB: Charger
57
Enable charger	checked
58
59
Weak AC input	unchecked
60
Stop after excessive bulk	unchecked
61
Lithium batteries	checked
62
Disable VSense (for diagnostic purposes)	unchecked
63
Configured for VE.Bus BMS	unchecked
64
Charge curve	Fixed
65
Absorption voltage	52.00	V
66
Float voltage	51.00	V
67
Charge current	70	A
68
Repeated absorption time	1.00	Hr
69
Repeated absorption interval	7.00	Days
70
Absorption time	1	HrTAB: Virtual switch
71
TAB: Usage
72
Virtual switch usage	Do not use VS
73
TAB: Assistants
74
TAB: Assistant Configuration
75
ESS (Energy Storage System) (size:978)
76
77
*)	System uses LiFePo4 with other type BMS
78
	(This can be either a BMS connected via CAN bus or a BMS system in which the 
79
	batteries are protected from high/low cell voltages by external equipment.)
80
*)	The battery capacity of the system is 200 Ah.
81
*)	Sustain voltage 48.00 V.
82
*)	Cut off voltage for a discharge current of:
83
	0.005 C= 46.00 V
84
	0.25 C= 46.00 V
85
	0.7 C= 46.00 V
86
	2 C= 46.00 V
87
*)	Inverting is allowed again when voltage rises 1.20 V above cut-off(0).
88
*)	Relevant VEConfigure settings:
89
	  -  Battery capacity 200 Ah.
90
	  -  PowerAssist unchecked
91
	  -  Lithium batteries checked
92
	  -  Dynamic current limiter unchecked
93
	  -  Storage mode unchecked
94
95
96
Total size of all assistants including the required
97
(hidden) system assistants is: 1037
98
</pre>
99 9 Micha Kersloot
}}
100 2 Micha Kersloot
101 9 Micha Kersloot
h2. GX device
102 3 Micha Kersloot
103 1 Micha Kersloot
seems to be an : Allwinner sun8i Family
104
105 13 Micha Kersloot
Use the firmware 'large' to have access to MQTT and Node-Red.
106
107 2 Micha Kersloot
https://www.victronenergy.com/live/ccgx:root_access
108
109 9 Micha Kersloot
h3. ESPhome grid meter
110
111 5 Micha Kersloot
Using the the following extra software on the GX device to enable mqtt devices to connect to the victron GX and be used as a grid meter:
112 1 Micha Kersloot
https://github.com/freakent/dbus-mqtt-devices
113 5 Micha Kersloot
114
Using the following ESPHome alternate P1 meter configuration to send P1 data to the GX device AND to home assistant:
115 1 Micha Kersloot
116 8 Micha Kersloot
after updating the firmware you seem to need to run the setup.sh script again.
117
118 1 Micha Kersloot
[[esphome p1meter victron version]]
119
120 9 Micha Kersloot
h3. GX to Home Assistant
121 1 Micha Kersloot
122 6 Micha Kersloot
To get information from the GX device into home assistant you can use the following HACS addon: https://github.com/sfstar/hass-victron
123
124
To get the battery input/output into the energy dashboard you need to split the sensor.victron_system_battery_power into two values with template sensors and add two cummulative entries with the integration platform.
125
126 9 Micha Kersloot
{{collapse(configuration.yml)
127 5 Micha Kersloot
<pre>
128
sensor:
129
    #total battery input energy (cummulate)
130
  - platform: integration
131
    source: sensor.battery_power_input
132
    name: battery_input_energy
133
    unit_prefix: k
134
    method: left
135
    round: 3
136
    #total battery output energy (cummulate)
137
  - platform: integration
138
    source: sensor.battery_power_output
139
    name: battery_output_energy
140
    unit_prefix: k
141
    method: left
142
    round: 3
143 1 Micha Kersloot
144 5 Micha Kersloot
----
145 6 Micha Kersloot
146 5 Micha Kersloot
template:
147
  -  sensor:
148
      - name: "Battery power input"
149
        unique_id: sensor.battery_power_input
150
        device_class: power
151
        unit_of_measurement: "W"
152
        state: >
153
          {% if states('sensor.victron_system_battery_power')|float >= 0 %}
154
            {{ states('sensor.victron_system_battery_power') }}
155
          {% else %}
156
            0
157
          {% endif %}
158
      - name: "Battery power output"
159
        unique_id: sensor.battery_power_output
160
        device_class: power
161
        unit_of_measurement: "W"
162
        state: >
163
          {% if states('sensor.victron_system_battery_power')|float < 0 %}
164 1 Micha Kersloot
            {{ -1 * states('sensor.victron_system_battery_power')|float }}
165
          {% else %}
166 5 Micha Kersloot
            0
167
          {% endif %}
168
</pre>
169 15 Micha Kersloot
}}
170
171
You can also have some custom information send from the node-red on the Victron to HomeAssistant via MQTT. For example the next hour Dynamic ESS settings from the example Victron Dynamic ESS flow:
172
173
{{collapse(node-red to home assistant)
174
<pre>
175
[
176
    {
177
        "id": "f6a390514e3f0ea4",
178
        "type": "group",
179
        "z": "8485b31dfd6cf218",
180
        "name": "Mqtt to homeassistant",
181
        "style": {
182
            "label": true
183
        },
184
        "nodes": [
185
            "b93ec3f456b21822",
186
            "620695652a7b0937",
187
            "dd5652e35252cbc0",
188
            "2defeaa9be426e30",
189
            "417c4290a42df793",
190
            "144d942f04400e1c",
191
            "5d47ef5e5ee4b48f",
192
            "4caabeeeb71ad863",
193
            "ec7782b7a0b07bdd"
194
        ],
195
        "x": 1114,
196
        "y": 59,
197
        "w": 536,
198
        "h": 456
199
    },
200
    {
201
        "id": "b93ec3f456b21822",
202
        "type": "inject",
203
        "z": "8485b31dfd6cf218",
204
        "g": "f6a390514e3f0ea4",
205
        "name": "Inject CurrentHSoc",
206
        "props": [
207
            {
208
                "p": "payload"
209
            },
210
            {
211
                "p": "topic",
212
                "vt": "str"
213
            }
214
        ],
215
        "repeat": "",
216
        "crontab": "",
217
        "once": false,
218
        "onceDelay": 0.1,
219
        "topic": "homeassistant/sensor/E0D0E0_currentHsoc/config",
220
        "payload": "{\"state_topic\":\"homeassistant/sensor/E0D0E0_currentHsoc/state\",\"unit_of_measurement\":\"%\",\"unique_id\":\"E0D0E0_currentHsoc\",\"name\":\"Dynamic ESS Current Hour SOC\",\"device\":{\"identifiers\":[\"dyness_E0D0E0\"],\"name\":\"Dynamic ESS\"}}",
221
        "payloadType": "json",
222
        "x": 1250,
223
        "y": 100,
224
        "wires": [
225
            [
226
                "620695652a7b0937"
227
            ]
228
        ]
229
    },
230
    {
231
        "id": "620695652a7b0937",
232
        "type": "mqtt out",
233
        "z": "8485b31dfd6cf218",
234
        "g": "f6a390514e3f0ea4",
235
        "name": "Home assistant",
236
        "topic": "",
237
        "qos": "",
238
        "retain": "true",
239
        "respTopic": "",
240
        "contentType": "",
241
        "userProps": "",
242
        "correl": "",
243
        "expiry": "",
244
        "broker": "81fae291a3aa88c1",
245
        "x": 1480,
246
        "y": 140,
247
        "wires": []
248
    },
249
    {
250
        "id": "dd5652e35252cbc0",
251
        "type": "inject",
252
        "z": "8485b31dfd6cf218",
253
        "g": "f6a390514e3f0ea4",
254
        "name": "Inject CurrentHfeedin",
255
        "props": [
256
            {
257
                "p": "payload"
258
            },
259
            {
260
                "p": "topic",
261
                "vt": "str"
262
            }
263
        ],
264
        "repeat": "",
265
        "crontab": "",
266
        "once": false,
267
        "onceDelay": 0.1,
268
        "topic": "homeassistant/binary_sensor/E0D0E0_currentHfeedin/config",
269
        "payload": "{\"state_topic\":\"homeassistant/binary_sensor/E0D0E0_currentHfeedin/state\",\"unit_of_measurement\":\"%\",\"unique_id\":\"E0D0E0_currentHfeedin\",\"name\":\"Dynamic ESS Current Hour Feedin\",\"payload_off\":0,\"payload_on\":1,\"device\":{\"identifiers\":[\"dyness_E0D0E0\"],\"name\":\"Dynamic ESS\"}}",
270
        "payloadType": "json",
271
        "x": 1260,
272
        "y": 140,
273
        "wires": [
274
            [
275
                "620695652a7b0937"
276
            ]
277
        ]
278
    },
279
    {
280
        "id": "2defeaa9be426e30",
281
        "type": "inject",
282
        "z": "8485b31dfd6cf218",
283
        "g": "f6a390514e3f0ea4",
284
        "name": "inject CurrentHstart",
285
        "props": [
286
            {
287
                "p": "payload"
288
            },
289
            {
290
                "p": "topic",
291
                "vt": "str"
292
            }
293
        ],
294
        "repeat": "",
295
        "crontab": "",
296
        "once": false,
297
        "onceDelay": 0.1,
298
        "topic": "homeassistant/sensor/E0D0E0_currentHstart/config",
299
        "payload": "{\"state_topic\":\"homeassistant/sensor/E0D0E0_currentHstart/state\",\"unique_id\":\"E0D0E0_currentHstart\",\"name\":\"Dynamic ESS Current Hour Start\",\"device_class\":\"timestamp\",\"value_template\":\"{{ value | as_datetime | as_local }}\",\"device\":{\"identifiers\":[\"dyness_E0D0E0\"],\"name\":\"Dynamic ESS\",\"manufacturer\":\"Victron\",\"model\":\"Dynamic ESS Schedules\"}}",
300
        "payloadType": "json",
301
        "x": 1250,
302
        "y": 180,
303
        "wires": [
304
            [
305
                "620695652a7b0937"
306
            ]
307
        ]
308
    },
309
    {
310
        "id": "417c4290a42df793",
311
        "type": "inject",
312
        "z": "8485b31dfd6cf218",
313
        "g": "f6a390514e3f0ea4",
314
        "name": "inject CurrentHduration",
315
        "props": [
316
            {
317
                "p": "payload"
318
            },
319
            {
320
                "p": "topic",
321
                "vt": "str"
322
            }
323
        ],
324
        "repeat": "",
325
        "crontab": "",
326
        "once": false,
327
        "onceDelay": 0.1,
328
        "topic": "homeassistant/sensor/E0D0E0_currentHduration/config",
329
        "payload": "{\"state_topic\":\"homeassistant/sensor/E0D0E0_currentHduration/state\",\"unit_of_measurement\":\"s\",\"unique_id\":\"E0D0E0_currentHduration\",\"name\":\"Dynamic ESS Current Hour Duration\",\"device\":{\"identifiers\":[\"dyness_E0D0E0\"],\"name\":\"Dynamic ESS\"}}",
330
        "payloadType": "json",
331
        "x": 1260,
332
        "y": 220,
333
        "wires": [
334
            [
335
                "620695652a7b0937"
336
            ]
337
        ]
338
    },
339
    {
340
        "id": "144d942f04400e1c",
341
        "type": "mqtt out",
342
        "z": "8485b31dfd6cf218",
343
        "g": "f6a390514e3f0ea4",
344
        "name": "",
345
        "topic": "homeassistant/sensor/E0D0E0_currentHsoc/state",
346
        "qos": "",
347
        "retain": "",
348
        "respTopic": "",
349
        "contentType": "",
350
        "userProps": "",
351
        "correl": "",
352
        "expiry": "",
353
        "broker": "81fae291a3aa88c1",
354
        "x": 1374,
355
        "y": 334,
356
        "wires": []
357
    },
358
    {
359
        "id": "5d47ef5e5ee4b48f",
360
        "type": "mqtt out",
361
        "z": "8485b31dfd6cf218",
362
        "g": "f6a390514e3f0ea4",
363
        "name": "",
364
        "topic": "homeassistant/binary_sensor/E0D0E0_currentHfeedin/state",
365
        "qos": "",
366
        "retain": "",
367
        "respTopic": "",
368
        "contentType": "",
369
        "userProps": "",
370
        "correl": "",
371
        "expiry": "",
372
        "broker": "81fae291a3aa88c1",
373
        "x": 1404,
374
        "y": 394,
375
        "wires": []
376
    },
377
    {
378
        "id": "4caabeeeb71ad863",
379
        "type": "mqtt out",
380
        "z": "8485b31dfd6cf218",
381
        "g": "f6a390514e3f0ea4",
382
        "name": "",
383
        "topic": "homeassistant/sensor/E0D0E0_currentHstart/state",
384
        "qos": "",
385
        "retain": "",
386
        "respTopic": "",
387
        "contentType": "",
388
        "userProps": "",
389
        "correl": "",
390
        "expiry": "",
391
        "broker": "81fae291a3aa88c1",
392
        "x": 1374,
393
        "y": 434,
394
        "wires": []
395
    },
396
    {
397
        "id": "ec7782b7a0b07bdd",
398
        "type": "mqtt out",
399
        "z": "8485b31dfd6cf218",
400
        "g": "f6a390514e3f0ea4",
401
        "name": "",
402
        "topic": "homeassistant/sensor/E0D0E0_currentHduration/state",
403
        "qos": "",
404
        "retain": "",
405
        "respTopic": "",
406
        "contentType": "",
407
        "userProps": "",
408
        "correl": "",
409
        "expiry": "",
410
        "broker": "81fae291a3aa88c1",
411
        "x": 1384,
412
        "y": 474,
413
        "wires": []
414
    },
415
    {
416
        "id": "81fae291a3aa88c1",
417
        "type": "mqtt-broker",
418
        "name": "Home Assistant",
419
        "broker": "homeassistant.local",
420
        "port": "1883",
421
        "clientid": "",
422
        "autoConnect": true,
423
        "usetls": false,
424
        "protocolVersion": "4",
425
        "keepalive": "60",
426
        "cleansession": true,
427
        "birthTopic": "victron/mqtt",
428
        "birthQos": "0",
429
        "birthPayload": "connected",
430
        "birthMsg": {},
431
        "closeTopic": "victron/mqtt",
432
        "closeQos": "0",
433
        "closePayload": "disconnected",
434
        "closeMsg": {},
435
        "willTopic": "",
436
        "willQos": "0",
437
        "willPayload": "",
438
        "willMsg": {},
439
        "userProps": "",
440
        "sessionExpiry": ""
441
    }
442
]
443
<pre>
444 9 Micha Kersloot
}}
445 7 Micha Kersloot
446 9 Micha Kersloot
h3. GX Venus OS Large
447 7 Micha Kersloot
448 8 Micha Kersloot
You can update the firmware with a Venus OS Large version. This version includes Node-RED. In the Remote Console, this can be enabled and you can finde node-red on https://venus:1881/
449 1 Micha Kersloot
450 8 Micha Kersloot
when installing Venus OS Large, you better run 
451
452 7 Micha Kersloot
  /opt/victronenergy/swupdate-scripts/resize2fs.sh
453
454 9 Micha Kersloot
h1. Pylontech 5000US
455 4 Micha Kersloot
456
https://www.victronenergy.com/live/battery_compatibility:pylontech_phantom
457 14 Micha Kersloot
458
The equalization takes place according to my information only if:
459
* At least one cell has over 3.450V &
460
* The cell difference within the battery is over 0,030V &
461
* The battery is being charged &
462
* The battery is not in error &