refactor(instellingen): verbeter errorafhandeling en amixer-check
De functie voor het opslaan van instellingen is verbeterd met uitgebreide foutafhandeling door gebruik te maken van try-except blokken. Er is nu een controle toegevoegd om te bepalen of de code in een Docker-container draait voordat 'amixer' commando's worden uitgevoerd, wat ongewenste fouten voorkomt als 'amixer' niet beschikbaar is. Dit verhoogt de robuustheid bij het instellen van Pi HDMI volume. Onverwachte fouten worden gelogd en het proces gaat verder zonder onderbreking.
This commit is contained in:
parent
9ebbf79428
commit
40e3bcc527
@ -1,5 +1,5 @@
|
|||||||
from flask import Flask, render_template, request, redirect, send_from_directory, jsonify, request as flask_request
|
from flask import Flask, render_template, request, redirect, send_from_directory, jsonify, request as flask_request
|
||||||
import requests, json, os, random
|
import requests, json, os, random, subprocess
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from config import *
|
from config import *
|
||||||
from hijridate import Gregorian
|
from hijridate import Gregorian
|
||||||
@ -299,68 +299,79 @@ def instellingen():
|
|||||||
alle_zones = fetch_sonos_zones()
|
alle_zones = fetch_sonos_zones()
|
||||||
|
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
# Nieuwe volume instellingen
|
try:
|
||||||
if 'volume_day' in request.form and 'volume_night' in request.form:
|
# Nieuwe volume instellingen
|
||||||
settings['volume_day'] = int(request.form['volume_day'])
|
if 'volume_day' in request.form and 'volume_night' in request.form:
|
||||||
settings['volume_night'] = int(request.form['volume_night'])
|
settings['volume_day'] = int(request.form['volume_day'])
|
||||||
settings['night_start'] = request.form['night_start']
|
settings['volume_night'] = int(request.form['volume_night'])
|
||||||
settings['day_start'] = request.form['day_start']
|
settings['night_start'] = request.form['night_start']
|
||||||
# Update oude volume voor backward compatibility
|
settings['day_start'] = request.form['day_start']
|
||||||
settings['volume'] = settings['volume_day']
|
# Update oude volume voor backward compatibility
|
||||||
else:
|
settings['volume'] = settings['volume_day']
|
||||||
# Fallback: gebruik default waarden als velden ontbreken
|
else:
|
||||||
settings['volume_day'] = settings.get('volume_day', 15)
|
# Fallback: gebruik default waarden als velden ontbreken
|
||||||
settings['volume_night'] = settings.get('volume_night', 8)
|
settings['volume_day'] = settings.get('volume_day', 15)
|
||||||
settings['night_start'] = settings.get('night_start', '20:00')
|
settings['volume_night'] = settings.get('volume_night', 8)
|
||||||
settings['day_start'] = settings.get('day_start', '07:00')
|
settings['night_start'] = settings.get('night_start', '20:00')
|
||||||
settings['volume'] = settings['volume_day']
|
settings['day_start'] = settings.get('day_start', '07:00')
|
||||||
|
settings['volume'] = settings['volume_day']
|
||||||
|
|
||||||
# Gebedstijd offsets
|
# Gebedstijd offsets
|
||||||
settings['fajr_offset'] = int(request.form.get('fajr_offset', 0))
|
settings['fajr_offset'] = int(request.form.get('fajr_offset', 0))
|
||||||
settings['zuhr_offset'] = int(request.form.get('zuhr_offset', 0))
|
settings['zuhr_offset'] = int(request.form.get('zuhr_offset', 0))
|
||||||
settings['asr_offset'] = int(request.form.get('asr_offset', 0))
|
settings['asr_offset'] = int(request.form.get('asr_offset', 0))
|
||||||
settings['maghrib_offset'] = int(request.form.get('maghrib_offset', 0))
|
settings['maghrib_offset'] = int(request.form.get('maghrib_offset', 0))
|
||||||
settings['isha_offset'] = int(request.form.get('isha_offset', 0))
|
settings['isha_offset'] = int(request.form.get('isha_offset', 0))
|
||||||
|
|
||||||
# Adzkaar instellingen
|
# Adzkaar instellingen
|
||||||
settings['adzkaar_enabled'] = 'adzkaar_enabled' in request.form
|
settings['adzkaar_enabled'] = 'adzkaar_enabled' in request.form
|
||||||
settings['adzkaar_duration'] = int(request.form.get('adzkaar_duration', 5))
|
settings['adzkaar_duration'] = int(request.form.get('adzkaar_duration', 5))
|
||||||
|
|
||||||
# Hadith instellingen
|
|
||||||
settings['hadith_interval_seconds'] = int(request.form.get('hadith_interval_seconds', 30))
|
|
||||||
|
|
||||||
# Pi HDMI volume instelling
|
|
||||||
if 'pi_hdmi_volume' in request.form:
|
|
||||||
pi_volume = int(request.form.get('pi_hdmi_volume', 70))
|
|
||||||
settings['pi_hdmi_volume'] = pi_volume
|
|
||||||
|
|
||||||
# Stel Pi volume direct in via amixer
|
# Hadith instellingen
|
||||||
import subprocess
|
settings['hadith_interval_seconds'] = int(request.form.get('hadith_interval_seconds', 30))
|
||||||
try:
|
|
||||||
subprocess.run(['amixer', 'set', 'PCM', f'{pi_volume}%'],
|
|
||||||
check=True, capture_output=True, text=True)
|
|
||||||
print(f"🔊 Pi HDMI volume ingesteld op {pi_volume}%")
|
|
||||||
except subprocess.CalledProcessError as e:
|
|
||||||
print(f"❌ Kon Pi volume niet instellen: {e}")
|
|
||||||
|
|
||||||
settings['zones'] = request.form.getlist('zones')
|
# Pi HDMI volume instelling
|
||||||
settings['audio_clip'] = request.form['audio_clip']
|
if 'pi_hdmi_volume' in request.form:
|
||||||
|
pi_volume = int(request.form.get('pi_hdmi_volume', 70))
|
||||||
with open(SETTINGS_PATH, 'w') as f:
|
settings['pi_hdmi_volume'] = pi_volume
|
||||||
json.dump(settings, f, indent=2)
|
|
||||||
|
# Probeer Pi volume in te stellen via amixer (alleen als we niet in Docker draaien)
|
||||||
if 'test_clip' in request.form:
|
|
||||||
# Gebruik het juiste volume voor de test
|
|
||||||
test_volume = get_current_volume(settings)
|
|
||||||
for zone in settings['zones']:
|
|
||||||
url = f"http://{SONOS_API_IP}:5005/{zone}/clip/{settings['audio_clip']}/{test_volume}"
|
|
||||||
try:
|
try:
|
||||||
r = requests.get(url, timeout=3)
|
# Check of we in een Docker container draaien
|
||||||
print(f"🎵 Test clip verzonden naar {zone}, status: {r.status_code}")
|
if os.path.exists('/.dockerenv'):
|
||||||
|
print(f"🔊 Pi HDMI volume opgeslagen: {pi_volume}% (Docker container - amixer niet beschikbaar)")
|
||||||
|
else:
|
||||||
|
subprocess.run(['amixer', 'set', 'PCM', f'{pi_volume}%'],
|
||||||
|
check=True, capture_output=True, text=True)
|
||||||
|
print(f"🔊 Pi HDMI volume ingesteld op {pi_volume}%")
|
||||||
|
except (subprocess.CalledProcessError, FileNotFoundError) as e:
|
||||||
|
print(f"⚠️ Kon Pi volume niet direct instellen: {e} (volume wel opgeslagen)")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"❌ Fout bij afspelen op zone {zone}: {e}")
|
print(f"❌ Onverwachte fout bij volume instelling: {e}")
|
||||||
|
|
||||||
|
settings['zones'] = request.form.getlist('zones')
|
||||||
|
settings['audio_clip'] = request.form['audio_clip']
|
||||||
|
|
||||||
return redirect('/instellingen')
|
with open(SETTINGS_PATH, 'w') as f:
|
||||||
|
json.dump(settings, f, indent=2)
|
||||||
|
|
||||||
|
if 'test_clip' in request.form:
|
||||||
|
# Gebruik het juiste volume voor de test
|
||||||
|
test_volume = get_current_volume(settings)
|
||||||
|
for zone in settings['zones']:
|
||||||
|
url = f"http://{SONOS_API_IP}:5005/{zone}/clip/{settings['audio_clip']}/{test_volume}"
|
||||||
|
try:
|
||||||
|
r = requests.get(url, timeout=3)
|
||||||
|
print(f"🎵 Test clip verzonden naar {zone}, status: {r.status_code}")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"❌ Fout bij afspelen op zone {zone}: {e}")
|
||||||
|
|
||||||
|
return redirect('/instellingen')
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"❌ Fout bij opslaan instellingen: {e}")
|
||||||
|
# Probeer alsnog door te gaan zonder de Pi volume instelling
|
||||||
|
return redirect('/instellingen')
|
||||||
|
|
||||||
return render_template('settings.html',
|
return render_template('settings.html',
|
||||||
settings=settings,
|
settings=settings,
|
||||||
@ -753,7 +764,6 @@ def set_pi_volume():
|
|||||||
return jsonify({'success': False, 'error': 'Volume moet tussen 0 en 100 zijn'}), 400
|
return jsonify({'success': False, 'error': 'Volume moet tussen 0 en 100 zijn'}), 400
|
||||||
|
|
||||||
# Stel Pi volume in via amixer
|
# Stel Pi volume in via amixer
|
||||||
import subprocess
|
|
||||||
try:
|
try:
|
||||||
# Stel PCM volume in (HDMI audio)
|
# Stel PCM volume in (HDMI audio)
|
||||||
subprocess.run(['amixer', 'set', 'PCM', f'{volume}%'],
|
subprocess.run(['amixer', 'set', 'PCM', f'{volume}%'],
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user