Skip to content

Instantly share code, notes, and snippets.

@jason19970210
Created April 11, 2023 06:02
Show Gist options
  • Save jason19970210/0c9bbc6b43679c0b0aece00cf2f11850 to your computer and use it in GitHub Desktop.
Save jason19970210/0c9bbc6b43679c0b0aece00cf2f11850 to your computer and use it in GitHub Desktop.
#!/usr/bin/python
# -*- coding:utf-8 -*-
import os, sys, logging, time, datetime, signal
from datetime import datetime
import config
import utils
import threading
from flask import Flask, jsonify, request
from PIL import Image, ImageDraw, ImageFont
from waveshare_epd import epd4in2
logging.basicConfig(level=logging.WARNING)
epd = epd4in2.EPD() # initial
epd.init()
epd.Clear()
epd_status = True
g_network_info = []
g_dataObject = config.DataObj()
def font(size: int) -> ImageFont.FreeTypeFont:
return ImageFont.truetype(os.path.join(config.picdir, config.font), size)
def refresh_info(callback):
logging.info("refresh info")
global g_network_info
try:
while True:
network_info = utils.get_network_info()
if g_network_info == network_info:
logging.info("network util not changed")
else:
g_network_info = network_info
logging.warning("network util changed")
callback()
time.sleep(3)
except KeyboardInterrupt:
print("while true KeyboardInterrupt")
return
def start_refresh_info():
global g_network_info
g_network_info = utils.get_network_info()
def updateObject(obj: dict):
global g_dataObject
g_dataObject = config.DataObj(obj)
# print(g_dataObject.__dict__)
def display() -> None:
info = utils.network_info_list_to_str(g_network_info)
Limage = Image.new('1', (epd.height, epd.width), 255)
draw = ImageDraw.Draw(Limage)
try:
name = f"{g_dataObject.last_name} / {g_dataObject.first_name}"
display_date = datetime.today().strftime(config.datetime_format)
# sketch line
draw.line((0, 70, 300, 70), fill=0)
draw.line((0, 180, 300, 180), fill=0)
draw.line((0, 290, 300, 290), fill=0)
draw.text((5, 10), g_dataObject.id_1, font=font(40), fill=0)
# passsenger info
draw.text((185, 10), name, font=font(18), fill=0)
draw.text((185, 25), 'BAG: 1/15KG', font=font(18), fill=0)
draw.text((185, 40), g_dataObject.id_2, font=font(18), fill=0)
draw.text((10, 85), 'TO', font=font(35), fill=0)
draw.rectangle((58, 80, 215, 160), fill=0, outline=0)
draw.text((60, 70), g_dataObject.destination, font=font(100), fill=1)
# draw.text((110, 70), 'P', font=font(90), fill=1)
# draw.text((160, 70), 'E', font=font(90), fill=1)
draw.text((225, 115), g_dataObject.id_3, font=font(22), fill=0)
draw.text((225, 135), display_date, font=font(22), fill=0)
draw.text((10, 195), 'VIA', font=font(35), fill=0)
if g_dataObject.transport_1 != "-":
draw.text((60, 180), g_dataObject.transport_1, font=font(100), fill=0)
# draw.text((110, 180), 'K', font=font(90), fill=0)
# draw.text((160, 180), 'K', font=font(90), fill=0)
draw.text((225, 225), g_dataObject.id_4, font=font(22), fill=0)
draw.text((225, 245), display_date, font=font(22), fill=0)
draw.text((10, 305), 'VIA', font=font(35), fill=0)
if g_dataObject.transport_2 != "-":
draw.text((60, 290), g_dataObject.transport_2,font=font(100), fill=0)
# draw.text((110, 290), 'U', font=font(90), fill=0)
# draw.text((160, 290), 'H', font=font(90), fill=0)
draw.text((225, 335), g_dataObject.id_5,font=font(22), fill=0)
draw.text((225, 355), display_date, font=font(22), fill=0)
except:
logging.warning(f'g_dataObject is empty')
draw.text((10, 385), info, font=font(12), fill=0)
epd.display(epd.getbuffer(Limage))
app = Flask(__name__)
@app.route('/clear', methods=['GET'])
def clear():
global g_dataObject
g_dataObject = config.DataObj()
display()
return jsonify({'message': 'OK'})
@app.route('/sleep', methods=['GET'])
def sleep():
epd.Clear()
epd.sleep()
epd_status = False
return jsonify({'message': 'OK'})
@app.route('/form', methods=['POST'])
def post_form():
if epd_status == False:
epd = epd4in2.EPD() # initial
epd.init()
# epd.Clear()
resp_json: dict = request.get_json()
# print(resp_json)
updateObject(resp_json)
display()
return jsonify({'message': 'OK', "userData": g_dataObject.__dict__})
if __name__ == '__main__':
refresh_thread = threading.Thread(target=refresh_info, args=[display], daemon=True)
refresh_thread.start()
start_refresh_info()
display()
app.run('0.0.0.0', port=config.flask_port)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment