NEWS
Расчёт абсолютной влажности из относительной и обратно.
-
Приветствую всех присутствующих.
Прошу помощи у уважаемого сообщества в реализации следующей задачи.
Есть гараж.
В гараже вытяжка.
Два датчика температуры/влажности (меряют относительную влажность), установлены внутри и снаружи.
Хотелось бы управлять вытяжкой, сравнивая абсолютную влажность внутри и снаружи помещения.Для расчёта имеются следующие исходные данные:
-
javascript.0.narodmon.sensor.press.mid - атмосферное давление в мм.рт.ст., подсмотренный на форуме скрипт дергает с народмона значения двух датчиков давления, вычисляет среднее и держит его в этом объекте. Пример значения 752.8
-
mqtt.0.ESP0016E899.dhtt1 - температура внутри гаража, градусы цельсия. Пример значения 8.3
-
mqtt.0.ESP0016E899.dhth1 - относительная влажность внутри гаража, проценты. Пример значения 64.1
-
mqtt.0.ESP0016E899.shtt - температура на улице, градусы цельция.
-
mqtt.0.ESP0016E899.shth - относительная влажность на улице, проценты.
https://planetcalc.ru/2167/ - калькуляторы, которые позволяют используя данные значения считать абсолютную влажность из относительной и наоборот.
Если посмотреть исходник страницы - то там похоже на JS код.Что хотелось бы.
Получить скрипт, который раз в 15 минут- считал бы абсолютную влажность на улице используя указанные значения
- прибавлял бы к полученному значению 0.2 г/куб получая желаемую абсолютную влажность внутри гаража (получить такую же недостижимый результат, поэтому и не стараемся)
- пересчитывал полученное значение абсолютной влажности в относительную с учётом температуры внутри (округляя до целого значения)
- полученное значение желаемой относительной влажности записывал бы в объект mqtt.0.ESP0016E899.thermo_set1 (стоит ESP8266 с прошивкой WiFi-IoT, в этом объекте параметр работы термостата, вернее влагостата в данном случае.
Пример расчёта.
На улице +5.1 градуса, относительная влажность 65%, атмосферное давление 753 мм.рт.ст.
Согласно калькулятора абсолютная влажность составляет 0.00446 кг/куб
Прибавляем 0.2 г/куб, получаем 0.00466 кг/куб ЖЕЛАЕМУЮ абсолютную влажность внутри.
Температура внутри 7.6 градуса.
Согласно калькулятора желаемая относительная влажность составит 57.63704 %
Вот это значение хотелось бы округлить до 58% и записать как целевое в настройки влагостата.К сожалению я полный ноль в программировании вообще и в JS в частности
Надеюсь что кто-то, понимающий в JS найдет 10-15 минут чтобы превратить данный алгоритм в скрипт на JS.
Возможно это будет полезно ещё кому-то кроме меня.Источники вдохновения:
https://habr.com/ru/post/244135/
http://arduino.ru/forum/proekty/kontrol-vlazhnosti-podvala-arduino-pro-mini
http://forum.amperka.ru/threads/Контроль-влажности-и-температуры-в-погребе-подвале.9557/ -
-
Наткнулся случайно на свою же тему и понял что не написал в нее решение которое использую после подсказок более опытных товарищей и поиска примеров математики на 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% и восстанавливается только после нескольких дней сухой и желательно теплой погоды. - на самом деле крутятся два таких скрипта, один из которых работает на вытяжку в самом гараже а второй на отдельную вытяжку в подвале.
Ну а в остальном алгоритм показал себя вполне рабочим - вытяжка включается когда воздух снаружи суше чем внутри, отключается при ночной влажности или осадках снаружи.
В гараже/подвале стенки/потолок сухие, не потеют.