renemarc/home-assistant-config

View on GitHub
sensors/security.yaml

Summary

Maintainability
Test Coverage
#
# Door status
#
# Returns a comma-separated list of doors currently open.
#
# @see /automations/notifications/door_notify.yaml
#
- platform: template
  sensors:
    door_location:
      friendly_name: "Door Open Location"
      icon_template: &door-location-icon >-
        {% if is_state('group.door_sensors', 'on') %}
          mdi:door-open
        {% else %}
          mdi:door-closed
        {% endif %}
      value_template: >-
        {% set entities = [
            states.binary_sensor.front_door_sensor,
            states.input_boolean.door_test,
          ]
        %}
        {% set value = entities | selectattr('state', 'equalto', 'on')
                                | map(attribute='name')
                                | join(',') %}
        {% set value = value | replace(" Multisensor", "") %}
        {% set value = value | replace(" Sensor", null) %}
        {% set value = value | replace(",", ", ") %}

        {{ value }}

    door_status:
      friendly_name_template: >-
        {% if is_state('group.door_sensors', 'on') %}
          Door Open
        {% else %}
          External Doors
        {% endif %}
      icon_template: *door-location-icon
      value_template: >-
        {% set value = states('sensor.door_location') %}

        {% if value != '' %}
          {{ value }}
        {% else %}
          Closed
        {% endif %}


#
# Leak detection status
#
# Returns a comma-separated list of locations where leaks are detected.
#
# @see /automations/notifications/leak_notify.yaml
#
- platform: template
  sensors:
    leak_location:
      friendly_name: "Leak Location"
      icon_template: &leak-location-icon >-
        {% if is_state('group.leak_sensors', 'on') %}
          mdi:pipe-leak
        {% else %}
          mdi:pipe
        {% endif %}
      value_template: >-
        {% set entities = [
            states.binary_sensor.kitchen_leak_sensor,
            states.binary_sensor.washroom_leak_sensor,
            states.input_boolean.leak_test,
          ]
        %}
        {% set value = entities | selectattr('state', 'equalto', 'on')
                                | map(attribute='name')
                                | join(',') %}
        {% set value = value | replace(" Sensor", null) %}
        {% set value = value | replace(",", ", ") %}

        {{ value }}

    leak_status:
      friendly_name_template: >-
        {% if is_state('group.leak_sensors', 'on') %}
          Leak Detected
        {% else %}
          Leaks
        {% endif %}
      icon_template: *leak-location-icon
      value_template: >-
        {% set value = states('sensor.leak_location') %}

        {% if value != '' %}
          {{ value }}
        {% else %}
          Clear
        {% endif %}


#
# Motion detection status
#
# Returns a comma-separated list of locations where motion is detected.
#
# @see https://community.home-assistant.io/t/jinja2-expert-help-needed/10183/26
#
- platform: template
  sensors:
    motion_location:
      friendly_name: "Motion Location"
      icon_template: &motion_location-icon >-
        {% if is_state('group.motion_sensors', 'on') %}
          mdi:run
        {% else %}
          mdi:radar
        {% endif %}
      value_template: >-
        {% set entities = [
            states.binary_sensor.bedroom_multisensor,
            states.binary_sensor.front_door_sensor,
            states.binary_sensor.kiosk_motion_auto,
            states.binary_sensor.lounge_multisensor,
            states.binary_sensor.washroom_multisensor,
            states.input_boolean.motion_test,
          ]
        %}
        {% set value = entities | selectattr('state', 'equalto', 'on')
                                | map(attribute='name')
                                | join(',') %}
        {% set value = value | replace(" Multisensor", null) %}
        {% set value = value | replace(" Sensor", null) %}
        {% set value = value | replace(" Motion", null) %}
        {% set value = value | replace(",", ", ") %}

        {{ value }}

    motion_status:
      friendly_name_template: >-
        {% if is_state('group.motion_sensors', 'on') %}
          Motion Detected
        {% else %}
          Motion
        {% endif %}
      icon_template: *motion_location-icon
      value_template: >-
        {% set value = states('sensor.motion_location') %}

        {% if value != '' %}
          {{ value }}
        {% else %}
          Clear
        {% endif %}


#
# Smoke detection status
#
# @see /automations/notifications/siren_notify.yaml
# @see /misc/binary_sensors.yaml
#
# @link https://discoverecolink.com/product/firefighter-wireless-smoke-co-audio-sensor/
#
- platform: template
  sensors:
    smoke_location:
      friendly_name: "Smoke Location"
      icon_template: "mdi:smoke-detector"
      value_template: >-
        {% set entities = [
            states.binary_sensor.siren_monitor_smoke,
            states.input_boolean.smoke_test,
          ]
        %}
        {% set value = entities | selectattr('state', 'equalto', 'on')
                                | map(attribute='name')
                                | join(',') %}
        {% set value = value | replace(" Multisensor", null) %}
        {% set value = value | replace(" Sensor", null) %}
        {% set value = value | replace(",", ", ") %}

        {{ value }}

    smoke_status:
      friendly_name_template: >-
        {% if is_state('group.smoke_sensors', 'on') %}
          Smoke detected
        {% else %}
          Smoke
        {% endif %}
      icon_template: >-
        {% if is_state('group.smoke_sensors', 'on') %}
          mdi:alarm-bell
        {% else %}
          mdi:smoke-detector
        {% endif %}
      value_template: >-
        {% set value = states('sensor.smoke_location') %}

        {% if value != '' %}
          {{ value }}
        {% else %}
          Clear
        {% endif %}


#
# Tampering status
#
# Returns a comma-separated list of perimeter devices being tampered with.
#
# @see /automations/modes/tamper_start.yaml
# @see /inputs/variables.yaml
#
- platform: template
  sensors:
    tamper_status:
      friendly_name_template: >-
        {% if is_state('input_boolean.tamper_detected', 'on') %}
          Tampering detected
        {% else %}
          Tampering
        {% endif %}
      icon_template: >-
        {% if is_state('input_boolean.tamper_detected', 'on') %}
          mdi:home-alert
        {% else %}
          mdi:shield-home
        {% endif %}
      value_template: >-
        {% set dummy = is_state('input_boolean.tamper_detected', 'on') %}

        {% if not is_state('variable.tamper_detected', 'False') %}
          {{ states('variable.tamper_detected') }}
        {% else %}
          Clear
        {% endif %}