greenhouseui/gardenui/app.py
2021-05-07 09:30:11 +02:00

162 lines
5.0 KiB
Python

import json
import logging
import xmlrpc.client
from flask import Flask
from flask import render_template
from flask import make_response
from flask import request
from flask import jsonify
LOG_LEVEL = logging.INFO
LOG_FILE = "/var/log/sauna.log"
LOG_FORMAT = "%(asctime)s %(levelname)s %(message)s"
URL = 'http://{}:{}'.format('localhost', 64001)
# logging.basicConfig(format=LOG_FORMAT, level=LOG_LEVEL, filename=LOG_FILE)
logging.basicConfig(format=LOG_FORMAT, level=LOG_LEVEL)
log = logging.getLogger()
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/garden')
def garden():
return render_template('garden.html')
@app.route('/greenhouse_1')
def greenhouse_1():
return render_template('greenhouse_1.html')
@app.route('/greenhouse_2')
def greenhouse_2():
return render_template('greenhouse_2.html')
@app.route('/sample/<idx>', methods=['GET'])
def get_sample(idx='0'):
idx = int(idx)
res = {}
client = xmlrpc.client.ServerProxy(URL)
if idx == 1:
heat = {}
heat['id'] = str(idx)
heat['state'] = client.get_current_heat_state(idx)
temp = client.get_current_temperature(idx)
if temp:
temperature = {}
temperature['id'] = str(idx)
temperature['value'] = temp
res['heat'] = heat
res['temperature'] = temperature
water = {}
water['id'] = str(idx)
water['state'] = client.get_current_water_state(idx)
res['water'] = water
return make_response(jsonify(res), 200)
@app.route('/config/<idx>', methods=['GET'])
def get_config(idx='0'):
idx = int(idx)
res = {}
client = xmlrpc.client.ServerProxy(URL)
if idx == 1:
heat = {}
heat['id'] = str(idx)
heat['autostate'] = client.get_heat_autostate(idx)
heat['on_temperature'] = client.get_on_temperature(idx)
heat['off_temperature'] = client.get_off_temperature(idx)
res['heat'] = heat
water = {}
water['id'] = str(idx)
water['autostate'] = client.get_water_autostate(idx)
water['times'] = client.get_water_times(idx)
res['water'] = water
return make_response(jsonify(res), 200)
@app.route('/sample', methods=['PATCH'])
def patch_sample():
client = xmlrpc.client.ServerProxy(URL)
record = json.loads(request.data)
if 'id' in record and record['id'] == '1':
if 'heatstate' in record:
if record['heatstate']:
client.set_heat_state(record['id'])
else:
client.clear_heat_state(record['id'])
if 'id' in record and 'waterstate' in record:
if record['waterstate']:
client.set_water_state(record['id'])
else:
client.clear_water_state(record['id'])
return make_response("", 204)
@app.route('/config', methods=['PATCH'])
def patch_config():
client = xmlrpc.client.ServerProxy(URL)
record = json.loads(request.data)
if 'water' in record:
water = record['water']
if 'autostate' in water:
if water['autostate']:
client.set_water_autostate(water['id'])
else:
client.clear_water_autostate(water['id'])
if 'times' in water:
client.set_water_times(water['id'], water['times'])
if 'heat' in record:
if 'id' in record['heat'] and record['heat']['id'] == '1':
if 'autostate' in record['heat']:
if record['heat']['autostate']:
client.set_heat_autostate('1')
else:
client.clear_heat_autostate('1')
if 'increase_on_temperature' in record['heat']:
if record['heat']['increase_on_temperature']:
client.increase_on_temperature('1')
if 'decrease_on_temperature' in record['heat']:
if record['heat']['decrease_on_temperature']:
client.decrease_on_temperature('1')
if 'increase_off_temperature' in record['heat']:
if record['heat']['increase_off_temperature']:
client.increase_off_temperature('1')
if 'decrease_off_temperature' in record['heat']:
if record['heat']['decrease_off_temperature']:
client.decrease_off_temperature('1')
# prepare answer
res = {}
if 'heat' in record and record['heat']['id'] == '1':
heat = {}
heat['id'] = '1'
heat['autostate'] = client.get_heat_autostate(1)
heat['on_temperature'] = client.get_on_temperature(1)
heat['off_temperature'] = client.get_off_temperature(1)
res['heat'] = heat
if 'water' in record:
water = {}
water['id'] = record['water']['id']
water['autostate'] = client.get_water_autostate(int(record['water']['id']))
water['times'] = client.get_water_times(int(record['water']['id']))
res['water'] = water
return make_response(jsonify(res), 200)
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=8000)