From 9883761923d1dbaf4b9d650a16e681612e14feb5 Mon Sep 17 00:00:00 2001 From: simon Date: Sat, 27 Apr 2019 22:36:10 +0200 Subject: [PATCH] reorganize, build dockerfiles for ledserver and html-controller --- .gitignore | 4 + app/rgbUtils/__init__.py | 0 clients/controller-html/Dockerfile | 7 + .../controller-html}/favicon.ico | Bin .../controller-html}/htmlstrip.html | 7 +- .../controller-html}/index.html | 37 +- clients/controller-html/package-lock.json | 621 + clients/controller-html/package.json | 30 + clients/strip-wemosd1-websocket/settings.h | 7 + .../wemos_websocket_ledclient.ino | 107 + docker-compose.yml | 21 +- htdocs/css/addons/datatables.css | 197 - htdocs/css/addons/datatables.min.css | 1 - htdocs/css/bootstrap-grid.css | 1339 -- htdocs/css/bootstrap-grid.css.map | 1 - htdocs/css/bootstrap-grid.min.css | 1 - htdocs/css/bootstrap-grid.min.css.map | 1 - htdocs/css/bootstrap-reboot.css | 459 - htdocs/css/bootstrap-reboot.css.map | 1 - htdocs/css/bootstrap-reboot.min.css | 1 - htdocs/css/bootstrap-reboot.min.css.map | 1 - htdocs/css/bootstrap.css | 9030 --------- htdocs/css/bootstrap.css.map | 1 - htdocs/css/bootstrap.min.css | 6 - htdocs/css/bootstrap.min.css.map | 1 - htdocs/css/font-awesome.min.css | 4 - .../animations-extended.css | 2327 --- htdocs/css/jquery.minicolors.css | 432 - htdocs/css/mdb.css | 7785 -------- htdocs/css/mdb.lite.css | 5462 ------ htdocs/css/mdb.lite.min.css | 38 - htdocs/css/mdb.min.css | 44 - htdocs/css/style.css | 0 htdocs/css/style.min.css | 0 htdocs/css/wheelcolorpicker.css | 160 - htdocs/font/roboto/Roboto-Bold.eot | Bin 20966 -> 0 bytes htdocs/font/roboto/Roboto-Bold.ttf | Bin 127744 -> 0 bytes htdocs/font/roboto/Roboto-Bold.woff | Bin 62876 -> 0 bytes htdocs/font/roboto/Roboto-Bold.woff2 | Bin 49976 -> 0 bytes htdocs/font/roboto/Roboto-Light.eot | Bin 20940 -> 0 bytes htdocs/font/roboto/Roboto-Light.ttf | Bin 126792 -> 0 bytes htdocs/font/roboto/Roboto-Light.woff | Bin 62316 -> 0 bytes htdocs/font/roboto/Roboto-Light.woff2 | Bin 49380 -> 0 bytes htdocs/font/roboto/Roboto-Medium.eot | Bin 21364 -> 0 bytes htdocs/font/roboto/Roboto-Medium.ttf | Bin 127488 -> 0 bytes htdocs/font/roboto/Roboto-Medium.woff | Bin 62980 -> 0 bytes htdocs/font/roboto/Roboto-Medium.woff2 | Bin 50224 -> 0 bytes htdocs/font/roboto/Roboto-Regular.eot | Bin 21320 -> 0 bytes htdocs/font/roboto/Roboto-Regular.ttf | Bin 126072 -> 0 bytes htdocs/font/roboto/Roboto-Regular.woff | Bin 61736 -> 0 bytes htdocs/font/roboto/Roboto-Regular.woff2 | Bin 49236 -> 0 bytes htdocs/font/roboto/Roboto-Thin.eot | Bin 21659 -> 0 bytes htdocs/font/roboto/Roboto-Thin.ttf | Bin 127584 -> 0 bytes htdocs/font/roboto/Roboto-Thin.woff | Bin 61628 -> 0 bytes htdocs/font/roboto/Roboto-Thin.woff2 | Bin 48524 -> 0 bytes htdocs/img/jquery.minicolors.png | Bin 68627 -> 0 bytes htdocs/img/lightbox/default-skin.png | Bin 547 -> 0 bytes htdocs/img/lightbox/default-skin.svg | 1 - htdocs/img/lightbox/preloader.gif | Bin 866 -> 0 bytes htdocs/img/overlays/01.png | Bin 211 -> 0 bytes htdocs/img/overlays/02.png | Bin 213 -> 0 bytes htdocs/img/overlays/03.png | Bin 209 -> 0 bytes htdocs/img/overlays/04.png | Bin 211 -> 0 bytes htdocs/img/overlays/05.png | Bin 213 -> 0 bytes htdocs/img/overlays/06.png | Bin 211 -> 0 bytes htdocs/img/overlays/07.png | Bin 215 -> 0 bytes htdocs/img/overlays/08.png | Bin 146 -> 0 bytes htdocs/img/overlays/09.png | Bin 137 -> 0 bytes htdocs/img/svg/arrow_left.svg | 4 - htdocs/img/svg/arrow_right.svg | 4 - htdocs/js/addons/datatables.js | 15500 --------------- htdocs/js/addons/datatables.min.js | 3 - htdocs/js/angular-minicolors.js | 155 - htdocs/js/angularjs.js | 347 - htdocs/js/bootstrap.js | 3944 ---- htdocs/js/bootstrap.min.js | 7 - htdocs/js/checklist-model.js | 148 - htdocs/js/html5shiv.js | 327 - htdocs/js/jquery-3.2.1.min.js | 4 - htdocs/js/jquery-3.3.1.min.js | 2 - htdocs/js/jquery.minicolors.min.js | 8 - .../js/jquery.wheelcolorpicker-3.0.5.min.js | 6 - htdocs/js/mdb.js | 15683 ---------------- htdocs/js/mdb.min.js | 1 - htdocs/js/modules/chart.js | 14384 -------------- htdocs/js/modules/enhanced-modals.js | 26 - htdocs/js/modules/forms-free.js | 208 - htdocs/js/modules/jquery.easing.js | 205 - htdocs/js/modules/scrolling-navbar.js | 21 - htdocs/js/modules/velocity.js | 5 - htdocs/js/modules/velocity.min.js | 5 - htdocs/js/modules/waves.js | 611 - htdocs/js/modules/wow.js | 180 - htdocs/js/popper.min.js | 5 - htdocs/js/reconnecting-websocket.js | 365 - htdocs/js/respond.min.js | 6 - htdocs/js/tether.min.js | 1 - htdocs/scss/_custom-styles.scss | 1 - htdocs/scss/_custom-variables.scss | 1 - htdocs/scss/addons/_datatables.scss | 255 - htdocs/scss/core/_colors.scss | 861 - htdocs/scss/core/_global.scss | 117 - htdocs/scss/core/_helpers.scss | 73 - htdocs/scss/core/_masks.scss | 77 - htdocs/scss/core/_mixins.scss | 536 - htdocs/scss/core/_typography.scss | 139 - htdocs/scss/core/_variables.scss | 377 - htdocs/scss/core/_waves.scss | 161 - htdocs/scss/core/bootstrap/_functions.scss | 86 - htdocs/scss/core/bootstrap/_variables.scss | 952 - htdocs/scss/free/_animations-basic.scss | 207 - htdocs/scss/free/_badges.scss | 14 - htdocs/scss/free/_buttons.scss | 122 - htdocs/scss/free/_cards.scss | 28 - htdocs/scss/free/_carousels.scss | 50 - htdocs/scss/free/_depreciated.scss | 1 - htdocs/scss/free/_dropdowns.scss | 10 - htdocs/scss/free/_footers.scss | 18 - htdocs/scss/free/_forms.scss | 184 - htdocs/scss/free/_input-group.scss | 21 - htdocs/scss/free/_list-group.scss | 28 - htdocs/scss/free/_modals.scss | 277 - htdocs/scss/free/_msc.scss | 75 - htdocs/scss/free/_navbars.scss | 99 - htdocs/scss/free/_pagination.scss | 83 - htdocs/scss/free/_steppers.scss | 189 - htdocs/scss/free/_switch.scss | 51 - htdocs/scss/free/_tables.scss | 66 - .../modules/animations-extended/_module.scss | 1484 -- .../animations-extended.scss | 7 - htdocs/scss/mdb.lite.scss | 67 - htdocs/scss/mdb.scss | 70 - htdocs/template.html | 44 - requirements.txt | 2 - run-autopep8-docker.sh | 12 + run-pylint-docker.sh | 12 + run-python-docker.sh | 12 + .../Helper/SimpleWebSocketServer.py | 0 .../BackendProvider/Helper/__init__.py | 0 .../BackendProvider/WebSocketServer.py | 0 .../BackendProvider/WemosStripUDPServer.py | 57 +- {app => server}/BackendProvider/__init__.py | 0 Dockerfile => server/Dockerfile | 12 +- {app => server}/LEDServer.py | 31 +- {app => server}/config.py | 0 {app => server/effects}/__init__.py | 0 .../effects/musikEffect.py.out | 0 {app => server}/effects/offEffect.py | 0 {app => server}/effects/onEffect.py | 0 {app => server}/effects/rainbowEffect.py | 0 {app => server}/effects/strobeEffect.py | 0 {app => server}/rgbUtils/BaseEffect.py | 0 {app => server}/rgbUtils/EffectParameter.py | 0 {app => server}/rgbUtils/RGBStrip.py | 0 {app/effects => server/rgbUtils}/__init__.py | 0 {app => server}/rgbUtils/debug.py | 0 {app => server}/rgbUtils/effectController.py | 0 .../rgbUtils/effectControllerJsonHelper.py | 0 {app => server}/rgbUtils/pyAudioRecorder.py | 0 .../rgbUtils/rgbStripController.py | 0 .../rgbUtils/rgbStripControllerJsonHelper.py | 0 161 files changed, 902 insertions(+), 86366 deletions(-) delete mode 100644 app/rgbUtils/__init__.py create mode 100644 clients/controller-html/Dockerfile rename {htdocs => clients/controller-html}/favicon.ico (100%) rename {htdocs => clients/controller-html}/htmlstrip.html (92%) rename {htdocs => clients/controller-html}/index.html (93%) create mode 100644 clients/controller-html/package-lock.json create mode 100644 clients/controller-html/package.json create mode 100644 clients/strip-wemosd1-websocket/settings.h create mode 100644 clients/strip-wemosd1-websocket/wemos_websocket_ledclient.ino delete mode 100644 htdocs/css/addons/datatables.css delete mode 100644 htdocs/css/addons/datatables.min.css delete mode 100644 htdocs/css/bootstrap-grid.css delete mode 100644 htdocs/css/bootstrap-grid.css.map delete mode 100644 htdocs/css/bootstrap-grid.min.css delete mode 100644 htdocs/css/bootstrap-grid.min.css.map delete mode 100644 htdocs/css/bootstrap-reboot.css delete mode 100644 htdocs/css/bootstrap-reboot.css.map delete mode 100644 htdocs/css/bootstrap-reboot.min.css delete mode 100644 htdocs/css/bootstrap-reboot.min.css.map delete mode 100755 htdocs/css/bootstrap.css delete mode 100644 htdocs/css/bootstrap.css.map delete mode 100755 htdocs/css/bootstrap.min.css delete mode 100644 htdocs/css/bootstrap.min.css.map delete mode 100644 htdocs/css/font-awesome.min.css delete mode 100644 htdocs/css/free/modules/animations-extended/animations-extended.css delete mode 100644 htdocs/css/jquery.minicolors.css delete mode 100755 htdocs/css/mdb.css delete mode 100644 htdocs/css/mdb.lite.css delete mode 100644 htdocs/css/mdb.lite.min.css delete mode 100755 htdocs/css/mdb.min.css delete mode 100644 htdocs/css/style.css delete mode 100644 htdocs/css/style.min.css delete mode 100644 htdocs/css/wheelcolorpicker.css delete mode 100644 htdocs/font/roboto/Roboto-Bold.eot delete mode 100644 htdocs/font/roboto/Roboto-Bold.ttf delete mode 100644 htdocs/font/roboto/Roboto-Bold.woff delete mode 100644 htdocs/font/roboto/Roboto-Bold.woff2 delete mode 100644 htdocs/font/roboto/Roboto-Light.eot delete mode 100644 htdocs/font/roboto/Roboto-Light.ttf delete mode 100644 htdocs/font/roboto/Roboto-Light.woff delete mode 100644 htdocs/font/roboto/Roboto-Light.woff2 delete mode 100644 htdocs/font/roboto/Roboto-Medium.eot delete mode 100644 htdocs/font/roboto/Roboto-Medium.ttf delete mode 100644 htdocs/font/roboto/Roboto-Medium.woff delete mode 100644 htdocs/font/roboto/Roboto-Medium.woff2 delete mode 100644 htdocs/font/roboto/Roboto-Regular.eot delete mode 100644 htdocs/font/roboto/Roboto-Regular.ttf delete mode 100644 htdocs/font/roboto/Roboto-Regular.woff delete mode 100644 htdocs/font/roboto/Roboto-Regular.woff2 delete mode 100644 htdocs/font/roboto/Roboto-Thin.eot delete mode 100644 htdocs/font/roboto/Roboto-Thin.ttf delete mode 100644 htdocs/font/roboto/Roboto-Thin.woff delete mode 100644 htdocs/font/roboto/Roboto-Thin.woff2 delete mode 100644 htdocs/img/jquery.minicolors.png delete mode 100755 htdocs/img/lightbox/default-skin.png delete mode 100755 htdocs/img/lightbox/default-skin.svg delete mode 100755 htdocs/img/lightbox/preloader.gif delete mode 100755 htdocs/img/overlays/01.png delete mode 100755 htdocs/img/overlays/02.png delete mode 100755 htdocs/img/overlays/03.png delete mode 100755 htdocs/img/overlays/04.png delete mode 100755 htdocs/img/overlays/05.png delete mode 100755 htdocs/img/overlays/06.png delete mode 100755 htdocs/img/overlays/07.png delete mode 100755 htdocs/img/overlays/08.png delete mode 100755 htdocs/img/overlays/09.png delete mode 100755 htdocs/img/svg/arrow_left.svg delete mode 100755 htdocs/img/svg/arrow_right.svg delete mode 100644 htdocs/js/addons/datatables.js delete mode 100644 htdocs/js/addons/datatables.min.js delete mode 100644 htdocs/js/angular-minicolors.js delete mode 100644 htdocs/js/angularjs.js delete mode 100755 htdocs/js/bootstrap.js delete mode 100755 htdocs/js/bootstrap.min.js delete mode 100644 htdocs/js/checklist-model.js delete mode 100644 htdocs/js/html5shiv.js delete mode 100644 htdocs/js/jquery-3.2.1.min.js delete mode 100644 htdocs/js/jquery-3.3.1.min.js delete mode 100644 htdocs/js/jquery.minicolors.min.js delete mode 100644 htdocs/js/jquery.wheelcolorpicker-3.0.5.min.js delete mode 100755 htdocs/js/mdb.js delete mode 100644 htdocs/js/mdb.min.js delete mode 100755 htdocs/js/modules/chart.js delete mode 100755 htdocs/js/modules/enhanced-modals.js delete mode 100755 htdocs/js/modules/forms-free.js delete mode 100755 htdocs/js/modules/jquery.easing.js delete mode 100755 htdocs/js/modules/scrolling-navbar.js delete mode 100644 htdocs/js/modules/velocity.js delete mode 100755 htdocs/js/modules/velocity.min.js delete mode 100755 htdocs/js/modules/waves.js delete mode 100755 htdocs/js/modules/wow.js delete mode 100755 htdocs/js/popper.min.js delete mode 100644 htdocs/js/reconnecting-websocket.js delete mode 100644 htdocs/js/respond.min.js delete mode 100644 htdocs/js/tether.min.js delete mode 100644 htdocs/scss/_custom-styles.scss delete mode 100644 htdocs/scss/_custom-variables.scss delete mode 100644 htdocs/scss/addons/_datatables.scss delete mode 100755 htdocs/scss/core/_colors.scss delete mode 100755 htdocs/scss/core/_global.scss delete mode 100644 htdocs/scss/core/_helpers.scss delete mode 100755 htdocs/scss/core/_masks.scss delete mode 100755 htdocs/scss/core/_mixins.scss delete mode 100755 htdocs/scss/core/_typography.scss delete mode 100755 htdocs/scss/core/_variables.scss delete mode 100755 htdocs/scss/core/_waves.scss delete mode 100755 htdocs/scss/core/bootstrap/_functions.scss delete mode 100755 htdocs/scss/core/bootstrap/_variables.scss delete mode 100755 htdocs/scss/free/_animations-basic.scss delete mode 100755 htdocs/scss/free/_badges.scss delete mode 100755 htdocs/scss/free/_buttons.scss delete mode 100755 htdocs/scss/free/_cards.scss delete mode 100755 htdocs/scss/free/_carousels.scss delete mode 100644 htdocs/scss/free/_depreciated.scss delete mode 100755 htdocs/scss/free/_dropdowns.scss delete mode 100755 htdocs/scss/free/_footers.scss delete mode 100755 htdocs/scss/free/_forms.scss delete mode 100755 htdocs/scss/free/_input-group.scss delete mode 100755 htdocs/scss/free/_list-group.scss delete mode 100755 htdocs/scss/free/_modals.scss delete mode 100755 htdocs/scss/free/_msc.scss delete mode 100755 htdocs/scss/free/_navbars.scss delete mode 100755 htdocs/scss/free/_pagination.scss delete mode 100644 htdocs/scss/free/_steppers.scss delete mode 100644 htdocs/scss/free/_switch.scss delete mode 100755 htdocs/scss/free/_tables.scss delete mode 100755 htdocs/scss/free/modules/animations-extended/_module.scss delete mode 100644 htdocs/scss/free/modules/animations-extended/animations-extended.scss delete mode 100644 htdocs/scss/mdb.lite.scss delete mode 100755 htdocs/scss/mdb.scss delete mode 100755 htdocs/template.html delete mode 100644 requirements.txt create mode 100755 run-autopep8-docker.sh create mode 100755 run-pylint-docker.sh create mode 100755 run-python-docker.sh rename {app => server}/BackendProvider/Helper/SimpleWebSocketServer.py (100%) rename {app => server}/BackendProvider/Helper/__init__.py (100%) rename {app => server}/BackendProvider/WebSocketServer.py (100%) rename {app => server}/BackendProvider/WemosStripUDPServer.py (71%) rename {app => server}/BackendProvider/__init__.py (100%) rename Dockerfile => server/Dockerfile (58%) rename {app => server}/LEDServer.py (82%) mode change 100644 => 100755 rename {app => server}/config.py (100%) rename {app => server/effects}/__init__.py (100%) rename app/effects/musikEffect.py => server/effects/musikEffect.py.out (100%) rename {app => server}/effects/offEffect.py (100%) rename {app => server}/effects/onEffect.py (100%) rename {app => server}/effects/rainbowEffect.py (100%) rename {app => server}/effects/strobeEffect.py (100%) rename {app => server}/rgbUtils/BaseEffect.py (100%) rename {app => server}/rgbUtils/EffectParameter.py (100%) rename {app => server}/rgbUtils/RGBStrip.py (100%) rename {app/effects => server/rgbUtils}/__init__.py (100%) rename {app => server}/rgbUtils/debug.py (100%) rename {app => server}/rgbUtils/effectController.py (100%) rename {app => server}/rgbUtils/effectControllerJsonHelper.py (100%) rename {app => server}/rgbUtils/pyAudioRecorder.py (100%) rename {app => server}/rgbUtils/rgbStripController.py (100%) rename {app => server}/rgbUtils/rgbStripControllerJsonHelper.py (100%) diff --git a/.gitignore b/.gitignore index 5f4535c..484b769 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,10 @@ *.userosscache *.sln.docstates +node_modules +clients/controller-html/old +clients/strip-wemosd1-websocket/settings.example.h + .directory # User-specific files (MonoDevelop/Xamarin Studio) diff --git a/app/rgbUtils/__init__.py b/app/rgbUtils/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/clients/controller-html/Dockerfile b/clients/controller-html/Dockerfile new file mode 100644 index 0000000..337f9aa --- /dev/null +++ b/clients/controller-html/Dockerfile @@ -0,0 +1,7 @@ +FROM nginx:stable-alpine + +RUN apk add --update nodejs nodejs-npm + +COPY . /usr/share/nginx/html + +RUN cd /usr/share/nginx/html && npm install diff --git a/htdocs/favicon.ico b/clients/controller-html/favicon.ico similarity index 100% rename from htdocs/favicon.ico rename to clients/controller-html/favicon.ico diff --git a/htdocs/htmlstrip.html b/clients/controller-html/htmlstrip.html similarity index 92% rename from htdocs/htmlstrip.html rename to clients/controller-html/htmlstrip.html index 8e83771..cb3484f 100644 --- a/htdocs/htmlstrip.html +++ b/clients/controller-html/htmlstrip.html @@ -3,13 +3,14 @@ + {{data}}
{{value}}
- - + + - - + + + - - - + + + + - - - - + + + + - - - - - - - - - diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 6bad103..0000000 --- a/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -numpy -scipy diff --git a/run-autopep8-docker.sh b/run-autopep8-docker.sh new file mode 100755 index 0000000..32810d8 --- /dev/null +++ b/run-autopep8-docker.sh @@ -0,0 +1,12 @@ +#!/bin/sh +docker run \ + --rm \ + -i \ + --network=host \ + -v "$HOME":"$HOME":ro \ + -u $(id -u) \ + -w "$PWD" \ + unibeautify/autopep8 \ + $@ + +exit $? \ No newline at end of file diff --git a/run-pylint-docker.sh b/run-pylint-docker.sh new file mode 100755 index 0000000..5aab4f7 --- /dev/null +++ b/run-pylint-docker.sh @@ -0,0 +1,12 @@ +#!/bin/sh +docker run \ + --rm \ + -i \ + --network=host \ + -v "$HOME":"$HOME":ro \ + -u $(id -u) \ + -w "$PWD" \ + clburlison/pylint:py3-alpine \ + pylint $@ + +exit $? \ No newline at end of file diff --git a/run-python-docker.sh b/run-python-docker.sh new file mode 100755 index 0000000..8b49bae --- /dev/null +++ b/run-python-docker.sh @@ -0,0 +1,12 @@ +#!/bin/sh +docker run \ + --rm \ + -i \ + --network=host \ + -v "$HOME":"$HOME":ro \ + -u $(id -u) \ + -w "$PWD" \ + $USER/ledserver:latest \ + python3.7 $@ + +exit $? \ No newline at end of file diff --git a/app/BackendProvider/Helper/SimpleWebSocketServer.py b/server/BackendProvider/Helper/SimpleWebSocketServer.py similarity index 100% rename from app/BackendProvider/Helper/SimpleWebSocketServer.py rename to server/BackendProvider/Helper/SimpleWebSocketServer.py diff --git a/app/BackendProvider/Helper/__init__.py b/server/BackendProvider/Helper/__init__.py similarity index 100% rename from app/BackendProvider/Helper/__init__.py rename to server/BackendProvider/Helper/__init__.py diff --git a/app/BackendProvider/WebSocketServer.py b/server/BackendProvider/WebSocketServer.py similarity index 100% rename from app/BackendProvider/WebSocketServer.py rename to server/BackendProvider/WebSocketServer.py diff --git a/app/BackendProvider/WemosStripUDPServer.py b/server/BackendProvider/WemosStripUDPServer.py similarity index 71% rename from app/BackendProvider/WemosStripUDPServer.py rename to server/BackendProvider/WemosStripUDPServer.py index 6d8c6a0..6d69045 100644 --- a/app/BackendProvider/WemosStripUDPServer.py +++ b/server/BackendProvider/WemosStripUDPServer.py @@ -6,8 +6,9 @@ from time import sleep, time import json import struct + class ThreadedUDPServer(threading.Thread): - def __init__(self,effectController,rgbStripController): + def __init__(self, effectController, rgbStripController): threading.Thread.__init__(self) self.effectController = effectController self.rgbStripController = rgbStripController @@ -17,7 +18,7 @@ class ThreadedUDPServer(threading.Thread): self.udpClientGuardian = self.UDPClientGuardian() self.udpClientGuardian.start() UDPClients - + def run(self): self.server = socketserver.UDPServer(('', 8002), UDPStripHandler) self.server.effectController = self.effectController @@ -28,8 +29,8 @@ class ThreadedUDPServer(threading.Thread): def stop(self): self.udpClientGuardian.stop() self.server.shutdown() - - # check last pings from clients, responds with pong and remove clients + + # check last pings from clients, responds with pong and remove clients # when there is no answer after 2 seconds class UDPClientGuardian(threading.Thread): def __init__(self): @@ -54,16 +55,19 @@ CLIENT_TYPE_RECORDER = 2 UDPClients = {} + class UDPStripHandler(socketserver.BaseRequestHandler): def handle(self): - #print(self.client_address) + # print(self.client_address) if self.client_address not in UDPClients: - UDPClients[self.client_address] = UDPClient(self.client_address,self.server.effectController,self.server.rgbStripController) + UDPClients[self.client_address] = UDPClient( + self.client_address, self.server.effectController, self.server.rgbStripController) UDPClients[self.client_address].handle(self.request) - + + class UDPClient(): - def __init__(self,client_address,effectController,rgbStripController): + def __init__(self, client_address, effectController, rgbStripController): self.client_type = None self.rgbStrip = None self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) @@ -73,7 +77,7 @@ class UDPClient(): self.sendToClientLock = False self.lastping = time() - def handle(self,request): + def handle(self, request): clientdata = request[0].decode() self.socket = request[1] @@ -83,29 +87,33 @@ class UDPClient(): try: data = clientdata.split(':') - #print(data) - #r:1:srg strip name + # print(data) + # r:1:srg strip name if data[0] == "r" and int(data[1]) == CLIENT_TYPE_STRIPE and data[2] != None: - self.client_type = CLIENT_TYPE_STRIPE - # registers the strip with websocket object and name. the onRGBStripValueUpdate(rgbStrip) is called by - # by the rgbStrip when an effectThread updates it - # the self.rgbStrip variable is used to unregister the strip only - self.rgbStrip = self.rgbStripController.registerRGBStrip(data[2],self.onRGBStripValueUpdate) - #s:ping + self.client_type = CLIENT_TYPE_STRIPE + # registers the strip with websocket object and name. the onRGBStripValueUpdate(rgbStrip) is called by + # by the rgbStrip when an effectThread updates it + # the self.rgbStrip variable is used to unregister the strip only + self.rgbStrip = self.rgbStripController.registerRGBStrip( + data[2], self.onRGBStripValueUpdate) + # s:ping if data[0] == "s" and data[1] == "ping": # if we got a ping and the client has no client type defined, send status unregistered, so the client knows that he has to register if self.client_type is None and self.socket is not None: self.sendToClient('s:unregistered') self.lastping = time() + if data[0] == "u" and self.client_type == CLIENT_TYPE_STRIPE: + led = int(data[1]) + self.sendToClient('d:'+str(led)+':'+str(self.rgbStrip.red[led])+':'+str( + self.rgbStrip.green[led])+':'+str(self.rgbStrip.blue[led])+'') except Exception as e: print(e, traceback.format_exc()) - - # unregister the onChangeHandler # for now this function is not called when a client times out, # so they don't get unregistered. i mean there is no function that # is called when a client times out. + def handleClose(self): if self.client_type is CLIENT_TYPE_STRIPE: self.rgbStripController.unregisterRGBStrip(self.rgbStrip) @@ -113,11 +121,12 @@ class UDPClient(): # when a rgbStrip value is changed, send not json data but a formated string to client # d:[id off the LED, always 0 on RGB strips]:[red value 0-255]:[green value 0-255]:[blue value 0-255] - def onRGBStripValueUpdate(self,rgbStrip,led = 0): - self.sendToClient('d:'+str(led)+':'+str(rgbStrip.red[led])+':'+str(rgbStrip.green[led])+':'+str(rgbStrip.blue[led])+'') - + def onRGBStripValueUpdate(self, rgbStrip, led=0): + return # we send the update as requested, to prevent flooding the module + #self.sendToClient('d:'+str(led)+':'+str(rgbStrip.red[led])+':'+str( + # rgbStrip.green[led])+':'+str(rgbStrip.blue[led])+'') - def sendToClient(self,message): + def sendToClient(self, message): while self.sendToClientLock is True: sleep(1) self.sendToClientLock = True @@ -125,4 +134,4 @@ class UDPClient(): self.socket.sendto( message.encode(), self.client_address ) - self.sendToClientLock = False \ No newline at end of file + self.sendToClientLock = False diff --git a/app/BackendProvider/__init__.py b/server/BackendProvider/__init__.py similarity index 100% rename from app/BackendProvider/__init__.py rename to server/BackendProvider/__init__.py diff --git a/Dockerfile b/server/Dockerfile similarity index 58% rename from Dockerfile rename to server/Dockerfile index f74597d..0ff5bf0 100644 --- a/Dockerfile +++ b/server/Dockerfile @@ -4,12 +4,8 @@ RUN echo "@community http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /et RUN apk add --update --no-cache ca-certificates gcc g++ curl openblas-dev@community RUN ln -s /usr/include/locale.h /usr/include/xlocale.h -WORKDIR /usr/src/app +WORKDIR /usr/src/LEDServer +RUN pip3 install --no-cache-dir numpy scipy -COPY requirements.txt ./ -RUN pip3 install --no-cache-dir -r requirements.txt - -#COPY . . - -#CMD [ "ls", "/usr/src/app/" ] -#CMD [ "python3.7", "/usr/src/app/LEDServer.py" ] +COPY . /usr/src/LEDServer +CMD python3.7 -u /usr/src/LEDServer/LEDServer.py \ No newline at end of file diff --git a/app/LEDServer.py b/server/LEDServer.py old mode 100644 new mode 100755 similarity index 82% rename from app/LEDServer.py rename to server/LEDServer.py index 38b8342..611a4ea --- a/app/LEDServer.py +++ b/server/LEDServer.py @@ -1,9 +1,10 @@ #!/usr/bin/python - import os import sys import time import traceback + + def main(): try: @@ -13,23 +14,25 @@ def main(): # i want some external providers the effects can interact with. for example the music reaction. # Idea is: eg a Pi with a soundcard processing input via pyaudio and sending this data to the server. an musicEffect is bind to this input and processing it. - # to be as flexible as possible the client registers with a name(sting), a type(string) and the data as an dict. the effect filters these clients by type. jea? + # to be as flexible as possible the client registers with a name(sting), a type(string) and the data as an dict. the effect filters these clients by type. jea? # rgbStrips register themselves at the rgbStripContoller - # the rgbStripController calls the backend Provider's onChange function + # the rgbStripController calls the backend Provider's onChange function # when there are new values for the strip from rgbUtils.rgbStripController import rgbStripController rgbStripController = rgbStripController() rgbStripController.start() - + # the effectController handles the effects and pushes the values to the rgbStripContoller # it also calls the backendProvider's onChange function when there are changes made on the effects from rgbUtils.effectController import effectController effectController = effectController(rgbStripController) # register effectControllers onRGBStripRegistered and onRGBStripUnregistered handler on the rgbStripContoller to detect added or removed strips - rgbStripController.addOnRGBStripRegisteredHandler(effectController.onRGBStripRegistered) - rgbStripController.addOnRGBStripUnRegisteredHandler(effectController.onRGBStripUnRegistered) + rgbStripController.addOnRGBStripRegisteredHandler( + effectController.onRGBStripRegistered) + rgbStripController.addOnRGBStripUnRegisteredHandler( + effectController.onRGBStripUnRegistered) # this is a "Backend Provider" that interacts with the effectController and also the rgbStripContoller (via effectController) # this could be seperated in one websocket server for the frontend and one for the rgbStrips @@ -37,22 +40,26 @@ def main(): # but then there must be some autoloading of modules in a folder like the effects for easy installing. //todo :) print("starting websocket:8001") import BackendProvider.WebSocketServer as WebSocketServer - webSocketThread = WebSocketServer.ThreadedWebSocketServer(effectController,rgbStripController) - + webSocketThread = WebSocketServer.ThreadedWebSocketServer( + effectController, rgbStripController) + print("starting UDPServer:8002") import BackendProvider.WemosStripUDPServer as UPDSocketServer - udpSocketThread = UPDSocketServer.ThreadedUDPServer(effectController,rgbStripController) + udpSocketThread = UPDSocketServer.ThreadedUDPServer( + effectController, rgbStripController) while running: time.sleep(1) except Exception as e: running = False - print(e,traceback.format_exc()) + print(e, traceback.format_exc()) finally: print('shutting down the LED-Server') webSocketThread.stop() udpSocketThread.stop() effectController.stopAll() -if __name__=='__main__': - main() \ No newline at end of file + + +if __name__ == '__main__': + main() diff --git a/app/config.py b/server/config.py similarity index 100% rename from app/config.py rename to server/config.py diff --git a/app/__init__.py b/server/effects/__init__.py similarity index 100% rename from app/__init__.py rename to server/effects/__init__.py diff --git a/app/effects/musikEffect.py b/server/effects/musikEffect.py.out similarity index 100% rename from app/effects/musikEffect.py rename to server/effects/musikEffect.py.out diff --git a/app/effects/offEffect.py b/server/effects/offEffect.py similarity index 100% rename from app/effects/offEffect.py rename to server/effects/offEffect.py diff --git a/app/effects/onEffect.py b/server/effects/onEffect.py similarity index 100% rename from app/effects/onEffect.py rename to server/effects/onEffect.py diff --git a/app/effects/rainbowEffect.py b/server/effects/rainbowEffect.py similarity index 100% rename from app/effects/rainbowEffect.py rename to server/effects/rainbowEffect.py diff --git a/app/effects/strobeEffect.py b/server/effects/strobeEffect.py similarity index 100% rename from app/effects/strobeEffect.py rename to server/effects/strobeEffect.py diff --git a/app/rgbUtils/BaseEffect.py b/server/rgbUtils/BaseEffect.py similarity index 100% rename from app/rgbUtils/BaseEffect.py rename to server/rgbUtils/BaseEffect.py diff --git a/app/rgbUtils/EffectParameter.py b/server/rgbUtils/EffectParameter.py similarity index 100% rename from app/rgbUtils/EffectParameter.py rename to server/rgbUtils/EffectParameter.py diff --git a/app/rgbUtils/RGBStrip.py b/server/rgbUtils/RGBStrip.py similarity index 100% rename from app/rgbUtils/RGBStrip.py rename to server/rgbUtils/RGBStrip.py diff --git a/app/effects/__init__.py b/server/rgbUtils/__init__.py similarity index 100% rename from app/effects/__init__.py rename to server/rgbUtils/__init__.py diff --git a/app/rgbUtils/debug.py b/server/rgbUtils/debug.py similarity index 100% rename from app/rgbUtils/debug.py rename to server/rgbUtils/debug.py diff --git a/app/rgbUtils/effectController.py b/server/rgbUtils/effectController.py similarity index 100% rename from app/rgbUtils/effectController.py rename to server/rgbUtils/effectController.py diff --git a/app/rgbUtils/effectControllerJsonHelper.py b/server/rgbUtils/effectControllerJsonHelper.py similarity index 100% rename from app/rgbUtils/effectControllerJsonHelper.py rename to server/rgbUtils/effectControllerJsonHelper.py diff --git a/app/rgbUtils/pyAudioRecorder.py b/server/rgbUtils/pyAudioRecorder.py similarity index 100% rename from app/rgbUtils/pyAudioRecorder.py rename to server/rgbUtils/pyAudioRecorder.py diff --git a/app/rgbUtils/rgbStripController.py b/server/rgbUtils/rgbStripController.py similarity index 100% rename from app/rgbUtils/rgbStripController.py rename to server/rgbUtils/rgbStripController.py diff --git a/app/rgbUtils/rgbStripControllerJsonHelper.py b/server/rgbUtils/rgbStripControllerJsonHelper.py similarity index 100% rename from app/rgbUtils/rgbStripControllerJsonHelper.py rename to server/rgbUtils/rgbStripControllerJsonHelper.py