add testing, reverse engineered / generated from OpenDTU source to improve compatibility testing and detecting regressions early.

This commit is contained in:
Pieter Hollander 2025-10-04 01:57:56 +02:00
parent 6b496a39ee
commit 99959726c8
Signed by: pieter
SSH key fingerprint: SHA256:HbX+9cBXsop9SuvL+mELd29sK+7DehFfdVweFVDtMSg
12 changed files with 2888 additions and 0 deletions

23
testdata/events_response.json vendored Normal file
View file

@ -0,0 +1,23 @@
{
"count": 3,
"events": [
{
"message_id": 1,
"message": "Inverter start",
"start_time": 1634567890,
"end_time": 1634567950
},
{
"message_id": 2,
"message": "Grid fault",
"start_time": 1634568000,
"end_time": 1634568120
},
{
"message_id": 3,
"message": "Communication error",
"start_time": 1634568200,
"end_time": 0
}
]
}

112
testdata/livedata_night.json vendored Normal file
View file

@ -0,0 +1,112 @@
{
"inverters": [
{
"serial": "987654321012",
"name": "Dummy 02",
"order": 1,
"data_age": 20840,
"data_age_ms": 20840477,
"poll_enabled": false,
"reachable": false,
"producing": false,
"limit_relative": 100,
"limit_absolute": 2250,
"events": 0,
"AC": {
"0": {
"Power": {"v": 0, "u": "W", "d": 1},
"Voltage": {"v": 0, "u": "V", "d": 1},
"Current": {"v": 0, "u": "A", "d": 2},
"Frequency": {"v": 0, "u": "Hz", "d": 2},
"PowerFactor": {"v": 0, "u": "", "d": 3},
"ReactivePower": {"v": 0, "u": "var", "d": 1}
}
},
"DC": {
"0": {
"name": {"u": "X1A DMY000000000000001ZX"},
"Power": {"v": 0, "u": "W", "d": 1},
"Voltage": {"v": 0, "u": "V", "d": 1},
"Current": {"v": 0, "u": "A", "d": 2},
"YieldDay": {"v": 0, "u": "Wh", "d": 0},
"YieldTotal": {"v": 768.194, "u": "kWh", "d": 3},
"Irradiation": {"v": 0, "u": "%", "d": 3, "max": 440}
},
"1": {
"name": {"u": "X2B DMY000000000000002ZX"},
"Power": {"v": 0, "u": "W", "d": 1},
"Voltage": {"v": 0, "u": "V", "d": 1},
"Current": {"v": 0, "u": "A", "d": 2},
"YieldDay": {"v": 0, "u": "Wh", "d": 0},
"YieldTotal": {"v": 723.244, "u": "kWh", "d": 3},
"Irradiation": {"v": 0, "u": "%", "d": 3, "max": 440}
},
"2": {
"name": {"u": "X3C DMY000000000000003ZX"},
"Power": {"v": 0, "u": "W", "d": 1},
"Voltage": {"v": 0, "u": "V", "d": 1},
"Current": {"v": 0, "u": "A", "d": 2},
"YieldDay": {"v": 0, "u": "Wh", "d": 0},
"YieldTotal": {"v": 603.444, "u": "kWh", "d": 3},
"Irradiation": {"v": 0, "u": "%", "d": 3, "max": 440}
},
"3": {
"name": {"u": "X4D DMY000000000000004ZX"},
"Power": {"v": 0, "u": "W", "d": 1},
"Voltage": {"v": 0, "u": "V", "d": 1},
"Current": {"v": 0, "u": "A", "d": 2},
"YieldDay": {"v": 0, "u": "Wh", "d": 0},
"YieldTotal": {"v": 633.541, "u": "kWh", "d": 3},
"Irradiation": {"v": 0, "u": "%", "d": 3, "max": 440}
},
"4": {
"name": {"u": "X5E DMY000000000000005ZX"},
"Power": {"v": 0, "u": "W", "d": 1},
"Voltage": {"v": 0, "u": "V", "d": 1},
"Current": {"v": 0, "u": "A", "d": 2},
"YieldDay": {"v": 0, "u": "Wh", "d": 0},
"YieldTotal": {"v": 725.182, "u": "kWh", "d": 3},
"Irradiation": {"v": 0, "u": "%", "d": 3, "max": 440}
},
"5": {
"name": {"u": "X6F DMY000000000000006ZX"},
"Power": {"v": 0, "u": "W", "d": 1},
"Voltage": {"v": 0, "u": "V", "d": 1},
"Current": {"v": 0, "u": "A", "d": 2},
"YieldDay": {"v": 0, "u": "Wh", "d": 0},
"YieldTotal": {"v": 773.515, "u": "kWh", "d": 3},
"Irradiation": {"v": 0, "u": "%", "d": 3, "max": 440}
}
},
"INV": {
"0": {
"Power DC": {"v": 0, "u": "W", "d": 1},
"YieldDay": {"v": 0, "u": "Wh", "d": 0},
"YieldTotal": {"v": 4227.12, "u": "kWh", "d": 3},
"Temperature": {"v": 0, "u": "°C", "d": 1},
"Efficiency": {"v": 0, "u": "%", "d": 3}
}
},
"radio_stats": {
"tx_request": 147,
"tx_re_request": 0,
"rx_success": 0,
"rx_fail_nothing": 147,
"rx_fail_partial": 0,
"rx_fail_corrupt": 0,
"rssi": -62
}
}
],
"total": {
"Power": {"v": 0, "u": "W", "d": 0},
"YieldDay": {"v": 0, "u": "Wh", "d": 0},
"YieldTotal": {"v": 16253.99, "u": "kWh", "d": 3}
},
"hints": {
"time_sync": false,
"radio_problem": false,
"default_password": false,
"pin_mapping_issue": false
}
}

