Jam Suara di Home Assistant

Ramadhan 1447H adalah ujian berat bagi saya karena penglihatan bapak saya yang semula masih 5% sekarang benar-benar tidak bisa melihat. Gelap.

Ini membuat beliau tidak tahu waktu. Jangankan waktu, membedakan siang dan malam saja tidak bisa. Oleh sebab itu saya melengkapi automation pada HA saya dengan jam berbicara untuk  sedikit membantu bapak saya mengenali waktu.

Saya menggunakan HA yang saya hubungkan dengan speaker google.

  1. Setiap jam, buat ucapan selamat pagi, siang, sore, atau malam, lalu sebutkan hari dan tanggal serta jam.
  2. Apabila speaker google dalam keadaan berbunyi, mungkin pas adzan atau dzikir, maka ucapan tidak dilakukan.
  3. Set volume ke 60% saat pengucapannya, dan kembalikan ke volume awal saat sudah selesai.

Taruh script ini di automations.yaml, dan restart home assistant

# ================ JAM SUARA =====================
- id: 'jam_suara'
  alias: "Jam Suara"
  trigger:
    - platform: time_pattern
      minutes: 0

  condition:
    - condition: not
      conditions:
        - condition: state
          entity_id: media_player.ruang_keluarga
          state: "playing"

    - condition: time
      after: "05:00:00"
      before: "22:00:00"

  action:
    - variables:
        prev_volume: "{{ state_attr('media_player.ruang_keluarga', 'volume_level') | float(0.5) }}"

    - service: media_player.volume_set
      target:
        entity_id: media_player.ruang_keluarga
      data:
        volume_level: 0.6

    - delay: "00:00:01"

    - service: tts.google_translate_say
      target:
        entity_id: media_player.ruang_keluarga
      data:
        language: "id"
        message: >
          {% set now_dt = now() %}
          {% set h = now_dt.hour %}
          {% set m = now_dt.minute %}
          {% set hari = ["Senin","Selasa","Rabu","Kamis","Jumat","Sabtu","Minggu"] %}
          {% set bulan = ["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"] %}
          {% set nama_hari = hari[now_dt.weekday()] %}
          {% set tgl = now_dt.day %}
          {% set nama_bulan = bulan[now_dt.month - 1] %}
          {% set tahun = now_dt.year %}
          {% set angka = ["nol","satu","dua","tiga","empat","lima","enam","tujuh","delapan","sembilan","sepuluh","sebelas"] %}

          {% macro sebut(n) %}
            {% if n <= 11 %}
              {{ angka[n] }}
            {% elif n < 20 %}
              {{ angka[n-10] }} belas
            {% elif n < 100 %}
              {% set puluhan = n // 10 %}
              {% set satuan = n % 10 %}
              {{ 'se' if puluhan == 1 else angka[puluhan] }}puluh {{ angka[satuan] if satuan != 0 else '' }}
            {% else %}
              {{ n }}
            {% endif %}
          {% endmacro %}

          {% if 5 <= h < 11 %}
            {% set salam = "pagi" %}
          {% elif 11 <= h < 15 %}
            {% set salam = "siang" %}
          {% elif 15 <= h < 18 %}
            {% set salam = "sore" %}
          {% else %}
            {% set salam = "malam" %}
          {% endif %}

          Semoga selalu dalam limpahan hidayah, rahmat, dan keberkahan Alloh. Selamat {{ salam }}.
          Hari ini, {{ nama_hari }}, {{ tgl }} {{ nama_bulan }} {{ tahun }}.
          
          {% if m == 0 %}
            Sekarang pukul {{ sebut(h) }} {{ salam }} tepat.
          {% elif m < 30 %}
            Sekarang pukul {{ sebut(h) }} lewat {{ sebut(m) }} menit.
          {% else %}
            Sekarang pukul {{ sebut(h + 1 if h < 23 else 0) }} kurang {{ sebut(60 - m) }} menit.
          {% endif %}

    - delay: "00:00:15"

    - service: media_player.volume_set
      target:
        entity_id: media_player.ruang_keluarga
      data:
        volume_level: "{{ prev_volume }}"

Catatan: Script sebelumnya  tidak berhasil. Dan masalahnya ternyata ada pada HA saya yang sudah terlalu lama. Versi 2023.6. Jadi sebelum kamu membuatnya, atau tanya AI sampaikan versi HA yang kamu punya,

  • service: vs action:: Di versi 2023.6, kamu wajib pakai service:.

  • Jinja2 Template: Logika macro sebut(n) yang saya buat di atas sudah kompatibel dengan mesin template di versi tersebut.

  • Volume Level: Kadang di beberapa media player lama, perubahan volume mendadak butuh sedikit waktu untuk “sinkron” sebelum suara TTS keluar, jadi delay: "00:00:01" setelah set volume itu sudah benar.

Spread the love

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.