From f32241ab5c8c71c81e249f5ab626371655fab5ba Mon Sep 17 00:00:00 2001 From: Julian Metzler Date: Sun, 17 Mar 2024 13:58:03 +0100 Subject: [PATCH] Update code to use xatLabs Cheetah display controller --- Bedruckungstabelle Typ M.ods | Bin 0 -> 43500 bytes TYPM.JSN | 1 + run.py | 68 +++++------------------------------ settings_phalos.py | 32 +++++------------ 4 files changed, 17 insertions(+), 84 deletions(-) create mode 100644 Bedruckungstabelle Typ M.ods create mode 100644 TYPM.JSN diff --git a/Bedruckungstabelle Typ M.ods b/Bedruckungstabelle Typ M.ods new file mode 100644 index 0000000000000000000000000000000000000000..c22cdecd13a0fc7643654f51312ac2e5642db700 GIT binary patch literal 43500 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 10: - print("\n" + "=" * 60 + "\n") - print("Sending heartbeat") - ctrl.send_end_comm() - last_heartbeat = now - continue - - if now - last_update < 60: - time.sleep(1) - continue - - print("\n" + "=" * 60 + "\n") - - try: - display_id = update_display(display, dbi) - try: - with open("/tmp/m-zza-status.json", 'r') as f: - status = json.load(f) - except (FileNotFoundError, ValueError): - status = {'displayHash': None} - - display_hash = hashlib.sha256(bytes(display_id, 'utf-8')).hexdigest() - - update = True - if status['displayHash'] == display_hash: - print("No need to update display.") - update = False - else: - status['displayHash'] = display_hash - - if update: - num_tries = 10 - for i in range(num_tries): - try: - display.update() - break - except CommunicationError: - print("Communication error! Retrying... {}/{}".format(i+1, num_tries)) - time.sleep(5) - - with open("/tmp/m-zza-status.json", 'w') as f: - json.dump(status, f) - except: - traceback.print_exc() - - last_update = now - - - display.update() + try: + display_id = update_display(display, dbi) + display.update() + except: + traceback.print_exc() if __name__ == "__main__": diff --git a/settings_phalos.py b/settings_phalos.py index 290c57f..64b64b9 100644 --- a/settings_phalos.py +++ b/settings_phalos.py @@ -2,23 +2,6 @@ from pyfis.splitflap_display import SplitFlapDisplay, TextField, CustomMapField, from pyfis.utils import vias_from_csv, map_from_csv -def _load_map(file): - _map = {} - with open(file, 'r') as f: - lines = f.readlines() - for line in lines: - line = line.strip() - if not line: - continue - parts = line.split(maxsplit=1) - pos = int(parts[0]) - if len(parts) > 1: - text = parts[1] - _map[pos] = text - return _map - - -SERIAL_PORT = "/dev/serial/by-path/platform-3f980000.usb-usb-0:1.5:1.0-port0" DBI_HOST = "trains.xatlabs.com" STATION_CODE = "MH" STATION_NAME = "München Hbf" @@ -176,14 +159,15 @@ VIA_WEIGHTS = { } +# Wird nur noch gebraucht, um neue JSON-Datei zu erstellen class TypMZZA(SplitFlapDisplay): - hour = CustomMapField(MAP_HOUR, start_address=1, x=0, y=0, module_width=12, module_height=2, home_pos=99) - minute = CustomMapField(MAP_MINUTE, start_address=2, x=12, y=0, module_width=4, module_height=2, home_pos=99) - info_1 = CustomMapField(MAP_INFO_1, start_address=4, x=0, y=2, module_width=16, module_height=2, home_pos=99) - info_2 = CustomMapField(MAP_INFO_2, start_address=5, x=0, y=4, module_width=16, module_height=2, home_pos=99) - via_1 = CustomMapField(MAP_VIA_1, start_address=6, x=16, y=2, module_width=16, module_height=2, home_pos=99) - via_2 = CustomMapField(MAP_VIA_2, start_address=7, x=16, y=4, module_width=16, module_height=2, home_pos=99) - destination = TextField(start_address=8, length=16, x=0, y=6, module_width=2, module_height=2, display_mapping=MAP_ALNUM, home_pos=99) + hour = CustomMapField(MAP_HOUR, start_address=1, x=0, y=0, module_width=12, module_height=2, home_pos=127) + minute = CustomMapField(MAP_MINUTE, start_address=2, x=12, y=0, module_width=4, module_height=2, home_pos=127) + info_1 = CustomMapField(MAP_INFO_1, start_address=4, x=0, y=2, module_width=16, module_height=2, home_pos=127) + info_2 = CustomMapField(MAP_INFO_2, start_address=5, x=0, y=4, module_width=16, module_height=2, home_pos=127) + via_1 = CustomMapField(MAP_VIA_1, start_address=6, x=16, y=2, module_width=16, module_height=2, home_pos=127) + via_2 = CustomMapField(MAP_VIA_2, start_address=7, x=16, y=4, module_width=16, module_height=2, home_pos=127) + destination = TextField(start_address=8, length=16, x=0, y=6, module_width=2, module_height=2, display_mapping=MAP_ALNUM, home_pos=127) hour_b = MirrorField(hour, start_address=24, x=0, y=10) minute_b = MirrorField(minute, start_address=25, x=12, y=10)