Compare commits

...

13 Commits

Author SHA1 Message Date
5d529c9789 feat: replace SummitWave site with 301 redirect from apex to www subdomain
- Update deployment script to clear all existing files and upload only .htaccess
- Remove landing page (index.html), impressum, robots.txt, sitemap.xml
- Remove all img directory contents and manual directory (including PHP auth, logs, images)
- Simplify .htaccess to redirect summitwave.eu → www.summitwave.eu with 301
- Delete empty optimize_device.sh and sftp files
- Update deployment comments to reflect redirect-only
2026-01-11 09:54:01 +01:00
2a50e694a7 fixes in manual and add cert 2025-12-18 15:36:13 +01:00
55a274eeed feat: add new user accounts and direct certificate download link to manual
- Add three new user accounts: admin_uibk, julia_steiner, and summitwave_general
- Add direct download link for summitwave-beacon.crt certificate in manual
- Provide alternative download method alongside existing browser-based certificate retrieval
2025-12-17 15:32:19 +01:00
10ac724155 feat: restructure manual hero section and consolidate Web-UI documentation into single chapter
- Redesign hero layout with centered product image in dedicated visual container
- Remove start orientation text and simplify CTA section with inline navigation links
- Add hover effect and improved shadow styling to product image
- Consolidate Web-UI chapters: merge Audio Mode, Radio config, and operation into single "Streams konfigurieren" chapter
- Restructure documentation as step-by-step configuration
2025-12-15 19:55:15 +01:00
4e61cf2189 feat: add PHP-based authentication system for manual with access logging
- Add login.php, auth.php, and auth.config.php for manual access control
- Create logout.php for session management
- Add .htaccess to route /manual/ requests to PHP-based index
- Create logs directory and access.log for tracking manual visits
- Update deployment script to upload PHP authentication files and logs
- Add rewrite rule to ensure /manual/ uses login-guarded PHP version
- Keep static index.html as fallback for direct
2025-12-15 17:25:32 +01:00
dc7dcdd650 feat: remove deprecated AI-optimized deployment script
- Delete deploy_to_hetzner_AI.sh which was superseded by main deployment script
- Remove cache-busting implementation for index_noSIG_AIopt.html
- Clean up unused SFTP deployment workflow with sshpass authentication
2025-12-15 17:03:08 +01:00
76798a215a feat: redesign manual hero section with improved visual hierarchy and modern UI styling
- Restructure hero layout with separate main content and visual areas
- Replace KPI grid with modern spec tiles featuring icons and detailed labels
- Add start orientation guide and primary CTA button for Quick Start
- Reduce topbar padding and adjust font sizing for cleaner appearance
- Update color scheme with darker backgrounds and refined borders
- Improve spec tiles with pill-shaped design and icon badges
2025-12-14 20:46:59 +01:00
61f038b36b feat: add beacon front image to manual documentation
- Add beacon-front.jpg to manual directory for device reference documentation
2025-12-13 10:49:57 +01:00
ae9fe78b37 feat: update deployment script to include manual images and improve structure
- Add manual/beacon-front.jpg to deployment
- Create manual/img directory and upload all manual images
- Add German comments for clarity (Hauptbilder, Manual sections)
- Improve directory navigation structure in SFTP commands
2025-12-13 10:39:51 +01:00
0f1165c4ad feat: add comprehensive German manual for Summitwave Beacon with full documentation
- Create complete online manual in German with modern dark UI design
- Add detailed sections covering installation, configuration, operation, and maintenance
- Include safety guidelines, CE/RED compliance information, and technical specifications
- Implement responsive layout with sticky navigation and mobile-friendly TOC
- Add visual styling matching Auracast UI with dark panels and teal accents
- Document Web-
2025-12-13 10:32:50 +01:00
c159206ae4 remove identity file usage 2025-11-17 09:36:56 +01:00
cf383e7412 feat: add manual page deployment and rebrand from Auracast to wireless audio
- Update deployment scripts to upload manual/index.html to server
- Make deploy_to_hetzner.sh executable
- Rebrand site from "Auracast made easy" to "Wireless Audio Made Easy"
- Update all meta tags and descriptions to remove Auracast branding
- Refine hero headline and call-to-action text
- Simplify use case descriptions with clearer, more concise copy
- Rewrite "Why Auracast" section as "Why Wireless Audio" with update
2025-11-17 09:21:21 +01:00
9e4c605da7 Started Implementing manual Page 2025-11-15 20:52:28 +01:00
23 changed files with 2259 additions and 429 deletions

44
deploy_to_hetzner.sh Normal file → Executable file
View File

