From 154d084933116aa273751480b4faad401a14c85f Mon Sep 17 00:00:00 2001 From: jaseg Date: Tue, 26 Dec 2023 15:08:07 +0100 Subject: [PATCH] Add idle message loop --- idle_rotation.txt | 12 +++++ queue.py | 110 +++++++++++++++++++++++++++++++++++++++------- 2 files changed, 106 insertions(+), 16 deletions(-) create mode 100644 idle_rotation.txt diff --git a/idle_rotation.txt b/idle_rotation.txt new file mode 100644 index 0000000..6607e1b --- /dev/null +++ b/idle_rotation.txt @@ -0,0 +1,12 @@ +5:Send your own text at +15:8seg.jaseg.de +5:Send your own text at +15:8seg.jaseg.de +15:37C3 +15:UNLOCKED +15:37C3 +15:UNLOCKED +15:37C3 +15:UNLOCKED +15:37C3 +15:UNLOCKED diff --git a/queue.py b/queue.py index 3a83715..4140cf8 100644 --- a/queue.py +++ b/queue.py @@ -4,6 +4,7 @@ import math import time import sqlite3 from datetime import datetime +from pathlib import Path import serial import click @@ -65,18 +66,83 @@ seg_map = { "#": 0xff, } +def shuffle_segments(d): + bits_in = [7, 6, 5, 4, 3, 2, 1, 0] + bits_out = [7, 6, 5, 4, 3, 2, 1, 0] + + out = 0 + for bit_in, bit_out in zip(bits_in, bits_out): + if d & (1< 0: + idle_seconds -= 1 + else: + if idle_rotation.is_file(): + idle_messages = idle_rotation.read_text().splitlines() + else: + idle_messages = ['10:37C3', '10:UNLOCKED'] + + if idle_index >= len(idle_messages): + idle_index = 0 + + interval, _, message = idle_messages[idle_index].partition(':') + idle_seconds = int(interval) + idle_index += 1 + + print(f' [Idle {idle_index}/{len(idle_messages)}] {message}') + set_display(ser, message, 0, display_width, global_brightness) + time.sleep(1) continue queue_pressure = max(0, min((math.log10(max(1, count-3)) - 0.3) * message_interval*2/3, message_interval*1/3)) interval = message_interval - queue_pressure + print(f' Waiting interval of {message_interval:.1f} s with queue pressure {queue_pressure:.1f} from n={count} items for a total of {interval:.1f} s') + rowid, message, timestamp, remote_ip, suppress_display = db.execute(''' SELECT rowid, message, timestamp_received, remote_ip, suppress_display FROM messages @@ -114,17 +200,9 @@ def cli(database, port, baudrate, message_interval, display_width, global_bright print(f'Queueing message by {remote_ip} received at {timestamp} ({delta//60:.0f}m {delta%60:.0f}s ago):') print(' ', repr(message)) - lines = [ line for line in message.splitlines() if line.strip() ] - interval = max(5, interval/len(lines)) - for i, line in enumerate(lines): - print(f' [Line {i+1}/{len(lines)}] Waiting interval of {message_interval:.1f} s with queue pressure {queue_pressure:.1f} from n={count} items for a total of {interval:.1f} s') - - line = line.center(display_width)[:display_width] - line_mapped = [seg_map.get(c, seg_map['#']) for c in line] - formatted = ''.join(f'{global_brightness:1x}{d:02x}' for d in line_mapped) + '\n' - time.sleep(interval) - ser.write(formatted) - ser.flush() + idle_seconds = 0 + interval = max(5, interval/len(message.splitlines())) + set_display(ser, message, interval, display_width, global_brightness) if __name__ == '__main__':