====== Viessmann Optolink ======
Viessmann ist ein Hersteller für Heizgeräte der an seinen Regelsysteme Vitotronic die Status-LEDs zusätzliche als optischen Schnittstelle ausgerüstet hat. Regelungen mit [[https://github.com/openv/openv/wiki/Die-Optolink-Schnittstelle|Optolink]] werden in diversen Modellen verbaut. Gas- und Ölkessel, aber auch Wärmepumpen können auf diesem Weg mit einem PC kommunizieren.
{{ :hardware:channels:heating_control:vcontrold.png?600 |}}
==== Hardware ====
OptoLink Adapter gibts fertig zu kaufen oder man [[https://github.com/openv/openv/wiki/Bauanleitung-RaspberryPi|bastelt]] einen an den RaspberryPi.
==== Test ====
[[https://github.com/openv/openv/issues/399|vcontrold für VItodens 300]] installieren, testen und den Adressen der eigenen Steuerung der Heizungsanlage anpassen.
Zum Test anfänglich nur ''get'' Befehle auf Speicheradressen verwenden (z.b. einer ähnlichen Anlagensteuerung) und die Ausgaben mit denen am Bedienfeld auf Konsistenz prüfen.
Dann Parameter am Bedienfeld ändern und nochmals prüfen ob der Inhalt der gelesenen Speicheradresse sich wie erwartet ändert.
==== vzlogger ====
Im vzlogger den MeterExec verwenden um die Daten via ''vclient'' von ''vcontrold'' des [[https://github.com/openv/vcontrold|openv projekts]] auszulesen. Der Format String mit `$i` muss stets (auch bei nur einem value) verwendet werden.
...
"log" : "/var/log/vzlogger/vzlogger.log",
...
"meters": [{
"enabled": true,
"allowskip": false,
"protocol": "exec",
"command": "vclient -h 127.0.0.1:3002 --munin -c 'getTempAged,getTempWWist'
"format": "$i $v", // $i MUSS verwendet werden. Broken: Null<>Nil Strings zur Channelzuordnung
"interval": 120,
"channels": [{
"uuid": " ... uuid für getTempAged ",
"identifier":"getTempAged.value", // WIE $i im format String von der munin Ausgabe
"middleware": "http://.../middleware.php"
},{
"uuid": "... uuid für getTempWWist",
"identifier":"getTempWWist.value",
"middleware": "http://.../middleware.php"
}]
}]
...
==== Systemdienst ====
Um vcontrold über systemctl zu steuern eine Konfiguration unter ''/etc/systemd/system/vcontrold.service'' anlegen:
[Unit]
Description=vcontrold daemon
After=syslog.target systemd-udev-settle.service
[Service]
Type=forking
ExecStartPre=/bin/ls /dev/bus/usb/001
ExecStart=/usr/local/sbin/vcontrold -x /etc/vcontrold/vcontrold.xml
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
RestartSec=120
StandardOutput=null
[Install]
WantedBy=multi-user.target
Es kann nun als Dienst gestartet werden:
sudo systemctl start vcontrold
Start des Dienstes beim Boot hiermit aktivieren:
sudo systemctl enable vcontrold
Da vzlogger erst nach vcrontrold starten sollte ist auch seine Konfig ''/etc/systemd/system/vzlogger.service'' anzupassen:
[Unit]
Description=vzlogger
After=syslog.target network.target
After=mysql.service ntp.service
After=vcontrold.service
[Service]
User=vzlogger
ExecStartPre=/bin/ls /dev/bus/usb/001
ExecStart=/usr/local/bin/vzlogger -c /etc/vzlogger.conf
ExecReload=/bin/kill -HUP $MAINPID
StandardOutput=null
[Install]
WantedBy=multi-user.target
==== Weiteres ====
Zum Steuern der Anlage (setzen von Werten in den Adressen) kann man parallel über bash Scripte die ''vclient'' entsprechend aufrufen.