c4rd0n / vcontrold

vcontrold to use serial port uart on a Rasperry pi
GNU General Public License v2.0
2 stars 1 forks source link

Aktuelle Informationen und Dokus finden sich im Wiki: http://openv.wikispaces.com/


Die Software wird unter der GPL veroeffentlicht.


Kontakt: M.Thielmann@t-online.de


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 checkout svn://svn.code.sf.net/p/vcontrold/code/ vcontrold-code
cd vcontrold-code
sh ./auto-build.sh
sh ./configure
make && make install

Es exisitiert ein Makefile fŸr x86 und den NSLU2 unter openwrt (Cross Compiling). Benštigt wird die libxml2.

Die Konfiguration des Programms wird in zwei XML-Dateien vorgenommen: vcontrold.xml : Programmspezifische Definitionen vito.xml: Definition der Kommandos und Devices (hier im SVN)

Aufruf: vcontrold --help vcontrold [-x|--xmlfile xml-file] [-d|--device ] [-l|--logfile ] [-p|--port port] [-s|--syslog] [-n|--nodaemon] [-i|--vsim] [-g|--debug] [-4|--inet4] [-6|--inet6]

-x Pfad zur XML Konfigurationsdatei
-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
-g erzeugt mehr debug Ausgaben
-4 Nutze IPv4 (Voreingestellt fŸr RŸckwŠrtskompatibilitŠt)
-6 Nutze IPv6

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 : detailinformationen zum Kommando : FŸhre Kommando aus close: schließe Kommunikationskanal zur Analage (wird nach 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.


vclient- Client Programm zu Kommunikation mit dem vcontrold.

Aufruf:

vclient --help usage: vclient -h [-c <command1,command2,..>] [-f ] [-s ] [-t ] [-o [-x ] [-k] [-m] [-v] or usage: vclient --host --port [--command <command1,command2,..>] [--commandfile ] [--cvsfile ] [--template ] [--output ] [--execute ] [--cacti] [--munin] [--verbose] [command3 [command4] ...]

-h|--host       <IPv4>:<Port> oder <IPv6> des vcontrold
-p|--port       <Port> des vcontrold bei IPv6
-c|--command    Liste von auszufuehrenden Kommandos, durch Komma getrennt
-f|--commandfile    Optional Datei mit Kommandos, pro Zeile ein Kommando
-s|--csvfile    Ausgabe des Ergebnisses im CSV Format zur Weiterverarbeitung
-t|--template   Template, Variablen werden mit zurueckgelieferten Werten ersetzt.
-o|--output     Output, der stdout Output wird in die angegebene Datei geschrieben
-x|--execute    Das umgewandelte Template (-t) wird in die angegebene Datei geschrieben und anschliessend ausgefuehrt.
-m|--munin      Munin Datalogger kompatibles Format; Einheiten und Details zu Fehler gehen verloren.
-k|--cacti      Cacti Datalogger kompatibles Format; Einheiten und Details zu Fehler gehen verloren.
-v|--verbose    Verbose Modus zum testen
-4|--inet4      IPv4 wird bevorzugt
-6|--inet6      IPv6 wird bevorzugt. Wird keine dieser Optionen angegben werden die OS default Einstellungen verwendet
--help          Gibt diese Benutzungshinweise aus.

Template Modus Im Template Modus (-t) wird ein Template eingelesen und die dort enthaltenen Variablen ersetzt. Die Ausgabe erfolgt dann auf stdout. Damt ist es einfach mšglich, die Messwerte der Heizung auszulesen und direkt in eine Datenbank zu schreiben.

Variable Funktion $1..$n Rueckgabewert gewandelt in Gleitkommazahl $R1..$Rn Rueckgabewert ungewandelt (Text) $C1..$Cn aufgerufenes Kommando $E1..$En Fehlermeldung pro Kommando

Einfaches Beispiel: Datei sql.tmpl

cat sql.tmpl INSERT INTO messwerte values (CURRENT_DATE,$1,$2);

Aufruf:

./vclient -h 127.0.0.1:1234 -t sql.tmpl -c gettempA,gettempWW INSERT INTO messwerte values (CURRENT_DATE,-2.600000,54.299999);

Diese Werte kšnnen nun direkt Ÿber ein DB-cli in die Datenbank geschrieben werden. Die Ausgabe von stderr sollte dafŸr umgeleitet werden:

./vclient -h 127.0.0.1:1234 -t sql.tmpl -c gettempA,gettempWW 2>/dev/null |mysql -D vito

Wir der Schalter -o angegeben, so wird das Ergebnis in die angegebene Datei geschrieben. Wird der Schalter -x verwendet, wird das Ergebnis in die Datei geschrieben und diese direkt ausgefuehrt.

Beispiel: $ cat sh-example.tmpl

!/bin/sh

echo "Das ist ein Beispiel eines ausfuerhbaren Scriptes" echo "Kommando 1: $C1 Kommando 2: $C2" echo "rrdb Update machen wir mit: update $db N:$1:$2"

nun setzen wir noch $db in der Shell: export db='VITODB'

./vclient -h 127.0.0.1:1234 -c getTempA,getTempWW -t sh-example.tmpl -x sh-example.sh Das ist ein Beispiel eines ausfuerhbaren Scriptes Kommando 1: getTempA Kommando 2: getTempWW rrdb Update machen wir mit: update VITODB N:-2.600000:54.299999


XML Konfig: Die Konfiguration des Daemons erfolgt mit XML-Dateien. Programmspezifische Konfigurationen sind in der datei vcontrold.xml angelegt, kommandospezifische Konfigurationen finden sich in der Datei vito.xml. vcontrold.xml inkludiert die Datei vito.xml mittels XInclude.

Die Datei gliedert sich in drei Hauptabschnitte:

: Maschinennahe Konfigurationen : Einheiten zur implizierten Umrechnung, hierauf wird in der vito.xml mit dem Tag des Kommandos verwiesen. : Protokoll-spezifische Definition der protocmd-Kommados (in vito.xml). Hier werden die verschiedenen Definitionen fŸr die Kommandos getaddr (und später setaddr) definiert). Abschnitt units: abbrev: AbkŸrzung der unit, auf dieses AbkŸrzung wird mit dem Tag in der vito.xml referenziert. calc: Hier kšnnen arithmetische AusdrŸcke zur Umrechnung angegeben werden. Zur Zeit sind + - * / ( ) in beliebiger Schachtelung mšglich. Als Variablen stehen zur VerfŸgung: * B0...B9 -> zurŸckgelieferte Bytes der Abfrage * V -> Value unter BerŸcksichtigung des Types type: Typ der zurŸckgelieferten Bytes. Zur zeit sind implementiert: * char -> 1 Byte (hier ist V und B0 gleich) * short -> 2 Bytes, intern signed short * int -> 4 Bytes, intern signed int * spŠter: date fŸr 8 byte Datum * ... entity: Zusatztext, der hinter dem Ergebnis ausgegeben wird Es kšnnen beliebige Units definiert werden. Abschnitt protocols: macro: Definition von zu sendenden Befehlen, die unter dem Makro Name in des Kommandos in diesem Abschnitt angegeben werden kšnnen. commands: Defintion von Protokoll-Kommandos, die zur direkten Kommunikation mit der Anlage genutzt werden send: Zu sendende Byte-Kommandos. Hier kšnnen die Makro Defintionen des Protokolls genutzt werden. Folgende Kommandos stehen zur VerfŸgung: * SEND * WAIT * RECV > * PAUSE > Als Variablen aus dem command Abschnitt der vito.xml stehen zur VerfŸgung: * $addr -> vito.xml-> * $len ->vito.xml-> * $unit >vito.xml->