{"id":10272,"date":"2026-08-15T01:03:30","date_gmt":"2026-08-14T23:03:30","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/werkzeuge\/unifi-zone-matrix-planner\/"},"modified":"2026-08-15T01:03:30","modified_gmt":"2026-08-14T23:03:30","slug":"unifi-zone-matrix-planner","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/unifi-zone-matrix-planner\/","title":{"rendered":"Planer f\u00fcr die UniFi-Zonenmatrix"},"content":{"rendered":"<div class=\"gtm-analyser-container\" style=\"background: var(--bg-panel, #1e1e24); padding: 25px; border-radius: 8px; border: 1px solid var(--border, #2a2a35);\">\n<p style=\"color: var(--text-secondary, #a0a0b0); margin-bottom: 20px;\">Eine Zonenmatrix liest sich leichter als eine Regelliste, weil sie auch zeigt, was fehlt. Zonen benennen, jede Richtung setzen, und heraus kommt die Regelliste samt der \u00d6ffnungen, die die Trennung stillschweigend aufheben.<\/p>\n<p>    <label for=\"uz-zonen\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Zonen, durch Komma getrennt<\/label><br \/>\n    <input type=\"text\" id=\"uz-zonen\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; font-family: monospace; box-sizing: border-box;\" value=\"Intern, IoT, Gast, Kameras, VPN, Extern\"><\/p>\n<div style=\"display: flex; gap: 10px; flex-wrap: wrap; margin: 15px 0 0;\">\n        <button id=\"uz-matrix\" class=\"button\" type=\"button\" style=\"background: transparent; color: var(--text-primary, #e8e8ee); border: 1px solid var(--border, #2a2a35); padding: 10px 18px; border-radius: 6px; font-weight: 700; cursor: pointer;\">Matrix neu aufbauen<\/button><br \/>\n        <button id=\"uz-btn\" class=\"button\" style=\"background: var(--accent, #7ee787); color: #0b1114; border: none; padding: 12px 24px; border-radius: 6px; font-weight: 700; cursor: pointer;\">Regeln ableiten<\/button>\n    <\/div>\n<div id=\"uz-gitter\" style=\"margin-top: 20px; overflow-x: auto;\"><\/div>\n<div id=\"uz-ergebnis\" style=\"margin-top: 22px;\"><\/div>\n<\/div>\n<p><script>\n(function () {\n    'use strict';<\/p>\n<p>    const T = {\"einleitung\":\"Eine Zonenmatrix liest sich leichter als eine Regelliste, weil sie auch zeigt, was fehlt. Zonen benennen, jede Richtung setzen, und heraus kommt die Regelliste samt der \u00d6ffnungen, die die Trennung stillschweigend aufheben.\",\"label_zonen\":\"Zonen, durch Komma getrennt\",\"knopf\":\"Regeln ableiten\",\"knopf_matrix\":\"Matrix neu aufbauen\",\"matrix_ecke\":\"von \u2192 nach\",\"matrix_erklaerung\":\"Jede Zelle steht f\u00fcr die Richtung von der Zeile zur Spalte. Antworten auf eine erlaubte Verbindung kommen immer zur\u00fcck; eine eigene Regel braucht es nur, wenn die Gegenseite die Verbindung selbst \u00f6ffnet.\",\"zustand_gesperrt\":\"gesperrt\",\"zustand_antwort\":\"nur Antworten\",\"zustand_erlaubt\":\"erlaubt\",\"fehler_zonen\":\"Es braucht mindestens zwei Zonen.\",\"fehler_zuviele\":\"Mehr als zw\u00f6lf Zonen machen die Matrix unlesbar.\",\"fehler_doppelt\":\"Die Zone %s kommt zweimal vor.\",\"h_regeln\":\"Daraus folgende Regeln\",\"h_befunde\":\"Befunde\",\"keine_regeln\":\"Jede Richtung ist gesperrt, damit bleibt \u00fcberhaupt kein Verkehr.\",\"regel_text\":\"erlaube %v \u2192 %n\",\"zusammenfassung\":\"%e Richtungen erlaubt, %a auf Antworten begrenzt, %g gesperrt.\",\"b_iot_intern\":\"%v darf %n erreichen. Eine \u00fcbernommene Steckdose steht damit mitten im vertrauensw\u00fcrdigen Netz - genau die Richtung, die \u00fcblicherweise zu bleiben hat.\",\"b_gast_intern\":\"%v darf %n erreichen. Ein Gastzugang ins interne Netz hebt den Sinn eines Gastnetzes auf.\",\"b_kamera_extern\":\"%v darf ins Internet. Kameras rufen zu Hause an, und genau diesen Verkehr soll ein lokaler Rekorder vermeiden.\",\"b_iot_extern\":\"%v geht ins Internet. Viele Ger\u00e4te brauchen das nur f\u00fcr ihre Cloud, eine lokale Anbindung ersetzt es meist.\",\"b_intern_iot_gesperrt\":\"%v erreicht %n nicht. Das sperrt auch die App auf dem Telefon aus - die Steuerung von der vertrauensw\u00fcrdigen Seite bleibt normalerweise offen.\",\"b_ohne_intern\":\"Keine Zone liest sich als internes Netz. Die Befunde zur Trennung greifen erst mit einem erkennbaren Namen.\",\"b_ohne_extern\":\"Keine Zone liest sich als Internet. Ohne sie l\u00e4sst sich zum ausgehenden Verkehr nichts sagen.\",\"b_ganz_dicht\":\"%v erreicht \u00fcberhaupt nichts, nicht einmal die Namensaufl\u00f6sung. Irgendetwas darin wird nicht mehr funktionieren.\",\"b_zustand\":\"Die Firewall arbeitet zustandsbehaftet: was in eine Richtung erlaubt ist, tr\u00e4gt seine Antworten von allein zur\u00fcck. Eine zweite Regel braucht es nur, wenn die Gegenseite die Verbindung \u00f6ffnet.\",\"b_dns\":\"Auch eine dicht geschlossene Zone braucht Namensaufl\u00f6sung. Eine enge Regel zum eigenen Aufl\u00f6ser geh\u00f6rt in jede Zone, sonst weichen die Ger\u00e4te auf \u00f6ffentliche Aufl\u00f6ser aus oder stellen den Dienst ein.\",\"b_reihenfolge\":\"In der Zonenmatrix entscheidet das Zonenpaar, nicht die Position in einer Liste. Wer ein altes Regelwerk \u00fcberf\u00fchrt, muss reihenfolgeabh\u00e4ngige Regeln einzeln pr\u00fcfen.\"};<\/p>\n<p>    \/\/ --- reine Rechenlogik ---<\/p>\n<p>    const ZUSTAENDE = ['gesperrt', 'antwort', 'erlaubt'];<\/p>\n<p>    function zonenLesen(text) {\n        return String(text === undefined || text === null ? '' : text)\n            .split(\/[,;\\n]+\/)\n            .map(function (z) { return z.trim(); })\n            .filter(function (z) { return z !== ''; });\n    }<\/p>\n<p>    function art(name) {\n        \/\/ Die Art der Zone wird am Namen erkannt, damit die Hinweise auch bei\n        \/\/ eigenen Bezeichnungen greifen.\n        const n = String(name).toLowerCase();\n        if (\/(extern|internet|wan|external)\/.test(n)) { return 'extern'; }\n        if (\/(iot|smart|geraet|ger\u00e4t|device)\/.test(n)) { return 'iot'; }\n        if (\/(gast|guest)\/.test(n)) { return 'gast'; }\n        if (\/(kamera|camera|cctv|nvr)\/.test(n)) { return 'kamera'; }\n        if (\/(vpn|wireguard|tailscale)\/.test(n)) { return 'vpn'; }\n        if (\/(dmz|server)\/.test(n)) { return 'dmz'; }\n        if (\/(intern|lan|trusted|vertrauen)\/.test(n)) { return 'intern'; }\n        return 'sonstige';\n    }<\/p>\n<p>    function auswerten(zonenText, richtlinien) {\n        const ergebnis = { ok: false, fehler: '', zonen: [], regeln: [], befunde: [], zaehler: { erlaubt: 0, antwort: 0, gesperrt: 0 } };\n        const zonen = zonenLesen(zonenText);<\/p>\n<p>        if (zonen.length < 2) { ergebnis.fehler = T.fehler_zonen; return ergebnis; }\n        if (zonen.length > 12) { ergebnis.fehler = T.fehler_zuviele; return ergebnis; }<\/p>\n<p>        const gesehen = {};\n        for (let i = 0; i < zonen.length; i++) {\n            const schluessel = zonen[i].toLowerCase();\n            if (gesehen[schluessel]) { ergebnis.fehler = T.fehler_doppelt.replace('%s', zonen[i]); return ergebnis; }\n            gesehen[schluessel] = true;\n        }\n\n        ergebnis.zonen = zonen.map(function (z) { return { name: z, art: art(z) }; });\n\n        const stand = richtlinien || {};\n        function zustand(von, nach) {\n            const zeile = stand[von] || {};\n            const wert = zeile[nach];\n            return ZUSTAENDE.indexOf(wert) !== -1 ? wert : 'gesperrt';\n        }\n\n        ergebnis.zonen.forEach(function (von) {\n            ergebnis.zonen.forEach(function (nach) {\n                if (von.name === nach.name) { return; }\n                const z = zustand(von.name, nach.name);\n                ergebnis.zaehler[z]++;\n                if (z !== 'gesperrt') {\n                    ergebnis.regeln.push({\n                        von: von.name, nach: nach.name, zustand: z,\n                        text: T.regel_text.replace('%v', von.name).replace('%n', nach.name)\n                            + (z === 'antwort' ? ' (' + T.zustand_antwort + ')' : '')\n                    });\n                }\n            });\n        });\n\n        \/\/ --- Befunde ---\n        function findeArt(kennung) {\n            return ergebnis.zonen.filter(function (z) { return z.art === kennung; });\n        }\n        const intern = findeArt('intern');\n        const iot = findeArt('iot');\n        const gast = findeArt('gast');\n        const kamera = findeArt('kamera');\n        const extern = findeArt('extern');\n\n        iot.forEach(function (q) {\n            intern.forEach(function (z) {\n                if (zustand(q.name, z.name) === 'erlaubt') {\n                    ergebnis.befunde.push({ schwer: true, text: T.b_iot_intern.replace('%v', q.name).replace('%n', z.name) });\n                }\n            });\n        });\n        gast.forEach(function (q) {\n            intern.forEach(function (z) {\n                if (zustand(q.name, z.name) === 'erlaubt') {\n                    ergebnis.befunde.push({ schwer: true, text: T.b_gast_intern.replace('%v', q.name).replace('%n', z.name) });\n                }\n            });\n        });\n        kamera.forEach(function (q) {\n            extern.forEach(function (z) {\n                if (zustand(q.name, z.name) === 'erlaubt') {\n                    ergebnis.befunde.push({ schwer: true, text: T.b_kamera_extern.replace('%v', q.name) });\n                }\n            });\n        });\n        iot.forEach(function (q) {\n            extern.forEach(function (z) {\n                if (zustand(q.name, z.name) === 'erlaubt') {\n                    ergebnis.befunde.push({ schwer: false, text: T.b_iot_extern.replace('%v', q.name) });\n                }\n            });\n        });\n        intern.forEach(function (q) {\n            iot.forEach(function (z) {\n                if (zustand(q.name, z.name) === 'gesperrt') {\n                    ergebnis.befunde.push({ schwer: true, text: T.b_intern_iot_gesperrt.replace('%v', q.name).replace('%n', z.name) });\n                }\n            });\n        });\n\n        if (!intern.length) { ergebnis.befunde.push({ schwer: false, text: T.b_ohne_intern }); }\n        if (!extern.length) { ergebnis.befunde.push({ schwer: false, text: T.b_ohne_extern }); }\n\n        const gesperrteZonen = ergebnis.zonen.filter(function (z) {\n            return ergebnis.zonen.every(function (andere) {\n                return andere.name === z.name || zustand(z.name, andere.name) === 'gesperrt';\n            });\n        });\n        gesperrteZonen.forEach(function (z) {\n            if (z.art !== 'extern') {\n                ergebnis.befunde.push({ schwer: false, text: T.b_ganz_dicht.replace('%v', z.name) });\n            }\n        });\n\n        ergebnis.befunde.push({ schwer: false, text: T.b_zustand });\n        ergebnis.befunde.push({ schwer: false, text: T.b_dns });\n        ergebnis.befunde.push({ schwer: false, text: T.b_reihenfolge });\n\n        ergebnis.ok = true;\n        return ergebnis;\n    }\n\n    function voreinstellung(zonen) {\n        \/\/ Ein brauchbarer Ausgangspunkt: nach aussen erlaubt, nach innen dicht.\n        const stand = {};\n        zonen.forEach(function (von) {\n            stand[von.name] = {};\n            zonen.forEach(function (nach) {\n                if (von.name === nach.name) { return; }\n                let wert = 'gesperrt';\n                if (nach.art === 'extern' &#038;&#038; von.art !== 'kamera') { wert = 'erlaubt'; }\n                if (von.art === 'intern' &#038;&#038; nach.art !== 'extern') { wert = 'erlaubt'; }\n                if (von.art === 'vpn' &#038;&#038; nach.art === 'intern') { wert = 'erlaubt'; }\n                if (von.art === 'kamera' &#038;&#038; nach.art === 'extern') { wert = 'gesperrt'; }\n                stand[von.name][nach.name] = wert;\n            });\n        });\n        return stand;\n    }\n\n    if (typeof window !== 'undefined') {\n        window.LW_TEST = window.LW_TEST || {};\n        window.LW_TEST.UZ = { auswerten: auswerten, zonenLesen: zonenLesen, art: art, voreinstellung: voreinstellung };\n    }\n\n    \/\/ --- Anbindung an das Dokument ---\n\n    const btn = document.getElementById('uz-btn');\n    const matrixBtn = document.getElementById('uz-matrix');\n    const gitter = document.getElementById('uz-gitter');\n    const out = document.getElementById('uz-ergebnis');\n    const zonenFeld = document.getElementById('uz-zonen');\n    if (!btn || !matrixBtn || !gitter || !out || !zonenFeld) { return; }\n\n    const KASTEN = 'background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); border-radius: 6px; padding: 14px; margin-bottom: 18px;';\n    const UEBERSCHRIFT = 'color: var(--text-primary, #e8e8ee); font-weight: 700; margin-bottom: 8px;';\n\n    function el(tag, css, inhalt) {\n        const knoten = document.createElement(tag);\n        if (css) { knoten.setAttribute('style', css); }\n        if (inhalt !== undefined &#038;&#038; inhalt !== null) { knoten.textContent = inhalt; }\n        return knoten;\n    }\n\n    function gitterBauen() {\n        const namen = zonenLesen(zonenFeld.value);\n        gitter.textContent = '';\n        if (namen.length < 2) {\n            gitter.appendChild(el('div', 'color: #ffb86c;', T.fehler_zonen));\n            return;\n        }\n        const zonen = namen.map(function (z) { return { name: z, art: art(z) }; });\n        const stand = voreinstellung(zonen);\n\n        const tabelle = el('table', 'border-collapse: collapse; min-width: 100%;');\n        const kopf = el('tr', '');\n        kopf.appendChild(el('th', 'padding: 8px; color: var(--text-secondary, #a0a0b0); font-size: 0.78rem; text-align: left; white-space: nowrap;', T.matrix_ecke));\n        zonen.forEach(function (z) {\n            kopf.appendChild(el('th', 'padding: 8px; color: var(--text-secondary, #a0a0b0); font-size: 0.78rem; white-space: nowrap;', z.name));\n        });\n        tabelle.appendChild(kopf);\n\n        zonen.forEach(function (von) {\n            const zeile = el('tr', '');\n            zeile.appendChild(el('td', 'padding: 8px; color: var(--text-primary, #e8e8ee); font-size: 0.82rem; white-space: nowrap; border-top: 1px solid var(--border, #2a2a35);', von.name));\n            zonen.forEach(function (nach) {\n                const zelle = el('td', 'padding: 4px; border-top: 1px solid var(--border, #2a2a35); text-align: center;');\n                if (von.name === nach.name) {\n                    zelle.appendChild(el('span', 'color: var(--border, #2a2a35);', '-'));\n                } else {\n                    const auswahl = document.createElement('select');\n                    auswahl.setAttribute('data-von', von.name);\n                    auswahl.setAttribute('data-nach', nach.name);\n                    auswahl.setAttribute('style', 'padding: 5px; background: var(--bg-panel, #1e1e24); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 5px; font-family: monospace; font-size: 0.75rem;');\n                    ZUSTAENDE.forEach(function (z) {\n                        const option = document.createElement('option');\n                        option.value = z;\n                        option.textContent = T['zustand_' + z];\n                        auswahl.appendChild(option);\n                    });\n                    auswahl.value = stand[von.name][nach.name];\n                    zelle.appendChild(auswahl);\n                }\n                zeile.appendChild(zelle);\n            });\n            tabelle.appendChild(zeile);\n        });\n\n        gitter.appendChild(el('div', 'color: var(--text-secondary, #a0a0b0); font-size: 0.82rem; margin-bottom: 8px;', T.matrix_erklaerung));\n        gitter.appendChild(tabelle);\n    }\n\n    function richtlinienLesen() {\n        const stand = {};\n        const felder = gitter.querySelectorAll('select[data-von]');\n        for (let i = 0; i < felder.length; i++) {\n            const von = felder[i].getAttribute('data-von');\n            const nach = felder[i].getAttribute('data-nach');\n            if (!stand[von]) { stand[von] = {}; }\n            stand[von][nach] = felder[i].value;\n        }\n        return stand;\n    }\n\n    matrixBtn.addEventListener('click', gitterBauen);\n\n    btn.addEventListener('click', function () {\n        if (!gitter.querySelector('select[data-von]')) { gitterBauen(); }\n        const erg = auswerten(zonenFeld.value, richtlinienLesen());\n\n        out.textContent = '';\n        if (!erg.ok) {\n            out.appendChild(el('div', 'background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); border-left: 3px solid #ffb86c; color: var(--text-secondary, #a0a0b0); padding: 14px; border-radius: 6px;', erg.fehler));\n            return;\n        }\n\n        out.appendChild(el('div', UEBERSCHRIFT, T.h_regeln));\n        const kasten = el('div', KASTEN);\n        if (!erg.regeln.length) {\n            kasten.appendChild(el('div', 'color: var(--text-secondary, #a0a0b0);', T.keine_regeln));\n        }\n        erg.regeln.forEach(function (r, i) {\n            const z = el('div', 'display: flex; gap: 12px; align-items: baseline; padding: 5px 0; border-bottom: 1px solid var(--border, #2a2a35);');\n            z.appendChild(el('span', 'width: 28px; color: var(--text-secondary, #a0a0b0); font-family: monospace; font-size: 0.8rem;', String(i + 1)));\n            z.appendChild(el('span', 'flex: 1; color: var(--text-primary, #e8e8ee); font-family: monospace; font-size: 0.85rem;', r.text));\n            kasten.appendChild(z);\n        });\n        kasten.appendChild(el('div', 'color: var(--text-secondary, #a0a0b0); font-size: 0.85rem; padding-top: 10px;',\n            T.zusammenfassung.replace('%e', String(erg.zaehler.erlaubt)).replace('%a', String(erg.zaehler.antwort)).replace('%g', String(erg.zaehler.gesperrt))));\n        out.appendChild(kasten);\n\n        out.appendChild(el('div', UEBERSCHRIFT, T.h_befunde));\n        const befunde = el('div', KASTEN);\n        erg.befunde.forEach(function (b) {\n            const z = el('div', 'display: flex; gap: 10px; padding: 5px 0;');\n            z.appendChild(el('span', 'color: ' + (b.schwer ? '#ffb86c' : 'var(--text-secondary, #a0a0b0)') + '; font-family: monospace;', b.schwer ? '!' : '-'));\n            z.appendChild(el('span', 'color: var(--text-secondary, #a0a0b0); font-size: 0.9rem; line-height: 1.5;', b.text));\n            befunde.appendChild(z);\n        });\n        out.appendChild(befunde);\n    });\n\n    gitterBauen();\n})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Macht aus einem Satz Netzzonen eine Matrix von Richtlinien, leitet daraus die Regelliste ab und benennt die \u00d6ffnungen, die die Trennung wieder aufheben.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":9283,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-tool-base.php","meta":{"footnotes":""},"tags":[92301,92331,92071],"class_list":["post-10272","page","type-page","status-publish","hentry","tag-networking-de","tag-unifi-de","tag-web-security-de"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Planer f\u00fcr die UniFi-Zonenmatrix - Lukas Wojcik - Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/unifi-zone-matrix-planner\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Planer f\u00fcr die UniFi-Zonenmatrix - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Macht aus einem Satz Netzzonen eine Matrix von Richtlinien, leitet daraus die Regelliste ab und benennt die \u00d6ffnungen, die die Trennung wieder aufheben.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/unifi-zone-matrix-planner\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/unifi-zone-matrix-planner\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/unifi-zone-matrix-planner\\\/\",\"name\":\"Planer f\u00fcr die UniFi-Zonenmatrix - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-08-14T23:03:30+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/unifi-zone-matrix-planner\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/unifi-zone-matrix-planner\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/unifi-zone-matrix-planner\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Toolbox\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/toolbox-2\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Planer f\u00fcr die UniFi-Zonenmatrix\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"luky\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"luky\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Planer f\u00fcr die UniFi-Zonenmatrix - Lukas Wojcik - Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/unifi-zone-matrix-planner\/","og_locale":"en_US","og_type":"article","og_title":"Planer f\u00fcr die UniFi-Zonenmatrix - Lukas Wojcik - Blog","og_description":"Macht aus einem Satz Netzzonen eine Matrix von Richtlinien, leitet daraus die Regelliste ab und benennt die \u00d6ffnungen, die die Trennung wieder aufheben.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/unifi-zone-matrix-planner\/","og_site_name":"Lukas Wojcik - Blog","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/unifi-zone-matrix-planner\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/unifi-zone-matrix-planner\/","name":"Planer f\u00fcr die UniFi-Zonenmatrix - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-08-14T23:03:30+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/unifi-zone-matrix-planner\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/unifi-zone-matrix-planner\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/unifi-zone-matrix-planner\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Toolbox","item":"https:\/\/www.lukaswojcik.com\/blog\/toolbox-2\/"},{"@type":"ListItem","position":3,"name":"Planer f\u00fcr die UniFi-Zonenmatrix"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"luky","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"luky"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/10272","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=10272"}],"version-history":[{"count":0,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/10272\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/9283"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=10272"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=10272"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}