123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- import config
- import json
- import logging
- import mqtt
- import os
- import report
- import task
- import time
-
- try:
- from config import APP_NAME as ROOT_LOGGER_NAME
- except ImportError:
- ROOT_LOGGER_NAME = 'root'
- logger = logging.getLogger(ROOT_LOGGER_NAME).getChild('main')
-
-
- class exec_command(mqtt.mqtt_client, task.threaded_queue):
- def __init__(self):
- self.__block_execution__ = False
- task.threaded_queue.__init__(self)
- mqtt.mqtt_client.__init__(self, config.APP_NAME, config.MQTT_SERVER, 1883, config.MQTT_USER, config.MQTT_PASS)
- self.add_callback(config.TOPIC, self.mqtt_rx)
-
- def exec_command(self, rt):
- os.system(config.COMMAND)
- self.__block_execution__ = False
-
-
- def mqtt_rx(self, client, userdate, message):
- if not self.__block_execution__:
- data = None
- if config.PAYLOAD_KEY is None:
- try:
- data = message.payload.decode('utf-8')
- except:
- logger.exception("Error decoding mqtt message")
- else:
- try:
- payload = json.loads(message.payload)
- except:
- logger.exception("Error decoding json mqtt message")
- else:
- data = payload.get(config.PAYLOAD_KEY)
- if config.PAYLOAD_DATA is None or data == config.PAYLOAD_DATA:
- logger.debug("Starting execution in background...")
- self.__block_execution__ = True
- self.enqueue(5, self.exec_command)
- else:
- logger.debug("Execution in progress. Ignoring request...")
-
-
- if __name__ == '__main__':
- report.appLoggingConfigure(config.__BASEPATH__, config.LOGTARGET, ((config.APP_NAME, config.LOGLVL), ), fmt=config.formatter, host=config.LOGHOST, port=config.LOGPORT)
- #
- ec = exec_command()
- ec.run()
- #
- while True:
- time.sleep(30)
- try:
- ec.join()
- finally:
- ec.stop()
|