1 2 3 4 5 6 7 8 9 10 10/10 10,00оценок: 9

Arduino Mega. Контроллер теплицы. Хроники - 3.0

Тема в разделе "Умный дом", создана пользователем Анкор Плюс, 27.04.17.

Статус темы:
Закрыта.
  1. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.888

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.888
    Адрес:
    80 км от Краснодара
    Ну да, всё же так просто: есть и менеджер обратной связи, и правила, и ручное управление окнами - всех зависимостей учесть - раз плюнуть, неважно, где что менять - всё будет работать, как прежде. Этот сарказм, надеюсь, понятен - надо учитывать массу всего прежде, чем браться за смену чего-либо.

    Короче: на гитхабе обновил, если нет менеджера обратной связи, или для окна не получен пакет обратной связи - окно гонится в закрытую позицию, при этом, пока оно не достигло позиции - все запросы о смене позиции - игнорируются, неважно - откуда они пришли: из правил ли, из монитора порта, из конфигуратора, вебморды, по СМС, по MQTT и т. п. Т. е. при старте по-любому должны все окна до конца закрыться теперь.

    Вангую впереди ещё кучу проблем с обратной связью и т. п. - не бывает у нас так, чтобы в одном месте изменил - и в другом не отвалилось.

    В общем, пробуй. Я проверил и с закомментированным USE_FEEDBACK_MANAGER, и с раскомментированным - и так, и так - при старте окна гонятся 80 секунд в закрытую позицию, неважно, срабатывают правила для окна или нет. После того, как окно достигло позиции (или пришла обратная связь по позиции, или один из концевиков сработал) - флаг игнорирования запросов на смену позиции - сбрасывается, и правила могут опять работать, посылая команды модулю окон.

    Надеюсь, это именно то, что надо.

    З. Ы.

    Да, ты просто не понимаешь, что модуль правил - им не рулят, он просто обрабатывает правила. Правил может быть масса всяких, выключать модуль правил, пока окна не сменят позицию - неверно. Модуль правил работает всегда, всё время работы контроллера - и рассылает команды другим модулям, если правило сработало. При этом модуль правил не знает ни о чём: есть ли там какой-то менеджер обратной связи, в каком положении окно, сколько их вообще в прошивке, есть ли вообще окна в прошивке, движется ли окно, не знает ничего о позиции окна - это не его задачи, а задачи конкретных модулей, рулящих тем или иным функционалом. Модуль правил - это автоматический посылальщик тех же самых команд, которые ты можешь ввести через монитор порта, и которые посылаются из конфигуратора, когда ты нажимаешь ту или иную кнопочку.

    На примере четырёх правил, выложенных мной выше и вводных о том, что есть менеджер обратной связи и температура на датчике - 30 градусов:

    1. Контроллер стартует;
    2. Модуль правил видит, что сработали два правила - и посылает команды, связанные с этими правилами, модулю окон;
    3. При этом модуль окон понимает, что пока ещё ждёт информацию от обратной связи, и игнорирует эти команды;
    4. По окончании ожидания информации об обратной связи модуль окон гонит окна, для которых нет информации по обратной связи, в закрытую позицию, при этом для окон выставляется флаг - игнорировать новые команды на смену позиции, пока она не будет достигнута;
    5. Как только позиция достигнута - флаг сбрасывается;
    6. Модуль правил видит, что правила сработали, посылает команды двум окнам - теперь они могут открываться.

    При этом всё работает параллельно и неблокирующе - не самая простая задача, скажу я тебе. Если хочешь - можешь сам попробовать дописать чуток кода, комментариев в коде кучу, увидишь - просто это или нет, в таком большом проекте.
     
    Последнее редактирование: 17.05.18
  2. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.888

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.888
    Адрес:
    80 км от Краснодара
    К слову о большом проекте: заметил, что ВНЕЗАПНО для Si7021 перестала показываться температура. Вывожу данные в момент получения с датчика - всё ок, температура норм. Однако в конфигураторе упорно для температуры "нет данных". Добавляю ещё три строчки Serial. println с более подробной информацией - температура появляется. Очевидно, что при сборке проекта что-то где-то пошло не так, и копируется не оттуда.

    Провёл рефакторинг модуля влажности, убрал все модификаторы const и внутренние поля классов, чтобы компилятор много себе не думал :) Проверил - температура с Si7021 отображается нормально. Это я к чему? К тому, что, бывает, добавишь в одном месте, а что-то вылезает совершенно в другом. Как раз этот случай.

    На гитхабе обновил. Заодно поправил расчёт температуры, в зависимости от знака - раньше просто дробные части прибавлялись для получения целого числа из двух байт температуры (значение до запятой, и сотые части), что есть неправильно, теперь - с учётом знака формируется целое число. Это число фигурирует, например, в сравнении в правилах. В целом некритично, максимум, что было - это различия в градус при сравнении, и то только при отрицательных температурах. Но упущение неприятное, скажем так. Если кто заметит разницу в отображениях температур в конфигураторе, на дисплее, в вебморде - сообщайте.
     
    Последнее редактирование: 17.05.18
  3. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.888

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.888
    Адрес:
    80 км от Краснодара
    Всё это мы прошли давным давно. Первые два пункта были реализованы чёрт знает когда, и уже давно идёт "постепенно наращивать функционал с документированием". С документированием не очень, конечно, не хватает времени. С удовольствием приму помощь не только в виде риторики ;)
     
  4. HANTER333
    Регистрация:
    21.12.15
    Сообщения:
    1.617
    Благодарности:
    1.156

    HANTER333

    Живу здесь

    HANTER333

    Живу здесь

    Регистрация:
    21.12.15
    Сообщения:
    1.617
    Благодарности:
    1.156
    Полив по датчикам влажности;)
     
  5. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.888

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.888
    Адрес:
    80 км от Краснодара
    И это есть :) :) :)
     
  6. HANTER333
    Регистрация:
    21.12.15
    Сообщения:
    1.617
    Благодарности:
    1.156

    HANTER333

    Живу здесь

    HANTER333

    Живу здесь

    Регистрация:
    21.12.15
    Сообщения:
    1.617
    Благодарности:
    1.156
    Я знаю, уже опробовал, товарищу vworld отвечаю:)
     
  7. Tehnik53
    Регистрация:
    22.08.15
    Сообщения:
    142
    Благодарности:
    23

    Tehnik53

    Живу здесь

    Tehnik53

    Живу здесь

    Регистрация:
    22.08.15
    Сообщения:
    142
    Благодарности:
    23
    @DIYMan, Дмитрий, расскажите пожалуйста про настройку параметров полива через MQTT.
    / настройки модуля управления поливом
    /-
    #define WATER_SETTINGS_COMMAND F("T_SETT") / получить/установить настройки управления поливом: CTGET=WATER|T_SETT, CTSET=WATER|T_SETT|WateringOption|WateringDays|WateringTime|StartTime|TurnOnPump, где
    / WateringOption = 0 (выключено автоматическое управление поливом), 1 - автоматическое управление поливом включено (все каналы), 2 - автоуправление отдельно по каналам
    / WateringDays - битовая маска дней недели (младший бит - понедельник и т. д.)
    / WateringTime - продолжительность полива в минутах, максимальное значение - 65535 (два байта)
    / StartTime - час начала полива (1 байт) - от 1 до 23
    / TurnOnPump - включать (1) или нет (0) насос при активном поливе на любом из каналов
    Не пойму, можно ли указывать не все параметры, а только необходимые.
    В частности интересует, как задать время полива и продолжительность.
     
  8. Анкор Плюс
    Регистрация:
    05.07.11
    Сообщения:
    3.901
    Благодарности:
    6.233

    Анкор Плюс

    Консультант

    Анкор Плюс

    Консультант

    Регистрация:
    05.07.11
    Сообщения:
    3.901
    Благодарности:
    6.233
    Адрес:
    Крым
    Уважаемые форумчане!
    В связи с превышением допустимого лимита в 3000 сообщений данная тема закрыта.
    Продолжить обсуждение Вы можете в теме https://www.forumhouse.ru/threads/443400/
    Arduino Mega. Контроллер теплицы. Хроники - 4.0
     
Статус темы:
Закрыта.