vittorio b 27 июля 2021

💐 Как я провел комплексную автоматизацию тепличного хозяйства: предметная область для IT-менеджеров

Мой опыт внедрения IoT в отечественном аграрном секторе. Роутеры, контроллеры, рассада и теплицы с вайфаем в чистом поле на юге России. Много красивых фоток.
💐 Как я провел комплексную автоматизацию тепличного хозяйства: предметная область для IT-менеджеров
У нас было 2 роутера MikroTik, 40 датчиков температуры DS1820B, 5 контроллеров на базе ESP32, полсолонки канифоли и гора проводов, термоусадки и всего такого, всех цветов, а ещё советский паяльник, трехфазный электромотор, пакет резисторов разных номиналов, упаковка китайских умных розеток и две дюжины твердотельных реле на 5 Ампер. Не то, чтобы это всё было нужно в поездке, но раз начал заниматься интернетом вещей, то иди в своём увлечении до конца. Единственное, что меня беспокоило – это Arduino. В мире нет никого более беспомощного, безответственного и безнравственного, чем программист, стартующий продакшен на подобном решении. И я знал, что довольно скоро мы в это окунёмся.
💐 Как я провел комплексную автоматизацию тепличного хозяйства: предметная область для IT-менеджеров

Введение в курс дела

Компания Evergreen запустила новый сервис доставки флористической продукции чтобы охватить растущий сегмент букетных мастерских, цветочных магазинов и центров флористики. За 2 года компания заняла 60% регионального рынка оптовых поставок цветов.

Это смелая попытка – обратиться к игрокам среднего и малого бизнеса, запустить продажи по конкурентным ценам, обеспечивая ассортимент международных цветочных аукционов и европейский уровень сервиса.

Проблемой оказалось то, что ключевые бизнес-процессы требовали большого количества ручного труда. Разборка и сортировка одной поставки цветов занимали 12 часов работы пяти человек каждую неделю. Параллельно шла стройка культивационных сооружений – теплиц и гидропонных яслей” для рассады.

💐 Как я провел комплексную автоматизацию тепличного хозяйства: предметная область для IT-менеджеров
Меня зовут Кристофер Робин, я IT-специалист широкого спектра с пятнадцатилетним опытом. Возможно, это звучит немного странно или даже громко, однако это самое честное описание, которое я смог подобрать. За 15 лет в IT-сфере мне приходилось решать задачи от переустановки “винды” до руководства разработкой геоинформационной системы федерального проекта.

Приходилось настраивать сеть в офисах, распределенных по разным городам, бодаться с иностранными контрагентами о пунктах договора, верстать IT-часть бюджета на год, готовить корпоративный праздник и даже организовывать публичное мероприятие на 500 человек в парке ВДНХ.

Я понял, что ценность члена команды состоит в его пользе команде, а польза – это набор компетенций, который позволяет решать задачи команды. Мои компетенции позволяют решать довольно широкий круг задач и далеко не всегда они бывают “айтишными”. Скорее они всегда управленческие, но с IT-бэкграундом. История с Evergreen – яркий пример применения этих компетенций.

Мне импонировала как команда проекта Evergreen, так и сама индустрия. C чем я только не имел дело, но сельского хозяйства еще не попадалось. Мне предстояло поработать с дюжиной молодых ребят, которые продают импортные цветы оптом, да еще и выращивают свои собственные в теплицах.

После нескольких skype-сессий у меня уже был образ задачи и я примерно представлял с чем придется иметь дело и какими инструментами можно решить тот или иной вопрос. И, самое главное, возник профессиональный азарт. То чувство, когда ты понимаешь, что можешь решить поставленную задачу на отлично, сделать все правильно настолько, насколько позволяют технологии и стандарты отрасли. Более того, я увидел возможность использовать технологии переднего края и создать качественно новый продукт в сегменте. К этому располагала как сама задача, так и настрой собственника.

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

Расстановка приоритетов

