vcontrold - Linux Daemon für Vito Kommunikation

vcontrold ist ein in C geschriebener Daemon, der die Kommunikation mit der Vito-Steuerung übernimmt.
Die Konfiguration erfolgt über XML-Dateien.
Der Daemon bietet eine ASCII-Socketschnittstelle, die mit telnet oder dem vclient Programm angespochen werden kann.

Der Quelltext kann im SVN heruntergeladen werden. SVN
Eine Anleitung zum Kompilieren findet man hier.
Auf GitHub gibt es einen Feed (Makefile) und Binaries für OpenWrt.
Gentoo-User können ein ebuild samt init-Script unter Bug #574964 finden.

Die Konfiguration des Programms wird in zwei XML-Dateien vorgenommen:
vcontrold.xml : Programmspezifische Definitionen
vito.xml: Definition der Kommandos und Devices.
Der Standardpfad für diese Dateien ist /etc/vcontrold.

Ein kill -1 <pid> bewirkt ein Neuladen der XML Dateien. Dies dient zum Laden geänderter Befehle und Protokolle, jedoch wird der Abschnitt <unix> nicht neu eingelesen.

Aufruf:
vcontrold [-x xml-file] [-d <device>] [-l <logfile>] [-p port] [-s] [-n] [-i] [-g]
-x Pfad zur XML Konfigurationsdatei (default /etc/vcontrold)
-d Device, entweder serielles Device oder IP-Adresse:Port bei Zugriff über ser2net
-l Log-Datei
-p TCP-Port, auf dem das CLI-Interface lauscht
-s Logging in syslog
-n kein fork, für Testzwecke
-i legt eine Datei /tmp/sim-<DevID>.ini an, die als Konfiguration für den Simulator vsim dient. Jeder Befehl wird im Format
gesendete Bytes = empfangene Bytes
protokolliert.
-g Debug Modus

CLI-Kommandos:
device: Name und ID des konfigurierten Devices
protocol: Name des Protokolls
commands: Für das device in der XML-Datei definierte Kommandos
detail <command>: Detailinformationen zum Kommando
<command>: Führe Kommando aus
close: schließe Kommunikationskanal zur Anlage (wird nach <command> offen gehalten)
debug on|off:Zeigt Debug Meldungen (Kommunikation mit der Anlage) an und wieder ab.
unit on|off: Schaltet implizite Umrechnung in die definierte Einheit aus und wieder an.
reload: Neuladen der XML Konfig Dateien, dabei werden nicht die Werte unter <unix> neu ausgewertet
Bei Kommandos, die setaddr verwenden, können so die Hex Werte beim Aufruf mit angegeben werden.
vctrld>unit off
DEBUG:Sun Mar  2 14:44:32 2008 : Befehl: unit off
vctrld>settempWW 01 FF
DEBUG:Sun Mar  2 14:44:41 2008 : Befehl: settempWW 01 FF
DEBUG:Sun Mar  2 14:44:41 2008 : ClI Net: verbunden 192.168.1.112:3000 (FD:7)
DEBUG:Sun Mar  2 14:44:41 2008 : >SEND: 04
DEBUG:Sun Mar  2 14:44:41 2008 : Warte auf 05
DEBUG:Sun Mar  2 14:44:41 2008 : <RECV: 06
DEBUG:Sun Mar  2 14:44:44 2008 : <RECV: 05
DEBUG:Sun Mar  2 14:44:44 2008 : >SEND: 01
DEBUG:Sun Mar  2 14:44:44 2008 : >SEND: F4
DEBUG:Sun Mar  2 14:44:44 2008 : >SEND: 08
DEBUG:Sun Mar  2 14:44:44 2008 : >SEND: 04
DEBUG:Sun Mar  2 14:44:44 2008 : >SEND: 02
DEBUG:Sun Mar  2 14:44:44 2008 : >SEND: 01
DEBUG:Sun Mar  2 14:44:44 2008 : >SEND: FF
 


Beispielsession:
$ telnet 192.168.1.2 1234
Trying 192.168.1.2...
Connected to 192.168.1.2.
Escape character is '^]'.
vctrld>commands
gettempA: Ermittle die Aussentemeratur in Grad C
gettempWW: Ermittle die Warmwassertemepratur in Grad C
vctrld>detail gettempWW
gettempWW: SEND 04;WAIT 05;SEND 01 F7 08 04 02;RECV 02 UT
        Unit: Temperatur
        Type: short
        Calc:  V/10
        Einheit: Grad Celsius
vctrld>gettempWW
54.299999 Grad Celsius
vctrld>unit off
vctrld>gettempWW
1F 02
vctrld>debug on
vctrld>gettempWW
DEBUG:Mon Feb 25 19:44:33 2008 : Befehl: gettempWW
DEBUG:Mon Feb 25 19:44:33 2008 : >SEND: 04
DEBUG:Mon Feb 25 19:44:33 2008 : Warte auf 05
DEBUG:Mon Feb 25 19:44:33 2008 : <RECV: 06
DEBUG:Mon Feb 25 19:44:36 2008 : <RECV: 05
DEBUG:Mon Feb 25 19:44:36 2008 : >SEND: 01
DEBUG:Mon Feb 25 19:44:36 2008 : >SEND: F7
DEBUG:Mon Feb 25 19:44:36 2008 : >SEND: 08
DEBUG:Mon Feb 25 19:44:36 2008 : >SEND: 04
DEBUG:Mon Feb 25 19:44:36 2008 : >SEND: 02
DEBUG:Mon Feb 25 19:44:36 2008 : <RECV: 1F
DEBUG:Mon Feb 25 19:44:36 2008 : <RECV: 02
1F 02
DEBUG:Mon Feb 25 19:44:36 2008 : Empfangen: 1F 02
vctrld>close
DEBUG:Mon Feb 25 19:44:52 2008 : Befehl: close
192.168.1.112:3000 geschlossen
vctrld>quit
DEBUG:Mon Feb 25 19:44:54 2008 : Befehl: quit
good bye!
DEBUG:Mon Feb 25 19:44:54 2008 : Verbindung beendet (fd:6)
Connection closed by foreign host.