Offline-сеть мониторинга воздуха: Meshastic + DIY
reviewed: 10 July 2026
Концепция
Сервис развивается в сторону устойчивости к ограничениям и внешнему давлению. В регионах с плохим воздухом власти часто противодействуют независимым метеостанциям и частным датчикам. Цель — создать инфраструктуру гражданского мониторинга, которая работает независимо от доступа в интернет, провайдеров и юрисдикции.
Ключевое противоречие: геолокация vs анонимность
Карте нужны точные координаты — пользователь хочет видеть качество воздуха в своём районе. Анонимности нужна скрытность — регулятор не должен вычислить адрес устройства.
Приватность — свойство системы, а не результат поведения пользователя. Система не должна полагаться на то, что пользователь «будет осторожен».
Варианты решения проблемы геолокации (полный перебор)
Перед тем как прийти к финальной архитектуре, были рассмотрены и отвергнуты следующие подходы:
Вариант 1: Огрубление координат
DIY-устройства передают координаты, но на карте отображаются с точностью до квартала (1–2 км).
- Плюс: карта остаётся полезной
- Минус: если в квартале одна точка — адрес вычисляется тривиально
- Минус: регулятор видит то же самое
- Вердикт: не решает проблему
Вариант 2: Рандомизированный джиттер (случайный сдвиг)
Каждая публикация координат — со случайным смещением (до 500 м). В среднем данные точны, конкретная точка «плавает».
- Плюс: по одной публикации адрес не вычислить
- Минус: по серии публикаций центроид (средняя точка) вычисляется элементарно
- Минус: стационарное устройство всё равно усредняется к одному адресу
- Вердикт: не решает проблему для стационарных устройств
Вариант 3: Отложенная геолокация
Координаты появляются на карте через 24–48 часов после публикации.
- Плюс: реальное время ≠ реальное местоположение на карте
- Минус: для стационарного устройства задержка не имеет значения — адрес всё тот же
- Вердикт: не решает проблему для стационарных устройств
Вариант 5 (отвергнут): Шум от телефонных пользователей
Идея: пользователи с телефона передают точный GPS, создавая «шум», маскирующий DIY-устройства.
- Почему не работает: пользователь будет скидывать фото из дома каждое утро. Через неделю у регулятора семь точек с одного адреса. Это не «шум» — это второй массив стационарных точек с точным GPS.
- Вывод: человек — самое слабое звено в собственной приватности. Нельзя полагаться на то, что пользователь запомнит «гулять по району перед отправкой». Приватность — свойство системы, а не результат поведения пользователя.
Финальная архитектура: карта без точек (№4 + №6)
1. DIY-устройство не передаёт координаты (№4)
| Что передаёт устройство | Что НЕ передаёт |
|---|---|
| ID устройства | GPS-координаты |
| Значение PM2.5 (подписанное Ed25519) | WiFi-сети вокруг |
| Timestamp | MAC-адреса |
| IMEI / SIM-информацию |
Привязка к району — через шлюз: - Устройство находится в зоне действия шлюза по LoRa - Данные публикуются от имени района (не точных координат) - Регулятор знает: «в районе ~N устройств» - Регулятор не знает: точный адрес ни одного из них
2. На карте — тепловая карта районов, без точек (№6)
| Элемент карты | Что видит пользователь |
|---|---|
| Цвет района | Средний PM2.5 по данным всех устройств в районе за последний час |
| Счётчик датчиков | «Активных датчиков в районе: 12» |
| Разбивка по типу | «Стационарные: 7, мобильные: 5» |
| Тренд | «За неделю: +15% к качеству» |
Чего нет на карте: - Нет отдельных точек - Нет координат - Нет адресов - Нет маркеров «мой датчик»
Визуальный референс:
┌──────────────────────────────────┐
│ [Район Северный] ████████ 35 │
│ [Район Западный] ██████ 22 │
│ [Район Южный] ██████████ 48 │ ← красный
│ [Район Восточный] ████ 15 │
│ │
│ Датчиков онлайн: 47 │
│ Стационарных: 31 │
│ Мобильных: 16 │
└──────────────────────────────────┘
3. Детальные данные — при клике на район
Районы кликабельны. При нажатии открывается: - График среднего PM2.5 за день / неделю / месяц - Количество активных датчиков (стационарные vs мобильные) - Ссылка на транзакцию в блокчейне с агрегированными данными - Возможность верифицировать расчёт — любой может пересчитать статистику по данным из блокчейна
Никакого «тыкни в точку — смотри данные датчика». Только районная агрегация.
4. Индивидуальные данные — только в блокчейне и боте
Пользователь видит данные своего датчика: - В Telegram-боте (личные графики, статистика) - В блокчейне (цепочка подписанных транзакций)
На карте — только агрегированный вклад в общую статистику района.
Почему это настоящее сопротивление
| Проблема | Решение |
|---|---|
| Регулятор видит точки → вычисляет адреса | Точек нет. Есть районы. |
| Пользователь случайно светит свой GPS | GPS не запрашивается и не публикуется |
| Тепловая карта неинформативна | Районная статистика + количество датчиков = доверие |
| «Почему я должен верить данным?» | Любой может проверить данные в блокчейне и пересчитать статистику |
| «А не подкручивают ли власти цвет?» | Все транзакции публичны и неизменяемы |
Ключевые технические решения
1. Meshastic вместо WiFi / интернета на датчиках
| Риск | Решение Meshastic |
|---|---|
| Датчик светится в WiFi-эфире | LoRa — шумоподобный сигнал, сложно запеленговать |
| Привязка к роутеру (физическая локация через MAC) | Устройство не сканирует сети, не имеет MAC-адреса WiFi |
| Провайдер блокирует трафик по IP | LoRa — отдельный физический уровень, не зависит от IP-сетей |
2. «Радиостанция судного дня» — публикация раз в сутки
Данные накапливаются на устройстве и публикуются строго в заданное время (например, 03:14 ночи). Это аллюзия на UVB-76 / The Buzzer — культовые коротковолновые «радиостанции судного дня».
- Пакет уходит в случайный момент с небольшим джиттером — сложнее перехватить и проанализировать
- Шлюз асинхронно публикует данные в интернет после получения пакета по LoRa
- Эстетика «подпольного эфира» привлекает гиков и энтузиастов
3. Андерграунд-дизайн DIY-устройств
- Корпус из подручных материалов — не привлекает внимания
- Отсутствие внешних антенн, брендинга, LED-индикации (опционально)
- Устройство маскируется под бытовой предмет
- Регулятор не идентифицирует его как «подозрительный измерительный прибор»
4. Смена юрисдикции шлюза
- Шлюз физически находится в соседней стране
- Данные опубликованы в блокчейне (Ethereum / Hoodi) до того, как могут быть заблокированы локально
- Сервер публикации физически недоступен для локального регулирования
Инженерные вызовы и решения
LoRa (Meshastic) и пропускная способность
LoRa — десятки байт в минуту, PM2.5 датчик выдаёт значения каждые несколько секунд. Стратегии работы:
- Пакетная передача: копить данные на устройстве (RTC + SD-карта / EEPROM), отправлять раз в N часов сжатым пакетом
- Агрегация на шлюзе: датчики шлют сырые данные по LoRa, шлюз вычисляет среднее / медиану за период
- Событийный триггер: передача только при превышении порога PM2.5; в штатном режиме — раз в сутки heartbit
Электропитание в условиях отключения света
- Режим глубокого сна (ESP32 deep sleep ~10 мкА)
- Питание от Power Bank / солнечной панели
- Работа от 18650 — месяцы без подзарядки в sleep-режиме
Верификация данных без интернета
- Подпись каждого пакета ключом устройства (Ed25519)
- Шлюз проверяет подпись перед публикацией
- Хеширование цепочки данных в блокчейне (на шлюзе при подключении к интернету)
Сториз: сценарий «Нас 47, но нас не найти»
Угол: эстетика подполья, анонимность, гражданское сопротивление.
| Время | Кадр | Текст на экране |
|---|---|---|
| 0–1 с | Чёрный экран, радиошум | «03:14. Канал свободен.» |
| 1–2 с | Сборка устройства — невзрачный корпус, без логотипов | «Датчик из подручных материалов. Ничего лишнего.» |
| 2–3 с | Схема Meshastic-сети: точки соединены линиями | «Mesh-сеть. Без интернета, без вышек, без контроля.» |
| 3–4 с | Карта города: районы окрашены в цвета. Ни одной точки. | «Тебя нет на карте. Есть только твой район.» |
| 4–5 с | Статистика района: счётчик датчиков, график trends | «Нас 47 в этом районе. Но никто не знает, где кто.» |
| 5–6 с | Анимация: подписанный пакет уходит в блокчейн | «Данные подписаны. Блокчейн. Никто не подделает.» |
| 6–7 с | Ссылка на бота / репозиторий | «Стань частью сети →» |
Смысловая модель: что на самом деле делает сервис
| Свойство | Описание |
|---|---|
| Нецензурируемый источник правды | Данные в блокчейне — их нельзя удалить постфактум |
| Устойчивость к цензуре на транспортном уровне | Meshastic не блокируется провайдерами |
| Анонимность провайдера данных | Устройство не передаёт GPS, привязка только к району через шлюз |
| Независимость от юрисдикции | Данные публикуются из страны, где это легально |
Отличие от коммерческих сервисов (IQAir и др.)
| IQAir / аналоги | Данный сервис |
|---|---|
| Данные идут через интернет с известного IP | Данные идут по LoRa, IP не светится |
| Сервер в одной юрисдикции | Шлюз за границей, публикация в блокчейне |
| Устройство выглядит как метеостанция | Устройство маскируется под бытовой предмет |
| На карте — точки с точными координатами | На карте — тепловая карта районов без точек |
| При блокировке сайта — сервис недоступен | Данные уже в блокчейне, удалить нельзя |
План развития
- Прототип: ESP32 + PM2.5 датчик + LoRa-модуль, передача по Meshastic
- Шлюз: Raspberry Pi с LoRa-модулем, приём пакетов, проверка подписей
- Публикатор: скрипт, запускаемый по cron в 03:14, публикует агрегированные данные в блокчейн
- Карта v2: замена поточечной карты на тепловую карту районов
- Андерграунд-корпус: дизайн корпуса из подручных материалов, инструкция по маскировке
- Солнечное питание: интеграция с солнечной панелью + 18650 для полностью автономной работы