-
Notifications
You must be signed in to change notification settings - Fork 6
telican
telican ist das Administrationswerkzeug von HCAN. Dies ist die Referenz zu telican; wie telican zu verwenden ist, ist im telican-Tutorial ausgiebig beschrieben.
Zum Testen kann ein Teilnehmer angepingt werden:
$ telican -p 402
sending ping packets from 512 to 402...
[1] 23 msec
[2] 25 msec
[3] 23 msec
[4] 22 msec
[5] 24 msec
Selten genutzt wird die Floodping Variante, welche so viel Frames wie moeglich zum Ziel sendet:
$ telican -P 402
sending flood ping packets from 512 to 402...
[1] 588 msec
[2] 653 msec
[4] 509 msec
[5] 2 msec
[6] 604 msec
[7] 105 msec
[8] 574 msec
Fuer sehr spezielle Faelle gibt es die Ping Once Variante, welche exakt einen Frame zum Ziel sendet:
$ telican --pingonce 402
sending one ping packet from 512 to 402...
[1] 6 msec
Das wird z.B. im Script hcan-discover verwendet
Im Time-Daemon Modus sendet telican jede Minute die akuelle Uhrzeit auf den HCAN-Bus. Dabei ist die hoechste Zeit-Prioritaet gesetzt. Details zum Datums- und Uhrzeitkonzept von hcan findet sich auf der timeservice-Seite.
$ telican --timed &
telican kann die DS18B20 Sensor-Temperaturen, welche von den tempsensor Devices regelmaessig auf den HCAN Bus geschrieben werden, interpretiert anzeigen:
$ telican --templog
group: 67 temp: 19.375
group: 68 temp: 18.75
group: 70 temp: 18.5
group: 71 temp: 18.5
group: 72 temp: 18.125
group: 1 temp: 12.875
group: 11 temp: 8.875
group: 64 temp: 17.9375
group: 160 temp: 17.125
group: 3 temp: 12.625
Damit ist auf PC-Seite ein Logging der Temperaturen sehr einfach realisierbar, z.B. koennen damit RRD Graphiken http://oss.oetiker.ch/rrdtool/ erzeugt werden.
Zum Interpretieren der Syslog Meldungen auf dem Bus kann der Syslog-Modus verwendet werden:
$ telican --syslog
Nov 06 11:23:55 412 debug wind = 0
Nov 06 11:23:55 412 debug regen = 0
Nov 06 11:23:55 412 debug licht ost = 171
Nov 06 11:23:55 412 debug licht sued = 163
Nov 06 11:23:55 412 debug licht west = 168
Der jeweilige Syslog Level (critical = 1, error = 2, warning = 3, debug = 4) kann im EEPROM an der Adresse 5 gesetzt werden:
$ telican -c 412
> set ee 5 4
> quit
oder:
$ telican -c 412
> set sysloglevel 4
> quit
Zu Testzwecken oder bei nicht zeitkritischen Batch-Jobs kann eine Wartezeit (Hoeflichkeit gegenueber den anderen Teilnehmern) zwischen jedem Frame aktiviert werden:
$ telican --polite-time 100 -c 413
Normalerweise ist das aber nicht noetig.
Aehnlich einem tcpdump ist der telican-Dump:
$ telican -d
0328 -> 0036 :SFP HES HEIZUNG_WAERMEBEDARF_INFO id:137 value:0
0328 -> 0970 :SYSLOG [ 0x04 0x49 0x44 0x3a 0x20 0x31 0x33 0x37 ] ID: 137
0328 -> 0970 :SYSLOG [ 0x20 0x70 0x77 0x6d 0x3a 0x20 0x30 0x20 ] pwm: 0
0328 -> 0970 :SYSLOG [ 0x50 0x49 0x44 0x3a 0x20 0x2d 0x32 0x33 ] PID: -23
0328 -> 0970 :SYSLOG [ 0x30 0x34 0x30 0x0a ] 040
0418 -> 0036 :SFP HES 1WIRE_TEMPERATURE gruppe:26 temp_hi:1 temp_lo:29
Um die Farb-Ausgabe zu unterdruecken, kann ''--nocolor'' gesetzt werden. Um die Interpretation der Frames zu unterbinden, kann ''--numeric'' verwendet werden.
Der Dump Mode gibt auch die Syslogmeldungen aus. Da diese ja auch als CAN Frames versendet werden.
Diese sind aber hier schlechter lesbar als im ''--syslog'' Modus.
Um diese teilweise sehr ausführlichen Syslogmeldungen im Dump Modus zu unterdruecken gibt es die Option ''--dump-no-syslog''
$ telican --dump-no-syslog
0328 -> 0036 :SFP HES HEIZUNG_WAERMEBEDARF_INFO id:137 value:0
0418 -> 0036 :SFP HES 1WIRE_TEMPERATURE gruppe:26 temp_hi:1 temp_lo:29
Nicht immer hat man alle Board/Gruppen IDs im Kopf. Dann kann man mit den der Option ''--resolve'' diese Infos aus der installation.xml holen
''--resolve'' funktioniert zusammen mit den Optionen: ''--templog'' ''--syslog'' ''--dump'' ''--dump-no-syslog''
z.B.:
$ telican -D
0348 -> 0036 :SFP HES HEIZUNG_WAERMEBEDARF_INFO id:140 value:20
0418 -> 0036 :SFP HES HEIZUNG_WAERMEBEDARF_INFO id:15 value:40
0428 -> 0036 :SFP HES 1WIRE_TEMPERATURE gruppe:11 temp_hi:1 temp_lo:91
0428 -> 0036 :SFP HES 1WIRE_TEMPERATURE gruppe:12 temp_hi:1 temp_lo:25
$ telican -D --resolve
"C1416 Ergeschoss" -> "MULTICAST" :SFP HES HEIZUNG_WAERMEBEDARF_INFO id:140 value:20
"C1416 Dachgeschoss" -> "MULTICAST" :SFP HES HEIZUNG_WAERMEBEDARF_INFO id:15 value:40
"C1612 Keller" -> "MULTICAST" :SFP HES 1WIRE_TEMPERATURE gruppe:11 temp_hi:1 temp_lo:91
"C1612 Keller" -> "MULTICAST" :SFP HES 1WIRE_TEMPERATURE gruppe:12 temp_hi:1 temp_lo:25
$ telican --templog
group: 45 temp: 21.125
group: 40 temp: 18.875
group: 11 temp: 21.8125
$ telican --templog --resolve
group: 45 name: "Kinderzimmer" temp: 21.125
group: 40 name: "Schlafzimmer" temp: 18.875
group: 11 name: "Wohnzimmer" temp: 21.8125
Fuer spezielle Dinge ist zuerst eine Verbindung zu einem Board noetig. Dazu muss die HCAN-Adresse des Zielboards angegeben werden:
$ telican -c 412
>
Wenn kein Fehler beim Verbinden auftritt, erscheint ein Prompt. Beim Verbinden sind folgende Optionen moeglich:
-
wenn kein hcanaddressd laeuft, so kann mit ''-s'' die Quell-Adresse, d.h. die Adresse, die telican fuer diese Connection verwendet, gesetzt werden
-
wenn hcand und hcanaddressd nicht auf dem gleichen Rechner laufen, so kann mit ''-a'' die IP-Adresse mitgeteilt werden
-
Wenn hcand und hcanaddressd nicht auf dem gleichen Rechner wie telican laufen, so kann die Shell-Umgebungsvariable HCAND_ADDRESS mit der IP Adresse gesetzt werden (z.B. export HCAND_ADDRESS=192.168.1.78); dadurch spart man sich den ''-a'' Parameter.
-
mit ''--ignore-type'' wird der Board-Typ ignoriert; es wird der einfachste Driver fuer das Board geladen
-
mit ''--arch'' wird explizit die Architektur (normalerweise ''atmega32'') gesetzt, was in Kombination mit ''--ignore-type'' die Verbindung zu einem Board ermoeglicht, welches auf keinerlei funktionierende Auto-Erkennungsmechanismen verfuegt
Die libhcan++ verwendet fuer die Kommunikation mit einem Board sogennante Driver. Das sind C++-Klassen, welche die Befehle fuer einen Board-Typ oder einen Funktionsbereich (z.B. EDS zur Verfuegung stellen. Die Architektur (meisst ''atmega32'') ist fest im Bootloader eincompiliert, der Board-Typ jedoch ist im EEPROM an der Adresse 4 gespeichert.
Die verfuegbaren Board-Typen finden sich in ''doc/geraete-einteilungen''. Ein Controller-1612 beispielsweise wird ueber die ID 4 erkannt. Details, wie man die Typ-ID setzt, beschreibt das Inbetriebnahme-Howto.
Ueber den Befehl ''show system'' kann man erfragen, mit welchem Board-Typ man es zu tun hat:
$ telican -c 402
> show system
Board : Controllerboard-1612 v01
MCU : AVR Atmega32
Build #: 53
Der Atmega32 Driver (''atmega32_driver.[h|cc]'') bietet folgende Befehle:
send `<d0>` `<d1>` ... sends this raw frame to peer
show system prints info about peer
show uptime prints the uptime
show time prints the time/date
show address get the stored hcan address
show state bootloader, booting, app
show ee `<address>` shows a eeprom value
dump ee `<address>` dumps a eeprom range
set ee `<address>` `<value>` save value to eeprom
set address `<hcan-address>` save a new hcan address
set sysloglevel `<level>` set the syslog level
bootloader boot into bootloader
loadapp load the application
reset generates a reset
flash `<filename>`
Die Anwendung der meissten Befehle wird im Inbetriebnahme-Howto beschrieben.
Zum Thema "Flashen" sei auch auf das inkrementelle Flashen hingewiesen.
Der Controller-1612 Driver (''controller1612_driver.[h|cc]'') bietet, zusaetzlich zu den Befehlen des generischen Atmega32 Driver, weitere Befehle, unter anderem fuer das EDS an:
list EDS: Zeigt alle Blocks an
print `<n>` EDS: Zeigt die Felder des Blocks `<n>` an
edit `<n>` EDS: Editiert den Block `<n>`
set `<field>` `<v>` EDS: Setzt das Feld `<field>` auf den Wert `<v>`
int `<field>` EDS: Gibt erleuternde Infos fuer das Feld `<field>` aus, soweit vorhanden
create `<blocktype>` EDS: Legt einen neuen Block an
delete `<n>` EDS: Loescht den mit `<n>` spez. Block
defragment EDS: Defragmentiert das EEPROM
Format EDS: (!) Formatiert das EEPROM (!)
show conf EDS: Zeigt alle Bloecke an
show all `<x>` EDS: Zeigt alle Bloecke vom Typ `<x>` an
Einzelheiten beschreibt die EDS Seite. Spezielle Befehle des Controller-1612 sind:
discover1wire `<pin>`
Auf der Tempsensor Seite finden sich Details.
show ram-usage
zeigt den aktuellen RAM-Verbrauch fuer die geladene EDS-Konfiguration, inklusive der benoetigten Laufzeit-Variablen etc.
reload
laed die EDS-Konfiguration neu; Unterschied zum Reset ist, dass die Ausgaenge nicht zurueckgesetzt werden und das Licht anbleibt - sehr praktisch in spaeten Bastelstunden ;-)
Der Userpanel (Bedienfeld) Driver (''userpanel_driver.[cc|h]'') bietet die Befehle des Atmega32 Drivers und die EDS Befehle.
Im Control-Modus kann die HCAN Installation von telican aus bedient/gesteuert werden.
Wird kein Paramter bei telican angegeben, so startet telican automatisch in den Control-Modus. Durch die Tab-Expansion (Druecken der Tabulator-Taste vervollstaendigt den Befehl) laesst sich die HCAN Installation schnell und bequem bedienen:
$ telican
> lampe
Gruppe: Status: Name:
1 - vorratsraum
2 ein waschkueche
3 - technikraum1
4 - technikraum2
5 - werkstatt
6 - hobbyraum
...
> lampe hobbyraum ein
> lampe
Gruppe: Status: Name:
1 - vorratsraum
2 ein waschkueche
3 - technikraum1
4 - technikraum2
5 - werkstatt
6 ein hobbyraum
...
> heizung
| ID | Modus | T(ist) | T(soll) | StGrd | Dauer | Ort
| -- | ----- | ------ | ------- | ----- | ----- | ---
+-----+---------+--------+---------+-------+-----------+----------
| 001 | auto | 09.0 | 00.0 | | | hobbyraum
| --- | ---- | ---- | ---- | | | ---------
| 002 | therm. | 14.6 | 20.0 | | 579:53min | werkstatt
| 064 | auto | 17.4 | 19.0 | | | buegelzimmer
| 065 | auto | 19.4 | 19.2 | | | bad-EG
| 066 | auto | 15.5 | 15.5 | | | schlafzimmer
| 067 | auto | 20.4 | 20.5 | | | wohnzimmer
| 069 | aus | 16.2 | | | | treppenhaus
...
Folgende Befehle sind zur Zeit implementiert:
| Befehl | Aktion
| ------ | ------
| lampe | zeigt eine Liste aller Lampen und deren Status an
| lampe `<name>` `<status>` | schaltet die Lampe; status = ein,aus,0,1,on.off
| reedkontakt | zeigt eine Liste aller Reedkontakte und deren Status an
| rolladen | zeigt eine Liste aller Rollaeden und deren Position an
| rolladen `<name>` `<pos>` | laesst den Rolladen auf die Position fahren; position im Bereich [0..100] 100% = oben
| heizung | zeigt eine Liste aller Heizkoerper und deren Daten an
| heizung `<name>` aus | schaltet die Heizung aus
| heizung `<name>` manuell `<stellgrad>` `<dauer>` | schaltet die Heizung in den manuellen Modus; stellgrad = [1..100], dauer = Dauer in Minuten
| heizung `<name>` manuell `<stellgrad>` `<dauer>` h | schaltet die Heizung in den manuellen Modus; stellgrad = [1..100], dauer = Dauer in Stunden
| heizung `<name>` therm `<soll-Temp>` `<dauer>` | schaltet die Heizung in den Thermostat-Modus; dabei ist die Soll-Temperatur (als Fliesskomma-Wert mit ".") und die Dauer (in Minuten) anzugeben
| heizung `<name>` therm `<soll-Temp>` `<dauer>` h | schaltet die Heizung in den Thermostat-Modus; dabei ist die Soll-Temperatur (als Fliesskomma-Wert mit ".") und die Dauer (in Stunden) anzugeben
| heizung `<name>` auto | schaltet die Heizung in den Automatik-Modus
Bei den Befehlen fuer Heizung therm und manuell wird die Dauer in Stunden interpretiert, wenn auf den Wert ein "h" oder "std" folgt. Mit oder ohne Leerzeichen dazuwischen. Die Dauer ohne einen Zusatz wird weiterhin als Minuten interpetiert.
Bei der Eingabe wird der Befehl (z.B. 'heizung') und danach der Name der Heizung per Druck auf die Tab-Taste automatisch vervollstaendigt (wie bei der bash).
Damit telican weiss, welche Devices es gibt und wie sie heissen, muss eine Datei /etc/hcan/installation.xml existieren. Die DTD dazu liegt in /usr/share/hcan/installation.dtd. Ein Beispiel:
`<?xml version="1.0" encoding="iso-8859-1" ?>`
`<!DOCTYPE haus SYSTEM "/usr/share/hcan/installation.dtd">`
<!--
Diese XML Datei beschreibt die HCAN Installation. Sie ist
somit installationsspezifisch und befindet sich daher in
/etc/hcan, nicht in /usr/share/hcan.
Sie wird z.Z. von telican im contrl-Modus verwendet, um z.B. die
Tab-Completion oder die Listen-Ansichten zu realisieren.
-->
`<haus>`
`<board addr="400">`
`</board>`
`<board addr="401">`
`<reedkontakt gruppe="1" name="hobbyraum" />`
`<reedkontakt gruppe="2" name="werkstatt" />`
`<taster gruppe="32" name="rolladen-hobbyraum" />`
`<taster gruppe="33" name="flur-UG" />`
`<taster gruppe="34" name="waschkueche" />`
`<taster gruppe="35" name="vorratsraum" />`
`<taster gruppe="36" name="werkstatt" />`
`<taster gruppe="37" name="rolladen-werkstatt" />`
`<tempsensor gruppe="4" name="werkstatt" />`
`<tempsensor gruppe="3" name="waschkueche" />`
`<tempsensor gruppe="5" name="vorratsraum" />`
`<powerport typ="lampe" gruppe="1" name="vorratsraum" />`
`<powerport typ="lampe" gruppe="2" name="waschkueche" />`
`<tempsensor gruppe="1" name="hobbyraum" />`
`<heizung gruppe="1" name="hobbyraum" />`
`<heizung gruppe="2" name="werkstatt" />`
`</board>`
`</haus>`
Mit dem Paramter ''-x'' bzw. ''--xml'' laesst sich eine bestimmte xml als installation.xml laden.
Es wird ein absoluter Pfad erwartet. z.B.:
$ telican -x /etc/hcan/installation_UG.xml
$ telican -x /etc/hcan/installation_EG.xml
$ telican -x /etc/hcan/installation_minimal.xml
$ telican -x /etc/hcan/installation_komplett.xml
usw...
Fuer Scripte lassen sich die Befehle Unix-typisch per stdin einfuettern:
$ echo "lampe hobbyraum ein" | telican
-
Tutorials
-
FAQ
-
Referenz
- Konzepte
- Hardware
- Software/PC
- Software/Firmware
- Patches
- EDS - EEPROM Data System
- HCAN Protokoll
- HCAN Protokoll - Referenz