Compare commits
13 Commits
849a71a6c9
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 5d529c9789 | |||
| 2a50e694a7 | |||
| 55a274eeed | |||
| 10ac724155 | |||
| 4e61cf2189 | |||
| dc7dcdd650 | |||
| 76798a215a | |||
| 61f038b36b | |||
| ae9fe78b37 | |||
| 0f1165c4ad | |||
| c159206ae4 | |||
| cf383e7412 | |||
| 9e4c605da7 |
44
deploy_to_hetzner.sh
Normal file → Executable file
44
deploy_to_hetzner.sh
Normal file → Executable 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"
|
||||
|
||||
@@ -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"
|
||||
200
index.html
200
index.html
@@ -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 audience’s 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">Let’s bring your audio to life</h2>
|
||||
<p class="max-w-2xl mx-auto mb-10 text-lg">Share your project details, and we’ll 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>© 2025 SummitWave. All rights reserved.</span>
|
||||
<a href="impressum.html" class="text-blue-700 hover:underline">Impressum</a>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -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]
|
||||
|
||||
200
src/index.html
200
src/index.html
@@ -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 audience’s 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 RF‑coordination 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 lecturer’s 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>Lip‑synced 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, on‑demand 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 one‑to‑many, low‑latency 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">lip‑synced 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 multi‑language 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">Web‑Based 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">Let’s bring your audio to life</h2>
|
||||
<p class="max-w-2xl mx-auto mb-10 text-lg">Share your project details, and we’ll 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>© 2025 SummitWave. All rights reserved.</span>
|
||||
<span>© 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
8
src/manual/.htaccess
Normal 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>
|
||||
15
src/manual/auth.config.php
Normal file
15
src/manual/auth.config.php
Normal 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
87
src/manual/auth.php
Normal 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
BIN
src/manual/beacon-front.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.0 MiB |
30
src/manual/cert/ca_cert.pem
Normal file
30
src/manual/cert/ca_cert.pem
Normal 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-----
|
||||
BIN
src/manual/img/beacon-front.jpg
Normal file
BIN
src/manual/img/beacon-front.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.0 MiB |
BIN
src/manual/img/ui-audio-mode-demo.png
Normal file
BIN
src/manual/img/ui-audio-mode-demo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 42 KiB |
BIN
src/manual/img/ui-audio-mode-network.png
Normal file
BIN
src/manual/img/ui-audio-mode-network.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 46 KiB |
BIN
src/manual/img/ui-audio-mode-usb.png
Normal file
BIN
src/manual/img/ui-audio-mode-usb.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 67 KiB |
BIN
src/manual/img/ui-radio2.png
Normal file
BIN
src/manual/img/ui-radio2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 77 KiB |
1092
src/manual/index.html
Normal file
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
744
src/manual/index.html.bak
Normal 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 – Online‑Anleitung</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>Online‑Anleitung</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 Abschnitt‑Links 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">Multikanal‑Auracast™ Sender für professionelle Audio‑Installationen.</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 GHz · max. +10 dBm</div></div>
|
||||
<div role="listitem"><div class="label">Audio‑Inputs</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 USB‑C 5 V</div></div>
|
||||
</div>
|
||||
|
||||
<div class="callout">
|
||||
<strong>Quick‑Navigation:</strong>
|
||||
<span class="pill"><a href="#quickstart">Quick Start</a></span>
|
||||
<span class="pill"><a href="#webui">Web‑UI</a></span>
|
||||
<span class="pill"><a href="#techdata">Technische Daten</a></span>
|
||||
<span class="pill"><a href="#konformitaet">CE‑Infos</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 Web‑Interface: Auracast Audio Mode Control" style="width:100%; height:auto;"/>
|
||||
<figcaption>Abb. 2: Web‑UI (Beispiel). Globale Einstellung „Audio Mode“ + Radio‑Konfigurationen.</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 UI‑Version.</p>
|
||||
<p class="muted">Beispiel: „Summitwave Beacon – Betriebsanleitung, HW v1.x, FW v1.x, Web‑UI 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. B.:</p>
|
||||
<p class="muted">Summitwave FlexCo · Hinterwaldnerstraße 16a · 6020 Innsbruck · Österreich · <span class="mono">info@summitwave.eu</span></p>
|
||||
</section>
|
||||
|
||||
<section id="sicherheit">
|
||||
<h2>1. Einleitung & 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>Mehrkanal‑Auracast™ Sender</strong> für professionelle Audio‑Installationen. Er ermöglicht bis zu sechs parallele Auracast‑Streams, die über ein Webinterface konfiguriert werden und wahlweise analoge oder AoIP‑Audioquellen nutzen.</p>
|
||||
|
||||
<h3>1.4 Bestimmungsgemäße Verwendung</h3>
|
||||
<p>Der Beacon ist zur drahtlosen Audioübertragung für z. B. <strong>Assistive Listening</strong>, Mehrsprachigkeit, Führungen und Silent‑Events 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. 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 802.3af</strong> oder <strong>USB‑C 5 V</strong>. Netzteile müssen die geltenden Sicherheitsnormen erfüllen.</p>
|
||||
|
||||
<h3>2.3 Audiopegel</h3>
|
||||
<p>Audioeingänge sind für <strong>Line‑Level</strong> (nominal +4 dBu, max. ≥ +18 dBu) ausgelegt. Übersteuerung kann zu Verzerrungen und Gehörbelastung bei Zuhörern führen.</p>
|
||||
|
||||
<h3>2.4 Funk & Umgebung</h3>
|
||||
<p>Der Beacon arbeitet im <strong>2,4‑GHz‑Band</strong>. Betrieb nur in Ländern, in denen der genutzte Frequenzbereich zugelassen ist. Starke Störquellen (WLAN‑APs, Mikrowellen, Stahlbeton) können die Reichweite reduzieren.</p>
|
||||
|
||||
<h3>2.5 Temperatur & 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 & rechtliche Hinweise (CE/RED)</h2>
|
||||
|
||||
<h3>3.1 CE & Funkanlagenrichtlinie (RED)</h3>
|
||||
<p>Summitwave Beacon erfüllt die grundlegenden Anforderungen der einschlägigen EU‑Richtlinien, insbesondere der <strong>Funkanlagenrichtlinie (RED)</strong>. Die unterzeichnete EU‑Konformitätserklärung (DoC) liegt beim Hersteller vor und kann über einen QR‑Code oder die Website abgerufen werden.</p>
|
||||
|
||||
<h3>3.2 Funkparameter (Nutzerinformation)</h3>
|
||||
<table aria-label="Funkparameter">
|
||||
<tbody>
|
||||
<tr><th>Frequenzbereich</th><td>2400–2482 MHz</td></tr>
|
||||
<tr><th>Max. Sendeleistung</th><td>+10 dBm (EIRP)</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3>3.3 Normenübersicht (Beispiele)</h3>
|
||||
<ul class="muted">
|
||||
<li>EN 62368‑1 (Sicherheit Audio/Video, IT‑Geräte)</li>
|
||||
<li>EN 55032 / EN 55035 (EMV‑Anforderungen)</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 & 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>Schnellstart‑Hinweis / Verweis auf Online‑Anleitung</li>
|
||||
<li>Montagezubehör je nach Variante (z. B. Wand‑/Deckenhalter)</li>
|
||||
</ul>
|
||||
|
||||
<h3>4.2 Gerätebeschreibung</h3>
|
||||
<p>Der Beacon bietet bis zu <strong>6 parallele Auracast‑Streams</strong>, zwei symmetrische XLR/TRS‑Audioeingänge und ein Web‑GUI für Konfiguration und Monitoring. Optional können AoIP‑Quellen (Dante/AES67) eingebunden werden.</p>
|
||||
|
||||
<h3>4.3 Typische Anwendungen</h3>
|
||||
<p>Beispiele: Theater, Kirchen, Hochschulen, Museen, Konferenzräume, Silent‑Events.</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, USB‑C und 2× XLR/TRS‑Eingängen.</figcaption>
|
||||
</figure>
|
||||
</section>
|
||||
|
||||
<section id="anschluesse">
|
||||
<h2>5. Anschlüsse, Bedienelemente, Anzeigen</h2>
|
||||
|
||||
<h3>5.1 Netzwerkports</h3>
|
||||
<p>
|
||||
- <strong>Port 1 (RJ45):</strong> Konfiguration/Monitoring
|
||||
<br/>- <strong>Port 2 (RJ45):</strong> Konfiguration + Dante/AES67 (optional) + PoE‑Versorgung
|
||||
</p>
|
||||
|
||||
<h3>5.2 Audioeingänge</h3>
|
||||
<p>Zwei symmetrische XLR/TRS‑Kombibuchsen, schaltbar für Mic/Line gemäß Datenblatt. Typischer Nennpegel +4 dBu.</p>
|
||||
|
||||
<h3>5.3 Stromversorgung</h3>
|
||||
<p>Stromzufuhr primär über PoE an Port 2. USB‑C 5 V kann als Service‑ oder Backup‑Versorgung dienen.</p>
|
||||
|
||||
<h3>5.4 Mechanik & Montagepunkte</h3>
|
||||
<p>Montageoptionen (z. 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 & Montage</h2>
|
||||
|
||||
<h3>6.1 Standortwahl</h3>
|
||||
<p>Gerät in Funk‑Sichtverbindung 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 Truss‑Montage 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 USB‑C Service → dann Gerät einschalten.</p>
|
||||
|
||||
<h3>6.4 Erstinbetriebnahme‑Checkliste</h3>
|
||||
<ul>
|
||||
<li>Mechanische Befestigung überprüft</li>
|
||||
<li>PoE‑Quelle / Netzteil passend dimensioniert</li>
|
||||
<li>Audioquellen korrekt beschaltet, Pegel geprüft</li>
|
||||
<li>Netzwerksegment und IP‑Adressierung definiert</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section id="netzwerk">
|
||||
<h2>7. Netzwerk & Zugriff auf das Webinterface</h2>
|
||||
|
||||
<h3>7.1 IP‑Adressierung</h3>
|
||||
<p>Je nach Netzwerkinfrastruktur per <strong>DHCP</strong>, statischer Adresse oder link‑local. Die gültige IP kann über einen IP‑Finder 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. Standard‑Login und Passwort sollten bei der ersten Inbetriebnahme geändert werden.</p>
|
||||
|
||||
<h3>7.3 Erreichbarkeit prüfen</h3>
|
||||
<p>Typische Schritte: Ping auf die IP‑Adresse, Aufruf der Web‑UI im Browser, Kontrolle der Link‑LEDs an den Netzwerkports.</p>
|
||||
|
||||
<h3>7.4 Sicherheit im Netzwerk</h3>
|
||||
<p>Betrieb in geeigneten VLANs bzw. getrennten Audio‑Netzsegmenten wird empfohlen. Zugriff auf die Web‑UI 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 Web‑UI ein Radio aktivieren, Namen (z. 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 Clip‑Anzeige im UI erscheint.</p>
|
||||
|
||||
<h3>8.3 Test mit Empfänger</h3>
|
||||
<p>Mit einem Auracast‑fähigen Endgerät den Stream suchen, verbinden und Lautstärke testen. Gegebenenfalls Delay/RTN nachregeln.</p>
|
||||
</section>
|
||||
|
||||
<section id="webui">
|
||||
<h2>9. Web‑UI 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 1/2 (bis Radio 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 1‑Parametern.</figcaption>
|
||||
</figure>
|
||||
|
||||
<h3>9.2 Bedienelemente</h3>
|
||||
<p>Typische Controls sind Dropdowns, Checkboxen, Texteingaben, +/-‑Buttons für Delay sowie Auswahlfelder für RTN‑Profile. Die genaue Funktion wird in den Unterkapiteln zu Audio Mode und Radio erläutert.</p>
|
||||
|
||||
<h3>9.3 Tooltips & Info‑Icons</h3>
|
||||
<p>Info‑Symbole neben Feldern geben Kurzbeschreibungen zu Parametern (z. B. „Assistive Listening“, „Immediate Rendering“, „RTN“). Diese Hinweise sollten im Betrieb stets berücksichtigt werden.</p>
|
||||
</section>
|
||||
|
||||
<section id="audio-mode">
|
||||
<h2>10. Web‑UI – 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. 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 – USB‑Eingang als Audio Mode" style="width:100%;height:auto;display:block;"/>
|
||||
<figcaption>Abb. 3: Audio Mode „USB“ – Beispielkonfiguration für lokale USB‑Audioquelle.</figcaption>
|
||||
</figure>
|
||||
|
||||
<figure>
|
||||
<img src="./img/ui-audio-mode-demo.png" alt="Auracast Audio Mode Control – Demo‑Modus 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 & Status</h3>
|
||||
<p>Je nach Firmwarestand werden hier Statusanzeigen (z. B. Audio‑Presence, Netzwerkstatus) und ggf. einfache Monitoring‑Funktionen angeboten.</p>
|
||||
</section>
|
||||
|
||||
<section id="radio">
|
||||
<h2>11. Web‑UI – Radio 1 (analog für Radio 2–6)</h2>
|
||||
|
||||
<h3>11.1 Stream Quality</h3>
|
||||
<p>Auswahl der Abtastrate (z. B. 16/24/32/48 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. B. mittels Access‑Code. 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 Veranstalter‑Kommunikation 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. B. mindestens 30 ms als Ausgangswert), um Audio zu Lautsprechersystemen und Bildschirmen auszurichten.</p>
|
||||
|
||||
<h3>11.6 RTN</h3>
|
||||
<p>RTN‑Profile 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. B. „Deutsch“, „English“, „Audio Description“) und ISO‑639‑3‑Sprachcodes 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. Dante‑Controller achten.</p>
|
||||
|
||||
<figure>
|
||||
<img src="./img/ui-radio2.png" alt="Web‑UI mit zusätzlichem Radio 2 und erweiterten Parametern" style="width:100%;height:auto;display:block;"/>
|
||||
<figcaption>Abb. 5: Beispielansicht mit aktiviertem Radio 2 und separaten Quality‑, Delay‑ und Sprach‑Einstellungen.</figcaption>
|
||||
</figure>
|
||||
</section>
|
||||
|
||||
<section id="betrieb">
|
||||
<h2>12. Multi‑Channel‑Betrieb</h2>
|
||||
|
||||
<h3>12.1 Radios 2–6</h3>
|
||||
<p>Weitere Radios können für zusätzliche Sprachen, Programme oder Assistive‑Listening‑Varianten 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 ms) ist im Gesamtsystem zu berücksichtigen.</p>
|
||||
|
||||
<h3>12.3 Reichweite & Praxis</h3>
|
||||
<p>Typische Reichweiten liegen bei ca. 50 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 Software‑Updates</h3>
|
||||
<p>Updates werden über die Web‑UI oder ein separates Wartungstool eingespielt. Während des Update‑Vorgangs darf die Stromversorgung nicht unterbrochen werden.</p>
|
||||
|
||||
<h3>13.2 Backup & 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 & 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. B. <span class="mono">info@summitwave.eu</span>).</p>
|
||||
</section>
|
||||
|
||||
<section id="troubleshooting">
|
||||
<h2>14. Fehlerbehebung</h2>
|
||||
|
||||
<h3>14.1 Kein Zugriff auf Web‑UI</h3>
|
||||
<p>IP‑Adresse prüfen (DHCP/Statik), Browser‑URL kontrollieren, Ping testen, ggf. Firewall‑Regeln 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 dBu‑Referenz 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/Quality‑Settings prüfen, ggf. Antennenposition und Abstand zu Störquellen optimieren.</p>
|
||||
|
||||
<h3>14.5 AoIP‑spezifische Probleme</h3>
|
||||
<p>Dante/AES67‑Routing im Controller überprüfen, Clock‑Master und Latenz‑Settings kontrollieren, Netzwerk‑QoS 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. B. 5.3)</li>
|
||||
<li>Codec: LC3</li>
|
||||
<li>Frequenzbereich: 2400–2482 MHz</li>
|
||||
<li>Max. Sendeleistung: +10 dBm</li>
|
||||
<li>Bis zu 6 parallele Streams</li>
|
||||
</ul>
|
||||
|
||||
<h3>15.2 Audio</h3>
|
||||
<ul>
|
||||
<li>SNR ≥ 105 dB (typ.)</li>
|
||||
<li>THD+N ≤ 0,005 % (typ.)</li>
|
||||
<li>Frequenzgang entsprechend Datenblatt</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h3>15.3 Netzwerk & Management</h3>
|
||||
<ul>
|
||||
<li>2× RJ45 (Port 1: Config, Port 2: Config + AoIP + PoE)</li>
|
||||
<li>DHCP, statische IP, link‑local</li>
|
||||
<li>Web‑GUI für Konfiguration und Monitoring</li>
|
||||
</ul>
|
||||
|
||||
<h3>15.4 Strom</h3>
|
||||
<ul>
|
||||
<li>PoE (802.3af), USB‑C 5 V</li>
|
||||
<li>Leistungsaufnahme ca. 7 W max., 3 W nominal (Beispielwerte)</li>
|
||||
</ul>
|
||||
|
||||
<h3>15.5 Mechanik & Umwelt</h3>
|
||||
<ul>
|
||||
<li>Abmessungen, Gewicht gemäß Datenblatt (z. B. ca. 200×190×50 mm, 0,8 kg)</li>
|
||||
<li>Gehäusematerial und Temperaturbereich gemäß Spezifikation</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h3>15.6 Normen & 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. EU‑Konformitätserklärung</h3>
|
||||
<p>Die EU‑Konformitätserklärung (DoC) ist über QR‑Code 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 639‑3, AoIP und weitere Fachbegriffe erläutert werden.</p>
|
||||
|
||||
<h3>D. Checklisten</h3>
|
||||
<p>Checklisten für Installation, Event‑Setup und Fehlerbehebung helfen, wiederkehrende Abläufe zu standardisieren und zu dokumentieren.</p>
|
||||
|
||||
<h3>E. Kontakt & Impressum</h3>
|
||||
<p>Kontakt‑ und Impressumsangaben werden konsistent mit Datenblatt und Website gehalten, z. B.:</p>
|
||||
<p class="muted">Summitwave FlexCo · Hinterwaldnerstraße 16a · 6020 Innsbruck · Österreich · <span class="mono">info@summitwave.eu</span></p>
|
||||
</section>
|
||||
</article>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
39
src/manual/index.php
Normal file
39
src/manual/index.php
Normal 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
130
src/manual/login.php
Normal 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 Online‑Anleitung.</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
8
src/manual/logout.php
Normal file
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
require __DIR__ . '/auth.php';
|
||||
|
||||
$_SESSION['sw_manual_user'] = null;
|
||||
session_destroy();
|
||||
|
||||
header('Location: login.php');
|
||||
exit;
|
||||
@@ -1,4 +1,5 @@
|
||||
User-agent: *
|
||||
Allow: /
|
||||
Disallow: /manual/
|
||||
|
||||
Sitemap: https://summitwave.eu/sitemap.xml
|
||||
|
||||
Reference in New Issue
Block a user