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

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

Тема в разделе "Теплицы и парники", создана пользователем DIYMan, 06.06.16.

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

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    @olegmak3 - проверил, в правилах можно вводить отрицательные показания с датчиков, так что всё будет работать, если я буду проверять условия _ДО_ того, как делать выводы - есть ли датчик на линии.

    Надо думать, стоит ли менять такое поведение.
     
  2. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Вот думаю, давайте вместе: я в правилах проверяю, есть ли датчик на линии. Если нет, то считаю, что правило не сработало. Однако, при таком раскладе становится невозможно добавить правило "сделать что-то, если показаний с датчика нет". По сути же, отсутствие датчика на линии - это просто показание определённого вида, например для датчиков температур и влажностей - это число -128, для датчиков освещённости - число -1, т. е. они тоже являются вырожденными значениями показаний.

    В принципе, при таком раскладе достаточно убрать проверку на присутствие датчика на линии, и всё, теоретически, должно заработать. Но тут надо подумать, и серьёзно подумать, на примере правила закрытия фрамуг, скажем: "если температура меньше чем 15 градусов, то закрыть форточки" - при отсутствии показаний с датчика это правило не отработает в текущей редакции прошивки. А если не проверять отсутствие датчика на линии, то - отработает, т. к. показания с датчика будут "-128". И при отсутствии датчика на линии фрамуги закроются, что как бы будет не совсем очевидно, кмк.

    Закомментировать несколько строк - недолго, но прежде мы должны подумать о последствиях и зависимостях.

    @olegmak3 - вы сами ради эксперимента можете закомментировать строки 288 и 289 в файле AlertModule. cpp и проверить - устраивает ли вас новое поведение прошивки. Я вот пока сходу не скажу, что всё станет таким уж прозрачным и понятным, если ситуацию "датчик отсутствует на линии" приравнять к ситуации "у датчика нижнее граничное показание" (что, собственно, мы и делаем, закомментировав проверку).
     
  3. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Есть следующая мысль: если показаний с датчика нет, то не делать тупо, возвращая false, а проверять только в этом случае - совпадает ли настройка слежения со значением "нет показаний с датчика" (в примере с температурой это -128). И если совпадают - значит правило заточено только на отсутствие показаний с датчика. Кмк, это то, что нужно ;)

    Сейчас пойду допишу и обновлю прошивку.
     
  4. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    @olegmak3 - обновил прошивку, добавил возможность правилу срабатывать, если датчика нет на линии. Для добавления такого правила просто укажите любой оператор сравнения в настройках "Если показания с датчика ..." и в качестве показаний укажите -128 для температурных и датчиков влажности, и -1 - для датчика освещённости. И такие правила должны срабатывать только тогда, когда датчика нет на линии.

    Но тут появится ещё одна тонкость: с датчиков данные могут приходить не сразу, что естественно. Так что я пока не ручаюсь, что при старте контроллера такие правила немедленно не отработают. Ставить задержку для первой сработки правил после старта контроллера? Это тоже не очень, т. к. в любом случае - у нас будут ещё и беспроводные датчики, а там всё гораздо веселее с временем появления показаний с них ;)

    В общем, пока пробуйте, этот нюанс надо откатать в хвост и в гриву, что называется. Чую, что с вашей помощью у нас всё больше получается что-то полупромышленное :)
     
  5. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Чешу репу по отказоустойчивости датчиков. Много думал. Очень много думал. Думалка начала болеть. И вот что придумал: в самом вырожденном случае мы, конечно, можем попасть в ситуацию, когда все датчики поломаются разом, и тогда - кричи "Пожар!", хватай вёдра, грузи песок тачками. Но это - гемофилия такая, болезнь вырождения, и мы её отбрасываем, как негодную :)

    А вот в общем случае - да, может статься, что один датчик работал-работал, работал-работал, а потом ёк - и всё, на пенсион ушёл, да с концами. И что делать в этом случае? Очевидным решением было бы ввести горячее резервирование датчиков, без перепахивания прошивки. И вот что мне надумалось, постараюсь изложить на конкретном примере:

    1. Цепляем мы 2,3,4,5 датчиков температуры, располагая их внутри теплицы;
    2. Указываем, что по датчику номер 1 у нас будут открываться/закрываться фрамуги из правила;
    3. Датчик номер 1 полетел, беда, фрамуги встали;
    4. И вот тут мы берём - и делаем цепочку резервирования, а именно...

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

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

    Как думаете?
     
  6. Vik58
    Регистрация:
    22.03.13
    Сообщения:
    656
    Благодарности:
    3.388

    Vik58

    Живу здесь

    Vik58

    Живу здесь

    Регистрация:
    22.03.13
    Сообщения:
    656
    Благодарности:
    3.388
    Адрес:
    Королёв
    Толково. Будет как в авто - переход на аварийную программу управления двигателем, чтобы до автосервися дотянуть. По той же аналогии на "морду" лампулю "Джеки Чан" (check engine) надо добавить. В смысле сообщение жирным красным шрифтом с текстом :
     
  7. kivik71
    Регистрация:
    28.10.13
    Сообщения:
    3.787
    Благодарности:
    2.288

    kivik71

    Живу здесь

    kivik71

    Живу здесь

    Регистрация:
    28.10.13
    Сообщения:
    3.787
    Благодарности:
    2.288
    Адрес:
    Екатеринбург
    Тогда возможно для этого семейства сделать виртуальный датчик (типа средней температуры по больнице), этот датчик уже не сможет поломаться в железе (только программно).
     
  8. olegmak3
    Регистрация:
    14.08.11
    Сообщения:
    524
    Благодарности:
    442

    olegmak3

    Живу здесь

    olegmak3

    Живу здесь

    Регистрация:
    14.08.11
    Сообщения:
    524
    Благодарности:
    442
    Адрес:
    Санкт-Петербург
    Вот они то у меня и прицеплены уже.
    Под потолком, у пола, в грунте.
    Плюс, как мне кажется, нигде не используемый датчик температуры внутри DHT22.
    Думаю, рациональный и более грамотный вариант.
    Единственно, что бы Вам прошивку не шибко пришлось перелопачивать.
     
  9. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Значит, тогда сделаем так: будет отдельный модуль, с помощью которого можно будет указывать, какие датчики являются членами одной комнаты, грубо говоря. И в правилах просто дополнительно буду проверять - если с назначенного датчика нет данных - буду тыркать всех соседей по комнате, до победного ;) При таком раскладе в прошивке мало что поменяется, по сути.
     
  10. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    А это один из выходов, собственно. Может, реально сделать ещё модуль виртуальных датчиков "средней температуры" по больнице? И тогда проблема уйдёт сама собой: кому надо - добавил N физических датчиков в один виртуальный, и его завёл в правила, чтобы по показаниям с этого датчика работать с фрамугами. Датчик откажет только тогда, когда все физические выйдут из строя.
     
  11. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

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

    Но, конечно, вопроса резервирования это не убирает.
     
  12. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Обновил конфигуратор, добавил возможность добавлять дельту между одним и тем же датчиком (к слову, в вебморде это было сразу из коробки). Теперь по наличию показаний "0" с такой дельты можно сказать, что датчик исправен, а если на дельте показания "-128" (для температуры и влажности) и "-1" (для освещённости) - датчик поломатый. Т. е. появилась ещё одна степень свободы настройки правил.

    Но, думаю, модуль настройки резервирования датчиков всё же необходим. Буду думать, надо ещё дырку свободную в EEPROM найти, там всё считать надо по максимальной длине возможных хранящихся данных, не так просто всё.

    Будем искать перламутровые пуговицы :)
     
  13. Сокол1
    Регистрация:
    22.06.16
    Сообщения:
    43
    Благодарности:
    2

    Сокол1

    Участник

    Сокол1

    Участник

    Регистрация:
    22.06.16
    Сообщения:
    43
    Благодарности:
    2
    Мне нужно нанять человека, чтобы хотя бы начать и по чуть-чуть модернизировать систему. Разве это нельзя сделать удаленно? Может Вы поможете?
     
  14. Shelllonn
    Регистрация:
    04.02.16
    Сообщения:
    759
    Благодарности:
    300

    Shelllonn

    Живу здесь

    Shelllonn

    Живу здесь

    Регистрация:
    04.02.16
    Сообщения:
    759
    Благодарности:
    300
    DIYMan, обновил базу, добавил индексы, стало значительнее быстрее
     
  15. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Т. е. добавили индексы, как у меня теперь в базе? Хорошие новости, рад, что быстрее стало. С БД так всегда - сначала протупишь с индексами, а потом они рулят :) И это ещё не последняя настройка индексов, я думаю.
     
Статус темы:
Закрыта.