import config import logging import paho.mqtt.client as paho import report import subprocess 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('librespot') class mpc(object): PLAYING_TXT = 'playing' def __init__(self, state_callback): logger.info("Starting MPD monitor...") self.__state_callback__ = state_callback self.__state__ = None self.set_state(False) def run(self): while True: output = subprocess.check_output(["mpc", "status"]) out_txt = output.decode('UTF-8') self.set_state(self.PLAYING_TXT in out_txt) time.sleep(.2) def set_state(self, target_state): if self.__state__ != target_state: self.__state__ = target_state logger.info('MPD state changed to %s', self.__state__) self.__state_callback__(self.__state__) def send_msg_mqtt(state): client= paho.Client("mpd") client.username_pw_set(config.MQTT_USER, config.MQTT_PASS) client.connect(config.MQTT_SERVER, 1883) logger.info("Sending MPD status information to mqtt %s = %s", config.MQTT_TOPIC, str(state)) client.publish(config.MQTT_TOPIC, "true" if state else "false") if __name__ == '__main__': report.appLoggingConfigure(config.__BASEPATH__, config.LOGTARGET, ((config.APP_NAME, config.LOGLVL), ), fmt=config.formatter, host=config.LOGHOST, port=config.LOGPORT) mpd = mpc(send_msg_mqtt) mpd.run() import paho.mqtt.client as paho