Example #1
0
def setstationmode(netconfigdata=None):
    writedatedlogmsg(networklog, 'Setting station mode. ', 3, networkloglevel)
    from time import sleep
    if not netconfigdata:
        writedatedlogmsg(networklog, 'Retrieving unfound netconfig data. ', 3, networkloglevel)
        try:
            netconfigdata = readonedbrow(systemdatadatabase, 'netconfig')[0]
        except:
            writedatedlogmsg(networklog, 'Error reading netconfig data. ', 0, networkloglevel)
        else:
            writedatedlogmsg(networklog, 'Read netconfig data. ', 4, networkloglevel)

    killapservices()
    if netconfigdata['addtype'] == 'static':
        writedatedlogmsg(networklog, 'Configuring static address. ', 3, networkloglevel)

        subprocess.call(['cp', '/usr/lib/iicontrollibs/misc/interfaces/interfaces.sta.static', '/etc/network/interfaces'])

        # update IP from netconfig
        writedatedlogmsg(networklog, 'Updating netconfig with ip ' + netconfigdata['address'], 3, networkloglevel)
        replaceifaceparameters('/etc/network/interfaces', '/etc/network/interfaces', 'wlan0', ['address', 'gateway'],
                               [netconfigdata['address'], netconfigdata['gateway']])
    elif netconfigdata['addtype'] == 'dhcp':
        writedatedlogmsg(networklog, 'Configuring dhcp. ', 3, networkloglevel)
        subprocess.call(['cp', '/usr/lib/iicontrollibs/misc/interfaces/interfaces.sta.dhcp', '/etc/network/interfaces'])

    writedatedlogmsg(networklog, 'Resetting wlan. ', 3, networkloglevel)
    resetwlan()
    sleep(1)
    resetwlan()
Example #2
0
def runconfig(onboot=False):
    import subprocess
    try:
        netconfigdata = readonedbrow(systemdatadatabase, 'netconfig')[0]
    except:
        writedatedlogmsg(networklog, 'Error reading netconfig data. ', 0, networkloglevel)
    else:
        writedatedlogmsg(networklog, 'Successfully read netconfig data', 3, networkloglevel)
        if netconfigdata['enabled']:
            writedatedlogmsg(networklog, 'Netconfig is enabled', 3, networkloglevel)

            # This will grab the specified SSID and the credentials and update
            # the wpa_supplicant file
            updatewpasupplicant()
            # Copy the correct interfaces file
            if netconfigdata['mode'] == 'station':
                setstationmode(netconfigdata)
            elif netconfigdata['mode'] in ['ap', 'tempap']:
                setapmode()

                # Unfortunately, we currently need to reboot prior to setting
                # ap mode to get it to stick unless we are doing it at bootup
                if not onboot:
                    writedatedlogmsg(networklog, 'Rebooting after set ap mode', 0, networkloglevel)
                    writedatedlogmsg(systemstatuslog, 'Rebooting after set ap mode ', 0, systemstatusloglevel)
                    # subprocess.call(['reboot'])

        else:
            writedatedlogmsg(networklog, 'Netconfig is disabled', 3, networkloglevel)
