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% и восстанавливается только после нескольких дней сухой и желательно теплой погоды. - на самом деле крутятся два таких скрипта, один из которых работает на вытяжку в самом гараже а второй на отдельную вытяжку в подвале.
Ну а в остальном алгоритм показал себя вполне рабочим - вытяжка включается когда воздух снаружи суше чем внутри, отключается при ночной влажности или осадках снаружи.
В гараже/подвале стенки/потолок сухие, не потеют.
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login