CASE STUDY

Model chytrého zabezpečení domácnosti

Funkční ukázkový systém postavený na Arduino Mega 2560 s ESP8266 (AT). Kombinuje detekci pohybu (PIR) a detekci CO (MQ-7), lokální alarm a bezpečnou logiku režimů. Notifikace jdou do Telegramu přes relay server (ESP → HTTP bez TLS → server → HTTPS Telegram Bot API).

Režimy
DISARMED / EXIT_DELAY / ARMED / LOCK_ONLY
Senzory
PIR + MQ-7 (baseline/hystereze/cooldown)
Notifikace
Edge-trigger + fronta událostí
Arduino Mega 2560 ESP8266 AT MQ-7 CO PIR motion LCD 16×2 I²C Keypad 4×4 Servo lock Bzučák alarm

Pozn.: Úmyslně nezveřejňuji citlivé údaje (SSID, hesla, tokeny). Dokumentace s plnými údaji se dává pouze „na vyžádání“.

Architektura

Jasné bloky + důvod relay serveru

Vstupy / UI • PIR (pohyb) • MQ-7 (CO) → A0 • Klávesnice (kódy) Výstupy • LCD 16×2 (I²C) • Bzučák (alarm) • Servo (zámek) Řídicí jednotka Arduino Mega 2560 • stavový automat režimů • neblokující smyčka • fronta událostí • edge-trigger notifikace Relay server ESP8266 → HTTP (bez TLS) Server → HTTPS Telegram API Telegram Notifikace událostí (pohyb / plyn)

Proč relay

ESP8266 v režimu AT příkazů je v praxi často limitované TLS kompatibilitou. Proto: ESP odešle jednoduchý HTTP request na vlastní server a server provede HTTPS volání na Telegram Bot API.

Bezpečnostní poznámka
  • Na webu nezveřejňuji tokeny ani SSID.
  • Relay endpoint je vhodné chránit (tajný klíč / rate-limit / IP allowlist).
  • Notifikace jsou „edge-trigger“, aby se zabránilo spamu.

Logika a režimy

Stavový automat + algoritmus MQ-7

Režimy (stavový automat)

Zjednodušeně: režim určuje, co je aktivní, co se loguje a co spouští poplach.

Režim Chování
DISARMED PIR poplach vypnut, systém ovladatelný, zámek dle kódu.
EXIT_DELAY 30 s na opuštění prostoru po aktivaci (bez PIR poplachu).
ARMED Střežení: PIR detekce vyhlašuje pohybový poplach.
LOCK_ONLY Ovládání zámku bez PIR střežení (praktické pro demo).
Kódy (pevné pro demo)
  • 4321 – ARM + přechod do EXIT_DELAY + zamknutí
  • 1234 – DISARM + odemknutí + zrušení pohybového poplachu
  • 1243 – LOCK_ONLY + zamknutí

MQ-7: baseline, hystereze, cooldown

MQ-7 se vyhodnocuje relativně k referenční úrovni po startu. Cílem je stabilnější detekce bez „šumu“.

  • Kalibrace baseline: 30 s po startu.
  • Perioda měření: ~200 ms.
  • Poplach: baseline + 220 (delta práh).
  • Vypnutí poplachu: hystereze 50.
  • Cooldown: 60 s po poplachu (zabránění opakovanému spínání).
Priorita událostí
  • Plynový poplach má vyšší prioritu než pohybový poplach.
  • Alarm: plyn = souvislý tón, pohyb = přerušovaný tón (pro rozlišení).

„Non-blocking“ hlavní smyčka (princip)

Cílem je, aby více bloků běželo současně bez dlouhých prodlev.

// Pseudokód (struktura)
loop():
  handleModeStateMachine()
  readKeypadAndApplyCode()
  handlePIR()
  sampleMQ7AndEvaluate()
  driveBuzzerPattern()
  wifiTickAndSendQueuedNotifications()

Testovací scénáře

Co by měl hodnotitel vidět „naživo“

Scénáře (doporučená demo posloupnost)

  1. Boot + baseline: start, LCD hlásí inicializaci a kalibraci MQ-7.
  2. LOCK_ONLY: zadání 1243 → zamknutí servem (bez střežení PIR).
  3. ARM + EXIT_DELAY: zadání 4321 → 30 s odchodové zpoždění.
  4. PIR poplach: po přechodu do ARMED vyvolat pohyb → alarm + notifikace (jednorázově).
  5. DISARM: zadání 1234 → zrušení pohybového poplachu + odemknutí.
  6. MQ-7 poplach: simulace zvýšení (demo zdroj) → souvislý alarm + notifikace.
  7. Hystereze: ukázat, že se poplach nevypíná „kmitáním“ kolem prahu.
  8. Cooldown: po skončení plynového poplachu nejde hned znovu vyhlásit.

Co tím dokazujete

  • Správně navržené režimy a přechody.
  • Odolnost proti opakovanému spamu notifikací.
  • Rozlišení typů poplachu (uživatelsky srozumitelné).
  • Stabilní vyhodnocení MQ-7 (baseline/hystereze/cooldown).