Oke, hier is het ook vrij aardig gelukt om hem via Modbus TCP aan de praat te krijgen.
In de configuration.yaml voeg je dit toe (verwijzing naar een yaml met daarin de modbus config):
code:
1
| modbus: !include webasto_modbus.yaml |
Plak vervolgens onderstaande webasto_modbus.yaml file in je /homeassistant folder:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
| - name: webasto
type: tcp
host: 192.168.1.40
port: 502
delay: 2
timeout: 5
sensors:
- name: Webasto_Unite_Serial_Number
unique_id: Webasto_Unite_Serial_Number
slave: 255
input_type: input
address: 100
data_type: string
count: 25
- name: Webasto_Unite_Firmware_Version
unique_id: Webasto_Unite_Firmware_Version
slave: 255
input_type: input
address: 230
data_type: string
count: 50
- name: Webasto_Unite_Date
unique_id: Webasto_Unite_Date
slave: 255
input_type: input
address: 290
data_type: uint32
- name: Webasto_Unite_Time
unique_id: Webasto_Unite_Time
slave: 255
input_type: input
address: 294
data_type: uint32
- name: Webasto_Unite_Charge_Point_Power
unique_id: Webasto_Unite_Charge_Point_Power
slave: 255
input_type: input
address: 400
data_type: uint32
offset: 0
scale: 1
precision: 2
state_class: measurement
unit_of_measurement: W
- name: Webasto_Unite_Number_of_Phases
unique_id: Webasto_Unite_Number_of_Phases
slave: 255
input_type: holding
address: 405
data_type: uint16
swap: byte # afwijkende byte-volgorde!
- name: Webasto_Unite_Charge_Point_State
# 0: "Available"
# 1: "Preparing"
# 2: "Charging"
# 3: "SuspendedEVSE"
# 4: "SuspendedEV"
# 5: "Finishing"
# 6: "Reserved"
# 7: "Unavailable"
# 8: "Faulted"
unique_id: Webasto_Unite_Charge_Point_State
slave: 255
input_type: input
address: 1000
data_type: uint16
- name: Webasto_Unite_Charging_State
# 0: Not Charging, State Ax, Bx, Dx or C1
# 1: Charging, state C2
unique_id: Webasto_Unite_Charging_State
slave: 255
input_type: input
address: 1001
data_type: uint16
- name: Webasto_Unite_Equipment_State
# 0: Initializing
# 1: Running
# 2: Fault
# 3: Disabled
# 4: Updating
unique_id: Webasto_Unite_Equipment_State
slave: 255
input_type: input
address: 1002
data_type: uint16
- name: Webasto_Unite_Cable_State
# 0: Cable not connected
# 1: Cable connected, vehicle not connected
# 2: Cable connected, vehicle connected
# 3: Cable connected, vehicle connected, cable locked
unique_id: Webasto_Cable_State
slave: 255
input_type: input
address: 1004
data_type: uint16
- name: Webasto_Unite_EVSE_Fault_Code
# 0: No fault
# Other: Fault code
unique_id: Webasto_Unite_EVSE_Fault_Code
slave: 255
input_type: input
address: 1006
data_type: uint16
- name: Webasto_Unite_Charging_Current_L1
unique_id: Webasto_Unite_Charging_Current_L1
slave: 255
input_type: input
address: 1008
data_type: uint16
device_class: current
offset: 0
scale: 0.001
precision: 0
state_class: measurement
unit_of_measurement: A
- name: Webasto_Unite_Charging_Current_L2
unique_id: Webasto_Unite_Charging_Current_L2
slave: 255
input_type: input
address: 1010
data_type: uint16
device_class: current
offset: 0
scale: 0.001
precision: 0
state_class: measurement
unit_of_measurement: A
- name: Webasto_Unite_Charging_Current_L3
unique_id: Webasto_Unite_Charging_Current_L3
slave: 255
input_type: input
address: 1012
data_type: uint16
device_class: current
offset: 0
scale: 0.001
precision: 0
state_class: measurement
unit_of_measurement: A
- name: Webasto_Unite_Charging_Voltage_L1
unique_id: Webasto_Unite_Charging_Voltage_L1
slave: 255
input_type: input
address: 1014
data_type: uint16
device_class: voltage
state_class: measurement
unit_of_measurement: V
- name: Webasto_Unite_Charging_Voltage_L2
unique_id: Webasto_Unite_Charging_Voltage_L2
slave: 255
input_type: input
address: 1016
data_type: uint16
device_class: voltage
state_class: measurement
unit_of_measurement: V
- name: Webasto_Unite_Charging_Voltage_L3
unique_id: Webasto_Unite_Charging_Voltage_L3
slave: 255
input_type: input
address: 1018
data_type: uint16
device_class: voltage
state_class: measurement
unit_of_measurement: V
- name: Webasto_Unite_Active_Power_Total
unique_id: Webasto_Unite_Active_Power_Total
slave: 255
input_type: input
address: 1020
data_type: uint32
device_class: power
state_class: measurement
unit_of_measurement: W
- name: Webasto_Unite_Active_Power_L1
unique_id: Webasto_Unite_Active_Power_L1
slave: 255
input_type: input
address: 1024
data_type: uint32
device_class: power
state_class: measurement
unit_of_measurement: W
- name: Webasto_Unite_Active_Power_L2
unique_id: Webasto_Unite_Active_Power_L2
slave: 255
input_type: input
address: 1028
data_type: uint32
device_class: power
state_class: measurement
unit_of_measurement: W
- name: Webasto_Unite_Active_Power_L3
unique_id: Webasto_Unite_Active_Power_L3
slave: 255
input_type: input
address: 1032
data_type: uint32
device_class: power
state_class: measurement
unit_of_measurement: W
- name: Webasto_Unite_Meter_Reading
unique_id: Webasto_Unite_Meter_Reading
slave: 255
input_type: input
address: 1036
data_type: uint32
device_class: energy
state_class: total_increasing
offset: 0
scale: 0.1
precision: 3
unit_of_measurement: kWh
- name: Webasto_Unite_Session_Max_Current
unique_id: Webasto_Unite_Session_Max_Current
slave: 255
input_type: input
address: 1100
data_type: uint16
device_class: current
state_class: measurement
unit_of_measurement: A
- name: Webasto_Unite_EVSE_Min_Current
unique_id: Webasto_Unite_EVSE_Min_Current
slave: 255
input_type: input
address: 1102
data_type: uint16
device_class: current
state_class: measurement
unit_of_measurement: A
- name: Webasto_Unite_EVSE_Max_Current
unique_id: Webasto_Unite_EVSE_Max_Current
slave: 255
input_type: input
address: 1104
data_type: uint16
device_class: current
state_class: measurement
unit_of_measurement: A
- name: Webasto_Unite_Cable_Max_Current
unique_id: Webasto_Unite_Cable_Max_Current
slave: 255
input_type: input
address: 1106
data_type: uint16
device_class: current
state_class: measurement
unit_of_measurement: A
- name: Webasto_Unite_Charged_Energy
unique_id: Webasto_Unite_Charged_Energy
slave: 255
input_type: input
address: 1502
data_type: uint32
device_class: energy
state_class: total
offset: 0
scale: 0.001
precision: 3
unit_of_measurement: kWh
- name: Webasto_Unite_Session_Start_Time
unique_id: Webasto_Unite_Session_Start_Time
slave: 255
input_type: input
address: 1504
data_type: uint32
- name: Webasto_Unite_Session_Duration
unique_id: Webasto_Unite_Session_Duration
slave: 255
input_type: input
address: 1508
data_type: uint32
device_class: duration
state_class: measurement
unit_of_measurement: s
- name: Webasto_Unite_Session_End_Time
unique_id: Webasto_Unite_Session_End_Time
slave: 255
input_type: input
address: 1512
data_type: uint32
- name: Webasto_Unite_Failsafe_Current
# R/W: Can be set in the Unite WebUI (Standard: 6A)
# Charging power will fall back to 6A if Alive Register 6000 not triggered with 1 within each 20 seconds
unique_id: Webasto_Unite_Failsafe_Current
slave: 255
input_type: holding
address: 2000
data_type: uint16
device_class: current
state_class: measurement
unit_of_measurement: A
- name: Webasto_Unite_Failsafe_Timeout
# R/W: No need to change (Standard: 20 seconds)
unique_id: Webasto_Unite_Failsafe_Timeout
slave: 255
input_type: holding
address: 2002
data_type: uint16
- name: Webasto_Unite_Charging_Current
# R/W: 0-5A=Charging paused, 6-32A=Charging with set Amps
unique_id: Webasto_Unite_Charging_Current
slave: 255
input_type: holding
address: 5004
data_type: uint16
device_class: current
state_class: measurement
unit_of_measurement: A
switches:
- name: Webasto_Unite_Alive_Register
# EMS (Master) writes 1, EVSE (Slave) writes 0
# EVSE checks this register at a period of (Failsafe Timeout)/2 for a value of 1, and sets it to 0
# Period cannot go less than 3 seconds
unique_id: Webasto_Unite_Alive_Register
slave: 255
write_type: holding
address: 6000
command_on: 1
command_off: 0
verify:
- name: Webasto_Unite_Phase_Switch
# 0: 1-fase, 1: 3-fase
unique_id: Webasto_Unite_Phase_Switch
slave: 255
write_type: holding
address: 405
command_on: 1
command_off: 0
verify: |
Ik heb ook nog wat helpers aangemaakt (plak deze
in de configuration.yaml file als je die ook wil gebruiken (is vooral voor EVCC koppeling handig en voor vertaling aantal fases naar 1 of 3 stuks):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| template:
- sensor:
- name: Webasto_EVCC_Status
unique_id: webasto_evcc_status
state: >
{% set cp = states('sensor.webasto_unite_charge_point_state') | int(-1) %}
{% set charging = states('sensor.webasto_unite_charging_state') | int(-1) %}
{% set cable = states('sensor.webasto_unite_cable_state') | int(-1) %}
{% if cp in [7, 8] %}
F
{% elif cable in [0, 1] %}
A
{% elif charging == 1 %}
C
{% elif cp in [1, 2, 3, 4, 5] %}
B
{% elif cp == 0 %}
A
{% else %}
A
{% endif %}
- sensor:
- name: Webasto_Phases
unique_id: Webasto_Phases
state: >
{% if states('sensor.webasto_unite_number_of_phases') == '0' %}
1
{% else %}
3
{% endif %}
unit_of_measurement: "phases" |
Maak tot slot een
automation om te zorgen dat de laadpaal elke 20s (afhankelijk van de timeout die je zelf op de laadpaal hebt ingesteld, normaal iig binnen 60s) het heartbeat register weer schrijft. Doe je dat niet dan valt de laadstroom weer terug naar 6A.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| description: >-
Stuurt de laadpaal elke 20s een heartbeat en stuurt een update als de
laadstroom verandert.
mode: single
triggers:
- trigger: time_pattern
seconds: /20
id: heartbeat
conditions: []
actions:
- alias: Heartbeat - write to Webasto
if:
- condition: trigger
id:
- heartbeat
then:
- data: {}
target:
entity_id: switch.webasto_unite_alive_register
action: switch.turn_on |
E.e.a. heeft nog een hoog Claude gehalte, dus er zitten vast optimalisaties in. Maar voor nu ben ik iig gereed om te laden via HA -> EVCC i.c.m. OCCP naar TAP voor de ERE certificaten
[
Voor 108% gewijzigd door
master1104 op 10-04-2026 20:12
]