diff --git a/.lh/adhan-webapp/settings.json.json b/.lh/adhan-webapp/settings.json.json index f258d79..73519e2 100644 --- a/.lh/adhan-webapp/settings.json.json +++ b/.lh/adhan-webapp/settings.json.json @@ -3,7 +3,7 @@ "activeCommit": 0, "commits": [ { - "activePatchIndex": 2, + "activePatchIndex": 3, "patches": [ { "date": 1748201503324, @@ -16,6 +16,10 @@ { "date": 1748276087388, "content": "Index: \n===================================================================\n--- \n+++ \n@@ -1,1 +1,9 @@\n-\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\\ No newline at end of file\n+{\n+ \"volume\": 15,\n+ \"zones\": [\n+ \"Keuken\",\n+ \"Slaapkamer\"\n+ ],\n+ \"audio_clip\": \"adhan1.mp3\",\n+ \"mute\": false\n+}\n\\ No newline at end of file\n" + }, + { + "date": 1748339667206, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -1,8 +1,8 @@\n {\n \"volume\": 15,\n \"volume_day\": 15,\n- \"volume_night\": 8,\n+ \"volume_night\": 4,\n \"night_start\": \"00:00\",\n \"day_start\": \"07:00\",\n \"zones\": [\n \"Keuken\",\n" } ], "date": 1748201503324, diff --git a/.lh/adhan-webapp/test_offsets.py.json b/.lh/adhan-webapp/test_offsets.py.json new file mode 100644 index 0000000..f697938 --- /dev/null +++ b/.lh/adhan-webapp/test_offsets.py.json @@ -0,0 +1,22 @@ +{ + "sourceFile": "adhan-webapp/test_offsets.py", + "activeCommit": 0, + "commits": [ + { + "activePatchIndex": 1, + "patches": [ + { + "date": 1748347843183, + "content": "Index: \n===================================================================\n--- \n+++ \n" + }, + { + "date": 1748347851222, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -1,71 +1,1 @@\n-#!/usr/bin/env python3\n-\n-import json\n-import sys\n-from datetime import datetime, timedelta\n-\n-def apply_prayer_offsets(gebedstijden, settings):\n- \"\"\"Pas offsets toe op gebedstijden\"\"\"\n- offsets = {\n- 'Fajr': settings.get('fajr_offset', 0),\n- 'Zuhr': settings.get('zuhr_offset', 0),\n- 'Asr': settings.get('asr_offset', 0),\n- 'Maghrib': settings.get('maghrib_offset', 0),\n- 'Isha': settings.get('isha_offset', 0)\n- }\n- \n- adjusted_times = {}\n- \n- for prayer, original_time in gebedstijden.items():\n- offset_minutes = offsets.get(prayer, 0)\n- \n- if offset_minutes == 0:\n- adjusted_times[prayer] = original_time\n- continue\n- \n- try:\n- # Parse de originele tijd\n- time_obj = datetime.strptime(original_time, '%H:%M')\n- \n- # Voeg offset toe\n- adjusted_time = time_obj + timedelta(minutes=offset_minutes)\n- \n- # Converteer terug naar string\n- adjusted_times[prayer] = adjusted_time.strftime('%H:%M')\n- \n- if offset_minutes != 0:\n- print(f\"π {prayer}: {original_time} β {adjusted_times[prayer]} ({offset_minutes:+d} min)\")\n- \n- except Exception as e:\n- print(f\"β οΈ Fout bij aanpassen {prayer} tijd: {e}\")\n- adjusted_times[prayer] = original_time\n- \n- return adjusted_times\n-\n-# Test de functie\n-if __name__ == \"__main__\":\n- # Laad settings\n- with open('settings.json') as f:\n- settings = json.load(f)\n- \n- # Test gebedstijden (zoals van VUMG API)\n- test_gebedstijden = {\n- \"Fajr\": \"05:30\",\n- \"Zuhr\": \"12:45\", \n- \"Asr\": \"15:20\",\n- \"Maghrib\": \"17:55\",\n- \"Isha\": \"19:30\"\n- }\n- \n- print(\"=== OFFSET TEST ===\")\n- print(\"Originele tijden:\")\n- for prayer, time in test_gebedstijden.items():\n- offset = settings.get(f'{prayer.lower()}_offset', 0)\n- print(f\" {prayer}: {time} (offset: {offset:+d} min)\")\n- \n- print(\"\\nAangepaste tijden:\")\n- adjusted = apply_prayer_offsets(test_gebedstijden, settings)\n- \n- print(\"\\nResultaat:\")\n- for prayer, time in adjusted.items():\n- print(f\" {prayer}: {time}\") \n\\ No newline at end of file\n+ \n\\ No newline at end of file\n" + } + ], + "date": 1748347843183, + "name": "Commit-0", + "content": "#!/usr/bin/env python3\n\nimport json\nimport sys\nfrom datetime import datetime, timedelta\n\ndef apply_prayer_offsets(gebedstijden, settings):\n \"\"\"Pas offsets toe op gebedstijden\"\"\"\n offsets = {\n 'Fajr': settings.get('fajr_offset', 0),\n 'Zuhr': settings.get('zuhr_offset', 0),\n 'Asr': settings.get('asr_offset', 0),\n 'Maghrib': settings.get('maghrib_offset', 0),\n 'Isha': settings.get('isha_offset', 0)\n }\n \n adjusted_times = {}\n \n for prayer, original_time in gebedstijden.items():\n offset_minutes = offsets.get(prayer, 0)\n \n if offset_minutes == 0:\n adjusted_times[prayer] = original_time\n continue\n \n try:\n # Parse de originele tijd\n time_obj = datetime.strptime(original_time, '%H:%M')\n \n # Voeg offset toe\n adjusted_time = time_obj + timedelta(minutes=offset_minutes)\n \n # Converteer terug naar string\n adjusted_times[prayer] = adjusted_time.strftime('%H:%M')\n \n if offset_minutes != 0:\n print(f\"π {prayer}: {original_time} β {adjusted_times[prayer]} ({offset_minutes:+d} min)\")\n \n except Exception as e:\n print(f\"β οΈ Fout bij aanpassen {prayer} tijd: {e}\")\n adjusted_times[prayer] = original_time\n \n return adjusted_times\n\n# Test de functie\nif __name__ == \"__main__\":\n # Laad settings\n with open('settings.json') as f:\n settings = json.load(f)\n \n # Test gebedstijden (zoals van VUMG API)\n test_gebedstijden = {\n \"Fajr\": \"05:30\",\n \"Zuhr\": \"12:45\", \n \"Asr\": \"15:20\",\n \"Maghrib\": \"17:55\",\n \"Isha\": \"19:30\"\n }\n \n print(\"=== OFFSET TEST ===\")\n print(\"Originele tijden:\")\n for prayer, time in test_gebedstijden.items():\n offset = settings.get(f'{prayer.lower()}_offset', 0)\n print(f\" {prayer}: {time} (offset: {offset:+d} min)\")\n \n print(\"\\nAangepaste tijden:\")\n adjusted = apply_prayer_offsets(test_gebedstijden, settings)\n \n print(\"\\nResultaat:\")\n for prayer, time in adjusted.items():\n print(f\" {prayer}: {time}\") " + } + ] +} \ No newline at end of file diff --git a/adhan-webapp/__pycache__/app.cpython-311.pyc b/adhan-webapp/__pycache__/app.cpython-311.pyc new file mode 100644 index 0000000..592f5f0 Binary files /dev/null and b/adhan-webapp/__pycache__/app.cpython-311.pyc differ diff --git a/adhan-webapp/adhan_cron.py b/adhan-webapp/adhan_cron.py index 08febc7..e041eae 100644 --- a/adhan-webapp/adhan_cron.py +++ b/adhan-webapp/adhan_cron.py @@ -1,5 +1,5 @@ import requests, json, os -from datetime import datetime, date +from datetime import datetime, date, timedelta import time SETTINGS_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'settings.json') @@ -45,6 +45,44 @@ def get_current_volume(settings): logregel(f"βοΈ Dag volume gebruikt: {volume}") return volume +def apply_prayer_offsets(gebedstijden, settings): + """Pas offsets toe op gebedstijden""" + offsets = { + 'Fajr': settings.get('fajr_offset', 0), + 'Zuhr': settings.get('zuhr_offset', 0), + 'Asr': settings.get('asr_offset', 0), + 'Maghrib': settings.get('maghrib_offset', 0), + 'Isha': settings.get('isha_offset', 0) + } + + adjusted_times = {} + + for prayer, original_time in gebedstijden.items(): + offset_minutes = offsets.get(prayer, 0) + + if offset_minutes == 0: + adjusted_times[prayer] = original_time + continue + + try: + # Parse de originele tijd + time_obj = datetime.strptime(original_time, '%H:%M') + + # Voeg offset toe + adjusted_time = time_obj + timedelta(minutes=offset_minutes) + + # Converteer terug naar string + adjusted_times[prayer] = adjusted_time.strftime('%H:%M') + + if offset_minutes != 0: + logregel(f"π {prayer}: {original_time} β {adjusted_times[prayer]} ({offset_minutes:+d} min)") + + except Exception as e: + logregel(f"β οΈ Fout bij aanpassen {prayer} tijd: {e}") + adjusted_times[prayer] = original_time + + return adjusted_times + def check_recent_play(prayer_name): """Controleer of deze adhaan recent is afgespeeld (binnen 2 minuten)""" try: @@ -129,16 +167,19 @@ try: res.raise_for_status() data = res.json()[0] gebedstijden = { - "Fajr": data.get("fajr_jamah", "00:00"), - "Zuhr": data.get("zuhr_jamah", "00:00"), - "Asr": data.get("asr_jamah", "00:00"), - "Maghrib": data.get("maghrib_jamah", "00:00"), - "Isha": data.get("isha_jamah", "00:00") + "Fajr": data.get("fajr_jamah", "00:00")[:5], # Haal seconden weg + "Zuhr": data.get("zuhr_jamah", "00:00")[:5], # Haal seconden weg + "Asr": data.get("asr_jamah", "00:00")[:5], # Haal seconden weg + "Maghrib": data.get("maghrib_jamah", "00:00")[:5], # Haal seconden weg + "Isha": data.get("isha_jamah", "00:00")[:5] # Haal seconden weg } except Exception as e: logregel(f"Fout bij ophalen gebedstijden: {e}") exit(1) +# Pas offsets toe op gebedstijden +gebedstijden = apply_prayer_offsets(gebedstijden, settings) + # Check voor gebedstijd for naam, tijd in gebedstijden.items(): if tijd[:5] == now: # Alleen uren:minuten vergelijken diff --git a/adhan-webapp/app.py b/adhan-webapp/app.py index d7a81b2..634d9bd 100644 --- a/adhan-webapp/app.py +++ b/adhan-webapp/app.py @@ -103,6 +103,46 @@ def get_current_volume(settings): else: return settings.get('volume_day', settings.get('volume', 30)) +def apply_prayer_offsets(gebedstijden, settings): + """Pas offsets toe op gebedstijden""" + from datetime import datetime, timedelta + + offsets = { + 'Fajr': settings.get('fajr_offset', 0), + 'Zuhr': settings.get('zuhr_offset', 0), + 'Asr': settings.get('asr_offset', 0), + 'Maghrib': settings.get('maghrib_offset', 0), + 'Isha': settings.get('isha_offset', 0) + } + + adjusted_times = {} + + for prayer, original_time in gebedstijden.items(): + offset_minutes = offsets.get(prayer, 0) + + if offset_minutes == 0: + adjusted_times[prayer] = original_time + continue + + try: + # Parse de originele tijd + time_obj = datetime.strptime(original_time, '%H:%M') + + # Voeg offset toe + adjusted_time = time_obj + timedelta(minutes=offset_minutes) + + # Converteer terug naar string + adjusted_times[prayer] = adjusted_time.strftime('%H:%M') + + if offset_minutes != 0: + print(f"π {prayer}: {original_time} β {adjusted_times[prayer]} ({offset_minutes:+d} min)") + + except Exception as e: + print(f"β οΈ Fout bij aanpassen {prayer} tijd: {e}") + adjusted_times[prayer] = original_time + + return adjusted_times + def fetch_sonos_zones(): try: res = requests.get(f'http://{SONOS_API_IP}:5005/zones', timeout=5) @@ -194,13 +234,16 @@ def index(): data = res.json()[0] gebedstijden = { - "Fajr": data.get("fajr_jamah", "00:00"), - "Zuhr": data.get("zuhr_jamah", "00:00"), - "Asr": data.get("asr_jamah", "00:00"), - "Maghrib": data.get("maghrib_jamah", "00:00"), - "Isha": data.get("isha_jamah", "00:00") + "Fajr": data.get("fajr_jamah", "00:00")[:5], # Haal seconden weg + "Zuhr": data.get("zuhr_jamah", "00:00")[:5], # Haal seconden weg + "Asr": data.get("asr_jamah", "00:00")[:5], # Haal seconden weg + "Maghrib": data.get("maghrib_jamah", "00:00")[:5], # Haal seconden weg + "Isha": data.get("isha_jamah", "00:00")[:5] # Haal seconden weg } + # Pas offsets toe op gebedstijden + gebedstijden = apply_prayer_offsets(gebedstijden, settings) + now = datetime.now().strftime('%H:%M') for naam, tijd in gebedstijden.items(): if tijd > now: @@ -256,6 +299,13 @@ def instellingen(): 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)) settings['zones'] = request.form.getlist('zones') settings['audio_clip'] = request.form['audio_clip'] @@ -345,12 +395,15 @@ def debug(): data = res.json()[0] gebedstijden = { - "Fajr": data.get("fajr_jamah", "00:00"), - "Zuhr": data.get("zuhr_jamah", "00:00"), - "Asr": data.get("asr_jamah", "00:00"), - "Maghrib": data.get("maghrib_jamah", "00:00"), - "Isha": data.get("isha_jamah", "00:00") + "Fajr": data.get("fajr_jamah", "00:00")[:5], # Haal seconden weg + "Zuhr": data.get("zuhr_jamah", "00:00")[:5], # Haal seconden weg + "Asr": data.get("asr_jamah", "00:00")[:5], # Haal seconden weg + "Maghrib": data.get("maghrib_jamah", "00:00")[:5], # Haal seconden weg + "Isha": data.get("isha_jamah", "00:00")[:5] # Haal seconden weg } + + # Pas offsets toe op gebedstijden + gebedstijden = apply_prayer_offsets(gebedstijden, settings) except Exception as e: print("β Fout bij ophalen gebedstijden voor debug:", e) # Fallback tijden voor testing @@ -361,6 +414,9 @@ def debug(): "Maghrib": "17:30", "Isha": "19:00" } + + # Pas ook offsets toe op fallback tijden + gebedstijden = apply_prayer_offsets(gebedstijden, settings) return render_template('debug.html', gebedstijden=gebedstijden, @@ -502,7 +558,41 @@ def sonos_stop(): @app.route('/quran') def quran(): """Quran speler pagina""" - return render_template('quran.html') + settings = load_settings() + gebedstijden = {} + + try: + res = requests.get(VUMG_API) + res.raise_for_status() + data = res.json()[0] + + gebedstijden = { + "Fajr": data.get("fajr_jamah", "00:00")[:5], # Haal seconden weg + "Zuhr": data.get("zuhr_jamah", "00:00")[:5], # Haal seconden weg + "Asr": data.get("asr_jamah", "00:00")[:5], # Haal seconden weg + "Maghrib": data.get("maghrib_jamah", "00:00")[:5], # Haal seconden weg + "Isha": data.get("isha_jamah", "00:00")[:5] # Haal seconden weg + } + + # Pas offsets toe op gebedstijden + gebedstijden = apply_prayer_offsets(gebedstijden, settings) + except Exception as e: + print("β Fout bij ophalen gebedstijden voor quran pagina:", e) + # Fallback tijden + gebedstijden = { + "Fajr": "06:00", + "Zuhr": "12:30", + "Asr": "15:00", + "Maghrib": "17:30", + "Isha": "19:00" + } + + # Pas ook offsets toe op fallback tijden + gebedstijden = apply_prayer_offsets(gebedstijden, settings) + + return render_template('quran.html', + gebedstijden=gebedstijden, + settings=settings) if __name__ == '__main__': app.run(host='0.0.0.0', port=80) \ No newline at end of file diff --git a/adhan-webapp/done b/adhan-webapp/done index d430401..12436d6 100644 --- a/adhan-webapp/done +++ b/adhan-webapp/done @@ -1,3 +1,7 @@ Mon May 26 16:08:33 CEST 2025: Hadith auto-update functionaliteit toegevoegd - JavaScript code toegevoegd om elke 30 seconden een nieuwe hadith op te halen via /api/hadith endpoint Mon May 26 16:19:32 CEST 2025: Instellingen pagina design aangepast - Hetzelfde design als rest van applicatie met theme ondersteuning, Material Icons en consistente styling Mon May 26 18:17:57 CEST 2025: Tijdzone probleem opgelost - Container gebruikt nu Nederlandse tijd (18:17), volgende test bij Maghrib om 21:45 +2025-05-27 11:55:10 - Oude volume regel verwijderd uit settings.json - alleen volume_day en volume_night behouden +2025-05-27 14:07:15 - Gebedstijd offsets toegevoegd - kan nu minuten toevoegen/afhalen van VUMG tijden +2025-05-27 14:16:04 - Offset bug gerepareerd - seconden weggehaald van VUMG API tijden zodat parsing correct werkt +2025-05-27 14:24:39 - Quran pagina gerepareerd - gebedstijden variabele toegevoegd aan template diff --git a/adhan-webapp/settings.json b/adhan-webapp/settings.json index c05ea89..575a11b 100644 --- a/adhan-webapp/settings.json +++ b/adhan-webapp/settings.json @@ -1,13 +1,18 @@ { - "volume": 15, - "volume_day": 15, - "volume_night": 8, - "night_start": "00:00", + "volume_day": 10, + "volume_night": 4, + "night_start": "23:50", "day_start": "07:00", + "fajr_offset": 30, + "zuhr_offset": 0, + "asr_offset": 0, + "maghrib_offset": 0, + "isha_offset": 0, "zones": [ "Keuken", "Slaapkamer" ], "audio_clip": "adhan1.mp3", - "mute": false + "mute": false, + "volume": 10 } \ No newline at end of file diff --git a/adhan-webapp/static/hadiths.json b/adhan-webapp/static/hadiths.json index 807bf82..de52884 100644 --- a/adhan-webapp/static/hadiths.json +++ b/adhan-webapp/static/hadiths.json @@ -99,6 +99,46 @@ { "text": "Allah zal voor degene die Hem vreest een uitweg maken en hem voorzien van waar hij het niet verwacht.", "bron": "Koran 65:2-3" + }, + { + "text": "Wie een weg bewandelt om kennis te zoeken, Allah zal voor hem een weg naar het Paradijs vergemakkelijken.", + "bron": "Sahih Muslim" + }, + { + "text": "Degene die een moslim verlost van een wereldse zorg, Allah zal hem verlossen van een zorg op de Dag des Oordeels.", + "bron": "Sahih Muslim" + }, + { + "text": "Allah strekt Zijn Hand uit in de nacht zodat de zondaar overdag zich kan bekeren, en Hij strekt Zijn Hand uit overdag zodat de zondaar in de nacht zich kan bekeren.", + "bron": "Sahih Muslim" + }, + { + "text": "Voorwaar, met moeilijkheid komt verlichting.", + "bron": "Koran 94:6" + }, + { + "text": "Wie het pad van vergiffenis bewandelt, Allah zal hem vergeven.", + "bron": "Sahih al-Bukhari" + }, + { + "text": "Allah is mooi en houdt van schoonheid.", + "bron": "Sahih Muslim" + }, + { + "text": "Niemand van jullie gelooft werkelijk totdat hij voor zijn broeder wenst wat hij voor zichzelf wenst.", + "bron": "Sahih al-Bukhari & Muslim" + }, + { + "text": "Wanneer Allah van een dienaar houdt, roept Hij Djibriel en zegt: βVoorwaar, Ik houd van die-en-die, houd daarom ook van hem.β", + "bron": "Sahih al-Bukhari" + }, + { + "text": "Een moslim is de broeder van een moslim. Hij doet hem geen onrecht aan en laat hem niet in de steek.", + "bron": "Sahih al-Bukhari & Muslim" + }, + { + "text": "Zeg het goede of zwijg.", + "bron": "Sahih al-Bukhari" } ] } \ No newline at end of file diff --git a/adhan-webapp/templates/settings.html b/adhan-webapp/templates/settings.html index 0d30147..846bfeb 100644 --- a/adhan-webapp/templates/settings.html +++ b/adhan-webapp/templates/settings.html @@ -121,6 +121,66 @@ +
+ Voeg minuten toe (+) of haal af (-) van de VUMG gebedstijden. Bijvoorbeeld: +30 voor 30 minuten later, -15 voor 15 minuten eerder. +
+