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
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))
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
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())
def orderRead(self): if not self.device.isOnline(): raise Exceptions.DeviceOffline else: Get(sObj.read(self.device.devid, self.modbus_nr, self.reg_type, self.register))
def write(self, value): value = inttouint(value) if not self.device.isOnline(): raise Exceptions.DeviceOffline else: Get(sObj.write(self.device.devid, self.modbus_nr, self.reg_type, self.register, value))
def reread_sensorics(self): try: Get(afsObj.reread(self.devid)) except: raise Exceptions.DatabaseFailure
def reboot(self): try: Get(sObj.reboot(self.devid)) except: raise Exceptions.DatabaseFailure
def sleep(self, amount): try: Get(sObj.sleep(self.devid, amount)) except: raise Exceptions.DatabaseFailure
def signalFastreadRequired(self): try: Get(afsObj.fastRead(self.devid)) except: raise Exceptions.DatabaseFailure