KapfenbergTre luoghi, una quotidianitàRiscaldare e raffrescareLocale invece che cloudBruno

La stufa obbedisce di nuovo — per 55 euro invece di 299

La stufa a pellet accetta di nuovo potenza e temperatura. Ci sono voluti un convertitore da 32 euro, la giusta velocità di trasmissione e una riga di codice.

Il fronte della stufa a pellet da vicino, il fuoco dietro il vetro, a destra l’angolo della stanza.
Il fronte della stufa a pellet da vicino, il fuoco dietro il vetro, a destra l’angolo della stanza.

A Kapfenberg Bruno ha un posto preferito molto chiaro: davanti alla stufa a pellet. Quello che questa stufa non sapeva più fare da anni, dal 3 ottobre lo sa di nuovo — accetta potenza di riscaldamento e temperatura impostata da Home Assistant, non solo acceso e spento.

La domanda di partenza era semplice: prima c’era un modulo GSM collegato alla stufa, capace di più che accendere e spegnere. Non c’è più. Si può recuperare?

Sì. Entrambe le cose. E per circa 55 euro invece dei 299 che costa il modulo pronto. Ecco come — e dove mi sono sbagliato due volte di brutto.

Perché un relè non basta

Alla stufa era già collegato un relè sul contatto del termostato. Conosce esattamente due stati: aperto e chiuso. Quindi richiesta di calore sì o no.

È qui che finiscono quasi tutte le guide — ed è troppo poco. Chi vuole regolare la potenza o lavorare su una temperatura ambiente ha bisogno di un’altra strada.

Un avvertimento in premessa, perché torna di continuo nei commenti: «spegnere» dalla presa una stufa a pellet accesa non è domotica, è un danno annunciato. Interrompe la fase di post-ventilazione. Il contatto del termostato è la via giusta, la presa mai.

La presa a cui era collegato il vecchio modulo

Sul retro c’è una presa Sub-D a 15 poli. Lì era collegato il vecchio modulo GSM, e la stessa presa la usano anche le soluzioni di oggi.

La prova che lì si può fare più di acceso/spento era la storia stessa: una scatola capace di impostare potenza e temperatura non poteva essere collegata al contatto del termostato.

La piedinatura:

Pin Funzione
1 alimentazione 5 V
2 Rx — ingresso della stufa
3 Tx — uscita della stufa
4 linea TTL per il sensore ambiente
5, 15 massa

I pin 2 e 3 sono vero RS-232. Il pin 4 è un’altra cosa, cioè la linea TTL del sensore di temperatura. Questa distinzione sembra un dettaglio e mi è costata mezza giornata — ci torno più avanti.

La sorpresa: la stufa cerca un modem

Su questa presa la stufa si comporta come un PC che si aspetta un modem GSM. Interroga la memoria SMS con un comando AT ogni cinque secondi e mezzo. Se non riceve risposta, continua a chiedere. Se la risposta manca per mezzo minuto, disattiva la modalità GSM — e a riattivarla può essere solo una persona davanti al display.

Chi vuole usare questa interfaccia emula quindi un modem. I comandi arrivano sotto forma di SMS inventati, nel formato [codice] [comando] [parametro] — per esempio ON, h100 per la potenza massima o r21 per 21 gradi ambiente.

I componenti

Componente Sigla esatta Scopo Prezzo
Cavo DB15 Harrisen DB15, confezionato — rosso, marrone e verde chiaro vanno ai pin 3, 2 e 15 alla presa della stufa ~20 €
Convertitore seriale USR-DR162, seriale su Wi-Fi, con morsetti a vite porta l’interfaccia in rete 31,94 €
Alimentatore 12 V — alimenta il convertitore ~8 €
Sensore ambiente — avanzato dal vecchio kit —

Il convertitore seriale in mano: quattro spie con le scritte POW, WORK, COM e LINK, sotto una morsettiera verde con i fili collegati.

Questo è il pezzo da 32 euro. Le quattro spie dicono, nell’ordine: c’è corrente, l’apparecchio gira, i dati passano, il Wi-Fi è su. Quell’ordine è stato utile nella caccia al guasto — il codice sull’adesivo è stato oscurato.

Un connettore a 15 poli in mano, con singoli fili saldati a tre contatti e gli altri lasciati liberi.

Si usano tre contatti su quindici. Gli altri dodici appartengono alla vecchia piedinatura della presa e restano liberi — capire quali fossero i tre giusti è stata metà del lavoro di saldatura.

Non servono, benché previsti all’inizio: un ESP32 e un adattatore di livello. I timori sul livello del segnale erano infondati — i pin 2 e 3 sono vero RS-232.

Per confronto: il modulo di adattamento pronto costa 299 euro e fa la stessa cosa. Era un’alternativa seria, e la decisione è arrivata solo quando è stato chiaro che l’autocostruzione reggeva. Circa 55 euro contro 299 — con un programma di 200 righe.

La piedinatura non è mia. Viene da un messaggio di forum del 2013 in cui qualcuno aveva già misurato la stessa presa. Senza di lui il progetto sarebbe cominciato con un cercafase.

Sul convertitore vale la pena guardare il formato. La versione con morsetti a vite risparmia il cavo DB9 e l’adattatore di genere; il doppio banda aiuta in una casa in cui i 2,4 GHz sono già occupati da una dozzina di telecamere.

Il giorno in cui non arrivava nulla

Prima giornata di misure: cavo collegato, convertitore in rete, programma di registrazione attivo — e silenzio. Ogni cinque secondi e mezzo una manciata di byte senza senso, il cui numero si spostava con la frequenza di campionamento.

Quello che ne ho ricavato è la parte istruttiva.

Errore 1: ho letto uno schema nel rumore

Su uno dei fili arrivavano tre byte con un primo valore fisso e il resto variabile. Sembrava struttura. Ne ho concluso di aver trovato il filo giusto.

Era lo stesso artefatto di tutti gli altri, solo su un altro pin. Leggere un messaggio in uno schema dentro il rumore è l’errore classico — e la controprova che l’avrebbe smentito era già in corso.

Errore 2: un’ipotesi che non vedevo più come tale

Poi ho trovato in un progetto altrui la frase secondo cui la stufa usa logica a 5 volt sulla connessione seriale. Da lì ho costruito un guasto hardware: la presa porta TTL, il convertitore comprato è il dispositivo sbagliato, serve un ESP32.

Era sbagliato, e l’obiezione è arrivata subito: il TTL vale per il sensore di temperatura, non per la connessione seriale. È esattamente così — il pin 4 è TTL, i pin 2 e 3 sono RS-232.

La radice dell’errore: non avevo mai verificato se la presa portasse davvero RS-232, perché il modem originale ha «RS232» nel nome. Un’ipotesi così profonda da non vedersi più come ipotesi costa una giornata di misure.

Era la velocità di trasmissione

13:28:50.493  ATE0<CR>
13:28:56.035  ATE0<CR>
13:29:01.576  ATE0<CR>

ATE0 è il primo comando che si manda a un modem: eco disattivato. La stufa lo ripeteva ogni cinque secondi e mezzo perché non tornava mai un OK.

L’impostazione che funziona: 38400, 8N1. Altre documentazioni indicano 115200 per modelli diversi — e 38400 era l’unica velocità che non avevo mai provato.

Due ore su una riga

La stufa parlava, ma non accettava comandi. A ogni tentativo rispondeva FAILURE: code Error. Si legge come «codice di accesso sbagliato», ed è esattamente in quella direzione che ho cercato per due ore: codice reimpostato, numero del mittente accorciato, spazi nell’intestazione variati, fine riga scambiati, pause inserite.

Nove sospettati, tutti scagionati.

La causa era una riga nella mia trasposizione del progetto di riferimento: ho scartato il messaggio in attesa dopo la prima consegna. L’originale lo tiene pronto e lo riconsegna a ogni interrogazione finché la stufa non lo cancella esplicitamente. La mia stufa lo leggeva quindi solo a metà — e code Error non ha mai parlato del codice, ma di un messaggio letto a metà.

A trovarlo non è stata l’idea successiva, ma un cambio di strumento. Invece di una prova da un minuto per tentativo, una prova a serie consegnava otto varianti in un solo passaggio. Lì è saltato all’occhio che passava sempre il secondo messaggio di ogni coppia — e da lì alla soluzione è stato un passo.

La lezione non è «leggi fino in fondo la documentazione altrui». È: chi fa dodici tentativi singoli, dopo il terzo dovrebbe costruire lo strumento che ne fa dodici insieme.

16:08 — brucia

14:07:30  in coda:    ON
14:07:47  MESSAGGIO:  STOVE ON - HEAT 60%
14:08:22  in coda:    h100
14:08:43  MESSAGGIO:  STOVE ON - HEAT 100%

La presa intelligente lo ha confermato indipendentemente da qualsiasi messaggio: 277 watt invece di 2,5. L’accensione si sente, e la misura di potenza la mostra.

Curva di potenza nell’arco di un giorno: due picchi stretti a circa 280 watt, con una linea piatta intorno ai 30 watt tra l’uno e l’altro e dopo.

I due aghi sono le accensioni, il plateau intorno ai 30 watt è il funzionamento normale. È proprio questa curva il motivo per cui qui non esiste un sensore chiamato «brucia» — più sotto il perché.

Il retro di un sensore ambiente bianco e piatto, con un adesivo che indica tipo e grado di protezione.

Il sensore ambiente era rimasto dalla vecchia dotazione. Sul retro c’è scritto che cosa contiene — un semplice sensore resistivo, niente di digitale.

Più avanti, nello stesso progetto, il sensore ambiente, collegato ai pin 4 e 5 della stessa presa — un prima e dopo che non ha bisogno di interpretazioni:

prima:  r21  ->  FAILURE: text Error
dopo:   r21  ->  STOVE ON - ROOM 21

Così la domanda di partenza ha risposta. Potenza e temperatura.

L’errore più bizzarro del progetto

La stufa aggiungeva PLEASE SAVE TEL NUMBER a ogni risposta, benché il numero fosse memorizzato. Cinque spiegazioni, tutte smentite.

La soluzione era banale ed era nel registro da ore. Al salvataggio arrivava:

inviato  "+39..."   ->  memorizzato  "39..."
inviato  "0340..."  ->  memorizzato  "340..."

Si mangia il primo carattere, qualunque esso sia. Il rimedio è un carattere sacrificale — anteporre al numero un segno in più, e arriva completo.

Perché non l’ho trovato prima: ho chiesto cinque volte perché non accettasse il numero, e nemmeno una volta che cosa gli arrivasse — benché lo comunicasse in ogni singola risposta. La conferma era lì carattere per carattere, e l’ho letta come messaggio di successo invece che come misura.

Non è un difetto estetico: senza un numero valido la stufa non invia da sola le anomalie — ed è quello il vero guadagno di tutto il collegamento.

Cosa c’è in Home Assistant

Pagina di comando sul telefono: due pulsanti grandi per spento e acceso, sotto tre per il 30, 60 e 100 per cento di potenza, un cursore per la temperatura desiderata e un pulsante che regola sulla temperatura ambiente.

Così si presenta sul telefono. I tre livelli sono quelli che la stufa accetta attraverso la presa — il protocollo non dà di più.

Entità Significato
sensor.ofen_kapfenberg_meldung l’ultimo messaggio della stufa in chiaro
binary_sensor.ofen_kapfenberg_gsm se la stufa vede il suo modem
binary_sensor.ofen_kapfenberg_stoerung il messaggio inizia con FAILURE
rest_command.ofen_kapfenberg_befehl inviare un comando
script.ofen_kapfenberg_aus stufa spenta

In più un piccolo servizio sul Raspberry Pi che mantiene la connessione e risponde a ogni interrogazione della stufa. Deve restare attivo — non per comodità, ma perché altrimenti la stufa disattiva la modalità GSM dopo mezzo minuto senza risposta. Durante le prove è successo una dozzina di volte, ogni volta perché tra due esecuzioni non rispondeva nessuno.

Cosa manca di proposito

Nessun sensore di stato. Questo modello non conosce l’interrogazione di stato; arriva solo con una versione più recente del firmware. Non c’è quindi uno stato su richiesta, solo conferme ai comandi e messaggi che la stufa invia da sé.

Nessun sensore chiamato «brucia». L’impostazione e la potenza misurata non vengono combinate in un’affermazione. Una sera l’impostazione è rimasta al 30 per cento mentre la presa mostrava 263 W, poi 11 W, poi 29 W. Quale di questi fosse accensione, modulazione o spegnimento non lo dice nessuno dei due numeri da solo. Per questo l’attributo si chiama regt_sich, «si muove», e non «brucia». Un sensore che ne ricava una combustione afferma più di quanto sia misurato.

Per rifarlo

È tutto pubblico, con licenza MIT:

Questo progetto fritzzetik/rika-serial-homeassistant — componente aggiuntivo, pacchetto e la descrizione del formato dei messaggi
Il progetto di riferimento n-serrette/esphome_rika_gsm — stessa presa, ma via ESPHome e un microcontrollore
La piedinatura messaggio di forum del 2013
Il manuale del vecchio modulo RIKA GSM Pikatronic — lì sta il linguaggio dei comandi

Tutto è misurato su un Como del 2014. Secondo il manuale la stessa presa e lo stesso menu a tasti esistono anche su Memo, Pico, Revo e Topo — lì non provati, ma il protocollo è della stufa, non del modello.

Una nota sul progetto di riferimento, perché mi è costata una deduzione: nella sua pull request 5 c’è scritto che un’altra serie di stufe non ha bisogno del <LF> a fine riga. La stessa cosa l’avevo ricavata faticosamente da solo — stava lì da sempre. Per il Como però quella variante è sbagliata: lui li vuole entrambi.

Nessuno di questi link è pagato. Il confronto di prezzo ha bisogno di una fonte e i componenti devono essere identificabili — non c’è altro dietro.

E quindi?

Se possiedi un apparecchio di riscaldamento che doveva essere «intelligente» e non lo è più, conosci lo schema: l’apparecchio sta bene, manca solo il collegamento. Questo caso è più frequente di un guasto vero, e di solito si risolve senza sostituire l’apparecchio.

Tre cose che mi porto via:

  1. Verifica l’ipotesi che non vedi più. Ho perso una giornata perché «RS232» era nel nome di un prodotto.
  2. Dopo il terzo tentativo singolo, costruisci lo strumento. Dodici prove a mano trovano meno di un passaggio che confronta otto varianti.
  3. Non chiedere perché l’apparecchio ti rifiuta — chiedi che cosa gli arriva. La risposta era nel registro fin dall’inizio.

Il montaggio sulla presa è lavoro da ditta abilitata. Quanto scritto qui documenta il mio modo di procedere: non è un’autorizzazione a intervenire su impianti altrui.

Bruno non si è accorto di nulla. Continua a stare davanti alla stufa. Il sistema di comando non gli interessa finché il calore c’è — e ora c’è su richiesta.