diff --git a/.gitmodules b/.gitmodules index fa2204f..4fd1c93 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,6 +4,3 @@ [submodule "report"] path = report url = https://git.mount-mockery.de/pylib/report.git -[submodule "task"] - path = task - url = https://git.mount-mockery.de/pylib/task.git diff --git a/exec_command.py b/exec_command.py index b17920c..8e1259b 100644 --- a/exec_command.py +++ b/exec_command.py @@ -2,9 +2,8 @@ import config import json import logging import mqtt -import os import report -import task +import subprocess import time try: @@ -14,46 +13,42 @@ except ImportError: logger = logging.getLogger(ROOT_LOGGER_NAME).getChild('main') -class exec_command(mqtt.mqtt_client, task.threaded_queue): +class exec_command(mqtt.mqtt_client): 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) + # Start a pseudo process + self.process = subprocess.Popen(["sleep", "0"]) - def exec_command(self, rt): - os.system(config.COMMAND) - self.__block_execution__ = False - + def exec_command(self): + self.process = subprocess.Popen(config.COMMAND.split(" ")) 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) + data = None + if config.PAYLOAD_KEY is None: + try: + data = message.payload.decode('utf-8') + except: + logger.exception("Error decoding mqtt message") else: - logger.debug("Execution in progress. Ignoring request...") + 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: + if self.process.poll() is None: + self.process.kill() + logger.debug("Starting execution in background...") + self.exec_command() 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) diff --git a/task b/task deleted file mode 160000 index 7583bb5..0000000 --- a/task +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 7583bb5f3bd2420c901374ba95b678af6ce88433