Помогите пожалуйста с подбором и настройкой оборудования для теплиц

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

  1. Контроль параметров: температуры, влажности, СО2, освещённости, влажность грунта ( https://3d-diy.ru/wiki/arduino-datchiki/datchik-vlazhnosti-pochvy-arduino/).
  2. Регулировка и выполнение сценария рассвет/закат (возможность быстрой настройки времени и продолжительности включения и выключения)
  3. Поддержание уровня освещённости на заданном значении или ±5-10% (то есть при ярком солнечном свете светильник светит тускло, при пасмурной погоде светит ярко, поддерживая заданную освещённость)
  4. включение насоса на подачу жидкости по определённому сценарию (примерно 20 раз в день по 2 мин) или включение/отключение насоса при определённом уровне влажности.
  5. Вывод на экран временных показателей контролируемых величин.
    Помогите пожалуйста с подбором аппаратуры, описанием подключения и описанием настроек (скриптов). Спасибо

Подключаем этот датчик к контроллеру с помошью набортных аналоговых входов (4 штуки, внешними модулями можно добавить.
Темпаратуру и влажность даст WB-MS вместе с освещенностью. А какой датчик CO2 сейчас используете?

У нас есть диммеры, в правилах можно хоть по 1% можности прибавлять каждую минуту.

WB-MS даст освещенность. Если его поставить на стеллеже - то можно поддерживать постоянную, регулируя искусственную подсветку. Да, возможно и легко.

Практически любой модуль реле, для примера

В веб-интерфейс, имеете в виду? Или хотите подключить дополнительно экран?

Для того чтоб помочь - нужно больше данных. Тип светильников (может у вас светодиодные фитолампы, тогда диммер надо WB-MRGBW-D
Что за насосы (напряжение, мощность).
То есть нужно четко представлять набор контролируемых параметров и все свойства исполнительных механизмов.

Светильники светодиодные. Драйвера управления светильниками: mean well XLG-240-L-AB. Они со встроенным диммером 0-10в.
Насос подбираем. Скорее всего будет обычный “крот”. Если не ошибаюсь, его питание 220в и подключить, логично, фазным проводом через контактор с электромагнитным реле, которое включается и выключается по задаваемому сценарию.
В качестве комплексного датчика по контролю основных параметров хочу использовать WB-MSW v.3. На данный момент используем самодельные датчики с контроллером ПЛК73 от ОВЕН на RS-485.

мы используем mean well XLG-240-L-AB. Они со встроенным диммером 0-10в. Хотим остаться на нём. Это делается скриптом? можно пример? спасибо!

тоже прописывается скрипт? может быть можно пример? спасибо!

его параметры можно задать через веб-интерфейс, чтобы пользователь мог настроить сценарий на день? Спасибо!

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

Он большой. Ну и возможность управлять оборудованием через ИК - она нужна в теплице?
v2 ИМХо лучше. Но дело ваше.

Да, скриптом. Но для того чтоб иметь аналоговые выходы надо либо WBE2-AO-10V-2 - 2 выхода
либо WBIO-AO-10V-8 - 8 выходов
Пример скрипта напишу сегодня.

Желаемую влажность? Да.
То есть алгоритм: включаем насос на (время насоса). Через (время контроля) проверяем целевой параметр (влажность) на соответствие уставке. Если меньше - повторяем цикл.

Безусловно v2 лучше подходит тк не имеет лишнего. Но написано, что она снята с производства. Из-за этого и пал выбор на v3.

честно говоря мне больше нравится WBIO-AO-10V-8 думаю, на нём и остановимся.

тут должно быть 2 варианта в зависимости от пожеланий человека:

  1. Он хочет установить время полива вручную. Для этого он должен задать время полива. К примеру в 12, 14, 17, 18:30 (условно). И задать время полива-2 минуты.
  2. Полив в зависимости от влажности грунта. То есть человек задаёт влажность на уровне N% и когда влажность падает ниже этого уровня, то включается насос на 2 (условно) минуты.

То есть из оборудования мне нужно:

  1. Контроллер https://wirenboard.com/ru/product/wiren-board-6/ (для автоматизации всех процессов)
  2. Датчик https://wirenboard.com/ru/product/wb-msw-v3/ (для контроля параметров температуры, СО2, освещённости, влажности)
  3. Расширитель аналоговых выходов WBIO-AO-10V-8 (для управления светом)
  4. модуль реле https://wirenboard.com/wiki/WB-MR6CU_Modbus_Relay_Modules (для управления насосом)
  5. датчик https://3d-diy.ru/wiki/arduino-datchiki/datchik-vlazhnosti-pochvy-arduino/ (для контроля влажности почвы)
    Всё верно? я ничего не забыл?
    Огромное спасибо за помощь

Верно, по модулям все есть. Блок питания забыли, (будете использовать свой?).
UPD: скрипты
Освещение
Влажность
скорее выложу завтра.

Верно. Надо добавить блок питания. Какой больше всего подойдёт для нашей работы? Спасибо

hdr_15_24 будет достаточно.
И еще один вопрос - у вас в планах схема: один стеллаж - один контроллер"? Просто контроллер сможет управлять несколькими группами устройств.

На данный момент мы собираем опытные стеллажи. Это стеллаж на вашем контроллере, на ПЛК73 (210) ОВЕН, на радиоуправлении, и на стороннем контроллере, который разрабатывает отдельная компания. У нас в одном помещении будут представлены стеллажи с разной системой управления, которую мы будем показывать заказчикам. Устанавливать будем по выбору заказчика. Конечно, если масштабировать это дело, то мы сами планируем делать до 80 стеллажей на помещение. Хорошо бы их все контролировать через один контроллер. Их можно группировать в группы по 1 или несколько стеллажей. На данный момент, тк у нас 1 стеллаж, мы разбиваем управление освещением на 4 полки, но контроль будет на средней полке, чтобы можно было реализовать, для наглядности, автоматическое управление и контроль

Ок, я так и подумал. Модули можно подключать через WB-MIO/
То есть вместо еще одного контроллера - ставим WB-MIO.

То есть WB-MIO подключается по Ethernet или RS-485 к контроллеру, после этого ставим к WB-MIO любые расширительные модули и настраиваем через веб интерфейс, как обычные модули? Спасибо

Да, именно так. То есть можно подобрать комплект модулей (добавить модуль аналоговых входов, мы собираемся в текущей конфигурации использовать входы самого контроллера) и при необходимости расшириться - просто добавлять MIO+модули. И сразу подобрать монтажный ящик по размеру, куда все ставить.

Здравствуйте. Можно Вас попросить примеры скриптов? спасибо

Да, допишу и выложу сюда.

Спасибо огромное!)

Не забыл.
Вот примерный вид панельки управления светом:
Screenshot from 2020-07-08 21-14-51
Панелек на контроллере может быть много, предусмотрел раздельное сохранение и обработку параметров для каждого объекта управления.
Можно выбрать желаемую освещенность, время начала “рассвета” и “заката”, скорость рассвета/заката (надо дописать).
Соберу завтра тестовый стенд и отлажу.
У вас уже есть оборудование (контроллер, модули)? чтоб попробовать?

Вот такую “панель управления” можно собрать из уже имеющихся или это надо программировать дополнительно? если да, то можно пример кода, чтобы мы примерно понимали, как это делается? спасибо
Я из Республики Беларусь и заказать довольно проблематично. Учитывая, что нужного контроллера и датчика нет в наличии (мне вчера так сказали). Договор поставки вчера подписали и платили. Я внимательно слежу за ходом доставки. Думаю, что оборудование придёт примерно через 1,5-2 недели и мы сразу же будем вводить его в работу.
По свету ещё хотел бы сделать несколько уточнений: рассвет должен длиться от 15-30 мини (в этом диапазоне). “рассветать” должно до уровня “Lamp power set”
Lamp power и Light_measured- это статус лампы и изменения освещения соответственно?
Light SetPoint- это установка света в пределах 0-100 или это тоже статусный параметр?
Спасибо огромное за помощь!

Оно программируется, пример кода:

//имя устройства. Если к контроллеру подключено больше одного - имена должны различаться.
//Используется для названия панелек контроля. Ну и для разделения хранилищ параметров.
var grow_box = "test1"; 

var dimmer_light = ""; //устройство-диммер
var sensor_light = ""; // устройство-датчик освещенности


//this ["ps"+grow_box] = new PersistentStorage("storage_"+grow_box, {global: true});
//Определим объект-хранилище.
 var ps = new PersistentStorage("storage_"+grow_box, {global: true});

var sunraiseForCron = string_to_time(ps["sun_start_time"]).getMinutes()+" "+string_to_time(ps["sun_start_time"]).getHours()+" * * *"
log.info("light_"+grow_box+" Onstart sunraiseForCron ", sunraiseForCron); 
var sunsetForCron = string_to_time(ps["sun_stop_time"]).getMinutes()+" "+string_to_time(ps["sun_stop_time"]).getHours()+" * * *"
log.info("light_"+grow_box+" Onstart sunsetForCron ", sunsetForCron); 

//Элементы виртуального устройства
//управления
var deviceCells = { 
  "Light_measured": {
    type: "value",
    value: "01",
  },
  "Lamp power": {
    type: "value",
    value: "0",
  },

  "Lamp power set" : {
    type : "range",
    value : 20,
    min : 1,
    max : 100
  },
  //Начало рассвета hh:mm
  "Sunraise (start) time": {
    type: "text",
    readonly: false,
    //value: ["ps"+grow_box]["sun_start"],
    value: ps["sun_start_time"],
    //writable: true
  },
  //Начало заката hh:mm
  "Sunset (stop) time": {
    type: "text",
    readonly: false,
    //value: "06:00",
    value: ps["sun_stop_time"],
    //writable: true
  },
  "Light SetPoint": {
    type: "value",
    readonly: false,
    value: ps["light_setpoint"]
  },
  sunraiseProcess : {
          type : "switch",
          value : false,
  },   
  sunsetProcess : {
          type : "switch",
          value : false,
  },   
  
  
//  "11": {
//    type: "text",
//    //readOnly: true,
//    readonly: false,
//    value: "aaaa",
//  }
};


//Создадим виртуальное устройство и добавим в него элементы 
  defineVirtualDevice("light_"+grow_box, {
    title:"Light of "+grow_box,
    cells: deviceCells
  });

defineRule("Sunraise start time change", { //название правила 
whenChanged: "light_"+grow_box+"/Sunraise (start) time", //при изменении поля времени начала РАССВЕТА запишем его в хранилище
  then: function (newValue, devName, cellName) { //выполняй следующие действия
    log.info("light_"+grow_box+"/Sunraise start time ", newValue); //Это лог
    ps["sun_start_time"] = newValue;
    //string_to_time(newValue);
    sunraiseForCron = string_to_time(ps["sun_start_time"]).getMinutes()+" "+string_to_time(ps["sun_start_time"]).getHours()+" * * *"
    //log.info("light_"+grow_box+"/Sunraise sunraiseForCron ", sunraiseForCron); //Это лог.
  }
});

defineRule("Sunset start time change", { //название правила 
whenChanged: "light_"+grow_box+"/Sunset (stop) time", //при изменении поля времени начала ЗАКАТА запишем его в хранилище
  then: function (newValue, devName, cellName) { //выполняй следующие действия
    log.info("light_"+grow_box+"/Sunset (stop) time ", newValue); //Это лог. Он попадает в /var/log/messages
    ps["sun_stop_time"] = newValue;
    sunsetForCron = string_to_time(ps["sun_stop_time"]).getMinutes()+" "+string_to_time(ps["sun_stop_time"]).getHours()+" * * *"
    //log.info("light_"+grow_box+"/Sunset start time from ps", ps["sun_stop_time"]); //Это лог. Он попадает в /var/log/messages
  }
});

defineRule("Light SetPoint change", { //название правила 
whenChanged: "light_"+grow_box+"/Light SetPoint", //при изменении уставки желаемой освещенности -запишем в хранилище
  then: function (newValue, devName, cellName) { //выполняй следующие действия
    log.info("light_"+grow_box+"/light_setpoint ", newValue); //Это лог.
    ps["light_setpoint"] = newValue;
  }
});


defineRule("cron Sunraise", { 
  when: cron(sunraiseForCron),
  then: function () {
    log.info("cron Sunraise executed! DEBUG ONLY. ");
  }
});

defineRule("cron Sunset", { 
  when: cron(sunsetForCron),
  then: function () {
    log.info("cron Sunset executed! DEBUG ONLY. ");
  }
});



function string_to_time(srcString) { 
  //log.info("string_to_time_"+grow_box, srcString)
  var datetime = new Date('1970-01-01T' + srcString + 'Z');
  //Приведем к локальному:
  datetime.setMinutes(datetime.getMinutes() + datetime.getTimezoneOffset());
  //log.info("string_to_time_"+grow_box + " Hours ", datetime.getHours());
  //log.info("string_to_time_"+grow_box+" minutes ", datetime.getMinutes());
  return datetime; 
};

Обычный JavaScript, любой веб-программист способен писать и править как угодно.
Да, кусок кода непричесан и мне за него стыдно! Допишу - будет хорошо.

Я добавлю регулятор “на сколько увеличивать мощность в единицу времени” и “единица времени”. То есть хотим - ставим 5% в минуту - и за 20 минут яркость будет до максимума, если раньше не достигнет заданной освещенности.

Да, при достижении желаемой освещенности - начинается обычное регулирование.

Это как раз желаемая освещенность. Насчет названий - обсудим как у меня стенд заработает.

Здравствуйте. Хорошо. Спасибо большое. С нетерпением жду от вас информации. Спасибо. Ещё вопрос: можно ли сделать уведомления на телефон или почту, если произойдёт какая-нибудь критическая ситуация? (к примеру низкий уровень СО2 или температура)И может быть можно этот параметр задать? спасибо