Example #3
0
def setstationmode(netconfigdata=None):
    writedatedlogmsg(networklog, 'Setting station mode. ', 3, networkloglevel)
    from time import sleep
    if not netconfigdata:
        writedatedlogmsg(networklog, 'Retrieving unfound netconfig data. ', 3,
                         networkloglevel)
        try:
            netconfigdata = readonedbrow(systemdatadatabase, 'netconfig')[0]
        except:
            writedatedlogmsg(networklog, 'Error reading netconfig data. ', 0,
                             networkloglevel)
        else:
            writedatedlogmsg(networklog, 'Read netconfig data. ', 4,
                             networkloglevel)

    killapservices()
    if netconfigdata['addtype'] == 'static':
        writedatedlogmsg(networklog, 'Configuring static address. ', 3,
                         networkloglevel)

        subprocess.call([
            'cp',
            '/usr/lib/iicontrollibs/misc/interfaces/interfaces.sta.static',
            '/etc/network/interfaces'
        ])

        # update IP from netconfig
        writedatedlogmsg(
            networklog,
            'Updating netconfig with ip ' + netconfigdata['address'], 3,
            networkloglevel)
        replaceifaceparameters(
            '/etc/network/interfaces', '/etc/network/interfaces', 'wlan0',
            ['address', 'gateway'],
            [netconfigdata['address'], netconfigdata['gateway']])
    elif netconfigdata['addtype'] == 'dhcp':
        writedatedlogmsg(networklog, 'Configuring dhcp. ', 3, networkloglevel)
        subprocess.call([
            'cp', '/usr/lib/iicontrollibs/misc/interfaces/interfaces.sta.dhcp',
            '/etc/network/interfaces'
        ])

    writedatedlogmsg(networklog, 'Resetting wlan. ', 3, networkloglevel)
    resetwlan()
    sleep(1)
    resetwlan()
Example #4
0
def runconfig(onboot=False):
    import subprocess
    try:
        netconfigdata = readonedbrow(systemdatadatabase, 'netconfig')[0]
    except:
        writedatedlogmsg(networklog, 'Error reading netconfig data. ', 0,
                         networkloglevel)
    else:
        writedatedlogmsg(networklog, 'Successfully read netconfig data', 3,
                         networkloglevel)
        if netconfigdata['enabled']:
            writedatedlogmsg(networklog, 'Netconfig is enabled', 3,
                             networkloglevel)

            # This will grab the specified SSID and the credentials and update
            # the wpa_supplicant file
            updatewpasupplicant()
            # Copy the correct interfaces file
            if netconfigdata['mode'] == 'station':
                setstationmode(netconfigdata)
            elif netconfigdata['mode'] in ['ap', 'tempap']:
                setapmode()

                # Unfortunately, we currently need to reboot prior to setting
                # ap mode to get it to stick unless we are doing it at bootup
                if not onboot:
                    writedatedlogmsg(networklog, 'Rebooting after set ap mode',
                                     0, networkloglevel)
                    writedatedlogmsg(systemstatuslog,
                                     'Rebooting after set ap mode ', 0,
                                     systemstatusloglevel)
                    # subprocess.call(['reboot'])

        else:
            writedatedlogmsg(networklog, 'Netconfig is disabled', 3,
                             networkloglevel)
Example #5
0
__license__ = "Apache 2.0"
__version__ = "1.0"
__maintainer__ = "Colin Reese"
__email__ = "*****@*****.**"
__status__ = "Development"

import os,sys,inspect,subprocess
top_folder = os.path.split(os.path.realpath(os.path.abspath(os.path.split(inspect.getfile( inspect.currentframe() ))[0])))[0]
if top_folder not in sys.path:
    sys.path.insert(0,top_folder)

from cupid.pilib import readonedbrow,systemdatadatabase

# Read the config from the database

netsettings = readonedbrow(systemdatadatabase,'netconfig')[0]

args = sys.argv
reboot=False
if len(args)>1:
    print('argument found')
    arg2 = args[1]
    print('argument ' + arg2)
    if args=='reboot':
        reboot=True
     

def runconfig(reboot):
    # Copy the correct interfaces file
    if netsettings['nettype']=='station':
        print('station mode')
