27 МОСКОВСКАЯ ВСТРЕЧА
Форум самогонщиков Сайт Барахолка Магазин 27 МОСКОВСКАЯ ВСТРЕЧА

WEB интерфейс к HelloDistiller на ESP8266

Форум самогонщиков Автоматика
1 ... 6 7 8 9 10 11 12 ... 44 9
limon Доцент Липецк 1K 944
Отв.160  16 Марта 20, 22:20
Надо добавить одну строчку в HelloDistiller.ino строчка 222Phisik, 16 Марта 20, 22:06
flReadPress++;Phisik, 16 Марта 20, 22:06
Датчик давления bmp280 заработал! 753mm!
gol_avto Доцент Москва-Серпухов-Анапа 1.4K 486
Отв.161  17 Марта 20, 09:05
Доброе утро всем.
При компиляции выскакивает ошибка
no matching function for call to 'LiquidCrystal_I2C::begin()'
библиотека LiquidCrystal_I2C установлена. Раньше этого не было, правда Arduino обновил до версии 1.8.12
======================
сменил строчку на
lcd.init();
- сработало
Phisik Куратор Екатеринбург 688 1.5K
Отв.162  17 Марта 20, 09:40, через 35 мин
[сообщение #13663410]
сообщения удалены (2)
Phisik Куратор Екатеринбург 688 1.5K
Отв.163  17 Марта 20, 11:58
А можно весь список переменных.bengoor, 17 Марта 20, 11:25
Скрытый текст
ValuesMap mqttSettingsMap = {
   {"BeepKeyPress", "0"},         // звук кнопок
   {"BeepEndProc", "0"},         // звук окончания процесса
   {"BeepStateProc", "0"},         // звук смены этапа
   {"FlToUSART", "0"},            // вывод в UART
   {"tEndRectRazgon", "0"},      // температура окончания разгона
   {"tEndRectOtbGlv", "0"},      // температура окончания отбора голов
   {"tEndRectOtbSR", "0"},         // температура окончания отбора тела
   {"tEndRect", "0"},            // температура окончания ректификации
   {"ShimGlv", "0"},            // ШИМ отбора голов
   {"ProcShimGlv", "0"},         // % ШИМ отбора голов
   {"ShimSR", "0"},            // ШИМ отбора тела
   {"ProcShimSR", "0"},         // Текущий % ШИМ отбора тела
   {"ProcChimOtbCP", "0"},         // % ШИМ отбора голов через царгу пастеризации
   {"MinProcShimSR", "0"},         // минимальный % ШИМ отбора тела
   {"BegProcShimSR", "0"},         // начальный % ШИМ отбора тела
   {"timeStabKolonna", "0"},      // Время стабилизации колонны TimeStabKolonna
   {"tDeltaRect", "0"},         // дельта ректификации
   {"ProvodSR", "0"},            // настройка окончания отбора голов
   {"tStabSR", "0"},            // температура стабилизации колонны
   //{"keystrokes", "0"},         // нажатие кнопки
   {"PowRect", "0"},            // Мощность ректификации
   {"Power", "0"},                // Мощность ТЭНа
   {"PowGlvDistil", "0"},         // Мощность отбора голов при дистилляции
   {"PowDistil", "0"},            // Мощность дистилляции
   {"Tem1P", "0"},               // температура дистилляции 1
   // {"Tem2P", "0"},               // температура дистилляции 2
   // {"Tem3P", "0"},               // температура дистилляции 3
   {"TDeflBegDistil", "0"},      // температура окончания разгона
   {"UPeregrev", "0"},            // какое U надо поддерживать для защиты клапанов от перегрева.
   {"AvtonomHLD", "0"},         // Признак того, что используется автономная система охлаждения
   {"iCorrectASC712", "0"},      // Признак того, как надо использовать датчик asc712
   {"PAlarmMPX5010", "0"},         // Давление при котором надо выдавать сингал тревоги.
   {"ds1820popr0", "0"},         // Поправка для датчика температуры 0
   {"ds1820popr1", "0"},         // Поправка для датчика температуры 1
   {"ds1820popr2", "0"},         // Поправка для датчика температуры 2
   {"ds1820popr3", "0"},         // Поправка для датчика температуры 3
   {"PP_MPX5010", "0"},         // Поправка для датчика давления

   // Отбор по таблице
   {"CCHIM", "0"},               // Количество точек при отборе по Т куба
   {"tempKCHIM0", "0"},         // Температура в точке 0 при отборе по Т куба
   {"CHIMTK0", "0"},            // % Шим в точке 0 при отборе по Т куба   
   {"tempKCHIM1", "0"},         // Температура в точке 1 при отборе по Т куба
   {"CHIMTK1", "0"},            // % Шим в точке 1 при отборе по Т куба
   {"tempKCHIM2", "0"},         // Температура в точке 2 при отборе по Т куба
   {"CHIMTK2", "0"},            // % Шим в точке 2 при отборе по Т куба
   {"tempKCHIM3", "0"},         // Температура в точке 3 при отборе по Т куба
   {"CHIMTK3", "0"},            // % Шим в точке 3 при отборе по Т куба
   {"tempKCHIM4", "0"},         // Температура в точке 4 при отборе по Т куба
   {"CHIMTK4", "0"},            // % Шим в точке 4 при отборе по Т куба
   {"tempKCHIM5", "0"},         // Температура в точке 5 при отборе по Т куба
   {"CHIMTK5", "0"},            // % Шим в точке 5 при отборе по Т куба
   {"tempKCHIM6", "0"},         // Температура в точке 6 при отборе по Т куба
   {"CHIMTK6", "0"},            // % Шим в точке 6 при отборе по Т куба
   {"tempKCHIM7", "0"},         // Температура в точке 7 при отборе по Т куба
   {"CHIMTK7", "0"},            // % Шим в точке 7 при отборе по Т куба
   {"tempKCHIM8", "0"},         // Температура в точке 8 при отборе по Т куба
   {"CHIMTK8", "0"},            // % Шим в точке 8 при отборе по Т куба
   {"tempKCHIM9", "0"},         // Температура в точке 9 при отборе по Т куба
   {"CHIMTK9", "0"},            // % Шим в точке 9 при отборе по Т куба

   // Заторные паузы
   {"CntPause", "0"},            // Количество точек при отборе по Т куба
   {"BEERtempP0", "0"},         // Температура паузы 0
   {"BEERtimeP0", "0"},         // Время паузы 0   
   {"BEERtempP1", "0"},         // Температура паузы 1
   {"BEERtimeP1", "0"},         // Время паузы 1
   {"BEERtempP2", "0"},         // Температура паузы 2
   {"BEERtimeP2", "0"},         // Время паузы 2
   {"BEERtempP3", "0"},         // Температура паузы 3
   {"BEERtimeP3", "0"},         // Время паузы 3
   {"BEERtempP4", "0"},         // Температура паузы 4
   {"BEERtimeP4", "0"},         // Время паузы 4
   {"BEERtempP5", "0"},         // Температура паузы 5
   {"BEERtimeP5", "0"},         // Время паузы 5
   {"BEERtempP6", "0"},         // Температура паузы 6
   {"BEERtimeP6", "0"},         // Время паузы 6
   {"BEERtempP7", "0"},         // Температура паузы 7
   {"BEERtimeP7", "0"},         // Время паузы 7
   {"BEERtempP8", "0"},         // Температура паузы 8
   {"BEERtimeP8", "0"},         // Время паузы 8
   {"BEERtempP9", "0"},         // Температура паузы 9
   {"BEERtimeP9", "0"},         // Время паузы 9
   {"MixerDuty", "0"},            // Время работы насоса/мешалки
   {"MixerPause", "0"},         // Время паузы насоса/мешалки



   {"IncChim", "0"},            // Автоматическое увеличение % ШИМ отбора
   {"DecChim", "0"},            // Автоматическое уменьшение % ШИМ отбора

   // limon: 2017-07-17
   {"UstPowReg", "0"},            // Мощность регулятора мощности
   {"PowVarkaZerno", "0"},         // Мощность варка зерно для термостата
   {"TmpTerm", "0"},            // Задание t на термостат (уставка)
   {"TmstDelta", "0"},            // Дельта t на термостат
   {"PID_Temp0", "0"},            // PID пропорциональный коэффициент
   {"PID_Temp1", "0"},            // PID интегральный коэффициент
   {"PID_Temp2", "0"},            // PID дифференциальный коэффициент
   {"PowNBK", "0"},            // Мощность в режиме нбк
   {"minPrNBK", "0"},            // min давление нбк
   {"timePrNBK", "0"},            // Период корректировки скорости подати
   {"NasosNBK", "0"},            // Управление насосом нвк
   {"dPrNBK", "0"},            // дельта давления нбк   
   {"dsnums", "0,1,2,3,4"},      // порядок сортировки датчиков температуры

   // Phisik: 2020-03-10
   {"TempZSP","0"},// Температура при которой можно засыпать несоложенку.
   {"TempZSPSld","0"}, // Температура при которой можно засыпать солод.
   {"TempKipenZator","0"}, // Температура начала закипания затора (либо это температура в верхней части заторника (если два термометра, либо в заторнике, если стоит один термометр)
   {"TempHLDZatorBrog1","0"}, // Температура брожения
   {"PowerRazvZerno","0"},// Мощность, при которой будут развариваться зерновые (2 часа).
};

ValuesMap mqttStatusMap = {
   {"DDopInfo","0"},
   {"lcd1", "0"},            // первая строка дисплея
   {"lcd2", "0"},            // вторая строка дисплея
   {"klpHLD", "0"},         // клапан холодильника (для дистилляции)
   {"klpDEFL", "0"},         // клапан для подачи воды в дефлегматор
   {"klpGLV_HVS", "0"},      // клапан отбора головных и хвостовых фракций
   {"klpSR", "0"},            // клапан отбора ректификата
   {"StatMachine", "8"},            // этапы текущего процесса, 8 = ОЖИДАНИЕ
   {"t_kub", "0"},            // температура в кубе
   {"t_col", "0"},            // температура в колонне
   {"t_tsa", "0"},            // температура в ТСА
   {"t_pvk", "0"},            // температура в ТСА
   {"work_time", "00:00:00"},   // время текущего процесса
   {"CntStop", "0"},         // количество СТОПОВ
   {"TimeStage", "00:00:00"},   // время текущего этапа
   {"UU_MPX5010", "0"},      // Текущее значение давления
   {"extGenerator", "0"},      // Генератор для проверки целостности линии связи автоматика-scada
   {"FactPower", "0"},         // Фактическое значение мощности
   {"MaxVoltsOut", "0"},      // Среднеквадратичное напряжение в сети
   {"razgonTEH", "0"},      // Среднеквадратичное напряжение в сети
   
   {"userValue0", "0"},            // параметр, зарезервированный для пользователя
   {"userValue1", "0"},            // параметр, зарезервированный для пользователя
   {"userValue2", "0"},            // параметр, зарезервированный для пользователя
   {"userValue3", "0"},            // параметр, зарезервированный для пользователя
   {"userValue4", "0"},            // параметр, зарезервированный для пользователя
   {"userValue5", "0"},            // параметр, зарезервированный для пользователя
   {"userValue6", "0"},            // параметр, зарезервированный для пользователя
   {"userValue7", "0"},            // параметр, зарезервированный для пользователя
   {"userValue8", "0"},            // параметр, зарезервированный для пользователя
   {"userValue9", "0"},            // параметр, зарезервированный для пользователя


   // Эти параметры удобнее хранить здесь, т.к. они посылаются со статусом
   // Но и крутить их тоже надо, поэтому мы их руками посылаем вместе с настройками
   // server.cpp @ line 145
   {"tStabSR", "0"},            // температура стабилизации колонны
   {"ProcShimSR", "0"},         // Текущий % ШИМ отбора тела
   {"IspReg", "101"},         // Текущий процесс
   {"online", "0"},            // настройка обновления дисплея

   // limon: 2018-07-17
   {"SpdNBK", "0"},         // 30 Скорость насоса НБК
   {"CntMinute", "0"},         // 32 Время работы автоматики, минут
};

при этом светодиод индикации клапана мигает с частотой примерно 1Гцbengoor, 17 Марта 20, 13:25
У меня все ок. Открываются и работают. Кстати, чтобы заработала защита от перегрева надо в mqtt.cpp в строчка 1150-1200 добавить KlReg=PEREGREV_ON
Скрытый текст
   // управление клапанами
   else if (strncmp_P(pub_topic, PSTR("klpGLV_HVS"), MQTT_BUFFER_SIZE) == 0) {
      if(val[0] == '1') {
         KlOpen[KLP_GLV_HVS]  = 1000;
         KlClose[KLP_GLV_HVS] = 0;
         KlReg[KLP_GLV_HVS] = PEREGREV_ON;
      } else {
         KlOpen[KLP_GLV_HVS]  = 0;
         KlClose[KLP_GLV_HVS] = 1000;
         KlReg[KLP_GLV_HVS] = 0;
      }
      DEBUG_SERIAL.print("MQTT command received: changing KLP_GLV_HVS state to ");
      DEBUG_SERIAL.println(val);
   }
   else if (strncmp_P(pub_topic, PSTR("klpSR"), MQTT_BUFFER_SIZE) == 0) {
      if(val[0] == '1') {
         KlOpen[KLP_SR]  = 1000;
         KlClose[KLP_SR] = 0;
         KlReg[KLP_SR] = PEREGREV_ON;
      } else {
         KlOpen[KLP_SR]  = 0;
         KlClose[KLP_SR] = 1000;
         KlReg[KLP_SR] = 0;
      }
      DEBUG_SERIAL.print("MQTT command received: changing KLP_SR state to ");
      DEBUG_SERIAL.println(val);
   }
   else if (strncmp_P(pub_topic, PSTR("klpHLD"), MQTT_BUFFER_SIZE) == 0) {
      if(val[0] == '1') {
         KlOpen[KLP_HLD]  = 1000;
         KlClose[KLP_HLD] = 0;
         KlReg[KLP_HLD] = PEREGREV_ON;
      } else {
         KlOpen[KLP_HLD]  = 0;
         KlClose[KLP_HLD] = 1000;
         KlReg[KLP_HLD] = 0;
      }
      DEBUG_SERIAL.print("MQTT command received: changing KLP_HLD state to ");
      DEBUG_SERIAL.println(val);
   }
   else if (strncmp_P(pub_topic, PSTR("klpDEFL"), MQTT_BUFFER_SIZE) == 0) {
      if(val[0] == '1') {
         KlOpen[KLP_DEFL]  = 1000;
         KlClose[KLP_DEFL] = 0;
         KlReg[KLP_DEFL] = PEREGREV_ON;
      } else {
         KlOpen[KLP_DEFL]  = 0;
         KlClose[KLP_DEFL] = 1000;
         KlReg[KLP_DEFL] = 0;
      }
      DEBUG_SERIAL.print("MQTT command received: changing KLP_DEFL state to ");
      DEBUG_SERIAL.println(val);
   }
alexone_0 Бакалавр Добруш 55 22
Отв.164  17 Марта 20, 12:16, через 19 мин
BMP 280 заработал.Всё дело было в самом датчике-на нем перемычками был установлен режим SPI.Перепаял на I2C-заработал
AlexDol Кандидат наук Екатеринбург 325 433
Отв.165  17 Марта 20, 12:18, через 2 мин
Phisik,
Коллега! Поскольку занимаюсь только дистиллятами, то во вкладке Settings выключил BMP280 и сортировку DS18B20.
#define USE_BMP280_SENSOR 0
#define ENABLE_SENSOR_SORTING 0
После этого компилятор выдал ошибки во вкладках HelloDistiller, хотя библа для BMP установлена.
// flReadPress++;
и в MQTT - ProcessRecievedData()
// if (n > -1 && n < 5) ds1820_nums = n;
Затем в case MQTT_STATE_SETTINGS + 36:
// snprintf_P(buf, MQTT_BUFFER_SIZE, fmt_dsnums, ds1820_nums[0], ds1820_nums[1], ds1820_nums[2], ds1820_nums[3], ds1820_nums[4]);
Закомментировал их и компиляция закончилась успешно.
сообщения удалены (2)
Phisik Куратор Екатеринбург 688 1.5K
Отв.166  17 Марта 20, 13:23
Команды от WebUI прокидываются напрямую на контроллер, если не демка http://hostname.local/command?name=value

Обрабатываются в mqtt.cpp:
ресет http://hostname.local/command?cmd=R
стоп http://hostname.local/command?cmd=H
этап+ http://hostname.local/command?cmd=N
этап- http://hostname.local/command?cmd=P

mqtt.cpp line 704
// команды контроллеру
   else if (strncmp_P(pub_topic, val_commands, MQTT_BUFFER_SIZE) == 0) {   // изменено для уменьшения количества переменных
      switch(val[0]){
      case 'P':   // previous stage
         DEBUG_SERIAL.println("MQTT command received: decreasing state machine");
         StateMachine--; // NB! Тут нет никаких проверок, что опасно!
         break;
      case 'N':   // next stage
         DEBUG_SERIAL.println("MQTT command received: increasing state machine");
         StateMachine++; // NB! Тут нет никаких проверок, что опасно!
         break;
      case 'H':   // halt surrent prosess
         DEBUG_SERIAL.println("MQTT command received: halting current process");
         UstPower = 0;
         StateMachine = 100; // Конечное состояние автомата
         break;
      case 'R':   // reset controller immediatly
      {   
         void(* resetFunc) (void) = 0;   // Прошивка начинается с нулевого адреса ...
         resetFunc();               // ... начинаем выполнение программы с самого начала
      }
         break;
      default:
         break;
      }
   }

UPDATE: по mqtt, кстати, прокидываются все команды без ограничений
gol_avto Доцент Москва-Серпухов-Анапа 1.4K 486
Отв.167  17 Марта 20, 16:57
1. У меня 4 датчика температуры. Как вывести в UI 4-й и обозвать его "Температура в буфере"? На дисплее отображаются все 4 и показывают. В файле webui.jason совершенно непонятно что надо править.
2. Как пользоваться рецептами - тоже полный мрак. Создать можно только наименование рецепта, а ввести что либо как?
2020-03-17_16-48-26.png
2020-03-17_16-48-26.png WEB интерфейс к HelloDistiller на ESP8266. Автоматика.
2020-03-17_17-01-03.png
2020-03-17_17-01-03.png WEB интерфейс к HelloDistiller на ESP8266. Автоматика.
сообщение удалено
Phisik Куратор Екатеринбург 688 1.5K
Отв.168  17 Марта 20, 18:59
Как вывести в UI 4-й и обозвать его "Температура в буфере"?gol_avto, 17 Марта 20, 16:57
На главную страницу можно вывести один из параметров, которые передаются в статусе http://192.168.1.xxx/status
Тебе нужен в данном случае 4ый датчик, смотрим статус, видим там
"t_col":"235", "t_kub":"244", "t_pvk":"235", "t_tsa":"223"
Смотрим webui.json твой, видим, что там есть t_col, t_kub, t_tsa, a t_pvk нет. Копируем любой из датчиков и вставляем рядом, обозвав по своему желанию:
          {
               "name": "Температура в ТСА",
               "type": "code",
               "value": "t_tsa",
               "units": " ℃",
               "code": "(x/10).toFixed(1)"

           },
           {
               "name": "Температура в буфере",
               "type": "code",
               "value": "t_pvk",
               "units": " ℃",
               "code": "(x/10).toFixed(1)"

           }

Сложного ничего нет.
рецепта, а ввести что либо как?gol_avto, 17 Марта 20, 16:57
Еще раз попытаюсь объяснить. В "рецепте" ПОЛНОСТЬЮ сохраняется ТЕКУЩЕЕ СОСТОЯНИЕ контроллера. Поправил паузы в настройках - сохранил. Настроил вместо ректификата НДРФ - сохранил. При нажатии на кнопку "Применить" ВСЕ настройки будут переданы на Мегу. Термин рецепт неудачный. Лучше назвать это как-нибудь типа "Предустановки", "Снимки состояния", "Пресеты" и т.п.
сообщение удалено
Phisik Куратор Екатеринбург 688 1.5K
Отв.169  17 Марта 20, 19:19, через 21 мин
Для тех у кого BPM280 не определяется, т.к. имеет адрес 0x76, вместо 0x77. Ищем в Setup.cpp 416 строчку и пишем там
        lcd.setCursor(0, 0);
        my_lcdprint(lcd_buffer); 

        if (!bmp.begin(0x76)) { 
           //Serial.println("Could not find a valid BMP280 sensor, check wiring!");
           //Serial.println(bmp);
сообщения удалены (8)
gol_avto Доцент Москва-Серпухов-Анапа 1.4K 486
Отв.170  18 Марта 20, 13:27
Коллеги, хелп. Заказывал BMP280, пришел этот. Говорят, что это BME280 и что он не поддерживается. И как понять что он сидит на шине I2C, как её просканировать? Подключил по I2С, согласно DATASHEET
_BME280.jpg
_BME280.jpg WEB интерфейс к HelloDistiller на ESP8266. Автоматика.
BMP280.png
BMP280.png WEB интерфейс к HelloDistiller на ESP8266. Автоматика.
Phisik Куратор Екатеринбург 688 1.5K
Отв.171  18 Марта 20, 13:38, через 11 мин
Говорят, что это BME280 и что он не поддерживается.gol_avto, 18 Марта 20, 13:27
Это практически одинаковые датчики. Отличаются только адресом скорее всего. Попробуй адрес поменять на 0x76 [сообщение #13667933]

Или в settings.h замени #include <Adafruit_BMP280.h> на #include <Adafruit_BMЕ280.h>
сообщения удалены (24)
Phisik Куратор Екатеринбург 688 1.5K
Отв.172  18 Марта 20, 18:21
У Максима алгоритм достаточно простой. Он ВСЕ температуры смещает по давлению на величину:
ds1820_poprPress= (PressAtm-760)*37;
сообщения удалены (11)
dimato Кандидат наук Волгоград 416 181
Отв.173  19 Марта 20, 10:51
Максим так и писал [сообщение #13295412]
В настройках ставим время опроса датчика 60 секунд (лучше более, при опросе используются операции с дробными числами, они медленные для 8 битного процессора)
gol_avto Доцент Москва-Серпухов-Анапа 1.4K 486
Отв.174  19 Марта 20, 14:17
Спасибо! В настройках стояло 25 и не работало. Поставил 60, датчик определился и через минуту показывает. Но вот непонятно, зачем реагируют показания давления на кнопки вверх/вниз, когда через 1 мин. все равно восстанавливается истинное давление?
15846163132706465256590191104784.jpg
15846163132706465256590191104784.jpg WEB интерфейс к HelloDistiller на ESP8266. Автоматика.
сообщения удалены (3)
Phisik Куратор Екатеринбург 688 1.5K
Отв.175  20 Марта 20, 15:59
Про звук: хром не играет звуки в фоне, надо обязательно покликать на страничке, вкладки переключить, или кнопку какую нажать. На андроиде тоже самое, пока страничку вручную не активируешь каким-нибудь "взаимодействием" с ней. Вибраций и музыки не будет. Они так с рекламщиками борются.
alexone_0 Бакалавр Добруш 55 22
Отв.176  20 Марта 20, 16:01, через 3 мин
С воспроизведением звука разобрался-в настройках браузера было выключено автовоспроизведение
сообщение удалено
Phisik Куратор Екатеринбург 688 1.5K
Отв.177  21 Марта 20, 19:01
bmp180 будет работатьstop4563, 21 Марта 20, 15:36
Надо подключить нужную библиотеку вместо bmp280 и исправить тип переменной на нужный, и скорее всего заработает.

Добавлено через 3ч. 17мин.:

Очередное обновление!

1. Добавлена поддержка модуля esp32cam. Если кто не знает, то это некий гибрид esp32 и камеры. Может вещать потоковое видео. Можно напечатать корпус какой-нибудь и будет вебка за $8. Как настроить Arduino IDE рассказано в здесь и ниже на скриншоте. Немного модифицированная мной прошивка с качеством картинки повыше и возможностью управлять светодиодом вот - esp32cam.zip. Можно спрятать вкладку как и раньше в webui.json. Где купить подскажет Bengoor. Выглядит все это как-то так:

ESP32CAM_1-1000x1000.jpg
ESP32CAM_1-1000x1000. WEB интерфейс к HelloDistiller на ESP8266. Автоматика.
arduino-ide.jpg
Arduino-ide. WEB интерфейс к HelloDistiller на ESP8266. Автоматика.
cow.jpg
Cow. WEB интерфейс к HelloDistiller на ESP8266. Автоматика.


Добавлено через 15мин.:

2. Добавил возможность поставить напоминание по любому критерию на любой параметр на главной странице. Как это работает. Двойным кликом кликаем любой параметр. Выскакивает окно с уравнением, где x - это значение параметра. Выставляем критерий и ждем. Как критерий выполнится, зазвенят колокольчики и выскочит окошко с напоминанием. Колокольчики можно заменить на remind.mp3, класть в корень есп.

Например, хотим зерно запарить. Включаем термостат, double-кликаем ПО ЗНАЧЕНИЮ температуры термостата (в моем примере ниже по числу 1.5), пишем x>60, жмем ок. Когда температура станет выше - запиликает. Напоминалка всего 1! Если кликнуть другое число, первая забудется. Если нажать "отмена" напоминалка тоже забудется. В уравлении можно писать любой JavaScript. Например, кликнуть разгонный ТЭН и вписать x == 'ВКЛ.' , как только включится ТЭН и в статусе появится ВКЛ. - зазвенит. Пробуйте, одним словом.
11.jpg
11. WEB интерфейс к HelloDistiller на ESP8266. Автоматика.
222.jpg
222. WEB интерфейс к HelloDistiller на ESP8266. Автоматика.


3. Поправил традиционно ошибки, не всегда страничка обновлялась.

Сайт + spiffs v2.7.zip
Update: поправил пользовательский звук для напоминания v2.7plus.zip

Обновление сайта v2.8 тут!

В обновлении только сайт и spiffs! Прошивку для самой ESP брать старую!

PS И теперь точно нужен хороший WiFi. Туговато стало есп-шке подтягивать конфиги, звуки, логи и прочее.
bengoor Доцент Кронштадт 1.8K 1.1K
Отв.178  21 Марта 20, 23:11
Phisik, я так понимаю esp32 работает паралельно с 8266. То есть оба подключаются по вайфай к роутеру и видео с 32 через сеть попадает в 8266?
Наверное было бы правильно использовать esp32 как основу для веб интерфейса. Но наверное придется много чего переписывать и изучать с нуля.
alexone_0 Бакалавр Добруш 55 22
Отв.179  22 Марта 20, 08:58
Опробовал версию 2.7.Попробовал напоминание-классная вещь.По поводу звука-кладу в корень remind.mp3,этот звук начинает срабатывать на все аварии,кроме напоминалки,на ней остаются колокольчики
напоминалка.jpg
напоминалка. WEB интерфейс к HelloDistiller на ESP8266. Автоматика.