diff --git a/adhan-webapp/app.py b/adhan-webapp/app.py index f34a504..7c981f5 100644 --- a/adhan-webapp/app.py +++ b/adhan-webapp/app.py @@ -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,68 +299,79 @@ def instellingen(): alle_zones = fetch_sonos_zones() if request.method == 'POST': - # Nieuwe volume instellingen - if 'volume_day' in request.form and 'volume_night' in request.form: - settings['volume_day'] = int(request.form['volume_day']) - settings['volume_night'] = int(request.form['volume_night']) - settings['night_start'] = request.form['night_start'] - settings['day_start'] = request.form['day_start'] - # Update oude volume voor backward compatibility - settings['volume'] = settings['volume_day'] - else: - # Fallback: gebruik default waarden als velden ontbreken - settings['volume_day'] = settings.get('volume_day', 15) - settings['volume_night'] = settings.get('volume_night', 8) - settings['night_start'] = settings.get('night_start', '20:00') - settings['day_start'] = settings.get('day_start', '07:00') - settings['volume'] = settings['volume_day'] + try: + # Nieuwe volume instellingen + if 'volume_day' in request.form and 'volume_night' in request.form: + settings['volume_day'] = int(request.form['volume_day']) + settings['volume_night'] = int(request.form['volume_night']) + settings['night_start'] = request.form['night_start'] + settings['day_start'] = request.form['day_start'] + # Update oude volume voor backward compatibility + settings['volume'] = settings['volume_day'] + else: + # Fallback: gebruik default waarden als velden ontbreken + settings['volume_day'] = settings.get('volume_day', 15) + settings['volume_night'] = settings.get('volume_night', 8) + settings['night_start'] = settings.get('night_start', '20:00') + settings['day_start'] = settings.get('day_start', '07:00') + settings['volume'] = settings['volume_day'] - # Gebedstijd offsets - settings['fajr_offset'] = int(request.form.get('fajr_offset', 0)) - settings['zuhr_offset'] = int(request.form.get('zuhr_offset', 0)) - settings['asr_offset'] = int(request.form.get('asr_offset', 0)) - settings['maghrib_offset'] = int(request.form.get('maghrib_offset', 0)) - settings['isha_offset'] = int(request.form.get('isha_offset', 0)) + # Gebedstijd offsets + settings['fajr_offset'] = int(request.form.get('fajr_offset', 0)) + settings['zuhr_offset'] = int(request.form.get('zuhr_offset', 0)) + settings['asr_offset'] = int(request.form.get('asr_offset', 0)) + settings['maghrib_offset'] = int(request.form.get('maghrib_offset', 0)) + settings['isha_offset'] = int(request.form.get('isha_offset', 0)) - # Adzkaar instellingen - settings['adzkaar_enabled'] = 'adzkaar_enabled' in request.form - 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 + # Adzkaar instellingen + settings['adzkaar_enabled'] = 'adzkaar_enabled' in request.form + settings['adzkaar_duration'] = int(request.form.get('adzkaar_duration', 5)) - # Stel Pi volume direct in via amixer - import subprocess - 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}") + # Hadith instellingen + settings['hadith_interval_seconds'] = int(request.form.get('hadith_interval_seconds', 30)) - settings['zones'] = request.form.getlist('zones') - settings['audio_clip'] = request.form['audio_clip'] - - 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}" + # 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 + + # Probeer Pi volume in te stellen via amixer (alleen als we niet in Docker draaien) try: - r = requests.get(url, timeout=3) - print(f"🎵 Test clip verzonden naar {zone}, status: {r.status_code}") + # 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, FileNotFoundError) as e: + print(f"⚠️ Kon Pi volume niet direct instellen: {e} (volume wel opgeslagen)") 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', settings=settings, @@ -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}%'],