From d86ba8e823f55912ab612944da2bd2c36340df1f Mon Sep 17 00:00:00 2001 From: Piotr Dobrowolski Date: Thu, 19 Jan 2017 22:12:16 +0100 Subject: [PATCH] Allow search by node name, parse true/false accordingly --- main.py | 43 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/main.py b/main.py index b066af2..7a3f245 100644 --- a/main.py +++ b/main.py @@ -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//') +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////') +@app.route('/api/1/devices////') def device_write(node_id, endpoint, prop, value): return flask.jsonify(manager.handle_request(node_id, endpoint, prop, value))