137
testdata/livedata_producing.json vendored Normal file
View file

@ -0,0 +1,137 @@
{
"inverters": [
{
"serial": "114173123456",
"name": "Hoymiles HM-800",
"order": 0,
"data_age": 0,
"data_age_ms": 124,
"poll_enabled": true,
"reachable": true,
"producing": true,
"limit_relative": 100.0,
"limit_absolute": 800.0,
"events": 2,
"AC": {
"0": {
"Power": {"v": 734.2, "u": "W", "d": 1},
"Voltage": {"v": 230.1, "u": "V", "d": 1},
"Current": {"v": 3.19, "u": "A", "d": 2},
"Frequency": {"v": 50.02, "u": "Hz", "d": 2},
"PowerFactor": {"v": 1.0, "u": "", "d": 3},
"ReactivePower": {"v": 0.0, "u": "var", "d": 1}
}
},
"DC": {
"0": {
"name": {"u": "String 1"},
"Power": {"v": 381.3, "u": "W", "d": 1},
"Voltage": {"v": 36.7, "u": "V", "d": 1},
"Current": {"v": 10.39, "u": "A", "d": 2},
"YieldDay": {"v": 3847, "u": "Wh", "d": 0},
"YieldTotal": {"v": 1247.531, "u": "kWh", "d": 3},
"Irradiation": {"v": 87.3, "u": "%", "d": 3, "max": 440}
},
"1": {
"name": {"u": "String 2"},
"Power": {"v": 367.8, "u": "W", "d": 1},
"Voltage": {"v": 35.2, "u": "V", "d": 1},
"Current": {"v": 10.45, "u": "A", "d": 2},
"YieldDay": {"v": 3712, "u": "Wh", "d": 0},
"YieldTotal": {"v": 1203.847, "u": "kWh", "d": 3},
"Irradiation": {"v": 84.2, "u": "%", "d": 3, "max": 440}
}
},
"INV": {
"0": {
"Temperature": {"v": 34.2, "u": "°C", "d": 1},
"Efficiency": {"v": 97.8, "u": "%", "d": 3},
"Power DC": {"v": 749.1, "u": "W", "d": 1},
"YieldDay": {"v": 7559, "u": "Wh", "d": 0},
"YieldTotal": {"v": 2451.378, "u": "kWh", "d": 3}
}
},
"radio_stats": {
"tx_request": 12345,
"tx_re_request": 234,
"rx_success": 12000,
"rx_fail_nothing": 50,
"rx_fail_partial": 30,
"rx_fail_corrupt": 21,
"rssi": -65.5
}
},
{
"serial": "114173654321",
"name": "Hoymiles HM-600",
"order": 1,
"data_age": 0,
"data_age_ms": 235,
"poll_enabled": true,
"reachable": true,
"producing": true,
"limit_relative": 100.0,
"limit_absolute": 600.0,
"events": 0,
"AC": {
"0": {
"Power": {"v": 542.7, "u": "W", "d": 1},
"Voltage": {"v": 229.8, "u": "V", "d": 1},
"Current": {"v": 2.36, "u": "A", "d": 2},
"Frequency": {"v": 50.01, "u": "Hz", "d": 2},
"PowerFactor": {"v": 1.0, "u": "", "d": 3},
"ReactivePower": {"v": 0.0, "u": "var", "d": 1}
}
},
"DC": {
"0": {
"name": {"u": "String 1"},
"Power": {"v": 281.4, "u": "W", "d": 1},
"Voltage": {"v": 32.1, "u": "V", "d": 1},
"Current": {"v": 8.77, "u": "A", "d": 2},
"YieldDay": {"v": 2834, "u": "Wh", "d": 0},
"YieldTotal": {"v": 923.156, "u": "kWh", "d": 3},
"Irradiation": {"v": 81.4, "u": "%", "d": 3, "max": 440}
},
"1": {
"name": {"u": "String 2"},
"Power": {"v": 273.9, "u": "W", "d": 1},
"Voltage": {"v": 31.8, "u": "V", "d": 1},
"Current": {"v": 8.61, "u": "A", "d": 2},
"YieldDay": {"v": 2756, "u": "Wh", "d": 0},
"YieldTotal": {"v": 897.423, "u": "kWh", "d": 3},
"Irradiation": {"v": 79.2, "u": "%", "d": 3, "max": 440}
}
},
"INV": {
"0": {
"Temperature": {"v": 32.8, "u": "°C", "d": 1},
"Efficiency": {"v": 97.2, "u": "%", "d": 3},
"Power DC": {"v": 555.3, "u": "W", "d": 1},
"YieldDay": {"v": 5590, "u": "Wh", "d": 0},
"YieldTotal": {"v": 1820.579, "u": "kWh", "d": 3}
}
},
"radio_stats": {
"tx_request": 8765,
"tx_re_request": 123,
"rx_success": 8600,
"rx_fail_nothing": 20,
"rx_fail_partial": 15,
"rx_fail_corrupt": 7,
"rssi": -72.3
}
}
],
"total": {
"Power": {"v": 1276.9, "u": "W", "d": 1},
"YieldDay": {"v": 13149, "u": "Wh", "d": 0},
"YieldTotal": {"v": 4271.957, "u": "kWh", "d": 3}
},
"hints": {
"time_sync": true,
"radio_problem": false,
"default_password": false,
"pin_mapping_issue": false
}
}

