api: make relay outputs hardware-profile aware

This commit is contained in:
2026-06-09 15:13:57 -06:00
parent f2966518da
commit c166b38730
10 changed files with 183 additions and 37 deletions
@@ -1703,11 +1703,11 @@ void oledShowRelayPage() {
oled.print(appConfig.relays[0].name);
oled.print(": ");
oled.println(relays.relay1 ? "ON" : "OFF");
oled.println(relays.state[0] ? "ON" : "OFF");
oled.print(appConfig.relays[1].name);
oled.print(": ");
oled.println(relays.relay2 ? "ON" : "OFF");
oled.println(relays.state[1] ? "ON" : "OFF");
oled.display();
}
@@ -1945,13 +1945,20 @@ void printNetworkStatus() {
void buildConfigDocument(JsonObject doc) {
doc["device_name"] = appConfig.deviceName;
doc["hardware_profile"] = HARDWARE_PROFILE;
doc["output_count"] = MAX_RELAYS;
JsonArray relaysArray = doc.createNestedArray("relays");
for (int i = 0; i < MAX_RELAYS; i++) {
JsonObject relay = relaysArray.createNestedObject();
relay["id"] = appConfig.relays[i].id;
relay["name"] = appConfig.relays[i].name;
relay["role"] = appConfig.relays[i].role;
relay["hardware_channel"] = appConfig.relays[i].hardwareChannel;
relay["hardware_profile"] = HARDWARE_PROFILE;
relay["pin"] = appConfig.relays[i].pin;
relay["enabled"] = appConfig.relays[i].enabled;
relay["available"] = appConfig.relays[i].available;
}
JsonObject bms = doc.createNestedObject("bms");
@@ -2277,20 +2284,18 @@ void buildStatusDocument(JsonDocument& doc) {
}
JsonArray relayStates = doc.createNestedArray("relays");
JsonObject relay1 = relayStates.createNestedObject();
relay1["id"] = appConfig.relays[0].id;
relay1["name"] = appConfig.relays[0].name;
relay1["pin"] = appConfig.relays[0].pin;
relay1["enabled"] = appConfig.relays[0].enabled;
relay1["state"] = relays.relay1;
JsonObject relay2 = relayStates.createNestedObject();
relay2["id"] = appConfig.relays[1].id;
relay2["name"] = appConfig.relays[1].name;
relay2["pin"] = appConfig.relays[1].pin;
relay2["enabled"] = appConfig.relays[1].enabled;
relay2["state"] = relays.relay2;
for (int i = 0; i < MAX_RELAYS; i++) {
JsonObject relay = relayStates.createNestedObject();
relay["id"] = appConfig.relays[i].id;
relay["name"] = appConfig.relays[i].name;
relay["role"] = appConfig.relays[i].role;
relay["hardware_channel"] = appConfig.relays[i].hardwareChannel;
relay["hardware_profile"] = HARDWARE_PROFILE;
relay["pin"] = appConfig.relays[i].pin;
relay["enabled"] = appConfig.relays[i].enabled;
relay["available"] = appConfig.relays[i].available;
relay["state"] = relays.state[i];
}
JsonObject vehicle = doc.createNestedObject("vehicle");
vehicle["ignition_on"] = digitalRead(IGNITION_PIN);
@@ -2351,11 +2356,15 @@ void sendError(Stream& output, const char* message) {
output.println();
}
bool setRelayById(const String& relayId, bool enabled) {
if (relayId == "relay_1") relays.relay1 = enabled;
else if (relayId == "relay_2") relays.relay2 = enabled;
else return false;
int findRelayConfigIndex(const String& id);
bool setRelayById(const String& relayId, bool enabled) {
int index = findRelayConfigIndex(relayId);
if (index < 0 || !appConfig.relays[index].available) {
return false;
}
relays.state[index] = enabled;
updateRelayOutputs();
return true;
}
@@ -2380,13 +2389,20 @@ void sendConfigResponse(Stream& output, bool ok = true) {
JsonObject config = doc.createNestedObject("config");
config["device_name"] = appConfig.deviceName;
config["hardware_profile"] = HARDWARE_PROFILE;
config["output_count"] = MAX_RELAYS;
JsonArray relaysArray = config.createNestedArray("relays");
for (int i = 0; i < MAX_RELAYS; i++) {
JsonObject relay = relaysArray.createNestedObject();
relay["id"] = appConfig.relays[i].id;
relay["name"] = appConfig.relays[i].name;
relay["role"] = appConfig.relays[i].role;
relay["hardware_channel"] = appConfig.relays[i].hardwareChannel;
relay["hardware_profile"] = HARDWARE_PROFILE;
relay["pin"] = appConfig.relays[i].pin;
relay["enabled"] = appConfig.relays[i].enabled;
relay["available"] = appConfig.relays[i].available;
}
JsonObject bms = config.createNestedObject("bms");