Update code to use xatLabs Cheetah display controller
This commit is contained in:
parent
d476f2ccd9
commit
f32241ab5c
Binary file not shown.
68
run.py
68
run.py
|
@ -1,6 +1,5 @@
|
||||||
from deutschebahn import DBInfoscreen
|
from deutschebahn import DBInfoscreen
|
||||||
from pyfis.krone import Krone8200Display
|
from pyfis.xatlabs import xatLabsCheetah
|
||||||
from pyfis.krone.exceptions import CommunicationError
|
|
||||||
from pyfis.utils import get_vias
|
from pyfis.utils import get_vias
|
||||||
from util import timeout, TimeoutError
|
from util import timeout, TimeoutError
|
||||||
|
|
||||||
|
@ -169,69 +168,18 @@ def update_display(display, dbi):
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
ctrl = Krone8200Display(SERIAL_PORT, address=(0x41, 0x49), debug=True)
|
ctrl = xatLabsCheetah("http://typ-m-zza.local")
|
||||||
ctrl.port.timeout=5.0
|
display = ctrl.get_splitflap_display()
|
||||||
|
|
||||||
dbi = DBInfoscreen(DBI_HOST)
|
dbi = DBInfoscreen(DBI_HOST)
|
||||||
|
|
||||||
display = TypMZZA(ctrl)
|
|
||||||
display.clear()
|
display.clear()
|
||||||
|
|
||||||
last_update = 0
|
|
||||||
last_heartbeat = 0
|
|
||||||
while True:
|
|
||||||
now = time.time()
|
|
||||||
|
|
||||||
if now - last_heartbeat >= 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:
|
try:
|
||||||
with open("/tmp/m-zza-status.json", 'r') as f:
|
display_id = update_display(display, dbi)
|
||||||
status = json.load(f)
|
display.update()
|
||||||
except (FileNotFoundError, ValueError):
|
except:
|
||||||
status = {'displayHash': None}
|
traceback.print_exc()
|
||||||
|
|
||||||
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()
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
@ -2,23 +2,6 @@ from pyfis.splitflap_display import SplitFlapDisplay, TextField, CustomMapField,
|
||||||
from pyfis.utils import vias_from_csv, map_from_csv
|
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"
|
DBI_HOST = "trains.xatlabs.com"
|
||||||
STATION_CODE = "MH"
|
STATION_CODE = "MH"
|
||||||
STATION_NAME = "München Hbf"
|
STATION_NAME = "München Hbf"
|
||||||
|
@ -176,14 +159,15 @@ VIA_WEIGHTS = {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Wird nur noch gebraucht, um neue JSON-Datei zu erstellen
|
||||||
class TypMZZA(SplitFlapDisplay):
|
class TypMZZA(SplitFlapDisplay):
|
||||||
hour = CustomMapField(MAP_HOUR, start_address=1, x=0, y=0, module_width=12, module_height=2, 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=99)
|
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=99)
|
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=99)
|
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=99)
|
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=99)
|
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=99)
|
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)
|
hour_b = MirrorField(hour, start_address=24, x=0, y=10)
|
||||||
minute_b = MirrorField(minute, start_address=25, x=12, y=10)
|
minute_b = MirrorField(minute, start_address=25, x=12, y=10)
|
||||||
|
|
Loading…
Reference in New Issue