Pendahuluan

Di artikel #21 kamu menghubungkan ESP32 ke Home Assistant lewat MQTT manual: edit configuration.yaml, definisikan sensor value_template, dan atur switch relay sendiri. Itu fleksibel — tapi banyak boilerplate.

Artikel ini melanjutkan Jalur C (smart home): setelah integrasi MQTT manual (#21), kamu bisa mempercepat deploy node ESP32 dengan ESPHome — tanpa menulis setup() / loop() di Arduino IDE.

Prasyarat: Home Assistant sudah jalan (artikel #21). Paham wiring DHT22 (#5) dan relay (#8) — pin yang sama dipakai di sini. Familiar dengan proyek gabungan DHT22 + relay (#9) membantu membandingkan pendekatan.

Yang Kamu Butuhkan

  • Home Assistant dengan add-on ESPHome (Supervisor / HA OS) atau ESPHome Dashboard di PC
  • ESP32 DevKit + kabel USB (flash pertama)
  • Sensor DHT22 + modul relay 1 channel — wiring sama artikel #9
  • PC dan ESP32 di WiFi 2.4 GHz yang sama dengan Home Assistant

Estimasi biaya: ESPHome & add-on HA gratis — hardware sama proyek #9 (ESP32 ~35rb + DHT22 ~25rb + relay ~15rb).

Arduino Sketch vs ESPHome

AspekSketch Arduino (#9)ESPHome (artikel ini)
BahasaC++ (.ino)YAML deklaratif
Integrasi HAMQTT manual di configuration.yaml (#21)Native API — entitas otomatis
OTAArduinoOTA / custom OTA (#15)OTA bawaan ESPHome
Broker eksternalWajib Mosquitto (#16)Opsional — bisa tetap pakai Mosquitto (#16)
Kapan pakaiLogika custom, protokol non-HANode sensor/aktuator cepat di smart home

Arsitektur: ESPHome + Home Assistant

KomponenPeranKoneksi
ESP32 (firmware ESPHome)Baca DHT22, kontrol relay GPIOWiFi/LAN → Home Assistant
ESPHome add-onCompile YAML → flash / OTADi dalam HA atau PC lokal
Home AssistantDashboard, automasi, native APITerima entitas tanpa edit MQTT manual
Mosquitto (opsional)Broker untuk node Arduino lain#16 — lihat bagian opsional di bawah

Alur data secara singkat:

  [ YAML ESPHome ]  →  compile  →  firmware ESP32
        |
        |  WiFi · Native API (enkripsi) · OTA
        v
  [ Home Assistant ]  (#21)
        |
        +-- sensor.kindo_esp32_node_suhu_ruangan  (DHT22)
        +-- sensor.kindo_esp32_node_kelembaban_ruangan
        +-- switch.kindo_esp32_node_lampu_relay
        +-- automasi: suhu > 30°C → matikan lampu

Wiring Hardware

Ikuti diagram di artikel #9 — pin konsisten di seluruh seri:

  • DHT22 DATA → GPIO 4 (+ pull-up 10kΩ ke 3.3V)
  • Relay IN → GPIO 26 · modul umum active LOW (#8)

Langkah 1 — Pasang Add-on ESPHome

  1. Buka Home Assistant → SettingsAdd-onsAdd-on Store
  2. Cari ESPHome → Install → Start → centang Show in sidebar
  3. Klik ESPHome di sidebar → + New Device
  4. Beri nama misalnya kindo-esp32-node → pilih ESP32Skip (kita edit YAML manual)

HA di Docker (Windows/Mac): Flash USB pertama kali butuh ESPHome Dashboard di PC, atau passthrough USB ke VM. Setelah OTA aktif, update berikutnya tanpa kabel.

Langkah 2 — File secrets.yaml

Jangan hardcode password WiFi di YAML utama. Buat secrets.yaml di folder device ESPHome:

wifi_ssid: "Nama_WiFi_Rumah"
wifi_password: "password_wifi_anda"
api_encryption_key: "ganti_dengan_string_acak_panjang"
ota_password: "password_ota_anda"
ap_password: "password_ap_fallback_anda"
# Opsional — hanya jika pakai blok mqtt: ke Mosquitto (#16)
mqtt_password: "password_mqtt_anda"

Generate api_encryption_key dari menu ESPHome → perangkat → API encryption key.

Langkah 3 — Konfigurasi YAML Lengkap

Ganti isi kindo-esp32-node.yaml (nama file mengikuti esphome.name):

esphome:
  name: kindo-esp32-node
  friendly_name: Kindo ESP32 Node

esp32:
  board: esp32dev
  framework:
    type: arduino

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  ap:
    ssid: "Kindo-ESP32-Fallback"
    password: !secret ap_password

captive_portal:

logger:

api:
  encryption:
    key: !secret api_encryption_key

ota:
  - platform: esphome
    password: !secret ota_password

sensor:
  - platform: dht
    pin: GPIO4
    model: DHT22
    temperature:
      name: "Suhu Ruangan"
      id: suhu_ruangan
      device_class: temperature
      unit_of_measurement: "°C"
    humidity:
      name: "Kelembaban Ruangan"
      id: kelembaban_ruangan
      device_class: humidity
      unit_of_measurement: "%"
    update_interval: 10s

switch:
  - platform: gpio
    pin: GPIO26
    name: "Lampu Relay"
    id: lampu_relay
    inverted: true

Penjelasan singkat:

  • dht + GPIO4 — sama dengan sketch DHT22 (#5)
  • inverted: true — relay active LOW seperti di #8
  • api + ota — koneksi aman ke HA dan update firmware nanti tanpa USB
  • captive_portal — hotspot fallback jika WiFi gagal (mirip konsep WiFiManager #12); password AP di secrets.yamlap_password

Langkah 4 — Flash Pertama (USB)

  1. Sambungkan ESP32 ke PC via USB
  2. Di ESPHome Dashboard → perangkat → InstallPlug into this computer
  3. Pilih port COM yang muncul → tunggu compile & upload (3–8 menit pertama kali)
  4. Setelah sukses, ESP32 connect WiFi → status Online di dashboard ESPHome

Langkah 5 — Integrasi ke Home Assistant

  1. Notifikasi Discovered muncul di HA → klik Configure
  2. Masukkan API encryption key dari secrets.yaml
  3. Buka Settings → Devices & Services → ESPHome — tiga entitas baru: suhu, kelembaban, switch lampu
  4. Tambahkan ke dashboard — tidak perlu edit configuration.yaml seperti di #21

Dashboard di Home Assistant

  1. Buka OverviewEdit dashboard (ikon pensil)
  2. Add cardEntities → pilih sensor suhu, kelembaban, dan switch lampu
  3. Simpan — nilai suhu harus update tiap ~10 detik
  4. Opsional: klik sensor → Add to dashboard sebagai History graph (tren 24 jam)

Penjelasan Entity ID

ESPHome membuat entity ID dari friendly_name + name per komponen. Contoh setelah integrasi:

  • sensor.kindo_esp32_node_suhu_ruangan — suhu DHT22
  • sensor.kindo_esp32_node_kelembaban_ruangan — kelembaban
  • switch.kindo_esp32_node_lampu_relay — kontrol relay

Cek nama pasti di Settings → Devices & Services → ESPHome → klik device → lihat entitas, atau Developer Tools → States (cari kindo_esp32).

Pro tip: Beri friendly_name yang jelas di YAML agar entitas mudah dicari di automasi HA.

Automasi Sederhana di Home Assistant

Contoh rule: matikan lampu jika suhu > 30°C (sama konsep automasi #21). Ganti entity_id sesuai device kamu:

alias: Matikan lampu jika panas
trigger:
  - platform: numeric_state
    entity_id: sensor.kindo_esp32_node_suhu_ruangan
    above: 30
    for:
      minutes: 5
action:
  - service: switch.turn_off
    target:
      entity_id: switch.kindo_esp32_node_lampu_relay

Tempel via Settings → Automations → Create → Edit in YAML. Nama entity bisa sedikit berbeda — selalu verifikasi di Developer Tools → States sebelum simpan.

OTA — Update Tanpa Kabel USB

Setelah flash pertama, edit YAML lalu klik Install → Wirelessly di ESPHome Dashboard. Ini menggantikan kebutuhan ArduinoOTA custom (#15) untuk node ESPHome — meski sketch Arduino manual tetap relevan untuk proyek non-HA.

Opsional — Publish ke Mosquitto (#16)

Jika kamu punya node Arduino lama (#9) dan ingin ESPHome ikut ekosistem topic Seri 1, tambahkan blok mqtt::

mqtt:
  broker: 192.168.1.50
  username: kindo_esp32
  password: !secret mqtt_password
  discovery: false
  topic_prefix: kodingindonesia/esp32/esphome

Dengan discovery: false, HA tetap pakai Native API; Mosquitto menerima telemetri paralel. Untuk topic persis kodingindonesia/esp32/dht22/data, gunakan on_... template lanjutan — atau biarkan node Arduino dan ESPHome hidup berdampingan.

Broker publik: Jangan pakai test.mosquitto.org untuk produksi — sama seperti peringatan di #16 dan #21.

Gabung dengan Stack Seri 2

  • Sensor BME280 (#13) — tambah blok bme280 di YAML ESPHome (bus I2C sama)
  • Konfigurasi lapangan WiFiManager + NVS (#12) — untuk sketch Arduino; ESPHome pakai captive_portal + !secret
  • Node Arduino lama tetap jalan via Mosquitto (#16) — ESPHome bisa hidup berdampingan (bagian MQTT opsional di atas)

Uji Coba (Checklist)

  1. Flash YAML → status ESPHome Online
  2. Entitas suhu & kelembaban update tiap ~10 detik di HA
  3. Toggle Lampu Relay → LED/modul relay klik ON/OFF
  4. Putus WiFi router → ESP32 buka AP fallback Kindo-ESP32-Fallback (opsional uji)
  5. Edit YAML (misalnya ubah update_interval) → OTA wireless → verifikasi perubahan

Tips & Troubleshooting

  • Compile error GPIO: Hindari GPIO 6–11 (flash internal). GPIO 4 & 26 aman — sama #8
  • DHT22 NaN: Cek pull-up 10kΩ, kabel pendek, dan model: DHT22 (bukan AM2302 salah pin)
  • Relay terbalik ON/OFF: Toggle inverted: true/false di YAML switch
  • HA tidak discover device: Pastikan ESP32 dan HA satu subnet; restart add-on ESPHome
  • Flash USB gagal: Tahan tombol BOOT saat upload; ganti kabel data (bukan charge-only)
  • Entity unavailable setelah reboot: Cek WiFi 2.4 GHz — ESP32 tidak support 5 GHz saja
  • MQTT + Native API bentrok: Pakai discovery: false pada blok mqtt:

Keamanan & Produksi

  • Simpan secrets.yaml dan api_encryption_key — jangan commit ke repo publik
  • Ganti ota_password default; OTA tanpa password = risiko di jaringan tamu
  • Backup folder konfigurasi ESPHome bersama backup /config Home Assistant
  • Untuk akses dari internet, amankan HA dengan reverse proxy + TLS — bukan expose port OTA langsung

Langkah Selanjutnya (Seri 2)

ESPHome mempercepat Jalur C smart home: dari YAML ke dashboard dalam hitungan menit. Lanjutkan di halaman artikel Koding Indonesia.