• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Создание конструктора условий

ESP-01S

Member
День добрый.

Подскажите в ситуации:
Есть 3 датчика и 2 реле. Каждое реле должно включаться/выключаться при совпадении любого из списка условий:
- если показания одного, двух или всех трех датчиков выше/ниже/равно заранее установленному;
например: ЕСЛИ (д1 > 5) реле_1 = 1
другой пример: ЕСЛИ (д1 > 5 И д3 < 2) реле_2 = 0
следующий пример: ЕСЛИ (д1 > 5 И (д2 = 2 ИЛИ д3 < 2)) реле_2 = 0


- если разница показаний датчика 1,2 или 3 и датчика 1,2 или 3 или всех трех датчиков больше/меньше/равно заранее установленному;
например: ЕСЛИ (д1 - д3 > 10) реле_1 = 1
другой пример: ЕСЛИ (д2 - д3 < 2) реле_2 = 0
следующий пример: ЕСЛИ (д1 - д3 - д2 = 15) реле_2 = 0


Условия каждый раз могут меняться в зависимости от пожелания "правой пятки левой ноги" пользователя и устанавливаются в интерфейсе самим пользователем.
В JS для решения аналогичной задачи есть очень подходящая функция eval, которая, ОЧЕНЬ грубо говоря, преобразует строковые значения в понятный для машины код.

Задача: обрабатывать выходящую информацию и на ее основе сделать "понятные для контроллера" условия.

Вопрос: существует ли аналогичная функция или библиотека, в которой это реализовано?
Если нет, может подскажете, каким образом подступиться к решению этой задачи?
 

Encrypt

Member
Если хочется изменять условия без перепрошивки, то можно использовать micropyton, espruino, lua?
 

nikolz

Well-known member
День добрый.

Подскажите в ситуации:
Есть 3 датчика и 2 реле. Каждое реле должно включаться/выключаться при совпадении любого из списка условий:
- если показания одного, двух или всех трех датчиков выше/ниже/равно заранее установленному;
например: ЕСЛИ (д1 > 5) реле_1 = 1
другой пример: ЕСЛИ (д1 > 5 И д3 < 2) реле_2 = 0
следующий пример: ЕСЛИ (д1 > 5 И (д2 = 2 ИЛИ д3 < 2)) реле_2 = 0


- если разница показаний датчика 1,2 или 3 и датчика 1,2 или 3 или всех трех датчиков больше/меньше/равно заранее установленному;
например: ЕСЛИ (д1 - д3 > 10) реле_1 = 1
другой пример: ЕСЛИ (д2 - д3 < 2) реле_2 = 0
следующий пример: ЕСЛИ (д1 - д3 - д2 = 15) реле_2 = 0


Условия каждый раз могут меняться в зависимости от пожелания "правой пятки левой ноги" пользователя и устанавливаются в интерфейсе самим пользователем.
В JS для решения аналогичной задачи есть очень подходящая функция eval, которая, ОЧЕНЬ грубо говоря, преобразует строковые значения в понятный для машины код.

Задача: обрабатывать выходящую информацию и на ее основе сделать "понятные для контроллера" условия.

Вопрос: существует ли аналогичная функция или библиотека, в которой это реализовано?
Если нет, может подскажете, каким образом подступиться к решению этой задачи?
Возможны как минимум два варианта решения
Можно сделать разборку условия на компе или смартфоне, а на ESP отправлять управляющий сигнал,
либо отравлять условие на ESP и там разбирать.
-------------------
Как правило для таких целей и созданы различные скриптовые языки и виртуальные машины.
----------------------
Вы можете либо использовать готовую VM например Lua, либо написать свой интерпретатор.
В зависимости от места разборки, ставите VMLua, либо на ESP, либо на компе или смартфоне.
или берете другой любимый Вами скриптовый язык.
--------------------
На ESP наиболее компактно реализован VMLua.
 

pvvx

Активный участник сообщества
- если показания одного, двух или всех трех датчиков выше/ниже/равно заранее установленному;
- если разница показаний датчика 1,2 или 3 и датчика 1,2 или 3 или всех трех датчиков больше/меньше/равно заранее установленному;
У вас пропущены главные условия:
  • Гистерезис
  • Время шага опроса и переключения
  • Приоритет
 

ESP-01S

Member
Всех благодарю за предоставленные комментарии.
Ниже, по возможности, выражу свое мнение относительно каждого из них, но прежде поясню для чего все это:

В свое время, вдоволь набаловавшись с различными "поделками", было исполнено оконечное устройство - аналог дистанционного реле для управления освещением через интернет (коих по сети гуляет множество), но в возможностью работы по ежедневному расписанию:
пн. 11:00 - вкл, 12.30 - вЫкл;
вт. 09:20 - вкл, 10:00 - вЫкл, 12:00 - вкл, 12:30 - вЫкл;
пт. 08:00 - вкл, пн. 07:00 - вЫкл.