Пока я вдыхал, непривычный после Москвы, предгорный ветер и улыбался яркому южному Солнцу, собственник ввел меня в текущее состояние дел:

Через два месяца приезжает 20000 единиц рассады, ее нужно дорастить до размера высадки и перевезти в теплицы. Доращивать нужно в гидропонных стеллажах. Стеллажи есть, но гидропоники нет и светильников тоже нет.В теплицах нужно организовать контроль параметров среды, помочь ребятам в поле с водоснабжением и, вообще, пообщаться с биотехнологом и сделать все хорошо.
К 8 марта приезжает крупнейшая за 3 года поставка импортных цветов, без электронного учета мы физически не сможем ее обработать, нужно что-то придумать.

Три абсолютно разных направления с кучей подзадач, разными сроками, соподчинением и пересечением. И все относительно срочно. Пару дней ушло на сбор информации и общение с командой, наметилась структура плана. Важно было понять, что делать в первую очередь, в какое время можно переключаться на другие задачи и что можно запараллелить.

***
С автоматизацией учета была хотя бы какая-то ясность. В компании существовал рабочий бизнес-процесс в экселе, сотрудники формировали заказы, прайсы и вели расчет стоимости и доставки. Этот процесс можно переложить на 1С.

По теплице и рассаде вообще ничего не понятно, а рассаду ожидают уже через 2 месяца, поэтому я решил в первую очередь начать активную проработку этого направления. Вместе с архитектором накидали на бумаге схему гидропонной системы, определились с ключевыми узлами и архитектор построил 3D-модель и чертеж в Autocad. Рассчитали сечение труб, мощность насоса и систему слива.

Стеллажи для гидропоники. Все компоненты нашлись в строительных магазинах и аквариумном центре.
Стеллажи для гидропоники. Все компоненты нашлись в строительных магазинах и аквариумном центре.

С освещением ситуация оказалась гораздо сложнее. Вдвоем с биотехнологом в течении двух недель изучали формулы расчета спектра, рынок кристаллов и подбирали подходящих поставщиков. Привлекли эксперта-светотехника с опытом работы в сельском хозяйстве. Обзвонили все крупные производственные компании и нашли подходящие по спектральным параметрам светодиодные модули на базе кристаллов Samsung. Рассчитали потребление тока и подобрали подходящие драйверы.

Гидропоника смонтирована и в стеллажи выставлены кассеты с рассадой.
Гидропоника смонтирована и в стеллажи выставлены кассеты с рассадой.

Отдельная история – это доставка груза в регион (долго и дорого). Через неделю мытарств получили свой груз, собрали тестовый стенд и… испытали глубокое чувство разочарования и растерянности. Светодиодный цвет мерцал как стробоскоп на дискотеке. Для растений это не принципиально, но для инженеров это удар по самолюбию, да и просто невозможно находиться живому человеку в помещении с таким мерцанием.

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

С новыми драйверами стенд засиял ровным ярким светом, именно таким, какой ожидал биотехнолог.

Следующим большим этапом была сборка светильников. Светильник состоит из алюминиевого Г-образного профиля, светодиодных модулей, драйвера и электропроводки. На одном профиле размещается девять светодиодных модулей, шесть светильников на полку, две полки в стеллаже, семь стеллажей в помещении.

Итого 84 светильника необходимо было собрать за 3 недели. В офисе компании временно открылся филиал китайской провинции Гуанчжоу :)

Нарисовали схему, вырезали лекала. Обучил команду правильной пайке и изоляции контактов. Организовал конвейер: один человек резал профили и сверлил отверстия, второй монтировал модули, спаивал контакты и делал проводку, а третий монтировал светильники на стеллажах.

Монтаж светодиодных модулей на алюминиевые профили.
Монтаж светодиодных модулей на алюминиевые профили.

Когда приехала рассада мы все еще собирали светильники. Работу распределили так, чтобы максимальное количество рассады можно было поставить на досветку. Так что, некоторое время, зеленью был покрыт весь пол помещения, чтобы она получала хотя бы отраженный свет.

