vcontrold mit Synology USB Station 2

Nach längeren Überlegungen, wie wohl eine universelle Lösung zur Datenerfassung zu erstellen sei, bin ich zum Schluss gekommen, dass in erster Linie die Erfassung der Daten von der Auswertung und Darstellung zu trennen ist.
Für die Erfassung am besten geeignet ist aus meiner Sicht ein kleines Linux-System, das in der Nähe der Steuerung platziert wird.
Es sollte genügend Speicher haben, um die erfassten Daten permanent abzulegen.
Für die Auswertung der Daten gibt es dann unterschiedliche Lösungen wie:
  • Visualisierung der Daten auf einem Desktop Computer (Windows oder Linux)
  • Visualisierung der Daten mit einer Web-Applikation
  • ...
Als Hardware für die Datenerfassung hatte ich lange die NSLU2 im Auge. Es gibt auch einige Anwender, welche vcontrold erfolgreich auf NSLU2 betreiben.
Die Linksys NSLU2 wird leider nicht mehr produziert und ist nur schwer erhältlich.
Weil ich schon zwei Synology DiskStation in Betrieb habe, habe ich die „USB Station 2“ genauer betrachtet und bin von dieser total begeistert.

Einige Pluspunkte der "USB Station 2"

  • Lüfterloses Gerät mit niedrigem Stromverbrauch (< 4W)
  • Aus meiner Sicht günstiges Gerät (Januar 2012 ab ca. €80)
  • Selber gute Erfahrungen mit anderen Synology NAS gemacht
  • Es gibt eine alternative Firmware mit ipkg Paket-Management und Kernel-Treibern für die Kommunikation über die USB Schnittstelle
  • Synology liefert eine fertige Toolchain, mit der vcontrold für jede Diskstation gebildet werden kann

Alternativen

  • Es gibt andere Geräte, die zum Teil günstiger sind oder mehr Features beinhalten (Harddisk, WLAN, …) – aber ich kenne keines, auf dem vcontrold einfacher installiert werden kann
  • In NAS Foren scheidet die „USB Station 2“ oft nicht gut ab, weil die Datenübertragungs-Leistung für ein NAS nicht so blendend ist – für unsere Aufgabe ist die Performance aber mehr als ausreichend (es gibt hier keine GB an Daten zu übertragen)

Voraussetzungen für die hier beschriebene Lösung

  • Eine Synology USB Station 2
  • Ein Optolink-Adapter mit USB-Schnittstelle (mit FTDI Chipsatz, wie hier im Wiki beschrieben)
  • Ein USB Speicher (Stick oder portable Disk)
  • Alternative Firmware (gibt es bei synology.itolosa.com)
  • Für die „USB Station 2“ erstelltes vcontrold (hier vorhanden)
  • Ein PC mit Internetzugang für die Installation und das Nachladen von 3rd Party Paketen via ipkg
  • Der PC braucht natürlich auch eine Netzwerkverbindung zur USB Station 2
  • Und natürlich eine Vitotronic Steuerung welche von vcontrold unterstützt wird.

Meine Konfiguration

  • USB Station 2
  • Optolink USB Adapter hier im Wiki
  • USB Stick 8GB (LaCie MosKeyto)
  • Vitotronic 200 KW2
Kosten Total ohne Viessmann Steuerung: ca. €130.-


Schritt für Schritt Anleitung

1. Inbetriebnahme der „USB Station 2“

  • USB Station 2 mit Netzwerkkabel über einen Switch/Router mit dem PC verbinden und mit dem 5V Adapter mit Strom versorgen.
  • Mit „Synology Assistant“ der beiliegenden CD wird die USB Station 2 gefunden und dann konfiguriert.
    Für die Grundkonfiguration sollte folgendes eingerichtet werden
    • Servername (z.B. vitoopen)
    • fixe IP Adresse einstellen
    • ein Admin Passwort einrichten
  • Wenn man sich mit der Konfigurationsoberfläche DiskStationManager (DSM) vertraut gemacht hat, ist man bereit für die folgenden Schritte

