2024/05/15

Ulanzi TC001 픽셀시계


Ulanzi TC001 Pixel Clock



기존 사용하던 픽셀시계는 네트워크 기능이 없어 ntp서버와 동기화가 안됨. 대충 일주일에 1분정도 빨라져 5분정도 어긋나 있으면 시계를 맞추곤 함.

틈틈히 네트워크 기능이 있는 시계를 찾다 esp칩을 쓰는 Ulanzi TC001로 구매. 커스텀 펌으로 업하고 home assistant에서 mqtt로 장치 등록하면 HA에서도 컨트롤 가능.
커스텀 펌에 있는 날짜요일 시계가 가장 맘에 들어 Transition기능을 꺼 시계로 고정해 놓고 가끔 HA에 알림용으로 자동화할까 생각중.

조도센서가 있어 밝기를 자동조절 할 수 있고 배터리는 5시간 정도라 정전시에도 충분히 유지.
크기가 200x70mm인데 상하로 90mm정도로 더 컸으면 더 좋았을 것 같음. 픽셀크기도 작지만 차지하고 있는 면적도 좁아 더 작게 느껴짐. 그래서 기존 픽셀시계(160x80mm)에 비해 시인성이 좀 떨어져 안경을 벗었을 때 분간이 안돼 아쉬움.
온습도센서는 내부에 있어 기기 발열에 영향을 받아 측정값을 신뢰할 수 없는 것도 문제.

커스텀 펌업후 공유기에서 할당받은 IP로 접속해 MQTT세팅하고 ntp서버는 국내나 구글서버로 하고 타임존은 KST-9로 세팅하면 끝.

HA에서 편하게 사용하려면 아래 사용자 컴포넌트를 HACS에 등록후 설치하고 통합구성요소에 추가.
이 컴포넌트를 사용하면 앱 지정 전환과 날씨등 자동화 출력을 쉽게 할 수 있는 서비스등이 추가되어 알림 푸쉬기능을 쉽게 구현할 수 있음.

***
현재는 작은 크기 때문에 기존 시계는 다시 원래 자리에 놓고 Ulanzi 시계는 거실 책장으로 옮김.
그리고 위 컴포넌트를 이용해 로봇청소기 완료 알림과 유튜브 뮤직 플레이시 아티스트와 타이틀이 디스플레이에 흐르도록 세팅해 쓰고 있음. 날씨나 온도등의 알림은 시계와 같이 쓰기에는 애매해 제외.



- id: 알림-Awtrix/청소기종료
  alias: 알림-Awtrix/청소기종료
  trigger:
  - entity_id: switch.vacuum
    platform: state
    from: 'on'
    to: 'off'
  action:
  - service: awtrix.awtrix_light_push_app_data
    data:
      name: noti
      data:
        text: Cleaning... Completed!
        rainbow: true
        icon: "87"
        duration: 5
        pushIcon: 2
        lifetime: 900
        repeat: 300
  - service: awtrix.awtrix_light_switch_app
    data:
      name: noti
  - service: timer.start
    entity_id: timer.awtrix
  mode: restart

 

- id: 알림-Awtrix/미디어
  alias: 알림-Awtrix/미디어
  trigger:
    - platform: state
      entity_id: media_player.ytube_music_player
    - platform: time_pattern
      seconds: '/10'
  condition:
    - condition: state
      entity_id: media_player.ytube_music_player
      state: 'playing'
  action:
    - service: awtrix.awtrix_light_switch_app
      data:
        name: ytube
    - service: awtrix.awtrix_light_push_app_data
      data:
        name: ytube
        data:
          rainbow: false
          repeat: 20
          pushIcon: 0
          textCase: 0
          progress: "{{ (100 - ((state_attr('media_player.ytube_music_player', 'media_duration') | default(0, true) - (state_attr('media_player.ytube_music_player', 'media_position') | default(0, true) + as_timestamp(now()) - as_timestamp(state_attr('media_player.ytube_music_player', 'media_position_updated_at') | default(now(), true)))) / 60) * 100 / (state_attr('media_player.ytube_music_player', 'media_duration') | default(1, true)  / 60)) | int }}"
          progressC: "18B04C"
          text:  "{{ state_attr('media_player.ytube_music_player', 'media_artist') }} - {{ state_attr('media_player.ytube_music_player', 'media_title') }}"
          lifetime: 1800
  mode: single


- id: 시간-Awtrix
  alias: 시간-Awtrix
  trigger:
  - platform: state
    entity_id: sensor.awtrix_light_current_app
  condition:
    not:
      - condition: state
        entity_id: sensor.awtrix_light_current_app
        state: 'noti'
      - condition: state
        entity_id: sensor.awtrix_light_current_app
        state: 'Time'
      - condition: state
        entity_id: media_player.ytube_music_player
        state: 'playing'
  action:
  - service: awtrix.awtrix_light_switch_app
    data:
      name: Time
  mode: single