Allow search by node name, parse true/false accordingly
parent
bb0d7e02de
commit
d86ba8e823
43
main.py
43
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/<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))
|
||||
|
||||
|
|
Loading…
Reference in New Issue