示例#1
0
 def advanceToRunlevel(self, runlevel):
     if self.interval == self.runlevel_settings[runlevel]:
         print debugLog(
             'Skipped runlevel change as there is no change in timer')
         return
     debugLog('ATR advancing to ' + str(runlevel) + ' with ' +
              str(self.runlevel_settings[runlevel]))
     self.interval = self.runlevel_settings[runlevel]
示例#2
0
def start(id, ip, port):
    while True:
        try:
            debugLog('Start MOTE at ID='+str(id)+' IP='+str(ip)+' PORT='+str(port))
            x = MoteClass(id, ip, port)
            x.run()
        except Exception, e:
            debugLog('AFMOTEMOTE> Exception '+str(e)+' at mote '+str(id))
        del x
        sleep(60)
示例#3
0
def fastRead(id):
    SENSORICS_QUERY_LOCK.acquire()
    try:
        sidsensors = SENSORICS[id]
        Device(id).setStat('runlevel1.lastreported', datetime.now())
        Device(id).setStat('runlevel', 1)
        for sensor in sidsensors:
            sensor.rt1expire = datetime.now() + timedelta(0, 15)
            sensor.advanceToRunlevel(1)
    except Exception, e:
        debugLog(str(e))
示例#4
0
    def execute(self):  # wykonaj odpyt
        self.signalUpdated()
        try:
            Get(sObj.read(self.id, self.dev, self.regtype, self.register))
        except:
            debugLog('ASK FAILED')

        if self.rt1expire != None:
            if datetime.now() > self.rt1expire:
                self.advanceToRunlevel(0)
                self.rt1expire = None
示例#5
0
def fastRead(id):
    SENSORICS_QUERY_LOCK.acquire()
    try:
        sidsensors = SENSORICS[id]
        Device(id).setStat('runlevel1.lastreported', datetime.now())
        Device(id).setStat('runlevel', 1)
        for sensor in sidsensors:
            sensor.rt1expire = datetime.now() + timedelta(0, 15)
            sensor.advanceToRunlevel(1)
    except Exception, e:
        debugLog(str(e))
示例#6
0
    def execute(self):      # wykonaj odpyt
        self.signalUpdated()
        try:
            Get(sObj.read(self.id, self.dev, self.regtype, self.register))
        except:
            debugLog('ASK FAILED')

        if self.rt1expire != None:
            if datetime.now() > self.rt1expire:
                self.advanceToRunlevel(0)
                self.rt1expire = None
示例#7
0
def start(id, ip, port):
    while True:
        try:
            debugLog('Start MOTE at ID=' + str(id) + ' IP=' + str(ip) +
                     ' PORT=' + str(port))
            x = MoteClass(id, ip, port)
            x.run()
        except Exception, e:
            debugLog('AFMOTEMOTE> Exception ' + str(e) + ' at mote ' + str(id))
        del x
        sleep(60)
示例#8
0
 def run(self):
     try:
         self.xrun()
     except Exception, e:
         self.device.setStat('thread.reader', 0)
         self.device.setStat('online', 0)
         Get(afsObj.offline(self.id))
         try:
             del CONNECTIONS[self.id]
         except:
             pass
         debugLog('reader exception for ' + str(self.id) + ': ' + str(e))
示例#9
0
 def run(self):
     try:
         self.xrun()
     except Exception, e:
         self.device.setStat('thread.reader', 0)
         self.device.setStat('online', 0)
         Get(afsObj.offline(self.id))
         try:
             del CONNECTIONS[self.id]
         except:
             pass
         debugLog('reader exception for '+str(self.id)+': '+str(e))
示例#10
0
 def finish(self):
     self.device.setStat('thread.handler', 0)
     self.device.setStat('online', 0)
     self.device.setStat('disconnected.on', datetime.now())
     try:
         Get(afsObj.offline(self.id))
     except:
         pass
     debugLog('Finishing for ' + str(self.id))
     try:
         del CONNECTIONS[self.id]
     except:
         pass
