Skip to content

Commit 1bd7ac0

Browse files
feat(1P): add device info registers 2, 9-14 (protocol version, chip type, firmware fields) (#129)
Expose diagnostic text sensors for the intrinsic attribute registers from the 1P Modbus V119 protocol so users can report which protocol and firmware their inverter runs: - 2: Device Protocol Version (e.g. 0x0301 = V3.1) - 9: Chip Type (low nibble: AT32F403A/SXX32F103/GD32F103/GD32F303) - 10: Comm Board Firmware Field 2 - 11: Control Board Aux Version - 12: Control Board Firmware Field 2 - 13: Control Board Firmware Version - 14: Comm Board Firmware Version These registers exist in the 3P device.yaml at 3P-specific addresses; names here follow the 1P V119 documentation. Requested in #127 to help validate scaling differences between 1P models/protocols. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
1 parent 8213c81 commit 1bd7ac0

1 file changed

Lines changed: 120 additions & 0 deletions

File tree

‎pv_inverter/packages/deye_hybrid_1p/device.yaml‎

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,126 @@ text_sensor:
174174
}
175175
return serial.empty() ? std::string("N/A") : serial;
176176
177+
- platform: modbus_controller
178+
modbus_controller_id: ${modbus_controller_id}
179+
name: "Device Protocol Version"
180+
register_type: holding
181+
address: 2
182+
bitmask: 0
183+
raw_encode: NONE
184+
icon: "mdi:protocol"
185+
entity_category: diagnostic
186+
lambda: |-
187+
if (x.size() < 2) return std::string("N/A");
188+
uint16_t value = ((uint16_t)(uint8_t)x[0] << 8) | (uint8_t)x[1];
189+
char buffer[10];
190+
snprintf(buffer, sizeof(buffer), "%04X", value);
191+
return std::string(buffer);
192+
193+
- platform: modbus_controller
194+
modbus_controller_id: ${modbus_controller_id}
195+
name: "Device Chip Type"
196+
register_type: holding
197+
address: 9
198+
bitmask: 0
199+
raw_encode: NONE
200+
icon: "mdi:chip"
201+
entity_category: diagnostic
202+
lambda: |-
203+
if (x.size() < 2) return std::string("N/A");
204+
uint16_t value = ((uint16_t)(uint8_t)x[0] << 8) | (uint8_t)x[1];
205+
switch (value & 0x0F) {
206+
case 1: return std::string("AT32F403A");
207+
case 2: return std::string("SXX32F103");
208+
case 3: return std::string("GD32F103");
209+
case 4: return std::string("GD32F303");
210+
default: {
211+
char buffer[20];
212+
snprintf(buffer, sizeof(buffer), "Unknown (%04X)", value);
213+
return std::string(buffer);
214+
}
215+
}
216+
217+
- platform: modbus_controller
218+
modbus_controller_id: ${modbus_controller_id}
219+
name: "Device Comm Board Firmware Field 2"
220+
register_type: holding
221+
address: 10
222+
bitmask: 0
223+
raw_encode: NONE
224+
icon: "mdi:chip"
225+
entity_category: diagnostic
226+
lambda: |-
227+
if (x.size() < 2) return std::string("N/A");
228+
uint16_t value = ((uint16_t)(uint8_t)x[0] << 8) | (uint8_t)x[1];
229+
char buffer[10];
230+
snprintf(buffer, sizeof(buffer), "%04X", value);
231+
return std::string(buffer);
232+
233+
- platform: modbus_controller
234+
modbus_controller_id: ${modbus_controller_id}
235+
name: "Device Control Board Aux Version"
236+
register_type: holding
237+
address: 11
238+
bitmask: 0
239+
raw_encode: NONE
240+
icon: "mdi:chip"
241+
entity_category: diagnostic
242+
lambda: |-
243+
if (x.size() < 2) return std::string("N/A");
244+
uint16_t value = ((uint16_t)(uint8_t)x[0] << 8) | (uint8_t)x[1];
245+
char buffer[10];
246+
snprintf(buffer, sizeof(buffer), "%04X", value);
247+
return std::string(buffer);
248+
249+
- platform: modbus_controller
250+
modbus_controller_id: ${modbus_controller_id}
251+
name: "Device Control Board Firmware Field 2"
252+
register_type: holding
253+
address: 12
254+
bitmask: 0
255+
raw_encode: NONE
256+
icon: "mdi:chip"
257+
entity_category: diagnostic
258+
lambda: |-
259+
if (x.size() < 2) return std::string("N/A");
260+
uint16_t value = ((uint16_t)(uint8_t)x[0] << 8) | (uint8_t)x[1];
261+
char buffer[10];
262+
snprintf(buffer, sizeof(buffer), "%04X", value);
263+
return std::string(buffer);
264+
265+
- platform: modbus_controller
266+
modbus_controller_id: ${modbus_controller_id}
267+
name: "Device Control Board Firmware Version"
268+
register_type: holding
269+
address: 13
270+
bitmask: 0
271+
raw_encode: NONE
272+
icon: "mdi:chip"
273+
entity_category: diagnostic
274+
lambda: |-
275+
if (x.size() < 2) return std::string("N/A");
276+
uint16_t value = ((uint16_t)(uint8_t)x[0] << 8) | (uint8_t)x[1];
277+
char buffer[10];
278+
snprintf(buffer, sizeof(buffer), "%04X", value);
279+
return std::string(buffer);
280+
281+
- platform: modbus_controller
282+
modbus_controller_id: ${modbus_controller_id}
283+
name: "Device Comm Board Firmware Version"
284+
register_type: holding
285+
address: 14
286+
bitmask: 0
287+
raw_encode: NONE
288+
icon: "mdi:chip"
289+
entity_category: diagnostic
290+
lambda: |-
291+
if (x.size() < 2) return std::string("N/A");
292+
uint16_t value = ((uint16_t)(uint8_t)x[0] << 8) | (uint8_t)x[1];
293+
char buffer[10];
294+
snprintf(buffer, sizeof(buffer), "%04X", value);
295+
return std::string(buffer);
296+
177297
- platform: modbus_controller
178298
modbus_controller_id: ${modbus_controller_id}
179299
name: "Device Alarm"

0 commit comments

Comments
 (0)