mirror of
https://github.com/esphome/esphome.git
synced 2024-11-27 09:18:00 +01:00
69 lines
2.4 KiB
Python
69 lines
2.4 KiB
Python
from __future__ import print_function
|
|
|
|
import logging
|
|
from datetime import datetime
|
|
|
|
import paho.mqtt.client as mqtt
|
|
|
|
from esphomeyaml.const import CONF_BROKER, CONF_DISCOVERY_PREFIX, CONF_ESPHOMEYAML, CONF_LOGGER, \
|
|
CONF_LOG_TOPIC, CONF_MQTT, CONF_NAME, CONF_PASSWORD, CONF_PORT, CONF_TOPIC_PREFIX, \
|
|
CONF_USERNAME
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
|
|
def initialize(config, subscriptions, on_message, username, password, client_id):
|
|
def on_connect(client, userdata, flags, rc):
|
|
for topic in subscriptions:
|
|
client.subscribe(topic)
|
|
|
|
client = mqtt.Client(client_id or u'')
|
|
client.on_connect = on_connect
|
|
client.on_message = on_message
|
|
if username is None:
|
|
if config[CONF_MQTT].get(CONF_USERNAME):
|
|
client.username_pw_set(config[CONF_MQTT][CONF_USERNAME],
|
|
config[CONF_MQTT][CONF_PASSWORD])
|
|
elif username:
|
|
client.username_pw_set(username, password)
|
|
client.connect(config[CONF_MQTT][CONF_BROKER], config[CONF_MQTT][CONF_PORT])
|
|
|
|
try:
|
|
client.loop_forever()
|
|
except KeyboardInterrupt:
|
|
pass
|
|
return 0
|
|
|
|
|
|
def show_logs(config, topic=None, username=None, password=None, client_id=None):
|
|
if topic is not None:
|
|
pass # already have topic
|
|
elif CONF_LOG_TOPIC in config.get(CONF_LOGGER, {}):
|
|
topic = config[CONF_LOGGER][CONF_LOG_TOPIC]
|
|
elif CONF_TOPIC_PREFIX in config[CONF_MQTT]:
|
|
topic = config[CONF_MQTT][CONF_TOPIC_PREFIX] + u'/debug'
|
|
else:
|
|
topic = config[CONF_ESPHOMEYAML][CONF_NAME] + u'/debug'
|
|
_LOGGER.info(u"Starting log output from %s", topic)
|
|
|
|
def on_message(client, userdata, msg):
|
|
t = datetime.now().time().strftime(u'[%H:%M:%S] ')
|
|
print(t + msg.payload)
|
|
|
|
return initialize(config, [topic], on_message, username, password, client_id)
|
|
|
|
|
|
def clear_topic(config, topic, username=None, password=None, client_id=None):
|
|
if topic is None:
|
|
discovery_prefix = config[CONF_MQTT].get(CONF_DISCOVERY_PREFIX, u'homeassistant')
|
|
name = config[CONF_ESPHOMEYAML][CONF_NAME]
|
|
topic = u'{}/+/{}/#'.format(discovery_prefix, name)
|
|
_LOGGER.info(u"Clearing messages from {}".format(topic))
|
|
|
|
def on_message(client, userdata, msg):
|
|
if not msg.payload:
|
|
return
|
|
print(u"Clearing topic {}".format(msg.topic))
|
|
client.publish(msg.topic, None, retain=True)
|
|
|
|
return initialize(config, [topic], on_message, username, password, client_id)
|