스마트폰 (Mobile)

홈 어시스턴트 IoT 기기 센서값 최종 업데이트 시간 템플릿 구성

날으는물고기 2024. 7. 26. 00:42

Home Assistant에서 하나의 기기에 여러 센서가 있는 경우, 해당 기기의 가장 마지막 업데이트 시간을 템플릿 센서를 통해 확인할 수 있습니다. 아래 템플릿 코드를 configuration.yaml 파일에 추가하면 됩니다.

template:
  - sensor:
      - name: "Device Last Updated"
        state: >
          {% set device_entities = [
            'sensor.device_sensor_1',
            'sensor.device_sensor_2',
            'sensor.device_sensor_3',
            # 추가 센서들
          ] %}
          {% set last_updated = device_entities | map('states') | map('as_timestamp') | max %}
          {{ last_updated | timestamp_local }}

여기서 device_entities 리스트에 해당 기기의 모든 센서 엔티티 ID를 추가해줍니다. 이 템플릿은 모든 센서의 상태 업데이트 시간을 비교하여 가장 최근의 시간을 표시합니다. 이제 Home Assistant에서 sensor.device_last_updated라는 새 센서가 생성되어 해당 기기의 가장 최근 업데이트 시간을 표시하게 됩니다.

 

device* 형태의 규칙에 따라 모든 센서를 체크하려면 template 센서를 정의할 때 Jinja 템플릿 언어를 사용하여 규칙에 맞는 모든 센서를 자동으로 찾도록 해야 합니다. 이를 위해 Home Assistant의 states 객체를 활용할 수 있습니다. 아래와 같이 configuration.yaml 파일에 추가해 보세요.

template:
  - sensor:
      - name: "Device Last Updated"
        state: >
          {% set namespace = namespace(last_updated = none) %}
          {% for state in states.sensor %}
            {% if state.entity_id.startswith('sensor.device') %}
              {% if namespace.last_updated == none or state.last_updated > namespace.last_updated %}
                {% set namespace.last_updated = state.last_updated %}
              {% endif %}
            {% endif %}
          {% endfor %}
          {{ namespace.last_updated }}

이 템플릿은 다음과 같이 작동합니다.

  1. states.sensor에서 모든 센서를 순회합니다.
  2. 각 센서의 entity_idsensor.device로 시작하는지 확인합니다.
  3. 각 센서의 last_updated 속성을 비교하여 가장 최근의 업데이트 시간을 추적합니다.
  4. 가장 최근의 last_updated 값을 반환합니다.

이 템플릿 코드를 사용하면 sensor.device* 형태의 모든 센서를 자동으로 탐색하고, 가장 최근의 업데이트 시간을 sensor.device_last_updated 센서에 표시합니다.

728x90