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:
filoor 2025-05-28 20:18:19 +02:00
parent 9ebbf79428
commit 40e3bcc527

View File

@ -1,5 +1,5 @@
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 config import *
from hijridate import Gregorian
@ -299,6 +299,7 @@ def instellingen():
alle_zones = fetch_sonos_zones()
if request.method == 'POST':
try:
# Nieuwe volume instellingen
if 'volume_day' in request.form and 'volume_night' in request.form:
settings['volume_day'] = int(request.form['volume_day'])
@ -334,14 +335,19 @@ def instellingen():
pi_volume = int(request.form.get('pi_hdmi_volume', 70))
settings['pi_hdmi_volume'] = pi_volume
# Stel Pi volume direct in via amixer
import subprocess
# Probeer Pi volume in te stellen via amixer (alleen als we niet in Docker draaien)
try:
# Check of we in een Docker container draaien
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 as e:
print(f"❌ Kon Pi volume niet instellen: {e}")
except (subprocess.CalledProcessError, FileNotFoundError) as e:
print(f"⚠️ Kon Pi volume niet direct instellen: {e} (volume wel opgeslagen)")
except Exception as e:
print(f"❌ Onverwachte fout bij volume instelling: {e}")
settings['zones'] = request.form.getlist('zones')
settings['audio_clip'] = request.form['audio_clip']
@ -362,6 +368,11 @@ def instellingen():
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',
settings=settings,
alle_zones=alle_zones,
@ -753,7 +764,6 @@ def set_pi_volume():
return jsonify({'success': False, 'error': 'Volume moet tussen 0 en 100 zijn'}), 400
# Stel Pi volume in via amixer
import subprocess
try:
# Stel PCM volume in (HDMI audio)
subprocess.run(['amixer', 'set', 'PCM', f'{volume}%'],