mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-26 14:12:16 +03:00
Серьезно меняем скрипт обновления конфигурации проекта
This commit is contained in:
179
PrepareProject.py
Normal file
179
PrepareProject.py
Normal file
@@ -0,0 +1,179 @@
|
||||
# PrepareProject.py - инструмент для подготовки проекта к компиляции.
|
||||
# Необходимо вызвать при изменении персональных настроек или состава модулей.
|
||||
#
|
||||
# При отсутствии файла с персональными настройками, myProfile.json будет создан автоматически
|
||||
# python PrepareProject.py
|
||||
#
|
||||
# Если myProfile.json уже существует, можно запустить PrepareProject.py с параметром -u или --update для обновления списка модулей.
|
||||
# Данная функция будет полезна для разработчиков при добавлении модуля в папку src/modules
|
||||
# python PrepareProject.py --update
|
||||
# python PrepareProject.py -u
|
||||
#
|
||||
# Возможно использовать несколько вариантов персональных настроек и уточнять имя файла при запуске с использованием параметра -p или -profile
|
||||
# python PrepareProject.py --profile <ИмяФайла>
|
||||
# python PrepareProject.py -p <ИмяФайла>
|
||||
#
|
||||
#
|
||||
|
||||
import configparser
|
||||
import os, json, sys, getopt
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
config = configparser.ConfigParser() # создаём объекта парсера INI
|
||||
|
||||
def printHelp():
|
||||
print('''Usage:
|
||||
PrepareProject.py
|
||||
-p --profile <file.json_in_root_folder>
|
||||
-u --update
|
||||
-h --help''')
|
||||
|
||||
|
||||
def updateModulesInProfile(profJson):
|
||||
profJson["modules"] = {}
|
||||
for root,d_names,f_names in os.walk("src\\modules"):
|
||||
for fname in f_names:
|
||||
if fname == "modinfo.json":
|
||||
with open(root + "\\" + fname, "r", encoding='utf-8') as read_file:
|
||||
modinfoJson = json.load(read_file)
|
||||
# проверяем есть ли уже узловой элемент и если нет, то создаем
|
||||
if not modinfoJson['menuSection'] in profJson["modules"]:
|
||||
profJson["modules"][modinfoJson['menuSection']] = []
|
||||
# добавляем информацию о модуле в узловой элемент
|
||||
profJson["modules"][modinfoJson['menuSection']].append({
|
||||
'path': root,
|
||||
'active': modinfoJson['defActive']
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
update = False # признак необходимости обновить список модулей
|
||||
profile = 'myProfile.json' # имя профиля. Будет заменено из консоли, если указано при старте
|
||||
|
||||
argv = sys.argv[1:]
|
||||
try:
|
||||
opts, args = getopt.getopt(argv, 'hp:u', ['help', 'profile=', 'update'])
|
||||
except getopt.GetoptError:
|
||||
print('Ошибка обработки параметров!')
|
||||
printHelp()
|
||||
sys.exit(2)
|
||||
|
||||
for opt, arg in opts:
|
||||
if opt in ("-h", "--help"):
|
||||
printHelp()
|
||||
sys.exit()
|
||||
elif opt in ("-p", "--profile"):
|
||||
profile = arg
|
||||
elif opt in ("-u", "--update"):
|
||||
update = True
|
||||
|
||||
|
||||
if Path(profile).is_file():
|
||||
# подтягиваем уже существующий профиль
|
||||
with open(profile, "r", encoding='utf-8') as read_file:
|
||||
profJson = json.load(read_file)
|
||||
# если хотим обновить список модулей в существующем профиле
|
||||
if update:
|
||||
updateModulesInProfile(profJson)
|
||||
with open(profile, "w", encoding='utf-8') as write_file:
|
||||
json.dump(profJson, write_file, ensure_ascii=False, indent=4, sort_keys=False)
|
||||
else:
|
||||
# если файла нет - создаем по образу настроек из проекта
|
||||
profJson = json.loads('{}')
|
||||
# копируем параметры IOTM из settings.json в новый профиль
|
||||
with open("data_svelte/settings.json", "r", encoding='utf-8') as read_file:
|
||||
profJson['iotmSettings'] = json.load(read_file)
|
||||
# устанавливаем параметры сборки
|
||||
profJson['projectProp'] = {
|
||||
'platformio': {
|
||||
'default_envs': 'esp8266_4mb',
|
||||
'data_dir': 'data_svelte'
|
||||
}
|
||||
}
|
||||
# загружаем список модулей для сборки
|
||||
updateModulesInProfile(profJson)
|
||||
# сохраняем новый профиль
|
||||
with open(profile, "w", encoding='utf-8') as write_file:
|
||||
json.dump(profJson, write_file, ensure_ascii=False, indent=4, sort_keys=False)
|
||||
|
||||
|
||||
# генерируем файлы проекта на основе подготовленного профиля
|
||||
# заполняем конфигурационный файл прошивки параметрами из профиля
|
||||
with open("data_svelte/settings.json", "r", encoding='utf-8') as read_file:
|
||||
iotmJson = json.load(read_file)
|
||||
for key, value in profJson['iotmSettings'].items():
|
||||
iotmJson[key] = value
|
||||
with open("data_svelte/settings.json", "w", encoding='utf-8') as write_file:
|
||||
json.dump(iotmJson, write_file, ensure_ascii=False, indent=4, sort_keys=False)
|
||||
|
||||
# определяем какое устройство используется в профиле
|
||||
deviceName = profJson['projectProp']['platformio']['default_envs']
|
||||
|
||||
# собираем меню прошивки из модулей
|
||||
# параллельно формируем список имен активных модулей
|
||||
# параллельно собираем необходимые активным модулям библиотеки для включения в компиляцию для текущего типа устройства (esp8266_4m, esp32_4mb)
|
||||
activeModulesName = [] # список имен активных модулей
|
||||
allLibs = "" # подборка всех библиотек необходимых модулям для дальнейшей записи в конфигурацию platformio
|
||||
itemsCount = 1;
|
||||
includeDirs = "" # подборка путей ко всем модулям для дальнейшей записи в конфигурацию platformio
|
||||
itemsJson = json.loads('[{"name": "Выберите элемент", "num": 0}]')
|
||||
for section, modules in profJson['modules'].items():
|
||||
itemsJson.append({"header": section})
|
||||
for module in modules:
|
||||
if module['active']:
|
||||
with open(module['path'] + "\\modinfo.json", "r", encoding='utf-8') as read_file:
|
||||
moduleJson = json.load(read_file)
|
||||
if deviceName in moduleJson['devices']: # проверяем поддерживает ли модуль текущее устройство
|
||||
activeModulesName.append(moduleJson['about']['moduleName']) # запоминаем имена для использования на след шагах
|
||||
includeDirs = includeDirs + "\n+<" + module['path'].replace("src\\", "") + ">" # запоминаем пути к модулям для компиляции
|
||||
for libPath in moduleJson['devices'][deviceName]: # запоминаем библиотеки необходимые модулю для текущей платы
|
||||
allLibs = allLibs + "\n" + libPath
|
||||
for configItemsJson in moduleJson['configItem']:
|
||||
configItemsJson['num'] = itemsCount
|
||||
configItemsJson['name'] = str(itemsCount) + ". " + configItemsJson['name']
|
||||
itemsCount = itemsCount + 1
|
||||
itemsJson.append(configItemsJson)
|
||||
with open("data_svelte/items.json", "w", encoding='utf-8') as write_file:
|
||||
json.dump(itemsJson, write_file, ensure_ascii=False, indent=4, sort_keys=False)
|
||||
|
||||
|
||||
# учитываем вызовы модулей в API.cpp
|
||||
allAPI_head = ""
|
||||
allAPI_exec = ""
|
||||
for activModuleName in activeModulesName:
|
||||
allAPI_head = allAPI_head + "\nvoid* getAPI_" + activModuleName + "(String subtype, String params);"
|
||||
allAPI_exec = allAPI_exec + "\nif ((tmpAPI = getAPI_" + activModuleName + "(subtype, params)) != nullptr) return tmpAPI;"
|
||||
apicpp = '#include "ESPConfiguration.h"\n'
|
||||
apicpp = apicpp + allAPI_head
|
||||
apicpp = apicpp + '\n\nvoid* getAPI(String subtype, String params) {\nvoid* tmpAPI;'
|
||||
apicpp = apicpp + allAPI_exec
|
||||
apicpp = apicpp + '\nreturn nullptr;\n}'
|
||||
with open('src/modules/API.cpp', 'w') as f:
|
||||
f.write(apicpp)
|
||||
|
||||
# корректируем параметры platformio
|
||||
# собираем пути всех отключенных модулей для исключения их из процесса компиляции
|
||||
# excludeDirs = ""
|
||||
# for root,d_names,f_names in os.walk("src\\modules"):
|
||||
# for fname in f_names:
|
||||
# if fname == "modinfo.json":
|
||||
# with open(root + "\\" + fname, "r", encoding='utf-8') as read_file:
|
||||
# modinfoJson = json.load(read_file)
|
||||
# if not modinfoJson['about']['moduleName'] in activeModulesName:
|
||||
# excludeDirs = excludeDirs + "\n-<" + root.replace("src\\", "") + ">"
|
||||
|
||||
# фиксируем изменения в platformio.ini
|
||||
config.clear()
|
||||
config.read("platformio.ini")
|
||||
config["env:" + deviceName + "_fromitems"]["lib_deps"] = allLibs
|
||||
config["env:" + deviceName + "_fromitems"]["build_src_filter"] = includeDirs
|
||||
config["platformio"]["default_envs"] = deviceName
|
||||
config["platformio"]["data_dir"] = profJson['projectProp']['platformio']['data_dir']
|
||||
with open("platformio.ini", 'w') as configFile:
|
||||
config.write(configFile)
|
||||
|
||||
|
||||
|
||||
116
accembleItems.py
116
accembleItems.py
@@ -1,116 +0,0 @@
|
||||
import configparser
|
||||
import os
|
||||
import json, pprint
|
||||
|
||||
config = configparser.ConfigParser() # создаём объекта парсера INI
|
||||
allLibs_esp8266_4mb = ""
|
||||
allLibs_esp32_4mb = ""
|
||||
|
||||
allMenuItems = json.loads('[]')
|
||||
allMenuItemsCount = 1
|
||||
|
||||
allAPI_head = ""
|
||||
allAPI_exec = ""
|
||||
|
||||
excludeDirs = ""
|
||||
|
||||
|
||||
def getDirs(path):
|
||||
global excludeDirs
|
||||
for file in os.listdir(path):
|
||||
maybeDir = os.path.join(path, file)
|
||||
if os.path.isdir(maybeDir):
|
||||
config.clear()
|
||||
if config.read(maybeDir + "/platformio.ini"):
|
||||
if config.getboolean("iotm", "exclude", fallback=False):
|
||||
print("Excluded: " + maybeDir)
|
||||
maybeDir = maybeDir.replace("src/", "")
|
||||
excludeDirs = excludeDirs + "\n-<" + maybeDir + ">"
|
||||
else:
|
||||
yield file
|
||||
else:
|
||||
yield file
|
||||
|
||||
|
||||
def getPIOLibs(patch):
|
||||
global allLibs_esp8266_4mb, allLibs_esp32_4mb
|
||||
for dir in getDirs(patch):
|
||||
config.clear()
|
||||
if (config.read(patch + dir + "/platformio.ini")):
|
||||
print(patch + dir + "/platformio.ini")
|
||||
allLibs_esp8266_4mb = allLibs_esp8266_4mb + config["env:esp8266_4mb"]["lib_deps"]
|
||||
allLibs_esp32_4mb = allLibs_esp32_4mb + config["env:esp32_4mb"]["lib_deps"]
|
||||
|
||||
|
||||
def getMenuItems(patch):
|
||||
global allMenuItems, allMenuItemsCount
|
||||
with open(patch + "items.json", "r") as read_file:
|
||||
allMenuItems = allMenuItems + json.load(read_file)
|
||||
|
||||
for dir in getDirs(patch):
|
||||
with open(patch + dir + "/items.json", "r") as read_file:
|
||||
print(patch + dir + "/items.json")
|
||||
data = json.load(read_file)
|
||||
for item in data:
|
||||
item["name"] = str(allMenuItemsCount) + ". " + item["name"]
|
||||
item["num"] = allMenuItemsCount
|
||||
allMenuItemsCount = allMenuItemsCount + 1
|
||||
allMenuItems = allMenuItems + data
|
||||
|
||||
|
||||
def getAPI(patch):
|
||||
global allAPI_head, allAPI_exec
|
||||
for dir in getDirs(patch):
|
||||
print(patch + dir)
|
||||
allAPI_head = allAPI_head + "\nvoid* getAPI_" + dir + "(String subtype, String params);"
|
||||
allAPI_exec = allAPI_exec + "\nif ((tmpAPI = getAPI_" + dir + "(subtype, params)) != nullptr) return tmpAPI;"
|
||||
|
||||
|
||||
|
||||
# читаем и запоминаем все либы мз каждого модуля
|
||||
getPIOLibs("src/modules/system/")
|
||||
getPIOLibs("src/modules/exec/")
|
||||
getPIOLibs("src/modules/sensors/")
|
||||
getPIOLibs("src/modules/lcd/")
|
||||
|
||||
# сохраняем собранные либы в настройках PIO
|
||||
config.clear()
|
||||
config.read("platformio.ini")
|
||||
config["env:esp8266_4mb_fromitems"]["lib_deps"] = allLibs_esp8266_4mb
|
||||
config["env:esp32_4mb_fromitems"]["lib_deps"] = allLibs_esp32_4mb
|
||||
config["env:esp8266_4mb_fromitems"]["build_src_filter"] = excludeDirs
|
||||
config["env:esp32_4mb_fromitems"]["build_src_filter"] = excludeDirs
|
||||
with open("platformio.ini", 'w') as configfile:
|
||||
config.write(configfile)
|
||||
|
||||
|
||||
|
||||
# готовим первый элемент меню
|
||||
with open("src/modules/items.json", "r") as read_file:
|
||||
allMenuItems = allMenuItems + json.load(read_file)
|
||||
|
||||
# читаем и запоминаем пункты меню модуелей
|
||||
getMenuItems("src/modules/system/")
|
||||
getMenuItems("src/modules/exec/")
|
||||
getMenuItems("src/modules/sensors/")
|
||||
getMenuItems("src/modules/lcd/")
|
||||
|
||||
# сохраняем пункты меню в общий файл
|
||||
with open('data_svelte/items.json', 'w') as f:
|
||||
json.dump(allMenuItems, f, ensure_ascii=False, indent=4, sort_keys=False)
|
||||
|
||||
|
||||
# собираем списки API для интеграции вызовов модулей
|
||||
getAPI("src/modules/system/")
|
||||
getAPI("src/modules/exec/")
|
||||
getAPI("src/modules/sensors/")
|
||||
getAPI("src/modules/lcd/")
|
||||
|
||||
# сохраняем все API в API.cpp
|
||||
apicpp = '#include "ESPConfiguration.h"\n'
|
||||
apicpp = apicpp + allAPI_head
|
||||
apicpp = apicpp + '\n\nvoid* getAPI(String subtype, String params) {\nvoid* tmpAPI;'
|
||||
apicpp = apicpp + allAPI_exec
|
||||
apicpp = apicpp + 'return nullptr;\n}'
|
||||
with open('src/modules/API.cpp', 'w') as f:
|
||||
f.write(apicpp)
|
||||
@@ -3,12 +3,133 @@
|
||||
"name": "Выберите элемент",
|
||||
"num": 0
|
||||
},
|
||||
{
|
||||
"header": "Экраны"
|
||||
},
|
||||
{
|
||||
"name": "1. LCD экран 2004",
|
||||
"type": "Reading",
|
||||
"subtype": "Lcd2004",
|
||||
"id": "Lcd",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "T",
|
||||
"int": 15,
|
||||
"addr": "0x27",
|
||||
"size": "20,4",
|
||||
"coord": "0,0",
|
||||
"id2show": "id датчика",
|
||||
"num": 1
|
||||
},
|
||||
{
|
||||
"name": "2. LCD экран 1602",
|
||||
"type": "Reading",
|
||||
"subtype": "Lcd2004",
|
||||
"id": "Lcd",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "T",
|
||||
"int": 15,
|
||||
"addr": "0x27",
|
||||
"size": "16,2",
|
||||
"coord": "0,0",
|
||||
"id2show": "id датчика",
|
||||
"num": 2
|
||||
},
|
||||
{
|
||||
"header": "Модули управления"
|
||||
},
|
||||
{
|
||||
"name": "3. Кнопка (подключенная физически)",
|
||||
"type": "Writing",
|
||||
"subtype": "ButtonIn",
|
||||
"id": "btn",
|
||||
"widget": "toggle",
|
||||
"page": "Кнопки",
|
||||
"descr": "",
|
||||
"int": 0,
|
||||
"pin": 16,
|
||||
"execLevel": "1",
|
||||
"pinMode": "INPUT",
|
||||
"debounceDelay": 50,
|
||||
"fixState": 1,
|
||||
"num": 3
|
||||
},
|
||||
{
|
||||
"name": "4. Кнопка управляющая пином (Реле с кнопкой)",
|
||||
"type": "Writing",
|
||||
"subtype": "ButtonOut",
|
||||
"id": "btn",
|
||||
"widget": "toggle",
|
||||
"page": "Кнопки",
|
||||
"descr": "",
|
||||
"int": 0,
|
||||
"inv": 0,
|
||||
"pin": 2,
|
||||
"num": 4
|
||||
},
|
||||
{
|
||||
"name": "5. Сервопривод",
|
||||
"type": "Writing",
|
||||
"subtype": "IoTServo",
|
||||
"id": "servo",
|
||||
"widget": "range",
|
||||
"page": "servo",
|
||||
"descr": "угол",
|
||||
"int": 1,
|
||||
"pin": 12,
|
||||
"apin": -1,
|
||||
"amap": "0, 4096, 0, 180",
|
||||
"num": 5
|
||||
},
|
||||
{
|
||||
"name": "6. MP3 плеер",
|
||||
"type": "Reading",
|
||||
"subtype": "Mp3",
|
||||
"id": "mp3",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "",
|
||||
"int": 1,
|
||||
"pins": "14,12",
|
||||
"volume": 20,
|
||||
"num": 6
|
||||
},
|
||||
{
|
||||
"name": "7. Телеграм-Бот",
|
||||
"type": "Writing",
|
||||
"subtype": "Telegram",
|
||||
"id": "tg",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "",
|
||||
"int": 10,
|
||||
"token": "",
|
||||
"autos": 1,
|
||||
"receiveMsg": 0,
|
||||
"chatID": "",
|
||||
"num": 7
|
||||
},
|
||||
{
|
||||
"name": "8. Таймер",
|
||||
"type": "Writing",
|
||||
"subtype": "Timer",
|
||||
"id": "timer",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "",
|
||||
"int": 1,
|
||||
"countDown": 15,
|
||||
"ticker": 0,
|
||||
"repeat": 0,
|
||||
"needSave": 0,
|
||||
"num": 8
|
||||
},
|
||||
{
|
||||
"header": "Расширения"
|
||||
},
|
||||
{
|
||||
"name": "1. Поддержка DS1302(1), DS1307(2), DS3231(3), RX8025(4)",
|
||||
"num": 1,
|
||||
"name": "9. Поддержка DS1302(1), DS1307(2), DS3231(3), RX8025(4)",
|
||||
"type": "Reading",
|
||||
"subtype": "IarduinoRTC",
|
||||
"id": "RTC",
|
||||
@@ -21,11 +142,11 @@
|
||||
"clk": 5,
|
||||
"dat": 4,
|
||||
"defFormat": "d-m-Y",
|
||||
"ticker": 0
|
||||
"ticker": 0,
|
||||
"num": 9
|
||||
},
|
||||
{
|
||||
"name": "2. Расширитель портов Mcp23017",
|
||||
"num": 2,
|
||||
"name": "10. Расширитель портов Mcp23017",
|
||||
"type": "Reading",
|
||||
"subtype": "Mcp23017",
|
||||
"id": "Mcp",
|
||||
@@ -34,22 +155,22 @@
|
||||
"descr": "",
|
||||
"int": "0",
|
||||
"addr": "0x20",
|
||||
"index": 1
|
||||
"index": 1,
|
||||
"num": 10
|
||||
},
|
||||
{
|
||||
"name": "3. Доп. функции системы",
|
||||
"num": 3,
|
||||
"name": "11. Доп. функции системы",
|
||||
"type": "Reading",
|
||||
"subtype": "SysExt",
|
||||
"id": "SysExt",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "",
|
||||
"int": 15
|
||||
"int": 15,
|
||||
"num": 11
|
||||
},
|
||||
{
|
||||
"name": "4. Переменная",
|
||||
"num": 4,
|
||||
"name": "12. Переменная",
|
||||
"type": "Reading",
|
||||
"subtype": "Variable",
|
||||
"id": "var",
|
||||
@@ -57,533 +178,7 @@
|
||||
"page": "",
|
||||
"descr": "",
|
||||
"int": "0",
|
||||
"val": "0"
|
||||
},
|
||||
{
|
||||
"header": "Модули управления"
|
||||
},
|
||||
{
|
||||
"name": "5. Кнопка (подключенная физически)",
|
||||
"num": 5,
|
||||
"type": "Writing",
|
||||
"subtype": "ButtonIn",
|
||||
"id": "btn",
|
||||
"widget": "toggle",
|
||||
"page": "Кнопки",
|
||||
"descr": "",
|
||||
"int": 0,
|
||||
"pin": 16,
|
||||
"execLevel": "1",
|
||||
"pinMode": "INPUT",
|
||||
"debounceDelay": 50,
|
||||
"fixState": 1
|
||||
},
|
||||
{
|
||||
"name": "6. Кнопка управляющая пином (Реле с кнопкой)",
|
||||
"num": 6,
|
||||
"type": "Writing",
|
||||
"subtype": "ButtonOut",
|
||||
"id": "btn",
|
||||
"widget": "toggle",
|
||||
"page": "Кнопки",
|
||||
"descr": "",
|
||||
"int": 0,
|
||||
"inv": 0,
|
||||
"pin": 2
|
||||
},
|
||||
{
|
||||
"name": "7. Сервопривод",
|
||||
"num": 7,
|
||||
"type": "Writing",
|
||||
"subtype": "IoTServo",
|
||||
"id": "servo",
|
||||
"widget": "range",
|
||||
"page": "servo",
|
||||
"descr": "угол",
|
||||
"int": 1,
|
||||
"pin": 12,
|
||||
"apin": -1,
|
||||
"amap": "0, 4096, 0, 180"
|
||||
},
|
||||
{
|
||||
"name": "8. MP3 плеер",
|
||||
"num": 8,
|
||||
"type": "Reading",
|
||||
"subtype": "Mp3",
|
||||
"id": "mp3",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "",
|
||||
"int": 1,
|
||||
"pins": "14,12",
|
||||
"volume": 20
|
||||
},
|
||||
{
|
||||
"name": "9. Таймер",
|
||||
"num": 9,
|
||||
"type": "Writing",
|
||||
"subtype": "Timer",
|
||||
"id": "timer",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "",
|
||||
"int": 1,
|
||||
"countDown": 15,
|
||||
"ticker": 0,
|
||||
"repeat": 0,
|
||||
"needSave": 0
|
||||
},
|
||||
{
|
||||
"header": "Сенсоры"
|
||||
},
|
||||
{
|
||||
"name": "10. Датчик напряжения ADS1115",
|
||||
"num": 10,
|
||||
"type": "Reading",
|
||||
"subtype": "Ads1115",
|
||||
"id": "Ads3",
|
||||
"widget": "anydataVlt",
|
||||
"page": "Сенсоры",
|
||||
"descr": "ADS_3",
|
||||
"pin": "0",
|
||||
"mode": "volt",
|
||||
"gain": "3/4x",
|
||||
"plus": 0,
|
||||
"multiply": 1,
|
||||
"round": 2,
|
||||
"int": 10
|
||||
},
|
||||
{
|
||||
"name": "11. Cенсор температуры AHT20",
|
||||
"num": 11,
|
||||
"type": "Reading",
|
||||
"subtype": "Aht20t",
|
||||
"id": "Temp20",
|
||||
"widget": "anydataTmp",
|
||||
"page": "Сенсоры",
|
||||
"descr": "AHT20 Температура",
|
||||
"int": 15,
|
||||
"addr": "0x38",
|
||||
"round": 1
|
||||
},
|
||||
{
|
||||
"name": "12. Cенсор влажности AHT20",
|
||||
"num": 12,
|
||||
"type": "Reading",
|
||||
"subtype": "Aht20h",
|
||||
"id": "Hum20",
|
||||
"widget": "anydataHum",
|
||||
"page": "Сенсоры",
|
||||
"descr": "AHT20 Влажность",
|
||||
"int": 15,
|
||||
"addr": "0x38",
|
||||
"round": 1
|
||||
},
|
||||
{
|
||||
"name": "13. Аналоговый сенсор",
|
||||
"num": 13,
|
||||
"type": "Reading",
|
||||
"subtype": "AnalogAdc",
|
||||
"id": "t",
|
||||
"widget": "anydataTmp",
|
||||
"page": "Сенсоры",
|
||||
"descr": "Температура",
|
||||
"map": "1,1024,1,100",
|
||||
"plus": 0,
|
||||
"multiply": 1,
|
||||
"round": 1,
|
||||
"pin": 0,
|
||||
"int": 15,
|
||||
"avgSteps": 1
|
||||
},
|
||||
{
|
||||
"name": "14. Cенсор температуры Bme280",
|
||||
"num": 14,
|
||||
"type": "Reading",
|
||||
"subtype": "Bme280t",
|
||||
"id": "tmp3",
|
||||
"widget": "anydataTmp",
|
||||
"page": "Сенсоры",
|
||||
"descr": "Температура",
|
||||
"int": 15,
|
||||
"addr": "0x77",
|
||||
"round": 1
|
||||
},
|
||||
{
|
||||
"name": "15. Cенсор давления Bme280",
|
||||
"num": 15,
|
||||
"type": "Reading",
|
||||
"subtype": "Bme280p",
|
||||
"id": "Press3",
|
||||
"widget": "anydataMm",
|
||||
"page": "Сенсоры",
|
||||
"descr": "Давление",
|
||||
"int": 15,
|
||||
"addr": "0x77",
|
||||
"round": 1
|
||||
},
|
||||
{
|
||||
"name": "16. Cенсор влажности Bme280",
|
||||
"num": 16,
|
||||
"type": "Reading",
|
||||
"subtype": "Bme280h",
|
||||
"id": "Hum3",
|
||||
"widget": "anydataHum",
|
||||
"page": "Сенсоры",
|
||||
"descr": "Влажность",
|
||||
"int": 15,
|
||||
"addr": "0x77",
|
||||
"round": 1
|
||||
},
|
||||
{
|
||||
"name": "17. Cенсор температуры Bmp280",
|
||||
"num": 17,
|
||||
"type": "Reading",
|
||||
"subtype": "Bmp280t",
|
||||
"id": "tmp3",
|
||||
"widget": "anydataTmp",
|
||||
"page": "Сенсоры",
|
||||
"descr": "280 Температура",
|
||||
"int": 15,
|
||||
"addr": "0x77",
|
||||
"round": 1
|
||||
},
|
||||
{
|
||||
"name": "18. Cенсор давления Bmp280",
|
||||
"num": 18,
|
||||
"type": "Reading",
|
||||
"subtype": "Bmp280p",
|
||||
"id": "Press3",
|
||||
"widget": "anydataMm",
|
||||
"page": "Сенсоры",
|
||||
"descr": "280 Давление",
|
||||
"int": 15,
|
||||
"addr": "0x77",
|
||||
"round": 1
|
||||
},
|
||||
{
|
||||
"name": "19. Cенсор температуры dht11",
|
||||
"num": 19,
|
||||
"type": "Reading",
|
||||
"subtype": "Dht1122t",
|
||||
"id": "tmp3",
|
||||
"widget": "anydataTmp",
|
||||
"page": "Сенсоры",
|
||||
"descr": "Температура",
|
||||
"int": 15,
|
||||
"pin": 0,
|
||||
"senstype": "dht11"
|
||||
},
|
||||
{
|
||||
"name": "20. Cенсор влажности dht11",
|
||||
"num": 20,
|
||||
"type": "Reading",
|
||||
"subtype": "Dht1122h",
|
||||
"id": "Hum3",
|
||||
"widget": "anydataHum",
|
||||
"page": "Сенсоры",
|
||||
"descr": "Влажность",
|
||||
"int": 15,
|
||||
"pin": 0,
|
||||
"senstype": "dht11"
|
||||
},
|
||||
{
|
||||
"name": "21. Cенсор температуры ds18b20",
|
||||
"num": 21,
|
||||
"type": "Reading",
|
||||
"subtype": "Ds18b20",
|
||||
"id": "dstmp",
|
||||
"widget": "anydataTmp",
|
||||
"page": "Сенсоры",
|
||||
"descr": "DS Температура",
|
||||
"int": 15,
|
||||
"pin": 2,
|
||||
"index": 0,
|
||||
"addr": "",
|
||||
"round": 1
|
||||
},
|
||||
{
|
||||
"name": "22. Датчик тока",
|
||||
"num": 22,
|
||||
"type": "Reading",
|
||||
"subtype": "I",
|
||||
"id": "current",
|
||||
"widget": "anydataAmp",
|
||||
"page": "Сенсоры",
|
||||
"descr": "Датчик тока",
|
||||
"int": 10,
|
||||
"pin_I": 34,
|
||||
"calib_I": 111.1,
|
||||
"plus": 0,
|
||||
"multiply": 1
|
||||
},
|
||||
{
|
||||
"name": "23. Датчик напряжения",
|
||||
"num": 23,
|
||||
"type": "Reading",
|
||||
"subtype": "U",
|
||||
"id": "voltage",
|
||||
"widget": "anydataVlt",
|
||||
"page": "Сенсоры",
|
||||
"descr": "Датчик напряжения",
|
||||
"int": 10,
|
||||
"pin_U": 35,
|
||||
"calib_U": 223.1,
|
||||
"plus": 0,
|
||||
"multiply": 1
|
||||
},
|
||||
{
|
||||
"name": "24. Cенсор температуры GY21",
|
||||
"num": 24,
|
||||
"type": "Reading",
|
||||
"subtype": "GY21t",
|
||||
"id": "tmp4",
|
||||
"widget": "anydataTmp",
|
||||
"page": "Сенсоры",
|
||||
"descr": "Температура",
|
||||
"round": 1,
|
||||
"int": 15
|
||||
},
|
||||
{
|
||||
"name": "25. Cенсор влажности GY21",
|
||||
"num": 25,
|
||||
"type": "Reading",
|
||||
"subtype": "GY21h",
|
||||
"id": "Hum4",
|
||||
"widget": "anydataHum",
|
||||
"page": "Сенсоры",
|
||||
"descr": "Влажность",
|
||||
"round": 1,
|
||||
"int": 15
|
||||
},
|
||||
{
|
||||
"name": "26. Cенсор температуры HDC1080",
|
||||
"num": 26,
|
||||
"type": "Reading",
|
||||
"subtype": "Hdc1080t",
|
||||
"id": "Temp1080",
|
||||
"widget": "anydataTmp",
|
||||
"page": "Сенсоры",
|
||||
"descr": "1080 Температура",
|
||||
"int": 15,
|
||||
"addr": "0x40",
|
||||
"round": 1
|
||||
},
|
||||
{
|
||||
"name": "27. Cенсор влажности HDC1080",
|
||||
"num": 27,
|
||||
"type": "Reading",
|
||||
"subtype": "Hdc1080h",
|
||||
"id": "Hum1080",
|
||||
"widget": "anydataHum",
|
||||
"page": "Сенсоры",
|
||||
"descr": "1080 Влажность",
|
||||
"int": 15,
|
||||
"addr": "0x40",
|
||||
"round": 1
|
||||
},
|
||||
{
|
||||
"name": "28. Cенсор температуры MAX6675",
|
||||
"num": 28,
|
||||
"type": "Reading",
|
||||
"subtype": "Max6675t",
|
||||
"id": "maxtmp",
|
||||
"widget": "anydataTmp",
|
||||
"page": "Сенсоры",
|
||||
"descr": "MAX Температура",
|
||||
"int": 15,
|
||||
"DO": 12,
|
||||
"CS": 13,
|
||||
"CLK": 14
|
||||
},
|
||||
{
|
||||
"name": "29. Датчик CO2 MHZ-19 UART",
|
||||
"num": 29,
|
||||
"type": "Reading",
|
||||
"subtype": "Mhz19uart",
|
||||
"id": "co2uart",
|
||||
"widget": "anydataPpm",
|
||||
"page": "Сенсоры",
|
||||
"descr": "CO2uart",
|
||||
"plus": 0,
|
||||
"multiply": 1,
|
||||
"round": 1,
|
||||
"pin": 0,
|
||||
"rxPin": 14,
|
||||
"txPin": 16,
|
||||
"int": 15,
|
||||
"range": 5000,
|
||||
"ABC": 1
|
||||
},
|
||||
{
|
||||
"name": "30. Датчик CO2 MHZ-19 PWM",
|
||||
"num": 30,
|
||||
"type": "Reading",
|
||||
"subtype": "Mhz19pwm",
|
||||
"id": "co2pwm",
|
||||
"widget": "anydataPpm",
|
||||
"page": "Сенсоры",
|
||||
"descr": "CO2pwm",
|
||||
"plus": 0,
|
||||
"multiply": 1,
|
||||
"round": 1,
|
||||
"pin": 16,
|
||||
"int": 300
|
||||
},
|
||||
{
|
||||
"name": "31. Cенсор температуры от MHZ-19 UART",
|
||||
"num": 31,
|
||||
"type": "Reading",
|
||||
"subtype": "Mhz19temp",
|
||||
"id": "Mhz19temp",
|
||||
"widget": "anydataTmp",
|
||||
"page": "Сенсоры",
|
||||
"descr": "Температура",
|
||||
"plus": 0,
|
||||
"multiply": 1,
|
||||
"round": 1,
|
||||
"rxPin": 14,
|
||||
"txPin": 16,
|
||||
"ABC": 1,
|
||||
"int": 30
|
||||
},
|
||||
{
|
||||
"name": "32. Рабочий диапазон от MHZ-19 UART",
|
||||
"num": 32,
|
||||
"type": "Reading",
|
||||
"subtype": "Mhz19range",
|
||||
"id": "Mhz19range",
|
||||
"widget": "anydataPpm",
|
||||
"page": "Сенсоры",
|
||||
"descr": "Диапазон",
|
||||
"plus": 0,
|
||||
"multiply": 1,
|
||||
"round": 1,
|
||||
"rxPin": 14,
|
||||
"txPin": 16,
|
||||
"range": 5000,
|
||||
"ABC": 1,
|
||||
"int": 30
|
||||
},
|
||||
{
|
||||
"name": "33. Автокалибровка от MHZ-19 UART",
|
||||
"num": 33,
|
||||
"type": "Reading",
|
||||
"subtype": "Mhz19ABC",
|
||||
"id": "Mhz19ABC",
|
||||
"widget": "anydataDef",
|
||||
"page": "Сенсоры",
|
||||
"descr": "ABC",
|
||||
"rxPin": 14,
|
||||
"txPin": 16,
|
||||
"range": 5000,
|
||||
"ABC": 1,
|
||||
"int": 30
|
||||
},
|
||||
{
|
||||
"name": "34. Датчик пыли SDS011 PM25",
|
||||
"num": 34,
|
||||
"type": "Reading",
|
||||
"subtype": "Sds011_25",
|
||||
"id": "pmuart25",
|
||||
"widget": "anydataPpm",
|
||||
"page": "Сенсоры",
|
||||
"descr": "PM-2.5",
|
||||
"plus": 0,
|
||||
"multiply": 1,
|
||||
"round": 10,
|
||||
"rxPin": 13,
|
||||
"txPin": 12,
|
||||
"int": 15,
|
||||
"warmUp": 30,
|
||||
"period": 300
|
||||
},
|
||||
{
|
||||
"name": "35. Датчик пыли SDS011 PM10",
|
||||
"num": 35,
|
||||
"type": "Reading",
|
||||
"subtype": "Sds011_10",
|
||||
"id": "pmuart10",
|
||||
"widget": "anydataPpm",
|
||||
"page": "Сенсоры",
|
||||
"descr": "PM-10",
|
||||
"plus": 0,
|
||||
"multiply": 1,
|
||||
"round": 10,
|
||||
"rxPin": 13,
|
||||
"txPin": 12,
|
||||
"int": 15,
|
||||
"warmUp": 30,
|
||||
"period": 300
|
||||
},
|
||||
{
|
||||
"name": "36. Cенсор температуры Sht20",
|
||||
"num": 36,
|
||||
"type": "Reading",
|
||||
"subtype": "Sht20t",
|
||||
"id": "tmp2",
|
||||
"widget": "anydataTmp",
|
||||
"page": "Сенсоры",
|
||||
"descr": "Температура",
|
||||
"int": 15,
|
||||
"round": 1
|
||||
},
|
||||
{
|
||||
"name": "37. Cенсор влажности Sht20",
|
||||
"num": 37,
|
||||
"type": "Reading",
|
||||
"subtype": "Sht20h",
|
||||
"id": "Hum2",
|
||||
"widget": "anydataHum",
|
||||
"page": "Сенсоры",
|
||||
"descr": "Влажность",
|
||||
"int": 15,
|
||||
"round": 1
|
||||
},
|
||||
{
|
||||
"name": "38. Сонар HC-SR04",
|
||||
"num": 38,
|
||||
"type": "Reading",
|
||||
"subtype": "Sonar",
|
||||
"id": "sonar",
|
||||
"widget": "anydataTmp",
|
||||
"page": "Сенсоры",
|
||||
"descr": "Расстояние",
|
||||
"pinTrig": 5,
|
||||
"pinEcho": 4,
|
||||
"int": 5
|
||||
},
|
||||
{
|
||||
"header": "Экраны"
|
||||
},
|
||||
{
|
||||
"name": "39. LCD экран 2004",
|
||||
"num": 39,
|
||||
"type": "Reading",
|
||||
"subtype": "Lcd2004",
|
||||
"id": "Lcd",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "T",
|
||||
"int": 15,
|
||||
"addr": "0x27",
|
||||
"size": "20,4",
|
||||
"coord": "0,0",
|
||||
"id2show": "id датчика"
|
||||
},
|
||||
{
|
||||
"name": "40. LCD экран 1602",
|
||||
"num": 40,
|
||||
"type": "Reading",
|
||||
"subtype": "Lcd2004",
|
||||
"id": "Lcd",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "T",
|
||||
"int": 15,
|
||||
"addr": "0x27",
|
||||
"size": "16,2",
|
||||
"coord": "0,0",
|
||||
"id2show": "id датчика"
|
||||
"val": "0",
|
||||
"num": 12
|
||||
}
|
||||
]
|
||||
@@ -12,7 +12,11 @@ monitor_filters = esp8266_exception_decoder
|
||||
upload_speed = 115200
|
||||
monitor_speed = 115200
|
||||
board_build.filesystem = littlefs
|
||||
build_src_filter = +<*>
|
||||
build_src_filter =
|
||||
+<*.cpp>
|
||||
+<classes/*.cpp>
|
||||
+<utils/*.cpp>
|
||||
+<modules/*.cpp>
|
||||
${env:esp8266_4mb_fromitems.build_src_filter}
|
||||
|
||||
[env:esp32_4mb]
|
||||
@@ -27,12 +31,13 @@ platform = espressif32 @3.3.0
|
||||
monitor_filters = esp32_exception_decoder
|
||||
upload_speed = 115200
|
||||
monitor_speed = 115200
|
||||
build_src_filter = +<*>
|
||||
build_src_filter =
|
||||
+<*.cpp>
|
||||
+<classes/*.cpp>
|
||||
+<utils/*.cpp>
|
||||
+<modules/*.cpp>
|
||||
${env:esp32_4mb_fromitems.build_src_filter}
|
||||
|
||||
[iotm]
|
||||
exclude = 1
|
||||
|
||||
[platformio]
|
||||
default_envs = esp8266_4mb
|
||||
data_dir = data_svelte
|
||||
@@ -45,48 +50,42 @@ lib_deps_external =
|
||||
|
||||
[env:esp8266_4mb_fromitems]
|
||||
lib_deps =
|
||||
adafruit/Adafruit MCP23017 Arduino Library@^2.0.2
|
||||
dfrobot/DFRobotDFPlayerMini @ ^1.0.5
|
||||
adafruit/Adafruit ADS1X15 @ ^2.3.0
|
||||
Adafruit AHTX0
|
||||
adafruit/Adafruit BME280 Library
|
||||
adafruit/Adafruit BMP280 Library
|
||||
beegee-tokyo/DHT sensor library for ESPx
|
||||
milesburton/DallasTemperature@^3.9.1
|
||||
openenergymonitor/EmonLib@1.1.0
|
||||
https://github.com/JonasGMorsch/GY-21.git
|
||||
ClosedCube HDC1080
|
||||
adafruit/MAX6675 library
|
||||
Nova Fitness Sds dust sensors library@1.5.1
|
||||
robtillaart/SHT2x@^0.1.1
|
||||
marcoschwartz/LiquidCrystal_I2C@^1.1.4
|
||||
dfrobot/DFRobotDFPlayerMini @ ^1.0.5
|
||||
CTBot @2.1.9
|
||||
adafruit/Adafruit MCP23017 Arduino Library@^2.0.2
|
||||
adafruit/Adafruit BusIO @ ^1.13.0
|
||||
build_src_filter =
|
||||
-<modules/exec/EspCam>
|
||||
-<modules/exec/SDcard>
|
||||
-<modules/exec/Telegram>
|
||||
-<modules/sensors/IoTWiegand>
|
||||
+<modules\display\Lcd2004>
|
||||
+<modules\exec\ButtonIn>
|
||||
+<modules\exec\ButtonOut>
|
||||
+<modules\exec\IoTServo>
|
||||
+<modules\exec\Mp3>
|
||||
+<modules\exec\Telegram>
|
||||
+<modules\exec\Timer>
|
||||
+<modules\system\IarduinoRTC>
|
||||
+<modules\system\Mcp23017>
|
||||
+<modules\system\SysExt>
|
||||
+<modules\system\Variable>
|
||||
|
||||
[env:esp32_4mb_fromitems]
|
||||
lib_deps =
|
||||
adafruit/Adafruit MCP23017 Arduino Library@^2.0.2
|
||||
marcoschwartz/LiquidCrystal_I2C@^1.1.4
|
||||
https://github.com/RoboticsBrno/ServoESP32
|
||||
dfrobot/DFRobotDFPlayerMini @ ^1.0.5
|
||||
adafruit/Adafruit ADS1X15 @ ^2.3.0
|
||||
Adafruit AHTX0
|
||||
adafruit/Adafruit BME280 Library
|
||||
adafruit/Adafruit BMP280 Library
|
||||
beegee-tokyo/DHT sensor library for ESPx
|
||||
milesburton/DallasTemperature@^3.9.1
|
||||
openenergymonitor/EmonLib@1.1.0
|
||||
https://github.com/JonasGMorsch/GY-21.git
|
||||
ClosedCube HDC1080
|
||||
adafruit/MAX6675 library
|
||||
Nova Fitness Sds dust sensors library@1.5.1
|
||||
robtillaart/SHT2x@^0.1.1
|
||||
marcoschwartz/LiquidCrystal_I2C@^1.1.4
|
||||
CTBot @2.1.9
|
||||
adafruit/Adafruit MCP23017 Arduino Library@^2.0.2
|
||||
adafruit/Adafruit BusIO @ ^1.13.0
|
||||
build_src_filter =
|
||||
-<modules/exec/EspCam>
|
||||
-<modules/exec/SDcard>
|
||||
-<modules/exec/Telegram>
|
||||
-<modules/sensors/IoTWiegand>
|
||||
+<modules\display\Lcd2004>
|
||||
+<modules\exec\ButtonIn>
|
||||
+<modules\exec\ButtonOut>
|
||||
+<modules\exec\IoTServo>
|
||||
+<modules\exec\Mp3>
|
||||
+<modules\exec\Telegram>
|
||||
+<modules\exec\Timer>
|
||||
+<modules\system\IarduinoRTC>
|
||||
+<modules\system\Mcp23017>
|
||||
+<modules\system\SysExt>
|
||||
+<modules\system\Variable>
|
||||
|
||||
|
||||
@@ -1,56 +1,29 @@
|
||||
#include "ESPConfiguration.h"
|
||||
|
||||
void* getAPI_IarduinoRTC(String subtype, String params);
|
||||
void* getAPI_Mcp23017(String subtype, String params);
|
||||
void* getAPI_SysExt(String subtype, String params);
|
||||
void* getAPI_Variable(String subtype, String params);
|
||||
void* getAPI_Lcd2004(String subtype, String params);
|
||||
void* getAPI_ButtonIn(String subtype, String params);
|
||||
void* getAPI_ButtonOut(String subtype, String params);
|
||||
void* getAPI_IoTServo(String subtype, String params);
|
||||
void* getAPI_Mp3(String subtype, String params);
|
||||
void* getAPI_Telegram(String subtype, String params);
|
||||
void* getAPI_Timer(String subtype, String params);
|
||||
void* getAPI_Ads1115(String subtype, String params);
|
||||
void* getAPI_Aht20(String subtype, String params);
|
||||
void* getAPI_AnalogAdc(String subtype, String params);
|
||||
void* getAPI_Bme280(String subtype, String params);
|
||||
void* getAPI_Bmp280(String subtype, String params);
|
||||
void* getAPI_Dht1122(String subtype, String params);
|
||||
void* getAPI_Ds18b20(String subtype, String params);
|
||||
void* getAPI_Emon(String subtype, String params);
|
||||
void* getAPI_GY21(String subtype, String params);
|
||||
void* getAPI_Hdc1080(String subtype, String params);
|
||||
void* getAPI_Max6675(String subtype, String params);
|
||||
void* getAPI_Mhz19(String subtype, String params);
|
||||
void* getAPI_Sds011(String subtype, String params);
|
||||
void* getAPI_Sht20(String subtype, String params);
|
||||
void* getAPI_Sonar(String subtype, String params);
|
||||
void* getAPI_Lcd2004(String subtype, String params);
|
||||
void* getAPI_IarduinoRTC(String subtype, String params);
|
||||
void* getAPI_Mcp23017(String subtype, String params);
|
||||
void* getAPI_SysExt(String subtype, String params);
|
||||
void* getAPI_Variable(String subtype, String params);
|
||||
|
||||
void* getAPI(String subtype, String params) {
|
||||
void* tmpAPI;
|
||||
if ((tmpAPI = getAPI_IarduinoRTC(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Mcp23017(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_SysExt(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Variable(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Lcd2004(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_ButtonIn(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_ButtonOut(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_IoTServo(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Mp3(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Telegram(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Timer(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Ads1115(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Aht20(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_AnalogAdc(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Bme280(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Bmp280(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Dht1122(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Ds18b20(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Emon(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_GY21(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Hdc1080(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Max6675(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Mhz19(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Sds011(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Sht20(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Sonar(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Lcd2004(subtype, params)) != nullptr) return tmpAPI;return nullptr;
|
||||
if ((tmpAPI = getAPI_IarduinoRTC(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Mcp23017(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_SysExt(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Variable(subtype, params)) != nullptr) return tmpAPI;
|
||||
return nullptr;
|
||||
}
|
||||
62
src/modules/display/Lcd2004/modinfo.json
Normal file
62
src/modules/display/Lcd2004/modinfo.json
Normal file
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"menuSection": "Экраны",
|
||||
|
||||
"configItem": [{
|
||||
"name": "LCD экран 2004",
|
||||
"type": "Reading",
|
||||
"subtype": "Lcd2004",
|
||||
"id": "Lcd",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "T",
|
||||
|
||||
"int": 15,
|
||||
"addr": "0x27",
|
||||
"size": "20,4",
|
||||
"coord": "0,0",
|
||||
"id2show": "id датчика"
|
||||
},
|
||||
{
|
||||
"name": "LCD экран 1602",
|
||||
"type": "Reading",
|
||||
"subtype": "Lcd2004",
|
||||
"id": "Lcd",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "T",
|
||||
|
||||
"int": 15,
|
||||
"addr": "0x27",
|
||||
"size": "16,2",
|
||||
"coord": "0,0",
|
||||
"id2show": "id датчика"
|
||||
}],
|
||||
|
||||
"about": {
|
||||
"authorName": "Ilya Belyakov",
|
||||
"authorContact": "https://t.me/Biveraxe",
|
||||
"authorGit": "https://github.com/biveraxe",
|
||||
"specialThanks": "Sergey @Serghei63",
|
||||
"moduleName": "Lcd2004",
|
||||
"moduleVersion": "1.0",
|
||||
"moduleDesc": "Позволяет выводить на символьные экраны по указанным позициям значения других элементов конфигурации.",
|
||||
"propInfo": {
|
||||
"int": "Период времени в секундах обновления информации на экране по конкретному элементу.",
|
||||
"addr": "Адрес устройства на шине, обычно 0x27.",
|
||||
"size": "Размерность матрицы экрана.",
|
||||
"coord": "Координата позиции для вывода данных элемента конфигурации.",
|
||||
"id2show": "id элемента конфигурации."
|
||||
}
|
||||
},
|
||||
|
||||
"defActive": true,
|
||||
|
||||
"devices": {
|
||||
"esp32_4mb": [
|
||||
"marcoschwartz/LiquidCrystal_I2C@^1.1.4"
|
||||
],
|
||||
"esp8266_4mb": [
|
||||
"marcoschwartz/LiquidCrystal_I2C@^1.1.4"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
[
|
||||
{
|
||||
"name": "Кнопка (подключенная физически)",
|
||||
"num": 31,
|
||||
"type": "Writing",
|
||||
"subtype": "ButtonIn",
|
||||
"id": "btn",
|
||||
"widget": "toggle",
|
||||
"page": "Кнопки",
|
||||
"descr": "",
|
||||
"int": 0,
|
||||
|
||||
"pin": 16,
|
||||
"execLevel": "1",
|
||||
"pinMode": "INPUT",
|
||||
"debounceDelay": 50,
|
||||
"fixState": 1
|
||||
}
|
||||
]
|
||||
44
src/modules/exec/ButtonIn/modinfo.json
Normal file
44
src/modules/exec/ButtonIn/modinfo.json
Normal file
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"menuSection": "Модули управления",
|
||||
|
||||
"configItem": [{
|
||||
"name": "Кнопка (подключенная физически)",
|
||||
"type": "Writing",
|
||||
"subtype": "ButtonIn",
|
||||
"id": "btn",
|
||||
"widget": "toggle",
|
||||
"page": "Кнопки",
|
||||
"descr": "",
|
||||
"int": 0,
|
||||
|
||||
"pin": 16,
|
||||
"execLevel": "1",
|
||||
"pinMode": "INPUT",
|
||||
"debounceDelay": 50,
|
||||
"fixState": 1
|
||||
}],
|
||||
|
||||
"about": {
|
||||
"authorName": "Ilya Belyakov",
|
||||
"authorContact": "https://t.me/Biveraxe",
|
||||
"authorGit": "https://github.com/biveraxe",
|
||||
"specialThanks": "",
|
||||
"moduleName": "ButtonIn",
|
||||
"moduleVersion": "1.0",
|
||||
"moduleDesc": "Позволяет интерпретировать сигналы на цифровом пине как кнопку, т.е. создает в системе объект для чтения булевых значений с внешнего физического источника. Может вести себя как кнопка или как переключатель.",
|
||||
"propInfo": {
|
||||
"pin": "Укажите GPIO номер пина для чтения состояний подключенной кнопки",
|
||||
"execLevel": "Высокий 1 или низкий 0 уровень переключения состояния",
|
||||
"pinMode": "Может быть INPUT_PULLUP INPUT_PULLDOWN INPUT",
|
||||
"debounceDelay": "Время обработки дребезга",
|
||||
"fixState": "Поведение входа, срабатывание на переходе или на фиксации уровня (триггерный режим)"
|
||||
}
|
||||
},
|
||||
|
||||
"defActive": true,
|
||||
|
||||
"devices": {
|
||||
"esp32_4mb": [],
|
||||
"esp8266_4mb": []
|
||||
}
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
[
|
||||
{
|
||||
"name": "Кнопка управляющая пином (Реле с кнопкой)",
|
||||
"num": 31,
|
||||
"type": "Writing",
|
||||
"subtype": "ButtonOut",
|
||||
"id": "btn",
|
||||
"widget": "toggle",
|
||||
"page": "Кнопки",
|
||||
"descr": "",
|
||||
"int": 0,
|
||||
|
||||
"inv": 0,
|
||||
"pin": 2
|
||||
}
|
||||
]
|
||||
38
src/modules/exec/ButtonOut/modinfo.json
Normal file
38
src/modules/exec/ButtonOut/modinfo.json
Normal file
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"menuSection": "Модули управления",
|
||||
|
||||
"configItem": [{
|
||||
"name": "Кнопка управляющая пином (Реле с кнопкой)",
|
||||
"type": "Writing",
|
||||
"subtype": "ButtonOut",
|
||||
"id": "btn",
|
||||
"widget": "toggle",
|
||||
"page": "Кнопки",
|
||||
"descr": "",
|
||||
"int": 0,
|
||||
|
||||
"inv": 0,
|
||||
"pin": 2
|
||||
}],
|
||||
|
||||
"about": {
|
||||
"authorName": "Ilya Belyakov",
|
||||
"authorContact": "https://t.me/Biveraxe",
|
||||
"authorGit": "https://github.com/biveraxe",
|
||||
"specialThanks": "",
|
||||
"moduleName": "ButtonOut",
|
||||
"moduleVersion": "1.0",
|
||||
"moduleDesc": "Управляем состоянием конкретного пина по модели реле.",
|
||||
"propInfo": {
|
||||
"pin": "Укажите GPIO номер пина для управления выходом",
|
||||
"inv": "Инвертировать выходные сигналы"
|
||||
}
|
||||
},
|
||||
|
||||
"defActive": true,
|
||||
|
||||
"devices": {
|
||||
"esp32_4mb": [],
|
||||
"esp8266_4mb": []
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
[
|
||||
{
|
||||
"name": "Camera OV2640 (ESPcam)",
|
||||
"num": 30,
|
||||
"type": "Reading",
|
||||
"subtype": "EspCam",
|
||||
"id": "EspCam",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "",
|
||||
|
||||
"int": 60,
|
||||
"useLed": 0,
|
||||
"ticker": 0,
|
||||
"webTicker": 0
|
||||
}
|
||||
]
|
||||
42
src/modules/exec/EspCam/modinfo.json
Normal file
42
src/modules/exec/EspCam/modinfo.json
Normal file
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"menuSection": "Модули управления",
|
||||
|
||||
"configItem": [{
|
||||
"name": "Camera OV2640 (ESPcam)",
|
||||
"type": "Reading",
|
||||
"subtype": "EspCam",
|
||||
"id": "EspCam",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "",
|
||||
|
||||
"int": 60,
|
||||
"useLed": 0,
|
||||
"ticker": 0,
|
||||
"webTicker": 0
|
||||
}],
|
||||
|
||||
"about": {
|
||||
"authorName": "Ilya Belyakov",
|
||||
"authorContact": "https://t.me/Biveraxe",
|
||||
"authorGit": "https://github.com/biveraxe",
|
||||
"specialThanks": "",
|
||||
"moduleName": "EspCam",
|
||||
"moduleVersion": "1.0",
|
||||
"moduleDesc": "Предназначен для специальной платы esp32 со встроенной камерой. Добавляет в прошивку функцию создания фото и сохранения в оперативную память. Для сброса на флешкарту необходимо использовать парный модуль SDcard. Это экспериментальные модули и в будущем планируется пересобрать их.",
|
||||
"propInfo": {
|
||||
"int": "Пауза в секундах во время постоянной съемки.",
|
||||
"useLed": "использовать диод подсветки при съемке.",
|
||||
"ticker": "Генерировать(1) или нет(0) событие с интервалом int",
|
||||
"webTicker": "Генерировать(1) или нет(0) событие при обращении через веб-страницу с текущим фото в памяти."
|
||||
}
|
||||
},
|
||||
|
||||
"defActive": false,
|
||||
|
||||
"devices": {
|
||||
"esp32_4mb": [
|
||||
"espressif/esp32-camera @ ^2.0.0"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
[env:esp8266_4mb]
|
||||
lib_deps =
|
||||
|
||||
[env:esp32_4mb]
|
||||
lib_deps =
|
||||
espressif/esp32-camera @ ^2.0.0
|
||||
|
||||
[iotm]
|
||||
exclude = true
|
||||
@@ -1,17 +0,0 @@
|
||||
[
|
||||
{
|
||||
"name": "Сервопривод",
|
||||
"num": 30,
|
||||
"type": "Writing",
|
||||
"subtype": "IoTServo",
|
||||
"id": "servo",
|
||||
"widget": "range",
|
||||
"page": "servo",
|
||||
"descr": "угол",
|
||||
|
||||
"int": 1,
|
||||
"pin": 12,
|
||||
"apin": -1,
|
||||
"amap": "0, 4096, 0, 180"
|
||||
}
|
||||
]
|
||||
43
src/modules/exec/IoTServo/modinfo.json
Normal file
43
src/modules/exec/IoTServo/modinfo.json
Normal file
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"menuSection": "Модули управления",
|
||||
|
||||
"configItem": [{
|
||||
"name": "Сервопривод",
|
||||
"type": "Writing",
|
||||
"subtype": "IoTServo",
|
||||
"id": "servo",
|
||||
"widget": "range",
|
||||
"page": "servo",
|
||||
"descr": "угол",
|
||||
|
||||
"int": 1,
|
||||
"pin": 12,
|
||||
"apin": -1,
|
||||
"amap": "0, 4096, 0, 180"
|
||||
}],
|
||||
|
||||
"about": {
|
||||
"authorName": "Ilya Belyakov",
|
||||
"authorContact": "https://t.me/Biveraxe",
|
||||
"authorGit": "https://github.com/biveraxe",
|
||||
"specialThanks": "Oleg @Threedreality, Sergey @Serghei63",
|
||||
"moduleName": "IoTServo",
|
||||
"moduleVersion": "1.0",
|
||||
"moduleDesc": "Предназначен для управления сервоприводом по уровню аналогово сигнала.",
|
||||
"propInfo": {
|
||||
"int": "Пауза в секундах между опросами аналогового входа. Если 0, то читаем постоянно",
|
||||
"pin": "Пин, к которому подключен сервопривод",
|
||||
"apin": "Номер GPIO аналогового пина. Если -1, то функция отключена.",
|
||||
"amap": "Настройки преобразования значений аналога в нужный диапазон сервы, имеет смысл, если аналог включен."
|
||||
}
|
||||
},
|
||||
|
||||
"defActive": true,
|
||||
|
||||
"devices": {
|
||||
"esp32_4mb": [
|
||||
"https://github.com/RoboticsBrno/ServoESP32"
|
||||
],
|
||||
"esp8266_4mb": []
|
||||
}
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
[env:esp8266_4mb]
|
||||
lib_deps =
|
||||
|
||||
|
||||
[env:esp32_4mb]
|
||||
lib_deps =
|
||||
https://github.com/RoboticsBrno/ServoESP32
|
||||
@@ -1,16 +0,0 @@
|
||||
[
|
||||
{
|
||||
"name": "MP3 плеер",
|
||||
"num": 30,
|
||||
"type": "Reading",
|
||||
"subtype": "Mp3",
|
||||
"id": "mp3",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "",
|
||||
|
||||
"int": 1,
|
||||
"pins": "14,12",
|
||||
"volume": 20
|
||||
}
|
||||
]
|
||||
43
src/modules/exec/Mp3/modinfo.json
Normal file
43
src/modules/exec/Mp3/modinfo.json
Normal file
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"menuSection": "Модули управления",
|
||||
|
||||
"configItem": [{
|
||||
"name": "MP3 плеер",
|
||||
"type": "Reading",
|
||||
"subtype": "Mp3",
|
||||
"id": "mp3",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "",
|
||||
|
||||
"int": 1,
|
||||
"pins": "14,12",
|
||||
"volume": 20
|
||||
}],
|
||||
|
||||
"about": {
|
||||
"authorName": "Ilya Belyakov",
|
||||
"authorContact": "https://t.me/Biveraxe",
|
||||
"authorGit": "https://github.com/biveraxe",
|
||||
"specialThanks": "",
|
||||
"moduleName": "Mp3",
|
||||
"moduleVersion": "1.0",
|
||||
"moduleDesc": "Позволяет управлять модулем проигрывания MP3 файлов с SD-карты по serial интерфейсу (DFplayer mini).",
|
||||
"propInfo": {
|
||||
"int": "Периодичность в секундах опроса состояния плеера.",
|
||||
"pins": "Список GPIO через запятую, к которым подключен плеер.",
|
||||
"volume": "Уровень громкости при инициализации."
|
||||
}
|
||||
},
|
||||
|
||||
"defActive": true,
|
||||
|
||||
"devices": {
|
||||
"esp32_4mb": [
|
||||
"dfrobot/DFRobotDFPlayerMini @ ^1.0.5"
|
||||
],
|
||||
"esp8266_4mb": [
|
||||
"dfrobot/DFRobotDFPlayerMini @ ^1.0.5"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
[env:esp8266_4mb]
|
||||
lib_deps =
|
||||
dfrobot/DFRobotDFPlayerMini @ ^1.0.5
|
||||
|
||||
[env:esp32_4mb]
|
||||
lib_deps =
|
||||
dfrobot/DFRobotDFPlayerMini @ ^1.0.5
|
||||
|
||||
[iotm]
|
||||
exclude = false
|
||||
@@ -1,14 +0,0 @@
|
||||
[
|
||||
{
|
||||
"name": "SD карта",
|
||||
"num": 30,
|
||||
"type": "Writing",
|
||||
"subtype": "SDcard",
|
||||
"id": "sd",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "",
|
||||
|
||||
"int": 60
|
||||
}
|
||||
]
|
||||
36
src/modules/exec/SDcard/modinfo.json
Normal file
36
src/modules/exec/SDcard/modinfo.json
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"menuSection": "Модули управления",
|
||||
|
||||
"configItem": [{
|
||||
"name": "SD карта",
|
||||
"type": "Writing",
|
||||
"subtype": "SDcard",
|
||||
"id": "sd",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "",
|
||||
|
||||
"int": 1
|
||||
}],
|
||||
|
||||
"about": {
|
||||
"authorName": "Ilya Belyakov",
|
||||
"authorContact": "https://t.me/Biveraxe",
|
||||
"authorGit": "https://github.com/biveraxe",
|
||||
"specialThanks": "",
|
||||
"moduleName": "SDcard",
|
||||
"moduleVersion": "1.0",
|
||||
"moduleDesc": "Предназначен для специальной платы esp32 со встроенной камерой. Добавляет в прошивку функцию сохранения фото из оперативной памяти. Работает в паре с EspCam. Это экспериментальные модули и в будущем планируется пересобрать их.",
|
||||
"propInfo": {
|
||||
"int": "Не используется."
|
||||
}
|
||||
},
|
||||
|
||||
"defActive": false,
|
||||
|
||||
"devices": {
|
||||
"esp32_4mb": [
|
||||
"espressif/esp32-camera @ ^2.0.0"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
[env:esp8266_4mb]
|
||||
lib_deps =
|
||||
|
||||
[env:esp32_4mb]
|
||||
lib_deps =
|
||||
|
||||
|
||||
[iotm]
|
||||
exclude = true
|
||||
@@ -1,18 +0,0 @@
|
||||
[
|
||||
{
|
||||
"name": "Телеграм-Бот",
|
||||
"num": 31,
|
||||
"type": "Writing",
|
||||
"subtype": "Telegram",
|
||||
"id": "tg",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "",
|
||||
"int": 10,
|
||||
|
||||
"token": "",
|
||||
"autos": 1,
|
||||
"receiveMsg": 0,
|
||||
"chatID": ""
|
||||
}
|
||||
]
|
||||
46
src/modules/exec/Telegram/modinfo.json
Normal file
46
src/modules/exec/Telegram/modinfo.json
Normal file
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"menuSection": "Модули управления",
|
||||
|
||||
"configItem": [{
|
||||
"name": "Телеграм-Бот",
|
||||
"type": "Writing",
|
||||
"subtype": "Telegram",
|
||||
"id": "tg",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "",
|
||||
"int": 10,
|
||||
|
||||
"token": "",
|
||||
"autos": 1,
|
||||
"receiveMsg": 0,
|
||||
"chatID": ""
|
||||
}],
|
||||
|
||||
"about": {
|
||||
"authorName": "Ilya Belyakov",
|
||||
"authorContact": "https://t.me/Biveraxe",
|
||||
"authorGit": "https://github.com/biveraxe",
|
||||
"specialThanks": "",
|
||||
"moduleName": "Telegram",
|
||||
"moduleVersion": "1.0",
|
||||
"moduleDesc": "Добавляет возможность отправлять сообщения от имени бота контакту в Телеграм-чате и получать команды.",
|
||||
"propInfo": {
|
||||
"token": "Токен для авторизации бота в системе Telegram",
|
||||
"autos": "Автоматически(1) или нет(0) запоминать ChatID по входящим сообщениям. Т.е. бот будет информировать тех, кто последний прислал сообщение.",
|
||||
"receiveMsg": "Обрабатывать(1) или нет(0) входящие сообщения.",
|
||||
"chatID": "ИД диалога с контактом. Необходим для отправки сообщений именно вам."
|
||||
}
|
||||
},
|
||||
|
||||
"defActive": true,
|
||||
|
||||
"devices": {
|
||||
"esp32_4mb": [
|
||||
"CTBot @2.1.9"
|
||||
],
|
||||
"esp8266_4mb": [
|
||||
"CTBot @2.1.9"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
[env:esp8266_4mb]
|
||||
lib_deps =
|
||||
CTBot @2.1.9
|
||||
|
||||
[env:esp32_4mb]
|
||||
lib_deps =
|
||||
CTBot @2.1.9
|
||||
@@ -1,18 +0,0 @@
|
||||
[
|
||||
{
|
||||
"name": "Таймер",
|
||||
"num": 31,
|
||||
"type": "Writing",
|
||||
"subtype": "Timer",
|
||||
"id": "timer",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "",
|
||||
|
||||
"int": 1,
|
||||
"countDown": 15,
|
||||
"ticker": 0,
|
||||
"repeat": 0,
|
||||
"needSave": 0
|
||||
}
|
||||
]
|
||||
43
src/modules/exec/Timer/modinfo.json
Normal file
43
src/modules/exec/Timer/modinfo.json
Normal file
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"menuSection": "Модули управления",
|
||||
|
||||
"configItem": [{
|
||||
"name": "Таймер",
|
||||
"type": "Writing",
|
||||
"subtype": "Timer",
|
||||
"id": "timer",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "",
|
||||
|
||||
"int": 1,
|
||||
"countDown": 15,
|
||||
"ticker": 0,
|
||||
"repeat": 0,
|
||||
"needSave": 0
|
||||
}],
|
||||
|
||||
"about": {
|
||||
"authorName": "Ilya Belyakov",
|
||||
"authorContact": "https://t.me/Biveraxe",
|
||||
"authorGit": "https://github.com/biveraxe",
|
||||
"specialThanks": "",
|
||||
"moduleName": "Timer",
|
||||
"moduleVersion": "1.0",
|
||||
"moduleDesc": "Добавляет инструмент таймеров обратного отсчета для организации периодичных операций или логических конструкций. Часто используется как вспомогательный элемент для автоматизации.",
|
||||
"propInfo": {
|
||||
"int": "Задает размер в секундах одного шага(тика) таймера.",
|
||||
"countDown": "Начальное значение таймера, с которого начинается обратный отсчет.",
|
||||
"ticker": "Генерировать(1) или нет(0) события при каждом тике таймера.",
|
||||
"repeat": "Сбрасывать(1) или нет(0) таймер в начальное состояние при достижении нуля.",
|
||||
"needSave": "Требуется сохранять(1) или нет(0) состояние в энерго независимую память. Функция находится в разработке."
|
||||
}
|
||||
},
|
||||
|
||||
"defActive": true,
|
||||
|
||||
"devices": {
|
||||
"esp32_4mb": [],
|
||||
"esp8266_4mb": []
|
||||
}
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
[
|
||||
{
|
||||
"header": "Модули управления"
|
||||
}
|
||||
]
|
||||
@@ -1,6 +0,0 @@
|
||||
[
|
||||
{
|
||||
"name": "Выберите элемент",
|
||||
"num": 0
|
||||
}
|
||||
]
|
||||
@@ -1,32 +0,0 @@
|
||||
[
|
||||
{
|
||||
"name": "LCD экран 2004",
|
||||
"num": 25,
|
||||
"type": "Reading",
|
||||
"subtype": "Lcd2004",
|
||||
"id": "Lcd",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "T",
|
||||
"int": 15,
|
||||
"addr": "0x27",
|
||||
"size": "20,4",
|
||||
"coord": "0,0",
|
||||
"id2show": "id датчика"
|
||||
},
|
||||
{
|
||||
"name": "LCD экран 1602",
|
||||
"num": 26,
|
||||
"type": "Reading",
|
||||
"subtype": "Lcd2004",
|
||||
"id": "Lcd",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "T",
|
||||
"int": 15,
|
||||
"addr": "0x27",
|
||||
"size": "16,2",
|
||||
"coord": "0,0",
|
||||
"id2show": "id датчика"
|
||||
}
|
||||
]
|
||||
@@ -1,7 +0,0 @@
|
||||
[env:esp8266_4mb]
|
||||
lib_deps =
|
||||
marcoschwartz/LiquidCrystal_I2C@^1.1.4
|
||||
|
||||
[env:esp32_4mb]
|
||||
lib_deps =
|
||||
marcoschwartz/LiquidCrystal_I2C@^1.1.4
|
||||
@@ -1,5 +0,0 @@
|
||||
[
|
||||
{
|
||||
"header": "Экраны"
|
||||
}
|
||||
]
|
||||
@@ -1,12 +1,10 @@
|
||||
[env:esp8266_4mb]
|
||||
iotm_include = false
|
||||
lib_deps =
|
||||
https://github.com/jpliew/Wiegand-NG-Multi-Bit-Wiegand-Library-for-Arduino
|
||||
|
||||
[env:esp32_4mb]
|
||||
iotm_include = false
|
||||
lib_deps =
|
||||
https://github.com/jpliew/Wiegand-NG-Multi-Bit-Wiegand-Library-for-Arduino
|
||||
|
||||
[iotm]
|
||||
;exclude = false
|
||||
exclude = true
|
||||
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
[
|
||||
{
|
||||
"name": "Поддержка DS1302(1), DS1307(2), DS3231(3), RX8025(4)",
|
||||
"num": 29,
|
||||
"type": "Reading",
|
||||
"subtype": "IarduinoRTC",
|
||||
"id": "RTC",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "",
|
||||
|
||||
"int": "1",
|
||||
"chipNum": 1,
|
||||
"rst": 16,
|
||||
"clk": 5,
|
||||
"dat": 4,
|
||||
"defFormat": "d-m-Y",
|
||||
"ticker": 0
|
||||
}
|
||||
]
|
||||
47
src/modules/system/IarduinoRTC/modinfo.json
Normal file
47
src/modules/system/IarduinoRTC/modinfo.json
Normal file
@@ -0,0 +1,47 @@
|
||||
{
|
||||
"menuSection": "Расширения",
|
||||
|
||||
"configItem": [{
|
||||
"name": "Поддержка DS1302(1), DS1307(2), DS3231(3), RX8025(4)",
|
||||
"type": "Reading",
|
||||
"subtype": "IarduinoRTC",
|
||||
"id": "RTC",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "",
|
||||
|
||||
"int": "1",
|
||||
"chipNum": 1,
|
||||
"rst": 16,
|
||||
"clk": 5,
|
||||
"dat": 4,
|
||||
"defFormat": "d-m-Y",
|
||||
"ticker": 0
|
||||
}],
|
||||
|
||||
"about": {
|
||||
"authorName": "Ilya Belyakov",
|
||||
"authorContact": "https://t.me/Biveraxe",
|
||||
"authorGit": "https://github.com/biveraxe",
|
||||
"specialThanks": "Sergey @Serghei63",
|
||||
"moduleName": "IarduinoRTC",
|
||||
"moduleVersion": "1.0",
|
||||
"moduleDesc": "Позволяет использовать часы реального времени в виде внешнего физического модуля или виртуального с синхронизацией через сеть Интернет.",
|
||||
"propInfo": {
|
||||
"int": "Период времени в секундах между опросами времени с RTC",
|
||||
"chipNum": "Выбор источника: 0 - время с Интернет, 1 - модуль DS1302, 2 - модуль DS1307, 3 - модуль DS3231, 4 - модуль RX38025",
|
||||
"rst": "Номер пина для подключения вашего модуля часов. (не всегда используется).",
|
||||
"clk": "Номер пина для SDL вашего модуля часов",
|
||||
"dat": "Номер пина для SDA вашего модуля часов",
|
||||
"defFormat": "Вывод информации в формате defFormat",
|
||||
"ticker": "Генерировать(1) или нет(0) события при каждом тике модуля = int. Позволяет не применять модуль таймера, если нужно просто тактировать работу."
|
||||
}
|
||||
},
|
||||
|
||||
"defActive": true,
|
||||
|
||||
"devices": {
|
||||
"esp32_4mb": [],
|
||||
"esp8266_4mb": []
|
||||
}
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
[
|
||||
{
|
||||
"name": "Расширитель портов Mcp23017",
|
||||
"num": 29,
|
||||
"type": "Reading",
|
||||
"subtype": "Mcp23017",
|
||||
"id": "Mcp",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "",
|
||||
|
||||
"int": "0",
|
||||
"addr": "0x20",
|
||||
"index": 1
|
||||
}
|
||||
]
|
||||
45
src/modules/system/Mcp23017/modinfo.json
Normal file
45
src/modules/system/Mcp23017/modinfo.json
Normal file
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"menuSection": "Расширения",
|
||||
|
||||
"configItem": [{
|
||||
"name": "Расширитель портов Mcp23017",
|
||||
"type": "Reading",
|
||||
"subtype": "Mcp23017",
|
||||
"id": "Mcp",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "",
|
||||
|
||||
"int": "0",
|
||||
"addr": "0x20",
|
||||
"index": 1
|
||||
}],
|
||||
|
||||
"about": {
|
||||
"authorName": "Ilya Belyakov",
|
||||
"authorContact": "https://t.me/Biveraxe",
|
||||
"authorGit": "https://github.com/biveraxe",
|
||||
"specialThanks": "",
|
||||
"moduleName": "Mcp23017",
|
||||
"moduleVersion": "1.0",
|
||||
"moduleDesc": "Добавляет в систему дополнительные GPIO для элементов, которые поддерживают такую функцию.",
|
||||
"propInfo": {
|
||||
"int": "Не используется",
|
||||
"addr": "Адрес устройства на шине, обычно 0x20",
|
||||
"index": "Значения от 1 до 4, где при выборе 1 будет нумерация pin 100-115, при выборе 2 200-215 и т.д."
|
||||
}
|
||||
},
|
||||
|
||||
"defActive": true,
|
||||
|
||||
"devices": {
|
||||
"esp32_4mb": [
|
||||
"adafruit/Adafruit MCP23017 Arduino Library@^2.0.2",
|
||||
"adafruit/Adafruit BusIO @ ^1.13.0"
|
||||
],
|
||||
"esp8266_4mb": [
|
||||
"adafruit/Adafruit MCP23017 Arduino Library@^2.0.2",
|
||||
"adafruit/Adafruit BusIO @ ^1.13.0"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
[env:esp8266_4mb]
|
||||
lib_deps =
|
||||
adafruit/Adafruit MCP23017 Arduino Library@^2.0.2
|
||||
|
||||
[env:esp32_4mb]
|
||||
lib_deps =
|
||||
adafruit/Adafruit MCP23017 Arduino Library@^2.0.2
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
[
|
||||
{
|
||||
"name": "Доп. функции системы",
|
||||
"num": 27,
|
||||
"type": "Reading",
|
||||
"subtype": "SysExt",
|
||||
"id": "SysExt",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "",
|
||||
"int": 15
|
||||
}
|
||||
]
|
||||
34
src/modules/system/SysExt/modinfo.json
Normal file
34
src/modules/system/SysExt/modinfo.json
Normal file
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"menuSection": "Расширения",
|
||||
|
||||
"configItem": [{
|
||||
"name": "Доп. функции системы",
|
||||
"type": "Reading",
|
||||
"subtype": "SysExt",
|
||||
"id": "SysExt",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "",
|
||||
"int": 15
|
||||
}],
|
||||
|
||||
"about": {
|
||||
"authorName": "Ilya Belyakov",
|
||||
"authorContact": "https://t.me/Biveraxe",
|
||||
"authorGit": "https://github.com/biveraxe",
|
||||
"specialThanks": "",
|
||||
"moduleName": "SysExt",
|
||||
"moduleVersion": "1.0",
|
||||
"moduleDesc": "Добавляет в систему дополнительные функции. Например, возможность прямого управления GPIO из сценариев.",
|
||||
"propInfo": {
|
||||
"int": "Не используется"
|
||||
}
|
||||
},
|
||||
|
||||
"defActive": true,
|
||||
|
||||
"devices": {
|
||||
"esp32_4mb": [],
|
||||
"esp8266_4mb": []
|
||||
}
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
[
|
||||
{
|
||||
"name": "Переменная",
|
||||
"num": 30,
|
||||
"type": "Reading",
|
||||
"subtype": "Variable",
|
||||
"id": "var",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "",
|
||||
|
||||
"int": "0",
|
||||
"val": "0"
|
||||
}
|
||||
]
|
||||
37
src/modules/system/Variable/modinfo.json
Normal file
37
src/modules/system/Variable/modinfo.json
Normal file
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"menuSection": "Расширения",
|
||||
|
||||
"configItem": [{
|
||||
"name": "Переменная",
|
||||
"type": "Reading",
|
||||
"subtype": "Variable",
|
||||
"id": "var",
|
||||
"widget": "",
|
||||
"page": "",
|
||||
"descr": "",
|
||||
|
||||
"int": "0",
|
||||
"val": "0"
|
||||
}],
|
||||
|
||||
"about": {
|
||||
"authorName": "Ilya Belyakov",
|
||||
"authorContact": "https://t.me/Biveraxe",
|
||||
"authorGit": "https://github.com/biveraxe",
|
||||
"specialThanks": "",
|
||||
"moduleName": "Variable",
|
||||
"moduleVersion": "1.0",
|
||||
"moduleDesc": "Специальный системный модуль для использования переменных в процессе автоматизации как элементов конфигурации.",
|
||||
"propInfo": {
|
||||
"int": "Не используется",
|
||||
"val": "Не используется"
|
||||
}
|
||||
},
|
||||
|
||||
"defActive": true,
|
||||
|
||||
"devices": {
|
||||
"esp32_4mb": [],
|
||||
"esp8266_4mb": []
|
||||
}
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
[
|
||||
{
|
||||
"header": "Расширения"
|
||||
}
|
||||
]
|
||||
@@ -1,46 +0,0 @@
|
||||
#ifdef QUEUE_FROM_CHAR
|
||||
#include "classes/QueueFromChar.h"
|
||||
|
||||
QueueFromChar::QueueFromChar() {
|
||||
commandList = NULL;
|
||||
commandCount = 0;
|
||||
}
|
||||
QueueFromChar::~QueueFromChar() {}
|
||||
|
||||
//добавление команды в буфер
|
||||
void QueueFromChar::addCommand(const char* command) {
|
||||
commandList = (CharBufferStruct*)realloc(commandList, (commandCount + 1) * sizeof(CharBufferStruct));
|
||||
strncpy(commandList[commandCount].command, command, MAX_COMMAND_LENGTH);
|
||||
Serial.println("command added: " + String(command) + " " + String(commandCount));
|
||||
commandCount++;
|
||||
}
|
||||
|
||||
//распечатаем все добавленные команды
|
||||
void QueueFromChar::printCommands() {
|
||||
if (commandCount > 0 && commandList != NULL) {
|
||||
for (int i = 0; i < commandCount; i++) {
|
||||
Serial.println(commandList[i].command);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//заберем последнюю из положенных в буфер команд
|
||||
String QueueFromChar::getLastCommand() {
|
||||
String ret = "empty";
|
||||
if (commandList != NULL) {
|
||||
int cnt = commandCount - 1;
|
||||
ret = commandList[cnt].command;
|
||||
if (cnt > 0) {
|
||||
delete commandList[cnt].command;
|
||||
} else if (cnt == 0) {
|
||||
commandList = NULL;
|
||||
}
|
||||
Serial.println("command deleted: " + ret + " " + String(cnt));
|
||||
commandCount--;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
// QueueFromChar* myBuf;
|
||||
|
||||
#endif
|
||||
@@ -1,42 +0,0 @@
|
||||
#pragma once
|
||||
#include "Global.h"
|
||||
#ifdef QUEUE_FROM_CHAR
|
||||
|
||||
#define MAX_COMMAND_LENGTH 16
|
||||
#define BUFFER 128
|
||||
|
||||
class QueueFromChar;
|
||||
|
||||
class QueueFromChar {
|
||||
public:
|
||||
QueueFromChar();
|
||||
~QueueFromChar();
|
||||
|
||||
void addCommand(const char* command);
|
||||
|
||||
void printCommands();
|
||||
|
||||
String getLastCommand();
|
||||
|
||||
private:
|
||||
struct CharBufferStruct {
|
||||
char command[MAX_COMMAND_LENGTH + 1];
|
||||
};
|
||||
CharBufferStruct* commandList;
|
||||
int commandCount = 0;
|
||||
};
|
||||
|
||||
// extern QueueFromChar* myBuf;
|
||||
|
||||
//========проверка очереди=====================
|
||||
// myBuf = new QueueFromChar;
|
||||
// myBuf->addCommand("zero");
|
||||
// myBuf->addCommand("one");
|
||||
// myBuf->addCommand("two");
|
||||
// myBuf->printCommands();
|
||||
// myBuf->getLastCommand();
|
||||
// myBuf->getLastCommand();
|
||||
// myBuf->getLastCommand();
|
||||
// myBuf->printCommands();
|
||||
|
||||
#endif
|
||||
@@ -1,30 +0,0 @@
|
||||
#ifdef QUEUE_FROM_INST
|
||||
#include "classes/QueueFromInstance.h"
|
||||
|
||||
QueueFromInstance::QueueFromInstance() {}
|
||||
QueueFromInstance::~QueueFromInstance() {}
|
||||
|
||||
//добавим элемент в конец очереди
|
||||
void QueueFromInstance::push(QueueInstance instance) {
|
||||
queue1.push(instance);
|
||||
}
|
||||
|
||||
//удалим элемент из начала очереди
|
||||
void QueueFromInstance::pop() {
|
||||
if (!queue1.empty()) {
|
||||
queue1.pop();
|
||||
}
|
||||
}
|
||||
|
||||
//вернуть элемент из начала очереди и удалить его
|
||||
QueueInstance QueueFromInstance::front() {
|
||||
QueueInstance instance("");
|
||||
if (!queue1.empty()) {
|
||||
instance = queue1.front();
|
||||
queue1.pop();
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
// QueueFromInstance* myQueue;
|
||||
#endif
|
||||
@@ -1,26 +0,0 @@
|
||||
#pragma once
|
||||
#include "Global.h"
|
||||
#ifdef QUEUE_FROM_INST
|
||||
#include "classes/QueueInst.h"
|
||||
#include <queue>
|
||||
#include <iostream>
|
||||
|
||||
using namespace std;
|
||||
|
||||
class QueueFromInstance;
|
||||
|
||||
class QueueFromInstance {
|
||||
public:
|
||||
QueueFromInstance();
|
||||
~QueueFromInstance();
|
||||
|
||||
void push(QueueInstance instance);
|
||||
void pop();
|
||||
QueueInstance front();
|
||||
|
||||
private:
|
||||
queue<QueueInstance> queue1;
|
||||
};
|
||||
|
||||
// extern QueueFromInstance* myQueue;
|
||||
#endif
|
||||
@@ -1,32 +0,0 @@
|
||||
#include "classes/QueueFromStruct.h"
|
||||
#ifdef QUEUE_FROM_STR
|
||||
QueueFromStruct::QueueFromStruct() {}
|
||||
QueueFromStruct::~QueueFromStruct() {}
|
||||
|
||||
//добавим элемент в конец очереди
|
||||
void QueueFromStruct::push(QueueItems word) {
|
||||
queue1.push(word);
|
||||
}
|
||||
|
||||
//удалим элемент из начала очереди
|
||||
void QueueFromStruct::pop() {
|
||||
if (!queue1.empty()) {
|
||||
queue1.pop();
|
||||
}
|
||||
}
|
||||
|
||||
//вернуть элемент из начала очереди и удалить его
|
||||
QueueItems QueueFromStruct::front() {
|
||||
if (!queue1.empty()) {
|
||||
tmpItem = queue1.front();
|
||||
queue1.pop();
|
||||
}
|
||||
return tmpItem;
|
||||
}
|
||||
|
||||
bool QueueFromStruct::empty() {
|
||||
return queue1.empty();
|
||||
}
|
||||
|
||||
QueueFromStruct* filesQueue;
|
||||
#endif
|
||||
@@ -1,46 +0,0 @@
|
||||
#pragma once
|
||||
#include "Global.h"
|
||||
#ifdef QUEUE_FROM_STR
|
||||
#include <queue>
|
||||
//#include <iostream> долбанный стрим сука
|
||||
|
||||
using namespace std;
|
||||
|
||||
struct QueueItems {
|
||||
String myword;
|
||||
uint8_t num;
|
||||
};
|
||||
|
||||
class QueueFromStruct;
|
||||
|
||||
class QueueFromStruct {
|
||||
public:
|
||||
QueueFromStruct();
|
||||
~QueueFromStruct();
|
||||
|
||||
void push(QueueItems word);
|
||||
void pop();
|
||||
QueueItems front();
|
||||
bool empty();
|
||||
|
||||
private:
|
||||
queue<QueueItems> queue1;
|
||||
QueueItems tmpItem;
|
||||
};
|
||||
|
||||
extern QueueFromStruct* filesQueue;
|
||||
|
||||
//=======проверка очереди из структур=================
|
||||
// myQueueStruct = new QueueFromStruct;
|
||||
// QueueItems myItem;
|
||||
// myItem.myword = "word1";
|
||||
// myQueueStruct->push(myItem);
|
||||
// myItem.myword = "word2";
|
||||
// myQueueStruct->push(myItem);
|
||||
// myItem.myword = "word3";
|
||||
// myQueueStruct->push(myItem);
|
||||
// Serial.println(myQueueStruct->front().myword);
|
||||
// Serial.println(myQueueStruct->front().myword);
|
||||
// Serial.println(myQueueStruct->front().myword);
|
||||
|
||||
#endif
|
||||
@@ -1,24 +0,0 @@
|
||||
#ifdef QUEUE_FROM_INST
|
||||
#include "queue/QueueInst.h"
|
||||
|
||||
QueueInstance::QueueInstance(String text) {
|
||||
_text = text;
|
||||
}
|
||||
QueueInstance::~QueueInstance() {}
|
||||
|
||||
String QueueInstance::get() {
|
||||
return _text;
|
||||
}
|
||||
|
||||
//========проверка очереди из экземпляров======
|
||||
|
||||
// myQueue = new QueueFromInstance;
|
||||
|
||||
// myQueue->push(QueueInstance("text1"));
|
||||
// myQueue->push(QueueInstance("text2"));
|
||||
// myQueue->push(QueueInstance("text3"));
|
||||
|
||||
// Serial.println(myQueue->front().get());
|
||||
// Serial.println(myQueue->front().get());
|
||||
// Serial.println(myQueue->front().get());
|
||||
#endif
|
||||
@@ -1,21 +0,0 @@
|
||||
#pragma once
|
||||
#include "Global.h"
|
||||
#ifdef QUEUE_FROM_INST
|
||||
#include <queue>
|
||||
#include <iostream>
|
||||
|
||||
using namespace std;
|
||||
|
||||
class QueueInstance;
|
||||
|
||||
class QueueInstance {
|
||||
public:
|
||||
QueueInstance(String text);
|
||||
~QueueInstance();
|
||||
|
||||
String get();
|
||||
|
||||
private:
|
||||
String _text;
|
||||
};
|
||||
#endif
|
||||
@@ -1,44 +0,0 @@
|
||||
#include "classes/SendJson.h"
|
||||
#ifdef QUEUE_FROM_STR
|
||||
|
||||
SendJson::SendJson() {
|
||||
filesQueue = new QueueFromStruct;
|
||||
}
|
||||
SendJson::~SendJson() {}
|
||||
|
||||
void SendJson::addFileToQueue(String path, uint8_t num) {
|
||||
myItem.myword = path;
|
||||
myItem.num = num;
|
||||
filesQueue->push(myItem);
|
||||
SerialPrint(F("i"), F("WS"), "file added to Queue " + path);
|
||||
}
|
||||
|
||||
//опсылает массив json по объектно в сокеты
|
||||
void SendJson::loop() {
|
||||
if (!filesQueue->empty() && !sendingInProgress) {
|
||||
Serial.println("Queue not empty");
|
||||
myItem = filesQueue->front();
|
||||
_path = myItem.myword;
|
||||
_num = myItem.num;
|
||||
file = seekFile(_path);
|
||||
SerialPrint(F("i"), F("WS"), "seek File to WS " + _path);
|
||||
sendingInProgress = true;
|
||||
}
|
||||
if (file.available()) {
|
||||
String jsonArrayElement = _path + file.readStringUntil('}') + "}";
|
||||
sendWs(jsonArrayElement);
|
||||
} else {
|
||||
sendingInProgress = false;
|
||||
}
|
||||
}
|
||||
|
||||
void SendJson::sendWs(String& jsonArrayElement) {
|
||||
standWebSocket.sendTXT(_num, jsonArrayElement);
|
||||
}
|
||||
|
||||
void SendJson::sendMqtt(String& jsonArrayElement) {
|
||||
// mqtt send to do
|
||||
}
|
||||
|
||||
SendJson* sendJsonFiles;
|
||||
#endif
|
||||
@@ -1,31 +0,0 @@
|
||||
#pragma once
|
||||
#include "Global.h"
|
||||
#ifdef QUEUE_FROM_STR
|
||||
#include "classes/QueueFromStruct.h"
|
||||
|
||||
class SendJson;
|
||||
|
||||
class SendJson {
|
||||
public:
|
||||
SendJson();
|
||||
~SendJson();
|
||||
|
||||
void addFileToQueue(String path, uint8_t num);
|
||||
|
||||
void loop();
|
||||
|
||||
void sendWs(String& jsonArrayElement);
|
||||
|
||||
void sendMqtt(String& jsonArrayElement);
|
||||
|
||||
QueueItems myItem;
|
||||
|
||||
private:
|
||||
File file;
|
||||
String _path;
|
||||
uint8_t _num;
|
||||
bool sendingInProgress = false;
|
||||
};
|
||||
|
||||
extern SendJson* sendJsonFiles;
|
||||
#endif
|
||||
@@ -1,8 +0,0 @@
|
||||
здесь пишу статистику по остатку оперативной памяти после глобальных изменений
|
||||
|
||||
22.12.21 пустой код без wifi остаток = 50.28 kB
|
||||
22.12.21 запустил wifi остаток = 48.59 kB
|
||||
22.12.21 добавил асинхронный веб сервер = 38.36 kB
|
||||
22.12.21 добавил web sockets = 37.63 kB
|
||||
|
||||
20.01.22 стандартный сервер mqtt в работе = 41.00 kb
|
||||
Reference in New Issue
Block a user