{"id":10440,"date":"2026-08-15T14:39:47","date_gmt":"2026-08-15T12:39:47","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/toolbox\/mmwave-presence-zone-planner\/"},"modified":"2026-08-15T14:49:02","modified_gmt":"2026-08-15T12:49:02","slug":"mmwave-presence-zone-planner","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/mmwave-presence-zone-planner\/","title":{"rendered":"mmWave Presence Zone Planner"},"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;\">A presence sensor is configured in gates, and a gate is 75 centimetres of radar range with its own sensitivity. What that adds up to &#8211; how deep, how wide, and how much of it lies outside the room &#8211; is geometry, and it is worth having before the sensor is glued to the wall.<\/p>\n<div style=\"display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 12px; margin-bottom: 18px;\">\n<div>\n            <label for=\"mw-sensor\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Sensor<\/label><br \/>\n            <select id=\"mw-sensor\" 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; box-sizing: border-box;\"><option value=\"ld2410\" selected>LD2410 \/ LD2410B<\/option><option value=\"ld2450\">LD2450<\/option><\/select>\n        <\/div>\n<div>\n            <label for=\"mw-bewegung\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Last gate for movement<\/label><br \/>\n            <select id=\"mw-bewegung\" 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; box-sizing: border-box;\"><\/select>\n        <\/div>\n<div>\n            <label for=\"mw-ruhe\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Last gate for stationary<\/label><br \/>\n            <select id=\"mw-ruhe\" 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; box-sizing: border-box;\"><\/select>\n        <\/div>\n<div>\n            <label for=\"mw-emp-nah\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Sensitivity, gates 0\u20133<\/label><br \/>\n            <input id=\"mw-emp-nah\" type=\"number\" min=\"0\" max=\"100\" step=\"5\" value=\"40\" 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; box-sizing: border-box;\">\n        <\/div>\n<div>\n            <label for=\"mw-emp-fern\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Sensitivity, gates 4\u20138<\/label><br \/>\n            <input id=\"mw-emp-fern\" type=\"number\" min=\"0\" max=\"100\" step=\"5\" value=\"30\" 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; box-sizing: border-box;\">\n        <\/div>\n<div>\n            <label for=\"mw-nachlauf\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Absence delay (s)<\/label><br \/>\n            <input id=\"mw-nachlauf\" type=\"number\" min=\"0\" max=\"600\" step=\"1\" value=\"30\" 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; box-sizing: border-box;\">\n        <\/div>\n<div>\n            <label for=\"mw-raumtiefe\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Room depth (m)<\/label><br \/>\n            <input id=\"mw-raumtiefe\" type=\"number\" min=\"0.5\" max=\"20\" step=\"0.1\" value=\"4.5\" 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; box-sizing: border-box;\">\n        <\/div>\n<div>\n            <label for=\"mw-hoehe\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Mounting height (m)<\/label><br \/>\n            <input id=\"mw-hoehe\" type=\"number\" min=\"0.5\" max=\"5\" step=\"0.1\" value=\"1.4\" 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; box-sizing: border-box;\">\n        <\/div>\n<\/p><\/div>\n<p>    <button id=\"mw-btn\" class=\"button\" style=\"background: var(--accent, #7ee787); color: #0b1114; border: none; padding: 12px 24px; border-radius: 6px; font-weight: 700; cursor: pointer;\">Plan zone<\/button><\/p>\n<div id=\"mw-ausgabe\" style=\"margin-top: 22px;\"><\/div>\n<\/div>\n<p><script>\n(function () {\n    'use strict';<\/p>\n<p>    const T = {\"einleitung\":\"A presence sensor is configured in gates, and a gate is 75 centimetres of radar range with its own sensitivity. What that adds up to - how deep, how wide, and how much of it lies outside the room - is geometry, and it is worth having before the sensor is glued to the wall.\",\"label_sensor\":\"Sensor\",\"label_bewegung\":\"Last gate for movement\",\"label_ruhe\":\"Last gate for stationary\",\"label_emp_nah\":\"Sensitivity, gates 0\u20133\",\"label_emp_fern\":\"Sensitivity, gates 4\u20138\",\"label_nachlauf\":\"Absence delay (s)\",\"label_raumtiefe\":\"Room depth (m)\",\"label_hoehe\":\"Mounting height (m)\",\"knopf\":\"Plan zone\",\"tor\":\"gate\",\"h_reichweite\":\"What is covered\",\"zeile_bewegung\":\"Range for movement\",\"zeile_ruhe\":\"Range for stationary\",\"zeile_breite\":\"Width at the far edge\",\"zeile_flaeche\":\"Floor area covered\",\"h_tore\":\"Gate by gate\",\"spalte_tor\":\"Gate\",\"spalte_bereich\":\"Range\",\"spalte_bewegung\":\"Movement\",\"spalte_ruhe\":\"Stationary\",\"spalte_empfindlichkeit\":\"Sensitivity\",\"h_hinweise\":\"What this configuration means\",\"hinweis_ruhe_untergrenze\":\"The LD2410 has no stationary detection in the first two gates - anything closer than 1.5 m is only seen when it moves. The value was raised to the first gate that exists.\",\"hinweis_durch_die_wand\":\"The configured range reaches past the far wall. Plasterboard and wood are transparent at 24 GHz, so the sensor will report the corridor, the neighbour, or a passing car as presence.\",\"hinweis_raum_nicht_gedeckt\":\"The configured range stops well short of the far wall. Someone sitting still at the back of the room is outside the zone.\",\"hinweis_ueber_nennweite\":\"This is beyond the range the datasheet guarantees. It usually still detects something, but no longer reliably enough to switch a light on.\",\"hinweis_fern_empfindlich\":\"High sensitivity at the far gates is the single most common cause of a light that never goes out. A ceiling fan, a curtain in a draught and rain on a window all register at these distances.\",\"hinweis_zu_unempfindlich\":\"A sensitivity below fifteen effectively switches that range off. Somebody reading motionless will not be found.\",\"hinweis_nachlauf_kurz\":\"An absence delay under five seconds makes the light flicker whenever the radar loses a motionless person for a moment.\",\"hinweis_nachlauf_lang\":\"An absence delay over five minutes turns presence detection into a timer.\",\"hinweis_hoch_montiert\":\"Above two metres the sensor looks down at the top of a head rather than across a chest, which is the worst case for detecting stationary breathing.\",\"hinweis_tief_montiert\":\"Below eighty centimetres the sensor mostly sees legs and furniture, and a person sitting still disappears behind the sofa.\",\"hinweis_ld2450_zonen\":\"The LD2450 tracks up to three targets with coordinates and can filter rectangular regions in software. The gate model below describes its range; the rectangles are configured separately.\",\"dezimal\":\".\"};<\/p>\n<p>    \/\/ --- Sensordaten ---------------------------------------------------------\n    \/\/ torlaenge: Laenge eines Entfernungstors in Metern.\n    \/\/ tore: Anzahl der Tore, gezaehlt ab null.\n    \/\/ ruheAb: unterhalb dieses Tors gibt es keine Ruheerkennung.\n    \/\/ nennweite: laut Datenblatt zugesicherte Reichweite in Metern.\n    \/\/ winkel: waagerechter Erfassungswinkel in Grad.\n    const SENSOREN = {\n        ld2410: { torlaenge: 0.75, tore: 9, ruheAb: 2, nennweite: 6.0, winkel: 120 },\n        ld2450: { torlaenge: 0.75, tore: 9, ruheAb: 0, nennweite: 6.0, winkel: 120 }\n    };<\/p>\n<p>    function zahl(wert, ersatz) {\n        const n = Number(wert);\n        return isFinite(n) ? n : ersatz;\n    }<\/p>\n<p>    \/** Aeussere Entfernung eines Tors in Metern. *\/\n    function torweite(sensor, tor) {\n        const s = SENSOREN[sensor] || SENSOREN.ld2410;\n        const t = Math.max(0, Math.min(s.tore - 1, Math.round(zahl(tor, 0))));\n        return (t + 1) * s.torlaenge;\n    }<\/p>\n<p>    \/** Breite des erfassten Streifens in einer Entfernung. *\/\n    function breite(sensor, entfernung) {\n        const s = SENSOREN[sensor] || SENSOREN.ld2410;\n        const halb = (s.winkel \/ 2) * Math.PI \/ 180;\n        return 2 * Math.max(0, zahl(entfernung, 0)) * Math.tan(halb);\n    }<\/p>\n<p>    \/** Grundflaeche des erfassten Kreisausschnitts. *\/\n    function flaeche(sensor, entfernung) {\n        const s = SENSOREN[sensor] || SENSOREN.ld2410;\n        const bogen = s.winkel * Math.PI \/ 180;\n        const r = Math.max(0, zahl(entfernung, 0));\n        return 0.5 * bogen * r * r;\n    }<\/p>\n<p>    function planen(e) {\n        const ein = e || {};\n        const name = SENSOREN[ein.sensor] ? ein.sensor : 'ld2410';\n        const s = SENSOREN[name];<\/p>\n<p>        const torBewegung = Math.max(0, Math.min(s.tore - 1, Math.round(zahl(ein.torBewegung, s.tore - 1))));\n        const torRuheRoh  = Math.max(0, Math.min(s.tore - 1, Math.round(zahl(ein.torRuhe, s.tore - 1))));\n        const torRuhe     = Math.max(s.ruheAb, torRuheRoh);\n        const empNah      = Math.max(0, Math.min(100, zahl(ein.empNah, 40)));\n        const empFern     = Math.max(0, Math.min(100, zahl(ein.empFern, 30)));\n        const nachlauf    = Math.max(0, zahl(ein.nachlauf, 30));\n        const raumtiefe   = Math.max(0, zahl(ein.raumtiefe, 0));\n        const hoehe       = Math.max(0, zahl(ein.hoehe, 0));<\/p>\n<p>        const weiteBewegung = torweite(name, torBewegung);\n        const weiteRuhe     = torweite(name, torRuhe);\n        const maxWeite      = Math.max(weiteBewegung, weiteRuhe);<\/p>\n<p>        const tore = [];\n        for (let t = 0; t < s.tore; t++) {\n            const bis = (t + 1) * s.torlaenge;\n            tore.push({\n                tor: t,\n                von: t * s.torlaenge,\n                bis: bis,\n                bewegung: t <= torBewegung,\n                ruhe: t >= s.ruheAb && t <= torRuhe,\n                empfindlichkeit: t <= 3 ? empNah : empFern,\n                ueberRaum: raumtiefe > 0 && bis > raumtiefe\n            });\n        }<\/p>\n<p>        const hinweise = [];\n        if (s.ruheAb > 0 && torRuheRoh < s.ruheAb) { hinweise.push('ruhe_untergrenze'); }\n        if (raumtiefe > 0 && maxWeite > raumtiefe + 0.4) { hinweise.push('durch_die_wand'); }\n        if (raumtiefe > 0 && maxWeite < raumtiefe - 0.4) { hinweise.push('raum_nicht_gedeckt'); }\n        if (maxWeite > s.nennweite) { hinweise.push('ueber_nennweite'); }\n        if (empFern >= 60) { hinweise.push('fern_empfindlich'); }\n        if (empNah <= 15 || empFern <= 15) { hinweise.push('zu_unempfindlich'); }\n        if (nachlauf < 5) { hinweise.push('nachlauf_kurz'); }\n        if (nachlauf > 300) { hinweise.push('nachlauf_lang'); }\n        if (hoehe > 2.2) { hinweise.push('hoch_montiert'); }\n        if (hoehe > 0 && hoehe < 0.8) { hinweise.push('tief_montiert'); }\n        if (name === 'ld2450') { hinweise.push('ld2450_zonen'); }\n\n        return {\n            sensor: name,\n            torBewegung: torBewegung,\n            torRuhe: torRuhe,\n            weiteBewegung: weiteBewegung,\n            weiteRuhe: weiteRuhe,\n            breiteAmRand: breite(name, maxWeite),\n            flaeche: flaeche(name, maxWeite),\n            tore: tore,\n            hinweise: hinweise\n        };\n    }\n\n    \/\/ --- Pruefpunkt ----------------------------------------------------------\n    window.LW_TEST = window.LW_TEST || {};\n    window.LW_TEST.MW = { planen: planen, torweite: torweite, breite: breite, flaeche: flaeche, sensoren: SENSOREN };\n\n    \/\/ --- Oberflaeche ---------------------------------------------------------\n\n    const btn = document.getElementById('mw-btn');\n    const out = document.getElementById('mw-ausgabe');\n    const sensorWahl = document.getElementById('mw-sensor');\n    const bewegungWahl = document.getElementById('mw-bewegung');\n    const ruheWahl = document.getElementById('mw-ruhe');\n    if (!btn || !out || !sensorWahl || !bewegungWahl || !ruheWahl) { return; }\n\n    function el(tag, stil, text) {\n        const e = document.createElement(tag);\n        if (stil) { e.setAttribute('style', stil); }\n        if (text !== undefined) { e.textContent = text; }\n        return e;\n    }\n    function wert(id) { const e = document.getElementById(id); return e ? e.value : ''; }\n    function komma(n, stellen) {\n        return Number(n).toFixed(stellen === undefined ? 2 : stellen).replace('.', T.dezimal);\n    }\n\n    function toreFuellen() {\n        const s = SENSOREN[sensorWahl.value] || SENSOREN.ld2410;\n        [bewegungWahl, ruheWahl].forEach(function (feld) {\n            const vorher = feld.value;\n            feld.innerHTML = '';\n            for (let t = 0; t < s.tore; t++) {\n                const o = document.createElement('option');\n                o.value = String(t);\n                o.textContent = T.tor + ' ' + t + ' \u2013 ' + komma((t + 1) * s.torlaenge) + ' m';\n                feld.appendChild(o);\n            }\n            feld.value = vorher !== '' &#038;&#038; Number(vorher) < s.tore ? vorher : String(s.tore - 2);\n        });\n    }\n    toreFuellen();\n    sensorWahl.addEventListener('change', toreFuellen);\n\n    const UEBERSCHRIFT = 'font-family: \\'Nunito Sans\\', sans-serif; font-weight: 700; color: var(--text-primary, #e8e8ee); font-size: 0.92rem; margin: 18px 0 8px;';\n    const ZELLE = 'padding: 4px 14px 4px 0; color: var(--text-secondary, #a0a0b0); font-size: 0.86rem;';\n    const ZELLE_WERT = 'padding: 4px 14px 4px 0; color: var(--text-primary, #e8e8ee); font-size: 0.86rem; font-family: monospace;';\n\n    btn.addEventListener('click', function () {\n        const erg = planen({\n            sensor: sensorWahl.value,\n            torBewegung: bewegungWahl.value,\n            torRuhe: ruheWahl.value,\n            empNah: wert('mw-emp-nah'),\n            empFern: wert('mw-emp-fern'),\n            nachlauf: wert('mw-nachlauf'),\n            raumtiefe: wert('mw-raumtiefe'),\n            hoehe: wert('mw-hoehe')\n        });\n\n        out.innerHTML = '';\n        out.appendChild(el('div', UEBERSCHRIFT, T.h_reichweite));\n        const g = el('div', 'display: grid; grid-template-columns: auto auto; gap: 0 18px; align-items: baseline;');\n        function zeile(name, w) { g.appendChild(el('div', ZELLE, name)); g.appendChild(el('div', ZELLE_WERT, w)); }\n        zeile(T.zeile_bewegung, komma(erg.weiteBewegung) + ' m');\n        zeile(T.zeile_ruhe, komma(erg.weiteRuhe) + ' m');\n        zeile(T.zeile_breite, komma(erg.breiteAmRand) + ' m');\n        zeile(T.zeile_flaeche, komma(erg.flaeche, 1) + ' m\u00b2');\n        out.appendChild(g);\n\n        out.appendChild(el('div', UEBERSCHRIFT, T.h_tore));\n        const tab = el('div', 'display: grid; grid-template-columns: auto auto auto auto auto; gap: 0 16px; align-items: baseline;');\n        [T.spalte_tor, T.spalte_bereich, T.spalte_bewegung, T.spalte_ruhe, T.spalte_empfindlichkeit].forEach(function (k) {\n            tab.appendChild(el('div', ZELLE + ' font-weight: 700; color: var(--text-primary, #e8e8ee);', k));\n        });\n        erg.tore.forEach(function (t) {\n            const rand = t.ueberRaum ? ' color: #ffa94d;' : '';\n            tab.appendChild(el('div', ZELLE_WERT + rand, String(t.tor)));\n            tab.appendChild(el('div', ZELLE_WERT + rand, komma(t.von) + '\u2013' + komma(t.bis) + ' m'));\n            tab.appendChild(el('div', ZELLE_WERT + (t.bewegung ? ' color: var(--accent, #7ee787);' : ' color: var(--text-secondary, #a0a0b0);'), t.bewegung ? '\u2713' : '\u00b7'));\n            tab.appendChild(el('div', ZELLE_WERT + (t.ruhe ? ' color: var(--accent, #7ee787);' : ' color: var(--text-secondary, #a0a0b0);'), t.ruhe ? '\u2713' : '\u00b7'));\n            tab.appendChild(el('div', ZELLE_WERT, String(t.empfindlichkeit)));\n        });\n        out.appendChild(tab);\n\n        if (erg.hinweise.length) {\n            out.appendChild(el('div', UEBERSCHRIFT, T.h_hinweise));\n            const liste = el('ul', 'margin: 0 0 0 18px; padding: 0; color: var(--text-secondary, #a0a0b0); font-size: 0.87rem; line-height: 1.65;');\n            erg.hinweise.forEach(function (h) { liste.appendChild(el('li', '', T['hinweis_' + h])); });\n            out.appendChild(liste);\n        }\n    });\n})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Turns distance gates and per-gate sensitivity into the area a LD2410 or LD2450 actually watches &#8211; and shows where it reaches through the wall into the next room.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":38,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-tool-base.php","meta":{"footnotes":""},"tags":[91365,91626],"class_list":["post-10440","page","type-page","status-publish","hentry","tag-home-assistant","tag-smart-home-de"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>mmWave Presence Zone Planner - 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\/en\/toolbox\/mmwave-presence-zone-planner\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"mmWave Presence Zone Planner - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Turns distance gates and per-gate sensitivity into the area a LD2410 or LD2450 actually watches - and shows where it reaches through the wall into the next room.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/mmwave-presence-zone-planner\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-15T12:49:02+00:00\" \/>\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\\\/en\\\/toolbox\\\/mmwave-presence-zone-planner\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/mmwave-presence-zone-planner\\\/\",\"name\":\"mmWave Presence Zone Planner - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-08-15T12:39:47+00:00\",\"dateModified\":\"2026-08-15T12:49:02+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/mmwave-presence-zone-planner\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/mmwave-presence-zone-planner\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/mmwave-presence-zone-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\\\/en\\\/toolbox\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"mmWave Presence Zone Planner\"}]},{\"@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":"mmWave Presence Zone Planner - 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\/en\/toolbox\/mmwave-presence-zone-planner\/","og_locale":"en_US","og_type":"article","og_title":"mmWave Presence Zone Planner - Lukas Wojcik - Blog","og_description":"Turns distance gates and per-gate sensitivity into the area a LD2410 or LD2450 actually watches - and shows where it reaches through the wall into the next room.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/mmwave-presence-zone-planner\/","og_site_name":"Lukas Wojcik - Blog","article_modified_time":"2026-08-15T12:49:02+00:00","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\/en\/toolbox\/mmwave-presence-zone-planner\/","url":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/mmwave-presence-zone-planner\/","name":"mmWave Presence Zone Planner - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-08-15T12:39:47+00:00","dateModified":"2026-08-15T12:49:02+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/mmwave-presence-zone-planner\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/mmwave-presence-zone-planner\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/mmwave-presence-zone-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\/en\/toolbox\/"},{"@type":"ListItem","position":3,"name":"mmWave Presence Zone Planner"}]},{"@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\/10440","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=10440"}],"version-history":[{"count":1,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/10440\/revisions"}],"predecessor-version":[{"id":10458,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/10440\/revisions\/10458"}],"up":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/38"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=10440"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=10440"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}