• Система автоматизации с открытым исходным кодом на базе 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, особенности при решении конкретных задач ... Иными словами - затраты по времени превысят любые ожидания. Да, несомненно, это важно для будущих проектов, но сейчас стоит конкретная задача и ее необходимо решить ...
 
Сверху Снизу