Example #6
0
def monitor(port='/dev/ttyAMA0', baudrate=115200, timeout=1, checkstatus=True):
    import serial
    import cupid.pilib as pilib
    from time import mktime, localtime

    data = []

    if checkstatus:
        systemstatus = pilib.readonedbrow(pilib.controldatabase, 'systemstatus')[0]
        runhandler = systemstatus['serialhandlerenabled']
        checktime = mktime(localtime())
        checkfrequency = 15  # seconds
        if runhandler:
           pilib.log(pilib.iolog, "Starting monitoring of serial port", 1, pilib.iologlevel)
        else:
            pilib.log(pilib.iolog, "Not starting monitoring of serial port. How did I get here?", 1, pilib.iologlevel)
    else:
        runhandler = True

    if runhandler:
        ser = serial.Serial(port=port, baudrate=baudrate, timeout=timeout)
        print("Monitoring serial port " + ser.name)
    else:
        print('not monitoring serial port ')
    while runhandler:
        ch = ser.read(1)
        if len(ch) == 0:
            # rec'd nothing print all
            if len(data) > 0:
                s = ''
                for x in data:
                    s += '%s' % x # ord(x)

                # Here for diagnostics
                # print '%s [len = %d]' % (s, len(data))

                # now process data
                # print(s)
                # print(s.split('\n'))
                try:
                    # print('*************** processing datadict')
                    datadicts, messages = processserialdata(s)
                    # print('ALL MY DATADICTS')
                    # print(datadicts)
                    # print('END OF DICTS')
                except IOError:
                    print('error processing message')
                except Exception as ex:
                    template = "An exception of type {0} occured. Arguments:\n{1!r}"
                    message = template.format(type(ex).__name__, ex.args)
                    print message
                else:
                    for datadict, message in zip(datadicts, messages):
                        if datadict:
                            print("datadict: ")
                            print(datadict)
                            # print("message: ")
                            # print(message)

                            publish = False
                            for k in datadict:
                                # print(k + datadict[k])
                                if k not in ['nodeid','RX_RSSI']:
                                    pass
                            # if 'cmd' in datadict:
                            publish = True
                            if publish:
                                print('publishing message')
                                statusresult = lograwmessages(message)

                            pilib.sizesqlitetable(pilib.motesdatabase, 'readmessages', 1000)

                            statusresult = processremotedata(datadict, message)
                        else:
                            if message:
                                print('message: ')
                                print(message)
                        # except:
                        #     print('error processing returned datadict, message:')
                            # print(message)
                        # else:
                        #     print("message parse was successful")
                        #     print(message)
            else:
                # no data, let's see if we should send message
                try:
                    lastqueuedmessage = pilib.getfirsttimerow(pilib.motesdatabase, 'queuedmessages', 'queuedtime')[0]
                except IndexError:
                    # no rows
                    # print('we have an error getting a queued message. Could be just no message.')
                    pass
                else:
                    # send queued message
                    print(lastqueuedmessage)
                    try:
                        print('going to send message:')
                        print(lastqueuedmessage['message'])
                        ser.write(lastqueuedmessage['message'].encode())
                        # sendserialmessage(ser, lastqueuedmessage['message'])
                    except:
                        print('oops')
                    else:
                        print('that worked out. remove message from queue')
                        conditionnames = ['queuedtime', 'message']
                        conditionvalues = [lastqueuedmessage['queuedtime'], lastqueuedmessage['message']]
                        delquery = pilib.makedeletesinglevaluequery('queuedmessages', {'conditionnames':conditionnames, 'conditionvalues':conditionvalues})
                        pilib.sqlitequery(pilib.motesdatabase, delquery)
                        print('move to sent messages')
                        pilib.sqliteinsertsingle(pilib.motesdatabase, 'sentmessages', [lastqueuedmessage['queuedtime'], pilib.gettimestring(), lastqueuedmessage['message']])
            data = []

        else:
            data.append(ch)

        if checkstatus:
            thetime = mktime(localtime())
            if thetime-checktime > checkfrequency:
                print('checking control status')
                systemstatus = pilib.readonedbrow(pilib.controldatabase, 'systemstatus')[0]
                runserialhandler = systemstatus['serialhandlerenabled']
                if runserialhandler:
                    checktime = thetime
                    pilib.log(pilib.iolog, 'Continuing serialhandler based on status check',3,pilib.iologlevel)
                else:
                    runhandler=False
                    pilib.log(pilib.iolog, 'Aborting serialhandler based on status check',3,pilib.iologlevel)
