Toggle Navigation
Hatchery
Eggs
where-are-you
__init__.py
Users
Badges
Login
Register
MCH2022 badge?
go to mch2022.badge.team
__init__.py
raw
Content
# https://github.com/Treora/locator # Made with love and impatience by bwb & treora. import random import wifi import network import time import ugfx import appglue import badge import usocket channel = '#sha2017-locationspam' welcome_message = "%s:" % channel messages = ['','','','','','','',''] # from https://radius.sha2017.org/probe/bssid_list bssid2name={b'\x18\x64\x72\x81\xe8\x50':'Radiostudio', b'\x18\x64\x72\x81\xe8\x51':'Radiostudio', b'\x18\x64\x72\x81\xe8\x52':'Radiostudio', b'\x18\x64\x72\x81\xe8\x53':'Radiostudio', b'\x18\x64\x72\x81\xe8\x40':'Radiostudio', b'\x18\x64\x72\x81\xe8\x41':'Radiostudio', b'\x18\x64\x72\x81\xe8\x42':'Radiostudio', b'\x18\x64\x72\x81\xe8\x43':'Radiostudio', b'\x18\x64\x72\x9b\xf4\x70':'Badge bar', b'\x18\x64\x72\x9b\xf4\x71':'Badge bar', b'\x18\x64\x72\x9b\xf4\x72':'Badge bar', b'\x18\x64\x72\x9b\xf4\x73':'Badge bar', b'\x18\x64\x72\x9b\xf4\x60':'Badge bar', b'\x18\x64\x72\x9b\xf4\x61':'Badge bar', b'\x18\x64\x72\x9b\xf4\x62':'Badge bar', b'\x18\x64\x72\x9b\xf4\x63':'Badge bar', b'\x24\xde\xc6\xcb\xa1\x18':'Security', b'\x24\xde\xc6\xcb\xa1\x19':'Security', b'\x24\xde\xc6\xcb\xa1\x1a':'Security', b'\x24\xde\xc6\xcb\xa1\x1b':'Security', b'\x24\xde\xc6\xcb\xa1\x10':'Security', b'\x24\xde\xc6\xcb\xa1\x11':'Security', b'\x24\xde\xc6\xcb\xa1\x12':'Security', b'\x24\xde\xc6\xcb\xa1\x13':'Security', b'\x24\xde\xc6\xdd\x36\xf0':'field Hopper-1', b'\x24\xde\xc6\xdd\x36\xf1':'field Hopper-1', b'\x24\xde\xc6\xdd\x36\xf2':'field Hopper-1', b'\x24\xde\xc6\xdd\x36\xf3':'field Hopper-1', b'\x24\xde\xc6\xdd\x36\xe0':'field Hopper-1', b'\x24\xde\xc6\xdd\x36\xe1':'field Hopper-1', b'\x24\xde\xc6\xdd\x36\xe2':'field Hopper-1', b'\x24\xde\xc6\xdd\x36\xe3':'field Hopper-1', b'\x24\xde\xc6\xdf\x2a\x50':'field Hopper-2', b'\x24\xde\xc6\xdf\x2a\x51':'field Hopper-2', b'\x24\xde\xc6\xdf\x2a\x52':'field Hopper-2', b'\x24\xde\xc6\xdf\x2a\x53':'field Hopper-2', b'\x24\xde\xc6\xdf\x2a\x40':'field Hopper-2', b'\x24\xde\xc6\xdf\x2a\x41':'field Hopper-2', b'\x24\xde\xc6\xdf\x2a\x42':'field Hopper-2', b'\x24\xde\xc6\xdf\x2a\x43':'field Hopper-2', b'\x24\xde\xc6\xdf\x64\x90':'street Uplink-2', b'\x24\xde\xc6\xdf\x64\x91':'street Uplink-2', b'\x24\xde\xc6\xdf\x64\x92':'street Uplink-2', b'\x24\xde\xc6\xdf\x64\x93':'street Uplink-2', b'\x24\xde\xc6\xdf\x64\x80':'street Uplink-2', b'\x24\xde\xc6\xdf\x64\x81':'street Uplink-2', b'\x24\xde\xc6\xdf\x64\x82':'street Uplink-2', b'\x24\xde\xc6\xdf\x64\x83':'street Uplink-2', b'\x24\xde\xc6\xe0\x4b\xf0':'field Flowers-1', b'\x24\xde\xc6\xe0\x4b\xf1':'field Flowers-1', b'\x24\xde\xc6\xe0\x4b\xf2':'field Flowers-1', b'\x24\xde\xc6\xe0\x4b\xf3':'field Flowers-1', b'\x24\xde\xc6\xe0\x4b\xe0':'field Flowers-1', b'\x24\xde\xc6\xe0\x4b\xe1':'field Flowers-1', b'\x24\xde\xc6\xe0\x4b\xe2':'field Flowers-1', b'\x24\xde\xc6\xe0\x4b\xe3':'field Flowers-1', b'\x24\xde\xc6\x0f\x4b\x30':'POC', b'\x24\xde\xc6\x0f\x4b\x31':'POC', b'\x24\xde\xc6\x0f\x4b\x32':'POC', b'\x24\xde\xc6\x0f\x4b\x33':'POC', b'\x24\xde\xc6\x0f\x4b\x20':'POC', b'\x24\xde\xc6\x0f\x4b\x21':'POC', b'\x24\xde\xc6\x0f\x4b\x23':'POC', b'\x24\xde\xc6\x0f\x4b\x24':'POC', b'\x24\xde\xc6\x0f\x50\x90':'field Alexander-2', b'\x24\xde\xc6\x0f\x50\x91':'field Alexander-2', b'\x24\xde\xc6\x0f\x50\x92':'field Alexander-2', b'\x24\xde\xc6\x0f\x50\x93':'field Alexander-2', b'\x24\xde\xc6\x0f\x50\x80':'field Alexander-2', b'\x24\xde\xc6\x0f\x50\x81':'field Alexander-2', b'\x24\xde\xc6\x0f\x50\x82':'field Alexander-2', b'\x24\xde\xc6\x0f\x50\x83':'field Alexander-2', b'\x34\xfc\xb9\x19\x69\x50':'workshop Tau', b'\x34\xfc\xb9\x19\x69\x51':'workshop Tau', b'\x34\xfc\xb9\x19\x69\x52':'workshop Tau', b'\x34\xfc\xb9\x19\x69\x53':'workshop Tau', b'\x40\xe3\xd6\xb7\x6a\x90':'Pancake Village', b'\x40\xe3\xd6\xb7\x6a\x91':'Pancake Village', b'\x40\xe3\xd6\xb7\x6a\x92':'Pancake Village', b'\x40\xe3\xd6\xb7\x6a\x93':'Pancake Village', b'\x40\xe3\xd6\xb7\x6a\x80':'Pancake Village', b'\x40\xe3\xd6\xb7\x6a\x81':'Pancake Village', b'\x40\xe3\xd6\xb7\x6a\x82':'Pancake Village', b'\x40\xe3\xd6\xb7\x6a\x83':'Pancake Village', b'\x40\xe3\xd6\x24\x0f\xb0':'Parking', b'\x40\xe3\xd6\x24\x0f\xb1':'Parking', b'\x40\xe3\xd6\x24\x0f\xb2':'Parking', b'\x40\xe3\xd6\x24\x0f\xb3':'Parking', b'\x40\xe3\xd6\x24\x0f\xa0':'Parking', b'\x40\xe3\xd6\x24\x0f\xa1':'Parking', b'\x40\xe3\xd6\x24\x0f\xa2':'Parking', b'\x40\xe3\xd6\x24\x0f\xa3':'Parking', b'\x6c\xf3\x7f\xa5\xce\x00':'field Lamarr-5', b'\x6c\xf3\x7f\xa5\xce\x01':'field Lamarr-5', b'\x6c\xf3\x7f\xa5\xce\x02':'field Lamarr-5', b'\x6c\xf3\x7f\xa5\xce\x03':'field Lamarr-5', b'\x6c\xf3\x7f\xb2\x40\x90':'field Torvalds-4', b'\x6c\xf3\x7f\xb2\x40\x91':'field Torvalds-4', b'\x6c\xf3\x7f\xb2\x40\x92':'field Torvalds-4', b'\x6c\xf3\x7f\xb2\x40\x93':'field Torvalds-4', b'\x6c\xf3\x7f\xb2\x40\x80':'field Torvalds-4', b'\x6c\xf3\x7f\xb2\x40\x81':'field Torvalds-4', b'\x6c\xf3\x7f\xb2\x40\x82':'field Torvalds-4', b'\x6c\xf3\x7f\xb2\x40\x83':'field Torvalds-4', b'\x6c\xf3\x7f\xb8\x45\xf0':'field Liskov-2', b'\x6c\xf3\x7f\xb8\x45\xf1':'field Liskov-2', b'\x6c\xf3\x7f\xb8\x45\xf2':'field Liskov-2', b'\x6c\xf3\x7f\xb8\x45\xf3':'field Liskov-2', b'\x6c\xf3\x7f\xb8\x4b\x70':'field Lamarr-1', b'\x6c\xf3\x7f\xb8\x4b\x71':'field Lamarr-1', b'\x6c\xf3\x7f\xb8\x4b\x72':'field Lamarr-1', b'\x6c\xf3\x7f\xb8\x4b\x73':'field Lamarr-1', b'\x6c\xf3\x7f\x56\x1a\xd0':'field Olsen-3', b'\x6c\xf3\x7f\x56\x1a\xd1':'field Olsen-3', b'\x6c\xf3\x7f\x56\x1a\xd2':'field Olsen-3', b'\x6c\xf3\x7f\x56\x1a\xd3':'field Olsen-3', b'\x6c\xf3\x7f\x56\x1a\xc0':'field Olsen-3', b'\x6c\xf3\x7f\x56\x1a\xc1':'field Olsen-3', b'\x6c\xf3\x7f\x56\x1a\xc2':'field Olsen-3', b'\x6c\xf3\x7f\x56\x1a\xc3':'field Olsen-3', b'\x6c\xf3\x7f\x56\x1b\x90':'field Olsen-1', b'\x6c\xf3\x7f\x56\x1b\x91':'field Olsen-1', b'\x6c\xf3\x7f\x56\x1b\x92':'field Olsen-1', b'\x6c\xf3\x7f\x56\x1b\x93':'field Olsen-1', b'\x6c\xf3\x7f\x56\x1b\x80':'field Olsen-1', b'\x6c\xf3\x7f\x56\x1b\x81':'field Olsen-1', b'\x6c\xf3\x7f\x56\x1b\x82':'field Olsen-1', b'\x6c\xf3\x7f\x56\x1b\x83':'field Olsen-1', b'\x6c\xf3\x7f\x56\x2f\x50':'field Turing-1', b'\x6c\xf3\x7f\x56\x2f\x51':'field Turing-1', b'\x6c\xf3\x7f\x56\x2f\x52':'field Turing-1', b'\x6c\xf3\x7f\x56\x2f\x53':'field Turing-1', b'\x6c\xf3\x7f\x56\x2f\x40':'field Turing-1', b'\x6c\xf3\x7f\x56\x2f\x41':'field Turing-1', b'\x6c\xf3\x7f\x56\x2f\x42':'field Turing-1', b'\x6c\xf3\x7f\x56\x2f\x43':'field Turing-1', b'\x6c\xf3\x7f\x5f\xd7\x90':'field Turing-2', b'\x6c\xf3\x7f\x5f\xd7\x91':'field Turing-2', b'\x6c\xf3\x7f\x5f\xd7\x92':'field Turing-2', b'\x6c\xf3\x7f\x5f\xd7\x93':'field Turing-2', b'\x6c\xf3\x7f\x5f\xd7\x80':'field Turing-2', b'\x6c\xf3\x7f\x5f\xd7\x81':'field Turing-2', b'\x6c\xf3\x7f\x5f\xd7\x82':'field Turing-2', b'\x6c\xf3\x7f\x5f\xd7\x83':'field Turing-2', b'\x6c\xf3\x7f\x5f\xeb\xf0':'field Wilson', b'\x6c\xf3\x7f\x5f\xeb\xf1':'field Wilson', b'\x6c\xf3\x7f\x5f\xeb\xf2':'field Wilson', b'\x6c\xf3\x7f\x5f\xeb\xf3':'field Wilson', b'\x6c\xf3\x7f\x5f\xeb\xe0':'field Wilson', b'\x6c\xf3\x7f\x5f\xeb\xe1':'field Wilson', b'\x6c\xf3\x7f\x5f\xeb\xe2':'field Wilson', b'\x6c\xf3\x7f\x5f\xeb\xe3':'field Wilson', b'\x84\xd4\x7e\xac\xdc\x90':'Orga', b'\x84\xd4\x7e\xac\xdc\x91':'Orga', b'\x84\xd4\x7e\xac\xdc\x92':'Orga', b'\x84\xd4\x7e\xac\xdc\x93':'Orga', b'\x84\xd4\x7e\xac\xdc\x80':'Orga', b'\x84\xd4\x7e\xac\xdc\x81':'Orga', b'\x84\xd4\x7e\xac\xdc\x82':'Orga', b'\x84\xd4\x7e\xac\xdc\x83':'Orga', b'\x94\xb4\x0f\x32\x0b\xf0':'zuse', b'\x94\xb4\x0f\x32\x0b\xf1':'zuse', b'\x94\xb4\x0f\x32\x0b\xf2':'zuse', b'\x94\xb4\x0f\x32\x0b\xf3':'zuse', b'\x94\xb4\x0f\x32\x0b\xe0':'zuse', b'\x94\xb4\x0f\x32\x0b\xe1':'zuse', b'\x94\xb4\x0f\x32\x0b\xe2':'zuse', b'\x94\xb4\x0f\x32\x0b\xe3':'zuse', b'\x94\xb4\x0f\x53\x55\x90':'AV', b'\x94\xb4\x0f\x53\x55\x91':'AV', b'\x94\xb4\x0f\x53\x55\x92':'AV', b'\x94\xb4\x0f\x53\x55\x93':'AV', b'\x94\xb4\x0f\x53\x55\x80':'AV', b'\x94\xb4\x0f\x53\x55\x81':'AV', b'\x94\xb4\x0f\x53\x55\x82':'AV', b'\x94\xb4\x0f\x53\x55\x83':'AV', b'\x9c\x1c\x12\xb0\x25\x90':'street Uplink-1', b'\x9c\x1c\x12\xb0\x25\x91':'street Uplink-1', b'\x9c\x1c\x12\xb0\x25\x92':'street Uplink-1', b'\x9c\x1c\x12\xb0\x25\x93':'street Uplink-1', b'\x9c\x1c\x12\xb0\x25\x80':'street Uplink-1', b'\x9c\x1c\x12\xb0\x25\x81':'street Uplink-1', b'\x9c\x1c\x12\xb0\x25\x82':'street Uplink-1', b'\x9c\x1c\x12\xb0\x25\x83':'street Uplink-1', b'\xac\xa3\x1e\x81\x06\x70':'L0-TEMP', b'\xac\xa3\x1e\x81\x06\x71':'L0-TEMP', b'\xac\xa3\x1e\x81\x06\x72':'L0-TEMP', b'\xac\xa3\x1e\x81\x06\x73':'L0-TEMP', b'\xac\xa3\x1e\x81\x06\x60':'L0-TEMP', b'\xac\xa3\x1e\x81\x06\x61':'L0-TEMP', b'\xac\xa3\x1e\x81\x06\x62':'L0-TEMP', b'\xac\xa3\x1e\x81\x06\x63':'L0-TEMP', b'\xac\xa3\x1e\x81\x14\x80':'southtrunk-1', b'\xac\xa3\x1e\x81\x14\x81':'southtrunk-1', b'\xac\xa3\x1e\x81\x14\x82':'southtrunk-1', b'\xac\xa3\x1e\x81\x14\x83':'southtrunk-1', b'\xac\xa3\x1e\x83\x88\x10':'Entrance-1', b'\xac\xa3\x1e\x83\x88\x11':'Entrance-1', b'\xac\xa3\x1e\x83\x88\x12':'Entrance-1', b'\xac\xa3\x1e\x83\x88\x13':'Entrance-1', b'\xac\xa3\x1e\x83\x88\x00':'Entrance-1', b'\xac\xa3\x1e\x83\x88\x01':'Entrance-1', b'\xac\xa3\x1e\x83\x88\x02':'Entrance-1', b'\xac\xa3\x1e\x83\x88\x03':'Entrance-1', b'\xac\xa3\x1e\x87\x4e\x00':'Lamarr-Forest', b'\xac\xa3\x1e\x87\x4e\x01':'Lamarr-Forest', b'\xac\xa3\x1e\x87\x4e\x02':'Lamarr-Forest', b'\xac\xa3\x1e\x87\x4e\x03':'Lamarr-Forest', b'\xac\xa3\x1e\xd9\x5e\xd0':'Silent Lounge-a', b'\xac\xa3\x1e\xd9\x5e\xd1':'Silent Lounge-a', b'\xac\xa3\x1e\xd9\x5e\xd2':'Silent Lounge-a', b'\xac\xa3\x1e\xd9\x5e\xd3':'Silent Lounge-a', b'\xac\xa3\x1e\xd9\x5e\xc0':'Silent Lounge-a', b'\xac\xa3\x1e\xd9\x5e\xc1':'Silent Lounge-a', b'\xac\xa3\x1e\xd9\x5e\xc2':'Silent Lounge-a', b'\xac\xa3\x1e\xd9\x5e\xc3':'Silent Lounge-a', b'\xac\xa3\x1e\xde\xaa\xf0':'Silent Lounge-b', b'\xac\xa3\x1e\xde\xaa\xf1':'Silent Lounge-b', b'\xac\xa3\x1e\xde\xaa\xf2':'Silent Lounge-b', b'\xac\xa3\x1e\xde\xaa\xf3':'Silent Lounge-b', b'\xac\xa3\x1e\xde\xaa\xe0':'Silent Lounge-b', b'\xac\xa3\x1e\xde\xaa\xe1':'Silent Lounge-b', b'\xac\xa3\x1e\xde\xaa\xe2':'Silent Lounge-b', b'\xac\xa3\x1e\xde\xaa\xe3':'Silent Lounge-b', b'\xd8\xc7\xc8\x8d\x96\xb0':'field Rhodes-2', b'\xd8\xc7\xc8\x8d\x96\xb1':'field Rhodes-2', b'\xd8\xc7\xc8\x8d\x96\xb2':'field Rhodes-2', b'\xd8\xc7\xc8\x8d\x96\xb3':'field Rhodes-2', b'\xd8\xc7\xc8\x4a\xe7\x70':'field Alexander-1', b'\xd8\xc7\xc8\x4a\xe7\x71':'field Alexander-1', b'\xd8\xc7\xc8\x4a\xe7\x72':'field Alexander-1', b'\xd8\xc7\xc8\x4a\xe7\x73':'field Alexander-1', b'\xd8\xc7\xc8\x4a\xe7\x60':'field Alexander-1', b'\xd8\xc7\xc8\x4a\xe7\x61':'field Alexander-1', b'\xd8\xc7\xc8\x4a\xe7\x62':'field Alexander-1', b'\xd8\xc7\xc8\x4a\xe7\x63':'field Alexander-1', b'\xd8\xc7\xc8\x4d\x78\x10':'field Snowden-1', b'\xd8\xc7\xc8\x4d\x78\x11':'field Snowden-1', b'\xd8\xc7\xc8\x4d\x78\x12':'field Snowden-1', b'\xd8\xc7\xc8\x4d\x78\x13':'field Snowden-1', b'\xd8\xc7\xc8\x4d\x78\x00':'field Snowden-1', b'\xd8\xc7\xc8\x4d\x78\x01':'field Snowden-1', b'\xd8\xc7\xc8\x4d\x78\x02':'field Snowden-1', b'\xd8\xc7\xc8\x4d\x78\x03':'field Snowden-1', b'\xd8\xc7\xc8\x4d\xd0\xd0':'field Snowden-3', b'\xd8\xc7\xc8\x4d\xd0\xd1':'field Snowden-3', b'\xd8\xc7\xc8\x4d\xd0\xd2':'field Snowden-3', b'\xd8\xc7\xc8\x4d\xd0\xd3':'field Snowden-3', b'\xd8\xc7\xc8\x4d\xd0\xc0':'field Snowden-3', b'\xd8\xc7\xc8\x4d\xd0\xc1':'field Snowden-3', b'\xd8\xc7\xc8\x4d\xd0\xc2':'field Snowden-3', b'\xd8\xc7\xc8\x4d\xd0\xc3':'field Snowden-3', b'\xf0\x5c\x19\x22\x86\xb0':'room No-d', b'\xf0\x5c\x19\x22\x86\xb1':'room No-d', b'\xf0\x5c\x19\x22\x86\xb2':'room No-d', b'\xf0\x5c\x19\x22\x86\xb3':'room No-d', b'\xf0\x5c\x19\x22\x86\xa0':'room No-d', b'\xf0\x5c\x19\x22\x86\xa1':'room No-d', b'\xf0\x5c\x19\x22\x86\xa2':'room No-d', b'\xf0\x5c\x19\x22\x86\xa3':'room No-d', b'\xf0\x5c\x19\x22\x8c\x90':'room Pa-e', b'\xf0\x5c\x19\x22\x8c\x91':'room Pa-e', b'\xf0\x5c\x19\x22\x8c\x92':'room Pa-e', b'\xf0\x5c\x19\x22\x8c\x93':'room Pa-e', b'\xf0\x5c\x19\x22\x8c\x80':'room Pa-e', b'\xf0\x5c\x19\x22\x8c\x81':'room Pa-e', b'\xf0\x5c\x19\x22\x8c\x82':'room Pa-e', b'\xf0\x5c\x19\x22\x8c\x83':'room Pa-e', b'\xf0\x5c\x19\x22\x91\x30':'room Pa-b', b'\xf0\x5c\x19\x22\x91\x31':'room Pa-b', b'\xf0\x5c\x19\x22\x91\x32':'room Pa-b', b'\xf0\x5c\x19\x22\x91\x33':'room Pa-b', b'\xf0\x5c\x19\x22\x91\x20':'room Pa-b', b'\xf0\x5c\x19\x22\x91\x21':'room Pa-b', b'\xf0\x5c\x19\x22\x91\x22':'room Pa-b', b'\xf0\x5c\x19\x22\x91\x23':'room Pa-b', b'\xf0\x5c\x19\x22\xb2\x30':'room Pa-d', b'\xf0\x5c\x19\x22\xb2\x31':'room Pa-d', b'\xf0\x5c\x19\x22\xb2\x32':'room Pa-d', b'\xf0\x5c\x19\x22\xb2\x33':'room Pa-d', b'\xf0\x5c\x19\x22\xb2\x20':'room Pa-d', b'\xf0\x5c\x19\x22\xb2\x21':'room Pa-d', b'\xf0\x5c\x19\x22\xb2\x22':'room Pa-d', b'\xf0\x5c\x19\x22\xb2\x23':'room Pa-d', b'\xf0\x5c\x19\x22\xb5\x50':'room No-f', b'\xf0\x5c\x19\x22\xb5\x51':'room No-f', b'\xf0\x5c\x19\x22\xb5\x52':'room No-f', b'\xf0\x5c\x19\x22\xb5\x53':'room No-f', b'\xf0\x5c\x19\x22\xb5\x40':'room No-f', b'\xf0\x5c\x19\x22\xb5\x41':'room No-f', b'\xf0\x5c\x19\x22\xb5\x42':'room No-f', b'\xf0\x5c\x19\x22\xb5\x43':'room No-f', b'\xf0\x5c\x19\x22\xb7\xf0':'room Pa-f', b'\xf0\x5c\x19\x22\xb7\xf1':'room Pa-f', b'\xf0\x5c\x19\x22\xb7\xf2':'room Pa-f', b'\xf0\x5c\x19\x22\xb7\xf3':'room Pa-f', b'\xf0\x5c\x19\x22\xb7\xe0':'room Pa-f', b'\xf0\x5c\x19\x22\xb7\xe1':'room Pa-f', b'\xf0\x5c\x19\x22\xb7\xe2':'room Pa-f', b'\xf0\x5c\x19\x22\xb7\xe3':'room Pa-f', b'\xf0\x5c\x19\x22\xb8\xb0':'room Re-c', b'\xf0\x5c\x19\x22\xb8\xb1':'room Re-c', b'\xf0\x5c\x19\x22\xb8\xb2':'room Re-c', b'\xf0\x5c\x19\x22\xb8\xb3':'room Re-c', b'\xf0\x5c\x19\x22\xb8\xa0':'room Re-c', b'\xf0\x5c\x19\x22\xb8\xa1':'room Re-c', b'\xf0\x5c\x19\x22\xb8\xa2':'room Re-c', b'\xf0\x5c\x19\x22\xb8\xa3':'room Re-c', b'\xf0\x5c\x19\x23\x75\xd0':'room No-a', b'\xf0\x5c\x19\x23\x75\xd1':'room No-a', b'\xf0\x5c\x19\x23\x75\xd2':'room No-a', b'\xf0\x5c\x19\x23\x75\xd3':'room No-a', b'\xf0\x5c\x19\x23\x75\xc0':'room No-a', b'\xf0\x5c\x19\x23\x75\xc1':'room No-a', b'\xf0\x5c\x19\x23\x75\xc2':'room No-a', b'\xf0\x5c\x19\x23\x75\xc3':'room No-a'} def wifi2name(): wlan = network.WLAN(network.STA_IF) wlan.active("up") # Each result is a tuple: (ssid, bssid, channel, RSSI, authmode, hidden) results = wlan.scan() # only check BSSids on the list (since there are a lot of rogue APs) filtered = [entry for entry in results if entry[1] in bssid2name] strongest_ap = max(filtered, key=lambda ap: ap[3]) bssid = strongest_ap[1] # ssid = strongest_ap[0] # macaddress = ":".join(hex(x)[2:] for x in bssid) location = bssid2name.get(bssid) if (location): return location return 'no idea!' def init_screen(): ugfx.clear(ugfx.WHITE) ugfx.string(0, 0, welcome_message, 'Roboto_Black22', ugfx.BLACK) ugfx.init() ugfx.input_init() wifi.init() init_screen() #FIXME: Add small info with: A = location push, B = back, X = Set Your group + Filter group (all in one) ugfx.flush() def go_home(pushed): if pushed: appglue.home() ugfx.input_attach(ugfx.BTN_B, go_home) # wait for wifi while not wifi.sta_if.isconnected(): time.sleep(0.1) def relocate(pushed): if pushed: global location global messages location = wifi2name() ircsock.send(bytes("PRIVMSG %s :%s\r\n" % (channel, location), "UTF-8")) messages = messages[1:] + [constructMsg(bytes(nick, "UTF-8"), bytes(location, "UTF-8"))] update_screen() ugfx.input_attach(ugfx.BTN_A, relocate) location = wifi2name() lastlocation = location lastcheck = time.time() nick = badge.nvs_get_str("owner", "name", 'anonymous') random.seed(time.time()) #whatever! nickbadge = nick + '_badge_' + str(random.randint(1,9999)) ircsock = usocket.socket() ircsock.connect(("chat.freenode.net", 6667)) ircsock.settimeout(1) def constructMsg(author, location): t = time.localtime() return bytes("%02d:%02d:%02d " % (t[3], t[4], t[5]), "UTF-8") + author + b': ' + location def update_screen(): init_screen() for i, m in enumerate(messages): ugfx.string(0,24+i*12,m,"Roboto_Regular12",ugfx.BLACK) ugfx.flush() ircsock.send(bytes("NICK %s\r\n" % nickbadge, "UTF-8")) ircsock.send(bytes("USER %s 0 * :%s\r\n" % (nickbadge, nick), "UTF-8")) ircsock.send(bytes("JOIN %s\r\n" % channel, "UTF-8")); ircsock.send(bytes("PRIVMSG %s :%s\r\n" % (channel, location), "UTF-8")) messages = messages[1:] + [constructMsg(bytes(nick, "UTF-8"), bytes(location, "UTF-8"))] update_screen() while 1: if (time.time() - lastcheck > 60): lastcheck = time.time() location = wifi2name() if (location != lastlocation): ircsock.send(bytes("PRIVMSG %s :%s\r\n" % (channel, location), "UTF-8")) lastlocation = location messages = messages[1:] + [constructMsg(bytes(nick, "UTF-8"), bytes(location, "UTF-8"))] update_screen() line = '' try: line = ircsock.readline().rstrip() except Exception as e: #print("timeout") continue parts = line.split() if parts: if(parts[0] == b"PING"): ircsock.send(bytes("PONG %s\r\n" % line[1], "UTF-8")) if(parts[1] == b"PRIVMSG"): msg = b' '.join(parts[3:]).lstrip(b':') rnick = parts[0].split(b'!')[0].split(b'_badge')[0].lstrip(b':') messages = messages[1:] + [constructMsg(rnick, msg)] update_screen() print(line) # networking docs: # https://github.com/micropython/micropython-esp32/blob/046d15f074398cc2968fc66ae2fd25dc31100109/docs/library/network.rst # https://github.com/micropython/micropython-esp32/blob/ec9c2778867fbb4d0ef1ebf5ace6433b01589d05/docs/esp8266/tutorial/network_basics.rst