mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-26 14:12:16 +03:00
Merge branch 'ver4dev' of https://github.com/biveraxe/IoTManager into ver4dev
This commit is contained in:
@@ -52,7 +52,7 @@
|
||||
"firmware": "0x10000",
|
||||
"partitions": "0x8000",
|
||||
"littlefs": "0x310000"
|
||||
},
|
||||
},
|
||||
{
|
||||
"name": "esp32cam_4mb",
|
||||
"boot_app0": "0xe000",
|
||||
@@ -154,6 +154,10 @@
|
||||
}
|
||||
],
|
||||
"sensors": [
|
||||
{
|
||||
"path": "src/modules/exec/Pcf8591",
|
||||
"active": false
|
||||
},
|
||||
{
|
||||
"path": "src/modules/sensors/A02Distance",
|
||||
"active": true
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -4,12 +4,12 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
|
||||
<title>IoT Manager 4.5.4</title>
|
||||
<title>IoT Manager 4.5.5</title>
|
||||
|
||||
<link rel="icon" type="image/png" href="/favicon.ico" />
|
||||
<link rel="stylesheet" href="/build/bundle.css?4541" />
|
||||
<link rel="stylesheet" href="/build/bundle.css?4550" />
|
||||
|
||||
<script defer src="/build/bundle.js?4541"></script>
|
||||
<script defer src="/build/bundle.js?4550"></script>
|
||||
</head>
|
||||
|
||||
<body></body>
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -48,6 +48,10 @@
|
||||
}
|
||||
],
|
||||
"sensors": [
|
||||
{
|
||||
"path": "src/modules/exec/Pcf8591",
|
||||
"active": false
|
||||
},
|
||||
{
|
||||
"path": "src/modules/sensors/A02Distance",
|
||||
"active": true
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
|
||||
<title>IoT Manager 4.5.4</title>
|
||||
<title>IoT Manager 4.5.5</title>
|
||||
|
||||
<link rel="icon" type="image/png" href="/favicon.ico" />
|
||||
<link rel="stylesheet" href="/build/bundle.css?4541" />
|
||||
<link rel="stylesheet" href="/build/bundle.css?4550" />
|
||||
|
||||
<script defer src="/build/bundle.js?4541"></script>
|
||||
<script defer src="/build/bundle.js?4550"></script>
|
||||
</head>
|
||||
|
||||
<body></body>
|
||||
|
||||
@@ -307,7 +307,21 @@
|
||||
"widget": "anydata",
|
||||
"after": "ltr",
|
||||
"icon": "speedometer"
|
||||
},
|
||||
},
|
||||
{
|
||||
"name": "anydataSpeed",
|
||||
"label": "мерты в секунду",
|
||||
"widget": "anydata",
|
||||
"after": "m/s",
|
||||
"icon": "speedometer"
|
||||
},
|
||||
{
|
||||
"name": "anydataСorner",
|
||||
"label": "угол градусов",
|
||||
"widget": "anydata",
|
||||
"after": "°",
|
||||
"icon": "speedometer"
|
||||
},
|
||||
{
|
||||
"name": "nil",
|
||||
"label": "Без виджета"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#include "BuildTime.h"
|
||||
|
||||
// Версия прошивки
|
||||
#define FIRMWARE_VERSION 454
|
||||
#define FIRMWARE_VERSION 455
|
||||
|
||||
#ifdef esp8266_1mb_ota
|
||||
#define FIRMWARE_NAME "esp8266_1mb_ota"
|
||||
@@ -44,6 +44,14 @@
|
||||
#define FIRMWARE_NAME "esp32s2_4mb"
|
||||
#endif
|
||||
|
||||
#ifdef esp32c3m_4mb
|
||||
#define FIRMWARE_NAME "esp32c3m_4mb"
|
||||
#endif
|
||||
|
||||
#ifdef esp32s3_16mb
|
||||
#define FIRMWARE_NAME "esp32s3_16mb"
|
||||
#endif
|
||||
|
||||
// Размер буфера json
|
||||
#define JSON_BUFFER_SIZE 4096 // держим 2 кб не меняем
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
"projectProp": {
|
||||
"platformio": {
|
||||
"default_envs": "esp8266_4mb",
|
||||
"comments_default_envs": "choose from: esp8266_4mb or esp32_4mb or esp32cam_4mb or esp32s2_4mb or esp32_4mb3f or esp8266_1mb or esp8266_1mb_ota or esp8285_1mb or esp8285_1mb_ota",
|
||||
"comments_default_envs": "choose from: esp8266_4mb or esp32_4mb or esp32cam_4mb or esp32s2_4mb or esp32_4mb3f or esp32s3_16mb or esp32c3m_4mb or esp8266_1mb or esp8266_1mb_ota or esp8285_1mb or esp8285_1mb_ota",
|
||||
"envs": [
|
||||
{
|
||||
"name": "esp8266_4mb",
|
||||
@@ -52,7 +52,7 @@
|
||||
"firmware": "0x10000",
|
||||
"partitions": "0x8000",
|
||||
"littlefs": "0x310000"
|
||||
},
|
||||
},
|
||||
{
|
||||
"name": "esp32cam_4mb",
|
||||
"boot_app0": "0xe000",
|
||||
@@ -106,6 +106,22 @@
|
||||
"firmware": "0x10000",
|
||||
"partitions": "0x8000",
|
||||
"littlefs": "0x290000"
|
||||
},
|
||||
{
|
||||
"name": "esp32c3m_4mb",
|
||||
"boot_app0": "0xe000",
|
||||
"bootloader_qio_80m": "0x1000",
|
||||
"firmware": "0x10000",
|
||||
"partitions": "0x8000",
|
||||
"littlefs": "0x310000"
|
||||
},
|
||||
{
|
||||
"name": "esp32s3_16mb",
|
||||
"boot_app0": "0xe000",
|
||||
"bootloader_qio_80m": "0x1000",
|
||||
"firmware": "0x10000",
|
||||
"partitions": "0x8000",
|
||||
"littlefs": "0x910000"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -154,6 +170,10 @@
|
||||
}
|
||||
],
|
||||
"sensors": [
|
||||
{
|
||||
"path": "src/modules/exec/Pcf8591",
|
||||
"active": false
|
||||
},
|
||||
{
|
||||
"path": "src/modules/sensors/A02Distance",
|
||||
"active": true
|
||||
|
||||
122
platformio.ini
122
platformio.ini
@@ -266,6 +266,52 @@ build_src_filter =
|
||||
+<modules/*.cpp>
|
||||
${env:esp32s2_4mb_fromitems.build_src_filter}
|
||||
|
||||
[env:esp32c3m_4mb]
|
||||
lib_deps =
|
||||
${common_env_data.lib_deps_external}
|
||||
${env:esp32c3m_4mb_fromitems.lib_deps}
|
||||
build_flags =
|
||||
-Desp32c3m_4mb="esp32c3m_4mb"
|
||||
framework = arduino
|
||||
board = lolin_c3_mini
|
||||
platform = espressif32 @6.3.1
|
||||
monitor_filters = esp32_exception_decoder
|
||||
upload_speed = 921600
|
||||
monitor_speed = 115200
|
||||
debug_tool = esp-prog
|
||||
board_build.filesystem = littlefs
|
||||
board_build.partitions = tools/partitions_custom.csv
|
||||
build_src_filter =
|
||||
+<*.cpp>
|
||||
+<classes/*.cpp>
|
||||
+<utils/*.cpp>
|
||||
+<modules/*.cpp>
|
||||
${env:esp32c3m_4mb_fromitems.build_src_filter}
|
||||
|
||||
[env:esp32s3_16mb]
|
||||
lib_deps =
|
||||
${common_env_data.lib_deps_external}
|
||||
${env:esp32s3_16mb_fromitems.lib_deps}
|
||||
build_flags =
|
||||
-Desp32s3_16mb="esp32s3_16mb"
|
||||
framework = arduino
|
||||
board = esp32-s3-devkitc-1
|
||||
board_build.mcu = esp32s3
|
||||
platform = espressif32 @6.3.1
|
||||
monitor_filters = esp32_exception_decoder
|
||||
upload_speed = 921600
|
||||
monitor_speed = 115200
|
||||
debug_tool = esp-prog
|
||||
board_build.partitions = tools/large_spiffs_16MB.csv
|
||||
board_upload.flash_size = 16MB
|
||||
board_build.filesystem = littlefs
|
||||
build_src_filter =
|
||||
+<*.cpp>
|
||||
+<classes/*.cpp>
|
||||
+<utils/*.cpp>
|
||||
+<modules/*.cpp>
|
||||
${env:esp32s3_16mb_fromitems.build_src_filter}
|
||||
|
||||
[env:esp32_16mb]
|
||||
lib_deps =
|
||||
${common_env_data.lib_deps_external}
|
||||
@@ -485,65 +531,25 @@ build_src_filter =
|
||||
|
||||
[env:esp8266_4mb_fromitems]
|
||||
lib_deps =
|
||||
https://github.com/enjoyneering/AHTxx.git
|
||||
adafruit/Adafruit BME280 Library
|
||||
adafruit/Adafruit BMP280 Library
|
||||
beegee-tokyo/DHT sensor library for ESPx
|
||||
https://github.com/milesburton/Arduino-Temperature-Control-Library
|
||||
https://github.com/tremaru/iarduino_RTC
|
||||
robtillaart/SHT2x@^0.1.1
|
||||
WEMOS SHT3x@1.0.0
|
||||
plerup/EspSoftwareSerial
|
||||
gyverlibs/EncButton @ ^2.0
|
||||
adafruit/Adafruit MCP23017 Arduino Library@^2.1.0
|
||||
adafruit/Adafruit BusIO @ ^1.13.2
|
||||
dfrobot/DFRobotDFPlayerMini @ ^1.0.5
|
||||
adafruit/Adafruit BusIO @ ^1.13.2
|
||||
https://github.com/robotclass/RobotClass_LiquidCrystal_I2C
|
||||
marcoschwartz/LiquidCrystal_I2C@^1.1.4
|
||||
https://github.com/stblassitude/Adafruit_SSD1306_Wemos_OLED
|
||||
https://github.com/adafruit/Adafruit-GFX-Library
|
||||
https://github.com/maxint-rd/TM16xx
|
||||
adafruit/Adafruit GFX Library @ ^1.11.5
|
||||
adafruit/Adafruit BusIO @ ^1.13.2
|
||||
https://github.com/GyverLibs/GyverINA
|
||||
gyverlibs/FastBot
|
||||
build_src_filter =
|
||||
+<modules/virtual/Cron>
|
||||
+<modules/virtual/Loging>
|
||||
+<modules/virtual/LogingDaily>
|
||||
+<modules/virtual/owmWeather>
|
||||
+<modules/virtual/Timer>
|
||||
+<modules/virtual/Variable>
|
||||
+<modules/virtual/VariableColor>
|
||||
+<modules/virtual/VButton>
|
||||
+<modules/sensors/A02Distance>
|
||||
+<modules/sensors/Acs712>
|
||||
+<modules/sensors/AhtXX>
|
||||
+<modules/sensors/AnalogAdc>
|
||||
+<modules/sensors/Bme280>
|
||||
+<modules/sensors/Bmp280>
|
||||
+<modules/sensors/Dht1122>
|
||||
+<modules/sensors/Ds18b20>
|
||||
+<modules/sensors/Impulse>
|
||||
+<modules/sensors/Pzem004t>
|
||||
+<modules/sensors/RTC>
|
||||
+<modules/sensors/S8>
|
||||
+<modules/sensors/Sht20>
|
||||
+<modules/sensors/Sht30>
|
||||
+<modules/sensors/Sonar>
|
||||
+<modules/sensors/UART>
|
||||
+<modules/sensors/ExternalMQTT>
|
||||
+<modules/sensors/Ina219>
|
||||
+<modules/exec/ButtonIn>
|
||||
+<modules/exec/ButtonOut>
|
||||
+<modules/exec/Buzzer>
|
||||
+<modules/exec/Enconder>
|
||||
+<modules/exec/IoTServo>
|
||||
+<modules/exec/Mcp23017>
|
||||
+<modules/exec/Mp3>
|
||||
+<modules/exec/Multitouch>
|
||||
+<modules/exec/Pcf8574>
|
||||
+<modules/exec/Pwm8266>
|
||||
+<modules/exec/TelegramLT>
|
||||
+<modules/display/Lcd2004>
|
||||
+<modules/display/Oled64>
|
||||
+<modules/display/TM16XX>
|
||||
+<modules/exec/Telegram_v2>
|
||||
|
||||
[env:esp32_4mb_fromitems]
|
||||
lib_deps =
|
||||
@@ -724,3 +730,27 @@ build_src_filter =
|
||||
+<modules/exec/ButtonOut>
|
||||
+<modules/exec/TelegramLT>
|
||||
|
||||
[env:esp32c3m_4mb_fromitems]
|
||||
lib_deps =
|
||||
build_src_filter =
|
||||
+<modules/virtual/Cron>
|
||||
+<modules/virtual/Loging>
|
||||
+<modules/virtual/LogingDaily>
|
||||
+<modules/virtual/owmWeather>
|
||||
+<modules/virtual/Timer>
|
||||
+<modules/virtual/Variable>
|
||||
+<modules/virtual/VariableColor>
|
||||
+<modules/virtual/VButton>
|
||||
|
||||
[env:esp32s3_16mb_fromitems]
|
||||
lib_deps =
|
||||
build_src_filter =
|
||||
+<modules/virtual/Cron>
|
||||
+<modules/virtual/Loging>
|
||||
+<modules/virtual/LogingDaily>
|
||||
+<modules/virtual/owmWeather>
|
||||
+<modules/virtual/Timer>
|
||||
+<modules/virtual/Variable>
|
||||
+<modules/virtual/VariableColor>
|
||||
+<modules/virtual/VButton>
|
||||
|
||||
|
||||
@@ -78,7 +78,8 @@ uint32_t ESP_getChipId(void)
|
||||
}
|
||||
|
||||
// устарела используем новую функцию ниже
|
||||
#ifndef esp32s2_4mb
|
||||
#if !defined(esp32s2_4mb) && !defined(esp32c3m_4mb) && !defined(esp32s3_16mb)
|
||||
//#ifndef esp32s2_4mb
|
||||
uint32_t ESP_getFlashChipId(void)
|
||||
{
|
||||
#ifdef ESP32
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#include "classes/IoTDB.h"
|
||||
#include "utils/Statistic.h"
|
||||
#include <Wire.h>
|
||||
#ifdef esp32s2_4mb
|
||||
#if defined(esp32s2_4mb) || defined(esp32s3_16mb)
|
||||
#include <USB.h>
|
||||
#endif
|
||||
|
||||
@@ -80,7 +80,7 @@ void stopErrorMarker(int id) {
|
||||
}
|
||||
|
||||
void setup() {
|
||||
#ifdef esp32s2_4mb
|
||||
#if defined(esp32s2_4mb) || defined(esp32s3_16mb)
|
||||
USB.begin();
|
||||
#endif
|
||||
#if defined(esp32_4mb) || defined(esp32_16mb) || defined(esp32cam_4mb)
|
||||
|
||||
@@ -59,7 +59,7 @@ String ESP_getResetReason(void) {
|
||||
return ESP.getResetReason();
|
||||
}
|
||||
#endif
|
||||
#ifdef esp32s2_4mb
|
||||
#if defined(esp32s2_4mb) || defined(esp32s3_16mb) || defined(esp32c3m_4mb)
|
||||
String ESP_getResetReason(void) {
|
||||
return ESP32GetResetReason(0); // CPU 0
|
||||
}
|
||||
|
||||
71
src/modules/exec/Pcf8591/Pcf8591.cpp
Normal file
71
src/modules/exec/Pcf8591/Pcf8591.cpp
Normal file
@@ -0,0 +1,71 @@
|
||||
#include "Global.h"
|
||||
#include "classes/IoTItem.h"
|
||||
|
||||
#include "Wire.h"
|
||||
#include <Adafruit_PCF8591.h>
|
||||
|
||||
// Make sure that this is set to the value in volts of VCC
|
||||
#define ADC_REFERENCE_VOLTAGE 3.3
|
||||
|
||||
class Pcf8591 : public IoTItem {
|
||||
int _pin;
|
||||
bool _isRaw;
|
||||
bool _isInited = false;
|
||||
Adafruit_PCF8591 pcf = Adafruit_PCF8591();
|
||||
|
||||
public:
|
||||
Pcf8591(String parameters) : IoTItem(parameters) {
|
||||
String tmp;
|
||||
jsonRead(parameters, "pin", tmp);
|
||||
_pin = tmp.toInt();
|
||||
|
||||
jsonRead(parameters, "mode", tmp);
|
||||
_isRaw = tmp == "raw";
|
||||
|
||||
if (!pcf.begin()) {
|
||||
Serial.println("# Adafruit PCF8591 not found!");
|
||||
_isInited = false;
|
||||
} else
|
||||
|
||||
_isInited = true;
|
||||
|
||||
Serial.println("# Adafruit PCF8591 found");
|
||||
|
||||
pcf.enableDAC(true);
|
||||
|
||||
Serial.println("AIN0, AIN1, AIN2, AIN3");
|
||||
|
||||
}
|
||||
|
||||
uint8_t dac_counter = 0;
|
||||
|
||||
void doByInterval() {
|
||||
|
||||
// Make a triangle wave on the DAC output
|
||||
pcf.analogWrite(dac_counter++);
|
||||
|
||||
if (_isInited) {
|
||||
if (_isRaw)
|
||||
value.valD = pcf.analogRead(_pin); // Чтение АЦП нулевого канала (Вольты)
|
||||
else
|
||||
value.valD = (int_to_volts(pcf.analogRead(_pin), 8, ADC_REFERENCE_VOLTAGE));
|
||||
regEvent(value.valD, "PCF8591");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
float int_to_volts(uint16_t dac_value, uint8_t bits, float logic_level) {
|
||||
return (((float)dac_value / ((1 << bits) - 1)) * logic_level);
|
||||
|
||||
}
|
||||
|
||||
~Pcf8591(){};
|
||||
};
|
||||
|
||||
void *getAPI_Pcf8591(String subtype, String param) {
|
||||
if (subtype == F("Pcf8591")) {
|
||||
return new Pcf8591(param);
|
||||
} else {
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
75
src/modules/exec/Pcf8591/modinfo.json
Normal file
75
src/modules/exec/Pcf8591/modinfo.json
Normal file
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"menuSection": "sensors",
|
||||
"configItem": [
|
||||
{
|
||||
"global": 0,
|
||||
"name": "Расширитель портов PCF8591",
|
||||
"type": "Reading",
|
||||
"subtype": "Pcf8591",
|
||||
"id": "Pcf85",
|
||||
"widget": "anydataVlt",
|
||||
"page": "PCF8591",
|
||||
"descr": "PCF_0",
|
||||
"pin": "0",
|
||||
"mode": "volt",
|
||||
"map": "1,255,1,100",
|
||||
"plus": 0,
|
||||
"multiply": 1,
|
||||
"round": 2,
|
||||
"int": 7
|
||||
}
|
||||
],
|
||||
"about": {
|
||||
"authorName": "Serghei Crasnicov",
|
||||
"authorContact": "https://t.me/Serghei63",
|
||||
"authorGit": "https://github.com/Serghei63",
|
||||
"specialThanks": "",
|
||||
"moduleName": "Pcf8591",
|
||||
"moduleVersion": "1.0",
|
||||
"usedRam": {
|
||||
"esp32_4mb": 15,
|
||||
"esp8266_4mb": 15
|
||||
},
|
||||
"title": "Расширитель 4-х аналоговых портов PCF8591",
|
||||
"moduleDesc": "Позволяет получить относительную величину напряжения на понижающем трансформаторе.",
|
||||
"propInfo": {
|
||||
"pin": "Номер AN, к которому подключен датчик. Допускается 0, 1, 2, 3",
|
||||
"mode": "Режим работы. volt - вывод в вольтах , raw - значения от 0 до 255",
|
||||
"int": "Количество секунд между опросами датчика."
|
||||
}
|
||||
},
|
||||
"defActive": false,
|
||||
"usedLibs": {
|
||||
|
||||
"esp32_4mb": [
|
||||
"https://github.com/adafruit/Adafruit_PCF8591"
|
||||
],
|
||||
"esp32_16mb": [
|
||||
"https://github.com/adafruit/Adafruit_PCF8591"
|
||||
],
|
||||
"esp8266_4mb": [
|
||||
"https://github.com/adafruit/Adafruit_PCF8591"
|
||||
],
|
||||
"esp8266_16mb": [
|
||||
"https://github.com/adafruit/Adafruit_PCF8591"
|
||||
],
|
||||
"esp8266_1mb": [
|
||||
"https://github.com/adafruit/Adafruit_PCF8591"
|
||||
],
|
||||
"esp8266_1mb_ota": [
|
||||
"https://github.com/adafruit/Adafruit_PCF8591"
|
||||
],
|
||||
"esp8285_1mb": [
|
||||
"https://github.com/adafruit/Adafruit_PCF8591"
|
||||
],
|
||||
"esp8285_1mb_ota": [
|
||||
"https://github.com/adafruit/Adafruit_PCF8591"
|
||||
],
|
||||
"esp8266_2mb": [
|
||||
"https://github.com/adafruit/Adafruit_PCF8591"
|
||||
],
|
||||
"esp8266_2mb_ota": [
|
||||
"https://github.com/adafruit/Adafruit_PCF8591"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -54,6 +54,8 @@
|
||||
"esp32cam_4mb": [],
|
||||
"esp32_16mb": [],
|
||||
"esp32s2_4mb": [],
|
||||
"esp32s3_16mb": [],
|
||||
"esp32c3m_4mb": [],
|
||||
"esp8266_4mb": [],
|
||||
"esp8266_16mb": [],
|
||||
"esp8266_1mb": [],
|
||||
|
||||
@@ -62,6 +62,8 @@
|
||||
"esp32_4mb3f": [],
|
||||
"esp32cam_4mb": [],
|
||||
"esp32s2_4mb": [],
|
||||
"esp32s3_16mb": [],
|
||||
"esp32c3m_4mb": [],
|
||||
"esp8266_4mb": []
|
||||
}
|
||||
}
|
||||
@@ -55,6 +55,8 @@
|
||||
"esp32cam_4mb": [],
|
||||
"esp32_16mb": [],
|
||||
"esp32s2_4mb": [],
|
||||
"esp32s3_16mb": [],
|
||||
"esp32c3m_4mb": [],
|
||||
"esp8266_4mb": [],
|
||||
"esp8266_16mb": [],
|
||||
"esp8266_1mb": [],
|
||||
|
||||
@@ -48,6 +48,8 @@
|
||||
"esp32cam_4mb": [],
|
||||
"esp32_16mb": [],
|
||||
"esp32s2_4mb": [],
|
||||
"esp32s3_16mb": [],
|
||||
"esp32c3m_4mb": [],
|
||||
"esp8266_4mb": [],
|
||||
"esp8266_16mb": [],
|
||||
"esp8266_1mb": [],
|
||||
|
||||
@@ -78,6 +78,8 @@
|
||||
"esp32cam_4mb": [],
|
||||
"esp32_16mb": [],
|
||||
"esp32s2_4mb": [],
|
||||
"esp32s3_16mb": [],
|
||||
"esp32c3m_4mb": [],
|
||||
"esp8266_4mb": [],
|
||||
"esp8266_16mb": [],
|
||||
"esp8266_1mb": [],
|
||||
|
||||
@@ -40,6 +40,8 @@
|
||||
"esp32cam_4mb": [],
|
||||
"esp32_16mb": [],
|
||||
"esp32s2_4mb": [],
|
||||
"esp32s3_16mb": [],
|
||||
"esp32c3m_4mb": [],
|
||||
"esp8266_4mb": [],
|
||||
"esp8266_16mb": [],
|
||||
"esp8266_1mb": [],
|
||||
|
||||
@@ -100,6 +100,8 @@
|
||||
"esp32cam_4mb": [],
|
||||
"esp32_16mb": [],
|
||||
"esp32s2_4mb": [],
|
||||
"esp32s3_16mb": [],
|
||||
"esp32c3m_4mb": [],
|
||||
"esp8266_4mb": [],
|
||||
"esp8266_16mb": [],
|
||||
"esp8266_1mb": [],
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
#include "Global.h"
|
||||
#include "classes/IoTItem.h"
|
||||
|
||||
// дочь - родитель
|
||||
class VariableColor : public IoTItem
|
||||
{
|
||||
private:
|
||||
public:
|
||||
VariableColor(String parameters) : IoTItem(parameters)
|
||||
{
|
||||
}
|
||||
|
||||
void doByInterval()
|
||||
{
|
||||
}
|
||||
|
||||
// событие когда пользователь подключается приложением или веб интерфейсом к усройству
|
||||
void onMqttWsAppConnectEvent()
|
||||
{
|
||||
SerialPrint("i", "Connecting", "Dashbord open ");
|
||||
regEvent(value.valS, "VariableColor", false, true);
|
||||
}
|
||||
|
||||
IoTValue execute(String command, std::vector<IoTValue> ¶m)
|
||||
{
|
||||
if (command == "widget" && param.size() == 2)
|
||||
{
|
||||
String json = "{}";
|
||||
jsonWriteStr(json, param[0].valS, param[1].valS);
|
||||
sendSubWidgetsValues(_id, json);
|
||||
}
|
||||
return {};
|
||||
}
|
||||
};
|
||||
|
||||
void *getAPI_VariableColor(String subtype, String param)
|
||||
{
|
||||
if (subtype == F("VariableColor"))
|
||||
{
|
||||
return new VariableColor(param);
|
||||
}
|
||||
else
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
@@ -1,51 +0,0 @@
|
||||
{
|
||||
"menuSection": "virtual_elments",
|
||||
"configItem": [
|
||||
{
|
||||
"global": 0,
|
||||
"name": "Цветной текст",
|
||||
"type": "Reading",
|
||||
"subtype": "VariableColor",
|
||||
"id": "color",
|
||||
"needSave": 0,
|
||||
"widget": "anydataDef",
|
||||
"page": "Вывод",
|
||||
"descr": "Цветной текст",
|
||||
"val": "...",
|
||||
"round": 0
|
||||
}
|
||||
],
|
||||
"about": {
|
||||
"authorName": "AVAKS",
|
||||
"authorContact": "https://t.me/@avaks_dev",
|
||||
"authorGit": "https://github.com/avaksru",
|
||||
"specialThanks": "",
|
||||
"moduleName": "VariableColor",
|
||||
"moduleVersion": "1",
|
||||
"usedRam": {
|
||||
"esp32_4mb": 15,
|
||||
"esp8266_4mb": 15
|
||||
},
|
||||
"title": "Цветной текст",
|
||||
"moduleDesc": "Текст с возможностью динамического изменения цвета",
|
||||
"propInfo": {
|
||||
"val": "Значение при старте"
|
||||
}
|
||||
},
|
||||
"defActive": true,
|
||||
"usedLibs": {
|
||||
"esp32_4mb": [],
|
||||
"esp32_4mb3f": [],
|
||||
"esp32cam_4mb": [],
|
||||
"esp32_16mb": [],
|
||||
"esp32s2_4mb": [],
|
||||
"esp8266_4mb": [],
|
||||
"esp8266_16mb": [],
|
||||
"esp8266_1mb": [],
|
||||
"esp8266_1mb_ota": [],
|
||||
"esp8285_1mb": [],
|
||||
"esp8285_1mb_ota": [],
|
||||
"esp8266_2mb": [],
|
||||
"esp8266_2mb_ota": []
|
||||
}
|
||||
}
|
||||
@@ -44,6 +44,8 @@
|
||||
"esp32cam_4mb": [],
|
||||
"esp32_16mb": [],
|
||||
"esp32s2_4mb": [],
|
||||
"esp32s3_16mb": [],
|
||||
"esp32c3m_4mb": [],
|
||||
"esp8266_4mb": [],
|
||||
"esp8266_16mb": [],
|
||||
"esp8266_1mb": [],
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{
|
||||
"menuSection": "virtual_elments",
|
||||
|
||||
"configItem": [
|
||||
{
|
||||
"global": 0,
|
||||
@@ -13,7 +14,7 @@
|
||||
"descr": "Температура на улице",
|
||||
"int": 30,
|
||||
"API_key": "",
|
||||
"сity": "Moscow",
|
||||
"city": "Moscow",
|
||||
"lon": "37.54",
|
||||
"lat": "57.74",
|
||||
"lang": "ru",
|
||||
@@ -23,13 +24,14 @@
|
||||
"debug": 0
|
||||
}
|
||||
],
|
||||
|
||||
"about": {
|
||||
"authorName": "Serghei Crasnicov, v2.0 Mikhail Bubnov",
|
||||
"authorContact": "https://t.me/Serghei63",
|
||||
"authorContact": "https://t.me/Serghei63 https://t.me/Mit4bmw",
|
||||
"authorGit": "https://github.com/Serghei63",
|
||||
"specialThanks": "AVAKS",
|
||||
"moduleName": "owmWeather",
|
||||
"moduleVersion": "2.0",
|
||||
"moduleVersion": "2.1",
|
||||
"usedRam": {
|
||||
"esp32_4mb": 15,
|
||||
"esp8266_4mb": 15
|
||||
@@ -58,14 +60,43 @@
|
||||
"lon": "Долгота, при использовании координат, будет автоматически выбран ближайший город",
|
||||
"lat": "Широта, при использовании координат, будет автоматически выбран ближайший город",
|
||||
"lang": "Язык используемый в ответах OpenWetaherMap",
|
||||
"debug": "1 - выводить дополнительный лог в сериал"
|
||||
}
|
||||
"debug":"1 - выводить дополнительный лог в сериал"
|
||||
},
|
||||
"funcInfo": [
|
||||
{
|
||||
"name": "sunrise",
|
||||
"descr": "Функция астрологического таймера, можно задать время до/после рассвета, вернётся количество минут до сработки или после (-). После заката будет возвращать +999 (Значение <=0 будет от сработки и до заката), когда 0 - значит время подошло",
|
||||
"params": ["количество минут до(-)/после(+) рассвета"]
|
||||
},
|
||||
{
|
||||
"name": "sunset",
|
||||
"descr": "Функция астрологического таймера, можно задать время до/после заката, вернётся количество минут до сработки или после (-), когда 0 - значит время подошло",
|
||||
"params": ["количество минут до(-)/после(+) заката"]
|
||||
},
|
||||
{
|
||||
"name": "night",
|
||||
"descr": "Вернет 1 если ночь (уже закат) и 0 если день (рассвет)",
|
||||
"params": []
|
||||
}
|
||||
]
|
||||
},
|
||||
"defActive": false,
|
||||
|
||||
"defActive": true,
|
||||
|
||||
"usedLibs": {
|
||||
"esp32_4mb": [],
|
||||
"esp32_4mb3f": [],
|
||||
"esp32s2_4mb": [],
|
||||
"esp32_16mb": []
|
||||
"esp32_16mb": [],
|
||||
"esp32s3_16mb": [],
|
||||
"esp32c3m_4mb": [],
|
||||
"esp8266_4mb": [],
|
||||
"esp8266_16mb": [],
|
||||
"esp8266_1mb": [],
|
||||
"esp8266_1mb_ota": [],
|
||||
"esp8285_1mb": [],
|
||||
"esp8285_1mb_ota": [],
|
||||
"esp8266_2mb": [],
|
||||
"esp8266_2mb_ota": []
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,9 +22,12 @@ private:
|
||||
String _lang = "";
|
||||
bool _debug = false;
|
||||
DynamicJsonDocument Weatherdoc1;
|
||||
unsigned long _sunsetTime = 0;
|
||||
unsigned long _sunriseTime = 0;
|
||||
uint32_t _tzone = 0;
|
||||
|
||||
public:
|
||||
owmWeather(String parameters) : Weatherdoc1(1024), IoTItem(parameters)
|
||||
owmWeather(String parameters) : Weatherdoc1(1024), IoTItem(parameters)
|
||||
{
|
||||
_API_key = jsonReadStr(parameters, "API_key");
|
||||
// _ID_sity = jsonReadStr(parameters, "ID_sity");
|
||||
@@ -82,7 +85,8 @@ public:
|
||||
|
||||
deserializeJson(Weatherdoc1, payload);
|
||||
// ret += payload;
|
||||
SerialPrint("i", "Weatherdoc1", "memoryUsage: " + String(Weatherdoc1.memoryUsage()));
|
||||
if (_debug)
|
||||
SerialPrint("i", "Weatherdoc1", "memoryUsage: " + String(Weatherdoc1.memoryUsage()));
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -104,6 +108,11 @@ public:
|
||||
getWeather();
|
||||
if (jsonReadStr(Weatherdoc1["main"], "temp", true) != "null")
|
||||
{
|
||||
_tzone = Weatherdoc1["timezone"].as<int>();
|
||||
_sunriseTime = std::atoll(jsonReadStr(Weatherdoc1["sys"], "sunrise", true).c_str());
|
||||
_sunriseTime = _sunriseTime + _tzone;
|
||||
_sunsetTime = std::atoll(jsonReadStr(Weatherdoc1["sys"], "sunset", true).c_str());
|
||||
_sunsetTime = _sunsetTime + _tzone;
|
||||
|
||||
publishNew("main", "temp");
|
||||
publishNew("main", "pressure");
|
||||
@@ -121,66 +130,152 @@ public:
|
||||
if (_param == "temp")
|
||||
{
|
||||
value.valS = jsonReadStr(Weatherdoc1["main"], "temp", true);
|
||||
regEvent(value.valS, "owmWeather");
|
||||
}
|
||||
else if (_param == "pressure")
|
||||
{
|
||||
value.valS = jsonReadStr(Weatherdoc1["main"], "pressure", true);
|
||||
// value.valS = jsonReadStr(Weatherdoc1["main"], "pressure", true);
|
||||
int tval;
|
||||
jsonRead(Weatherdoc1["main"], "pressure", tval, true);
|
||||
regEvent(tval / 1.333, "owmWeather");
|
||||
}
|
||||
else if (_param == "humidity")
|
||||
{
|
||||
value.valS = jsonReadStr(Weatherdoc1["main"], "humidity", true);
|
||||
regEvent(value.valS, "owmWeather");
|
||||
}
|
||||
else if (_param == "speed")
|
||||
{
|
||||
value.valS = jsonReadStr(Weatherdoc1["wind"], "speed", true);
|
||||
regEvent(value.valS, "owmWeather");
|
||||
}
|
||||
else if (_param == "deg")
|
||||
{
|
||||
value.valS = jsonReadStr(Weatherdoc1["wind"], "deg", true);
|
||||
regEvent(value.valS, "owmWeather");
|
||||
}
|
||||
else if (_param == "all")
|
||||
{
|
||||
value.valS = jsonReadStr(Weatherdoc1["clouds"], "all", true);
|
||||
regEvent(value.valS, "owmWeather");
|
||||
}
|
||||
else if (_param == "main")
|
||||
{
|
||||
value.valS = jsonReadStr(Weatherdoc1["weather"][0], "main", true);
|
||||
regEvent(value.valS, "owmWeather");
|
||||
}
|
||||
else if (_param == "description")
|
||||
{
|
||||
value.valS = jsonReadStr(Weatherdoc1["weather"][0], "description", true);
|
||||
regEvent(value.valS, "owmWeather");
|
||||
}
|
||||
else if (_param == "icon")
|
||||
{
|
||||
value.valS = jsonReadStr(Weatherdoc1["weather"][0], "icon", true);
|
||||
regEvent(value.valS, "owmWeather");
|
||||
}
|
||||
else if (_param == "sunrise")
|
||||
{
|
||||
value.valS = getTimeDotFormatedFromUnix(std::atoll(jsonReadStr(Weatherdoc1["sys"], "sunrise", true).c_str()));
|
||||
value.valS = getTimeDotFormatedFromUnix(_sunriseTime);
|
||||
regEvent(value.valS, "owmWeather");
|
||||
}
|
||||
else if (_param == "sunset")
|
||||
{
|
||||
value.valS = getTimeDotFormatedFromUnix(std::atoll(jsonReadStr(Weatherdoc1["sys"], "sunset", true).c_str()));
|
||||
value.valS = getTimeDotFormatedFromUnix(_sunsetTime);
|
||||
regEvent(value.valS, "owmWeather");
|
||||
}
|
||||
else if (_param == "sunset")
|
||||
else if (_param == "name")
|
||||
{
|
||||
value.valS = Weatherdoc1["name"].as<String>();
|
||||
regEvent(value.valS, "owmWeather");
|
||||
}
|
||||
// value.isDecimal = false;
|
||||
|
||||
regEvent(value.valS, "owmWeather");
|
||||
// regEvent(value.valS, "owmWeather");
|
||||
}
|
||||
}
|
||||
|
||||
IoTValue execute(String command, std::vector<IoTValue> ¶m)
|
||||
{
|
||||
IoTValue value = {};
|
||||
if (command == "get")
|
||||
{
|
||||
// getWeather();
|
||||
doByInterval();
|
||||
}
|
||||
else if (command == "night")
|
||||
{
|
||||
if (_sunsetTime == 0 || !isTimeSynch)
|
||||
{
|
||||
SerialPrint("i", ("AstroTimer"), "Not TimeSynch or Weather data server");
|
||||
value.valD = 0;
|
||||
return value;
|
||||
}
|
||||
long dt_cur = getSystemTime() + _tzone;
|
||||
// Если светло
|
||||
if (dt_cur >= _sunriseTime && dt_cur < _sunsetTime)
|
||||
value.valD = 0;
|
||||
else // если темно
|
||||
value.valD = 1;
|
||||
if (_debug)
|
||||
{
|
||||
SerialPrint("i", ("AstroTimer"), "night: " + String(value.valD));
|
||||
}
|
||||
}
|
||||
|
||||
return {};
|
||||
else if (command == "sunset")
|
||||
{
|
||||
if (_sunsetTime == 0 || !isTimeSynch)
|
||||
{
|
||||
SerialPrint("i", ("AstroTimer"), "Not TimeSynch or Weather data server");
|
||||
value.valD = 999;
|
||||
return value;
|
||||
}
|
||||
long dt_cur = getSystemTime() + _tzone;
|
||||
if (param.size())
|
||||
{
|
||||
if (param[0].isDecimal)
|
||||
{
|
||||
long dt_set = (_sunsetTime + (int)(param[0].valD * 60));
|
||||
long dt = dt_set - dt_cur;
|
||||
value.valD = dt / 60;
|
||||
if (_debug)
|
||||
{
|
||||
SerialPrint("i", ("AstroTimer"), "set: " + getTimeDotFormatedFromUnix(dt_set) + " time: " + getTimeDotFormatedFromUnix(dt_cur) + " sunset: " + getTimeDotFormatedFromUnix(_sunsetTime) + " Dt: " + String(param[0].valD) + " diff: " + String(value.valD));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (command == "sunrise")
|
||||
{
|
||||
if (_sunriseTime == 0 || !isTimeSynch)
|
||||
{
|
||||
SerialPrint("i", ("AstroTimer"), "Not TimeSynch or Weather data server");
|
||||
value.valD = 999;
|
||||
return value;
|
||||
}
|
||||
long dt_cur = getSystemTime() + _tzone;
|
||||
if (dt_cur >= _sunsetTime)
|
||||
{
|
||||
SerialPrint("i", ("AstroTimer"), "УЖЕ Закат, таймер не считаем time: " + getTimeDotFormatedFromUnix(dt_cur) + " diff: " + String(value.valD));
|
||||
value.valD = 999;
|
||||
return value;
|
||||
}
|
||||
if (param.size())
|
||||
{
|
||||
if (param[0].isDecimal)
|
||||
{
|
||||
long dt_set = (_sunriseTime + (int)(param[0].valD * 60));
|
||||
long dt = dt_set - dt_cur;
|
||||
value.valD = dt / 60;
|
||||
if (_debug)
|
||||
{
|
||||
SerialPrint("i", ("AstroTimer"), "set: " + getTimeDotFormatedFromUnix(dt_set) + " time: " + getTimeDotFormatedFromUnix(dt_cur) + " sunrise: " + getTimeDotFormatedFromUnix(_sunriseTime) + " Dt: " + String(param[0].valD) + " diff: " + String(value.valD));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
// проверяем если пришедшее значение отличается от предыдущего регистрируем событие
|
||||
@@ -230,14 +325,33 @@ public:
|
||||
{
|
||||
if (Weatherdoc1[root][param].as<String>() != tmp->value.valS)
|
||||
{
|
||||
tmp->setValue(getTimeDotFormatedFromUnix(std::atoll(jsonReadStr(Weatherdoc1[root], param, true).c_str())), true);
|
||||
if (param == "sunrise")
|
||||
{
|
||||
tmp->setValue(getTimeDotFormatedFromUnix(_sunriseTime), true);
|
||||
}
|
||||
else if (param == "sunset")
|
||||
{
|
||||
tmp->setValue(getTimeDotFormatedFromUnix(_sunsetTime), true);
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp->setValue(Weatherdoc1[root][param].as<String>(), true);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Weatherdoc1[root][param].as<String>() != tmp->value.valS)
|
||||
{
|
||||
tmp->setValue(Weatherdoc1[root][param].as<String>(), true);
|
||||
if (param == "pressure")
|
||||
{
|
||||
int tval = Weatherdoc1[root][param].as<int>();
|
||||
tmp->setValue(String(tval / 1.333), true);
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp->setValue(Weatherdoc1[root][param].as<String>(), true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user