More code examples for brew dispaly

This commit is contained in:
2023-07-09 22:36:07 +02:00
parent 71b599f790
commit dbe0f6d47e

View File

@@ -15,4 +15,183 @@ Continuing on brewpi refrigerator project we have already created a [regulator](
fullwidth="true"
%}
The code is split into the e-ink renderer and a http server to easier update.
server:
```python
from flask import Flask, request, render_template, send_file, redirect, send_from_directory
from main import draw
app = Flask(__name__)
brew = {
'name': 'Kinn Kveldsbris',
'time': '11 days',
'phase': 'Carbonating',
'next-phase': 'Drink'
}
@app.route('/api/render', methods=['POST'])
def render():
draw(brew)
if request.headers.get('Content-Type') == 'application/json':
return 'ok'
else:
return redirect('/')
@app.route('/_health')
def health():
return 'ok'
@app.route('/', methods=['GET'])
def index():
return render_template('index.html', brew=brew)
@app.route('/', methods=['POST'])
def indexForm():
brew['name'] = request.form['name'] or brew['name']
brew['time'] = request.form['time'] or brew['time']
brew['phase'] = request.form['phase'] or brew['phase']
brew['next-phase'] = request.form['next-phase'] or brew['next-phase']
return redirect('/')
if __name__ == '__main__':
app.run(host='0.0.0.0')
```
<script src="https://gist.github.com/KevinMidboe/1d89a34370caf6755c74c76341d23dd9.js"></script>
template/index.html:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1"><title>Dynamic Label and Input Fields</title>
</head>
<body>
<h3>Name: {{ brew['name'] }}</h3>
<h5>Time: {{ brew['time'] }}</h5>
<h5>Phase: {{ brew['phase'] }}</h5>
<h5>Next phase: {{ brew['next-phase'] }}</h5>
<form method="POST" action="/">
<label for="field1">Beer name:</label>
<input type="text" id="name" name="name"><br><br>
<label for="field2">Time left:</label>
<input type="text" id="time" name="time"><br><br>
<label for="field3">Current Phase:</label>
<input type="text" id="phase" name="phase"><br><br>
<label for="field4">Next Phase:</label>
<input type="text" id="next-phase" name="next-phase"><br><br>
<input type="submit" value="Submit">
</form>
<form method="POST" action="/api/render">
<input type="submit" value="Render">
</form>
</body>
</html>
```
renderer:
```python
#!/usr/bin/python
# -*- coding:utf-8 -*-
import sys
import os
picdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'brewDisplay/pic')
libdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'brewDisplay/lib')
print(libdir)
if os.path.exists(libdir):
sys.path.append(libdir)
import logging
from waveshare_epd import epd2in9bc
import time
from PIL import Image,ImageDraw,ImageFont
import traceback
logging.basicConfig(level=logging.DEBUG)
placeholderBrew = {
'name': 'Kinn Kveldsbris',
'time': '11 days',
'phase': 'Carbonating',
'next-phase': 'Drink'
}
def draw(brew=placeholderBrew):
try:
logging.info("epd2in9bc Demo")
epd = epd2in9bc.EPD()
logging.info("init and Clear")
epd.init()
epd.Clear()
# Drawing on the image
logging.info("Drawing")
font70 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 70)
font40 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 40)
font24 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 24)
font20 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 20)
font18 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 18)
font16 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 16)
font14 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 14)
font12 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 12)
font8 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 8)
# Drawing on the Horizontal image
logging.info("1.Drawing on the Horizontal image...")
HBlackimage = Image.new('1', (epd.height, epd.width), 255) # 298*126
HRYimage = Image.new('1', (epd.height, epd.width), 255) # 298*126 ryimage: red or yellow image
drawblack = ImageDraw.Draw(HBlackimage)
drawry = ImageDraw.Draw(HRYimage)
# drawblack.text((2, 0), 'Schleppe brew', font = font12, fill = 0)
drawblack.text((2, 0), 'Beer: {}'.format(brew['name']), font = font14, fill = 0)
drawblack.text((2, 16), "State: heating", font = font20, fill = 0)
drawblack.text((190, 0), "Time left", font = font18, fill = 0)
drawblack.text((190, 18), brew['time'], font = font12, fill = 0)
drawblack.text((190, 34), "Phase", font = font18, fill = 0)
drawblack.text((190, 52), brew['phase'], font = font12, fill = 0)
drawblack.text((190, 66), "Next: {}".format(brew['next-phase']), font = font8, fill = 0)
# ddrawblack.text((175, 54), "Time:", font = font16, fill = 0)
# ddrawblack.text((175, 66), "11 days", font = font12, fill = 0)
drawblack.text((2, 55), "Inside temp", font = font14, fill = 0)
drawblack.text((2, 60), "4.3 C", font = font70, fill = 0)
drawblack.arc((110, 70, 120, 80), 0, 360, fill = 0)
drawblack.text((175, 79), "Outside temp", font = font14, fill = 0)
drawblack.text((175, 89), "20.3 C", font = font40, fill = 0)
epd.display(epd.getbuffer(HBlackimage), epd.getbuffer(HRYimage))
logging.info("Goto Sleep...")
epd.sleep()
except IOError as e:
logging.info(e)
except KeyboardInterrupt:
logging.info("ctrl + c:")
epd2in9bc.epdconfig.module_exit()
exit()
if __name__ == '__main__':
draw()
```