Example #7
0
def updateifacestatus():

    import resource.pyiface.iface as pyiface
    from cupid.pilib import sqlitemultquery, setsinglevalue, systemdatadatabase, readonedbrow, gettimestring
    import subprocess

    netconfigdata = readonedbrow(systemdatadatabase, 'netconfig')[0]
    netstatus = readonedbrow(systemdatadatabase, 'netstatus')[0]
    # Networking check

    querylist = []
    table = 'netifaces'
    querylist.append('drop table if exists ' + table)
    querylist.append(
        "create table " + table + " (name text, hwaddr text, address text, ifaceindex integer, bcast text, mask text, flags text)")

    pilib.writedatedlogmsg(pilib.networklog, 'Reading ifaces with pyiface. ', 4, pilib.networkloglevel)

    allIfaces = pyiface.getIfaces()
    pilib.writedatedlogmsg(pilib.networklog, 'Got ifaces data. ', 5, pilib.networkloglevel)
    runquery=False
    for iface in allIfaces:
        runquery=True
        querylist.append(
            "insert into " + table + " values ( \'" + iface.name + "\' , \'" + iface.hwaddr + "\' , \'" + iface._Interface__sockaddrToStr(
                iface.addr) + "\' , \'" + str(iface.index) + "\' , \'" + iface._Interface__sockaddrToStr(
                iface.broadaddr) + "\' , \'" + iface._Interface__sockaddrToStr(
                iface.netmask) + "\' , \'" + pyiface.flagsToStr(iface.flags) + "\')")
    if runquery:
        pilib.writedatedlogmsg(pilib.networklog, 'Sending ifaces query. ', 5, pilib.networkloglevel)
        sqlitemultquery(systemdatadatabase, querylist)
    else:
        pilib.writedatedlogmsg(pilib.networklog, 'Empty ifaces query. ', 5, pilib.networkloglevel)


    pilib.writedatedlogmsg(pilib.networklog, 'Completed pyiface ifaces. ', 4, pilib.networkloglevel)


    # Interfaces check
    # WAN check
    pilib.writedatedlogmsg(pilib.networklog, 'Checking pingtimes. ', 4, pilib.networkloglevel)
    okping = float(netconfigdata['pingthreshold'])

    from netfun import runping
    pingresults = runping('8.8.8.8')
    # pingresults = [20, 20, 20]
    pingresult = sum(pingresults)/float(len(pingresults))
    if pingresult == 0:
        wanaccess = 0
        latency = 0
    else:
        if pingresult < okping:
            wanaccess = 1
        else:
            wanaccess = 0
        latency = pingresult
    querylist.append(pilib.makesinglevaluequery('netstatus', 'latency', str(latency)))

    pilib.writedatedlogmsg(pilib.networklog, 'Done checking pings. ', 4, pilib.networkloglevel)


    # Check supplicant status, set on/offtime if necessary.
    wpastatusdict = netconfig.getwpaclientstatus()
    try:
        if wpastatusdict['wpa_state'] == 'COMPLETED':
            wpaconnected = 1
            if netstatus['connected'] == 0 or netstatus['onlinetime'] == '':
                pilib.writedatedlogmsg(pilib.networklog, 'setting online time', 2, pilib.networkloglevel)
                querylist.append(pilib.makesinglevaluequery('netstatus', 'onlinetime', gettimestring()))
                querylist.append(pilib.makesinglevaluequery('netstatus', 'offlinetime', ''))
        else:
            wpaconnected = 0
    except KeyError:
        wpaconnected = 0

    if wpaconnected == 0:
        if netstatus['connected'] == 1 or netstatus['offlinetime'] == '':
            if netconfigdata['mode'] == "station":
                pilib.writedatedlogmsg(pilib.networklog, 'setting offline time', 2, pilib.networkloglevel)
                querylist.append(pilib.makesinglevaluequery('netstatus', 'offlinetime', gettimestring()))
                querylist.append(pilib.makesinglevaluequery('netstatus', 'onlinetime', ''))
            else:
                pilib.writedatedlogmsg(pilib.networklog, 'setting online time', 2, pilib.networkloglevel)
                querylist.append(pilib.makesinglevaluequery('netstatus', 'offlinetime', ''))

    # Check dhcp server status
    pilib.writedatedlogmsg(pilib.networklog, 'Checking dhcp server status ', 4, pilib.networkloglevel)
    try:
        result = subprocess.Popen(['service', 'isc-dhcp-server', 'status'], stdout=subprocess.PIPE)
    except:
        dhcpstatus = 0
        pilib.writedatedlogmsg(pilib.networklog, 'Error in reading dhcp server status.', 1, pilib.networkloglevel)
    else:
        for line in result.stdout:
            if line.find('not running') > 0:
                dhcpstatus = 0
            elif line.find('is running') > 0:
                dhcpstatus = 1
            else:
                dhcpstatus = '\?'
    pilib.writedatedlogmsg(pilib.networklog, 'Done checking dhcp server status. ', 4, pilib.networkloglevel)

    pilib.writedatedlogmsg(pilib.networklog, 'Updating netstatus. ', 4, pilib.networkloglevel)

    wpastatusdict['connected'] = wpaconnected
    try:
        wpastatusdict['dhcpstatus'] = dhcpstatus
    except:
        wpastatusdict['dhcpstatus'] = 0
        dhcpstatus = 0
    try:
        mode = wpastatusdict['mode']
    except KeyError:
        mode = 'none'
    try:
        ssid = wpastatusdict['ssid']
    except KeyError:
        ssid = 'none'
    try:
        address = wpastatusdict['ip_address']
    except KeyError:
        address = 'none'

    # print('myaddress is ' + address)
    querylist.append(pilib.makesinglevaluequery('netstatus', 'dhcpstatus', dhcpstatus))
    querylist.append(pilib.makesinglevaluequery('netstatus', 'connected', str(wpaconnected)))
    if netconfigdata['mode'] in ['ap','tempap']:
        pilib.writedatedlogmsg(pilib.networklog, 'Updating netstatus to AP mode', 1, pilib.networkloglevel)
        querylist.append(pilib.makesinglevaluequery('netstatus', 'mode', netconfigdata['mode']))
        querylist.append(pilib.makesinglevaluequery('netstatus', 'SSID', 'cupidwifi'))
    else:
        pilib.writedatedlogmsg(pilib.networklog, 'Updating netstatus to station mode', 1, pilib.networkloglevel)
        querylist.append(pilib.makesinglevaluequery('netstatus', 'mode', str(mode)))
        querylist.append(pilib.makesinglevaluequery('netstatus', 'SSID', str(ssid)))
    querylist.append(pilib.makesinglevaluequery('netstatus', 'WANaccess', str(wanaccess)))
    querylist.append(pilib.makesinglevaluequery('netstatus', 'address', str(address)))

    pilib.writedatedlogmsg(pilib.networklog, 'Running netstatus query. ', 4, pilib.networkloglevel)
    pilib.sqlitemultquery(pilib.systemdatadatabase, querylist)
    pilib.writedatedlogmsg(pilib.networklog, 'Completed netstatus query. ', 4, pilib.networkloglevel)

    pilib.writedatedlogmsg(pilib.networklog, 'Completed netstatus update. ', 4, pilib.networkloglevel)

    return wpastatusdict