С растениями есть одна проблема, их нельзя попросить подождать. Это живые организмы, которые на 100% зависят от факторов окружающей среды. И чем дольше они находятся при слабом освещении, тем ниже их потенция и выше риск, что они получат стресс и вырастут не по стандартам, а это означает снижение конечной стоимости продукции.

Наша задержка оказалась не критичной, в помещении были большие окна и рассада хорошо перенесла неделю на совмещенном свете, чего не скажешь о нас. Чрезвычайно трудно таскать четырехметровые профили переступая через джунгли на полу. Но никто не говорил что будет легко. Главное – рассада под светом, можно идти дальше. Первый дедлайн преодолели.

Рассада под готовым светильником.
Рассада под готовым светильником.
Другая рассада под таким же светильником.
Другая рассада под таким же светильником.

Автоматизация учета продаж

Появилось время разобраться с учетом продаж и подготовкой к 8 марта. Из всей возможной автоматизации на объекте был только wi-fi и офисные компьютеры. Первым делом я начал разбираться с инфраструктурой. Нужно было поднять связь между офисом, розничным магазином и машиной для выездной торговли. Для этого я заменил домашние роутеры Tp-link на более функциональные MikroTik. Сменил тарифы провайдера и подключил белые ip-адреса. Такое решение позволило мне настроить шифрованный канал GRE+IPSEC между магазином и офисом. После объединения магазина и офиса я создал гостевой wif-fi для клиентов и отделил его от корпоративной сети. Для последующей настройки рабочего места выездной машины настроил VPN-сервер L2TP+IPSEC.

Картина становилась красочнее, появилась сеть и общая точка отсчета – сервер.

Сервер собрал из доступного железа – пересобрал некоторые машины. Core i7 и 20гб ОЗУ вполне хватает для 1С 8.3 с конфигурацией “Управление Торговлей”. В течении пары дней настроил и запустил 1С на MSSQL, реализовал правильное резервное копирование средствами SQL тремя разными способами с разным интервалом.

Вместе с главным менеджером и бухгалтером мы описали бизнес-процесс, написали ТЗ для 1С-программиста и заказали необходимую обработку для компоновки заказов по коробкам, расчету стоимости и печати ценников.

С клиентов собирают предзаказ, потом менеджеры проводят закупку на голландском аукционе, цветок приезжает в больших оптовых коробках. В каждой коробке лежат упакованные партии – банчи. Каждый клиент заказывает всего по немногу. Задача приемщиков состоит в сортировке оптовой партии на коробки-заказы для конечного клиента. Открывают коробку одного сорта и раскладывают из нее банчи по коробкам-заказам, потом следующая и так пока не распакуют всю поставку.

В составлении списка “кому и сколько” вся проблема, каждый раз вручную составлять таблички, распечатывать – это ужасно долго.

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

Для выездных продаж с автомобиля подготовил ноутбук с VPN-доступом к офису и тонкий клиент 1С.

Второй дедлайн закрыли раньше срока и даже успели обкатать решение до 8 марта.

Еще одно помещение с другим видом рассады и температурным режимом. Свет смешанный.
Еще одно помещение с другим видом рассады и температурным режимом. Свет смешанный.

Автоматизация в полях

Самое интересное началось в тепличном комплексе. Это поле – до цивилизации 50км, любой мелкий дождь размывает дорогу на пару дней. Каждый выезд – экспедиция в полной выкладке с рюкзаком. Комплекс состоит из двух стометровых теплиц и одной пятидесятиметровой.

Идем в поля.
Идем в поля.
Организовал покрытие 300 м2 зоной уверенного приема Wi-Fi с бесшовным роумингом. Интернет в поле получил через перепрошивку модема LTE и фиксацию TTL. Получился безлимитный интернет вдвое дешевле лимитного плана предыдущего провайдера. Ширина канала 20 Мбит/сек через направленную антенну MIMO. Просканировал ближайшие базовые станции, определил наилучшее значение RSSI и направил антенну на лучшую.

