diff --git a/.gitignore b/.gitignore
index e5d8a41..e62999f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,4 +5,5 @@ dist
.idea
*.log
cbpi.egg-info
-logs
\ No newline at end of file
+logs
+cbpi/extension/ui
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index f83f698..1dc20ae 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,4 +1,7 @@
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 994fc39..5b19fe7 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -2,10 +2,13 @@
-
+
+
+
+
@@ -28,7 +31,7 @@
-
+
@@ -49,7 +52,23 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -58,43 +77,89 @@
-
+
-
-
-
-
-
+
+
-
+
-
-
-
-
-
+
+
+
+
+
+
+
-
+
-
-
+
+
-
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -110,12 +175,6 @@
- S NEXT
- rwing
- next
- Topic
- Topic step
- INTER
no
Fut
CBPiException
@@ -140,6 +199,12 @@
HALLOOOOOOO
It's im
cbpi
+ init
+ webso
+ ActorTable
+ ActorForm
+ render_config
+ ###
@@ -154,6 +219,7 @@
$PROJECT_DIR$/core
$PROJECT_DIR$/cbpi
$PROJECT_DIR$
+ $PROJECT_DIR$/cbpi/extension/ui/react/src/views/hardware
@@ -162,35 +228,10 @@
-
-
-
-
-
+
+
+
+
+
@@ -235,6 +301,16 @@
+
+
+
+
+
+
+
+
+
+
@@ -252,19 +328,19 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
@@ -279,7 +355,7 @@
-
+
@@ -465,16 +541,16 @@
-
-
+
+
-
+
@@ -499,7 +575,8 @@
-
+
+
1541288846149
@@ -551,7 +628,7 @@
-
+
@@ -563,18 +640,18 @@
-
+
-
+
-
+
-
+
@@ -586,12 +663,12 @@
-
+
-
+
@@ -633,317 +710,428 @@
-
+
-
-
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
+
+
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
diff --git a/config/config.yaml b/config/config.yaml
index 59aa9ff..ebef840 100644
--- a/config/config.yaml
+++ b/config/config.yaml
@@ -6,6 +6,7 @@ index_url: /api/doc
port: 8080
+# login data
username: cbpi
password: 123
diff --git a/craftbeerpi.db b/craftbeerpi.db
index fa97ecf..e17d82d 100644
Binary files a/craftbeerpi.db and b/craftbeerpi.db differ
diff --git a/requirements.txt b/requirements.txt
index c019d57..f0381c6 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -8,4 +8,4 @@ aiojobs==0.2.2
aiosqlite==0.7.0
cryptography==2.3.1
voluptuous==0.11.5
-pyfigle==0.7.6
\ No newline at end of file
+pyfiglet==0.7.6
\ No newline at end of file
diff --git a/samples.txt b/samples.txt
new file mode 100644
index 0000000..79fd3e8
--- /dev/null
+++ b/samples.txt
@@ -0,0 +1,51 @@
+function noop() {}
+
+export default function (url, opts) {
+ opts = opts || {};
+
+ var ws, num=0, $={};
+ var max = opts.maxAttempts || Infinity;
+
+ $.open = function () {
+ ws = new WebSocket(url, opts.protocols || []);
+
+ ws.onmessage = opts.onmessage || noop;
+
+ ws.onopen = function (e) {
+ (opts.onopen || noop)(e);
+ num = 0;
+ };
+
+ ws.onclose = function (e) {
+ e.code === 1e3 || e.code === 1005 || $.reconnect(e);
+ (opts.onclose || noop)(e);
+ };
+
+ ws.onerror = function (e) {
+ (e && e.code==='ECONNREFUSED') ? $.reconnect(e) : (opts.onerror || noop)(e);
+ };
+ };
+
+ $.reconnect = function (e) {
+ (num++ < max) ? setTimeout(function () {
+ (opts.onreconnect || noop)(e);
+ $.open();
+ }, opts.timeout || 1e3) : (opts.onmaximum || noop)(e);
+ };
+
+ $.json = function (x) {
+ ws.send(JSON.stringify(x));
+ };
+
+ $.send = function (x) {
+ ws.send(x);
+ };
+
+ $.close = function (x, y) {
+ ws.close(x || 1e3, y);
+ };
+
+ $.open(); // init
+
+ return $;
+}
\ No newline at end of file
diff --git a/setup.py b/setup.py
index 02f132d..90f8bef 100644
--- a/setup.py
+++ b/setup.py
@@ -1,7 +1,7 @@
from setuptools import setup, find_packages
setup(name='cbpi',
- version='4.0.3',
+ version='4.0.4',
description='CraftBeerPi API',
author='Manuel Fritsch',
author_email='manuel@craftbeerpi.com',