esc zum verlassen

Wi‑Fi Kanalplaner (2,4 / 5 / 6 GHz)

Suchen und visualisieren Sie WLAN-Kanäle von 2,4 GHz, 5 GHz und 6 GHz. Finden Sie Kanäle anhand ihrer Nummer oder Frequenz in verschiedenen Notationen und zeigen Sie Bandbreiten von 20 bis 320 MHz an.

Schnellsuchhilfe

Suche Kanäle auf verschiedene Weise:

  • Einzelne Kanäle: Geben Sie die Kanalnummer ein (z. B. „36“ oder „1“)
  • Gebündelte Kanäle: Geben Sie die vollständige Notation ein (z. B. „42[36]“ oder „1+5“)
  • Centerkanäle: Geben Sie nur den Centerkanal ein (z. B. „42“)
  • Primärkanäle: Klammern hinzufügen, um nach Primärkanal zu suchen (z. B. „[36]“)
Wi‑Fi‑Kanäle
Kanal Bandbreite Frequenz Hinweis

Kanalvisualisierung

Wi‑Fi‑Bänder & Kanäle

Frequenzbänder

  • 2,4‑GHz‑Band (802.11b/g/n): Stark genutzt, höhere Störanfälligkeit, bessere Wanddurchdringung.
  • 5‑GHz‑Band (802.11a/n/ac/ax): Weniger Störungen, höhere Datenraten, geringere Reichweite durch Wände.
  • 6‑GHz‑Band (802.11ax/be): Mit Wi‑Fi 6E eingeführt, weniger überlastet, hohe Geschwindigkeiten, kurze Reichweite.

Kanalbenennung & Notation

  • 2,4‑GHz‑Band: Gebündelte Kanäle werden durch Kombination von Primär‑ und Sekundärkanal benannt (z. B. „1+5“)
  • 5‑GHz‑ & 6‑GHz‑Bänder: Gebündelte Kanäle werden nach Centerfrequenz und Primärkanal benannt (z. B. „42[36]“)
  • Alternativnotation (z. B. „36+40“) wird beim Hovern über gebündelte Kanäle angezeigt
  • Der Primärkanal bestimmt den Steuerkanal für Management‑Frames
Technische Informationen
  • Kanalbandbreite: Breitere Kanäle (40/80/160/320 MHz) bieten höhere Datenraten, sind aber anfälliger für Störungen.
  • DFS (Dynamic Frequency Selection): Erkennt Radar und wechselt bei Bedarf automatisch den Kanal.
  • TPC (Transmit Power Control): Automatische Anpassung der Sendeleistung.
  • BFWA (Broadband Fixed Wireless Access): Kanäle außerhalb der Standard‑U-NII‑Bänder, typischerweise für lizenzierte oder koordinierte Punkt‑zu‑Punkt‑Links (z. B. Kanal 169 bei 5845 MHz).
  • Regionale Einschränkungen: Unterschiedliche Regionen (EU, USA usw.) erlauben verschiedene Kanäle, insbesondere im 6‑GHz‑Band.
  • Wi‑Fi 7‑Funktionen: Unterstützung für 320‑MHz‑Kanäle im 6‑GHz‑Band bietet extrem hohe Durchsatzraten.