2. Alternative Firmware installieren

  • USB Disk (Stick) anschliessen und formatieren
    • Unter „DSM – Systemsteuerung – Externe Geräte“ wird das USB-Laufwerk dargestellt
    • Wenn das Laufwerk keine Daten enthält (was zu empfehlen ist) dieses mit dem Dateisystem „ext4“ formatieren
  • Firmware installieren
    • Die Firmware und die Anleitung von der angegebenen Homepage holen und auf dem PC speichern (DSM_USB_Station_2_32_1944_iTLS.pat und Install_Guide.pdf)
    • In der DSM unter „Systemsteurung – „DSM Aktualisierung“ – „Manuelle DSM-Aktualisierung“ diese Datei installieren

3. Zugang mit PuTTY einrichten

Damit die folgenden Einstellungen in der Firmware gemacht werden können, braucht es den SSH Zugang und ein SSH Client wie PuTTY
  • Mit DSM unter „Systemsteuerung – Terminal“ den SSH-Dienst aktivieren
  • PuTTY starten und eine Verbindung mit der USB Station 2 herstellen
  • Den Hostnamen wie oben definiert eingeben (z.B. vitoopen, oder die ip-Adresse verwenden), SSH Verbindung mit Port 22 wählen und dann die Session starten.
  • Bei der erstmaligen Verbindung das Server-Zertifikat akzeptieren
  • Login mit user „root“ und dem oben definierten Passwort des DSM admin.
  • Man landet so in der shell auf der USB Station 2 und hat als Konsole eine Linux „BusyBox“.

4. Paket-Verwaltung (ipkg) installieren

In der Anleitung von itolosa ist genau beschrieben, wie ipkg installiert wird (es ist alles da, man muss nur noch ein script starten).
Ins Verzeichnis /volume1 wechseln mit:
cd /volume1
Dann das script install-ipkg starten:
vitoopen> ./install-ipkg
Optware Bootstrap for syno-mvkw.
Extracting archive... please wait
bootstrap/
bootstrap/bootstrap.sh
bootstrap/ipkg-opt.ipk
bootstrap/ipkg.sh
bootstrap/optware-bootstrap.ipk
bootstrap/wget.ipk
1232+1 records in
1232+1 records out
Creating temporary ipkg repository...
Installing optware-bootstrap package...
Unpacking optware-bootstrap.ipk...Done.
Configuring optware-bootstrap.ipk...Modifying /etc/rc.local
Done.
Installing ipkg...
Unpacking ipkg-opt.ipk...Done.
Configuring ipkg-opt.ipk...WARNING: can't open config file: /usr/syno/ssl/openssl.cnf
Done.
Removing temporary ipkg repository...
Installing wget...
Installing wget (1.12-2) to root...
Configuring wget
Successfully terminated.
Creating /opt/etc/ipkg/cross-feed.conf...
Setup complete.
Danach noch ipkg update aufrufen.
vitoopen> ipkg update
Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable/Packages.gz
Inflating http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable/Packages.gz
Updated list of available packages in /opt/lib/ipkg/lists/cross
Successfully terminated.
Weitere nützliche ipkg Befehle sind
ipkg list_installed
Liste aller installierten ipkg Module
ipkg list
Liste aller verfügbaren ipkg Module
ipkg upgrade
Upgrade der installierten Module auf die neuste Version
ipkg list | grep rrdtool
Zeigt alle Zeilen aus der Liste der Module, welche den Text „rrdtool“ enthalten

5. Alternativen Editor installieren (optional)

Wer mit dem Linux Editor vi nicht klar kommt, installiert sich z.B. nano.
ipkg install nano

Ich verwende auch gern den Midnight Commander „mc“ mit dem man einfach navigieren kann (evtl. mit LearnKeys zuerst die Steuertasten konfigurieren) und der einen integrierten Viewer und Editor enthält.
ipkg install mc

Diese Anleitung ist aber soweit entwickelt, dass es nicht mehr nötig ist, Dateien auf dem Zielsystem selber zu editieren.

6. USB Driver installieren