Example #8
0
def monitor(port='/dev/ttyAMA0', baudrate=115200, timeout=1, checkstatus=True):
    import serial
    import cupid.pilib as pilib
    from time import mktime, localtime
    from time import sleep

    data = []

    stringmessage = ''
    rawseriallog = True
    if rawseriallog:
        print('serial logging is enabled.')
        logfile = open(pilib.seriallog, 'a', 1)
        logfile.write('\n' + pilib.gettimestring() + ": Initializing serial log\n")

    if checkstatus:
        systemstatus = pilib.readonedbrow(pilib.controldatabase, 'systemstatus')[0]
        runhandler = systemstatus['serialhandlerenabled']
        checktime = mktime(localtime())
        checkfrequency = 15  # seconds
        if runhandler:
           pilib.log(pilib.iolog, "Starting monitoring of serial port", 1, pilib.iologlevel)
        else:
            pilib.log(pilib.iolog, "Not starting monitoring of serial port. How did I get here?", 1, pilib.iologlevel)
    else:
        runhandler = True

    if runhandler:
        ser = serial.Serial(port=port, baudrate=baudrate, timeout=timeout)
        print("Monitoring serial port " + ser.name)
    else:
        print('not monitoring serial port ')
    while runhandler:
        # This reading has to happen faster than the messages come, or they will all be stuck together
        try:
            ch = ser.read(1)
            # if ch == '\x0D':
            #     print('carriage return')
            # elif ch == '\x00':
            #     print('null character')

            if len(ch) == 0 or ch == '\x0D':
                # print('LEN ZERO OR END CHAR: PROCESS TIME')

                # rec'd nothing print all
                if len(data) > 0:
                    s = ''
                    for x in data:
                        s += '%s' % x # ord(x)

                    # Here for diagnostics
                    # print '%s [len = %d]' % (s, len(data))

                    # now process data
                    # print(s)
                    # print(s.split('\n'))
                    try:
                        # print('*************** processing datadict')
                        datadicts, messages = processserialdata(s)
                        # print('ALL MY DATADICTS')
                        # print(datadicts)
                        # print('END OF DICTS')
                    except IOError:
                        print('error processing message')
                    except Exception as ex:
                        template = "An exception of type {0} occured. Arguments:\n{1!r}"
                        message = template.format(type(ex).__name__, ex.args)
                        print message
                    else:
                        for datadict, message in zip(datadicts, messages):
                            if datadict:
                                # print("datadict: ")
                                # print(datadict)
                                # print("message: ")
                                # print(message)

                                publish = False
                                for k in datadict:
                                    # print(k + datadict[k])
                                    if k not in ['nodeid','RX_RSSI']:
                                        pass
                                # if 'cmd' in datadict:
                                publish = True
                                if publish:
                                    # print('publishing message')
                                    statusresult = lograwmessages(message)

                                pilib.sizesqlitetable(pilib.motesdatabase, 'readmessages', 1000)

                                statusresult = processremotedata(datadict, message)
                            else:
                                if message:
                                    print('message: ')
                                    print(message)

                            # Log message
                            if rawseriallog:
                                try:
                                    logfile.write(pilib.gettimestring() + ' : ' + message + '\n')
                                except Exception as e:
                                    template = "An exception of type {0} occured. Arguments:\n{1!r}"
                                    message = template.format(type(ex).__name__, ex.args)
                                    print message

                else:
                    # no data, let's see if we should send message
                    # print('no data, try sending')
                    pass

                pilib.log(pilib.seriallog, "Attempting send routine", 1, 1)
                # See if there are messages to send.
                # try:
                runsendhandler(ser)
                # except Exception as e:
                #     pilib.log(pilib.seriallog, "Error in send routine", 1, 1)
                #
                #     template = "An exception of type {0} occured. Arguments:\n{1!r}"
                #     message = template.format(type(ex).__name__, ex.args)
                #     pilib.log(pilib.seriallog, message, 1, 1)
                #     print message
                data = []

            else:
                # print('DATA NOT ZERO')
                # print(ch)
                data.append(ch)
                stringmessage += str(ch)


            if checkstatus:
                print('checking status')
                thetime = mktime(localtime())
                if thetime-checktime > checkfrequency:
                    print('checking control status')
                    systemstatus = pilib.readonedbrow(pilib.controldatabase, 'systemstatus')[0]
                    runserialhandler = systemstatus['serialhandlerenabled']
                    if runserialhandler:
                        checktime = thetime
                        pilib.log(pilib.iolog, 'Continuing serialhandler based on status check',3,pilib.iologlevel)
                    else:
                        runhandler=False
                        pilib.log(pilib.iolog, 'Aborting serialhandler based on status check',3,pilib.iologlevel)
        except KeyboardInterrupt:
            print('\n Exiting on keyboard interrupt\n')
            logfile.close()
            return
        except:
            # print('no characters available!')
            sleep(0.5)
        #     return
            #runsendhandler(ser)

    logfile.close()
    ser.close()
    return
