本帖最后由 trz0332 于 2022-6-7 16:18 编辑
灵感来自
[插件集成] Thermal Comfort 热舒适度集成(含体感温度)
这个帖子。
感觉还行去看了看源代码,觉得貌似可以直接放在esphome里面,
研究了一下 将传感器温度id定义为sht20_t 湿度的id定义为sht20_h,然后将下面配置文件复制到sensor的配置里面就行了
- platform: template
name: "Heat Index"
lambda: |-
float _temperature ;
float _humidity ;
float hi ;
float fahrenheit;
_temperature = id(sht20_t).state;
_humidity = id(sht20_h).state;
fahrenheit = _temperature*9/5+32;
hi = 0.5 * (fahrenheit + 61.0 + ((fahrenheit - 68.0) * 1.2) + (_humidity * 0.094));
if (hi>79){
hi = -42.379 + 2.04901523 * fahrenheit;
hi = hi + 10.14333127 * _humidity;
hi = hi + -0.22475541 * fahrenheit * _humidity;
hi = hi + -0.00683783 * pow(fahrenheit, 2);
hi = hi + -0.05481717 * pow(_humidity, 2);
hi = hi + 0.00122874 * pow(fahrenheit, 2) * _humidity;
hi = hi + 0.00085282 * fahrenheit * pow(_humidity, 2);
hi = hi + -0.00000199 * pow(fahrenheit, 2) * pow(_humidity, 2);
}
if( _humidity < 13 and fahrenheit >= 80 and fahrenheit <= 112){
hi = hi - ((13 - _humidity) * 0.25) * sqrt((17 - abs(fahrenheit - 95)) * 0.05882);
} else if (_humidity > 85 and fahrenheit >= 80 and fahrenheit <= 87){
hi = hi + ((_humidity - 85) * 0.1) * ((87 - fahrenheit) * 0.2);
}
return 5.0/9*(hi-32);
update_interval: 30s
accuracy_decimals: 1
unit_of_measurement: °C
- platform: template
name: "DewPoint"
id: dp1
lambda: |-
float _temperature ;
float _humidity ;
float A0 ;
float SUM;
float VP ;
float Td;
_temperature = id(sht20_t).state;
_humidity = id(sht20_h).state;
A0 = 373.15 / (273.15 + _temperature);
SUM = -7.90298 * (A0 - 1);
SUM += 5.02808 * log10(A0);
SUM += -1.3816e-7 * (pow(10, (11.344 * (1 - 1 / A0))) - 1);
SUM += 8.1328e-3 * (pow(10, (-3.49149 * (A0 - 1))) - 1);
SUM += log10(1013.246);
VP = pow(10, SUM - 3) * _humidity;
Td = log(VP / 0.61078);
Td = (241.88 * Td) / (17.558 - Td);
return Td;
update_interval: 30s
accuracy_decimals: 1
unit_of_measurement: °C
- platform: template
name: "absolute_humidity"
lambda: |-
float _temperature ;
float _humidity ;
float abs_temperature ;
float abs_humidity;
_temperature = id(sht20_t).state;
_humidity = id(sht20_h).state;
abs_temperature = _temperature + 273.15;
abs_humidity = 6.112;
abs_humidity *= exp((17.67 * _temperature) / (243.5 + _temperature));
abs_humidity *= _humidity;
abs_humidity *= 2.1674;
abs_humidity /= abs_temperature;
return abs_humidity;
update_interval: 30s
accuracy_decimals: 1
unit_of_measurement: g/m³
- platform: template
name: "simmer_index"
id: Si
lambda: |-
float _temperature ;
float _humidity ;
float si ;
float fahrenheit;
_temperature = id(sht20_t).state;
_humidity = id(sht20_h).state;
fahrenheit = _temperature*9/5+32;
si = (1.98* (fahrenheit - (0.55 - (0.0055 * _humidity)) * (fahrenheit - 58.0))- 56.83);
if (fahrenheit < 70){
si = fahrenheit;
}
return 5.0/9*(si-32);
update_interval: 30s
accuracy_decimals: 1
unit_of_measurement: °C
|