Renamed WifiSettings to NetworkSettings and implemented first ethernet initialization

This commit is contained in:
Thomas Basler 2022-07-13 21:30:53 +02:00
parent 9edd35444d
commit c7aa22ce6c
5 changed files with 71 additions and 24 deletions

View File

@ -2,11 +2,12 @@
#pragma once #pragma once
#include <DNSServer.h> #include <DNSServer.h>
#include <WiFi.h>
#include <memory> #include <memory>
class WiFiSettingsClass { class NetworkSettingsClass {
public: public:
WiFiSettingsClass(); NetworkSettingsClass();
void init(); void init();
void loop(); void loop();
void applyConfig(); void applyConfig();
@ -17,6 +18,7 @@ private:
void setHostname(); void setHostname();
void setStaticIp(); void setStaticIp();
void setupMode(); void setupMode();
void NetworkEvent(WiFiEvent_t event);
bool adminEnabled = true; bool adminEnabled = true;
bool forceDisconnection = false; bool forceDisconnection = false;
int adminTimeoutCounter = 0; int adminTimeoutCounter = 0;
@ -30,4 +32,4 @@ private:
bool dnsServerStatus = false; bool dnsServerStatus = false;
}; };
extern WiFiSettingsClass WiFiSettings; extern NetworkSettingsClass NetworkSettings;

View File

@ -4,7 +4,7 @@
*/ */
#include "MqttSettings.h" #include "MqttSettings.h"
#include "Configuration.h" #include "Configuration.h"
#include "WiFiSettings.h" #include "NetworkSettings.h"
#include <AsyncMqttClient.h> #include <AsyncMqttClient.h>
#include <Ticker.h> #include <Ticker.h>
#include <WiFi.h> #include <WiFi.h>
@ -54,7 +54,7 @@ void MqttSettingsClass::performConnect()
willTopic = getPrefix() + config.Mqtt_LwtTopic; willTopic = getPrefix() + config.Mqtt_LwtTopic;
mqttClient.setWill(willTopic.c_str(), 2, config.Mqtt_Retain, config.Mqtt_LwtValue_Offline); mqttClient.setWill(willTopic.c_str(), 2, config.Mqtt_Retain, config.Mqtt_LwtValue_Offline);
clientId = WiFiSettings.getApName(); clientId = NetworkSettings.getApName();
mqttClient.setClientId(clientId.c_str()); mqttClient.setClientId(clientId.c_str());
mqttClient.connect(); mqttClient.connect();

View File