73
testdata/livedata_warnings.json vendored Normal file
View file

@ -0,0 +1,73 @@
{
"inverters": [
{
"serial": "555444333222",
"name": "Dummy Warning",
"order": 2,
"data_age": 45,
"data_age_ms": 45231,
"poll_enabled": true,
"reachable": false,
"producing": false,
"limit_relative": 100.0,
"limit_absolute": -1,
"events": -1,
"AC": {
"0": {
"Power": {"v": 0, "u": "W", "d": 1},
"Voltage": {"v": 229.4, "u": "V", "d": 1},
"Current": {"v": 0, "u": "A", "d": 2},
"Frequency": {"v": 50.01, "u": "Hz", "d": 2},
"PowerFactor": {"v": 0.0, "u": "", "d": 3},
"ReactivePower": {"v": 0.0, "u": "var", "d": 1}
}
},
"DC": {
"0": {
"name": {"u": "X7G DMY000000000000007ZX"},
"Power": {"v": 0, "u": "W", "d": 1},
"Voltage": {"v": 0.0, "u": "V", "d": 1},
"Current": {"v": 0.0, "u": "A", "d": 2},
"YieldDay": {"v": 0, "u": "Wh", "d": 0},
"YieldTotal": {"v": 123.456, "u": "kWh", "d": 3},
"Irradiation": {"v": 0.0, "u": "%", "d": 3, "max": 350}
}
},
"INV": {
"0": {
"Power DC": {"v": 0.0, "u": "W", "d": 1},
"YieldDay": {"v": 0, "u": "Wh", "d": 0},
"YieldTotal": {"v": 222.222, "u": "kWh", "d": 3},
"Temperature": {"v": 18.4, "u": "°C", "d": 1},
"Efficiency": {"v": 0.0, "u": "%", "d": 3}
}
},
"BAT": {
"0": {
"Power": {"v": -120.5, "u": "W", "d": 1},
"StateOfCharge": {"v": 64.2, "u": "%", "d": 1}
}
},
"radio_stats": {
"tx_request": 0,
"tx_re_request": 0,
"rx_success": 0,
"rx_fail_nothing": 12,
"rx_fail_partial": 0,
"rx_fail_corrupt": 0,
"rssi": -80.0
}
}
],
"total": {
"Power": {"v": 0.0, "u": "W", "d": 1},
"YieldDay": {"v": 0, "u": "Wh", "d": 0},
"YieldTotal": {"v": 222.222, "u": "kWh", "d": 3}
},
"hints": {
"time_sync": false,
"radio_problem": true,
"default_password": true,
"pin_mapping_issue": true
}
}

10
testdata/test_config.json vendored Normal file
View file

@ -0,0 +1,10 @@
{
"db": "postgres://user:password@localhost:5432/opendtu",
"opendtu_address": "192.168.1.100",
"opendtu_auth": true,
"opendtu_username": "admin",
"opendtu_password": "secret123",
"timescaledb": true,
"tz": "Europe/Amsterdam",
"log_level": "INFO"
}