示例#11
0
 def finish(self):
     self.device.setStat('thread.handler', 0)
     self.device.setStat('online', 0)
     self.device.setStat('disconnected.on', datetime.now())
     try:
         Get(afsObj.offline(self.id))
     except:
         pass
     debugLog('Finishing for '+str(self.id))
     try:
         del CONNECTIONS[self.id]
     except:
         pass
示例#12
0
    def stall_incoming(self):
        self.device.setStat('thread.handler.status', 'stall')
        self.device.setStat('queue.pending', self.orders.qsize())

        if self.device.getStat('thread.reader.lasttick') + timedelta(0, 60) < datetime.now():
            debugLog('Handler quits due to thread.reader watchdog faulting')
            self.device.setStat('thread.reader.lasttick.watchdogged', datetime.now())
            raise Exception, ' watchdog'

        while self.incoming.qsize() > 100:
            self.device.setStat('thread.handler.status', 'stall-busywait')
            if self.device.getStat('thread.reader.lasttick') + timedelta(0, 60) < datetime.now():
                debugLog('Handler quits due to thread.reader watchdog faulting')
                self.device.setStat('thread.reader.lasttick.watchdogged', datetime.now())
                raise Exception, 'qsize > 100 + watchdog'
            sleep(1)
示例#13
0
    def stall_incoming(self):
        self.device.setStat('thread.handler.status', 'stall')
        self.device.setStat('queue.pending', self.orders.qsize())

        if self.device.getStat('thread.reader.lasttick') + timedelta(
                0, 60) < datetime.now():
            debugLog('Handler quits due to thread.reader watchdog faulting')
            self.device.setStat('thread.reader.lasttick.watchdogged',
                                datetime.now())
            raise Exception, ' watchdog'

        while self.incoming.qsize() > 100:
            self.device.setStat('thread.handler.status', 'stall-busywait')
            if self.device.getStat('thread.reader.lasttick') + timedelta(
                    0, 60) < datetime.now():
                debugLog(
                    'Handler quits due to thread.reader watchdog faulting')
                self.device.setStat('thread.reader.lasttick.watchdogged',
                                    datetime.now())
                raise Exception, 'qsize > 100 + watchdog'
            sleep(1)
示例#14
0
    def handle(self):
        '''If an exception happens in handle(), then finish() is not executed'''
        self.request.setsockopt(SOL_TCP, TCP_NODELAY, 1)  # Nagle - sio!
        self.request.setsockopt(SOL_SOCKET, SO_KEEPALIVE, 0)  # no keepalive
        self.request.setblocking(1)
        self.request.settimeout(60)
        self.packet = RequestHandlerPacket(proxy(self))
        self.packet.readInStrict(12)  # wczytaj pakiet inicjalizacji
        id, self.protocolVersion = getI_INITIALIZATION(self.packet)

        debugLog('Remote identified as ' + str(id))

        self.id = id
        self.incoming = Queue.Queue()
        self.orders = Queue.Queue()

        try:
            self.device = Device(id)
        except DeviceNotFound:
            debugLog('Unrecognized device ' + str(id))
            return

        try:
            if self.device.getStat('thread.handler') == 1:
                raise Exception
            if self.device.getStat('thread.reader') == 1:
                raise Exception
        except StatisticNotFound:
            pass

        CONNECTIONS[self.id] = self

        try:
            self.xhandle()
        except Exception, e:
            debugLog('Exception for ' + str(self.id) + ': ' + str(e))