`); printWindow.document.close(); } // Update the band info function updateBandInfo() { const bandInfoText = getBandInfo(aktuellesBand); calculatorForm.bandInfo.textContent = bandInfoText; calculatorForm.bandInfo.style.display = bandInfoText ? 'block' : 'none'; } // Update the bandwidth info function updateBandbreiteInfo() { const bandbreiteInfoText = getBandbreiteInfo(aktuelleBandbreite); calculatorForm.bandbreiteInfo.textContent = bandbreiteInfoText; calculatorForm.bandbreiteInfo.style.display = bandbreiteInfoText ? 'block' : 'none'; } // Update the frequency field depending on band function updateFrequenzFeld() { const anzeigeband = aktuellesBand === 'auto' ? (aktuellesSuchergebnis ? aktuellesSuchergebnis.band : '2,4GHz') : aktuellesBand; calculatorForm.frequenzLabel.textContent = `Frequency:`; // Update placeholder based on selected unit updateFrequenzPlaceholder(); // Set appropriate unit for the band updateFrequenzEinheit(); } // Update frequency placeholder based on selected unit and band function updateFrequenzPlaceholder() { const anzeigeband = aktuellesBand === 'auto' ? (aktuellesSuchergebnis ? aktuellesSuchergebnis.band : '2,4GHz') : aktuellesBand; const unit = calculatorForm.frequenzUnit.value; if (unit === 'GHz') { /* 60GHz-Bedingung auskommentiert if (anzeigeband === '60GHz') { calculatorForm.frequenz.placeholder = "e.g. 60.48 or 58.32"; } else */ if (anzeigeband === '6GHz') { calculatorForm.frequenz.placeholder = "e.g. 5.955 or 6.105"; } else if (anzeigeband.startsWith('5GHz')) { calculatorForm.frequenz.placeholder = "e.g. 5.18 or 5.5"; } else { calculatorForm.frequenz.placeholder = "e.g. 2.412 or 2.462"; } } else { /* 60GHz-Bedingung auskommentiert if (anzeigeband === '60GHz') { calculatorForm.frequenz.placeholder = "e.g. 60480 or 58320"; } else { */ calculatorForm.frequenz.placeholder = "e.g. 2412 or 5180"; /* Schließende Klammer auskommentiert } */ } } // Set appropriate frequency unit based on band function updateFrequenzEinheit() { const anzeigeband = aktuellesBand === 'auto' ? (aktuellesSuchergebnis ? aktuellesSuchergebnis.band : '2,4GHz') : aktuellesBand; // Auto-select GHz for 60GHz band, MHz for others /* 60GHz-Bedingung auskommentiert if (anzeigeband === '60GHz' && calculatorForm.frequenzUnit.value !== 'GHz') { calculatorForm.frequenzUnit.value = 'GHz'; } else */ if (calculatorForm.frequenzUnit.value === '') { calculatorForm.frequenzUnit.value = 'MHz'; } updateFrequenzPlaceholder(); } // Handle frequency unit change function handleFrequenzUnitChange() { updateFrequenzPlaceholder(); // If there's a value in the frequency field, convert it if (calculatorForm.frequenz.value) { const oldUnit = calculatorForm.frequenzUnit.value === 'MHz' ? 'GHz' : 'MHz'; const oldValue = parseFloat(calculatorForm.frequenz.value); if (!isNaN(oldValue)) { let newValue; if (oldUnit === 'GHz' && calculatorForm.frequenzUnit.value === 'MHz') { // Convert from GHz to MHz newValue = (oldValue * 1000).toFixed(0); } else if (oldUnit === 'MHz' && calculatorForm.frequenzUnit.value === 'GHz') { // Convert from MHz to GHz newValue = (oldValue / 1000).toFixed(3); // Remove trailing zeros newValue = newValue.replace(/\.?0+$/, ''); } calculatorForm.frequenz.value = newValue; } } } // Show or hide error function setzeError(inputElement, errorElement, message) { const inputContainer = inputElement.parentElement; if (message) { inputContainer.classList.add('error'); errorElement.style.display = 'block'; errorElement.textContent = message; } else { inputContainer.classList.remove('error'); errorElement.style.display = 'none'; } } // Kombinierte Funktion für Bandinformationen function getBandInfo(bandName) { switch (bandName) { case 'auto': return 'Die Bandauswahl erfolgt automatisch anhand der eingegebenen Frequenz oder Kanalnummer.'; case '2,4GHz': return 'Max. 100 mW (20 dBm). Sehr überlastetes Band, empfohlene Kanäle: 1, 6, 11 (überlappungsfrei) bei 20 MHz oder 1+5 (gebündelt) bei 40 MHz.'; case '5GHz-U-NII-1': return 'Nur für Innenräume. Kein DFS/TPC erforderlich. Max. 200 mW (23 dBm). Frequenzbereich: 5150–5250 MHz.'; case '5GHz-U-NII-2': return 'Nur für Innenräume. DFS/TPC erforderlich (Radardetektion). Max. 200 mW (23 dBm). Frequenzbereich: 5250–5350 MHz.'; case '5GHz-U-NII-2E': return 'Außeneinsatz erlaubt. DFS/TPC erforderlich (Radardetektion). Max. 1000 mW (30 dBm). Frequenzbereich: 5470–5725 MHz.'; case '5GHz-BFWA': return 'Außeneinsatz erlaubt. DFS/TPC erforderlich (kein DFS ab 5850 MHz). Max. 4 W (36 dBm). Nur für registrierte gewerbliche Nutzer! Frequenzbereich: 5725–5875 MHz.'; case '6GHz': return 'Neues Band für Wi-Fi 6E und Wi-Fi 7. Aktuell regional unterschiedlich reguliert. Sehr hohe Datenraten, begrenzte Reichweite, geringe Störungen.'; /* case '60GHz': return 'Innen- und Außeneinsatz erlaubt. Max. 10 W, mit >30 dBi Antennengewinn bis zu 316 W (nur stationäre Außeninstallationen). Multi-Gigabit-Geschwindigkeiten. Frequenzbereich: 57–71 GHz.'; */ default: return ''; } } // Kombinierte Funktion für Bandbreiteninformationen function getBandbreiteInfo(bandbreite) { switch (bandbreite) { case 'all': return 'Alle verfügbaren Kanalbandbreiten werden angezeigt.'; case '20': return 'Standard-Kanalbreite für ältere Netzwerke. Kompatibel mit allen Wi-Fi-Geräten.'; case '40': return 'Mit 802.11n eingeführt. Verdoppelt den Durchsatz im Vergleich zu 20 MHz.'; case '80': return 'Mit 802.11ac eingeführt. Hoher Durchsatz, aber begrenzte Anzahl überlappungsfreier Kanäle.'; case '160': return 'Maximale Kanalbreite für 802.11ac/ax. Sehr hoher Durchsatz, sehr wenige verfügbare Kanäle.'; case '320': return 'Neu bei Wi-Fi 7 (802.11be). Ultra-hoher Durchsatz, nur im 6‑GHz‑Band verfügbar.'; /* case '2160': return 'Standard-Kanalbreite für 802.11ad im 60‑GHz‑Band. Multi-Gigabit-Geschwindigkeiten.'; case '4320': return 'Kanalbündelung für 802.11ay im 60‑GHz‑Band. Noch höhere Geschwindigkeiten.'; case '6480': return 'Dreifache Kanalbündelung für 802.11ay im 60‑GHz‑Band.'; case '8640': return 'Vierfache Kanalbündelung für 802.11ay im 60‑GHz‑Band. Maximaler Durchsatz.'; */ default: return ''; } } // Kombinierte Funktion für Kanalhinweise function getKanalHinweis(band, kanalNum, bandbreite) { // 2,4-GHz-Band if (band === '2,4GHz') { if (typeof kanalNum === 'string' && kanalNum.includes('+')) { const kanalTeile = kanalNum.split('+'); if (kanalTeile[0] === '1' || kanalTeile[0] === '2' || kanalTeile[0] === '3') { return 'Empfohlener gebündelter Kanal für geringere Störungen'; } else if (kanalTeile[0] === '7' || kanalTeile[0] === '8' || kanalTeile[0] === '9') { return 'Kann zu Störungen mit benachbarten Netzwerken führen'; } return '40 MHz-Kanal (zwei 20 MHz-Kanäle kombiniert)'; } else { if (kanalNum === 1 || kanalNum === 6 || kanalNum === 11) { return 'Empfohlener überlappungsfreier Kanal'; } else if (kanalNum === 9) { return 'Die meisten Mikrowellenherde arbeiten bei 2,455 GHz und können diesen Kanal stören!'; } else if (kanalNum === 12 || kanalNum === 13) { return 'Nur in der EU zugelassen'; } else if (kanalNum === 14) { return 'Nur in Japan zugelassen'; } } } // 5 GHz U-NII-1 else if (band === '5GHz-U-NII-1') { if (bandbreite === '20') { return 'Nur Innenbereich, kein DFS erforderlich'; } else if (bandbreite === '40') { return 'Nur Innenbereich, 40 MHz-Kanalbündelung (zwei 20 MHz-Kanäle)'; } else if (bandbreite === '80') { return 'Nur Innenbereich, 80 MHz-Kanalbündelung (vier 20 MHz-Kanäle)'; } else if (bandbreite === '160') { return 'Nur Innenbereich, 160 MHz-Kanalbündelung (acht 20 MHz-Kanäle), umfasst U-NII-1 und U-NII-2'; } } // 5 GHz U-NII-2 else if (band === '5GHz-U-NII-2') { const dfsHinweis = 'DFS und TPC erforderlich. Radardetektion.'; if (bandbreite === '20') { return dfsHinweis; } else if (bandbreite === '40') { return dfsHinweis + ' 40 MHz-Kanalbündelung (zwei 20 MHz-Kanäle).'; } else if (bandbreite === '80') { return dfsHinweis + ' 80 MHz-Kanalbündelung (vier 20 MHz-Kanäle).'; } } // 5 GHz U-NII-2E else if (band === '5GHz-U-NII-2E') { let basisHinweis = 'DFS und TPC erforderlich. '; if (kanalNum === 120 || kanalNum === 124 || kanalNum === 128 || (typeof kanalNum === 'string' && kanalNum.includes('120'))) { basisHinweis += 'Radarbereich. '; } else if (kanalNum === 116 || kanalNum === 132 || (typeof kanalNum === 'string' && (kanalNum.includes('116') || kanalNum.includes('132')))) { basisHinweis += 'Randbereich des Radarbereichs. '; } if (bandbreite === '40') { basisHinweis += '40 MHz-Kanalbündelung (zwei 20 MHz-Kanäle).'; } else if (bandbreite === '80') { basisHinweis += '80 MHz-Kanalbündelung (vier 20 MHz-Kanäle).'; } else if (bandbreite === '160') { basisHinweis += '160 MHz-Kanalbündelung (acht 20 MHz-Kanäle).'; } return basisHinweis; } // 5 GHz BFWA else if (band === '5GHz-BFWA') { let hinweis = ''; if (kanalNum === 169 || kanalNum === 173 || (typeof kanalNum === 'string' && kanalNum.includes('169'))) { hinweis = 'Kein DFS ab 5850 MHz erforderlich. '; } else { hinweis = 'DFS/TPC erforderlich. '; } hinweis += 'Nur für registrierte gewerbliche Nutzer! '; if (bandbreite === '40') { hinweis += '40 MHz-Kanalbündelung (zwei 20 MHz-Kanäle).'; } else if (bandbreite === '80') { hinweis += '80 MHz-Kanalbündelung (vier 20 MHz-Kanäle).'; } return hinweis; } // 6 GHz-Band else if (band === '6GHz') { let hinweis = 'Nur Wi-Fi 6E/7. '; if (bandbreite === '320') { hinweis = 'Nur Wi-Fi 7. Ultra-hoher Durchsatz. '; if (kanalNum === '31[1]' || kanalNum === '63[33]' || kanalNum === '95[63]' || (typeof kanalNum === 'string' && (kanalNum.includes('1-61') || kanalNum.includes('33-93') || kanalNum.includes('63-127')))) { hinweis += 'In den USA verfügbar, nicht in der EU. '; } } else { if (parseInt(bandbreite) >= 160) { if (kanalNum === '15[1]' || kanalNum === '1-29') { hinweis += 'Sowohl in den USA als auch in der EU verfügbar. '; } else { hinweis += 'In den USA verfügbar, nicht in der EU. '; } } } if (bandbreite === '40') { hinweis += '40 MHz-Kanalbündelung (zwei 20 MHz-Kanäle).'; } else if (bandbreite === '80') { hinweis += '80 MHz-Kanalbündelung (vier 20 MHz-Kanäle).'; } else if (bandbreite === '160') { hinweis += '160 MHz-Kanalbündelung (acht 20 MHz-Kanäle).'; } else if (bandbreite === '320') { hinweis += '320 MHz-Kanalbündelung (sechzehn 20 MHz-Kanäle).'; } return hinweis; } /* 60GHz-Bedingung auskommentiert // 60 GHz Band else if (band === '60GHz') { let hinweis = 'Ultra-short range. Line-of-sight required. '; // Bandwidth notes if (bandbreite === '2160') { hinweis += 'Standard 802.11ad channel.'; } else if (bandbreite === '4320') { hinweis += 'Bonded 802.11ay channel (2x 2160 MHz).'; } else if (bandbreite === '6480') { hinweis += 'Bonded 802.11ay channel (3x 2160 MHz).'; } else if (bandbreite === '8640') { hinweis += 'Bonded 802.11ay channel (4x 2160 MHz).'; } return hinweis; } */ return null; } // Show the search result function zeigeErgebnis(ergebnis) { if (!ergebnis) { calculatorForm.suchergebnis.style.display = 'none'; return; } calculatorForm.suchergebnis.style.display = 'block'; // Show main result calculatorForm.ergebnisBand.textContent = ergebnis.band; calculatorForm.ergebnisKanal.textContent = ergebnis.kanal; // Show bandwidth const bandbreitenText = ergebnis.band === '60GHz' ? `${(ergebnis.bandbreite / 1000).toFixed(2)} GHz` : `${ergebnis.bandbreite} MHz`; calculatorForm.ergebnisBandbreite.textContent = bandbreitenText; // Format frequency based on user's selected unit const unit = calculatorForm.frequenzUnit.value; if (unit === 'GHz') { calculatorForm.ergebnisFrequenz.textContent = `${(ergebnis.exakteFrequenz / 1000).toFixed(3).replace(/\.?0+$/, '')} GHz`; } else { calculatorForm.ergebnisFrequenz.textContent = `${ergebnis.exakteFrequenz} MHz`; } // Show note if available const hinweis = getKanalHinweis(ergebnis.band, ergebnis.kanal, ergebnis.bandbreite.toString()); if (hinweis) { calculatorForm.hinweisText.textContent = hinweis; calculatorForm.ergebnisHinweis.style.display = 'block'; } else { calculatorForm.ergebnisHinweis.style.display = 'none'; } // Show other matches if available if (ergebnis.alleErgebnisse && ergebnis.alleErgebnisse.length > 1) { calculatorForm.weitereTreeffer.style.display = 'block'; // Clear list calculatorForm.trefferListe.innerHTML = ''; // Add other matches (from the second match) ergebnis.alleErgebnisse.slice(1).forEach(treffer => { const listItem = document.createElement('li'); const bandbreitenText = treffer.band === '60GHz' ? `${(treffer.bandbreite / 1000).toFixed(2)} GHz` : `${treffer.bandbreite} MHz`; listItem.textContent = `Band: ${treffer.band}, Channel: ${treffer.kanal}, Bandwidth: ${bandbreitenText}, Frequency: ${ treffer.band === '60GHz' ? `${(treffer.frequenz / 1000).toFixed(2)} GHz` : `${treffer.frequenz} MHz` }`; calculatorForm.trefferListe.appendChild(listItem); }); } else { calculatorForm.weitereTreeffer.style.display = 'none'; } // Update visualization if on visualization tab if (document.getElementById('visualization-tab').classList.contains('active')) { renderChannelVisualization(); } } // Render the channel table function renderKanalTabelle() { // Determine current band const anzeigeband = aktuellesBand === 'auto' ? (aktuellesSuchergebnis ? aktuellesSuchergebnis.band : '2,4GHz') : aktuellesBand; // Determine channels to display based on bandwidth and band let anzuzeigende_kanäle = []; // Get all available bandwidths for the current band const verfügbareBandbreiten = Object.keys(kanalDaten[anzeigeband]); if (aktuelleBandbreite === 'all') { // Show all bandwidths verfügbareBandbreiten.forEach(bandbreite => { kanalDaten[anzeigeband][bandbreite].forEach(kanal => { anzuzeigende_kanäle.push({ ...kanal, bandbreite: parseInt(bandbreite) }); }); }); } else { // Show only specific bandwidth const bandbreitenKey = `${aktuelleBandbreite}MHz`; if (kanalDaten[anzeigeband][bandbreitenKey]) { anzuzeigende_kanäle = kanalDaten[anzeigeband][bandbreitenKey].map(kanal => ({ ...kanal, bandbreite: parseInt(aktuelleBandbreite) })); } } // Clear table calculatorForm.kanalTabelle.innerHTML = ''; // If no channels to display if (anzuzeigende_kanäle.length === 0) { const row = document.createElement('tr'); const cell = document.createElement('td'); cell.colSpan = 4; cell.textContent = 'No channels available for this bandwidth in the selected band.'; cell.style.textAlign = 'center'; row.appendChild(cell); calculatorForm.kanalTabelle.appendChild(row); return; } // Sort channels by number anzuzeigende_kanäle.sort((a, b) => { // Primary by bandwidth (larger first) const bandbreitenDiff = b.bandbreite - a.bandbreite; if (bandbreitenDiff !== 0) return bandbreitenDiff; // Secondary by channel number (numeric or string) if (typeof a.kanal === 'number' && typeof b.kanal === 'number') { return a.kanal - b.kanal; } else if (typeof a.kanal === 'string' && typeof b.kanal === 'string') { // Extract first number from string (e.g. "36+40" -> 36) const aNum = parseInt(a.kanal.split(/[+\-]/)[0]); const bNum = parseInt(b.kanal.split(/[+\-]/)[0]); return aNum - bNum; } else { // Mixed types, number before string return typeof a.kanal === 'number' ? -1 : 1; } }); // Add channels anzuzeigende_kanäle.forEach(kanal => { const row = document.createElement('tr'); // Highlight selected channel if (aktuellesSuchergebnis && aktuellesSuchergebnis.band === anzeigeband && aktuellesSuchergebnis.kanal.toString() === kanal.kanal.toString() && aktuellesSuchergebnis.bandbreite === kanal.bandbreite) { row.classList.add('highlight'); } // Add Wi-Fi 7 class if applicable if (kanal.wifi7) { row.classList.add('wifi7-channel'); } // Channel const kanalCell = document.createElement('td'); kanalCell.textContent = kanal.kanal; // Add tooltip for alternative notation if available if (kanal.altNotation) { kanalCell.title = `Alternative notation: ${kanal.altNotation}`; kanalCell.style.cursor = 'help'; } row.appendChild(kanalCell); // Bandwidth const bandbreiteCell = document.createElement('td'); if (anzeigeband === '60GHz') { bandbreiteCell.textContent = `${(kanal.bandbreite / 1000).toFixed(2)} GHz`; } else { bandbreiteCell.textContent = `${kanal.bandbreite} MHz`; } // Add Wi-Fi 7 badge for 320 MHz if (kanal.bandbreite === 320) { const badge = document.createElement('span'); badge.textContent = ' (Wi-Fi 7)'; badge.style.color = 'var(--wifi7-color)'; badge.style.fontSize = '0.9em'; bandbreiteCell.appendChild(badge); } row.appendChild(bandbreiteCell); // Frequency const frequenzCell = document.createElement('td'); const unit = calculatorForm.frequenzUnit.value; if (unit === 'GHz') { frequenzCell.textContent = `${(kanal.frequenz / 1000).toFixed(3).replace(/\.?0+$/, '')} GHz`; } else { frequenzCell.textContent = `${kanal.frequenz} MHz`; } row.appendChild(frequenzCell); // Note const hinweisCell = document.createElement('td'); const hinweis = getKanalHinweis(anzeigeband, kanal.kanal, kanal.bandbreite.toString()); hinweisCell.textContent = hinweis || '-'; row.appendChild(hinweisCell); calculatorForm.kanalTabelle.appendChild(row); }); } // Search for channels based on frequency function sucheKanalPerFrequenz(freq) { if (!freq) { aktuellesSuchergebnis = null; zeigeErgebnis(null); return; } // Convert input to MHz let frequenzNum; const unit = calculatorForm.frequenzUnit.value; if (unit === 'GHz') { // GHz format (e.g. 5.18 or 60.48) - convert to MHz frequenzNum = Math.round(parseFloat(freq) * 1000); } else { // MHz format (e.g. 5180 or 2412) frequenzNum = parseInt(freq, 10); } if (isNaN(frequenzNum)) { setzeError(calculatorForm.frequenz, calculatorForm.frequenzError, `Please enter a valid frequency in ${unit}`); aktuellesSuchergebnis = null; zeigeErgebnis(null); return; } // Automatically determine band and update UI let gefundenesBand = bestimmeBandAusFrequenz(frequenzNum); // Update band dropdown aktuellesBand = gefundenesBand; calculatorForm.band.value = aktuellesBand; updateBandInfo(); updateFrequenzFeld(); // Update bandwidth dropdown aktualisiereBandbreitenDropdown(); // Search for matching channel let allesuchErgebnisse = sucheKanalInAllenBändern(frequenzNum, gefundenesBand); if (allesuchErgebnisse.length > 0) { const gefundenerKanal = allesuchErgebnisse[0]; // Update bandwidth if (aktuelleBandbreite === 'all' || aktuelleBandbreite !== gefundenerKanal.bandbreite.toString()) { aktuelleBandbreite = gefundenerKanal.bandbreite.toString(); calculatorForm.bandbreite.value = aktuelleBandbreite; updateBandbreiteInfo(); } // Update channel field calculatorForm.kanal.value = gefundenerKanal.kanal; // Save search result aktuellesSuchergebnis = { exakteFrequenz: gefundenerKanal.frequenz, kanal: gefundenerKanal.kanal, band: gefundenerKanal.band, bandbreite: gefundenerKanal.bandbreite, alleErgebnisse: allesuchErgebnisse.slice(0, 5), // Top 5 matches wifi7: gefundenerKanal.wifi7, altNotation: gefundenerKanal.altNotation }; // Show result zeigeErgebnis(aktuellesSuchergebnis); renderKanalTabelle(); } else { setzeError(calculatorForm.frequenz, calculatorForm.frequenzError, `Keine passenden Kanäle für die Frequenz ${freq} ${unit} gefunden`); aktuellesSuchergebnis = null; zeigeErgebnis(null); } } // Function to determine band from frequency function bestimmeBandAusFrequenz(frequenzNum) { if (frequenzNum >= 2400 && frequenzNum < 2500) { return '2,4GHz'; } else if (frequenzNum >= 5150 && frequenzNum < 5250) { return '5GHz-U-NII-1'; } else if (frequenzNum >= 5250 && frequenzNum < 5350) { return '5GHz-U-NII-2'; } else if (frequenzNum >= 5470 && frequenzNum < 5725) { return '5GHz-U-NII-2E'; } else if (frequenzNum >= 5725 && frequenzNum < 5875) { return '5GHz-BFWA'; } else if (frequenzNum >= 5925 && frequenzNum < 7125) { return '6GHz'; } /* 60GHz-Bedingung auskommentiert else if (frequenzNum >= 57000 && frequenzNum < 71000) { return '60GHz'; } */ return 'auto'; } // Function to search channels in all bands function sucheKanalInAllenBändern(frequenzNum, gefundenesBand) { const toleranz = 10; // Tolerance in MHz let allesuchErgebnisse = []; // Determine which bands to search const suchBänder = gefundenesBand !== 'auto' ? [gefundenesBand] : Object.keys(kanalDaten); suchBänder.forEach(bandName => { Object.keys(kanalDaten[bandName]).forEach(bandbreite => { // Skip if specific bandwidth is chosen and not this one if (aktuelleBandbreite !== 'all' && parseInt(aktuelleBandbreite) !== parseInt(bandbreite)) { return; } const kanäle = kanalDaten[bandName][bandbreite]; kanäle.forEach(kanal => { const abweichung = Math.abs(kanal.frequenz - frequenzNum); if (abweichung <= toleranz) { allesuchErgebnisse.push({ band: bandName, kanal: kanal.kanal, frequenz: kanal.frequenz, bandbreite: parseInt(bandbreite), abweichung: abweichung, wifi7: kanal.wifi7, altNotation: kanal.altNotation }); } }); }); }); // Sort by smallest deviation return allesuchErgebnisse.sort((a, b) => a.abweichung - b.abweichung); } // Event handler for frequency change function handleFrequenzChange(event) { const neuFrequenz = event.target.value; // Reset error field setzeError(calculatorForm.frequenz, calculatorForm.frequenzError, null); if (suchTimeout) { clearTimeout(suchTimeout); } if (neuFrequenz) { // Delayed call of the search function suchTimeout = setTimeout(() => { sucheKanalPerFrequenz(neuFrequenz); }, 500); } else { // Empty field, reset search result aktuellesSuchergebnis = null; zeigeErgebnis(null); renderKanalTabelle(); } } // Hilfsfunktion, um zu prüfen, ob ein Kanal mit der Suchanfrage übereinstimmt function matchesChannelSearch(kanalObj, suchKanal) { let matchPriority = 0; // Higher is better match // Exact string match (highest priority) if (kanalObj.kanal === suchKanal) { if (typeof suchKanal === 'string' && (suchKanal.includes('[') || suchKanal.includes('+'))) { return { match: true, priority: 4 }; // Exact notation match gets highest priority } return { match: true, priority: 3 }; // Exact match but not notation } // String in Zahl konvertieren, falls möglich const numSuchKanal = typeof suchKanal === 'string' ? parseInt(suchKanal, 10) : suchKanal; // Für numerische Suche (z.B. 47) in Mittenfrequenzformaten (z.B. "47[33]") if (!isNaN(numSuchKanal) && typeof kanalObj.kanal === 'string') { // Format "47[33]" - extrahiere Mittenfrequenz if (kanalObj.kanal.includes('[')) { const centerChannel = parseInt(kanalObj.kanal.split('[')[0], 10); if (centerChannel === numSuchKanal) { return { match: true, priority: 2 }; // Center channel match } } } // Suche nach Primärkanal mit []-Notation (z.B. "[36]") if (typeof suchKanal === 'string' && suchKanal.startsWith('[') && suchKanal.endsWith(']')) { const primaryChannelSearch = parseInt(suchKanal.replace(/[\[\]]/g, ''), 10); // Prüfe, ob das Objekt eine primärkanal-Eigenschaft hat if (kanalObj.primärkanal && kanalObj.primärkanal === primaryChannelSearch) { return { match: true, priority: 3 }; // Primary channel match with bracket notation } // Oder check im String-Format wie "47[36]" if (typeof kanalObj.kanal === 'string' && kanalObj.kanal.includes('[')) { const primaryChannelPart = kanalObj.kanal.split('[')[1].split(']')[0]; const primaryChannel = parseInt(primaryChannelPart, 10); if (primaryChannel === primaryChannelSearch) { return { match: true, priority: 3 }; // Primary channel match with bracket notation } } } return { match: false, priority: 0 }; } function sucheFrequenzPerKanal(kanalNum) { if (!kanalNum) { aktuellesSuchergebnis = null; zeigeErgebnis(null); return; } // Check for special notations first before trying to convert to number let suchKanal; if (typeof kanalNum === 'string' && (kanalNum.includes('+') || kanalNum.includes('['))) { // It's a special notation - keep as string suchKanal = kanalNum; } else { // Try to convert to number suchKanal = parseInt(kanalNum, 10); if (isNaN(suchKanal)) { suchKanal = kanalNum; } } // Check if it's a valid search if (typeof suchKanal === 'string' && !suchKanal.includes('[') && !suchKanal.includes('+') && isNaN(parseInt(suchKanal, 10))) { setzeError(calculatorForm.kanal, calculatorForm.kanalError, 'Bitte geben Sie eine gültige Kanalnummer oder ein passendes Format ein'); aktuellesSuchergebnis = null; zeigeErgebnis(null); return; } // Search in all bands for the channel let gefundeneKanäle = []; // First search in the current band if (aktuellesBand !== 'auto') { // Search in selected band Object.keys(kanalDaten[aktuellesBand]).forEach(bandbreite => { // Skip if specific bandwidth is chosen and not this one if (aktuelleBandbreite !== 'all' && parseInt(aktuelleBandbreite) !== parseInt(bandbreite)) { return; } const kanäle = kanalDaten[aktuellesBand][bandbreite]; kanäle.forEach(k => { const matchResult = matchesChannelSearch(k, suchKanal); if (matchResult.match) { gefundeneKanäle.push({ band: aktuellesBand, kanal: k.kanal, frequenz: k.frequenz, bandbreite: parseInt(bandbreite), abweichung: 0, wifi7: k.wifi7, altNotation: k.altNotation, priority: matchResult.priority }); } }); }); } // If nothing found in current band or "auto", search in all bands if (gefundeneKanäle.length === 0 || aktuellesBand === 'auto') { // Search in all bands Object.keys(kanalDaten).forEach(band => { if (band !== aktuellesBand || aktuellesBand === 'auto') { Object.keys(kanalDaten[band]).forEach(bandbreite => { // Skip if specific bandwidth is chosen and not this one if (aktuelleBandbreite !== 'all' && parseInt(aktuelleBandbreite) !== parseInt(bandbreite)) { return; } const kanäle = kanalDaten[band][bandbreite]; kanäle.forEach(k => { const matchResult = matchesChannelSearch(k, suchKanal); if (matchResult.match) { gefundeneKanäle.push({ band: band, kanal: k.kanal, frequenz: k.frequenz, bandbreite: parseInt(bandbreite), abweichung: 0, wifi7: k.wifi7, altNotation: k.altNotation, priority: matchResult.priority }); } }); }); } }); } // If at least one channel was found if (gefundeneKanäle.length > 0) { // Sort first by whether it matches the selected band, then by priority gefundeneKanäle.sort((a, b) => { // First sort by whether it matches the selected band (if not in auto mode) if (aktuellesBand !== 'auto') { if (a.band === aktuellesBand && b.band !== aktuellesBand) return -1; if (a.band !== aktuellesBand && b.band === aktuellesBand) return 1; } // Then sort by priority return b.priority - a.priority; }); const besterTreffer = gefundeneKanäle[0]; // Always update band to that of the found channel // This is the key change - update always, not just in auto mode aktuellesBand = besterTreffer.band; calculatorForm.band.value = aktuellesBand; updateBandInfo(); updateFrequenzFeld(); // Update bandwidth dropdown aktualisiereBandbreitenDropdown(); // Set bandwidth to match the found channel if (aktuelleBandbreite === 'all' || aktuelleBandbreite !== besterTreffer.bandbreite.toString()) { aktuelleBandbreite = besterTreffer.bandbreite.toString(); calculatorForm.bandbreite.value = aktuelleBandbreite; updateBandbreiteInfo(); } // Update frequency field based on the selected unit const unit = calculatorForm.frequenzUnit.value; if (unit === 'GHz') { calculatorForm.frequenz.value = (besterTreffer.frequenz / 1000).toFixed(3).replace(/\.?0+$/, ''); } else { calculatorForm.frequenz.value = besterTreffer.frequenz; } // Save search result aktuellesSuchergebnis = { exakteFrequenz: besterTreffer.frequenz, kanal: besterTreffer.kanal, band: besterTreffer.band, bandbreite: besterTreffer.bandbreite, alleErgebnisse: gefundeneKanäle, wifi7: besterTreffer.wifi7, altNotation: besterTreffer.altNotation }; // Show result zeigeErgebnis(aktuellesSuchergebnis); renderKanalTabelle(); } else { setzeError(calculatorForm.kanal, calculatorForm.kanalError, `Kanal ${kanalNum} wurde in keinem Frequenzband mit der gewählten Bandbreite gefunden`); aktuellesSuchergebnis = null; zeigeErgebnis(null); } } // Tab-Funktionalität function setupTabs() { const tabButtons = document.querySelectorAll('.tab-button'); tabButtons.forEach(button => { button.addEventListener('click', () => { // Aktiven Tab deaktivieren const activeButton = document.querySelector('.tab-button.active'); const activeContent = document.querySelector('.tab-content.active'); if (activeButton) activeButton.classList.remove('active'); if (activeContent) activeContent.classList.remove('active'); // Neuen Tab aktivieren button.classList.add('active'); const tabId = button.getAttribute('data-tab'); const tabContent = document.getElementById(`${tabId}-tab`); if (tabContent) { tabContent.classList.add('active'); // Bei Wechsel zur Visualisierung aktualisieren if (tabId === 'visualization') { renderChannelVisualization(); } } }); }); } // Initialize the app init(); });

Lade Bewertungen...
Überprüft und aktualisiert am 4. Februar 2026
Autor: IBL-Editors Team
Technische Überprüfung: Daniel Lenhardt - CEO & Owner | IB-Lenhardt AG
Feedback zu diesem Artikel geben
ILAC-MRA DAkkS-01 ILAC-MRA DAkkS-01