def callFunction(iface): w = Wlan(iface) i = w.getWirelessInterfaces() if i: if iface in i: return WlanStatusScreenMain return None
def getAccessPoints(self, refresh=False): self.APList = [] self.cleanList = [] self.w = Wlan(self.iface) aps = self.w.getNetworkList() if aps is not None: print "[WirelessLan.py] got Accespoints!" tmpList = [] compList = [] for ap in aps: a = aps[ap] if a['active']: tmpList.append((a['essid'], a['bssid'])) compList.append((a['essid'], a['bssid'], a['encrypted'], a['iface'], a['maxrate'], a['signal'])) for entry in tmpList: if entry[0] == "": for compentry in compList: if compentry[1] == entry[1]: compList.remove(compentry) for entry in compList: self.cleanList.append((entry[0], entry[1], entry[2], entry[3], entry[4], entry[5])) if not self.oldlist.has_key(entry[0]): self.oldlist[entry[0]] = {'data': entry} else: self.oldlist[entry[0]]['data'] = entry if "hidden..." not in self.cleanList: self.cleanList.append( (_("enter hidden network SSID"), "hidden...", True, self.iface, _("unavailable"), "")) for entry in self.cleanList: self.APList.append( self.buildEntryComponent(entry[0], entry[1], entry[2], entry[3], entry[4], entry[5])) if refresh is False: self['list'].setList(self.APList) self.listLength = len(self.APList) self.setInfo() self.rescanTimer.start(5000) return self.cleanList
def getAccessPoints(self, refresh = False): self.APList = [] self.cleanList = [] self.w = Wlan(self.iface) aps = self.w.getNetworkList() if aps is not None: print "[WirelessLan.py] got Accespoints!" tmpList = [] compList = [] for ap in aps: a = aps[ap] if a['active']: tmpList.append( (a['essid'], a['bssid']) ) compList.append( (a['essid'], a['bssid'], a['encrypted'], a['iface'], a['maxrate'], a['signal']) ) for entry in tmpList: if entry[0] == "": for compentry in compList: if compentry[1] == entry[1]: compList.remove(compentry) for entry in compList: self.cleanList.append( ( entry[0], entry[1], entry[2], entry[3], entry[4], entry[5] ) ) if not self.oldlist.has_key(entry[0]): self.oldlist[entry[0]] = { 'data': entry } else: self.oldlist[entry[0]]['data'] = entry if "hidden..." not in self.cleanList: self.cleanList.append( ( _("enter hidden network SSID"), "hidden...", True, self.iface, _("unavailable"), "" ) ) for entry in self.cleanList: self.APList.append(self.buildEntryComponent( entry[0], entry[1], entry[2], entry[3], entry[4], entry[5] )) if refresh is False: self['list'].setList(self.APList) self.listLength = len(self.APList) self.setInfo() self.rescanTimer.start(5000) return self.cleanList
import pycom import ujson import socket from network import LoRa from TextSensorDataParser import TextSensorDataParser from Wlan import Wlan from ApiDataSender import ApiDataSender import config pycom.heartbeat(False) parser = TextSensorDataParser(config.sensor_mapping) api_data_sender = ApiDataSender(config.endpoint) print("Connecting to Wifi") wlan = Wlan(config.wifi['user'], config.wifi['password']) wlan.connect() lora = LoRa(mode=LoRa.LORA, frequency=config.lora_frequency, tx_power=14) lora_socket = socket.socket(socket.AF_LORA, socket.SOCK_RAW) lora_socket.setblocking(False) print('Program started, listening on LoRa frequency {0}'.format( config.lora_frequency)) buffer = '' while True: incomming = lora_socket.recv(5) if incomming == None: continue buffer += incomming.decode('utf-8') if not parser.is_buffer_parsable(buffer): continue
class WlanScan(Screen): skin = """ <screen name="WlanScan" position="center,center" size="560,400" title="Choose a Wireless Network" > <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" /> <ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" alphatest="on" /> <ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" size="140,40" alphatest="on" /> <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" /> <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" /> <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" /> <widget source="list" render="Listbox" position="5,40" size="550,300" scrollbarMode="showOnDemand"> <convert type="TemplatedMultiContent"> {"template": [ MultiContentEntryText(pos = (0, 0), size = (550, 30), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the essid MultiContentEntryText(pos = (0, 30), size = (175, 20), font=1, flags = RT_HALIGN_LEFT, text = 5), # index 5 is the interface MultiContentEntryText(pos = (175, 30), size = (175, 20), font=1, flags = RT_HALIGN_LEFT, text = 4), # index 0 is the encryption MultiContentEntryText(pos = (350, 0), size = (200, 20), font=1, flags = RT_HALIGN_LEFT, text = 2), # index 0 is the signal MultiContentEntryText(pos = (350, 30), size = (200, 20), font=1, flags = RT_HALIGN_LEFT, text = 3), # index 0 is the maxrate MultiContentEntryPixmapAlphaTest(pos = (0, 52), size = (550, 2), png = 6), # index 6 is the div pixmap ], "fonts": [gFont("Regular", 28),gFont("Regular", 18)], "itemHeight": 54 } </convert> </widget> <ePixmap pixmap="skin_default/div-h.png" position="0,340" zPosition="1" size="560,2" /> <widget source="info" render="Label" position="0,350" size="560,50" font="Regular;24" halign="center" valign="center" backgroundColor="#25062748" transparent="1" /> </screen>""" def __init__(self, session, iface): Screen.__init__(self, session) self.session = session self.iface = iface self.skin_path = plugin_path self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up") self.APList = None self.newAPList = None self.WlanList = None self.cleanList = None self.oldlist = {} self.listLength = None self.rescanTimer = eTimer() self.rescanTimer.callback.append(self.rescanTimerFired) self["info"] = StaticText() self.list = [] self["list"] = List(self.list) self["key_red"] = StaticText(_("Close")) self["key_green"] = StaticText(_("Connect")) self["key_yellow"] = StaticText() self["actions"] = NumberActionMap(["WizardActions", "InputActions", "EPGSelectActions"], { "ok": self.select, "back": self.cancel, }, -1) self["shortcuts"] = ActionMap(["ShortcutActions"], { "red": self.cancel, "green": self.select, }) self.onLayoutFinish.append(self.layoutFinished) self.getAccessPoints(refresh = False) def layoutFinished(self): self.setTitle(_("Choose a wireless network")) def select(self): cur = self["list"].getCurrent() if cur is not None: self.rescanTimer.stop() del self.rescanTimer if cur[1] is not None: if cur[1] == 'hidden...': essid = cur[1] else: essid = cur[0] self.close(essid,self.getWlanList()) else: self.close(None,None) else: self.rescanTimer.stop() del self.rescanTimer self.close(None,None) def WlanSetupClosed(self, *ret): if ret[0] == 2: self.rescanTimer.stop() del self.rescanTimer self.close(None) def cancel(self): if self.oldInterfaceState is False: iNetwork.setAdapterAttribute(self.iface, "up", False) iNetwork.deactivateInterface(self.iface,self.deactivateInterfaceCB) else: self.rescanTimer.stop() del self.rescanTimer self.close(None) def deactivateInterfaceCB(self,data): if data is not None: if data is True: self.rescanTimer.stop() del self.rescanTimer self.close(None) def rescanTimerFired(self): self.rescanTimer.stop() self.updateAPList() def buildEntryComponent(self, essid, bssid, encrypted, iface, maxrate, signal): divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png")) encryption = encrypted and _("Yes") or _("No") if bssid == 'hidden...': return((essid, bssid, None, None, None, None, divpng)) else: return((essid, bssid, _("Signal: ") + str(signal), _("Max. Bitrate: ") + str(maxrate), _("Encrypted: ") + encryption, _("Interface: ") + str(iface), divpng)) def updateAPList(self): newList = [] newList = self.getAccessPoints(refresh = True) self.newAPList = [] tmpList = [] newListIndex = None currentListEntry = None currentListIndex = None for ap in self.oldlist.keys(): data = self.oldlist[ap]['data'] if data is not None: tmpList.append(data) if len(tmpList): if "hidden..." not in tmpList: tmpList.append( ( _("enter hidden network SSID"), "hidden...", True, self.iface, _("unavailable"), "" ) ) for entry in tmpList: self.newAPList.append(self.buildEntryComponent( entry[0], entry[1], entry[2], entry[3], entry[4], entry[5] )) currentListEntry = self["list"].getCurrent() idx = 0 for entry in self.newAPList: if entry[0] == currentListEntry[0]: newListIndex = idx idx +=1 self['list'].setList(self.newAPList) self["list"].setIndex(newListIndex) self["list"].updateList(self.newAPList) self.listLength = len(self.newAPList) self.buildWlanList() self.setInfo() def getAccessPoints(self, refresh = False): self.APList = [] self.cleanList = [] self.w = Wlan(self.iface) aps = self.w.getNetworkList() if aps is not None: print "[WirelessLan.py] got Accespoints!" tmpList = [] compList = [] for ap in aps: a = aps[ap] if a['active']: tmpList.append( (a['essid'], a['bssid']) ) compList.append( (a['essid'], a['bssid'], a['encrypted'], a['iface'], a['maxrate'], a['signal']) ) for entry in tmpList: if entry[0] == "": for compentry in compList: if compentry[1] == entry[1]: compList.remove(compentry) for entry in compList: self.cleanList.append( ( entry[0], entry[1], entry[2], entry[3], entry[4], entry[5] ) ) if not self.oldlist.has_key(entry[0]): self.oldlist[entry[0]] = { 'data': entry } else: self.oldlist[entry[0]]['data'] = entry if "hidden..." not in self.cleanList: self.cleanList.append( ( _("enter hidden network SSID"), "hidden...", True, self.iface, _("unavailable"), "" ) ) for entry in self.cleanList: self.APList.append(self.buildEntryComponent( entry[0], entry[1], entry[2], entry[3], entry[4], entry[5] )) if refresh is False: self['list'].setList(self.APList) self.listLength = len(self.APList) self.setInfo() self.rescanTimer.start(5000) return self.cleanList def setInfo(self): length = self.getLength() if length <= 1: self["info"].setText(_("No wireless networks found! Please refresh.")) elif length == 2: self["info"].setText(_("1 wireless network found!")) else: self["info"].setText(str(length-1)+_(" wireless networks found!")) def buildWlanList(self): self.WlanList = [] for entry in self['list'].list: if entry[1] == "hidden...": self.WlanList.append(( "hidden...",_("enter hidden network SSID") ))#continue else: self.WlanList.append( (entry[0], entry[0]) ) def getLength(self): return self.listLength def getWlanList(self): if self.WlanList is None: self.buildWlanList() return self.WlanList
class WlanScan(Screen): skin = """ <screen name="WlanScan" position="center,center" size="560,400" title="Choose a Wireless Network" > <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" /> <ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" alphatest="on" /> <ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" size="140,40" alphatest="on" /> <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" /> <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" /> <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" /> <widget source="list" render="Listbox" position="5,40" size="550,300" scrollbarMode="showOnDemand"> <convert type="TemplatedMultiContent"> {"template": [ MultiContentEntryText(pos = (0, 0), size = (550, 30), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the essid MultiContentEntryText(pos = (0, 30), size = (175, 20), font=1, flags = RT_HALIGN_LEFT, text = 5), # index 5 is the interface MultiContentEntryText(pos = (175, 30), size = (175, 20), font=1, flags = RT_HALIGN_LEFT, text = 4), # index 0 is the encryption MultiContentEntryText(pos = (350, 0), size = (200, 20), font=1, flags = RT_HALIGN_LEFT, text = 2), # index 0 is the signal MultiContentEntryText(pos = (350, 30), size = (200, 20), font=1, flags = RT_HALIGN_LEFT, text = 3), # index 0 is the maxrate MultiContentEntryPixmapAlphaTest(pos = (0, 52), size = (550, 2), png = 6), # index 6 is the div pixmap ], "fonts": [gFont("Regular", 28),gFont("Regular", 18)], "itemHeight": 54 } </convert> </widget> <ePixmap pixmap="skin_default/div-h.png" position="0,340" zPosition="1" size="560,2" /> <widget source="info" render="Label" position="0,350" size="560,50" font="Regular;24" halign="center" valign="center" backgroundColor="#25062748" transparent="1" /> </screen>""" def __init__(self, session, iface): Screen.__init__(self, session) self.session = session self.iface = iface self.skin_path = plugin_path self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up") self.APList = None self.newAPList = None self.WlanList = None self.cleanList = None self.oldlist = {} self.listLength = None self.rescanTimer = eTimer() self.rescanTimer.callback.append(self.rescanTimerFired) self["info"] = StaticText() self.list = [] self["list"] = List(self.list) self["key_red"] = StaticText(_("Close")) self["key_green"] = StaticText(_("Connect")) self["key_yellow"] = StaticText() self["actions"] = NumberActionMap( ["WizardActions", "InputActions", "EPGSelectActions"], { "ok": self.select, "back": self.cancel, }, -1) self["shortcuts"] = ActionMap(["ShortcutActions"], { "red": self.cancel, "green": self.select, }) self.onLayoutFinish.append(self.layoutFinished) self.getAccessPoints(refresh=False) def layoutFinished(self): self.setTitle(_("Choose a wireless network")) def select(self): cur = self["list"].getCurrent() if cur is not None: self.rescanTimer.stop() del self.rescanTimer if cur[1] is not None: if cur[1] == 'hidden...': essid = cur[1] else: essid = cur[0] self.close(essid, self.getWlanList()) else: self.close(None, None) else: self.rescanTimer.stop() del self.rescanTimer self.close(None, None) def WlanSetupClosed(self, *ret): if ret[0] == 2: self.rescanTimer.stop() del self.rescanTimer self.close(None) def cancel(self): if self.oldInterfaceState is False: iNetwork.setAdapterAttribute(self.iface, "up", False) iNetwork.deactivateInterface(self.iface, self.deactivateInterfaceCB) else: self.rescanTimer.stop() del self.rescanTimer self.close(None) def deactivateInterfaceCB(self, data): if data is not None: if data is True: self.rescanTimer.stop() del self.rescanTimer self.close(None) def rescanTimerFired(self): self.rescanTimer.stop() self.updateAPList() def buildEntryComponent(self, essid, bssid, encrypted, iface, maxrate, signal): divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png")) encryption = encrypted and _("Yes") or _("No") if bssid == 'hidden...': return ((essid, bssid, None, None, None, None, divpng)) else: return ((essid, bssid, _("Signal: ") + str(signal), _("Max. Bitrate: ") + str(maxrate), _("Encrypted: ") + encryption, _("Interface: ") + str(iface), divpng)) def updateAPList(self): newList = [] newList = self.getAccessPoints(refresh=True) self.newAPList = [] tmpList = [] newListIndex = None currentListEntry = None currentListIndex = None for ap in self.oldlist.keys(): data = self.oldlist[ap]['data'] if data is not None: tmpList.append(data) if len(tmpList): if "hidden..." not in tmpList: tmpList.append((_("enter hidden network SSID"), "hidden...", True, self.iface, _("unavailable"), "")) for entry in tmpList: self.newAPList.append( self.buildEntryComponent(entry[0], entry[1], entry[2], entry[3], entry[4], entry[5])) currentListEntry = self["list"].getCurrent() idx = 0 for entry in self.newAPList: if entry[0] == currentListEntry[0]: newListIndex = idx idx += 1 self['list'].setList(self.newAPList) self["list"].setIndex(newListIndex) self["list"].updateList(self.newAPList) self.listLength = len(self.newAPList) self.buildWlanList() self.setInfo() def getAccessPoints(self, refresh=False): self.APList = [] self.cleanList = [] self.w = Wlan(self.iface) aps = self.w.getNetworkList() if aps is not None: print "[WirelessLan.py] got Accespoints!" tmpList = [] compList = [] for ap in aps: a = aps[ap] if a['active']: tmpList.append((a['essid'], a['bssid'])) compList.append((a['essid'], a['bssid'], a['encrypted'], a['iface'], a['maxrate'], a['signal'])) for entry in tmpList: if entry[0] == "": for compentry in compList: if compentry[1] == entry[1]: compList.remove(compentry) for entry in compList: self.cleanList.append((entry[0], entry[1], entry[2], entry[3], entry[4], entry[5])) if not self.oldlist.has_key(entry[0]): self.oldlist[entry[0]] = {'data': entry} else: self.oldlist[entry[0]]['data'] = entry if "hidden..." not in self.cleanList: self.cleanList.append( (_("enter hidden network SSID"), "hidden...", True, self.iface, _("unavailable"), "")) for entry in self.cleanList: self.APList.append( self.buildEntryComponent(entry[0], entry[1], entry[2], entry[3], entry[4], entry[5])) if refresh is False: self['list'].setList(self.APList) self.listLength = len(self.APList) self.setInfo() self.rescanTimer.start(5000) return self.cleanList def setInfo(self): length = self.getLength() if length <= 1: self["info"].setText( _("No wireless networks found! Please refresh.")) elif length == 2: self["info"].setText(_("1 wireless network found!")) else: self["info"].setText( str(length - 1) + _(" wireless networks found!")) def buildWlanList(self): self.WlanList = [] for entry in self['list'].list: if entry[1] == "hidden...": self.WlanList.append( ("hidden...", _("enter hidden network SSID"))) #continue else: self.WlanList.append((entry[0], entry[0])) def getLength(self): return self.listLength def getWlanList(self): if self.WlanList is None: self.buildWlanList() return self.WlanList