mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-30 03:49:13 +03:00
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"name": "IoTmanager",
|
"name": "IoTmanager",
|
||||||
"chipID": "",
|
"chipID": "",
|
||||||
"ssidAP": "WiFi2",
|
"apssid": "IoTmanager",
|
||||||
"passwordAP": "",
|
"appass": "",
|
||||||
"ssid": "rise",
|
"routerssid": "rise",
|
||||||
"password": "hostel3333",
|
"routerpass": "hostel3333",
|
||||||
"timezone": 2,
|
"timezone": 2,
|
||||||
"ntp": "pool.ntp.org",
|
"ntp": "pool.ntp.org",
|
||||||
"mqttServer": "91.204.228.124",
|
"mqttServer": "91.204.228.124",
|
||||||
@@ -12,9 +12,10 @@
|
|||||||
"mqttPrefix": "/rise",
|
"mqttPrefix": "/rise",
|
||||||
"mqttUser": "test",
|
"mqttUser": "test",
|
||||||
"mqttPass": "test",
|
"mqttPass": "test",
|
||||||
"scenario": "1",
|
"scen": "1",
|
||||||
"pushingbox_id": "v7C133E426B0C69E",
|
"pushingboxid": "v7C133E426B0C69E",
|
||||||
"web_login": "admin",
|
"weblogin": "admin",
|
||||||
"web_pass": "admin",
|
"webpass": "admin",
|
||||||
"udponoff": "1"
|
"udponoff": "1",
|
||||||
|
"blink":"1"
|
||||||
}
|
}
|
||||||
6
data/configs/12-bmp280.c.txt
Normal file
6
data/configs/12-bmp280.c.txt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
bmp280T temp1 0x76 Температура#bmp280 Датчики any-data 1
|
||||||
|
bmp280P press1 0x76 Давление#bmp280 Датчики any-data 2
|
||||||
|
logging temp1 1 100 Температура Датчики 3
|
||||||
|
logging press1 1 100 Давление Датчики 4
|
||||||
|
|
||||||
|
//Чтение и логгирование датчика bmp280. Датчик подключается к шине i2c (esp8266 - gpio 5, 4)
|
||||||
9
data/configs/13-bme280.c.txt
Normal file
9
data/configs/13-bme280.c.txt
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
bme280T temp1 0x76 Температура#bmp280 Датчики any-data 1
|
||||||
|
bme280P pres1 0x76 Давление#bmp280 Датчики any-data 2
|
||||||
|
bme280H hum1 0x76 Влажность#bmp280 Датчики any-data 3
|
||||||
|
bme280A altit1 0x76 Высота#bmp280 Датчики any-data 4
|
||||||
|
logging temp1 1 100 Температура Датчики 5
|
||||||
|
logging press1 1 100 Давление Датчики 6
|
||||||
|
logging hum1 1 100 Влажность Датчики 7
|
||||||
|
|
||||||
|
//Чтение и логгирование датчика bme280. Датчик подключается к шине i2c (esp8266 - gpio 5, 4)
|
||||||
12
data/configs/16-ultrasonic.c.txt
Normal file
12
data/configs/16-ultrasonic.c.txt
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
ultrasonicPr p 14 12 Уровень#в#баке,#% Датчики fill-gauge 125 25 1
|
||||||
|
ultrasonicCm cm 14 12 Дистанция,#см Датчики any-data 2
|
||||||
|
inputDigit digit1 При#скольки#выключить? Датчики 95 3
|
||||||
|
inputDigit digit2 При#скольки#включить? Датчики 10 4
|
||||||
|
button 1 5 Насос Датчики 0 5
|
||||||
|
logging p 1 100 Вода#в#баке Датчики 6
|
||||||
|
|
||||||
|
//125 - это расстояние от датчика до дна бака в сантиметрах
|
||||||
|
//25 - это расстояние от датчика до поверхности воды когда бак полный в сантиметрах
|
||||||
|
//distancePr - эта строка выводит процент заполнения бака
|
||||||
|
//distanceCm - эта строка выводит расстояние в сантиметрах
|
||||||
|
//варианты отображения: any-data, progress-round, progress-line, fill-gauge
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
lev > digit1
|
p > digit1
|
||||||
buttonSet 1 0
|
buttonSet 1 0
|
||||||
end
|
end
|
||||||
lev < digit2
|
p < digit2
|
||||||
buttonSet 1 1
|
buttonSet 1 1
|
||||||
end
|
end
|
||||||
1
data/configs/8-pwm.s.txt
Normal file
1
data/configs/8-pwm.s.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
1
data/configs/9-dht11.s.txt
Normal file
1
data/configs/9-dht11.s.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
level lev 14 12 Вода#в#баке,#% Датчики fill-gauge 125 20 1
|
|
||||||
inputDigit digit1 При#скольки#выключить? Датчики 95 2
|
|
||||||
inputDigit digit2 При#скольки#включить? Датчики 10 3
|
|
||||||
button 1 5 Насос Датчики 0 4
|
|
||||||
button 2 line1,line2, Автоматический#режим Датчики 1 5
|
|
||||||
logging lev 1 100 Вода#в#баке Датчики 6
|
|
||||||
|
|
||||||
//125 - это расстояние от датчика до дна бака в сантиметрах
|
|
||||||
//20 - это расстояние от датчика до поверхности воды когда бак полный в сантиметрах
|
|
||||||
//вывод данных будет в процентах заполнения бака
|
|
||||||
//варианты отображения: any-data, progress-round, progress-line, fill-gauge
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
switch 1 0 10
|
|
||||||
|
|
||||||
//физическая кнопка номер 1 подключенная к пину 0, задержка от дребезга 10 мс
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
switch1 = 1
|
|
||||||
mqtt 3233662-1589489 buttonChange_1
|
|
||||||
end
|
|
||||||
@@ -1,118 +0,0 @@
|
|||||||
{
|
|
||||||
"configs": [
|
|
||||||
"/config.live.json",
|
|
||||||
"/config.setup.json",
|
|
||||||
"/config.option.json"
|
|
||||||
],
|
|
||||||
"class": "col-sm-offset-1 col-sm-10",
|
|
||||||
"content": [
|
|
||||||
{
|
|
||||||
"type": "h5",
|
|
||||||
"title": "{{name}}",
|
|
||||||
"class": "alert-warning"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h4",
|
|
||||||
"title": "Device ID: {{chipID}}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h4",
|
|
||||||
"title": "IP address: {{ip}}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h4",
|
|
||||||
"title": "Uptime: {{uptime}}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h4",
|
|
||||||
"title": "Time: {{time}}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "hr"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "dropdown",
|
|
||||||
"name": "help-url",
|
|
||||||
"class": "btn btn-warning btn-lg",
|
|
||||||
"style": "display:inline",
|
|
||||||
"title": {
|
|
||||||
"#": "Выбирите то, во что Вы хотите превратить это устройство <span class=\"caret\"></span>",
|
|
||||||
"/preset?arg=1": "1.Вкл. выкл. локального реле",
|
|
||||||
"/preset?arg=2": "2.Вкл. выкл. локального реле в определенное время",
|
|
||||||
"/preset?arg=3": "3.Вкл. выкл. локального реле на определенный период времени",
|
|
||||||
"/preset?arg=4": "4.Вкл. выкл. нескольких локальных реле кнопкой в приложении",
|
|
||||||
"/preset?arg=5": "5.Вкл. выкл. локального реле физической кнопкой и кнопкой в приложении параллельно (для выключателя света)",
|
|
||||||
"/preset?arg=6": "6.Вкл. выкл. нескольких удаленных реле кнопкой в приложении (нужно указать Device ID)",
|
|
||||||
"/preset?arg=7": "7.Вкл. выкл. нескольких удаленных реле физической кнопкой (нужно указать Device ID)",
|
|
||||||
"/preset?arg=8": "8.Широтно импульсная модуляция",
|
|
||||||
"/preset?arg=9": "9.Сенсор DHT11 и логгирование",
|
|
||||||
"/preset?arg=10": "10.Сенсор DHT22, DHT33, DHT44, AM2302, RHT03 и логгирование",
|
|
||||||
"/preset?arg=11": "11.Аналоговый сенсор и логгирование",
|
|
||||||
"/preset?arg=12": "12.Сенсор DS18B20 и логгирование",
|
|
||||||
"/preset?arg=13": "13.Термостат на DS18B20 с переключением в ручной режим и логгированием",
|
|
||||||
"/preset?arg=14": "14.Контроль уровня в баке на сенсорах: JSN-SR04T, HC-SR04, HY-SRF05 и логгирование (управление насосом)",
|
|
||||||
"/preset?arg=15": "15.Датчик движения включающий свет",
|
|
||||||
"/preset?arg=16": "16.Охранный датчик движения",
|
|
||||||
"/preset?arg=17": "17.Система управления шаговыми двигателями на основе драйвера A4988 (открытие закрытие штор)",
|
|
||||||
"/preset?arg=18": "18.Система управления сервоприводами",
|
|
||||||
"/preset?arg=19": "Настройки по умолчанию"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h2",
|
|
||||||
"title": "Конфигурация устройства"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "file",
|
|
||||||
"state": "firmware.c.txt",
|
|
||||||
"style": "width:100%;height:400px",
|
|
||||||
"title": "Сохранить",
|
|
||||||
"action": "/init?arg=2",
|
|
||||||
"class": "btn btn-block btn-success"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "link",
|
|
||||||
"title": "Подробная инструкция",
|
|
||||||
"action": "https://github.com/DmitryBorisenko33/esp32-esp8266_iot-manager_modules_firmware/wiki/Instruction",
|
|
||||||
"class": "btn btn-block btn-primary"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h2",
|
|
||||||
"title": "Сценарии"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "checkbox",
|
|
||||||
"name": "scenario",
|
|
||||||
"title": "Включить сценарии",
|
|
||||||
"action": "/init?arg=[[scenario]]",
|
|
||||||
"state": "{{scenario}}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h6",
|
|
||||||
"title": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "file",
|
|
||||||
"state": "firmware.s.txt",
|
|
||||||
"style": "width:100%;height:400px",
|
|
||||||
"title": "Сохранить",
|
|
||||||
"action": "/init?arg=4",
|
|
||||||
"class": "btn btn-block btn-success"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "hr"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "link",
|
|
||||||
"title": "Очистить логи сенсоров",
|
|
||||||
"action": "/init?arg=3",
|
|
||||||
"class": "btn btn-block btn-success"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "link",
|
|
||||||
"title": "Главная",
|
|
||||||
"action": "/",
|
|
||||||
"class": "btn btn-block btn-danger btn-sm"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
Binary file not shown.
@@ -1,92 +0,0 @@
|
|||||||
{
|
|
||||||
"configs": [
|
|
||||||
"/config.live.json",
|
|
||||||
"/config.setup.json"
|
|
||||||
],
|
|
||||||
"title": "Главная",
|
|
||||||
"class": "col-sm-offset-1 col-sm-10 col-md-offset-2 col-md-8 col-lg-offset-3 col-lg-6",
|
|
||||||
"content": [
|
|
||||||
{
|
|
||||||
"type": "h5",
|
|
||||||
"title": "{{name}}",
|
|
||||||
"class": "alert-warning"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h3",
|
|
||||||
"title": "Список других устройств в сети:"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "hr"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "csv",
|
|
||||||
"title": [
|
|
||||||
"html",
|
|
||||||
"html",
|
|
||||||
"html"
|
|
||||||
],
|
|
||||||
"state": "dev.csv",
|
|
||||||
"style": "width:100%;",
|
|
||||||
"class": "nan"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "hr"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "link",
|
|
||||||
"title": "Переформировать список устройств",
|
|
||||||
"action": "udp?arg=3",
|
|
||||||
"class": "btn btn-block btn-success"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "link",
|
|
||||||
"title": "Обновить страницу",
|
|
||||||
"action": "udp?arg=4",
|
|
||||||
"class": "btn btn-block btn-success"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "hr"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "text",
|
|
||||||
"class": "alert alert-warning",
|
|
||||||
"title": "После нажатия на кнопку 'Переформировать список устройств' ждите примерно минуту, а затем обновите страницу и список появится вновь"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h3",
|
|
||||||
"title": "Имя этого устройства:"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "input",
|
|
||||||
"title": "Имя устройства",
|
|
||||||
"name": "dev_name",
|
|
||||||
"state": "{{name}}",
|
|
||||||
"pattern": "[A-Za-z0-9]{6,12}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "button",
|
|
||||||
"title": "Сохранить",
|
|
||||||
"action": "name?arg=[[dev_name]]",
|
|
||||||
"class": "btn btn-block btn-success"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "hr"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "checkbox",
|
|
||||||
"name": "udponoff",
|
|
||||||
"title": "Включить обмен данными между устройствами",
|
|
||||||
"action": "/udp?arg=[[udponoff]]",
|
|
||||||
"state": "{{udponoff}}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "hr"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "link",
|
|
||||||
"title": "Главная",
|
|
||||||
"action": "/",
|
|
||||||
"class": "btn btn-block btn-danger"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
BIN
data/icon.jpeg
Normal file
BIN
data/icon.jpeg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
Binary file not shown.
@@ -1,7 +1,8 @@
|
|||||||
{
|
{
|
||||||
"configs": [
|
"configs": [
|
||||||
"/config.live.json",
|
"/config.live.json",
|
||||||
"/config.setup.json"
|
"/config.setup.json",
|
||||||
|
"/lang/lang.ru.json"
|
||||||
],
|
],
|
||||||
"title": "Главная",
|
"title": "Главная",
|
||||||
"class": "col-sm-offset-1 col-sm-10 col-md-offset-2 col-md-8 col-lg-offset-3 col-lg-6",
|
"class": "col-sm-offset-1 col-sm-10 col-md-offset-2 col-md-8 col-lg-offset-3 col-lg-6",
|
||||||
@@ -9,104 +10,60 @@
|
|||||||
{
|
{
|
||||||
"type": "h5",
|
"type": "h5",
|
||||||
"title": "{{name}}",
|
"title": "{{name}}",
|
||||||
"class": "alert-warning"
|
"class": "alert-default"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "h4",
|
"type": "text",
|
||||||
"title": "Device ID: {{chipID}}"
|
"class": "alert alert-light",
|
||||||
},
|
"title": "<center><img src='/icon.jpeg' alt='IoT Manager'></center>"
|
||||||
{
|
},
|
||||||
"type": "h4",
|
|
||||||
"title": "IP address: {{ip}}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h4",
|
|
||||||
"title": "Uptime: {{uptime}}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h4",
|
|
||||||
"title": "Time: {{time}}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h4",
|
|
||||||
"title": "Build version: {{firmware_version}}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h4",
|
|
||||||
"title": "SPIFFS version: 2.3.3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "hr"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"type": "link",
|
"type": "link",
|
||||||
"title": "Конфигурация устройства",
|
"title": "Конфигурация устройства",
|
||||||
"action": "/?configuration",
|
"action": "/?set.device",
|
||||||
"class": "btn btn-block btn-primary"
|
"class": "btn btn-block btn-default"
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "hr"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "link",
|
"type": "link",
|
||||||
"title": "Список других устройств в сети",
|
"title": "Список других устройств в сети",
|
||||||
"action": "/?dev",
|
"action": "/?set.udp",
|
||||||
"class": "btn btn-block btn-success"
|
"class": "btn btn-block btn-default"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "link",
|
"type": "link",
|
||||||
"title": "Конфигурация WIFI",
|
"title": "Конфигурация WIFI",
|
||||||
"action": "/?setup",
|
"action": "/?set.wifi",
|
||||||
"class": "btn btn-block btn-success"
|
"class": "btn btn-block btn-default"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "link",
|
"type": "link",
|
||||||
"title": "Конфигурация MQTT",
|
"title": "Конфигурация MQTT",
|
||||||
"action": "/?mqtt",
|
"action": "/?set.mqtt",
|
||||||
"class": "btn btn-block btn-success"
|
"class": "btn btn-block btn-default"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "link",
|
"type": "link",
|
||||||
"title": "Конфигурация push",
|
"title": "Конфигурация push",
|
||||||
"action": "/?pushingbox",
|
"action": "/?set.push",
|
||||||
"class": "btn btn-block btn-success"
|
"class": "btn btn-block btn-default"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "link",
|
"type": "link",
|
||||||
"title": "Утилиты",
|
"title": "Утилиты",
|
||||||
"action": "/?utilities",
|
"action": "/?set.utilities",
|
||||||
"class": "btn btn-block btn-success"
|
"class": "btn btn-block btn-default"
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h3",
|
|
||||||
"name": "my-block",
|
|
||||||
"style": "position:fixed;top:50%;left:50%;width:400px;margin-left:-200px;text-align:center;",
|
|
||||||
"class": "hidden"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "hr"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "button",
|
|
||||||
"title": "Обновить прошивку",
|
|
||||||
"action": "/check",
|
|
||||||
"response": "[[my-block]]",
|
|
||||||
"class": "btn btn-block btn-danger"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "hr"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "link",
|
"type": "link",
|
||||||
"title": "Скачать приложение IoT Manager для android",
|
"title": "Скачать приложение IoT Manager для android",
|
||||||
"action": "https://play.google.com/store/apps/details?id=ru.esp8266.iotmanager",
|
"action": "https://play.google.com/store/apps/details?id=ru.esp8266.iotmanager",
|
||||||
"class": "btn btn-block btn-warning"
|
"class": "btn btn-block btn-default"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "link",
|
"type": "link",
|
||||||
"title": "Скачать приложение IoT Manager для iphone",
|
"title": "Скачать приложение IoT Manager для iphone",
|
||||||
"action": "https://apps.apple.com/ru/app/iot-manager/id1155934877",
|
"action": "https://apps.apple.com/ru/app/iot-manager/id1155934877",
|
||||||
"class": "btn btn-block btn-warning"
|
"class": "btn btn-block btn-default"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
39
data/lang/lang.ru.json
Normal file
39
data/lang/lang.ru.json
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"SetDevConf": "Конфигурация устройства",
|
||||||
|
"SetDevPreset": "Выберите из списка подходящий пресет кофигурации",
|
||||||
|
|
||||||
|
"ButSave":"Сохранить",
|
||||||
|
"ButMainPage":"Главная",
|
||||||
|
|
||||||
|
|
||||||
|
"SetUDPList": "Список других устройств в сети:",
|
||||||
|
"SetUDPWarn1": "После нажатия на кнопку <b>переформировать список устройств</b> ждите примерно минуту, а затем обновите страницу и список появится вновь",
|
||||||
|
|
||||||
|
"SetUDPUpdateList":"Переформировать список устройств",
|
||||||
|
"SetUDPUpdatePage":"Обновить страницу",
|
||||||
|
"SetUDPNameOfDev":"Имя этого устройства:",
|
||||||
|
"SetUDPDateExchange":"Включить обмен данными между устройствами",
|
||||||
|
"SetUDPWarn2":"Если обмен данными включен, то устройства будут обмениваться широковещательными пакетами udp для формирования списка устройств и для осуществления посылки настроек mqtt. Данный обмен создает дополнительную нагрузку на wifi сеть.",
|
||||||
|
|
||||||
|
"SetWiFiNameOfDev":"Имя устройства:",
|
||||||
|
"SetWiFiRouterConnect":"Подключение к WiFi роутеру:",
|
||||||
|
"SetWiFiAccessPoint":"Точка доступа:",
|
||||||
|
"SetWiFiWeb":"Логин и пароль web interface:",
|
||||||
|
"SetWiFiTimeZone":"Временная зона:",
|
||||||
|
"SetWiFiNTP":"Сервер NTP:",
|
||||||
|
"SetWiFiWarn1":"Имя устройства должно состоять из английских букв и иметь длинну от 6 до 12 символов",
|
||||||
|
"SetWiFiWarn2":"После того как вы введете логин пароль от вашего wifi роутера необходимо нажать кнопку сохранить, а затем обязательно нажать кнопку <b>перезагрузить устройство</b> внизу этой страницы",
|
||||||
|
"SetWiFiWarn3":"Устройство постоянно сканирует сеть на наличие wifi. Если роутер отключен, то устройство автоматически перейдет в режим точки доступа. Когда wifi появится устройство автоматически подключится к роутеру снова, и выключит точку доступа",
|
||||||
|
"SetWiFiWarn4":"После изменения поля <b>NTP сервер</b> необходимо перезагрузить устройство",
|
||||||
|
"SetWiFiWarn5":"Светодиод статуса подключения показывает четыре состояния подключения: <br><b>1. мигает редко</b> - идет подключение к wifi <br><b>2. мигает часто</b> - идет подключение к серверу mqtt <br><b>3. горит постоянно</b> - модуль в режиме точки доступа, <br><b>4. не горит</b> - модуль подключен к wifi и к mqtt. <br>Светодиод подключен к gpio2. Если галочка стоит - то использовать этот пин нельзя",
|
||||||
|
|
||||||
|
"SetMQTTServerName":"Имя сервера:",
|
||||||
|
"SetMQTTPort":"Номер порта:",
|
||||||
|
"SetMQTTPrefix":"Префикс:",
|
||||||
|
"SetMQTTUserName":"Имя пользователя:",
|
||||||
|
"SetMQTTPassword":"Пароль:",
|
||||||
|
|
||||||
|
"SetMQTTSendSettings":"Отправить настройки MQTT с этого устройства на все остальные",
|
||||||
|
"SetMQTTWarn1":"Обратите внимание что поле префикс может состоять только из одного слова и одного разделителя: <b>/prefix</b>, вариант вида: <b>/prefix1/prefix2</b> работать не будет. После изменения поля prefix необходимо перезагрузить устройство",
|
||||||
|
"SetMQTTWarn2":"Прежде чем нажимать на кнопку <b>Отправить настройки MQTT</b> сохрание их, если Вы их меняли. Настройки получат и перезапишут все устройства в локальной сети"
|
||||||
|
}
|
||||||
111
data/mqtt.json
111
data/mqtt.json
@@ -1,111 +0,0 @@
|
|||||||
{
|
|
||||||
"configs": [
|
|
||||||
"/config.setup.json"
|
|
||||||
],
|
|
||||||
"class": "col-sm-offset-1 col-sm-10 col-md-offset-2 col-md-8 col-lg-offset-3 col-lg-6",
|
|
||||||
"content": [
|
|
||||||
{
|
|
||||||
"type": "h5",
|
|
||||||
"title": "{{name}}",
|
|
||||||
"class": "alert-warning"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "text",
|
|
||||||
"class": "alert alert-warning",
|
|
||||||
"title": "Обратите внимание что поле prefix может состоять только из одного слова и одного разделителя: <b>/prefix</b>, вариант вида: <b>/prefix1/prefix2</b> работать не будет. После изменения поля prefix необходимо перезагрузить устройство"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h4",
|
|
||||||
"title": "Server name:"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "input",
|
|
||||||
"title": "",
|
|
||||||
"name": "1",
|
|
||||||
"state": "{{mqttServer}}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h4",
|
|
||||||
"title": "Port:"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "input",
|
|
||||||
"title": "",
|
|
||||||
"name": "2",
|
|
||||||
"state": "{{mqttPort}}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h4",
|
|
||||||
"title": "Prefix:"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "input",
|
|
||||||
"title": "",
|
|
||||||
"name": "3",
|
|
||||||
"state": "{{mqttPrefix}}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h4",
|
|
||||||
"title": "User name:"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "input",
|
|
||||||
"title": "",
|
|
||||||
"name": "4",
|
|
||||||
"state": "{{mqttUser}}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h4",
|
|
||||||
"title": "Password:"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "input",
|
|
||||||
"title": "",
|
|
||||||
"name": "5",
|
|
||||||
"state": "{{mqttPass}}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h3",
|
|
||||||
"name": "my-block",
|
|
||||||
"style": "position:fixed;top:30%;left:50%;width:400px;margin-left:-200px;text-align:center;",
|
|
||||||
"class": "hidden"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "text",
|
|
||||||
"class": "alert alert-warning",
|
|
||||||
"title": "Прежде чем нажимать на кнопку <b>'Отправить настройки MQTT'</b> сохрание их, если Вы их меняли. Настройки получат и перезапишут все устройства в локальной сети"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "button",
|
|
||||||
"title": "Сохранить",
|
|
||||||
"action": "mqttSave?mqttServer=[[1]]&mqttPort=[[2]]&mqttPrefix=[[3]]&mqttUser=[[4]]&mqttPass=[[5]]",
|
|
||||||
"class": "btn btn-block btn-success"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "button",
|
|
||||||
"title": "Отправить настройки MQTT с этого устройства на все остальные",
|
|
||||||
"action": "udp?arg=2",
|
|
||||||
"class": "btn btn-block btn-success"
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
"type": "button",
|
|
||||||
"title": "Проверить соединение с MQTT",
|
|
||||||
"action": "mqttCheck",
|
|
||||||
"response": "[[my-block]]",
|
|
||||||
"class": "btn btn-block btn-success"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "link",
|
|
||||||
"title": "Перезагрузить устройство",
|
|
||||||
"action": "javascript:if(confirm(renameBlock(jsonResponse,'Перезагрузить?'))){send_request(this,'/restart?device=ok');}",
|
|
||||||
"class": "btn btn-block btn-success"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "link",
|
|
||||||
"title": "Главная",
|
|
||||||
"action": "/",
|
|
||||||
"class": "btn btn-block btn-danger btn-sm"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
{
|
|
||||||
"configs": [
|
|
||||||
"/config.setup.json"
|
|
||||||
],
|
|
||||||
"class":"col-sm-offset-1 col-sm-10 col-md-offset-2 col-md-8 col-lg-offset-3 col-lg-6",
|
|
||||||
"content": [
|
|
||||||
{
|
|
||||||
"type": "h5",
|
|
||||||
"title": "{{name}}",
|
|
||||||
"class":"alert-warning"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h4",
|
|
||||||
"title": "Device id:"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "input",
|
|
||||||
"title": "",
|
|
||||||
"name":"1",
|
|
||||||
"state": "{{pushingbox_id}}"
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
"type": "button",
|
|
||||||
"title":"Сохранить",
|
|
||||||
"action": "pushingboxDate?pushingbox_id=[[1]]",
|
|
||||||
"class": "btn btn-block btn-success",
|
|
||||||
"style": "width:100%;display:inline"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "hr"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "link",
|
|
||||||
"title": "Перезагрузить устройство",
|
|
||||||
"action": "javascript:if(confirm(renameBlock(jsonResponse,'Перезагрузить?'))){send_request(this,'/restart?device=ok');}",
|
|
||||||
"class": "btn btn-block btn-warning"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "link",
|
|
||||||
"title": "Главная",
|
|
||||||
"action": "/",
|
|
||||||
"class": "btn btn-block btn-danger btn-sm"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
143
data/set.device.json
Normal file
143
data/set.device.json
Normal file
@@ -0,0 +1,143 @@
|
|||||||
|
{
|
||||||
|
"configs": [
|
||||||
|
"/config.setup.json",
|
||||||
|
"/config.option.json",
|
||||||
|
"/config.live.json",
|
||||||
|
"/lang/lang.ru.json"
|
||||||
|
],
|
||||||
|
"class": "col-sm-offset-1 col-sm-10",
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"type": "h5",
|
||||||
|
"title": "{{name}}",
|
||||||
|
"class": "alert-default"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "link",
|
||||||
|
"title": "{{ButMainPage}}",
|
||||||
|
"action": "/",
|
||||||
|
"class": "btn btn-block btn-default"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "h4",
|
||||||
|
"title": "Device ID: {{chipID}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "h4",
|
||||||
|
"title": "IP address: {{ip}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "h4",
|
||||||
|
"title": "Time: {{time}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "h4",
|
||||||
|
"title": "Uptime: {{uptime}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "h4",
|
||||||
|
"title": "Build version: {{firmware_version}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "h4",
|
||||||
|
"title": "SPIFFS version: 2.3.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "dropdown",
|
||||||
|
"name": "help-url",
|
||||||
|
"class": "btn btn-default",
|
||||||
|
"style": "display:inline",
|
||||||
|
"title": {
|
||||||
|
"#": "{{SetDevPreset}}<span class=\"caret\"></span>",
|
||||||
|
"/set?preset=1": "1.Вкл. выкл. локального реле",
|
||||||
|
"/set?preset=2": "2.Вкл. выкл. локального реле в определенное время",
|
||||||
|
"/set?preset=3": "3.Вкл. выкл. локального реле на определенный период времени",
|
||||||
|
"/set?preset=4": "4.Вкл. выкл. нескольких локальных реле кнопкой в приложении",
|
||||||
|
"/set?preset=5": "5.Вкл. выкл. локального реле физической кнопкой и кнопкой в приложении параллельно (для выключателя света)",
|
||||||
|
"/set?preset=6": "6.Вкл. выкл. нескольких удаленных реле кнопкой в приложении (нужно указать Device ID)",
|
||||||
|
"/set?preset=7": "7.Вкл. выкл. нескольких удаленных реле физической кнопкой (нужно указать Device ID)",
|
||||||
|
"/set?preset=8": "8.Широтно импульсная модуляция",
|
||||||
|
"/set?preset=9": "9.Сенсор DHT11 (темп, влажность) и логгирование",
|
||||||
|
"/set?preset=10": "10.Сенсор DHT22, DHT33, DHT44, AM2302, RHT03 (темп, влажность) и логгирование",
|
||||||
|
"/set?preset=11": "11.Аналоговый сенсор и логгирование",
|
||||||
|
"/set?preset=12": "12.Cенсор bmp280 (темп, давление) и логгирование",
|
||||||
|
"/set?preset=13": "13.Cенсор bme280 (темп, давление, влажность, высота) и логгирование",
|
||||||
|
"/set?preset=14": "12.Сенсор DS18B20 (темп) и логгирование",
|
||||||
|
"/set?preset=15": "13.Термостат на DS18B20 с переключением в ручной режим и логгированием",
|
||||||
|
"/set?preset=16": "14.Котроль уровня в баке (датчик расстояния) на сенсорах: JSN-SR04T, HC-SR04, HY-SRF05 и логгирование",
|
||||||
|
"/set?preset=17": "15.Датчик движения включающий свет",
|
||||||
|
"/set?preset=18": "16.Охранный датчик движения",
|
||||||
|
"/set?preset=19": "17.Система управления шаговыми двигателями на основе драйвера A4988 (открытие закрытие штор)",
|
||||||
|
"/set?preset=20": "18.Система управления сервоприводами",
|
||||||
|
"/set?preset=21": "Настройки по умолчанию"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "h2",
|
||||||
|
"title": "{{SetDevConf}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "file",
|
||||||
|
"state": "firmware.c.txt",
|
||||||
|
"style": "width:100%;height:350px",
|
||||||
|
"title": "Сохранить",
|
||||||
|
"action": "/set?devinit",
|
||||||
|
"class": "btn btn-block btn-default"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "h2",
|
||||||
|
"title": "Сценарии"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "checkbox",
|
||||||
|
"name": "scen",
|
||||||
|
"title": "Включить сценарии",
|
||||||
|
"action": "/set?scen=[[scen]]",
|
||||||
|
"state": "{{scen}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "file",
|
||||||
|
"state": "firmware.s.txt",
|
||||||
|
"style": "width:100%;height:350px",
|
||||||
|
"title": "Сохранить",
|
||||||
|
"action": "/set?sceninit",
|
||||||
|
"class": "btn btn-block btn-default"
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"type": "link",
|
||||||
|
"title": "Инструкция к системе автоматизации",
|
||||||
|
"action": "https://github.com/DmitryBorisenko33/esp32-esp8266_iot-manager_modules_firmware/wiki/Instruction",
|
||||||
|
"class": "btn btn-block btn-default"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "link",
|
||||||
|
"title": "Очистить логи сенсоров",
|
||||||
|
"action": "/set?cleanlog",
|
||||||
|
"class": "btn btn-block btn-default"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "h3",
|
||||||
|
"name": "my-block",
|
||||||
|
"style": "position:fixed;top:50%;left:50%;width:400px;margin-left:-200px;text-align:center;",
|
||||||
|
"class": "hidden"
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"type": "button",
|
||||||
|
"title": "Обновить прошивку устройства",
|
||||||
|
"action": "/check",
|
||||||
|
"response": "[[my-block]]",
|
||||||
|
"class": "btn btn-block btn-default"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
133
data/set.mqtt.json
Normal file
133
data/set.mqtt.json
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
{
|
||||||
|
"configs": [
|
||||||
|
"/config.setup.json",
|
||||||
|
"/lang/lang.ru.json"
|
||||||
|
],
|
||||||
|
"class": "col-sm-offset-1 col-sm-10 col-md-offset-2 col-md-8 col-lg-offset-3 col-lg-6",
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"type": "h5",
|
||||||
|
"title": "{{name}}",
|
||||||
|
"class": "alert-default"
|
||||||
|
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "link",
|
||||||
|
"title": "{{ButMainPage}}",
|
||||||
|
"action": "/",
|
||||||
|
"class": "btn btn-block btn-default"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "hr"
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"type": "h4",
|
||||||
|
"title": "{{SetMQTTServerName}}",
|
||||||
|
"style": "width:60%;float:left;"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "input",
|
||||||
|
"title": "",
|
||||||
|
"name": "mqttServer-arg",
|
||||||
|
"state": "{{mqttServer}}",
|
||||||
|
"style": "width:40%;float:right"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "h4",
|
||||||
|
"title": "{{SetMQTTPort}}",
|
||||||
|
"style": "width:60%;float:left;"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "input",
|
||||||
|
"title": "",
|
||||||
|
"name": "mqttPort-arg",
|
||||||
|
"state": "{{mqttPort}}",
|
||||||
|
"style": "width:40%;float:right"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "h4",
|
||||||
|
"title": "{{SetMQTTPrefix}}",
|
||||||
|
"style": "width:60%;float:left;"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "input",
|
||||||
|
"title": "",
|
||||||
|
"name": "mqttPrefix-arg",
|
||||||
|
"state": "{{mqttPrefix}}",
|
||||||
|
"style": "width:40%;float:right"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "h4",
|
||||||
|
"title": "{{SetMQTTUserName}}",
|
||||||
|
"style": "width:60%;float:left;"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "input",
|
||||||
|
"title": "",
|
||||||
|
"name": "mqttUser-arg",
|
||||||
|
"state": "{{mqttUser}}",
|
||||||
|
"style": "width:40%;float:right"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "h4",
|
||||||
|
"title": "{{SetMQTTPassword}}",
|
||||||
|
"style": "width:60%;float:left;"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "input",
|
||||||
|
"title": "",
|
||||||
|
"name": "mqttPass-arg",
|
||||||
|
"state": "{{mqttPass}}",
|
||||||
|
"style": "width:40%;float:right"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "h3",
|
||||||
|
"name": "my-block",
|
||||||
|
"style": "position:fixed;top:30%;left:50%;width:400px;margin-left:-200px;text-align:center;",
|
||||||
|
"class": "hidden"
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"type": "button",
|
||||||
|
"title": "{{ButSave}}",
|
||||||
|
"style": "width:100%;float:left;",
|
||||||
|
"action": "set?mqttServer=[[mqttServer-arg]]&mqttPort=[[mqttPort-arg]]&mqttPrefix=[[mqttPrefix-arg]]&mqttUser=[[mqttUser-arg]]&mqttPass=[[mqttPass-arg]]",
|
||||||
|
"class": "btn btn-block btn-default"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "button",
|
||||||
|
"style": "width:100%;float:left;",
|
||||||
|
"title": "{{SetMQTTSendSettings}}",
|
||||||
|
"action": "set?mqttsend",
|
||||||
|
"class": "btn btn-block btn-default"
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"type": "button",
|
||||||
|
"style": "width:100%;float:left;",
|
||||||
|
"title": "Проверить соединение с MQTT",
|
||||||
|
"action": "set?mqttcheck",
|
||||||
|
"response": "[[my-block]]",
|
||||||
|
"class": "btn btn-block btn-default"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"style": "width:100%;float:left;",
|
||||||
|
"title": "<div style='margin-top:10px;margin-bottom:10px;'><font color='black'><p style='border: 1px solid #DCDCDC; border-radius: 3px; background-color: #F5F5F5; padding: 10px;'>{{SetMQTTWarn1}}</p></font></div>"
|
||||||
|
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"style": "width:100%;float:left;",
|
||||||
|
"title": "<div style='margin-top:10px;margin-bottom:10px;'><font color='black'><p style='border: 1px solid #DCDCDC; border-radius: 3px; background-color: #F5F5F5; padding: 10px;'>{{SetMQTTWarn2}}</p></font></div>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "link",
|
||||||
|
"style": "width:100%;float:left;",
|
||||||
|
"title": "Перезагрузить устройство",
|
||||||
|
"action": "javascript:if(confirm(renameBlock(jsonResponse,'Перезагрузить?'))){send_request(this,'/restart?device=ok');}",
|
||||||
|
"class": "btn btn-block btn-danger"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
51
data/set.push.json
Normal file
51
data/set.push.json
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
{
|
||||||
|
"configs": [
|
||||||
|
"/config.setup.json",
|
||||||
|
"/lang/lang.ru.json"
|
||||||
|
],
|
||||||
|
"class": "col-sm-offset-1 col-sm-10 col-md-offset-2 col-md-8 col-lg-offset-3 col-lg-6",
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"type": "h5",
|
||||||
|
"title": "{{name}}",
|
||||||
|
"class": "alert-default"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "link",
|
||||||
|
"title": "{{ButMainPage}}",
|
||||||
|
"action": "/",
|
||||||
|
"class": "btn btn-block btn-default"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "h4",
|
||||||
|
"style": "width:60%;float:left;",
|
||||||
|
"title": "Device id:"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "input",
|
||||||
|
"title": "",
|
||||||
|
"name": "push-arg",
|
||||||
|
"style": "width:40%;float:right",
|
||||||
|
"state": "{{pushingboxid}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "button",
|
||||||
|
"title": "{{ButSave}}",
|
||||||
|
"action": "set?pushingboxid=[[push-arg]]",
|
||||||
|
"class": "btn btn-block btn-default",
|
||||||
|
"style": "width:100%;display:inline"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "link",
|
||||||
|
"title": "Перезагрузить устройство",
|
||||||
|
"action": "javascript:if(confirm(renameBlock(jsonResponse,'Перезагрузить?'))){send_request(this,'/restart?device=ok');}",
|
||||||
|
"class": "btn btn-block btn-danger"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
96
data/set.udp.json
Normal file
96
data/set.udp.json
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
{
|
||||||
|
"configs": [
|
||||||
|
"/config.setup.json",
|
||||||
|
"/lang/lang.ru.json"
|
||||||
|
],
|
||||||
|
"title": "Главная",
|
||||||
|
"class": "col-sm-offset-1 col-sm-10 col-md-offset-2 col-md-8 col-lg-offset-3 col-lg-6",
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"type": "h5",
|
||||||
|
"title": "{{name}}",
|
||||||
|
"class": "alert-default"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "link",
|
||||||
|
"title": "{{ButMainPage}}",
|
||||||
|
"action": "/",
|
||||||
|
"class": "btn btn-block btn-default"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "h3",
|
||||||
|
"title": "{{SetUDPList}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "csv",
|
||||||
|
"title": [
|
||||||
|
"html",
|
||||||
|
"html",
|
||||||
|
"html"
|
||||||
|
],
|
||||||
|
"state": "dev.csv",
|
||||||
|
"style": "width:100%;",
|
||||||
|
"class": "nan"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "link",
|
||||||
|
"title": "{{SetUDPUpdateList}}",
|
||||||
|
"action": "/set?updatelist",
|
||||||
|
"class": "btn btn-block btn-default"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "link",
|
||||||
|
"title": "{{SetUDPUpdatePage}}",
|
||||||
|
"action": "/set?updatepage",
|
||||||
|
"class": "btn btn-block btn-default"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"title": "<div style='margin-top:10px;margin-bottom:10px;'><font color='black'><p style='border: 1px solid #DCDCDC; border-radius: 3px; background-color: #F5F5F5; padding: 10px;'>{{SetUDPWarn1}}</p></font></div>",
|
||||||
|
"style": "width:100%;float:left;"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "h3",
|
||||||
|
"title": "{{SetUDPNameOfDev}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "input",
|
||||||
|
"title": "{{SetUDPNameOfDev}}",
|
||||||
|
"name": "devname-arg",
|
||||||
|
"state": "{{name}}",
|
||||||
|
"pattern": "[A-Za-z0-9]{6,12}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "button",
|
||||||
|
"title": "{{ButSave}}",
|
||||||
|
"action": "/set?devname=[[devname-arg]]",
|
||||||
|
"class": "btn btn-block btn-default"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "checkbox",
|
||||||
|
"name": "udponoff",
|
||||||
|
"title": "{{SetUDPDateExchange}}",
|
||||||
|
"action": "/set?udponoff=[[udponoff]]",
|
||||||
|
"state": "{{udponoff}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"title": "<div style='margin-top:10px;margin-bottom:10px;'><font color='black'><p style='border: 1px solid #DCDCDC; border-radius: 3px; background-color: #F5F5F5; padding: 10px;'>{{SetUDPWarn2}}</p></font></div>"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
{
|
{
|
||||||
"configs": [
|
"configs": [
|
||||||
"/config.live.json",
|
"/config.live.json",
|
||||||
"/config.setup.json"
|
"/config.setup.json",
|
||||||
|
"/lang/lang.ru.json"
|
||||||
],
|
],
|
||||||
"title": "Главная",
|
"title": "Главная",
|
||||||
"class": "col-sm-offset-1 col-sm-10 col-md-offset-2 col-md-8 col-lg-offset-3 col-lg-6",
|
"class": "col-sm-offset-1 col-sm-10 col-md-offset-2 col-md-8 col-lg-offset-3 col-lg-6",
|
||||||
@@ -9,7 +10,13 @@
|
|||||||
{
|
{
|
||||||
"type": "h5",
|
"type": "h5",
|
||||||
"title": "{{name}}",
|
"title": "{{name}}",
|
||||||
"class": "alert-warning"
|
"class": "alert-default"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "link",
|
||||||
|
"title": "{{ButMainPage}}",
|
||||||
|
"action": "/",
|
||||||
|
"class": "btn btn-block btn-default"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "hr"
|
"type": "hr"
|
||||||
@@ -25,17 +32,8 @@
|
|||||||
{
|
{
|
||||||
"type": "link",
|
"type": "link",
|
||||||
"title": "Сканировать",
|
"title": "Сканировать",
|
||||||
"action": "/init?arg=5",
|
"action": "/set?itoc",
|
||||||
"class": "btn btn-block btn-success"
|
"class": "btn btn-block btn-default"
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "hr"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "link",
|
|
||||||
"title": "Главная",
|
|
||||||
"action": "/",
|
|
||||||
"class": "btn btn-block btn-danger"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
185
data/set.wifi.json
Normal file
185
data/set.wifi.json
Normal file
@@ -0,0 +1,185 @@
|
|||||||
|
{
|
||||||
|
"configs": [
|
||||||
|
"/config.setup.json",
|
||||||
|
"/lang/lang.ru.json"
|
||||||
|
],
|
||||||
|
"title": "Конфигурация",
|
||||||
|
"class": "col-sm-offset-1 col-sm-10 col-md-offset-2 col-md-8 col-lg-offset-3 col-lg-6",
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"type": "h5",
|
||||||
|
"title": "{{name}}",
|
||||||
|
"class": "alert-default"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "link",
|
||||||
|
"title": "{{ButMainPage}}",
|
||||||
|
"action": "/",
|
||||||
|
"class": "btn btn-block btn-default"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "h3",
|
||||||
|
"title": "{{SetWiFiNameOfDev}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "input",
|
||||||
|
"title": "{{SetWiFiNameOfDev}}",
|
||||||
|
"name": "devname-arg",
|
||||||
|
"state": "{{name}}",
|
||||||
|
"pattern": "[A-Za-z0-9]{6,12}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "button",
|
||||||
|
"title": "{{ButSave}}",
|
||||||
|
"action": "set?devname=[[devname-arg]]",
|
||||||
|
"class": "btn btn-block btn-default"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"title": "<div style='margin-top:10px;margin-bottom:10px;'><font color='black'><p style='border: 1px solid #DCDCDC; border-radius: 3px; background-color: #F5F5F5; padding: 10px;'>{{SetWiFiWarn1}}</p></font></div>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "h3",
|
||||||
|
"title": "{{SetWiFiRouterConnect}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "input",
|
||||||
|
"title": "",
|
||||||
|
"name": "routerssid-arg",
|
||||||
|
"state": "{{routerssid}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "password",
|
||||||
|
"title": "",
|
||||||
|
"name": "routerpass-arg",
|
||||||
|
"state": "{{routerpass}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "button",
|
||||||
|
"title": "{{ButSave}}",
|
||||||
|
"class": "btn btn-block btn-default",
|
||||||
|
"action": "set?routerssid=[[routerssid-arg]]&routerpass=[[routerpass-arg]]"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"title": "<div style='margin-top:10px;margin-bottom:10px;'><font color='black'><p style='border: 1px solid #DCDCDC; border-radius: 3px; background-color: #F5F5F5; padding: 10px;'>{{SetWiFiWarn2}}</p></font></div>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "checkbox",
|
||||||
|
"name": "blink",
|
||||||
|
"title": "Включить светодиод статуса подключения",
|
||||||
|
"action": "/set?blink=[[blink]]",
|
||||||
|
"state": "{{blink}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"title": "<div style='margin-top:10px;margin-bottom:10px;'><font color='black'><p style='border: 1px solid #DCDCDC; border-radius: 3px; background-color: #F5F5F5; padding: 10px;'>{{SetWiFiWarn5}}</p></font></div>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "h3",
|
||||||
|
"title": "{{SetWiFiAccessPoint}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "input",
|
||||||
|
"title": "",
|
||||||
|
"name": "apssid-arg",
|
||||||
|
"state": "{{apssid}}",
|
||||||
|
"pattern": ".{1,20}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "password",
|
||||||
|
"title": "",
|
||||||
|
"name": "appass-arg",
|
||||||
|
"state": "{{appass}}",
|
||||||
|
"pattern": ".{8,20}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "button",
|
||||||
|
"title": "{{ButSave}}",
|
||||||
|
"action": "set?apssid=[[apssid-arg]]&appass=[[appass-arg]]",
|
||||||
|
"class": "btn btn-block btn-default"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"title": "<div style='margin-top:10px;margin-bottom:10px;'><font color='black'><p style='border: 1px solid #DCDCDC; border-radius: 3px; background-color: #F5F5F5; padding: 10px;'>{{SetWiFiWarn3}}</p></font></div>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "h3",
|
||||||
|
"title": "{{SetWiFiWeb}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "input",
|
||||||
|
"title": "Логин",
|
||||||
|
"name": "weblogin-arg",
|
||||||
|
"state": "{{weblogin}}",
|
||||||
|
"pattern": ".{1,20}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "password",
|
||||||
|
"title": "Пароль",
|
||||||
|
"name": "webpass-arg",
|
||||||
|
"state": "{{webpass}}",
|
||||||
|
"pattern": ".{1,20}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "button",
|
||||||
|
"title": "{{ButSave}}",
|
||||||
|
"action": "set?weblogin=[[weblogin-arg]]&webpass=[[webpass-arg]]",
|
||||||
|
"class": "btn btn-block btn-default"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "h3",
|
||||||
|
"title": "{{SetWiFiTimeZone}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "input",
|
||||||
|
"title": "",
|
||||||
|
"name": "timezone-arg",
|
||||||
|
"state": "{{timezone}}",
|
||||||
|
"pattern": ".{1,20}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "input",
|
||||||
|
"title": "",
|
||||||
|
"name": "ntp-arg",
|
||||||
|
"state": "{{ntp}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "button",
|
||||||
|
"title": "{{ButSave}}",
|
||||||
|
"action": "set?timezone=[[timezone-arg]]&ntp=[[ntp-arg]]",
|
||||||
|
"class": "btn btn-block btn-default"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"title": "<div style='margin-top:10px;margin-bottom:10px;'><font color='black'><p style='border: 1px solid #DCDCDC; border-radius: 3px; background-color: #F5F5F5; padding: 10px;'>{{SetWiFiWarn4}}</p></font></div>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "link",
|
||||||
|
"title": "Перезагрузить устройство",
|
||||||
|
"action": "javascript:if(confirm(renameBlock(jsonResponse,'Перезагрузить?'))){send_request(this,'/set?device=ok');}",
|
||||||
|
"class": "btn btn-block btn-danger"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
162
data/setup.json
162
data/setup.json
@@ -1,162 +0,0 @@
|
|||||||
{
|
|
||||||
"configs": [
|
|
||||||
"/config.setup.json"
|
|
||||||
],
|
|
||||||
"title": "Конфигурация",
|
|
||||||
"class": "col-sm-offset-1 col-sm-10 col-md-offset-2 col-md-8 col-lg-offset-3 col-lg-6",
|
|
||||||
"content": [
|
|
||||||
{
|
|
||||||
"type": "h5",
|
|
||||||
"title": "{{name}}",
|
|
||||||
"class": "alert-warning"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "link",
|
|
||||||
"title": "Главная",
|
|
||||||
"action": "/",
|
|
||||||
"class": "btn btn-block btn-danger"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "hr"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h2",
|
|
||||||
"title": "Имя устройства"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "input",
|
|
||||||
"title": "Имя устройства",
|
|
||||||
"name": "dev_name",
|
|
||||||
"state": "{{name}}",
|
|
||||||
"pattern": "[A-Za-z0-9]{6,12}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "button",
|
|
||||||
"title": "Сохранить",
|
|
||||||
"action": "name?arg=[[dev_name]]",
|
|
||||||
"class": "btn btn-block btn-success"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "hr"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h2",
|
|
||||||
"title": "Подключение к Wi-Fi роутеру"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "input",
|
|
||||||
"title": "Сеть",
|
|
||||||
"name": "ssid",
|
|
||||||
"state": "{{ssid}}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "password",
|
|
||||||
"title": "Введите пароль",
|
|
||||||
"name": "ssidPass",
|
|
||||||
"state": "{{password}}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "button",
|
|
||||||
"title": "Сохранить",
|
|
||||||
"class": "btn btn-block btn-success",
|
|
||||||
"action": "ssid?ssid=[[ssid]]&password=[[ssidPass]]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "hr"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h2",
|
|
||||||
"title": "Точка доступа"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "input",
|
|
||||||
"title": "Имя WI-FI сети",
|
|
||||||
"name": "ssidap",
|
|
||||||
"state": "{{ssidAP}}",
|
|
||||||
"pattern": ".{1,20}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "password",
|
|
||||||
"title": "Пароль",
|
|
||||||
"name": "ssidApPass",
|
|
||||||
"state": "{{passwordAP}}",
|
|
||||||
"pattern": ".{8,20}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "button",
|
|
||||||
"title": "Сохранить",
|
|
||||||
"action": "ssidap?ssidAP=[[ssidap]]&passwordAP=[[ssidApPass]]",
|
|
||||||
"class": "btn btn-block btn-success"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "hr"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h2",
|
|
||||||
"title": "Логин и пароль web interface"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "input",
|
|
||||||
"title": "Логин",
|
|
||||||
"name": "web-login",
|
|
||||||
"state": "{{web_login}}",
|
|
||||||
"pattern": ".{1,20}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "password",
|
|
||||||
"title": "Пароль",
|
|
||||||
"name": "web-pass",
|
|
||||||
"state": "{{web_pass}}",
|
|
||||||
"pattern": ".{1,20}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "button",
|
|
||||||
"title": "Сохранить",
|
|
||||||
"action": "web?web_login=[[web-login]]&web_pass=[[web-pass]]",
|
|
||||||
"class": "btn btn-block btn-success"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "hr"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "h2",
|
|
||||||
"title": "Временная зона"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "input",
|
|
||||||
"title": "Временная зона",
|
|
||||||
"name": "1",
|
|
||||||
"state": "{{timezone}}",
|
|
||||||
"pattern": ".{1,20}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "input",
|
|
||||||
"title": "Название ntp сервера",
|
|
||||||
"name": "2",
|
|
||||||
"state": "{{ntp}}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "button",
|
|
||||||
"title": "Сохранить",
|
|
||||||
"action": "time?timezone=[[1]]&ntp=[[2]]",
|
|
||||||
"class": "btn btn-block btn-success"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "hr"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "text",
|
|
||||||
"class": "alert alert-warning",
|
|
||||||
"title": "После изменения поля <b>'NTP сервер'</b> необходимо перезагрузить устройство"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "hr"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "link",
|
|
||||||
"title": "Перезагрузить устройство",
|
|
||||||
"action": "javascript:if(confirm(renameBlock(jsonResponse,'Перезагрузить?'))){send_request(this,'/restart?device=ok');}",
|
|
||||||
"class": "btn btn-block btn-warning"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "Arduino.h"
|
|
||||||
|
|
||||||
extern void CMD_init();
|
|
||||||
extern void button();
|
|
||||||
extern void buttonSet();
|
|
||||||
extern void buttonChange();
|
|
||||||
extern void pinSet();
|
|
||||||
extern void pinChange();
|
|
||||||
extern void handle_time_init();
|
|
||||||
extern void pwm();
|
|
||||||
extern void switch_();
|
|
||||||
extern void pwmSet();
|
|
||||||
extern void stepper();
|
|
||||||
extern void stepperSet();
|
|
||||||
extern void servo_();
|
|
||||||
extern void servoSet();
|
|
||||||
extern void serialBegin();
|
|
||||||
extern void serialWrite();
|
|
||||||
extern void logging();
|
|
||||||
extern void inputDigit();
|
|
||||||
extern void digitSet();
|
|
||||||
extern void inputTime();
|
|
||||||
extern void button();
|
|
||||||
extern void timeSet();
|
|
||||||
extern void text();
|
|
||||||
extern void textSet();
|
|
||||||
extern void mqttOrderSend();
|
|
||||||
extern void httpOrderSend();
|
|
||||||
extern void firmware();
|
|
||||||
extern void update_firmware();
|
|
||||||
extern void Scenario_init();
|
|
||||||
extern void txtExecution(String file);
|
|
||||||
extern void stringExecution(String str);
|
|
||||||
46
include/Consts.h
Normal file
46
include/Consts.h
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
#pragma once
|
||||||
|
//Здесь хранятся все настройки прошивки
|
||||||
|
|
||||||
|
#define firmware_version "2.3.4"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Firmware settings
|
||||||
|
*/
|
||||||
|
#define mb_4_of_memory 1
|
||||||
|
#define wifi_mqtt_reconnecting 20000
|
||||||
|
#define blink_pin 2
|
||||||
|
#define tank_level_times_to_send 10 //после скольки выстрелов делать отправку данных
|
||||||
|
#define statistics_update 1000 * 60 * 60 * 2
|
||||||
|
|
||||||
|
//#define OTA_enable
|
||||||
|
//#define MDNS_enable
|
||||||
|
//#define WS_enable
|
||||||
|
//#define layout_in_ram
|
||||||
|
#define UDP_enable
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Sensor
|
||||||
|
*/
|
||||||
|
#define level_enable
|
||||||
|
#define analog_enable
|
||||||
|
#define dallas_enable
|
||||||
|
#define dht_enable
|
||||||
|
#define bmp_enable
|
||||||
|
#define bme_enable
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Logging
|
||||||
|
*/
|
||||||
|
#define logging_enable
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Gears
|
||||||
|
*/
|
||||||
|
#define stepper_enable
|
||||||
|
#define servo_enable
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Other
|
||||||
|
*/
|
||||||
|
#define serial_enable
|
||||||
|
#define push_enable
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <Arduino.h>
|
|
||||||
#include <SPIFFS.h>
|
|
||||||
|
|
||||||
extern void File_system_init();
|
|
||||||
388
include/Global.h
Normal file
388
include/Global.h
Normal file
@@ -0,0 +1,388 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
//=========ПОДКЛЮЧЕНИЕ ОБЩИХ БИБЛИОТЕК===============
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include <ArduinoJson.h>
|
||||||
|
#include <Bounce2.h>
|
||||||
|
#include <ESPAsyncWebServer.h>
|
||||||
|
extern AsyncWebServer server;
|
||||||
|
#include <Adafruit_BME280.h>
|
||||||
|
#include <Adafruit_BMP280.h>
|
||||||
|
#include <DHTesp.h>
|
||||||
|
#include <DallasTemperature.h>
|
||||||
|
#include <FS.h>
|
||||||
|
#include <OneWire.h>
|
||||||
|
#include <PubSubClient.h>
|
||||||
|
#include <SPIFFSEditor.h>
|
||||||
|
#include <StringCommand.h>
|
||||||
|
#include <TickerScheduler.h>
|
||||||
|
#include <UpTime.h>
|
||||||
|
#include <Wire.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
#include "Consts.h"
|
||||||
|
#include "GyverFilters.h"
|
||||||
|
//==============ESP8266 БИБЛИОТЕКИ===============
|
||||||
|
#ifdef ESP8266
|
||||||
|
#include <ESP8266HTTPClient.h>
|
||||||
|
#include <ESP8266HTTPUpdateServer.h>
|
||||||
|
#include <ESP8266WiFi.h>
|
||||||
|
#include <ESP8266httpUpdate.h>
|
||||||
|
ESP8266HTTPUpdateServer httpUpdater;
|
||||||
|
#include <WiFiUdp.h>
|
||||||
|
WiFiUDP Udp;
|
||||||
|
#include <Servo.h>
|
||||||
|
#ifdef MDNS_enable
|
||||||
|
#include <ESP8266mDNS.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
//==============ESP32 БИБЛИОТЕКИ===============
|
||||||
|
#ifdef ESP32
|
||||||
|
#include <AsyncTCP.h>
|
||||||
|
#include <AsyncUDP.h>
|
||||||
|
#include <ESP32Servo.h>
|
||||||
|
#include <HTTPClient.h>
|
||||||
|
#include <HTTPUpdate.h>
|
||||||
|
#include <SPIFFS.h>
|
||||||
|
#include <WiFi.h>
|
||||||
|
#include <analogWrite.h>
|
||||||
|
extern AsyncUDP udp;
|
||||||
|
#ifdef MDNS_enable
|
||||||
|
#include <ESPmDNS.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef OTA_enable
|
||||||
|
#include <ArduinoOTA.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern Servo myServo1;
|
||||||
|
extern Servo myServo2;
|
||||||
|
|
||||||
|
//==============================Objects.h(без данных)==================================
|
||||||
|
|
||||||
|
#ifdef WS_enable
|
||||||
|
extern AsyncWebSocket ws;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//extern AsyncEventSource events;
|
||||||
|
|
||||||
|
extern TickerScheduler ts;
|
||||||
|
|
||||||
|
enum { ROUTER_SEARCHING,
|
||||||
|
WIFI_MQTT_CONNECTION_CHECK,
|
||||||
|
SENSORS,
|
||||||
|
STEPPER1,
|
||||||
|
STEPPER2,
|
||||||
|
LOG1,
|
||||||
|
LOG2,
|
||||||
|
LOG3,
|
||||||
|
LOG4,
|
||||||
|
LOG5,
|
||||||
|
TIMER_COUNTDOWN,
|
||||||
|
TIME,
|
||||||
|
TIME_SYNC,
|
||||||
|
STATISTICS,
|
||||||
|
UPTIME,
|
||||||
|
UDP,
|
||||||
|
UDP_DB,
|
||||||
|
TEST };
|
||||||
|
|
||||||
|
extern WiFiClient espClient;
|
||||||
|
|
||||||
|
extern PubSubClient client_mqtt;
|
||||||
|
|
||||||
|
extern StringCommand sCmd;
|
||||||
|
|
||||||
|
extern AsyncWebServer server;
|
||||||
|
|
||||||
|
//AsyncWebSocket ws;
|
||||||
|
|
||||||
|
//AsyncEventSource events;
|
||||||
|
|
||||||
|
#define NUM_BUTTONS 6
|
||||||
|
extern boolean but[NUM_BUTTONS];
|
||||||
|
extern Bounce *buttons;
|
||||||
|
|
||||||
|
extern GMedian<10, int> medianFilter;
|
||||||
|
|
||||||
|
extern OneWire *oneWire;
|
||||||
|
extern DallasTemperature sensors;
|
||||||
|
|
||||||
|
extern DHTesp dht;
|
||||||
|
|
||||||
|
extern Adafruit_BMP280 bmp;
|
||||||
|
extern Adafruit_Sensor *bmp_temp;
|
||||||
|
extern Adafruit_Sensor *bmp_pressure;
|
||||||
|
|
||||||
|
extern Adafruit_BME280 bme;
|
||||||
|
extern Adafruit_Sensor *bme_temp;
|
||||||
|
extern Adafruit_Sensor *bme_pressure;
|
||||||
|
extern Adafruit_Sensor *bme_humidity;
|
||||||
|
|
||||||
|
extern uptime_interval myUpTime;
|
||||||
|
|
||||||
|
///////////////////////////////////// Global vars ////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
extern boolean udp_busy;
|
||||||
|
extern unsigned int udp_port;
|
||||||
|
extern IPAddress udp_multicastIP;
|
||||||
|
extern String received_ip;
|
||||||
|
extern String received_udp_line;
|
||||||
|
extern int udp_period;
|
||||||
|
|
||||||
|
extern boolean just_load;
|
||||||
|
extern const char *hostName;
|
||||||
|
|
||||||
|
extern String configSetupJson; //все настройки
|
||||||
|
extern String configLiveJson; //все данные с датчиков (связан с mqtt)
|
||||||
|
extern String configOptionJson; //для трансфера
|
||||||
|
|
||||||
|
extern String chipID;
|
||||||
|
extern String prex;
|
||||||
|
extern String all_widgets;
|
||||||
|
extern String scenario;
|
||||||
|
extern String order_loop;
|
||||||
|
|
||||||
|
extern String analog_value_names_list;
|
||||||
|
extern int enter_to_analog_counter;
|
||||||
|
|
||||||
|
extern String levelPr_value_name;
|
||||||
|
extern String ultrasonicCm_value_name;
|
||||||
|
|
||||||
|
extern String dhtT_value_name;
|
||||||
|
extern String dhtH_value_name;
|
||||||
|
|
||||||
|
extern String bmp280T_value_name;
|
||||||
|
extern String bmp280P_value_name;
|
||||||
|
|
||||||
|
extern String bme280T_value_name;
|
||||||
|
extern String bme280P_value_name;
|
||||||
|
extern String bme280H_value_name;
|
||||||
|
extern String bme280A_value_name;
|
||||||
|
|
||||||
|
extern String logging_value_names_list;
|
||||||
|
extern int enter_to_logging_counter;
|
||||||
|
|
||||||
|
extern String current_time;
|
||||||
|
|
||||||
|
extern int scenario_line_status[40];
|
||||||
|
|
||||||
|
extern int wifi_lost_error;
|
||||||
|
extern int mqtt_lost_error;
|
||||||
|
|
||||||
|
extern String last_version;
|
||||||
|
|
||||||
|
extern boolean upgrade_url;
|
||||||
|
extern boolean upgrade;
|
||||||
|
extern boolean mqtt_connection;
|
||||||
|
extern boolean udp_data_parse;
|
||||||
|
extern boolean mqtt_send_settings_to_udp;
|
||||||
|
extern boolean i2c_scanning;
|
||||||
|
|
||||||
|
extern int sensors_reading_map[15];
|
||||||
|
|
||||||
|
///////////////////////////////////// Functions////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// StringUtils
|
||||||
|
extern uint8_t hexStringToUint8(String hex);
|
||||||
|
extern uint16_t hexStringToUint16(String hex);
|
||||||
|
extern String selectToMarkerLast(String str, String found);
|
||||||
|
extern String selectToMarker(String str, String found);
|
||||||
|
extern String deleteAfterDelimiter(String str, String found);
|
||||||
|
extern String deleteBeforeDelimiter(String str, String found);
|
||||||
|
extern String deleteBeforeDelimiterTo(String str, String found);
|
||||||
|
extern String selectFromMarkerToMarker(String str, String found, int number);
|
||||||
|
|
||||||
|
// JsonUtils
|
||||||
|
extern String jsonReadStr(String &json, String name);
|
||||||
|
extern int jsonReadInt(String &json, String name);
|
||||||
|
extern String jsonWriteInt(String &json, String name, int volume);
|
||||||
|
extern String jsonWriteStr(String &json, String name, String volume);
|
||||||
|
extern String jsonWriteFloat(String &json, String name, float volume);
|
||||||
|
|
||||||
|
// Cmd
|
||||||
|
extern void CMD_init();
|
||||||
|
extern void button();
|
||||||
|
extern void buttonSet();
|
||||||
|
extern void buttonChange();
|
||||||
|
extern void pinSet();
|
||||||
|
extern void pinChange();
|
||||||
|
extern void handle_time_init();
|
||||||
|
extern void pwm();
|
||||||
|
extern void switch_();
|
||||||
|
extern void pwmSet();
|
||||||
|
extern void stepper();
|
||||||
|
extern void stepperSet();
|
||||||
|
extern void servo_();
|
||||||
|
extern void servoSet();
|
||||||
|
extern void serialBegin();
|
||||||
|
extern void serialWrite();
|
||||||
|
extern void logging();
|
||||||
|
extern void inputDigit();
|
||||||
|
extern void digitSet();
|
||||||
|
extern void inputTime();
|
||||||
|
extern void button();
|
||||||
|
extern void timeSet();
|
||||||
|
extern void text();
|
||||||
|
extern void textSet();
|
||||||
|
extern void mqttOrderSend();
|
||||||
|
extern void httpOrderSend();
|
||||||
|
extern void firmwareVersion();
|
||||||
|
extern void firmwareUpdate();
|
||||||
|
extern void Scenario_init();
|
||||||
|
extern void txtExecution(String file);
|
||||||
|
extern void stringExecution(String str);
|
||||||
|
|
||||||
|
// FileSystem
|
||||||
|
extern void File_system_init();
|
||||||
|
|
||||||
|
// i2c_bu
|
||||||
|
extern void do_i2c_scanning();
|
||||||
|
extern String i2c_scan();
|
||||||
|
|
||||||
|
// Init
|
||||||
|
extern void All_init();
|
||||||
|
extern void statistics_init();
|
||||||
|
extern void Scenario_init();
|
||||||
|
extern void Device_init();
|
||||||
|
extern void prsets_init();
|
||||||
|
extern void up_time();
|
||||||
|
|
||||||
|
// Logging
|
||||||
|
extern void logging();
|
||||||
|
extern void deleteOldDate(String file, int seted_number_of_lines, String date_to_add);
|
||||||
|
extern void clean_log_date();
|
||||||
|
extern void choose_log_date_and_send();
|
||||||
|
|
||||||
|
// Main
|
||||||
|
void getMemoryLoad(String text);
|
||||||
|
extern void saveConfig();
|
||||||
|
extern String getURL(const String &urls);
|
||||||
|
|
||||||
|
extern String writeFile(String fileName, String strings);
|
||||||
|
extern String readFile(String fileName, size_t len);
|
||||||
|
extern String addFile(String fileName, String strings);
|
||||||
|
|
||||||
|
extern void servo_();
|
||||||
|
extern boolean isDigitStr(String str);
|
||||||
|
extern String jsonWriteStr(String &json, String name, String volume);
|
||||||
|
extern void led_blink(String satus);
|
||||||
|
extern int count(String str, String found);
|
||||||
|
|
||||||
|
// Mqtt
|
||||||
|
extern void MQTT_init();
|
||||||
|
extern boolean MQTT_Connecting();
|
||||||
|
extern boolean sendMQTT(String end_of_topik, String data);
|
||||||
|
extern boolean sendCHART(String topik, String data);
|
||||||
|
extern void sendSTATUS(String topik, String state);
|
||||||
|
extern void sendCONTROL(String id, String topik, String state);
|
||||||
|
extern void do_mqtt_connection();
|
||||||
|
extern void handleMQTT();
|
||||||
|
extern String selectFromMarkerToMarker(String str, String found, int number);
|
||||||
|
|
||||||
|
// WiFiUtils
|
||||||
|
extern void WIFI_init();
|
||||||
|
extern void All_init();
|
||||||
|
extern bool StartAPMode();
|
||||||
|
extern void ROUTER_Connecting();
|
||||||
|
|
||||||
|
//Scenario
|
||||||
|
extern void eventGen(String event_name, String number);
|
||||||
|
extern String add_set(String param_name);
|
||||||
|
|
||||||
|
//Sensors
|
||||||
|
// И как раз тут хорошо просто в Sensors.h это пихать - а не в один здоровенный ФАЙЛ
|
||||||
|
extern void sensors_init();
|
||||||
|
|
||||||
|
extern void levelPr();
|
||||||
|
extern void ultrasonicCm();
|
||||||
|
extern void ultrasonic_reading();
|
||||||
|
|
||||||
|
extern void analog();
|
||||||
|
extern void analog_reading1();
|
||||||
|
extern void analog_reading2();
|
||||||
|
extern void dallas_reading();
|
||||||
|
extern void dhtT_reading();
|
||||||
|
|
||||||
|
extern void dallas();
|
||||||
|
|
||||||
|
extern void bmp280T();
|
||||||
|
extern void bmp280P();
|
||||||
|
extern void bmp280T_reading();
|
||||||
|
extern void bmp280P_reading();
|
||||||
|
|
||||||
|
extern void bme280T();
|
||||||
|
extern void bme280P();
|
||||||
|
extern void bme280H();
|
||||||
|
extern void bme280A();
|
||||||
|
|
||||||
|
extern void bme280T_reading();
|
||||||
|
extern void bme280P_reading();
|
||||||
|
extern void bme280H_reading();
|
||||||
|
extern void bme280A_reading();
|
||||||
|
|
||||||
|
extern void dhtT();
|
||||||
|
extern void dhtH();
|
||||||
|
extern void dhtP();
|
||||||
|
extern void dhtC();
|
||||||
|
extern void dhtD();
|
||||||
|
extern void dhtH_reading();
|
||||||
|
extern void dhtP_reading();
|
||||||
|
extern void dhtC_reading();
|
||||||
|
extern void dhtD_reading();
|
||||||
|
|
||||||
|
//Timers
|
||||||
|
extern void Timer_countdown_init();
|
||||||
|
extern void timerStart_();
|
||||||
|
extern void addTimer(String number, String time);
|
||||||
|
extern void timerStop_();
|
||||||
|
extern void delTimer(String number);
|
||||||
|
extern int readTimer(int number);
|
||||||
|
|
||||||
|
//TimeUtils
|
||||||
|
extern void Time_Init();
|
||||||
|
extern int timeToMin(String Time);
|
||||||
|
extern String GetDataDigital();
|
||||||
|
extern String GetDate();
|
||||||
|
extern String GetTimeWOsec();
|
||||||
|
extern String GetTime();
|
||||||
|
extern String GetTimeUnix();
|
||||||
|
extern void reconfigTime();
|
||||||
|
extern void saveConfig();
|
||||||
|
extern String GetTimeUnix();
|
||||||
|
extern void time_check();
|
||||||
|
|
||||||
|
//Upgrade
|
||||||
|
extern void initUpgrade();
|
||||||
|
|
||||||
|
//widget
|
||||||
|
extern void createWidget(String widget_name, String page_name, String page_number, String file, String topic);
|
||||||
|
extern void createWidgetParam(String widget_name, String page_name, String page_number, String file, String topic, String name1, String param1, String name2, String param2, String name3, String param3);
|
||||||
|
extern void choose_widget_and_create(String widget_name, String page_name, String page_number, String type, String topik);
|
||||||
|
extern void createChart(String widget_name, String page_name, String page_number, String file, String topic, String maxCount);
|
||||||
|
|
||||||
|
// Push
|
||||||
|
extern void Push_init();
|
||||||
|
|
||||||
|
// UDP
|
||||||
|
extern void UDP_init();
|
||||||
|
extern void do_udp_data_parse();
|
||||||
|
extern void do_mqtt_send_settings_to_udp();
|
||||||
|
// WebServer
|
||||||
|
extern void Web_server_init();
|
||||||
|
|
||||||
|
//iot_firmware
|
||||||
|
extern void not_async_actions();
|
||||||
|
extern void handleCMD_loop();
|
||||||
|
extern void handleButton();
|
||||||
|
extern void handleScenario();
|
||||||
|
extern void handleUdp();
|
||||||
|
extern void do_upgrade_url();
|
||||||
|
extern void do_upgrade();
|
||||||
|
|
||||||
|
//uptime
|
||||||
|
extern void handle_uptime();
|
||||||
|
extern void handle_statistics();
|
||||||
|
extern void uptime_init();
|
||||||
|
extern void web_init();
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
extern void Scenario_init();
|
|
||||||
extern void Device_init();
|
|
||||||
extern void prsets_init();
|
|
||||||
43
include/JsonUtils.h
Normal file
43
include/JsonUtils.h
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include <ArduinoJson.h>
|
||||||
|
|
||||||
|
String jsonReadStr(String& json, String name) {
|
||||||
|
DynamicJsonBuffer jsonBuffer;
|
||||||
|
JsonObject& root = jsonBuffer.parseObject(json);
|
||||||
|
return root[name].as<String>();
|
||||||
|
}
|
||||||
|
|
||||||
|
int jsonReadInt(String& json, String name) {
|
||||||
|
DynamicJsonBuffer jsonBuffer;
|
||||||
|
JsonObject& root = jsonBuffer.parseObject(json);
|
||||||
|
return root[name];
|
||||||
|
}
|
||||||
|
|
||||||
|
String jsonWriteStr(String& json, String name, String volume) {
|
||||||
|
DynamicJsonBuffer jsonBuffer;
|
||||||
|
JsonObject& root = jsonBuffer.parseObject(json);
|
||||||
|
root[name] = volume;
|
||||||
|
json = "";
|
||||||
|
root.printTo(json);
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
|
||||||
|
String jsonWriteInt(String& json, String name, int volume) {
|
||||||
|
DynamicJsonBuffer jsonBuffer;
|
||||||
|
JsonObject& root = jsonBuffer.parseObject(json);
|
||||||
|
root[name] = volume;
|
||||||
|
json = "";
|
||||||
|
root.printTo(json);
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
|
||||||
|
String jsonWriteFloat(String& json, String name, float volume) {
|
||||||
|
DynamicJsonBuffer jsonBuffer;
|
||||||
|
JsonObject& root = jsonBuffer.parseObject(json);
|
||||||
|
root[name] = volume;
|
||||||
|
json = "";
|
||||||
|
root.printTo(json);
|
||||||
|
return json;
|
||||||
|
}
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <Arduino.h>
|
|
||||||
|
|
||||||
extern void logging();
|
|
||||||
extern void deleteOldDate(String file, int seted_number_of_lines, String date_to_add);
|
|
||||||
extern void clean_log_date();
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <Arduino.h>
|
|
||||||
|
|
||||||
extern boolean MQTT_Connecting();
|
|
||||||
extern boolean sendMQTT(String end_of_topik, String data);
|
|
||||||
extern boolean sendCHART(String topik, String data);
|
|
||||||
extern void sendSTATUS(String topik, String state);
|
|
||||||
extern void sendCONTROL(String id, String topik, String state);
|
|
||||||
|
|
||||||
extern void do_mqtt_connection();
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <Arduino.h>
|
|
||||||
|
|
||||||
extern void eventGen(String event_name, String number);
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
void sensors_init();
|
|
||||||
64
include/StringUtils.h
Normal file
64
include/StringUtils.h
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Arduino.h"
|
||||||
|
|
||||||
|
String selectToMarkerLast(String str, String found) {
|
||||||
|
int p = str.lastIndexOf(found);
|
||||||
|
return str.substring(p + found.length());
|
||||||
|
}
|
||||||
|
|
||||||
|
String selectToMarker(String str, String found) {
|
||||||
|
int p = str.indexOf(found);
|
||||||
|
return str.substring(0, p);
|
||||||
|
}
|
||||||
|
|
||||||
|
String deleteAfterDelimiter(String str, String found) {
|
||||||
|
int p = str.indexOf(found);
|
||||||
|
return str.substring(0, p);
|
||||||
|
}
|
||||||
|
|
||||||
|
String deleteBeforeDelimiter(String str, String found) {
|
||||||
|
int p = str.indexOf(found) + found.length();
|
||||||
|
return str.substring(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
String deleteBeforeDelimiterTo(String str, String found) {
|
||||||
|
int p = str.indexOf(found);
|
||||||
|
return str.substring(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
String deleteToMarkerLast(String str, String found) {
|
||||||
|
int p = str.lastIndexOf(found);
|
||||||
|
return str.substring(0, p);
|
||||||
|
}
|
||||||
|
|
||||||
|
String selectToMarkerPlus(String str, String found, int plus) {
|
||||||
|
int p = str.indexOf(found);
|
||||||
|
return str.substring(0, p + plus);
|
||||||
|
}
|
||||||
|
|
||||||
|
String selectFromMarkerToMarker(String str, String found, int number) {
|
||||||
|
if (str.indexOf(found) == -1) return "not found"; // если строки поиск нет сразу выход
|
||||||
|
str += found; // добавим для корректного поиска
|
||||||
|
uint8_t i = 0; // Индекс перебора
|
||||||
|
do {
|
||||||
|
if (i == number) return selectToMarker(str, found); // если индекс совпал с позицией законцим вернем резултат
|
||||||
|
str = deleteBeforeDelimiter(str, found); // отбросим проверенный блок до разделителя
|
||||||
|
i++; // увеличим индекс
|
||||||
|
} while (str.length() != 0); // повторим пока строка не пустая
|
||||||
|
return "not found"; // Достигли пустой строки и ничего не нашли
|
||||||
|
}
|
||||||
|
|
||||||
|
inline uint8_t hexStringToUint8(String hex) {
|
||||||
|
uint8_t tmp = strtol(hex.c_str(), NULL, 0);
|
||||||
|
if (tmp >= 0x00 && tmp <= 0xFF) {
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inline uint16_t hexStringToUint16(String hex) {
|
||||||
|
uint16_t tmp = strtol(hex.c_str(), NULL, 0);
|
||||||
|
if (tmp >= 0x0000 && tmp <= 0xFFFF) {
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
//Strings
|
||||||
// #include <stdafx.h>
|
// #include <stdafx.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
@@ -135,4 +136,4 @@ inline void char_array::printinput() {
|
|||||||
inline void char_array::changedefaultsize() {
|
inline void char_array::changedefaultsize() {
|
||||||
printf("Input new default input string size: ");
|
printf("Input new default input string size: ");
|
||||||
scanf("%i", charinput);
|
scanf("%i", charinput);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <Arduino.h>
|
|
||||||
|
|
||||||
extern int timeToMin(String Time);
|
|
||||||
extern String GetDataDigital();
|
|
||||||
extern String GetDate();
|
|
||||||
extern String GetTimeWOsec();
|
|
||||||
extern String GetTime();
|
|
||||||
extern String GetTimeUnix();
|
|
||||||
extern void reconfigTime();
|
|
||||||
extern void saveConfig();
|
|
||||||
extern String GetTimeUnix();
|
|
||||||
extern void time_check();
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <Arduino.h>
|
|
||||||
|
|
||||||
extern void Timer_countdown_init();
|
|
||||||
extern void addTimer(String number, String time);
|
|
||||||
extern int readTimer(int number);
|
|
||||||
extern void delTimer(String number);
|
|
||||||
extern void timerStop();
|
|
||||||
extern void delTimer(String number);
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
extern void initUpgrade();
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
extern bool StartAPMode();
|
|
||||||
extern void ROUTER_Connecting();
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <Arduino.h>
|
|
||||||
|
|
||||||
extern void createWidget(String widget_name, String page_name, String page_number, String file, String topic);
|
|
||||||
extern void createWidgetParam(String widget_name, String page_name, String page_number, String file, String topic, String name1, String param1, String name2, String param2, String name3, String param3);
|
|
||||||
extern void choose_widget_and_create(String widget_name, String page_name, String page_number, String type, String topik);
|
|
||||||
extern void createChart(String widget_name, String page_name, String page_number, String file, String topic, String maxCount);
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <Arduino.h>
|
|
||||||
|
|
||||||
extern void do_i2c_scanning();
|
|
||||||
|
|
||||||
extern String i2c_scan();
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <Arduino.h>
|
|
||||||
|
|
||||||
void getMemoryLoad(String text);
|
|
||||||
|
|
||||||
extern String jsonReadStr(String& json, String name);
|
|
||||||
extern int jsonReadInt(String& json, String name);
|
|
||||||
extern String jsonWriteInt(String& json, String name, int volume);
|
|
||||||
extern String jsonWriteStr(String& json, String name, String volume);
|
|
||||||
extern void saveConfig();
|
|
||||||
extern String jsonWriteFloat(String& json, String name, float volume);
|
|
||||||
|
|
||||||
extern String getURL(String urls);
|
|
||||||
|
|
||||||
extern String writeFile(String fileName, String strings);
|
|
||||||
extern String readFile(String fileName, size_t len);
|
|
||||||
extern String addFile(String fileName, String strings);
|
|
||||||
|
|
||||||
extern String selectFromMarkerToMarker(String str, String found, int number);
|
|
||||||
extern String selectToMarker(String str, String found);
|
|
||||||
extern String deleteAfterDelimiter(String str, String found);
|
|
||||||
extern String deleteBeforeDelimiter(String str, String found);
|
|
||||||
extern String deleteBeforeDelimiterTo(String str, String found);
|
|
||||||
|
|
||||||
extern void servo_();
|
|
||||||
extern boolean isDigitStr(String str);
|
|
||||||
extern String jsonWriteStr(String& json, String name, String volume);
|
|
||||||
|
|
||||||
extern void led_blink(String satus);
|
|
||||||
@@ -1,12 +1,11 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "main.h"
|
#include "Global.h"
|
||||||
#include "set.h"
|
|
||||||
|
|
||||||
inline void Push_init() {
|
void Push_init() {
|
||||||
server.on("/pushingboxDate", HTTP_GET, [](AsyncWebServerRequest* request) {
|
server.on("/pushingboxDate", HTTP_GET, [](AsyncWebServerRequest* request) {
|
||||||
if (request->hasArg("pushingbox_id")) {
|
if (request->hasArg("pushingbox_id")) {
|
||||||
jsonWriteStr(configSetup, "pushingbox_id", request->getParam("pushingbox_id")->value());
|
jsonWriteStr(configSetupJson, "pushingbox_id", request->getParam("pushingbox_id")->value());
|
||||||
}
|
}
|
||||||
|
|
||||||
saveConfig();
|
saveConfig();
|
||||||
@@ -24,7 +23,7 @@ inline void pushControl() {
|
|||||||
static String body_old;
|
static String body_old;
|
||||||
|
|
||||||
const char* logServer = "api.pushingbox.com";
|
const char* logServer = "api.pushingbox.com";
|
||||||
String deviceId = jsonReadStr(configSetup, "pushingbox_id");
|
String deviceId = jsonReadStr(configSetupJson, "pushingbox_id");
|
||||||
|
|
||||||
Serial.println("- starting client");
|
Serial.println("- starting client");
|
||||||
|
|
||||||
|
|||||||
225
include/set.h
225
include/set.h
@@ -1,225 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <Arduino.h>
|
|
||||||
|
|
||||||
/*******************************************************************
|
|
||||||
**********************FIRMWARE SETTINGS****************************
|
|
||||||
******************************************************************/
|
|
||||||
String firmware_version = "2.3.3";
|
|
||||||
boolean mb_4_of_memory = true;
|
|
||||||
//#define OTA_enable
|
|
||||||
//#define MDNS_enable
|
|
||||||
//#define WS_enable
|
|
||||||
//#define layout_in_ram
|
|
||||||
#define UDP_enable
|
|
||||||
/*==========================SENSORS===============================*/
|
|
||||||
//#define level_enable
|
|
||||||
//#define analog_enable
|
|
||||||
//#define dallas_enable
|
|
||||||
//#define dht_enable //подъедает оперативку сука
|
|
||||||
//#define bmp_enable
|
|
||||||
//#define bme_enable
|
|
||||||
/*=========================LOGGING================================*/
|
|
||||||
#define logging_enable
|
|
||||||
/*==========================GEARS=================================*/
|
|
||||||
#define stepper_enable
|
|
||||||
#define servo_enable
|
|
||||||
/*=========================OTHER==================================*/
|
|
||||||
#define serial_enable
|
|
||||||
#define push_enable
|
|
||||||
/*================================================================*/
|
|
||||||
#define wifi_mqtt_reconnecting 20000
|
|
||||||
#define blink_pin 2
|
|
||||||
#define tank_level_times_to_send 10 //после скольки выстрелов делать отправку данных
|
|
||||||
#define statistics_update 1000 * 60 * 60 * 2
|
|
||||||
/*================================================================*/
|
|
||||||
|
|
||||||
//===============общие библиотеки и объекты===============================
|
|
||||||
#include <Arduino.h>
|
|
||||||
#include <ArduinoJson.h>
|
|
||||||
#include <ESPAsyncWebServer.h>
|
|
||||||
#include <FS.h>
|
|
||||||
#include <SPIFFSEditor.h>
|
|
||||||
#include <time.h>
|
|
||||||
|
|
||||||
//===============библиотеки и объекты для ESP8266=======================
|
|
||||||
#ifdef ESP8266
|
|
||||||
#include <ESP8266HTTPClient.h>
|
|
||||||
#include <ESP8266HTTPUpdateServer.h>
|
|
||||||
#include <ESP8266WiFi.h>
|
|
||||||
#include <ESP8266httpUpdate.h>
|
|
||||||
ESP8266HTTPUpdateServer httpUpdater;
|
|
||||||
#include <WiFiUdp.h>
|
|
||||||
WiFiUDP Udp;
|
|
||||||
#include <Servo.h>
|
|
||||||
Servo myServo1;
|
|
||||||
Servo myServo2;
|
|
||||||
#ifdef MDNS_enable
|
|
||||||
#include <ESP8266mDNS.h>
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//===============библиотеки и объекты для ESP32===========================
|
|
||||||
#ifdef ESP32
|
|
||||||
#include <AsyncTCP.h>
|
|
||||||
#include <AsyncUDP.h>
|
|
||||||
#include <HTTPClient.h>
|
|
||||||
#include <HTTPUpdate.h>
|
|
||||||
#include <SPIFFS.h>
|
|
||||||
#include <WiFi.h>
|
|
||||||
#include <analogWrite.h>
|
|
||||||
AsyncUDP udp;
|
|
||||||
#include <ESP32Servo.h>
|
|
||||||
Servo myServo1;
|
|
||||||
Servo myServo2;
|
|
||||||
#ifdef MDNS_enable
|
|
||||||
#include <ESPmDNS.h>
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef OTA_enable
|
|
||||||
#include <ArduinoOTA.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
AsyncWebServer server(80);
|
|
||||||
|
|
||||||
#ifdef WS_enable
|
|
||||||
AsyncWebSocket ws("/ws");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
AsyncEventSource events("/events");
|
|
||||||
#include <TickerScheduler.h>
|
|
||||||
#include <time.h>
|
|
||||||
enum { ROUTER_SEARCHING,
|
|
||||||
WIFI_MQTT_CONNECTION_CHECK,
|
|
||||||
SENSORS,
|
|
||||||
STEPPER1,
|
|
||||||
STEPPER2,
|
|
||||||
LOG1,
|
|
||||||
LOG2,
|
|
||||||
LOG3,
|
|
||||||
LOG4,
|
|
||||||
LOG5,
|
|
||||||
TIMER_COUNTDOWN,
|
|
||||||
TIME,
|
|
||||||
TIME_SYNC,
|
|
||||||
STATISTICS,
|
|
||||||
UDP,
|
|
||||||
UDP_DB,
|
|
||||||
TEST };
|
|
||||||
TickerScheduler ts(TEST + 1);
|
|
||||||
|
|
||||||
#include <PubSubClient.h>
|
|
||||||
WiFiClient espClient;
|
|
||||||
PubSubClient client_mqtt(espClient);
|
|
||||||
|
|
||||||
#include <StringCommand.h>
|
|
||||||
StringCommand sCmd;
|
|
||||||
|
|
||||||
#include <Bounce2.h>
|
|
||||||
#define NUM_BUTTONS 6
|
|
||||||
boolean but[NUM_BUTTONS];
|
|
||||||
Bounce *buttons = new Bounce[NUM_BUTTONS];
|
|
||||||
|
|
||||||
#ifdef level_enable
|
|
||||||
#include "GyverFilters.h" //настраивается в GyverHacks.h - MEDIAN_FILTER_SIZE
|
|
||||||
GMedian medianFilter;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef dallas_enable
|
|
||||||
#include <DallasTemperature.h>
|
|
||||||
#include <OneWire.h>
|
|
||||||
OneWire *oneWire;
|
|
||||||
DallasTemperature sensors;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef dht_enable
|
|
||||||
#include <DHTesp.h>
|
|
||||||
DHTesp dht;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <Wire.h>
|
|
||||||
|
|
||||||
#ifdef bmp_enable
|
|
||||||
#include <Adafruit_BMP280.h>
|
|
||||||
Adafruit_BMP280 bmp; // use I2C interface
|
|
||||||
Adafruit_Sensor *bmp_temp = bmp.getTemperatureSensor();
|
|
||||||
Adafruit_Sensor *bmp_pressure = bmp.getPressureSensor();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef bme_enable
|
|
||||||
#include <Adafruit_BME280.h>
|
|
||||||
Adafruit_BME280 bme; // use I2C interface
|
|
||||||
Adafruit_Sensor *bme_temp = bme.getTemperatureSensor();
|
|
||||||
Adafruit_Sensor *bme_pressure = bme.getPressureSensor();
|
|
||||||
Adafruit_Sensor *bme_humidity = bme.getHumiditySensor();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//#include <SoftwareSerial.h>
|
|
||||||
//SoftwareSerial mySerial(14, 12);
|
|
||||||
|
|
||||||
//===============FIRMWARE VARS========================
|
|
||||||
boolean just_load = true;
|
|
||||||
const char *hostName = "IoT Manager";
|
|
||||||
//JSON
|
|
||||||
String configSetup = "{}";
|
|
||||||
String configJson = "{}";
|
|
||||||
String optionJson = "{}";
|
|
||||||
//MQTT
|
|
||||||
String chipID = "";
|
|
||||||
String prex;
|
|
||||||
String all_widgets = "";
|
|
||||||
String scenario;
|
|
||||||
String order_loop;
|
|
||||||
//SENSORS
|
|
||||||
String analog_value_names_list;
|
|
||||||
int enter_to_analog_counter;
|
|
||||||
|
|
||||||
String level_value_name;
|
|
||||||
|
|
||||||
String dhtT_value_name;
|
|
||||||
String dhtH_value_name;
|
|
||||||
|
|
||||||
String bmp280T_value_name;
|
|
||||||
String bmp280P_value_name;
|
|
||||||
|
|
||||||
String bme280T_value_name;
|
|
||||||
String bme280P_value_name;
|
|
||||||
String bme280H_value_name;
|
|
||||||
String bme280A_value_name;
|
|
||||||
|
|
||||||
int sensors_reading_map[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
|
||||||
//============================0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14
|
|
||||||
|
|
||||||
//LOGGING
|
|
||||||
String logging_value_names_list;
|
|
||||||
int enter_to_logging_counter;
|
|
||||||
//NTP and TIME
|
|
||||||
String current_time;
|
|
||||||
//SCENARIO
|
|
||||||
int scenario_line_status[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
|
|
||||||
//ERRORS
|
|
||||||
int wifi_lost_error = 0;
|
|
||||||
int mqtt_lost_error = 0;
|
|
||||||
String last_version;
|
|
||||||
//ASYNC ACTIONS
|
|
||||||
boolean upgrade_url = false;
|
|
||||||
boolean upgrade = false;
|
|
||||||
boolean mqtt_connection = false;
|
|
||||||
boolean udp_data_parse = false;
|
|
||||||
boolean mqtt_send_settings_to_udp = false;
|
|
||||||
boolean i2c_scanning = false;
|
|
||||||
//UDP
|
|
||||||
boolean udp_busy = false;
|
|
||||||
unsigned int udp_port = 4210;
|
|
||||||
#ifdef ESP8266
|
|
||||||
IPAddress udp_multicastIP(255, 255, 255, 255);
|
|
||||||
#endif
|
|
||||||
#ifdef ESP32
|
|
||||||
IPAddress udp_multicastIP(239, 255, 255, 255);
|
|
||||||
#endif
|
|
||||||
String received_ip;
|
|
||||||
String received_udp_line;
|
|
||||||
int udp_period;
|
|
||||||
//i2c
|
|
||||||
String i2c_list;
|
|
||||||
2
lib/Arduino-UpTime/Changelog
Normal file
2
lib/Arduino-UpTime/Changelog
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
0.01 2019-01-14
|
||||||
|
- initial version
|
||||||
15
lib/Arduino-UpTime/Makefile
Normal file
15
lib/Arduino-UpTime/Makefile
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
all: README examples/UpTime_tick/README examples/UpTime_synopsis/README
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f README README.bak \
|
||||||
|
examples/UpTime_tick/README examples/UpTime_tick/README.bak \
|
||||||
|
examples/UpTime_synopsis/README examples/UpTime_synopsis/README.bak
|
||||||
|
|
||||||
|
README: UpTime.h
|
||||||
|
pod2readme $< $@ && rm -f $@.bak
|
||||||
|
|
||||||
|
examples/UpTime_tick/README: examples/UpTime_tick/UpTime_tick.ino
|
||||||
|
pod2readme $< $@ && rm -f $@.bak
|
||||||
|
|
||||||
|
examples/UpTime_synopsis/README: examples/UpTime_synopsis/UpTime_synopsis.ino
|
||||||
|
pod2readme $< $@ && rm -f $@.bak
|
||||||
99
lib/Arduino-UpTime/README
Normal file
99
lib/Arduino-UpTime/README
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
NAME
|
||||||
|
|
||||||
|
UpTime.h - Arduino uptime and events in seconds
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include <UpTime.h> // https://github.com/jozef/Arduino-UpTime
|
||||||
|
|
||||||
|
uptime_interval fire2(2);
|
||||||
|
uptime_interval fire5(5,UPTIME_RIGHT_AWAY);
|
||||||
|
|
||||||
|
void setup () {
|
||||||
|
Serial.begin(9600);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop () {
|
||||||
|
Serial.println("uptime: "+uptime_as_string()+" or "+uptime()+"s");
|
||||||
|
if (fire2.check()) Serial.println("2s elapsed");
|
||||||
|
if (fire5.check()) Serial.println("5s elapsed");
|
||||||
|
delay(1400);
|
||||||
|
}
|
||||||
|
|
||||||
|
will output:
|
||||||
|
|
||||||
|
uptime: 00:00:00 or 0s
|
||||||
|
5s elapsed
|
||||||
|
uptime: 00:00:01 or 1s
|
||||||
|
uptime: 00:00:02 or 2s
|
||||||
|
2s elapsed
|
||||||
|
uptime: 00:00:04 or 4s
|
||||||
|
2s elapsed
|
||||||
|
uptime: 00:00:05 or 5s
|
||||||
|
5s elapsed
|
||||||
|
uptime: 00:00:07 or 7s
|
||||||
|
2s elapsed
|
||||||
|
uptime: 00:00:08 or 8s
|
||||||
|
2s elapsed
|
||||||
|
uptime: 00:00:09 or 9s
|
||||||
|
uptime: 00:00:11 or 11s
|
||||||
|
2s elapsed
|
||||||
|
5s elapsed
|
||||||
|
…
|
||||||
|
uptime: 04:41:23 or 16883s
|
||||||
|
uptime: 04:41:25 or 16885s
|
||||||
|
2s elapsed
|
||||||
|
5s elapsed
|
||||||
|
uptime: 04:41:26 or 16886s
|
||||||
|
2s elapsed
|
||||||
|
uptime: 04:41:28 or 16888s
|
||||||
|
2s elapsed
|
||||||
|
uptime: 04:41:29 or 16889s
|
||||||
|
uptime: 04:41:30 or 16890s
|
||||||
|
2s elapsed
|
||||||
|
5s elapsed
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
|
||||||
|
Uptime class is made to to track uptime of Arduino in seconds. The
|
||||||
|
uptime() or check() functions has to be called at least once for 0xFFFF
|
||||||
|
seconds (once in 18h) to work. Seconds will be counted even after
|
||||||
|
Arduinos millis() overrun and the seconds of unsigned long are enough
|
||||||
|
to not overrun sooner then in 136+ years. Once 0xFFFF0000 seconds is
|
||||||
|
elapsed, will trigger reset so that Arduino program clearly starts all
|
||||||
|
over again.
|
||||||
|
|
||||||
|
METHODS
|
||||||
|
|
||||||
|
bool check()
|
||||||
|
|
||||||
|
Returns true/false if the interval elapset.
|
||||||
|
|
||||||
|
void reset(bool postpone = true)
|
||||||
|
|
||||||
|
Will reset the time to count from current moment in until interval. If
|
||||||
|
postpone is set to false, check() will return true with next call.
|
||||||
|
|
||||||
|
INSTALL
|
||||||
|
|
||||||
|
git clone https://github.com/jozef/Arduino-UpTime sketchbook/libraries/UpTime
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
|
||||||
|
examples/UpTime_tick/UpTime_synopsis.ino
|
||||||
|
|
||||||
|
synopsis section example
|
||||||
|
|
||||||
|
examples/UpTime_tick/UpTime_tick.ino
|
||||||
|
|
||||||
|
print formatted and raw uptime in seconds und 4x interval
|
||||||
|
|
||||||
|
LICENSE
|
||||||
|
|
||||||
|
This is free software, licensed under the MIT License.
|
||||||
|
|
||||||
|
AUTHOR
|
||||||
|
|
||||||
|
Jozef Kutej
|
||||||
|
|
||||||
65
lib/Arduino-UpTime/UpTime.cpp
Normal file
65
lib/Arduino-UpTime/UpTime.cpp
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
/* see UpTime.h */
|
||||||
|
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include <UpTime.h>
|
||||||
|
|
||||||
|
unsigned long _uptime_seconds = 0;
|
||||||
|
void (*time_to_die)(void) = 0; // reset Arduino after 136+ years
|
||||||
|
|
||||||
|
unsigned long uptime() {
|
||||||
|
unsigned int cur_second = millis() / 1000;
|
||||||
|
unsigned int _uptime_seconds_uint = _uptime_seconds;
|
||||||
|
|
||||||
|
while (_uptime_seconds_uint != cur_second) {
|
||||||
|
_uptime_seconds++;
|
||||||
|
_uptime_seconds_uint++;
|
||||||
|
if (_uptime_seconds > 0xFFFF0000) time_to_die();
|
||||||
|
}
|
||||||
|
|
||||||
|
return _uptime_seconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
uptime_interval::uptime_interval(unsigned int inte, bool postpone) : interval(inte) {
|
||||||
|
reset(postpone);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool uptime_interval::check() {
|
||||||
|
if (next <= uptime()) {
|
||||||
|
next += interval;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void uptime_interval::reset(bool postpone) {
|
||||||
|
next = (postpone ? _uptime_seconds + interval : _uptime_seconds);
|
||||||
|
}
|
||||||
|
|
||||||
|
String _uptime_two_dig(uint8_t x) {
|
||||||
|
if (x > 9) {
|
||||||
|
return String(x);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return "0"+String(x);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String uptime_as_string() {
|
||||||
|
unsigned long tmp_uptime = uptime();
|
||||||
|
unsigned long seconds;
|
||||||
|
unsigned long minutes;
|
||||||
|
unsigned long hours;
|
||||||
|
unsigned long days;
|
||||||
|
seconds = tmp_uptime % 60;
|
||||||
|
tmp_uptime = tmp_uptime / 60;
|
||||||
|
|
||||||
|
minutes = tmp_uptime % 60;
|
||||||
|
tmp_uptime = tmp_uptime / 60;
|
||||||
|
hours = tmp_uptime % 24;
|
||||||
|
days = tmp_uptime / 24;
|
||||||
|
|
||||||
|
return (days ? String(days)+'d'+' ' : "")
|
||||||
|
+ _uptime_two_dig(hours)
|
||||||
|
+ ':' + _uptime_two_dig(minutes)
|
||||||
|
+ ':' + _uptime_two_dig(seconds);
|
||||||
|
}
|
||||||
124
lib/Arduino-UpTime/UpTime.h
Normal file
124
lib/Arduino-UpTime/UpTime.h
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
/* VERSION 0.01; 14.1.2019; see below for description and documentation */
|
||||||
|
#ifndef UpTime_h
|
||||||
|
#define UpTime_h
|
||||||
|
|
||||||
|
#define UPTIME_RIGHT_AWAY false
|
||||||
|
|
||||||
|
unsigned long uptime();
|
||||||
|
String uptime_as_string();
|
||||||
|
|
||||||
|
class uptime_interval {
|
||||||
|
private:
|
||||||
|
unsigned long next;
|
||||||
|
unsigned int interval;
|
||||||
|
public:
|
||||||
|
uptime_interval(unsigned int inte, bool postpone = true);
|
||||||
|
bool check();
|
||||||
|
void reset(bool postpone = true);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
UpTime.h - Arduino uptime and events in seconds
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include <UpTime.h> // https://github.com/jozef/Arduino-UpTime
|
||||||
|
|
||||||
|
uptime_interval fire2(2);
|
||||||
|
uptime_interval fire5(5,UPTIME_RIGHT_AWAY);
|
||||||
|
|
||||||
|
void setup () {
|
||||||
|
Serial.begin(9600);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop () {
|
||||||
|
Serial.println("uptime: "+uptime_as_string()+" or "+uptime()+"s");
|
||||||
|
if (fire2.check()) Serial.println("2s elapsed");
|
||||||
|
if (fire5.check()) Serial.println("5s elapsed");
|
||||||
|
delay(1400);
|
||||||
|
}
|
||||||
|
|
||||||
|
will output:
|
||||||
|
|
||||||
|
uptime: 00:00:00 or 0s
|
||||||
|
5s elapsed
|
||||||
|
uptime: 00:00:01 or 1s
|
||||||
|
uptime: 00:00:02 or 2s
|
||||||
|
2s elapsed
|
||||||
|
uptime: 00:00:04 or 4s
|
||||||
|
2s elapsed
|
||||||
|
uptime: 00:00:05 or 5s
|
||||||
|
5s elapsed
|
||||||
|
uptime: 00:00:07 or 7s
|
||||||
|
2s elapsed
|
||||||
|
uptime: 00:00:08 or 8s
|
||||||
|
2s elapsed
|
||||||
|
uptime: 00:00:09 or 9s
|
||||||
|
uptime: 00:00:11 or 11s
|
||||||
|
2s elapsed
|
||||||
|
5s elapsed
|
||||||
|
…
|
||||||
|
uptime: 04:41:23 or 16883s
|
||||||
|
uptime: 04:41:25 or 16885s
|
||||||
|
2s elapsed
|
||||||
|
5s elapsed
|
||||||
|
uptime: 04:41:26 or 16886s
|
||||||
|
2s elapsed
|
||||||
|
uptime: 04:41:28 or 16888s
|
||||||
|
2s elapsed
|
||||||
|
uptime: 04:41:29 or 16889s
|
||||||
|
uptime: 04:41:30 or 16890s
|
||||||
|
2s elapsed
|
||||||
|
5s elapsed
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Uptime class is made to to track uptime of Arduino in seconds. The uptime()
|
||||||
|
or check() functions has to be called at least once for 0xFFFF seconds
|
||||||
|
(once in 18h) to work. Seconds will be counted even after Arduinos
|
||||||
|
millis() overrun and the seconds of unsigned long are enough to not overrun
|
||||||
|
sooner then in 136+ years. Once 0xFFFF0000 seconds is elapsed, will trigger
|
||||||
|
reset so that Arduino program clearly starts all over again.
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 bool check()
|
||||||
|
|
||||||
|
Returns true/false if the interval elapset.
|
||||||
|
|
||||||
|
=head2 void reset(bool postpone = true)
|
||||||
|
|
||||||
|
Will reset the time to count from current moment in until interval. If
|
||||||
|
C<postpone> is set to false, check() will return true with next call.
|
||||||
|
|
||||||
|
=head1 INSTALL
|
||||||
|
|
||||||
|
git clone https://github.com/jozef/Arduino-UpTime sketchbook/libraries/UpTime
|
||||||
|
|
||||||
|
=head1 EXAMPLES
|
||||||
|
|
||||||
|
=head2 examples/UpTime_tick/UpTime_synopsis.ino
|
||||||
|
|
||||||
|
synopsis section example
|
||||||
|
|
||||||
|
=head2 examples/UpTime_tick/UpTime_tick.ino
|
||||||
|
|
||||||
|
print formatted and raw uptime in seconds und 4x interval
|
||||||
|
|
||||||
|
=head1 LICENSE
|
||||||
|
|
||||||
|
This is free software, licensed under the MIT License.
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Jozef Kutej
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
*/
|
||||||
4
lib/Arduino-UpTime/examples/UpTime_synopsis/README
Normal file
4
lib/Arduino-UpTime/examples/UpTime_synopsis/README
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
DESCRIPTION
|
||||||
|
|
||||||
|
synopsis section example from UpTime.h
|
||||||
|
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
synopsis section example from UpTime.h
|
||||||
|
|
||||||
|
=cut
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include <UpTime.h> // https://github.com/jozef/Arduino-UpTime
|
||||||
|
|
||||||
|
uptime_interval fire2(2);
|
||||||
|
uptime_interval fire5(5,UPTIME_RIGHT_AWAY);
|
||||||
|
|
||||||
|
void setup () {
|
||||||
|
Serial.begin(9600);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop () {
|
||||||
|
Serial.println("uptime: "+uptime_as_string()+" or "+uptime()+"s");
|
||||||
|
if (fire2.check()) Serial.println("2s elapsed");
|
||||||
|
if (fire5.check()) Serial.println("5s elapsed");
|
||||||
|
delay(1400);
|
||||||
|
}
|
||||||
11
lib/Arduino-UpTime/examples/UpTime_tick/README
Normal file
11
lib/Arduino-UpTime/examples/UpTime_tick/README
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
NAME
|
||||||
|
|
||||||
|
UpTime_tick.ino - print formatted and raw uptime in seconds und 4x
|
||||||
|
interval
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
|
||||||
|
On serial port will print current uptime in seconds with 4 interval
|
||||||
|
checks. Each loop has random 0-5s delay. Intervals will be printed once
|
||||||
|
elapsed.
|
||||||
|
|
||||||
52
lib/Arduino-UpTime/examples/UpTime_tick/UpTime_tick.ino
Normal file
52
lib/Arduino-UpTime/examples/UpTime_tick/UpTime_tick.ino
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
UpTime_tick.ino - print formatted and raw uptime in seconds und 4x interval
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
On serial port will print current uptime in seconds with 4 interval checks.
|
||||||
|
Each loop has random 0-5s delay. Intervals will be printed once elapsed.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include <UpTime.h> // https://github.com/jozef/Arduino-UpTime
|
||||||
|
|
||||||
|
uptime_interval fire2(2);
|
||||||
|
uptime_interval fire5(5);
|
||||||
|
uptime_interval fire10(10, UPTIME_RIGHT_AWAY);
|
||||||
|
uptime_interval fire60(60, UPTIME_RIGHT_AWAY);
|
||||||
|
|
||||||
|
void setup () {
|
||||||
|
Serial.begin(9600);
|
||||||
|
while (Serial.available()) { Serial.read(); }
|
||||||
|
randomSeed(analogRead(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop () {
|
||||||
|
Serial.print("uptime: ");
|
||||||
|
Serial.println(uptime_as_string());
|
||||||
|
|
||||||
|
if (fire2.check()) {
|
||||||
|
Serial.println("fire 2s");
|
||||||
|
}
|
||||||
|
if (fire5.check()) {
|
||||||
|
Serial.println("fire 5s");
|
||||||
|
}
|
||||||
|
if (fire10.check()) {
|
||||||
|
Serial.println("fire 10s");
|
||||||
|
}
|
||||||
|
if (fire60.check()) {
|
||||||
|
Serial.println("fire 60s");
|
||||||
|
}
|
||||||
|
|
||||||
|
int rand_delay = random(5000);
|
||||||
|
Serial.print("delay(");
|
||||||
|
Serial.print(rand_delay);
|
||||||
|
Serial.println(")");
|
||||||
|
delay(rand_delay);
|
||||||
|
}
|
||||||
17
lib/ESPrelay/.gitattributes
vendored
17
lib/ESPrelay/.gitattributes
vendored
@@ -1,17 +0,0 @@
|
|||||||
# Auto detect text files and perform LF normalization
|
|
||||||
* text=auto
|
|
||||||
|
|
||||||
# Custom for Visual Studio
|
|
||||||
*.cs diff=csharp
|
|
||||||
|
|
||||||
# Standard to msysgit
|
|
||||||
*.doc diff=astextplain
|
|
||||||
*.DOC diff=astextplain
|
|
||||||
*.docx diff=astextplain
|
|
||||||
*.DOCX diff=astextplain
|
|
||||||
*.dot diff=astextplain
|
|
||||||
*.DOT diff=astextplain
|
|
||||||
*.pdf diff=astextplain
|
|
||||||
*.PDF diff=astextplain
|
|
||||||
*.rtf diff=astextplain
|
|
||||||
*.RTF diff=astextplain
|
|
||||||
@@ -1,215 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2016 TheThings.
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
a copy of this software and associated documentation files (the
|
|
||||||
"Software"), to deal in the Software without restriction, including
|
|
||||||
without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
Original Maker: Mateo Velez - Metavix for TheThings Inc
|
|
||||||
Modified and Maintened by: Jose Garcia - TheThings Inc
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "TheThingsMQTT.h"
|
|
||||||
|
|
||||||
|
|
||||||
TheThings::TheThings(char* token){
|
|
||||||
initialize(token, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
TheThings::TheThings(char* token, char* clientName) {
|
|
||||||
initialize(token, clientName);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void TheThings::begin(void (*callback)(char*,uint8_t*,unsigned int)) {
|
|
||||||
this->callback = callback;
|
|
||||||
_client.setServer(_server, MQTT_PORT);
|
|
||||||
_client.setCallback(callback);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool TheThings::add(char* variableLabel, float value) {
|
|
||||||
return add(variableLabel, value, "NULL", "NULL");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool TheThings::add(char* variableLabel, float value, char *context) {
|
|
||||||
return add(variableLabel, value, context, "NULL");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool TheThings::add(char* variableLabel, float value, char *context, char *timestamp) {
|
|
||||||
(val+currentValue)->_variableLabel = variableLabel;
|
|
||||||
(val+currentValue)->_value = value;
|
|
||||||
(val+currentValue)->_context = context;
|
|
||||||
(val+currentValue)->_timestamp = timestamp;
|
|
||||||
currentValue++;
|
|
||||||
if (currentValue > MAX_VALUES) {
|
|
||||||
Serial.println(F("You are sending more than the maximum of consecutive variables"));
|
|
||||||
currentValue = MAX_VALUES;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool TheThings::connected(){
|
|
||||||
return _client.connected();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
char* TheThings::getMac(){
|
|
||||||
// Obtains the MAC of the device
|
|
||||||
Serial.println("entra");
|
|
||||||
byte mac[6];
|
|
||||||
WiFi.macAddress(mac);
|
|
||||||
char macAddr[18];
|
|
||||||
sprintf(macAddr, "%2X%2X%2X%2X%2X%2X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
|
|
||||||
return macAddr;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void TheThings::initialize(char* token, char* clientName){
|
|
||||||
_server = SERVER;
|
|
||||||
_token = token;
|
|
||||||
currentValue = 0;
|
|
||||||
val = (Value *)malloc(MAX_VALUES*sizeof(Value));
|
|
||||||
if(clientName!=NULL){
|
|
||||||
_clientName = clientName;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool TheThings::loop() {
|
|
||||||
if (!_client.connected()) {
|
|
||||||
reconnect();
|
|
||||||
}
|
|
||||||
return _client.loop();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void TheThings::reconnect() {
|
|
||||||
while (!_client.connected()) {
|
|
||||||
Serial.print("Attempting MQTT connection...");
|
|
||||||
if (_client.connect(_clientName, _token, NULL)) {
|
|
||||||
Serial.println("connected");
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
Serial.print("failed, rc=");
|
|
||||||
Serial.print(_client.state());
|
|
||||||
Serial.println(" try again in 3 seconds");
|
|
||||||
delay(3000);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void TheThings::setDebug(bool debug){
|
|
||||||
_debug = debug;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void TheThings:: setBroker(char* broker){
|
|
||||||
if (_debug){
|
|
||||||
Serial.println("Broker set for Business Account");
|
|
||||||
}
|
|
||||||
_server = broker;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool TheThings::subscribe() {
|
|
||||||
char topic[150];
|
|
||||||
sprintf(topic, "%s%s", FIRST_PART_TOPIC, _token);
|
|
||||||
if (!_client.connected()) {
|
|
||||||
reconnect();
|
|
||||||
}
|
|
||||||
if (_debug){
|
|
||||||
Serial.println("Subscribed to: ");
|
|
||||||
Serial.println(topic);
|
|
||||||
}
|
|
||||||
return _client.subscribe(topic);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool TheThings::publish() {
|
|
||||||
|
|
||||||
char topic[150];
|
|
||||||
char payload[500];
|
|
||||||
String str;
|
|
||||||
sprintf(topic, "%s%s", FIRST_PART_TOPIC, _token);
|
|
||||||
sprintf(payload, "[");
|
|
||||||
for (int i = 0; i <= currentValue; ) {
|
|
||||||
str = String((val+i)->_value, 1);
|
|
||||||
sprintf(payload,"%s{\"key\":\"%s\",\"value\":%s",payload,(val+i)->_variableLabel, str.c_str());
|
|
||||||
if ((val+i)->_timestamp != "NULL") {
|
|
||||||
sprintf(payload, "%s, \"timestamp\": %s", payload, (val+i)->_timestamp);
|
|
||||||
}
|
|
||||||
if ((val+i)->_context != "NULL") {
|
|
||||||
sprintf(payload, "%s, \"context\": {%s}", payload, (val+i)->_context);
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
if (i >= currentValue) {
|
|
||||||
sprintf(payload, "%s}]", payload);
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
sprintf(payload, "%s},", payload);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (_debug){
|
|
||||||
Serial.println("publishing to TOPIC: ");
|
|
||||||
Serial.println(topic);
|
|
||||||
Serial.print("JSON dict: ");
|
|
||||||
Serial.println(payload);
|
|
||||||
}
|
|
||||||
currentValue = 0;
|
|
||||||
return _client.publish(topic, payload, 512);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool TheThings::wifiConnection(char* ssid, char* pass) {
|
|
||||||
WiFi.begin(ssid, pass);
|
|
||||||
while (WiFi.status() != WL_CONNECTED) {
|
|
||||||
delay(500);
|
|
||||||
Serial.print(".");
|
|
||||||
}
|
|
||||||
Serial.println(F("WiFi connected"));
|
|
||||||
Serial.println(F("IP address: "));
|
|
||||||
Serial.println(WiFi.localIP());
|
|
||||||
if(_clientName==NULL){
|
|
||||||
_clientName = getMac();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TheThings::wifiConnection2() {
|
|
||||||
WiFiManager wifiManager;
|
|
||||||
wifiManager.setTimeout(180);
|
|
||||||
|
|
||||||
//if(!wifiManager.autoConnect("AutoConnectAP")) {
|
|
||||||
if(!wifiManager.autoConnect()) {
|
|
||||||
Serial.println("failed to connect and hit timeout");
|
|
||||||
delay(3000);
|
|
||||||
ESP.reset();
|
|
||||||
delay(5000);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int TheThings::state() {
|
|
||||||
return _client.state();
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
|
|
||||||
#ifndef TheThingsMQTT_H
|
|
||||||
#define TheThingsMQTT_H
|
|
||||||
//#include <ESP8266WiFi.h>
|
|
||||||
#include <PubSubClient.h>
|
|
||||||
#include <WiFiManager.h>
|
|
||||||
|
|
||||||
#define MQTT_PORT 1883
|
|
||||||
#define SERVER "mqtt.thethings.io"
|
|
||||||
#define MAX_VALUES 5
|
|
||||||
#define FIRST_PART_TOPIC "v2/things/"
|
|
||||||
|
|
||||||
#define META_DEBUG Serial
|
|
||||||
|
|
||||||
typedef struct Value {
|
|
||||||
char* _variableLabel;
|
|
||||||
float _value;
|
|
||||||
char* _context;
|
|
||||||
char* _timestamp;
|
|
||||||
} Value;
|
|
||||||
|
|
||||||
class TheThings {
|
|
||||||
private:
|
|
||||||
void (*callback)(char*, uint8_t*, unsigned int);
|
|
||||||
char* getMac();
|
|
||||||
void initialize(char* token, char* clientName);
|
|
||||||
WiFiClient espClient;
|
|
||||||
PubSubClient _client = PubSubClient(espClient);
|
|
||||||
WiFiManager wifiManager;
|
|
||||||
char* _clientName = NULL;
|
|
||||||
bool _debug = false;
|
|
||||||
uint8_t currentValue;
|
|
||||||
char* _password;
|
|
||||||
char* _server;
|
|
||||||
char* _ssid;
|
|
||||||
char* _token;
|
|
||||||
Value* val;
|
|
||||||
|
|
||||||
public:
|
|
||||||
TheThings(char* token);
|
|
||||||
TheThings(char* token, char* clientName);
|
|
||||||
bool add(char* variableLabel, float value);
|
|
||||||
bool add(char* variableLabel, float value, char* context);
|
|
||||||
bool add(char* variableLabel, float value, char* context, char* timestamp);
|
|
||||||
void begin(void (*callback)(char*, uint8_t*, unsigned int));
|
|
||||||
bool connected();
|
|
||||||
bool loop();
|
|
||||||
bool subscribe();
|
|
||||||
bool publish();
|
|
||||||
void setBroker(char* broker);
|
|
||||||
void reconnect();
|
|
||||||
void setDebug(bool debug);
|
|
||||||
bool wifiConnection(char* ssid, char* pass);
|
|
||||||
bool wifiConnection2();
|
|
||||||
int state();
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <arduino.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
class Ticker {
|
|
||||||
typedef void (*ticker_callback_t)(bool *);
|
|
||||||
|
|
||||||
private:
|
|
||||||
bool is_attached = false;
|
|
||||||
uint32_t period = 0;
|
|
||||||
uint32_t last_tick = 0;
|
|
||||||
ticker_callback_t callback;
|
|
||||||
bool *callback_argument;
|
|
||||||
|
|
||||||
public:
|
|
||||||
void Tick() {
|
|
||||||
if (is_attached && millis() - last_tick >= period) {
|
|
||||||
callback(callback_argument);
|
|
||||||
last_tick = millis();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void detach() {
|
|
||||||
this->is_attached = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename TArg>
|
|
||||||
void attach_ms(uint32_t milliseconds, void (*callback)(TArg), TArg arg) {
|
|
||||||
this->period = milliseconds;
|
|
||||||
this->callback = callback;
|
|
||||||
this->callback_argument = arg;
|
|
||||||
this->is_attached = true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifdef ARDUINO_ARCH_ESP8266
|
|
||||||
#include <Ticker.h>
|
|
||||||
|
|
||||||
#include <functional>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void tickerFlagHandle(volatile bool *flag);
|
|
||||||
|
|
||||||
#ifdef _GLIBCXX_FUNCTIONAL
|
|
||||||
typedef std::function<void(void *)> tscallback_t;
|
|
||||||
#else
|
|
||||||
typedef void (*tscallback_t)(void *);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct TickerSchedulerItem {
|
|
||||||
Ticker t;
|
|
||||||
volatile bool flag = false;
|
|
||||||
tscallback_t cb;
|
|
||||||
void *cb_arg;
|
|
||||||
uint32_t period;
|
|
||||||
volatile bool is_used = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
class TickerScheduler {
|
|
||||||
private:
|
|
||||||
uint8_t size;
|
|
||||||
TickerSchedulerItem *items = NULL;
|
|
||||||
|
|
||||||
void handleTicker(tscallback_t, void *, volatile bool *flag);
|
|
||||||
static void handleTickerFlag(volatile bool *flag);
|
|
||||||
|
|
||||||
public:
|
|
||||||
TickerScheduler(uint8_t size);
|
|
||||||
~TickerScheduler();
|
|
||||||
|
|
||||||
bool add(uint8_t i, uint32_t period, tscallback_t, void *, boolean shouldFireNow = false);
|
|
||||||
bool remove(uint8_t i);
|
|
||||||
bool enable(uint8_t i);
|
|
||||||
bool disable(uint8_t i);
|
|
||||||
void enableAll();
|
|
||||||
void disableAll();
|
|
||||||
void update();
|
|
||||||
};
|
|
||||||
@@ -1,182 +0,0 @@
|
|||||||
/****************************************
|
|
||||||
* Include Libraries
|
|
||||||
****************************************/
|
|
||||||
#include "TheThingsMQTT.h"
|
|
||||||
#include "TickerScheduler.h"
|
|
||||||
|
|
||||||
#include <ESP8266WiFi.h>
|
|
||||||
#include <PubSubClient.h>
|
|
||||||
|
|
||||||
#include <DNSServer.h>
|
|
||||||
#include <ESP8266WebServer.h>
|
|
||||||
#include <WiFiManager.h>
|
|
||||||
#include <Adafruit_Sensor.h>
|
|
||||||
#include <DHT.h>
|
|
||||||
#include <DHT_U.h>
|
|
||||||
|
|
||||||
/****************************************
|
|
||||||
* Define Constants
|
|
||||||
****************************************/
|
|
||||||
#define TOKEN "" // Your TheThings TOKEN
|
|
||||||
#define WIFINAME "" //Your SSID
|
|
||||||
#define WIFIPASS "" // Your Wifi Pass
|
|
||||||
|
|
||||||
TheThings client(TOKEN);
|
|
||||||
|
|
||||||
#define DHTPIN 14 // Pin which is cosnnected to the DHT sensor.
|
|
||||||
// Uncomment the type of sensor in use:
|
|
||||||
//#define DHTTYPE DHT11 // DHT 11
|
|
||||||
#define DHTTYPE DHT22 // DHT 22 (AM2302)
|
|
||||||
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
|
|
||||||
|
|
||||||
DHT_Unified dht(DHTPIN, DHTTYPE);
|
|
||||||
|
|
||||||
uint32_t delayMS;
|
|
||||||
#define TRIGGER_PIN 0
|
|
||||||
#define FRECUENCY 2000
|
|
||||||
char *AP="TEST_BQ";
|
|
||||||
String prefix="rel";
|
|
||||||
const char WiFiAPPSK[] = "prueba";
|
|
||||||
|
|
||||||
WiFiManager wifiManager;
|
|
||||||
|
|
||||||
#define RELAY1 12
|
|
||||||
#define RELAY2 13
|
|
||||||
|
|
||||||
#define MEASUREMENT_TIME 30000 // Time in milisecons
|
|
||||||
|
|
||||||
float Temperature,Humidity;
|
|
||||||
TickerScheduler ts(1);
|
|
||||||
|
|
||||||
/****************************************
|
|
||||||
* Auxiliar Functions
|
|
||||||
****************************************/
|
|
||||||
|
|
||||||
//void configWiFi(){
|
|
||||||
// wifiManager.resetSettings();
|
|
||||||
// if(!wifiManager.autoConnect(AP,WiFiAPPSK)) {
|
|
||||||
// Serial.println("Reconfiguration called");
|
|
||||||
// delay(3000);
|
|
||||||
// //reset and try again, or maybe put it to deep sleep
|
|
||||||
// ESP.reset();
|
|
||||||
// delay(15000);
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
void callback(char* topic, byte* payload, unsigned int length) {
|
|
||||||
Serial.print("Message arrived");
|
|
||||||
// handle message arrived
|
|
||||||
String text = "";
|
|
||||||
for (int i = 0; i < length; i++)
|
|
||||||
text.concat((char)payload[i]);
|
|
||||||
Serial.println(text);
|
|
||||||
text.replace(" ", "");
|
|
||||||
text.toUpperCase();
|
|
||||||
if (text.indexOf("\"KEY\":\"REL1\"") >= 0) {
|
|
||||||
if (text.indexOf("\"VALUE\":\"ON\"") >= 0) digitalWrite(RELAY1,HIGH);
|
|
||||||
else if (text.indexOf("\"VALUE\":\"OFF\"") >= 0) digitalWrite(RELAY1,LOW);
|
|
||||||
}
|
|
||||||
else if (text.indexOf("\"KEY\":\"REL2\"") >= 0) {
|
|
||||||
if (text.indexOf("\"VALUE\":\"ON\"") >= 0) digitalWrite(RELAY2,HIGH);
|
|
||||||
else if (text.indexOf("\"VALUE\":\"OFF\"") >= 0) digitalWrite(RELAY2,LOW);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
float temperatureMeasurement(sensors_event_t event, DHT_Unified dht){
|
|
||||||
// Get temperature event and print its value.
|
|
||||||
dht.temperature().getEvent(&event);
|
|
||||||
if (isnan(event.temperature)) {
|
|
||||||
Serial.println("Error reading temperature!");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
Serial.print("Temperature: ");
|
|
||||||
Serial.print(event.temperature);
|
|
||||||
Serial.println(" *C");
|
|
||||||
return event.temperature;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
float humidityMeasurement(sensors_event_t event, DHT_Unified dht){
|
|
||||||
// Get humidity event and print its value.
|
|
||||||
dht.humidity().getEvent(&event);
|
|
||||||
if (isnan(event.relative_humidity)) {
|
|
||||||
Serial.println("Error reading humidity!");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
Serial.print("Humidity: ");
|
|
||||||
Serial.print(event.relative_humidity);
|
|
||||||
Serial.println("%");
|
|
||||||
return event.relative_humidity;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void measureAndSend(){
|
|
||||||
sensors_event_t event;
|
|
||||||
Temperature=temperatureMeasurement(event,dht);
|
|
||||||
Humidity=humidityMeasurement(event,dht);
|
|
||||||
client.add("Temperature", Temperature);
|
|
||||||
client.add("Humidity", Humidity);
|
|
||||||
client.publish();
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************
|
|
||||||
* Main Functions
|
|
||||||
****************************************/
|
|
||||||
|
|
||||||
|
|
||||||
void setup() {
|
|
||||||
// put your setup code here, to run once:
|
|
||||||
Serial.begin(115200);
|
|
||||||
delay(100);
|
|
||||||
pinMode(RELAY1,OUTPUT);
|
|
||||||
pinMode(RELAY2,OUTPUT);
|
|
||||||
|
|
||||||
dht.begin();
|
|
||||||
sensor_t sensor;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// pinMode(TRIGGER_PIN, INPUT);
|
|
||||||
// attachInterrupt(digitalPinToInterrupt(TRIGGER_PIN), configWiFi, RISING);
|
|
||||||
//
|
|
||||||
// //sets timeout until configuration portal gets turned off
|
|
||||||
// //useful to make it all retry or go to sleep
|
|
||||||
// //in seconds
|
|
||||||
// wifiManager.setTimeout(280);
|
|
||||||
//
|
|
||||||
// //fetches ssid and pass and tries to connect
|
|
||||||
// //if it does not connect it starts an access point with the specified name
|
|
||||||
// //here "AutoConnectAP"
|
|
||||||
// //and goes into a blocking loop awaiting configuration
|
|
||||||
// if(!wifiManager.autoConnect(AP,WiFiAPPSK)) {
|
|
||||||
// Serial.println("failed to connect and hit timeout");
|
|
||||||
// delay(3000);
|
|
||||||
// //reset and try again, or maybe put it to deep sleep
|
|
||||||
// //ESP.reset();
|
|
||||||
// delay(FRECUENCY);
|
|
||||||
// }
|
|
||||||
// //if you get here you have connected to the WiFi
|
|
||||||
// Serial.println("connected...yeey :)");
|
|
||||||
|
|
||||||
client.wifiConnection(WIFINAME, WIFIPASS);
|
|
||||||
|
|
||||||
//client.wifiConnection2();
|
|
||||||
client.begin(callback);
|
|
||||||
client.subscribe(); //Insert the dataSource and Variable's Labels
|
|
||||||
|
|
||||||
ts.add(0, MEASUREMENT_TIME, [&](void*) { measureAndSend(); }, nullptr, false);
|
|
||||||
ts.enableAll();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void loop() {
|
|
||||||
// put your main code here, to run repeatedly:
|
|
||||||
ts.update();
|
|
||||||
|
|
||||||
if(!client.connected()){
|
|
||||||
client.reconnect();
|
|
||||||
client.subscribe(); //Insert the dataSource and Variable's Labels
|
|
||||||
}
|
|
||||||
client.loop();
|
|
||||||
|
|
||||||
}
|
|
||||||
16
lib/GyverFilters/examples/GFilterRA/GFilterRA.ino
Normal file
16
lib/GyverFilters/examples/GFilterRA/GFilterRA.ino
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
#include "GyverFilters.h"
|
||||||
|
GFilterRA analog0; // фильтр назовём analog0
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(9600);
|
||||||
|
|
||||||
|
// установка коэффициента фильтрации (0.0... 1.0). Чем меньше, тем плавнее фильтр
|
||||||
|
analog0.setCoef(0.01);
|
||||||
|
|
||||||
|
// установка шага фильтрации (мс). Чем меньше, тем резче фильтр
|
||||||
|
analog0.setStep(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
Serial.println(analog0.filteredTime(analogRead(0)));
|
||||||
|
}
|
||||||
32
lib/GyverFilters/examples/GLinear_arrays/GLinear_arrays.ino
Normal file
32
lib/GyverFilters/examples/GLinear_arrays/GLinear_arrays.ino
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
Пример линейной аппроксимации методом наименьших квадратов
|
||||||
|
Два массива: по оси Х и по оси У
|
||||||
|
Линейная аппроксимация повозоляет получить уравнение прямой,
|
||||||
|
равноудалённой от точек на плоскости ХУ. Удобно для расчёта
|
||||||
|
роста изменяющейся шумящей величины. Уравнение вида у = A*x + B
|
||||||
|
В папке с данным примером есть скриншот из excel,
|
||||||
|
иллюстрирующий работу аппроксимации с такими же исходными
|
||||||
|
*/
|
||||||
|
|
||||||
|
// два массива с данными (одинаковой размероности и размера)
|
||||||
|
int x_array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
|
||||||
|
int y_array[] = {1, 5, 2, 8, 3, 9, 10, 5, 15, 12};
|
||||||
|
|
||||||
|
#include <GyverFilters.h>
|
||||||
|
GLinear<int> test; // указываем тип данных в <>
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(9600);
|
||||||
|
|
||||||
|
// передаём массивы и размер одного из них
|
||||||
|
test.compute((int*)x_array, (int*)y_array, sizeof(x_array));
|
||||||
|
|
||||||
|
// Уравнение вида у = A*x + B
|
||||||
|
Serial.println(test.getA()); // получить коэффициент А
|
||||||
|
Serial.println(test.getB()); // получить коэффициент В
|
||||||
|
Serial.println(test.getDelta()); // получить изменение (аппроксимированное)
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
|
||||||
|
}
|
||||||
BIN
lib/GyverFilters/examples/GLinear_arrays/excel.jpg
Normal file
BIN
lib/GyverFilters/examples/GLinear_arrays/excel.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 48 KiB |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user