sensors/climate.yaml
#
# Bedroom climate
#
# Calibration offsets (set through Zwave configuration panel):
# Humidity: +6.0% (0+6 = 6)
# Temperature: -2.4°C (256-24 = 232 = 0xE8 -> +0x01 = 0xE801 = 59393 -> -65536 = -6143)
#
# @link https://www.tabsoverspaces.com/233657-calibrating-aeotec-multisensor-6s-temperature-using-openzwave-in-domoticz/
#
- platform: template
sensors:
bedroom_humidity_exact:
friendly_name: "Bedroom Humidity Exact"
unit_of_measurement: '%'
device_class: humidity
value_template: >-
{% if state_attr('zwave.bedroom_multisensor', 'lastResponseRTT') > 0 %}
{{ states('sensor.bedroom_multisensor_relative_humidity') | round(1) }}
{% else %}
unknown
{% endif %}
bedroom_humidity:
friendly_name: "Bedroom Humidity"
unit_of_measurement: '%'
device_class: humidity
value_template: >-
{{ states('sensor.bedroom_humidity_exact') | round }}
bedroom_luminance:
friendly_name: "Bedroom Luminance"
unit_of_measurement: 'lx'
device_class: illuminance
value_template: >-
{% if state_attr('zwave.bedroom_multisensor', 'lastResponseRTT') > 0 %}
{{ states('sensor.bedroom_multisensor_luminance') | round }}
{% else %}
unknown
{% endif %}
bedroom_luminance_friendly:
friendly_name: "Bedroom Luminance"
icon_template: "mdi:blur"
value_template: >-
{% set lx = states('sensor.bedroom_luminance') | int(-1) %}
{% if lx > 5000 %}
Outdoors
{% elif lx > 1000 %}
Bright
{% elif lx > 400 %}
Normal
{% elif lx > 10 %}
Dim
{% elif lx >= 0 %}
Dark
{% else %}
unknown
{% endif %}
bedroom_temperature_exact:
friendly_name: "Bedroom Temperature Exact"
unit_of_measurement: '°C'
device_class: temperature
value_template: >-
{% if state_attr('zwave.bedroom_multisensor', 'lastResponseRTT') > 0 %}
{{ states('sensor.bedroom_multisensor_temperature') }}
{% else %}
unknown
{% endif %}
bedroom_temperature:
friendly_name: "Bedroom Temperature"
unit_of_measurement: '°C'
device_class: temperature
value_template: >-
{{ states('sensor.bedroom_temperature_exact') | round }}
- platform: filter
name: "Bedroom Humidity Filtered"
entity_id: sensor.bedroom_humidity_exact
filters:
- filter: outlier
window_size: 4
radius: 4.0
- filter: lowpass
time_constant: 10
precision: 1
- platform: filter
name: "Bedroom Temperature Filtered"
entity_id: sensor.bedroom_temperature_exact
filters:
- filter: outlier
window_size: 4
radius: 2.0
- filter: lowpass
time_constant: 10
- filter: time_simple_moving_average
window_size: 00:05
precision: 2
#
# Humidor climate
#
# Calibration offsets:
# Humidity: -0.5%
# Temperature: 0.2°C
#
- platform: mqtt
name: "Humidor Multisensor"
state_topic: "home/Acurite_tower_sensor/11846"
unit_of_measurement: '%'
device_class: humidity
json_attributes_topic: "home/Acurite_tower_sensor/11846"
json_attributes_template: "{{ value_json | tojson }}"
value_template: >-
{% set calibration = -0.5 %}
{% set humidity = value_json.humidity %}
{% set stale_hours = 12 %}
{% set last_update = as_timestamp(value_json.time) %}
{% if as_timestamp(now()) - last_update <= stale_hours*60*60 %}
{{ humidity + calibration }}
{% else %}
unknown
{% endif %}
- platform: mqtt
name: "Humidor Temperature Exact"
state_topic: "home/Acurite_tower_sensor/11846"
unit_of_measurement: '°C'
device_class: temperature
json_attributes_topic: "home/Acurite_tower_sensor/11846"
json_attributes_template: >-
{
"temperature_C": "{{ value_json.temperature_C }}"
}
value_template: >-
{% set calibration = 0.2 %}
{% set temperature = value_json.temperature_C %}
{% set stale_hours = 12 %}
{% set last_update = as_timestamp(value_json.time) %}
{% if as_timestamp(now()) - last_update <= stale_hours*60*60 %}
{{ (temperature + calibration) | round(1) }}
{% else %}
unknown
{% endif %}
- platform: template
sensors:
humidor_humidity:
friendly_name: "Humidor Humidity"
unit_of_measurement: '%'
device_class: humidity
value_template: >-
{{ states('sensor.humidor_multisensor') | round }}
humidor_temperature:
friendly_name: "Humidor Temperature"
unit_of_measurement: '°C'
device_class: temperature
value_template: >-
{{ states('sensor.humidor_temperature_exact') | round }}
- platform: filter
name: "Humidor Humidity Filtered"
entity_id: sensor.humidor_multisensor
filters:
- filter: outlier
window_size: 4
radius: 4.0
- filter: lowpass
time_constant: 10
precision: 1
- platform: filter
name: "Humidor Temperature Filtered"
entity_id: sensor.humidor_temperature_exact
filters:
- filter: outlier
window_size: 4
radius: 2.0
- filter: lowpass
time_constant: 10
- filter: time_simple_moving_average
window_size: 00:05
precision: 2
#
# Kitchen climate
#
# Calibration offsets:
# Temperature: -0.5°C
#
# The Ecolink FireFighter smoke alarm monitor is in the kitchen, but even if
# it is a Z Wave device, is offers no configuration options trough the Z Wave
# management interface. We'll override the values here instead.
#
- platform: template
sensors:
kitchen_temperature_exact:
friendly_name: "Kitchen Temperature Exact"
unit_of_measurement: '°C'
device_class: temperature
value_template: >-
{% set calibration = -0.5 %}
{% set temperature = 'unknown' %}
{% if state_attr('zwave.siren_monitor', 'lastResponseRTT') > 0 %}
{% set temperature = states('sensor.siren_monitor_temperature') | round(1) %}
{% endif %}
{% if temperature != 'unknown' %}
{{ temperature + calibration }}
{% else %}
unknown
{% endif %}
kitchen_temperature:
friendly_name: "Kitchen Temperature"
unit_of_measurement: '°C'
device_class: temperature
value_template: >-
{{ states('sensor.kitchen_temperature_exact') | round }}
- platform: filter
name: "Kitchen Temperature Filtered"
entity_id: sensor.kitchen_temperature_exact
filters:
- filter: outlier
window_size: 4
radius: 2.0
- filter: lowpass
time_constant: 10
- filter: time_simple_moving_average
window_size: 00:05
precision: 2
#
# Lounge climate
#
# Calibration offsets (set through Zwave configuration panel):
# Humidity: +3.7% (0+4 = 4)
# Temperature: -0.8°C (256-8 = 248 = 0xF8 -> +0x01 = 0xF801 = 63489 -> -65536 = -2047)
#
# @link https://www.tabsoverspaces.com/233657-calibrating-aeotec-multisensor-6s-temperature-using-openzwave-in-domoticz/
# @link https://docs.microsoft.com/en-us/windows/desktop/sensorsapi/understanding-and-interpreting-lux-values
#
- platform: template
sensors:
lounge_humidity_exact:
friendly_name: "Lounge Humidity Exact"
unit_of_measurement: '%'
device_class: humidity
value_template: >-
{% if state_attr('zwave.lounge_multisensor', 'lastResponseRTT') > 0 %}
{{ states('sensor.lounge_multisensor_relative_humidity') }}
{% else %}
unknown
{% endif %}
lounge_humidity:
friendly_name: "Lounge Humidity"
unit_of_measurement: '%'
device_class: humidity
value_template: >-
{{ states('sensor.lounge_humidity_exact') | round }}
lounge_luminance:
friendly_name: "Lounge Luminance"
unit_of_measurement: 'lx'
device_class: illuminance
value_template: >-
{% if state_attr('zwave.lounge_multisensor', 'lastResponseRTT') > 0 %}
{{ states('sensor.lounge_multisensor_luminance') | round }}
{% else %}
unknown
{% endif %}
lounge_luminance_friendly:
friendly_name: "Lounge Luminance"
icon_template: "mdi:blur"
value_template: >-
{% set lx = states('sensor.lounge_luminance') | int(-1) %}
{% if lx > 5000 %}
Outdoors
{% elif lx > 1000 %}
Bright
{% elif lx > 400 %}
Normal
{% elif lx > 10 %}
Dim
{% elif lx >= 0 %}
Dark
{% else %}
unknown
{% endif %}
lounge_temperature_exact:
friendly_name: "Lounge Temperature Exact"
unit_of_measurement: '°C'
device_class: temperature
value_template: >-
{% if state_attr('zwave.lounge_multisensor', 'lastResponseRTT') > 0 %}
{{ states('sensor.lounge_multisensor_temperature') }}
{% else %}
unknown
{% endif %}
lounge_temperature:
friendly_name: "Lounge Temperature"
unit_of_measurement: '°C'
device_class: temperature
value_template: >-
{{ states('sensor.lounge_temperature_exact') | round }}
- platform: filter
name: "Lounge Humidity Filtered"
entity_id: sensor.lounge_humidity_exact
filters:
- filter: outlier
window_size: 4
radius: 4.0
- filter: lowpass
time_constant: 10
precision: 1
- platform: filter
name: "Lounge Temperature Filtered"
entity_id: sensor.lounge_temperature_exact
filters:
- filter: outlier
window_size: 4
radius: 2.0
- filter: lowpass
time_constant: 10
- filter: time_simple_moving_average
window_size: 00:05
precision: 2
#
# Washroom climate
#
# Calibration offsets (set through Zwave configuration panel):
# Humidity: +2.0% (0+2 = 2)
# Temperature: -1.3°C (256-13 = 243 = 0xF3 -> +0x01 = 0xF301 = 62209 -> -65536 = -3327)
#
# @link https://www.tabsoverspaces.com/233657-calibrating-aeotec-multisensor-6s-temperature-using-openzwave-in-domoticz/
#
- platform: template
sensors:
washroom_humidity_exact:
friendly_name: "Washroom Humidity Exact"
unit_of_measurement: '%'
device_class: humidity
value_template: >-
{% if state_attr('zwave.washroom_multisensor', 'lastResponseRTT') > 0 %}
{{ states('sensor.washroom_multisensor_relative_humidity') }}
{% else %}
unknown
{% endif %}
washroom_humidity:
friendly_name: "Washroom Humidity"
unit_of_measurement: '%'
device_class: humidity
value_template: >-
{{ states('sensor.washroom_humidity_exact') | round }}
washroom_luminance:
friendly_name: "Washroom Luminance"
unit_of_measurement: 'lx'
device_class: illuminance
value_template: >-
{% if state_attr('zwave.washroom_multisensor', 'lastResponseRTT') > 0 %}
{{ states('sensor.washroom_multisensor_luminance') | round }}
{% else %}
unknown
{% endif %}
washroom_luminance_friendly:
friendly_name: "Washroom Luminance"
icon_template: "mdi:blur"
value_template: >-
{% set lx = states('sensor.washroom_luminance') | int(-1) %}
{% if lx > 5000 %}
Outdoors
{% elif lx > 1000 %}
Bright
{% elif lx > 400 %}
Normal
{% elif lx > 10 %}
Dim
{% elif lx >= 0 %}
Dark
{% else %}
unknown
{% endif %}
washroom_temperature_exact:
friendly_name: "Washroom Temperature Exact"
unit_of_measurement: '°C'
device_class: temperature
value_template: >-
{% if state_attr('zwave.washroom_multisensor', 'lastResponseRTT') > 0 %}
{{ states('sensor.washroom_multisensor_temperature') }}
{% else %}
unknown
{% endif %}
washroom_temperature:
friendly_name: "Washroom Temperature"
unit_of_measurement: '°C'
device_class: temperature
value_template: >-
{{ states('sensor.washroom_temperature_exact') | round }}
- platform: filter
name: "Washroom Humidity Filtered"
entity_id: sensor.washroom_humidity_exact
filters:
- filter: outlier
window_size: 4
radius: 4.0
- filter: lowpass
time_constant: 10
precision: 1
- platform: filter
name: "Washroom Temperature Filtered"
entity_id: sensor.washroom_temperature_exact
filters:
- filter: outlier
window_size: 4
radius: 2.0
- filter: lowpass
time_constant: 10
- filter: time_simple_moving_average
window_size: 00:05
precision: 2
#
# Airthings Wave radon detector
#
# The Airthings Wave radon detector is a Bluetooth Low Energy (BLE) device.
# Instead of using its mobile app, a Raspberry Pi Zero W is setup as a Bluetooth
# to MQTT bridge allowing the device's sensors to be integrated easily.
#
# Thanks Herb Peyerl! :-)
#
# @link https://github.com/hpeyerl/airthingswave-mqtt
# @link https://airthings.com/raspberry-pi/
# @link https://airthings.com/wave/
#
- platform: mqtt
name: "Radon Daily"
state_topic: "airthings-wave/Radon-Day"
unit_of_measurement: 'Bq/m3'
icon: "mdi:radioactive"
value_template: >-
{{ value | round }}
- platform: mqtt
name: "Radon Long Term"
state_topic: "airthings-wave/Radon-Long-Term"
unit_of_measurement: 'Bq/m3'
icon: "mdi:radioactive"
value_template: >-
{{ value | round }}
- platform: mqtt
name: "Radon Detector Humidity Exact"
state_topic: "airthings-wave/Humidity"
unit_of_measurement: '%'
device_class: humidity
value_template: >-
{% set calibration = 0 %}
{% set humidity = value | float %}
{{ (humidity + calibration) | round(1) }}
- platform: mqtt
name: "Radon Detector Temperature Exact"
state_topic: "airthings-wave/Temperature"
unit_of_measurement: '°C'
device_class: temperature
value_template: >-
{% set calibration = 0 %}
{% set temperature = value | float %}
{{ (temperature + calibration) | round(1) }}
- platform: template
sensors:
radon_friendly:
friendly_name: "Radon"
icon_template: >-
{{ state_attr('sensor.radon_daily', 'icon') }}
value_template: >-
{% set radon = states('sensor.radon_daily') | int(-1) %}
{% if radon >= 200 %}
Danger
{% elif radon >= 150 %}
High
{% elif radon >= 100 %}
OK-High
{% elif radon >= 0 %}
OK
{% else %}
unknown
{% endif %}
radon_detector_humidity:
friendly_name: "Radon Detector Humidity"
unit_of_measurement: '%'
device_class: humidity
value_template: >-
{{ states('sensor.radon_detector_humidity_exact') | round }}
radon_detector_temperature:
friendly_name: "Radon Detector Temperature"
unit_of_measurement: '°C'
device_class: temperature
value_template: >-
{{ states('sensor.radon_detector_temperature_exact') | round }}
- platform: filter
name: "Radon Detector Humidity Filtered"
entity_id: sensor.radon_detector_humidity_exact
filters:
- filter: lowpass
time_constant: 10
precision: 1
- platform: filter
name: "Radon Detector Temperature Filtered"
entity_id: sensor.radon_detector_temperature_exact
filters:
- filter: lowpass
time_constant: 10
precision: 1
#
# Average temperature
#
# The appartment being mostly open plan, one can calculate an average
# temperature value between calibrated sensors set in different rooms.
#
# Uses the current reading because temperature changes are readily felt.
#
- platform: min_max
name: "Average Temperature Exact"
type: mean
round_digits: 0
entity_ids:
- sensor.bedroom_temperature_exact
- sensor.lounge_temperature_exact
- platform: template
sensors:
average_temperature:
friendly_name: "Temperature"
unit_of_measurement: '°C'
device_class: temperature
value_template: >-
{{ states('sensor.average_temperature_exact') | round }}
#
# Average humidity
#
# The appartment being mostly open plan, one can calculate an average humidity
# value between calibrated sensors set in different rooms.
#
# Uses the filtered reading because humidity hikes and drops can happen rapidly
# but their real effect is smoothed over time due to humidity absorption and
# release of furniture, fabrics and building materials.
#
- platform: min_max
name: "Average Humidity Exact"
type: mean
round_digits: 1
entity_ids:
- sensor.bedroom_humidity_filtered
- sensor.lounge_humidity_filtered
- platform: template
sensors:
average_humidity:
friendly_name: "Humidity"
unit_of_measurement: '%'
device_class: humidity
icon_template: "mdi:water-percent"
value_template: >-
{{ states('sensor.average_humidity_exact') | round }}
- platform: template
sensors:
average_humidity_friendly:
friendly_name: "Humidity"
icon_template: >-
{{ state_attr('sensor.average_humidity', 'icon') }}
value_template: >-
{% set humidity = states('sensor.average_humidity') | int(-1) %}
{% if humidity > 90 %}
Mold imminent
{% elif humidity > 70 %}
Mold alert
{% elif humidity > 55 %}
Mold warning
{% elif humidity > 50 %}
OK-High
{% elif humidity > 35 %}
OK
{% elif humidity >= 30 %}
OK-Low
{% elif humidity >= 0 %}
Too dry
{% else %}
unknown
{% endif %}
average_humidity_emoji:
friendly_name: "Humidity"
icon_template: >-
{{ state_attr('sensor.average_humidity', 'icon') }}
value_template: >-
{% set humidity = states('sensor.average_humidity') | int(-1) %}
{% if humidity > 90 %}
☣️
{% elif humidity > 70 %}
🍄
{% elif humidity > 55 %}
🧫
{% elif humidity > 50 %}
💦
{% elif humidity > 35 %}
✅
{% elif humidity >= 30 %}
🌵
{% elif humidity >= 0 %}
🏜️
{% else %}
❓
{% endif %}