Skip to content

Commit

Permalink
Ethernet support
Browse files Browse the repository at this point in the history
(cherry picked from commit 80fc2de58e748dbd4e24afed6d2cca270afc5ed9)
  • Loading branch information
mathieucarbou committed Feb 6, 2024
1 parent 9834a2b commit 848b2d1
Show file tree
Hide file tree
Showing 7 changed files with 157 additions and 45 deletions.
1 change: 1 addition & 0 deletions include/YaSolRWebsite.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ namespace YaSolR {
Statistic _memoryUsedStat = Statistic(&_dashboard, "Heap Memory Used");
Statistic _ipAddressStat = Statistic(&_dashboard, "IP Address");
Statistic _macAddressStat = Statistic(&_dashboard, "MAC Address");
Statistic _netModeStat = Statistic(&_dashboard, "Network Mode");
Statistic _output1SwitchCountStat = Statistic(&_dashboard, "Output 1 Switch Count");
Statistic _output2SwitchCountStat = Statistic(&_dashboard, "Output 2 Switch Count");
Statistic _relay1SwitchCountStat = Statistic(&_dashboard, "Relay 1 Switch Count");
Expand Down
65 changes: 63 additions & 2 deletions platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,15 @@ lib_ldf_mode = deep+
; https://registry.platformio.org/
lib_deps =
ArduinoOTA
bertmelis/espMqttClient @ 1.6.0
bblanchon/ArduinoJson @ 7.0.3
bblanchon/StreamUtils @ 1.8.0
esp-arduino-libs/ESP32_Button @ 0.0.1
esphome/AsyncTCP-esphome @ 2.1.1
mathieucarbou/ESP Async WebServer @ 2.7.0
mathieucarbou/MycilaHADiscovery @ 1.0.1
mathieucarbou/MycilaConfig @ 1.3.0
mathieucarbou/MycilaESPConnect @ 2.1.2
mathieucarbou/MycilaESPConnect @ 3.0.0
mathieucarbou/MycilaJSY @ 3.3.0
mathieucarbou/MycilaLogger @ 2.0.2
mathieucarbou/MycilaMQTT @ 1.2.0
Expand All @@ -44,7 +45,6 @@ lib_deps =
milesburton/DallasTemperature @ 3.11.0
olikraus/U8g2 @ 2.35.9
paulstoffregen/OneWire @ 2.3.8
https://github.com/bertmelis/espMqttClient
; fabianoriccardi/Dimmable Light for Arduino @ 1.6.0
https://github.com/mathieucarbou/fabianoriccardi-dimmable-light#fixes
build_flags =
Expand All @@ -60,6 +60,7 @@ build_flags =
-D ARDUINO_LOOP_STACK_SIZE=256*15
-D CONFIG_ASYNC_TCP_RUNNING_CORE=1
-D CONFIG_ASYNC_TCP_STACK_SIZE=256*15
-D CONFIG_ETH_ENABLED
-D DASH_DEFAULT_CARD_SIZE_LG=6
-D DASH_DEFAULT_CARD_SIZE_MD=6
-D DASH_DEFAULT_CARD_SIZE_SM=6
Expand Down Expand Up @@ -412,22 +413,82 @@ board = esp32-poe
[env:oss-wt32_eth01]
extends = env:oss-esp32
board = wt32-eth01
build_flags =
${env.build_flags}
${oss.build_flags}
${release.build_flags}
-D YASOLR_ALLOW_ETHERNET
-D ESPCONNECT_ETH_RESET_ON_START
-D ETH_PHY_TYPE=ETH_PHY_LAN8720
-D ETH_PHY_ADDR=1
-D ETH_PHY_MDC=23
-D ETH_PHY_MDIO=18
-D ETH_CLK_MODE=ETH_CLOCK_GPIO0_IN
-D ETH_PHY_POWER=16

[env:oss-wt32_eth01-debug]
extends = env:oss-esp32-debug
board = wt32-eth01
build_flags =
${env.build_flags}
${oss.build_flags}
${debug.build_flags}
-D YASOLR_ALLOW_ETHERNET
-D ESPCONNECT_ETH_RESET_ON_START
-D ETH_PHY_TYPE=ETH_PHY_LAN8720
-D ETH_PHY_ADDR=1
-D ETH_PHY_MDC=23
-D ETH_PHY_MDIO=18
-D ETH_CLK_MODE=ETH_CLOCK_GPIO0_IN
-D ETH_PHY_POWER=16

[env:pro-wt32_eth01]
extends = env:pro-esp32
board = wt32-eth01
build_flags =
${env.build_flags}
${pro.build_flags}
${release.build_flags}
-D YASOLR_ALLOW_ETHERNET
-D ESPCONNECT_ETH_RESET_ON_START
-D ETH_PHY_TYPE=ETH_PHY_LAN8720
-D ETH_PHY_ADDR=1
-D ETH_PHY_MDC=23
-D ETH_PHY_MDIO=18
-D ETH_CLK_MODE=ETH_CLOCK_GPIO0_IN
-D ETH_PHY_POWER=16

[env:pro-wt32_eth01-debug]
extends = env:pro-esp32-debug
board = wt32-eth01
build_flags =
${env.build_flags}
${pro.build_flags}
${debug.build_flags}
-D YASOLR_ALLOW_ETHERNET
-D ESPCONNECT_ETH_RESET_ON_START
-D ETH_PHY_TYPE=ETH_PHY_LAN8720
-D ETH_PHY_ADDR=1
-D ETH_PHY_MDC=23
-D ETH_PHY_MDIO=18
-D ETH_CLK_MODE=ETH_CLOCK_GPIO0_IN
-D ETH_PHY_POWER=16

[env:trial-wt32_eth01]
extends = env:trial-esp32
board = wt32-eth01
build_flags =
${env.build_flags}
${trial.build_flags}
${release.build_flags}
-D YASOLR_ALLOW_ETHERNET
-D ESPCONNECT_ETH_RESET_ON_START
-D ETH_PHY_TYPE=ETH_PHY_LAN8720
-D ETH_PHY_ADDR=1
-D ETH_PHY_MDC=23
-D ETH_PHY_MDIO=18
-D ETH_CLK_MODE=ETH_CLOCK_GPIO0_IN
-D ETH_PHY_POWER=16

; lilygo_eth_lite_s3

Expand Down
4 changes: 2 additions & 2 deletions platformio_override.ini.template
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,15 @@
; SERIAL MONITOR: CHOOSE ONE OPTION
; ---------------------------------

monitor_port = /dev/cu.usbserial-0001
; monitor_port = /dev/cu.usbserial-0001
; monitor_port = socket://arduino-playground.local:4444

; -------------------------
; UPLOAD: CHOOSE ONE OPTION
; -------------------------

upload_protocol = esptool
upload_port = /dev/cu.usbserial-0001
; upload_port = /dev/cu.usbserial-0001

; upload_protocol = espota
; upload_port = 192.168.125.139
Expand Down
5 changes: 4 additions & 1 deletion src/YaSolRConnector.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -369,8 +369,11 @@ void YaSolR::Connector::_publish() {

// network
{
ESPConnectMode mode = ESPConnect.getMode();
Mycila::MQTT.publish(baseTopic + "/network/ip_address", ESPConnect.getIPAddress().toString());
Mycila::MQTT.publish(baseTopic + "/network/mac_address", ESPConnect.getMacAddress());
Mycila::MQTT.publish(baseTopic + "/network/mac_address", ESPConnect.getMACAddress());
Mycila::MQTT.publish(baseTopic + "/network/mode", mode == ESPConnectMode::AP ? "AP" : (mode == ESPConnectMode::STA ? "STA" : (mode == ESPConnectMode::ETH ? "ETH" : "NONE")));
Mycila::MQTT.publish(baseTopic + "/network/state", ESPConnect.getStateName());
Mycila::MQTT.publish(baseTopic + "/network/wifi_bssid", ESPConnect.getWiFiBSSID());
Mycila::MQTT.publish(baseTopic + "/network/wifi_quality", String(ESPConnect.getWiFiSignalQuality()));
Mycila::MQTT.publish(baseTopic + "/network/wifi_rssi", String(ESPConnect.getWiFiRSSI()));
Expand Down
56 changes: 28 additions & 28 deletions src/YaSolRController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -95,30 +95,30 @@ void YaSolR::Controller::begin() {
ESPConnect.listen([this](ESPConnectState previous, ESPConnectState state) {
Mycila::Logger.debug(TAG, "NetworkState: %s => %s", ESPConnect.getStateName(previous), ESPConnect.getStateName(state));
switch (state) {
case ESPConnectState::STA_CONNECTED:
case ESPConnectState::NETWORK_CONNECTED:
Mycila::Lights.setRed(false);
Mycila::Logger.info(TAG, "Connected to WiFi %s with IP address %s", ESPConnect.getWiFiSSID().c_str(), ESPConnect.getIPAddress().toString().c_str());
Mycila::Logger.info(TAG, "Connected with IP address %s", ESPConnect.getIPAddress().toString().c_str());
_events.push(Event::NETWORK_CONNECTED);
break;
case ESPConnectState::AP_CONNECTED:
case ESPConnectState::AP_STARTED:
Mycila::Lights.setRed(false);
Mycila::Logger.info(TAG, "Access Point %s started with IP address %s", ESPConnect.getWiFiSSID().c_str(), ESPConnect.getIPAddress().toString().c_str());
_events.push(Event::NETWORK_CONNECTED);
break;
case ESPConnectState::STA_DISCONNECTED:
case ESPConnectState::NETWORK_DISCONNECTED:
Mycila::Lights.setRed(true);
Mycila::Logger.warn(TAG, "Disconnected from WiFi %s", ESPConnect.getWiFiSSIDConfigured().c_str());
Mycila::Logger.warn(TAG, "Disconnected!");
_events.push(Event::NETWORK_DISCONNECTED);
break;
case ESPConnectState::NETWORK_DISABLED:
Mycila::Lights.setRed(true);
Mycila::Logger.info(TAG, "Disable Network...");
break;
case ESPConnectState::STA_CONNECTING:
case ESPConnectState::NETWORK_CONNECTING:
Mycila::Lights.setRed(true);
Mycila::Logger.info(TAG, "Connecting to WiFi %s (timeout: %u seconds)...", ESPConnect.getWiFiSSIDConfigured().c_str(), ESPConnect.getWiFiConnectTimeout());
Mycila::Logger.info(TAG, "Connecting... (timeout: %u seconds)", ESPConnect.getConnectTimeout());
break;
case ESPConnectState::AP_CONNECTING:
case ESPConnectState::AP_STARTING:
Mycila::Lights.setRed(true);
Mycila::Logger.info(TAG, "Starting Access Point %s...", ESPConnect.getAccessPointSSID().c_str());
break;
Expand All @@ -132,15 +132,15 @@ void YaSolR::Controller::begin() {
Mycila::Buzzer.beep(2);
break;
case ESPConnectState::PORTAL_COMPLETE: {
bool ap = ESPConnect.isAPMode();
bool ap = ESPConnect.hasConfiguredAPMode();
if (ap) {
Mycila::Logger.info(TAG, "Captive Portal: Access Point configured");
Mycila::Config.setBool(KEY_AP_MODE_ENABLE, true);
} else {
Mycila::Logger.info(TAG, "Captive Portal: WiFi configured");
Mycila::Config.setBool(KEY_AP_MODE_ENABLE, false);
Mycila::Config.set(KEY_WIFI_SSID, ESPConnect.getWiFiSSIDConfigured());
Mycila::Config.set(KEY_WIFI_PASSWORD, ESPConnect.getWiFiPassword());
Mycila::Config.set(KEY_WIFI_SSID, ESPConnect.getConfiguredWiFiSSID());
Mycila::Config.set(KEY_WIFI_PASSWORD, ESPConnect.getConfiguredWiFiPassword());
}
_restartThrottle.setEnable(true);
break;
Expand All @@ -149,11 +149,11 @@ void YaSolR::Controller::begin() {
Mycila::Logger.warn(TAG, "Captive Portal: timed out.");
_restartThrottle.setEnable(true);
break;
case ESPConnectState::STA_TIMEOUT:
Mycila::Logger.error(TAG, "Unable to connect to SSID: %s", ESPConnect.getWiFiSSIDConfigured().c_str());
case ESPConnectState::NETWORK_TIMEOUT:
Mycila::Logger.error(TAG, "Unable to connect to SSID: %s", ESPConnect.getConfiguredWiFiSSID().c_str());
break;
case ESPConnectState::STA_RECONNECTING:
Mycila::Logger.info(TAG, "Trying to reconnect to WiFi %s", ESPConnect.getWiFiSSIDConfigured().c_str());
case ESPConnectState::NETWORK_RECONNECTING:
Mycila::Logger.info(TAG, "Trying to reconnect to WiFi %s", ESPConnect.getConfiguredWiFiSSID().c_str());
break;
default:
break;
Expand All @@ -173,12 +173,12 @@ void YaSolR::Controller::begin() {
_events.push(Event::DISPLAY_RECONFIGURED);
else if (key == KEY_BUTTON_ENABLE)
_events.push(Event::BUTTON_RECONFIGURED);
else if (key == KEY_AP_MODE_ENABLE && (ESPConnect.getState() == ESPConnectState::AP_CONNECTED ||
ESPConnect.getState() == ESPConnectState::STA_CONNECTING ||
ESPConnect.getState() == ESPConnectState::STA_CONNECTED ||
ESPConnect.getState() == ESPConnectState::STA_TIMEOUT ||
ESPConnect.getState() == ESPConnectState::STA_DISCONNECTED ||
ESPConnect.getState() == ESPConnectState::STA_RECONNECTING))
else if (key == KEY_AP_MODE_ENABLE && (ESPConnect.getState() == ESPConnectState::AP_STARTED ||
ESPConnect.getState() == ESPConnectState::NETWORK_CONNECTING ||
ESPConnect.getState() == ESPConnectState::NETWORK_CONNECTED ||
ESPConnect.getState() == ESPConnectState::NETWORK_TIMEOUT ||
ESPConnect.getState() == ESPConnectState::NETWORK_DISCONNECTED ||
ESPConnect.getState() == ESPConnectState::NETWORK_RECONNECTING))
_events.push(Event::NETWORK_RECONFIGURED);
else if (key == KEY_BUZZER_ENABLE)
_events.push(Event::BUZZER_RECONFIGURED);
Expand Down Expand Up @@ -390,7 +390,7 @@ void YaSolR::Controller::loop() {
ESPConnect.setAutoRestart(false);
ESPConnect.setBlocking(false);
ESPConnect.setCaptivePortalTimeout(Mycila::Config.get(KEY_CAPTURE_PORTAL_TIMEOUT).toInt());
ESPConnect.setWiFiConnectTimeout(Mycila::Config.get(KEY_WIFI_CONNECTION_TIMEOUT).toInt());
ESPConnect.setConnectTimeout(Mycila::Config.get(KEY_WIFI_CONNECTION_TIMEOUT).toInt());
ESPConnect.begin(&Mycila::HTTPd.server, Mycila::Config.get(KEY_HOSTNAME), Mycila::AppInfo.name + "-" + Mycila::AppInfo.id, Mycila::Config.get(KEY_ADMIN_PASSWORD), {Mycila::Config.get(KEY_WIFI_SSID), Mycila::Config.get(KEY_WIFI_PASSWORD), Mycila::Config.getBool(KEY_AP_MODE_ENABLE)});

_triggerRefresh();
Expand Down Expand Up @@ -493,22 +493,22 @@ void YaSolR::Controller::updateDisplay() {

String networkState;
switch (ESPConnect.getState()) {
case ESPConnectState::STA_CONNECTED:
case ESPConnectState::NETWORK_CONNECTED:
networkState = ESPConnect.getIPAddress().toString();
break;
case ESPConnectState::STA_DISCONNECTED:
case ESPConnectState::NETWORK_DISCONNECTED:
networkState = "Disconnected!";
break;
case ESPConnectState::STA_CONNECTING:
case ESPConnectState::NETWORK_CONNECTING:
networkState = "Connecting...";
break;
case ESPConnectState::STA_RECONNECTING:
case ESPConnectState::NETWORK_RECONNECTING:
networkState = "Reconnecting...";
break;
case ESPConnectState::STA_TIMEOUT:
case ESPConnectState::NETWORK_TIMEOUT:
networkState = "Connect Timeout!";
break;
case ESPConnectState::AP_CONNECTED:
case ESPConnectState::AP_STARTED:
case ESPConnectState::PORTAL_STARTED:
networkState = ESPConnect.getWiFiSSID();
break;
Expand Down
12 changes: 7 additions & 5 deletions src/YaSolRWebsite.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -269,10 +269,10 @@ void YaSolR::Website::begin() {
// config

Mycila::HTTPd.get("/config", [](AsyncWebServerRequest* request) {
AsyncWebServerResponse* response = request->beginResponse_P(200, "text/html", config_html_gz_start, config_html_gz_end - config_html_gz_start);
response->addHeader("Content-Encoding", "gzip");
request->send(response);
});
AsyncWebServerResponse* response = request->beginResponse_P(200, "text/html", config_html_gz_start, config_html_gz_end - config_html_gz_start);
response->addHeader("Content-Encoding", "gzip");
request->send(response);
});

// app stats

Expand All @@ -284,7 +284,6 @@ void YaSolR::Website::begin() {
_cpuCoresStat.set(String(ESP.getChipCores()).c_str());
_cpuModelStat.set(ESP.getChipModel());
_memoryTotalStat.set((String(ESP.getHeapSize()) + " bytes").c_str());
_macAddressStat.set(ESPConnect.getMacAddress().c_str());
_bootCountStat.set(String(Mycila::System.getBootCount()).c_str());

// home callbacks
Expand Down Expand Up @@ -444,10 +443,13 @@ void YaSolR::Website::update(bool skipWebSocketPush) {
// stats

Mycila::SystemMemory memory = Mycila::System.getMemory();
ESPConnectMode mode = ESPConnect.getMode();
_timeStat.set(Mycila::Time::getLocalStr().c_str());
_gridFreqStat.set((String(Mycila::Grid.getFrequency()) + " Hz").c_str());
_gridVoltStat.set((String(Mycila::Grid.getVoltage()) + " V").c_str());
_netModeStat.set(mode == ESPConnectMode::AP ? "AP" : (mode == ESPConnectMode::STA ? "WiFi" : (mode == ESPConnectMode::ETH ? "Ethernet" : "")));
_ipAddressStat.set(ESPConnect.getIPAddress().toString().c_str());
_macAddressStat.set(ESPConnect.getMACAddress().c_str());
_memoryUsageStat.set((String(memory.usage) + " %").c_str());
_memoryUsedStat.set((String(memory.used) + " bytes").c_str());
_output1SwitchCountStat.set(String(Mycila::Router.outputs[0].relay.getSwitchCount()).c_str());
Expand Down
Loading

0 comments on commit 848b2d1

Please sign in to comment.