Vito Wi Fi

Communicate with Viessmann boilers using the optolink for ESP8266 and ESP32

Internet of Things (IoT)C++MIT

Abstract

Vito Wi Fi is an open-source Internet of Things (IoT) project. Communicate with Viessmann boilers using the optolink for ESP8266 and ESP32. Library for ESP32, ESP8266 and Linux to communicate with Viessmann systems using a (DIY) serial optolink. It is built using C++, ESP8266, ESP32, Arduino. Key capabilities include: VS1 (KW) and VS2 (P300) support. The older GWG protocol is also supported; Non-blocking API calls; For the Arduino framework and POSIX systems (Linux, tested on a Raspberry Pi 1B). The complete source code is publicly available on GitHub under the MIT License, making it a useful reference for students building an Internet of Things (IoT) mini project or final-year project.

1. Introduction

Library for ESP32, ESP8266 and Linux to communicate with Viessmann systems using a (DIY) serial optolink.

2. Objective

Communicate with Viessmann boilers using the optolink for ESP8266 and ESP32

This project demonstrates how C++, ESP8266, ESP32 can be applied to a real-world Internet of Things (IoT) problem.

3. Key Features / Modules

  • VS1 (KW) and VS2 (P300) support. The older GWG protocol is also supported.
  • Non-blocking API calls
  • For the Arduino framework and POSIX systems (Linux, tested on a Raspberry Pi 1B)
  • Maximum flexibility for communication by supporting standard UART interfaces (HardwareSerial, SoftwareSerial on ESP8266) as well as a custom user-created interface.

4. Technology Stack

C++ESP8266ESP32Arduino

5. System Requirements

General requirements for this technology stack — check the README for exact versions.

  • Arduino IDE / PlatformIO or a C++ compiler (g++)
  • Target board (e.g. Arduino, ESP32) where applicable
  • Git (to clone the repository)

6. Installation & Setup

git clone https://github.com/bertmelis/VitoWiFi.git
cd VitoWiFi
  1. For Arduino IDE: see the Arduino Guide
  2. For Platformio: see the Platfomio registry page for VitoWifi
  3. define your VitoWiFi object and specify the protocol and interface
  4. define all needed datapoints
  5. create callback for when data or errors are returned (std::function supported)
  6. in void setup()
  7. attach the callbacks
  8. start VitoWiFi
// create a collection (array) of datapoints:
VitoWiFi::Datapoint datapoints[] = {
  VitoWiFi::Datapoint("outside temp", 0x5525, 2, VitoWiFi::div10),
  VitoWiFi::Datapoint("boiler temp", 0x0810, 2, VitoWiFi::div10),
  VitoWiFi::Datapoint("pump status", 0x2906, 1, VitoWiFi::noconv)
};
int numberDatapoints = 3;
int currentIndex = -1;

// to start reading, set currentIndex to 0
if (currentIndex >= 0) {
  // reading will return `true` when successful.
  // as long as VitoWiFi is busy it will return `false`
  if (myVitoWiFi.read(datapoints[currentIndex])) {
    ++currentIndex;
    if (currentIndex == numberDatapoints) currentIndex = -1;
  }
}

Full setup instructions are in the project README.

7. Future Enhancements

Suggested extensions you can add to make this your own project.

  • Add a mobile dashboard using Blynk or Firebase
  • Store readings in a cloud database for history charts
  • Add alerts via SMS / Telegram when thresholds are crossed

8. Viva / Review Questions

Common questions examiners ask for projects in this domain.

  1. Which microcontroller / board and sensors are used and why?
  2. How does the device send data (Wi-Fi, MQTT, HTTP, Bluetooth)?
  3. Where is the sensor data stored and visualised?
  4. How is power consumption managed?
  5. How would you secure the device and its communication?

9. Source Code & License

This project is developed by bertmelis and published on GitHub under the MIT License. Please follow the license terms and credit the original author when you use or modify this code.

Want to build this as your internship project?

Work on an Internet of Things (IoT) project like this with mentor guidance, weekly reviews and an internship certificate from Training Trains, Erode — online or offline.

Apply for Internet of Things (IoT) Internship