From be2a46328fcbd9278f97d7e82a01b5dd11a53567 Mon Sep 17 00:00:00 2001 From: Andreas Demmelbauer Date: Sat, 16 Mar 2019 16:08:16 +0000 Subject: [PATCH] initial commit --- discobert.py | 128 +++++++++++++++++++++++++++++++++++++++++++++++++++ dmxtest.py | 104 +++++++++++++++++++++++++++++++++++++++++ mpd-test.py | 28 +++++++++++ notes.md | 10 ++++ playmusic.py | 13 ++++++ 5 files changed, 283 insertions(+) create mode 100644 discobert.py create mode 100644 dmxtest.py create mode 100755 mpd-test.py create mode 100644 notes.md create mode 100644 playmusic.py diff --git a/discobert.py b/discobert.py new file mode 100644 index 0000000..9a75646 --- /dev/null +++ b/discobert.py @@ -0,0 +1,128 @@ +import subprocess +import sys, inspect, os + +import wiringpi +from time import sleep +#from multiprocessing import Process + +#import lirc + +from pyudmx import pyudmx + + +# def send_dmx(dev, red, green, blue, dimmer): +# """ +# Send a set of RGB values to the light +# """ +# cv = [0 for v in range(0, 512)] +# cv[0] = dimmer +# cv[1] = red +# cv[2] = green +# cv[3] = blue +# sent = dev.send_multi_value(1, cv) +# return sent +# + +# GPIO +pin_kugel = 2 +pin_sun = 4 +pin_pir = 0 + +def setDmxScene(scene): + cv = [0 for v in range(0, 512)] + scenes = { + "fadecolors":[255,255,255,255,255,192], + "plain-red":[255,255,0,0,0,0], + "strobe":[190,255,255,255,0,0], + "nini":[120,0,255,255,0,224], + "black":[0,0,0,0,0,0] + } + errorcode = [240,255,0,0,0,0] + + for index, val in enumerate(scenes.get(scene,errorcode)): + cv[index] = val + + dev.send_multi_value(1, cv) + + +def setKugel(state): + if state == 'on': + wiringpi.digitalWrite(pin_kugel, 0) + if state == 'off': + wiringpi.digitalWrite(pin_kugel, 1) + +def setSun(state): + if state == 'off': + wiringpi.digitalWrite(pin_sun, 0) + if state == 'on': + wiringpi.digitalWrite(pin_sun, 1) + + + +def setMusic(action, scene): + if action == "play": + + if not scene: + scene = defaulscene + + musicdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) + "/music/" + scene + + for (path, dirnames, filenames) in os.walk(musicdir): + #folders.extend(os.path.join(path, name) for name in dirnames) + for name in filenames: + file = os.path.join(path, name) + #os.system("mpg123 " + "'" + file + "'") + #os.system("") + subprocess.run(["mpg123", file]) + + + + + +def bootstrap(): + wiringpi.wiringPiSetup() + wiringpi.pinMode(pin_kugel, 1) # set Relay Disokugel mode to OUTPUT + wiringpi.pinMode(pin_sun, 1) # set Relay Sun mode to OUTPUT # TODO: Set pin! + wiringpi.pinMode(pin_pir, 0) # set PIR Sensor mode to INPUT + setSun('off') + setKugel('off') + + + + + +bootstrap() +dev = pyudmx.uDMXDevice() +dev.open() + + + +pirstate = wiringpi.digitalRead(6) + +defaultscene = 1 + + + + +while True: + # if PIR-State changes + if wiringpi.digitalRead(pin_pir) != pirstate: + pirstate = wiringpi.digitalRead(pin_pir) + print('pirstate: ', pirstate) + if pirstate == 1: + setSun('off') + setKugel('on') + setDmxScene('fadecolors') + sleep(1) + sleep(1) +# setMusic('play', '1') + sleep(20) + else: + setSun('on') + setDmxScene('black') + sleep(1) + setKugel('off') + sleep(1) + +dev.close() + diff --git a/dmxtest.py b/dmxtest.py new file mode 100644 index 0000000..5b2c027 --- /dev/null +++ b/dmxtest.py @@ -0,0 +1,104 @@ +# +# example.py +# Copyright 2018 by Dave Hocker +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, version 3 of the License. +# +# See the LICENSE file for more details. +# +# Example of how to use pyudmx with a Thinpar 64 light +# http://venuelightingeffects.com/wp-content/uploads/manuals/Venue_Thinpar_64_Manual_HR.pdf +# 7 channel mode +# Channels 1-3 are RGB +# Channel 7 is the dimmer +# +# Requirements +# A virtual environment meeting the requirements defined in requirements.txt works best. +# Specifically the pyusb module must be installed. +# + +from pyudmx import pyudmx +from time import sleep + + +def send_rgb(dev, dimmer, red, green, blue, effect): + """ + Send a set of RGB values to the light + """ + cv = [0 for v in range(0, 512)] + cv[0] = dimmer + cv[1] = red + cv[2] = green + cv[3] = blue + cv[4] = effect + print(cv) + print(type(cv)) + sent = dev.send_multi_value(1, cv) + return sent + + +def main(): + """ + How to control a DMX light through an Anyma USB controller + """ + + # Channel value list for channels 1-512 + cv = [0 for v in range(0, 512)] + + # Create an instance of the DMX controller and open it + print("Opening DMX controller...") + dev = pyudmx.uDMXDevice() + # This will automagically find a single Anyma-type USB DMX controller + dev.open() + # For informational purpose, display what we know about the DMX controller + print(dev.Device) + + # Send messages to the light changing it to red, then green, then blue + # This is the "hard way" to do it, but illustrates how it's done + + print("Setting to red...") + cv[0] = 255 # dimmer to half value + cv[1] = 255 # red + sent = dev.send_multi_value(1, cv) + print("Set to red") + sleep(3.0) + + print("Setting to green...") + cv[0] = 255 # dimmer to half value + cv[1] = 0 # red + cv[2] = 255 # green + sent = dev.send_multi_value(1, cv) + print("Set to green") + sleep(3.0) + + print("Setting to blue...") + cv[0] = 255 # dimmer to half value + cv[1] = 0 # red + cv[2] = 0 # green + cv[3] = 255 # blue + sent = dev.send_multi_value(1, cv) + print("Set to blue") + sleep(3.0) + + # Here's an easier way to do it + + print("And, again the easier way") + send_rgb(dev, 255, 255, 0, 0, 0) + sleep(3.0) + send_rgb(dev, 255, 0, 255, 0, 0) + sleep(3.0) + send_rgb(dev, 255, 0, 0, 255, 0) + sleep(3.0) + + print("Reset all channels and close..") + # Turns the light off + cv = [0 for v in range(0, 512)] + dev.send_multi_value(1, cv) + dev.close() + + +if __name__ == "__main__": + main() + print("Done") diff --git a/mpd-test.py b/mpd-test.py new file mode 100755 index 0000000..c9f55db --- /dev/null +++ b/mpd-test.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python3 + +import mpd +import os +from urllib.parse import urlparse +import getpass + +# get current user +print(getpass.getuser()) + +client = mpd.MPDClient() +client.connect("localhost", 6600) + +for entry in client.lsinfo("/"): + print("%s" % entry) +for key, value in client.status().items(): + print("%s: %s" % (key, value)) + +print(client.currentsong()) +# print(client.config()) + +# p = urlparse('file:///home/pi/discobert/music/1/') +p = urlparse('1/') +finalPath = os.path.abspath(os.path.join(p.netloc, p.path)) + +client.lsinfo('file:///var/local/music/') +# client.add(p) +client.play(0) diff --git a/notes.md b/notes.md new file mode 100644 index 0000000..554f007 --- /dev/null +++ b/notes.md @@ -0,0 +1,10 @@ +https://github.com/dhocker/udmx-pyusb + +add user permissions for udmx device +sudo cp 98-uDMX-usb.rules /etc/udev/rules.d + + +capture USB + +tshark -D +tshark -i 6 diff --git a/playmusic.py b/playmusic.py new file mode 100644 index 0000000..aed6a69 --- /dev/null +++ b/playmusic.py @@ -0,0 +1,13 @@ +import os, inspect +import subprocess + +musicdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))+"/music"+"/1" + + +for (path, dirnames, filenames) in os.walk(musicdir): + #folders.extend(os.path.join(path, name) for name in dirnames) + for name in filenames: + file = os.path.join(path, name) + #os.system("mpg123 " + "'" + file + "'") + #os.system("") + subprocess.run(["mpg123", file])