Ну и так далее. Устройство было подарено хорошему человеку для работы в качестве контроллера включения/отключения освещения аквариума. Рыбки уже 3 месяца как счастливы, человек доволен, а я получил свой первый практический опыт сборки реального устройства - всем профит ... )))

Сейчас же по его просьбе стоит задача сделать устройство, которое будет мониторить температуру на даче в трех точках - на улице, в прихожей и внутри дома и в зависимости от того, где какая температура, насколько температура в доме выше температуры на улице или в прихожей (ну и так далее, мало ли вариантов) включать/вЫключать отопление (реле) в соответствующих (или во всех) комнатах. Делать это по отдельности - вопрос "десятка" строк кода и пары вечеров для окончательного тестирования, а вот как организовать логику таким образом, чтобы все это сработало - увы, пока не представляю ... Как понимаете, на даче нет возможности/желания ставить отдельное устройство для обработки и интерпретации входящих данных - желательно все это делать исключительно встроенными средствами.

--------------------------------------

Если хочется изменять условия без перепрошивки, то можно использовать micropyton, espruino, lua?
Из всех трех "страшных" слов я более-менее СЛЫШАЛ про LUA. Остальные для меня пока темный лес, особенно если принять во внимание, что за espruino я вообще ничего не слышал. Ну что ж, если ничего не получится на стандартном Arduino C - будет повод познакомиться поближе ... ))) Правда с первых обзоров про espruino я понял, что на esp8266 - это не просто танцы с бубнами, но еще и с жертвоприношениями. Причем в качестве жертвы буду принесен я ... )))

Возможны как минимум два варианта решения
Можно сделать разборку условия на компе или смартфоне, а на ESP отправлять управляющий сигнал,
либо отравлять условие на ESP и там разбирать.
-------------------
Как правило для таких целей и созданы различные скриптовые языки и виртуальные машины.
----------------------
Вы можете либо использовать готовую VM например Lua, либо написать свой интерпретатор.
В зависимости от места разборки, ставите VMLua, либо на ESP, либо на компе или смартфоне.
или берете другой любимый Вами скриптовый язык.
--------------------
На ESP наиболее компактно реализован VMLua.
Первый вариант точно не подходит, поскольку устройство должно быть полностью автономным (за исключением, естественно, питания) и не зависеть ни от каких внешних вычислительных систем: единственный предполагаемый внешний "инструмент" - это браузер оператора, в котором он будет вводить условия. WEB-морда предполагается к размещению на SPFFS самой платы.
По запросу "VMLua esp8266" мне гугл вообще пальцем у виска покрутил и попытался что-то по-своему, по-компьютерному, сказать, что я понял примерно как "Ты что от меня, идиот, хочешь? Может ты искал камасутру? Так бы и спросил ..." Может, если не сложно, поподробнее на этом моменте?

У вас пропущены главные условия:
  • Гистерезис
  • Время шага опроса и переключения
  • Приоритет
Эти условия - уже следствие. Для начала (мне) нужно разобраться с возможностью собственно "объяснить" железке, что я от нее вообще хочу, а там уже будем вместе учить "историю ЦК КПСС", "научный коммунизм" и труды Л.И.Брежнева, попутно осваивая азы физики, логики и математики ... )))
 

ESP-01S

Member
И, да, чтобы жизнь особо медом не казалась - реализация сего проекта планируется на ESP-01S: Wemos D1 pro еще не подвезли, так что пока пытаюсь обойтись имеющимся в наличии железом.
 

Encrypt

Member
В пределах С + HTML что можно сделать, это в прошивке вбить возможные кейсы условий как описано в первом посте (прям визуальный шаблон сделать). А юзеру через вебморду дать возможность выбирать кейс и изменять только операнд ( в условии где цифра там поле ввода). Настройки сохранять в конфиг, например, в JSON формате удобно.
Но конечно это утопия в плане гибкости...
А можно пойти дальше, написать свой Brainfuck для условий и интерпретатор к нему :))
 

fps

Active member
реализация сего проекта планируется на ESP-01S
У нее только 4 шт GPIO выведено. Если в неё паяльником не лезть, то 3 датчика и 2 реле там цеплять некуда.

А по сути задачи - почитайте про микропитон. На нем всё это делается буквально в несколько строк.
 

ESP-01S

Member
У нее только 4 шт GPIO выведено. Если в неё паяльником не лезть, то 3 датчика и 2 реле там цеплять некуда.

А по сути задачи - почитайте про микропитон. На нем всё это делается буквально в несколько строк.
В настоящее время рисую схему будущей платы - там поясню, как я вижу подключение 5 устройств к 4 контактам.
А за микропитон - честно, я его не знаю. Поэтому кроме "нескольких строк" для решения конкретной задачи, мне придется его изучить для решения параллельных задач - общие сведения, поднятие WiFi, подключение по 1-wire, разбор и запись JSON, особенности при решении конкретных задач ... Иными словами - затраты по времени превысят любые ожидания. Да, несомненно, это важно для будущих проектов, но сейчас стоит конкретная задача и ее необходимо решить ...
 
Сверху Снизу