@ -2,24 +2,66 @@
/* /*
* Copyright (C) 2022 Thomas Basler and others * Copyright (C) 2022 Thomas Basler and others
*/ */
#include "WiFiSettings.h" #include "NetworkSettings.h"
#include "Configuration.h" #include "Configuration.h"
#include "defaults.h" #include "defaults.h"
#include <WiFi.h> #include <WiFi.h>
#ifdef OPENDTU_ETHERNET
#include <ETH.h>
#endif
WiFiSettingsClass::WiFiSettingsClass() NetworkSettingsClass::NetworkSettingsClass()
: apIp(192, 168, 4, 1) : apIp(192, 168, 4, 1)
, apNetmask(255, 255, 255, 0) , apNetmask(255, 255, 255, 0)
{ {
dnsServer.reset(new DNSServer()); dnsServer.reset(new DNSServer());
} }
void WiFiSettingsClass::init() void NetworkSettingsClass::init()
{ {
using namespace std::placeholders;
WiFi.onEvent(std::bind(&NetworkSettingsClass::NetworkEvent, this, _1));
setupMode(); setupMode();
} }
void WiFiSettingsClass::setupMode() void NetworkSettingsClass::NetworkEvent(WiFiEvent_t event)
{
switch (event) {
#ifdef OPENDTU_ETHERNET
case ARDUINO_EVENT_ETH_START:
Serial.println("ETH start");
ETH.setHostname("esp32-ethernet");
break;
case ARDUINO_EVENT_ETH_STOP:
Serial.println("ETH stop");
break;
case ARDUINO_EVENT_ETH_CONNECTED:
Serial.println("ETH connected");
ETH.config(INADDR_NONE, INADDR_NONE, INADDR_NONE, INADDR_NONE);
break;
case ARDUINO_EVENT_ETH_GOT_IP:
Serial.println("ETH got IP");
break;
case ARDUINO_EVENT_ETH_DISCONNECTED:
Serial.println("ETH disconnected");
break;
#endif
case ARDUINO_EVENT_WIFI_STA_CONNECTED:
Serial.println("WiFi connected");
break;
case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
Serial.println("WiFi disconnected");
break;
case ARDUINO_EVENT_WIFI_STA_GOT_IP:
Serial.println("WiFi got ip");
break;
default:
Serial.printf("Event: %d\n", event);
}
}
void NetworkSettingsClass::setupMode()
{ {
if (adminEnabled) { if (adminEnabled) {
WiFi.mode(WIFI_AP_STA); WiFi.mode(WIFI_AP_STA);
@ -34,16 +76,19 @@ void WiFiSettingsClass::setupMode()
dnsServerStatus = false; dnsServerStatus = false;
WiFi.mode(WIFI_STA); WiFi.mode(WIFI_STA);
} }
#ifdef OPENDTU_ETHERNET
ETH.begin();
#endif
} }
void WiFiSettingsClass::enableAdminMode() void NetworkSettingsClass::enableAdminMode()
{ {
adminEnabled = true; adminEnabled = true;
adminTimeoutCounter = 0; adminTimeoutCounter = 0;
setupMode(); setupMode();
} }
String WiFiSettingsClass::getApName() String NetworkSettingsClass::getApName()
{ {
uint32_t chipId = 0; uint32_t chipId = 0;
for (int i = 0; i < 17; i += 8) { for (int i = 0; i < 17; i += 8) {
@ -52,7 +97,7 @@ String WiFiSettingsClass::getApName()
return String(ACCESS_POINT_NAME + String(chipId)); return String(ACCESS_POINT_NAME + String(chipId));
} }
void WiFiSettingsClass::loop() void NetworkSettingsClass::loop()
{ {
if (millis() - lastTimerCall > 1000) { if (millis() - lastTimerCall > 1000) {
adminTimeoutCounter++; adminTimeoutCounter++;
@ -101,7 +146,7 @@ void WiFiSettingsClass::loop()
} }
} }
void WiFiSettingsClass::applyConfig() void NetworkSettingsClass::applyConfig()
{ {
setHostname(); setHostname();
if (!strcmp(Configuration.get().WiFi_Ssid, "")) { if (!strcmp(Configuration.get().WiFi_Ssid, "")) {
@ -121,7 +166,7 @@ void WiFiSettingsClass::applyConfig()
setStaticIp(); setStaticIp();
} }
void WiFiSettingsClass::setHostname() void NetworkSettingsClass::setHostname()
{ {
Serial.print(F("Setting Hostname... ")); Serial.print(F("Setting Hostname... "));
if (strcmp(Configuration.get().WiFi_Hostname, "")) { if (strcmp(Configuration.get().WiFi_Hostname, "")) {
@ -135,7 +180,7 @@ void WiFiSettingsClass::setHostname()
} }
} }
void WiFiSettingsClass::setStaticIp() void NetworkSettingsClass::setStaticIp()
{ {
if (!Configuration.get().WiFi_Dhcp) { if (!Configuration.get().WiFi_Dhcp) {
Serial.print(F("Configuring WiFi STA static IP... ")); Serial.print(F("Configuring WiFi STA static IP... "));
@ -149,4 +194,4 @@ void WiFiSettingsClass::setStaticIp()
} }
} }
WiFiSettingsClass WiFiSettings; NetworkSettingsClass NetworkSettings;

View File

@ -6,7 +6,7 @@
#include "ArduinoJson.h" #include "ArduinoJson.h"
#include "AsyncJson.h" #include "AsyncJson.h"
#include "Configuration.h" #include "Configuration.h"
#include "WiFiSettings.h" #include "NetworkSettings.h"
#include "helper.h" #include "helper.h"
void WebApiNetworkClass::init(AsyncWebServer* server) void WebApiNetworkClass::init(AsyncWebServer* server)
@ -39,7 +39,7 @@ void WebApiNetworkClass::onNetworkStatus(AsyncWebServerRequest* request)
root[F("sta_mac")] = WiFi.macAddress(); root[F("sta_mac")] = WiFi.macAddress();
root[F("sta_rssi")] = WiFi.RSSI(); root[F("sta_rssi")] = WiFi.RSSI();
root[F("ap_status")] = ((WiFi.getMode() & WIFI_AP) != 0); root[F("ap_status")] = ((WiFi.getMode() & WIFI_AP) != 0);
root[F("ap_ssid")] = WiFiSettings.getApName(); root[F("ap_ssid")] = NetworkSettings.getApName();
root[F("ap_ip")] = WiFi.softAPIP().toString(); root[F("ap_ip")] = WiFi.softAPIP().toString();
root[F("ap_mac")] = WiFi.softAPmacAddress(); root[F("ap_mac")] = WiFi.softAPmacAddress();
root[F("ap_stationnum")] = WiFi.softAPgetStationNum(); root[F("ap_stationnum")] = WiFi.softAPgetStationNum();
@ -199,6 +199,6 @@ void WebApiNetworkClass::onNetworkAdminPost(AsyncWebServerRequest* request)
response->setLength(); response->setLength();
request->send(response); request->send(response);
WiFiSettings.enableAdminMode(); NetworkSettings.enableAdminMode();
WiFiSettings.applyConfig(); NetworkSettings.applyConfig();
} }

View File

@ -9,7 +9,7 @@
#include "MqttSettings.h" #include "MqttSettings.h"
#include "NtpSettings.h" #include "NtpSettings.h"
#include "WebApi.h" #include "WebApi.h"
#include "WiFiSettings.h" #include "NetworkSettings.h"
#include "defaults.h" #include "defaults.h"
#include <Arduino.h> #include <Arduino.h>
#include <LittleFS.h> #include <LittleFS.h>
@ -55,9 +55,9 @@ void setup()
// Initialize WiFi // Initialize WiFi
Serial.print(F("Initialize WiFi... ")); Serial.print(F("Initialize WiFi... "));
WiFiSettings.init(); NetworkSettings.init();
Serial.println(F("done")); Serial.println(F("done"));
WiFiSettings.applyConfig(); NetworkSettings.applyConfig();
// Initialize NTP // Initialize NTP
Serial.print(F("Initialize NTP... ")); Serial.print(F("Initialize NTP... "));
@ -100,7 +100,7 @@ void setup()
void loop() void loop()
{ {
WiFiSettings.loop(); NetworkSettings.loop();
yield(); yield();
Hoymiles.loop(); Hoymiles.loop();
yield(); yield();