Home Assistant
Integrasi Waktu Solat Malaysia untuk Home Assistant
Integrasi custom component ini membolehkan anda mendapatkan waktu solat Malaysia terus dalam Home Assistant, dengan sokongan automasi azan, papan pemuka, dan pertukaran zon secara langsung.
Ciri-ciri
- 17 entiti dicipta secara automatik — sensor waktu solat, tarikh Hijri, zon, pemain media azan, mod pengumuman, dan lain-lain
- Sokong 59 zon JAKIM di seluruh Malaysia
- Pertukaran zon secara langsung — semua sensor dikemas kini serta-merta tanpa restart
- Sokongan berbilang peranti (cth: "Rumah" dan "Pejabat")
- Persediaan melalui UI — tanpa perlu edit YAML
- Mod pengumuman azan boleh dipilih — TTS Google Translate atau audio MP3 pra-rakam
Pemasangan
DisyorkanMelalui HACS
- 1Dalam HACS, pergi ke Integrations → menu tiga titik → Custom repositories
- 2Tambah URL repositori berikut dan pilih kategori Integration:
https://github.com/mysolat/homeassistant - 3Cari “Waktu Solat Malaysia” dalam HACS dan klik Download
- 4Restart Home Assistant
Pemasangan Manual
- 1Muat turun atau klon repositori dari GitHub
- 2Salin folder
custom_components/solat_my/ke dalam direktoriconfig/custom_components/ - 3Restart Home Assistant
Konfigurasi
- 1Pergi ke Settings → Devices & Services → Add Integration
- 2Cari “Waktu Solat Malaysia”
- 3Masukkan Nama Peranti (cth:
Waktu Solat) — ini menjadi prefix ID entiti - 4Pilih zon permulaan (cth:
SGR01 — Selangor) - 5Klik Submit — semua 17 entiti akan muncul serta-merta
Untuk menukar zon kemudian, tukar entiti Zon pada halaman peranti. Semua sensor dikemas kini serta-merta tanpa restart.
Entiti yang Dicipta
Sensor Waktu Solat
| ID Entiti | Nama | Keterangan |
|---|---|---|
sensor.waktu_solat_imsak | Imsak | Waktu Imsak (timestamp) |
sensor.waktu_solat_subuh | Subuh | Waktu Subuh (timestamp) |
sensor.waktu_solat_syuruk | Syuruk | Waktu Syuruk (timestamp) |
sensor.waktu_solat_dhuha | Dhuha | Waktu Dhuha (timestamp) |
sensor.waktu_solat_zohor | Zohor | Waktu Zohor (timestamp) |
sensor.waktu_solat_asar | Asar | Waktu Asar (timestamp) |
sensor.waktu_solat_maghrib | Maghrib | Waktu Maghrib (timestamp) |
sensor.waktu_solat_isyak | Isyak | Waktu Isyak (timestamp) |
sensor.waktu_solat_tarikh_hijri | Tarikh Hijri | Tarikh Hijri (nama bulan dalam BM) |
sensor.waktu_solat_waktu_solat_seterusnya | Waktu Solat Seterusnya | Waktu solat berikutnya dengan kiraan detik |
sensor.waktu_solat_waktu_solat_semasa | Waktu Solat Semasa | Tempoh waktu solat semasa |
Entiti Konfigurasi
| ID Entiti | Nama | Keterangan |
|---|---|---|
select.waktu_solat_zon | Zon | Zon aktif — tukar untuk kemas kini semua sensor serta-merta |
select.waktu_solat_pemain_media_azan | Pemain Media Azan | Pemain media untuk main balik azan |
select.waktu_solat_mod_pengumuman_azan | Mod Pengumuman Azan | tts (Google Translate) atau audio (MP3 pra-rakam) |
number.waktu_solat_kelantangan_azan | Kelantangan Azan | Kelantangan azan (0.0–1.0) |
text.waktu_solat_fail_audio_azan | Fail Audio Azan | Nama fail azan (dipisahkan koma) |
text.waktu_solat_fail_audio_azan_subuh | Fail Audio Azan Subuh | Nama fail azan Subuh (dipisahkan koma) |
text.waktu_solat_fail_doa_selepas_azan | Fail Doa Selepas Azan | Nama fail audio doa selepas azan |
Contoh Papan Pemuka
Panduan LengkapKad Entiti Waktu Solat (YAML)
type: entities
title: Waktu Solat
entities:
- entity: sensor.waktu_solat_waktu_solat_semasa
name: Waktu Semasa
- entity: sensor.waktu_solat_waktu_solat_seterusnya
name: Waktu Seterusnya
- entity: sensor.waktu_solat_imsak
name: Imsak
format: time
- entity: sensor.waktu_solat_subuh
name: Subuh
format: time
- entity: sensor.waktu_solat_zohor
name: Zohor
format: time
- entity: sensor.waktu_solat_asar
name: Asar
format: time
- entity: sensor.waktu_solat_maghrib
name: Maghrib
format: time
- entity: sensor.waktu_solat_isyak
name: Isyak
format: time
- entity: sensor.waktu_solat_tarikh_hijri
name: Tarikh HijriContoh Automasi Azan
Panduan LengkapAzan Harian (YAML)
alias: "Azan Harian"
description: "Play azan for all prayer times via solat.my integration"
mode: single
triggers:
- trigger: time
at: sensor.waktu_solat_subuh
id: subuh
- trigger: time
at: sensor.waktu_solat_zohor
id: zohor
- trigger: time
at: sensor.waktu_solat_asar
id: asar
- trigger: time
at: sensor.waktu_solat_maghrib
id: maghrib
- trigger: time
at: sensor.waktu_solat_isyak
id: isyak
conditions: []
actions:
# Persistent notification
- action: persistent_notification.create
data:
notification_id: solat_azan
title: >
🕋 Waktu Solat —
{% set tid = trigger.id if trigger is defined else states('sensor.waktu_solat_waktu_solat_semasa') | lower %}
{% set names = {'subuh': 'Subuh', 'syuruk': 'Syuruk', 'zohor': 'Zohor', 'asar': 'Asar', 'maghrib': 'Maghrib', 'isyak': 'Isyak'} %}
{{ names.get(tid, 'Zohor') }}
message: >
{% set tid = trigger.id if trigger is defined else states('sensor.waktu_solat_waktu_solat_semasa') | lower %}
{% set names = {'subuh': 'Subuh', 'syuruk': 'Syuruk', 'zohor': 'Zohor', 'asar': 'Asar', 'maghrib': 'Maghrib', 'isyak': 'Isyak'} %}
{{ now().strftime('%-I:%M %p') }} — Sekarang telah masuk waktu
{{ names.get(tid, 'Zohor') }} bagi kawasan ini dan kawasan yang sama waktu dengannya.
# Mobile push notification
- action: notify.notify
data:
title: >
🕋 Waktu Solat —
{% set tid = trigger.id if trigger is defined else states('sensor.waktu_solat_waktu_solat_semasa') | lower %}
{% set names = {'subuh': 'Subuh', 'syuruk': 'Syuruk', 'zohor': 'Zohor', 'asar': 'Asar', 'maghrib': 'Maghrib', 'isyak': 'Isyak'} %}
{{ names.get(tid, 'Zohor') }}
message: >
{% set tid = trigger.id if trigger is defined else states('sensor.waktu_solat_waktu_solat_semasa') | lower %}
{% set names = {'subuh': 'Subuh', 'syuruk': 'Syuruk', 'zohor': 'Zohor', 'asar': 'Asar', 'maghrib': 'Maghrib', 'isyak': 'Isyak'} %}
{{ now().strftime('%-I:%M %p') }} — Sekarang telah masuk waktu {{ names.get(tid, 'Zohor') }}.
# Set volume — skipped if media player does not support it (e.g. TV)
- if:
- condition: template
value_template: >
{{ state_attr(states('select.waktu_solat_pemain_media_azan'), 'supported_features') | int(0) | bitwise_and(4) > 0 }}
then:
- action: media_player.volume_set
target:
entity_id: "{{ states('select.waktu_solat_pemain_media_azan') }}"
data:
volume_level: "{{ states('number.waktu_solat_kelantangan_azan') | float }}"
# Announcement — TTS or pre-recorded audio based on user setting
- choose:
- conditions:
- condition: template
value_template: >
{{ states('select.waktu_solat_mod_pengumuman_azan') == 'audio' }}
sequence:
- action: media_player.play_media
target:
entity_id: "{{ states('select.waktu_solat_pemain_media_azan') }}"
data:
media:
media_content_type: audio/mp3
media_content_id: >
{% set tid = trigger.id if trigger is defined else states('sensor.waktu_solat_waktu_solat_semasa') | lower %}
media-source://media_source/local/tts/tts_{{ tid }}.mp3
metadata: {}
- delay: "00:00:10"
default:
- action: tts.google_translate_say
data:
entity_id: "{{ states('select.waktu_solat_pemain_media_azan') }}"
language: id
message: >
{% set tid = trigger.id if trigger is defined else states('sensor.waktu_solat_waktu_solat_semasa') | lower %}
{% set names = {'subuh': 'Subuh', 'syuruk': 'Syuruk', 'zohor': 'Zohor', 'asar': 'Asar', 'maghrib': 'Maghrib', 'isyak': 'Isyak'} %}
Sekarang telah masuk waktu {{ names.get(tid, 'Zohor') }}.
- delay: "00:00:10"
# Play azan audio (random selection from text entity)
- action: media_player.play_media
target:
entity_id: "{{ states('select.waktu_solat_pemain_media_azan') }}"
data:
extra:
title: >
{% set tid = trigger.id if trigger is defined else states('sensor.waktu_solat_waktu_solat_semasa') | lower %}
{% set names = {'subuh': 'Subuh', 'syuruk': 'Syuruk', 'zohor': 'Zohor', 'asar': 'Asar', 'maghrib': 'Maghrib', 'isyak': 'Isyak'} %}
Azan {{ names.get(tid, 'Zohor') }}
thumb: "https://solat.my/icon-512.png"
media:
media_content_type: audio/mp3
media_content_id: >
{% set tid = trigger.id if trigger is defined else states('sensor.waktu_solat_waktu_solat_semasa') | lower %}
{% if tid == 'subuh' %}
{{ "media-source://media_source/local/azan/" ~ states('text.waktu_solat_fail_audio_azan_subuh').split(', ') | random | trim }}
{% else %}
{{ "media-source://media_source/local/azan/" ~ states('text.waktu_solat_fail_audio_azan').split(', ') | random | trim }}
{% endif %}
metadata: {}
# Wait for azan to finish, then play doa
- choose:
- conditions:
- condition: template
value_template: >
{% set tid = trigger.id if trigger is defined else states('sensor.waktu_solat_waktu_solat_semasa') | lower %}
{{ tid == 'subuh' }}
sequence:
- delay:
minutes: 4
seconds: 30
default:
- delay:
minutes: 2
seconds: 47
# Play doa selepas azan
- action: media_player.play_media
alias: "Doa Selepas Azan"
target:
entity_id: "{{ states('select.waktu_solat_pemain_media_azan') }}"
data:
media:
media_content_id: media-source://media_source/local/azan/doa_selepas_azan.mp3
media_content_type: audio/mpeg
metadata:
title: doa_selepas_azan.mp3
media_class: musicKod sumber tersedia di GitHub. Laporkan isu atau sumbangkan penambahbaikan.
github.com/mysolat/homeassistant →