viss2mqtt holt die Betriebsdaten einer Viessmann-Heizung über die OptoLink-Schnittstelle nach Symcon. Die Kommunikation mit der Heizung übernimmt vcontrold
. viss2mqtt fragt die Werte regelmäßig ab, wandelt sie in passende Typen um, verwirft unplausible Werte und veröffentlicht das Ergebnis als ein JSON-Objekt auf einem MQTT-Topic. Entwickelt und getestet ist es mit einer Vitotronic 150 KB1 (Device-ID 2092, Protokoll KW2).
vcontrold und viss2mqtt laufen auf einem eigenen Rechner direkt an der Heizung, etwa einem Raspberry Pi. Symcon bekommt die Daten nur per MQTT und greift nicht selbst auf vcontrold zu.
Vitotronic ──OptoLink──> vcontrold ──> vclient ──> viss2mqtt ──MQTT──> Symcon
150 KB1 /dev/ttyVITO (Daemon) (cron) (Python) :1883 MQTT Server
Die Funktionen im Überblick
- Zwei Abfragen: ein voller Lauf alle 5 Minuten mit 34 Werten und ein Schnelllauf jede Minute mit Brennerstatus, Brennerstarts sowie Außen-, Kessel- und Warmwassertemperatur
- Kein gleichzeitiger Zugriff: Beide Läufe teilen sich ein Lock (
flock), fällt der Schnelllauf in einen vollen Lauf, wartet er - Plausibilitätsprüfung: Messwerte außerhalb fester Grenzen und unmögliche Sprünge bei Zählerständen werden vor dem Versand verworfen
- Saubere Typen: Zahlen, Bool-Werte, Texte und Unix-Zeitstempel statt Rohtext
- Nur gültige Werte: Fehlende oder verworfene Werte werden nicht mitgeschickt, Symcon behält dann den letzten gültigen Wert
- Bereinigte vcontrold-Konfiguration: Gerätedefinition mit geprüften Befehlen, Schreibzugriff nur auf wenige unkritische Werte
- Updates per Git:
deploy.shholt Änderungen, prüft sie und setzt bei Fehlern auf den vorherigen Stand zurück
Voraussetzungen
- Viessmann-Heizung mit OptoLink-Schnittstelle (getestet: Vitotronic 150 KB1)
- OptoLink-Adapter (USB oder seriell), z. B. per udev-Regel als
/dev/ttyVITOeingebunden - Linux-Rechner mit vcontrold/vclient,
git,flockund Python 3 - paho-mqtt ab Version 2.0
- ein MQTT-Broker, z. B. die MQTT-Server-Instanz in Symcon
Installation
vcontrold wird nach der Anleitung des openv-Projekts
installiert und als Dienst eingerichtet. Danach wird viss2mqtt als normaler Benutzer direkt nach /opt/viss2mqtt geklont:
sudo mkdir /opt/viss2mqtt
sudo chown $USER: /opt/viss2mqtt
git clone https://github.com/Wilkware/viss2mqtt.git /opt/viss2mqtt
/opt/viss2mqtt/install.sh
install.sh richtet die Cronjobs unter /etc/cron.d/viss2mqtt ein, verteilt die vcontrold-Konfiguration nach /etc/vcontrold/ und startet einen Testlauf. Die Jobs brauchen keine root-Rechte. Spätere Updates spielt deploy.sh ein:
/opt/viss2mqtt/deploy.sh # git pull, prüfen, verteilen, Testlauf
/opt/viss2mqtt/deploy.sh --dry-run # nur anzeigen, was sich ändern würde
Konfiguration
Die Einstellungen stehen am Anfang der beiden Templates viss2mqtt.tpl und viss2mqtt-fast.tpl:
| Konstante | Beschreibung | Standard |
|---|---|---|
MQTT_CLID | Client-ID am Broker, je Lauf eindeutig | viss2mqtt / viss2mqtt-fast |
MQTT_SERV | IP-Adresse des MQTT-Brokers | – |
MQTT_PORT | Port des MQTT-Brokers | 1883 |
MQTT_TOPIC | Topic, auf dem das JSON veröffentlicht wird | viss2mqtt/vito |
STATE_FILE | Letzte gültige Zählerstände für die Plausibilitätsprüfung | /opt/viss2mqtt/state.json |
Welche Werte abgefragt werden, legen die .lst-Dateien fest. Die Platzhalter im Template sind über die Zeilennummer an die Befehlsliste gebunden, deshalb werden .lst und .tpl immer gemeinsam geändert.
So sieht die Nachricht aus
Der Schnelllauf sendet zum Beispiel:
{
"getBrennerStatus": true,
"getBrennerStarts": 45410,
"getTempA": 14.6,
"getTempKist": 52.8,
"getTempWWist": 46.8
}
Der volle Lauf ergänzt unter anderem Soll- und gefilterte Temperaturen, Brennerstufe und Betriebsstunden, Pumpenstatus, Betriebsart, Systemzeit und die Fehlerhistorie der Heizung.
Einbindung in Symcon
In Symcon reicht eine MQTT Server-Instanz mit einem MQTT Server Device für das Topic viss2mqtt/vito. Das Device legt für jeden JSON-Schlüssel automatisch eine Variable an, der Ident entspricht dem vclient-Befehl, z. B. getTempA. Name, Icon, Darstellung und Archivierung legt man danach selbst fest.
Wichtig: Ändert sich der JSON-Typ eines Werts, löscht das Device die Variable und legt sie mit neuer ID neu an. Die Typen sollten deshalb fest bleiben. Weitere Stolperfallen und eine ausführliche Fehlersuche stehen im README des Projekts.
viss2mqtt baut auf vcontrold aus dem openv-Projekt auf und steht unter der MIT-Lizenz .