示例#15
0
    def handle(self):
        '''If an exception happens in handle(), then finish() is not executed'''
        self.request.setsockopt(SOL_TCP, TCP_NODELAY, 1) # Nagle - sio!
        self.request.setsockopt(SOL_SOCKET, SO_KEEPALIVE, 0) # no keepalive
        self.request.setblocking(1)
        self.request.settimeout(60)
        self.packet = RequestHandlerPacket(proxy(self))
        self.packet.readInStrict(12) # wczytaj pakiet inicjalizacji
        id, self.protocolVersion = getI_INITIALIZATION(self.packet)

        debugLog('Remote identified as '+str(id))

        self.id = id
        self.incoming = Queue.Queue()
        self.orders = Queue.Queue()

        try:
            self.device = Device(id)
        except DeviceNotFound:
            debugLog('Unrecognized device '+str(id))
            return

        try:
            if self.device.getStat('thread.handler') == 1:
                raise Exception
            if self.device.getStat('thread.reader') == 1:
                raise Exception
        except StatisticNotFound:
            pass

        CONNECTIONS[self.id] = self

        try:
            self.xhandle()
        except Exception, e:
            debugLog('Exception for '+str(self.id)+': '+str(e))
示例#16
0
 def offline(self, id):
     debugLog('Offline for '+str(id))
     clearSensorsFor(id)
示例#17
0
 def fastRead(self, id):
     debugLog('Fastread for '+str(id))
     fastRead(id)
示例#18
0
 def online(self, id):
     debugLog('Online for '+str(id))
     readSensorsFor(id)
示例#19
0
 def online(self, id):
     debugLog("Online for " + str(id))
     readSensorsFor(id)
示例#20
0
 def offline(self, id):
     debugLog("Offline for " + str(id))
     clearSensorsFor(id)
示例#21
0
 def advanceToRunlevel(self, runlevel):
     if self.interval == self.runlevel_settings[runlevel]:
         print debugLog('Skipped runlevel change as there is no change in timer')
         return
     debugLog('ATR advancing to '+str(runlevel)+' with '+str(self.runlevel_settings[runlevel]))
     self.interval = self.runlevel_settings[runlevel]
示例#22
0
 def reread(self, id):
     debugLog('Reread for '+str(id))
     readSensorsFor(id)
示例#23
0
    def xhandle(self):
        # Przygotuj statystyki
        self.device.setStat('thread.handler', 1)
        self.device.setStat('transmission.errors', 0)
        self.device.setStat('transmission.successes', 0)
        self.device.setStat('queue.sent', 0)
        self.device.setStat('queue.pending', 0)
        self.device.setStat('connected.on', datetime.now())
        self.device.setStat('online', 1)
        self.device.setStat('last.tick', None)

        Get(afsObj.online(self.id))
        self.device.setStat('thread.handler.status', 'start')

        rant = ReaderThread(proxy(self))
        rant.start()
        mkCONFIRMATION(self.packet)
        self.packet.writeOut()
        debugLog('Passing onto main loop for ' + str(self.id))
        while True:
            self.device.setStat('thread.handler.status', 'WAIT')
            try:
                order = self.orders.get(True, 61)  # czekaj na następny rozkaz
            except:
                debugLog('Disconnected ' + str(self.id) +
                         ' because of no orders')
                raise Exception, 'no orders'

            if isinstance(order, ReadOrder):
                self.stall_incoming()
                rti = [
                    mkGET_HOLDING_RET_ERROR, mkGET_COIL_RET_ERROR,
                    mkGET_INPUT_RET_ERROR
                ]
                rti[order.regtype](self.packet, order.address, order.register)
                self.packet.writeOut()
                self.incoming.put(order.supplyId(self.id))
            elif isinstance(order, WriteOrder):
                self.stall_incoming()
                rti = [mkWRITE_HOLDING, mkWRITE_COIL]
                rti[order.regtype](self.packet, order.address, order.register,
                                   order.value)
                self.packet.writeOut()
                self.incoming.put(order.supplyId(self.id))
                debugLog('sent write')
            elif isinstance(order, NetinfoGetOrder):
                self.stall_incoming()
                mkGIVE_ME_SETTINGS(self.packet)
                self.packet.writeOut()
                self.incoming.put(order.supplyId(self.id))
            elif isinstance(order, NetinfoSetOrder):
                self.stall_incoming()
                mkCOMPLEX_SETTINGS_PRZEPIER(
                    self.packet,
                    (order.iptuple, order.subnettuple, order.routertuple,
                     order.dnstuple, order.target))
                self.packet.writeOut()
                self.incoming.put(order.supplyId(self.id))
            elif isinstance(order, KeepaliveOrder):
                self.stall_incoming()
                mkKEEPALIVE(self.packet)
                self.packet.writeOut()
                self.incoming.put(order.supplyId(self.id))
            elif isinstance(
                    order, RebootOrder
            ):  # Jak najprościej zrobić reboota? Rozłączyć urządzenie.
                return
            elif isinstance(order, SleepOrder):
                sleep(order.seconds)
            elif isinstance(order, VendorinfoGetOrder):
                self.stall_incoming()
                mkGETVENDORINFO(self.packet)
                self.packet.writeOut()
                self.incoming.put(order.supplyId(self.id))
            self.device.setStat('last.tick', datetime.now())
