11 #ifndef LOM2M_SERVER_BASE_H
12 #define LOM2M_SERVER_BASE_H
19 #include <ESP8266WiFi.h>
20 #include <NTPClient.h>
21 #include <PubSubClient.h>
25 #include <ESP8266HTTPUpdateServer.h>
26 #include <ESP8266mDNS.h>
40 #define HEAP_TRACE_MS 5000
79 log(
"----> NOT SERVED URI = %s\n",
om2msrv.uri().c_str());
81 String uri =
om2msrv.uri().c_str();
82 uri.replace(F(
"//"), F(
"/"));
89 if (path.endsWith(
"/"))
91 path += F(
"index.html");
93 String pathgz = path + F(
".gz");
94 if (LittleFS.exists(pathgz))
98 if (LittleFS.exists(path))
100 File file = LittleFS.open(path,
"r");
108 #define printHttpCode(code) _printHttpCode(code, #code)
112 log(
"\n----> %s: request returned %d (%s)\n\n", desc, code,
HTTPCode2Human(code).c_str());
120 Serial.begin(115200);
121 Serial.printf(
"\n\nESP826/Arduino - %s\n", ESP.getFullVersion().c_str());
122 Serial.printf(
"host name = " MDNSNAME
"\n");
123 Serial.printf(
"mac address = %s\n", WiFi.macAddress().c_str());
124 Serial.printf(
"\n\n---- LOM2M server ----\n\n");
125 Serial.printf(
"Connecting to '%s'",
mySSID);
128 const char* ssid = std::getenv(
"LOM2M_SSID");
129 const char* psk = std::getenv(
"LOM2M_PSK");
132 WiFi.begin(ssid, psk);
143 while (WiFi.status() != WL_CONNECTED)
149 log(
"\nConnected\n");
151 log(
"Try me at these addresses:");
152 log(
"(with 'telnet <addr> or 'nc -u <addr> 23')");
154 IP = WiFi.localIP().toString();
157 WiFi.macAddress(mac);
158 sprintf(ret,
"%02X%02X%02X%02X%02X%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
159 CSE_ID =
"mn-cse-" + String(ret);
162 init_env_variables();
168 log(
"IP=%s\n",
IP.c_str());
170 for (
auto a : addrList)
172 log(
"IF='%s' IPv6=%d local=%d hostname='%s' addr= %s",
177 a.toString().c_str());
180 log(
" mask:%s / gw:%s",
181 a.netmask().toString().c_str(),
182 a.gw().toString().c_str());
188 MDNS.addService(
"http",
"tcp",
"port", 8282);
200 const char* headers[] = {
"Content-Type",
"X-M2M-Origin",
"Accept",
"X-M2M-RI",
"X-M2M-RVI" };
201 om2msrv.collectHeaders(headers,
sizeof headers /
sizeof headers[0]);
216 int error = PersistenceHelper::loadAll();
217 if (error != PersistenceHelper::P_SUCCESS && error != PersistenceHelper::P_FILE_NOT_FOUND)
219 Serial.println(
"\n\nERROR: error while loading data from persistence.\n");
270 log(
"-- free heap: %d bytes", ESP.getFreeHeap());
305 #if SUBSCRIPTION_FEAT
312 if ((nowMs - lastPersistMs > BACKUP_PERIOD) &&
dataUpdated)
314 int result = PersistenceHelper::persistAll();
315 Serial.printf(
"DEBUG: persitence, result code: %d\n", result);
317 lastPersistMs = nowMs;
330 if (
const char* poa = std::getenv(
"LOM2M_REMOTE_POA"))
334 if (
const char* cseId = std::getenv(
"LOM2M_REMOTE_CSE_ID"))
338 if (
const char* cseName = std::getenv(
"LOM2M_REMOTE_CSE_NAME"))
342 if (
const char* cseName = std::getenv(
"LOM2M_CSE_NAME"))
346 if (
const char* cseId = std::getenv(
"LOM2M_CSE_ID"))
350 if (
const char* adminOriginator = std::getenv(
"LOM2M_ADMIN_ORIGINATOR"))
354 if (
const char* envIp = std::getenv(
"LOM2M_LOCAL_POA_IP"))
358 if (
const char* envPort = std::getenv(
"LOM2M_LOCAL_POA_PORT"))
360 PORT = String(envPort);
363 if (
const char* envBackup = std::getenv(
"LOM2M_BACKUP_PERIOD"))
365 BACKUP_PERIOD = std::atoi(envBackup);
367 if (
const char* envBackup = std::getenv(
"LOM2M_BACKUP_ENABLED"))
369 BACKUP_ENABLED = std::atoi(envBackup);
373 if (
const char* in = std::getenv(
"LOM2M_MQTTS_ENDPOINT"))
377 if (
const char* in = std::getenv(
"LOM2M_MQTTS_PORT"))
381 if (
const char* in = std::getenv(
"LOM2M_MQTTS_RETRY_PERIOD"))
385 if (
const char* in = std::getenv(
"LOM2M_MQTTS_TIMEOUT"))
389 if (
const char* in = std::getenv(
"LOM2M_MQTTS_CLIENT_ID_PREFIX"))
393 if (
const char* mqttsBind = std::getenv(
"LOM2M_MQTTS_BINDING"))
398 if (
const char* in = std::getenv(
"LOM2M_MAX_NUMBER_OF_INSTANCES_DEFAULT"))
402 if (
const char* in = std::getenv(
"LOM2M_MAX_NUMBER_RESOURCES"))
407 if (
const char* in = std::getenv(
"LOM2M_HTTP_BINDING"))
412 if (
const char* in = std::getenv(
"LOM2M_DEFAULT_PROTOCOL"))
void log(const char *fmt,...)
Definition: bsp-esp8266.cpp:100
const char * contentType(const String &filename)
Definition: bsp-esp8266.cpp:13
void log_setup()
Definition: bsp-esp8266.cpp:93
const String HTTPCode2Human(HTTPCode code)
Definition: bsp-esp8266.h:30
decltype(millis()) Millis
Definition: bsp.h:112
HTTPCode
Definition: bsp.h:19
static void serveOM2M(const String &uri)
Definition: httpBinding-esp8266.cpp:555
static void processFirstPendingRequest()
Definition: mqttBinding.cpp:285
#define mySSID
Definition: configuration.h:18
#define myPSK
Definition: configuration.h:19
#define CONF_MQTTS_CLIENT_BUFFER_SIZE
Definition: configuration.h:107
bool registerCSE()
Definition: gateway.cpp:883
void handleNotifications(int max=5)
Definition: Notify.cpp:106
bool serveFile(String path)
Definition: lom2m-server-base.h:87
String mDNSName
Definition: lom2m-server-base.h:47
WiFiUDP ntpUDP
Definition: lom2m-server-base.h:42
void user_initial_setup()
Millis heapLastMs
Definition: lom2m-server-base.h:251
bool registered
Definition: lom2m-server-base.h:69
void setup()
Definition: lom2m-server-base.h:118
#define HEAP_TRACE_MS
Definition: lom2m-server-base.h:40
Millis lastReconnect
Definition: lom2m-server-base.h:257
WiFiClientSecure * espClient
Definition: lom2m-server-base.h:54
void serveFallback()
Definition: lom2m-server-base.h:77
ESP8266WebServer om2msrv(8282)
HTTPCode _printHttpCode(HTTPCode code, const char *desc)
Definition: lom2m-server-base.h:110
NTPClient timeClient(ntpUDP, "pool.ntp.org")
ESP8266HTTPUpdateServer httpUpdater
Definition: lom2m-server-base.h:50
WiFiClient tcp
Definition: lom2m-server-base.h:46
void loop()
Definition: lom2m-server-base.h:261
String IP
Definition: lom2m.cpp:18
int MQTTS_PORT
Definition: lom2m.cpp:34
String MQTTS_CLIENT_ID_PREFIX
Definition: lom2m.cpp:37
String MQTTS_ENDPOINT
Definition: lom2m.cpp:36
String CSE_ID
Definition: lom2m.cpp:13
int MQTTS_ENABLED
Definition: lom2m.cpp:33
String CSE_NAME
Definition: lom2m.cpp:14
int MQTTS_TIMEOUT
Definition: lom2m.cpp:38
String PORT
Definition: lom2m.cpp:17
int MAX_NUMBER_OF_INSTANCES_DEFAULT
Definition: lom2m.cpp:40
String DEFAULT_PROTOCOL
Definition: lom2m.cpp:21
bool dataUpdated
Definition: lom2m.cpp:104
int globalResourcesThreshold
Definition: lom2m.cpp:41
int MQTTS_RETRY_PERIOD
Definition: lom2m.cpp:35
int HTTP_BINDING_ENABLED
Definition: lom2m.cpp:26
PubSubClient * MQTT_CLIENT
Definition: mqttBinding.cpp:26
bool mqtt_setup(WiFiClientSecure *espClient)
Definition: mqttBinding.cpp:47
void mqtt_callback(char *topic, byte *payload, unsigned int length)
Definition: mqttBinding.cpp:194
void mqtt_reconnect(WiFiClientSecure *espClient, PubSubClient *client, bool loop)
Definition: mqttBinding.cpp:140