Differences

This shows you the differences between two versions of the page.

Link to this comparison view

hfg-treppe [2013/05/31 00:30] (current)
martin created
Line 1: Line 1:
 +==== WTF? ====
 +Die HFG-Treppe (siehe auch: https://​entropia.de/​HFG-Treppe) kann über eine gar schreckliche Software vom Hersteller auf einem verranzt-altem Rechner gesteuert werden.
  
 +Praktischerweise gibt es aber vom Hersteller auch eine Dokumentation zu dem Protokoll, was der Rechner über Seriell mit dem Modem spricht, welche dann die Kommandos zum "​Stationsrechner"​ schickt. Da das Dokument aber nur schwerlich zu verdauen ist, hier eine Aufschlüsselung von Kommunikation,​ die das etwas einfacher machen sollte.
 +
 +Außerdem gibt es auch eine Python-Library,​ mit der alles besser werden soll™: https://​github.com/​pc-coholic/​libLLE57
 +
 +==== Nützliches ====
 +=== Steuerrechner ===
 +  * User ist Administrator (?) (bzw. das letzte was im Anmeldedialog steht).
 +  * Passwort: foo5bar (steht auch mit Bleistift auf der Tastatur)
 +
 +=== Lawo Iluminator-Software ===
 +  * User: Administrator
 +  * Passwort: admin
 +  * Gibt auch noch eine Hand voll weiterer User mit unbekanntem Passwort
 +
 +=== Topographie ===
 +  * Ein Steuerrechner an der Treppe
 +  * 3 Slaves
 +    * 1 (0x01) oben
 +      * 11 Zeilen
 +    * 2 (0x02) mitte
 +      * 11 Zeilen
 +    * 3 (0x03) unten
 +      * **10 Zeilen (!)**
 +  * Jedes Panel hat 7 x 112 Pixel
 +  * Am PC ist noch eine Anzeige 4 definiert, welche aber als Dummy agiert und nicht aktiv angesteuert wird.
 +
 +==== Definitionen ====
 +=== Ersetzungen === 
 +  * Austauschzeichen 0x7D XOR 0x20
 +  * Rahmenzeichen wird nicht ersetzt
 +  * 0x7D -> 0x7D 0x5D
 +  * 0x7E -> 0x7D 0x5E
 +
 +=== Rahmenzeichen ===
 +  * Rahmen beginnt und endet mit 7E
 +  * wird nie ersetzt
 +
 +=== Längenbyte ===
 +  * Länge des kompletten Telegrams von Steuerbyte (inkl.) bis Prüfsumme (exkl.)
 +
 +=== Steuerbyte ===
 +  * 0x43 Datentelegramm
 +
 +=== Slaveadresse ===
 +  * 0x01 bis 0xFE
 +  * 0xFF alle Anzeigen (Broadcast, keine Antworten!)
 +  * 0x00 nicht verwenden
 +
 +=== Informationsbyte ===
 +  * Anzahl der Datensätze im Datenfeld
 +  * 0x00 bis 0x3F
 +  * maximal 63 Datensätze mit insgesamt max. 251 Bytes)
 +  * vgl. Kapitel 3
 +
 +=== Funktionsgruppe ===
 +  * 0xB9
 +    * Datensätze mit Text-, Zeichensatz- oder Graphikinformationen
 +    * vgl. Kapitel 3.2
 +  * 0x04
 +    * Datensätze mit Wechselverkehrszeichen mit Textreferenznummern
 +    * vgl. Kapitel 3.7
 +
 +=== Datensatzlänge ===
 +  * von Interne Adresse (inkl.) bis Ende des Datensatzes
 +
 +=== Datensatzkennung (alles Funktionsgruppe 0xB9) ===
 +  * 0x32 Zeichensatzauswahl (vgl. Kapitel 3.2)
 +  * 0x30 Textausgabe (vgl. Kapitel 3.3.1)
 +  * 0x31 Graphikausgabe (vgl. Kapitel 3.4)
 +  * 0x40 Steuerung Ausgabeport (vgl. Kapitel 3.5)
 +  * 0x50 Uhrzeit- und Datumsübertragung (vgl. Kapitel 3.6)
 +
 +== 0x30 Textausgabe ==
 +  * 11 Datensatzlänge (17 Bytes)
 +  * 01 Interne Adresse
 +  * 30 Datensatzkennung (Textausgabe)
 +  * XX Textsteuerbyte
 +
 +^     ​^ ​     ^ Bit       ^ Anzeigenspeicher ^ Ausgabensteuerung ​                                ^
 +^ Dez ^ Hex  ^ 7654 3210 ^ 7-4              ^                                                   ^
 +| 16  | 0x10 | 0001 0000 | 1                | 0x0 Löschen vor Beschreiben,​ anzeigen ​            |
 +| 17  | 0x11 | 0001 0001 | 1                | 0x1 Nicht löschen vor Beschreiben,​ anzeigen ​      |
 +| 18  | 0x12 | 0001 0010 | 1                | 0x2 Nicht löschen vor Beschreiben,​ nicht anzeigen |
 +| 19  | 0x13 | 0001 0011 | 1                | 0x3 Löschen vor Beschreiben,​ nicht anzeigen ​      |
 +| 20  | 0x14 | 0001 0100 | 1                | 0x4 Gelb vor Beschreiben,​ nicht anzeigen ​         |
 +| 21  | 0x15 | 0001 0101 | 1                | 0x5 Schachbrett vor Beschreiben,​ nicht anzeigen ​  |
 +
 +  * YY YY Horizontale Feldposition (y), 0x0000 bis 0xFFFF
 +  * XX XX Vertikale Feldposition (x), 0x0000 bis 0xFFFF
 +  * BB BB Feldbreite (b), 0x0000 bis 0xFFFF
 +  * HH Feldhöhe (h), 0x00 bis 0xFF
 +  * AA Feldattribut
 +    * 0x00 Links und oben bündig
 +    * 0x10 Links und oben bündig, aber blinkend
 +    * 0x20 Lauftext
 +  * LL Textlänge (max. 127 Zeichen), 0x00 bis 0xFF
 +    * BB Buchstabe
 +    * BB Buchstabe
 +    * [...]
 +
 +== 0x32 Zeichensatzauswahl ==
 +  * 0x03 Datensatzlänge (3)
 +  * 0x01 Interne Adresse
 +  * 0x32 Datensatzkennung (Zeichensatzauswahl)
 +  * 0xZZ Zeichensatznummer + Spacing + Transparenz
 +    * Bitpositionen:​ 76543210 (siehe auch 0x030 Textausgabe)
 +    * Bit 7: Transparenz
 +      * 1 Textzeichen sind transparent,​ darunterliegende Zeichen bleiben sichtbar (Take this one!)
 +      * 0 Nicht transparent,​ darunterliegende Zeichen werden (viereckig) überdeckt
 +    * Bit 65: Spacing
 +      * Abstand zwischen zwei Zeichen + 1
 +      * 00 (0x0) eine Leerspalte zwischen zwei Zeichen
 +      * 01 (0x1) zwei Leerspralten zwischen zwei Zeichen
 +      * 10 (0x2) drei Leerspralten zwischen zwei Zeichen
 +      * 11 (0x3) vier Leerspralten zwischen zwei Zeichen
 +    * Bit 43210: Nummer des Zeichensatzes in der Anzeige
 +      * 00000 (0x00) bis 11111 (0x1F)
 +      * Liste der Zeichensätze muss bei LLE angefordert werden
 +
 +== 0x50 Uhrzeit- und Datumsübertragung ==
 +  * 0x09 Datensatzlänge
 +  * 0x01 Interne Adresse
 +  * 0x50 Datensatzkennung
 +  * 0xYYYY Jahr, 0000 bis 65536, 0x00 bis 0xFFFF, 2 Bytes!
 +  * 0xMM Monat, 1 bis 12, 0x01 bis 0x0C
 +  * 0xDD Tag, 1 bis 31, 0x01 bis 0x1F
 +  * 0xHH Stunden, 0 bis 23, 0x00 bis 0x17
 +  * 0xMM Minuten, 0 bis 59, 0x00 bis 0x3B
 +  * 0xSS Sekunden, 0 bis 59, 0x00 bis 0x3B
 +
 +=== Prüfsumme ===
 +  * Addition aller Bytes im Telegram ab dem Steuerbyte (inkl.) bis ausschließlich der Prüfsumme selbst, moduloa 0x100
 +  * 7E 68 0F 0F 68 43 FF 00 01 B9 09 01 50 DC 07 06 0A 05 1C 15 7F 16 7E
 +  * (43+FF+00+01+B9+09+01+50+DC+07+06+0A+05+1C+15) mod 100
 +
 +==== Datenblöcke ===
 +=== Block 1 ===
 +7E 68 0F 0F 68 43 FF 00 01 B9 09 01 50 DC 07 06 0A 05 1C 15 7F 16 7E
 +  * 7E Rahmenzeichen
 +  * 68 Startzeichen
 +  * 0F Längenbyte (15 Bytes)
 +  * 0F Längenbyte Wiederholung
 +  * 68 Startzeichen
 +  * 43 Steuerbyte
 +  * FF Slaveadresse (Alle)
 +  * 00 OSI3-Byte (fix)
 +  * 01 Informationsbyte Anzahl der Datensätze im Datenfeld (1 Datensatz)
 +    * B9 Funktionsgruppe (Text/​Zeichen/​Graphik)
 +      * 09 Datensatzlänge (9 Byte)
 +      * 01 Interne Adresse
 +      * 50 Datensatzkennung (Uhrzeit- und Datumsübertragung)
 +      * DC 07 Jahr
 +      * 06 Monat
 +      * 0A Tag
 +      * 05 Stunden
 +      * 1C Minuten
 +      * 15 Sekunden
 +  * 7F Prüfsumme
 +  * 16 Stopzeichen ​
 +  * 7E Rahmenzeichen
 +
 +=== Block 2 ===
 +7E 68 A6 A6 68 43 01 00 0A B9 03 01 32 87 11 01 30 13 00 00 00 00 1C 00
 +07 00 05 6F 62 65 6E 31 11 01 30 12 00 00 07 00 1E 00 07 00 05 6F 62 65
 +6E 32 11 01 30 12 00 00 0E 00 1D 00 07 00 05 6F 62 65 6E 33 11 01 30 12
 +00 00 15 00 1E 00 07 00 05 6F 62 65 6E 34 11 01 30 12 00 00 1C 00 1E 00
 +07 00 05 6F 62 65 6E 35 11 01 30 12 00 00 23 00 1E 00 07 00 05 6F 62 65
 +6E 36 11 01 30 12 00 00 2A 00 1E 00 07 00 05 6F 62 65 6E 37 11 01 30 12
 +00 00 31 00 1E 00 07 00 05 6F 62 65 6E 38 0C 01 30 11 00 00 00 00 00 00
 +00 00 00 88 16 7E
 +
 +  * 7E Rahmenzeichen
 +  * 68 Startzeichen
 +  * A6 Längenbyte ​
 +  * A6 Längenbyte Wiederholung
 +  * 68 Startzeichen
 +  * 43 Steuerbyte
 +  * 01 Slaveadresse (Anzeige 1)
 +  * 00 OSI-Byte (fix)
 +  * 0A Informationsbyte Anzahl der Datensätze im Datenfeld (10 Datensätze)
 +    * B9 Funktionsgruppe (Text/​Zeichen/​Graphik)
 +    * (Datensatz 1)
 +      * 03 Datensatzlänge (3 Byte)
 +      * 01 Interne Adresse
 +      * 32 Datensatzkennung (Zeichensatzauswahl)
 +      * 87 Zeichensatznummer + Spacing + Transparenz
 +    * (Datensatz 2)
 +      * 11 Datensatzlänge
 +      * 01 Interne Adresse
 +      * 30 Datensatzkennung (Textausgabe)
 +      * 13 Textsteuerbyte (Löschen vor Beschreiben,​ nicht anzeigen)
 +      * 00 00 Horizontale Feldposition (y = 0)
 +      * 00 00 Vertikale Feldposition (x = 0)
 +      * 1C 00 Feldbreite (b = 7168)
 +      * 07 Feldhöhe (h = 7)
 +      * 00 Feldattribut (links und oben bündig)
 +      * 05 Textlänge (5 Zeichen)
 +        * 6F o
 +        * 62 b
 +        * 65 e
 +        * 6E n
 +        * 31 1
 +    * (Datensatz 3)
 +      * 11 Datensatzlänge
 +      * 01 Interne Adresse
 +      * 30 Datensatzkennung (Textausgabe)
 +      * 12 Textsteuerbyte (Nicht löschen vor Beschreiben,​ nicht anzeigen)
 +      * 00 00 Horizontale Feldposition (y = 0)
 +      * 07 00 Vertikale Feldposition (x = 1792)
 +      * 1E 00 Feldbreite (b = 7680)
 +      * 07 Feldhöhe (h = 7)
 +      * 00 Feldattribut (links und oben bündig)
 +      * 05 Textlänge (5 Zeichen)
 +        * 6F o
 +        * 62 b
 +        * 65 e
 +        * 6E n
 +        * 32 2
 +    * (Datensatz 4)
 +      * 11 Datensatzlänge
 +      * 01 Interne Adresse
 +      * 30 Datensatzkennung (Textausgabe)
 +      * 12 Textsteuerbyte (Nicht löschen vor Beschreiben,​ nicht anzeigen)
 +      * 00 00 Horizontale Feldposition (y = 0)
 +      * 0E 00 Vertikale Feldposition (x = 3584)
 +      * 1D 00 Feldbreite (b = 7424)
 +      * 07 Feldhöhe (h = 7)
 +      * 00 Feldattribut (links und oben bündig)
 +      * 05 Textlänge (5 Zeichen)
 +        * 6F o
 +        * 62 b
 +        * 65 e
 +        * 6E n
 +        * 33 3
 +    * (Datensatz 5)
 +      * 11 Datensatzlänge
 +      * 01 Interne Adresse
 +      * 30 Datensatzkennung (Textausgabe)
 +      * 12 Textsteuerbyte (Nicht löschen vor Beschreiben,​ nicht anzeigen)
 +      * 00 00 Horizontale Feldposition (y = 0)
 +      * 15 00 Vertikale Feldposition (x = 5376)
 +      * 1E 00 Feldbreite (b = 7680)
 +      * 07 Feldhöhe (h = 7)
 +      * 00 Feldattribut (links und oben bündig)
 +      * 05 Textlänge (5 Zeichen)
 +        * 6F o
 +        * 62 b
 +        * 65 e
 +        * 6E n
 +        * 34 4
 +    * (Datensatz 6)
 +      * 11 Datensatzlänge
 +      * 01 Interne Adresse
 +      * 30 Datensatzkennung (Textausgabe)
 +      * 12 Textsteuerbyte (Nicht löschen vor Beschreiben,​ nicht anzeigen)
 +      * 00 00 Horizontale Feldposition (y = 0)
 +      * 1C 00 Vertikale Feldposition (x = 7168)
 +      * 1E 00 Feldbreite (b = 7680)
 +      * 07 Feldhöhe (h = 7)
 +      * 00 Feldattribut (links und oben bündig)
 +      * 05 Textlänge (5 Zeichen)
 +        * 6F o
 +        * 62 b
 +        * 65 e
 +        * 6E n
 +        * 35 5
 +    * (Datensatz 7)
 +      * 11 Datensatzlänge
 +      * 01 Interne Adresse
 +      * 30 Datensatzkennung (Textausgabe)
 +      * 12 Textsteuerbyte (Nicht löschen vor Beschreiben,​ nicht anzeigen)
 +      * 00 00 Horizontale Feldposition (y = 0)
 +      * 23 00 Vertikale Feldposition (x = 8960)
 +      * 1E 00 Feldbreite (b = 7680)
 +      * 07 Feldhöhe (h = 7)
 +      * 00 Feldattribut (links und oben bündig)
 +      * 05 Textlänge (5 Zeichen)
 +        * 6F o
 +        * 62 b
 +        * 65 e
 +        * 6E n
 +        * 36 6
 +    * (Datensatz 8)
 +      * 11 Datensatzlänge
 +      * 01 Interne Adresse
 +      * 30 Datensatzkennung (Textausgabe)
 +      * 12 Textsteuerbyte (Nicht löschen vor Beschreiben,​ nicht anzeigen)
 +      * 00 00 Horizontale Feldposition (y = 0)
 +      * 2A 00 Vertikale Feldposition (x = 10752)
 +      * 1E 00 Feldbreite (b = 7680)
 +      * 07 Feldhöhe (h = 7)
 +      * 00 Feldattribut (links und oben bündig)
 +      * 05 Textlänge (5 Zeichen)
 +        * 6F o
 +        * 62 b
 +        * 65 e
 +        * 6E n
 +        * 37 7
 +    * (Datensatz 9)
 +      * 11 Datensatzlänge
 +      * 01 Interne Adresse
 +      * 30 Datensatzkennung (Textausgabe)
 +      * 12 Textsteuerbyte (Nicht löschen vor Beschreiben,​ nicht anzeigen)
 +      * 00 00 Horizontale Feldposition (y = 0)
 +      * 31 00 Vertikale Feldposition (x = 12544)
 +      * 1E 00 Feldbreite (b = 7680)
 +      * 07 Feldhöhe (h = 7)
 +      * 00 Feldattribut (links und oben bündig)
 +      * 05 Textlänge (5 Zeichen)
 +        * 6F o
 +        * 62 b
 +        * 65 e
 +        * 6E n
 +        * 38 8
 +    * (Datensatz 10)
 +      * 0C Datensatzlänge
 +      * 01 Interne Adresse
 +      * 30 Datensatzkennung (Textausgabe)
 +      * 11 Textsteuerbyte (Nicht löschen vor Beschreiben,​ anzeigen)
 +      * 00 00 Horizontale Feldposition (y = 0)
 +      * 00 00 Vertikale Feldposition (x = 0)
 +      * 00 00 Feldbreite (b = 0)
 +      * 00 Feldhöhe (h = 0)
 +      * 00 Feldattribut (links und oben bündig)
 +      * 05 Textlänge (0 Zeichen)
 +  * 88 Prüfsumme
 +  * 16 Stopzeichen ​
 +  * 7E Rahmenzeichen
 
hfg-treppe.txt · Last modified: 2013/05/31 00:30 by martin