use config and secrets files

master
vuko 2020-11-24 10:56:13 +01:00
parent 504a9c038b
commit 25919dfd77
4 changed files with 58 additions and 52 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
secrets.yaml

85
app.py
View File

@ -3,9 +3,17 @@ import threading
import paho.mqtt as mqtt import paho.mqtt as mqtt
import paho.mqtt.client import paho.mqtt.client
import paho.mqtt.publish import paho.mqtt.publish
from pathlib import Path
import os
import yaml
import re import re
import json import json
secrets_path = Path(os.environ.get("LIGHTS_WEB_SECRETS", 'secrets.yaml'))
config_path = Path(os.environ.get("LIGHTS_WEB_CONFIG", 'config.yaml'))
config = yaml.safe_load(config_path.read_text())
config.update(yaml.safe_load(secrets_path.read_text()))
c = threading.Condition() c = threading.Condition()
application = flask.Flask(__name__) application = flask.Flask(__name__)
application.msg="ab" application.msg="ab"
@ -30,7 +38,7 @@ application.lights = [False, False, False, False]
# print("MQTT Thread: " + str(threading.current_thread())) # print("MQTT Thread: " + str(threading.current_thread()))
# #
#mc = mqtt.client.Client() #mc = mqtt.client.Client()
#mc.username_pw_set("light","MG4Dhp6vCZjgbTzJ") #mc.username_pw_set(config['mqtt_rw_username'], config['mqtt_rw_password'])
#mc.connect("10.8.1.16") #mc.connect("10.8.1.16")
#mc.on_message = on_message #mc.on_message = on_message
#mc.subscribe("devices/#") #mc.subscribe("devices/#")
@ -49,68 +57,41 @@ def status():
c.release() c.release()
return json.dumps(st) return json.dumps(st)
config = {
"mqtt_server": "sound.waw.hackerspace.pl",
"mqtt_port": 1881,
"mqtt_username": "light",
"mqtt_password": "MG4Dhp6vCZjgbTzJ",
"lights": {
"l1" : {
"enabled": True,
"mqtt_path": "devices/light_904649/light_2/on",
},
"l2": {
"enabled": True,
"mqtt_path": "devices/light_904649/light_3/on",
},
"l3": {
"enabled": True,
"mqtt_path": "devices/light_904649/light_1/on",
},
"l4": {
"enabled": True,
"mqtt_path": "iot/077521/relay/on",
},
"l7": {
"enabled": True,
"mqtt_path": "devices/light_904649/light_4/on",
},
}
}
@application.route("/config") @application.route("/config")
def get_config(): def get_config():
return flask.jsonify(config) return flask.jsonify({
"mqtt_server": config["mqtt_server"],
"mqtt_port": config["mqtt_port"],
"mqtt_username": config["mqtt_ro_username"],
"mqtt_password": config["mqtt_ro_password"],
"lights": config['lights']
})
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"]
}
)
@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"]: if lid in config["lights"]:
mqtt.publish.single( publish(config["lights"][lid]["mqtt_path"] + "/set", "true")
config["lights"][lid]["mqtt_path"] + "/set", return flask.jsonify({"ok": True})
"true",
qos=1,
hostname=config["mqtt_server"],
auth = {
'username':config["mqtt_username"],
'password':config["mqtt_password"]
}
)
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"]: if lid in config["lights"]:
mqtt.publish.single( publish(config["lights"][lid]["mqtt_path"] + "/toggle", "true")
config["lights"][lid]["mqtt_path"] + "/toggle", return flask.jsonify({"ok": True})
"true",
qos=1,
hostname=config["mqtt_server"],
auth = {
'username':config["mqtt_username"],
'password':config["mqtt_password"]
}
)
return flask.jsonify({"ok": True})
if __name__ == "__main__": if __name__ == "__main__":
application.run(host='127.0.0.1',port=8000,debug=True) application.run(host='127.0.0.1',port=8000,debug=True)

22
config.yaml Normal file
View File

@ -0,0 +1,22 @@
mqtt_server: "sound.waw.hackerspace.pl"
mqtt_port: 1881
mqtt_ro_username: "lights-ro"
mqtt_rw_username: "lights-rw"
lights:
l1:
enabled: true
mqtt_path: "devices/light_904649/light_2/on"
l2:
enabled: true
mqtt_path: "devices/light_904649/light_3/on"
l3:
enabled: true
mqtt_path: "devices/light_904649/light_1/on"
l4:
enabled: true
mqtt_path: "iot/077521/relay/on"
l7:
enabled: true
mqtt_path": "devices/light_904649/light_4/on"

2
secrets.example.yaml Normal file
View File

@ -0,0 +1,2 @@
mqtt_ro_password: "readonly_password"
mqtt_rw_password: "readwrite_password"