Категории

Распределённая охранная сеть из 100 PIR-датчиков по Zigbee

2025-10-21 18:20:37 | Статья из категории: Безопасность

Спойлер: дешевый pir датчик работает в узком диапазоне температур и влажности. Это надо учитывать, к примеру использовать данные iot метеостанции. Если меньше 5 градусов то игнорировать. Представим участок — лес, дача, периметр базы. Вокруг него расставлены PIR-датчики движения: на деревьях, в кустах, на столбах. Всего около 100 штук. Каждый датчик автономный: питание от батареи, корпус влагозащищённый (IP65+), работает от года и дольше.

Все датчики объединены в сеть по Zigbee. При срабатывании — отправляют сигнал на центральный шлюз (например, Raspberry Pi с Zigbee-координатором). Шлюз публикует событие в MQTT-брокер, а PHP-скрипт записывает это в базу данных.

На веб-странице отображается сетка из 100 точек — по одной на каждый датчик. По умолчанию все точки зелёные (ожидание). Как только датчик сработал — его точка становится красной. Если датчик срабатывает часто или держит сигнал долго (например, человек стоит рядом), точка превращается в полупрозрачный большой круг — это визуальный индикатор «зоны интереса».

Главная фишка — анализ последовательности срабатываний. Если сначала сработал датчик №23, потом №24, потом №34 — система может предположить, что объект движется по определённой траектории. Это уже не просто «кто-то есть», а «кто-то идёт с юга на север и остановился у ворот».

Как это реализовать

1. Аппаратная часть

2. Сеть и шлюз

3. База данных

Таблица в MySQL:

CREATE TABLE sensors (
  id INT PRIMARY KEY,
  name VARCHAR(50),
  x INT,  -- координата для отображения
  y INT,
  last_trigger DATETIME,
  trigger_count INT DEFAULT 0,
  active_duration_sec INT DEFAULT 0
);

4. PHP-скрипт для визуализации

Пример: вывод 100 точек в виде сетки 10×10.

<?php
$pdo = new PDO("mysql:host=localhost;dbname=perimeter", $user, $pass);
$stmt = $pdo->  query("SELECT id, last_trigger, trigger_count FROM sensors ORDER BY id");
$sensors = $stmt->  fetchAll(PDO::FETCH_ASSOC);

// Определяем, активен ли датчик
function isActive($last, $count) {
  if (!$last) return ['active' =>   false, 'long' =>   false];
  $age = (time() - strtotime($last));
  $active = $age < 10; // активен, если сработал менее 10 сек назад
  $long = $count >   3;  // "долгий" сигнал — если сработал больше 3 раз за период
  return ['active' =>   $active, 'long' =>   $long];
}
?>  

<div style="display: grid; grid-template-columns: repeat(10, 20px); gap: 4px; width: 240px;">  
<?php foreach ($sensors as $s): 
  $state = isActive($s['last_trigger'], $s['trigger_count']);
  $style = "width:20px; height:20px; border-radius:50%; ";
  if ($state['long']) {
    $style .= "background: rgba(255,0,0,0.4); box-shadow: 0 0 10px red;";
  } elseif ($state['active']) {
    $style .= "background: red;";
  } else {
    $style .= "background: green;";
  }
?>  
  <div title="Sensor <?= $s['id'] ?>  " style="<?= $style ?>  ">  </div>  
<?php endforeach; ?>  
</div>  

5. Анализ траектории (идея для будущего)

PHP-скрипт может:

Пример псевдокода:

$events = SELECT id, x, y, last_trigger FROM sensors 
          WHERE last_trigger > NOW() - INTERVAL 30 SECOND 
          ORDER BY last_trigger;

if (count($events) >= 3) {
  // Проверить, образуют ли точки линию
  // Отправить уведомление: "Объект движется от юго-запада к северо-востоку"
}

Почему это круто

Из дешевых комплектующих это не только круто, но еще и тупо ))) можно заглушить обычной глушилкой за сто баксов.

Что можно улучшить позже

Как масштабировать систему на 1 км и более?

Если вы хотите охватить не просто дачный участок, а целую территорию — лесную опушку, поле, берег реки или периметр в радиусе 500 м – 1 км, — стандартные технологии вроде Wi-Fi или Zigbee быстро исчерпывают себя. Wi-Fi не дотягивается, а Zigbee требует плотной сетки ретрансляторов с питанием от сети, что нереально в дикой природе.

Здесь на помощь приходит LoRa в приватной сети на частоте 433 МГц. Почему именно она?

Важно: речь идёт именно о приватной LoRa-сети, а не о LoRaWAN. LoRaWAN вводит задержки, ограничения на частоту передачи и не подходит для анализа последовательности событий. А вот «голый» LoRa (через библиотеки вроде LoRa.h для ESP32 или Arduino) позволяет отправлять пакеты мгновенно и без посредников.

Для покрытия сложного рельефа (например, холмистой местности или густого леса с «мёртвыми зонами») можно установить два шлюза — с разных сторон участка. Оба будут писать данные в одну базу, а веб-интерфейс объединит их в единую карту событий.

Таким образом, LoRa — не просто «можно использовать», а наиболее практичное и масштабируемое решение для распределённой системы наблюдения за протяжёнными территориями на базе пассивных инфракрасных датчиков.

Записано для памяти. Возможно, когда-нибудь займусь.

Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

← Назад к списку статей

Важно: Блог-эксперимент

Блог только запустил, все статьи генерирую через нейросеть т.к. лень, возможны ошибки. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.

Посетителей сегодня: 0


Кто я | Контакты и регион

© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA