Viessmann Energycal Slim W β Controllo Modbus
Documentazione per il controllo dei ventilconvettori Viessmann Energycal Slim W via Modbus RS485.
Hardware installatoβ
Modello: Viessmann Vitoset Energycal Slim W
Quantita': 5 ventilconvettori con comando autonomo touch
Comando: Comando autonomo touch con display LCD, telecomando IR, e porta Modbus RS485 sui morsetti A/B.
Dalla scheda tecnica ufficiale:
"Il morsetto AB e' anche una porta Modbus RS 485 interfacciabile con un sistema domotico esterno ed e' compatibile con il cronotermostato LCD Modbus a parete."
Foto del comando autonomo touchβ
Vista frontaleβ

Tasti: fiocco neve (freddo/caldo), power, ventilatore, frecce su/giu, conferma. Display LCD al centro.
PCB internoβ

Sulla sinistra della PCB si vedono i morsetti serigrafiati A B A' B' (Modbus RS485). Sulla destra i morsetti C P + (alimentazione).
Morsetti sul retro (montato a muro)β

6 fili totali:
| Posizione | Morsetto | Fili | Funzione |
|---|---|---|---|
| Sinistra | + C P | Rosso + nero | Alimentazione comando |
| Destra | A B | Bianco + marrone | Modbus RS485 (bus dati) |
| Centro | Connettore bianco | 2 fili bianchi sottili | Sonda temperatura NTC ambiente |
I fili bianco e marrone (A/B) vanno in daisy-chain da un ventilconvettore all'altro.
Specifiche tecnicheβ
Protocolloβ
| Parametro | Valore |
|---|---|
| Protocollo | Modbus RTU |
| Baud rate | 9600 |
| Data bits | 8 |
| Parity | None |
| Stop bits | 1 |
| Interfaccia fisica | RS485 (2 fili: A e B) |
Registri Modbus notiβ
Trovati da documentazione e forum (da verificare con scan):
| Registro | Descrizione | Accesso | Note |
|---|---|---|---|
| 0 | Temperatura ambiente (T1) | Lettura | Valore dal sensore NTC |
| 201 | Configurazione | Lettura/Scrittura | Bit-field (vedi sotto) |
| 231 | Setpoint temperatura | Lettura/Scrittura | Temperatura desiderata |
| 233 | Modo stagionale | Lettura/Scrittura | Caldo/freddo |
Registro 201 β Bit di configurazioneβ
| Bit | Funzione | Valori |
|---|---|---|
| 0-2 | Velocita' ventilatore | 0=AUTO, 1=MIN, 2=NIGHT, 3=MAX |
| 4 | Blocco tastiera | 0=sbloccato, 1=bloccato |
| 7 | Standby/ON | 0=standby, 1=acceso |
I registri sono stati ricavati da forum per ventilconvettori simili. Vanno confermati con uno scan sul proprio impianto prima di scrivere qualsiasi valore.
Architettura collegamentoβ
Controller RS485
(T-CAN485 oppure Pico W + HAT)
ββββββββββββββββββββββββββββββββ
β RS485 TX/RX β
β WiFi per comunicazione β
ββββββββββββββββ¬ββββββββββββββββ
β
Viessmann bus
(9600 baud)
β
A βββ¬βββββββ¬βββββββ¬βββββββ¬βββββββ
B βββ¬βββββββ¬βββββββ¬βββββββ¬βββββββ
β β β β β
Slim W Slim W Slim W Slim W Slim W
addr 1 addr 2 addr 3 addr 4 addr 5
(stanza1)(stanza2)(stanza3)(stanza4)(stanza5)
Il controller si collega ai morsetti A e B di un qualsiasi ventilconvettore (sono tutti in daisy-chain). Da li' comunica con tutti e 5 specificando l'indirizzo Modbus. Un singolo canale RS485 e' sufficiente: tutti i dispositivi condividono lo stesso bus con indirizzi diversi (1-247).
Indirizzo Modbusβ
Ogni ventilconvettore ha un indirizzo diverso (1-247), configurabile dal display del comando touch. Di default probabilmente sono tutti a indirizzo 1 β vanno configurati uno per uno (1, 2, 3, 4, 5).
Hardware controller β Due alternativeβ
Opzione A: LilyGo T-CAN485 (scelta attuale)β
Stato: Ordinato (ordine #F007RVXXJ, $11.86 + $8.50 spedizione)
Board all-in-one con ESP32 integrato. Non serve un microcontroller separato.
| Parametro | Valore |
|---|---|
| MCU | ESP32 dual-core 240MHz, 4MB flash |
| WiFi | 802.11 b/g/n |
| Bluetooth | BLE 4.2 |
| RS485 | 1 canale, chip MAX13487EESA+ (auto-direction) |
| CAN bus | SN65HVD231 (disponibile per uso futuro) |
| SD card | Slot micro SD per log locale |
| USB-UART | CH9102F |
| Alimentazione | 5-12V (DC jack o morsetti) |
| LED | WS2812 RGB su IO4 |
| IDE | Arduino IDE / PlatformIO |
| Repo ufficiale | Xinyuan-LilyGO/T-CAN485 |
Costo totale: ~$20.36 (board + spedizione)
Pin mapping (da pin_config.h ufficiale)β
RS485 (chip: MAX13487EESA+)
| Define | Pin ESP32 | Funzione |
|---|---|---|
| RS485_TX | IO22 | TX dati verso bus |
| RS485_RX | IO21 | RX dati dal bus |
| RS485_CALLBACK (RE) | IO17 | Receiver Enable β disabilita echo (HIGH = no echo) |
| RS485_EN (SHUTDOWN) | IO19 | Shutdown pin β abilita transceiver (HIGH = attivo) |
Alimentazione (chip: ME2107A50M5G boost converter)
| Define | Pin ESP32 | Funzione |
|---|---|---|
| ME2107_EN | IO16 | Enable boost 5V per RS485 + CAN (HIGH = attivo) |
CAN bus (chip: SN65HVD231)
| Define | Pin ESP32 | Funzione |
|---|---|---|
| CAN_TX | IO27 | TX |
| CAN_RX | IO26 | RX |
| CAN_SPEED_MODE | IO23 | Selezione velocita' (LOW = high speed) |
SD card
| Define | Pin ESP32 |
|---|---|
| SD_MISO | IO2 |
| SD_MOSI | IO15 |
| SD_SCLK | IO14 |
| SD_CS | IO13 |
LED RGB (WS2812B)
| Define | Pin ESP32 |
|---|---|
| WS2812B_DATA | IO4 |
Collegamento fisico T-CAN485β
- Collegare il filo A del terminale RS485 del T-CAN485 al morsetto A del ventilconvettore
- Collegare il filo B del terminale RS485 del T-CAN485 al morsetto B del ventilconvettore
- Alimentare il T-CAN485 via USB-C (5V) o DC jack (5-12V)
LilyGo T-CAN485
ββββββββββββββββββββββββββββββββββββ
β ESP32 + WiFi + BLE β
β β
β ME2107_EN (IO16) β boost power β
β RS485_EN (IO19) β transceiver β
β RS485_CB (IO17) β no echo β
β RS485: TX=IO22, RX=IO21 β
β [A] [B] β
β β β β
β CAN: [H] [L] (futuro) β
β SD: slot micro SD β
β LED: WS2812 su IO4 β
ββββββββββββββββββββββββββββββββββββ
β β
Viessmann bus (daisy-chain 5x Slim W)
Esempi ufficiali dal repo GitHubβ
Il repo T-CAN485 include 7 esempi Arduino (richiede arduino_esp32_v3.0.1):
| Esempio | Cosa fa | Utile per noi |
|---|---|---|
| RS485 | Invia una richiesta Modbus RTU raw (0x01 0x03 0x00 0x00 0x00 0x04) e legge la risposta. Init completo di boost + transceiver. | SI β base per lo scanner |
| RS485_WS2812B | Invio/ricezione RS485 tra due board + LED RGB come indicatore stato (blu=invio, verde=ricezione) | Si β test RS485 con feedback visivo |
| CAN | Comunicazione CAN bus tra due board via TWAI driver ESP32 a 500kbit/s | No β non serve per Viessmann |
| SD | Rileva SD card, legge tipo (MMC/SDSC/SDHC) e dimensione | Si β per log locale |
| WIFI_HTTP_Download_File | Connessione WiFi + download file HTTP con misura velocita' | Si β test connettivita' WiFi |
| WS2812B_Blink | Lampeggio LED RGB (rossoβverdeβbluβbiancoβspento) | Si β test LED funzionante |
| Original_Test | Test di fabbrica completo: WiFi scan + HTTP download + SD card + RS485 loopback + CAN loopback + LED | Si β verifica che tutto funzioni |
L'esempio RS485 e' gia' un client Modbus RTU! Invia {0x01, 0x03, 0x00, 0x00, 0x00, 0x04, 0x44, 0x09} che e':
0x01= indirizzo slave 10x03= function code Read Holding Registers0x00 0x00= registro iniziale 00x00 0x04= leggi 4 registri0x44 0x09= CRC16
Basta cambiare il baudrate a 9600 e scansionare gli indirizzi 1-247 per trovare i ventilconvettori.
Sequenza init RS485 (dal codice ufficiale)β
// 1. Accendi boost power supply (alimenta RS485 e CAN)
pinMode(ME2107_EN, OUTPUT); // IO16
digitalWrite(ME2107_EN, HIGH);
// 2. Abilita transceiver RS485 (MAX13487E shutdown pin)
pinMode(RS485_EN, OUTPUT); // IO19
digitalWrite(RS485_EN, HIGH);
// 3. Disabilita echo (MAX13487E receiver enable)
pinMode(RS485_CALLBACK, OUTPUT); // IO17
digitalWrite(RS485_CALLBACK, HIGH);
// 4. Inizializza UART su pin RS485
Serial1.begin(9600, SERIAL_8N1, RS485_RX, RS485_TX); // IO21, IO22
Setting Arduino IDE per T-CAN485β
| Parametro | Valore |
|---|---|
| Board | ESP32 Dev Module |
| Upload Speed | 921600 |
| CPU Frequency | 240MHz (WiFi) |
| Flash Mode | QIO |
| Flash Size | 4MB (32Mb) |
| Core Debug Level | None |
| PSRAM | Disable |
| Arduino Runs On | Core 1 |
Se il download fallisce, tenere premuto il tasto BOOT-0 sulla board e riprovare.
Opzione B: Pico W + Waveshare Pico-2CH-RS485 HAT (alternativa)β
Richiede un Pico W separato come microcontroller. Ha 2 canali RS485 indipendenti.
| Componente | Descrizione | Prezzo |
|---|---|---|
| Pico W | Microcontroller WiFi (RP2040) | gia' in possesso |
| Waveshare Pico-2CH-RS485 | Adattatore RS485 2 canali HAT |
| Parametro | Valore |
|---|---|
| Transceiver | SP3485 (RS485) |
| Tensione operativa | 3.3V |
| Baudrate supportato | 300 ~ 500.000 bps |
| Canali RS485 | 2 (indipendenti) |
| Protezione | SMAJ12CA TVS (soppressore transienti) |
| Montaggio | Header femmina, si incastra direttamente sul Pico W |
Pin mapping HAT RS485β
| Canale | Funzione | Pin Pico W | UART |
|---|---|---|---|
| CH0 | TX | GP0 | UART0 TX |
| CH0 | RX | GP1 | UART0 RX |
| CH1 | TX | GP4 | UART1 TX |
| CH1 | RX | GP5 | UART1 RX |
Collegamento fisico Pico W + HATβ
- Montare il HAT RS485 sul Pico W (si incastra sui pin header)
- Collegare il filo A del terminale CH0 del HAT al morsetto A del ventilconvettore
- Collegare il filo B del terminale CH0 del HAT al morsetto B del ventilconvettore
- Alimentare il Pico W via USB (5V)
Pico W + Pico-2CH-RS485 HAT
βββββββββββββββββββββββββββββββ
β CH0 (UART0) CH1 (UART1) β
β GP0=TX GP4=TX β
β GP1=RX GP5=RX β
β [A] [B] [A] [B] β
β β β β β β
βββββββββββββββββββββββββββββββ
β β β β
β β (libero per
β β SDM120, XY-MD02...)
β β
Viessmann bus (daisy-chain 5x Slim W)
Confronto opzioniβ
| T-CAN485 | Pico W + HAT RS485 | |
|---|---|---|
| Prezzo totale | ~$20 | ~$11 (Pico W gia' posseduto) |
| MCU integrato | Si (ESP32) | No (serve Pico W) |
| WiFi | Si | Si (Pico W) |
| Canali RS485 | 1 | 2 |
| CAN bus | Si | No |
| SD card | Si | No |
| LED RGB | Si (WS2812) | No |
| IDE | Arduino/PlatformIO | MicroPython/C SDK |
| Esempi Modbus | Si (nel repo) | No |
Piano di implementazioneβ
Step 1 β Ricevere T-CAN485β
LilyGo T-CAN485 CH9102F β ordinato ($11.86, ordine #F007RVXXJ). Spedizione YunTu Express.
Step 2 β Test hardware (Original_Test)β
Flashare l'esempio Original_Test dal repo per verificare che WiFi, RS485, CAN, SD e LED funzionino tutti correttamente.
Step 3 β Firmware scanner indirizzi (Arduino IDE)β
Partire dall'esempio RS485 del repo e adattarlo:
// T-CAN485 β Init sequenza (da esempio ufficiale LilyGo):
// 1. digitalWrite(ME2107_EN, HIGH); // IO16 β accendi boost power
// 2. digitalWrite(RS485_EN, HIGH); // IO19 β abilita transceiver
// 3. digitalWrite(RS485_CALLBACK, HIGH); // IO17 β disabilita echo
// 4. Serial1.begin(9600, SERIAL_8N1, RS485_RX, RS485_TX); // IO21, IO22
//
// Baudrate: 9600, 8N1 (come da specifica Viessmann)
// Libreria: ModbusMaster (Arduino) oppure raw come nell'esempio
//
// Per ogni indirizzo 1-247:
// - Invia richiesta Modbus RTU: read holding register 0 (temperatura)
// - Aspetta risposta (timeout 500ms come nell'esempio)
// - Se risponde β ventilconvettore trovato
// - Logga indirizzo + temperatura su Serial + SD card
Step 4 β Firmware scanner registriβ
Per ogni ventilconvettore trovato, scansionare i registri 0-300:
// Per ogni registro 0-300:
// - Leggi holding register (function code 0x03)
// - Leggi input register (function code 0x04)
// - Se risponde β logga registro + valore su Serial + SD card
Questo conferma la mappa registri reale del nostro modello.
Step 5 β Firmware di controlloβ
Firmware Arduino/PlatformIO completo che:
- Legge temperatura da tutti e 5 i ventilconvettori
- Cambia setpoint via WiFi (API REST o MQTT)
- Programma accensione/spegnimento
- Invia dati al backend VISLA
- Logga su SD card come backup
Step 6 β Integrazione displayβ
Mostrare i dati di tutti e 5 i ventilconvettori sul display ESP32 (rotondo o rettangolare) dalla repo visla-display.
Funzionalita' finaliβ
- Leggere temperatura di ogni stanza in tempo reale
- Cambiare setpoint individuale per stanza
- Accendere/spegnere singolarmente
- Programmare orari (mattina, sera, notte, weekend)
- Geofencing GPS: accendi quando arrivi a casa (integrazione con tracker VISLA)
- Dashboard cloud via backend VISLA
- Notifiche se temperatura fuori range
Taglie disponibili Energycal Slim Wβ
Dal datasheet ufficiale (04/2022):
| Taglia | Potenza riscaldamento (50Β°C) | Potenza raffrescamento | Portata aria max | Peso |
|---|---|---|---|---|
| 200 | 1,05 kW | 0,82 kW | 160 mΒ³/h | 11,5 kg |
| 400 | 2,31 kW | 1,74 kW | 320 mΒ³/h | 13 kg |
| 600 | 3,12 kW | 2,54 kW | 460 mΒ³/h | 15,5 kg |
| 800 | 4,10 kW | 3,29 kW | 575 mΒ³/h | 18,5 kg |
| 1000 | 4,67 kW | 3,78 kW | 650 mΒ³/h | 21,5 kg |
| 1400 | 5,50 kW | 4,45 kW | 765 mΒ³/h | 22,5 kg |
| 1600 | 5,90 kW | 4,85 kW | 820 mΒ³/h | 24 kg |
Attacchi idraulici: 3/4" Eurocono per tutte le taglie. Pressione max: 10 bar.