api: make relay outputs hardware-profile aware
This commit is contained in:
+13
-3
@@ -5,13 +5,21 @@
|
||||
"id": "relay_1",
|
||||
"name": "Aux Power",
|
||||
"pin": 16,
|
||||
"enabled": true
|
||||
"enabled": true,
|
||||
"role": "aux",
|
||||
"hardware_channel": 1,
|
||||
"hardware_profile": "generic_esp32_2ch_relay",
|
||||
"available": true
|
||||
},
|
||||
{
|
||||
"id": "relay_2",
|
||||
"name": "Fridge",
|
||||
"pin": 17,
|
||||
"enabled": true
|
||||
"enabled": true,
|
||||
"role": "fridge",
|
||||
"hardware_channel": 2,
|
||||
"hardware_profile": "generic_esp32_2ch_relay",
|
||||
"available": true
|
||||
}
|
||||
],
|
||||
"bms": {
|
||||
@@ -29,5 +37,7 @@
|
||||
"enabled": true,
|
||||
"weather": false
|
||||
}
|
||||
]
|
||||
],
|
||||
"hardware_profile": "generic_esp32_2ch_relay",
|
||||
"output_count": 2
|
||||
}
|
||||
|
||||
+27
-6
@@ -14,7 +14,12 @@
|
||||
"cycle_count": 3,
|
||||
"cell_count": 4,
|
||||
"ntc_count": 2,
|
||||
"cell_voltages": [3.334, 3.333, 3.334, 3.333],
|
||||
"cell_voltages": [
|
||||
3.334,
|
||||
3.333,
|
||||
3.334,
|
||||
3.333
|
||||
],
|
||||
"cell_min_voltage": 3.333,
|
||||
"cell_max_voltage": 3.334,
|
||||
"cell_delta_mv": 1,
|
||||
@@ -36,14 +41,22 @@
|
||||
"name": "Aux Power",
|
||||
"pin": 16,
|
||||
"enabled": true,
|
||||
"state": false
|
||||
"state": false,
|
||||
"role": "aux",
|
||||
"hardware_channel": 1,
|
||||
"hardware_profile": "generic_esp32_2ch_relay",
|
||||
"available": true
|
||||
},
|
||||
{
|
||||
"id": "relay_2",
|
||||
"name": "Fridge",
|
||||
"pin": 17,
|
||||
"enabled": true,
|
||||
"state": true
|
||||
"state": true,
|
||||
"role": "fridge",
|
||||
"hardware_channel": 2,
|
||||
"hardware_profile": "generic_esp32_2ch_relay",
|
||||
"available": true
|
||||
}
|
||||
],
|
||||
"vehicle": {
|
||||
@@ -90,7 +103,11 @@
|
||||
"id": "relay_1",
|
||||
"name": "Aux Power",
|
||||
"pin": 16,
|
||||
"enabled": true
|
||||
"enabled": true,
|
||||
"role": "aux",
|
||||
"hardware_channel": 1,
|
||||
"hardware_profile": "generic_esp32_2ch_relay",
|
||||
"available": true
|
||||
}
|
||||
],
|
||||
"bms": {
|
||||
@@ -108,6 +125,10 @@
|
||||
"enabled": true,
|
||||
"weather": false
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"hardware_profile": "generic_esp32_2ch_relay",
|
||||
"output_count": 2
|
||||
},
|
||||
"hardware_profile": "generic_esp32_2ch_relay",
|
||||
"output_count": 2
|
||||
}
|
||||
|
||||
@@ -134,7 +134,19 @@ def test_status_fixture_matches_dashboard_contract_shape():
|
||||
"online",
|
||||
"temperature_f",
|
||||
])
|
||||
assert_keys(payload["relays"][0], ["id", "name", "pin", "enabled", "state"])
|
||||
assert payload["hardware_profile"] == "generic_esp32_2ch_relay"
|
||||
assert payload["output_count"] == 2
|
||||
assert_keys(payload["relays"][0], [
|
||||
"id",
|
||||
"name",
|
||||
"role",
|
||||
"hardware_channel",
|
||||
"hardware_profile",
|
||||
"pin",
|
||||
"enabled",
|
||||
"available",
|
||||
"state",
|
||||
])
|
||||
assert_keys(payload["network"], [
|
||||
"wifi_enabled",
|
||||
"uart_connected",
|
||||
@@ -161,12 +173,25 @@ def test_config_fixture_matches_current_config_response_shape():
|
||||
|
||||
assert_keys(payload, [
|
||||
"device_name",
|
||||
"hardware_profile",
|
||||
"output_count",
|
||||
"relays",
|
||||
"bms",
|
||||
"temperature_sensor_count",
|
||||
"temperature_sensors",
|
||||
])
|
||||
assert_keys(payload["relays"][0], ["id", "name", "pin", "enabled"])
|
||||
assert payload["hardware_profile"] == "generic_esp32_2ch_relay"
|
||||
assert payload["output_count"] == 2
|
||||
assert_keys(payload["relays"][0], [
|
||||
"id",
|
||||
"name",
|
||||
"role",
|
||||
"hardware_channel",
|
||||
"hardware_profile",
|
||||
"pin",
|
||||
"enabled",
|
||||
"available",
|
||||
])
|
||||
assert_keys(payload["bms"], ["enabled", "name", "address", "address_type"])
|
||||
assert_keys(payload["temperature_sensors"][0], [
|
||||
"id",
|
||||
@@ -211,6 +236,19 @@ def test_relay_set_contract_fixtures_and_firmware_errors():
|
||||
assert '"unknown_relay"' in source
|
||||
|
||||
|
||||
def test_relay_api_is_output_count_agnostic():
|
||||
source = firmware_source()
|
||||
|
||||
assert 'doc["hardware_profile"] = HARDWARE_PROFILE;' in source
|
||||
assert 'doc["output_count"] = MAX_RELAYS;' in source
|
||||
assert 'for (int i = 0; i < MAX_RELAYS; i++)' in source
|
||||
assert 'relay["hardware_channel"] = appConfig.relays[i].hardwareChannel;' in source
|
||||
assert 'relay["available"] = appConfig.relays[i].available;' in source
|
||||
assert 'relays.state[index] = enabled;' in source
|
||||
assert 'relays.relay1' not in source
|
||||
assert 'relays.relay2' not in source
|
||||
|
||||
|
||||
def test_temp_scan_assign_clear_contract_fixtures():
|
||||
scan = load_fixture("temp_scan_response.json")
|
||||
assign_request = load_fixture("temp_assign_request.json")
|
||||
|
||||
Reference in New Issue
Block a user