홈 어시스턴트 특정 센서의 일일 사용시간 집계하는 템플릿 정의 방법
Home Assistant에서 특정 앱의 일일 사용 시간을 계산하기 위해서는 두 가지 센서의 정보를 활용할 수 있습니다. 이를 템플릿 센서를 사용하여 구현할 수 있습니다. 아래는 예제 템플릿 코드입니다.
1. 프리퀴지 센서 정의
온/오프 상태와 현재 실행 중인 앱 정보를 수집하는 센서를 정의합니다. 이 예제에서는 binary_sensor.phone_on
및 sensor.current_app
이라는 이름의 센서를 사용한다고 가정하겠습니다.
binary_sensor:
- platform: mqtt
name: "Phone On/Off Sensor"
state_topic: "home/phone/state"
payload_on: "ON"
payload_off: "OFF"
sensor:
- platform: mqtt
name: "Current App Sensor"
state_topic: "home/phone/current_app"
2. 앱별 사용 시간 추적
템플릿 센서를 사용하여 특정 앱의 사용 시간을 추적합니다. 이 예제에서는 app_usage_time
이라는 템플릿 센서를 생성하여 하루 동안 각 앱의 사용 시간을 계산합니다.
sensor:
- platform: template
sensors:
app_usage_time:
friendly_name: "App Usage Time"
unit_of_measurement: "minutes"
value_template: >
{% set phone_on = is_state('binary_sensor.phone_on', 'on') %}
{% set current_app = states('sensor.current_app') %}
{% set usage_time = namespace(apps={}) %}
{% if phone_on and current_app != 'unknown' %}
{% if usage_time.apps[current_app] is defined %}
{% set usage_time.apps = usage_time.apps | merge({ current_app: usage_time.apps[current_app] + 1 }) %}
{% else %}
{% set usage_time.apps = usage_time.apps | merge({ current_app: 1 }) %}
{% endif %}
{% endif %}
{% for app, time in usage_time.apps.items() %}
{{ app }}: {{ time }} minutes
{% endfor %}
이 템플릿은 현재 실행 중인 앱을 확인하고, 핸드폰이 켜져 있는 동안 매 분마다 실행 시간을 증가시킵니다. 최종적으로 앱별 사용 시간을 분 단위로 출력합니다.
3. 오토메이션 설정
위 템플릿 센서가 1분마다 업데이트되도록 자동화 설정을 추가합니다.
automation:
- alias: Update App Usage Time
trigger:
- platform: time_pattern
minutes: "/1"
action:
- service: homeassistant.update_entity
entity_id: sensor.app_usage_time
앱별 사용 시간은 sensor.app_usage_time
센서에서 확인할 수 있습니다. 이 템플릿은 각 앱의 사용 시간을 추적하고 이를 분 단위로 계산합니다. 실제 환경에서는 MQTT 주제나 다른 상태 업데이트 방법을 사용하여 센서를 정확히 구성해야 합니다. 이를 통해 하루 동안 각 앱의 사용 시간을 모니터링하고 분석할 수 있습니다.
앱별 사용 시간을 센서의 속성으로 기록하고, 전체 사용 시간을 센서의 상태로 기록하기 위해 Home Assistant의 템플릿 센서를 활용할 수 있습니다. 이를 위해 앱별 사용 시간을 속성으로 저장하고, 전체 사용 시간을 센서의 상태로 저장하는 템플릿 센서를 작성할 수 있습니다.
아래는 이를 구현하기 위한 YAML 예제 코드입니다.
1. 센서 정의
sensor:
- platform: template
sensors:
app_usage:
friendly_name: "App Usage"
unit_of_measurement: "minutes"
value_template: >
{% set phone_on = is_state('binary_sensor.phone_on', 'on') %}
{% set current_app = states('sensor.current_app') %}
{% set total_time = 0 %}
{% set apps = states.sensor.app_usage.attributes.apps | default(dict()) %}
{% if phone_on and current_app != 'unknown' %}
{% if current_app in apps %}
{% set apps = apps | merge({current_app: apps[current_app] + 1}) %}
{% else %}
{% set apps = apps | merge({current_app: 1}) %}
{% endif %}
{% endif %}
{% for app, time in apps.items() %}
{% set total_time = total_time + time %}
{% endfor %}
{{ total_time }}
attribute_templates:
apps: >
{% set phone_on = is_state('binary_sensor.phone_on', 'on') %}
{% set current_app = states('sensor.current_app') %}
{% set apps = states.sensor.app_usage.attributes.apps | default(dict()) %}
{% if phone_on and current_app != 'unknown' %}
{% if current_app in apps %}
{% set apps = apps | merge({current_app: apps[current_app] + 1}) %}
{% else %}
{% set apps = apps | merge({current_app: 1}) %}
{% endif %}
{% endif %}
{{ apps }}
2. 오토메이션 설정
이 템플릿 센서가 1분마다 업데이트되도록 자동화 설정을 추가합니다.
automation:
- alias: Update App Usage
trigger:
- platform: time_pattern
minutes: "/1"
action:
- service: homeassistant.update_entity
entity_id: sensor.app_usage
value_template
: 핸드폰이 켜져 있고 (binary_sensor.phone_on
이on
상태), 현재 실행 중인 앱 (sensor.current_app
)이 알려진 경우, 각 앱의 사용 시간을 1분씩 증가시킵니다. 총 사용 시간은 모든 앱 사용 시간을 합산하여 계산됩니다.attribute_templates
apps
: 현재 실행 중인 앱의 사용 시간을 속성으로 저장합니다. 각 앱의 이름을 키로 하고, 사용 시간을 값으로 저장합니다.
앱별 사용 시간은 sensor.app_usage
센서의 속성 (attributes
)에서 확인할 수 있으며, 전체 사용 시간은 센서의 상태 (state
)에서 확인할 수 있습니다. 이 설정은 1분마다 업데이트되며, 핸드폰이 켜져 있을 때 현재 실행 중인 앱의 사용 시간을 추적합니다.
템플릿 센서는 Home Assistant가 상태를 자동으로 업데이트하도록 설정되어 있습니다. 그러나 추가적인 오토메이션을 통해 업데이트 빈도를 더 명확히 하거나 특정 조건에서 업데이트를 강제할 수 있습니다. 이 예제에서는 템플릿 센서가 자동으로 업데이트되도록 설정하고, 앱별 사용 시간을 속성으로 저장하고 전체 사용 시간을 상태로 저장하는 방법을 설명합니다.
템플릿 센서 정의
sensor:
- platform: template
sensors:
app_usage:
friendly_name: "App Usage"
unit_of_measurement: "minutes"
value_template: >
{% set phone_on = is_state('binary_sensor.phone_on', 'on') %}
{% set current_app = states('sensor.current_app') %}
{% set apps = states.sensor.app_usage.attributes.apps | default(dict()) %}
{% set total_time = 0 %}
{% if phone_on and current_app != 'unknown' %}
{% if current_app in apps %}
{% set apps = apps | merge({current_app: apps[current_app] + 1}) %}
{% else %}
{% set apps = apps | merge({current_app: 1}) %}
{% endif %}
{% endif %}
{% for app, time in apps.items() %}
{% set total_time = total_time + time %}
{% endfor %}
{{ total_time }}
attribute_templates:
apps: >
{% set phone_on = is_state('binary_sensor.phone_on', 'on') %}
{% set current_app = states('sensor.current_app') %}
{% set apps = states.sensor.app_usage.attributes.apps | default(dict()) %}
{% if phone_on and current_app != 'unknown' %}
{% if current_app in apps %}
{% set apps = apps | merge({current_app: apps[current_app] + 1}) %}
{% else %}
{% set apps = apps | merge({current_app: 1}) %}
{% endif %}
{% endif %}
{{ apps }}
value_template
: 현재 실행 중인 앱을 확인하고, 핸드폰이 켜져 있는 동안 각 앱의 사용 시간을 1분씩 증가시킵니다. 모든 앱의 사용 시간을 합산하여 전체 사용 시간을 계산합니다.attribute_templates
apps
: 각 앱의 사용 시간을 속성으로 저장합니다. 앱 이름을 키로 하고 사용 시간을 값으로 저장합니다.
템플릿 센서는 기본적으로 상태가 변경될 때마다 자동으로 업데이트됩니다. 그러나 필요에 따라 특정 주기로 업데이트하도록 자동화를 추가할 수 있습니다.
automation:
- alias: Force Update App Usage
trigger:
- platform: time_pattern
minutes: "/1"
action:
- service: homeassistant.update_entity
entity_id: sensor.app_usage
이 자동화는 매 분마다 sensor.app_usage
센서를 업데이트합니다.
- 전체 사용 시간:
sensor.app_usage
센서의 상태에서 확인할 수 있습니다. - 앱별 사용 시간:
sensor.app_usage
센서의 속성(attributes
)에서 확인할 수 있습니다.
이 설정을 통해 하루 동안 사용한 앱별 사용 시간을 추적하고, 이를 Home Assistant에서 모니터링할 수 있습니다.
하루 동안의 앱별 사용 시간을 특정 시점에 계산하여 표시하는 템플릿 센서를 만들기 위해서는, 하루 동안의 데이터를 수집한 후 특정 시점에 결과를 업데이트하는 방식으로 설정할 수 있습니다. 이를 위해서는 앱 사용 시간을 기록하는 별도의 센서와, 하루 동안의 데이터를 집계하여 특정 시점에 결과를 업데이트하는 템플릿 센서가 필요합니다.
1. 앱 사용 시간 기록을 위한 스크립트 및 헬퍼 센서 정의
input_text:
app_usage_data:
name: App Usage Data
initial: '{}'
script:
update_app_usage:
sequence:
- service: input_text.set_value
data:
entity_id: input_text.app_usage_data
value: >
{% set phone_on = is_state('binary_sensor.phone_on', 'on') %}
{% set current_app = states('sensor.current_app') %}
{% set apps = states('input_text.app_usage_data') | from_json | default({}) %}
{% if phone_on and current_app != 'unknown' %}
{% if current_app in apps %}
{% set apps = apps | merge({current_app: apps[current_app] + 1}) %}
{% else %}
{% set apps = apps | merge({current_app: 1}) %}
{% endif %}
{% endif %}
{{ apps | to_json }}
2. 매 분마다 스크립트를 실행하여 데이터를 업데이트하는 자동화
automation:
- alias: Update App Usage Data
trigger:
- platform: time_pattern
minutes: "/1"
action:
- service: script.update_app_usage
3. 하루 동안의 사용 시간을 집계하여 특정 시점에 템플릿 센서에 업데이트하는 템플릿 센서 정의
sensor:
- platform: template
sensors:
daily_app_usage:
friendly_name: "Daily App Usage"
unit_of_measurement: "minutes"
value_template: >
{% set apps = states('input_text.app_usage_data') | from_json %}
{% set total_time = 0 %}
{% for app, time in apps.items() %}
{% set total_time = total_time + time %}
{% endfor %}
{{ total_time }}
attribute_templates:
apps: >
{{ states('input_text.app_usage_data') }}
4. 매일 자정에 결과를 업데이트하고 데이터를 초기화하는 자동화
automation:
- alias: Update Daily App Usage
trigger:
- platform: time
at: '00:00:00'
action:
- service: homeassistant.update_entity
entity_id: sensor.daily_app_usage
- service: input_text.set_value
data:
entity_id: input_text.app_usage_data
value: '{}'
input_text.app_usage_data
: JSON 형식으로 앱별 사용 시간을 저장하는 헬퍼 센서입니다.script.update_app_usage
: 현재 실행 중인 앱의 사용 시간을 업데이트하는 스크립트입니다.automation.Update App Usage Data
: 매 분마다 실행되어script.update_app_usage
를 호출하여 데이터를 업데이트합니다.sensor.daily_app_usage
: 하루 동안의 총 사용 시간과 앱별 사용 시간을 템플릿 센서의 상태와 속성으로 계산합니다.automation.Update Daily App Usage
: 매일 자정에sensor.daily_app_usage
를 업데이트하고,input_text.app_usage_data
를 초기화하여 다음 날의 데이터를 기록할 준비를 합니다.
이 설정을 통해 하루 동안의 앱별 사용 시간을 기록하고, 매일 자정에 하루 동안의 사용 시간을 집계하여 템플릿 센서에 업데이트할 수 있습니다.
Home Assistant에서 특정 시점에 하루 동안의 앱별 사용 시간을 계산하기 위해 히스토리 값을 이용하는 방법을 설명드리겠습니다. 이 방법에서는 history_stats
통합을 사용하여 특정 시간 동안의 센서 상태를 추적하고, 템플릿 센서를 사용하여 결과를 집계합니다.
1. 앱별 사용 시간 추적을 위한 history_stats 센서 정의
각 앱의 사용 시간을 추적하기 위해 history_stats
센서를 정의합니다. 여기서는 예시로 "App1"과 "App2" 두 개의 앱을 사용합니다.
sensor:
- platform: history_stats
name: App1 Usage Today
entity_id: sensor.current_app
state: 'app1'
type: time
start: '{{ now().replace(hour=0, minute=0, second=0) }}'
end: '{{ now() }}'
- platform: history_stats
name: App2 Usage Today
entity_id: sensor.current_app
state: 'app2'
type: time
start: '{{ now().replace(hour=0, minute=0, second=0) }}'
end: '{{ now() }}'
2. 하루 동안의 총 사용 시간을 집계하기 위한 템플릿 센서 정의
이제 각 앱의 사용 시간을 더하여 하루 동안의 총 사용 시간을 계산하는 템플릿 센서를 정의합니다.
sensor:
- platform: template
sensors:
daily_app_usage:
friendly_name: "Daily App Usage"
unit_of_measurement: "minutes"
value_template: >
{% set app1_usage = states('sensor.app1_usage_today') | float %}
{% set app2_usage = states('sensor.app2_usage_today') | float %}
{{ (app1_usage + app2_usage) * 60 | round(0) }}
attribute_templates:
app1_usage: >
{{ (states('sensor.app1_usage_today') | float * 60) | round(0) }}
app2_usage: >
{{ (states('sensor.app2_usage_today') | float * 60) | round(0) }}
템플릿 센서는 상태가 변경될 때마다 자동으로 업데이트되지만, 특정 시간에 결과를 확인하고 싶다면 자동화를 추가할 수 있습니다.
automation:
- alias: Update Daily App Usage
trigger:
- platform: time
at: '23:59:59'
action:
- service: homeassistant.update_entity
entity_id: sensor.daily_app_usage
history_stats
센서: 특정 앱이 하루 동안 사용된 시간을 추적합니다. 이 예제에서는sensor.current_app
센서의 상태가 "app1" 또는 "app2"일 때의 사용 시간을 계산합니다.sensor.daily_app_usage
:history_stats
센서의 값을 합산하여 하루 동안의 총 사용 시간을 계산하고, 각 앱의 사용 시간을 속성으로 저장합니다.- 자동화: 하루의 끝에
sensor.daily_app_usage
를 업데이트하여 최종 결과를 확인할 수 있습니다.
이 설정을 통해 히스토리 데이터를 활용하여 하루 동안의 앱별 사용 시간을 추적하고, 특정 시점에 결과를 계산할 수 있습니다. history_stats
통합은 자동으로 과거 데이터를 분석하므로, 별도의 데이터 초기화가 필요하지 않습니다.
모든 앱에 대해 사용 시간을 산출하도록 설정하고, 스위치가 on
상태일 때만 실행 중인 앱 센서의 값을 기반으로 사용 시간을 계산하는 방법을 설명드리겠습니다. 이 작업을 위해 Home Assistant의 템플릿 센서와 history_stats
통합을 조합하여 구현할 수 있습니다.
1. 앱 사용 시간 기록을 위한 history_stats 센서 정의
앱의 사용 시간을 동적으로 추적하기 위해서는 미리 정의된 앱 리스트를 사용하지 않고, 현재 실행 중인 앱에 따라 동적으로 history_stats
센서를 생성하는 방법이 필요합니다. 하지만 Home Assistant의 기본 기능으로는 동적으로 센서를 생성할 수 없습니다. 따라서 여기서는 스크립트를 사용해 데이터를 수집하고, 이를 템플릿 센서로 활용하는 방식으로 해결하겠습니다.
2. 스위치가 on 상태일 때 실행 중인 앱을 기록하는 스크립트 및 헬퍼 센서 정의
input_text:
app_usage_data:
name: App Usage Data
initial: '{}'
script:
update_app_usage:
sequence:
- condition: state
entity_id: switch.phone_tracking
state: 'on'
- service: input_text.set_value
data:
entity_id: input_text.app_usage_data
value: >
{% set phone_on = is_state('switch.phone_tracking', 'on') %}
{% set current_app = states('sensor.current_app') %}
{% set apps = states('input_text.app_usage_data') | from_json | default({}) %}
{% if phone_on and current_app != 'unknown' %}
{% if current_app in apps %}
{% set apps = apps | merge({current_app: apps[current_app] + 1}) %}
{% else %}
{% set apps = apps | merge({current_app: 1}) %}
{% endif %}
{% endif %}
{{ apps | to_json }}
3. 매 분마다 스크립트를 실행하여 데이터를 업데이트하는 자동화
automation:
- alias: Update App Usage Data
trigger:
- platform: time_pattern
minutes: "/1"
action:
- service: script.update_app_usage
4. 하루 동안의 사용 시간을 집계하여 특정 시점에 템플릿 센서에 업데이트하는 템플릿 센서 정의
sensor:
- platform: template
sensors:
daily_app_usage:
friendly_name: "Daily App Usage"
unit_of_measurement: "minutes"
value_template: >
{% set apps = states('input_text.app_usage_data') | from_json %}
{% set total_time = 0 %}
{% for app, time in apps.items() %}
{% set total_time = total_time + time %}
{% endfor %}
{{ total_time }}
attribute_templates:
apps: >
{% set apps = states('input_text.app_usage_data') | from_json %}
{{ apps }}
5. 매일 자정에 결과를 업데이트하고 데이터를 초기화하는 자동화
automation:
- alias: Update Daily App Usage
trigger:
- platform: time
at: '00:00:00'
action:
- service: homeassistant.update_entity
entity_id: sensor.daily_app_usage
- service: input_text.set_value
data:
entity_id: input_text.app_usage_data
value: '{}'
input_text.app_usage_data
: JSON 형식으로 앱별 사용 시간을 저장하는 헬퍼 센서입니다.script.update_app_usage
: 스위치가on
상태일 때 현재 실행 중인 앱의 사용 시간을 업데이트하는 스크립트입니다.automation.Update App Usage Data
: 매 분마다 실행되어script.update_app_usage
를 호출하여 데이터를 업데이트합니다.sensor.daily_app_usage
: 하루 동안의 총 사용 시간과 앱별 사용 시간을 템플릿 센서의 상태와 속성으로 계산합니다.automation.Update Daily App Usage
: 매일 자정에sensor.daily_app_usage
를 업데이트하고,input_text.app_usage_data
를 초기화하여 다음 날의 데이터를 기록할 준비를 합니다.
이 설정을 통해 다양한 앱에 대해 사용 시간을 기록하고, 스위치가 on
상태일 때만 실행 중인 앱의 사용 시간을 추적할 수 있습니다. 하루의 끝에 결과를 집계하고 초기화하여 다음 날의 데이터를 수집할 수 있도록 합니다.
실제 앱 사용 시간을 계산하기 위해, 앱 상태값이 변경될 때마다 시간을 기록하고 사용 시간을 계산하는 방식으로 구현할 수 있습니다.
- 앱 상태가 변경될 때마다 타임스탬프를 기록합니다.
- 이전 타임스탬프와 현재 타임스탬프를 비교하여 실제 사용 시간을 계산합니다.
- 하루 동안의 사용 시간을 집계합니다.
1. 타임스탬프와 사용 시간을 기록할 헬퍼 센서 정의
input_text:
app_usage_data:
name: App Usage Data
initial: '{}'
last_app_change:
name: Last App Change Time
initial: ''
last_app:
name: Last App
initial: ''
2. 앱 상태가 변경될 때마다 타임스탬프를 기록하고 사용 시간을 계산하는 스크립트
script:
update_app_usage:
sequence:
- condition: state
entity_id: switch.phone_tracking
state: 'on'
- service: input_text.set_value
data_template:
entity_id: input_text.last_app_change
value: "{{ now() }}"
- service: input_text.set_value
data_template:
entity_id: input_text.last_app
value: "{{ states('sensor.current_app') }}"
- service: input_text.set_value
data_template:
entity_id: input_text.app_usage_data
value: >
{% set phone_on = is_state('switch.phone_tracking', 'on') %}
{% set current_app = states('sensor.current_app') %}
{% set last_app = states('input_text.last_app') %}
{% set last_change = states('input_text.last_app_change') %}
{% set apps = states('input_text.app_usage_data') | from_json | default({}) %}
{% if phone_on and last_app != '' and current_app != last_app %}
{% set time_diff = (as_timestamp(now()) - as_timestamp(last_change)) / 60 %}
{% if last_app in apps %}
{% set apps = apps | merge({last_app: apps[last_app] + time_diff}) %}
{% else %}
{% set apps = apps | merge({last_app: time_diff}) %}
{% endif %}
{% endif %}
{{ apps | to_json }}
3. 앱 상태 변경을 감지하여 스크립트를 실행하는 자동화
automation:
- alias: Update App Usage on Change
trigger:
- platform: state
entity_id: sensor.current_app
action:
- service: script.update_app_usage
4. 하루 동안의 사용 시간을 집계하여 특정 시점에 템플릿 센서에 업데이트하는 템플릿 센서 정의
sensor:
- platform: template
sensors:
daily_app_usage:
friendly_name: "Daily App Usage"
unit_of_measurement: "minutes"
value_template: >
{% set apps = states('input_text.app_usage_data') | from_json %}
{% set total_time = 0 %}
{% for app, time in apps.items() %}
{% set total_time = total_time + time %}
{% endfor %}
{{ total_time | round(2) }}
attribute_templates:
apps: >
{% set apps = states('input_text.app_usage_data') | from_json %}
{{ apps }}
5. 매일 자정에 결과를 업데이트하고 데이터를 초기화하는 자동화
automation:
- alias: Reset Daily App Usage
trigger:
- platform: time
at: '00:00:00'
action:
- service: homeassistant.update_entity
entity_id: sensor.daily_app_usage
- service: input_text.set_value
data:
entity_id: input_text.app_usage_data
value: '{}'
- service: input_text.set_value
data:
entity_id: input_text.last_app_change
value: ''
- service: input_text.set_value
data:
entity_id: input_text.last_app
value: ''
input_text
센서: 앱 사용 데이터를 JSON 형식으로 저장하며,last_app_change
와last_app
을 사용하여 마지막 앱 상태 변경 시점을 기록합니다.script.update_app_usage
: 스위치가on
상태일 때, 앱 상태가 변경되면 현재 시간을 기록하고 사용 시간을 계산하여 저장합니다.automation.Update App Usage on Change
:sensor.current_app
의 상태가 변경될 때마다 스크립트를 실행합니다.sensor.daily_app_usage
: 하루 동안의 총 사용 시간과 앱별 사용 시간을 템플릿 센서의 상태와 속성으로 계산합니다.automation.Reset Daily App Usage
: 매일 자정에sensor.daily_app_usage
를 업데이트하고, 헬퍼 센서들을 초기화합니다.
이 설정을 통해 실제 사용 시간을 계산하고, 앱 상태가 변경될 때마다 시간을 기록하여 하루 동안의 앱별 사용 시간을 정확히 추적할 수 있습니다.
스위치와 실행 중인 앱 정보 센서의 값이 변경될 때마다 트리거가 되고, 이를 통해 사용 시간을 산출하는 방식으로 설정을 변경하겠습니다. 이를 위해 두 센서의 값이 변경될 때마다 시간을 기록하고, 사용 시간을 계산하여 누적하는 방법을 사용합니다.
1. 헬퍼 센서 정의
앱 사용 시간과 관련된 데이터를 저장할 헬퍼 센서를 정의합니다.
input_text:
app_usage_data:
name: App Usage Data
initial: '{}'
input_datetime:
last_change_time:
name: Last Change Time
has_date: true
has_time: true
input_text:
last_app:
name: Last App
initial: ''
2. 스크립트 정의
앱 상태가 변경될 때마다 시간을 기록하고 사용 시간을 계산하는 스크립트를 정의합니다.
script:
update_app_usage:
sequence:
- condition: state
entity_id: switch.phone_tracking
state: 'on'
- service: input_datetime.set_datetime
data:
entity_id: input_datetime.last_change_time
datetime: "{{ now().isoformat() }}"
- service: input_text.set_value
data_template:
entity_id: input_text.last_app
value: "{{ states('sensor.current_app') }}"
- service: input_text.set_value
data_template:
entity_id: input_text.app_usage_data
value: >
{% set phone_on = is_state('switch.phone_tracking', 'on') %}
{% set current_app = states('sensor.current_app') %}
{% set last_app = states('input_text.last_app') %}
{% set last_change = states('input_datetime.last_change_time') %}
{% set apps = states('input_text.app_usage_data') | from_json | default({}) %}
{% if phone_on and last_app != '' and current_app != last_app %}
{% set time_diff = (as_timestamp(now()) - as_timestamp(last_change)) / 60 %}
{% if last_app in apps %}
{% set apps = apps | merge({last_app: apps[last_app] + time_diff}) %}
{% else %}
{% set apps = apps | merge({last_app: time_diff}) %}
{% endif %}
{% endif %}
{{ apps | to_json }}
3. 자동화 설정
스위치와 앱 상태가 변경될 때마다 스크립트를 실행하도록 자동화를 설정합니다.
automation:
- alias: Update App Usage on Change
trigger:
- platform: state
entity_id: sensor.current_app
- platform: state
entity_id: switch.phone_tracking
action:
- service: script.update_app_usage
4. 하루 동안의 사용 시간을 집계하는 템플릿 센서 정의
하루 동안의 총 사용 시간과 앱별 사용 시간을 집계하는 템플릿 센서를 정의합니다.
sensor:
- platform: template
sensors:
daily_app_usage:
friendly_name: "Daily App Usage"
unit_of_measurement: "minutes"
value_template: >
{% set apps = states('input_text.app_usage_data') | from_json %}
{% set total_time = 0 %}
{% for app, time in apps.items() %}
{% set total_time = total_time + time %}
{% endfor %}
{{ total_time | round(2) }}
attribute_templates:
apps: >
{% set apps = states('input_text.app_usage_data') | from_json %}
{{ apps }}
5. 매일 자정에 결과를 업데이트하고 데이터를 초기화하는 자동화
매일 자정에 결과를 업데이트하고 데이터를 초기화하는 자동화를 추가합니다.
automation:
- alias: Reset Daily App Usage
trigger:
- platform: time
at: '00:00:00'
action:
- service: homeassistant.update_entity
entity_id: sensor.daily_app_usage
- service: input_text.set_value
data:
entity_id: input_text.app_usage_data
value: '{}'
- service: input_datetime.set_datetime
data:
entity_id: input_datetime.last_change_time
datetime: "{{ now().replace(hour=0, minute=0, second=0).isoformat() }}"
- service: input_text.set_value
data:
entity_id: input_text.last_app
value: ''
- 헬퍼 센서 (
input_text
및input_datetime
): 앱 사용 데이터를 JSON 형식으로 저장하며, 마지막 변경 시간을 기록합니다. script.update_app_usage
: 스위치가on
상태일 때 앱 상태가 변경되면 현재 시간을 기록하고 사용 시간을 계산하여 저장합니다.automation.Update App Usage on Change
:sensor.current_app
또는switch.phone_tracking
의 상태가 변경될 때마다 스크립트를 실행합니다.sensor.daily_app_usage
: 하루 동안의 총 사용 시간과 앱별 사용 시간을 템플릿 센서의 상태와 속성으로 계산합니다.automation.Reset Daily App Usage
: 매일 자정에sensor.daily_app_usage
를 업데이트하고 헬퍼 센서를 초기화하여 다음 날의 데이터를 수집할 준비를 합니다.
이 설정을 통해 스위치가 켜져 있고 앱 상태가 변경될 때마다 실제 사용 시간을 계산하여 하루 동안의 앱별 사용 시간을 정확히 추적할 수 있습니다.