Skip to content

Commit

Permalink
esp 1.0.0
Browse files Browse the repository at this point in the history
  • Loading branch information
dontsovcmc committed Oct 31, 2023
1 parent fa54691 commit 195c434
Show file tree
Hide file tree
Showing 12 changed files with 117 additions and 32 deletions.
2 changes: 1 addition & 1 deletion ESP8266/data/setup_send.html
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ <h2>Отправка показаний</h2>

<div class="toggle">
<input type="checkbox" name="mqtt_on" id="mqtt_on" onclick="checkboxToggle(this)" data-form=".mqtt-form" %mqtt_on%>
<label for="mqtt_on">MQTT</label>
<label for="mqtt_on">MQTT (Home Assistant)</label>
</div>
<div class="hd mqtt-form">
<div class="f-row mt16">
Expand Down
2 changes: 1 addition & 1 deletion ESP8266/data/start.html
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
<main>
<h2>Настройка</h2>
<p class="text">Привет, это Ватериус, сейчас вы подключите устройство к домашнему роутеру и счётчикам</p>
<p class="text mt10"><a class="link" href="/">Главное меню</a></p>
<p class="text mt10"><a class="link" href="/index.html">Главное меню</a></p>
</main>
<footer class="btns">
<a class="btn" href="/wifi_list.html?wizard=true">Начать</a>
Expand Down
2 changes: 1 addition & 1 deletion ESP8266/platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

[platformio]
;extra_configs = secrets.ini
default_envs = nodemcuv2 ;esp01_1m ;
default_envs = esp01_1m ; nodemcuv2 ;

[libraries]
arduinojson = ArduinoJson@6.18.3
Expand Down
8 changes: 8 additions & 0 deletions ESP8266/src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include "Logging.h"
#include "config.h"
#include "master_i2c.h"
#include "senders/sender_waterius.h"
#include "senders/sender_http.h"
#include "senders/sender_blynk.h"
#include "senders/sender_mqtt.h"
Expand Down Expand Up @@ -120,6 +121,13 @@ void loop()

LOG_INFO(F("Free memory: ") << ESP.getFreeHeap());

#ifndef WATERIUS_RU_DISABLED
if (send_waterius(sett, json_data))
{
LOG_INFO(F("HTTP: Send OK"));
}
#endif

#ifndef HTTPS_DISABLED
if (send_http(sett, json_data))
{
Expand Down
23 changes: 16 additions & 7 deletions ESP8266/src/portal/active_point.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ String get_counter_title(const uint8_t name)
}
}

