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>
97 lines
3.1 KiB
YAML
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();'
|