def enviar_comando(function_name, *args, **kwargs): """Envia un comando remoto al servidor del plc""" stream = broker.pubsub() stream.subscribe('command-returns') command = RemoteCommand(function_name, *args, **kwargs) receptor = broker.publish('commands', command.serialize()) if receptor: for message in stream.listen(): if message['type'] == 'message': data = json.loads(message['data']) print data if data['id'] == command.id: return data['success'] return False
def run(self): #TODO implementar logging pubsub = broker.pubsub() pubsub.subscribe('commands') for message in pubsub.listen(): if message['type'] == 'message': logging.info("Se recibió el mensaje de ejecución remota %s", message['data']) command = RemoteCommand() command.unserialize(message['data']) try: success = command.execute(plc) except: success = False logging.error("No se pudo ejecutar la orden: '%s'", command.function_name) response = {'id':command.id, 'success': success} time.sleep(0.6) broker.publish('command-returns', json.dumps(response)) logging.info("enviada respuesta a comando: '%'", response)
def run(self): #TODO implementar logging pubsub = broker.pubsub() pubsub.subscribe('commands') for message in pubsub.listen(): if message['type'] == 'message': logging.info("Se recibió el mensaje de ejecución remota %s", message['data']) command = RemoteCommand() command.unserialize(message['data']) try: success = command.execute(plc) except: success = False logging.error("No se pudo ejecutar la orden: '%s'", command.function_name) response = {'id': command.id, 'success': success} time.sleep(0.6) broker.publish('command-returns', json.dumps(response)) logging.info("enviada respuesta a comando: '%'", response)