// WebServerModule.cpp
#include "WebServerModule.h"
WebServerModule::WebServerModule(INA219Module& inaModule, int relayPin, int secondRelayPin, int thirdRelayPin, int fourthRelayPin)
: _inaModule(inaModule), _server(80), _relayPin(relayPin), _secondRelayPin(secondRelayPin),
_thirdRelayPin(thirdRelayPin), _fourthRelayPin(fourthRelayPin), relayState(false), secondRelayState(false),
thirdrelayState(false), fourthRelayState(false) {}
void WebServerModule::begin() {
// Configure pins for relays as outputs
pinMode(_relayPin, OUTPUT);
pinMode(_secondRelayPin, OUTPUT);
pinMode(_thirdRelayPin, OUTPUT);
pinMode(_fourthRelayPin, OUTPUT);
// Configure server endpoints
_server.on("/", HTTP_GET, std::bind(&WebServerModule::handleRoot, this, std::placeholders::_1));
_server.on("/values", HTTP_GET, std::bind(&WebServerModule::handleValues, this, std::placeholders::_1));
_server.on("/toggle1", HTTP_GET, std::bind(&WebServerModule::handleToggle, this, std::placeholders::_1));
_server.on("/toggle2", HTTP_GET, std::bind(&WebServerModule::handleSecondToggle, this, std::placeholders::_1));
_server.on("/toggle3", HTTP_GET, std::bind(&WebServerModule::handleThirdToggle, this, std::placeholders::_1));
_server.on("/toggle4", HTTP_GET, std::bind(&WebServerModule::handleFourthToggle, this, std::placeholders::_1));
_server.begin();
}
void WebServerModule::handleRoot(AsyncWebServerRequest *request) {
String html = "
";
html += "";
html += "
Energieverbrauchsmonitor
";
// Anzeige der Werte (unchanged)
html += "
Strom: A
";
html += "
Spannung: V
";
html += "
Leistung: W
";
html += "
Durchschnittliche Leistung: W
";
html += "
Gesamtenergie: Wh
";
// JavaScript-Code für die Werteaktualisierung und Schaltersteuerung
html += "";
// Schalter 1 (K1)
html += "
";
html += "";
html += "";
html += "
";
// Schalter 2 (K2)
html += "
";
html += "";
html += "";
html += "
";
// Schalter 3 (K3)
html += "
";
html += "";
html += "";
html += "
";
// Schalter 4 (K4)
html += "
";
html += "";
html += "";
html += "
";
// JavaScript-Code für die Schaltersteuerung (unchanged)
html += "";
html += "
";
request->send(200, "text/html", html);
}
void WebServerModule::handleValues(AsyncWebServerRequest *request) {
String values = "{\"current_A\":" + String(_inaModule.getCurrent()) + ",";
values += "\"busVoltage_V\":" + String(_inaModule.getBusVoltage()) + ",";
values += "\"power_W\":" + String(_inaModule.getPower()) + ",";
values += "\"avgPower_W\":" + String(_inaModule.calculateAveragePower()) + ",";
values += "\"totalEnergy\":" + String(_inaModule.getTotalEnergy()) + ",";
values += "\"relay1State\":" + String(getRelayState() ? 1 : 0) + ",";
values += "\"relay2State\":" + String(getSecondRelayState() ? 1 : 0) + ",";
values += "\"relay3State\":" + String(getThirdRelayState() ? 1 : 0) + ",";
values += "\"relay4State\":" + String(getFourthRelayState() ? 1 : 0) + "}";
request->send(200, "application/json", values);
}
void WebServerModule::handleToggle(AsyncWebServerRequest *request) {
if (request->hasParam("state")) {
int state = request->getParam("state")->value().toInt();
relayState = state;
digitalWrite(_relayPin, relayState ? LOW : HIGH);
Serial.print("Relay 1 state set to: ");
Serial.println(relayState);
request->send(200, "text/plain", relayState ? "Relay 1 turned on" : "Relay 1 turned off");
} else {
request->send(400); // Fehler, keine Zustandsinformation
}
}
void WebServerModule::handleSecondToggle(AsyncWebServerRequest *request) {
if (request->hasParam("state")) {
int state = request->getParam("state")->value().toInt();
secondRelayState = state;
digitalWrite(_secondRelayPin, secondRelayState ? LOW : HIGH);
Serial.print("Relay 2 state set to: ");
Serial.println(secondRelayState);
request->send(200, "text/plain", secondRelayState ? "Relay 2 turned on" : "Relay 2 turned off");
} else {
request->send(400); // Fehler, keine Zustandsinformation
}
}
void WebServerModule::handleThirdToggle(AsyncWebServerRequest *request) {
if (request->hasParam("state")) {
int state = request->getParam("state")->value().toInt();
thirdrelayState = state;
digitalWrite(_thirdRelayPin, thirdrelayState ? LOW : HIGH);
Serial.print("Relay 3 state set to: ");
Serial.println(thirdrelayState);
request->send(200, "text/plain", thirdrelayState ? "Relay 3 turned on" : "Relay 3 turned off");
} else {
request->send(400); // Error, no state information
}
}
void WebServerModule::handleFourthToggle(AsyncWebServerRequest *request) {
if (request->hasParam("state")) {
int state = request->getParam("state")->value().toInt();
fourthRelayState = state;
digitalWrite(_fourthRelayPin, fourthRelayState ? LOW : HIGH);
Serial.print("Relay 4 state set to: ");
Serial.println(fourthRelayState);
request->send(200, "text/plain", fourthRelayState ? "Relay 4 turned on" : "Relay 4 turned off");
} else {
request->send(400); // Error, no state information
}
}
void WebServerModule::handleToggleState(bool state) {
relayState = state;
digitalWrite(_relayPin, relayState ? LOW : HIGH); // Inverted logic for active LOW relay
}
void WebServerModule::handleSecondToggleState(bool state) {
secondRelayState = state;
digitalWrite(_secondRelayPin, secondRelayState ? LOW : HIGH); // Inverted logic for active LOW relay
}
void WebServerModule::handleThirdToggleState(bool state) {
thirdrelayState = state;
digitalWrite(_thirdRelayPin, thirdrelayState ? LOW : HIGH); // Inverted logic for active LOW relay
}
void WebServerModule::handleFourthToggleState(bool state) {
fourthRelayState = state;
digitalWrite(_fourthRelayPin, fourthRelayState ? LOW : HIGH); // Inverted logic for active LOW relay
}
bool WebServerModule::getRelayState() const {
return relayState;
}
bool WebServerModule::getSecondRelayState() const {
return secondRelayState;
}
bool WebServerModule::getThirdRelayState() const {
return thirdrelayState;
}
bool WebServerModule::getFourthRelayState() const {
return fourthRelayState;
}