fix problems, add logging

master
vuko 2020-11-27 16:10:58 +01:00
parent 0204efc07c
commit ac106890ac
1 changed files with 40 additions and 23 deletions

View File

@ -1,3 +1,4 @@
import logging
import flask import flask
import threading import threading
import paho.mqtt as mqtt import paho.mqtt as mqtt
@ -25,27 +26,35 @@ application = flask.Flask(__name__)
application.msg="ab" application.msg="ab"
application.lights = { lid: False for lid in config['lights'] } application.lights = { lid: False for lid in config['lights'] }
application.logger.removeHandler(flask.logging.default_handler)
logging.basicConfig(level=logging.DEBUG)
def on_message(client,userdata,message): def on_message(client,userdata,message):
c.acquire() c.acquire()
for lid, cfg in config['lights']: for lid, cfg in config['lights'].items():
if cfg.mqtt_path == message.topic: if cfg['mqtt_path'] == message.topic:
if message.payload == "true": if message.payload == b'true':
application.lights[lid] = True application.lights[lid] = True
elif message.payload == "false": elif message.payload == b'false':
application.lights[lid] = False application.lights[lid] = False
c.release() c.release()
def on_connect(client, userdata, rc): def on_connect(client, userdata, rc, l):
for lid, cfg in config['lights']: logging.info(f"connected")
for lid, cfg in config['lights'].items():
logging.info(f"subscribing: {cfg}")
client.subscribe(cfg['mqtt_path']) client.subscribe(cfg['mqtt_path'])
mc = mqtt.client.Client() mc = mqtt.client.Client()
mc.username_pw_set(config['mqtt_rw_username'], config['mqtt_rw_password']) mc.username_pw_set(config['mqtt_rw_username'], config['mqtt_rw_password'])
mc.on_connect = on_connect mc.on_connect = on_connect
mc.on_message = on_message mc.on_message = on_message
mc.connect(config["mqtt_server"]) mc.connect_async(config["mqtt_server"])
mc.enable_logger()
mc.loop_start() mc.loop_start()
@ -73,28 +82,36 @@ def get_config():
}) })
def publish(path, payload): def publish(path, payload):
mqtt.publish.single( mc.publish(path, payload, qos=1)
path,
payload,
qos=1,
hostname=config["mqtt_server"],
auth = {
'username':config["mqtt_rw_username"],
'password':config["mqtt_rw_password"]
}
)
@application.route('/light/<lid>/on/set', methods=['POST']) @application.route('/light/<lid>/on/set', methods=['POST'])
def set_light(lid): def set_light(lid):
if lid in config["lights"]: try:
publish(config["lights"][lid]["mqtt_path"] + "/set", "true") path = config["lights"][lid]["mqtt_path"]
except KeyError:
return flask.jsonify({"ok": False})
publish(path + '/set', "true")
return flask.jsonify({"ok": True}) return flask.jsonify({"ok": True})
@application.route('/light/<lid>/on/toggle', methods=['POST']) @application.route('/light/<lid>/on/toggle', methods=['POST'])
def toggle_light(lid): def toggle_light(lid):
if lid in config["lights"]: try:
publish(config["lights"][lid]["mqtt_path"] + "/toggle", "true") cfg = config["lights"][lid]
toggle = cfg.get('toggle', False)
path = cfg["mqtt_path"]
except KeyError:
print(config["lights"])
logging.exception("toggle exception")
return flask.jsonify({"ok": False})
if toggle:
publish(path + '/toggle', "true")
elif application.lights[lid]:
publish(path + '/set', "false")
else:
publish(path + '/set', "true")
return flask.jsonify({"ok": True}) return flask.jsonify({"ok": True})
def run_development(): def run_development():