#include #include #include #include "../global_data/defines.h" #include #include "../global_data/global_data.h" int64_t mac_address = ESP.getEfuseMac(); uint8_t failed_connection_attempts = 0; extern NetworkData wifi_data; extern NetworkData ethernet_data; extern Preferences prefs; 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(); case Generic: return hostname.c_str(); } } void wifi_task(void* parameter) { Log.verbose("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.verbose("Failed to connecto to currently saved SSID, starting SoftAP"); } else { Log.verbose("No SSID saved, starting SoftAP"); } String ap_ssid = get_hostname(Wireless); WiFi.softAP(ap_ssid, ""); Log.verbose("[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.verbose("RSSI: %F, IP Address, %p, SSID: %s", float(WiFi.RSSI()), WiFi.localIP(), prefs.getString(ssid_key, "NOSSID")); // Serial.println(WiFi.channel()); delay(5000); } else { Log.verbose("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, ""), prefs.getString(wifi_password_key, "")); failed_connection_attempts++; delay(5000); } } } } void ethernet_task(void* parameter) { Log.verbose("Connecting Ethernet"); ETH.begin(0, 17, 23, 18); 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.verbose("Ethernet RSSI: %F, IP Address, %s, LINK: %s", float(ethernet_data.rssi), ethernet_data.ip_address, String(ethernet_data.link)); delay(60 * 1000); } }