#include #include #include "../global_data/defines.h" #include #include "../global_data/global_data.h" #include #define ETH_PHY_TYPE ETH_PHY_LAN8720 #define ETH_PHY_ADDR 0 #define ETH_PHY_MDC 23 #define ETH_PHY_MDIO 18 #define ETH_PHY_POWER 14 #define ETH_CLK_MODE ETH_CLOCK_GPIO0_IN #include int64_t mac_address = ESP.getEfuseMac(); uint8_t failed_connection_attempts = 0; extern NetworkData wifi_data; extern NetworkData ethernet_data; extern Preferences prefs; // Defines the type of connection for which the hostname should be created enum HostnameType { Wireless, Ethernet, Generic }; const char * get_hostname(HostnameType host_type) { String default_hostname = "Waterlevel-" + String(mac_address, HEX); String hostname = prefs.getString("hostname", default_hostname); switch (host_type) { case Wireless: return (hostname + "-wl").c_str(); case Ethernet: return (hostname + "-eth").c_str(); default: return hostname.c_str(); } } void wifi_task(void* parameter) { LOG(ELOG_LEVEL_DEBUG, "Starting WiFi Task"); WiFi.setHostname(get_hostname(Wireless)); while (true) { if (prefs.getString(ssid_key, "") == "" || failed_connection_attempts > 5) { wifi_data.link = false; if (failed_connection_attempts > 5) { LOG(ELOG_LEVEL_DEBUG, "Failed to connect to currently saved SSID, starting SoftAP"); } else { LOG(ELOG_LEVEL_DEBUG, "No SSID saved, starting SoftAP"); } String ap_ssid = get_hostname(Wireless); WiFi.softAP(ap_ssid.c_str(), ""); LOG(ELOG_LEVEL_DEBUG, "[WIFI_TASK] Waiting for SSID now..."); String old_ssid = prefs.getString(ssid_key, "xxx"); while (prefs.getString(ssid_key, "") == "" || prefs.getString(ssid_key, "") == old_ssid) { delay(5000); } failed_connection_attempts = 0; } else { if (WiFi.isConnected() && WiFi.SSID() == prefs.getString(ssid_key, "")) { failed_connection_attempts = 0; wifi_data.rssi = WiFi.RSSI(); wifi_data.link = true; wifi_data.network_name = WiFi.SSID(); wifi_data.ip_address = WiFi.localIP().toString(); LOG(ELOG_LEVEL_DEBUG, "RSSI: %F, IP Address, %s, SSID: %s", float(WiFi.RSSI()), WiFi.localIP().toString(), prefs.getString(ssid_key, "NOSSID")); Serial.println(WiFi.localIP()); delay(5000); } else { LOG(ELOG_LEVEL_DEBUG, "Connecting to %s using password %s", prefs.getString(ssid_key, ""), prefs.getString(wifi_password_key, "")); WiFi.mode(WIFI_STA); WiFi.begin(prefs.getString(ssid_key, "").c_str(), prefs.getString(wifi_password_key, "").c_str()); failed_connection_attempts++; delay(5000); } } } } void ethernet_task(void* parameter) { LOG(ELOG_LEVEL_DEBUG, "Connecting Ethernet"); ETH.begin(); ETH.setHostname(get_hostname(Ethernet)); while (true) { ethernet_data.link = ETH.linkUp(); ethernet_data.rssi = ETH.linkSpeed(); ethernet_data.ip_address = ETH.localIP().toString(); LOG(ELOG_LEVEL_DEBUG, "Ethernet RSSI: %F, IP Address, %s, LINK: %s", float(ethernet_data.rssi), ETH.localIP().toString(), String(ethernet_data.link)); delay(60 * 1000); } }