String get_counter_img(const CounterName name)
String get_counter_img(const uint8_t name)
{
switch (name)
{
Expand Down Expand Up @@ -193,6 +193,11 @@ String processor(const String &var)
if (var == FPSTR(PARAM_COUNTER1_TITLE))
return get_counter_title(sett.counter1_name);

if (var == FPSTR(PARAM_COUNTER0_IMG))
return get_counter_img(sett.counter0_name);
if (var == FPSTR(PARAM_COUNTER1_IMG))
return get_counter_img(sett.counter1_name);

if (var == FPSTR(PARAM_COUNTER0_INSTRUCTION))
return get_counter_instruction(sett.counter0_name);
if (var == FPSTR(PARAM_COUNTER1_INSTRUCTION))
Expand All @@ -204,9 +209,10 @@ String processor(const String &var)
return String(data.counter_type1);

if (var == FPSTR(PARAM_FACTOR0))
return String(sett.factor0);
return sett.factor0 == AS_COLD_CHANNEL ? F("10") : String(sett.factor0);

if (var == FPSTR(PARAM_FACTOR1))
return String(sett.factor1);
return sett.factor1 == AUTO_IMPULSE_FACTOR ? F("10") : String(sett.factor1);

if (var == FPSTR(PARAM_WATERIUS_ON))
return template_bool(sett.waterius_on);
Expand Down Expand Up @@ -240,7 +246,6 @@ void onRoot(AsyncWebServerRequest *request)
{
// Первая настройка
request->send(LittleFS, "/start.html", F("text/html"), false, processor);
//request->send(LittleFS, "/index.html", F("text/html"), false, processor);
}
else
{
Expand Down Expand Up @@ -326,6 +331,10 @@ void start_active_point(Settings &sett, const SlaveData &data, CalculatedData &c
server->on("/", HTTP_GET, onRoot).setFilter(ON_AP_FILTER);
server->on("/fwlink", HTTP_GET, onRoot).setFilter(ON_AP_FILTER); // Microsoft captive portal. Maybe not needed. Might be handled by notFound handler.

// Нужно, т.к. при первой на стройке будет start.html и надо дать возможность открыть Главное меню
server->on("/index.html", HTTP_GET, [](AsyncWebServerRequest *request)
{ request->send(LittleFS, "/index.html", F("text/html"), false, processor); });

server->on("/logs.html", HTTP_GET, [](AsyncWebServerRequest *request)
{ request->send(LittleFS, "/logs.html", F("text/html"), false, processor); });

Expand Down Expand Up @@ -355,7 +364,7 @@ void start_active_point(Settings &sett, const SlaveData &data, CalculatedData &c

// Параметры красного счётчика
server->on("/setup_red.html", HTTP_GET, [](AsyncWebServerRequest *request)
{ request->send(LittleFS, "/setup_red.htm", F("text/html"), false, processor); });
{ request->send(LittleFS, "/setup_red.html", F("text/html"), false, processor); });

// Отправка показаний
server->on("/setup_send.html", HTTP_GET, [](AsyncWebServerRequest *request)
Expand Down Expand Up @@ -396,8 +405,8 @@ void start_active_point(Settings &sett, const SlaveData &data, CalculatedData &c
server->on("/api/call_connect", HTTP_GET, onGetApiCallConnect); // Поднимаем флаг старта подключения и redirect в wifi_connect.html
server->on("/api/connect_status", HTTP_GET, onGetApiConnectStatus); // Статус подключения (из wifi_connect.html)
server->on("/api/setup", HTTP_POST, onPostApiSetup); // Сохраняем настройки
server->on("/api/set_counter_type/0", HTTP_POST, onPostApiSetCounterType0); // Сохраняем тип счётчика и переносим на страницу настройки
server->on("/api/set_counter_type/1", HTTP_POST, onPostApiSetCounterType1); // Сохраняем тип счётчика и переносим на страницу настройки
server->on("/api/set_counter_name/0", HTTP_POST, onPostApiSetCounterName0); // Сохраняем тип счётчика и переносим на страницу настройки
server->on("/api/set_counter_name/1", HTTP_POST, onPostApiSetCounterName1); // Сохраняем тип счётчика и переносим на страницу настройки
server->on("/api/main_status", HTTP_GET, onGetApiMainStatus); // Информационные сообщения на главной странице
server->on("/api/status/0", HTTP_GET, onGetApiStatus0); // Статус 0-го входа (ХВС) (из setup_cold_welcome.html)
server->on("/api/status/1", HTTP_GET, onGetApiStatus1); // Статус 1-го входа (ГВС) (из setup_cold_welcome.html)
Expand Down
25 changes: 13 additions & 12 deletions ESP8266/src/portal/active_point_api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ void onGetApiConnectStatus(AsyncWebServerRequest *request)

if (status == WL_CONNECTED)
{
ret[F("redirect")] = F("/setup_send.html");
ret[F("redirect")] = F("/setup_blue_type.html");

}
else
Expand Down Expand Up @@ -235,7 +235,7 @@ void onGetApiMainStatus(AsyncWebServerRequest *request)
JsonObject obj = array.createNestedObject();
obj["error"] = "Ватериус ещё не настроен";
obj["link_text"] = "Приступить";
obj["link"] = "/setup_cold_welcome.html";
obj["link"] = "/start.html";
}

LOG_INFO(F("JSON: Mem usage: ") << json_doc.memoryUsage());
Expand Down Expand Up @@ -374,9 +374,9 @@ void save_param(AsyncWebParameter *p, uint16_t &v, JsonObject &errorsObj)
}
}

void save_param(AsyncWebParameter *p, uint8_t &v, JsonObject &errorsObj)
void save_param(AsyncWebParameter *p, uint8_t &v, JsonObject &errorsObj, const bool zero_ok)
{
if (p->value().toInt() == 0)
if (!zero_ok && p->value().toInt() == 0)
{
LOG_ERROR(FPSTR(ERROR_VALUE) << ": " << p->name());
errorsObj[p->name()] = FPSTR(ERROR_VALUE);
Expand Down Expand Up @@ -404,12 +404,13 @@ void save_bool_param(AsyncWebParameter *p, uint8_t &v, JsonObject &errorsObj)

void save_param(AsyncWebParameter *p, float &v, JsonObject &errorsObj)
{
/* Позволяем вводить 0.0 у счётчиков.
if (p->value().toFloat() == 0.0)
{
LOG_ERROR(FPSTR(ERROR_VALUE) << ": " << p->name());
errorsObj[p->name()] = FPSTR(ERROR_VALUE);
}
else
else */
{
v = p->value().toFloat();
LOG_INFO(FPSTR(PARAM_SAVED) << p->name() << F("=") << v);
Expand Down Expand Up @@ -617,11 +618,11 @@ void applySettings(AsyncWebServerRequest *request, JsonObject &errorsObj)

else if (name == FPSTR(PARAM_COUNTER0_NAME))
{
save_param(p, sett.counter0_name, errorsObj);
save_param(p, sett.counter0_name, errorsObj, true);
}
else if (name == FPSTR(PARAM_COUNTER1_NAME))
{
save_param(p, sett.counter1_name, errorsObj);
save_param(p, sett.counter1_name, errorsObj, true);
}

else if (name == FPSTR(PARAM_COUNTER0_TYPE))
Expand Down Expand Up @@ -676,17 +677,17 @@ void onPostApiSetup(AsyncWebServerRequest *request)
request->send(response);
}

void onPostApiSetCounterType0(AsyncWebServerRequest *request)
void onPostApiSetCounterName0(AsyncWebServerRequest *request)
{
onPostApiSetCounterType(request, 0);
onPostApiSetCounterName(request, 0);
}

void onPostApiSetCounterType1(AsyncWebServerRequest *request)
void onPostApiSetCounterName1(AsyncWebServerRequest *request)
{
onPostApiSetCounterType(request, 1);
onPostApiSetCounterName(request, 1);
}

void onPostApiSetCounterType(AsyncWebServerRequest *request, const uint8_t index)
void onPostApiSetCounterName(AsyncWebServerRequest *request, const uint8_t index)
{
LOG_INFO(F("POST ") << request->url());
DynamicJsonDocument json_doc(JSON_DYNAMIC_MSG_BUFFER);
Expand Down
8 changes: 4 additions & 4 deletions ESP8266/src/portal/active_point_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

void save_param(AsyncWebParameter *p, char *dest, size_t size, JsonObject &errorsObj, bool required = true);
void save_param(AsyncWebParameter *p, uint16_t &v, JsonObject &errorsObj);
void save_param(AsyncWebParameter *p, uint8_t &v, JsonObject &errorsObj);
void save_param(AsyncWebParameter *p, uint8_t &v, JsonObject &errorsObj, const bool zero_ok = false);
void save_bool_param(AsyncWebParameter *p, uint8_t &v, JsonObject &errorsObj);
void save_param(AsyncWebParameter *p, float &v, JsonObject &errorsObj);
void save_ip_param(AsyncWebParameter *p, uint32_t &v, JsonObject &errorsObj);
Expand All @@ -27,9 +27,9 @@ bool captivePortal(AsyncWebServerRequest *request);
void onPostApiInitConnect(AsyncWebServerRequest *request);
void onGetApiCallConnect(AsyncWebServerRequest *request);
void onGetApiConnectStatus(AsyncWebServerRequest *request);
void onPostApiSetCounterType0(AsyncWebServerRequest *request);
void onPostApiSetCounterType1(AsyncWebServerRequest *request);
void onPostApiSetCounterType(AsyncWebServerRequest *request, const uint8_t index);
void onPostApiSetCounterName0(AsyncWebServerRequest *request);
void onPostApiSetCounterName1(AsyncWebServerRequest *request);
void onPostApiSetCounterName(AsyncWebServerRequest *request, const uint8_t index);
void onGetApiNetworks(AsyncWebServerRequest *request);
void onGetApiMainStatus(AsyncWebServerRequest *request);
void onGetApiStatus0(AsyncWebServerRequest *request);
Expand Down
2 changes: 2 additions & 0 deletions ESP8266/src/portal/resources.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ static const char PARAM_COUNTER0_TITLE[] PROGMEM = "counter0_title";
static const char PARAM_COUNTER1_TITLE[] PROGMEM = "counter1_title";
static const char PARAM_COUNTER0_TYPE[] PROGMEM = "counter0_type";
static const char PARAM_COUNTER1_TYPE[] PROGMEM = "counter1_type";
static const char PARAM_COUNTER0_IMG[] PROGMEM = "counter0_img";
static const char PARAM_COUNTER1_IMG[] PROGMEM = "counter1_img";
static const char PARAM_COUNTER0_INSTRUCTION[] PROGMEM = "counter0_instruction";
static const char PARAM_COUNTER1_INSTRUCTION[] PROGMEM = "counter1_instruction";

Expand Down
5 changes: 2 additions & 3 deletions ESP8266/src/senders/sender_http.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,7 @@

bool send_http(const Settings &sett, DynamicJsonDocument &jsonData)
{

if (!(sett.waterius_host[0] && sett.waterius_key[0]))
if (!(sett.http_on && sett.http_url[0]))
{
LOG_INFO(F("HTTP: SKIP"));
return false;
Expand All @@ -35,7 +34,7 @@ bool send_http(const Settings &sett, DynamicJsonDocument &jsonData)

String payload = "";
serializeJson(jsonData, payload);
String url = sett.waterius_host;
String url = sett.http_url;

int attempts = HTTP_SEND_ATTEMPTS;
bool result = false;
Expand Down
63 changes: 63 additions & 0 deletions ESP8266/src/senders/sender_waterius.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
/**
* @file sender_waterius.h
* @brief Функции отправки сведений в облако waterius.ru по htpp/https
* @version 0.1
* @date 2023-11-01
*
* @copyright Copyright (c) 2023
*
*/
#ifndef SENDERWATERIUS_h_
#define SENDERWATERIUS_h_
#ifndef WATERIUS_RU_DISABLED
#include <ESP8266WiFi.h>
#include "setup.h"
#include "master_i2c.h"
#include "Logging.h"
#include "json.h"
#include "https_helpers.h"

#define HTTP_SEND_ATTEMPTS 3

bool send_waterius(const Settings &sett, DynamicJsonDocument &jsonData)
{
if (!(sett.waterius_on && sett.waterius_host[0] && sett.waterius_key[0]))
{
LOG_INFO(F("WATR: SKIP"));
return false;
};

uint32_t start_time = millis();

LOG_INFO(F("-- START -- "));
LOG_INFO(F("WATR: Send new data"));

String payload = "";
serializeJson(jsonData, payload);
String url = sett.waterius_host;

int attempts = HTTP_SEND_ATTEMPTS;
bool result = false;
do
{
LOG_INFO(F("WATR: Attempt #") << HTTP_SEND_ATTEMPTS - attempts + 1 << F(" from ") << HTTP_SEND_ATTEMPTS);
result = post_data(url, sett.waterius_key, sett.waterius_email, payload);

} while (!result && --attempts);

if (result)
{
LOG_INFO(F("WATR: Data sent. Time ") << millis() - start_time << F(" ms"));
}
else
{
LOG_ERROR(F("WATR: Failed send data. Time ") << millis() - start_time << F(" ms"));
}

LOG_INFO(F("-- END --"));

return result;
}

#endif
#endif
5 changes: 4 additions & 1 deletion ESP8266/src/setup.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,10 @@
2. Файловая система LittleFS
3. Весь интерфейс настройки изменён
4. Добавили сброс до заводских настроек
5.
5. Добавил обнуление стартового значения импульсов, если приходят меньше #269
6. Добавил загрузку информации про wi-fi сети http://192.168.4.1/ssid.txt
7. Добавлена отправка на свой сервер параллельно waterius.ru
8.
0.11.9 - 2023.09.15 - dontsovcmc
1. Статус подключения к Wi-Fi
Expand Down
4 changes: 2 additions & 2 deletions ESP8266/src/utils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ bool is_waterius_site(const String &url)
bool is_blynk(const Settings &sett)
{
#ifndef BLYNK_DISABLED
return sett.blynk_host[0] && sett.blynk_key[0];
return sett.blynk_on && sett.blynk_host[0] && sett.blynk_key[0];
#else
return false;
#endif
Expand All @@ -167,7 +167,7 @@ bool is_blynk(const Settings &sett)
bool is_mqtt(const Settings &sett)
{
#ifndef MQTT_DISABLED
return sett.mqtt_host[0];
return sett.mqtt_on && sett.mqtt_host[0];
#else
return false;
#endif
Expand Down

0 comments on commit 195c434

Please sign in to comment.