Наткнулся случайно на свою же тему и понял что не написал в нее решение которое использую после подсказок более опытных товарищей и поиска примеров математики на JS в интернете.
В общем более двух лет используется следующий скрипт:
// Выполнение скрипта каждые 15 минут
schedule('*/15 * * * *', function () {
var out_t = getState('mqtt.0.test.Garazh01.dhtt2').val; //температура с уличного датчика
// log('Температура улица = '+ out_t);
var out_h = getState('mqtt.0.test.Garazh01.dhth2').val; //влажность с уличного датчика
// log('Влажность улица = '+ out_h);
var in_t = getState('mqtt.0.test.Garazh01.dhtt1').val; //температура внутри гаража
// log('Температура гараж = '+ in_t);
var in_h = getState('mqtt.0.test.Garazh01.dhth1').val; //влажность внутри гаража
// log('Влажность гараж = '+ in_h);
var pres_hgmm = getState('javascript.0.narodmon.sensor.press.mid').val; //атмосферное давление полученное с narodmon
// log('Атмосферное давление = '+ pres_hgmm);
var Rv = 461.5; //отсюда пересчет относительной влажности в абсолютную с учётом температуры и атмосферного давления
var pres_hpa = (pres_hgmm * 133.322)/100; // атм давление в гПа
var et = 6.112*Math.exp( (17.62*out_t)/(243.12+out_t) );
var fp = 1.0016 + 3.15 * Math.pow(10,-6) * pres_hpa - 0.074/pres_hpa;
var ept = fp*et;
var var_e = (out_h/100)*ept;
var out_t_k = out_t + 273.15; //внешняя температура в К
var in_t_k = in_t + 273.15; //внутренняя температура в К
var out_h_abs = var_e*100/(Rv*out_t_k); //абсолютная влажность снаружи
// log('Абсолютная влажность улица = '+ out_h_abs);
var in_h_abs = out_h_abs+0.0004; //коррекция желаемой влажности внутри
var ew = ept*100;
var var_e1 = in_h_abs*Rv*in_t_k;
// log('Желаемая абс влажность гараж = '+ in_h_abs);
var to_in_h = Math.round((var_e1/ew)*100+1);
// log('Желаемая относ влажность гараж = '+ to_in_h);
// log('Текущая относ влажность гараж = '+ in_h);
setState('mqtt.0.test.Garazh02.thermset1',to_in_h,true); //назначение параметров термостата
})
В принципе в скрипте все достаточно подробно откомментировано, единственно пара моментов:
- в исходной задаче была корректировка относительной влажности в 0.2 г/куб но практика показала что этого маловато, пришлось поднять до 0.4 г/куб
- пока не нашел нормальных датчиков которые бы с одной стороны в уличных условиях не дохли бы а с другой стороны были совместимы с DHT22 чтобы можно было по две шт цеплять на модуль ESP8266 с прошивкой WiFi-iot
Обычные DHT22 дохнут практически сразу, поставленные им на замену AM2320 тоже не сильно лучше, после начала сезона дождей часто "залипает" влажность на 100% и восстанавливается только после нескольких дней сухой и желательно теплой погоды. - на самом деле крутятся два таких скрипта, один из которых работает на вытяжку в самом гараже а второй на отдельную вытяжку в подвале.
Ну а в остальном алгоритм показал себя вполне рабочим - вытяжка включается когда воздух снаружи суше чем внутри, отключается при ночной влажности или осадках снаружи.
В гараже/подвале стенки/потолок сухие, не потеют.