Compare commits

..

No commits in common. "5974ec1c8b0a82344e5172a85c4113f456cd9111" and "5736a42f6e2fb98ccd90bcd3e435a10c180b2b1b" have entirely different histories.

2 changed files with 6 additions and 38 deletions

View File

@ -9,8 +9,6 @@ MQTT_USER = "user"
MQTT_PASS = "pass" MQTT_PASS = "pass"
MQTT_SERVER = "host" MQTT_SERVER = "host"
ENABLED_TOPIC = 'topic'
EXEC_LIST = { EXEC_LIST = {
'topic_1': { 'topic_1': {
'key': 'key', # Give a key or None to compare plain DATA 'key': 'key', # Give a key or None to compare plain DATA

View File

@ -2,7 +2,6 @@ import config
import json import json
import logging import logging
import mqtt import mqtt
import os
import report import report
import subprocess import subprocess
import time import time
@ -14,39 +13,17 @@ except ImportError:
logger = logging.getLogger(ROOT_LOGGER_NAME).getChild('main') logger = logging.getLogger(ROOT_LOGGER_NAME).getChild('main')
my_handler = logging.handlers.RotatingFileHandler(os.path.join(config.__BASEPATH__, 'door_bell.log'), mode='a', maxBytes=5*1024*1024, backupCount=3, encoding=None, delay=0)
my_handler.setLevel(logging.INFO)
my_handler.setFormatter(logging.Formatter("%(asctime)s: %(message)s"))
bell_log = logging.getLogger('root')
bell_log.setLevel(logging.INFO)
bell_log.addHandler(my_handler)
class exec_command(mqtt.mqtt_client): class exec_command(mqtt.mqtt_client):
def __init__(self): def __init__(self):
self.__enabled__ = True self.__block_execution__ = False
mqtt.mqtt_client.__init__(self, config.APP_NAME, config.MQTT_SERVER, 1883, config.MQTT_USER, config.MQTT_PASS) mqtt.mqtt_client.__init__(self, config.APP_NAME, config.MQTT_SERVER, 1883, config.MQTT_USER, config.MQTT_PASS)
self.add_callback(config.ENABLED_TOPIC + '/set', self.set_enabled)
for topic in config.EXEC_LIST: for topic in config.EXEC_LIST:
self.add_callback(topic, self.mqtt_rx) self.add_callback(topic, self.mqtt_rx)
# Start a pseudo process # Start a pseudo process
self.process = subprocess.Popen(["sleep", "0"]) self.process = subprocess.Popen(["sleep", "0"])
self.publish_states()
def set_enabled(self, client, userdata, message): def exec_command(self, cmd):
try:
payload = json.loads(message.payload)
except:
logger.exception("Error decoding json mqtt message")
else:
if self.__enabled__ != payload:
self.__enabled__ = payload
self.publish_states()
def exec_command(self, cmd, message):
self.process = subprocess.Popen(cmd.split(" ")) self.process = subprocess.Popen(cmd.split(" "))
if 'bell' in message.topic:
bell_log.info('Door Bell activated (%s)', message.topic)
def mqtt_rx(self, client, userdate, message): def mqtt_rx(self, client, userdate, message):
payload = None payload = None
@ -68,16 +45,10 @@ class exec_command(mqtt.mqtt_client):
except AttributeError: except AttributeError:
logger.exception("payload seems to be no dictionary") logger.exception("payload seems to be no dictionary")
if data is None or payload == data: if data is None or payload == data:
if self.__enabled__: if self.process.poll() is None:
if self.process.poll() is None: self.process.kill()
self.process.kill() logger.debug("Starting execution in background...")
logger.debug("Starting execution in background...") self.exec_command(config.EXEC_LIST[message.topic]['command'])
self.exec_command(config.EXEC_LIST[message.topic]['command'], message)
else:
logger.info("Execution is disabled")
def publish_states(self):
self.send(config.ENABLED_TOPIC, json.dumps(self.__enabled__))
if __name__ == '__main__': if __name__ == '__main__':
@ -87,7 +58,6 @@ if __name__ == '__main__':
# #
while True: while True:
time.sleep(30) time.sleep(30)
ec.publish_states()
try: try:
ec.join() ec.join()
finally: finally: