Vscan.py ist ein Python-Scanner fuer Viessmann-Speicherbereiche ueber eine serielle Schnittstelle. Das Skript liest Speicherbloecke aus, zeigt die Daten als Hex- und ASCII-Ausgabe an und markiert Treffer fuer definierte Byte-Muster direkt in der Konsole.
Der aktuelle Stand ist die Datei Vscan.py. Die Datei scan.py ist eine fruehere, weniger flexible Variante.
- Verbindung ueber serielle Schnittstelle mit
4800Baud,8E1 - Lesen frei waehlbarer Adressbereiche
- Ausgabe als Hex + ASCII
- Suchmuster in Hex-Notation, z. B.
20 26 - Alternativmuster fuer denselben Suchlauf
- Zwei Betriebsarten:
- Blockmodus: Lesen und Ausgabe in Bloecken
- Rastermodus: Adressweise Abtastung ueber
--step
- Akustisches Signal und farbige Markierung bei Treffern
- Python 3
- Paket
pyserial - Zugriff auf die passende serielle Schnittstelle
- Ein Geraet bzw. Adapter, der das verwendete Viessmann-Protokoll liefert
Installation von pyserial:
pip install pyserialVscan.py: Hauptprogrammscan.py: aeltere Ausgangsversion
- Port:
/dev/ttyUSB0 - Startadresse:
0x0000 - Endadresse:
0xFFFF - Blockgroesse:
9 - Schrittweite:
9 - Zeilenbreite:
9 - Pause:
0.0 - Suchmuster 1:
20 26 - Suchmuster 2:
19 70
Wichtig: Unter Windows musst du den Port in der Regel auf etwas wie COM3 oder COM4 setzen.
Beispiel unter Windows:
python Vscan.py --port /dev/ttyUSB0Beispiel mit Start- und Endadresse:
python Vscan.py --port /dev/ttyUSB0 --start 0x0710 --end 0x2000Beispiel mit eigener Schrittweite und eigenem Suchmuster:
python Vscan.py --port /dev/ttyUSB0 --step 1 --pattern "20 26" --pattern-alt "19 70"--port: Serieller Port, z. B.COM3oder/dev/ttyUSB0--start: Startadresse, Standardinterpretation ist Hex--end: Endadresse, exklusiv--block: Anzahl angeforderter Bytes pro Lesevorgang--step: Schrittweite je Schleife--line: Bytes pro Ausgabezeile--pause: Pause zwischen Lesevorgaengen in Sekunden--pattern: Hauptsuchmuster als Hex-Bytes--pattern-alt: Alternatives Suchmuster als Hex-Bytes
Adressformate:
0x07100710d:1808
Das Skript arbeitet pro Adresse bzw. Block grob in dieser Reihenfolge:
- Handshake senden:
0x04 - Auf Antwort
0x05warten - Lese-Befehl senden:
0x01 0xF7 <addr_h> <addr_l> <block_size> - Antwortdaten lesen
- Die letzten
block_sizeBytes als Nutzdaten auswerten - Hex- und ASCII-Ausgabe erzeugen
- Treffer fuer Suchmuster markieren
Normale Zeile:
0x0710 | 20 26 30 31 2E 30 39 00 41 | &01.09.A
Trefferzeile:
0x0710 | 20 26 30 31 2E 30 39 00 41 | &01.09.A <-- GEFUNDEN!
Im Trefferfall wird zusaetzlich ein Signalton ausgegeben.
- Wenn
--stepungleich--blockist, aktiviert das Skript einen Rastermodus und setzt intern--lineauf die Blockgroesse. - Nicht druckbare ASCII-Zeichen werden als
.dargestellt. - Das Skript schliesst die serielle Verbindung im
finally-Block sauber.