123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- import config
- import json
- import lirc
- import logging
- import paho.mqtt.client as mqtt
- import report
- import socket
- 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 remote_control(object):
- def __init__(self):
- self.__lirc_client__ = lirc.Client()
-
- self.__client__ = mqtt.Client(config.APP_NAME) # create client object
- self.__client__.on_message = self.__receive__ # attach function to callback
- self.__client__.username_pw_set(config.MQTT_USER, config.MQTT_PASS) # login with credentials
- try:
- self.__client__.connect(config.MQTT_SERVER, 1883) # establish connection
- self.__client__.loop_start() # start the loop
- for remote in config.SUPPORTED_REMOTES:
- for command in config.SUPPORTED_REMOTES[remote]:
- topic = config.MQTT_TOPIC + "/" + remote + "/" + command
- logger.debug("Subscribing \"%s\"", topic)
- self.__client__.subscribe(topic) # subscibe a topic
- except (socket.timeout, OSError) as e:
- logger.warning("Erro while setting up mqtt instance and listener")
-
- def __receive__(self, client, userdata, message):
- try:
- payload = json.loads(message.payload)
- except json.decoder.JSONDecodeError:
- payload = None
- if payload is None:
- remote = message.topic.split("/")[-2]
- command = message.topic.split("/")[-1]
- try:
- self.__lirc_client__.send_once(remote, command)
- except TimeoutError:
- logger.exception("Timeout-Error while sending IR-Command.")
- logger.info("Sending once: %s to %s.", command, remote)
- elif payload is True:
- logger.warning("Start of remote command NYI!")
- elif payload is False:
- logger.warning("Stop of remote command NYI!")
-
-
- if __name__ == '__main__':
- report.appLoggingConfigure(config.__BASEPATH__, config.LOGTARGET, ((config.APP_NAME, config.LOGLVL), ), fmt=config.formatter, host=config.LOGHOST, port=config.LOGPORT)
- #
- rc = remote_control()
- #
- while (True):
- time.sleep(30)
|