diff --git a/data/config.json b/data/config.json
index 180bdcd3..589bab8c 100644
--- a/data/config.json
+++ b/data/config.json
@@ -1,10 +1,10 @@
{
"name": "IoTmanager",
"chipID": "",
- "ssidAP": "WiFi2",
- "passwordAP": "",
- "ssid": "rise",
- "password": "hostel3333",
+ "apssid": "IoTmanager",
+ "appass": "",
+ "routerssid": "rise",
+ "routerpass": "hostel3333",
"timezone": 2,
"ntp": "pool.ntp.org",
"mqttServer": "91.204.228.124",
@@ -12,9 +12,10 @@
"mqttPrefix": "/rise",
"mqttUser": "test",
"mqttPass": "test",
- "scenario": "1",
- "pushingbox_id": "v7C133E426B0C69E",
- "web_login": "admin",
- "web_pass": "admin",
- "udponoff": "1"
+ "scen": "1",
+ "pushingboxid": "v7C133E426B0C69E",
+ "weblogin": "admin",
+ "webpass": "admin",
+ "udponoff": "1",
+ "blink":"1"
}
\ No newline at end of file
diff --git a/data/configs/1-relay.c.txt b/data/configs/1-relay.c.txt
new file mode 100644
index 00000000..733f4c95
--- /dev/null
+++ b/data/configs/1-relay.c.txt
@@ -0,0 +1,3 @@
+button 1 5 Включить#реле Реле 0 1
+
+//это простая кнопка номер 1 управляющая пином 5 имеющая начальное состояние 0
\ No newline at end of file
diff --git a/data/configs/1-relay.s.txt b/data/configs/1-relay.s.txt
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/data/configs/1-relay.s.txt
@@ -0,0 +1 @@
+
diff --git a/data/configs/10-dht22.c.txt b/data/configs/10-dht22.c.txt
new file mode 100644
index 00000000..a0124e41
--- /dev/null
+++ b/data/configs/10-dht22.c.txt
@@ -0,0 +1,7 @@
+dhtT t 2 dht22 Температура#DHT,#t°C Датчики any-data 1
+dhtH h 2 dht22 Влажность#DHT,#t°C Датчики any-data 2
+dhtComfort Степень#комфорта: Датчики 3
+dhtPerception Восприятие: Датчики 4
+dhtDewpoint Точка#росы: Датчики 5
+logging t 1 50 Температура Датчики 6
+logging h 1 50 Влажность Датчики 7
\ No newline at end of file
diff --git a/data/configs/10-dht22.s.txt b/data/configs/10-dht22.s.txt
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/data/configs/10-dht22.s.txt
@@ -0,0 +1 @@
+
diff --git a/data/configs/11-analog.c.txt b/data/configs/11-analog.c.txt
new file mode 100644
index 00000000..429ccada
--- /dev/null
+++ b/data/configs/11-analog.c.txt
@@ -0,0 +1,8 @@
+analog adc 0 Аналоговый#вход,#% Датчики progress-round 310 620 1 100 1
+logging adc 5 100 Аналоговый#вход Датчики 2
+
+//если датчик углекислого газа выдает напряжение от 1 вольта до 2 вольт, то значит
+//значение чтения аналогового входа будут примерно равным
+//при 1 вольте - 310, а при 2 вольтах - 620 (считаем по пропорции)
+//данная строка переведет диапазон 310-620 в диапазон 1-100 и отобразит в приложении
+//варианты отображения: any-data, progress-round, progress-line, fill-gauge
diff --git a/data/configs/11-analog.s.txt b/data/configs/11-analog.s.txt
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/data/configs/11-analog.s.txt
@@ -0,0 +1 @@
+
diff --git a/data/configs/12-bmp280.c.txt b/data/configs/12-bmp280.c.txt
new file mode 100644
index 00000000..16956455
--- /dev/null
+++ b/data/configs/12-bmp280.c.txt
@@ -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)
\ No newline at end of file
diff --git a/data/configs/12-bmp280.s.txt b/data/configs/12-bmp280.s.txt
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/data/configs/12-bmp280.s.txt
@@ -0,0 +1 @@
+
diff --git a/data/configs/13-bme280.c.txt b/data/configs/13-bme280.c.txt
new file mode 100644
index 00000000..e8414f61
--- /dev/null
+++ b/data/configs/13-bme280.c.txt
@@ -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)
\ No newline at end of file
diff --git a/data/configs/13-bme280.s.txt b/data/configs/13-bme280.s.txt
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/data/configs/13-bme280.s.txt
@@ -0,0 +1 @@
+
diff --git a/data/configs/14-dallas.c.txt b/data/configs/14-dallas.c.txt
new file mode 100644
index 00000000..e6686b14
--- /dev/null
+++ b/data/configs/14-dallas.c.txt
@@ -0,0 +1,5 @@
+dallas 2 Водонагреватель,#t°C Датчики any-data 1
+logging dallas 1 100 Температура Датчики 2
+
+//2 - номер пина датчика
+//варианты отображения: any-data, progress-round, progress-line, fill-gauge
\ No newline at end of file
diff --git a/data/configs/14-dallas.s.txt b/data/configs/14-dallas.s.txt
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/data/configs/14-dallas.s.txt
@@ -0,0 +1 @@
+
diff --git a/data/configs/15-termostat.c.txt b/data/configs/15-termostat.c.txt
new file mode 100644
index 00000000..af75deeb
--- /dev/null
+++ b/data/configs/15-termostat.c.txt
@@ -0,0 +1,12 @@
+dallas 2 Водонагреватель,#t°C Термостат any-data 1
+logging dallas 5 100 Температура Термостат 2
+inputDigit digit1 При#скольки#выключить? Термостат 40 3
+inputDigit digit2 При#скольки#включить? Термостат 20 4
+button 1 5 Нагреватель Термостат 0 5
+button 2 line1,line2, Автоматический#режим Термостат 1 6
+
+//2 - номер пина датчика
+//5 - номер пина реле
+//это термостат который будет держать температуру между двумя
+//установленными в приложении значениями, так же можно выключить
+//автоматический режим, и тогда нагреватель будет управляться в ручную
\ No newline at end of file
diff --git a/data/configs/15-termostat.s.txt b/data/configs/15-termostat.s.txt
new file mode 100644
index 00000000..60782623
--- /dev/null
+++ b/data/configs/15-termostat.s.txt
@@ -0,0 +1,6 @@
+dallas > digit1
+buttonSet 1 0
+end
+dallas < digit2
+buttonSet 1 1
+end
\ No newline at end of file
diff --git a/data/configs/16-ultrasonic.c.txt b/data/configs/16-ultrasonic.c.txt
new file mode 100644
index 00000000..4eacdf30
--- /dev/null
+++ b/data/configs/16-ultrasonic.c.txt
@@ -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
\ No newline at end of file
diff --git a/data/configs/16-ultrasonic.s.txt b/data/configs/16-ultrasonic.s.txt
new file mode 100644
index 00000000..babd78ab
--- /dev/null
+++ b/data/configs/16-ultrasonic.s.txt
@@ -0,0 +1,6 @@
+p > digit1
+buttonSet 1 0
+end
+p < digit2
+buttonSet 1 1
+end
\ No newline at end of file
diff --git a/data/configs/17-moution.c.txt b/data/configs/17-moution.c.txt
new file mode 100644
index 00000000..fa0b78ac
--- /dev/null
+++ b/data/configs/17-moution.c.txt
@@ -0,0 +1,11 @@
+button 1 5 Прихожая Освещение 0 1
+inputDigit digit1 Задержка#выключения Освещение 30 2
+switch 1 0 10
+
+//0 - номер пина датчика движения
+//5 - номер пина реле
+//при срабатывании датчика движения включится реле и обратный таймер на 30 сек
+//если движение не будет обнаружено повтороно в течении 30 секунд - свет выключится
+//если движение повторится в течении 30 секунд то таймер продлится опять на 30 сек
+//свет выключится только в том случае если в комнате все замрет на 30 сек
+//задержку выключения можно будет настраивать в приложении
\ No newline at end of file
diff --git a/data/configs/17-moution.s.txt b/data/configs/17-moution.s.txt
new file mode 100644
index 00000000..899b7035
--- /dev/null
+++ b/data/configs/17-moution.s.txt
@@ -0,0 +1,7 @@
+switch1 = 1
+timerStart 1 digit1 sec
+buttonSet 1 1
+end
+timer1 = 0
+buttonSet 1 0
+end
\ No newline at end of file
diff --git a/data/configs/18-moution.c.txt b/data/configs/18-moution.c.txt
new file mode 100644
index 00000000..bc7d8192
--- /dev/null
+++ b/data/configs/18-moution.c.txt
@@ -0,0 +1,12 @@
+switch 1 0 20
+text 1 Вход: Охрана 1
+textSet 1 не#обнаружено-time
+button 1 na Сбросить Охрана 0 2
+button 2 line3, Включить#push Охрана 1 3
+
+//0 - номер пина датчика
+//при срабатывании датчика движения устройство пошлет пуш и в приложении будет
+//написано в текстовом поле, что движение было обнаружено
+//так же будет зафиксирован момент времени срабатывания датчика
+//в приложении можно отключать отправку пуш сообщений на тот случай если дома хозяин
+//перевести датчик снова в режим ожидания движения можно нажав кнопку сброса в приложении
\ No newline at end of file
diff --git a/data/configs/18-moution.s.txt b/data/configs/18-moution.s.txt
new file mode 100644
index 00000000..f764dc9d
--- /dev/null
+++ b/data/configs/18-moution.s.txt
@@ -0,0 +1,10 @@
+switch1 = 1
+textSet 1 обнаружено#движение-time
+end
+button1 = 1
+textSet 1 не#обнаружено-time
+buttonSet 1 0
+end
+switch1 = 1
+push Внимание обнаружено#движение!
+end
\ No newline at end of file
diff --git a/data/configs/19-stepper.c.txt b/data/configs/19-stepper.c.txt
new file mode 100644
index 00000000..82b41ae2
--- /dev/null
+++ b/data/configs/19-stepper.c.txt
@@ -0,0 +1,17 @@
+stepper 1 12 4
+stepper 2 13 5
+button 1 na Открыть#штору#1 Шторы 0 1
+button 2 na Открыть#штору#2 Шторы 0 2
+
+//для подключения необходим драйвер шагового двигателя A4988
+
+//stepper 1 12 4 шаговый двигатель с параметрами: 1 - номер шагового двигателя,
+//12 - номер пина количества шагов, 4 - номер пина направления
+
+//stepper 2 13 5 шаговый двигатель с параметрами: 2 - номер шагового двигателя,
+//13 - номер пина количества шагов, 5 - номер пина направления
+
+//stepperSet 1 200 5 - прокрутить шаговик номер 1 на 200 шагов по часовой стрелке
+//с задержкой между шагами 5 милисекунд (чем меньше задержка тем больше скорость)
+//если поставить -200 то будет вращаться против часовой стрелки
+//можно подключить не более двух шаговиков
\ No newline at end of file
diff --git a/data/configs/19-stepper.s.txt b/data/configs/19-stepper.s.txt
new file mode 100644
index 00000000..16e7cfa6
--- /dev/null
+++ b/data/configs/19-stepper.s.txt
@@ -0,0 +1,12 @@
+button1 = 1
+stepperSet 1 200 1
+end
+button1 = 0
+stepperSet 1 -200 1
+end
+button2 = 1
+stepperSet 2 200 1
+end
+button2 = 0
+stepperSet 2 -200 1
+end
\ No newline at end of file
diff --git a/data/configs/2-relay.c.txt b/data/configs/2-relay.c.txt
new file mode 100644
index 00000000..1e54f5dd
--- /dev/null
+++ b/data/configs/2-relay.c.txt
@@ -0,0 +1,6 @@
+inputTime time1 Во#сколько#включить? Таймеры 20-30-00 1
+inputTime time2 Во#сколько#выключить? Таймеры 20-35-00 2
+button 1 5 Кнопка#(по#таймеру) Таймеры 0 3
+
+//время в приложение необходимо вводить в строгом формате: ЧЧ-ММ-СС
+//можно создавать любое количество таймеров, копируя строку inputTime...
\ No newline at end of file
diff --git a/data/configs/2-relay.s.txt b/data/configs/2-relay.s.txt
new file mode 100644
index 00000000..5deba589
--- /dev/null
+++ b/data/configs/2-relay.s.txt
@@ -0,0 +1,6 @@
+timenow = time1
+buttonSet 1 1
+end
+timenow = time2
+buttonSet 1 0
+end
diff --git a/data/configs/20-servo.c.txt b/data/configs/20-servo.c.txt
new file mode 100644
index 00000000..5d45aea0
--- /dev/null
+++ b/data/configs/20-servo.c.txt
@@ -0,0 +1,17 @@
+servo 1 12 50 Мой#сервопривод Сервоприводы 0 100 0 180 1
+servo 2 13 50 Мой#сервопривод Сервоприводы 0 100 0 180 2
+button 1 na Открыть1 Сервоприводы 0 3
+button 2 na Открыть2 Сервоприводы 0 4
+
+//Можно создавать не более двух сервоприводов на одном устройстве.
+//1 - номер привода
+//12 - номер пина
+//50 - начальное значение в процентах
+
+//0 - 100 диапазон ползунка
+//0 - 180 диапазон угла
+
+//Представим ситуацию когда есть некая заслонка и при угле в 30 градусов она закрыта,
+//а при угле в 90 градусов открыта. В этом случае необходимо написать
+//0 100 30 90 и тогда поставив ползунок в 0 % серва встанет в положение 30 градусов,
+//а если поставить ползунок в 100 % серва встанет в положение 90 градусов.
\ No newline at end of file
diff --git a/data/configs/20-servo.s.txt b/data/configs/20-servo.s.txt
new file mode 100644
index 00000000..b4340463
--- /dev/null
+++ b/data/configs/20-servo.s.txt
@@ -0,0 +1,12 @@
+button1 = 1
+servoSet 1 100
+end
+button1 = 0
+servoSet 1 0
+end
+button2 = 1
+servoSet 2 100
+end
+button2 = 0
+servoSet 2 0
+end
\ No newline at end of file
diff --git a/data/configs/3-relay.c.txt b/data/configs/3-relay.c.txt
new file mode 100644
index 00000000..9f0c5c45
--- /dev/null
+++ b/data/configs/3-relay.c.txt
@@ -0,0 +1,4 @@
+button 1 5 Вкл#на#время Таймеры 0 1
+inputDigit digit1 Через#сколько#секунд#выключить? Таймеры 5 2
+
+//в сценариях можно поменять на sec, min или hours если нужны другие размерности времени
\ No newline at end of file
diff --git a/data/configs/3-relay.s.txt b/data/configs/3-relay.s.txt
new file mode 100644
index 00000000..f8ced990
--- /dev/null
+++ b/data/configs/3-relay.s.txt
@@ -0,0 +1,6 @@
+button1 = 1
+timerStart 1 digit1 sec
+end
+timer1 = 0
+buttonSet 1 0
+end
\ No newline at end of file
diff --git a/data/configs/4-relay.c.txt b/data/configs/4-relay.c.txt
new file mode 100644
index 00000000..b0978b0d
--- /dev/null
+++ b/data/configs/4-relay.c.txt
@@ -0,0 +1,3 @@
+button 1 na Включить#все Освещение 0 1
+
+//при нажатии на эту кнопку пины номер 5 и 13 поведут себя как установленно в сценариях
\ No newline at end of file
diff --git a/data/configs/4-relay.s.txt b/data/configs/4-relay.s.txt
new file mode 100644
index 00000000..276282c3
--- /dev/null
+++ b/data/configs/4-relay.s.txt
@@ -0,0 +1,8 @@
+button1 = 1
+pinSet 5 1
+pinSet 13 0
+end
+button1 = 0
+pinSet 5 0
+pinSet 13 1
+end
\ No newline at end of file
diff --git a/data/configs/5-relay.c.txt b/data/configs/5-relay.c.txt
new file mode 100644
index 00000000..5ef7e5f5
--- /dev/null
+++ b/data/configs/5-relay.c.txt
@@ -0,0 +1,4 @@
+button 1 13 Включить#реле Реле 0 1
+switch 1 0 10
+
+//можно управлять реле на пине 13 кнопкой на пине 0 или кнопкой в приложении
\ No newline at end of file
diff --git a/data/configs/5-relay.s.txt b/data/configs/5-relay.s.txt
new file mode 100644
index 00000000..093de1fe
--- /dev/null
+++ b/data/configs/5-relay.s.txt
@@ -0,0 +1,3 @@
+switch1 = 1
+buttonChange 1
+end
\ No newline at end of file
diff --git a/data/configs/6-relay.c.txt b/data/configs/6-relay.c.txt
new file mode 100644
index 00000000..db812455
--- /dev/null
+++ b/data/configs/6-relay.c.txt
@@ -0,0 +1,6 @@
+button 1 5 Включить#все Реле 0 1
+
+
+//что бы использовать эту конфигурацию на другой esp необходимо активировать пресет
+//"Вкл. выкл. локального реле", затем в сценарии данного модуля подставить Device ID
+//того esp, кнопка на этом девайсе будет выключать другие устройства по воздуху
\ No newline at end of file
diff --git a/data/configs/6-relay.s.txt b/data/configs/6-relay.s.txt
new file mode 100644
index 00000000..9eb30933
--- /dev/null
+++ b/data/configs/6-relay.s.txt
@@ -0,0 +1,8 @@
+button1 = 1
+mqtt 3233662-1589485 buttonSet_1_1
+mqtt 2233662-1589486 buttonSet_1_1
+end
+button1 = 0
+mqtt 3233662-1589485 buttonSet_1_0
+mqtt 2233662-1589486 buttonSet_1_0
+end
\ No newline at end of file
diff --git a/data/configs/7-relay.c.txt b/data/configs/7-relay.c.txt
new file mode 100644
index 00000000..739a1424
--- /dev/null
+++ b/data/configs/7-relay.c.txt
@@ -0,0 +1,6 @@
+switch 1 0 10
+
+//что бы использовать эту конфигурацию на другой esp необходимо активировать пресет
+//"Вкл. выкл. локального реле", затем в сценарии данного модуля подставить Device ID
+//того esp, к данному модулю нужно подключить кнопку к пину 0 и тогда
+//один девайс будет управлять другим по воздуху
\ No newline at end of file
diff --git a/data/configs/7-relay.s.txt b/data/configs/7-relay.s.txt
new file mode 100644
index 00000000..0c48cbdf
--- /dev/null
+++ b/data/configs/7-relay.s.txt
@@ -0,0 +1,4 @@
+switch1 = 1
+mqtt 3233662-1589485 buttonChange_1
+mqtt 2233662-1589486 buttonChange_1
+end
\ No newline at end of file
diff --git a/data/configs/8-pwm.c.txt b/data/configs/8-pwm.c.txt
new file mode 100644
index 00000000..09eef72c
--- /dev/null
+++ b/data/configs/8-pwm.c.txt
@@ -0,0 +1,6 @@
+pwm 1 3 Яркость#коредор: Реле 1023 1
+pwm 2 4 Яркость#ванная: Реле 510 2
+
+//в приложении появятся ползунки, соответствующее значение pwm
+//будет установленно на пинах 3 и 4
+//1023 и 510 это начальные значения после загрузки модуля
\ No newline at end of file
diff --git a/data/configs/8-pwm.s.txt b/data/configs/8-pwm.s.txt
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/data/configs/8-pwm.s.txt
@@ -0,0 +1 @@
+
diff --git a/data/configs/9-dht11.c.txt b/data/configs/9-dht11.c.txt
new file mode 100644
index 00000000..ce8ec1a8
--- /dev/null
+++ b/data/configs/9-dht11.c.txt
@@ -0,0 +1,7 @@
+dhtT t 2 dht11 Температура#DHT,#t°C Датчики any-data 1
+dhtH h 2 dht11 Влажность#DHT,#t°C Датчики any-data 2
+dhtComfort Степень#комфорта: Датчики 3
+dhtPerception Восприятие: Датчики 4
+dhtDewpoint Точка#росы: Датчики 5
+logging t 1 50 Температура Датчики 6
+logging h 1 50 Влажность Датчики 7
\ No newline at end of file
diff --git a/data/configs/9-dht11.s.txt b/data/configs/9-dht11.s.txt
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/data/configs/9-dht11.s.txt
@@ -0,0 +1 @@
+
diff --git a/data/configs/firmware.c.txt b/data/configs/firmware.c.txt
new file mode 100644
index 00000000..99beb0be
--- /dev/null
+++ b/data/configs/firmware.c.txt
@@ -0,0 +1,12 @@
+button 1 na Включить#все Реле 0 1
+button 2 13 Прихожая Реле 0 2
+button 3 14 Кухня Реле 0 3
+pwm 1 3 Яркость#коредор: Реле 1023 4
+pwm 2 4 Яркость#ванная: Реле 510 5
+analog adc 0 Аналоговый#вход Датчики fill-gauge 1 1023 1 1023 6
+logging adc 1 100 Аналоговый#вход Датчики 7
+
+//Это демо конфигурация. В ней показано как связать кнопки c помощью сценариев
+//Кнопка номер 1 связана с кнопкой 2, 3 и с pwm 2
+//Так же продемонстрированна система логгирования данных строкой logging
+//1 - это интервал между точками в минутах, 100 это количество точек
\ No newline at end of file
diff --git a/data/configs/firmware.s.txt b/data/configs/firmware.s.txt
new file mode 100644
index 00000000..4927ac1e
--- /dev/null
+++ b/data/configs/firmware.s.txt
@@ -0,0 +1,13 @@
+button1 = 1
+buttonSet 2 1
+buttonSet 3 1
+pwmSet 2 1024
+end
+button1 = 0
+buttonSet 2 0
+buttonSet 3 0
+pwmSet 2 0
+end
+adc > 50
+buttonSet 2 1
+end
\ No newline at end of file
diff --git a/data/configuration.json b/data/configuration.json
deleted file mode 100644
index fb4381dd..00000000
--- a/data/configuration.json
+++ /dev/null
@@ -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": {
- "#": "Выбирите то, во что Вы хотите превратить это устройство ",
- "/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"
- }
- ]
-}
\ No newline at end of file
diff --git a/data/css/build.css.gz b/data/css/build.css.gz
index fc58d776..4bf6e060 100644
Binary files a/data/css/build.css.gz and b/data/css/build.css.gz differ
diff --git a/data/dev.json b/data/dev.json
deleted file mode 100644
index 9b474644..00000000
--- a/data/dev.json
+++ /dev/null
@@ -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"
- }
- ]
-}
\ No newline at end of file
diff --git a/data/icon.jpeg b/data/icon.jpeg
new file mode 100644
index 00000000..abdd18c0
Binary files /dev/null and b/data/icon.jpeg differ
diff --git a/data/index.htm.gz b/data/index.htm.gz
index 0e9eb070..139f0040 100644
Binary files a/data/index.htm.gz and b/data/index.htm.gz differ
diff --git a/data/index.json b/data/index.json
index 26adcc1a..1b6413ad 100644
--- a/data/index.json
+++ b/data/index.json
@@ -1,7 +1,8 @@
{
"configs": [
"/config.live.json",
- "/config.setup.json"
+ "/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",
@@ -9,104 +10,60 @@
{
"type": "h5",
"title": "{{name}}",
- "class": "alert-warning"
+ "class": "alert-default"
},
{
- "type": "h4",
- "title": "Device ID: {{chipID}}"
- },
- {
- "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": "text",
+ "class": "alert alert-light",
+ "title": "
"
+ },
{
"type": "link",
"title": "Конфигурация устройства",
- "action": "/?configuration",
- "class": "btn btn-block btn-primary"
- },
- {
- "type": "hr"
+ "action": "/?set.device",
+ "class": "btn btn-block btn-default"
},
{
"type": "link",
"title": "Список других устройств в сети",
- "action": "/?dev",
- "class": "btn btn-block btn-success"
+ "action": "/?set.udp",
+ "class": "btn btn-block btn-default"
},
{
"type": "link",
"title": "Конфигурация WIFI",
- "action": "/?setup",
- "class": "btn btn-block btn-success"
+ "action": "/?set.wifi",
+ "class": "btn btn-block btn-default"
},
{
"type": "link",
"title": "Конфигурация MQTT",
- "action": "/?mqtt",
- "class": "btn btn-block btn-success"
+ "action": "/?set.mqtt",
+ "class": "btn btn-block btn-default"
},
{
"type": "link",
"title": "Конфигурация push",
- "action": "/?pushingbox",
- "class": "btn btn-block btn-success"
+ "action": "/?set.push",
+ "class": "btn btn-block btn-default"
},
{
"type": "link",
"title": "Утилиты",
- "action": "/?utilities",
- "class": "btn btn-block btn-success"
- },
- {
- "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"
+ "action": "/?set.utilities",
+ "class": "btn btn-block btn-default"
},
{
"type": "link",
"title": "Скачать приложение IoT Manager для android",
"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",
"title": "Скачать приложение IoT Manager для iphone",
"action": "https://apps.apple.com/ru/app/iot-manager/id1155934877",
- "class": "btn btn-block btn-warning"
+ "class": "btn btn-block btn-default"
}
]
}
diff --git a/data/js/build.chart.js.gz b/data/js/build.chart.js.gz
index bb94fbc9..ac021668 100644
Binary files a/data/js/build.chart.js.gz and b/data/js/build.chart.js.gz differ
diff --git a/data/js/function.js.gz b/data/js/function.js.gz
index 7e661ff6..443fbca2 100644
Binary files a/data/js/function.js.gz and b/data/js/function.js.gz differ
diff --git a/data/lang/lang.ru.json b/data/lang/lang.ru.json
new file mode 100644
index 00000000..2c089bcb
--- /dev/null
+++ b/data/lang/lang.ru.json
@@ -0,0 +1,39 @@
+{
+ "SetDevConf": "Конфигурация устройства",
+ "SetDevPreset": "Выберите из списка подходящий пресет кофигурации",
+
+ "ButSave":"Сохранить",
+ "ButMainPage":"Главная",
+
+
+ "SetUDPList": "Список других устройств в сети:",
+ "SetUDPWarn1": "После нажатия на кнопку переформировать список устройств ждите примерно минуту, а затем обновите страницу и список появится вновь",
+
+ "SetUDPUpdateList":"Переформировать список устройств",
+ "SetUDPUpdatePage":"Обновить страницу",
+ "SetUDPNameOfDev":"Имя этого устройства:",
+ "SetUDPDateExchange":"Включить обмен данными между устройствами",
+ "SetUDPWarn2":"Если обмен данными включен, то устройства будут обмениваться широковещательными пакетами udp для формирования списка устройств и для осуществления посылки настроек mqtt. Данный обмен создает дополнительную нагрузку на wifi сеть.",
+
+ "SetWiFiNameOfDev":"Имя устройства:",
+ "SetWiFiRouterConnect":"Подключение к WiFi роутеру:",
+ "SetWiFiAccessPoint":"Точка доступа:",
+ "SetWiFiWeb":"Логин и пароль web interface:",
+ "SetWiFiTimeZone":"Временная зона:",
+ "SetWiFiNTP":"Сервер NTP:",
+ "SetWiFiWarn1":"Имя устройства должно состоять из английских букв и иметь длинну от 6 до 12 символов",
+ "SetWiFiWarn2":"После того как вы введете логин пароль от вашего wifi роутера необходимо нажать кнопку сохранить, а затем обязательно нажать кнопку перезагрузить устройство внизу этой страницы",
+ "SetWiFiWarn3":"Устройство постоянно сканирует сеть на наличие wifi. Если роутер отключен, то устройство автоматически перейдет в режим точки доступа. Когда wifi появится устройство автоматически подключится к роутеру снова, и выключит точку доступа",
+ "SetWiFiWarn4":"После изменения поля NTP сервер необходимо перезагрузить устройство",
+ "SetWiFiWarn5":"Светодиод статуса подключения показывает четыре состояния подключения:
1. мигает редко - идет подключение к wifi
2. мигает часто - идет подключение к серверу mqtt
3. горит постоянно - модуль в режиме точки доступа,
4. не горит - модуль подключен к wifi и к mqtt.
Светодиод подключен к gpio2. Если галочка стоит - то использовать этот пин нельзя",
+
+ "SetMQTTServerName":"Имя сервера:",
+ "SetMQTTPort":"Номер порта:",
+ "SetMQTTPrefix":"Префикс:",
+ "SetMQTTUserName":"Имя пользователя:",
+ "SetMQTTPassword":"Пароль:",
+
+ "SetMQTTSendSettings":"Отправить настройки MQTT с этого устройства на все остальные",
+ "SetMQTTWarn1":"Обратите внимание что поле префикс может состоять только из одного слова и одного разделителя: /prefix, вариант вида: /prefix1/prefix2 работать не будет. После изменения поля prefix необходимо перезагрузить устройство",
+ "SetMQTTWarn2":"Прежде чем нажимать на кнопку Отправить настройки MQTT сохрание их, если Вы их меняли. Настройки получат и перезапишут все устройства в локальной сети"
+}
\ No newline at end of file
diff --git a/data/mqtt.json b/data/mqtt.json
deleted file mode 100644
index 0bd4acc5..00000000
--- a/data/mqtt.json
+++ /dev/null
@@ -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 может состоять только из одного слова и одного разделителя: /prefix, вариант вида: /prefix1/prefix2 работать не будет. После изменения поля 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": "Прежде чем нажимать на кнопку 'Отправить настройки MQTT' сохрание их, если Вы их меняли. Настройки получат и перезапишут все устройства в локальной сети"
- },
- {
- "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"
- }
- ]
-}
\ No newline at end of file
diff --git a/data/pushingbox.json b/data/pushingbox.json
deleted file mode 100644
index eac5a080..00000000
--- a/data/pushingbox.json
+++ /dev/null
@@ -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"
- }
- ]
-}
diff --git a/data/set.device.json b/data/set.device.json
new file mode 100644
index 00000000..7236fb0c
--- /dev/null
+++ b/data/set.device.json
@@ -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}}",
+ "/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"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/set.mqtt.json b/data/set.mqtt.json
new file mode 100644
index 00000000..a088c2dc
--- /dev/null
+++ b/data/set.mqtt.json
@@ -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": ""
+
+ },
+ {
+ "type": "text",
+ "style": "width:100%;float:left;",
+ "title": ""
+ },
+ {
+ "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"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/set.push.json b/data/set.push.json
new file mode 100644
index 00000000..555797e4
--- /dev/null
+++ b/data/set.push.json
@@ -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"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/set.udp.json b/data/set.udp.json
new file mode 100644
index 00000000..6bea3042
--- /dev/null
+++ b/data/set.udp.json
@@ -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": "",
+ "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": ""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/utilities.json b/data/set.utilities.json
similarity index 70%
rename from data/utilities.json
rename to data/set.utilities.json
index ee82a0c0..92769f85 100644
--- a/data/utilities.json
+++ b/data/set.utilities.json
@@ -1,7 +1,8 @@
{
"configs": [
"/config.live.json",
- "/config.setup.json"
+ "/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",
@@ -9,7 +10,13 @@
{
"type": "h5",
"title": "{{name}}",
- "class": "alert-warning"
+ "class": "alert-default"
+ },
+ {
+ "type": "link",
+ "title": "{{ButMainPage}}",
+ "action": "/",
+ "class": "btn btn-block btn-default"
},
{
"type": "hr"
@@ -25,17 +32,8 @@
{
"type": "link",
"title": "Сканировать",
- "action": "/init?arg=5",
- "class": "btn btn-block btn-success"
- },
- {
- "type": "hr"
- },
- {
- "type": "link",
- "title": "Главная",
- "action": "/",
- "class": "btn btn-block btn-danger"
+ "action": "/set?itoc",
+ "class": "btn btn-block btn-default"
}
]
}
\ No newline at end of file
diff --git a/data/set.wifi.json b/data/set.wifi.json
new file mode 100644
index 00000000..d68edc7f
--- /dev/null
+++ b/data/set.wifi.json
@@ -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": ""
+ },
+ {
+ "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": ""
+ },
+ {
+ "type": "hr"
+ },
+ {
+ "type": "checkbox",
+ "name": "blink",
+ "title": "Включить светодиод статуса подключения",
+ "action": "/set?blink=[[blink]]",
+ "state": "{{blink}}"
+ },
+ {
+ "type": "text",
+ "title": ""
+ },
+ {
+ "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": ""
+ },
+ {
+ "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": ""
+ },
+ {
+ "type": "hr"
+ },
+ {
+ "type": "link",
+ "title": "Перезагрузить устройство",
+ "action": "javascript:if(confirm(renameBlock(jsonResponse,'Перезагрузить?'))){send_request(this,'/set?device=ok');}",
+ "class": "btn btn-block btn-danger"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/setup.json b/data/setup.json
deleted file mode 100644
index 18ebf108..00000000
--- a/data/setup.json
+++ /dev/null
@@ -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": "После изменения поля 'NTP сервер' необходимо перезагрузить устройство"
- },
- {
- "type": "hr"
- },
- {
- "type": "link",
- "title": "Перезагрузить устройство",
- "action": "javascript:if(confirm(renameBlock(jsonResponse,'Перезагрузить?'))){send_request(this,'/restart?device=ok');}",
- "class": "btn btn-block btn-warning"
- }
- ]
-}
\ No newline at end of file
diff --git a/data/widgets/outstanding/widget.select.json b/data/widgets/outstanding/widget.select.json
new file mode 100644
index 00000000..c6531b70
--- /dev/null
+++ b/data/widgets/outstanding/widget.select.json
@@ -0,0 +1,7 @@
+{
+ "widget" : "select",
+ "size" : "small",
+ "fill" : "outline",
+ "options" : "["Zero item", "First item", "Second item"]",
+ "status" : 2
+}
\ No newline at end of file
diff --git a/include/Consts.h b/include/Consts.h
index c9ef6d63..30c750ae 100644
--- a/include/Consts.h
+++ b/include/Consts.h
@@ -1,4 +1,5 @@
#pragma once
+//Здесь хранятся все настройки прошивки
#define firmware_version "2.3.3"
diff --git a/include/Global.h b/include/Global.h
index 331d95cd..5bf3e39c 100644
--- a/include/Global.h
+++ b/include/Global.h
@@ -1,21 +1,27 @@
#pragma once
+//=========ПОДКЛЮЧЕНИЕ ОБЩИХ БИБЛИОТЕК===============
#include
#include
#include
#include
+extern AsyncWebServer server;
#include
#include
#include
#include
#include
#include
-
#include "Consts.h"
-
-/*
-* ESP8266
-*/
+#include
+#include "GyverFilters.h"
+#include
+#include
+#include
+#include
+#include
+#include
+//==============ESP8266 БИБЛИОТЕКИ===============
#ifdef ESP8266
#include
#include
@@ -29,10 +35,7 @@ WiFiUDP Udp;
#include
#endif
#endif
-
-/*
-* ESP32
-*/
+//==============ESP32 БИБЛИОТЕКИ===============
#ifdef ESP32
#include
#include
@@ -55,9 +58,63 @@ extern Servo myServo2;
#include
#endif
+
+
+//==============================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;
-// Global vars
+//AsyncWebSocket ws;
+
+//AsyncEventSource events;
+
+#define NUM_BUTTONS
+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;
+
+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;
@@ -107,83 +164,10 @@ extern boolean udp_data_parse;
extern boolean mqtt_send_settings_to_udp;
extern boolean i2c_scanning;
-#ifdef WS_enable
-extern AsyncWebSocket ws;
-#endif
-
-extern AsyncEventSource events;
-
extern int sensors_reading_map[15];
-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
-};
-extern TickerScheduler ts;
-
-extern WiFiClient espClient;
-extern PubSubClient client_mqtt;
-extern StringCommand sCmd;
-
-#define NUM_BUTTONS 6
-extern boolean but[NUM_BUTTONS];
-extern Bounce *buttons;
-
-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;
-
-#ifdef level_enable
-#include "GyverFilters.h"
-extern GMedian<10, int> medianFilter;
-#endif
-
-#include
-#include
-extern OneWire *oneWire;
-extern DallasTemperature sensors;
-
-#include
-extern DHTesp dht;
-
-#include
-
-#ifdef bmp_enable
-#include
-extern Adafruit_BMP280 bmp;
-extern Adafruit_Sensor *bmp_temp;
-extern Adafruit_Sensor *bmp_pressure;
-#endif
-
-#ifdef bme_enable
-#include
-extern Adafruit_BME280 bme;
-extern Adafruit_Sensor *bme_temp;
-extern Adafruit_Sensor *bme_pressure;
-extern Adafruit_Sensor *bme_humidity;
-#endif
-
-//#include
-//SoftwareSerial mySerial(14, 12);
+///////////////////////////////////// Functions////////////////////////////////////////////////////////////////////
// StringUtils
extern uint8_t hexStringToUint8(String hex);
@@ -381,4 +365,10 @@ extern void handleButton();
extern void handleScenario();
extern void handleUdp();
extern void do_upgrade_url();
-extern void do_upgrade();
\ No newline at end of file
+extern void do_upgrade();
+
+//uptime
+extern void handle_uptime();
+extern void handle_statistics();
+extern void uptime_init();
+extern void web_init();
\ No newline at end of file
diff --git a/lib/Arduino-UpTime/Changelog b/lib/Arduino-UpTime/Changelog
new file mode 100644
index 00000000..16c1e045
--- /dev/null
+++ b/lib/Arduino-UpTime/Changelog
@@ -0,0 +1,2 @@
+0.01 2019-01-14
+ - initial version
diff --git a/lib/Arduino-UpTime/Makefile b/lib/Arduino-UpTime/Makefile
new file mode 100644
index 00000000..3d0fb738
--- /dev/null
+++ b/lib/Arduino-UpTime/Makefile
@@ -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
diff --git a/lib/Arduino-UpTime/README b/lib/Arduino-UpTime/README
new file mode 100644
index 00000000..6a3fa83c
--- /dev/null
+++ b/lib/Arduino-UpTime/README
@@ -0,0 +1,99 @@
+NAME
+
+ UpTime.h - Arduino uptime and events in seconds
+
+SYNOPSIS
+
+ #include
+ #include // 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
+
diff --git a/lib/Arduino-UpTime/UpTime.cpp b/lib/Arduino-UpTime/UpTime.cpp
new file mode 100644
index 00000000..846638af
--- /dev/null
+++ b/lib/Arduino-UpTime/UpTime.cpp
@@ -0,0 +1,65 @@
+/* see UpTime.h */
+
+#include
+#include
+
+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);
+}
diff --git a/lib/Arduino-UpTime/UpTime.h b/lib/Arduino-UpTime/UpTime.h
new file mode 100644
index 00000000..e643a99c
--- /dev/null
+++ b/lib/Arduino-UpTime/UpTime.h
@@ -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
+ #include // 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 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
+
+*/
diff --git a/lib/Arduino-UpTime/examples/UpTime_synopsis/README b/lib/Arduino-UpTime/examples/UpTime_synopsis/README
new file mode 100644
index 00000000..6640df09
--- /dev/null
+++ b/lib/Arduino-UpTime/examples/UpTime_synopsis/README
@@ -0,0 +1,4 @@
+DESCRIPTION
+
+ synopsis section example from UpTime.h
+
diff --git a/lib/Arduino-UpTime/examples/UpTime_synopsis/UpTime_synopsis.ino b/lib/Arduino-UpTime/examples/UpTime_synopsis/UpTime_synopsis.ino
new file mode 100644
index 00000000..f6ad1bb1
--- /dev/null
+++ b/lib/Arduino-UpTime/examples/UpTime_synopsis/UpTime_synopsis.ino
@@ -0,0 +1,24 @@
+/*
+=head1 DESCRIPTION
+
+synopsis section example from UpTime.h
+
+=cut
+*/
+
+#include
+#include // 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);
+}
diff --git a/lib/Arduino-UpTime/examples/UpTime_tick/README b/lib/Arduino-UpTime/examples/UpTime_tick/README
new file mode 100644
index 00000000..34869144
--- /dev/null
+++ b/lib/Arduino-UpTime/examples/UpTime_tick/README
@@ -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.
+
diff --git a/lib/Arduino-UpTime/examples/UpTime_tick/UpTime_tick.ino b/lib/Arduino-UpTime/examples/UpTime_tick/UpTime_tick.ino
new file mode 100644
index 00000000..f532c5c8
--- /dev/null
+++ b/lib/Arduino-UpTime/examples/UpTime_tick/UpTime_tick.ino
@@ -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
+#include // 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);
+}
diff --git a/src/Cmd.cpp b/src/Cmd.cpp
index 2390ccb7..8a792241 100644
--- a/src/Cmd.cpp
+++ b/src/Cmd.cpp
@@ -2,573 +2,545 @@
#include "push_pushingbox.h"
-void CMD_init()
-{
- sCmd.addCommand("button", button);
- sCmd.addCommand("buttonSet", buttonSet);
- sCmd.addCommand("buttonChange", buttonChange);
+void CMD_init() {
- sCmd.addCommand("pinSet", pinSet);
- sCmd.addCommand("pinChange", pinChange);
+ sCmd.addCommand("button", button);
+ sCmd.addCommand("buttonSet", buttonSet);
+ sCmd.addCommand("buttonChange", buttonChange);
- sCmd.addCommand("pwm", pwm);
- sCmd.addCommand("pwmSet", pwmSet);
+ sCmd.addCommand("pinSet", pinSet);
+ sCmd.addCommand("pinChange", pinChange);
- sCmd.addCommand("switch", switch_);
+ sCmd.addCommand("pwm", pwm);
+ sCmd.addCommand("pwmSet", pwmSet);
+
+ sCmd.addCommand("switch", switch_);
#ifdef analog_enable
- sCmd.addCommand("analog", analog);
+ sCmd.addCommand("analog", analog);
#endif
#ifdef level_enable
- sCmd.addCommand("levelPr", levelPr);
- sCmd.addCommand("ultrasonicCm", ultrasonicCm);
+ sCmd.addCommand("levelPr", levelPr);
+ sCmd.addCommand("ultrasonicCm", ultrasonicCm);
#endif
#ifdef dallas_enable
- sCmd.addCommand("dallas", dallas);
+ sCmd.addCommand("dallas", dallas);
#endif
#ifdef dht_enable
- sCmd.addCommand("dhtT", dhtT);
- sCmd.addCommand("dhtH", dhtH);
- sCmd.addCommand("dhtPerception", dhtP);
- sCmd.addCommand("dhtComfort", dhtC);
- sCmd.addCommand("dhtDewpoint", dhtD);
+ sCmd.addCommand("dhtT", dhtT);
+ sCmd.addCommand("dhtH", dhtH);
+ sCmd.addCommand("dhtPerception", dhtP);
+ sCmd.addCommand("dhtComfort", dhtC);
+ sCmd.addCommand("dhtDewpoint", dhtD);
#endif
#ifdef bmp_enable
- sCmd.addCommand("bmp280T", bmp280T);
- sCmd.addCommand("bmp280P", bmp280P);
+ sCmd.addCommand("bmp280T", bmp280T);
+ sCmd.addCommand("bmp280P", bmp280P);
#endif
#ifdef bme_enable
- sCmd.addCommand("bme280T", bme280T);
- sCmd.addCommand("bme280P", bme280P);
- sCmd.addCommand("bme280H", bme280H);
- sCmd.addCommand("bme280A", bme280A);
+ sCmd.addCommand("bme280T", bme280T);
+ sCmd.addCommand("bme280P", bme280P);
+ sCmd.addCommand("bme280H", bme280H);
+ sCmd.addCommand("bme280A", bme280A);
#endif
#ifdef stepper_enable
- sCmd.addCommand("stepper", stepper);
- sCmd.addCommand("stepperSet", stepperSet);
+ sCmd.addCommand("stepper", stepper);
+ sCmd.addCommand("stepperSet", stepperSet);
#endif
#ifdef servo_enable
- sCmd.addCommand("servo", servo_);
- sCmd.addCommand("servoSet", servoSet);
+ sCmd.addCommand("servo", servo_);
+ sCmd.addCommand("servoSet", servoSet);
#endif
#ifdef serial_enable
- sCmd.addCommand("serialBegin", serialBegin);
- sCmd.addCommand("serialWrite", serialWrite);
+ sCmd.addCommand("serialBegin", serialBegin);
+ sCmd.addCommand("serialWrite", serialWrite);
#endif
#ifdef logging_enable
- sCmd.addCommand("logging", logging);
+ sCmd.addCommand("logging", logging);
#endif
- sCmd.addCommand("inputDigit", inputDigit);
- sCmd.addCommand("digitSet", digitSet);
+ sCmd.addCommand("inputDigit", inputDigit);
+ sCmd.addCommand("digitSet", digitSet);
- sCmd.addCommand("inputTime", inputTime);
- sCmd.addCommand("timeSet", timeSet);
+ sCmd.addCommand("inputTime", inputTime);
+ sCmd.addCommand("timeSet", timeSet);
- sCmd.addCommand("timerStart", timerStart_);
- sCmd.addCommand("timerStop", timerStop_);
+ sCmd.addCommand("timerStart", timerStart_);
+ sCmd.addCommand("timerStop", timerStop_);
- sCmd.addCommand("text", text);
- sCmd.addCommand("textSet", textSet);
+ sCmd.addCommand("text", text);
+ sCmd.addCommand("textSet", textSet);
- sCmd.addCommand("mqtt", mqttOrderSend);
- sCmd.addCommand("http", httpOrderSend);
+ sCmd.addCommand("mqtt", mqttOrderSend);
+ sCmd.addCommand("http", httpOrderSend);
#ifdef push_enable
- sCmd.addCommand("push", pushControl);
+ sCmd.addCommand("push", pushControl);
#endif
- sCmd.addCommand("firmwareUpdate", firmwareUpdate);
- sCmd.addCommand("firmwareVersion", firmwareVersion);
+ sCmd.addCommand("firmwareUpdate", firmwareUpdate);
+ sCmd.addCommand("firmwareVersion", firmwareVersion);
- handle_time_init();
+ handle_time_init();
}
-void button()
-{
- String button_number = sCmd.next();
- String button_param = sCmd.next();
- String widget_name = sCmd.next();
- String page_name = sCmd.next();
- String start_state = sCmd.next();
- String page_number = sCmd.next();
- jsonWriteStr(configOptionJson, "button_param" + button_number, button_param);
- jsonWriteStr(configLiveJson, "button" + button_number, start_state);
- if (isDigitStr(button_param))
- {
- pinMode(button_param.toInt(), OUTPUT);
- digitalWrite(button_param.toInt(), start_state.toInt());
+//==========================================================================================================
+//==========================================Модуль кнопок===================================================
+void button() {
+
+ String button_number = sCmd.next();
+ String button_param = sCmd.next();
+ String widget_name = sCmd.next();
+ String page_name = sCmd.next();
+ String start_state = sCmd.next();
+ String page_number = sCmd.next();
+
+ jsonWriteStr(configOptionJson, "button_param" + button_number, button_param);
+ jsonWriteStr(configLiveJson, "button" + button_number, start_state);
+
+ if (isDigitStr (button_param)) {
+ pinMode(button_param.toInt(), OUTPUT);
+ digitalWrite(button_param.toInt(), start_state.toInt());
+ }
+
+ if (button_param == "scen") {
+ jsonWriteStr(configSetupJson, "scen", start_state);
+ Scenario_init();
+ saveConfig();
+ }
+
+ if (button_param.indexOf("line") != -1) {
+ String str = button_param;
+ while (str.length() != 0) {
+ if (str == "") return;
+ String tmp = selectToMarker (str, ","); //line1,
+ String number = deleteBeforeDelimiter(tmp, "e"); //1,
+ number.replace(",", "");
+ Serial.println(number);
+ int number_int = number.toInt();
+ scenario_line_status[number_int] = start_state.toInt();
+ str = deleteBeforeDelimiter(str, ",");
}
-
- if (button_param == "scenario")
- {
- jsonWriteStr(configSetupJson, "scenario", start_state);
- Scenario_init();
- saveConfig();
- }
-
- if (button_param.indexOf("line") != -1)
- {
- String str = button_param;
- while (str.length() != 0)
- {
- if (str == "")
- return;
- String tmp = selectToMarker(str, ","); //line1,
- String number = deleteBeforeDelimiter(tmp, "e"); //1,
- number.replace(",", "");
- Serial.println(number);
- int number_int = number.toInt();
- scenario_line_status[number_int] = start_state.toInt();
- str = deleteBeforeDelimiter(str, ",");
- }
- }
- createWidget(widget_name, page_name, page_number, "widgets/widget.toggle.json", "button" + button_number);
+ }
+ createWidget (widget_name, page_name, page_number, "widgets/widget.toggle.json", "button" + button_number);
}
-void buttonSet()
-{
- String button_number = sCmd.next();
- String button_state = sCmd.next();
- String button_param = jsonReadStr(configOptionJson, "button_param" + button_number);
+void buttonSet() {
- if (button_param != "na" || button_param != "scenario" || button_param.indexOf("line") != -1)
- {
- digitalWrite(button_param.toInt(), button_state.toInt());
+ String button_number = sCmd.next();
+ String button_state = sCmd.next();
+ String button_param = jsonReadStr(configOptionJson, "button_param" + button_number);
+
+ if (button_param != "na" || button_param != "scen" || button_param.indexOf("line") != -1) {
+ digitalWrite(button_param.toInt(), button_state.toInt());
+ }
+
+ if (button_param == "scen") {
+ jsonWriteStr(configSetupJson, "scen", button_state);
+ Scenario_init();
+ saveConfig();
+ }
+
+ if (button_param.indexOf("line") != -1) {
+ String str = button_param;
+ while (str.length() != 0) {
+ if (str == "") return;
+ String tmp = selectToMarker (str, ","); //line1,
+ String number = deleteBeforeDelimiter(tmp, "e"); //1,
+ number.replace(",", "");
+ Serial.println(number);
+ int number_int = number.toInt();
+ scenario_line_status[number_int] = button_state.toInt();
+ str = deleteBeforeDelimiter(str, ",");
}
+ }
- if (button_param == "scenario")
- {
- jsonWriteStr(configSetupJson, "scenario", button_state);
- Scenario_init();
- saveConfig();
- }
+ eventGen ("button", button_number);
- if (button_param.indexOf("line") != -1)
- {
- String str = button_param;
- while (str.length() != 0)
- {
- if (str == "")
- return;
- String tmp = selectToMarker(str, ","); //line1,
- String number = deleteBeforeDelimiter(tmp, "e"); //1,
- number.replace(",", "");
- Serial.println(number);
- int number_int = number.toInt();
- scenario_line_status[number_int] = button_state.toInt();
- str = deleteBeforeDelimiter(str, ",");
- }
- }
-
- eventGen("button", button_number);
-
- jsonWriteStr(configLiveJson, "button" + button_number, button_state);
- sendSTATUS("button" + button_number, button_state);
+ jsonWriteStr(configLiveJson, "button" + button_number, button_state);
+ sendSTATUS("button" + button_number, button_state);
}
-void buttonChange()
-{
- String button_number = sCmd.next();
- String current_state = jsonReadStr(configLiveJson, "button" + button_number);
- if (current_state == "1")
- {
- current_state = "0";
- }
- else if (current_state == "0")
- {
- current_state = "1";
- }
- order_loop += "buttonSet " + button_number + " " + current_state + ",";
- jsonWriteStr(configLiveJson, "button" + button_number, current_state);
- sendSTATUS("button" + button_number, current_state);
+void buttonChange() {
+ String button_number = sCmd.next();
+ String current_state = jsonReadStr(configLiveJson, "button" + button_number);
+ if (current_state == "1") {
+ current_state = "0";
+ } else if (current_state == "0") {
+ current_state = "1";
+ }
+ order_loop += "buttonSet " + button_number + " " + current_state + ",";
+ jsonWriteStr(configLiveJson, "button" + button_number, current_state);
+ sendSTATUS("button" + button_number, current_state);
}
-void pinSet()
-{
- String pin_number = sCmd.next();
- String pin_state = sCmd.next();
- pinMode(pin_number.toInt(), OUTPUT);
- digitalWrite(pin_number.toInt(), pin_state.toInt());
+void pinSet() {
+ String pin_number = sCmd.next();
+ String pin_state = sCmd.next();
+ pinMode(pin_number.toInt(), OUTPUT);
+ digitalWrite(pin_number.toInt(), pin_state.toInt());
}
-void pinChange()
-{
- String pin_number = sCmd.next();
- pinMode(pin_number.toInt(), OUTPUT);
- digitalWrite(pin_number.toInt(), !digitalRead(pin_number.toInt()));
+void pinChange() {
+ String pin_number = sCmd.next();
+ pinMode(pin_number.toInt(), OUTPUT);
+ digitalWrite(pin_number.toInt(), !digitalRead(pin_number.toInt()));
+}
+//==================================================================================================================
+//==========================================Модуль управления ШИМ===================================================
+void pwm() {
+
+ static boolean flag = true;
+ String pwm_number = sCmd.next();
+ String pwm_pin = sCmd.next();
+ String widget_name = sCmd.next();
+ widget_name.replace("#", " ");
+ String page_name = sCmd.next();
+ String start_state = sCmd.next();
+ String page_number = sCmd.next();
+
+
+ uint8_t pwm_pin_int = pwm_pin.toInt();
+ jsonWriteStr(configOptionJson, "pwm_pin" + pwm_number, pwm_pin);
+ pinMode(pwm_pin_int, INPUT);
+ analogWrite(pwm_pin_int, start_state.toInt());
+ //analogWriteFreq(32000);
+ jsonWriteStr(configLiveJson, "pwm" + pwm_number, start_state);
+
+ createWidget (widget_name, page_name, page_number, "widgets/widget.range.json", "pwm" + pwm_number);
}
-void pwm()
-{
- // TODO Unused
- // static boolean flag = true;
- String pwm_number = sCmd.next();
- String pwm_pin = sCmd.next();
- String widget_name = sCmd.next();
- widget_name.replace("#", " ");
- String page_name = sCmd.next();
- String start_state = sCmd.next();
- String page_number = sCmd.next();
+void pwmSet() {
- uint8_t pwm_pin_int = pwm_pin.toInt();
- jsonWriteStr(configOptionJson, "pwm_pin" + pwm_number, pwm_pin);
- pinMode(pwm_pin_int, INPUT);
- analogWrite(pwm_pin_int, start_state.toInt());
- jsonWriteStr(configLiveJson, "pwm" + pwm_number, start_state);
- createWidget(widget_name, page_name, page_number, "widgets/widget.range.json", "pwm" + pwm_number);
-}
+ String pwm_number = sCmd.next();
+ String pwm_state = sCmd.next();
+ int pwm_state_int = pwm_state.toInt();
-void pwmSet()
-{
- String pwm_number = sCmd.next();
- String pwm_state = sCmd.next();
- int pwm_state_int = pwm_state.toInt();
+ int pin = jsonReadInt(configOptionJson, "pwm_pin" + pwm_number);
+ analogWrite(pin, pwm_state_int);
- int pin = jsonReadInt(configOptionJson, "pwm_pin" + pwm_number);
- analogWrite(pin, pwm_state_int);
+ eventGen ("pwm", pwm_number);
- eventGen("pwm", pwm_number);
-
- jsonWriteStr(configLiveJson, "pwm" + pwm_number, pwm_state);
- sendSTATUS("pwm" + pwm_number, pwm_state);
+ jsonWriteStr(configLiveJson, "pwm" + pwm_number, pwm_state);
+ sendSTATUS("pwm" + pwm_number, pwm_state);
}
//==================================================================================================================
//==========================================Модуль физической кнопки================================================
-void switch_()
-{
- String switch_number = sCmd.next();
- String switch_pin = sCmd.next();
- String switch_delay = sCmd.next();
+void switch_ () {
- buttons[switch_number.toInt()].attach(switch_pin.toInt());
- buttons[switch_number.toInt()].interval(switch_delay.toInt());
- but[switch_number.toInt()] = true;
+ String switch_number = sCmd.next();
+ String switch_pin = sCmd.next();
+ String switch_delay = sCmd.next();
+
+ buttons[switch_number.toInt()].attach(switch_pin.toInt());
+ buttons[switch_number.toInt()].interval(switch_delay.toInt());
+ but[switch_number.toInt()] = true;
}
-void handleButton()
-{
- static uint8_t switch_number = 1;
+void handleButton() {
- if (but[switch_number])
- {
- buttons[switch_number].update();
- if (buttons[switch_number].fell())
- {
- eventGen("switch", String(switch_number));
+ static uint8_t switch_number = 1;
- jsonWriteStr(configLiveJson, "switch" + String(switch_number), "1");
- }
- if (buttons[switch_number].rose())
- {
- eventGen("switch", String(switch_number));
+ if (but[switch_number]) {
+ buttons[switch_number].update();
+ if (buttons[switch_number].fell()) {
- jsonWriteStr(configLiveJson, "switch" + String(switch_number), "0");
- }
+ eventGen ("switch", String(switch_number));
+
+ jsonWriteStr(configLiveJson, "switch" + String(switch_number), "1");
}
- switch_number++;
- if (switch_number == NUM_BUTTONS)
- switch_number = 0;
-}
+ if (buttons[switch_number].rose()) {
-void inputDigit()
-{
- String value_name = sCmd.next();
- String number = value_name.substring(5);
- String widget_name = sCmd.next();
- widget_name.replace("#", " ");
- String page_name = sCmd.next();
- page_name.replace("#", " ");
- String start_state = sCmd.next();
- String page_number = sCmd.next();
- jsonWriteStr(configLiveJson, "digit" + number, start_state);
- createWidget(widget_name, page_name, page_number, "widgets/widget.inputNum.json", "digit" + number);
-}
+ eventGen ("switch", String(switch_number));
-void digitSet()
-{
- String number = sCmd.next();
- String value = sCmd.next();
- jsonWriteStr(configLiveJson, "digit" + number, value);
- sendSTATUS("digit" + number, value);
-}
-
-void inputTime()
-{
- String value_name = sCmd.next();
- String number = value_name.substring(4);
- String widget_name = sCmd.next();
- widget_name.replace("#", " ");
- String page_name = sCmd.next();
- page_name.replace("#", " ");
- String start_state = sCmd.next();
- String page_number = sCmd.next();
- jsonWriteStr(configLiveJson, "time" + number, start_state);
- createWidget(widget_name, page_name, page_number, "widgets/widget.inputTime.json", "time" + number);
-}
-
-void timeSet()
-{
- String number = sCmd.next();
- String value = sCmd.next();
- jsonWriteStr(configLiveJson, "time" + number, value);
- sendSTATUS("time" + number, value);
-}
-
-void handle_time_init()
-{
- ts.add(
- TIME, 1000, [&](void *) {
- String tmp = GetTime();
- jsonWriteStr(configLiveJson, "time", tmp);
- tmp.replace(":", "-");
- jsonWriteStr(configLiveJson, "timenow", tmp);
- eventGen("timenow", "");
- },
- nullptr, true);
-}
-
-void text()
-{
- String number = sCmd.next();
- String widget_name = sCmd.next();
- String page_name = sCmd.next();
- String page_number = sCmd.next();
-
- createWidget(widget_name, page_name, page_number, "widgets/widget.anyData.json", "text" + number);
-}
-
-void textSet()
-{
- String number = sCmd.next();
- String text = sCmd.next();
- text.replace("_", " ");
-
- if (text.indexOf("-time") >= 0)
- {
- text.replace("-time", "");
- text.replace("#", " ");
- String time = GetTime();
- time.replace(":", ".");
- text = text + " " + GetDataDigital() + " " + time;
+ jsonWriteStr(configLiveJson, "switch" + String(switch_number), "0");
}
-
- jsonWriteStr(configLiveJson, "text" + number, text);
- sendSTATUS("text" + number, text);
+ }
+ switch_number++;
+ if (switch_number == 6) switch_number = 0;
}
+//=====================================================================================================================================
+//=========================================Добавление окна ввода цифры=================================================================
+void inputDigit() {
+ String value_name = sCmd.next();
+ String number = value_name.substring(5);
+ String widget_name = sCmd.next();
+ widget_name.replace("#", " ");
+ String page_name = sCmd.next();
+ page_name.replace("#", " ");
+ String start_state = sCmd.next();
+ String page_number = sCmd.next();
+ jsonWriteStr(configLiveJson, "digit" + number, start_state);
+ createWidget (widget_name, page_name, page_number, "widgets/widget.inputNum.json", "digit" + number);
+}
+void digitSet() {
+ String number = sCmd.next();
+ String value = sCmd.next();
+ jsonWriteStr(configLiveJson, "digit" + number, value);
+ sendSTATUS("digit" + number, value);
+}
+//=====================================================================================================================================
+//=========================================Добавление окна ввода времени===============================================================
+void inputTime() {
+ String value_name = sCmd.next();
+ String number = value_name.substring(4);
+ String widget_name = sCmd.next();
+ widget_name.replace("#", " ");
+ String page_name = sCmd.next();
+ page_name.replace("#", " ");
+ String start_state = sCmd.next();
+ String page_number = sCmd.next();
+ jsonWriteStr(configLiveJson, "time" + number, start_state);
+ createWidget (widget_name, page_name, page_number, "widgets/widget.inputTime.json", "time" + number);
+}
+void timeSet() {
+ String number = sCmd.next();
+ String value = sCmd.next();
+ jsonWriteStr(configLiveJson, "time" + number, value);
+ sendSTATUS("time" + number, value);
+}
+
+void handle_time_init() {
+ ts.add(TIME, 1000, [&](void*) {
+
+ String tmp = GetTime();
+ jsonWriteStr(configLiveJson, "time", tmp);
+ tmp.replace(":", "-");
+ jsonWriteStr(configLiveJson, "timenow", tmp);
+ eventGen ("timenow", "");
+
+ }, nullptr, true);
+}
+
+//=====================================================================================================================================
+//=========================================Добавление текстового виджета============================================================
+void text() {
+
+ String number = sCmd.next();
+ String widget_name = sCmd.next();
+ String page_name = sCmd.next();
+ String page_number = sCmd.next();
+
+ createWidget (widget_name, page_name, page_number, "widgets/widget.anyData.json", "text" + number);
+}
+
+
+void textSet() {
+
+ String number = sCmd.next();
+ String text = sCmd.next();
+ text.replace("_", " ");
+
+ if (text.indexOf("-time") >= 0) {
+ text.replace("-time", "");
+ text.replace("#", " ");
+ String time = GetTime();
+ time.replace(":", ".");
+ text = text + " " + GetDataDigital() + " " + time;
+ }
+
+ jsonWriteStr(configLiveJson, "text" + number, text);
+ sendSTATUS("text" + number, text);
+}
+//=====================================================================================================================================
+//=========================================Модуль шагового мотора======================================================================
#ifdef stepper_enable
//stepper 1 12 13
-void stepper()
-{
- String stepper_number = sCmd.next();
- String pin_step = sCmd.next();
- String pin_dir = sCmd.next();
+void stepper() {
+ String stepper_number = sCmd.next();
+ String pin_step = sCmd.next();
+ String pin_dir = sCmd.next();
- jsonWriteStr(configOptionJson, "stepper" + stepper_number, pin_step + " " + pin_dir);
- pinMode(pin_step.toInt(), OUTPUT);
- pinMode(pin_dir.toInt(), OUTPUT);
+ jsonWriteStr(configOptionJson, "stepper" + stepper_number, pin_step + " " + pin_dir);
+ pinMode(pin_step.toInt(), OUTPUT);
+ pinMode(pin_dir.toInt(), OUTPUT);
}
//stepperSet 1 100 5
-void stepperSet()
-{
- String stepper_number = sCmd.next();
- String steps = sCmd.next();
- jsonWriteStr(configOptionJson, "steps" + stepper_number, steps);
- String stepper_speed = sCmd.next();
- String pin_step = selectToMarker(jsonReadStr(configOptionJson, "stepper" + stepper_number), " ");
- String pin_dir = deleteBeforeDelimiter(jsonReadStr(configOptionJson, "stepper" + stepper_number), " ");
- Serial.println(pin_step);
- Serial.println(pin_dir);
- if (steps.toInt() > 0)
- digitalWrite(pin_dir.toInt(), HIGH);
- if (steps.toInt() < 0)
- digitalWrite(pin_dir.toInt(), LOW);
- if (stepper_number == "1")
- {
- ts.add(
- STEPPER1, stepper_speed.toInt(), [&](void *) {
- int steps_int = abs(jsonReadInt(configOptionJson, "steps1") * 2);
- static int count;
- count++;
- String pin_step = selectToMarker(jsonReadStr(configOptionJson, "stepper1"), " ");
- digitalWrite(pin_step.toInt(), !digitalRead(pin_step.toInt()));
- yield();
- if (count > steps_int)
- {
- digitalWrite(pin_step.toInt(), LOW);
- ts.remove(STEPPER1);
- count = 0;
- }
- },
- nullptr, true);
- }
- if (stepper_number == "2")
- {
- ts.add(
- STEPPER2, stepper_speed.toInt(), [&](void *) {
- int steps_int = abs(jsonReadInt(configOptionJson, "steps2") * 2);
- static int count;
- count++;
- String pin_step = selectToMarker(jsonReadStr(configOptionJson, "stepper2"), " ");
- digitalWrite(pin_step.toInt(), !digitalRead(pin_step.toInt()));
- yield();
- if (count > steps_int)
- {
- digitalWrite(pin_step.toInt(), LOW);
- ts.remove(STEPPER2);
- count = 0;
- }
- },
- nullptr, true);
- }
+void stepperSet() {
+ String stepper_number = sCmd.next();
+ String steps = sCmd.next();
+ jsonWriteStr(configOptionJson, "steps" + stepper_number, steps);
+ String stepper_speed = sCmd.next();
+ String pin_step = selectToMarker (jsonReadStr(configOptionJson, "stepper" + stepper_number), " ");
+ String pin_dir = deleteBeforeDelimiter (jsonReadStr(configOptionJson, "stepper" + stepper_number), " ");
+ Serial.println(pin_step);
+ Serial.println(pin_dir);
+ if (steps.toInt() > 0) digitalWrite(pin_dir.toInt(), HIGH);
+ if (steps.toInt() < 0) digitalWrite(pin_dir.toInt(), LOW);
+ if (stepper_number == "1") {
+ ts.add(STEPPER1, stepper_speed.toInt(), [&](void*) {
+ int steps_int = abs(jsonReadInt(configOptionJson, "steps1") * 2);
+ static int count;
+ count++;
+ String pin_step = selectToMarker (jsonReadStr(configOptionJson, "stepper1"), " ");
+ digitalWrite(pin_step.toInt(), !digitalRead(pin_step.toInt()));
+ yield();
+ if (count > steps_int) {
+ digitalWrite(pin_step.toInt(), LOW);
+ ts.remove(STEPPER1);
+ count = 0;
+ }
+ }, nullptr, true);
+ }
+ if (stepper_number == "2") {
+ ts.add(STEPPER2, stepper_speed.toInt(), [&](void*) {
+ int steps_int = abs(jsonReadInt(configOptionJson, "steps2") * 2);
+ static int count;
+ count++;
+ String pin_step = selectToMarker (jsonReadStr(configOptionJson, "stepper2"), " ");
+ digitalWrite(pin_step.toInt(), !digitalRead(pin_step.toInt()));
+ yield();
+ if (count > steps_int) {
+ digitalWrite(pin_step.toInt(), LOW);
+ ts.remove(STEPPER2);
+ count = 0;
+ }
+ }, nullptr, true);
+ }
}
#endif
//====================================================================================================================================================
//=================================================================Сервоприводы=======================================================================
#ifdef servo_enable
//servo 1 13 50 Мой#сервопривод Сервоприводы 0 100 0 180 2
-void servo_()
-{
- String servo_number = sCmd.next();
- String servo_pin = sCmd.next();
- String start_state = sCmd.next();
- int start_state_int = start_state.toInt();
- String widget_name = sCmd.next();
- String page_name = sCmd.next();
+void servo_() {
+ String servo_number = sCmd.next();
+ String servo_pin = sCmd.next();
+ String start_state = sCmd.next();
+ int start_state_int = start_state.toInt();
+ String widget_name = sCmd.next();
+ String page_name = sCmd.next();
- String min_value = sCmd.next();
- String max_value = sCmd.next();
+ String min_value = sCmd.next();
+ String max_value = sCmd.next();
- String min_deg = sCmd.next();
- String max_deg = sCmd.next();
+ String min_deg = sCmd.next();
+ String max_deg = sCmd.next();
- String page_number = sCmd.next();
+ String page_number = sCmd.next();
- jsonWriteStr(configOptionJson, "servo_pin" + servo_number, servo_pin);
- start_state_int = map(start_state_int, min_value.toInt(), max_value.toInt(), min_deg.toInt(), max_deg.toInt());
+ jsonWriteStr(configOptionJson, "servo_pin" + servo_number, servo_pin);
+ start_state_int = map(start_state_int, min_value.toInt(), max_value.toInt(), min_deg.toInt(), max_deg.toInt());
- if (servo_number == "1")
- {
+ if (servo_number == "1") {
#ifdef ESP8266
- myServo1.attach(servo_pin.toInt());
- myServo1.write(start_state_int);
+ myServo1.attach(servo_pin.toInt());
+ myServo1.write(start_state_int);
#endif
#ifdef ESP32
- myServo1.attach(servo_pin.toInt(), 500, 2400);
- myServo1.write(start_state_int);
+ myServo1.attach(servo_pin.toInt(), 500, 2400);
+ myServo1.write(start_state_int);
#endif
- }
+ }
- if (servo_number == "2")
- {
+ if (servo_number == "2") {
#ifdef ESP8266
- myServo2.attach(servo_pin.toInt());
- myServo2.write(start_state_int);
+ myServo2.attach(servo_pin.toInt());
+ myServo2.write(start_state_int);
#endif
#ifdef ESP32
- myServo2.attach(servo_pin.toInt(), 500, 2400);
- myServo2.write(start_state_int);
+ myServo2.attach(servo_pin.toInt(), 500, 2400);
+ myServo2.write(start_state_int);
#endif
- }
+ }
- jsonWriteStr(configOptionJson, "s_min_val" + servo_number, min_value);
- jsonWriteStr(configOptionJson, "s_max_val" + servo_number, max_value);
- jsonWriteStr(configOptionJson, "s_min_deg" + servo_number, min_deg);
- jsonWriteStr(configOptionJson, "s_max_deg" + servo_number, max_deg);
+ jsonWriteStr(configOptionJson, "s_min_val" + servo_number, min_value);
+ jsonWriteStr(configOptionJson, "s_max_val" + servo_number, max_value);
+ jsonWriteStr(configOptionJson, "s_min_deg" + servo_number, min_deg);
+ jsonWriteStr(configOptionJson, "s_max_deg" + servo_number, max_deg);
- jsonWriteStr(configLiveJson, "servo" + servo_number, start_state);
+ jsonWriteStr(configLiveJson, "servo" + servo_number, start_state);
- createWidgetParam(widget_name, page_name, page_number, "widgets/widget.range.json", "servo" + servo_number, "min", min_value, "max", max_value, "k", "1");
+ createWidgetParam (widget_name, page_name, page_number, "widgets/widget.range.json", "servo" + servo_number, "min", min_value, "max", max_value, "k", "1");
}
-void servoSet()
-{
- String servo_number = sCmd.next();
- String servo_state = sCmd.next();
- int servo_state_int = servo_state.toInt();
+void servoSet() {
+ String servo_number = sCmd.next();
+ String servo_state = sCmd.next();
+ int servo_state_int = servo_state.toInt();
- // TODO Unused
- //int pin = jsonReadInt(configOptionJson, "servo_pin" + servo_number);
+ int pin = jsonReadInt(configOptionJson, "servo_pin" + servo_number);
- servo_state_int = map(servo_state_int,
- jsonReadInt(configOptionJson, "s_min_val" + servo_number),
- jsonReadInt(configOptionJson, "s_max_val" + servo_number),
- jsonReadInt(configOptionJson, "s_min_deg" + servo_number),
- jsonReadInt(configOptionJson, "s_max_deg" + servo_number));
+ servo_state_int = map(servo_state_int,
+ jsonReadInt(configOptionJson, "s_min_val" + servo_number),
+ jsonReadInt(configOptionJson, "s_max_val" + servo_number),
+ jsonReadInt(configOptionJson, "s_min_deg" + servo_number),
+ jsonReadInt(configOptionJson, "s_max_deg" + servo_number));
- if (servo_number == "1")
- {
+ if (servo_number == "1") {
#ifdef ESP8266
- myServo1.write(servo_state_int);
+ myServo1.write(servo_state_int);
#endif
#ifdef ESP32
- myServo1.write(servo_state_int);
+ myServo1.write(servo_state_int);
#endif
- }
+ }
- if (servo_number == "2")
- {
+ if (servo_number == "2") {
#ifdef ESP8266
- myServo2.write(servo_state_int);
+ myServo2.write(servo_state_int);
#endif
#ifdef ESP32
- myServo2.write(servo_state_int);
+ myServo2.write(servo_state_int);
#endif
- }
+ }
- eventGen("servo", servo_number);
+ //Serial.println(servo_state_int);
- jsonWriteStr(configLiveJson, "servo" + servo_number, servo_state);
- sendSTATUS("servo" + servo_number, servo_state);
+ eventGen ("servo", servo_number);
+
+ jsonWriteStr(configLiveJson, "servo" + servo_number, servo_state);
+ sendSTATUS("servo" + servo_number, servo_state);
}
#endif
//====================================================================================================================================================
//===================================================================================serial===========================================================
#ifdef serial_enable
-void serialBegin()
-{
- //String s_speed = sCmd.next();
- //String rxPin = sCmd.next();
- //String txPin = sCmd.next();
- //SoftwareSerial mySerial(rxPin.toInt(), txPin.toInt());
- //mySerial.begin(s_speed.toInt());
+void serialBegin() {
+ //String s_speed = sCmd.next();
+ //String rxPin = sCmd.next();
+ //String txPin = sCmd.next();
+ //SoftwareSerial mySerial(rxPin.toInt(), txPin.toInt());
+ //mySerial.begin(s_speed.toInt());
}
-void serialWrite()
-{
- //String text = sCmd.next();
- //mySerial.println(text);
+void serialWrite() {
+ //String text = sCmd.next();
+ //mySerial.println(text);
}
#endif
//====================================================================================================================================================
//=================================================Глобальные команды удаленного управления===========================================================
-void mqttOrderSend()
-{
- String id = sCmd.next();
- String order = sCmd.next();
+void mqttOrderSend() {
- String all_line = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + id + "/order";
- client_mqtt.publish(all_line.c_str(), order.c_str(), false);
+ String id = sCmd.next();
+ String order = sCmd.next();
+
+ String all_line = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + id + "/order";
+ //Serial.print(all_line);
+ //Serial.print("->");
+ //Serial.println(order);
+ int send_status = client_mqtt.publish (all_line.c_str(), order.c_str(), false);
}
-void httpOrderSend()
-{
- String ip = sCmd.next();
- String order = sCmd.next();
- order.replace("_", "%20");
- String url = "http://" + ip + "/cmd?command=" + order;
- getURL(url);
+void httpOrderSend() {
+
+ String ip = sCmd.next();
+ String order = sCmd.next();
+ order.replace("_", "%20");
+ String url = "http://" + ip + "/cmd?command=" + order;
+ getURL(url);
}
void firmwareUpdate() {
@@ -585,45 +557,47 @@ void firmwareVersion() {
//==============================================================================================================================
//============================выполнение команд (в лупе) по очереди из строки order=============================================
-void handleCMD_loop()
-{
- if (order_loop != "")
- {
- String tmp = selectToMarker(order_loop, ","); //выделяем из страки order первую команду rel 5 1,
- sCmd.readStr(tmp); //выполняем первую команду
- Serial.println("[ORDER] => " + order_loop);
- order_loop = deleteBeforeDelimiter(order_loop, ","); //осекаем выполненную команду
- }
+void handleCMD_loop() {
+
+ if (order_loop != "") {
+
+ String tmp = selectToMarker(order_loop, ","); //выделяем из страки order первую команду rel 5 1,
+ sCmd.readStr(tmp); //выполняем первую команду
+ Serial.println("[ORDER] => " + order_loop);
+ order_loop = deleteBeforeDelimiter(order_loop, ","); //осекаем выполненную команду
+ }
}
-void txtExecution(String file)
-{
- String command_all = readFile(file, 2048) + "\r\n";
+//=======================================================================================================================================
+//=======================================================================================================================================
+void txtExecution(String file) {
- command_all.replace("\r\n", "\n");
- command_all.replace("\r", "\n");
+ String command_all = readFile(file, 2048) + "\r\n";
- while (command_all.length() != 0)
- {
- String tmp = selectToMarker(command_all, "\n");
- sCmd.readStr(tmp);
- command_all = deleteBeforeDelimiter(command_all, "\n");
- }
- command_all = "";
+ command_all.replace("\r\n", "\n");
+ command_all.replace("\r", "\n");
+
+ while (command_all.length() != 0) {
+
+ String tmp = selectToMarker (command_all, "\n");
+ sCmd.readStr(tmp);
+ command_all = deleteBeforeDelimiter(command_all, "\n");
+ }
+ command_all = "";
}
-void stringExecution(String str)
-{
- str = str + "\r\n";
+void stringExecution(String str) {
- str.replace("\r\n", "\n");
- str.replace("\r", "\n");
+ str = str + "\r\n";
- while (str.length())
- {
- String tmp = selectToMarker(str, "\n");
- sCmd.readStr(tmp);
+ str.replace("\r\n", "\n");
+ str.replace("\r", "\n");
- str = deleteBeforeDelimiter(str, "\n");
- }
-}
+ while (str.length() != 0) {
+
+ String tmp = selectToMarker (str, "\n");
+ sCmd.readStr(tmp);
+
+ str = deleteBeforeDelimiter(str, "\n");
+ }
+}
\ No newline at end of file
diff --git a/src/FileSystem.cpp b/src/FileSystem.cpp
index 82c2ca7a..85aaac54 100644
--- a/src/FileSystem.cpp
+++ b/src/FileSystem.cpp
@@ -1,35 +1,40 @@
#include "Global.h"
void File_system_init() {
- Serial.begin(115200);
- //Serial.setDebugOutput(true);
- Serial.println("--------------started----------------");
- //--------------------------------------------------------------
- SPIFFS.begin();
- configSetupJson = readFile("config.json", 4096);
- configSetupJson.replace(" ", "");
- configSetupJson.replace("\r\n", "");
- Serial.println(configSetupJson);
- jsonWriteStr(configLiveJson, "name", jsonReadStr(configSetupJson, "name"));
- jsonWriteStr(configLiveJson, "lang", jsonReadStr(configSetupJson, "lang"));
+
+ Serial.begin(115200);
+ //Serial.setDebugOutput(true);
+ Serial.println("--------------started----------------");
+ //--------------------------------------------------------------
+ SPIFFS.begin();
+ configSetupJson = readFile("config.json", 4096);
+ configSetupJson.replace(" ", "");
+ configSetupJson.replace("\r\n", "");
+ Serial.println(configSetupJson);
+ //jsonWriteStr(configLiveJson, "name", jsonReadStr(configSetupJson, "name"));
+ //jsonWriteStr(configLiveJson, "lang", jsonReadStr(configSetupJson, "lang"));
+
#ifdef ESP32
- uint32_t chipID_u = ESP.getEfuseMac();
- chipID = String(chipID_u);
- jsonWriteStr(configSetupJson, "chipID", chipID);
+ uint32_t chipID_u = ESP.getEfuseMac();
+ chipID = String(chipID_u);
+ jsonWriteStr(configSetupJson, "chipID", chipID);
#endif
#ifdef ESP8266
- chipID = String(ESP.getChipId()) + "-" + String(ESP.getFlashChipId());
- jsonWriteStr(configSetupJson, "chipID", chipID);
- Serial.setDebugOutput(0);
+ chipID = String( ESP.getChipId() ) + "-" + String(ESP.getFlashChipId());
+ jsonWriteStr(configSetupJson, "chipID", chipID);
+ Serial.setDebugOutput(0);
#endif
- jsonWriteStr(configSetupJson, "firmware_version", firmware_version);
+ jsonWriteStr(configSetupJson, "firmware_version", firmware_version);
- prex = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID;
- Serial.println(chipID);
+ prex = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID;
+ Serial.println(chipID);
+
}
void get_esp_info() {
+
+
}
diff --git a/src/Global.cpp b/src/Global.cpp
index 337258c6..158c2b27 100644
--- a/src/Global.cpp
+++ b/src/Global.cpp
@@ -1,23 +1,52 @@
#include "Global.h"
-
#include "JsonUtils.h"
+//==============================Objects.cpp(с данными)==================================
+
+#ifdef WS_enable
+AsyncWebSocket ws;
+#endif
+
+//AsyncEventSource events;
+
TickerScheduler ts(TEST + 1);
WiFiClient espClient;
+
PubSubClient client_mqtt(espClient);
+
StringCommand sCmd;
-// Web
AsyncWebServer server(80);
-#ifdef WS_enable
-AsyncWebSocket ws("/ws");
-#endif
+//AsyncWebSocket ws("/ws");
-AsyncEventSource events("/events");
+//AsyncEventSource events("/events");
+
+#define NUM_BUTTONS 6
+boolean but[NUM_BUTTONS];
+Bounce * buttons = new Bounce[NUM_BUTTONS];
+
+GMedian<10, int> medianFilter;
+
+OneWire *oneWire;
+DallasTemperature sensors;
+
+DHTesp dht;
+
+Adafruit_BMP280 bmp;
+Adafruit_Sensor *bmp_temp;
+Adafruit_Sensor *bmp_pressure;
+
+Adafruit_BME280 bme;
+Adafruit_Sensor *bme_temp;
+Adafruit_Sensor *bme_pressure;
+Adafruit_Sensor *bme_humidity;
+
+uptime_interval myUpTime(10);
+
+////////////////////////////////////// Global vars ////////////////////////////////////////////////////////////////////
-// Global vars
boolean just_load = true;
const char *hostName = "IoT Manager";
@@ -77,13 +106,11 @@ boolean udp_data_parse = false;
boolean mqtt_send_settings_to_udp = false;
boolean i2c_scanning = false;
-// Servo
-Servo myServo1;
-Servo myServo2;
+
//Buttons
-boolean but[NUM_BUTTONS];
-Bounce *buttons = new Bounce[NUM_BUTTONS];
+//boolean but[6];
+
// Udp
boolean udp_busy = false;
@@ -102,24 +129,6 @@ int udp_period;
// i2c
String i2c_list;
-OneWire *oneWire;
-DallasTemperature sensors;
-DHTesp dht;
-#ifdef level_enable
-GMedian<10, int> medianFilter;
-#endif
-#ifdef bmp_enable
-Adafruit_BMP280 bmp;
-Adafruit_Sensor *bmp_temp = bmp.getTemperatureSensor();
-Adafruit_Sensor *bmp_pressure = bmp.getPressureSensor();
-#endif
-
-#ifdef bme_enable
-Adafruit_BME280 bme;
-Adafruit_Sensor *bme_temp = bme.getTemperatureSensor();
-Adafruit_Sensor *bme_pressure = bme.getPressureSensor();
-Adafruit_Sensor *bme_humidity = bme.getHumiditySensor();
-#endif
diff --git a/src/Init.cpp b/src/Init.cpp
index d0a45e8d..84db15e1 100644
--- a/src/Init.cpp
+++ b/src/Init.cpp
@@ -1,241 +1,103 @@
#include "Global.h"
void All_init() {
- server.on("/init", HTTP_GET, [](AsyncWebServerRequest* request) {
- String value;
- if (request->hasArg("arg")) {
- value = request->getParam("arg")->value();
- }
- if (value == "0") { //выкл сценариев
- jsonWriteStr(configSetupJson, "scenario", value);
- saveConfig();
- Scenario_init();
- request->send(200, "text/text", "OK");
- }
- if (value == "1") { //вкл сценариев
- jsonWriteStr(configSetupJson, "scenario", value);
- saveConfig();
- Scenario_init();
- request->send(200, "text/text", "OK");
- }
- if (value == "2") { //инициализация
- Device_init();
- request->send(200, "text/text", "OK");
- }
- if (value == "3") {
-#ifdef logging_enable
- clean_log_date();
-#endif
- request->send(200, "text/text", "OK");
- }
- if (value == "4") {
- Scenario_init();
- request->send(200, "text/text", "OK");
- }
- if (value == "5") {
- i2c_scanning = true;
- request->redirect("/?utilities");
- }
- });
-
- prsets_init();
- Device_init();
- Scenario_init();
- Timer_countdown_init();
+ Device_init();
+ Scenario_init();
+ Timer_countdown_init();
}
void Device_init() {
- logging_value_names_list = "";
- enter_to_logging_counter = LOG1 - 1;
- analog_value_names_list = "";
- enter_to_analog_counter = 0;
+ logging_value_names_list = "";
+ enter_to_logging_counter = LOG1 - 1;
- levelPr_value_name = "";
+ analog_value_names_list = "";
+ enter_to_analog_counter = 0;
- dhtT_value_name = "";
- dhtH_value_name = "";
+ levelPr_value_name = "";
+ ultrasonicCm_value_name = "";
- bmp280T_value_name = "";
- bmp280P_value_name = "";
+ dhtT_value_name = "";
+ dhtH_value_name = "";
- bme280T_value_name = "";
- bme280P_value_name = "";
- bme280H_value_name = "";
- bme280A_value_name = "";
+ bmp280T_value_name = "";
+ bmp280P_value_name = "";
- int array_sz = sizeof(sensors_reading_map) / sizeof(sensors_reading_map[0]);
+ bme280T_value_name = "";
+ bme280P_value_name = "";
+ bme280H_value_name = "";
+ bme280A_value_name = "";
- for (int i = 0; i < array_sz; i++) {
- sensors_reading_map[i] = 0;
- }
+ int array_sz = sizeof(sensors_reading_map) / sizeof(sensors_reading_map[0]);
- for (int i = LOG1; i <= LOG5; i++) {
- ts.remove(i);
- }
+ for (int i = 0; i < array_sz; i++) {
+ sensors_reading_map[i] = 0;
+ }
+
+ for (int i = LOG1; i <= LOG5; i++) {
+ ts.remove(i);
+ }
#ifdef layout_in_ram
- all_widgets = "";
+ all_widgets = "";
#else
- SPIFFS.remove("/layout.txt");
+ SPIFFS.remove("/layout.txt");
#endif
- txtExecution("firmware.c.txt");
- //outcoming_date();
+ txtExecution("firmware.c.txt");
+ //outcoming_date();
}
+//-------------------------------сценарии-----------------------------------------------------
void Scenario_init() {
- if (jsonReadStr(configSetupJson, "scenario") == "1") {
- scenario = readFile("firmware.s.txt", 2048);
- }
+ if (jsonReadStr(configSetupJson, "scen") == "1") {
+ scenario = readFile("firmware.s.txt", 2048);
+ }
}
-void prsets_init() {
- server.on("/preset", HTTP_GET, [](AsyncWebServerRequest* request) {
- String value;
- if (request->hasArg("arg")) {
- value = request->getParam("arg")->value();
- }
- if (value == "1") {
- writeFile("firmware.c.txt", readFile("configs/relay.c.txt", 2048));
- writeFile("firmware.s.txt", readFile("configs/relay.s.txt", 2048));
- }
- if (value == "2") {
- writeFile("firmware.c.txt", readFile("configs/relay_t.c.txt", 2048));
- writeFile("firmware.s.txt", readFile("configs/relay_t.s.txt", 2048));
- }
- if (value == "3") {
- writeFile("firmware.c.txt", readFile("configs/relay_c.c.txt", 2048));
- writeFile("firmware.s.txt", readFile("configs/relay_c.s.txt", 2048));
- }
- if (value == "4") {
- writeFile("firmware.c.txt", readFile("configs/relay_s.c.txt", 2048));
- writeFile("firmware.s.txt", readFile("configs/relay_s.s.txt", 2048));
- }
- if (value == "5") {
- writeFile("firmware.c.txt", readFile("configs/relay_sw.c.txt", 2048));
- writeFile("firmware.s.txt", readFile("configs/relay_sw.s.txt", 2048));
- }
- if (value == "6") {
- writeFile("firmware.c.txt", readFile("configs/relay_br.c.txt", 2048));
- writeFile("firmware.s.txt", readFile("configs/relay_br.s.txt", 2048));
- }
- if (value == "7") {
- writeFile("firmware.c.txt", readFile("configs/relay_sr.c.txt", 2048));
- writeFile("firmware.s.txt", readFile("configs/relay_sr.s.txt", 2048));
- }
- if (value == "8") {
- writeFile("firmware.c.txt", readFile("configs/pwm.c.txt", 2048));
- writeFile("firmware.s.txt", readFile("configs/pwm.s.txt", 2048));
- }
- if (value == "9") {
- writeFile("firmware.c.txt", readFile("configs/dht11.c.txt", 2048));
- writeFile("firmware.s.txt", readFile("configs/dht11.s.txt", 2048));
- }
- if (value == "10") {
- writeFile("firmware.c.txt", readFile("configs/dht22.c.txt", 2048));
- writeFile("firmware.s.txt", readFile("configs/dht22.s.txt", 2048));
- }
- if (value == "11") {
- writeFile("firmware.c.txt", readFile("configs/analog.c.txt", 2048));
- writeFile("firmware.s.txt", readFile("configs/analog.s.txt", 2048));
- }
- if (value == "12") {
- writeFile("firmware.c.txt", readFile("configs/dallas.c.txt", 2048));
- writeFile("firmware.s.txt", readFile("configs/dallas.s.txt", 2048));
- }
- if (value == "13") {
- writeFile("firmware.c.txt", readFile("configs/termostat.c.txt", 2048));
- writeFile("firmware.s.txt", readFile("configs/termostat.s.txt", 2048));
- }
- if (value == "14") {
- writeFile("firmware.c.txt", readFile("configs/level.c.txt", 2048));
- writeFile("firmware.s.txt", readFile("configs/level.s.txt", 2048));
- }
- if (value == "15") {
- writeFile("firmware.c.txt", readFile("configs/moution_r.c.txt", 2048));
- writeFile("firmware.s.txt", readFile("configs/moution_r.s.txt", 2048));
- }
- if (value == "16") {
- writeFile("firmware.c.txt", readFile("configs/moution_s.c.txt", 2048));
- writeFile("firmware.s.txt", readFile("configs/moution_s.s.txt", 2048));
- }
- if (value == "17") {
- writeFile("firmware.c.txt", readFile("configs/stepper.c.txt", 2048));
- writeFile("firmware.s.txt", readFile("configs/stepper.s.txt", 2048));
- }
- if (value == "18") {
- writeFile("firmware.c.txt", readFile("configs/servo.c.txt", 2048));
- writeFile("firmware.s.txt", readFile("configs/servo.s.txt", 2048));
- }
- if (value == "19") {
- writeFile("firmware.c.txt", readFile("configs/firmware.c.txt", 2048));
- writeFile("firmware.s.txt", readFile("configs/firmware.s.txt", 2048));
- }
- Device_init();
- Scenario_init();
- request->redirect("/?configuration");
- });
+void uptime_init() {
+ ts.add(UPTIME, 5000, [&](void*) {
+ handle_uptime();
+ }, nullptr, true);
+ ts.add(STATISTICS, statistics_update, [&](void*) {
+ handle_statistics();
+ }, nullptr, true);
}
-void up_time() {
- uint32_t ss = millis() / 1000;
- uint32_t mm = ss / 60;
- uint32_t hh = mm / 60;
- uint32_t dd = hh / 24;
-
- String out = "";
-
- if (ss != 0) {
- out = "[i] uptime = " + String(ss) + " sec";
- jsonWriteStr(configLiveJson, "uptime", String(ss) + " sec");
- }
- if (mm != 0) {
- out = "[i] uptime = " + String(mm) + " min";
- jsonWriteStr(configLiveJson, "uptime", String(mm) + " min");
- }
- if (hh != 0) {
- out = "[i] uptime = " + String(hh) + " hours";
- jsonWriteStr(configLiveJson, "uptime", String(hh) + " hours");
- }
- if (dd != 0) {
- out = "[i] uptime = " + String(dd) + " days";
- jsonWriteStr(configLiveJson, "uptime", String(dd) + " days");
- }
- Serial.println(out + ", mqtt_lost_error: " + String(mqtt_lost_error) + ", wifi_lost_error: " + String(wifi_lost_error));
+void handle_uptime() {
+ if (myUpTime.check()) {
+ jsonWriteStr(configSetupJson, "uptime", uptime_as_string());
+ }
}
-void statistics() {
- if (WiFi.status() == WL_CONNECTED) {
- String urls = "http://backup.privet.lv/visitors/?";
- //-----------------------------------------------------------------
- urls += WiFi.macAddress().c_str();
- urls += "&";
- //-----------------------------------------------------------------
+void handle_statistics() {
+ if (WiFi.status() == WL_CONNECTED) {
+ String urls = "http://backup.privet.lv/visitors/?";
+ //-----------------------------------------------------------------
+ urls += WiFi.macAddress().c_str();
+ urls += "&";
+ //-----------------------------------------------------------------
#ifdef ESP8266
- urls += "iot-manager_esp8266";
+ urls += "iot-manager_esp8266";
#endif
#ifdef ESP32
- urls += "iot-manager_esp32";
+ urls += "iot-manager_esp32";
#endif
- urls += "&";
+ urls += "&";
+ //-----------------------------------------------------------------
#ifdef ESP8266
- urls += ESP.getResetReason();
+ urls += ESP.getResetReason();
+ //Serial.println(ESP.getResetReason());
#endif
#ifdef ESP32
- urls += "Power on";
+ urls += "Power on";
#endif
- urls += "&";
- urls += "ver: ";
- urls += String(firmware_version);
- String stat = getURL(urls);
- }
-}
-
-void statistics_init() {
- ts.add(
- STATISTICS, statistics_update, [&](void*) {
- statistics();
- },
- nullptr, true);
-}
+ urls += "&";
+ //-----------------------------------------------------------------
+ urls += "ver: ";
+ urls += String(firmware_version);
+ //-----------------------------------------------------------------
+ String stat = getURL(urls);
+ //Serial.println(stat);
+ }
+}
\ No newline at end of file
diff --git a/src/Logging.cpp b/src/Logging.cpp
index ac8c9d83..cfb6f00d 100644
--- a/src/Logging.cpp
+++ b/src/Logging.cpp
@@ -6,141 +6,125 @@ void sendLogData(String file, String topic);
//===============================================Логирование============================================================
//logging temp1 1 10 Температура Датчики 2
void logging() {
- String value_name = sCmd.next();
- String period_min = sCmd.next();
- String maxCount = sCmd.next();
- String widget_name = sCmd.next();
- widget_name.replace("#", " ");
- String page_name = sCmd.next();
- String page_number = sCmd.next();
- logging_value_names_list += value_name + ",";
- // считаем количество входов в эту функцию
- enter_to_logging_counter++;
- //создаем в файловой системе переменную количества точек на графике с отметкой _c что значит count
- jsonWriteStr(configOptionJson, value_name + "_c", maxCount);
-
- //создаем график в приложении с топиком _ch /prefix/3234045-1589487/value_name_ch
- createChart(widget_name, page_name, page_number, "widgets/widget.chart.json", value_name + "_ch", maxCount);
- if (enter_to_logging_counter == LOG1) {
- ts.add(
- LOG1, period_min.toInt() * 1000 * 60, [&](void*) {
- String tmp_buf_1 = selectFromMarkerToMarker(logging_value_names_list, ",", 0);
- deleteOldDate("log." + tmp_buf_1 + ".txt", jsonReadInt(configOptionJson, tmp_buf_1 + "_c"), jsonReadStr(configLiveJson, tmp_buf_1));
- Serial.println("[i] LOGGING for sensor '" + tmp_buf_1 + "' done");
- },
- nullptr, false);
- }
- if (enter_to_logging_counter == LOG2) {
- ts.add(
- LOG2, period_min.toInt() * 1000 * 60, [&](void*) {
- String tmp_buf_2 = selectFromMarkerToMarker(logging_value_names_list, ",", 1);
- deleteOldDate("log." + tmp_buf_2 + ".txt", jsonReadInt(configOptionJson, tmp_buf_2 + "_c"), jsonReadStr(configLiveJson, tmp_buf_2));
- Serial.println("[i] LOGGING for sensor '" + tmp_buf_2 + "' done");
- },
- nullptr, false);
- }
- if (enter_to_logging_counter == LOG3) {
- ts.add(
- LOG3, period_min.toInt() * 1000 * 60, [&](void*) {
- String tmp_buf_3 = selectFromMarkerToMarker(logging_value_names_list, ",", 2);
- deleteOldDate("log." + tmp_buf_3 + ".txt", jsonReadInt(configOptionJson, tmp_buf_3 + "_c"), jsonReadStr(configLiveJson, tmp_buf_3));
- Serial.println("[i] LOGGING for sensor '" + tmp_buf_3 + "' done");
- },
- nullptr, false);
- }
- if (enter_to_logging_counter == LOG4) {
- ts.add(
- LOG4, period_min.toInt() * 1000 * 60, [&](void*) {
- String tmp_buf_4 = selectFromMarkerToMarker(logging_value_names_list, ",", 3);
- deleteOldDate("log." + tmp_buf_4 + ".txt", jsonReadInt(configOptionJson, tmp_buf_4 + "_c"), jsonReadStr(configLiveJson, tmp_buf_4));
- Serial.println("[i] LOGGING for sensor '" + tmp_buf_4 + "' done");
- },
- nullptr, false);
- }
- if (enter_to_logging_counter == LOG5) {
- ts.add(
- LOG5, period_min.toInt() * 1000 * 60, [&](void*) {
- String tmp_buf_5 = selectFromMarkerToMarker(logging_value_names_list, ",", 4);
- deleteOldDate("log." + tmp_buf_5 + ".txt", jsonReadInt(configOptionJson, tmp_buf_5 + "_c"), jsonReadStr(configLiveJson, tmp_buf_5));
- Serial.println("[i] LOGGING for sensor '" + tmp_buf_5 + "' done");
- },
- nullptr, false);
- }
+ String value_name = sCmd.next();
+ String period_min = sCmd.next();
+ String maxCount = sCmd.next();
+ String widget_name = sCmd.next();
+ widget_name.replace("#", " ");
+ String page_name = sCmd.next();
+ String page_number = sCmd.next();
+ logging_value_names_list += value_name + ",";
+ enter_to_logging_counter++; //считаем количество входов в эту функцию
+ jsonWriteStr(configOptionJson, value_name + "_c", maxCount); //создаем в файловой системе переменную количества точек на графике с отметкой _c что значит count
+ createChart (widget_name, page_name, page_number, "widgets/widget.chart.json", value_name + "_ch", maxCount); //создаем график в приложении с топиком _ch /prefix/3234045-1589487/value_name_ch
+ if (enter_to_logging_counter == LOG1) {
+ ts.add(LOG1, period_min.toInt() * 1000 * 60, [&](void*) {
+ String tmp_buf_1 = selectFromMarkerToMarker(logging_value_names_list, ",", 0);
+ deleteOldDate("log." + tmp_buf_1 + ".txt", jsonReadInt(configOptionJson, tmp_buf_1 + "_c"), jsonReadStr(configLiveJson, tmp_buf_1));
+ Serial.println("[i] LOGGING for sensor '" + tmp_buf_1 + "' done");
+ }, nullptr, false);
+ }
+ if (enter_to_logging_counter == LOG2) {
+ ts.add(LOG2, period_min.toInt() * 1000 * 60, [&](void*) {
+ String tmp_buf_2 = selectFromMarkerToMarker(logging_value_names_list, ",", 1);
+ deleteOldDate("log." + tmp_buf_2 + ".txt", jsonReadInt(configOptionJson, tmp_buf_2 + "_c"), jsonReadStr(configLiveJson, tmp_buf_2));
+ Serial.println("[i] LOGGING for sensor '" + tmp_buf_2 + "' done");
+ }, nullptr, false);
+ }
+ if (enter_to_logging_counter == LOG3) {
+ ts.add(LOG3, period_min.toInt() * 1000 * 60, [&](void*) {
+ String tmp_buf_3 = selectFromMarkerToMarker(logging_value_names_list, ",", 2);
+ deleteOldDate("log." + tmp_buf_3 + ".txt", jsonReadInt(configOptionJson, tmp_buf_3 + "_c"), jsonReadStr(configLiveJson, tmp_buf_3));
+ Serial.println("[i] LOGGING for sensor '" + tmp_buf_3 + "' done");
+ }, nullptr, false);
+ }
+ if (enter_to_logging_counter == LOG4) {
+ ts.add(LOG4, period_min.toInt() * 1000 * 60, [&](void*) {
+ String tmp_buf_4 = selectFromMarkerToMarker(logging_value_names_list, ",", 3);
+ deleteOldDate("log." + tmp_buf_4 + ".txt", jsonReadInt(configOptionJson, tmp_buf_4 + "_c"), jsonReadStr(configLiveJson, tmp_buf_4));
+ Serial.println("[i] LOGGING for sensor '" + tmp_buf_4 + "' done");
+ }, nullptr, false);
+ }
+ if (enter_to_logging_counter == LOG5) {
+ ts.add(LOG5, period_min.toInt() * 1000 * 60, [&](void*) {
+ String tmp_buf_5 = selectFromMarkerToMarker(logging_value_names_list, ",", 4);
+ deleteOldDate("log." + tmp_buf_5 + ".txt", jsonReadInt(configOptionJson, tmp_buf_5 + "_c"), jsonReadStr(configLiveJson, tmp_buf_5));
+ Serial.println("[i] LOGGING for sensor '" + tmp_buf_5 + "' done");
+ }, nullptr, false);
+ }
}
//=========================================Удаление стрых данных и запись новых==================================================================
void deleteOldDate(String file, int seted_number_of_lines, String date_to_add) {
- String log_date = readFile(file, 5000);
- int current_number_of_lines = count(log_date, "\r\n");
- Serial.println("=====> [i] in log file " + file + " " + current_number_of_lines + " lines");
+ String log_date = readFile(file, 5000);
+ int current_number_of_lines = count(log_date, "\r\n");
+ Serial.println("=====> [i] in log file " + file + " " + current_number_of_lines + " lines");
- if (current_number_of_lines > seted_number_of_lines + 1) {
- SPIFFS.remove("/" + file);
- current_number_of_lines = 0;
+ if (current_number_of_lines > seted_number_of_lines + 1) {
+ SPIFFS.remove("/" + file);
+ current_number_of_lines = 0;
+ }
+ if (current_number_of_lines == 0) {
+ SPIFFS.remove("/" + file);
+ current_number_of_lines = 0;
+ }
+ if (current_number_of_lines > seted_number_of_lines) {
+ log_date = deleteBeforeDelimiter(log_date, "\r\n");
+ if (GetTimeUnix() != "failed") {
+ log_date += GetTimeUnix() + " " + date_to_add + "\r\n";
+ writeFile(file, log_date);
}
- if (current_number_of_lines == 0) {
- SPIFFS.remove("/" + file);
- current_number_of_lines = 0;
+ } else {
+ if (GetTimeUnix() != "failed") {
+ addFile(file, GetTimeUnix() + " " + date_to_add);
}
- if (current_number_of_lines > seted_number_of_lines) {
- log_date = deleteBeforeDelimiter(log_date, "\r\n");
- if (GetTimeUnix() != "failed") {
- log_date += GetTimeUnix() + " " + date_to_add + "\r\n";
- writeFile(file, log_date);
- }
- } else {
- if (GetTimeUnix() != "failed") {
- addFile(file, GetTimeUnix() + " " + date_to_add);
- }
- }
- log_date = "";
+ }
+ log_date = "";
}
//=========================================Выбор какие данные отправлять==================================================================
void choose_log_date_and_send() {
- String all_line = logging_value_names_list;
- while (all_line.length() != 0) {
- String tmp = selectToMarker(all_line, ",");
- sendLogData("log." + tmp + ".txt", tmp + "_ch"
- );
- all_line = deleteBeforeDelimiter(all_line, ",");
- }
- all_line = "";
+ String all_line = logging_value_names_list;
+ while (all_line.length() != 0) {
+ String tmp = selectToMarker (all_line, ",");
+ sendLogData("log." + tmp + ".txt", tmp + "_ch");
+ all_line = deleteBeforeDelimiter(all_line, ",");
+ }
+ all_line = "";
}
-
//=========================================Отправка данных===================================================================================
void sendLogData(String file, String topic) {
- String log_date = readFile(file, 5000);
- if (log_date != "Failed") {
- log_date.replace("\r\n", "\n");
- log_date.replace("\r", "\n");
- String buf = "{}";
- String json_array;
- String unix_time;
- String value;
- while (log_date.length() != 0) {
- String tmp = selectToMarker(log_date, "\n");
- log_date = deleteBeforeDelimiter(log_date, "\n");
- unix_time = selectToMarker(tmp, " ");
- jsonWriteInt(buf, "x", unix_time.toInt());
- value = deleteBeforeDelimiter(tmp, " ");
- jsonWriteFloat(buf, "y1", value.toFloat());
- if (log_date.length() < 3) {
- json_array += buf;
- } else {
- json_array += buf + ",";
- }
- buf = "{}";
- }
- unix_time = "";
- value = "";
- log_date = "";
- json_array = "{\"status\":[" + json_array + "]}";
- Serial.println(json_array);
- sendCHART(topic, json_array);
- json_array = "";
- getMemoryLoad("[i] after send log date");
+ String log_date = readFile(file, 5000);
+ if (log_date != "Failed") {
+ log_date.replace("\r\n", "\n");
+ log_date.replace("\r", "\n");
+ String buf = "{}";
+ String json_array;
+ String unix_time;
+ String value;
+ while (log_date.length() != 0) {
+ String tmp = selectToMarker (log_date, "\n");
+ log_date = deleteBeforeDelimiter(log_date, "\n");
+ unix_time = selectToMarker (tmp, " ");
+ jsonWriteInt(buf, "x", unix_time.toInt());
+ value = deleteBeforeDelimiter(tmp, " ");
+ jsonWriteFloat(buf, "y1", value.toFloat());
+ if (log_date.length() < 3) {
+ json_array += buf;
+ } else {
+ json_array += buf + ",";
+ }
+ buf = "{}";
}
+ unix_time = "";
+ value = "";
+ log_date = "";
+ json_array = "{\"status\":[" + json_array + "]}";
+ Serial.println(json_array);
+ sendCHART(topic, json_array);
+ json_array = "";
+ getMemoryLoad("[i] after send log date");
+ }
}
/*
@@ -162,12 +146,12 @@ void sendLogData(String file, String topic) {
*/
//=========================================Очистка данных===================================================================================
void clean_log_date() {
- String all_line = logging_value_names_list;
- while (all_line.length() != 0) {
- String tmp = selectToMarker(all_line, ",");
- SPIFFS.remove("/log." + tmp + ".txt");
- all_line = deleteBeforeDelimiter(all_line, ",");
- }
- all_line = "";
+ String all_line = logging_value_names_list;
+ while (all_line.length() != 0) {
+ String tmp = selectToMarker (all_line, ",");
+ SPIFFS.remove("/log." + tmp + ".txt");
+ all_line = deleteBeforeDelimiter(all_line, ",");
+ }
+ all_line = "";
}
-#endif
+#endif
\ No newline at end of file
diff --git a/src/Mqtt.cpp b/src/Mqtt.cpp
index 7acbcf16..bdf03cf3 100644
--- a/src/Mqtt.cpp
+++ b/src/Mqtt.cpp
@@ -1,6 +1,7 @@
#include "Global.h"
void callback(char* topic, byte* payload, unsigned int length);
+
String stateMQTT();
void sendAllData();
void sendAllWigets();
@@ -9,74 +10,41 @@ void outcoming_date();
//===============================================ИНИЦИАЛИЗАЦИЯ================================================
void MQTT_init() {
- ts.add(
- WIFI_MQTT_CONNECTION_CHECK, wifi_mqtt_reconnecting, [&](void*) {
- up_time();
- if (WiFi.status() == WL_CONNECTED) {
- Serial.println("[VV] WiFi-ok");
- if (client_mqtt.connected()) {
- Serial.println("[VV] MQTT-ok");
- led_blink("off");
- } else {
- MQTT_Connecting();
- if (!just_load) mqtt_lost_error++;
- }
- } else {
- Serial.println("[E] Lost WiFi connection");
- wifi_lost_error++;
- ts.remove(WIFI_MQTT_CONNECTION_CHECK);
- StartAPMode();
- }
- },
- nullptr, true);
-
- server.on("/mqttSave", HTTP_GET, [](AsyncWebServerRequest* request) {
- if (request->hasArg("mqttServer")) {
- jsonWriteStr(configSetupJson, "mqttServer", request->getParam("mqttServer")->value());
- }
- if (request->hasArg("mqttPort")) {
- int port = (request->getParam("mqttPort")->value()).toInt();
- jsonWriteInt(configSetupJson, "mqttPort", port);
- }
- if (request->hasArg("mqttPrefix")) {
- jsonWriteStr(configSetupJson, "mqttPrefix", request->getParam("mqttPrefix")->value());
- }
- if (request->hasArg("mqttUser")) {
- jsonWriteStr(configSetupJson, "mqttUser", request->getParam("mqttUser")->value());
- }
- if (request->hasArg("mqttPass")) {
- jsonWriteStr(configSetupJson, "mqttPass", request->getParam("mqttPass")->value());
- }
- saveConfig();
- mqtt_connection = true;
-
- request->send(200, "text/text", "ok");
- });
-
- server.on("/mqttCheck", HTTP_GET, [](AsyncWebServerRequest* request) {
- String tmp = "{}";
- jsonWriteStr(tmp, "title", "" + stateMQTT());
- jsonWriteStr(tmp, "class", "pop-up");
- request->send(200, "text/text", tmp);
- });
+ ts.add(WIFI_MQTT_CONNECTION_CHECK, wifi_mqtt_reconnecting, [&](void*) {
+ if (WiFi.status() == WL_CONNECTED) {
+ Serial.println("[VV] WiFi-ok");
+ if (client_mqtt.connected()) {
+ Serial.println("[VV] MQTT-ok");
+ led_blink("off");
+ } else {
+ MQTT_Connecting();
+ if (!just_load) mqtt_lost_error++;
+ }
+ } else {
+ Serial.println("[E] Lost WiFi connection");
+ wifi_lost_error++;
+ ts.remove(WIFI_MQTT_CONNECTION_CHECK);
+ StartAPMode();
+ }
+ }, nullptr, true);
}
void do_mqtt_connection() {
- if (mqtt_connection) {
- mqtt_connection = false;
- client_mqtt.disconnect();
- MQTT_Connecting();
- }
+ if (mqtt_connection) {
+ mqtt_connection = false;
+ client_mqtt.disconnect();
+ MQTT_Connecting();
+ }
}
-void handleMQTT() {
- if (WiFi.status() == WL_CONNECTED) {
- if (client_mqtt.connected()) {
- client_mqtt.loop();
- }
+//================================================ОБНОВЛЕНИЕ====================================================
+void handleMQTT() {
+ if (WiFi.status() == WL_CONNECTED) {
+ if (client_mqtt.connected()) {
+ client_mqtt.loop();
}
+ }
}
-
boolean MQTT_Connecting() {
bool res = false;
String mqtt_server = jsonReadStr(configSetupJson, "mqttServer");
@@ -94,6 +62,9 @@ boolean MQTT_Connecting() {
client_mqtt.subscribe(jsonReadStr(configSetupJson, "mqttPrefix").c_str()); // Для приема получения HELLOW и подтверждения связи
client_mqtt.subscribe((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID + "/+/control").c_str()); // Подписываемся на топики control
client_mqtt.subscribe((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID + "/order").c_str()); // Подписываемся на топики order
+ client_mqtt.subscribe((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID + "/update").c_str());
+ client_mqtt.subscribe((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID + "/devc").c_str());
+ client_mqtt.subscribe((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID + "/devs").c_str());
Serial.println("[V] Callback set, subscribe done");
res = true;
} else {
@@ -108,145 +79,168 @@ boolean MQTT_Connecting() {
return res;
}
+
//=====================================================ВХОДЯЩИЕ ДАННЫЕ========================================================
-void callback(char* topic, byte* payload, unsigned int length) {
- Serial.print("[MQTT] ");
- Serial.print(topic);
- String topic_str = String(topic);
+void callback(char* topic, byte * payload, unsigned int length) {
+ Serial.print("[MQTT] ");
+ Serial.print(topic);
+ String topic_str = String(topic);
- String str;
- for (int i = 0; i < length; i++) {
- str += (char)payload[i];
- }
- Serial.println(" => " + str);
+ String str;
+ for (int i = 0; i < length; i++) {
+ str += (char)payload[i];
+ }
+ Serial.println(" => " + str);
- if (str == "HELLO") outcoming_date();
+ if (str == "HELLO") outcoming_date();
- //превращает название топика в команду, а значение в параметр команды
- if (topic_str.indexOf("control") > 0) { //IoTmanager/800324-1458415/button-sw2/control 1 //IoTmanager/800324-1458415/button99/control 1
- String topic = selectFromMarkerToMarker(topic_str, "/", 3); //button1 //button99
- topic = add_set(topic); //buttonSet1 //buttonSet99
- String number = selectToMarkerLast(topic, "Set"); //1 //99
- topic.replace(number, ""); //buttonSet //buttonSet
- String final_line = topic + " " + number + " " + str; //buttonSet 1 1 //buttonSet 99 1
- order_loop += final_line + ",";
- }
+ //превращает название топика в команду, а значение в параметр команды
+ if (topic_str.indexOf("control") > 0) { //IoTmanager/800324-1458415/button-sw2/control 1 //IoTmanager/800324-1458415/button99/control 1
+ String topic = selectFromMarkerToMarker(topic_str, "/", 3); //button1 //button99
+ topic = add_set(topic); //buttonSet1 //buttonSet99
+ String number = selectToMarkerLast(topic, "Set"); //1 //99
+ topic.replace(number, ""); //buttonSet //buttonSet
+ String final_line = topic + " " + number + " " + str; //buttonSet 1 1 //buttonSet 99 1
+ order_loop += final_line + ",";
+ }
- if (topic_str.indexOf("order") > 0) {
- str.replace("_", " ");
- //Serial.println(str);
- order_loop += str + ",";
- }
- if (topic_str.indexOf("update") > 0) {
- if (str == "1") {
- upgrade = true;
- }
+ if (topic_str.indexOf("order") > 0) {
+ str.replace("_", " ");
+ //Serial.println(str);
+ order_loop += str + ",";
+ }
+ if (topic_str.indexOf("update") > 0) {
+ if (str == "1") {
+ upgrade = true;
}
+ }
+ if (topic_str.indexOf("devc") > 0) {
+ writeFile("firmware.c.txt", str);
+ Device_init();
+ }
+ if (topic_str.indexOf("devs") > 0) {
+ writeFile("firmware.s.txt", str);
+ Scenario_init();
+ }
}
//данные которые отправляем при подключении или отбновлении страницы
void outcoming_date() {
- sendAllWigets();
- sendAllData();
+
+ sendAllWigets();
+ sendAllData();
#ifdef logging_enable
- choose_log_date_and_send();
+ choose_log_date_and_send();
#endif
- Serial.println("[V] Sending all date to iot manager completed");
+ Serial.println("[V] Sending all date to iot manager completed");
}
+
+//======================================CONFIG==================================================
boolean sendMQTT(String end_of_topik, String data) {
- String topik = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID + "/" + end_of_topik;
- boolean send_status = client_mqtt.beginPublish(topik.c_str(), data.length(), false);
- client_mqtt.print(data);
- client_mqtt.endPublish();
- return send_status;
+ String topik = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID + "/" + end_of_topik;
+ boolean send_status = client_mqtt.beginPublish(topik.c_str(), data.length(), false);
+ client_mqtt.print(data);
+ client_mqtt.endPublish();
+ return send_status;
}
boolean sendCHART(String topik, String data) {
- topik = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID + "/" + topik + "/" + "status";
- boolean send_status = client_mqtt.beginPublish(topik.c_str(), data.length(), false);
- client_mqtt.print(data);
- client_mqtt.endPublish();
- return send_status;
+ topik = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID + "/" + topik + "/" + "status";
+ boolean send_status = client_mqtt.beginPublish(topik.c_str(), data.length(), false);
+ client_mqtt.print(data);
+ client_mqtt.endPublish();
+ return send_status;
}
+boolean sendCHART_test(String topik, String data) {
+ topik = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID + "/" + topik + "/" + "status";
+ boolean send_status = client_mqtt.publish (topik.c_str(), data.c_str(), false);
+ return send_status;
+}
+
+//======================================STATUS==================================================
void sendSTATUS(String topik, String state) {
- topik = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID + "/" + topik + "/" + "status";
- String json_ = "{}";
- jsonWriteStr(json_, "status", state);
- client_mqtt.publish(topik.c_str(), json_.c_str(), false);
+ topik = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID + "/" + topik + "/" + "status";
+ String json_ = "{}";
+ jsonWriteStr(json_, "status", state);
+ int send_status = client_mqtt.publish (topik.c_str(), json_.c_str(), false);
}
+//======================================CONTROL==================================================
void sendCONTROL(String id, String topik, String state) {
- String all_line = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + id + "/" + topik + "/control";
- client_mqtt.publish(all_line.c_str(), state.c_str(), false);
+ String all_line = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + id + "/" + topik + "/control";
+ int send_status = client_mqtt.publish (all_line.c_str(), state.c_str(), false);
}
//=====================================================ОТПРАВЛЯЕМ ВИДЖЕТЫ========================================================
#ifdef layout_in_ram
void sendAllWigets() {
- if (all_widgets != "") {
- int counter = 0;
- String line;
- int psn_1 = 0;
- int psn_2;
- do {
- psn_2 = all_widgets.indexOf("\r\n", psn_1); //\r\n
- line = all_widgets.substring(psn_1, psn_2);
- line.replace("\n", "");
- line.replace("\r\n", "");
- //jsonWriteStr(line, "id", String(counter));
- //jsonWriteStr(line, "pageId", String(counter));
- counter++;
- sendMQTT("config", line);
- Serial.println("[V] " + line);
- psn_1 = psn_2 + 1;
- } while (psn_2 + 2 < all_widgets.length());
- getMemoryLoad("[i] after send all widgets");
- }
+ if (all_widgets != "") {
+ int counter = 0;
+ String line;
+ int psn_1 = 0;
+ int psn_2;
+ do {
+ psn_2 = all_widgets.indexOf("\r\n", psn_1); //\r\n
+ line = all_widgets.substring(psn_1, psn_2);
+ line.replace("\n", "");
+ line.replace("\r\n", "");
+ //jsonWriteStr(line, "id", String(counter));
+ //jsonWriteStr(line, "pageId", String(counter));
+ counter++;
+ sendMQTT("config", line);
+ Serial.println("[V] " + line);
+ psn_1 = psn_2 + 1;
+ } while (psn_2 + 2 < all_widgets.length());
+ getMemoryLoad("[i] after send all widgets");
+ }
}
#endif
#ifndef layout_in_ram
void sendAllWigets() {
- File configFile = SPIFFS.open("/layout.txt", "r");
- if (!configFile) {
- return;
- }
- configFile.seek(0, SeekSet); //поставим курсор в начало файла
- while (configFile.position() != configFile.size()) {
- String widget_to_send = configFile.readStringUntil('\n');
- Serial.println("[V] " + widget_to_send);
- sendMQTT("config", widget_to_send);
- }
+ File configFile = SPIFFS.open("/layout.txt", "r");
+ if (!configFile) {
+ return;
+ }
+ configFile.seek(0, SeekSet); //поставим курсор в начало файла
+ while (configFile.position() != configFile.size()) {
+ String widget_to_send = configFile.readStringUntil('\n');
+ Serial.println("[V] " + widget_to_send);
+ sendMQTT("config", widget_to_send);
+ }
}
#endif
//=====================================================ОТПРАВЛЯЕМ ДАННЫЕ В ВИДЖЕТЫ ПРИ ОБНОВЛЕНИИ СТРАНИЦЫ========================================================
-void sendAllData() { //берет строку json и ключи превращает в топики а значения колючей в них посылает
+void sendAllData() { //берет строку json и ключи превращает в топики а значения колючей в них посылает
- String current_config = configLiveJson; //{"name":"MODULES","lang":"","ip":"192.168.43.60","DS":"34.00","rel1":"1","rel2":"1"}
- getMemoryLoad("[i] after send all date");
- current_config.replace("{", "");
- current_config.replace("}", ""); //"name":"MODULES","lang":"","ip":"192.168.43.60","DS":"34.00","rel1":"1","rel2":"1"
- current_config += ","; //"name":"MODULES","lang":"","ip":"192.168.43.60","DS":"34.00","rel1":"1","rel2":"1",
+ String current_config = configLiveJson; //{"name":"MODULES","lang":"","ip":"192.168.43.60","DS":"34.00","rel1":"1","rel2":"1"}
+ getMemoryLoad("[i] after send all date");
+ current_config.replace("{", "");
+ current_config.replace("}", ""); //"name":"MODULES","lang":"","ip":"192.168.43.60","DS":"34.00","rel1":"1","rel2":"1"
+ current_config += ","; //"name":"MODULES","lang":"","ip":"192.168.43.60","DS":"34.00","rel1":"1","rel2":"1",
- while (current_config.length() != 0) {
- String tmp = selectToMarker(current_config, ",");
- String topic = selectToMarker(tmp, ":");
- topic.replace("\"", "");
- String state = selectToMarkerLast(tmp, ":");
- state.replace("\"", "");
- if (topic != "name" && topic != "lang" && topic != "ip" && topic.indexOf("_in") < 0) {
- sendSTATUS(topic, state);
- //Serial.println("-->" + topic + " " + state);
- }
- current_config = deleteBeforeDelimiter(current_config, ",");
+ while (current_config.length() != 0) {
+
+ String tmp = selectToMarker (current_config, ",");
+ String topic = selectToMarker (tmp, ":");
+ topic.replace("\"", "");
+ String state = selectToMarkerLast (tmp, ":");
+ state.replace("\"", "");
+ if (topic != "name" && topic != "lang" && topic != "ip" && topic.indexOf("_in") < 0) {
+ sendSTATUS(topic, state);
+ //Serial.println("-->" + topic + " " + state);
}
+ current_config = deleteBeforeDelimiter(current_config, ",");
+ }
}
+
+
String stateMQTT() {
int state = client_mqtt.state();
switch (state) {
@@ -285,69 +279,3 @@ String stateMQTT() {
break;
}
}
-
-/*void scenario_devices_topiks_subscribe() {
-
- //SCENARIO ANALOG > 5 800324-1458415 rel1 0
- if (jsonReadStr(configSetupJson, "scenario") == "1") {
- //String all_text = readFile("firmware.s.txt", 1024) + "\r\n";
- String all_text = scenario + "\r\n";
- all_text.replace("\r\n", "\n");
- all_text.replace("\r", "\n");
- while (all_text.length() != 0) {
- String line_ = selectToMarker (all_text, "\n");
- String id = selectFromMarkerToMarker(line_, " ", 4);
- if (id != "not found") {
- client_mqtt.subscribe((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + id + "/+/status").c_str(), 0);
- Serial.println("subscribed to device, id: " + id);
- }
- all_text = deleteBeforeDelimiter(all_text, "\n");
- }
- }
- }
-*/
-/*void scenario_devices_test_msg_send() {
-
- if (jsonReadStr(configSetupJson, "scenario") == "1") {
-
- String all_text = scenario + "\r\n";
- all_text.replace("\r\n", "\n");
- all_text.replace("\r", "\n");
- while (all_text.length() != 0) {
- String line_ = selectToMarker (all_text, "\n");
- String id = selectFromMarkerToMarker(line_, " ", 4);
- if (id != "not found") {
- //Serial.println();
- Serial.println(client_mqtt.publish ((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + id).c_str(), "CHECK", true));
-
- }
- all_text = deleteBeforeDelimiter(all_text, "\n");
- }
- }
- }*/
-
-/*
- //-----------------------------------------------------------------------------------------------------------------------------------------------
- //jsonWriteStr(tmp, "status", "1");
-
- String current_config = configLiveJson; //{"name":"MODULES","lang":"","ip":"192.168.43.60","DS":"34.00","rel1":"1","rel2":"1"}
- current_config.replace("{", "");
- current_config.replace("}", ""); //"name":"MODULES","lang":"","ip":"192.168.43.60","DS":"34.00","rel1":"1","rel2":"1"
- current_config += ","; //"name":"MODULES","lang":"","ip":"192.168.43.60","DS":"34.00","rel1":"1","rel2":"1",
-
- while (current_config.length() != 0) {
-
- String tmp = selectToMarker (current_config, ","); //"rel1":"1"
- String topic = selectToMarker (tmp, ":"); //"rel1"
- topic.replace("\"", ""); //rel1
- Serial.println(topic);
- String state = selectToMarkerLast (tmp, ":"); //"1"
- state.replace("\"", ""); //1
-
- //if (widget.lastIndexOf(topic) > 0) {
- jsonWriteStr(tmp, "status", state);
- //}
- current_config = deleteBeforeDelimiter(current_config, ",");
- }
- //-------------------------------------------------------------------------------------------------------------------------------------------------
-*/
diff --git a/src/Scenario.cpp b/src/Scenario.cpp
index a653dd2b..37dfecb0 100644
--- a/src/Scenario.cpp
+++ b/src/Scenario.cpp
@@ -1,95 +1,96 @@
#include "Global.h"
void handleScenario() {
- if (jsonReadStr(configSetupJson, "scenario") == "1") {
- if ((jsonReadStr(configOptionJson, "scenario_status") != "")) {
- int i = 0;
- String str = scenario; //читаем переменную с сценариями (то что из файла на странице)
- str += "\n";
- str.replace("\r\n", "\n");
- str.replace("\r", "\n");
- while (str.length() != 0) {
- //-----------------------------------------------------------------------------------------------------------------------
- String tmp = selectToMarker(str, "end"); //выделяем первый сценарий из файла вместе с командами
- if (tmp == "") return;
- i++;
- if (scenario_line_status[i] == 1) {
- //Serial.println(i);
- String condition = selectToMarker(tmp, "\n"); //выделяем первую строку самого сценария button1 = 1 (условие)
- String param_name = selectFromMarkerToMarker(condition, " ", 0);
- String order = jsonReadStr(configOptionJson, "scenario_status"); //читаем весь файл событий
- String param = selectToMarker(order, ","); //читаем первое событие из файла событий
- if (param_name == param) { //если поступившее событие равно событию заданному buttonSet1 в файле начинаем его обработку
+ if (jsonReadStr(configSetupJson, "scen") == "1") {
+ if ((jsonReadStr(configOptionJson, "scenario_status") != "")) {
+ int i = 0;
+ String str = scenario; //читаем переменную с сценариями (то что из файла на странице)
+ str += "\n";
+ str.replace("\r\n", "\n");
+ str.replace("\r", "\n");
+ while (str.length() != 0) {
+ //-----------------------------------------------------------------------------------------------------------------------
+ String tmp = selectToMarker (str, "end"); //выделяем первый сценарий из файла вместе с командами
+ if (tmp == "") return;
+ i++;
- String sign = selectFromMarkerToMarker(condition, " ", 1); //читаем знак (=)
- String value = selectFromMarkerToMarker(condition, " ", 2); //читаем значение (1)
- if (value.indexOf("digit") != -1) {
- // value = add_set(value);
- value = jsonReadStr(configLiveJson, value);
- }
- if (value.indexOf("time") != -1) {
- // value = add_set(value);
- value = jsonReadStr(configLiveJson, value);
- }
- boolean flag = false; //если одно из значений совпало то только тогда начинаем выполнять комнады
- if (sign == "=") {
- if (jsonReadStr(configLiveJson, param_name) == value) flag = true;
- }
- if (sign == "!=") {
- if (jsonReadStr(configLiveJson, param_name) != value) flag = true;
- }
- if (sign == "<") {
- if (jsonReadStr(configLiveJson, param_name).toInt() < value.toInt()) flag = true;
- }
- if (sign == ">") {
- if (jsonReadStr(configLiveJson, param_name).toInt() > value.toInt()) flag = true;
- }
- if (sign == ">=") {
- if (jsonReadStr(configLiveJson, param_name).toInt() >= value.toInt()) flag = true;
- }
- if (sign == "<=") {
- if (jsonReadStr(configLiveJson, param_name).toInt() <= value.toInt()) flag = true;
- }
+ if (scenario_line_status[i] == 1) {
+ //Serial.println(i);
+ String condition = selectToMarker (tmp, "\n"); //выделяем первую строку самого сценария button1 = 1 (условие)
+ String param_name = selectFromMarkerToMarker(condition, " " , 0);
+ String order = jsonReadStr(configOptionJson, "scenario_status"); //читаем весь файл событий
+ String param = selectToMarker (order, ","); //читаем первое событие из файла событий
+ if (param_name == param) { //если поступившее событие равно событию заданному buttonSet1 в файле начинаем его обработку
- if (flag) {
- //удаляем строку самого сценария оставляя только команды
- tmp = deleteBeforeDelimiter(tmp, "\n");
- //выполняем все команды
- stringExecution(tmp);
- Serial.println("[SCENARIO] '" + condition + "'");
- }
- }
- }
- str = deleteBeforeDelimiter(str, "end\n"); //удаляем первый сценарий
- //-----------------------------------------------------------------------------------------------------------------------
+ String sign = selectFromMarkerToMarker(condition, " " , 1); //читаем знак (=)
+ String value = selectFromMarkerToMarker(condition, " " , 2); //читаем значение (1)
+ if (value.indexOf("digit") != -1) {
+ // value = add_set(value);
+ value = jsonReadStr(configLiveJson, value);
}
- String tmp2 = jsonReadStr(configOptionJson, "scenario_status"); //читаем файл событий
- tmp2 = deleteBeforeDelimiter(tmp2, ","); //удаляем выполненное событие
- jsonWriteStr(configOptionJson, "scenario_status", tmp2); //записываем обновленный файл событий
- i = 0;
+ if (value.indexOf("time") != -1) {
+ // value = add_set(value);
+ value = jsonReadStr(configLiveJson, value);
+ }
+ boolean flag = false; //если одно из значений совпало то только тогда начинаем выполнять комнады
+ if (sign == "=") {
+ if (jsonReadStr(configLiveJson, param_name) == value) flag = true;
+ }
+ if (sign == "!=") {
+ if (jsonReadStr(configLiveJson, param_name) != value) flag = true;
+ }
+ if (sign == "<") {
+ if (jsonReadStr(configLiveJson, param_name).toInt() < value.toInt()) flag = true;
+ }
+ if (sign == ">") {
+ if (jsonReadStr(configLiveJson, param_name).toInt() > value.toInt()) flag = true;
+ }
+ if (sign == ">=") {
+ if (jsonReadStr(configLiveJson, param_name).toInt() >= value.toInt()) flag = true;
+ }
+ if (sign == "<=") {
+ if (jsonReadStr(configLiveJson, param_name).toInt() <= value.toInt()) flag = true;
+ }
+
+ if (flag) {
+ tmp = deleteBeforeDelimiter(tmp, "\n"); //удаляем строку самого сценария оставляя только команды
+ stringExecution(tmp); //выполняем все команды
+
+ Serial.println("[SCENARIO] '" + condition + "'");
+ //Serial.println(" " + tmp);
+ }
+ }
}
+ str = deleteBeforeDelimiter(str, "end\n"); //удаляем первый сценарий
+ //-----------------------------------------------------------------------------------------------------------------------
+ }
+ String tmp2 = jsonReadStr(configOptionJson, "scenario_status"); //читаем файл событий
+ tmp2 = deleteBeforeDelimiter(tmp2, ","); //удаляем выполненное событие
+ jsonWriteStr(configOptionJson, "scenario_status", tmp2); //записываем обновленный файл событий
+ i = 0;
}
+ }
}
-//событие выглядит как имя плюс set плюс номер: button+Set+1
-void eventGen(String event_name, String number) {
- if (jsonReadStr(configSetupJson, "scenario") == "1") {
- String tmp = jsonReadStr(configOptionJson, "scenario_status"); //генерирование события
- //Serial.println(event_name);
- jsonWriteStr(configOptionJson, "scenario_status", tmp + event_name + number + ",");
- }
+void eventGen (String event_name, String number) { //событие выглядит как имя плюс set плюс номер: button+Set+1
+
+ if (jsonReadStr(configSetupJson, "scen") == "1") {
+ String tmp = jsonReadStr(configOptionJson, "scenario_status") ; //генерирование события
+ //Serial.println(event_name);
+ jsonWriteStr(configOptionJson, "scenario_status", tmp + event_name + number + ",");
+ }
}
String add_set(String param_name) {
- String num1 = param_name.substring(param_name.length() - 1);
- String num2 = param_name.substring(param_name.length() - 2, param_name.length() - 1);
- if (isDigitStr(num1) && isDigitStr(num2)) {
- param_name = param_name.substring(0, param_name.length() - 2) + "Set" + num2 + num1;
- } else {
- if (isDigitStr(num1)) {
- param_name = param_name.substring(0, param_name.length() - 1) + "Set" + num1;
- }
+ String num1 = param_name.substring(param_name.length() - 1);
+ String num2 = param_name.substring(param_name.length() - 2, param_name.length() - 1);
+ if (isDigitStr(num1) && isDigitStr(num2)) {
+ param_name = param_name.substring(0, param_name.length() - 2) + "Set" + num2 + num1;
+ } else {
+ if (isDigitStr(num1)) {
+ param_name = param_name.substring(0, param_name.length() - 1) + "Set" + num1;
}
- return param_name;
-}
+ }
+ return param_name;
+}
\ No newline at end of file
diff --git a/src/TimeUtils.cpp b/src/TimeUtils.cpp
index b7cda1cc..b16d414e 100644
--- a/src/TimeUtils.cpp
+++ b/src/TimeUtils.cpp
@@ -1,146 +1,133 @@
#include "Global.h"
void Time_Init() {
- server.on("/time", HTTP_GET, [](AsyncWebServerRequest* request) {
- if (request->hasArg("timezone")) {
- jsonWriteStr(configSetupJson, "timezone", request->getParam("timezone")->value());
- }
- if (request->hasArg("ntp")) {
- jsonWriteStr(configSetupJson, "ntp", request->getParam("ntp")->value());
- }
- saveConfig();
- reconfigTime();
- request->send(200, "text/text", "OK");
- });
-
- ts.add(
- TIME_SYNC, 30000, [&](void*) {
- time_check();
- },
- nullptr, true);
+ ts.add(TIME_SYNC, 30000, [&](void*) {
+ time_check();
+ }, nullptr, true);
}
void time_check() {
- if (GetTimeUnix() == "failed") {
- Serial.println("[i] Time is not synchronized, start synchronization");
- reconfigTime();
- }
+ if (GetTimeUnix() == "failed") {
+ Serial.println("[i] Time is not synchronized, start synchronization");
+ reconfigTime();
+ }
}
void reconfigTime() {
- if (WiFi.status() == WL_CONNECTED) {
- String ntp = jsonReadStr(configSetupJson, "ntp");
- configTime(0, 0, ntp.c_str());
- int i = 0;
- Serial.println("[i] Awaiting for time ");
+ if (WiFi.status() == WL_CONNECTED) {
+ String ntp = jsonReadStr(configSetupJson, "ntp");
+ configTime(0, 0, ntp.c_str());
+ int i = 0;
+ Serial.println("[i] Awaiting for time ");
#ifdef ESP32
- struct tm timeinfo;
- while (!getLocalTime(&timeinfo) && i <= 4) {
- Serial.print(".");
- i++;
- delay(1000);
- }
+ struct tm timeinfo;
+ while (!getLocalTime(&timeinfo) && i <= 4) {
+ Serial.print(".");
+ i++;
+ delay(1000);
+ }
#endif
#ifdef ESP8266
- //while (!time(nullptr) && i < 4) {
- // Serial.print(".");
- // i++;
- delay(2000);
- //}
+ //while (!time(nullptr) && i < 4) {
+ // Serial.print(".");
+ // i++;
+ delay(2000);
+ //}
#endif
- if (GetTimeUnix() != "failed") {
- Serial.print("[V] Time synchronized = ");
- Serial.print(GetDataDigital());
- Serial.print(" ");
- Serial.println(GetTime());
- } else {
- Serial.println("[E] Time server or internet connection error, will try again in 30 sec");
- }
+ if (GetTimeUnix() != "failed") {
+ Serial.print("[V] Time synchronized = ");
+ Serial.print(GetDataDigital());
+ Serial.print(" ");
+ Serial.println(GetTime());
} else {
- Serial.println("[E] Get time impossible, no wifi connection");
+ Serial.println("[E] Time server or internet connection error, will try again in 30 sec");
}
+ } else {
+ Serial.println("[E] Get time impossible, no wifi connection");
+ }
}
//Получаем время в формате linux gmt
String GetTimeUnix() {
- time_t now = time(nullptr);
- if (now < 30000) {
- return "failed";
- } else {
- return String(now);
- }
+ time_t now = time(nullptr);
+ if (now < 30000) {
+ return "failed";
+ } else {
+ return String(now);
+ }
}
-
// Получение текущего времени
String GetTime() {
- time_t now = time(nullptr); // получаем время с помощью библиотеки time.h
- int zone = 3600 * jsonReadStr(configSetupJson, "timezone").toInt();
- now = now + zone;
- String Time = ""; // Строка для результатов времени
- Time += ctime(&now); // Преобразуем время в строку формата Thu Jan 19 00:55:35 2017
- int i = Time.indexOf(":"); //Ишем позицию первого символа :
- Time = Time.substring(i - 2, i + 6); // Выделяем из строки 2 символа перед символом : и 6 символов после
- return Time; // Возврашаем полученное время
+ time_t now = time(nullptr); // получаем время с помощью библиотеки time.h
+ int zone = 3600 * jsonReadStr(configSetupJson, "timezone").toInt();
+ now = now + zone;
+ String Time = ""; // Строка для результатов времени
+ Time += ctime(&now); // Преобразуем время в строку формата Thu Jan 19 00:55:35 2017
+ int i = Time.indexOf(":"); //Ишем позицию первого символа :
+ Time = Time.substring(i - 2, i + 6); // Выделяем из строки 2 символа перед символом : и 6 символов после
+ return Time; // Возврашаем полученное время
}
String GetTimeWOsec() {
- time_t now = time(nullptr); // получаем время с помощью библиотеки time.h
- int zone = 3600 * jsonReadStr(configSetupJson, "timezone").toInt();
- now = now + zone;
- String Time = ""; // Строка для результатов времени
- Time += ctime(&now); // Преобразуем время в строку формата Thu Jan 19 00:55:35 2017
- int i = Time.indexOf(":"); //Ишем позицию первого символа :
- Time = Time.substring(i - 2, i + 3); // Выделяем из строки 2 символа перед символом : и 6 символов после
- return Time; // Возврашаем полученное время
+ time_t now = time(nullptr); // получаем время с помощью библиотеки time.h
+ int zone = 3600 * jsonReadStr(configSetupJson, "timezone").toInt();
+ now = now + zone;
+ String Time = ""; // Строка для результатов времени
+ Time += ctime(&now); // Преобразуем время в строку формата Thu Jan 19 00:55:35 2017
+ int i = Time.indexOf(":"); //Ишем позицию первого символа :
+ Time = Time.substring(i - 2, i + 3); // Выделяем из строки 2 символа перед символом : и 6 символов после
+ return Time; // Возврашаем полученное время
}
// Получение даты
String GetDate() {
- time_t now = time(nullptr); // получаем время с помощью библиотеки time.h
- int zone = 3600 * jsonReadStr(configSetupJson, "timezone").toInt();
- now = now + zone;
- String Data = ""; // Строка для результатов времени
- Data += ctime(&now); // Преобразуем время в строку формата Thu Jan 19 00:55:35 2017
- Data.replace("\n", "");
- uint8_t i = Data.lastIndexOf(" "); //Ишем позицию последнего символа пробел
- String Time = Data.substring(i - 8, i + 1); // Выделяем время и пробел
- Data.replace(Time, ""); // Удаляем из строки 8 символов времени и пробел
- return Data; // Возврашаем полученную дату
+ time_t now = time(nullptr); // получаем время с помощью библиотеки time.h
+ int zone = 3600 * jsonReadStr(configSetupJson, "timezone").toInt();
+ now = now + zone;
+ String Data = ""; // Строка для результатов времени
+ Data += ctime(&now); // Преобразуем время в строку формата Thu Jan 19 00:55:35 2017
+ Data.replace("\n", "");
+ uint8_t i = Data.lastIndexOf(" "); //Ишем позицию последнего символа пробел
+ String Time = Data.substring(i - 8, i + 1); // Выделяем время и пробел
+ Data.replace(Time, ""); // Удаляем из строки 8 символов времени и пробел
+ return Data; // Возврашаем полученную дату
}
String GetDataDigital() {
- String date = GetDate();
- date = deleteBeforeDelimiter(date, " ");
- date.replace("Jan", "01");
- date.replace("Feb", "02");
- date.replace("Mar", "03");
- date.replace("Apr", "04");
- date.replace("May", "05");
- date.replace("Jun", "06");
- date.replace("Jul", "07");
- date.replace("Aug", "08");
- date.replace("Sep", "09");
- date.replace("Oct", "10");
- date.replace("Nov", "11");
- date.replace("Dec", "12");
+ String date = GetDate();
- String month = date.substring(0, 2);
- String day = date.substring(3, 5);
- String year = date.substring(8, 10);
+ date = deleteBeforeDelimiter(date, " ");
- String out = day;
- out += ".";
- out += month;
- out += ".";
- out += year;
+ date.replace("Jan", "01");
+ date.replace("Feb", "02");
+ date.replace("Mar", "03");
+ date.replace("Apr", "04");
+ date.replace("May", "05");
+ date.replace("Jun", "06");
+ date.replace("Jul", "07");
+ date.replace("Aug", "08");
+ date.replace("Sep", "09");
+ date.replace("Oct", "10");
+ date.replace("Nov", "11");
+ date.replace("Dec", "12");
- return out;
+ String month = date.substring(0, 2);
+ String day = date.substring(3, 5);
+ String year = date.substring(8, 10);
+
+ String out = day;
+ out += ".";
+ out += month;
+ out += ".";
+ out += year;
+
+ return out;
}
int timeToMin(String Time) {
- //"00:00:00" время в секунды
- long min = selectToMarker(Time, ":").toInt() * 60; //общее количество секунд в полных часах
- Time = deleteBeforeDelimiter(Time, ":"); // Теперь здесь минуты секунды
- min += selectToMarker(Time, ":").toInt(); // Добавим секунды из полных минут
- return min;
-}
+ //"00:00:00" время в секунды
+ long min = selectToMarker(Time, ":").toInt() * 60; //общее количество секунд в полных часах
+ Time = deleteBeforeDelimiter (Time, ":"); // Теперь здесь минуты секунды
+ min += selectToMarker(Time, ":").toInt(); // Добавим секунды из полных минут
+ return min;
+}
\ No newline at end of file
diff --git a/src/Timers.cpp b/src/Timers.cpp
index 73dfe5e9..6cef52ba 100644
--- a/src/Timers.cpp
+++ b/src/Timers.cpp
@@ -1,89 +1,91 @@
#include "Global.h"
+//================================================================================================================
+//=========================================Таймеры=================================================================
void Timer_countdown_init() {
- ts.add(
- TIMER_COUNTDOWN, 1000, [&](void*) {
- String old_line = jsonReadStr(configOptionJson, "timers");
- if (old_line != "") {
- //Serial.println(old_line);
- int i = 0;
- do {
- String timer = selectFromMarkerToMarker(old_line, ",", i);
- Serial.print("timer no " + String(i) + ": ");
- Serial.println(timer);
- if (timer == "not found" || timer == "") return;
- int number = selectToMarker(timer, ":").toInt();
- int time = readTimer(number);
- if (time == 0) {
- delTimer(String(number));
- jsonWriteStr(configLiveJson, "timer" + String(number), "0");
- eventGen("timer", String(number));
- } else {
- time--;
- addTimer(String(number), String(time));
- }
- i++;
- } while (i <= 9);
- }
- },
- nullptr, true);
+
+ ts.add(TIMER_COUNTDOWN, 1000, [&](void*) {
+
+ String old_line = jsonReadStr(configOptionJson, "timers");
+ if (old_line != "") {
+ //Serial.println(old_line);
+ int i = 0;
+ do {
+ String timer = selectFromMarkerToMarker(old_line, "," , i);
+ Serial.print("timer no " + String (i) + ": ");
+ Serial.println(timer);
+ if (timer == "not found" || timer == "") return;
+ int number = selectToMarker (timer, ":").toInt();
+ int time = readTimer(number);
+ if (time == 0) {
+ delTimer (String (number));
+ jsonWriteStr(configLiveJson, "timer" + String(number), "0");
+ eventGen ("timer", String(number));
+ } else {
+ time--;
+ addTimer(String (number), String (time));
+ }
+ i++;
+ } while (i <= 9);
+ }
+ }, nullptr, true);
}
void timerStart_() {
- String number = sCmd.next();
- String period_of_time = sCmd.next();
- String type = sCmd.next();
- if (period_of_time.indexOf("digit") != -1) {
- period_of_time = jsonReadStr(configLiveJson, period_of_time);
- }
- if (type == "sec") period_of_time = period_of_time;
- if (type == "min") period_of_time = String(period_of_time.toInt() * 60);
- if (type == "hours") period_of_time = String(period_of_time.toInt() * 60 * 60);
- addTimer(number, period_of_time);
- jsonWriteStr(configLiveJson, "timer" + number, "1");
+ String number = sCmd.next();
+ String period_of_time = sCmd.next();
+ String type = sCmd.next();
+ if (period_of_time.indexOf("digit") != -1) {
+ //period_of_time = add_set(period_of_time);
+ period_of_time = jsonReadStr(configLiveJson, period_of_time);
+ }
+ if (type == "sec") period_of_time = period_of_time;
+ if (type == "min") period_of_time = String(period_of_time.toInt() * 60);
+ if (type == "hours") period_of_time = String(period_of_time.toInt() * 60 * 60);
+ addTimer(number, period_of_time);
+ jsonWriteStr(configLiveJson, "timer" + number, "1");
}
-
void addTimer(String number, String time) {
- String tmp = jsonReadStr(configOptionJson, "timers"); //1:60,2:120,
- String new_timer = number + ":" + time;
- int psn1 = tmp.indexOf(number + ":"); //0 ищем позицию таймера который надо заменить
- if (psn1 != -1) { //если он есть
- int psn2 = tmp.indexOf(",", psn1); //4 от этой позиции находим позицию запятой
- String timer = tmp.substring(psn1, psn2); //1:60 выделяем таймер который надо заменить
- ///tmp.replace(timer, new_timer); //заменяем таймер на новый (во всей стороке)
- tmp.replace(timer + ",", "");
- tmp += new_timer + ",";
- } else { //если его нет
- tmp += new_timer + ",";
- }
- jsonWriteStr(configOptionJson, "timers", tmp);
- //Serial.println("ura");
+ String tmp = jsonReadStr(configOptionJson, "timers"); //1:60,2:120,
+ String new_timer = number + ":" + time;
+ int psn1 = tmp.indexOf(number + ":"); //0 ищем позицию таймера который надо заменить
+ if (psn1 != -1) { //если он есть
+ int psn2 = tmp.indexOf(",", psn1); //4 от этой позиции находим позицию запятой
+ String timer = tmp.substring(psn1, psn2); //1:60 выделяем таймер который надо заменить
+ ///tmp.replace(timer, new_timer); //заменяем таймер на новый (во всей стороке)
+ tmp.replace(timer + ",", "");
+ tmp += new_timer + ",";
+ } else { //если его нет
+ tmp += new_timer + ",";
+ }
+ jsonWriteStr(configOptionJson, "timers", tmp);
+ //Serial.println("ura");
}
void timerStop_() {
- String number = sCmd.next();
- delTimer(number);
+ String number = sCmd.next();
+ delTimer(number);
}
-void delTimer(String number) {
- String tmp = jsonReadStr(configOptionJson, "timers"); //1:60,2:120,
- int psn1 = tmp.indexOf(number + ":"); //0 ищем позицию таймера который надо удалить
- if (psn1 != -1) { //если он есть
- int psn2 = tmp.indexOf(",", psn1); //4 от этой позиции находим позицию запятой
- String timer = tmp.substring(psn1, psn2) + ","; //1:60, выделяем таймер который надо удалить
- tmp.replace(timer, ""); //удаляем таймер
- jsonWriteStr(configOptionJson, "timers", tmp);
- }
+void delTimer (String number) {
+ String tmp = jsonReadStr(configOptionJson, "timers"); //1:60,2:120,
+ int psn1 = tmp.indexOf(number + ":"); //0 ищем позицию таймера который надо удалить
+ if (psn1 != -1) { //если он есть
+ int psn2 = tmp.indexOf(",", psn1); //4 от этой позиции находим позицию запятой
+ String timer = tmp.substring(psn1, psn2) + ","; //1:60, выделяем таймер который надо удалить
+ tmp.replace(timer, ""); //удаляем таймер
+ jsonWriteStr(configOptionJson, "timers", tmp);
+ }
}
int readTimer(int number) {
- String tmp = jsonReadStr(configOptionJson, "timers"); //1:60,2:120,
- int psn1 = tmp.indexOf(String(number) + ":"); //0 ищем позицию таймера который надо прочитать
- String timer;
- if (psn1 != -1) { //если он есть
- int psn2 = tmp.indexOf(",", psn1); //4 от этой позиции находим позицию запятой
- timer = tmp.substring(psn1, psn2); //1:60 выделяем таймер который надо прочитать
- timer = deleteBeforeDelimiter(timer, ":");
- }
- return timer.toInt();
-}
+ String tmp = jsonReadStr(configOptionJson, "timers"); //1:60,2:120,
+ int psn1 = tmp.indexOf(String(number) + ":"); //0 ищем позицию таймера который надо прочитать
+ String timer;
+ if (psn1 != -1) { //если он есть
+ int psn2 = tmp.indexOf(",", psn1); //4 от этой позиции находим позицию запятой
+ timer = tmp.substring(psn1, psn2); //1:60 выделяем таймер который надо прочитать
+ timer = deleteBeforeDelimiter(timer, ":");
+ }
+ return timer.toInt();
+}
\ No newline at end of file
diff --git a/src/Upgrade.cpp b/src/Upgrade.cpp
index e8982117..329588fd 100644
--- a/src/Upgrade.cpp
+++ b/src/Upgrade.cpp
@@ -1,125 +1,89 @@
#include "Global.h"
-static const char* UPDATE_URL PROGMEM = "http://91.204.228.124:1100/update/%s/%s";
-static const char* FIRMWARE_FILE = "esp32-esp8266_iot-manager_modules_firmware.spiffs.bin";
-#ifdef ESP32
-static const char* MCU = "esp32";
-#else
-static const char* MCU = "esp8266";
-#endif
-
-const String createUrl(const char* qry) {
- char buf[128];
- sprintf_P(buf, UPDATE_URL, MCU, qry);
- return String(buf);
-}
-
-const String getVersionUrl() {
- return createUrl("version.txt");
-}
-
-const String getFirmwareUrl() {
- return createUrl(FIRMWARE_FILE);
-}
-
void initUpgrade() {
- String last_version = WiFi.status() == WL_CONNECTED ? getURL(getVersionUrl()) : "";
- jsonWriteStr(configSetupJson, "last_version", last_version);
-
- Serial.printf("[i] Last firmware version: %s\n", last_version.c_str());
-
- server.on("/check", HTTP_GET, [last_version](AsyncWebServerRequest* request) {
- upgrade_url = true;
- Serial.printf("[i] Last firmware version: %s\n", last_version.c_str());
- String tmp = "{}";
- if (WiFi.status() == WL_CONNECTED) {
- if (mb_4_of_memory) {
- if (last_version != "") {
- if (last_version != "error") {
- if (last_version == firmware_version) {
- jsonWriteStr(tmp, "title", "Последняя версия прошивки уже установлена.");
- jsonWriteStr(tmp, "class", "pop-up");
- } else {
- jsonWriteStr(tmp, "title", "Имеется новая версия прошивкиИдет обновление прошивки, после обновления страница перезагрузится автоматически...')\">Установить");
- jsonWriteStr(tmp, "class", "pop-up");
- }
- } else {
- jsonWriteStr(tmp, "title", "Ошибка... Cервер не найден. Попробуйте позже...");
- jsonWriteStr(tmp, "class", "pop-up");
- }
- } else {
- jsonWriteStr(tmp, "title", "Нажмите на кнопку \"обновить прошивку\" повторно...");
- jsonWriteStr(tmp, "class", "pop-up");
- }
- } else {
- jsonWriteStr(tmp, "title", "Обновление по воздуху не поддерживается, модуль имеет меньше 4 мб памяти...");
- jsonWriteStr(tmp, "class", "pop-up");
- }
- } else {
- jsonWriteStr(tmp, "title", "Устройство не подключен к роутеру...");
- jsonWriteStr(tmp, "class", "pop-up");
- }
- request->send(200, "text/text", tmp);
- });
-
- server.on("/upgrade", HTTP_GET, [](AsyncWebServerRequest* request) {
- upgrade = true;
- String tmp = "{}";
- request->send(200, "text/text", "ok");
- });
+#ifdef ESP8266
+ if (WiFi.status() == WL_CONNECTED) last_version = getURL("http://91.204.228.124:1100/update/esp8266/version.txt");
+#endif
+#ifdef ESP32
+ if (WiFi.status() == WL_CONNECTED) last_version = getURL("http://91.204.228.124:1100/update/esp32/version.txt");
+#endif
+ jsonWriteStr(configSetupJson, "last_version", last_version);
+ Serial.print("[i] Last firmware version: ");
+ Serial.println(last_version);
}
void do_upgrade_url() {
- if (upgrade_url) {
- upgrade_url = false;
- last_version = getURL(getVersionUrl());
- jsonWriteStr(configSetupJson, "last_version", last_version);
- }
+ if (upgrade_url) {
+ upgrade_url = false;
+#ifdef ESP32
+ last_version = getURL("http://91.204.228.124:1100/update/esp32/version.txt");
+#endif
+#ifdef ESP8266
+ last_version = getURL("http://91.204.228.124:1100/update/esp8266/version.txt");
+#endif
+ jsonWriteStr(configSetupJson, "last_version", last_version);
+ }
}
void upgrade_firmware() {
- String scenario_for_update;
- String config_for_update;
- String configSetupJson_for_update;
- scenario_for_update = readFile("firmware.s.txt", 4000);
- config_for_update = readFile("firmware.c.txt", 4000);
- configSetupJson_for_update = configSetupJson;
- Serial.println("Start upgrade SPIFFS, please wait...");
+ String scenario_for_update;
+ String config_for_update;
+ String configSetup_for_update;
+ scenario_for_update = readFile("firmware.s.txt", 4000);
+ config_for_update = readFile("firmware.c.txt", 4000);
+ configSetup_for_update = configSetupJson;
- WiFiClient client_for_upgrade;
+ Serial.println("Start upgrade SPIFFS, please wait...");
- httpUpdate.rebootOnUpdate(false);
- t_httpUpdate_return ret = httpUpdate.updateSpiffs(client_for_upgrade, getFirmwareUrl());
+ WiFiClient client_for_upgrade;
+
+#ifdef ESP32
+ httpUpdate.rebootOnUpdate(false);
+ t_httpUpdate_return ret = httpUpdate.updateSpiffs(client_for_upgrade, "http://91.204.228.124:1100/update/esp32/esp32-esp8266_iot-manager_modules_firmware.spiffs.bin");
+#endif
+#ifdef ESP8266
+ ESPhttpUpdate.rebootOnUpdate(false);
+ t_httpUpdate_return ret = ESPhttpUpdate.updateSpiffs(client_for_upgrade, "http://91.204.228.124:1100/update/esp8266/esp32-esp8266_iot-manager_modules_firmware.spiffs.bin");
+#endif
+
+ if (ret == HTTP_UPDATE_OK) {
+
+ writeFile("firmware.s.txt", scenario_for_update);
+ writeFile("firmware.c.txt", config_for_update);
+ writeFile("config.json", configSetup_for_update);
+ saveConfig();
+
+ Serial.println("SPIFFS upgrade done!");
+ Serial.println("Start upgrade BUILD, please wait...");
+
+#ifdef ESP32
+ //httpUpdate.rebootOnUpdate(true);
+ t_httpUpdate_return ret = httpUpdate.update(client_for_upgrade, "http://91.204.228.124:1100/update/esp32/esp32-esp8266_iot-manager_modules_firmware.ino.bin");
+#endif
+#ifdef ESP8266
+ //ESPhttpUpdate.rebootOnUpdate(true);
+ t_httpUpdate_return ret = ESPhttpUpdate.update(client_for_upgrade, "http://91.204.228.124:1100/update/esp8266/esp32-esp8266_iot-manager_modules_firmware.ino.bin");
+#endif
if (ret == HTTP_UPDATE_OK) {
- writeFile("firmware.s.txt", scenario_for_update);
- writeFile("firmware.c.txt", config_for_update);
- writeFile("config.json", configSetupJson_for_update);
- saveConfig();
- Serial.println("SPIFFS upgrade done!");
- Serial.println("Start upgrade BUILD, please wait...");
-
- t_httpUpdate_return ret = httpUpdate.update(client_for_upgrade, getFirmwareUrl());
-
- if (ret == HTTP_UPDATE_OK) {
- Serial.println("BUILD upgrade done!");
- Serial.println("Restart ESP....");
- ESP.restart();
- } else {
- Serial.println("!!!!BUILD upgrade ERROR");
- }
+ Serial.println("BUILD upgrade done!");
+ Serial.println("Restart ESP....");
+ ESP.restart();
} else {
- Serial.println("!!!!SPIFFS upgrade ERROR");
+ Serial.println("!!!!BUILD upgrade ERROR");
}
+ } else {
+ Serial.println("!!!!SPIFFS upgrade ERROR");
+ }
}
void do_upgrade() {
- if (upgrade) {
- upgrade = false;
- upgrade_firmware();
- }
+ if (upgrade) {
+ upgrade = false;
+ upgrade_firmware();
+ }
}
/*
@@ -128,95 +92,12 @@ void do_upgrade() {
case HTTP_UPDATE_FAILED:
Serial.printf("UPDATE_FAILED Error (%d): %s", httpUpdate.getLastError(), httpUpdate.getLastErrorString().c_str());
break;
-
case HTTP_UPDATE_NO_UPDATES:
Serial.println("NO_UPDATES");
break;
-
case HTTP_UPDATE_OK:
Serial.println("HTTP_UPDATE_OK");
break;
}
}
-*/
-
-/*
- // ----------------------- Обновление с сайта
- void webUpgrade() {
-
- #ifdef ESP8266
- String spiffsData = "http://91.204.228.124:1100/update/esp8266/esp32-esp8266_iot-manager_modules_firmware.spiffs.bin";
- String buildData = "http://91.204.228.124:1100/update/esp8266/esp32-esp8266_iot-manager_modules_firmware.ino.bin";
- #endif
-
- #ifdef ESP32
- String spiffsData = "http://91.204.228.124:1100/update/esp32/esp32-esp8266_iot-manager_modules_firmware.spiffs.bin";
- String buildData = "http://91.204.228.124:1100/update/esp32/esp32-esp8266_iot-manager_modules_firmware.ino.bin";
- #endif
-
- if (spiffsData != "") { // Если нужно прошить FS
- String scenario_for_update;
- String config_for_update;
- String configSetupJson_for_update;
- Serial.println(spiffsData);
- scenario_for_update = readFile("firmware.s.txt", 2048);
- config_for_update = readFile("config.all.txt", 2048);
- configSetupJson_for_update = configSetupJson;
- ESPhttpUpdate.rebootOnUpdate(false); // Отключим перезагрузку после обновления
- updateHTTP(spiffsData, true);
- writeFile("firmware.s.txt", scenario_for_update);
- writeFile("config.all.txt", config_for_update);
- writeFile("config.json", configSetupJson_for_update);
- saveConfig();
- }
-
- if (buildData != "") { // Если нужно прошить build
- Serial.println(buildData);
- ESPhttpUpdate.rebootOnUpdate(true); // Включим перезагрузку после обновления
- updateHTTP(buildData, false);
- }
- }
- // ------------------ Обновление по url
- void updateHTTP(String url, boolean mode) {
- if (url == "") return;
- ESPhttpUpdate.setLedPin(LED_BUILTIN, LOW);
- if (mode) {
- Serial.println("Update Spiffs...");
- t_httpUpdate_return ret = ESPhttpUpdate.updateSpiffs(url);
- UpdateStatus(ret , "Spiffs");
- } else {
- Serial.println("Update Build...");
- t_httpUpdate_return ret = ESPhttpUpdate.update(url);
- UpdateStatus(ret , "build");
- }
- }
- void UpdateStatus(t_httpUpdate_return set, String mode) {
-
- switch (set) {
-
- case HTTP_UPDATE_FAILED:
- Serial.println(mode + "_FAILED");
- var = "{}";
- jsonWriteStr(var, "title", "_FAILED");
- jsonWriteStr(var, "class", "pop-up");
- //request->send(200, "text/text", var);
- break;
-
- case HTTP_UPDATE_NO_UPDATES:
- Serial.println(mode + "_NO_UPDATES");
- var = "{}";
- jsonWriteStr(var, "title", "_NO_UPDATES");
- jsonWriteStr(var, "class", "pop-up");
- //request->send(200, "text/text", var);
- break;
-
- case HTTP_UPDATE_OK:
- Serial.println(mode + "_UPDATE_OK");
- var = "{}";
- jsonWriteStr(var, "title", "_UPDATE_OK");
- jsonWriteStr(var, "class", "pop-up");
- //request->send(200, "text/text", var);
- break;
- }
- }
-*/
+*/
\ No newline at end of file
diff --git a/src/Web.cpp b/src/Web.cpp
new file mode 100644
index 00000000..4a3b0756
--- /dev/null
+++ b/src/Web.cpp
@@ -0,0 +1,356 @@
+#include "Global.h"
+
+String stateMQTT();
+
+void web_init() {
+ server.on("/set", HTTP_GET, [](AsyncWebServerRequest * request) {
+ String value;
+ //============================device settings=====================================
+ if (request->hasArg("preset")) {
+ //--------------------------------------------------------------------------------
+ String value;
+ value = request->getParam("preset")->value();
+ if (value == "1") {
+ writeFile("firmware.c.txt", readFile("configs/1-relay.c.txt", 2048));
+ writeFile("firmware.s.txt", readFile("configs/1-relay.s.txt", 2048));
+ }
+ if (value == "2") {
+ writeFile("firmware.c.txt", readFile("configs/2-relay.c.txt", 2048));
+ writeFile("firmware.s.txt", readFile("configs/2-relay.s.txt", 2048));
+ }
+ if (value == "3") {
+ writeFile("firmware.c.txt", readFile("configs/3-relay.c.txt", 2048));
+ writeFile("firmware.s.txt", readFile("configs/3-relay.s.txt", 2048));
+ }
+ if (value == "4") {
+ writeFile("firmware.c.txt", readFile("configs/4-relay.c.txt", 2048));
+ writeFile("firmware.s.txt", readFile("configs/4-relay.s.txt", 2048));
+ }
+ if (value == "5") {
+ writeFile("firmware.c.txt", readFile("configs/5-relay.c.txt", 2048));
+ writeFile("firmware.s.txt", readFile("configs/5-relay.s.txt", 2048));
+ }
+ if (value == "6") {
+ writeFile("firmware.c.txt", readFile("configs/6-relay.c.txt", 2048));
+ writeFile("firmware.s.txt", readFile("configs/6-relay.s.txt", 2048));
+ }
+ if (value == "7") {
+ writeFile("firmware.c.txt", readFile("configs/7-relay.c.txt", 2048));
+ writeFile("firmware.s.txt", readFile("configs/7-relay.s.txt", 2048));
+ }
+ if (value == "8") {
+ writeFile("firmware.c.txt", readFile("configs/8-pwm.c.txt", 2048));
+ writeFile("firmware.s.txt", readFile("configs/8-pwm.s.txt", 2048));
+ }
+ if (value == "9") {
+ writeFile("firmware.c.txt", readFile("configs/9-dht11.c.txt", 2048));
+ writeFile("firmware.s.txt", readFile("configs/9-dht11.s.txt", 2048));
+ }
+ if (value == "10") {
+ writeFile("firmware.c.txt", readFile("configs/10-dht22.c.txt", 2048));
+ writeFile("firmware.s.txt", readFile("configs/10-dht22.s.txt", 2048));
+ }
+ if (value == "11") {
+ writeFile("firmware.c.txt", readFile("configs/11-analog.c.txt", 2048));
+ writeFile("firmware.s.txt", readFile("configs/11-analog.s.txt", 2048));
+ }
+ if (value == "12") {
+ writeFile("firmware.c.txt", readFile("configs/12-bmp280.c.txt", 2048));
+ writeFile("firmware.s.txt", readFile("configs/12-bmp280.s.txt", 2048));
+ }
+ if (value == "13") {
+ writeFile("firmware.c.txt", readFile("configs/13-bme280.c.txt", 2048));
+ writeFile("firmware.s.txt", readFile("configs/13-bme280.s.txt", 2048));
+ }
+ if (value == "14") {
+ writeFile("firmware.c.txt", readFile("configs/14-dallas.c.txt", 2048));
+ writeFile("firmware.s.txt", readFile("configs/14-dallas.s.txt", 2048));
+ }
+ if (value == "15") {
+ writeFile("firmware.c.txt", readFile("configs/15-termostat.c.txt", 2048));
+ writeFile("firmware.s.txt", readFile("configs/15-termostat.s.txt", 2048));
+ }
+ if (value == "16") {
+ writeFile("firmware.c.txt", readFile("configs/16-ultrasonic.c.txt", 2048));
+ writeFile("firmware.s.txt", readFile("configs/16-ultrasonic.s.txt", 2048));
+ }
+ if (value == "17") {
+ writeFile("firmware.c.txt", readFile("configs/17-moution.c.txt", 2048));
+ writeFile("firmware.s.txt", readFile("configs/17-moution.s.txt", 2048));
+ }
+ if (value == "18") {
+ writeFile("firmware.c.txt", readFile("configs/18-moution.c.txt", 2048));
+ writeFile("firmware.s.txt", readFile("configs/18-moution.s.txt", 2048));
+ }
+ if (value == "19") {
+ writeFile("firmware.c.txt", readFile("configs/19-stepper.c.txt", 2048));
+ writeFile("firmware.s.txt", readFile("configs/19-stepper.s.txt", 2048));
+ }
+ if (value == "20") {
+ writeFile("firmware.c.txt", readFile("configs/20-servo.c.txt", 2048));
+ writeFile("firmware.s.txt", readFile("configs/20-servo.s.txt", 2048));
+ }
+ if (value == "21") {
+ writeFile("firmware.c.txt", readFile("configs/firmware.c.txt", 2048));
+ writeFile("firmware.s.txt", readFile("configs/firmware.s.txt", 2048));
+ }
+ Device_init();
+ Scenario_init();
+ request->redirect("/?set.device");
+ }
+ //--------------------------------------------------------------------------------
+ if (request->hasArg("devinit")) {
+ Device_init();
+ request->send(200, "text/text", "OK");
+ }
+ //--------------------------------------------------------------------------------
+ if (request->hasArg("scen")) {
+ value = request->getParam("scen")->value();
+ if (value == "0") {
+ jsonWriteStr(configSetupJson, "scen", value);
+ saveConfig();
+ Scenario_init();
+ }
+ if (value == "1") {
+ jsonWriteStr(configSetupJson, "scen", value);
+ saveConfig();
+ Scenario_init();
+ }
+ request->send(200, "text/text", "OK");
+ }
+ //--------------------------------------------------------------------------------
+ if (request->hasArg("sceninit")) {
+ Scenario_init();
+ request->send(200, "text/text", "OK");
+ }
+ //--------------------------------------------------------------------------------
+#ifdef logging_enable
+ if (request->hasArg("cleanlog")) {
+ clean_log_date();
+ request->send(200, "text/text", "OK");
+ }
+#endif
+ //==============================udp settings=============================================
+ if (request->hasArg("udponoff")) {
+ value = request->getParam("udponoff")->value();
+ if (value == "0") {
+ jsonWriteStr(configSetupJson, "udponoff", value);
+ saveConfig();
+ Scenario_init();
+ }
+ if (value == "1") {
+ jsonWriteStr(configSetupJson, "udponoff", value);
+ saveConfig();
+ Scenario_init();
+ }
+ request->send(200, "text/text", "OK");
+ }
+ //--------------------------------------------------------------------------------
+ if (request->hasArg("updatelist")) {
+ SPIFFS.remove("/dev.csv");
+ addFile("dev.csv", "device id;device name;ip address");
+ request->redirect("/?set.udp");
+ }
+ //--------------------------------------------------------------------------------
+ if (request->hasArg("updatepage")) {
+ request->redirect("/?set.udp");
+ }
+ //--------------------------------------------------------------------------------
+ if (request->hasArg("devname")) {
+ jsonWriteStr(configSetupJson, "name", request->getParam("devname")->value());
+ saveConfig();
+ request->send(200, "text/text", "OK");
+ }
+ //==============================wifi settings=============================================
+ if (request->hasArg("routerssid")) {
+ jsonWriteStr(configSetupJson, "routerssid", request->getParam("routerssid")->value());
+ saveConfig();
+ request->send(200, "text/text", "OK");
+ }
+ if (request->hasArg("routerpass")) {
+ jsonWriteStr(configSetupJson, "routerpass", request->getParam("routerpass")->value());
+ saveConfig();
+ request->send(200, "text/text", "OK");
+ }
+ //--------------------------------------------------------------------------------
+ if (request->hasArg("apssid")) {
+ jsonWriteStr(configSetupJson, "apssid", request->getParam("apssid")->value());
+ saveConfig();
+ request->send(200, "text/text", "OK");
+ }
+ if (request->hasArg("appass")) {
+ jsonWriteStr(configSetupJson, "appass", request->getParam("appass")->value());
+ saveConfig();
+ request->send(200, "text/text", "OK");
+ }
+ //--------------------------------------------------------------------------------
+ if (request->hasArg("weblogin")) {
+ jsonWriteStr(configSetupJson, "weblogin", request->getParam("weblogin")->value());
+ saveConfig();
+ request->send(200, "text/text", "OK");
+ }
+ if (request->hasArg("webpass")) {
+ jsonWriteStr(configSetupJson, "webpass", request->getParam("webpass")->value());
+ saveConfig();
+ request->send(200, "text/text", "OK");
+ }
+ //--------------------------------------------------------------------------------
+ if (request->hasArg("timezone")) {
+ jsonWriteStr(configSetupJson, "timezone", request->getParam("timezone")->value());
+ saveConfig();
+ reconfigTime();
+ request->send(200, "text/text", "OK");
+ }
+ if (request->hasArg("ntp")) {
+ jsonWriteStr(configSetupJson, "ntp", request->getParam("ntp")->value());
+ saveConfig();
+ reconfigTime();
+ request->send(200, "text/text", "OK");
+ }
+ //--------------------------------------------------------------------------------
+ if (request->hasArg("device")) {
+ if (request->getParam("device")->value() == "ok") ESP.restart();
+ request->send(200, "text/text", "OK");
+ }
+ //--------------------------------------------------------------------------------
+ if (request->hasArg("blink")) {
+ value = request->getParam("blink")->value();
+ if (value == "0") {
+ jsonWriteStr(configSetupJson, "blink", value);
+ saveConfig();
+ }
+ if (value == "1") {
+ jsonWriteStr(configSetupJson, "blink", value);
+ saveConfig();
+ }
+ request->send(200, "text/text", "OK");
+ }
+ //==============================mqtt settings=============================================
+ if (request->hasArg("mqttServer")) {
+ jsonWriteStr(configSetupJson, "mqttServer", request->getParam("mqttServer")->value());
+ saveConfig();
+ mqtt_connection = true;
+ request->send(200, "text/text", "ok");
+ }
+ if (request->hasArg("mqttPort")) {
+ int port = (request->getParam("mqttPort")->value()).toInt();
+ jsonWriteInt(configSetupJson, "mqttPort", port);
+ saveConfig();
+ mqtt_connection = true;
+ request->send(200, "text/text", "ok");
+ }
+ if (request->hasArg("mqttPrefix")) {
+ jsonWriteStr(configSetupJson, "mqttPrefix", request->getParam("mqttPrefix")->value());
+ saveConfig();
+ mqtt_connection = true;
+ request->send(200, "text/text", "ok");
+ }
+ if (request->hasArg("mqttUser")) {
+ jsonWriteStr(configSetupJson, "mqttUser", request->getParam("mqttUser")->value());
+ saveConfig();
+ mqtt_connection = true;
+ request->send(200, "text/text", "ok");
+ }
+ if (request->hasArg("mqttPass")) {
+ jsonWriteStr(configSetupJson, "mqttPass", request->getParam("mqttPass")->value());
+ saveConfig();
+ mqtt_connection = true;
+ request->send(200, "text/text", "ok");
+ }
+ //--------------------------------------------------------------------------------
+ if (request->hasArg("mqttsend")) {
+ mqtt_send_settings_to_udp = true;
+ request->send(200, "text/text", "ok");
+ }
+ //--------------------------------------------------------------------------------
+ if (request->hasArg("mqttcheck")) {
+ String tmp = "{}";
+ jsonWriteStr(tmp, "title", "" + stateMQTT());
+ jsonWriteStr(tmp, "class", "pop-up");
+ request->send(200, "text/text", tmp);
+ }
+ //==============================push settings=============================================
+#ifdef push_enable
+ if (request->hasArg("pushingboxid")) {
+ jsonWriteStr(configSetupJson, "pushingboxid", request->getParam("pushingboxid")->value());
+ saveConfig();
+ request->send(200, "text/text", "ok");
+ }
+#endif
+ //==============================utilities settings=============================================
+ if (request->hasArg("itoc")) {
+ i2c_scanning = true;
+ request->redirect("/?set.utilities");
+ }
+ });
+ //==============================upgrade settings=============================================
+ server.on("/check", HTTP_GET, [](AsyncWebServerRequest * request) {
+ upgrade_url = true;
+ Serial.print("[i] Last firmware version: ");
+ Serial.println(last_version);
+ String tmp = "{}";
+ int case_of_update;
+
+ if (WiFi.status() != WL_CONNECTED) last_version = "nowifi";
+ if (!mb_4_of_memory) last_version = "less";
+
+ if (last_version == firmware_version) case_of_update = 1;
+ if (last_version != firmware_version) case_of_update = 2;
+ if (last_version == "error") case_of_update = 3;
+ if (last_version == "") case_of_update = 4;
+ if (last_version == "less") case_of_update = 5;
+ if (last_version == "nowifi") case_of_update = 6;
+ if (last_version == "notsupported") case_of_update = 7;
+
+ switch (case_of_update) {
+ case 1: {
+ jsonWriteStr(tmp, "title", "Последняя версия прошивки уже установлена.");
+ jsonWriteStr(tmp, "class", "pop-up");
+ }
+ break;
+
+ case 2: {
+ jsonWriteStr(tmp, "title", "Имеется новая версия прошивкиИдет обновление прошивки, после обновления страница перезагрузится автоматически...')\">Установить");
+ jsonWriteStr(tmp, "class", "pop-up");
+ }
+ break;
+
+ case 3: {
+ jsonWriteStr(tmp, "title", "Ошибка... Cервер не найден. Попробуйте позже...");
+ jsonWriteStr(tmp, "class", "pop-up");
+ }
+ break;
+
+ case 4: {
+ jsonWriteStr(tmp, "title", "Нажмите на кнопку \"обновить прошивку\" повторно...");
+ jsonWriteStr(tmp, "class", "pop-up");
+ break;
+ }
+
+ case 5: {
+ jsonWriteStr(tmp, "title", "Обновление по воздуху не поддерживается, модуль имеет меньше 4 мб памяти...");
+ jsonWriteStr(tmp, "class", "pop-up");
+ break;
+ }
+
+ case 6: {
+ jsonWriteStr(tmp, "title", "Устройство не подключено к роутеру...");
+ jsonWriteStr(tmp, "class", "pop-up");
+ break;
+ }
+
+ case 7: {
+ jsonWriteStr(tmp, "title", "Обновление на новую версию возможно только через usb...");
+ jsonWriteStr(tmp, "class", "pop-up");
+ break;
+ }
+ }
+ request->send(200, "text/text", tmp);
+ });
+
+ server.on("/upgrade", HTTP_GET, [](AsyncWebServerRequest * request) {
+ upgrade = true;
+ String tmp = "{}";
+ request->send(200, "text/text", "ok");
+ });
+}
\ No newline at end of file
diff --git a/src/Web_server.cpp b/src/Web_server.cpp
index a2f8f602..50f83c1c 100644
--- a/src/Web_server.cpp
+++ b/src/Web_server.cpp
@@ -1,230 +1,234 @@
#include "Global.h"
void Web_server_init() {
+ /*********************************************************************************
+ ***************************************OTA****************************************
+ *********************************************************************************/
#ifdef OTA_enable
- ArduinoOTA.onStart([]() {
- events.send("Update Start", "ota");
- });
- ArduinoOTA.onEnd([]() {
- events.send("Update End", "ota");
- });
- ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
- char p[32];
- sprintf(p, "Progress: %u%%\n", (progress / (total / 100)));
- events.send(p, "ota");
- });
- ArduinoOTA.onError([](ota_error_t error) {
- if (error == OTA_AUTH_ERROR)
- events.send("Auth Failed", "ota");
- else if (error == OTA_BEGIN_ERROR)
- events.send("Begin Failed", "ota");
- else if (error == OTA_CONNECT_ERROR)
- events.send("Connect Failed", "ota");
- else if (error == OTA_RECEIVE_ERROR)
- events.send("Recieve Failed", "ota");
- else if (error == OTA_END_ERROR)
- events.send("End Failed", "ota");
- });
- ArduinoOTA.setHostname(hostName);
- ArduinoOTA.begin();
+ ArduinoOTA.onStart([]() {
+ events.send("Update Start", "ota");
+ });
+ ArduinoOTA.onEnd([]() {
+ events.send("Update End", "ota");
+ });
+ ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
+ char p[32];
+ sprintf(p, "Progress: %u%%\n", (progress / (total / 100)));
+ events.send(p, "ota");
+ });
+ ArduinoOTA.onError([](ota_error_t error) {
+ if (error == OTA_AUTH_ERROR) events.send("Auth Failed", "ota");
+ else if (error == OTA_BEGIN_ERROR) events.send("Begin Failed", "ota");
+ else if (error == OTA_CONNECT_ERROR) events.send("Connect Failed", "ota");
+ else if (error == OTA_RECEIVE_ERROR) events.send("Recieve Failed", "ota");
+ else if (error == OTA_END_ERROR) events.send("End Failed", "ota");
+ });
+ ArduinoOTA.setHostname(hostName);
+ ArduinoOTA.begin();
#endif
- /*********************************************************************************
+ /*********************************************************************************
**************************************MDNS****************************************
*********************************************************************************/
#ifdef MDNS_enable
- MDNS.addService("http", "tcp", 80);
+ MDNS.addService("http", "tcp", 80);
#endif
- //SPIFFS.begin();
- /*********************************************************************************
+ //SPIFFS.begin();
+ /*********************************************************************************
**************************************WS******************************************
*********************************************************************************/
#ifdef WS_enable
- ws.onEvent(onWsEvent);
- server.addHandler(&ws);
+ ws.onEvent(onWsEvent);
+ server.addHandler(&ws);
- events.onConnect([](AsyncEventSourceClient *client) {
- //!!!client->send("hello!", NULL, millis(), 1000);
- });
+ events.onConnect([](AsyncEventSourceClient * client) {
+ //!!!client->send("hello!", NULL, millis(), 1000);
+ });
- server.addHandler(&events);
+ server.addHandler(&events);
#endif
-
+ /*********************************************************************************
+ **************************************WEB****************************************
+ *********************************************************************************/
#ifdef ESP32
- server.addHandler(new SPIFFSEditor(SPIFFS, jsonReadStr(configSetupJson, "web_login").c_str(), jsonReadStr(configSetupJson, "web_pass").c_str()));
+ server.addHandler(new SPIFFSEditor(SPIFFS, jsonReadStr(configSetupJson, "weblogin").c_str(), jsonReadStr(configSetupJson, "webpass").c_str()));
#elif defined(ESP8266)
- server.addHandler(new SPIFFSEditor(jsonReadStr(configSetupJson, "web_login").c_str(), jsonReadStr(configSetupJson, "web_pass").c_str()));
+ server.addHandler(new SPIFFSEditor(jsonReadStr(configSetupJson, "weblogin").c_str(), jsonReadStr(configSetupJson, "webpass").c_str()));
#endif
- /* server.on("/heap", HTTP_GET, [](AsyncWebServerRequest * request) {
+ /* server.on("/heap", HTTP_GET, [](AsyncWebServerRequest * request) {
request->send(200, "text/plain", String(ESP.getFreeHeap()));
});*/
- server.serveStatic("/css/", SPIFFS, "/css/").setCacheControl("max-age=31536000");
- server.serveStatic("/js/", SPIFFS, "/js/").setCacheControl("max-age=31536000");
- server.serveStatic("/favicon.ico", SPIFFS, "/favicon.ico").setCacheControl("max-age=31536000");
+ server.serveStatic("/css/", SPIFFS, "/css/").setCacheControl("max-age=31536000");
+ server.serveStatic("/js/", SPIFFS, "/js/").setCacheControl("max-age=31536000");
+ server.serveStatic("/favicon.ico", SPIFFS, "/favicon.ico").setCacheControl("max-age=31536000");
+ server.serveStatic("/icon.jpeg", SPIFFS, "/icon.jpeg").setCacheControl("max-age=31536000");
- server.serveStatic("/", SPIFFS, "/").setDefaultFile("index.htm").setAuthentication(jsonReadStr(configSetupJson, "web_login").c_str(), jsonReadStr(configSetupJson, "web_pass").c_str());
+ server.serveStatic("/", SPIFFS, "/").setDefaultFile("index.htm")
+ .setAuthentication(jsonReadStr(configSetupJson, "weblogin").c_str(), jsonReadStr(configSetupJson, "webpass").c_str());
- server.onNotFound([](AsyncWebServerRequest *request) {
- Serial.printf("NOT_FOUND: ");
- if (request->method() == HTTP_GET)
- Serial.printf("GET");
- else if (request->method() == HTTP_POST)
- Serial.printf("POST");
- else if (request->method() == HTTP_DELETE)
- Serial.printf("DELETE");
- else if (request->method() == HTTP_PUT)
- Serial.printf("PUT");
- else if (request->method() == HTTP_PATCH)
- Serial.printf("PATCH");
- else if (request->method() == HTTP_HEAD)
- Serial.printf("HEAD");
- else if (request->method() == HTTP_OPTIONS)
- Serial.printf("OPTIONS");
- else
- Serial.printf("UNKNOWN");
- Serial.printf(" http://%s%s\n", request->host().c_str(), request->url().c_str());
+ server.onNotFound([](AsyncWebServerRequest * request) {
+ Serial.printf("NOT_FOUND: ");
+ if (request->method() == HTTP_GET)
+ Serial.printf("GET");
+ else if (request->method() == HTTP_POST)
+ Serial.printf("POST");
+ else if (request->method() == HTTP_DELETE)
+ Serial.printf("DELETE");
+ else if (request->method() == HTTP_PUT)
+ Serial.printf("PUT");
+ else if (request->method() == HTTP_PATCH)
+ Serial.printf("PATCH");
+ else if (request->method() == HTTP_HEAD)
+ Serial.printf("HEAD");
+ else if (request->method() == HTTP_OPTIONS)
+ Serial.printf("OPTIONS");
+ else
+ Serial.printf("UNKNOWN");
+ Serial.printf(" http://%s%s\n", request->host().c_str(), request->url().c_str());
- if (request->contentLength()) {
- Serial.printf("_CONTENT_TYPE: %s\n", request->contentType().c_str());
- Serial.printf("_CONTENT_LENGTH: %u\n", request->contentLength());
- }
+ if (request->contentLength()) {
+ Serial.printf("_CONTENT_TYPE: %s\n", request->contentType().c_str());
+ Serial.printf("_CONTENT_LENGTH: %u\n", request->contentLength());
+ }
- int headers = request->headers();
- int i;
- for (i = 0; i < headers; i++) {
- AsyncWebHeader *h = request->getHeader(i);
- Serial.printf("_HEADER[%s]: %s\n", h->name().c_str(), h->value().c_str());
- }
+ int headers = request->headers();
+ int i;
+ for (i = 0; i < headers; i++) {
+ AsyncWebHeader* h = request->getHeader(i);
+ Serial.printf("_HEADER[%s]: %s\n", h->name().c_str(), h->value().c_str());
+ }
- int params = request->params();
- for (i = 0; i < params; i++) {
- AsyncWebParameter *p = request->getParam(i);
- if (p->isFile()) {
- Serial.printf("_FILE[%s]: %s, size: %u\n", p->name().c_str(), p->value().c_str(), p->size());
- } else if (p->isPost()) {
- Serial.printf("_POST[%s]: %s\n", p->name().c_str(), p->value().c_str());
- } else {
- Serial.printf("_GET[%s]: %s\n", p->name().c_str(), p->value().c_str());
- }
- }
+ int params = request->params();
+ for (i = 0; i < params; i++) {
+ AsyncWebParameter* p = request->getParam(i);
+ if (p->isFile()) {
+ Serial.printf("_FILE[%s]: %s, size: %u\n", p->name().c_str(), p->value().c_str(), p->size());
+ } else if (p->isPost()) {
+ Serial.printf("_POST[%s]: %s\n", p->name().c_str(), p->value().c_str());
+ } else {
+ Serial.printf("_GET[%s]: %s\n", p->name().c_str(), p->value().c_str());
+ }
+ }
- request->send(404);
- });
+ request->send(404);
+ });
- server.onFileUpload([](AsyncWebServerRequest *request, const String &filename, size_t index, uint8_t *data, size_t len, bool final) {
- if (!index)
- Serial.printf("UploadStart: %s\n", filename.c_str());
- Serial.printf("%s", (const char *)data);
- if (final)
- Serial.printf("UploadEnd: %s (%u)\n", filename.c_str(), index + len);
- });
- server.onRequestBody([](AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total) {
- if (!index)
- Serial.printf("BodyStart: %u\n", total);
- Serial.printf("%s", (const char *)data);
- if (index + len == total)
- Serial.printf("BodyEnd: %u\n", total);
- });
+ server.onFileUpload([](AsyncWebServerRequest * request, const String & filename, size_t index, uint8_t *data, size_t len, bool final) {
+ if (!index)
+ Serial.printf("UploadStart: %s\n", filename.c_str());
+ Serial.printf("%s", (const char*)data);
+ if (final)
+ Serial.printf("UploadEnd: %s (%u)\n", filename.c_str(), index + len);
+ });
- server.begin();
- // --------------------Выдаем данные configLiveJson //config.live.json - динамические данные
- server.on("/config.live.json", HTTP_GET, [](AsyncWebServerRequest *request) {
- request->send(200, "application/json", configLiveJson);
- });
- // --------------------Выдаем данные configOptionJson //config.option.json - данные не являющиеся событиями
- server.on("/config.option.json", HTTP_GET, [](AsyncWebServerRequest *request) {
- request->send(200, "application/json", configOptionJson);
- });
- // -------------------Выдаем данные configSetupJson //config.setup.json - для хранения постоянных данных
- server.on("/config.setup.json", HTTP_GET, [](AsyncWebServerRequest *request) {
- request->send(200, "application/json", configSetupJson);
- });
+ server.onRequestBody([](AsyncWebServerRequest * request, uint8_t *data, size_t len, size_t index, size_t total) {
+ if (!index)
+ Serial.printf("BodyStart: %u\n", total);
+ Serial.printf("%s", (const char*)data);
+ if (index + len == total)
+ Serial.printf("BodyEnd: %u\n", total);
+ });
- // ------------------Выполнение команды из запроса
- //http://192.168.88.45/cmd?command=rel%201%201
- server.on("/cmd", HTTP_GET, [](AsyncWebServerRequest *request) {
- String com = request->getParam("command")->value();
- Serial.println(com);
- order_loop += com + ",";
- request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
- });
+ server.begin();
+
+ // --------------------Выдаем данные configJson //config.live.json - динамические данные
+ server.on("/config.live.json", HTTP_GET, [](AsyncWebServerRequest * request) {
+ request->send(200, "application/json", configLiveJson);
+ });
+ // --------------------Выдаем данные optionJson //config.option.json - данные не являющиеся событиями
+ server.on("/config.option.json", HTTP_GET, [](AsyncWebServerRequest * request) {
+ request->send(200, "application/json", configOptionJson);
+ });
+ // -------------------Выдаем данные configSetup //config.setup.json - для хранения постоянных данных
+ server.on("/config.setup.json", HTTP_GET, [](AsyncWebServerRequest * request) {
+ request->send(200, "application/json", configSetupJson);
+ });
+
+ // ------------------Выполнение команды из запроса
+ //http://192.168.88.45/cmd?command=rel%201%201
+ server.on("/cmd", HTTP_GET, [](AsyncWebServerRequest * request) {
+ String com = request->getParam("command")->value();
+ Serial.println(com);
+ order_loop += com + ",";
+ request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
+ });
}
/*********************************************************************************************************************************
*********************************************************WS**********************************************************************
********************************************************************************************************************************/
#ifdef WS_enable
-void onWsEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len) {
- if (type == WS_EVT_CONNECT) {
- Serial.printf("ws[%s][%u] connect\n", server->url(), client->id());
- client->printf(json.c_str(), client->id());
- //client->ping();
- } else if (type == WS_EVT_DISCONNECT) {
- Serial.printf("ws[%s][%u] disconnect\n", server->url(), client->id());
- } else if (type == WS_EVT_ERROR) {
- Serial.printf("ws[%s][%u] error(%u): %s\n", server->url(), client->id(), *((uint16_t *)arg), (char *)data);
- } else if (type == WS_EVT_PONG) {
- Serial.printf("ws[%s][%u] pong[%u]: %s\n", server->url(), client->id(), len, (len) ? (char *)data : "");
- } else if (type == WS_EVT_DATA) {
- AwsFrameInfo *info = (AwsFrameInfo *)arg;
- String msg = "";
- if (info->final && info->index == 0 && info->len == len) {
- //the whole message is in a single frame and we got all of it's data
- Serial.printf("ws[%s][%u] %s-message[%llu]: ", server->url(), client->id(), (info->opcode == WS_TEXT) ? "text" : "binary", info->len);
+void onWsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len) {
+ if (type == WS_EVT_CONNECT) {
+ Serial.printf("ws[%s][%u] connect\n", server->url(), client->id());
+ client->printf(json.c_str(), client->id());
+ //client->ping();
+ } else if (type == WS_EVT_DISCONNECT) {
+ Serial.printf("ws[%s][%u] disconnect\n", server->url(), client->id());
+ } else if (type == WS_EVT_ERROR) {
+ Serial.printf("ws[%s][%u] error(%u): %s\n", server->url(), client->id(), *((uint16_t*)arg), (char*)data);
+ } else if (type == WS_EVT_PONG) {
+ Serial.printf("ws[%s][%u] pong[%u]: %s\n", server->url(), client->id(), len, (len) ? (char*)data : "");
+ } else if (type == WS_EVT_DATA) {
+ AwsFrameInfo * info = (AwsFrameInfo*)arg;
+ String msg = "";
+ if (info->final && info->index == 0 && info->len == len) {
+ //the whole message is in a single frame and we got all of it's data
+ Serial.printf("ws[%s][%u] %s-message[%llu]: ", server->url(), client->id(), (info->opcode == WS_TEXT) ? "text" : "binary", info->len);
- if (info->opcode == WS_TEXT) {
- for (size_t i = 0; i < info->len; i++) {
- msg += (char)data[i];
- }
- } else {
- char buff[3];
- for (size_t i = 0; i < info->len; i++) {
- sprintf(buff, "%02x ", (uint8_t)data[i]);
- msg += buff;
- }
- }
- Serial.printf("%s\n", msg.c_str());
-
- if (info->opcode == WS_TEXT)
- client->text("{}");
- else
- client->binary("{}");
- } else {
- //message is comprised of multiple frames or the frame is split into multiple packets
- if (info->index == 0) {
- if (info->num == 0)
- Serial.printf("ws[%s][%u] %s-message start\n", server->url(), client->id(), (info->message_opcode == WS_TEXT) ? "text" : "binary");
- Serial.printf("ws[%s][%u] frame[%u] start[%llu]\n", server->url(), client->id(), info->num, info->len);
- }
-
- Serial.printf("ws[%s][%u] frame[%u] %s[%llu - %llu]: ", server->url(), client->id(), info->num, (info->message_opcode == WS_TEXT) ? "text" : "binary", info->index, info->index + len);
-
- if (info->opcode == WS_TEXT) {
- for (size_t i = 0; i < len; i++) {
- msg += (char)data[i];
- }
- } else {
- char buff[3];
- for (size_t i = 0; i < len; i++) {
- sprintf(buff, "%02x ", (uint8_t)data[i]);
- msg += buff;
- }
- }
- Serial.printf("%s\n", msg.c_str());
-
- if ((info->index + len) == info->len) {
- Serial.printf("ws[%s][%u] frame[%u] end[%llu]\n", server->url(), client->id(), info->num, info->len);
- if (info->final) {
- Serial.printf("ws[%s][%u] %s-message end\n", server->url(), client->id(), (info->message_opcode == WS_TEXT) ? "text" : "binary");
- if (info->message_opcode == WS_TEXT)
- client->text("I got your text message");
- else
- client->binary("I got your binary message");
- }
- }
+ if (info->opcode == WS_TEXT) {
+ for (size_t i = 0; i < info->len; i++) {
+ msg += (char) data[i];
}
+ } else {
+ char buff[3];
+ for (size_t i = 0; i < info->len; i++) {
+ sprintf(buff, "%02x ", (uint8_t) data[i]);
+ msg += buff ;
+ }
+ }
+ Serial.printf("%s\n", msg.c_str());
+
+ if (info->opcode == WS_TEXT)
+ client->text("{}");
+ else
+ client->binary("{}");
+ } else {
+ //message is comprised of multiple frames or the frame is split into multiple packets
+ if (info->index == 0) {
+ if (info->num == 0)
+ Serial.printf("ws[%s][%u] %s-message start\n", server->url(), client->id(), (info->message_opcode == WS_TEXT) ? "text" : "binary");
+ Serial.printf("ws[%s][%u] frame[%u] start[%llu]\n", server->url(), client->id(), info->num, info->len);
+ }
+
+ Serial.printf("ws[%s][%u] frame[%u] %s[%llu - %llu]: ", server->url(), client->id(), info->num, (info->message_opcode == WS_TEXT) ? "text" : "binary", info->index, info->index + len);
+
+ if (info->opcode == WS_TEXT) {
+ for (size_t i = 0; i < len; i++) {
+ msg += (char) data[i];
+ }
+ } else {
+ char buff[3];
+ for (size_t i = 0; i < len; i++) {
+ sprintf(buff, "%02x ", (uint8_t) data[i]);
+ msg += buff ;
+ }
+ }
+ Serial.printf("%s\n", msg.c_str());
+
+ if ((info->index + len) == info->len) {
+ Serial.printf("ws[%s][%u] frame[%u] end[%llu]\n", server->url(), client->id(), info->num, info->len);
+ if (info->final) {
+ Serial.printf("ws[%s][%u] %s-message end\n", server->url(), client->id(), (info->message_opcode == WS_TEXT) ? "text" : "binary");
+ if (info->message_opcode == WS_TEXT)
+ client->text("I got your text message");
+ else
+ client->binary("I got your binary message");
+ }
+ }
}
+ }
}
-#endif
+#endif
\ No newline at end of file
diff --git a/src/WiFiUtils.cpp b/src/WiFiUtils.cpp
index 18b55510..30c33f63 100644
--- a/src/WiFiUtils.cpp
+++ b/src/WiFiUtils.cpp
@@ -2,146 +2,88 @@
boolean RouterFind(String ssid);
-void WIFI_init()
-{
- // --------------------Получаем ssid password со страницы
- server.on("/ssid", HTTP_GET, [](AsyncWebServerRequest *request) {
- if (request->hasArg("ssid"))
- {
- jsonWriteStr(configSetupJson, "ssid", request->getParam("ssid")->value());
- }
- if (request->hasArg("password"))
- {
- jsonWriteStr(configSetupJson, "password", request->getParam("password")->value());
- }
- saveConfig(); // Функция сохранения данных во Flash
- request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
- });
- // --------------------Получаем ssidAP passwordAP со страницы
- server.on("/ssidap", HTTP_GET, [](AsyncWebServerRequest *request) {
- if (request->hasArg("ssidAP"))
- {
- jsonWriteStr(configSetupJson, "ssidAP", request->getParam("ssidAP")->value());
- }
- if (request->hasArg("passwordAP"))
- {
- jsonWriteStr(configSetupJson, "passwordAP", request->getParam("passwordAP")->value());
- }
- saveConfig(); // Функция сохранения данных во Flash
- request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
- });
+void ROUTER_Connecting() {
+
+ led_blink("slow");
- // --------------------Получаем логин и пароль для web со страницы
- server.on("/web", HTTP_GET, [](AsyncWebServerRequest *request) {
- if (request->hasArg("web_login"))
- {
- jsonWriteStr(configSetupJson, "web_login", request->getParam("web_login")->value());
- }
- if (request->hasArg("web_pass"))
- {
- jsonWriteStr(configSetupJson, "web_pass", request->getParam("web_pass")->value());
- }
- saveConfig(); // Функция сохранения данных во Flash
- //Web_server_init();
- request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
- });
+ WiFi.mode(WIFI_STA);
- server.on("/restart", HTTP_GET, [](AsyncWebServerRequest *request) {
- if (request->hasArg("device"))
- {
- if (request->getParam("device")->value() == "ok")
- ESP.restart();
- }
- request->send(200, "text/text", "OK"); // отправляем ответ о выполнении
- });
- ROUTER_Connecting();
+ byte tries = 20;
+ String _ssid = jsonReadStr(configSetupJson, "routerssid");
+ String _password = jsonReadStr(configSetupJson, "routerpass");
+ //WiFi.persistent(false);
+
+ if (_ssid == "" && _password == "") {
+ WiFi.begin();
+ }
+ else {
+ WiFi.begin(_ssid.c_str(), _password.c_str());
+ Serial.print("ssid: ");
+ Serial.println(_ssid);
+ }
+ // Делаем проверку подключения до тех пор пока счетчик tries
+ // не станет равен нулю или не получим подключение
+ while (--tries && WiFi.status() != WL_CONNECTED) {
+ if (WiFi.status() == WL_CONNECT_FAILED) {
+ Serial.println("[E] password is not correct");
+ tries = 1;
+ jsonWriteInt(configOptionJson, "pass_status", 1);
+ }
+ Serial.print(".");
+ delay(1000);
+ }
+
+ if (WiFi.status() != WL_CONNECTED)
+ {
+ // Если не удалось подключиться запускаем в режиме AP
+ Serial.println("");
+ // WiFi.disconnect(true);
+ StartAPMode();
+
+ }
+ else {
+ // Иначе удалось подключиться отправляем сообщение
+ // о подключении и выводим адрес IP
+ Serial.println("");
+ Serial.println("[V] WiFi connected");
+ Serial.print("[V] IP address: http://");
+ Serial.print(WiFi.localIP());
+ Serial.println("");
+ jsonWriteStr(configSetupJson, "ip", WiFi.localIP().toString());
+ led_blink("off");
+ //add_dev_in_list("dev.txt", chipID, WiFi.localIP().toString());
+ MQTT_init();
+ }
}
-void ROUTER_Connecting()
-{
- led_blink("slow");
+bool StartAPMode() {
+ Serial.println("WiFi up AP");
+ WiFi.disconnect();
- WiFi.mode(WIFI_STA);
+ WiFi.mode(WIFI_AP);
- byte tries = 20;
- String _ssid = jsonReadStr(configSetupJson, "ssid");
- String _password = jsonReadStr(configSetupJson, "password");
- //WiFi.persistent(false);
+ String _ssidAP = jsonReadStr(configSetupJson, "apssid");
+ String _passwordAP = jsonReadStr(configSetupJson, "appass");
+ WiFi.softAP(_ssidAP.c_str(), _passwordAP.c_str());
+ IPAddress myIP = WiFi.softAPIP();
+ led_blink("on");
+ Serial.print("AP IP address: ");
+ Serial.println(myIP);
+ jsonWriteStr(configSetupJson, "ip", myIP.toString());
- if (_ssid == "" && _password == "")
- {
- WiFi.begin();
- }
- else
- {
- WiFi.begin(_ssid.c_str(), _password.c_str());
- Serial.print("ssid: ");
- Serial.println(_ssid);
- }
- // Делаем проверку подключения до тех пор пока счетчик tries
- // не станет равен нулю или не получим подключение
- while (--tries && WiFi.status() != WL_CONNECTED)
- {
- if (WiFi.status() == WL_CONNECT_FAILED)
- {
- Serial.println("[E] password is not correct");
- tries = 1;
- jsonWriteInt(configOptionJson, "pass_status", 1);
- }
- Serial.print(".");
- delay(1000);
- }
-
- Serial.println();
- if (WiFi.status() != WL_CONNECTED)
- {
- StartAPMode();
- }
- else
- {
- Serial.println("[V] WiFi connected");
- Serial.print("[V] IP address: http://");
- Serial.print(WiFi.localIP());
- Serial.println();
-
- jsonWriteStr(configLiveJson, "ip", WiFi.localIP().toString());
- led_blink("off");
- }
+ //if (jsonReadInt(configOptionJson, "pass_status") != 1) {
+ ts.add(ROUTER_SEARCHING, 10 * 1000, [&](void*) {
+ Serial.println("->try find router");
+ if (RouterFind(jsonReadStr(configSetupJson, "routerssid"))) {
+ ts.remove(ROUTER_SEARCHING);
+ WiFi.scanDelete();
+ ROUTER_Connecting();
+ }
+ }, nullptr, true);
+ //}
+ return true;
}
-bool StartAPMode()
-{
- Serial.println("WiFi up AP");
- WiFi.disconnect();
-
- WiFi.mode(WIFI_AP);
-
- String _ssidAP = jsonReadStr(configSetupJson, "ssidAP");
- String _passwordAP = jsonReadStr(configSetupJson, "passwordAP");
- WiFi.softAP(_ssidAP.c_str(), _passwordAP.c_str());
- IPAddress myIP = WiFi.softAPIP();
- led_blink("on");
- Serial.print("AP IP address: ");
- Serial.println(myIP);
- jsonWriteStr(configLiveJson, "ip", myIP.toString());
-
- if (jsonReadInt(configOptionJson, "pass_status") != 1)
- {
- ts.add(
- ROUTER_SEARCHING, 10 * 1000, [&](void *) {
- Serial.println("->try find router");
- if (RouterFind(jsonReadStr(configSetupJson, "ssid")))
- {
- ts.remove(ROUTER_SEARCHING);
- WiFi.scanDelete();
- ROUTER_Connecting();
- MQTT_init();
- }
- },
- nullptr, true);
- }
- return true;
-}
boolean RouterFind(String ssid)
{
@@ -191,4 +133,4 @@ boolean RouterFind(String ssid)
WiFi.scanDelete();
}
return res;
-}
+}
\ No newline at end of file
diff --git a/src/Widgets.cpp b/src/Widgets.cpp
index b7d841aa..62ae8edf 100644
--- a/src/Widgets.cpp
+++ b/src/Widgets.cpp
@@ -1,79 +1,90 @@
#include "Global.h"
-void createWidget(String widget_name, String page_name, String page_number, String file, String topic) {
- String widget;
- widget = readFile(file, 1024);
- if (widget == "Failed") return;
- if (widget == "Large") return;
- widget_name.replace("#", " ");
- page_name.replace("#", " ");
- jsonWriteStr(widget, "page", page_name);
- jsonWriteStr(widget, "order", page_number);
- jsonWriteStr(widget, "descr", widget_name);
- jsonWriteStr(widget, "topic", prex + "/" + topic);
+//======================================================================================================================
+//===============================================Создание виджетов=======================================================
+void createWidget (String widget_name, String page_name, String page_number, String file, String topic) {
+
+ String widget;
+ widget = readFile(file, 1024);
+
+ if (widget == "Failed") return;
+ if (widget == "Large") return;
+
+ widget_name.replace("#", " ");
+ page_name.replace("#", " ");
+
+ jsonWriteStr(widget, "page", page_name);
+ jsonWriteStr(widget, "order", page_number);
+ jsonWriteStr(widget, "descr", widget_name);
+ jsonWriteStr(widget, "topic", prex + "/" + topic);
+
#ifdef layout_in_ram
- all_widgets += widget + "\r\n";
+ all_widgets += widget + "\r\n";
#else
- addFile("layout.txt", widget);
+ addFile("layout.txt", widget);
#endif
- widget = "";
+ widget = "";
}
-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) {
- String widget;
- widget = readFile(file, 1024);
+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) {
- if (widget == "Failed") return;
- if (widget == "Large") return;
+ String widget;
+ widget = readFile(file, 1024);
- widget_name.replace("#", " ");
- page_name.replace("#", " ");
+ if (widget == "Failed") return;
+ if (widget == "Large") return;
- jsonWriteStr(widget, "page", page_name);
- jsonWriteStr(widget, "order", page_number);
- jsonWriteStr(widget, "descr", widget_name);
- jsonWriteStr(widget, "topic", prex + "/" + topic);
+ widget_name.replace("#", " ");
+ page_name.replace("#", " ");
- if (name1 != "") jsonWriteStr(widget, name1, param1);
- if (name2 != "") jsonWriteStr(widget, name2, param2);
- if (name3 != "") jsonWriteStr(widget, name3, param3);
+ jsonWriteStr(widget, "page", page_name);
+ jsonWriteStr(widget, "order", page_number);
+ jsonWriteStr(widget, "descr", widget_name);
+ jsonWriteStr(widget, "topic", prex + "/" + topic);
+
+ if (name1 != "") jsonWriteStr(widget, name1, param1);
+ if (name2 != "") jsonWriteStr(widget, name2, param2);
+ if (name3 != "") jsonWriteStr(widget, name3, param3);
#ifdef layout_in_ram
- all_widgets += widget + "\r\n";
+ all_widgets += widget + "\r\n";
#else
- addFile("layout.txt", widget);
+ addFile("layout.txt", widget);
#endif
- widget = "";
+ widget = "";
}
-void createChart(String widget_name, String page_name, String page_number, String file, String topic, String maxCount) {
- String widget;
- widget = readFile(file, 1024);
+void createChart (String widget_name, String page_name, String page_number, String file, String topic, String maxCount) {
- if (widget == "Failed") return;
- if (widget == "Large") return;
+ String widget;
+ widget = readFile(file, 1024);
- widget_name.replace("#", " ");
- page_name.replace("#", " ");
+ if (widget == "Failed") return;
+ if (widget == "Large") return;
- jsonWriteStr(widget, "page", page_name);
- jsonWriteStr(widget, "order", page_number);
- //jsonWriteStr(widget, "descr", widget_name);
- jsonWriteStr(widget, "series", widget_name);
- jsonWriteStr(widget, "maxCount", maxCount);
- jsonWriteStr(widget, "topic", prex + "/" + topic);
+ widget_name.replace("#", " ");
+ page_name.replace("#", " ");
+
+ jsonWriteStr(widget, "page", page_name);
+ jsonWriteStr(widget, "order", page_number);
+ //jsonWriteStr(widget, "descr", widget_name);
+ jsonWriteStr(widget, "series", widget_name);
+ jsonWriteStr(widget, "maxCount", maxCount);
+ jsonWriteStr(widget, "topic", prex + "/" + topic);
#ifdef layout_in_ram
- all_widgets += widget + "\r\n";
+ all_widgets += widget + "\r\n";
#else
- addFile("layout.txt", widget);
+ addFile("layout.txt", widget);
#endif
- widget = "";
+ widget = "";
}
void choose_widget_and_create(String widget_name, String page_name, String page_number, String type, String topik) {
- if (type == "any-data") createWidget(widget_name, page_name, page_number, "widgets/widget.anyData.json", topik);
- if (type == "progress-line") createWidget(widget_name, page_name, page_number, "widgets/widget.progLine.json", topik);
- if (type == "progress-round") createWidget(widget_name, page_name, page_number, "widgets/widget.progRound.json", topik);
- if (type == "fill-gauge") createWidget(widget_name, page_name, page_number, "widgets/widget.fillGauge.json", topik);
-}
+
+ if (type == "any-data") createWidget (widget_name, page_name, page_number, "widgets/widget.anyData.json", topik);
+ if (type == "progress-line") createWidget (widget_name, page_name, page_number, "widgets/widget.progLine.json", topik);
+ if (type == "progress-round") createWidget (widget_name, page_name, page_number, "widgets/widget.progRound.json", topik);
+ if (type == "fill-gauge") createWidget (widget_name, page_name, page_number, "widgets/widget.fillGauge.json", topik);
+
+}
\ No newline at end of file
diff --git a/src/i2c_bus.cpp b/src/i2c_bus.cpp
index abf28a9a..bbcd8b29 100644
--- a/src/i2c_bus.cpp
+++ b/src/i2c_bus.cpp
@@ -1,35 +1,35 @@
#include "Global.h"
void do_i2c_scanning() {
- if (i2c_scanning) {
- i2c_scanning = false;
- String tmp = i2c_scan();
- if (tmp == "error") {
- tmp = i2c_scan();
- Serial.println(tmp);
- jsonWriteStr(configLiveJson, "i2c", tmp);
- } else {
- Serial.println(tmp);
- jsonWriteStr(configLiveJson, "i2c", tmp);
- }
+ if (i2c_scanning) {
+ i2c_scanning = false;
+ String tmp = i2c_scan();
+ if (tmp == "error") {
+ tmp = i2c_scan();
+ Serial.println(tmp);
+ jsonWriteStr(configLiveJson, "i2c", tmp);
+ } else {
+ Serial.println(tmp);
+ jsonWriteStr(configLiveJson, "i2c", tmp);
}
+ }
}
String i2c_scan() {
- String out;
- byte count = 0;
- Wire.begin();
- for (byte i = 8; i < 120; i++) {
- Wire.beginTransmission(i);
- if (Wire.endTransmission() == 0) {
- count++;
- out += String(count) + ". 0x" + String(i, HEX) + "; ";
- delay(1);
- }
+ String out;
+ byte count = 0;
+ Wire.begin();
+ for (byte i = 8; i < 120; i++) {
+ Wire.beginTransmission(i);
+ if (Wire.endTransmission() == 0) {
+ count++;
+ out += String(count) + ". 0x" + String(i, HEX) + "; ";
+ delay(1);
}
- if (count == 0) {
- return "error";
- } else {
- return out;
- }
-}
+ }
+ if (count == 0) {
+ return "error";
+ } else {
+ return out;
+ }
+}
\ No newline at end of file
diff --git a/src/iot_firmware.cpp b/src/iot_firmware.cpp
index b13f4b00..84534bda 100644
--- a/src/iot_firmware.cpp
+++ b/src/iot_firmware.cpp
@@ -1,85 +1,84 @@
#include "Global.h"
void setup() {
- File_system_init();
- Serial.println("SPIFFS_init");
-
- CMD_init();
- Serial.println("[V] CMD_init");
-
- sensors_init();
- Serial.println("[V] sensors_init");
-
- All_init();
- Serial.println("[V] All_init");
- //--------------------------------------------------------------
- WIFI_init();
- Serial.println("[V] WIFI_init");
- //--------------------------------------------------------------
- statistics_init();
- Serial.println("[V] statistics_init");
- //--------------------------------------------------------------
- initUpgrade();
- Serial.println("[V] initUpgrade");
- //--------------------------------------------------------------
- Web_server_init();
- Serial.println("[V] Web_server_init");
- //--------------------------------------------------------------
- MQTT_init();
- Serial.println("[V] MQTT_init");
- //--------------------------------------------------------------
- Time_Init();
- Serial.println("[V] Time_Init");
- //--------------------------------------------------------------
-#ifdef push_enable
- Push_init();
- Serial.println("[V] Push_init");
-#endif
- //--------------------------------------------------------------
+ //--------------------------------------------------------------
+ File_system_init();
+ Serial.println("SPIFFS_init");
+ //--------------------------------------------------------------
+ CMD_init();
+ Serial.println("[V] CMD_init");
+ //--------------------------------------------------------------
+ sensors_init();
+ Serial.println("[V] sensors_init");
+ //--------------------------------------------------------------
+ All_init();
+ Serial.println("[V] All_init");
+ //--------------------------------------------------------------
+ ROUTER_Connecting();
+ Serial.println("[V] ROUTER_Connecting");
+ //--------------------------------------------------------------
+ uptime_init();
+ Serial.println("[V] statistics_init");
+ //--------------------------------------------------------------
+ initUpgrade();
+ Serial.println("[V] initUpgrade");
+ //--------------------------------------------------------------
+ Web_server_init();
+ Serial.println("[V] Web_server_init");
+ //--------------------------------------------------------------
+ web_init();
+ Serial.println("[V] web_init");
+ //--------------------------------------------------------------
+ Time_Init();
+ Serial.println("[V] Time_Init");
+ //--------------------------------------------------------------
#ifdef UDP_enable
- UDP_init();
- Serial.println("[V] UDP_init");
+ UDP_init();
+ Serial.println("[V] UDP_init");
#endif
- //--------------------------------------------------------------
+ //--------------------------------------------------------------
- ts.add(
- TEST, 10000, [&](void*) {
- getMemoryLoad("[i] periodic check of");
- //ws.textAll(json);
- },
- nullptr, true);
- just_load = false;
+
+ ts.add(TEST, 10000, [&](void*) {
+ getMemoryLoad("[i] periodic check of");
+ //ws.textAll(json);
+ }, nullptr, true);
+
+
+ just_load = false;
}
+
void loop() {
+
#ifdef OTA_enable
- ArduinoOTA.handle();
+ ArduinoOTA.handle();
#endif
#ifdef WS_enable
- ws.cleanupClients();
+ ws.cleanupClients();
#endif
- not_async_actions();
+ not_async_actions();
- handleMQTT();
- handleCMD_loop();
- handleButton();
- handleScenario();
+ handleMQTT();
+ handleCMD_loop();
+ handleButton();
+ handleScenario();
#ifdef UDP_enable
- handleUdp();
+ handleUdp();
#endif
- ts.update();
+ ts.update();
}
void not_async_actions() {
- do_mqtt_connection();
- do_upgrade_url();
- do_upgrade();
+ do_mqtt_connection();
+ do_upgrade_url();
+ do_upgrade();
#ifdef UDP_enable
- do_udp_data_parse();
- do_mqtt_send_settings_to_udp();
+ do_udp_data_parse();
+ do_mqtt_send_settings_to_udp();
#endif
- do_i2c_scanning();
-}
+ do_i2c_scanning();
+}
\ No newline at end of file
diff --git a/src/udp.cpp b/src/udp.cpp
index 5832fe22..3f88a099 100644
--- a/src/udp.cpp
+++ b/src/udp.cpp
@@ -5,41 +5,7 @@ void add_dev_in_list(String fileName, String id, String dev_name, String ip);
#ifdef UDP_enable
void UDP_init() {
- server.on("/udp", HTTP_GET, [](AsyncWebServerRequest * request) {
- String value;
- if (request->hasArg("arg")) {
- value = request->getParam("arg")->value();
- }
- if (value == "0") {
- jsonWriteStr(configSetupJson, "udponoff", value);
- request->send(200, "text/text", "ok");
- }
- if (value == "1") {
- jsonWriteStr(configSetupJson, "udponoff", value);
- request->send(200, "text/text", "ok");
- }
- if (value == "2") {
- mqtt_send_settings_to_udp = true;
- request->send(200, "text/text", "ok");
- }
- if (value == "3") {
- SPIFFS.remove("/dev.csv");
- addFile("dev.csv", "device id;device name;ip address");
- request->redirect("/?dev");
- }
- if (value == "4") {
- request->redirect("/?dev");
- }
- });
- server.on("/name", HTTP_GET, [](AsyncWebServerRequest * request) {
- if (request->hasArg("arg")) {
- jsonWriteStr(configSetupJson, "name", request->getParam("arg")->value());
- jsonWriteStr(configLiveJson, "name", request->getParam("arg")->value());
- saveConfig();
- }
- request->send(200, "text/text", "OK");
- });
-
+
SPIFFS.remove("/dev.csv");
addFile("dev.csv", "device id;device name;ip address");
@@ -180,4 +146,4 @@ void do_mqtt_send_settings_to_udp() {
send_mqtt_to_udp();
}
}
-#endif
+#endif
\ No newline at end of file