Toggle Navigation
Hatchery
Eggs
mch2022tickets
tickets.py
Users
Badges
Login
Register
MCH2022 badge?
go to mch2022.badge.team
tickets.py
raw
Content
import ugfx, wifi, urandom, json from time import sleep, time from umqtt.simple import MQTTClient mqtt_last_ping = time() done = False # Received messages from subscriptions will be delivered to this callback def sub_cb(topic, msg): data = json.loads(msg.decode('utf-8')) ugfx.clear(ugfx.WHITE) ugfx.flush() ugfx.clear(ugfx.BLACK) ugfx.flush() ugfx.clear(ugfx.WHITE) ugfx.flush() ugfx.string(60,10,'Available: %s' % str(data['available_number']),"Roboto_BlackItalic24",ugfx.BLACK) ugfx.string(40,40,'Sold: %s' % str(data['sold']),"PermanentMarker36",ugfx.BLACK) ugfx.string(35,90,"tickets.mch2022.org","Roboto_BlackItalic24",ugfx.BLACK) ugfx.flush() def connect(server, connect_print): if connect_print: ugfx.clear(ugfx.WHITE) ugfx.string(10,10,"Connecting to MQTT...","Roboto_Regular12", 0) ugfx.flush() clientname = 'SHA2017Badge ' + str(urandom.getrandbits(30)) c = MQTTClient(clientname, server, keepalive=60) c.set_callback(sub_cb) c.connect() c.subscribe(b"mch2022/ticketshop/RegularTickets") print('mqtt connected') return c def main(server="mqtt.mch2022.org", connect_print=True): global mqtt_last_ping, mqtt_keepalive, done while not done: c = connect(server, connect_print) c.check_msg() try: while not done: # Workaround: The MQTT lib does not send ping messages current_time = time() if current_time > mqtt_last_ping + c.keepalive: c.ping() mqtt_last_ping = current_time c.check_msg() sleep(1) c.disconnect() except OSError: # Restart... pass def go_home(pushed): global done if pushed: done = True def run(): global done inited_once = False while not done: try: wifi.connect() except: wifi.init() if not inited_once: ugfx.init() ugfx.input_init() ugfx.clear(ugfx.WHITE) ugfx.string(10,10,"Waiting for wifi...","Roboto_Regular12", 0) ugfx.flush() try: wifi.wait() except: while not wifi.sta_if.isconnected() and not done: sleep(0.1) if not inited_once: ugfx.input_attach(ugfx.BTN_B, go_home) connect_print = not inited_once inited_once = True try: main(connect_print=connect_print) except: # The MQTT library is buggy when the WiFi connection is unstable pass