From 0d9723d78427cc5e42039969245233b6b797e285 Mon Sep 17 00:00:00 2001 From: Tilman Date: Sat, 9 Feb 2019 09:41:21 +0100 Subject: [PATCH] starting software configuration --- code/qudio.py | 4 +-- code/sounds/armstrong.mp3 | Bin 0 -> 37596 bytes code/test/control.py | 40 +++++++++++++++++++++++++ documentation/qudio/index.html | 2 +- notes.md | 52 +++++++++++++++++++++++++++++++++ 5 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 code/sounds/armstrong.mp3 create mode 100644 code/test/control.py diff --git a/code/qudio.py b/code/qudio.py index f54161c..140fc97 100644 --- a/code/qudio.py +++ b/code/qudio.py @@ -15,8 +15,8 @@ logging.info('Initializing') # Configuration MUSIC_BASE_DIRECTORY = "mnt/NAS/" -SOUND_SCANNING = "mnt/INTERNAL/sounds/scanning.mp3" -SOUND_SCAN_FAIL = "mnt/INTERNAL/sounds/fail-05.mp3" +SOUND_SCANNING = "mnt/INTERNAL/qudio/sounds/scanning.mp3" +SOUND_SCAN_FAIL = "mnt/INTERNAL/qudio/sounds/fail-05.mp3" QR_SCANNER_TIMEOUT = 4 # photo sensor on PIN 5 diff --git a/code/sounds/armstrong.mp3 b/code/sounds/armstrong.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..fa349f52ffe1a63fd0c4eaf8f815581d0ec44aae GIT binary patch literal 37596 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 literal 0 HcmV?d00001 diff --git a/code/test/control.py b/code/test/control.py new file mode 100644 index 0000000..95462b0 --- /dev/null +++ b/code/test/control.py @@ -0,0 +1,40 @@ +from socketIO_client import SocketIO, LoggingNamespace +import threading +import time + +is_playing = False # for toggling play/pause (stores the current status from the pushState events) +socketIO = SocketIO('localhost', 3000) + +def play_callback(channel): + global is_playing + if is_playing: + logging.info("PAUSE") + socketIO.emit('pause') + else: + logging.info("PLAY") + socketIO.emit('play') + +def events_thread(): + socketIO.wait() + +try: + socketIO.on('pushState', on_pushState) + + socketIO.emit('replaceAndPlay', {'service':'mpd','uri':'mnt/INTERNAL/qudio/sounds/armstrong.mp3'}) + + time.sleep(3.5) + + t1 = threading.Thread(target=play_callback) + t1.start() + t1.join() + + time.sleep(3) + + t1 = threading.Thread(target=play_callback) + t1.start() + t1.join() + + +# Exit when Ctrl-C is pressed +except KeyboardInterrupt: + logging.info('Shutdown') diff --git a/documentation/qudio/index.html b/documentation/qudio/index.html index 30b7e79..1abae66 100644 --- a/documentation/qudio/index.html +++ b/documentation/qudio/index.html @@ -144,7 +144,7 @@ h2, h3, h4 {
  • TCRT5000 reflective sensor module
  • The ultra-cheap USB webcam that can be found on ebay, aliexpress and the like (just sort for price). Some versions come with a small cable reel. This fits perfectly in the holder at the bottom of the case.
  • USB A to micro USB adapter that connects the webcam to the Raspberry Pi's micro USB port
  • -
  • 30-pin Apple dock adapter to micro USB and 3.5 mm audio
  • +
  • 30-pin Apple dock adapter to micro USB and 3.5 mm audio. Search for '30-pin micro-usb adapter audio'.
  • White LED (preferably diffused) for illumination of the QR cards with a proper resistor
  • 3 push buttons with 12 mm caps
  • Jumper cables: 6x 10 cm M-F or F-F for the buttons, 5x 10 cm F-F for the audio module, 5x 20 cm F-F for the sensor and the LED
  • diff --git a/notes.md b/notes.md index bba6098..4287355 100644 --- a/notes.md +++ b/notes.md @@ -15,6 +15,58 @@ ## Ersteinrichtung +Zien: +* volumio installiert +* Externe Stromversorgung +* Assistent durchlaufen, WLAN verbunden, heruntergefahren +* SD-Karte in Laptop + * touch ssh + * mkdir /volumio_data2/dyn/data/INTERNAL/qudio + * copy qudio.py + sounds + test nach /volumio_data2/dyn/data/INTERNAL/qudio + * interne Musik auch nach /INTERNAL +* Neustart + Rescan +* ssh volumio@qudio.local +* Activate software mixer +* sudo apt-get update +* sudo apt-get install fswebcam zbar-tools +* lsusb && ls /dev/video* +* fswebcam -r 320x240 -d /dev/video0 -v /data/backgrounds/webcam-test.jpg + * http://192.168.178.31/backgrounds/webcam-test.jpg +* zbarcam --quiet --nodisplay --raw -Sdisable -Sqrcode.enable --prescale=320x240 /dev/video0 +* uname -a && cat /etc/os-release + +## Python 3.6 minimum + https://www.scivision.co/compile-install-python-beta-raspberry-pi/ + sudo apt-get install libffi-dev libbz2-dev liblzma-dev libsqlite3-dev libncurses5-dev libgdbm-dev zlib1g-dev libreadline-dev libssl-dev tk-dev build-essential libncursesw5-dev libc6-dev openssl git + + https://gist.github.com/dschep/24aa61672a2092246eaca2824400d37f | https://gist.github.com/SeppPenner/6a5a30ebc8f79936fa136c524417761d + cd ~ + wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tar.xz + tar xf Python-3.7.2.tar.xz + cd Python-3.7.2 + ./configure + make + sudo make altinstall --> Problem mit OpenSSL + python3.7 --> quit() + + + sudo easy_install-3.6 -U pip # https://stackoverflow.com/a/34580922/3761783 --> OpenSSL fehlt! + sudo pip3.7 install --upgrade pip + sudo pip3.7 install socketio-client + sudo pip3.7 install RPi.GPIO + python3.7 test.py + + + + + +hat nicht funktioniert: +* apt-get install python3 python3-pip # https://github.com/edmw/volumio-diy/blob/master/README.md#install-volumio-hid +* sudo easy_install3 pip +* pip3 install socketIO-client +* pip3 install aiohttp + +---------------------------------------- * volumio installiert * Ausgabe über "Generic I2S DAC" * Netzlaufwerk verbinden