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

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.

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

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 😎
      • 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
  • projekte/hfg-treppe.txt
  • Last modified: 2021/04/18 12:35
  • by 127.0.0.1