@@ -1,26 +1,40 @@
#!/bin/bash
# Deploy SummitWave landing page to Hetzner public_html via SFTP
# Clear SummitWave site and set up 301 redirect from summitwave.eu to www.summitwave.eu
# === CONFIGURATION ===
SERVER="www269.your-server.de"
USER="summitb"
REMOTE_DIR="public_html"
LOCAL_DIR="$(dirname \"$0\")/src"
LOCAL_DIR="$(dirname "$0")/src"
# === UPLOAD ===
echo "Uploading website files to $USER@$SERVER:$REMOTE_DIR ..."
sftp -i ~/.ssh/id_ed25519 -oBatchMode=yes -b - $USER@$SERVER <<EOF
echo "Clearing website and setting up redirect on $USER@$SERVER:$REMOTE_DIR ..."
# Connect via SFTP: clear existing files, then upload only .htaccess
sftp $USER@$SERVER <<EOF
cd $REMOTE_DIR
put -r $LOCAL_DIR/index.html
put -r $LOCAL_DIR/impressum.html
put -r $LOCAL_DIR/robots.txt
put -r $LOCAL_DIR/sitemap.xml
put -r $LOCAL_DIR/.htaccess
mkdir img
cd img
put -r $LOCAL_DIR/img/*
cd ..
# Remove existing files
rm index.html
rm impressum.html
rm robots.txt
rm sitemap.xml
# Remove img directory contents and directory
rm img/*
rmdir img
# Remove manual directory contents (nested structure)
rm manual/logs/*
rmdir manual/logs
rm manual/img/*
rmdir manual/img
rm manual/*
rmdir manual
# Upload only the .htaccess for redirect
put $LOCAL_DIR/.htaccess
bye
EOF
echo "Deployment complete. Visit your site to verify: http://summitwave.eu/"
echo "Done. summitwave.eu now redirects 301 to www.summitwave.eu"

View File

@@ -1,60 +0,0 @@
#!/bin/bash
# SummitWave deployment with proper cache-busting for CSS/JS
SERVER="www269.your-server.de"
USER="summitb"
REMOTE_DIR="public_html"
LOCAL_DIR="$(dirname "$0")/src"
# === PASSWORD FROM ENVIRONMENT VARIABLE ===
# export SFTP_PASS='DeinSFTPPasswort'
if [ -z "$SFTP_PASS" ]; then
echo "Error: Please set the SFTP_PASS environment variable with your password."
exit 1
fi
# === CHECK sshpass INSTALLATION ===
if ! command -v sshpass &> /dev/null; then
echo "Error: sshpass is not installed. Install with: sudo apt install sshpass"
exit 1
fi
# === CREATE TEMPORARY WORKING COPY OF index_noSIG_AIopt.html WITH CACHE-BUSTING ===
CACHE_PARAM=$(date +%s) # Timestamp als Cache-Buster
TEMP_INDEX=$(mktemp)
# Nur CSS und JS Links in <link> und <script> anpassen
sed -E 's/(href="[^"]+\.css")/\1?v='"$CACHE_PARAM"'/g;
s/(src="[^"]+\.js")/\1?v='"$CACHE_PARAM"'/g' \
"$LOCAL_DIR/index_noSIG_AIopt.html" > "$TEMP_INDEX"
# === CREATE TEMPORARY SFTP BATCH FILE ===
BATCH_FILE=$(mktemp)
cat > "$BATCH_FILE" <<EOF
cd $REMOTE_DIR
# Upload modified index.html as index.html
put "$TEMP_INDEX" index.html
# Upload other static files
put "$LOCAL_DIR/impressum.html"
put "$LOCAL_DIR/robots.txt"
put "$LOCAL_DIR/sitemap.xml"
put "$LOCAL_DIR/.htaccess"
# Ensure img folder exists and upload images
mkdir img
cd img
put "$LOCAL_DIR/img/"*
bye
EOF
# === UPLOAD ALL FILES IN ONE SFTP SESSION ===
echo "Uploading website files to $USER@$SERVER:$REMOTE_DIR ..."
sshpass -p "$SFTP_PASS" sftp -oBatchMode=no -b "$BATCH_FILE" $USER@$SERVER
# === CLEANUP ===
rm "$BATCH_FILE" "$TEMP_INDEX"
echo "Deployment complete! Visit your website: http://www.summitwave.eu/?v=$CACHE_PARAM"

View File

@@ -1,200 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Consent Mode (default: denied) placed before GA -->
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('consent', 'default', {
'ad_storage': 'denied',
'analytics_storage': 'denied',
'functionality_storage': 'denied',
'personalization_storage': 'denied',
'security_storage': 'granted'
});
</script>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-WGTJPNLWV7"></script>
<script>
gtag('js', new Date());
gtag('config', 'G-WGTJPNLWV7');
</script>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>SummitWave | Wireless Audio Made Easy</title>
<meta name="description" content="SummitWave transmitters deliver crystal-clear, low-latency multichannel audio to everyone."/>
<meta name="robots" content="index,follow" />
<meta name="theme-color" content="#2563EB" />
<link rel="icon" type="image/x-icon" href="img/favicon.ico" />
<link rel="apple-touch-icon" href="img/favicon.ico" />
<link rel="canonical" href="https://summitwave.eu/" />
<link rel="alternate" hreflang="en" href="https://summitwave.eu/" />
<meta property="og:type" content="website"/>
<meta property="og:title" content="SummitWave | Wireless Audio Made Easy"/>
<meta property="og:description" content="Broadcast brilliant multichannel audio anywhere with SummitWave transmitters."/>
<meta property="og:url" content="https://summitwave.eu/"/>
<meta property="og:site_name" content="SummitWave"/>
<meta property="og:image" content="https://summitwave.eu/img/logo.png"/>
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="SummitWave | Wireless Audio Made Easy" />
<meta name="twitter:description" content="Broadcast brilliant multichannel audio anywhere with SummitWave transmitters." />
<meta name="twitter:image" content="https://summitwave.eu/img/logo.png" />
<!-- Tailwind via CDN for rapid styling -->
<link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
</head>
<body class="bg-white text-gray-800 leading-relaxed antialiased">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "SummitWave",
"url": "https://summitwave.eu/",
"inLanguage": "en",
"publisher": {
"@type": "Organization",
"name": "SummitWave",
"url": "https://summitwave.eu/",
"logo": {
"@type": "ImageObject",
"url": "https://summitwave.eu/img/logo.png"
}
}
}
</script>
<!-- =========== Header & Nav ============ -->
<header class="py-6 px-4 md:px-12 flex items-center justify-between">
<img src="img/logo.png" alt="SummitWave logo" class="h-24 md:h-28" />
<nav class="space-x-6 text-lg font-medium" aria-label="Primary">
<a href="#usecases" class="hover:text-blue-600">Use cases</a>
<a href="#why" class="hover:text-blue-600">Why Wireless Audio</a>
<a href="#features" class="hover:text-blue-600">Features</a>
<a href="#contact" class="hover:text-blue-600">Contact</a>
</nav>
</header>
<!-- =========== Hero =========== -->
<section class="flex flex-col items-center text-center mt-12 px-4">
<h1 class="text-4xl md:text-5xl font-bold text-blue-700">Crystal-clear audio, wherever it matters</h1>
<h2 class="mt-2 text-xl md:text-2xl text-gray-700">
Deliver immersive, low-latency sound directly to your audiences devices—perfect for venues, events, classrooms, and conferences.
</h2>
<img src="img/device.png" alt="SummitWave wireless audio transmitter" loading="lazy" class="mt-8 w-full max-w-md rounded-lg shadow-xl"/>
<a href="#contact" class="mt-8 inline-block bg-blue-600 text-white rounded-2xl px-8 py-3 shadow-lg transform transition hover:scale-105">
Get started today
</a>
</section>
<!-- =========== Use cases =========== -->
<section id="usecases" class="mt-24 bg-blue-50 py-16 px-4 md:px-12">
<h2 class="text-3xl md:text-4xl font-bold text-center text-blue-700">Use cases</h2>
<div class="mt-12 grid gap-10 md:grid-cols-3">
<div class="bg-white rounded-2xl p-6 shadow-lg flex flex-col">
<h3 class="text-xl font-semibold mb-2">Live Events & Festivals</h3>
<p>Multiple stages, multiple languages, zero coordination headaches. Guests select their preferred audio stream instantly on their own device.</p>
</div>
<div class="bg-white rounded-2xl p-6 shadow-lg flex flex-col">
<h3 class="text-xl font-semibold mb-2">Universities & Lecture Halls</h3>
<p>Provide clear lectures, simultaneous translations, and assistive listening. Students use personal devices—no extra hardware required.</p>
</div>
<div class="bg-white rounded-2xl p-6 shadow-lg flex flex-col">
<h3 class="text-xl font-semibold mb-2">Theaters & Cinemas</h3>
<p>Offer lip-synced audio, multilingual tracks, and audio descriptions without disturbing other audience members.</p>
</div>
<div class="bg-white rounded-2xl p-6 shadow-lg flex flex-col">
<h3 class="text-xl font-semibold mb-2">Conference Centers</h3>
<p>Stream presentations, breakouts, and overflow rooms effortlessly. Attendees join the stream on their own devices.</p>
</div>
<div class="bg-white rounded-2xl p-6 shadow-lg flex flex-col">
<h3 class="text-xl font-semibold mb-2">Rail & Transit Hubs</h3>
<p>Replace unclear announcements with on-demand, easy-to-access audio streams for schedules, tourist info, and emergency messages.</p>
</div>
</div>
</section>
<!-- =========== Wireless Audio Explainer ============ -->
<section id="why" class="mt-20 md:mt-24 pt-12 pb-10 px-4 md:px-12 border-t border-gray-200">
<h2 class="text-3xl md:text-4xl font-bold text-center mb-6 md:mb-8 text-blue-700 tracking-tight">Why Wireless Audio?</h2>
<p class="max-w-2xl mx-auto text-lg text-gray-700 text-center mb-6">
Our wireless audio platform allows venues and event organizers to broadcast multiple, low-latency audio streams simultaneously. Everyone can join instantly using their own device—no setup hassles, no extra hardware.
</p>
<ul class="max-w-4xl mx-auto grid gap-3 md:gap-4 md:grid-cols-2 text-lg">
<li class="leading-relaxed text-left"><span class="font-semibold text-gray-900">Instant access for everyone</span> <span class="text-gray-700">audiences use their own devices; no receivers or special equipment needed.</span></li>
<li class="leading-relaxed text-left"><span class="font-semibold text-gray-900">Inclusive listening</span> <span class="text-gray-700">fully compatible with modern hearing devices and personal audio equipment.</span></li>
<li class="leading-relaxed text-left"><span class="font-semibold text-gray-900">Perfectly synchronized</span> <span class="text-gray-700">low-latency streaming ensures lip-synced audio for presentations, video, and live performances.</span></li>
<li class="leading-relaxed text-left"><span class="font-semibold text-gray-900">Flexible & future-ready</span> <span class="text-gray-700">works with current devices and easily integrates into existing infrastructure.</span></li>
</ul>
</section>
<!-- =========== Features =========== -->
<section id="features" class="mt-24 px-4 md:px-12">
<h2 class="text-3xl md:text-4xl font-bold text-center mb-12 text-blue-700">Features</h2>
<div class="grid gap-8 md:grid-cols-3">
<div class="bg-white rounded-2xl p-6 shadow-lg">
<h3 class="text-xl font-semibold mb-2">Flexible Audio Inputs</h3>
<p>Connect existing equipment via AES67, USB, or web audio streams for seamless integration.</p>
</div>
<div class="bg-white rounded-2xl p-6 shadow-lg">
<h3 class="text-xl font-semibold mb-2">Multi-channel Streaming</h3>
<p>Broadcast up to six independent audio channels for translations, programs, or separate sessions.</p>
</div>
<div class="bg-white rounded-2xl p-6 shadow-lg">
<h3 class="text-xl font-semibold mb-2">Web-based Control</h3>
<p>Monitor, configure, and update from any device without installing software.</p>
</div>
<div class="bg-white rounded-2xl p-6 shadow-lg">
<h3 class="text-xl font-semibold mb-2">Smart Management</h3>
<p>Group transmitters, automate updates, and manage streams effortlessly.</p>
</div>
<div class="bg-white rounded-2xl p-6 shadow-lg">
<h3 class="text-xl font-semibold mb-2">Automated Deployment</h3>
<p>Full REST API enables integration into large-scale setups.</p>
</div>
<div class="bg-white rounded-2xl p-6 shadow-lg">
<h3 class="text-xl font-semibold mb-2">Compact & Efficient</h3>
<p>Discreet, versatile mounting options for any environment.</p>
</div>
</div>
</section>
<!-- =========== Contact ============ -->
<section id="contact" class="mt-24 bg-blue-700 text-white py-16 px-4 md:px-12 text-center">
<h2 class="text-3xl md:text-4xl font-bold mb-6">Lets bring your audio to life</h2>
<p class="max-w-2xl mx-auto mb-10 text-lg">Share your project details, and well help you implement the perfect wireless audio solution.</p>
<form action="https://formspree.io/f/xrbkynzk" method="POST" class="max-w-xl mx-auto flex flex-col gap-5 text-left">
<label class="block">
<span class="block mb-1 font-medium">Name</span>
<input type="text" name="name" placeholder="Your name" class="w-full px-4 py-3 rounded-lg text-gray-900 focus:ring-2 focus:ring-blue-400 border border-gray-300 focus:outline-none transition" />
</label>
<label class="block">
<span class="block mb-1 font-medium">Company</span>
<input type="text" name="venue" placeholder="Your company" class="w-full px-4 py-3 rounded-lg text-gray-900 focus:ring-2 focus:ring-blue-400 border border-gray-300 focus:outline-none transition" />
</label>
<label class="block">
<span class="block mb-1 font-medium">Email <span class="text-red-400">*</span></span>
<input type="email" name="email" placeholder="you@email.com" required class="w-full px-4 py-3 rounded-lg text-gray-900 focus:ring-2 focus:ring-blue-400 border border-gray-300 focus:outline-none transition" />
</label>
<label class="block">
<span class="block mb-1 font-medium">Message <span class="text-red-400">*</span></span>
<textarea name="message" placeholder="How can we help you?" required class="w-full px-4 py-3 rounded-lg text-gray-900 focus:ring-2 focus:ring-blue-400 border border-gray-300 focus:outline-none transition"></textarea>
</label>
<button type="submit" class="bg-white text-blue-700 rounded-2xl px-10 py-4 font-semibold shadow-lg transform transition hover:scale-105 focus:ring-2 focus:ring-blue-400 border border-blue-700">
Contact us!
</button>
</form>
</section>
<!-- =========== Footer ============ -->
<footer class="py-8 text-center text-sm text-gray-500">
<div class="space-x-4">
<span>&copy; 2025 SummitWave. All rights reserved.</span>
<a href="impressum.html" class="text-blue-700 hover:underline">Impressum</a>
</div>
</footer>
</body>
</html>

0
sftp
View File

View File

@@ -1,32 +1,10 @@
# Enable rewrite engine
RewriteEngine On
# Force HTTPS
# Force HTTPS first
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Redirect www to apex
RewriteCond %{HTTP_HOST} ^www\.summitwave\.eu$ [NC]
RewriteRule ^ https://summitwave.eu%{REQUEST_URI} [L,R=301]
# Canonicalize index.html to root
RewriteRule ^index\.html$ https://summitwave.eu/ [L,R=301]
# Cache static assets (adjust as needed)
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/webp "access plus 6 months"
ExpiresByType image/png "access plus 6 months"
ExpiresByType image/jpeg "access plus 6 months"
ExpiresByType image/svg+xml "access plus 6 months"
ExpiresByType image/x-icon "access plus 12 months"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
</IfModule>
# Security headers (best-effort; host must support)
<IfModule mod_headers.c>
Header set X-Content-Type-Options "nosniff"
Header set Referrer-Policy "strict-origin-when-cross-origin"
Header set X-Frame-Options "SAMEORIGIN"
</IfModule>
# 301 Redirect apex (summitwave.eu) to www.summitwave.eu
RewriteCond %{HTTP_HOST} ^summitwave\.eu$ [NC]
RewriteRule ^ https://www.summitwave.eu%{REQUEST_URI} [L,R=301]

View File

@@ -22,23 +22,23 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>SummitWave | Auracast made easy</title>
<meta name="description" content="SummitWave Auracast transmitters deliver crystal-clear, low-latency multichannel Bluetooth audio to everyone."/>
<title>SummitWave | Wireless Audio Made Easy</title>
<meta name="description" content="SummitWave transmitters deliver crystal-clear, low-latency multichannel audio to everyone."/>
<meta name="robots" content="index,follow" />
<meta name="theme-color" content="#2563EB" />
<link rel="icon" type="image/x-icon" href="img/favicon.ico" />
<link rel="apple-touch-icon" href="img/favicon.ico" />
<link rel="apple-touch-icon" href="img/favicon.ico" />
<link rel="canonical" href="https://summitwave.eu/" />
<link rel="alternate" hreflang="en" href="https://summitwave.eu/" />
<meta property="og:type" content="website"/>
<meta property="og:title" content="SummitWave | Auracast made easy"/>
<meta property="og:description" content="Broadcast brilliant multichannel audio anywhere with SummitWave Auracast transmitters."/>
<meta property="og:title" content="SummitWave | Wireless Audio Made Easy"/>
<meta property="og:description" content="Broadcast brilliant multichannel audio anywhere with SummitWave transmitters."/>
<meta property="og:url" content="https://summitwave.eu/"/>
<meta property="og:site_name" content="SummitWave"/>
<meta property="og:image" content="https://summitwave.eu/img/logo.png"/>
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="SummitWave | Auracast made easy" />
<meta name="twitter:description" content="Broadcast brilliant multichannel audio anywhere with SummitWave Auracast transmitters." />
<meta name="twitter:title" content="SummitWave | Wireless Audio Made Easy" />
<meta name="twitter:description" content="Broadcast brilliant multichannel audio anywhere with SummitWave transmitters." />
<meta name="twitter:image" content="https://summitwave.eu/img/logo.png" />
<!-- Tailwind via CDN for rapid styling -->
<link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
@@ -62,12 +62,13 @@
}
}
</script>
<!-- =========== Header & Nav =========== -->
<!-- =========== Header & Nav ============ -->
<header class="py-6 px-4 md:px-12 flex items-center justify-between">
<img src="img/logo.png" alt="SummitWave logo" class="h-24 md:h-28" />
<nav class="space-x-6 text-lg font-medium" aria-label="Primary">
<a href="#usecases" class="hover:text-blue-600">Use cases</a>
<a href="#why" class="hover:text-blue-600">Why Auracast</a>
<a href="#why" class="hover:text-blue-600">Why Wireless Audio</a>
<a href="#features" class="hover:text-blue-600">Features</a>
<a href="#contact" class="hover:text-blue-600">Contact</a>
</nav>
@@ -75,11 +76,13 @@
<!-- =========== Hero =========== -->
<section class="flex flex-col items-center text-center mt-12 px-4">
<h1 class="text-4xl md:text-5xl font-bold text-blue-700">Clear, personal audio for everyone</h1>
<h2 class="mt-2 text-xl md:text-2xl text-gray-700">For venues, integrators, and event pros who need low latency sound delivered to personal devices.</h2>
<img src="img/device.png" alt="SummitWave Auracast transmitter" loading="lazy" class="mt-8 w-full max-w-md rounded-lg shadow-xl"/>
<h1 class="text-4xl md:text-5xl font-bold text-blue-700">Crystal-clear audio, wherever it matters</h1>
<h2 class="mt-2 text-xl md:text-2xl text-gray-700">
Deliver immersive, low-latency sound directly to your audiences devices—perfect for venues, events, classrooms, and conferences.
</h2>
<img src="img/device.png" alt="SummitWave wireless audio transmitter" loading="lazy" class="mt-8 w-full max-w-md rounded-lg shadow-xl"/>
<a href="#contact" class="mt-8 inline-block bg-blue-600 text-white rounded-2xl px-8 py-3 shadow-lg transform transition hover:scale-105">
Get in touch
Get started today
</a>
</section>
@@ -89,168 +92,109 @@
<div class="mt-12 grid gap-10 md:grid-cols-3">
<div class="bg-white rounded-2xl p-6 shadow-lg flex flex-col">
<h3 class="text-xl font-semibold mb-2">Live Events & Festivals</h3>
<p>Multiple stages and languages without RFcoordination headaches. Guests choose channels on their own devices.</p>
<p>Multiple stages, multiple languages, zero coordination headaches. Guests select their preferred audio stream instantly on their own device.</p>
</div>
<div class="bg-white rounded-2xl p-6 shadow-lg flex flex-col">
<h3 class="text-xl font-semibold mb-2">Universities & Lecture Halls</h3>
<p>Stream the lecturers voice, assistive listening, and multiple language channels. Attendees listen on their own phones, earbuds, or hearing devices—no receivers to hand out.</p>
<h3 class="text-xl font-semibold mb-2">Universities & Lecture Halls</h3>
<p>Provide clear lectures, simultaneous translations, and assistive listening. Students use personal devices—no extra hardware required.</p>
</div>
<div class="bg-white rounded-2xl p-6 shadow-lg flex flex-col">
<h3 class="text-xl font-semibold mb-2">Theaters & Cinemas</h3>
<p>Lipsynced assisted listening, audio description, and multilingual tracks—without disturbing others.</p>
<p>Offer lip-synced audio, multilingual tracks, and audio descriptions without disturbing other audience members.</p>
</div>
<div class="bg-white rounded-2xl p-6 shadow-lg flex flex-col">
<h3 class="text-xl font-semibold mb-2">Conference Centers</h3>
<p>Serve overflow rooms, breakouts, and press feeds without extra cabling. Attendees select their preferred language or program on their devices.</p>
<h3 class="text-xl font-semibold mb-2">Conference Centers</h3>
<p>Stream presentations, breakouts, and overflow rooms effortlessly. Attendees join the stream on their own devices.</p>
</div>
<div class="bg-white rounded-2xl p-6 shadow-lg flex flex-col">
<h3 class="text-xl font-semibold mb-2">Rail & Transit Hubs</h3>
<p>Replace unintelligible PA with clear, ondemand streams for announcements, tourist info, and emergency messages.</p>
<h3 class="text-xl font-semibold mb-2">Rail & Transit Hubs</h3>
<p>Replace unclear announcements with on-demand, easy-to-access audio streams for schedules, tourist info, and emergency messages.</p>
</div>
</div>
</section>
<!-- Hero moved to top -->
<!-- =========== Auracast Explainer =========== -->
<!-- =========== Wireless Audio Explainer ============ -->
<section id="why" class="mt-20 md:mt-24 pt-12 pb-10 px-4 md:px-12 border-t border-gray-200">
<h2 class="text-3xl md:text-4xl font-bold text-center mb-6 md:mb-8 text-blue-700 tracking-tight">Why Auracast?</h2>
<p class="max-w-2xl mx-auto text-lg text-gray-700 text-center mb-6">Auracast is a Bluetooth LE Audio broadcast technology that lets venues transmit onetomany, lowlatency audio streams that anyone can join with their own device.</p>
<h2 class="text-3xl md:text-4xl font-bold text-center mb-6 md:mb-8 text-blue-700 tracking-tight">Why Wireless Audio?</h2>
<p class="max-w-2xl mx-auto text-lg text-gray-700 text-center mb-6">
Our wireless audio platform allows venues and event organizers to broadcast multiple, low-latency audio streams simultaneously. Everyone can join instantly using their own device—no setup hassles, no extra hardware.
</p>
<ul class="max-w-4xl mx-auto grid gap-3 md:gap-4 md:grid-cols-2 text-lg">
<li class="leading-relaxed text-left"><span class="font-semibold text-gray-900">Widespread adoption</span> <span class="text-gray-700">supported across modern smartphones, earbuds, and hearing devices via Bluetooth LE Audio/Auracast.</span></li>
<li class="leading-relaxed text-left"><span class="font-semibold text-gray-900">Accessibility</span> <span class="text-gray-700">inclusive listening for people with hearing devices; compatible with modern hearing aids and cochlear implants that support Bluetooth LE Audio/Auracast.</span></li>
<li class="leading-relaxed text-left"><span class="font-semibold text-gray-900">Device Independence</span> <span class="text-gray-700">listeners use their own phones, earbuds, or hearing aids.</span></li>
<li class="leading-relaxed text-left"><span class="font-semibold text-gray-900">Low Latency</span> <span class="text-gray-700">lipsynced speech for presentations, video and live performances.</span></li>
<li class="leading-relaxed text-left"><span class="font-semibold text-gray-900">Instant access for everyone</span> <span class="text-gray-700">audiences use their own devices; no receivers or special equipment needed.</span></li>
<li class="leading-relaxed text-left"><span class="font-semibold text-gray-900">Inclusive listening</span> <span class="text-gray-700">fully compatible with modern hearing devices and personal audio equipment.</span></li>
<li class="leading-relaxed text-left"><span class="font-semibold text-gray-900">Perfectly synchronized</span> <span class="text-gray-700">low-latency streaming ensures lip-synced audio for presentations, video, and live performances.</span></li>
<li class="leading-relaxed text-left"><span class="font-semibold text-gray-900">Flexible & future-ready</span> <span class="text-gray-700">works with current devices and easily integrates into existing infrastructure.</span></li>
</ul>
</section>
<!-- =========== Features (moved below Why) =========== -->
<!-- =========== Features =========== -->
<section id="features" class="mt-24 px-4 md:px-12">
<h2 class="text-3xl md:text-4xl font-bold text-center mb-12 text-blue-700">Features</h2>
<div class="grid gap-8 md:grid-cols-3">
<div class="bg-white rounded-2xl p-6 shadow-lg">
<h3 class="text-xl font-semibold mb-2">Flexible audio input options</h3>
<p>Native <strong>AES67</strong> compatibility, USB audio and web audio inputs ensure seamless integration with existing technology and make usage simple.</p>
<h3 class="text-xl font-semibold mb-2">Flexible Audio Inputs</h3>
<p>Connect existing equipment via AES67, USB, or web audio streams for seamless integration.</p>
</div>
<div class="bg-white rounded-2xl p-6 shadow-lg">
<h3 class="text-xl font-semibold mb-2">Multicast audio</h3>
<p>Broadcast up to six simultaneous audio channels — perfect for multilanguage or program feeds. Flexible channel configuration options.</p>
<h3 class="text-xl font-semibold mb-2">Multi-channel Streaming</h3>
<p>Broadcast up to six independent audio channels for translations, programs, or separate sessions.</p>
</div>
<div class="bg-white rounded-2xl p-6 shadow-lg">
<h3 class="text-xl font-semibold mb-2">WebBased Control</h3>
<p>Configure, monitor, and update from any device—no additional software needed.</p>
<h3 class="text-xl font-semibold mb-2">Web-based Control</h3>
<p>Monitor, configure, and update from any device without installing software.</p>
</div>
<div class="bg-white rounded-2xl p-6 shadow-lg">
<h3 class="text-xl font-semibold mb-2">Smart features</h3>
<p>Group multiple transmitters to send the same audio stream.</p>
<p>Integrated multichannel translation keeps every attendee posted.</p>
<p>Auto-detect sources and load OTA firmware updates with a click.</p>
<h3 class="text-xl font-semibold mb-2">Smart Management</h3>
<p>Group transmitters, automate updates, and manage streams effortlessly.</p>
</div>
<div class="bg-white rounded-2xl p-6 shadow-lg">
<h3 class="text-xl font-semibold mb-2">Automate deployment</h3>
<p>Comprehensive REST API for automated deployment and management.</p>
<h3 class="text-xl font-semibold mb-2">Automated Deployment</h3>
<p>Full REST API enables integration into large-scale setups.</p>
</div>
<div class="bg-white rounded-2xl p-6 shadow-lg">
<h3 class="text-xl font-semibold mb-2">Compact & Efficient</h3>
<p>Flexible mounting options with screws, cable ties, or adhesive mounting.</p>
<p>Discreet, versatile mounting options for any environment.</p>
</div>
</div>
</section>
<!-- =========== Contact =========== -->
<!-- =========== Contact ============ -->
<section id="contact" class="mt-24 bg-blue-700 text-white py-16 px-4 md:px-12 text-center">
<h2 class="text-3xl md:text-4xl font-bold mb-6">Ready to elevate your audio?</h2>
<p class="max-w-2xl mx-auto mb-10 text-lg">Tell us about you and we'll get in touch.</p>
<h2 class="text-3xl md:text-4xl font-bold mb-6">Lets bring your audio to life</h2>
<p class="max-w-2xl mx-auto mb-10 text-lg">Share your project details, and well help you implement the perfect wireless audio solution.</p>
<form action="https://formspree.io/f/xrbkynzk" method="POST" class="max-w-xl mx-auto flex flex-col gap-5 text-left">
<label class="block">
<span class="block mb-1 font-medium">Name</span>
<input type="text" name="name" placeholder="Your name" class="w-full px-4 py-3 rounded-lg text-gray-900 focus:ring-2 focus:ring-blue-400 border border-gray-300 focus:outline-none transition" />
</label>
<label class="block">
<span class="block mb-1 font-medium">Company</span>
<input type="text" name="venue" placeholder="Your company" class="w-full px-4 py-3 rounded-lg text-gray-900 focus:ring-2 focus:ring-blue-400 border border-gray-300 focus:outline-none transition" />
</label>
<label class="block">
<span class="block mb-1 font-medium">Email <span class="text-red-400">*</span></span>
<input type="email" name="email" placeholder="you@email.com" required class="w-full px-4 py-3 rounded-lg text-gray-900 focus:ring-2 focus:ring-blue-400 border border-gray-300 focus:outline-none transition" />
</label>
<label class="block">
<span class="block mb-1 font-medium">Message <span class="text-red-400">*</span></span>
<textarea name="message" placeholder="How can we help you?" required class="w-full px-4 py-3 rounded-lg text-gray-900 focus:ring-2 focus:ring-blue-400 border border-gray-300 focus:outline-none transition"></textarea>
</label>
<button type="submit" class="bg-white text-blue-700 rounded-2xl px-10 py-4 font-semibold shadow-lg transform transition hover:scale-105 focus:ring-2 focus:ring-blue-400 border border-blue-700">
Contact us!
</button>
</form>
<label class="block">
<span class="block mb-1 font-medium">Name</span>
<input type="text" name="name" placeholder="Your name" class="w-full px-4 py-3 rounded-lg text-gray-900 focus:ring-2 focus:ring-blue-400 border border-gray-300 focus:outline-none transition" />
</label>
<label class="block">
<span class="block mb-1 font-medium">Company</span>
<input type="text" name="venue" placeholder="Your company" class="w-full px-4 py-3 rounded-lg text-gray-900 focus:ring-2 focus:ring-blue-400 border border-gray-300 focus:outline-none transition" />
</label>
<label class="block">
<span class="block mb-1 font-medium">Email <span class="text-red-400">*</span></span>
<input type="email" name="email" placeholder="you@email.com" required class="w-full px-4 py-3 rounded-lg text-gray-900 focus:ring-2 focus:ring-blue-400 border border-gray-300 focus:outline-none transition" />
</label>
<label class="block">
<span class="block mb-1 font-medium">Message <span class="text-red-400">*</span></span>
<textarea name="message" placeholder="How can we help you?" required class="w-full px-4 py-3 rounded-lg text-gray-900 focus:ring-2 focus:ring-blue-400 border border-gray-300 focus:outline-none transition"></textarea>
</label>
<button type="submit" class="bg-white text-blue-700 rounded-2xl px-10 py-4 font-semibold shadow-lg transform transition hover:scale-105 focus:ring-2 focus:ring-blue-400 border border-blue-700">
Contact us!
</button>
</form>
</section>
<!-- =========== Footer =========== -->
<!-- =========== Footer ============ -->
<footer class="py-8 text-center text-sm text-gray-500">
<div class="space-x-4">
<span>&copy; 2025 SummitWave. All rights reserved.</span>
<span>&copy; 2025 SummitWave. All rights reserved.</span>
<a href="impressum.html" class="text-blue-700 hover:underline">Impressum</a>
</div>
</footer>
<!-- Cookie consent modal -->
<div id="cookie-banner" class="fixed inset-0 z-50 hidden" aria-hidden="true">
<!-- Backdrop -->
<div class="absolute inset-0 bg-black/40"></div>
<!-- Modal -->
<div class="relative h-full w-full flex items-center justify-center p-4">
<div role="dialog" aria-modal="true" aria-labelledby="cookie-title" class="w-full max-w-lg rounded-2xl bg-white shadow-xl border border-gray-200 p-6">
<h2 id="cookie-title" class="text-lg font-semibold text-gray-900 mb-2">Cookies & privacy</h2>
<p class="text-sm text-gray-700 mb-4">
We use analytics cookies to understand how our site is used and to improve your experience.
You can accept or reject analytics cookies. See our <a href="impressum.html" class="text-blue-700 hover:underline">Impressum</a> for details.
</p>
<div class="flex flex-col sm:flex-row gap-3 justify-end">
<button onclick="rejectCookies()" class="px-4 py-2 rounded-lg border border-gray-300 text-gray-700 hover:bg-gray-50 text-sm">Reject</button>
<button onclick="acceptCookies()" class="px-4 py-2 rounded-lg bg-blue-600 text-white hover:bg-blue-700 text-sm">Accept</button>
</div>
</div>
</div>
</div>
<script>
(function(){
const KEY = 'sw_consent_v1';
const banner = document.getElementById('cookie-banner');
function updateConsent(status){
// Persist and update GA consent
localStorage.setItem(KEY, status);
if (typeof gtag === 'function') {
gtag('consent', 'update', {
'analytics_storage': status,
'functionality_storage': status,
'ad_storage': 'denied'
});
}
}
window.acceptCookies = function(){
updateConsent('granted');
banner.classList.add('hidden');
document.body.classList.remove('overflow-hidden');
};
window.rejectCookies = function(){
updateConsent('denied');
banner.classList.add('hidden');
document.body.classList.remove('overflow-hidden');
};
const saved = localStorage.getItem(KEY);
if (saved === 'granted' || saved === 'denied') {
// Apply saved preference on load
updateConsent(saved);
} else {
// No preference yet: show banner and lock scroll
banner.classList.remove('hidden');
document.body.classList.add('overflow-hidden');
}
})();
</script>
</body>
</html>
</body>
</html>

8
src/manual/.htaccess Normal file
View File

@@ -0,0 +1,8 @@
# Ensure PHP index is used in /manual/
DirectoryIndex index.php
<IfModule mod_rewrite.c>
RewriteEngine On
# Redirect direct hits of index.html to index.php (login-guarded)
RewriteRule ^index\.html$ index.php [L,R=302]
</IfModule>

View File

@@ -0,0 +1,15 @@
<?php
// Zentrale Benutzerverwaltung
// Benutzername => Passwort (Klartext)
// Für mehr Sicherheit kann später auf gehashte Passwörter umgestellt werden.
return [
'users' => [
'summitwave_malte' => 'M8uN3fZq!c2Lx9Pt',
'summitwave_patrick' => 'S4rK7vBw#h1Dz6Qe',
'ellerbrock_konferenztechnik' => 'E9pL2mTy@k5Vg8Rs',
'admin_uibk' => 'U7bK4nWx#j3Fp9Ct',
'julia_steiner' => 'J5sT8mRq@v2Lh6Yd',
'summitwave_general' => 'G3nR9kPw!e1Bz4Xm',
],
];

87
src/manual/auth.php Normal file
View File

@@ -0,0 +1,87 @@
<?php
session_start();
const SW_MANUAL_LOG_FILE = __DIR__ . '/logs/access.log';
function sw_load_users(): array {
$cfgPath = __DIR__ . '/auth.config.php';
if (!file_exists($cfgPath)) {
return [];
}
$cfg = require $cfgPath;
return $cfg['users'] ?? [];
}
function sw_verify_login(string $username, string $password): bool {
$users = sw_load_users();
if (!isset($users[$username])) {
return false;
}
$expected = (string)$users[$username];
return hash_equals($expected, $password);
}
function sw_current_user(): ?string {
return $_SESSION['sw_manual_user'] ?? null;
}
function sw_require_login(): void {
if (!sw_current_user()) {
header('Location: login.php');
exit;
}
}
function sw_record_login(string $username): void {
$dir = dirname(SW_MANUAL_LOG_FILE);
if (!is_dir($dir)) {
@mkdir($dir, 0775, true);
}
$ts = (new DateTimeImmutable('now', new DateTimeZone('Europe/Berlin')))->format(DateTimeInterface::ATOM);
$ip = $_SERVER['REMOTE_ADDR'] ?? '-';
$ua = $_SERVER['HTTP_USER_AGENT'] ?? '-';
$line = $ts . ';' . $username . ';' . $ip . ';' . str_replace("\n", ' ', $ua) . "\n";
@file_put_contents(SW_MANUAL_LOG_FILE, $line, FILE_APPEND | LOCK_EX);
}
function sw_last_login_for_user(string $username): ?DateTimeImmutable {
if (!file_exists(SW_MANUAL_LOG_FILE)) {
return null;
}
$fh = @fopen(SW_MANUAL_LOG_FILE, 'r');
if (!$fh) {
return null;
}
$last = null;
while (($line = fgets($fh)) !== false) {
$parts = explode(';', trim($line));
if (count($parts) < 2) {
continue;
}
[$ts, $user] = $parts;
if ($user !== $username) {
continue;
}
try {
$dt = new DateTimeImmutable($ts);
if ($last === null || $dt > $last) {
$last = $dt;
}
} catch (Exception $e) {
continue;
}
}
fclose($fh);
return $last;
}
function sw_format_dt(?DateTimeImmutable $dt): string {
if ($dt === null) {
return '';
}
return $dt->setTimezone(new DateTimeZone('Europe/Berlin'))->format('d.m.Y, H:i \U\h\r');
}

BIN
src/manual/beacon-front.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 MiB

View File

@@ -0,0 +1,30 @@
-----BEGIN CERTIFICATE-----
MIIFDzCCAvegAwIBAgIUJkOMN61fArjxyeFLR1u2PnoUCogwDQYJKoZIhvcNAQEL
BQAwFzEVMBMGA1UEAwwMU3VtbWl0V2F2ZUNBMB4XDTI1MDYyOTE0MzMyOVoXDTQ1
MDYyNDE0MzMyOVowFzEVMBMGA1UEAwwMU3VtbWl0V2F2ZUNBMIICIjANBgkqhkiG
9w0BAQEFAAOCAg8AMIICCgKCAgEAnU1k3Yasc2mFCHNdBzf76Y7NTUIy50577fJL
kVVjwxUsUzimj6hkeTd16o5EsmTpW19/N8o/JJ1j3ne37EB8vm0q9H7yyN0fx+Gy
uJujmqu5ZG9+ow+kbqpxJUbRMmDkZqsF6/XHfNMUQLK5vVH219xmW/hgxdEB4o50
jF25+jhUuolVYybhLT9AGtXhpqExmCn/o78I97+GtYNdkY8cwCt/khftM4DRDeEA
NdyVUWHG2sWqgx0BpgyL9gH/YwfeqBrjFmhh1VbgPCdgypwRV6YHVUqPtmSL7H7q
CmX8/ccyS6Cif9z/rsb1KwSeOgNKqV3D5DN3Qrboy9NmbWKXmhnF3Pl0EQ5f2/WS
xN+NKo8LNyZErQ27jZ6Xn9rVBRQ4rTw5oVf5hi6bOZcW2GNIQhQomQy83ohwFDnW
6aLsBag4/lGJFS+QpRAwIvFY4R559Ki3xndUQpvbt0KHIUNTlWddACm1tkcgXEGF
GJRZMBcKlyNdM5cRjhMtuZljoY2nHdfouiy4SETHgFFVvIZ2uOZLikljkL7cnWqF
0DZh9MxIZqZEoffSDRCRdlhmPITwuacGTFBNAmiGqg463rNmzcyc5JOoPUQrcSy1
0F5Ig16tiGjpgNtqyBen0r0udEoU1bBF/kxhAQCbam/IqpTtR+ouRnnbE4ST2zV6
IXc4mPcCAwEAAaNTMFEwHQYDVR0OBBYEFOsaKvMh7Lr+/O620X2uzHxlnvmzMB8G
A1UdIwQYMBaAFOsaKvMh7Lr+/O620X2uzHxlnvmzMA8GA1UdEwEB/wQFMAMBAf8w
DQYJKoZIhvcNAQELBQADggIBAAxq7hy9xgDCxwZOQX8Z5iBIK3agXUads7m91TcH
/EzFfJsUDOpDsSi58wIXuCmiJ+qe2S+hJxghLNsqm01DosPuNLNI0gCDg+glx5z5
ADtY0EJb7mRH+xuFC1GBdP7ve3REvfi7WC9snrqBUji/xL4VycaOyTDGOxWaHlyZ
u876I6/+xkj5hkhM1bsbEcGZ81QnTaJyeVtHTRYaORPAb2FP2V65MTn18Pu08i4T
bzh0KAsoDkwKvoEK24T5xFEUCuLexQ+6fabYXGro3It9VmAbrtkSyX8Z1eO7rVCu
hsUrA6UDzTerX1pWafeftpKiH7YiOaYYOAVcqDn+WKwYq3MPafNJp8x8HV1eeWYD
dx9HBKuvlOsoxnjJMnYusmQZyJk1EJR03najrV7HH8cyU2gfNyBwfsr6nU+FnDOX
qL2P0nWDjBkfjQRvmG59YLDVZYhw30+lishpmMLGZGwRFCjMCHD7rAdQTB3dtCP6
NqaGogwitIdIITBtyV1ZABoE3vQuUAKZChU+DsSKniyFitKDQrXP+rwcX5Y5/pS1
S1s6ITgllbErKqAoeelEVkJyiWykEtrtdcD0DXTr/QY4GzXeMi9u+dMXUOt95Md2
lQVAaFIX8QxbmHXen6GsXeHhPpPw8sXtC6rh7aqSCqqB6EDS77mjrGHXbSeBS5aq
MklC
-----END CERTIFICATE-----

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

1092
src/manual/index.html Normal file

File diff suppressed because it is too large Load Diff

744
src/manual/index.html.bak Normal file
View File

@@ -0,0 +1,744 @@
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Summitwave Beacon OnlineAnleitung</title>
<style>
:root {
/* Farben und Flächen an Auracast UI angelehnt */
--bg: #101218;
--panel: #181b22;
--panel2: #1f232b;
--text: #f5f5f7;
--muted: #9ca3af;
--link: #11b6ad;
--accent: #11b6ad; /* Teal Accent wie Dropdowns/Buttons */
--border: rgba(0,0,0,.7);
--shadow: 0 18px 40px rgba(0,0,0,.65);
--radius: 16px;
--max: 1040px;
--mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
--sans: system-ui, -apple-system, BlinkMacSystemFont, "Ubuntu", "Segoe UI", sans-serif;
}
* { box-sizing: border-box; }
html, body { height: 100%; }
body {
margin: 0;
font-family: var(--sans);
color: var(--text);
background: radial-gradient(1400px 900px at 0% -10%, rgba(0,0,0,.65), transparent 60%),
radial-gradient(1100px 800px at 100% 110%, rgba(0,0,0,.8), transparent 70%),
var(--bg);
line-height: 1.55;
}
a { color: var(--link); text-decoration: none; }
a:hover { text-decoration: none; opacity: .9; }
code, .mono { font-family: var(--mono); }
.topbar {
position: sticky; top: 0; z-index: 100;
backdrop-filter: blur(14px);
background: rgba(16,18,24,.96);
border-bottom: 1px solid rgba(0,0,0,.8);
}
.topbar .inner {
max-width: var(--max);
margin: 0 auto;
padding: 14px 18px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
}
.brand {
display: flex; align-items: baseline; gap: 10px;
font-weight: 650;
letter-spacing: .2px;
white-space: nowrap;
}
.brand small { color: var(--muted); font-weight: 500; }
.badge {
font-size: 12px;
padding: 4px 10px;
border-radius: 999px;
color: var(--text);
background: rgba(17,182,173,.12);
border: 1px solid rgba(17,182,173,.7);
font-weight: 600;
}
.layout {
max-width: var(--max);
margin: 24px auto 72px;
padding: 0 20px;
display: grid;
grid-template-columns: 260px 1fr;
gap: 18px;
}
nav.toc {
position: sticky;
top: 72px;
align-self: start;
border: 1px solid rgba(0,0,0,.8);
background: var(--panel);
border-radius: var(--radius);
box-shadow: var(--shadow);
padding: 14px 14px 6px;
}
nav.toc h2 {
margin: 0 0 10px;
font-size: 14px;
letter-spacing: .4px;
text-transform: uppercase;
color: var(--muted);
}
nav.toc ul { margin: 0; padding: 0 0 8px 18px; }
nav.toc li { margin: 7px 0; }
nav.toc a { color: var(--text); }
nav.toc a:hover { color: var(--accent); text-decoration: none; }
.toc-mobile {
display: none;
max-width: var(--max);
margin: 16px auto 0;
padding: 0 18px;
}
.toc-mobile details {
border: 1px solid var(--border);
background: rgba(16,24,39,.75);
border-radius: var(--radius);
box-shadow: var(--shadow);
padding: 10px 12px;
}
.toc-mobile summary {
cursor: pointer;
font-weight: 650;
}
article {
border: 1px solid rgba(0,0,0,.8);
background: var(--panel2);
border-radius: var(--radius);
box-shadow: var(--shadow);
padding: 20px 22px 14px;
}
section {
padding: 10px 0 18px;
border-bottom: 1px solid var(--border);
}
section:last-child { border-bottom: 0; padding-bottom: 6px; }
h1 {
margin: 6px 0 6px;
font-size: clamp(26px, 3vw, 36px);
line-height: 1.15;
letter-spacing: -.2px;
}
h2 {
margin: 10px 0 8px;
font-size: 20px;
letter-spacing: -.02em;
}
h3 {
margin: 14px 0 8px;
font-size: 16px;
color: #f3f4f6;
}
p { margin: 10px 0; color: var(--text); }
.muted { color: var(--muted); }
.hero {
display: grid;
grid-template-columns: 1.2fr 1fr;
gap: 16px;
align-items: center;
}
.hero-card {
border: 1px solid rgba(0,0,0,.8);
background: var(--panel);
border-radius: var(--radius);
padding: 16px 18px;
}
.hero img {
width: 100%;
height: auto;
border-radius: 12px;
background: white;
}
.kpi {
display: grid;
grid-template-columns: repeat(2, minmax(0,1fr));
gap: 10px;
margin-top: 12px;
}
.kpi div {
border: 1px solid var(--border);
border-radius: 12px;
padding: 10px 10px;
background: #22252d;
}
.kpi .label { font-size: 12px; color: var(--muted); }
.kpi .value { font-weight: 650; }
.callout {
border: 1px solid rgba(160,137,46,.8);
background: rgba(160,137,46,.26);
border-radius: 12px;
padding: 12px 12px;
margin: 12px 0;
}
.warn {
border: 1px solid rgba(251,191,36,.6);
background: rgba(251,191,36,.18);
}
.danger {
border: 1px solid rgba(248,113,113,.7);
background: rgba(248,113,113,.16);
}
table {
width: 100%;
border-collapse: collapse;
margin: 10px 0 6px;
overflow: hidden;
border-radius: 12px;
border: 1px solid var(--border);
background: rgba(15,23,42,.55);
}
th, td {
padding: 10px 10px;
border-bottom: 1px solid var(--border);
vertical-align: top;
text-align: left;
}
th {
font-size: 13px;
color: var(--muted);
font-weight: 650;
text-transform: uppercase;
letter-spacing: .3px;
}
tr:last-child td { border-bottom: 0; }
.grid2 {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 12px;
}
figure {
margin: 12px 0;
border-radius: 14px;
overflow: hidden;
background: var(--panel);
border: 1px solid rgba(0,0,0,.8);
}
figcaption {
padding: 10px 10px;
color: var(--muted);
font-size: 13px;
border-top: 1px solid var(--border);
}
.pill {
display: inline-block;
padding: 3px 11px;
border-radius: 999px;
font-size: 12px;
color: var(--text);
margin-right: 6px;
margin-bottom: 6px;
background: rgba(17,182,173,.10);
border: 1px solid rgba(17,182,173,.7);
}
.foot {
margin-top: 8px;
font-size: 13px;
color: var(--muted);
}
@media (max-width: 980px) {
.layout {
grid-template-columns: 1fr;
}
nav.toc { display: none; }
.toc-mobile { display: block; }
.hero { grid-template-columns: 1fr; }
.grid2 { grid-template-columns: 1fr; }
}
@media print {
.topbar, nav.toc, .toc-mobile { display: none !important; }
body { background: #fff; color: #000; }
article { box-shadow: none; border: none; background: #fff; }
section { border-bottom: 1px solid #ddd; }
a { color: #000; text-decoration: underline; }
}
</style>
<meta name="robots" content="noindex, nofollow, noarchive"/>
</head>
<body>
<div class="topbar">
<div class="inner">
<div class="brand">
Summitwave Beacon <small>OnlineAnleitung</small>
</div>
<div class="badge">Stand: 2025-12-13</div>
</div>
</div>
<div class="toc-mobile">
<details>
<summary>Inhalt (Tippen zum Öffnen)</summary>
<ul>
<li><a href="#start">Start</a></li>
<li><a href="#sicherheit">Sicherheitshinweise</a></li>
<li><a href="#konformitaet">CE & Konformität</a></li>
<li><a href="#produkt">Produktübersicht</a></li>
<li><a href="#anschluesse">Anschlüsse & Bedienelemente</a></li>
<li><a href="#installation">Installation & Montage</a></li>
<li><a href="#netzwerk">Netzwerk & Zugriff</a></li>
<li><a href="#quickstart">Quick Start</a></li>
<li><a href="#webui">Web-UI: Überblick</a></li>
<li><a href="#audio-mode">Web-UI: Audio Mode</a></li>
<li><a href="#radio">Web-UI: Radios konfigurieren</a></li>
<li><a href="#betrieb">Betrieb (Workflows)</a></li>
<li><a href="#wartung">Wartung & Updates</a></li>
<li><a href="#troubleshooting">Fehlerbehebung</a></li>
<li><a href="#techdata">Technische Daten</a></li>
<li><a href="#anhang">Anhang / Glossar</a></li>
</ul>
</details>
</div>
<main class="layout">
<nav class="toc" aria-label="Inhaltsverzeichnis">
<h2>Inhalt</h2>
<ul>
<li><a href="#start">Start</a></li>
<li><a href="#sicherheit">Sicherheitshinweise</a></li>
<li><a href="#konformitaet">CE & Konformität</a></li>
<li><a href="#produkt">Produktübersicht</a></li>
<li><a href="#anschluesse">Anschlüsse & Bedienelemente</a></li>
<li><a href="#installation">Installation & Montage</a></li>
<li><a href="#netzwerk">Netzwerk & Zugriff</a></li>
<li><a href="#quickstart">Quick Start</a></li>
<li><a href="#webui">Web-UI: Überblick</a></li>
<li><a href="#audio-mode">Web-UI: Audio Mode</a></li>
<li><a href="#radio">Web-UI: Radios konfigurieren</a></li>
<li><a href="#betrieb">Betrieb (Workflows)</a></li>
<li><a href="#wartung">Wartung & Updates</a></li>
<li><a href="#troubleshooting">Fehlerbehebung</a></li>
<li><a href="#techdata">Technische Daten</a></li>
<li><a href="#anhang">Anhang / Glossar</a></li>
</ul>
<p class="foot">
Tipp: Du kannst AbschnittLinks direkt teilen (URL mit <span class="mono">#kapitel</span>).
</p>
</nav>
<article>
<section id="start">
<div class="hero">
<div class="hero-card">
<h1>Summitwave Beacon</h1>
<p class="muted">MultikanalAuracast™ Sender für professionelle AudioInstallationen.</p>
<div class="kpi" role="list">
<div role="listitem"><div class="label">Streams</div><div class="value">bis zu 6 parallel</div></div>
<div role="listitem"><div class="label">Funk</div><div class="value">2,4&nbsp;GHz · max. +10&nbsp;dBm</div></div>
<div role="listitem"><div class="label">AudioInputs</div><div class="value">2× symm. XLR/TRS</div></div>
<div role="listitem"><div class="label">Strom</div><div class="value">PoE (802.3af) oder USBC 5&nbsp;V</div></div>
</div>
<div class="callout">
<strong>QuickNavigation:</strong>
<span class="pill"><a href="#quickstart">Quick Start</a></span>
<span class="pill"><a href="#webui">WebUI</a></span>
<span class="pill"><a href="#techdata">Technische Daten</a></span>
<span class="pill"><a href="#konformitaet">CEInfos</a></span>
</div>
<p class="foot">
Hersteller: Summitwave FlexCo · Hinterwaldnerstraße 16a · 6020 Innsbruck · Österreich ·
<span class="mono">info@summitwave.eu</span>
</p>
</div>
<figure>
<img src="./beacon-front.jpg" alt="Screenshot des WebInterface: Auracast Audio Mode Control" style="width:100%; height:auto;"/>
<figcaption>Abb. 2: WebUI (Beispiel). Globale Einstellung „Audio Mode“ + RadioKonfigurationen.</figcaption>
</figure>
</div>
</section>
<section id="dokumentkontrolle">
<h2>0. Dokumentkontrolle</h2>
<h3>0.1 Dokumenttitel, Produkt, Versionen</h3>
<p>Diese Anleitung beschreibt Installation, Konfiguration, Betrieb und Wartung des Produkts <strong>Summitwave Beacon</strong>. Die Inhalte beziehen sich auf die in der Kopfzeile genannte Hardware, Firmware und UIVersion.</p>
<p class="muted">Beispiel: „Summitwave Beacon Betriebsanleitung, HW&nbsp;v1.x, FW&nbsp;v1.x, WebUI&nbsp;v1.x“.</p>
<h3>0.2 Änderungsverlauf</h3>
<table aria-label="Änderungsverlauf">
<thead>
<tr><th>Version</th><th>Datum</th><th>Beschreibung</th></tr>
</thead>
<tbody>
<tr><td>1.0</td><td>12/2025</td><td>Erstveröffentlichung für Summitwave Beacon</td></tr>
</tbody>
</table>
<h3>0.3 Gültigkeitsbereich</h3>
<p>Diese Anleitung gilt für alle Summitwave Beacon Geräte, für die das Dokument <span class="mono">„Summitwave Beacon technische Informationen 12.25“</span> als Referenzdatenblatt angegeben ist.</p>
<h3>0.4 Hersteller, Adresse, Kontakt</h3>
<p>Herstellerangaben werden aus dem offiziellen Datenblatt übernommen, z.&nbsp;B.:</p>
<p class="muted">Summitwave FlexCo · Hinterwaldnerstraße&nbsp;16a · 6020 Innsbruck · Österreich · <span class="mono">info@summitwave.eu</span></p>
</section>
<section id="sicherheit">
<h2>1. Einleitung &amp; Sicherheit</h2>
<h3>1.1 Zweck dieser Anleitung</h3>
<p>Diese Anleitung unterstützt Fachpersonal bei <strong>Installation, Konfiguration, Betrieb und Wartung</strong> des Summitwave Beacon. Sie ist Bestandteil des Produkts und muss während der gesamten Lebensdauer verfügbar bleiben.</p>
<h3>1.2 Zielgruppen</h3>
<p>
- Installations und Veranstaltungstechniker
<br/>- IT/Netzwerkadministration
<br/>- Betreiber von Veranstaltungs, Bildungs und Kulturräumen
</p>
<h3>1.3 Kurzbeschreibung des Produkts</h3>
<p>Summitwave Beacon ist ein <strong>MehrkanalAuracast™ Sender</strong> für professionelle AudioInstallationen. Er ermöglicht bis zu sechs parallele AuracastStreams, die über ein Webinterface konfiguriert werden und wahlweise analoge oder AoIPAudioquellen nutzen.</p>
<h3>1.4 Bestimmungsgemäße Verwendung</h3>
<p>Der Beacon ist zur drahtlosen Audioübertragung für z.&nbsp;B. <strong>Assistive Listening</strong>, Mehrsprachigkeit, Führungen und SilentEvents in Innenräumen vorgesehen. Betrieb ausschließlich in zulässigen Ländern und gemäß den in dieser Anleitung beschriebenen Parametern.</p>
<h3>1.5 Nicht bestimmungsgemäße Verwendung</h3>
<div class="warn">
<p><strong>Achtung:</strong> Jede Verwendung außerhalb der beschriebenen Anwendungen (z.&nbsp;B. sicherheitskritische Kommunikation, Betrieb in explosionsgefährdeten Bereichen, Eigenumbauten) gilt als nicht bestimmungsgemäß und kann zu Personen und Sachschäden führen.</p>
</div>
<h3>2. Sicherheitshinweise</h3>
<h3>2.1 Allgemeine Sicherheit</h3>
<ul>
<li>Gerät nur in trockener Umgebung mit ausreichender Belüftung betreiben.</li>
<li>Gehäuse nicht öffnen, keine eigenmächtigen Reparaturen durchführen.</li>
<li>Nur Original oder vom Hersteller freigegebene Zubehörteile verwenden.</li>
</ul>
<h3>2.2 Elektrische Sicherheit</h3>
<p>Der Betrieb erfolgt wahlweise über <strong>PoE nach IEEE&nbsp;802.3af</strong> oder <strong>USBC 5&nbsp;V</strong>. Netzteile müssen die geltenden Sicherheitsnormen erfüllen.</p>
<h3>2.3 Audiopegel</h3>
<p>Audioeingänge sind für <strong>LineLevel</strong> (nominal +4&nbsp;dBu, max. ≥ +18&nbsp;dBu) ausgelegt. Übersteuerung kann zu Verzerrungen und Gehörbelastung bei Zuhörern führen.</p>
<h3>2.4 Funk &amp; Umgebung</h3>
<p>Der Beacon arbeitet im <strong>2,4GHzBand</strong>. Betrieb nur in Ländern, in denen der genutzte Frequenzbereich zugelassen ist. Starke Störquellen (WLANAPs, Mikrowellen, Stahlbeton) können die Reichweite reduzieren.</p>
<h3>2.5 Temperatur &amp; Lagerung</h3>
<p>Betrieb und Lagerung innerhalb der im Datenblatt angegebenen Temperaturbereiche. Kondensation vermeiden, Gerät vor Inbetriebnahme akklimatisieren.</p>
</section>
<section id="konformitaet">
<h2>3. Konformität &amp; rechtliche Hinweise (CE/RED)</h2>
<h3>3.1 CE &amp; Funkanlagenrichtlinie (RED)</h3>
<p>Summitwave Beacon erfüllt die grundlegenden Anforderungen der einschlägigen EURichtlinien, insbesondere der <strong>Funkanlagenrichtlinie (RED)</strong>. Die unterzeichnete EUKonformitätserklärung (DoC) liegt beim Hersteller vor und kann über einen QRCode oder die Website abgerufen werden.</p>
<h3>3.2 Funkparameter (Nutzerinformation)</h3>
<table aria-label="Funkparameter">
<tbody>
<tr><th>Frequenzbereich</th><td>24002482&nbsp;MHz</td></tr>
<tr><th>Max. Sendeleistung</th><td>+10&nbsp;dBm (EIRP)</td></tr>
</tbody>
</table>
<h3>3.3 Normenübersicht (Beispiele)</h3>
<ul class="muted">
<li>EN&nbsp;623681 (Sicherheit Audio/Video, ITGeräte)</li>
<li>EN&nbsp;55032 / EN&nbsp;55035 (EMVAnforderungen)</li>
<li>RoHS / REACH / WEEE (Umwelt- und Stoffbeschränkungen)</li>
</ul>
<h3>3.4 Entsorgung (WEEE)</h3>
<p>Das Produkt darf nicht über den Hausmüll entsorgt werden. Bitte die in Ihrem Land gültigen Rücknahme und Recyclingsysteme für Elektro und Elektronikgeräte nutzen.</p>
<h3>3.5 Herstellerkennzeichnung &amp; Support</h3>
<p>Typenschild und Herstellerangaben befinden sich auf der Geräterückseite. Für Support und Service steht der im Datenblatt genannte Kontakt zur Verfügung.</p>
</section>
<section id="produkt">
<h2>4. Produktübersicht</h2>
<h3>4.1 Lieferumfang</h3>
<ul>
<li>Summitwave Beacon Gerät</li>
<li>SchnellstartHinweis / Verweis auf OnlineAnleitung</li>
<li>Montagezubehör je nach Variante (z.&nbsp;B. Wand/Deckenhalter)</li>
</ul>
<h3>4.2 Gerätebeschreibung</h3>
<p>Der Beacon bietet bis zu <strong>6 parallele AuracastStreams</strong>, zwei symmetrische XLR/TRSAudioeingänge und ein WebGUI für Konfiguration und Monitoring. Optional können AoIPQuellen (Dante/AES67) eingebunden werden.</p>
<h3>4.3 Typische Anwendungen</h3>
<p>Beispiele: Theater, Kirchen, Hochschulen, Museen, Konferenzräume, SilentEvents.</p>
<h3>4.4 Geräteabbildung</h3>
<figure>
<img src="./beacon-front.jpg" alt="Summitwave Beacon Frontansicht mit Netzwerk und Audioanschlüssen" style="width:100%;height:auto;display:block;"/>
<figcaption>Abb. 1: Summitwave Beacon Frontansicht mit 2× RJ45, USBC und 2× XLR/TRSEingängen.</figcaption>
</figure>
</section>
<section id="anschluesse">
<h2>5. Anschlüsse, Bedienelemente, Anzeigen</h2>
<h3>5.1 Netzwerkports</h3>
<p>
- <strong>Port&nbsp;1 (RJ45):</strong> Konfiguration/Monitoring
<br/>- <strong>Port&nbsp;2 (RJ45):</strong> Konfiguration + Dante/AES67 (optional) + PoEVersorgung
</p>
<h3>5.2 Audioeingänge</h3>
<p>Zwei symmetrische XLR/TRSKombibuchsen, schaltbar für Mic/Line gemäß Datenblatt. Typischer Nennpegel +4&nbsp;dBu.</p>
<h3>5.3 Stromversorgung</h3>
<p>Stromzufuhr primär über PoE an Port&nbsp;2. USBC 5&nbsp;V kann als Service oder BackupVersorgung dienen.</p>
<h3>5.4 Mechanik &amp; Montagepunkte</h3>
<p>Montageoptionen (z.&nbsp;B. Wand/Decke, VESA/Bracket, 3/8" und 1/4"Gewinde) werden in der finalen Version mit Skizzen aus dem Datenblatt dargestellt.</p>
</section>
<section id="installation">
<h2>6. Installation &amp; Montage</h2>
<h3>6.1 Standortwahl</h3>
<p>Gerät in FunkSichtverbindung zum Publikumsbereich platzieren, hohe Metallflächen und starke Störer vermeiden. Temperatur und Belüftungsvorgaben beachten.</p>
<h3>6.2 Montagevarianten</h3>
<p>Wand, Decken oder TrussMontage gemäß freigegebenem Zubehör. Kabelzugentlastung vorsehen, mechanische Spannungen auf Buchsen vermeiden.</p>
<h3>6.3 Verkabelung</h3>
<p>Reihenfolgeempfehlung: Netzwerk/PoE verbinden → Audioeingänge anschließen → optional USBC Service → dann Gerät einschalten.</p>
<h3>6.4 ErstinbetriebnahmeCheckliste</h3>
<ul>
<li>Mechanische Befestigung überprüft</li>
<li>PoEQuelle / Netzteil passend dimensioniert</li>
<li>Audioquellen korrekt beschaltet, Pegel geprüft</li>
<li>Netzwerksegment und IPAdressierung definiert</li>
</ul>
</section>
<section id="netzwerk">
<h2>7. Netzwerk &amp; Zugriff auf das Webinterface</h2>
<h3>7.1 IPAdressierung</h3>
<p>Je nach Netzwerkinfrastruktur per <strong>DHCP</strong>, statischer Adresse oder linklocal. Die gültige IP kann über einen IPFinder oder die Verwaltungsoberfläche des Switches ermittelt werden.</p>
<h3>7.2 Zugriff im Browser</h3>
<p>Aufruf über einen aktuellen Webbrowser via HTTP/HTTPS. StandardLogin und Passwort sollten bei der ersten Inbetriebnahme geändert werden.</p>
<h3>7.3 Erreichbarkeit prüfen</h3>
<p>Typische Schritte: Ping auf die IPAdresse, Aufruf der WebUI im Browser, Kontrolle der LinkLEDs an den Netzwerkports.</p>
<h3>7.4 Sicherheit im Netzwerk</h3>
<p>Betrieb in geeigneten VLANs bzw. getrennten AudioNetzsegmenten wird empfohlen. Zugriff auf die WebUI auf autorisierte Nutzer beschränken.</p>
</section>
<section id="quickstart">
<h2>8. Quick Start (ca. 10 Minuten)</h2>
<h3>8.1 Erstes Radio konfigurieren</h3>
<p>Im WebUI ein Radio aktivieren, Namen (z.&nbsp;B. „Deutsch“), Sprache und Program Info vergeben.</p>
<h3>8.2 Audioquelle wählen</h3>
<p>Analogen Eingang (XLR/TRS) als Quelle wählen, Pegel so einstellen, dass keine ClipAnzeige im UI erscheint.</p>
<h3>8.3 Test mit Empfänger</h3>
<p>Mit einem Auracastfähigen Endgerät den Stream suchen, verbinden und Lautstärke testen. Gegebenenfalls Delay/RTN nachregeln.</p>
</section>
<section id="webui">
<h2>9. WebUI Referenz Auracast Audio Mode Control</h2>
<h3>9.1 Seitenaufbau</h3>
<p>Die Seite zeigt oben globale Einstellungen (Audio Mode), darunter die konfigurierbaren Bereiche für Radio&nbsp;1/2 (bis Radio&nbsp;6). Status und Warnhinweise werden direkt im jeweiligen Block angezeigt.</p>
<figure>
<img src="./img/ui-audio-mode-network.png" alt="Auracast Audio Mode Control Beispielansicht im Netzwerkmodus" style="width:100%;height:auto;display:block;"/>
<figcaption>Abb. 2: Auracast Audio Mode Control mit aktivem Netzwerkmodus und Radio&nbsp;1Parametern.</figcaption>
</figure>
<h3>9.2 Bedienelemente</h3>
<p>Typische Controls sind Dropdowns, Checkboxen, Texteingaben, +/-Buttons für Delay sowie Auswahlfelder für RTNProfile. Die genaue Funktion wird in den Unterkapiteln zu Audio Mode und Radio erläutert.</p>
<h3>9.3 Tooltips &amp; InfoIcons</h3>
<p>InfoSymbole neben Feldern geben Kurzbeschreibungen zu Parametern (z.&nbsp;B. „Assistive Listening“, „Immediate Rendering“, „RTN“). Diese Hinweise sollten im Betrieb stets berücksichtigt werden.</p>
</section>
<section id="audio-mode">
<h2>10. WebUI Globale Einstellungen</h2>
<h3>10.1 Audio Mode</h3>
<p>Über den globalen Audio Mode wird festgelegt, aus welcher Quelle die Streams gespeist werden (z.&nbsp;B. „Analog“ oder „AoIP“). Für einfache Setups mit Mischpult genügt meist der analoge Modus.</p>
<div class="grid2">
<figure>
<img src="./img/ui-audio-mode-usb.png" alt="Auracast Audio Mode Control USBEingang als Audio Mode" style="width:100%;height:auto;display:block;"/>
<figcaption>Abb. 3: Audio Mode „USB“ Beispielkonfiguration für lokale USBAudioquelle.</figcaption>
</figure>
<figure>
<img src="./img/ui-audio-mode-demo.png" alt="Auracast Audio Mode Control DemoModus mit zwei Streams" style="width:100%;height:auto;display:block;"/>
<figcaption>Abb. 4: Audio Mode „Demo“ generierte Streams zu Test und Demonstrationszwecken.</figcaption>
</figure>
</div>
<h3>10.2 Monitoring &amp; Status</h3>
<p>Je nach Firmwarestand werden hier Statusanzeigen (z.&nbsp;B. AudioPresence, Netzwerkstatus) und ggf. einfache MonitoringFunktionen angeboten.</p>
</section>
<section id="radio">
<h2>11. WebUI Radio 1 (analog für Radio 26)</h2>
<h3>11.1 Stream Quality</h3>
<p>Auswahl der Abtastrate (z.&nbsp;B. 16/24/32/48&nbsp;kHz). Höhere Raten verbessern die Qualität, erhöhen aber ggf. die Netzlast.</p>
<h3>11.2 Stream Password</h3>
<p>Optionale Zugangskontrolle für den Stream, z.&nbsp;B. mittels AccessCode. Geeignet für geschützte Veranstaltungen oder interne Signale.</p>
<h3>11.3 Assistive Listening</h3>
<p>Aktivieren, wenn der Stream speziell für Hörunterstützung vorgesehen ist. Hinweise zur Barrierefreiheit sollten in der VeranstalterKommunikation ergänzend erläutert werden.</p>
<h3>11.4 Immediate Rendering</h3>
<p>Steuert das Latenzverhalten des Streams. „Immediate“ minimiert Verzögerung, kann aber die Robustheit bei schwierigen Funkbedingungen beeinflussen.</p>
<h3>11.5 Delay (ms)</h3>
<p>Feinabstimmung der Latenz (z.&nbsp;B. mindestens 30&nbsp;ms als Ausgangswert), um Audio zu Lautsprechersystemen und Bildschirmen auszurichten.</p>
<h3>11.6 RTN</h3>
<p>RTNProfile bieten Voreinstellungen für Robustheit vs. Latenz. Höhere Robustheit kann in schwierigen Funkumgebungen Dropouts reduzieren.</p>
<h3>11.7 Channel Name, Language, Program Info</h3>
<p>Empfehlung: konsistente Benennung (z.&nbsp;B. „Deutsch“, „English“, „Audio Description“) und ISO6393Sprachcodes verwenden, damit Endnutzer Streams eindeutig erkennen.</p>
<h3>11.8 Input Device</h3>
<p>Zuordnung des Streams zu einer Quelle (Analog oder AoIP). Bei mehreren aktiven Radios auf ausreichende Kanaltrennung und Routing im Mischpult bzw. DanteController achten.</p>
<figure>
<img src="./img/ui-radio2.png" alt="WebUI mit zusätzlichem Radio 2 und erweiterten Parametern" style="width:100%;height:auto;display:block;"/>
<figcaption>Abb. 5: Beispielansicht mit aktiviertem Radio&nbsp;2 und separaten Quality, Delay und SprachEinstellungen.</figcaption>
</figure>
</section>
<section id="betrieb">
<h2>12. MultiChannelBetrieb</h2>
<h3>12.1 Radios 26</h3>
<p>Weitere Radios können für zusätzliche Sprachen, Programme oder AssistiveListeningVarianten genutzt werden. Jedem Radio klare Namen und Sprache zuweisen.</p>
<h3>12.2 AoIP Integration</h3>
<p>Bei Verwendung von Dante/AES67 werden bis zu 6 Kanäle über das Netzwerk zugeführt. Die zusätzlich entstehende Latenz (typ. ≤ 4&nbsp;ms) ist im Gesamtsystem zu berücksichtigen.</p>
<h3>12.3 Reichweite &amp; Praxis</h3>
<p>Typische Reichweiten liegen bei ca. 50&nbsp;m in Innenräumen, abhängig von Hindernissen und Störquellen. Vor Veranstaltungen einen Reichweitentest mit Publikumssimulation durchführen.</p>
</section>
<section id="wartung">
<h2>13. Wartung, Service, Updates</h2>
<h3>13.1 Firmware und SoftwareUpdates</h3>
<p>Updates werden über die WebUI oder ein separates Wartungstool eingespielt. Während des UpdateVorgangs darf die Stromversorgung nicht unterbrochen werden.</p>
<h3>13.2 Backup &amp; Restore</h3>
<p>Konfigurationen (Radios, Audio Mode, Netzwerkparameter) sollten regelmäßig gesichert und bei Bedarf auf andere Geräte übertragen werden.</p>
<h3>13.3 Reinigung &amp; Inspektion</h3>
<p>Gehäuse mit einem leicht angefeuchteten, weichen Tuch reinigen. Keine aggressiven Reinigungsmittel oder Sprühreiniger direkt auf das Gerät aufbringen.</p>
<h3>13.4 Support</h3>
<p>Bei technischen Fragen oder Störungen wenden Sie sich an den im Datenblatt genannten Supportkontakt (z.&nbsp;B. <span class="mono">info@summitwave.eu</span>).</p>
</section>
<section id="troubleshooting">
<h2>14. Fehlerbehebung</h2>
<h3>14.1 Kein Zugriff auf WebUI</h3>
<p>IPAdresse prüfen (DHCP/Statik), BrowserURL kontrollieren, Ping testen, ggf. FirewallRegeln anpassen.</p>
<h3>14.2 Kein Audio / falscher Pegel</h3>
<p>Audioquelle, Verkabelung und Pegel prüfen. Sicherstellen, dass der richtige Eingang und das richtige Radio ausgewählt sind und die +4&nbsp;dBuReferenz eingehalten wird.</p>
<h3>14.3 Endgerät findet Stream nicht</h3>
<p>Prüfen, ob das Endgerät Auracast/LE Audio unterstützt, ob der Stream aktiv ist und ob sich das Gerät in Reichweite befindet.</p>
<h3>14.4 Dropouts und Störungen</h3>
<p>Funkumgebung analysieren, Kanalplanung anpassen, RTN/QualitySettings prüfen, ggf. Antennenposition und Abstand zu Störquellen optimieren.</p>
<h3>14.5 AoIPspezifische Probleme</h3>
<p>Dante/AES67Routing im Controller überprüfen, ClockMaster und LatenzSettings kontrollieren, NetzwerkQoS sicherstellen.</p>
</section>
<section id="techdata">
<h2>15. Technische Daten (Auszug)</h2>
<div class="grid2">
<div>
<h3>15.1 RF / Auracast</h3>
<ul>
<li>Bluetooth LE Audio Core (z.&nbsp;B. 5.3)</li>
<li>Codec: LC3</li>
<li>Frequenzbereich: 24002482&nbsp;MHz</li>
<li>Max. Sendeleistung: +10&nbsp;dBm</li>
<li>Bis zu 6 parallele Streams</li>
</ul>
<h3>15.2 Audio</h3>
<ul>
<li>SNR ≥ 105&nbsp;dB (typ.)</li>
<li>THD+N ≤ 0,005&nbsp;% (typ.)</li>
<li>Frequenzgang entsprechend Datenblatt</li>
</ul>
</div>
<div>
<h3>15.3 Netzwerk &amp; Management</h3>
<ul>
<li>2× RJ45 (Port&nbsp;1: Config, Port&nbsp;2: Config + AoIP + PoE)</li>
<li>DHCP, statische IP, linklocal</li>
<li>WebGUI für Konfiguration und Monitoring</li>
</ul>
<h3>15.4 Strom</h3>
<ul>
<li>PoE (802.3af), USBC 5&nbsp;V</li>
<li>Leistungsaufnahme ca. 7&nbsp;W max., 3&nbsp;W nominal (Beispielwerte)</li>
</ul>
<h3>15.5 Mechanik &amp; Umwelt</h3>
<ul>
<li>Abmessungen, Gewicht gemäß Datenblatt (z.&nbsp;B. ca. 200×190×50&nbsp;mm, 0,8&nbsp;kg)</li>
<li>Gehäusematerial und Temperaturbereich gemäß Spezifikation</li>
</ul>
</div>
</div>
<h3>15.6 Normen &amp; Konformität</h3>
<p class="muted">Die vollständige Liste der angewendeten Normen und Richtlinien ist der offiziellen Konformitätserklärung und dem technischen Datenblatt zu entnehmen.</p>
</section>
<section id="anhang">
<h2>16. Anhang</h2>
<h3>A. Datenblatt</h3>
<p>Das vollständige technische Datenblatt wird als eigenständiges PDF bereitgestellt und dient als Referenz für detaillierte Produktdaten.</p>
<h3>B. EUKonformitätserklärung</h3>
<p>Die EUKonformitätserklärung (DoC) ist über QRCode oder Link abrufbar und sollte dieser Anleitung beigefügt werden.</p>
<h3>C. Glossar</h3>
<p class="muted">Hier können Begriffe wie Auracast, RTN, ISO&nbsp;6393, AoIP und weitere Fachbegriffe erläutert werden.</p>
<h3>D. Checklisten</h3>
<p>Checklisten für Installation, EventSetup und Fehlerbehebung helfen, wiederkehrende Abläufe zu standardisieren und zu dokumentieren.</p>
<h3>E. Kontakt &amp; Impressum</h3>
<p>Kontakt und Impressumsangaben werden konsistent mit Datenblatt und Website gehalten, z.&nbsp;B.:</p>
<p class="muted">Summitwave FlexCo · Hinterwaldnerstraße&nbsp;16a · 6020 Innsbruck · Österreich · <span class="mono">info@summitwave.eu</span></p>
</section>
</article>
</main>
</body>
</html>

39
src/manual/index.php Normal file
View File

@@ -0,0 +1,39 @@
<?php
require __DIR__ . '/auth.php';
sw_require_login();
$user = sw_current_user();
$lastLoginDt = $user ? sw_last_login_for_user($user) : null;
$lastLoginStr = sw_format_dt($lastLoginDt);
$indexPath = __DIR__ . '/index.html';
if (!is_file($indexPath)) {
header('Content-Type: text/plain; charset=utf-8');
echo "Manual index.html nicht gefunden.";
exit;
}
$html = file_get_contents($indexPath);
if ($html === false) {
header('Content-Type: text/plain; charset=utf-8');
echo "Manual konnte nicht geladen werden.";
exit;
}
$badgeOriginal = '<div class="badge">Stand: 2025-12-13</div>';
$userEsc = htmlspecialchars($user ?? '', ENT_QUOTES, 'UTF-8');
$loginEsc = htmlspecialchars($lastLoginStr, ENT_QUOTES, 'UTF-8');
$badgeReplacement = '<div class="badge">Stand: 2025-12-13<br />' .
$userEsc . ' · letzter Login: ' . $loginEsc . '<br />' .
'<a href="logout.php" style="color:#9ca3af; text-decoration:none;">Abmelden</a></div>';
if (strpos($html, $badgeOriginal) !== false) {
$html = str_replace($badgeOriginal, $badgeReplacement, $html);
}
header('Content-Type: text/html; charset=utf-8');
echo $html;
exit;

130
src/manual/login.php Normal file
View File

@@ -0,0 +1,130 @@
<?php
require __DIR__ . '/auth.php';
$error = null;
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = trim($_POST['username'] ?? '');
$password = (string)($_POST['password'] ?? '');
if ($username === '' || $password === '') {
$error = 'Bitte Benutzername und Passwort eingeben.';
} elseif (!sw_verify_login($username, $password)) {
$error = 'Ungültige Zugangsdaten.';
} else {
$_SESSION['sw_manual_user'] = $username;
sw_record_login($username);
header('Location: index.php');
exit;
}
}
?><!doctype html>
<html lang="de">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Summitwave Beacon Login</title>
<style>
body {
margin: 0;
font-family: system-ui, -apple-system, BlinkMacSystemFont, "Ubuntu", "Segoe UI", sans-serif;
background: radial-gradient(1400px 900px at 0% -10%, rgba(0,0,0,.65), transparent 60%),
radial-gradient(1100px 800px at 100% 110%, rgba(0,0,0,.8), transparent 70%),
#101218;
color: #f5f5f7;
display: flex;
align-items: center;
justify-content: center;
min-height: 100vh;
}
.card {
width: 100%;
max-width: 360px;
background: #181b22;
border-radius: 16px;
box-shadow: 0 18px 40px rgba(0,0,0,.65);
padding: 20px 22px 18px;
border: 1px solid rgba(0,0,0,.8);
}
h1 {
margin: 0 0 4px;
font-size: 20px;
}
.muted {
color: #9ca3af;
font-size: 13px;
margin-bottom: 16px;
}
label {
display: block;
font-size: 13px;
margin: 8px 0 4px;
}
input[type="text"],
input[type="password"] {
width: 100%;
padding: 8px 10px;
border-radius: 8px;
border: 1px solid rgba(55,65,81,.9);
background: #020617;
color: #f5f5f7;
font-size: 14px;
box-sizing: border-box;
}
input[type="text"]:focus,
input[type="password"]:focus {
outline: none;
border-color: #11b6ad;
box-shadow: 0 0 0 1px rgba(17,182,173,.7);
}
.btn {
margin-top: 14px;
width: 100%;
padding: 9px 14px;
border-radius: 999px;
border: none;
background: #11b6ad;
color: #021310;
font-weight: 600;
font-size: 14px;
cursor: pointer;
}
.btn:hover {
opacity: .95;
}
.error {
margin-top: 8px;
padding: 8px 10px;
border-radius: 10px;
background: rgba(248,113,113,.16);
border: 1px solid rgba(248,113,113,.7);
font-size: 13px;
}
.hint {
margin-top: 10px;
font-size: 12px;
color: #9ca3af;
}
</style>
</head>
<body>
<div class="card">
<h1>Login</h1>
<div class="muted">Zugriff auf die Summitwave Beacon OnlineAnleitung.</div>
<?php if ($error): ?>
<div class="error"><?php echo htmlspecialchars($error, ENT_QUOTES, 'UTF-8'); ?></div>
<?php endif; ?>
<form method="post" action="">
<label for="username">Benutzername</label>
<input type="text" id="username" name="username" autocomplete="username" required />
<label for="password">Passwort</label>
<input type="password" id="password" name="password" autocomplete="current-password" required />
<button type="submit" class="btn">Anmelden</button>
</form>
<div class="hint">Bei Fragen zu Zugangsdaten bitte an den Systemverantwortlichen wenden.</div>
</div>
</body>
</html>

8
src/manual/logout.php Normal file
View File

@@ -0,0 +1,8 @@
<?php
require __DIR__ . '/auth.php';
$_SESSION['sw_manual_user'] = null;
session_destroy();
header('Location: login.php');
exit;

View File

@@ -1,4 +1,5 @@
User-agent: *
Allow: /
Disallow: /manual/
Sitemap: https://summitwave.eu/sitemap.xml