diff --git a/animation.py b/animation.py index 86d5d23..1fa4774 100644 --- a/animation.py +++ b/animation.py @@ -48,9 +48,9 @@ class RandomSingle(Animation): by Max & Lightmoll (https://lght.ml) from 2022-06-08 """ - def __init__(self, color): + def __init__(self, color, looptime=60): super().__init__() - self.PERIOD = 4 * 30 #frames + self.PERIOD = looptime * 30 #frames self.color = self._rand_color() self.last_colors = [] self.frame_counter = 0 @@ -92,10 +92,10 @@ class TwoColor(Steady): by Max & Lightmoll (https://lght.ml) from 2022-06-08 """ - def __init__(self, color): + def __init__(self, color, looptime=60): super().__init__(color) self.start_time = time() - self.PERIOD = 0.5 #s + self.PERIOD = looptime * 0.5 #s self.COL_1 = color #input color self.COL_2 = (255-self.r, 255-self.g, 255-self.b) #compl. color @@ -120,7 +120,6 @@ class TwoColor(Steady): def name(self): return str(self) - class Caramelldansen(Steady): """ by Max & Lightmoll (https://lght.ml) @@ -175,7 +174,7 @@ class Caramelldansen(Steady): class FadeTo(Steady): - def __init__(self, color, t=2.0): + def __init__(self, color, t=60.0): super(FadeTo, self).__init__(color) self.t = t self.start = time() @@ -193,7 +192,7 @@ class FadeTo(Steady): class RotatingRainbow(Animation): - def __init__(self, looptime=50.0): + def __init__(self, looptime=60.0): super(RotatingRainbow, self).__init__() self.looptime = looptime pass @@ -217,7 +216,7 @@ class RotatingRainbow(Animation): class Chase(Steady): - def __init__(self, color, looptime=1.0): + def __init__(self, color, looptime=60.0): super(Chase, self).__init__(color) self.looptime = looptime @@ -234,34 +233,9 @@ class Chase(Steady): return "chase" -class Hackertours(Steady): - """ - Base color yellow, with green wandering back and forth - """ - def __init__(self, color, base=(255,223,0), looptime=4.0): - super(Hackertours, self).__init__(color) - self.looptime = looptime - self.base = base - - def update(self, index, count): - # angle is the position of the highlight on a circle, range [0, 1] - angle = (time() / self.looptime + (index + 0.0) / count) % 1.0 - l = 1 - min(abs(angle - 1 / count) * .9, 1.0 / count) * count - return ( - int(self.r * l + self.base[0] * (1-l)), - int(self.g * l + self.base[1] * (1-l)), - int(self.b * l + self.base[2] * (1-l))) - - def __str__(self): - return f"{type(self).__name__}({self.r}, {self.g}, {self.b}, {self.looptime:.2f})" - - def name(self): - return "hackertours" - - -class ChaseRandom(Steady): - def __init__(self, color, looptime=1.0): - super(ChaseRandom, self).__init__(color) +class ChaseRandom(Animation): + def __init__(self, color, looptime=60.0): + super(Chase, self).__init__(color) self.looptime = looptime def update(self, index, count): @@ -282,4 +256,4 @@ def hsv_to_rgb(h, s, v): return [int(r * 255), int(g * 255), int(b * 255)] def rgb_to_hsv(r, g, b): - return colorsys.rgb_to_hsv(r/255,g/255,b/255) \ No newline at end of file + return colorsys.rgb_to_hsv(r/255,g/255,b/255) diff --git a/dmx.py b/dmx.py index e01d8f4..cc954de 100644 --- a/dmx.py +++ b/dmx.py @@ -5,8 +5,7 @@ from threading import Thread from time import sleep from typing import Union -from animation import Animation, Off, RandomSingle, Steady, FadeTo, RotatingRainbow, Chase, TwoColor, Caramelldansen, \ - Hackertours +from animation import Animation, Off, RandomSingle, Steady, FadeTo, RotatingRainbow, Chase, TwoColor, Caramelldansen def ledlog(value): @@ -21,13 +20,9 @@ class RGB: def rgb(self, color): (r, g, b) = color - try: - self.dmx.set(self.slot + self.offset + 0, ledlog(r)) - self.dmx.set(self.slot + self.offset + 1, ledlog(g)) - self.dmx.set(self.slot + self.offset + 2, ledlog(b)) - except Exception as e: - print(f'slot={self.slot}, offset={self.offset}') - raise(e) + self.dmx.set(self.slot + self.offset + 0, ledlog(r)) + self.dmx.set(self.slot + self.offset + 1, ledlog(g)) + self.dmx.set(self.slot + self.offset + 2, ledlog(b)) class Bar252(RGB): @@ -52,20 +47,6 @@ class StairvilleLedPar56(RGB): dmx.set(self.slot + 6, 255) -class ZhennbyPar(RGB): - def __init__(self, dmx, slot=1): - super(ZhennbyPar, self).__init__(dmx, slot, 1) - dmx.set(self.slot + 0, 255) - dmx.set(self.slot + 4, 0) - dmx.set(self.slot + 5, 0) - dmx.set(self.slot + 6, 0) - - -class Entec6RGBW(RGB): - def __init__(self, dmx, slot=1): - super(Entec6RGBW, self).__init__(dmx, slot) - - class DMX: def __init__(self, host, port=0x1936, universe=1, maxchan=512): self._host = host @@ -150,8 +131,6 @@ class DMX: animation = Caramelldansen(self._color) elif animation == "randomsingle": animation = RandomSingle(self._color) - elif animation == "hackertours": - animation = Hackertours(self._color) else: raise ValueError(f"No such animation {animation}") self._animation = animation @@ -174,5 +153,5 @@ class DMX: @color.setter def color(self, color): if self._color != color: - self._color = [int(c) for c in color] + self._color = color self.animation = self.animation diff --git a/foobaz.py b/foobaz.py index b1b5d01..64f02d4 100644 --- a/foobaz.py +++ b/foobaz.py @@ -7,7 +7,7 @@ from typing import Tuple from bottle import post, request, route, run, static_file, view from animation import Off -from dmx import DMX, Bar252, StairvilleLedPar56, REDSpot18RGB, ZhennbyPar, Entec6RGBW +from dmx import DMX, Bar252, StairvilleLedPar56, REDSpot18RGB room = '' @@ -51,12 +51,10 @@ def main(args): parser.add_argument('-l', '--listen', type=int, required=False, default=8080, help="TCP port to listen on for web") parser.add_argument('-r', '--room', type=str, required=True, help="light setup for room: shop or big") parser.add_argument('-u', '--universe', type=int, required=False, default=1, help="Universe to send to") - parser.add_argument('-A', '--animation', type=str, required=False, default="off", help="Initial animation") - parser.add_argument('-C', '--color', type=str, required=False, default="255,255,0", help="Initial color") args = parser.parse_args(args) print(f"Starting DMX via Art-Net to {args.artnet}", file=sys.stderr) - dmx = DMX(args.artnet, maxchan=512, universe=args.universe) + dmx = DMX(args.artnet, maxchan=128, universe=args.universe) if args.room == "shop": dmx._rgbs = [ @@ -76,22 +74,13 @@ def main(args): Bar252(dmx, 51), Bar252(dmx, 62), ] - elif args.room == "hackertours": - dmx._rgbs = [ - ZhennbyPar(dmx, 1), - ZhennbyPar(dmx, 8), - ZhennbyPar(dmx, 15), - ZhennbyPar(dmx, 22), - ] - elif args.room == "defrag": - dmx._rgbs = [Entec6RGBW(dmx, 300 + i*4) for i in range(19)] else: print(f"Unknown room {args.room}", file=sys.stderr) sys.exit(64) room = args.room dmx.animation = Off() - dmx.color = args.color.split(',') - dmx.animation = args.animation + dmx.color = (0, 0, 0) + dmx.animation = "off" run(host='0.0.0.0', port=args.listen, reloader=False, debug=True) diff --git a/hackertours.service b/hackertours.service deleted file mode 100644 index 8c4d774..0000000 --- a/hackertours.service +++ /dev/null @@ -1,13 +0,0 @@ -[Unit] -Description=Run foobazdmx controller in Hackertours config - -[Service] -Type=simple -ExecStart=poetry run python ./foobaz.py -a 127.0.0.1 -r hackertours -A hackertours -C 0,255,32 -WorkingDirectory=%h/working/foobazdmx -Restart=on-failure - -[Install] -WantedBy=default.target - -# link or copy me to ~/.config/systemd/user diff --git a/poetry.lock b/poetry.lock index 0fdf274..38d10b1 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,17 +1,18 @@ -# This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand. - [[package]] name = "bottle" -version = "0.12.25" +version = "0.12.21" description = "Fast and simple WSGI-framework for small web-applications." +category = "main" optional = false python-versions = "*" -files = [ - {file = "bottle-0.12.25-py3-none-any.whl", hash = "sha256:d6f15f9d422670b7c073d63bd8d287b135388da187a0f3e3c19293626ce034ea"}, - {file = "bottle-0.12.25.tar.gz", hash = "sha256:e1a9c94970ae6d710b3fb4526294dfeb86f2cb4a81eff3a4b98dc40fb0e5e021"}, -] [metadata] -lock-version = "2.0" +lock-version = "1.1" python-versions = "^3.9" content-hash = "861e3ad9d0b00deb876d2ca7797a608f215c7b91ec9b38f367b24bd096a28478" + +[metadata.files] +bottle = [ + {file = "bottle-0.12.21-py3-none-any.whl", hash = "sha256:6e1c9817019dae3a8c20adacaf09035251798d2ae2fcc8ce43157ee72965f257"}, + {file = "bottle-0.12.21.tar.gz", hash = "sha256:787c61b6cc02b9c229bf2663011fac53dd8fc197f7f8ad2eeede29d888d7887e"}, +] diff --git a/pyproject.toml b/pyproject.toml index 01bb425..038b5da 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,6 @@ name = "foobazdmx" version = "0.1.0" description = "" authors = ["Stefan Bethke "] -#package-mode = false [tool.poetry.dependencies] python = "^3.9" diff --git a/views/index.tpl b/views/index.tpl index 1953385..33624b2 100644 --- a/views/index.tpl +++ b/views/index.tpl @@ -17,13 +17,24 @@ +
+ + +
- - + + +
+ + +
+
+ +