diff --git a/_posts/2023-05-01-brewpi-display.markdown b/_posts/2023-05-01-brewpi-display.markdown
index 57c3c17..291a3cb 100644
--- a/_posts/2023-05-01-brewpi-display.markdown
+++ b/_posts/2023-05-01-brewpi-display.markdown
@@ -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')
+```
+
+
+
+
+template/index.html:
+
+```html
+
+
+
+
+ Dynamic Label and Input Fields
+
+
+ Name: {{ brew['name'] }}
+ Time: {{ brew['time'] }}
+ Phase: {{ brew['phase'] }}
+ Next phase: {{ brew['next-phase'] }}
+
+
+
+
+
+
+```
+
+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()
+```