1
mirror of https://github.com/rvdbreemen/OTGW-firmware synced 2024-11-16 04:33:49 +01:00
OTGW-firmware/networkStuff.h

245 lines
8.6 KiB
C
Raw Normal View History

/*
***************************************************************************
** Program : networkStuff.h
2021-02-25 20:12:51 +01:00
**
** Version : v0.8.0
2021-02-25 20:12:51 +01:00
**
** Copyright (c) 2021 Robert van den Breemen
**
** Copyright (c) 2021 Robert van den Breemen
2020-12-12 01:34:41 +01:00
** based on Framework ESP8266 from Willem Aandewiel
**
** TERMS OF USE: MIT License. See bottom of file.
***************************************************************************
** Usage:
**
** #define HOSTNAME thisProject
**
** setup()
** {
** startTelnet();
** startWiFi(_HOSTNAME, 240); // timeout 4 minuten
** startMDNS(_HOSTNAME);
** httpServer.on("/index", <sendIndexPage>);
** httpServer.on("/index.html",<sendIndexPage>);
** httpServer.begin();
** }
**
** loop()
** {
** handleWiFi();
** MDNS.update();
** httpServer.handleClient();
** .
** .
** }
*/
2021-02-14 14:31:21 +01:00
#include <ESP8266WiFi.h> // ESP8266 Core WiFi Library
#include <ESP8266WebServer.h> // Version 1.0.0 - part of ESP8266 Core https://github.com/esp8266/Arduino
#include <ESP8266mDNS.h> // part of ESP8266 Core https://github.com/esp8266/Arduino
2021-02-14 14:31:21 +01:00
#include <ESP8266HTTPClient.h>
2021-03-06 16:42:57 +01:00
#include <ESP8266LLMNR.h>
#include <WiFiUdp.h> // part of ESP8266 Core https://github.com/esp8266/Arduino
//#include "ESP8266HTTPUpdateServer.h"
#include "OTGW-ModUpdateServer.h" // <<special version for Nodoshop Watchdog needed>>
#include "updateServerHtml.h"
#include <WiFiManager.h> // version 2.0.4-beta - use latest development branch - https://github.com/tzapu/WiFiManager
// included in main program: #include <TelnetStream.h> // Version 0.0.1 - https://github.com/jandrassy/TelnetStream
2021-01-30 16:00:16 +01:00
//#include <FS.h> // part of ESP8266 Core https://github.com/esp8266/Arduino
#include <LittleFS.h>
ESP8266WebServer httpServer (80);
ESP8266HTTPUpdateServer httpUpdater(true);
2021-01-30 16:00:16 +01:00
static FSInfo LittleFSinfo;
bool LittleFSmounted;
bool isConnected = false;
//gets called when WiFiManager enters configuration mode
//===========================================================================================
void configModeCallback (WiFiManager *myWiFiManager)
{
DebugTln(F("Entered config mode\r"));
DebugTln(WiFi.softAPIP().toString());
//if you used auto generated SSID, print it
DebugTln(myWiFiManager->getConfigPortalSSID());
} // configModeCallback()
//===========================================================================================
void startWiFi(const char* hostname, int timeOut)
{
WiFi.mode(WIFI_STA); // explicitly set mode, esp defaults to STA+AP
WiFiManager manageWiFi;
uint32_t lTime = millis();
String thisAP = String(hostname) + "-" + WiFi.macAddress();
OTGWSerial.println("Start Wifi ...");
manageWiFi.setDebugOutput(true);
//--- next line in release needs to be commented out!
2020-12-10 09:49:15 +01:00
// manageWiFi.resetSettings();
//--- set callback that gets called when connecting to previous WiFi fails, and enters Access Point mode
manageWiFi.setAPCallback(configModeCallback);
//--- sets timeout until configuration portal gets turned off
//--- useful to make it all retry or go to sleep in seconds
//manageWiFi.setTimeout(240); // 4 minuten
manageWiFi.setTimeout(timeOut); // in seconden ...
//--- fetches ssid and pass and tries to connect
//--- if it does not connect it starts an access point with the specified name
//--- here "<HOSTNAME>-<MAC>"
//--- and goes into a blocking loop awaiting configuration
OTGWSerial.printf("AutoConnect to: %s", thisAP.c_str());
if (!manageWiFi.autoConnect(thisAP.c_str()))
{
//-- fail to connect? Have you tried turning it off and on again?
DebugTln(F("failed to connect and hit timeout"));
delay(2000); // Enough time for messages to be sent.
ESP.restart();
delay(5000); // Enough time to ensure we don't return.
}
//WiFi.mode(WIFI_STA); // explicitly set mode, esp defaults to STA+AP
Debugln();
DebugT(F("Connected to " )); Debugln (WiFi.SSID());
DebugT(F("IP address: " )); Debugln (WiFi.localIP());
DebugT(F("IP gateway: " )); Debugln (WiFi.gatewayIP());
Debugln();
httpUpdater.setup(&httpServer);
httpUpdater.setIndexPage(UpdateServerIndex);
httpUpdater.setSuccessPage(UpdateServerSuccess);
DebugTf(" took [%d] seconds => OK!\r\n", (millis() - lTime) / 1000);
} // startWiFi()
2021-02-19 01:48:31 +01:00
//===========================================================================================
void startTelnet()
{
2021-02-19 01:48:31 +01:00
OTGWSerial.print("Use 'telnet ");
OTGWSerial.print(WiFi.localIP());
OTGWSerial.println("' for debugging");
TelnetStream.begin();
DebugTln(F("\nTelnet server started .."));
TelnetStream.flush();
} // startTelnet()
//=======================================================================
2021-03-06 16:42:57 +01:00
void startMDNS(const char *hostname)
{
2021-03-06 16:42:57 +01:00
DebugTf("mDNS setup as [%s.local]\r\n", hostname);
if (MDNS.begin(hostname)) // Start the mDNS responder for Hostname.local
{
2021-03-06 16:42:57 +01:00
DebugTf("mDNS responder started as [%s.local]\r\n", hostname);
}
else
{
2021-03-06 16:42:57 +01:00
DebugTln(F("Error setting up MDNS responder!\r\n"));
}
MDNS.addService("http", "tcp", 80);
} // startMDNS()
2021-03-06 19:14:08 +01:00
void startLLMNR(const char *_hostname)
2021-03-06 16:42:57 +01:00
{
2021-03-06 19:14:08 +01:00
char hostname[80]={0};
strlcpy(hostname, _hostname, sizeof(hostname));
strlcat(hostname, ".local", sizeof(hostname));
2021-03-06 16:42:57 +01:00
DebugTf("LLMNR setup as [%s]\r\n", hostname);
if (LLMNR.begin(hostname)) // Start the LLMNR responder for hostname
{
DebugTf("LLMNR responder started as [%s]\r\n", hostname);
}
else
{
DebugTln(F("Error setting up LLMNR responder!\r\n"));
}
} // startLLMNR()
2021-02-14 19:26:37 +01:00
void startNTP(){
// Initialisation ezTime
if (!settingNTPenable) return;
setDebug(INFO);
setServer("time.google.com");
if (settingNTPtimezone.length()==0) settingNTPtimezone = DEFAULT_TIMEZONE; //set back to default timezone
if (myTZ.setLocation(settingNTPtimezone)){
DebugTf("Timezone set to: %s\r\n", CSTR(settingNTPtimezone));
DebugTf("Olson TZ : %s\r\n", CSTR(myTZ.getOlson()));
DebugTf("Posix TZ : %s\r\n", CSTR(myTZ.getPosix()));
DebugTf("TZ Name : %s\r\n", CSTR(myTZ.getTimezoneName()));
DebugTf("TX Offset: %d\r\n", myTZ.getOffset());
DebugTf("DST : %d\r\n", myTZ.isDST());
} else {
DebugTf("Error setting Timezone: %s\r\n", CSTR(errorString()));
settingNTPtimezone = DEFAULT_TIMEZONE;
2021-02-14 19:26:37 +01:00
}
2021-02-14 19:26:37 +01:00
myTZ.setDefault();
updateNTP(); //force NTP sync
waitForSync(60); //wait until valid time myTZ.setDefault();
setDebug(NONE); //turn off any other debug information
DebugTln("UTC time : "+ UTC.dateTime());
DebugTln("local time: "+ myTZ.dateTime());
}
String getMacAddress() {
uint8_t baseMac[6];
char baseMacChr[13] = {0};
# if defined(ESP8266)
WiFi.macAddress(baseMac);
sprintf(baseMacChr, "%02X%02X%02X%02X%02X%02X", baseMac[0], baseMac[1], baseMac[2], baseMac[3], baseMac[4], baseMac[5]);
# elif defined(ESP32)
esp_read_mac(baseMac, ESP_MAC_WIFI_STA);
sprintf(baseMacChr, "%02X%02X%02X%02X%02X%02X", baseMac[0], baseMac[1], baseMac[2], baseMac[3], baseMac[4], baseMac[5]);
# else
sprintf(baseMacChr, "%02X%02X%02X%02X%02X%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
# endif
return String(baseMacChr);
}
String getUniqueId() {
String uniqueId = "otgw-"+(String)getMacAddress();
return String(uniqueId);
}
2021-02-14 19:26:37 +01:00
/***************************************************************************
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to permit
* persons to whom the Software is furnished to do so, subject to the
* following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
* OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
****************************************************************************
*/