2018-06-23 21:49:11 +02:00
|
|
|
/*
|
2018-06-24 12:13:46 +02:00
|
|
|
* To upload through terminal you can use: curl -F "image=@firmware.bin" http://<ip>:8080/update
|
2018-06-24 12:01:58 +02:00
|
|
|
*
|
|
|
|
*
|
2018-06-24 12:03:05 +02:00
|
|
|
* bin file location on windows: C:\Users\<your username>\AppData\Local\Temp\arduino_build_<id>
|
2018-06-24 12:01:58 +02:00
|
|
|
*/
|
2018-06-23 21:49:11 +02:00
|
|
|
|
|
|
|
#include <ESP8266WiFi.h>
|
|
|
|
#include <ESP8266WebServer.h>
|
|
|
|
#include <ESP8266mDNS.h>
|
|
|
|
#include <ESP8266HTTPUpdateServer.h>
|
|
|
|
|
2019-02-03 16:12:19 +01:00
|
|
|
#include <WiFiClient.h>
|
2022-05-14 19:54:51 +02:00
|
|
|
#include <WiFiManager.h> // WiFiManager from bib manager
|
2019-02-03 16:12:19 +01:00
|
|
|
|
2022-05-15 22:34:36 +02:00
|
|
|
#include "config.h"
|
|
|
|
#include "config_user.h"
|
|
|
|
|
|
|
|
ESP8266WebServer httpServer(WEB_UPDATER_HTTP_PORT);
|
2018-06-23 21:49:11 +02:00
|
|
|
ESP8266HTTPUpdateServer httpUpdater;
|
|
|
|
|
2019-08-04 12:46:42 +02:00
|
|
|
String _webUpdater_ip = "127.0.0.1";
|
|
|
|
String _webUpdater_dev = "unknown";
|
2022-05-15 22:34:36 +02:00
|
|
|
float _webUpdater_sensValues[VALUES];
|
|
|
|
|
2022-09-12 15:26:30 +02:00
|
|
|
const String hb_ws_msg_start = "{";
|
|
|
|
const String hb_ws_msg_temp = "\"temperature\": ";
|
|
|
|
const String hb_ws_msg_humi = "\"humidity\": ";
|
|
|
|
const String hb_ws_msg_light = "\"lightlevel\": ";
|
|
|
|
const String hb_ws_msg_windspeed = "\"windspeed\": ";
|
|
|
|
const String hb_ws_msg_pressure = "\"pressure\": ";
|
|
|
|
const String hb_ws_msg_timestamp = "\"timestamp\": ";
|
|
|
|
const String hb_ws_msg_valid = "\"valid\": ";
|
|
|
|
const String hb_ws_msg_end = "}";
|
|
|
|
|
|
|
|
#define TR_TD_START_STR "<tr><td>"
|
|
|
|
#define TR_TD_END_STR "</td></tr>"
|
|
|
|
#define TD_TD_MID_STR "</td><td>"
|
2018-07-11 11:49:58 +02:00
|
|
|
|
2022-08-28 13:47:10 +02:00
|
|
|
boolean wuValidData = false;
|
|
|
|
|
2019-08-04 12:46:42 +02:00
|
|
|
void setupWebUpdater(String device, String ip)
|
2018-06-23 21:49:11 +02:00
|
|
|
{
|
2019-08-04 12:46:42 +02:00
|
|
|
debug("Starting WebUpdater... " + ip);
|
|
|
|
_webUpdater_ip = ip;
|
|
|
|
_webUpdater_dev = device;
|
2018-06-23 21:49:11 +02:00
|
|
|
|
|
|
|
httpUpdater.setup(&httpServer);
|
2018-07-11 11:49:58 +02:00
|
|
|
|
2022-05-14 19:38:58 +02:00
|
|
|
httpServer.on("/", showHTMLMain);
|
|
|
|
httpServer.on("/resetWifiManager", resetWifiManager);
|
2022-05-15 22:34:36 +02:00
|
|
|
#ifdef HOMEBRIDGE_WEBSTAT
|
|
|
|
httpServer.on("/hbWebstat", hb_webstat_send);
|
|
|
|
#endif
|
2022-05-24 11:03:52 +02:00
|
|
|
#ifdef DEBUG_WINDSPEED_MEASUREMENT
|
|
|
|
httpServer.on("/measWind", measureWindspeed);
|
|
|
|
#endif
|
2022-09-12 19:31:16 +02:00
|
|
|
#ifdef USE_LOGGER
|
|
|
|
httpServer.on("/showlog", showLog);
|
|
|
|
#endif
|
2018-06-23 21:49:11 +02:00
|
|
|
httpServer.begin();
|
|
|
|
|
2019-08-04 12:46:42 +02:00
|
|
|
debug("HTTPUpdateServer ready!");
|
2018-06-23 21:49:11 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void doWebUpdater(void)
|
|
|
|
{
|
|
|
|
digitalWrite(D0, HIGH);
|
|
|
|
httpServer.handleClient();
|
|
|
|
}
|
2018-07-11 11:49:58 +02:00
|
|
|
|
2022-05-15 22:34:36 +02:00
|
|
|
void setSensorData(float sensorValues[])
|
|
|
|
{
|
2022-08-28 13:47:10 +02:00
|
|
|
|
|
|
|
for (uint8_t i = 0; i < 5 and wuValidData == false; i++)
|
|
|
|
{
|
2022-08-29 12:42:49 +02:00
|
|
|
if (sensorValues[i] != 0)
|
2022-08-28 13:47:10 +02:00
|
|
|
{
|
|
|
|
wuValidData = true; // at least one value is not zero, the data
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-08-04 12:46:42 +02:00
|
|
|
for (uint8_t i = 0; i < VALUES; i++) {
|
|
|
|
_webUpdater_sensValues[i] = sensorValues[i];
|
2018-07-11 11:49:58 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-05-15 22:34:36 +02:00
|
|
|
void showHTMLMain(void)
|
|
|
|
{
|
2022-08-28 13:47:10 +02:00
|
|
|
|
2019-08-04 12:46:42 +02:00
|
|
|
String message = "<html><head><title>OKO Weatherstation - " + String(_webUpdater_dev) + "</title>"
|
2018-07-11 12:09:29 +02:00
|
|
|
"<meta http-equiv=\"refresh\" content=\"20\">"
|
|
|
|
"</head><body>"
|
2019-08-04 12:46:42 +02:00
|
|
|
"<br><a href=\"http://" + _webUpdater_ip + ":8080/update\">firmware update</a><br><br>"
|
2018-07-11 11:49:58 +02:00
|
|
|
"<table>"
|
2022-09-12 15:26:30 +02:00
|
|
|
TR_TD_START_STR + "temperature" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_TEMPERATURE]) + TR_TD_END_STR
|
|
|
|
TR_TD_START_STR + "humidity" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_HUMIDITY]) + TR_TD_END_STR
|
|
|
|
TR_TD_START_STR + "light" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_LIGHT]) + TR_TD_END_STR
|
|
|
|
TR_TD_START_STR + "windspeed" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_WINDSPEED]) + TR_TD_END_STR
|
|
|
|
TR_TD_START_STR + "pressure" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_PRESSURE]) + TR_TD_END_STR
|
|
|
|
TR_TD_START_STR + "batvoltage" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_BAT_VOLTAGE]) + TR_TD_END_STR
|
|
|
|
TR_TD_START_STR + "millis" + TD_TD_MID_STR + String(millis()) + TR_TD_END_STR
|
|
|
|
TR_TD_START_STR + "valid" + TD_TD_MID_STR + String(wuValidData) + TR_TD_END_STR
|
|
|
|
TR_TD_START_STR + "wifi rssi" + TD_TD_MID_STR + WiFi.RSSI() + TR_TD_END_STR
|
2018-07-11 11:49:58 +02:00
|
|
|
"</table>"
|
|
|
|
"</body></html>";
|
|
|
|
|
|
|
|
httpServer.send(200, "text/html", message);
|
|
|
|
}
|
2022-05-14 19:38:58 +02:00
|
|
|
|
2022-09-12 15:26:30 +02:00
|
|
|
#ifdef HOMEBRIDGE_WEBSTAT
|
2022-05-15 22:34:36 +02:00
|
|
|
void hb_webstat_send(void)
|
|
|
|
{
|
2022-05-16 13:34:33 +02:00
|
|
|
String msg = hb_ws_msg_start +
|
|
|
|
hb_ws_msg_temp +
|
|
|
|
String(_webUpdater_sensValues[SENSOR_TEMPERATURE], 2) +
|
|
|
|
", " +
|
|
|
|
hb_ws_msg_humi +
|
|
|
|
String(_webUpdater_sensValues[SENSOR_HUMIDITY], 2) +
|
|
|
|
", " +
|
|
|
|
hb_ws_msg_light +
|
2022-05-16 14:00:35 +02:00
|
|
|
String(_webUpdater_sensValues[SENSOR_LIGHT], 0) + // The light level for the homebridge-http-lux2 plugin is only able to parse integer values
|
2022-05-16 13:34:33 +02:00
|
|
|
", " +
|
|
|
|
hb_ws_msg_windspeed +
|
|
|
|
String(_webUpdater_sensValues[SENSOR_WINDSPEED], 2) +
|
|
|
|
", " +
|
2022-05-19 19:41:36 +02:00
|
|
|
hb_ws_msg_pressure +
|
|
|
|
String(_webUpdater_sensValues[SENSOR_PRESSURE], 2) +
|
|
|
|
", " +
|
|
|
|
hb_ws_msg_timestamp +
|
2022-05-27 11:59:57 +02:00
|
|
|
String(millis()) +
|
2022-08-28 13:47:10 +02:00
|
|
|
", " +
|
|
|
|
hb_ws_msg_valid +
|
|
|
|
String(wuValidData) +
|
2022-05-16 13:34:33 +02:00
|
|
|
hb_ws_msg_end;
|
|
|
|
|
|
|
|
httpServer.send(200, "text/html", msg);
|
2022-05-15 22:34:36 +02:00
|
|
|
}
|
2022-09-12 15:26:30 +02:00
|
|
|
#endif
|
2022-05-15 22:34:36 +02:00
|
|
|
|
2022-05-14 19:38:58 +02:00
|
|
|
void resetWifiManager()
|
|
|
|
{
|
|
|
|
|
2022-09-12 19:31:16 +02:00
|
|
|
String message = "<html><head><title>OKO Weatherstation - " + String(_webUpdater_dev) + " - reset WiFi manager</title>"
|
2022-05-14 19:38:58 +02:00
|
|
|
"<meta http-equiv=\"refresh\" content=\"20\">"
|
|
|
|
"</head><body>"
|
|
|
|
"Reset WifiManager config.<br>"
|
|
|
|
"Rebooting...<br>"
|
|
|
|
"</body></html>";
|
|
|
|
|
|
|
|
httpServer.send(200, "text/html", message);
|
|
|
|
|
|
|
|
// Erase WiFi Credentials, enable, compile, flash, disable and reflash.
|
2022-05-15 22:34:36 +02:00
|
|
|
WiFiManager wifiManager;
|
|
|
|
wifiManager.resetSettings();
|
2022-05-14 19:38:58 +02:00
|
|
|
|
|
|
|
delay(5000);
|
2022-05-14 19:54:51 +02:00
|
|
|
|
2022-05-15 22:34:36 +02:00
|
|
|
// manual reset after restart is required
|
2022-05-14 19:38:58 +02:00
|
|
|
ESP.restart();
|
|
|
|
}
|
2022-05-24 11:03:52 +02:00
|
|
|
|
2022-09-12 15:26:30 +02:00
|
|
|
#ifdef DEBUG_WINDSPEED_MEASUREMENT
|
|
|
|
#ifdef SENSOR_WIND
|
2022-05-24 11:03:52 +02:00
|
|
|
void measureWindspeed()
|
|
|
|
{
|
|
|
|
|
|
|
|
// read from windspeed sensorSTATUS_LED_PIN
|
|
|
|
digitalWrite(STATUS_LED_PIN, HIGH);
|
|
|
|
debug("Starting windspeed measurement");
|
|
|
|
float tmp_windspeed = wind_speed();
|
|
|
|
digitalWrite(STATUS_LED_PIN, LOW);
|
|
|
|
|
2022-09-12 19:31:16 +02:00
|
|
|
String message = "<html><head><title>OKO Weatherstation - " + String(_webUpdater_dev) + " - manual wind measurement</title>"
|
2022-05-24 11:03:52 +02:00
|
|
|
"</head><body>"
|
2022-05-24 11:07:51 +02:00
|
|
|
"Windsensor measurement result: " + String(tmp_windspeed) + "<br>"
|
2022-05-24 11:03:52 +02:00
|
|
|
"</body></html>";
|
|
|
|
|
|
|
|
httpServer.send(200, "text/html", message);
|
|
|
|
|
|
|
|
}
|
2022-09-12 15:26:30 +02:00
|
|
|
#endif
|
|
|
|
#endif
|
2022-09-12 19:31:16 +02:00
|
|
|
|
|
|
|
#ifdef USE_LOGGER
|
|
|
|
|
|
|
|
#define LOGFILE_SIZE 10
|
|
|
|
|
|
|
|
String logfile[LOGFILE_SIZE];
|
|
|
|
|
|
|
|
uint16_t logger_pos = 0;
|
|
|
|
|
|
|
|
void logdata(String s)
|
|
|
|
{
|
|
|
|
logfile[logger_pos] = s;
|
|
|
|
logger_pos++;
|
|
|
|
|
|
|
|
if (logger_pos > LOGFILE_SIZE -1)
|
|
|
|
{
|
|
|
|
for (uint16_t i = 1; i < LOGFILE_SIZE; i++)
|
|
|
|
{
|
|
|
|
logfile[i-1] = logfile[i]; // overwrite previous element with current element
|
|
|
|
}
|
|
|
|
logger_pos--; // reduce the position in the log
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void showLog()
|
|
|
|
{
|
|
|
|
String message = "<html><head><title>OKO Weatherstation - " + String(_webUpdater_dev) + " - logfile</title>"
|
|
|
|
"</head><body>"
|
|
|
|
"Logfile data: ";
|
|
|
|
|
|
|
|
for (uint16_t lp = 0; lp < logger_pos; lp++)
|
|
|
|
{
|
|
|
|
message = message + logfile[lp] + "<br>";
|
|
|
|
}
|
|
|
|
|
|
|
|
message = message + "</body></html>";
|
|
|
|
|
|
|
|
httpServer.send(200, "text/html", message);
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|