Skip to content

telican

RealMerlin edited this page Mar 18, 2021 · 14 revisions

telican

telican ist das Administrationswerkzeug von HCAN. Dies ist die Referenz zu telican; wie telican zu verwenden ist, ist im telican-Tutorial ausgiebig beschrieben.

Funktionen

Allgemeine Funktionen

Ping

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

Time-Daemon

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 &

Temperatur Logging

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.

Syslog

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

Polite Time

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.

Dump Mode

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

Option ''--resolve''

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

Verbindung zu einem Board (board connection)

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

Atmega32 Driver

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.

Controller-1612 Driver

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 ;-)

Userpanel Driver

Der Userpanel (Bedienfeld) Driver (''userpanel_driver.[cc|h]'') bietet die Befehle des Atmega32 Drivers und die EDS Befehle.

Control Modus

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
Clone this wiki locally