forked from aiolos/ESPHome-config
-
Notifications
You must be signed in to change notification settings - Fork 0
/
modbus-solax.yaml
244 lines (231 loc) · 6.09 KB
/
modbus-solax.yaml
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
# Configuration for Solax X1 Boost inverters.
substitutions:
prefix: Solax
esphome:
name: solax
platform: ESP8266
board: d1_mini
# Enable Home Assistant API
api:
ota:
password: "ac66b32bb32a860377529dfcf3585979"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "ESP-Modbus"
password: "configesp"
captive_portal:
# Enable/Disable logging
logger:
# level: VERY_VERBOSE
baud_rate: 0 ## Must be 0 to prevent reading issues and buffer overflows
uart:
id: mod_bus
tx_pin: D7
rx_pin: D6
baud_rate: 9600
stop_bits: 1
modbus:
flow_control_pin: D5
id: modbus1
send_wait_time: 1000ms
modbus_controller:
- id: solax
## the Modbus device addr (defaults to 247 (0xF7) for goodwe inverters)
address: 0x1
modbus_id: modbus1
setup_priority: -10
#command_throttle: 250ms
update_interval: 15s
sensor:
- platform: modbus_controller
modbus_controller_id: solax
name: "${prefix} PV1 Input Voltage"
address: 0x400
register_type: read
value_type: U_WORD
accuracy_decimals: 1
unit_of_measurement: V
device_class: voltage
state_class: measurement
filters:
- multiply: 0.1
- platform: modbus_controller
modbus_controller_id: solax
name: "${prefix} PV2 Input Voltage"
address: 0x401
register_type: read
value_type: U_WORD
accuracy_decimals: 1
unit_of_measurement: V
device_class: voltage
state_class: measurement
filters:
- multiply: 0.1
- platform: modbus_controller
modbus_controller_id: solax
name: "${prefix} PV1 Input Current"
address: 0x402
register_type: read
value_type: U_WORD
accuracy_decimals: 1
unit_of_measurement: A
device_class: current
state_class: measurement
filters:
- multiply: 0.1
- platform: modbus_controller
modbus_controller_id: solax
name: "${prefix} PV2 Input Current"
address: 0x403
register_type: read
value_type: U_WORD
accuracy_decimals: 1
unit_of_measurement: A
device_class: current
state_class: measurement
filters:
- multiply: 0.1
- platform: modbus_controller
modbus_controller_id: solax
name: "${prefix} Grid Voltage"
address: 0x404
register_type: read
value_type: U_WORD
accuracy_decimals: 1
unit_of_measurement: V
device_class: voltage
state_class: measurement
filters:
- multiply: 0.1
- platform: modbus_controller
modbus_controller_id: solax
name: "${prefix} Grid Frequency"
address: 0x407
register_type: read
value_type: U_WORD
accuracy_decimals: 2
unit_of_measurement: Hz
device_class: frequency
state_class: measurement
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: solax
name: "${prefix} Output Current"
address: 0x40A
register_type: read
value_type: U_WORD
accuracy_decimals: 1
unit_of_measurement: A
device_class: current
state_class: measurement
filters:
- multiply: 0.1
- platform: modbus_controller
modbus_controller_id: solax
name: "${prefix} Temperature"
address: 0x40D
register_type: read
value_type: U_WORD
accuracy_decimals: 0
unit_of_measurement: C
device_class: temperature
state_class: measurement
- platform: modbus_controller
modbus_controller_id: solax
name: "${prefix} Inverter Power"
address: 0x40e
register_type: read
value_type: U_WORD
unit_of_measurement: W
device_class: power
state_class: measurement
accuracy_decimals: 0
- platform: modbus_controller
modbus_controller_id: solax
id: ${prefix}_power_dc1
name: "${prefix} Power DC1"
address: 0x414
register_type: read
value_type: U_WORD
unit_of_measurement: W
device_class: power
state_class: measurement
accuracy_decimals: 0
- platform: modbus_controller
modbus_controller_id: solax
id: ${prefix}_power_dc2
name: "${prefix} Power DC2"
address: 0x415
register_type: read
value_type: U_WORD
unit_of_measurement: W
device_class: power
state_class: measurement
accuracy_decimals: 0
on_value:
then:
component.update: ${prefix}_total_dc_power
- platform: template
id: ${prefix}_total_dc_power
name: "${prefix} Total DC Power"
lambda: |-
return (id(${prefix}_power_dc1).state + id(${prefix}_power_dc2).state);
update_interval: never
unit_of_measurement: W
device_class: power
state_class: measurement
accuracy_decimals: 0
- platform: modbus_controller
modbus_controller_id: solax
name: "${prefix} Production Total"
address: 0x423
register_type: read
value_type: U_WORD
accuracy_decimals: 1
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
filters:
- multiply: 0.1
- platform: modbus_controller
modbus_controller_id: solax
name: "${prefix} Production Today"
address: 0x425
register_type: read
value_type: U_WORD
accuracy_decimals: 1
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
filters:
- multiply: 0.1
text_sensor:
- platform: modbus_controller
modbus_controller_id: solax
id: ${prefix}_run_mode
name: "${prefix} Run Mode"
address: 0x40f
bitmask: 0
register_type: read
raw_encode: HEXBYTES
lambda: |-
uint16_t value = modbus_controller::word_from_hex_str(x, 0);
switch (value) {
case 0: return std::string("Waiting");
case 1: return std::string("Checking");
case 2: return std::string("Normal");
case 3: return std::string("Fault");
case 4: return std::string("Permanent Fault");
case 5: return std::string("Update");
case 6: return std::string("Off-grid waiting");
case 7: return std::string("Off-grid");
case 8: return std::string("Self Testing");
case 9: return std::string("Idle");
case 10: return std::string("Standby");
default: return std::string("Unknown");
}
return x;