Diese Driver werden mit der alternativen Firmware installiert, müssen aber bei jedem System-Start gestartet werden.
Dazu im Verzeichnis /volume1/@misc/drivers/usb das Script insmod-usbserial aufrufen

Damit die Driver beim System-Start automatisch gestartet werden, wird dieser Aufruf ins Start-Script aufgenommen, das auch zum Starten von vcontrold verwendet wird und weiter unten beschrieben ist.

7. Serielle Schnittstelle einrichten

Für den ersten Versuch reicht es, die USB Driver wie oben angegeben manuell zu starten.
(Hierbei kann es durchaus sein, dass auf der Konsole nachstehende Meldung erscheint:
insmod: can't insert '/volume1/@misc/drivers/usb/usbserial.ko': File exists
insmod: can't insert '/volume1/@misc/drivers/usb/pl2303.ko': File exists
insmod: can't insert '/volume1/@misc/drivers/usb/ftdi_sio.ko': File exists
)

Das OptoLink Interface kann nun am freien USB Port angeschlossen werden.
Wenn das funktioniert, dann ist im DSM unter „Systeminformationen – Externe Geräte“ folgendes USB-Gerät sichtbar:
FT232 USB-Serial (UART) IC – Future Technology Devices International, Ltd
(Nicht mit "Systemsteuerung - Externe Geräte" verwechseln, denn hier werden nur Speichermedien angezeigt!)

Damit das Interface als ttyUSB0 angesprochen werden kann, muss es durch zwei Commands konfiguriert werden:
mknod /dev/ttyUSB0 c 188 0
stty -F /dev/ttyUSB0 ispeed 115200 ospeed 115200
Danach sollte die “Datei” /dev/ttyUSB0 existieren.
Diese Einstellung muss nur einmal gemacht werden und überlebt einen Neustart des Systems.

8. vcontrold installieren

Mit Hilfe der Toolchain von Synology, welche hier unter Marvell 88F6180 Linux 2.6.32 erhältlich ist (gcc421_glibc25_88f6180-GPL.tar), habe ich vcontrold unter Ubuntu 10.04 für die „USB Station 2“ mit der CPU 88F6180 und der kernel-Version 2.6.32 erstellt (Cross-Compiling).
Noch was Positives: die libxml2 ist auf der „USB Station 2“ bereits vorhanden.

Übrigens habe ich zwei kleine Modifikationen in den Sourcen gemacht, damit bei Fliesskomma-Werten die Rundungsfehler korrigiert werden (statt 23.29999 wird jetzt 23.3 und statt 22.00001 wird jetzt 22 dargestellt). Bei grossen Werten könnte damit aber die Exponential-Darstellung verwendet werden – wenn das Problem bei jemandem auftaucht bitte hier im wiki oder mit p.m. melden.
Diese Version inklusive Startup-Script steht im Wiki zum Download bereit.

Nach dem Download werden die Files aus dem Zip ausgepackt und auf das usbshare-Verzeichnis der USB Station 2 kopiert.
Beispiel:
//vitoopen/usbshare1/Heizung enthält dann folgende Dateien:
vcontrold-arm
vclient-arm
S99vcontrol.sh

Mit der Konsole (PuTTY) können diese Dateien auf der „USB Station 2“ an die passenden Stellen kopiert werden.
cd /volume1
mkdir vcontrol
cp /volumeUSB1/usbshare/Heizung/vcontrold-arm /volume1/vcontrol/
cp /volumeUSB1/usbshare/Heizung/vclient-arm /volume1/vcontrol/
cp /volumeUSB1/usbshare/Heizung/S99vcontrol.sh /usr/syno/etc/rc.d/

Das Startup-Script S99vcontrol.sh sieht so aus
#!/bin/sh
# Copyright (c) 2011 VitoOpen, H.Gysin. All rights reserved.
 
if [ "$1" = "stop" ]; then
 killall vcontrold-arm > /dev/null 2>&1
 exit 0
fi
 