Example #9
0
def updateifacestatus():

    import resource.pyiface.iface as pyiface
    from cupid.pilib import sqlitemultquery, setsinglevalue, systemdatadatabase, readonedbrow, gettimestring
    import subprocess

    netconfigdata = readonedbrow(systemdatadatabase, 'netconfig')[0]
    netstatus = readonedbrow(systemdatadatabase, 'netstatus')[0]
    # Networking check

    querylist = []
    table = 'netifaces'
    querylist.append('drop table if exists ' + table)
    querylist.append(
        "create table " + table +
        " (name text, hwaddr text, address text, ifaceindex integer, bcast text, mask text, flags text)"
    )

    pilib.writedatedlogmsg(pilib.networklog, 'Reading ifaces with pyiface. ',
                           4, pilib.networkloglevel)

    allIfaces = pyiface.getIfaces()
    pilib.writedatedlogmsg(pilib.networklog, 'Got ifaces data. ', 5,
                           pilib.networkloglevel)
    runquery = False
    for iface in allIfaces:
        runquery = True
        querylist.append("insert into " + table + " values ( \'" + iface.name +
                         "\' , \'" + iface.hwaddr + "\' , \'" +
                         iface._Interface__sockaddrToStr(iface.addr) +
                         "\' , \'" + str(iface.index) + "\' , \'" +
                         iface._Interface__sockaddrToStr(iface.broadaddr) +
                         "\' , \'" +
                         iface._Interface__sockaddrToStr(iface.netmask) +
                         "\' , \'" + pyiface.flagsToStr(iface.flags) + "\')")
    if runquery:
        pilib.writedatedlogmsg(pilib.networklog, 'Sending ifaces query. ', 5,
                               pilib.networkloglevel)
        sqlitemultquery(systemdatadatabase, querylist)
    else:
        pilib.writedatedlogmsg(pilib.networklog, 'Empty ifaces query. ', 5,
                               pilib.networkloglevel)

    pilib.writedatedlogmsg(pilib.networklog, 'Completed pyiface ifaces. ', 4,
                           pilib.networkloglevel)

    # Interfaces check
    # WAN check
    pilib.writedatedlogmsg(pilib.networklog, 'Checking pingtimes. ', 4,
                           pilib.networkloglevel)
    okping = float(netconfigdata['pingthreshold'])

    from netfun import runping
    pingresults = runping('8.8.8.8')
    # pingresults = [20, 20, 20]
    pingresult = sum(pingresults) / float(len(pingresults))
    if pingresult == 0:
        wanaccess = 0
        latency = 0
    else:
        if pingresult < okping:
            wanaccess = 1
        else:
            wanaccess = 0
        latency = pingresult
    querylist.append(
        pilib.makesinglevaluequery('netstatus', 'latency', str(latency)))

    pilib.writedatedlogmsg(pilib.networklog, 'Done checking pings. ', 4,
                           pilib.networkloglevel)

    # Check supplicant status, set on/offtime if necessary.
    wpastatusdict = netconfig.getwpaclientstatus()
    try:
        if wpastatusdict['wpa_state'] == 'COMPLETED':
            wpaconnected = 1
            if netstatus['connected'] == 0 or netstatus['onlinetime'] == '':
                pilib.writedatedlogmsg(pilib.networklog, 'setting online time',
                                       2, pilib.networkloglevel)
                querylist.append(
                    pilib.makesinglevaluequery('netstatus', 'onlinetime',
                                               gettimestring()))
                querylist.append(
                    pilib.makesinglevaluequery('netstatus', 'offlinetime', ''))
        else:
            wpaconnected = 0
    except KeyError:
        wpaconnected = 0

    if wpaconnected == 0:
        if netstatus['connected'] == 1 or netstatus['offlinetime'] == '':
            if netconfigdata['mode'] == "station":
                pilib.writedatedlogmsg(pilib.networklog,
                                       'setting offline time', 2,
                                       pilib.networkloglevel)
                querylist.append(
                    pilib.makesinglevaluequery('netstatus', 'offlinetime',
                                               gettimestring()))
                querylist.append(
                    pilib.makesinglevaluequery('netstatus', 'onlinetime', ''))
            else:
                pilib.writedatedlogmsg(pilib.networklog, 'setting online time',
                                       2, pilib.networkloglevel)
                querylist.append(
                    pilib.makesinglevaluequery('netstatus', 'offlinetime', ''))

    # Check dhcp server status
    pilib.writedatedlogmsg(pilib.networklog, 'Checking dhcp server status ', 4,
                           pilib.networkloglevel)
    try:
        result = subprocess.Popen(['service', 'isc-dhcp-server', 'status'],
                                  stdout=subprocess.PIPE)
    except:
        dhcpstatus = 0
        pilib.writedatedlogmsg(pilib.networklog,
                               'Error in reading dhcp server status.', 1,
                               pilib.networkloglevel)
    else:
        for line in result.stdout:
            if line.find('not running') > 0:
                dhcpstatus = 0
            elif line.find('is running') > 0:
                dhcpstatus = 1
            else:
                dhcpstatus = '\?'
    pilib.writedatedlogmsg(pilib.networklog,
                           'Done checking dhcp server status. ', 4,
                           pilib.networkloglevel)

    pilib.writedatedlogmsg(pilib.networklog, 'Updating netstatus. ', 4,
                           pilib.networkloglevel)

    wpastatusdict['connected'] = wpaconnected
    try:
        wpastatusdict['dhcpstatus'] = dhcpstatus
    except:
        wpastatusdict['dhcpstatus'] = 0
        dhcpstatus = 0
    try:
        mode = wpastatusdict['mode']
    except KeyError:
        mode = 'none'
    try:
        ssid = wpastatusdict['ssid']
    except KeyError:
        ssid = 'none'
    try:
        address = wpastatusdict['ip_address']
    except KeyError:
        address = 'none'

    # print('myaddress is ' + address)
    querylist.append(
        pilib.makesinglevaluequery('netstatus', 'dhcpstatus', dhcpstatus))
    querylist.append(
        pilib.makesinglevaluequery('netstatus', 'connected',
                                   str(wpaconnected)))
    if netconfigdata['mode'] in ['ap', 'tempap']:
        pilib.writedatedlogmsg(pilib.networklog,
                               'Updating netstatus to AP mode', 1,
                               pilib.networkloglevel)
        querylist.append(
            pilib.makesinglevaluequery('netstatus', 'mode',
                                       netconfigdata['mode']))
        querylist.append(
            pilib.makesinglevaluequery('netstatus', 'SSID', 'cupidwifi'))
    else:
        pilib.writedatedlogmsg(pilib.networklog,
                               'Updating netstatus to station mode', 1,
                               pilib.networkloglevel)
        querylist.append(
            pilib.makesinglevaluequery('netstatus', 'mode', str(mode)))
        querylist.append(
            pilib.makesinglevaluequery('netstatus', 'SSID', str(ssid)))
    querylist.append(
        pilib.makesinglevaluequery('netstatus', 'WANaccess', str(wanaccess)))
    querylist.append(
        pilib.makesinglevaluequery('netstatus', 'address', str(address)))

    pilib.writedatedlogmsg(pilib.networklog, 'Running netstatus query. ', 4,
                           pilib.networkloglevel)
    pilib.sqlitemultquery(pilib.systemdatadatabase, querylist)
    pilib.writedatedlogmsg(pilib.networklog, 'Completed netstatus query. ', 4,
                           pilib.networkloglevel)

    pilib.writedatedlogmsg(pilib.networklog, 'Completed netstatus update. ', 4,
                           pilib.networkloglevel)

    return wpastatusdict