update script, daemon, services, added sound, small improvements

This commit is contained in:
2022-02-08 20:09:26 +01:00
parent 5fdc7d636b
commit c769724146
14 changed files with 671 additions and 433 deletions
-12
View File
@@ -10,18 +10,6 @@ app = Flask(__name__)
app.register_blueprint(api, url_prefix='/api')
app.register_blueprint(pages)
loglevel = 'INFO'
if luniebox.get_setting('logging', 'level'):
loglevel = luniebox.get_setting('logging', 'level')
logger = logging.getLogger('luniebox')
logger.setLevel(logging._nameToLevel[loglevel])
logFormatter = logging.Formatter(
style='{', datefmt='%Y-%m-%d %H:%M:%S', fmt='{asctime} {levelname}: {message}')
logstdoutHandler = logging.StreamHandler(sys.stdout)
logstdoutHandler.setFormatter(logFormatter)
logger.addHandler(logstdoutHandler)
if __name__ != '__main__':
gunicorn_logger = logging.getLogger('gunicorn.error')
app.logger.handlers = gunicorn_logger.handlers
+38 -12
View File
@@ -3,6 +3,7 @@
import signal
import time
import sys
import subprocess
import logging
from luniebox import luniebox
import RPi.GPIO as GPIO
@@ -26,23 +27,29 @@ class LunieboxDaemon(object):
self.tolerance = self.luniebox.get_setting(
'rfid', 'pause_tolerance', 4)
self.reads = 0
self.error_text = False
if self.luniebox.get_setting('hardware', 'mpu') == 'True':
self.mpu = MPU9250(
address_ak=AK8963_ADDRESS,
address_mpu_master=MPU9050_ADDRESS_68,
address_mpu_slave=None,
bus=4,
gfs=GFS_1000,
afs=AFS_8G,
mfs=AK8963_BIT_16,
mode=AK8963_MODE_C100HZ)
self.mpu.configure()
try:
self.mpu = MPU9250(
address_ak=AK8963_ADDRESS,
address_mpu_master=MPU9050_ADDRESS_68,
address_mpu_slave=None,
bus=4,
gfs=GFS_1000,
afs=AFS_8G,
mfs=AK8963_BIT_16,
mode=AK8963_MODE_C100HZ)
self.mpu.configure()
except Exception as exception:
logging.getLogger('luniebox').warning(
"Could not setup MPU9250: " + str(exception))
self.mpu = False
else:
self.mpu = False
def run(self):
logging.getLogger('luniebox').info("run luniebox")
logging.getLogger('luniebox').info("run luniebox daemon")
while True:
# mpu
@@ -86,10 +93,14 @@ class LunieboxDaemon(object):
if self.reads >= self.tolerance:
self.reads = 0
self.luniebox.pause()
self.error_text = False
time.sleep(0.1)
else:
self.reads = 0
self.luniebox.play(text)
if text != self.error_text and not self.luniebox.play(text):
if self.luniebox.get_setting('luniebox', 'error_sound') != 'False':
self.error_text = text
self.error_sound()
time.sleep(0.1)
def signal_handler(self, signal, frame):
@@ -98,6 +109,21 @@ class LunieboxDaemon(object):
luniebox.stop()
sys.exit(0)
def beep_sound(self):
self.play_sound("/home/pi/luniebox/audio/beep.wav",
str(self.luniebox.volume))
def error_sound(self):
self.play_sound("/home/pi/luniebox/audio/error.wav", "100")
def play_sound(self, path, volume):
volume_p = subprocess.Popen(
["amixer", "set", "PCM", volume + "%"], stdin=None,
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, close_fds=True, shell=False, group="pi", user="pi")
volume_p.wait()
subprocess.Popen(["aplay", path], stdin=None,
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, close_fds=True, shell=False, group="pi", user="pi")
if __name__ == "__main__":
daemon = LunieboxDaemon(luniebox=luniebox)
+26 -13
View File
@@ -168,9 +168,9 @@ class Luniebox(object):
self.zspotify_path, username, password, root)
logging.getLogger('luniebox').info("spotifydl enabled!")
return True
except Exception as ex:
except Exception as exception:
logging.getLogger('luniebox').warning(
"error on setup spotifydl: " + str(ex))
"error on setup spotifydl: " + str(exception))
return False
def read_config(self):
@@ -315,14 +315,20 @@ class Luniebox(object):
else:
logging.getLogger('luniebox').warn(
"cannot resume spotify: " + self.current)
return True
elif self.service == PlayerService.MPD:
if text != self.current:
if self.mpd_connect():
self.mpd.setvol(self.volume)
self.mpd.clear()
text = text.replace('mpd:', '')
self.mpd.add(text)
self.mpd.play()
try:
self.mpd.setvol(self.volume)
self.mpd.clear()
text = text.replace('mpd:', '')
self.mpd.add(text)
self.mpd.play()
except Exception as exception:
logging.getLogger('luniebox').warning(
"cannot not play mpd '" + text + "': " + str(exception))
return False
self.current = text
self.set_setting('luniebox', 'current', self.current)
self.resume = False
@@ -334,8 +340,13 @@ class Luniebox(object):
"play mpd: " + self.current)
elif self.resume and text == self.current:
if self.mpd_connect():
self.mpd.setvol(self.volume)
self.mpd.play()
try:
self.mpd.setvol(self.volume)
self.mpd.play()
except Exception as exception:
logging.getLogger('luniebox').warning(
"cannot not resume mpd '" + self.current + "': " + str(exception))
return False
self.resume = False
if text.startswith('spotify:'):
logging.getLogger('luniebox').debug(
@@ -343,10 +354,12 @@ class Luniebox(object):
else:
logging.getLogger('luniebox').debug(
"resume mpd: " + self.current)
elif text != None:
logging.getLogger('luniebox').info(
"invalid value(?): " + str(text))
return True
elif text != None:
logging.getLogger('luniebox').info(
"invalid value(?): " + str(text))
return False
return False
def stop(self):
self.pause()
+1
View File
@@ -6,4 +6,5 @@ mpu9250-jmdev==1.0.12
python-dateutil==2.8.2
python-mpd2==3.0.4
requests==2.26.0
smbus==1.1.post2
smbus2==0.4.1