| @@ -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() | |||
| @@ -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") | |||
| @@ -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) | |||
| @@ -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 | |||
| @@ -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]) | |||