//light_conversion.js
var sensor_light = "wb-ms_41/Illuminance"; // CHANGE_ME! устройство-датчик освещенности
defineVirtualDevice("light_conversion", {
title: "conversion",
cells: {
light_as_is: {
type: "text",
value: ""
},
light_converted: {
type: "text",
value: ""
},
},
});
defineRule("convert", { //название правила
whenChanged: sensor_light, //при изменении состояния
then: function (newValue, devName, cellName) { //выполняй следующие действия
newValue = Number(newValue); //Приведем к числу
dev["light_conversion/light_as_is"] = newValue.toString(); //выведем "как есть" приведя к строке
dev["light_conversion/light_converted"] = ((newValue+400)*1.6).toString();//выведем преобразованное как угодно. И выводим приведя к строке
}
});
Но освещенность уже в люксах. Нужен поправочный коэффициент? Его проще стразу в основном скрипте указывать, чтоб не помнить потом где оригинальный а где с поправкой.
Мы измеряем в микромолях на метр (или ещё куча других параметром освещённости). Суть в том, что чтобы перевести из люксов в ту величину, которая нам нужна, надо к значению освещённости в люксах прибавить ещё какую-то величину (60 с небольшим). Если это можно изменить, прибавив это поправочное число в основном скрипте, то подскажите пожалуйста, как это сделать? спасибо
defineRule("sensor_light change", { //название правила
whenChanged: sensor_light, //При изменении измеренной освещенности - установим значения виртуального устройства.
then: function (newValue, devName, cellName) { //выполняй следующие действия
newValue = Number(newValue); //Приведем к числу
newValue = newValue+60; //Меняем уровень на коэффициент (прибавляем 60)
dev["light_"+grow_box]["Light_measured"] = newValue.toString(); //Записываем в виртуальное устройство
if ((dev["light_"+grow_box]["sunraiseProcess"]==true)||(dev["light_"+grow_box]["dayProcess"]==true)||(dev["light_"+grow_box]["sunsetProcess"]==true)){// если сейчас нужен свет
if (newValue>setPointLight) { // Если текущая освещенность больше уставки
//log.info("light_"+grow_box+"Light_measured BIG",newValue);
if (dev[dimmer_light]>dimmer_zeroValue){
dev[dimmer_light] -= dimmer_increment;
}
} else{ // если меньше
//log.info("light_"+grow_box+"Light_measured LOW",newValue);
if (dev[dimmer_light]<dimmer_maxValue){
dev[dimmer_light] += dimmer_increment;
}
}
dev["light_"+grow_box+"/Lamp power set"] = dev[dimmer_light];
}
}
});
Промежуточные итоги такие: рассвет есть, закат есть поддержание освещённости есть. показатели с датчиков отладим по ходу дела, когда всё повесим. Это не проблема. Всё работает и это очень хорошо. Спасибо огромное за помощь. Единственная проблема, на данный момент- это когда закат заканчивается и на управляющие провода драйвера не подаётся напряжение, то светильники светят на 10% и не выключаются полностью. Вот обдумываем решение проблемы
По графику он должен регулироваться с 0. Может быть на выходе остаётся напряжение?
Вот это “нижний” порог диммера. На тот случай если диммирование начинается не с “0”. У вас какое значение там сейчас?
Я отлаживал на MDM, вам имеет смысл сделать “5” например. И какое напряжение на выходе модуля остается?
Надо померить мультиметром при подключенном к выходу модуля светильнике и при отключенном.
Если вход светильника подтягивается к напряжению (при отключении от выхода - светильник загорается) и проблема аппаратная - то возможно решением будет поставить резистор (подобрать, но не меньше 2 Ком!) от выхода модуля к GND.
И проверьте чтоб земля управляющего входа светильника точно и хорошо соединялась с землей контроллера.
Есть документация на используемый диммер?
По итогу в скрипте стоит 0. Напряжение остаётся, после заката, 0,66В. Возможно это конденсаторы. при замыкании управляющих проводов светильник тухнет. Скорее всего надо, как вы и сказали, резистор. Крутил диммер. Не тухнет. Попробуем в пн резистор. Любой не менее 2Ком?
По идее резистор нам частично “обрежет” максимальную яркость. Это не есть хорошо. Я откинул концы: выход из модуля контроллера=0. Если контакты не замкнуты, то яркость максимальная. Может быть есть вариант с каким-то реле, чтобы не потерять в яркости? Или может быть можно чуть поднять выход с модуля выше 10в?
Значит внутри самого диммера вход подтягивается к питанию.Так в норме де должно быть, собственно.
Нет, резистор не должен повлиять. Модуль все равно выдаст на выходе 10V. Но попробуйте - замкните резистором входы диммер. Если совсем потухнет - хорошо, поможет. Если нет - тогда уже подумаем про реле.
Попробовал параллельно подключить резистор. Сильно падает яркость светильника и очень не корректно работает автоматика. Не выходит на заданное значение за выставленное время. У нас ещё есть 4 свободных аналоговых выхода. Можем задействовать их для подачи напряжения, к примеру, на реле
А какой номинал у резистора?
Попробовал 2.7 Ком - просаживает на вольт. Должно компенсироваться внутренней подтяжкой диммера.
С выхода модуля на землю (Ignd) модуля?
Да, но выходы напряжения, они не потянут реле.
Если хотите использовать подобную схему - то можно использовать клеммы А1-А4 самого контроллера. Реле (“обмотку”) -подключать между выводом “Vout” и А1-4.
Вообще если используете нестандартные диммеры - может быть использовать другой модуль? MAO4 умеет как PWM(ШИМ) так и аналоговый 0-10В выходы.
Сейчас хотелось бы эффективно решить проблему именно этого стеллажа. В дальнейшем да, можно использовать другой модуль и реле. Пока что других идей у меня нет. Если у вас есть идеи, то с радостью их попробую
если закоротить управляющие провода резистором 2.2Ком, то яркость снижается сильно, но не гаснет. Если подключить параллельно к модулю с проводами, то гаснет, но предельная яркость сильно ниже. При этом при сценарии рассвет срабатывает очень странно. То есть за заданное время освещённость не выходит на заданную
А как это может помочь? не просядет напряжение ещё сильнее?