VcontrolD="/volume1/vcontrol/vcontrold-arm"
if [ "$1" = "start" ]; then
 if [ -x "$VcontrolD" ]; then
 /volume1/@misc/drivers/usb/insmod-usbserial > /dev/null 2>&1
 $VcontrolD > /dev/null 2>&1
 else
 echo "$VcontrolD does not exist!"
 fi
fi
Das Script wird vom System mit dem Parameter „start“ oder „stop“ aufgerufen.

Man kann es auch selber aufrufen, wenn man vcontrold manuell starten oder stoppen will.
Wie weiter oben beschrieben ist, werden damit auch die USB-Driver gestartet.

9. vcontrold konfigurieren

vcontrold erwartet die XML-Konfigurationsdateien standardmässig im Verzeichnis /etc/vcontrold.
Diese Dateien (vcontrold.xml und vito.xml) können hier im wiki gezogen werden (siehe vcontrold.xml)

Wenn die XML-Dateien wie oben ins Verzeichnis „Heizung“ gestellt werden, dann müssen auf der „USB Station 2“ noch folgende commands ausgeführt werden.
mkdir /etc/vcontrold
cp /volumeUSB1/usbshare/Heizung/vcontrold.xml /etc/vcontrold/
cp /volumeUSB1/usbshare/Heizung/vito.xml /etc/vcontrold/

Nun muss die Konfiguration der Schnittstelle in vcontrold.xml unter <unix> gemacht werden.
<config>
 <serial>
 <tty>/dev/ttyUSB0</tty>
 </serial>
 <net>
 <port>3002</port>
 <allow ip='127.0.0.1'/>
 <allow ip='192.168.0.0/24'/>
 </net>
 <device ID="2098"/>
</config>
Wichtig ist vor allem, dass die Steuerung richtig konfiguriert ist. (hier ID=“2098“ für die V200 KW2).
Die zweite „allow ip“ Einstellung muss dem eigenen Netz angepasst werden. Das ist nur nötig, wenn das telnet-Interface von anderen Rechnern aus genutzt werden soll. Es kann auch ein einziger externer PC konfiguriert werden (mit /24 wird allen Rechnern im 192.168.0.* Netz Zugang gewährt).

Für die ersten Tests ist es sinnvoll in der vcontrold.xml das Logins zu aktivieren


<logging>
<file>/var/log/vcontrold.log</file>
<syslog>y</syslog>
<debug>n</debug>
</logging>

Für die ersten Test kann so überprüft werden was vcontrold so anstellt, sprich ob es funktioniert

Wer sich das Editieren der Datei mit einfachen Linux-Mitteln ersparen will, macht die Anpassungen vor dem Kopieren auf die „USB Station 2“.

10. Test

Wenn die obigen Schritte erfolgreich durchgeführt wurden, dann ist nach Aufruf von „/usr/syno/etc/rc.d/S99vcontrol.sh start“ der vcontrold-Server bereit.

Am besten wird das System einmal neu gestartet, damit man sicher ist, dass alles funktioniert.
Es empfiehlt sich, alle Dateien, welche man für das System angepasst hat, über den usbshare auch auf dem Arbeits-PC zu sichern.
Die Einstellungen werden verloren gehen, wenn einmal ein Firmware-Reset gemacht werden muss.
Auch bei einem Firmware-Update ist damit zu rechnen, dass die Einstellungen verloren gehen.

Wenn das System gestartet ist, dann kann mit PuTTY eine Telnet-Session geöffnet werden.
Connection type = telnet
Port = 3002
derselbe Host wie oben bei der SSH Connection
Bei den Terminal Einstellungen sollte noch die Option „Implicit CR in every LF“ gesetzt werden, damit die Zeilenenden richtig interpretiert werden (hier bei Windows XP nötig)

Man kann auch den SSH Zugang verwenden und in der BusyBox das Command „telnet localhost 3002“ aufrufen.

Wenn der Kommando-Prompt vctrld> erscheint hat alles geklappt.

Durch Eingabe von help werden die gültigen Befehle aufgelistet.
version zeigt die vcontrold Version an.
device den in vcontrold.xml konfigurierten device.

