vcontrold lite - openv/openv GitHub Wiki
Vcontrold / CSV-Viewer In den kommenden Tagen möchte ich an dieser Stelle einen detaillierten Weg für den ambitionierten Laien beschreiben, wie Werte mittels vcontrold ausgelesen, in eine CSV geschrieben und einfach graphisch dargestellt werden können - eigentlich steht hier nicht wirklich viel Neues - ich möchte lediglich die vielen unterschiedlichen Quellen auf eine Seite zusammenführen!
Am Ende dieses Artikels wird auf einem Notebook alle 2 Minuten ein Graph fortgeschrieben:
Basis für die nachstehende Anleitung ist ein
- Windows XP (SP3) Notebook
- Vitocal 300 mit [KW-Protokoll]
- USB-Optolink-Adapter Nachbau
Verwendete Software
- cygwin
- vcontrold
- diverese CMD-Skripte zum auslesen
- Zur Visualisierung verwende ich das Tool csv-viewer von Ingo Wender
Erstmal vorneweg: Ich als ambitionierter Laie habe ich mich lange schwer mit der Anschaffung des Adapters getan, weil ich Bedenken hatte etwas an meiner Heizung zu verstellen oder zu beschädigen. Hierzu muss ich nach den gemachten Erfahrungen Entwarnung geben, da die Schnittstelle optisch getrennt ist und solange nur gelesen wird (also mit Type F7 gearbeitet wird) kein Werte zurückgeschrieben werden.
1. Optolink-Installation Nach dem Verbinden mit dem USB-Port wird die Hardware automatisch erkannt. Es wird kein Treiber gefunden, deshalb auf manuelles Suchen gehen und als Verzeichnis den Standort des Treibers angeben. Genauere Infos zur Treiberinstallation (eigentlich nicht erforderlich) stehen im Installations-PDF. Nach der Installation wird im Gerätemanager (Start/Systemsteuerung/System/Gerätemanager] ein neuer COM-Port angezeigt. Mittels rechte Maustaste/Eigenschaften kann an dieser Stelle die COM-Portbelegung auf einen anderen, freien Port umgelegt werden. Die Einstellungen des Ports (Übertragungsrate, Paritybit, ...) sind hier flüchtig, d.h. nach jedem anstecken sind dieser wieder auf dem Standardwert, daher muss hier nichts geändert werden.
2. Erster Test Als erstes muss der Optolink-Adapter mit der PC und der Anlage verbunden werden. Man verwendet dann das Tool @voIdent. Nach dem Starten muss hier nur der korrekte (unter Punkt 1 eingestellte) COM-Port ausgewählt werden. Nach dem Drücken auf den Play-Button vergehen 2-3 Sekunden und die Kennung der Viessmann-Anlage wird angezeigt.
Um erste "Gespräche" mit der Anlage zu führen ist das Tool RS232Test sehr hilfreich. Hier muss der Com-Port ausgewählt werden. Zusätzlich noch die Port-Einstellungen (4800 8 2 E ohne) angeben. Nach dem Drücken auf "OPEN" sieht man im Ausgabefenster (Hex-Modus aktivieren) zyklisch ein 05 erscheinen. Im Senden-Feld F7 00 F8 02 eingeben und gleich nach dem erscheinen einer 05 auf SENDEN drücken. Als Antwort erhält man die 4stellige Gerätekennung der Anlage (Also für´s erste die gleich Kennung wie bei voIdent)
3. Installation cygwin Da vcontrold ein Unix-Tool ist muss als erstes eine Unix-Umgebung installiert werden. Das Tool hierfür heißt cygwin. Die Installation ist denkbar einfach. Ich habe die 26MB komplett-Version gewählt und alle im Installer alle Pakete angewählt. Wenn man das macht muss man sich nicht mit dem Auswahlmenü beschäftigen. Wer das möchte wählt die Pakete "cygrunsrv" und "libxml2" aus.
Nach der Installation erscheint auf dem Desktop ein neues Icon CYGWIN-Terminal. Dies Starten und dort cygserver-config starten. Alle Fragen mit "yes" beantworten. Hierdurch wird der cygwin-Dienst installiert und auch gleich gestartet. Die Einstellung ist auch so, dass bei jedem Systemstart der Dienst automatisch startet. Wer dies ändern möchte kann unter Start/Systemsteuerung/Dienst beim Dienst "cygserver" die Einstellung auf manuell stellen.
Test: Ob soweit alles sauber gelaufen ist kann über den Terminal-Befehl cat /dev/ttyS1 ermittlet werden die 1 steht hierbei für COM2 - die Zählung des COM-Ports beginnt also unter Unix bei 0. Nach dem Drücken der "Enter"-Taste sollte nun zyklisch eine "~" erscheinen. Den Test kann man mit STRG-C abbrechen.
Das Terminal-Fenster kann nun geschlossen werden. Alle weiteren Aktionen werden in der Windows-CMD-Shell durchgeführt.
Zum Abschluss muss noch der CYGWIN Pfad in die Umgebungsvariable eingetragen werden. Hierzu einfach unter START/Einstellungen/Systemsteuerung/System/Erweitert/Umgebungsvariable/Systemvariable, Variable "Path" um ;c:\cygwin\bin erweitern.
4. Konfiguration vcontrold 4.1. Grundsätzliches Das Programm vcontrold besteht aus 2 Komponenten.
vcontrold Der Server-Teil (der in den Speiche geladen wird) heißt vcontrold.exe. Beim starten des Programms findet die Initialisierung mittels der beiden Dateien vcontrold.xml und vito.xml statt. Grundsätzlich werden in der vcontrold.xml die allgemeinen Initialisierungen durchgeführt (SENDEN, SYNC und Umrechnung für die Ergebnisse) definiert.In der vito.xml hingegen werden die gerätespezifischen Adressen für diese Befehle hinterlegt. Da diese beiden Dateien grundlegend für die Funktion sind, sollte man sich die Zeit nehmen das Zusammenspiel zu verstehen: vito / @vcontrold
Für jeden Test gilt also: Vcontrold muss beendet und neu gestartet werden damit die Änderungen in den XMLs aktiv werden.
Das Beenden funktioniert auf Command-Line-Ebene mit dem Kommando: taskkill /F /IM "vcontrold.exe". Alternativ besteht auch die Möglichkeit über --/Taskmanager/Prozesse den Prozess zu beenden.
vclient Der Client-Teil heißt vclient.exe und führt die eigentlich Abfragen aus: Der Aufruf steht unter @vclient
4.2. Programm "installieren" Als erstes das Programm vcontrold-v0.98.ziprunter laden und in das Verzeichnis c:\vcontrold entpacken - eigentlich geht auch jedes andere Verzeichnis - dann müssen im nachfolgenden halt die Verzeichnisse entsprechend eingestellt werden.
Die Datei 110128_lite_XMLs.zip hat mir Bernhard zukommen lassen, da wir die gleiche Anlage haben. Im wesentlichen sind es die gleichen wie 14112011vito.zip. Hier wurden nur nicht benötigte Teile entfernt und die Adressen passend zur Vitocal 300 eingetragen. Die runter geladenen Dateien auch in das Verzeichnis c:\vcontrold entpacken.
Nun ein Dos-Fenster öffnen und vcontrold starten. Hierdurch werden (bei der Nutzung meiner XMLs) folgende Aufrufe initialisiert:
getTempSTS1ist getTempWWist getTempLuftVL getTempLuftRL getTempSekVL getTempSekRL getTempVerdampfer getSpeicherladepumpe getTempA getStatusVerdichter getTempHKVL getBetrVerdichter getEinschaltungen getBetrSpeicherLP
Desweiteren wird über die vcontrold.xml die IP-Adresse 127.0.0.1 (also Localhost, sprich mein eigener PC) auf dem Port 1234 eingestellt. Nun kann es also mit den Aufrufen losgehen - vclient -h (IP):(Port) -c (initialisertes Kommando) bspw: vclient -h 127.0.0.1:1234 -c getTempA Wichtig ist auf die Groß-/Kleinschreibung der Befehle zu achten! Desweiteren kommt es auf meinem Notebook dazu, dass bei jedem ersten Anstecken der Schnittstelle erstmal ein Init durchgeführt werden muss. Auch wenn sich das der Brainhunter nicht erklären kann. Ich muss als erstes den Befehl stty -F /dev/ttyS1 4800 absetzten!
5. Die Skripte Alle nachstehend aufgeführten Dateien sind im vcontrold_batches.zip enthalten. Um nun die Abfragen zu automatisieren habe ich den Schedular JIT verwendet. Grundsätzlich geht auch das mit allen anderen Schedularen oder aber man erstellt sich in einem Skript einfach eine Schleife:
Basis für das eingesetzte Tool csv-viewer ist eine Semikolon getrennte Textdatei. Diese Datei wird mittels eines vcontrold-Aufruf erstellt.
Hierzu werden alle benötigten Aufrufe in eine Kommando-Datei vclient_perid.cmd geschrieben. Der zyklische Aufruf, der mittels Jet oder einem anderen Schedular abgesetzt werden kann lautet dann
vclient -h 127.0.0.1:1234 -f vclient_perid.cmd -s output.txt
Hierdurch werden nun alle Aufrufe in die Datei output.txt geschrieben. Da in dieser Datei nun noch Datum und Uhrzeit fehlen, muss jede Zeile hierum ergänzt werden. Dies geschieht durch:
set /p viesswert=<output.txt echo %date%;%time:~0,5%;%viesswert% >> output.csv del output.txt
Im Ergebnis steht nun die Datei Output.csv, in die bei jedem Aufruf eine Statuszeile mit Datum und Uhrzeit geschrieben wird. Das ganze Skript hierzu steckt in der Batch viess_abfrage.cmd Desweiteren habe ich noch folgende Batches beigefügt:
- viess_init ==> enthält die bei mir notwendige Initialisierung mit stty
- viess_start ==> Führt einen Start des cygserver und vcontrold durch. Desweiteren wird die die alte Ouput_csv mit Timestamp versehen und eine neue mit einer Überschriftenzeile angelegt.
- viess_stop ==> beendet cygserver und vcontrold
Da es Werte gibt, die nicht sinnvoll minütlich abgefragt werden müssen bspw. (getBetrVerdichter, getEinschaltungen oder getBetrSpeicherLP) können nun noch weitere Batches mit (bspw. tgl. Aufrufen) in Jet integriert werden. Um eine Synchronisation der einzelnen vclient-Aufrufe zu erreichen sollte die Batch um so erweitert werden, dass nur ein vclient je Lauf aktiv ist:
:start tasklist | find /i "vclient.exe">nul && goto warten (… vclient-Aufruf hier einfügen) :goto ende
:warten sleep 15 goto start
:ende
Die Konfig in jit könnte dann so aussehen:
6. Der Viewer Der letzte Schritt ist auch gleichzeitig der Einfachste! Die output.csv muss nun nur noch mit dem CSV-Viewer aufgerufen werden. Unter Extras/Einstellungen kann nun noch die Refresh-Zeit eingestellt werden …. fertig