94 lines
2.6 KiB
Python
94 lines
2.6 KiB
Python
|
#!/usr/bin/env python
|
||
|
|
||
|
from flask import Flask, flash, redirect, render_template_string
|
||
|
from flask import render_template, request, session, abort
|
||
|
import os
|
||
|
|
||
|
app = Flask(__name__)
|
||
|
|
||
|
|
||
|
def button_widget(topic, label, pub_value):
|
||
|
def f():
|
||
|
template = '''
|
||
|
<div>
|
||
|
<input type="button" value="{{label}}" onclick="publish('{{topic}}', '{{pub_value}}');"/>
|
||
|
</div>
|
||
|
'''
|
||
|
return render_template_string(
|
||
|
template, topic=topic, label=label, pub_value=pub_value)
|
||
|
|
||
|
return f
|
||
|
|
||
|
|
||
|
def label_widget(topic, label, unit=''):
|
||
|
def f():
|
||
|
template = '''
|
||
|
<div class="widget subscriber" data-topic="{{topic}}">
|
||
|
<div>
|
||
|
<span class="{{topic}}-value update-policy-replace-content">-</span><span>{{unit}}</span>
|
||
|
</div>
|
||
|
<div>{{label}}</div>
|
||
|
</div>
|
||
|
'''
|
||
|
return render_template_string(
|
||
|
template, topic=topic, label=label, unit=unit)
|
||
|
|
||
|
return f
|
||
|
|
||
|
|
||
|
def log_widget(topic, label):
|
||
|
def f():
|
||
|
template = '''
|
||
|
<div class="widget subscriber" data-topic="{{topic}}">
|
||
|
<div class="{{topic}}-value update-policy-append-content" style="overflow: auto; height:100px;">
|
||
|
</div>
|
||
|
<div>{{label}}</div>
|
||
|
</div>
|
||
|
'''
|
||
|
return render_template_string(template, topic=topic, label=label)
|
||
|
|
||
|
return f
|
||
|
|
||
|
|
||
|
def row_layout(title, *elems):
|
||
|
def f():
|
||
|
template = '''
|
||
|
<div>
|
||
|
<div>{{title}}</div>
|
||
|
<div style="display: flex;">
|
||
|
{% for w in elems %}
|
||
|
{{w()|safe}}
|
||
|
{% endfor %}
|
||
|
</div>
|
||
|
</div>
|
||
|
'''
|
||
|
return render_template_string(template, title=title, elems=elems)
|
||
|
|
||
|
return f
|
||
|
|
||
|
|
||
|
@app.route('/')
|
||
|
def home():
|
||
|
return render_template(
|
||
|
'base.html',
|
||
|
widgets=[
|
||
|
label_widget("test", "test value", "%"),
|
||
|
row_layout(
|
||
|
"Temperature",
|
||
|
label_widget("home/sensors/livingroom/temperature",
|
||
|
"livingroom", "°C"),
|
||
|
label_widget("home/sensors/office/temperature", "office",
|
||
|
"°C"),
|
||
|
label_widget("home/sensors/bedroom/temperature", "bedroom",
|
||
|
"°C")),
|
||
|
row_layout("Device logs", log_widget("test", "test log"),
|
||
|
log_widget("test2", "test log 2")),
|
||
|
button_widget("test", "set to 1", 1),
|
||
|
button_widget("test", "set to foo", 'foo')
|
||
|
])
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
app.secret_key = os.urandom(12)
|
||
|
app.run(debug=True, host='0.0.0.0', port=4000)
|