Files
Hitachi-IR-Climate-ESPHome-…/esphome/hitachi-ir.yaml
Francesco Zanin 1a9eb82d0f Initial commit: Hitachi RAR-6NE1 climate via ESP32/ESPHome
Reverse engineering del protocollo IR (HITACHI_AC 28 byte) del telecomando
RAR-6NE1 e custom component ESPHome bidirezionale (TX + RX) per Home Assistant.

- esphome/: custom component hitachi_rar6ne1 (climate_ir::ClimateIR) + config
- src/: firmware Arduino di cattura IR con web UI (strumento di diagnostica)
- README.md: documentazione completa (protocollo, decode, checksum, gotcha)
- Segreti esclusi dal versionamento (vedi *.example e .gitignore)
- Licenza GPL-3.0

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 15:50:26 +02:00

97 lines
3.1 KiB
YAML

# Hitachi RAR-6NE1 -> climate ESPHome (protocollo HITACHI_AC, 28 byte).
#
# Da importare nell'add-on ESPHome di Home Assistant:
# - questo file e la cartella components/ vanno nella STESSA directory di
# config ESPHome (da te: /config/hitachi-ir.yaml + /config/components/)
# - quindi external_components -> path: components risolve a components/hitachi_rar6ne1/
# - compila secrets.yaml (wifi) come da template accanto a questo file
#
# Hardware:
# - Ricevitore IR (TSOP/VS1838B) su GPIO27 (gia' presente)
# - Emettitore IR (LED IR + driver a transistor) su GPIO25 (DA MONTARE)
# GPIO25 --[1k]--> base NPN ; LED IR: 3V3 --[100R]--> A->K --> collector ; emitter -> GND
esphome:
name: hitachi-ir
friendly_name: Condizionatore Hitachi
esp32:
board: esp32dev
framework:
type: arduino
# --- Connettivita' -----------------------------------------------------------
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Hotspot di fallback se il WiFi non e' raggiungibile
ap:
ssid: "Hitachi-IR Fallback"
captive_portal:
logger:
level: DEBUG
api:
encryption:
key: !secret api_encryption_key
ota:
- platform: esphome
password: !secret ota_password
# --- Component custom --------------------------------------------------------
# path = cartella CHE CONTIENE la cartella del componente (components/), non il
# componente stesso. ESPHome cerchera' components/hitachi_rar6ne1/ = componente
# "hitachi_rar6ne1". Mettere components/hitachi_rar6ne1 qui causa un import
# circolare perche' climate.py verrebbe scambiato per il core 'climate'.
external_components:
- source:
type: local
path: components
# --- IR: trasmettitore (invio comandi) ---------------------------------------
remote_transmitter:
id: tx
pin: GPIO25
carrier_duty_percent: 50%
# --- IR: ricevitore (sync col telecomando fisico) ----------------------------
remote_receiver:
id: rx
pin:
number: GPIO27
inverted: true
mode:
input: true
pullup: true
tolerance: 25%
# Il frame Hitachi e' 224 bit (~226 coppie = simboli RMT). Sull'ESP32 classico
# il default e' ~192 simboli -> il frame veniva TRONCATO e il decoder falliva.
# 1 simbolo RMT = 1 coppia mark/space. 384 da margine ampio e lascia memoria
# RMT al trasmettitore (totale 512 simboli su ESP32 classico).
rmt_symbols: 384
receive_symbols: 384
# DEBUG: riattiva solo per ispezionare i raw. Intasa i log e blocca il loop
# ~200ms per frame (stampa pronto) -> RX gia' validato, tenuto spento.
# dump: all
# --- Entita' climate ---------------------------------------------------------
climate:
- platform: hitachi_rar6ne1
id: hitachi_ac
name: "Condizionatore"
transmitter_id: tx
receiver_id: rx
# --- DEBUG: pulsante per test self-loopback ----------------------------------
# Premendolo, l'ESP trasmette un frame OFF di riferimento; se il LED IR illumina
# (anche di riflesso) il ricevitore, nei log compare "RX ok" + il dump dei byte.
# Rimuovi questa sezione a validazione conclusa.
button:
- platform: template
name: "Test IR loopback"
on_press:
- lambda: 'id(hitachi_ac).send_test_frame();'