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>
This commit is contained in:
96
esphome/hitachi-ir.yaml
Normal file
96
esphome/hitachi-ir.yaml
Normal file
@@ -0,0 +1,96 @@
|
||||
# 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();'
|
||||
Reference in New Issue
Block a user