api: make relay outputs hardware-profile aware
This commit is contained in:
@@ -13,14 +13,20 @@ void loadDefaultConfig() {
|
||||
appConfig.relays[0] = {
|
||||
"relay_1",
|
||||
"Relay 1",
|
||||
"aux",
|
||||
1,
|
||||
RELAY_1_PIN,
|
||||
true,
|
||||
true
|
||||
};
|
||||
|
||||
appConfig.relays[1] = {
|
||||
"relay_2",
|
||||
"Relay 2",
|
||||
"fridge",
|
||||
2,
|
||||
RELAY_2_PIN,
|
||||
true,
|
||||
true
|
||||
};
|
||||
|
||||
@@ -160,8 +166,14 @@ void printConfig() {
|
||||
Serial.print(appConfig.relays[i].id);
|
||||
Serial.print(" / ");
|
||||
Serial.print(appConfig.relays[i].name);
|
||||
Serial.print(" / role ");
|
||||
Serial.print(appConfig.relays[i].role);
|
||||
Serial.print(" / channel ");
|
||||
Serial.print(appConfig.relays[i].hardwareChannel);
|
||||
Serial.print(" / GPIO ");
|
||||
Serial.print(appConfig.relays[i].pin);
|
||||
Serial.print(" / available ");
|
||||
Serial.print(appConfig.relays[i].available ? "true" : "false");
|
||||
Serial.print(" / enabled ");
|
||||
Serial.println(appConfig.relays[i].enabled ? "true" : "false");
|
||||
}
|
||||
|
||||
@@ -4,12 +4,16 @@
|
||||
|
||||
#define MAX_RELAYS 2
|
||||
#define MAX_TEMP_SENSORS 8
|
||||
#define HARDWARE_PROFILE "generic_esp32_2ch_relay"
|
||||
|
||||
struct RelayConfig {
|
||||
String id;
|
||||
String name;
|
||||
String role;
|
||||
uint8_t hardwareChannel;
|
||||
uint8_t pin;
|
||||
bool enabled;
|
||||
bool available;
|
||||
};
|
||||
|
||||
struct TempSensorConfig {
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -1,17 +1,24 @@
|
||||
#include <Arduino.h>
|
||||
#include "config.h"
|
||||
#include "app_config.h"
|
||||
#include "relays.h"
|
||||
|
||||
RelayState relays;
|
||||
|
||||
void initRelays() {
|
||||
pinMode(RELAY_1_PIN, OUTPUT);
|
||||
pinMode(RELAY_2_PIN, OUTPUT);
|
||||
for (int i = 0; i < MAX_RELAYS; i++) {
|
||||
if (appConfig.relays[i].available) {
|
||||
pinMode(appConfig.relays[i].pin, OUTPUT);
|
||||
}
|
||||
}
|
||||
|
||||
updateRelayOutputs();
|
||||
}
|
||||
|
||||
void updateRelayOutputs() {
|
||||
digitalWrite(RELAY_1_PIN, relays.relay1);
|
||||
digitalWrite(RELAY_2_PIN, relays.relay2);
|
||||
for (int i = 0; i < MAX_RELAYS; i++) {
|
||||
if (appConfig.relays[i].available) {
|
||||
digitalWrite(appConfig.relays[i].pin, relays.state[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
#include "app_config.h"
|
||||
|
||||
struct RelayState {
|
||||
bool relay1 = false;
|
||||
bool relay2 = false;
|
||||
bool state[MAX_RELAYS] = {false};
|
||||
};
|
||||
|
||||
extern RelayState relays;
|
||||
|
||||
Reference in New Issue
Block a user