Оптимизация Weather и owmWeather

This commit is contained in:
Mit4el
2023-10-11 22:01:56 +03:00
parent a3ec0681da
commit 0afb996af0
3 changed files with 16 additions and 13 deletions

View File

@@ -3,7 +3,7 @@
#include <ArduinoJson.h> #include <ArduinoJson.h>
long prevWeatherMillis = millis() - 60001; long prevWeatherMillis = millis() - 60001;
StaticJsonDocument<JSON_BUFFER_SIZE * 2> Weatherdoc; //StaticJsonDocument<JSON_BUFFER_SIZE * 2> Weatherdoc;
extern IoTGpio IoTgpio; extern IoTGpio IoTgpio;
class Weather : public IoTItem class Weather : public IoTItem
@@ -12,9 +12,9 @@ private:
String _location; String _location;
String _param; String _param;
// long interval; // long interval;
DynamicJsonDocument Weatherdoc;
public: public:
Weather(String parameters) : IoTItem(parameters) Weather(String parameters) : Weatherdoc(1024), IoTItem(parameters)
{ {
_location = jsonReadStr(parameters, "location"); _location = jsonReadStr(parameters, "location");
_param = jsonReadStr(parameters, "param"); _param = jsonReadStr(parameters, "param");

View File

@@ -56,7 +56,7 @@
"param": "Тип текущего Item: temp - температура, humidity - влажность, pressure - давление, speed - скорость ветра, deg - направление ветра, all - процент облачности, sunrise - рассвет, sunset - закат, description - Погодные условия, icon - код иконки, name - город. Если оставить пустым пудет искать и публиковать при изменении в Items с именами wea_temp и т.д. wea_...", "param": "Тип текущего Item: temp - температура, humidity - влажность, pressure - давление, speed - скорость ветра, deg - направление ветра, all - процент облачности, sunrise - рассвет, sunset - закат, description - Погодные условия, icon - код иконки, name - город. Если оставить пустым пудет искать и публиковать при изменении в Items с именами wea_temp и т.д. wea_...",
"int": "Интервал запроса погоды в минутах", "int": "Интервал запроса погоды в минутах",
"API_key": "API ключ", "API_key": "API ключ",
"сity": "Название города, через запятую можно уочнить код страны. Наример Moscow или Moscow,ru или Москва. Если город не задан будут использоваться координаты. OWM рекомендует координаты", "city": "Название города, через запятую можно уочнить код страны. Наример Moscow или Moscow,ru или Москва. Если город не задан будут использоваться координаты. OWM рекомендует координаты",
"lon": "Долгота, при использовании координат, будет автоматически выбран ближайший город", "lon": "Долгота, при использовании координат, будет автоматически выбран ближайший город",
"lat": "Широта, при использовании координат, будет автоматически выбран ближайший город", "lat": "Широта, при использовании координат, будет автоматически выбран ближайший город",
"lang": "Язык используемый в ответах OpenWetaherMap", "lang": "Язык используемый в ответах OpenWetaherMap",

View File

@@ -4,7 +4,7 @@
#include "NTP.h" #include "NTP.h"
// long prevWeatherMillis = millis() - 60001; // long prevWeatherMillis = millis() - 60001;
// TODO Зачем так много??? // TODO Зачем так много???
StaticJsonDocument<JSON_BUFFER_SIZE * 2> Weatherdoc1; // StaticJsonDocument<JSON_BUFFER_SIZE * 2> Weatherdoc1;
extern IoTGpio IoTgpio; extern IoTGpio IoTgpio;
class owmWeather : public IoTItem class owmWeather : public IoTItem
@@ -21,17 +21,19 @@ private:
String _lon = ""; String _lon = "";
String _lang = ""; String _lang = "";
bool _debug = false; bool _debug = false;
DynamicJsonDocument Weatherdoc1;
public: public:
owmWeather(String parameters) : IoTItem(parameters) owmWeather(String parameters) : Weatherdoc1(1024), IoTItem(parameters)
{ {
_API_key = jsonReadStr(parameters, "API_key"); _API_key = jsonReadStr(parameters, "API_key");
// _ID_sity = jsonReadStr(parameters, "ID_sity"); // _ID_sity = jsonReadStr(parameters, "ID_sity");
_city = jsonReadStr(parameters, "city"); if (!jsonRead(parameters, "city", _city))
_lon = jsonReadStr(parameters, "lon"); _city = "";
_lat = jsonReadStr(parameters, "lat"); jsonRead(parameters, "lon", _lon);
_lang = jsonReadStr(parameters, "lang"); jsonRead(parameters, "lat", _lat);
_param = jsonReadStr(parameters, "param"); jsonRead(parameters, "lang", _lang);
jsonRead(parameters, "param", _param);
jsonRead(parameters, "debug", _debug); jsonRead(parameters, "debug", _debug);
long interval; long interval;
jsonRead(parameters, F("int"), interval); // в минутах jsonRead(parameters, F("int"), interval); // в минутах
@@ -79,7 +81,8 @@ public:
payload = http.getString(); payload = http.getString();
deserializeJson(Weatherdoc1, payload); deserializeJson(Weatherdoc1, payload);
ret += payload; // ret += payload;
SerialPrint("i", "Weatherdoc1", "memoryUsage: " + String(Weatherdoc1.memoryUsage()));
} }
} }
else else
@@ -181,7 +184,7 @@ public:
} }
// проверяем если пришедшее значение отличается от предыдущего регистрируем событие // проверяем если пришедшее значение отличается от предыдущего регистрируем событие
static void publishNew(String root, String param) void publishNew(String root, String param)
{ {
IoTItem *tmp = findIoTItem("wea_" + param); IoTItem *tmp = findIoTItem("wea_" + param);
if (!tmp) if (!tmp)