示例#24
0
 def reread(self, id):
     debugLog("Reread for " + str(id))
     readSensorsFor(id)
示例#25
0
    def xhandle(self):
            # Przygotuj statystyki
        self.device.setStat('thread.handler', 1)
        self.device.setStat('transmission.errors', 0)
        self.device.setStat('transmission.successes', 0)
        self.device.setStat('queue.sent', 0)
        self.device.setStat('queue.pending', 0)
        self.device.setStat('connected.on', datetime.now())
        self.device.setStat('online', 1)
        self.device.setStat('last.tick', None)

        Get(afsObj.online(self.id))
        self.device.setStat('thread.handler.status', 'start')

        rant = ReaderThread(proxy(self))
        rant.start()
        mkCONFIRMATION(self.packet)
        self.packet.writeOut()
        debugLog('Passing onto main loop for '+str(self.id))
        while True:
            self.device.setStat('thread.handler.status', 'WAIT')
            try:
                order = self.orders.get(True, 61) # czekaj na następny rozkaz
            except:
                debugLog('Disconnected '+str(self.id)+' because of no orders')
                raise Exception, 'no orders'

            if isinstance(order, ReadOrder):
                self.stall_incoming()
                rti = [mkGET_HOLDING_RET_ERROR, mkGET_COIL_RET_ERROR, mkGET_INPUT_RET_ERROR]
                rti[order.regtype](self.packet, order.address, order.register)
                self.packet.writeOut()
                self.incoming.put(order.supplyId(self.id))
            elif isinstance(order, WriteOrder):
                self.stall_incoming()
                rti = [mkWRITE_HOLDING, mkWRITE_COIL]
                rti[order.regtype](self.packet, order.address, order.register, order.value)
                self.packet.writeOut()
                self.incoming.put(order.supplyId(self.id))
                debugLog('sent write')
            elif isinstance(order, NetinfoGetOrder):
                self.stall_incoming()
                mkGIVE_ME_SETTINGS(self.packet)
                self.packet.writeOut()
                self.incoming.put(order.supplyId(self.id))
            elif isinstance(order, NetinfoSetOrder):
                self.stall_incoming()
                mkCOMPLEX_SETTINGS_PRZEPIER(self.packet, (order.iptuple, order.subnettuple, order.routertuple, order.dnstuple, order.target))
                self.packet.writeOut()
                self.incoming.put(order.supplyId(self.id))
            elif isinstance(order, KeepaliveOrder):
                self.stall_incoming()
                mkKEEPALIVE(self.packet)
                self.packet.writeOut()
                self.incoming.put(order.supplyId(self.id))
            elif isinstance(order, RebootOrder):  # Jak najprościej zrobić reboota? Rozłączyć urządzenie.
                return
            elif isinstance(order, SleepOrder):
                sleep(order.seconds)
            elif isinstance(order, VendorinfoGetOrder):
                self.stall_incoming()
                mkGETVENDORINFO(self.packet)
                self.packet.writeOut()
                self.incoming.put(order.supplyId(self.id))
            self.device.setStat('last.tick', datetime.now())
示例#26
0
 def fastRead(self, id):
     debugLog("Fastread for " + str(id))
     fastRead(id)