Это очень веселая задача: десятиметровая мачта, ветер 15 м/с, коллега крутит антенну, а я с ноутбуком анализирую данные, обоих качает на лестнице как на лодке, глаза боятся – руки делают. Вычислили правильную позицию антенны, приварили металлическую стойку к мачте и смонтировали антенну. Сварка на высоте – зрелищное событие, искры расплавленного металла летят во все стороны и превращаются в длинные светящиеся линии. Как будто на концерте у Rammstein.

Монтаж антенны и метеостанции.
Монтаж антенны и метеостанции.
У мобильных провайдеров сложности с выделением белых IP-адресов, поэтому канал к офису настроил по методу выездной торговли, через VPN-клиента L2TP+IPSEC, только вместо ноутбука здесь был маршрутизатор. Теперь связь была во всех точках компании, это сильно упрощало все дальнейшие маневры.

В свободное время я проводил коммерческую разведку. Оказалось, что в регионе, да и в сегменте в целом, ситуация выглядит в прямом смысле колхозно. Повсеместно ручной труд, из автоматизации максимум – это полив по таймеру и то не везде. Люди просто выращивают цветы по-старинке. Так было и в моем случае.

После нескольких планерок с полевой командой я выявил два главных направления в работе: сбор данных о параметрах среды для биотехнолога и автоматизация полива.

  • Биотехнологу необходимо постоянно мониторить температуру и влажность воздуха в трех точках каждой теплицы и снаружи. По этим данным он рассчитывает количество препаратов, необходимых для внесения, а также корректирует график.
  • Рабочие в теплице чаще и дольше всего занимаются поливом. Постоянно бегают переключать шланги и включать насос. Очевидно, что на датчиках температуры биотехнолог останавливаться не намерен, а количество теплиц будет расти. Система водоснабжения до конца не утверждена, а помочь рабочим нужно уже сейчас.

Проанализировав ситуацию я пришел к выводу, что нужно сделать масштабируемую систему, в которую по запросу можно добавить или убрать любой датчик и подключить или отключить любой активный агрегат.

В качестве модели для своей архитектуры я выбрал классический botnet. Командный сервер (С&С) с админ-панелью формирует задания ботам, только у меня вместо ботов микроконтроллеры, а в качестве командного сервера – сенсорная нода (sensor node). Контроллеры шлют данные на сенсорную ноду и получают от нее задачи на день.

Подбор конфигурации для IoT-решения

Наступило время подбора электронных компонентов. Провел комплексное исследование рынка, заказал и пощупал с десяток доступных девайсов. В финал вышли микрокомпьютер Raspberry Pi и микроконтроллеры ESP8266/ESP32.

Платы Arduino показали себя как сугубо нишевое решение, ввиду ограниченных возможностей железа, отсутствия встроенного wi-fi и памяти для записи данных. Что-то относительно гибкое на них сложно построить, однако вполне можно применять для решения локальных задач.
Плата ESP8266.
Плата ESP8266.
  • ESP мне понравилась с первого взгляда. Красивая и компактная железяка. Количество выходных пинов как в Raspberry Pi, есть встроенный wi-fi. Нашел для нее прошивку с языком Lua. Спаял первое устройство и написал код на lua. Оказалось, что реализация Lua сыровата и слишком громоздкая, ей не хватало памяти и система постоянно падала и вела себя непредсказуемо. Путь оказался тупиковым – Lua был уволен.
  • Далее я попробовал написать код в Arduino IDE на его родном языке wiring. Много писанины, жесткий синтаксис, невозможно реализовать многопоточность, неприятный язык. Wiring тоже был уволен.
  • Наконец-то я нашел реализацию python для контроллеров ESP, причем сразу двух видов. Проприетарный Zerynth и опенсорсный micropython. В качестве пробы платформы Zerynth я написал код для сбора данных о параметрах ветра: силы и скорости. Большим плюсом этой платформы является отличный IDE, однако в Zerynth не обнаружилось нормального способа реализовать планировщик заданий, а эта функциональность является критичной для моей архитектуры. К тому же платформа была платной и каждый прошитый контроллер стоил денег. В итоге Zerynth был тоже уволен.
  • Наступила очередь micropython. В нем оказалось все прекрасно, за исключением нормального IDE, но для архитектуры и работоспособности системы это не критично, поэтому весь основной код для микроконтроллеров esp8266 и esp32 я написал на нем.
