Skip to content
Snippets Groups Projects
Commit 92e6aa79 authored by bodzsoaa's avatar bodzsoaa
Browse files

Change to socketserver, Update image output

parent b9773ebe
No related branches found
No related tags found
No related merge requests found
import qrcode import qrcode
import socket
import sqlite3 import sqlite3
import socketserver
from datetime import datetime
from PIL import Image, ImageDraw, ImageFont from PIL import Image, ImageDraw, ImageFont
def main(): qr = qrcode.QRCode(
qr = qrcode.QRCode( version=1,
version=1, error_correction=qrcode.constants.ERROR_CORRECT_H,
error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10,
box_size=10, border=4,
border=4, )
)
conn = sqlite3.connect("MUEB_register.db")
conn = sqlite3.connect("MUEB_register.db") c = conn.cursor()
c = conn.cursor()
# create mueb table
# create mueb table try:
try: c.execute('''
c.execute(''' CREATE TABLE mueb (
CREATE TABLE mueb ( mueb_id INTEGER PRIMARY KEY,
mueb_id INTEGER PRIMARY KEY, mac STRING (17) UNIQUE
mac STRING (17) UNIQUE NOT NULL
NOT NULL );
); ''')
''') except:
except: pass
pass
print("Listening for MUEB DHCP discover")
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) print("{:<8} {:<17} {:<5}".format("scan", "MAC", "MUEB id"))
s.bind(('', 67))
prev_MAC = None
prev_MAC = None
id = 0
class UDPHandler(socketserver.BaseRequestHandler):
print("Listening for MUEB DHCP discover") def handle(self):
print("{:<5} {:<20} {:<5}".format("scan", "MAC", "MUEB id")) global prev_MAC
data = self.request[0].strip()
while 1: CHADDR = list(data[28:34]) # CHWADDR
# wait for dhcp packet if(hex(CHADDR[0]) != '0x54' or hex(CHADDR[1]) != '0x10' or hex(CHADDR[2]) != '0xec'):
data = s.recv(1024) return
tmp = list(data[28:34])
if(hex(tmp[0]) != '0x54' or hex(tmp[1]) != '0x10' or hex(tmp[2]) != '0xec'): MAC = ':'.join(["{0:02X}".format(i) for i in CHADDR])
continue
# handle multiple requests from the same device
MAC = ':'.join(["{0:02X}".format(i) for i in list(data[28:34])])
# save to DB
c.execute("INSERT OR IGNORE INTO mueb(mac) VALUES('{}')".format(MAC))
conn.commit()
c.execute("SELECT mueb_id FROM mueb WHERE mac='{}'".format(MAC))
mueb_id = c.fetchall()[0][0]
print("{:<5} {:<20} {:<5}".format(id, MAC, mueb_id))
id += 1
# handle multiple requests
if prev_MAC != MAC: if prev_MAC != MAC:
# save to DB
c.execute("INSERT OR IGNORE INTO mueb(mac) VALUES('{}')".format(MAC))
conn.commit()
c.execute("SELECT mueb_id FROM mueb WHERE mac='{}'".format(MAC))
mueb_id = c.fetchall()[0][0]
print("{:<8} {:<17} {:<5}".format(
datetime.now().strftime('%H:%M:%S'), MAC, mueb_id))
qr.add_data(MAC) qr.add_data(MAC)
qr.make(fit=True) qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white") img = qr.make_image(fill_color="black", back_color="white")
width, height = img.size W, H = img.size
finalImg = Image.new('RGBA', (width, height), 'white') font = ImageFont.truetype("arial.ttf", 30)
finalImg.paste(img) w, h = font.getsize(MAC)
caption = MAC+"\n\n{}".format(str(mueb_id).center(32))
caption = MAC+"/{}".format(mueb_id) finalImg = Image.new(
font = ImageFont.truetype("arial.ttf", 15) 'RGBA', (W+w+qr.border*qr.box_size, H), 'white')
w, h = font.getsize(caption) finalImg.paste(img)
draw = ImageDraw.Draw(finalImg) draw = ImageDraw.Draw(finalImg)
draw.text((round((width-w)/2), round(height-h-10)), draw.text((W, (H-(qr.border*qr.box_size))/2),
caption, "black", font) caption, "black", font)
finalImg.show() finalImg.show()
finalImg.save("{}.png".format(mueb_id)) finalImg.save("{}.png".format(mueb_id))
qr.clear() qr.clear()
prev_MAC = MAC prev_MAC = MAC
def main():
with socketserver.UDPServer(('', 67), UDPHandler) as server:
try:
server.serve_forever()
except KeyboardInterrupt:
conn.close()
if __name__ == '__main__': if __name__ == '__main__':
main() main()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment