Allow search by node name, parse true/false accordingly

master
informatic 2017-01-19 22:12:16 +01:00
parent bb0d7e02de
commit d86ba8e823
1 changed files with 37 additions and 6 deletions

43
main.py
View File

@ -45,18 +45,39 @@ class SpejsiotManager(mqtt.Client):
if node_id not in self.devices.keys():
self.devices[node_id] = SpejsiotDevice(node_id)
if msg.payload == 'true':
value = True
elif msg.payload == 'false':
value = False
else:
value = msg.payload
if topic.startswith('$'):
self.devices[node_id].properties[topic] = msg.payload
self.devices[node_id].properties[topic] = value
else:
endpoint, prop = topic.split('/', 1)
self.devices[node_id].endpoints[endpoint][prop] = msg.payload
print(topic)
self.devices[node_id].endpoints[endpoint][prop] = value
except:
self.logger.exception('fuckup')
def find_node(self, node_id):
if node_id in self.devices:
return self.devices[node_id]
for n in self.devices.values():
if n.properties.get('$name', None) == node_id:
return n
return None
def handle_request(self, node_id, endpoint, prop, value):
self.publish('iot/%s/%s/%s/set' % (node_id, endpoint, prop), value, retain=True)
node = self.find_node(node_id)
if not node:
return False
self.publish('iot/%s/%s/%s/set' % (
node.node_id, endpoint, prop
), value, retain=True)
return True
@ -100,11 +121,21 @@ def utility_processor():
def index():
return flask.render_template('index.html', devices=manager.devices)
@app.route('/api/1/devices')
@app.route('/api/1/devices/')
def api_devices():
return flask.jsonify({k: v.dictify() for k, v in manager.devices.items()})
@app.route('/api/1/devices/<node_id>/')
def api_device_info(node_id):
node = manager.find_node(node_id)
print node
if not node:
flask.abort(404)
return flask.jsonify(node.dictify())
@app.route('/api/1/device/<node_id>/<endpoint>/<prop>/<value>')
@app.route('/api/1/devices/<node_id>/<endpoint>/<prop>/<value>')
def device_write(node_id, endpoint, prop, value):
return flask.jsonify(manager.handle_request(node_id, endpoint, prop, value))