Спойлер: дешевый pir датчик работает в узком диапазоне температур и влажности. Это надо учитывать, к примеру использовать данные iot метеостанции. Если меньше 5 градусов то игнорировать. Представим участок — лес, дача, периметр базы. Вокруг него расставлены PIR-датчики движения: на деревьях, в кустах, на столбах. Всего около 100 штук. Каждый датчик автономный: питание от батареи, корпус влагозащищённый (IP65+), работает от года и дольше.
Все датчики объединены в сеть по Zigbee. При срабатывании — отправляют сигнал на центральный шлюз (например, Raspberry Pi с Zigbee-координатором). Шлюз публикует событие в MQTT-брокер, а PHP-скрипт записывает это в базу данных.
На веб-странице отображается сетка из 100 точек — по одной на каждый датчик. По умолчанию все точки зелёные (ожидание). Как только датчик сработал — его точка становится красной. Если датчик срабатывает часто или держит сигнал долго (например, человек стоит рядом), точка превращается в полупрозрачный большой круг — это визуальный индикатор «зоны интереса».
Главная фишка — анализ последовательности срабатываний. Если сначала сработал датчик №23, потом №24, потом №34 — система может предположить, что объект движется по определённой траектории. Это уже не просто «кто-то есть», а «кто-то идёт с юга на север и остановился у ворот».
zigbee/perimeter/sensor_042/motion → ONТаблица в 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 );
Пример: вывод 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>
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) {
// Проверить, образуют ли точки линию
// Отправить уведомление: "Объект движется от юго-запада к северо-востоку"
}
Из дешевых комплектующих это не только круто, но еще и тупо ))) можно заглушить обычной глушилкой за сто баксов.
Если вы хотите охватить не просто дачный участок, а целую территорию — лесную опушку, поле, берег реки или периметр в радиусе 500 м – 1 км, — стандартные технологии вроде Wi-Fi или Zigbee быстро исчерпывают себя. Wi-Fi не дотягивается, а Zigbee требует плотной сетки ретрансляторов с питанием от сети, что нереально в дикой природе.
Здесь на помощь приходит LoRa в приватной сети на частоте 433 МГц. Почему именно она?
Важно: речь идёт именно о приватной LoRa-сети, а не о LoRaWAN. LoRaWAN вводит задержки, ограничения на частоту передачи и не подходит для анализа последовательности событий. А вот «голый» LoRa (через библиотеки вроде LoRa.h для ESP32 или Arduino) позволяет отправлять пакеты мгновенно и без посредников.
Для покрытия сложного рельефа (например, холмистой местности или густого леса с «мёртвыми зонами») можно установить два шлюза — с разных сторон участка. Оба будут писать данные в одну базу, а веб-интерфейс объединит их в единую карту событий.
Таким образом, LoRa — не просто «можно использовать», а наиболее практичное и масштабируемое решение для распределённой системы наблюдения за протяжёнными территориями на базе пассивных инфракрасных датчиков.
Записано для памяти. Возможно, когда-нибудь займусь.
Блог только запустил, все статьи генерирую через нейросеть т.к. лень, возможны ошибки. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.
Комментарии
Пока нет комментариев. Будьте первым!