Mengambil Nilai Tunggal dari Status Perangkat di Home Assistant: Panduan Lengkap
Home Assistant adalah platform otomatisasi rumah yang kuat dan fleksibel yang memungkinkan Anda mengontrol dan memantau berbagai perangkat di rumah Anda. Salah satu tugas paling umum yang ingin Anda lakukan adalah mengambil nilai tunggal dari status perangkat, seperti suhu dari sensor suhu, status sakelar lampu, atau daya yang dikonsumsi oleh alat.
Artikel ini akan memandu Anda melalui berbagai cara untuk mengambil nilai tunggal dari status perangkat di Home Assistant, mulai dari metode paling sederhana hingga yang lebih kompleks. Kami akan membahas:
- Memahami Status Perangkat di Home Assistant
- Menggunakan Templating Jinja2 untuk Mengambil Nilai
- Memanfaatkan Node-RED untuk Pemrosesan yang Lebih Lanjut
- Menggunakan REST API Home Assistant
- Memecahkan Masalah Umum
- Praktik Terbaik untuk Mengambil Nilai Perangkat
1. Memahami Status Perangkat di Home Assistant
Sebelum kita mempelajari cara mengambil nilai, penting untuk memahami bagaimana Home Assistant menyimpan informasi tentang perangkat Anda. Setiap perangkat di Home Assistant direpresentasikan sebagai entitas. Setiap entitas memiliki:
- Entity ID: Pengidentifikasi unik untuk entitas, seperti `sensor.temperature_bedroom`.
- State: Nilai utama entitas. Ini bisa berupa angka (misalnya, suhu), string (misalnya, “on” atau “off”), atau bahkan nilai yang lebih kompleks.
- Attributes: Informasi tambahan tentang entitas, seperti satuan pengukuran, nama tampilan, atau tanggal terakhir diperbarui.
Anda dapat melihat status dan atribut perangkat Anda di antarmuka Home Assistant dengan membuka halaman entitas. Anda juga dapat menggunakan alat Developer Tools -> States untuk mencari entity id dan melihat state serta atribut nya.
Contoh:
Misalkan Anda memiliki sensor suhu dengan Entity ID `sensor.temperature_bedroom`. State sensor ini mungkin `22.5` (derajat Celcius), dan atributnya mungkin menyertakan `unit_of_measurement: ยฐC` dan `friendly_name: Bedroom Temperature`.
2. Menggunakan Templating Jinja2 untuk Mengambil Nilai
Jinja2 adalah mesin templating yang kuat yang digunakan secara luas di Home Assistant untuk mengotomatisasi dan menyesuaikan konfigurasi. Ini adalah cara paling umum dan seringkali paling mudah untuk mengambil nilai tunggal dari status perangkat.
2.1. Sintaks Dasar Templating Jinja2
Templating Jinja2 menggunakan sintaks khusus untuk mengakses data dan melakukan operasi. Berikut adalah beberapa elemen kunci:
- `{{ state(‘entity_id’) }}`: Mengambil state entitas dengan Entity ID yang diberikan.
- `{{ states.entity_id.state }}`: Cara alternatif untuk mengambil state entitas.
- `{{ state_attr(‘entity_id’, ‘attribute_name’) }}`: Mengambil nilai atribut entitas.
- `{{ states(‘entity_id’) | float }}`: Mengonversi state menjadi angka floating-point. Ini berguna jika state adalah string tetapi Anda ingin melakukan operasi matematika.
- `{{ states(‘entity_id’) | int }}`: Mengonversi state menjadi bilangan bulat.
- `{{ now().strftime(‘%H:%M’) }}`: Mengambil waktu saat ini dan memformatnya.
- Conditional Statements: Anda dapat menggunakan `if`, `elif`, dan `else` untuk membuat logika bersyarat.
- Loops: Anda dapat menggunakan `for` untuk mengulangi daftar atau kamus.
2.2. Contoh Penggunaan Jinja2 di Home Assistant
Berikut adalah beberapa contoh cara menggunakan Jinja2 untuk mengambil nilai dari status perangkat di Home Assistant:
2.2.1. Menampilkan Suhu di Kartu UI
Anda dapat menampilkan suhu dari sensor suhu di kartu UI menggunakan kartu Entitas dan mengonfigurasi Templatenya:
“`yaml
type: entity
entity: sensor.temperature_bedroom
name: Suhu Kamar Tidur
secondary_info: last-changed
“`
Atau, jika Anda ingin menampilkan suhu dengan format yang berbeda, Anda bisa menggunakan kartu Markdown dengan template Jinja2:
“`yaml
type: markdown
content: >
Suhu di kamar tidur saat ini adalah **{{ states(‘sensor.temperature_bedroom’) }} ยฐC**.
“`
2.2.2. Menggunakan Suhu di Otomatisasi
Anda dapat menggunakan suhu dari sensor suhu sebagai pemicu atau kondisi dalam otomatisasi. Misalnya, untuk menyalakan kipas angin jika suhu di kamar tidur lebih dari 25 derajat Celcius:
“`yaml
alias: Nyalakan Kipas Angin jika Terlalu Panas
trigger:
– platform: state
entity_id: sensor.temperature_bedroom
above: ’25’
condition:
– condition: state
entity_id: switch.fan
state: ‘off’
action:
– service: switch.turn_on
entity_id: switch.fan
“`
Anda juga bisa menggunakannya sebagai variabel di dalam sebuah action:
“`yaml
alias: Setel Termostat ke Suhu Kamar
trigger:
– platform: time_pattern
minutes: ‘/5’
action:
– service: climate.set_temperature
data_template:
entity_id: climate.thermostat
temperature: “{{ states(‘sensor.temperature_bedroom’) | float }}”
“`
2.2.3. Menggunakan Atribut Perangkat
Untuk mengakses atribut, gunakan fungsi `state_attr`. Misalnya, untuk mendapatkan satuan pengukuran sensor:
“`yaml
type: markdown
content: >
Satuan pengukuran suhu adalah **{{ state_attr(‘sensor.temperature_bedroom’, ‘unit_of_measurement’) }}**.
“`
2.2.4. Menggunakan Kondisional
Anda dapat menggunakan logika bersyarat untuk menampilkan pesan yang berbeda berdasarkan suhu:
“`yaml
type: markdown
content: >
{% if states(‘sensor.temperature_bedroom’) | float > 25 %}
Suhu terlalu panas!
{% elif states(‘sensor.temperature_bedroom’) | float < 20 %}
Suhu terlalu dingin!
{% else %}
Suhu ideal.
{% endif %}
```
2.3. Menguji Template Jinja2
Penting untuk menguji template Jinja2 Anda sebelum menggunakannya dalam konfigurasi Anda. Home Assistant menyediakan alat “Template” di bagian Developer Tools yang memungkinkan Anda memasukkan template dan melihat hasilnya secara langsung. Ini adalah cara yang bagus untuk mendebug template Anda dan memastikan bahwa mereka menghasilkan hasil yang diharapkan.
3. Memanfaatkan Node-RED untuk Pemrosesan yang Lebih Lanjut
Node-RED adalah alat pemrograman visual yang kuat yang memungkinkan Anda membuat alur kerja kompleks dengan mudah. Ini sangat berguna untuk memproses dan memanipulasi data dari Home Assistant sebelum menggunakannya dalam otomatisasi atau integrasi lain.
3.1. Menginstal dan Mengonfigurasi Node-RED di Home Assistant
Jika Anda belum menginstal Node-RED, Anda dapat melakukannya melalui Add-on Store di Home Assistant. Setelah diinstal, Anda perlu mengonfigurasi Node-RED untuk terhubung ke Home Assistant. Ini biasanya melibatkan pembuatan token akses jangka panjang dan memasukkannya ke konfigurasi Node-RED.
3.2. Menggunakan Node-RED untuk Mengambil Nilai Perangkat
Berikut adalah langkah-langkah untuk menggunakan Node-RED untuk mengambil nilai perangkat:
- Tambahkan Node “events: state”: Node ini akan memantau perubahan state entitas yang Anda tentukan.
- Konfigurasikan Node “events: state”: Masukkan Entity ID perangkat yang ingin Anda pantau.
- Tambahkan Node “function”: Node ini memungkinkan Anda menjalankan kode JavaScript untuk memproses data.
- Tambahkan Node “debug”: Node ini menampilkan output ke konsol debug Node-RED.
3.3. Contoh Node-RED
Berikut adalah contoh kode JavaScript yang dapat Anda gunakan di Node “function” untuk mengambil state dan atribut perangkat:
“`javascript
msg.payload = {
state: msg.payload.state,
temperature: msg.payload.data.new_state.attributes.temperature,
humidity: msg.payload.data.new_state.attributes.humidity
};
return msg;
“`
Kode ini mengambil state perangkat dan atribut `temperature` dan `humidity`, lalu menyimpannya dalam objek `msg.payload`. Anda kemudian dapat menggunakan data ini dalam node lain di alur kerja Anda.
3.4. Keunggulan Menggunakan Node-RED
Node-RED menawarkan beberapa keunggulan dibandingkan dengan templating Jinja2 untuk pemrosesan data:
- Fleksibilitas: Node-RED memungkinkan Anda membuat alur kerja yang lebih kompleks dan melakukan operasi yang lebih canggih daripada yang mungkin dengan Jinja2.
- Visualisasi: Alur kerja Node-RED divisualisasikan secara grafis, sehingga lebih mudah untuk memahami dan memelihara.
- Integrasi: Node-RED memiliki berbagai node yang tersedia untuk terhubung ke layanan dan API eksternal.
4. Menggunakan REST API Home Assistant
Home Assistant menyediakan REST API yang memungkinkan Anda berinteraksi dengan sistem secara terprogram. Ini berguna untuk mengambil nilai perangkat dari aplikasi eksternal atau skrip.
4.1. Mendapatkan Token Akses Jangka Panjang
Untuk menggunakan REST API, Anda perlu membuat token akses jangka panjang di Home Assistant. Anda dapat melakukannya di bagian Profil Pengguna Anda.
4.2. Melakukan Permintaan ke REST API
Untuk mengambil state perangkat, Anda dapat melakukan permintaan GET ke endpoint `/api/states/
Contoh menggunakan `curl`:
“`bash
curl -X GET \
http://your_home_assistant_ip:8123/api/states/sensor.temperature_bedroom \
-H “Authorization: Bearer YOUR_LONG_LIVED_ACCESS_TOKEN” \
-H “Content-Type: application/json”
“`
4.3. Memproses Respons JSON
Respons dari API akan berupa JSON yang berisi informasi tentang entitas, termasuk state dan atributnya. Anda perlu memproses respons JSON untuk mengambil nilai yang Anda inginkan.
Contoh respons:
“`json
{
“entity_id”: “sensor.temperature_bedroom”,
“state”: “22.5”,
“attributes”: {
“unit_of_measurement”: “ยฐC”,
“friendly_name”: “Bedroom Temperature”,
“device_class”: “temperature”
},
“last_changed”: “2023-10-27T10:00:00.000000+00:00”,
“last_updated”: “2023-10-27T10:00:00.000000+00:00”,
“context”: {
“id”: “…”,
“parent_id”: null,
“user_id”: null
}
}
“`
Anda dapat mengakses state menggunakan `response.state` dan atribut menggunakan `response.attributes.unit_of_measurement`.
4.4. Menggunakan REST API di Skrip Python
Berikut adalah contoh skrip Python yang mengambil state sensor suhu menggunakan REST API:
“`python
import requests
import json
def get_temperature(entity_id, access_token):
“””Mengambil suhu dari Home Assistant REST API.”””
url = f”http://your_home_assistant_ip:8123/api/states/{entity_id}”
headers = {
“Authorization”: f”Bearer {access_token}”,
“Content-Type”: “application/json”,
}
try:
response = requests.get(url, headers=headers)
response.raise_for_status() # Raise HTTPError for bad responses (4xx or 5xx)
data = response.json()
return data[‘state’]
except requests.exceptions.RequestException as e:
print(f”Error: {e}”)
return None
except (KeyError, json.JSONDecodeError) as e:
print(f”Error parsing JSON: {e}”)
return None
if __name__ == “__main__”:
entity_id = “sensor.temperature_bedroom”
access_token = “YOUR_LONG_LIVED_ACCESS_TOKEN”
temperature = get_temperature(entity_id, access_token)
if temperature:
print(f”Suhu di kamar tidur adalah: {temperature} ยฐC”)
else:
print(“Gagal mengambil suhu.”)
“`
5. Memecahkan Masalah Umum
Berikut adalah beberapa masalah umum yang mungkin Anda temui saat mengambil nilai perangkat di Home Assistant dan cara mengatasinya:
- Entity ID Salah: Pastikan Anda menggunakan Entity ID yang benar untuk perangkat Anda. Anda bisa memeriksanya di bagian Developer Tools -> States.
- State Tidak Tersedia: Terkadang, state perangkat mungkin tidak tersedia (misalnya, jika perangkat sedang offline). Anda dapat menggunakan kondisi `is_state` atau `is_state_attr` di otomatisasi Anda untuk menangani kasus ini.
- Kesalahan Templating: Pastikan sintaks Jinja2 Anda benar. Gunakan alat “Template” di Developer Tools untuk menguji template Anda.
- Masalah Koneksi API: Jika Anda menggunakan REST API, pastikan Home Assistant Anda dapat diakses dari aplikasi atau skrip Anda. Periksa firewall dan konfigurasi jaringan Anda.
- Token Akses Tidak Valid: Pastikan token akses jangka panjang Anda valid dan belum kedaluwarsa.
6. Praktik Terbaik untuk Mengambil Nilai Perangkat
Berikut adalah beberapa praktik terbaik untuk mengambil nilai perangkat di Home Assistant:
- Gunakan Entity ID yang Jelas dan Deskriptif: Ini akan memudahkan Anda untuk mengidentifikasi dan menggunakan perangkat Anda di konfigurasi Anda.
- Dokumentasikan Konfigurasi Anda: Tambahkan komentar ke konfigurasi Anda untuk menjelaskan apa yang dilakukan setiap bagian.
- Uji Konfigurasi Anda Secara Teratur: Ini akan membantu Anda menemukan dan memperbaiki masalah sebelum menyebabkan masalah yang lebih besar.
- Gunakan Templating Jinja2 untuk Tugas Sederhana: Templating Jinja2 adalah cara yang bagus untuk mengambil dan memformat nilai perangkat untuk ditampilkan di UI atau digunakan dalam otomatisasi sederhana.
- Gunakan Node-RED untuk Tugas yang Lebih Kompleks: Node-RED sangat bagus untuk memproses dan memanipulasi data dari Home Assistant sebelum menggunakannya dalam otomatisasi atau integrasi lain.
- Gunakan REST API untuk Integrasi Eksternal: REST API memungkinkan Anda berinteraksi dengan Home Assistant dari aplikasi atau skrip eksternal.
- Validasi Input: Selalu validasi input yang Anda terima dari perangkat. Ini akan membantu Anda mencegah kesalahan dan meningkatkan keamanan sistem Anda. Misalnya, pastikan nilai suhu berada dalam rentang yang wajar sebelum Anda menggunakannya dalam otomatisasi.
- Gunakan Caching: Jika Anda sering mengambil nilai perangkat, pertimbangkan untuk menggunakan caching untuk meningkatkan kinerja. Ini dapat dilakukan dengan menyimpan nilai dalam variabel global atau menggunakan layanan caching seperti Redis.
- Tangani Kesalahan dengan Elegan: Pastikan Anda menangani kesalahan dengan elegan. Ini berarti memberikan pesan kesalahan yang informatif dan mencegah sistem Anda macet.
Dengan mengikuti panduan ini, Anda akan dapat mengambil nilai tunggal dari status perangkat di Home Assistant dengan mudah dan efisien, sehingga memungkinkan Anda untuk membuat otomatisasi rumah yang canggih dan dipersonalisasi.
“`