Wi-Fi HeatMap by samohosting.ru . Тепловая вай-фай карта.

Самохостятам привет!

Решил, что это может быть кому-то полезным.
Скачать: wifiheatmap.by.samohosting.ru
ГдеРаботает: в Desktop Chrome(chromium) браузерах(датели ниже)

Wi-Fi Heatmap by samohosting.ru

  • одностраничное веб-приложение
    для построения тепловой карты покрытия Wi-Fi
  • HTML5 / CSS3 / JavaScript (ES2020+) — нативный, без фреймворков
  • днные хранятся только в браузере
  • импорт подложки карты или базовая отрисовка рукой
  • регулировка размеров показателей и градиента заливки\перехода
  • 3 источника : cloudflare, yandex, openspeedtest
  • 4 базовых метрики: задержка (пинг), джиттер, скорость загрузки и отдачи
  • экспорт в CSV/JSON

Сценарий использования:

Пользователь загружает план квартиры (или рисует его прямо в браузере), ходит с телефоном/ноутбуком по точкам и в каждой делает замер: задержка (пинг), джиттер, скорость загрузки и отдачи.

По этим точкам строится цветная тепловая карта (красный → жёлтый → зелёный), наглядно показывающая «мёртвые зоны».

Данные хранятся только в браузере, есть экспорт в CSV/JSON. Всё умещается в один HTML-файл (~850 строк), без сервера и сборки.

Технический стек

HTML5 / CSS3 / JavaScript (ES2020+) — нативный, без фреймворков.
Рендеринг: Canvas 2D API (не WebGL) — тепловая карта методом обратных расстояний (IDW) с гауссовым ядром, режим «4 квадранта» рисуется во вспомогательные offscreen-canvas.
Измерения: Fetch API + ReadableStream (getReader()) для потокового скачивания, performance.now() для таймингов, Blob (application/octet-stream) для upload-нагрузки.
Хранение: localStorage (ключ wifiHeatmap) — точки, стены, план, выбранные метрика/сервер.
План: FileReader → data URL, плюс toDataURL() — редактор стен сохраняет схему как PNG.
Экспорт: Blob + URL.createObjectURL() → программная загрузка CSV/JSON.
Прочее: ResizeObserver + resize для авто-масштаба, navigator.clipboard / getSelection() для копирования лога, isSecureContext / navigator.onLine в диагностике, crypto.randomUUID() для ID точек.
Инструменты и интеграции
Нет зависимостей, CDN и сборщиков — файл открывается сам по себе; нет npm/webpack/бандлеров.
Серверы замера:
Cloudflare Speed (speed.cloudflare.com: __down, __up);
OpenSpeedTest по LAN (/upload, /downloading) — поддерживает произвольный URL сервера.

Архитектура файла wifi-heatmap.html

Единый монолит с секциями: стили → разметка (панель + canvas + модалки редактора/диагностики) → JS-модули по смыслу: замеры (Cloudflare/OST), IDW-рендер, редактор плана, список точек, сохранение/экспорт, окно диагностики.

Особенности запуска, где работает\ где нет:

Desktop:

  • Linux Chrome\Chromium - штатно
  • Windows - не проверял, пишите
  • MacOS - не проверял, пишите

Mobile:

  • Android Chrome
    • замеры из интернета работают
    • openspeedtest не работает из-за ограничения доступа к сети при открытии локального файла. В китайских браузерах - работает.
  • iPhone
    • не работает, попопробую починить, но пока не общаю

Почему появился мини-проект\проект-однодневник?

С сервисами по замеру скоростей дома

Но в момент подготовки ролика про бюджетный wifi7

Я не нашел сервиса, которы мог бы простыми кликами замерять скорость с ноутбука или телефона и делать отрисовку, пришлось использовать лучший в мире редактор PAINT и ручной труд

Проекты существуют, но:

  • они требуют установки или клонирования репозитория + зависимостей(в основном python)
  • используют доступ к железу(wifi модулям), что хорошо для повышения точности - но не подходит под мое ТЗ “просто открыть страницу и кликнуть”
Open-source проекты для отрисовки Wi-Fi heatmap

Подборка открытых инструментов для визуализации покрытия Wi-Fi: от готовых приложений «из коробки» до библиотек рендеринга. Добавляйте свои находки в комментариях.

Готовые приложения (замер + heatmap)

Проект :star: Стек / Лицензия Особенности
python-wifi-survey-heatmap 496 Python · AGPL-3.0 Site survey на Linux, heatmap поверх плана этажа, активно (2025)
wifi-heatmapper 254 TypeScript · MIT Кросс-платформенный (веб-интерфейс), самый активный — обновлялся в 2026
wifi-heat-mapper (whm) 241 Python · GPL-3.0 CLI + Python-библиотека, метрики и генерация heatmap
wifi-heatmap 90 Python · MIT Минималистичный, хорош как основа для своего кода
kismapping 57 Haskell Потребляет вывод Kismet, рисует heatmap на Google Maps (старый, 2020)

Wardriving / на основе Kismet

  • WarMapPy — heatmap/выпуклые карты из Kismet или Airodump.
  • wigle-dashboard — дашборд с heatmap для данных WiGLE.
  • spadra_smelter — один HTML-файл, heatmap + аналитика из WiGLE CSV.

Инструменты на роботах / ESP / Android

Если Вам нужно, чтобы работало с телефона - страницу нужно публиковать.
Я решил, что делать это логично в связке с уже запущенным в докер сервисе openspeedtest.

Как это сделать:

  1. В моем примере - название контейнера openspeedtest (заменяем на ваше)
  2. На хосте, где бегает в докере openspeedtest
  3. Выполняем команду(сперва прочитав, что она делает, ниже)

Команда в 1 шаг:

curl -fsSL -o wifi-heatmap.html https://wifiheatmap.by.samohosting.ru/ && sudo docker cp ./wifi-heatmap.html openspeedtest:/usr/share/nginx/html/wifi-heatmap.html

По шагам

  1. Сохраняет html веб приложение в текущий каталог(где вый сейчас)
    с названием wifi-heatmap.html
    curl -fsSL -o wifi-heatmap.html https://wifiheatmap.by.samohosting.ru/
  2. Копируем html файл прямо внутрь докер контейнера, туда, куда нам нужно
    (по крайней мере на сегодня - конфигурация контейнера опенспидтеста такова)
    что нам нужно положить в /usr/share/nginx/html/wifi-heatmap.html
    sudo docker cp ./wifi-heatmap.html openspeedtest:/usr/share/nginx/html/wifi-heatmap.html

И теперь у нас на том же IP где живет openspeedtest
http://openspeedtets_local_ip:3000/
становится доступна ссылка
http://openspeedtets_local_ip:3000/wifi-heatmap.html

Ну и теперь на телефоне можно ровно, как и на ноутбуке - тыкать замеры.