From e5105296859545071af95ed5cb5a2bf4be97e706 Mon Sep 17 00:00:00 2001 From: truetype Date: Mon, 25 May 2026 22:45:33 +0200 Subject: [PATCH] wifi_ir: progetto Go.Comma R9 - documentazione, script flash e setup --- README.md | 42 +++++++++++++++++++++++++ docs/flash.md | 75 ++++++++++++++++++++++++++++++++++++++++++++ docs/hardware.md | 47 +++++++++++++++++++++++++++ docs/tuya-convert.md | 39 +++++++++++++++++++++++ scripts/flash.sh | 62 ++++++++++++++++++++++++++++++++++++ scripts/setup.sh | 36 +++++++++++++++++++++ 6 files changed, 301 insertions(+) create mode 100644 README.md create mode 100644 docs/flash.md create mode 100644 docs/hardware.md create mode 100644 docs/tuya-convert.md create mode 100755 scripts/flash.sh create mode 100755 scripts/setup.sh diff --git a/README.md b/README.md new file mode 100644 index 0000000..bb85149 --- /dev/null +++ b/README.md @@ -0,0 +1,42 @@ +# wifi_ir — Controllo IR locale via Go.Comma R9 + +Trasforma il Go.Comma R9 Smart Remote in un controller IR locale: cattura comandi del climatizzatore e li riproduce via webapp. Niente cloud, niente app proprietaria. + +## Stato + +- **Go.Comma R9**: identificato (ESP8266 TYWE3S, 2MB flash) +- **Flash OTA (tuya-convert)**: tentato, fallito — firmware Tuya troppo recente +- **Flash seriale**: **in attesa di USB-UART** — acquistare cavetto CH340/CP2102 (~3€) + +## Hardware + +| Componente | Dettaglio | +|---|---| +| Telecomando | Go.Comma R9 Smart Remote | +| Modulo | ESP8266 TYWE3S (2MB flash) | +| IR TX | GPIO14 (7 LED IR) | +| IR RX | GPIO5 | +| LED | GPIO4 | +| Pulsante | GPIO13 | + +## Contenuto + +- `docs/hardware.md` — Specifiche e pinout +- `docs/flash.md` — Guida al flash Tasmota via seriale +- `docs/tuya-convert.md` — Tentativo OTA fatto +- `scripts/flash.sh` — Script per flashare Tasmota +- `scripts/setup.sh` — Setup Rock Pi 4 + +## Roadmap + +1. ✅ Hardware identificato +2. ✅ Tentativo OTA (tuya-convert) — fallito +3. ⬜ Flash Tasmota via seriale (con USB-UART) +4. ⬜ Sviluppo webapp IR (cattura/riproduzione comandi) +5. ⬜ Opzionale: database IR per codici predefiniti + +## Ambiente + +- **Rock Pi 4 C Plus**: rock@10.6.133.56 (ZeroTier) / 192.168.0.215 (LAN) +- **Ollama**: 192.168.0.50:11434 +- **Proxmox container**: 192.168.0.240 diff --git a/docs/flash.md b/docs/flash.md new file mode 100644 index 0000000..2145ce0 --- /dev/null +++ b/docs/flash.md @@ -0,0 +1,75 @@ +# Flash Tasmota via Seriale + +## Prerequisiti + +- [ ] USB-UART (CH340G o CP2102, ~3€) +- [ ] 3 fili jumper femmina-femmina +- [ ] Go.Comma R9 aperto (4 viti sotto piedini in gomma) +- [ ] Rock Pi 4 acceso e raggiungibile + +## Passi + +### 1. Collega USB-UART al Rock Pi + +Inserisci il cavetto in una porta USB del Rock Pi. +Verifica con: + +```bash +ls /dev/ttyUSB* # o /dev/ttyACM* +``` + +### 2. Collega i fili al Go.Comma R9 + +Vedi `docs/hardware.md` per lo schema esatto. + +**Attenzione**: GPIO0 va collegato a GND prima di accendere per entrare in flash mode. + +### 3. Installa esptool.py (già fatto) + +```bash +pip3 install esptool +``` + +### 4. Verifica connessione + +```bash +esptool.py --port /dev/ttyUSB0 flash_id +``` + +Dovresti vedere il chip ID dell'ESP8266. + +### 5. Scarica Tasmota + +```bash +wget https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota.bin +``` + +### 6. Flasha Tasmota + +```bash +esptool.py --port /dev/ttyUSB0 --baud 115200 \ + write_flash --flash_size=2MB 0x0 tasmota.bin +``` + +### 7. Template Tasmota + +Dopo il flash, connettiti al WiFi `tasmota-XXXX` e configura il template: + +```json +{"NAME":"Go.Comma R9","GPIO":[1,1,1,1,1,1,1,1,1,1,1,1,1,1],"FLAG":0,"BASE":18} +``` + +| GPIO | Funzione | +|---|---| +| GPIO14 | IRsend | +| GPIO5 | IRrecv | +| GPIO4 | LED (opzionale) | +| GPIO13 | Button (opzionale) | + +### 8. Alternative: ESPHome + +In alternativa a Tasmota, si può usare ESPHome con il componente `ir_transmitter` e `ir_receiver_climate`. + +## Script automatizzato + +Vedi `scripts/flash.sh` per una versione automatizzata. diff --git a/docs/hardware.md b/docs/hardware.md new file mode 100644 index 0000000..cd535c4 --- /dev/null +++ b/docs/hardware.md @@ -0,0 +1,47 @@ +# Hardware Go.Comma R9 + +## Specifiche + +| Specifica | Valore | +|---|---| +| Modello | Go.Comma R9 Smart Remote | +| Chip WiFi | ESP8266 (Tensilica Xtensa LX106) | +| Modulo | TYWE3S (2MB flash) | +| LED IR | 7 LED a 38KHz | +| Ricevitore IR | TSOP38238 o equivalente (38KHz) | +| Tensione | 5V (USB) / 3.3V (modulo) | + +## Pinout TYWE3S sul PCB + +Il modulo TYWE3S ha 14 pin a semicerchio. Sui pad del PCB sono serigrafate le connessioni: + +| Pin TYWE3S | Funzione Go.Comma | Utilizzo flashing | +|---|---|---| +| TX (GPIO1) | — | ← RX USB-UART | +| RX (GPIO3) | — | → TX USB-UART | +| GND | — | GND | +| GPIO0 | Flash mode | → GND (per flash) | +| GPIO14 | **IR TX** (7 LED) | — | +| GPIO5 | **IR RX** (ricevitore) | — | +| GPIO4 | **LED** (indicatore) | — | +| GPIO13 | **Pulsante** (fisico) | — | +| 3.3V | Alimentazione modulo | Già alimentato | +| RST | Reset | — | +| EN (CH_PD) | Chip enable | — | + +## Schema collegamenti USB-UART + +``` +USB-UART (CH340/CP2102) Go.Comma R9 (PCB) +══════════════════════ ═════════════════ + TX ─────────────────▶ RX (pad sul PCB) + RX ◀───────────────── TX (pad sul PCB) + GND ───────────────── GND + GND ───────────────── GPIO0 (pad, per flash mode) +``` + +**Note**: +- Usare 3.3V, NON 5V — l'ESP8266 lavora a 3.3V +- Collegare GPIO0 a GND PRIMA di accendere il telecomando +- Il telecomando ha la sua alimentazione (pile), non serve VCC esterno +- Rimuovere GPIO0 da GND dopo il flash diff --git a/docs/tuya-convert.md b/docs/tuya-convert.md new file mode 100644 index 0000000..c1cfd8c --- /dev/null +++ b/docs/tuya-convert.md @@ -0,0 +1,39 @@ +# Tentativo Flash OTA via tuya-convert + +## Setup + +- Clonato tuya-convert v2.4.6 su Rock Pi: `/home/rock/tuya-convert/` +- NetworkManager configurato, WiFi power management disabilitato +- Config: `WLAN=wlan0`, `AP=vtrust-flash` + +## Esecuzione + +Dispositivo messo in pairing mode (LED lampeggio veloce) ed eseguito: + +```bash +./setup.sh +``` + +## Risultato: FALLITO + +``` +Your device's firmware is too new. Tuya patched the PSK vulnerability +that we use to establish a connection. You might still be able to +flash this device over serial. +``` + +## Causa + +Il Go.Comma R9 monta un firmware Tuya recente che ha la vulnerabilità PSK-Identity-02 +corretta. tuya-convert sfrutta questa falla per intercettare l'handshake WiFi +durante il pairing — con la correzione, l'attacco non funziona più. + +## Conclusione + +- ✅ tuya-convert non supporta ESP8266 con firmware recente +- ❌ CloudCutter non supporta ESP8266 (solo Beken/Realtek) +- ✅ **Unica strada**: flash seriale con USB-UART (~3€) + +Riferimenti: +- https://github.com/ct-Open-Source/tuya-convert +- https://github.com/tuya-cloudcutter/tuya-cloudcutter diff --git a/scripts/flash.sh b/scripts/flash.sh new file mode 100755 index 0000000..dda6547 --- /dev/null +++ b/scripts/flash.sh @@ -0,0 +1,62 @@ +#!/bin/bash +# Script per flashare Tasmota su Go.Comma R9 via seriale +# Uso: ./flash.sh [porta] +# Default: /dev/ttyUSB0 + +PORT="${1:-/dev/ttyUSB0}" +BAUD=115200 +TASMOTA_URL="https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota.bin" +TASMOTA_FILE="tasmota.bin" + +echo "=== Flash Tasmota su Go.Comma R9 ===" +echo "Porta: $PORT" +echo "" + +# Verifica porta +if [ ! -e "$PORT" ]; then + echo "ERRORE: $PORT non trovato." + echo "Collega USB-UART e verifica con: ls /dev/ttyUSB*" + exit 1 +fi + +# Verifica esptool +if ! command -v esptool.py &> /dev/null; then + echo "esptool.py non trovato. Installo..." + pip3 install esptool +fi + +# Verifica connessione +echo "Verifico connessione..." +esptool.py --port "$PORT" flash_id +if [ $? -ne 0 ]; then + echo "" + echo "ERRORE: connessione fallita. Verifica:" + echo " 1. GPIO0 è collegato a GND?" + echo " 2. TX↔RX collegati correttamente?" + echo " 3. Il telecomando è acceso (con pile)?" + exit 1 +fi + +# Scarica Tasmota +if [ ! -f "$TASMOTA_FILE" ]; then + echo "Scarico Tasmota..." + wget "$TASMOTA_URL" -O "$TASMOTA_FILE" +fi + +# Flash +echo "Flash in corso..." +esptool.py --port "$PORT" --baud "$BAUD" \ + write_flash --flash_size=2MB 0x0 "$TASMOTA_FILE" + +if [ $? -eq 0 ]; then + echo "" + echo "✓ Flash completato!" + echo "1. Rimuovi GPIO0 da GND" + echo "2. Spegni e riaccendi il telecomando" + echo "3. Connettiti al WiFi 'tasmota-XXXX'" + echo "4. Vai a http://192.168.4.1 e configura" +else + echo "" + echo "ERRORE: flash fallito." + exit 1 +fi diff --git a/scripts/setup.sh b/scripts/setup.sh new file mode 100755 index 0000000..dce81dc --- /dev/null +++ b/scripts/setup.sh @@ -0,0 +1,36 @@ +#!/bin/bash +# Setup Rock Pi 4 C Plus per progetto wifi_ir +# Eseguito già manualmente, tenuto per ripristino futuro + +echo "=== Setup Rock Pi per wifi_ir ===" + +# Install dipendenze base +echo "Installazione dipendenze..." +sudo apt-get update -qq +sudo apt-get install -y -qq git python3 python3-pip screen + +# Docker +echo "Installazione Docker..." +curl -fsSL https://get.docker.com | sudo bash + +# esptool +echo "Installazione esptool..." +pip3 install --user esptool + +# Disabilita WiFi power management +echo "Disabilito WiFi power management..." +sudo iw dev wlan0 set power_save off + +# NetworkManager (per tuya-convert) +echo "Configurazione NetworkManager..." +sudo systemctl enable NetworkManager +sudo systemctl start NetworkManager + +echo "" +echo "✓ Setup completato" +echo "Rock Pi pronto per flash Tasmota via seriale." +echo "" +echo "Comandi utili:" +echo " ls /dev/ttyUSB* — verifica USB-UART" +echo " esptool.py flash_id — verifica ESP8266" +echo " ./scripts/flash.sh — flasha Tasmota"