Процесс монтажа гирлядны из датчиков температуры <i>DS1820B.</i>
Процесс монтажа гирлядны из датчиков температуры DS1820B.
Raspberry Pi идеально подошла на роль сенсорной ноды. Для нее можно писать код на python, под капотом планировщик cron и вообще весь арсенал полноценной Linux-системы. Это все избыточно для съема данных с датчиков, да и размер великоват, а вот в роли локального сервера она подходит как нельзя лучше.

Погружаясь всё глубже в дебри iot-индустрии я разложил по полочкам все технологии и развернул на Raspberry Pi следующий стек: grafana, telegraf, mqtt, influxdb.

Общение контроллеров с нодой идет по протоколу MQTT и обрабатывается MQTT-сервером. Сбор данных идет через модуль telegraf и складируется в СУБД InfluxDB. Всей красотой заведует Grafana: обеспечивает визуализацию графиков в реальном времени. Также я написал несколько командных скриптов для ручного управления контроллерами, так как админ-панели пока еще не существовало.

Дашборда на Графане.
Дашборда на Графане.
Никогда не стоит забывать о резервном копировании данных. Особенно когда система находиться далеко в поле. Для этого я разработал систему горячего бэкапа sd-карты на Raspberry Pi.

Дело в том, что к RPI подключен внешний жесткий диск, на котором физически хранятся файлы базы данных. Такое решение необходимо для оптимального использования ресурса sd-карты, иначе поток данных с контроллеров просто убьет ее постоянными операциями записи. На этом жестком диске полно свободного места и туда удобно еженедельно складывать образы sd-карты.

Если вдруг произойдет авария и карточка умрет, то рабочий на месте достанет запасную чистую карточку, запишет туда последний рабочий образ, вставит в RPI и она будет работать.

Пока я конструировал правильную систему на своих микроконтроллерах, в теплицах развернул решение от китайской компании Sonoff. Это четырехпортовые контроллеры с мобильным приложением. Они довольно туповаты в возможностях, но благодаря мобильному приложению и облачной платформе зарекомендовали себя как удобный инструмент для прототипирования. Все рабочие установили приложение и я раздал доступы на насосы и выключатели. По мере готовности просто заменял sonoff на esp.

Подключение моторизированного крана к блоку Sonoff.
Подключение моторизированного крана к блоку Sonoff.

В качестве переходного решения написал скрипты интеграции сенсорной ноды и sonoff через API. Таким образом стало возможным создать систему автонаполнения емкости с водой. Включением насоса занимался Sonoff, а команду на включение давала сенсорная нода, опираясь на датчик уровня воды, данные с которого на ноду отправлял мой контроллер ESP.

Хак Sonoff с твердотельным реле.
Хак Sonoff с твердотельным реле.
C Sonoff вообще вышла тесная интеграция, реле у них электромагнитные и слабые, большую нагрузку через них не пустишь – сплавятся. Пришлось его немного хакнуть и впаять параллельно штатному реле – твердотельное на 20 Ампер.

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

Ультразвуковой дальномер HC-SR04, LED-дисплей, Arduino, Power Bank. Каждые полсекунды показывает на табло текущее расстояние в сантиметрах.
Ультразвуковой дальномер HC-SR04, LED-дисплей, Arduino, Power Bank. Каждые полсекунды показывает на табло текущее расстояние в сантиметрах.

