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 threading
import paho.mqtt as mqtt
@ -25,27 +26,35 @@ application = flask.Flask(__name__)
application.msg="ab"
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):
c.acquire()
for lid, cfg in config['lights']:
if cfg.mqtt_path == message.topic:
if message.payload == "true":
for lid, cfg in config['lights'].items():
if cfg['mqtt_path'] == message.topic:
if message.payload == b'true':
application.lights[lid] = True
elif message.payload == "false":
elif message.payload == b'false':
application.lights[lid] = False
c.release()
def on_connect(client, userdata, rc):
for lid, cfg in config['lights']:
def on_connect(client, userdata, rc, l):
logging.info(f"connected")
for lid, cfg in config['lights'].items():
logging.info(f"subscribing: {cfg}")
client.subscribe(cfg['mqtt_path'])
mc = mqtt.client.Client()
mc.username_pw_set(config['mqtt_rw_username'], config['mqtt_rw_password'])
mc.on_connect = on_connect
mc.on_message = on_message
mc.connect(config["mqtt_server"])
mc.connect_async(config["mqtt_server"])
mc.enable_logger()
mc.loop_start()
@ -73,29 +82,37 @@ def get_config():
})
def publish(path, payload):
mqtt.publish.single(
path,
payload,
qos=1,
hostname=config["mqtt_server"],
auth = {
'username':config["mqtt_rw_username"],
'password':config["mqtt_rw_password"]
}
)
mc.publish(path, payload, qos=1)
@application.route('/light/<lid>/on/set', methods=['POST'])
def set_light(lid):
if lid in config["lights"]:
publish(config["lights"][lid]["mqtt_path"] + "/set", "true")
return flask.jsonify({"ok": True})
try:
path = config["lights"][lid]["mqtt_path"]
except KeyError:
return flask.jsonify({"ok": False})
publish(path + '/set', "true")
return flask.jsonify({"ok": True})
@application.route('/light/<lid>/on/toggle', methods=['POST'])
def toggle_light(lid):
if lid in config["lights"]:
publish(config["lights"][lid]["mqtt_path"] + "/toggle", "true")
return flask.jsonify({"ok": True})
try:
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})
def run_development():
application.run(host='127.0.0.1',port=8000,debug=True)