Wenn diese Befehle korrekt ausgeführt werden, dann ist schon vieles erreicht.

commands zeigt alle Befehle für die entsprechende Steuerung an.

Wenn nun auch getTempA oder getDevType funktioniert, dann ist auch die serielle Kommunikation in Ordnung.

Und Gratulation, du hast es geschafft!

11. Wie weiter?


Nun gibt es verschiedene Möglichkeiten, die Daten zu erfassen, darzustellen und auszuwerten.

Am nächsten liegt die hier im wiki vorgestellte Erfassung und Auswertung mit RRDB.

Dazu eine gute und eine schlechte Nachricht!
Gut:
rrdtool ist betriebsfertig über ipkg installierbar (ipkg install rrdtool).
Schlecht:
Der Platz im internen Speicher der „USB Station 2“ ist zu klein, um rrdtool zu installieren - aber es gibt eine Lösung, wie das ganze ipkg auf den externen USB Speicher verschoben werden kann (Anleitung in Französisch unter syno.haeflinger.com).

11.1 kleine Übersetzunghilfe (für nicht Franzosen, auch wenn eigentlich selbsterklärend):

1. Falls nicht bereits geschehen USB-Stick wie unter Punkt 2 beschrieben anschließen und formatieren
2. Starten der optware Software temporär verhindern
cd /etc
mv rc.local rc.local-save
3. Kopieren des optware-Verzeichnisses auf den USB-Stick
cp -r /volume1/@optware /volumeUSB1/usbshare
4. Löschen des optware-Verzeichnisses auf dem internen Speicher
cd /volume1
rm -r @optware
5. Anlegen eines "Symbolik Links" auf den extern kopierten optware-Pfad (für Windowsianer wäre das wie eine Verknüpfung)
ln -s /volumeUSB1/usbshare/@optware
6. Starten von optware wieder aktivieren
cd /etc
mv rc.local-save rc.local
Da das Mounten des USB-Sticks einige Sekunden dauert, muss das Starten von optware verzögert werden. Bei mir bedeutete dies in das Skript rc.local ein
sleep 5
einzubauen
7. Reboot
reboot

So schlecht ist die zweite Nachricht nun doch nicht. Anhand der französischen Anleitung konnte das erfolgreich umgestellt werden und nun sind folgende Module über ipkg installiert:
vitoopen> ipkg list_installed
coreutils - 8.4-1 - Bunch of heavyweight *nix core utilities
e2fslibs - 1.41.14-1 - Ext2 Filesystem Libraries
freetype - 2.3.6-1 - Free truetype library
glib - 2.20.4-1 - The GLib library of C routines.
libart - 2.3.17-2 - 2-d graphics library.
libpng - 1.2.44-1 - Portable Network Graphics Libraries
libusb - 0.1.12-2 - Library for interfacing to the USB subsystem.
mc - 4.7.5.5-1 - Midnight Commander File Manager
openssh - 5.9p1-1 - a FREE version of the SSH protocol suite of network connectivity tools.
openssl - 0.9.8p-1 - Openssl provides the ssl implementation in libraries libcrypto and libssl, and is needed by many other applications and librari
rrdtool - 1.2.30-1 - Round-Robin Database tool. Database collator and plotter
scponly - 4.8-1 - A shell for users with scp/sftp only access
slang - 2.2.3-1 - S-Lang is a multi-platform library designed to allow a developer to create robust multi-platform software.
usbutils - 0.73-3 - USB enumeration utilities
wget - 1.12-2 - A network utility to retrieve files from the Web
zlib - 1.2.5-1 - zlib is a library implementing the 'deflate' compression system.
Successfully terminated.

Leider unterstützt die „USB Station 2“ nicht wie die normalen DiskStations die Funktionen der „WebStation“ für eigene Web-Pages und MySQL.
Mit etwas Eigeninitiative sollte das aber für einen geübten „System Modder“ kein Problem sein oder es gibt noch die Möglichkeit der 3rd-Party Applications, welche in den DSM integriert werden können.

Bei Bedarf kann diese Anleitung von jedermann erweitert werden.