Тем временем рассада подросла и началась подготовка к высадке в теплицу. Все насосы и электромагнитные клапаны подключил к системе и раздал доступы рабочим на смартфоны. Они были счастливы, так как перестали бегать через весь участок к выключателю и могли управлять всеми насосами и переключать направление воды из любой точки тепличного комплекса.

Биотехнолог получил мониторинг параметров среды в реальном времени в со смартфона в удобном интерфейсе.

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

Благодаря автоматизированной обработке заказов, у менеджеров в офисе высвободилось время для обучения студентов сортировке цветка. Привлечение наемных сотрудников для разбора поставок – важный этап развития компании, его постоянно откладывали, потому что на обучение физически не хватало времени.

Мое мнение об отрасли

Цветочный бизнес, как частное явление сельскохозяйственного сектора, остается одним из самых технически отсталых в России. Я считаю, что такое положение дел связано как с управленческой волей собственников, так и с недостатком кадров и недостаточной популяризацией отрасли среди молодых специалистов.

Хочется верить, что мой труд положил начало автоматизации цветочной отрасли в южных регионах.

Это теплицы Evergreen
Это теплицы Evergreen
Теплицы, принадлежащие другому, гораздо более крупному фермеру.
Теплицы, принадлежащие другому, гораздо более крупному фермеру.
У каждого жителя поселка есть свои теплицы.
У каждого жителя поселка есть свои теплицы.
Общий вид на размер поселка и общее количество теплиц.
Общий вид на размер поселка и общее количество теплиц.

Еще немного атмосферных фоток.

Вид на соседние поля.
Вид на соседние поля.
Закат на плантации. Справа от лестницы, вверху на перекладине, видны две штуки для замера направления и силы ветра ветра.
Закат на плантации. Справа от лестницы, вверху на перекладине, видны две штуки для замера направления и силы ветра ветра.
Белая Эустома.
Белая Эустома.
Бежевая Эустома подросла до уровня, когда нужно натягивать сетку.
Бежевая Эустома подросла до уровня, когда нужно натягивать сетку.
Саженец Эустомы.
Саженец Эустомы.
Фиолетовая Эустома. Крупный план.
Фиолетовая Эустома. Крупный план.
Фиолетовая Эустома и узел капельного полива.
Фиолетовая Эустома и узел капельного полива.
Бежевая Эустома.
Бежевая Эустома.
Фиолетовая Эустома.
Фиолетовая Эустома.
Рассада Эустомы.
Рассада Эустомы.
Общий вид внутри теплицы.
Общий вид внутри теплицы.
Моя мастерская. Сделали все с нуля, от стола и полок до светильника.
Моя мастерская. Сделали все с нуля, от стола и полок до светильника.
Третья рука с платой ESP8266.
Третья рука с платой ESP8266.
Коробочка не моя, а коллеги по цеху, брал эту фотку в качестве примера.
Коробочка не моя, а коллеги по цеху, брал эту фотку в качестве примера.
Моя коробочка с кишками от метеостанции. Блок питания, выпрямитель и 2 ESP8266.
Моя коробочка с кишками от метеостанции. Блок питания, выпрямитель и 2 ESP8266.
Приложения: Sonoff, MQTT Dash, ThingSpeak.
Приложения: Sonoff, MQTT Dash, ThingSpeak.

Выводы

  • Если есть толковый инженер – не важно какую задачу решать.
  • Если есть толковый управленец – он всегда найдет толкового инженера.
  • Каким бы ни был толковым инженер и управленец, вдвоем они много не сделают – нужна команда.
  • Если долго смотреть на проблему – она сама себя раскроет.
  • Не бывает плохих или хороших решений – бывают решения которые работают и которые не работают.

МЕРОПРИЯТИЯ

Комментарии

ВАКАНСИИ

Добавить вакансию
Разработчик С#
от 200000 RUB до 400000 RUB
Java Team Lead
Москва, по итогам собеседования

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