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.
https://github.com/mysolat/homeassistant
custom_components/solat_my/ ke dalam direktori config/custom_components/ Home Assistant anda
Waktu Solat) — ini menjadi prefix ID entiti
SGR01 — Selangor)
Untuk menukar zon kemudian, pergi ke halaman peranti dan tukar entiti Zon. Semua sensor dikemas kini serta-merta tanpa restart.
17 entiti dicipta secara automatik di bawah peranti "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 berformat dengan nama bulan dalam Bahasa Melayu |
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 |
| 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 | Mod pengumuman sebelum azan — tts (Google Translate TTS) 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 |
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 Hijri
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: music
Kod sumber tersedia di GitHub. Laporkan isu atau sumbangkan penambahbaikan.
github.com/mysolat/homeassistant →