ื‘ื™ืช ื—ื›ื ื‘ืขื ืŸ. ื—ืœืง 1: ื‘ืงืจ ื•ื—ื™ื™ืฉื ื™ื

ื‘ื™ืช ื—ื›ื ื‘ืขื ืŸ. ื—ืœืง 1: ื‘ืงืจ ื•ื—ื™ื™ืฉื ื™ื

ื›ื™ื•ื, ื”ื•ื“ื•ืช ืœื”ืชืคืชื—ื•ืช ื”ืžื”ื™ืจื” ืฉืœ ืžื™ืงืจื•ืืœืงื˜ืจื•ื ื™ืงื”, ืขืจื•ืฆื™ ืชืงืฉื•ืจืช, ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ืื™ื ื˜ืจื ื˜ ื•ื‘ื™ื ื” ืžืœืื›ื•ืชื™ืช, ื ื•ืฉื ื”ื‘ืชื™ื ื”ื—ื›ืžื™ื ื”ื•ืคืš ื™ื•ืชืจ ื•ื™ื•ืชืจ ืจืœื•ื•ื ื˜ื™. ื“ื™ื•ืจ ื”ืื“ื ืขื‘ืจ ืฉื™ื ื•ื™ื™ื ืžืฉืžืขื•ืชื™ื™ื ืžืื– ืชืงื•ืคืช ื”ืื‘ืŸ ื•ื‘ืขื™ื“ืŸ ื”ืžื”ืคื›ื” ื”ืชืขืฉื™ื™ืชื™ืช 4.0 ื•ื”ืื™ื ื˜ืจื ื˜ ืฉืœ ื”ื“ื‘ืจื™ื, ื”ื•ื ื”ืคืš ืœื ื•ื—, ืคื•ื ืงืฆื™ื•ื ืœื™ ื•ื‘ื˜ื•ื—. ื™ื•ืฆืื™ื ืœืฉื•ืง ืคืชืจื•ื ื•ืช ืฉื”ื•ืคื›ื™ื ื“ื™ืจื” ืื• ื‘ื™ืช ื›ืคืจื™ ืœืžืขืจื›ื•ืช ืžื™ื“ืข ืžื•ืจื›ื‘ื•ืช ื”ื ืฉืœื˜ื•ืช ืžื›ืœ ืžืงื•ื ื‘ืขื•ืœื ื‘ืืžืฆืขื•ืช ืกืžืืจื˜ืคื•ืŸ. ื™ืชืจื” ืžื›ืš, ืื™ื ื˜ืจืืงืฆื™ื” ื‘ื™ืŸ ืื“ื ืœืžื›ื•ื ื” ืื™ื ื” ื“ื•ืจืฉืช ืขื•ื“ ื™ื“ืข ื‘ืฉืคื•ืช ืชื›ื ื•ืช - ื”ื•ื“ื•ืช ืœืืœื’ื•ืจื™ืชื ืฉืœ ื–ื™ื”ื•ื™ ื“ื™ื‘ื•ืจ ื•ืกื™ื ืชื–ื”, ืื“ื ืžื“ื‘ืจ ืืœ ื‘ื™ืช ื—ื›ื ื‘ืฉืคืช ื”ืื ืฉืœื•.

ื—ืœืง ืžืžืขืจื›ื•ืช ื”ื‘ื™ืช ื”ื—ื›ื ื”ืงื™ื™ืžื•ืช ื›ื™ื•ื ื‘ืฉื•ืง ื”ืŸ ืคื™ืชื•ื— ื”ื’ื™ื•ื ื™ ืฉืœ ืžืขืจื›ื•ืช ืžืขืงื‘ ื•ื™ื“ืื• ื‘ืขื ืŸ, ืืฉืจ ืžืคืชื—ื™ื”ืŸ ื”ื‘ื™ื ื• ืืช ื”ืฆื•ืจืš ื‘ืคืชืจื•ืŸ ื›ื•ืœืœ ืœื ืจืง ืœื ื™ื˜ื•ืจ, ืืœื ื’ื ืœื ื™ื”ื•ืœ ืื•ื‘ื™ื™ืงื˜ื™ื ืžืจื•ื—ืงื™ื.

ืื ื• ืžืฆื™ื’ื™ื ืœืชืฉื•ืžืช ืœื‘ื›ื ืกื“ืจื” ืฉืœ ืฉืœื•ืฉื” ืžืืžืจื™ื, ืืฉืจ ื™ืกืคืจื• ืœื›ื ืขืœ ื›ืœ ื”ืžืจื›ื™ื‘ื™ื ื”ืขื™ืงืจื™ื™ื ืฉืœ ืžืขืจื›ืช ื‘ื™ืช ื—ื›ื ื‘ืขื ืŸ, ืฉืคื•ืชื—ื” ื‘ืื•ืคืŸ ืื™ืฉื™ ืขืœ ื™ื“ื™ ื”ืžื—ื‘ืจ ื•ื”ื•ื›ื ืกื” ืœืคืขื•ืœื”. ื”ืžืืžืจ ื”ืจืืฉื•ืŸ ืžื•ืงื“ืฉ ืœืฆื™ื•ื“ ืœืงื•ื— ื”ืงืฆื” ื”ืžื•ืชืงืŸ ื‘ืชื•ืš ื‘ื™ืช ื—ื›ื, ื”ืฉื ื™ ืœืืจื›ื™ื˜ืงื˜ื•ืจืช ืžืขืจื›ืช ื”ืื—ืกื•ืŸ ื•ืขื™ื‘ื•ื“ ื”ื ืชื•ื ื™ื ื‘ืขื ืŸ, ื•ืœื‘ืกื•ืฃ, ื”ืฉืœื™ืฉื™ ืœืืคืœื™ืงืฆื™ื™ืช ื”ืœืงื•ื— ืœื ื™ื”ื•ืœ ื”ืžืขืจื›ืช ื‘ืžื›ืฉื™ืจื™ื ื ื™ื™ื“ื™ื ื•ื ื™ื™ื—ื™ื.

ืฆื™ื•ื“ ืœื‘ื™ืช ื—ื›ื

ืจืืฉื™ืช, ื‘ื•ืื• ื ื“ื‘ืจ ืขืœ ืื™ืš ืœืขืฉื•ืช ื‘ื™ืช ื—ื›ื ืžืชื•ืš ื“ื™ืจื” ืจื’ื™ืœื”, ื“ืืฆ'ื” ืื• ืงื•ื˜ื’'. ื›ื“ื™ ืœืขืฉื•ืช ื–ืืช, ื›ื›ืœืœ, ื™ืฉ ืฆื•ืจืš ืœืžืงื ืืช ื”ืฆื™ื•ื“ ื”ื‘ื ื‘ื‘ื™ืช:

  1. ื—ื™ื™ืฉื ื™ื ื”ืžื•ื“ื“ื™ื ืคืจืžื˜ืจื™ื ืกื‘ื™ื‘ืชื™ื™ื ืฉื•ื ื™ื;
  2. ืžืคืขื™ืœื™ื ื”ืคื•ืขืœื™ื ืขืœ ืขืฆืžื™ื ื—ื™ืฆื•ื ื™ื™ื;
  3. ื‘ืงืจ ื”ืžื‘ืฆืข ื—ื™ืฉื•ื‘ื™ื ื‘ื”ืชืื ืœืžื“ื™ื“ื•ืช ื—ื™ื™ืฉื ื™ื ื•ืœืœื•ื’ื™ืงื” ืžืฉื•ื‘ืฆืช, ื•ืžื•ืฆื™ื ืคืงื•ื“ื•ืช ืœืžืคืขื™ืœื™ื.

ื‘ืื™ื•ืจ ื”ื‘ื ื ื™ืชืŸ ืœืจืื•ืช ืชืจืฉื™ื ืฉืœ ื‘ื™ืช ื—ื›ื, ืขืœื™ื• ื™ืฉื ื ื—ื™ื™ืฉื ื™ื ืœื ื–ื™ืœืช ืžื™ื (1) ื‘ื—ื“ืจ ื”ืืžื‘ื˜ื™ื”, ื˜ืžืคืจื˜ื•ืจื” (2) ื•ืชืื•ืจื” (3) ื‘ื—ื“ืจ ื”ืฉื™ื ื”, ืฉืงืข ื—ื›ื (4) ื‘ืžื˜ื‘ื— ื•- ืžืฆืœืžืช ืžืขืงื‘ ื•ื™ื“ืื• (5) ื‘ืžืกื“ืจื•ืŸ.

ื‘ื™ืช ื—ื›ื ื‘ืขื ืŸ. ื—ืœืง 1: ื‘ืงืจ ื•ื—ื™ื™ืฉื ื™ื

ื›ื™ื•ื, ื—ื™ื™ืฉื ื™ื ืืœื—ื•ื˜ื™ื™ื ื”ืคื•ืขืœื™ื ื‘ืืžืฆืขื•ืช ืคืจื•ื˜ื•ืงื•ืœื™ RF433, Z-Wave, ZigBee, Bluetooth ื•- WiFi ื ืžืฆืื™ื ื‘ืฉื™ืžื•ืฉ ื ืจื—ื‘. ื”ื™ืชืจื•ื ื•ืช ื”ืขื™ืงืจื™ื™ื ืฉืœื”ื ื”ื ืงืœื•ืช ื”ื”ืชืงื ื” ื•ื”ืฉื™ืžื•ืฉ, ื›ืžื• ื’ื ืขืœื•ืช ื ืžื•ื›ื” ื•ืืžื™ื ื•ืช, ื›ื™ ื”ื™ืฆืจื ื™ื ืฉื•ืืคื™ื ืœื”ื‘ื™ื ืืช ื”ืžื›ืฉื™ืจื™ื ืฉืœื”ื ืœืฉื•ืง ื”ื”ืžื•ื ื™ ื•ืœื”ื ื’ื™ืฉ ืื•ืชื ืœืžืฉืชืžืฉ ื”ืžืžื•ืฆืข.

ื—ื™ื™ืฉื ื™ื ื•ืžืคืขื™ืœื™ื, ื›ื›ืœืœ, ืžื—ื•ื‘ืจื™ื ื‘ืืžืฆืขื•ืช ืžืžืฉืง ืืœื—ื•ื˜ื™ ืœื‘ืงืจ ื‘ื™ืช ื—ื›ื (6) - ืžื™ืงืจื• ืžื—ืฉื‘ ืžื™ื•ื—ื“ ื”ืžืฉืœื‘ ืืช ื›ืœ ื”ืžื›ืฉื™ืจื™ื ื”ืœืœื• ืœืจืฉืช ืื—ืช ื•ืฉื•ืœื˜ ื‘ื”ื.

ืขื ื–ืืช, ืคืชืจื•ื ื•ืช ืžืกื•ื™ืžื™ื ื™ื›ื•ืœื™ื ืœืฉืœื‘ ื—ื™ื™ืฉืŸ, ืžืคืขื™ืœ ื•ื‘ืงืจ ื‘ื•-ื–ืžื ื™ืช. ืœื“ื•ื’ืžื”, ื ื™ืชืŸ ืœืชื›ื ืช ืชืงืข ื—ื›ื ืœื”ืคืขืœื” ืื• ื›ื™ื‘ื•ื™ ืœืคื™ ืœื•ื— ื–ืžื ื™ื, ื•ืžืฆืœืžืช ืžืขืงื‘ ื•ื™ื“ืื• ื‘ืขื ืŸ ื™ื›ื•ืœื” ืœื”ืงืœื™ื˜ ื•ื™ื“ืื• ืขืœ ืกืžืš ืื•ืช ืฉืœ ื’ืœืื™ ืชื ื•ืขื”. ื‘ืžืงืจื™ื ื”ืคืฉื•ื˜ื™ื ื‘ื™ื•ืชืจ, ืืชื” ื™ื›ื•ืœ ืœื”ืกืชื“ืจ ื‘ืœื™ ื‘ืงืจ ื ืคืจื“, ืื‘ืœ ื›ื“ื™ ืœื™ืฆื•ืจ ืžืขืจื›ืช ื’ืžื™ืฉื” ืขื ืชืจื—ื™ืฉื™ื ืจื‘ื™ื, ื–ื” ื”ื›ืจื—ื™.

ื›ื“ื™ ืœื—ื‘ืจ ืืช ื‘ืงืจ ื”ื‘ื™ืช ื”ื—ื›ื ืœืจืฉืช ื”ืขื•ืœืžื™ืช, ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื ืชื‘ ืื™ื ื˜ืจื ื˜ ืจื’ื™ืœ (7), ืฉื”ืคืš ืžื–ืžืŸ ืœืžื›ืฉื™ืจ ื‘ื™ืชื™ ื ืคื•ืฅ ื‘ื›ืœ ื‘ื™ืช. ื›ืืŸ ื™ืฉ ื˜ื™ืขื•ืŸ ื ื•ืกืฃ ืœื˜ื•ื‘ืช ื‘ืงืจ ื‘ื™ืช ื—ื›ื - ืื ื”ื—ื™ื‘ื•ืจ ืœืื™ื ื˜ืจื ื˜ ืื‘ื“, ื”ื‘ื™ืช ื”ื—ื›ื ื™ืžืฉื™ืš ืœืคืขื•ืœ ื›ืจื’ื™ืœ ื”ื•ื“ื•ืช ืœื‘ืœื•ืง ื”ืœื•ื’ื™ ื”ืžืื•ื—ืกืŸ ื‘ืชื•ืš ื”ื‘ืงืจ, ื•ืœื ื‘ืฉื™ืจื•ืช ื”ืขื ืŸ.

ื‘ืงืจ ื‘ื™ืช ื—ื›ื

ื”ื‘ืงืจ ืœืžืขืจื›ืช ื”ื‘ื™ืช ื”ื—ื›ื ื‘ืขื ืŸ ื”ื ื“ื•ืŸ ื‘ืžืืžืจ ื–ื” ืคื•ืชื— ืขืœ ื‘ืกื™ืก ืžื™ืงืจื• ืžื—ืฉื‘ ื‘ืขืœ ืœื•ื— ื™ื—ื™ื“ Raspberry Pi 3 ื“ื’ื B+, ืืฉืจ ืฉื•ื—ืจืจ ื‘ืžืจืฅ 2018 ื•ื™ืฉ ืœื• ืžืกืคื™ืง ืžืฉืื‘ื™ื ื•ื‘ื™ืฆื•ืขื™ื ืขื‘ื•ืจ ืžืฉื™ืžื•ืช ื‘ื™ืช ื—ื›ื. ื”ื•ื ื›ื•ืœืœ ืžืขื‘ื“ ืืจื‘ืข ืœื™ื‘ื•ืช Cortex-A53 ื”ืžื‘ื•ืกืก ืขืœ ืืจื›ื™ื˜ืงื˜ื•ืจืช ARMv64-A ืฉืœ 8 ืกื™ื‘ื™ื•ืช, ืฉืขื•ืŸ ื‘ืžื”ื™ืจื•ืช 1.4 ื’ื™ื’ื”-ื”ืจืฅ, ื•ื›ืŸ 1 GB ืฉืœ ื–ื™ื›ืจื•ืŸ RAM, Wi-Fi 802.11ac, Bluetooth 4.2 ื•ืžืชืื ื’ื™ื’ื”-ื‘ื™ื˜ Ethernet ื”ืคื•ืขืœ ื‘ืืžืฆืขื•ืช USB 2.0 .

ื‘ื™ืช ื—ื›ื ื‘ืขื ืŸ. ื—ืœืง 1: ื‘ืงืจ ื•ื—ื™ื™ืฉื ื™ื

ื”ืจื›ื‘ืช ื”ื‘ืงืจ ืคืฉื•ื˜ื” ืžืื•ื“ - ื”ืžื™ืงืจื• ืžื—ืฉื‘ (1) ืžื•ืชืงืŸ ื‘ืžืืจื– ืคืœืกื˜ื™ืง (2), ืœืื—ืจ ืžื›ืŸ ืžื•ืชืงื ื™ื ื›ืจื˜ื™ืก ื–ื™ื›ืจื•ืŸ ื‘ื ืคื— 8 GB ื‘ืคื•ืจืžื˜ microSD ืขื ืชื•ื›ื ื” (3) ื•ื‘ืงืจ ืจืฉืช USB Z-Wave (4) ื”ื—ืจื™ืฆื™ื ื”ืžืชืื™ืžื™ื. ื‘ืงืจ ื”ื‘ื™ืช ื”ื—ื›ื ืžื—ื•ื‘ืจ ืœืืกืคืงืช ื”ื—ืฉืžืœ ื‘ืืžืฆืขื•ืช ืžืชืื ืžืชื— 5V, 2.1A (5) ื•ื›ื‘ืœ USB - ืžื™ืงืจื• USB (6). ืœื›ืœ ื‘ืงืจ ื™ืฉ ืžืกืคืจ ื–ื™ื”ื•ื™ ื™ื™ื—ื•ื“ื™, ืืฉืจ ื›ืชื•ื‘ ื‘ืงื•ื‘ืฅ ื”ืชืฆื•ืจื” ื‘ืขืช ื”ื”ืฉืงื” ืœืจืืฉื•ื ื” ื•ื”ื›ืจื—ื™ ืœืื™ื ื˜ืจืืงืฆื™ื” ืขื ืฉื™ืจื•ืชื™ ื‘ื™ืช ื—ื›ื ื‘ืขื ืŸ.

ืชื•ื›ื ืช ื‘ืงืจ ื”ื‘ื™ืช ื”ื—ื›ื ืคื•ืชื—ื” ืขืœ ื™ื“ื™ ื›ื•ืชื‘ ืžืืžืจ ื–ื” ืขืœ ื‘ืกื™ืก ืžืขืจื›ืช ื”ื”ืคืขืœื” Linux Raspbian Stretch. ื”ื•ื ืžื•ืจื›ื‘ ืžืชืช ื”ืžืขืจื›ื•ืช ื”ืขื™ืงืจื™ื•ืช ื”ื‘ืื•ืช:

  • ืชื”ืœื™ืš ืฉืจืช ืœืื™ื ื˜ืจืืงืฆื™ื” ืขื ืฆื™ื•ื“ ื‘ื™ืช ื—ื›ื ื•ื”ืขื ืŸ;
  • ืžืžืฉืง ืžืฉืชืžืฉ ื’ืจืคื™ ืœื”ื’ื“ืจืช ืคืจืžื˜ืจื™ ื”ืชืฆื•ืจื” ื•ื”ื”ืคืขืœื” ืฉืœ ื”ื‘ืงืจ;
  • ืžืกื“ ื ืชื•ื ื™ื ืœืื—ืกื•ืŸ ืชืฆื•ืจืช ื”ื‘ืงืจ.

ื‘ื™ืช ื—ื›ื ื‘ืขื ืŸ. ื—ืœืง 1: ื‘ืงืจ ื•ื—ื™ื™ืฉื ื™ื

ืžืกื“ ื ืชื•ื ื™ื ื‘ืงืจ ื‘ื™ืช ื—ื›ื ืžื™ื•ืฉื ืขืœ ื‘ืกื™ืก DBMS ืžื•ื˜ื‘ืข SQLite ื•ื”ื•ื ืงื•ื‘ืฅ ืขืœ ื›ืจื˜ื™ืก SD ืขื ืชื•ื›ื ืช ืžืขืจื›ืช. ื”ื•ื ืžืฉืžืฉ ื›ืื—ืกื•ืŸ ืขื‘ื•ืจ ืชืฆื•ืจืช ื”ื‘ืงืจ - ืžื™ื“ืข ืขืœ ื”ืฆื™ื•ื“ ื”ืžื—ื•ื‘ืจ ื•ืžืฆื‘ื• ื”ื ื•ื›ื—ื™, ื‘ืœื•ืง ืฉืœ ื›ืœืœื™ ื™ื™ืฆื•ืจ ืœื•ื’ื™ื™ื, ื›ืžื• ื’ื ืžื™ื“ืข ื”ื“ื•ืจืฉ ืื™ื ื“ืงืก (ืœื“ื•ื’ืžื”, ืฉืžื•ืช ืงื‘ืฆื™ื ืฉืœ ืืจื›ื™ื•ืŸ ื•ื™ื“ืื• ืžืงื•ืžื™). ื›ืืฉืจ ื”ื‘ืงืจ ืžื•ืคืขืœ ืžื—ื“ืฉ, ื”ืžื™ื“ืข ื”ื–ื” ื ืฉืžืจ, ืžื” ืฉืžืืคืฉืจ ืœืฉื—ื–ืจ ืืช ื”ื‘ืงืจ ื‘ืžืงืจื” ืฉืœ ื”ืคืกืงืช ื—ืฉืžืœ.

ืžืžืฉืง ื’ืจืคื™ ื‘ืงืจ ื‘ื™ืช ื—ื›ื ืฉืคื•ืชื— ื‘-PHP 7 ื‘ืืžืฆืขื•ืช ืžื™ืงืจื•-ืžืกื’ืจืช ืจึธื–ึถื”. ืฉืจืช ื”ืื™ื ื˜ืจื ื˜ ืื—ืจืื™ ืœื”ืคืขืœืช ื”ืืคืœื™ืงืฆื™ื”. lighttpd, ืžืฉืžืฉ ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื‘ืžื›ืฉื™ืจื™ื ืžืฉื•ื‘ืฆื™ื ื‘ืฉืœ ื”ื‘ื™ืฆื•ืขื™ื ื”ื˜ื•ื‘ื™ื ื•ื“ืจื™ืฉื•ืช ื”ืžืฉืื‘ื™ื ื”ื ืžื•ื›ื•ืช ืฉืœื•.

ื‘ื™ืช ื—ื›ื ื‘ืขื ืŸ. ื—ืœืง 1: ื‘ืงืจ ื•ื—ื™ื™ืฉื ื™ื
(ืœื—ืฅ ืขืœ ื”ืชืžื•ื ื” ื›ื“ื™ ืœืคืชื•ื— ื‘ืจื–ื•ืœื•ืฆื™ื” ื’ื“ื•ืœื” ื™ื•ืชืจ)

ืชืคืงื™ื“ื• ื”ืขื™ืงืจื™ ืฉืœ ื”ืžืžืฉืง ื”ื’ืจืคื™ ื”ื•ื ื—ื™ื‘ื•ืจ ืฆื™ื•ื“ ื‘ื™ืช ื—ื›ื (ืžืฆืœืžื•ืช ืžืขืงื‘ IP ื•ื—ื™ื™ืฉื ื™ื) ืœื‘ืงืจ. ืืคืœื™ืงืฆื™ื™ืช ื”ืื™ื ื˜ืจื ื˜ ืงื•ืจืืช ืืช ื”ืชืฆื•ืจื” ื•ื”ืžืฆื‘ ื”ื ื•ื›ื—ื™ ืฉืœ ื”ื‘ืงืจ ื•ื”ื”ืชืงื ื™ื ื”ืžื—ื•ื‘ืจื™ื ืืœื™ื• ืžืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ SQLite. ื›ื“ื™ ืœืฉื ื•ืช ืืช ืชืฆื•ืจืช ื”ื‘ืงืจ, ื”ื•ื ืฉื•ืœื— ืคืงื•ื“ื•ืช ื‘ืงืจื” ื‘ืคื•ืจืžื˜ JSON ื“ืจืš ืžืžืฉืง RESTful API ืฉืœ ืชื”ืœื™ืš ื”ืฉืจืช.

ืชื”ืœื™ืš ืฉืจืช

ืชื”ืœื™ืš ืฉืจืช - ืžืจื›ื™ื‘ ืžืจื›ื–ื™ ื”ืžื‘ืฆืข ืืช ื›ืœ ื”ืขื‘ื•ื“ื” ื”ืขื™ืงืจื™ืช ืขืœ ืื•ื˜ื•ืžืฆื™ื” ืฉืœ ืชื”ืœื™ื›ื™ ื”ืžื™ื“ืข ื”ืžื”ื•ื•ื™ื ื‘ืกื™ืก ืœื‘ื™ืช ื—ื›ื: ืงืœื™ื˜ื” ื•ืขื™ื‘ื•ื“ ื ืชื•ื ื™ื ืชื—ื•ืฉืชื™ื™ื, ื”ื•ืฆืืช ืคืขื•ืœื•ืช ื‘ืงืจื” ื‘ื”ืชืื ืœื”ื™ื’ื™ื•ืŸ ื”ืžื•ื˜ื‘ืข. ืžื˜ืจืช ืชื”ืœื™ืš ื”ืฉืจืช ื”ื™ื ืœื™ืฆื•ืจ ืื™ื ื˜ืจืืงืฆื™ื” ืขื ืฆื™ื•ื“ ื‘ื™ืช ื—ื›ื, ืœื‘ืฆืข ื›ืœืœื™ื ืœื•ื’ื™ื™ื ืœื™ื™ืฆื•ืจ, ืœืงื‘ืœ ื•ืœืขื‘ื“ ืคืงื•ื“ื•ืช ืžื”ืžืžืฉืง ื”ื’ืจืคื™ ื•ืžื”ืขื ืŸ. ืชื”ืœื™ืš ื”ืฉืจืช ื‘ื‘ืงืจ ื”ื‘ื™ืช ื”ื—ื›ื ื”ื ื“ื•ืŸ ืžื™ื•ืฉื ื›ืืคืœื™ืงืฆื™ื” ืžืจื•ื‘ื” ื”ืœื™ื›ื™ ืฉืคื•ืชื—ื” ื‘-C++ ื•ื”ื•ืฉืงื” ื›ืฉื™ืจื•ืช ื ืคืจื“ system ืžืขืจื›ืช ื”ืคืขืœื” ืœื™ื ื•ืงืก ืจืกืคื‘ื™ืืŸ.

ื”ื‘ืœื•ืงื™ื ื”ืขื™ืงืจื™ื™ื ืฉืœ ืชื”ืœื™ืš ื”ืฉืจืช ื”ื:

  1. ืžื ื”ืœ ื”ื•ื“ืขื•ืช;
  2. ืฉืจืช ืžืฆืœืžื•ืช IP;
  3. ืฉืจืช ื”ืชืงื ื™ื Z-Wave;
  4. ื›ืœืœื™ื ืœื•ื’ื™ื™ื ืฉืœ ืฉืจืช ื”ื™ื™ืฆื•ืจ;
  5. ืžืกื“ ื ืชื•ื ื™ื ืฉืœ ืชืฆื•ืจื” ืฉืœ ื”ื‘ืงืจ ื•ื‘ืœื•ืง ืฉืœ ื›ืœืœื™ื ืœื•ื’ื™ื™ื;
  6. ืฉืจืช API RESTful ืœืื™ื ื˜ืจืืงืฆื™ื” ืขื ื”ืžืžืฉืง ื”ื’ืจืคื™;
  7. ืœืงื•ื— MQTT ืœืื™ื ื˜ืจืืงืฆื™ื” ืขื ื”ืขื ืŸ.

ื‘ืœื•ืงื™ื ืฉืœ ืชื”ืœื™ืš ืฉืจืช ืžื™ื•ืฉืžื™ื ื›ื—ื•ื˜ื™ื ื ืคืจื“ื™ื, ืฉืžื™ื“ืข ื‘ื™ื ื™ื”ื ืžื•ืขื‘ืจ ื‘ืฆื•ืจื” ืฉืœ ื”ื•ื“ืขื•ืช ื‘ืคื•ืจืžื˜ JSON (ืื• ืžื‘ื ื™ ื ืชื•ื ื™ื ื”ืžื™ื™ืฆื’ื™ื ืคื•ืจืžื˜ ื–ื” ื‘ื–ื™ื›ืจื•ืŸ ื”ืชื”ืœื™ืš).

ื‘ื™ืช ื—ื›ื ื‘ืขื ืŸ. ื—ืœืง 1: ื‘ืงืจ ื•ื—ื™ื™ืฉื ื™ื

ื”ืžืจื›ื™ื‘ ื”ืขื™ืงืจื™ ื‘ืชื”ืœื™ืš ื”ืฉืจืช ื”ื•ื ืžื ื”ืœ ื”ื•ื“ืขื•ืช, ืฉืžื ืชื‘ ื”ื•ื“ืขื•ืช JSON ืœื›ืœ ื‘ืœื•ืงื™ ืชื”ืœื™ืš ื”ืฉืจืช. ืกื•ื’ื™ ืฉื“ื•ืช ื”ืžื™ื“ืข ืฉืœ ื”ื•ื“ืขื•ืช JSON ื•ื”ืขืจื›ื™ื ืฉื”ื ื™ื›ื•ืœื™ื ืœืงื‘ืœ ืžืคื•ืจื˜ื™ื ื‘ื˜ื‘ืœื”:

ืกื•ื’ ืžื›ืฉื™ืจ
ืคืจื•ื˜ื•ืงื•ืœ
ืกื•ื’ ื”ื•ื“ืขื”
deviceState
ื”ืคืงื•ื“ื”

ื—ื“ืจ
onvif
sensorData
on
ืกื˜ืจื™ืžื™ื ื’ (ื”ืคืขืœื”/ื›ื™ื‘ื•ื™)

ื—ื™ื™ืฉืŸ
zwave
ื”ืคืงื•ื“ื”
ื›ื‘ื•ื™
ื”ืงืœื˜ื” (ื”ืคืขืœื”/ื›ื™ื‘ื•ื™)

ืืคืงื˜ื•ืจ
mqtt
businessLogicRule
ืกื˜ืจื™ืžื™ื ื’ (ื”ืคืขืœื”/ื›ื™ื‘ื•ื™)
evice (ื”ื•ืกืฃ/ื”ืกืจ)

businessLogic
ConfigurationData
ื”ืงืœื˜ื” (ื”ืคืขืœื”/ื›ื™ื‘ื•ื™)

Bluetooth
deviceState
ืฉื’ื™ืื”

wifi

rf

ืœื“ื•ื’ืžื”, ื”ื•ื“ืขื” ืžื’ืœืื™ ืชื ื•ืขื” ืฉืœ ืžืฆืœืžื” ื ืจืื™ืช ื›ืš:

{
	"vendor": "*****",
	"version": "3.0.0",
	"timestampMs": "1566293475475",
	"clientType": "gateway",
	"deviceId": "1616453d-30cd-44b7-9bf0-************",
	"deviceType": "camera",
	"protocol": "onvif",
	"messageType": "sensorData",
	"sensorType": "camera",
	"label": "motionDetector",
	"sensorData": "on"
}

ื”ื™ื’ื™ื•ืŸ ื™ื™ืฆื•ืจ

ื›ื“ื™ ืœืงื‘ืœ ืื• ืœืฉืœื•ื— ื”ื•ื“ืขื” ืžื”ืฉื•ืœื—, ื‘ืœื•ืง ืชื”ืœื™ืš ื”ืฉืจืช ื ืจืฉื ืœื”ื•ื“ืขื•ืช ืžืกื•ื’ ืžืกื•ื™ื. ืžื ื•ื™ ื”ื•ื ื›ืœืœ ืœื•ื’ื™ ื™ื™ืฆื•ืจ ืžืกื•ื’ ื–ื” "ืื... ืื–...", ื”ืžื•ืฆื’ ื‘ืคื•ืจืžื˜ JSON, ื•ืงื™ืฉื•ืจ ืœืžื˜ืคืœ ื‘ื”ื•ื“ืขื•ืช ื‘ืชื•ืš ื‘ืœื•ืง ืชื”ืœื™ืš ื”ืฉืจืช. ืœื“ื•ื’ืžื”, ื›ื“ื™ ืœืืคืฉืจ ืœืฉืจืช ืžืฆืœืžืช ื”-IP ืœืงื‘ืœ ืคืงื•ื“ื•ืช ืžื”-GUI ื•ืžื”ืขื ืŸ, ืขืœื™ืš ืœื”ื•ืกื™ืฃ ืืช ื”ื›ืœืœ ื”ื‘ื:

{
	"if": {
	    "and": [{
		"equal": {
		    "deviceId": "1616453d-30cd-44b7-9bf0-************"
		}
	    },
	    {
		"equal": {
		    "messageType": "command"
		}
	    }
	    ]
	},
	"then": {
	    "result": "true"
	}
}

ืื ื”ืชื ืื™ื ื”ืžืคื•ืจื˜ื™ื ื‘ ืงื“ื (ืฆื“ ืฉืžืืœ) ื”ื›ืœืœื™ื ื ื›ื•ื ื™ื, ืื– ื–ื” ืžืจื•ืฆื” ืขื•ึนืงึตื‘ (ืฆื“ ื™ืžื™ืŸ) ื›ืœืœื™ื, ื•ื”ืžื˜ืคืœ ืžืงื‘ืœ ื’ื™ืฉื” ืœื’ื•ืฃ ื”ื•ื“ืขืช ื”-JSON. ื”ืงื•ื“ืžืช ืชื•ืžื›ืช ื‘ืื•ืคืจื˜ื•ืจื™ื ืœื•ื’ื™ื™ื ืฉืžืฉื•ื•ื™ื ืฆืžื“ื™ ืžืคืชื—-ืขืจืš ืฉืœ JSON:

  1. ืฉื•ื•ื” "ืฉื•ื•ื”";
  2. ืœื ืฉื•ื•ื” ืœ"ืœื_ืฉื•ื•ื”";
  3. ืคื—ื•ืช "ืคื—ื•ืช";
  4. ื™ื•ืชืจ "ื’ื“ื•ืœ ื™ื•ืชืจ";
  5. ืคื—ื•ืช ืื• ืฉื•ื•ื” ืœ-"ืคื—ื•ืช_ืื•_ืฉื•ื•ื”";
  6. ื’ื“ื•ืœ ืื• ืฉื•ื•ื” ืœ-"ื’ื“ื•ืœ_ืื•_ืฉื•ื•ื”".

ื ื™ืชืŸ ืœืงืฉืจ ืืช ืชื•ืฆืื•ืช ื”ื”ืฉื•ื•ืื” ื–ื• ืœื–ื• ื‘ืืžืฆืขื•ืช ืื•ืคืจื˜ื•ืจื™ื ืฉืœ ืืœื’ื‘ืจื” ื‘ื•ืœื™ืื ื™ืช:

  1. ื• ื•"
  2. ืื• ืื•";
  3. ืœื ืœื".

ืœืคื™ื›ืš, ืขืœ ื™ื“ื™ ื›ืชื™ื‘ืช ืื•ืคืจื˜ื•ืจื™ื ื•ืื•ืคืจื ื“ื™ื ื‘ืกื™ืžื•ืŸ ืคื•ืœื ื™, ื ื™ืชืŸ ืœื™ืฆื•ืจ ืชื ืื™ื ืžื•ืจื›ื‘ื™ื ืœืžื“ื™ ืขื ืžืกืคืจ ืจื‘ ืฉืœ ืคืจืžื˜ืจื™ื.

ื‘ื“ื™ื•ืง ืื•ืชื• ืžื ื’ื ื•ืŸ, ื”ืžื‘ื•ืกืก ืขืœ ื”ื•ื“ืขื•ืช JSON ื•ื›ืœืœื™ ื™ื™ืฆื•ืจ ื‘ืคื•ืจืžื˜ JSON, ืžืฉืžืฉ ื‘ื‘ืœื•ืง ืฉืจืช ื”ื”ื™ื’ื™ื•ืŸ ืฉืœ ื”ื™ื™ืฆื•ืจ ื›ื“ื™ ืœื™ื™ืฆื’ ื™ื“ืข ื•ืœื‘ืฆืข ื”ืกืงื” ืœื•ื’ื™ืช ื‘ืืžืฆืขื•ืช ื ืชื•ื ื™ื ืชื—ื•ืฉืชื™ื™ื ืžื—ื™ื™ืฉื ื™ ื‘ื™ืช ื—ื›ื.

ื‘ืืžืฆืขื•ืช ืืคืœื™ืงืฆื™ื” ืกืœื•ืœืจื™ืช ื™ื•ืฆืจ ื”ืžืฉืชืžืฉ ืชืจื—ื™ืฉื™ื ืœืคื™ื”ื ื”ื‘ื™ืช ื”ื—ื›ื ืืžื•ืจ ืœืชืคืงื“. ืœื“ื•ื’ืžื”: "ืื ื”ื—ื™ื™ืฉืŸ ืœืคืชื™ื—ืช ื“ืœืช ื”ื›ื ื™ืกื” ืžื•ืคืขืœ, ื”ื“ืœืง ืืช ื”ืื•ืจ ื‘ืžืกื“ืจื•ืŸ". ื”ืืคืœื™ืงืฆื™ื” ืงื•ืจืืช ืืช ื”ืžื–ื”ื™ื ืฉืœ ื—ื™ื™ืฉื ื™ื (ื—ื™ื™ืฉืŸ ืคืชื™ื—ื”) ื•ืžืคืขื™ืœื™ื (ืฉืงืข ื—ื›ื ืื• ืžื ื•ืจื” ื—ื›ืžื”) ืžืžืกื“ ื”ื ืชื•ื ื™ื ื•ืžื™ื™ืฆืจืช ื›ืœืœ ืœื•ื’ื™ ื‘ืคื•ืจืžื˜ JSON, ื”ื ืฉืœื— ืœื‘ืงืจ ื”ื‘ื™ืช ื”ื—ื›ื. ืขืœ ืžื ื’ื ื•ืŸ ื–ื” ื ื“ื•ืŸ ื‘ื™ืชืจ ืคื™ืจื•ื˜ ื‘ืžืืžืจ ื”ืฉืœื™ืฉื™ ื‘ืกื“ืจื” ืฉืœื ื•, ื‘ื• ื ื“ื‘ืจ ืขืœ ืืคืœื™ืงืฆื™ื™ืช ื”ืœืงื•ื— ืœื ื™ื”ื•ืœ ื‘ื™ืช ื—ื›ื.

ืžื ื’ื ื•ืŸ ืœื•ื’ื™ื™ืช ื”ื™ื™ืฆื•ืจ ืฉื ื“ื•ืŸ ืœืขื™ืœ ืžื™ื•ืฉื ื‘ืืžืฆืขื•ืช ื”ืกืคืจื™ื™ื” RapidJSON - ืžื ืชื— SAX ืขื‘ื•ืจ ืคื•ืจืžื˜ JSON ื‘-C++. ืงืจื™ืื” ื•ื ื™ืชื•ื— ืจืฆื™ืคื™ื ืฉืœ ืžืขืจืš ื›ืœืœื™ ื™ื™ืฆื•ืจ ืžืืคืฉืจื™ื ืœืš ืœื™ื™ืฉื ื‘ืงืœื•ืช ืืช ืคื•ื ืงืฆื™ื™ืช ื”ืฉื•ื•ืืช ื”ื ืชื•ื ื™ื ื‘ืชื•ืš ืชืงื“ื™ืžื™ื:

void CRuleEngine::Process(PProperties pFact)
{
    m_pActions->clear();

    rapidjson::Reader   reader;
    for(TStringMap::value_type& rRule : m_Rules)
    {
        std::string sRuleId   = rRule.first;
        std::string sRuleBody = rRule.second;

        CRuleHandler            ruleHandler(pFact);
        rapidjson::StringStream ruleStream(sRuleBody.c_str());
        rapidjson::ParseResult  parseResult = reader.Parse(ruleStream, ruleHandler);
        if(!parseResult)
        {
            m_Logger.LogMessage(
                        NLogger2::ePriorityLevelError,
                        std::string("JSON parse error"),
                        "CRuleEngine::Process()",
                        std::string("RuleId: ") + sRuleId);
        }

        PProperties pAction = ruleHandler.GetAction();
        if(pAction)
        {
            pAction->Set("ruleId", sRuleId);
            m_pActions->push_back(pAction);
        }
    }
}

ื›ืืŸ pFact - ืžื‘ื ื” ื”ืžื›ื™ืœ ืฆืžื“ื™ ืžืคืชื—-ืขืจืš ืžื”ื•ื“ืขืช JSON, m_ื›ืœืœื™ื - ืžืขืจืš ืžื—ืจื•ื–ื•ืช ืฉืœ ื›ืœืœื™ ื™ื™ืฆื•ืจ. ื”ื”ืฉื•ื•ืื” ื‘ื™ืŸ ื”ื”ื•ื“ืขื” ื”ื ื›ื ืกืช ืœื‘ื™ืŸ ื›ืœืœ ื”ื”ืคืงื” ืžืชื‘ืฆืขืช ื‘ืคื•ื ืงืฆื™ื” reader.Parse(ruleStream, ruleHandler)ืื™ืคื” ruleHandler ื”ื•ื ืื•ื‘ื™ื™ืงื˜ ื”ืžื›ื™ืœ ืืช ื”ื”ื™ื’ื™ื•ืŸ ืฉืœ ืื•ืคืจื˜ื•ืจื™ื ื‘ื•ืœื™ืื ื™ื™ื ื•ื”ืฉื•ื•ืื”. sRuleId - ืžื–ื”ื” ื›ืœืœื™ื ื™ื™ื—ื•ื“ื™, ืฉื‘ื–ื›ื•ืชื• ื ื™ืชืŸ ืœืื—ืกืŸ ื•ืœืขืจื•ืš ื›ืœืœื™ื ื‘ืชื•ืš ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ื‘ืงืจ ื”ื‘ื™ืช ื”ื—ื›ื. m_pActions - ืžืขืจืš ืขื ืชื•ืฆืื•ืช ืฉืœ ื”ืกืงื” ืœื•ื’ื™ืช: ื”ื•ื“ืขื•ืช JSON ื”ืžื›ื™ืœื•ืช ื”ืฉืœื›ื•ืช ืžื‘ืกื™ืก ื”ื›ืœืœื™ื ื•ื ืฉืœื—ื•ืช ื‘ื”ืžืฉืš ืœืžื ื”ืœ ื”ื”ื•ื“ืขื•ืช, ื›ืš ืฉืจืฉื•ืจื™ ืžื ื•ื™ื™ื ื™ื•ื›ืœื• ืœืขื‘ื“ ืื•ืชืŸ.

ื‘ื™ืฆื•ืขื™ RapidJSON ื“ื•ืžื™ื ืœืคื•ื ืงืฆื™ื” strlen (), ื•ื“ืจื™ืฉื•ืช ืžืฉืื‘ื™ ื”ืžืขืจื›ืช ื”ืžื™ื ื™ืžืœื™ื•ืช ืžืืคืฉืจื•ืช ืฉื™ืžื•ืฉ ื‘ืกืคืจื™ื™ื” ื–ื• ื‘ื”ืชืงื ื™ื ืžืฉื•ื‘ืฆื™ื. ื”ืฉื™ืžื•ืฉ ื‘ื”ื•ื“ืขื•ืช ื•ื‘ื›ืœืœื™ื ืœื•ื’ื™ื™ื ื‘ืคื•ืจืžื˜ JSON ืžืืคืฉืจ ืœื™ื™ืฉื ืžืขืจื›ืช ื’ืžื™ืฉื” ืฉืœ ื—ื™ืœื•ืคื™ ืžื™ื“ืข ื‘ื™ืŸ ื›ืœ ืจื›ื™ื‘ื™ ื‘ืงืจ ื”ื‘ื™ืช ื”ื—ื›ื.

ื—ื™ื™ืฉื ื™ ื’ืœ Z-Wave ื•ืžืคืขื™ืœื™ื

ื”ื™ืชืจื•ืŸ ื”ืขื™ืงืจื™ ืฉืœ ื‘ื™ืช ื—ื›ื ื”ื•ื ื‘ื›ืš ืฉื”ื•ื ื™ื›ื•ืœ ืœืžื“ื•ื“ ื‘ืื•ืคืŸ ืขืฆืžืื™ ืคืจืžื˜ืจื™ื ืฉื•ื ื™ื ืฉืœ ื”ืกื‘ื™ื‘ื” ื”ื—ื™ืฆื•ื ื™ืช ื•ืœื‘ืฆืข ืคื•ื ืงืฆื™ื•ืช ืฉื™ืžื•ืฉื™ื•ืช ื‘ื”ืชืื ืœืžืฆื‘. ืœืฉื ื›ืš, ื—ื™ื™ืฉื ื™ื ื•ืžืคืขื™ืœื™ื ืžื—ื•ื‘ืจื™ื ืœื‘ืงืจ ื”ื‘ื™ืช ื”ื—ื›ื. ื‘ื’ืจืกื” ื”ื ื•ื›ื—ื™ืช, ืžื“ื•ื‘ืจ ื‘ืžื›ืฉื™ืจื™ื ืืœื—ื•ื˜ื™ื™ื ื”ืคื•ืขืœื™ื ื‘ืืžืฆืขื•ืช ื”ืคืจื•ื˜ื•ืงื•ืœ Z- ื’ืœ ื‘ืชื“ืจ ืฉื”ื•ืงืฆื” ื‘ืžื™ื•ื—ื“ 869 MHz ืœืžืขืŸ ืจื•ืกื™ื”. ืœื”ืคืขืœื”, ื”ื ืžืฉื•ืœื‘ื™ื ืœืจืฉืช ืจืฉืช, ื”ืžื›ื™ืœื” ืžืฉื—ื–ืจื™ ืื•ืชื•ืช ืœื”ื’ื“ืœืช ืฉื˜ื— ื”ื›ื™ืกื•ื™. ืœืžื›ืฉื™ืจื™ื ื™ืฉ ื’ื ืžืฆื‘ ืžื™ื•ื—ื“ ืœื—ื™ืกื›ื•ืŸ ื‘ืื ืจื’ื™ื” - ื”ื ืžื‘ืœื™ื ืืช ืจื•ื‘ ื”ื–ืžืŸ ื‘ืžืฆื‘ ืฉื™ื ื” ื•ืฉื•ืœื—ื™ื ืžื™ื“ืข ืจืง ื›ืืฉืจ ืžืฆื‘ื ืžืฉืชื ื”, ืžื” ืฉื™ื›ื•ืœ ืœื”ืืจื™ืš ืžืฉืžืขื•ืชื™ืช ืืช ื—ื™ื™ ื”ืกื•ืœืœื” ื”ืžื•ื‘ื ื™ืช.

ื‘ื™ืช ื—ื›ื ื‘ืขื ืŸ. ื—ืœืง 1: ื‘ืงืจ ื•ื—ื™ื™ืฉื ื™ื

ื›ืขืช ื ื™ืชืŸ ืœืžืฆื•ื ื‘ืฉื•ืง ืžืกืคืจ ื’ื“ื•ืœ ืœืžื“ื™ ืฉืœ ืžื›ืฉื™ืจื™ Z-Wave ืฉื•ื ื™ื. ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื›ืžื” ื“ื•ื’ืžืื•ืช:

  1. ื”ืฉืงืข ื”ื—ื›ื Zipato PAN16 ื™ื›ื•ืœ ืœืžื“ื•ื“ ืืช ื”ืคืจืžื˜ืจื™ื ื”ื‘ืื™ื: ืฆืจื™ื›ืช ื—ืฉืžืœ (kWh), ื”ืกืคืง (W), ืžืชื— (V) ื•ื–ืจื (A) ื‘ืจืฉืช ื”ื—ืฉืžืœ. ื™ืฉ ืœื• ื’ื ืžืชื’ ืžื•ื‘ื ื” ืฉื‘ืขื–ืจืชื• ื ื™ืชืŸ ืœืฉืœื•ื˜ ื‘ืžื›ืฉื™ืจ ื”ื—ืฉืžืœื™ ื”ืžื—ื•ื‘ืจ;
  2. ื—ื™ื™ืฉืŸ ื”ื“ืœื™ืคื” ืฉืœ Neo Coolcam ืžื–ื”ื” ื ื•ื›ื—ื•ืช ืฉืœ ื ื•ื–ืœ ืฉื ืฉืคืš ืขืœ ื™ื“ื™ ืกื’ื™ืจืช ื”ืžื’ืขื™ื ืฉืœ ื”ื’ืฉืฉ ื”ืžืจื•ื—ืง;
  3. ื—ื™ื™ืฉืŸ ื”ืขืฉืŸ Zipato PH-PSG01 ืžื•ืคืขืœ ื›ืืฉืจ ื—ืœืงื™ืงื™ ืขืฉืŸ ื ื›ื ืกื™ื ืœืชื ืžื ืชื— ื”ื’ื–;
  4. ื—ื™ื™ืฉืŸ ื”ืชื ื•ืขื” Neo Coolcam ืžื ืชื— ืืช ืงืจื™ื ืช ื”ืื™ื ืคืจื ืื“ื•ื ืฉืœ ื’ื•ืฃ ื”ืื“ื. ื‘ื ื•ืกืฃ ื™ืฉ ื—ื™ื™ืฉืŸ ืื•ืจ (Lx);
  5. Multisensor Philio PST02-A ืžื•ื“ื“ ื˜ืžืคืจื˜ื•ืจื” (ยฐC), ืื•ืจ (%), ืคืชื™ื—ืช ื“ืœืช, ื ื•ื›ื—ื•ืช ืฉืœ ืื“ื ื‘ื—ื“ืจ;
  6. Z-Wave USB Stick ZME E UZB1 ื‘ืงืจ ืจืฉืช ืฉืืœื™ื• ืžื—ื•ื‘ืจื™ื ื—ื™ื™ืฉื ื™ื.

ื—ืฉื•ื‘ ืžืื•ื“ ืฉื”ืžื›ืฉื™ืจื™ื ื•ื”ื‘ืงืจ ื™ืคืขืœื• ื‘ืื•ืชื• ืชื“ืจ, ืื—ืจืช ื”ื ืคืฉื•ื˜ ืœื ื™ืจืื• ืื—ื“ ืืช ื”ืฉื ื™ ื‘ืจื’ืข ื”ื—ื™ื‘ื•ืจ. ื ื™ืชืŸ ืœื—ื‘ืจ ืขื“ 232 ืžื›ืฉื™ืจื™ื ืœื‘ืงืจ ืจืฉืช Z-Wave ืื—ื“, ื•ื–ื” ื“ื™ ืžืกืคื™ืง ืขื‘ื•ืจ ื“ื™ืจื” ืื• ื‘ื™ืช ื›ืคืจื™. ื›ื“ื™ ืœื”ืจื—ื™ื‘ ืืช ืฉื˜ื— ื›ื™ืกื•ื™ ื”ืจืฉืช ื‘ืชื•ืš ื”ื‘ื™ืช, ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืฉืงืข ื—ื›ื ื›ืžื—ื–ืจ ืื•ืชื•ืช.

ื‘ื™ืช ื—ื›ื ื‘ืขื ืŸ. ื—ืœืง 1: ื‘ืงืจ ื•ื—ื™ื™ืฉื ื™ื

ื‘ืชื”ืœื™ืš ืฉืจืช ื‘ืงืจ ื”ื‘ื™ืช ื”ื—ื›ื ืฉื ื“ื•ืŸ ื‘ืคืกืงื” ื”ืงื•ื“ืžืช, ืฉืจืช Z-Wave ืื—ืจืื™ ืขืœ ืื™ื ื˜ืจืืงืฆื™ื” ืขื ื”ืชืงื ื™ Z-Wave. ื”ื•ื ืžืฉืชืžืฉ ื‘ืกืคืจื™ื™ื” ื›ื“ื™ ืœืงื‘ืœ ืžื™ื“ืข ืžื—ื™ื™ืฉื ื™ื OpenZWave ื‘-C++, ื”ืžืกืคืง ืžืžืฉืง ืœืื™ื ื˜ืจืืงืฆื™ื” ืขื ื‘ืงืจ ื”-USB ื‘ืจืฉืช Z-Wave ื•ืขื•ื‘ื“ ืขื ืžื’ื•ื•ืŸ ื—ื™ื™ืฉื ื™ื ื•ืžืคืขื™ืœื™ื. ื”ืขืจืš ืฉืœ ื”ืคืจืžื˜ืจ ื”ืกื‘ื™ื‘ืชื™ ื”ื ืžื“ื“ ืขืœ ื™ื“ื™ ื”ื—ื™ื™ืฉืŸ ื ืจืฉื ืขืœ ื™ื“ื™ ืฉืจืช Z-Wave ื‘ืฆื•ืจื” ืฉืœ ื”ื•ื“ืขืช JSON:

{
	"vendor": "*****",
	"version": "3.0.0",
	"timestampMs": "1566479791290",
	"clientType": "gateway",
	"deviceId": "20873eb0-dd5e-4213-a175-************",
	"deviceType": "sensor",
	"protocol": "zwave",
	"messageType": "sensorData",
	"homeId": "0xefa0cfa7",
	"nodeId": "20",
	"sensorType": "METER",
	"label": "Voltage",
	"sensorData": "229.3",
	"units": "V"
}

ืœืื—ืจ ืžื›ืŸ ื”ื•ื ืžื•ืขื‘ืจ ืœืžื ื”ืœ ื”ื”ื•ื“ืขื•ืช ืฉืœ ืชื”ืœื™ืš ื”ืฉืจืช, ื›ืš ืฉืจืฉื•ืจื™ ืžื ื•ื™ื™ื ื™ื•ื›ืœื• ืœืงื‘ืœ ืื•ืชื•. ื”ืžื ื•ื™ ื”ืขื™ืงืจื™ ื”ื•ื ืฉืจืช ื”ื”ื™ื’ื™ื•ืŸ ืฉืœ ื”ื™ื™ืฆื•ืจ, ื”ืชื•ืื ืืช ืขืจื›ื™ ืฉื“ื•ืช ื”ื”ื•ื“ืขื” ื‘ืงื“ืžื•ืชื ืฉืœ ื›ืœืœื™ ื”ื”ื™ื’ื™ื•ืŸ. ืชื•ืฆืื•ืช ื”ื”ืกืงื” ื”ืžื›ื™ืœื•ืช ืคืงื•ื“ื•ืช ื‘ืงืจื” ื ืฉืœื—ื•ืช ื—ื–ืจื” ืœืžื ื”ืœ ื”ื”ื•ื“ืขื•ืช ื•ืžืฉื ืขื•ื‘ืจื•ืช ืœืฉืจืช Z-Wave, ืฉืžืคืขื ื— ืื•ืชืŸ ื•ืฉื•ืœื— ืื•ืชืŸ ืœื‘ืงืจ ื”-USB ื‘ืจืฉืช Z-Wave. ืœืื—ืจ ืžื›ืŸ ื”ื ื ื›ื ืกื™ื ืœืžืคืขื™ืœ, ืฉืžืฉื ื” ืืช ืžืฆื‘ื ืฉืœ ื—ืคืฆื™ื ืกื‘ื™ื‘ืชื™ื™ื, ื•ื”ื‘ื™ืช ื”ื—ื›ื ืžื‘ืฆืข ื›ืš ืขื‘ื•ื“ื” ืฉื™ืžื•ืฉื™ืช.

ื‘ื™ืช ื—ื›ื ื‘ืขื ืŸ. ื—ืœืง 1: ื‘ืงืจ ื•ื—ื™ื™ืฉื ื™ื
(ืœื—ืฅ ืขืœ ื”ืชืžื•ื ื” ื›ื“ื™ ืœืคืชื•ื— ื‘ืจื–ื•ืœื•ืฆื™ื” ื’ื“ื•ืœื” ื™ื•ืชืจ)

ื—ื™ื‘ื•ืจ ืžื›ืฉื™ืจื™ Z-Wave ื ืขืฉื” ื‘ืžืžืฉืง ื”ื’ืจืคื™ ืฉืœ ื‘ืงืจ ื”ื‘ื™ืช ื”ื—ื›ื. ื›ื“ื™ ืœืขืฉื•ืช ื–ืืช, ืขื‘ื•ืจ ืœื“ืฃ ืขื ืจืฉื™ืžืช ืžื›ืฉื™ืจื™ื ื•ืœื—ืฅ ืขืœ ื›ืคืชื•ืจ "ื”ื•ืกืฃ". ืคืงื•ื“ืช ื”-add ื“ืจืš ืžืžืฉืง RESTful API ื ื›ื ืกืช ืœืชื”ืœื™ืš ื”ืฉืจืช ื•ืœืื—ืจ ืžื›ืŸ ื ืฉืœื—ืช ืขืœ ื™ื“ื™ ืžื ื”ืœ ื”ื”ื•ื“ืขื•ืช ืœืฉืจืช Z-Wave, ืžื” ืฉืžื›ื ื™ืก ืืช ื‘ืงืจ ื”-USB ื‘ืจืฉืช Z-Wave ืœืžืฆื‘ ืžื™ื•ื—ื“ ืœื”ื•ืกืคืช ื”ืชืงื ื™ื. ืœืื—ืจ ืžื›ืŸ, ื‘ืžื›ืฉื™ืจ ื”-Z-Wave ืขืœื™ืš ืœื‘ืฆืข ืกื“ืจื” ืฉืœ ืœื—ื™ืฆื•ืช ืžื”ื™ืจื•ืช (3 ืœื—ื™ืฆื•ืช ืชื•ืš 1,5 ืฉื ื™ื•ืช) ืขืœ ื›ืคืชื•ืจ ื”ืฉื™ืจื•ืช. ื‘ืงืจ ื”-USB ืžื—ื‘ืจ ืืช ื”ืžื›ืฉื™ืจ ืœืจืฉืช ื•ืฉื•ืœื— ืžื™ื“ืข ืื•ื“ื•ืชื™ื• ืœืฉืจืช Z-Wave. ื–ื”, ื‘ืชื•ืจื•, ื™ื•ืฆืจ ืขืจืš ื—ื“ืฉ ื‘ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ SQLite ืขื ื”ืคืจืžื˜ืจื™ื ืฉืœ ื”ืžื›ืฉื™ืจ ื”ื—ื“ืฉ. ืœืื—ืจ ืžืจื•ื•ื— ื–ืžืŸ ืžื•ื’ื“ืจ, ื”ืžืžืฉืง ื”ื’ืจืคื™ ื—ื•ื–ืจ ืœื“ืฃ ืจืฉื™ืžืช ื”ืชืงื ื™ Z-Wave, ืงื•ืจื ืžื™ื“ืข ืžืžืกื“ ื”ื ืชื•ื ื™ื ื•ืžืฆื™ื’ ืืช ื”ืžื›ืฉื™ืจ ื”ื—ื“ืฉ ื‘ืจืฉื™ืžื”. ื›ืœ ืžื›ืฉื™ืจ ืžืงื‘ืœ ืžื–ื”ื” ื™ื™ื—ื•ื“ื™ ืžืฉืœื•, ื”ืžืฉืžืฉ ื‘ื—ื•ืงื™ ืžืกืงื ื•ืช ื™ื™ืฆื•ืจ ื•ื‘ืขื‘ื•ื“ื” ื‘ืขื ืŸ. ื”ืคืขื•ืœื” ืฉืœ ืืœื’ื•ืจื™ืชื ื–ื” ืžื•ืฆื’ืช ื‘ืชืจืฉื™ื UML:

ื‘ื™ืช ื—ื›ื ื‘ืขื ืŸ. ื—ืœืง 1: ื‘ืงืจ ื•ื—ื™ื™ืฉื ื™ื
(ืœื—ืฅ ืขืœ ื”ืชืžื•ื ื” ื›ื“ื™ ืœืคืชื•ื— ื‘ืจื–ื•ืœื•ืฆื™ื” ื’ื“ื•ืœื” ื™ื•ืชืจ)

ื—ื™ื‘ื•ืจ ืžืฆืœืžื•ืช IP

ืžืขืจื›ืช ื”ื‘ื™ืช ื”ื—ื›ื ื‘ืขื ืŸ ื”ื ื“ื•ื ื” ื‘ืžืืžืจ ื–ื” ื”ื™ื ืฉื“ืจื•ื’ ืฉืœ ืžืขืจื›ืช ืžืขืงื‘ ื”ื•ื•ื™ื“ืื• ื‘ืขื ืŸ, ืฉืคื•ืชื—ื” ื’ื ื”ื™ื ืขืœ ื™ื“ื™ ื”ืžื—ื‘ืจ, ื”ืงื™ื™ืžืช ื‘ืฉื•ืง ื›ื‘ืจ ืžืกืคืจ ืฉื ื™ื ื•ื‘ืขืœืช ื”ืชืงื ื•ืช ืจื‘ื•ืช ื‘ืจื•ืกื™ื”.

ืขื‘ื•ืจ ืžืขืจื›ื•ืช ืžืขืงื‘ ื•ื™ื“ืื• ื‘ืขื ืŸ, ืื—ืช ื”ื‘ืขื™ื•ืช ื”ืืงื•ื˜ื™ื•ืช ื”ื™ื ื”ืžื‘ื—ืจ ื”ืžืฆื•ืžืฆื ืฉืœ ืฆื™ื•ื“ ืฉืื™ืชื• ื ื™ืชืŸ ืœื‘ืฆืข ืื™ื ื˜ื’ืจืฆื™ื”. ื”ืชื•ื›ื ื” ื”ืื—ืจืื™ืช ืœื—ื™ื‘ื•ืจ ืœืขื ืŸ ืžื•ืชืงื ืช ื‘ืชื•ืš ืžืฆืœืžืช ื”ื•ื•ื™ื“ืื•, ืžื” ืฉืžืฆื™ื‘ ืžื™ื“ ื“ืจื™ืฉื•ืช ืจืฆื™ื ื™ื•ืช ืœื—ื•ืžืจื” ืฉืœื” โ€“ ื”ืžืขื‘ื“ ื•ื›ืžื•ืช ื”ื–ื™ื›ืจื•ืŸ ื”ืคื ื•ื™. ื–ื” ื‘ืขื™ืงืจ ืžืกื‘ื™ืจ ืืช ื”ืžื—ื™ืจ ื”ื’ื‘ื•ื” ื™ื•ืชืจ ืฉืœ ืžืฆืœืžื•ืช ื˜ืœื•ื•ื™ื–ื™ื” ื‘ืžืขื’ืœ ืกื’ื•ืจ ื‘ืขื ืŸ ื‘ื”ืฉื•ื•ืื” ืœืžืฆืœืžื•ืช IP ืจื’ื™ืœื•ืช. ื‘ื ื•ืกืฃ, ื ื“ืจืฉ ืฉืœื‘ ืžืžื•ืฉืš ืฉืœ ืžืฉื ื•ืžืชืŸ ืขื ื—ื‘ืจื•ืช ืœื™ื™ืฆื•ืจ ืžืฆืœืžื•ืช ื‘ืžืขื’ืœ ืกื’ื•ืจ ื›ื“ื™ ืœืงื‘ืœ ื’ื™ืฉื” ืœืžืขืจื›ืช ืงื‘ืฆื™ ื”ืžืฆืœืžื•ืช ื•ืœื›ืœ ื›ืœื™ ื”ืคื™ืชื•ื— ื”ื ื“ืจืฉื™ื.

ื‘ื™ืช ื—ื›ื ื‘ืขื ืŸ. ื—ืœืง 1: ื‘ืงืจ ื•ื—ื™ื™ืฉื ื™ื

ืžืฆื“ ืฉื ื™, ืœื›ืœ ืžืฆืœืžื•ืช ื”-IP ื”ืžื•ื“ืจื ื™ื•ืช ื™ืฉ ืคืจื•ื˜ื•ืงื•ืœื™ื ืกื˜ื ื“ืจื˜ื™ื™ื ืœืื™ื ื˜ืจืืงืฆื™ื” ืขื ืฆื™ื•ื“ ืื—ืจ (ื‘ืžื™ื•ื—ื“ ืžื›ืฉื™ืจื™ ื•ื™ื“ืื•). ื›ืš, ื”ืฉื™ืžื•ืฉ ื‘ื‘ืงืจ ื ืคืจื“ ื”ืžืชื—ื‘ืจ ื‘ืืžืฆืขื•ืช ืคืจื•ื˜ื•ืงื•ืœ ืกื˜ื ื“ืจื˜ื™ ื•ืžืฉื“ืจ ื–ืจืžื™ ื•ื™ื“ืื• ืžืžืฆืœืžื•ืช IP ืœืขื ืŸ ืžืกืคืง ื™ืชืจื•ื ื•ืช ืชื—ืจื•ืชื™ื™ื ืžืฉืžืขื•ืชื™ื™ื ืœืžืขืจื›ื•ืช ืžืขืงื‘ ื•ื™ื“ืื• ื‘ืขื ืŸ. ื™ืชืจื” ืžื›ืš, ืื ื”ืœืงื•ื— ื›ื‘ืจ ื”ืชืงื™ืŸ ืžืขืจื›ืช ืžืขืงื‘ ื•ื™ื“ืื• ื”ืžื‘ื•ืกืกืช ืขืœ ืžืฆืœืžื•ืช IP ืคืฉื•ื˜ื•ืช, ืื– ื ื™ืชืŸ ืœื”ืจื—ื™ื‘ ืื•ืชื” ื•ืœื”ืคื•ืš ืื•ืชื” ืœื‘ื™ืช ื—ื›ื ื‘ืขื ืŸ ืžืŸ ื”ืžื ื™ื™ืŸ.

ื”ืคืจื•ื˜ื•ืงื•ืœ ื”ืคื•ืคื•ืœืจื™ ื‘ื™ื•ืชืจ ืขื‘ื•ืจ ืžืขืจื›ื•ืช ืžืขืงื‘ ื•ื™ื“ืื• IP, ื”ื ืชืžืš ื›ืขืช ืขืœ ื™ื“ื™ ื›ืœ ื™ืฆืจื ื™ ืžืฆืœืžื•ืช ื”-IP ืœืœื ื™ื•ืฆื ืžืŸ ื”ื›ืœืœ, ื”ื•ื ืคืจื•ืคื™ืœ ONVIF S, ืฉื”ืžืคืจื˜ ืฉืœื• ืงื™ื™ื ื‘ืฉืคืช ืชื™ืื•ืจ ืฉื™ืจื•ืชื™ ืื™ื ื˜ืจื ื˜ wsdl. ืฉื™ืžื•ืฉ ื‘ื›ืœื™ ืขื–ืจ ืžืชื•ืš ืขืจื›ืช ื”ื›ืœื™ื gSOAP ืืคืฉืจ ืœื™ืฆื•ืจ ืงื•ื“ ืžืงื•ืจ ืขื‘ื•ืจ ืฉื™ืจื•ืชื™ื ืฉืขื•ื‘ื“ื™ื ืขื ืžืฆืœืžื•ืช IP:

$ wsdl2h -o onvif.h 
	https://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl 
	https://www.onvif.org/ver10/events/wsdl/event.wsdl 
	https://www.onvif.org/ver10/media/wsdl/media.wsdl 
	https://www.onvif.org/ver20/ptz/wsdl/ptz.wsdl

$ soapcpp2 -Cwvbj -c++11 -d cpp_files/onvif -i onvif.h

ื›ืชื•ืฆืื” ืžื›ืš, ืื ื• ืžืงื‘ืœื™ื ืงื‘ื•ืฆื” ืฉืœ ืงื‘ืฆื™ ื›ื•ืชืจืช "*.h" ื•ืžืงื•ืจ "*.cpp" ื‘-C++, ืื•ืชื ื ื™ืชืŸ ืœืžืงื ื™ืฉื™ืจื•ืช ืœืชื•ืš ืืคืœื™ืงืฆื™ื” ืื• ืกืคืจื™ื” ื ืคืจื“ืช ื•ืœื”ืจื›ื™ื‘ ื‘ืืžืฆืขื•ืช ืžื”ื“ืจ GCC. ื‘ืฉืœ ื”ืคื•ื ืงืฆื™ื•ืช ื”ืจื‘ื•ืช, ื”ืงื•ื“ ื’ื“ื•ืœ ื•ื“ื•ืจืฉ ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื ื•ืกืคืช. ืœืžื™ืงืจื•-ืžื—ืฉื‘ Raspberry Pi 3 ื“ื’ื B+ ื™ืฉ ื‘ื™ืฆื•ืขื™ื ืžืกืคื™ืงื™ื ืœื‘ื™ืฆื•ืข ืงื•ื“ ื–ื”, ืืš ืื ื™ืฉ ืฆื•ืจืš ืœื”ืขื‘ื™ืจ ืืช ื”ืงื•ื“ ืœืคืœื˜ืคื•ืจืžื” ืื—ืจืช, ื™ืฉ ืฆื•ืจืš ืœื‘ื—ื•ืจ ืืช ืืจื›ื™ื˜ืงื˜ื•ืจืช ื”ืžืขื‘ื“ ื•ืืช ืžืฉืื‘ื™ ื”ืžืขืจื›ืช ื”ื ื›ื•ื ื™ื.

ืžืฆืœืžื•ืช IP ื”ืชื•ืžื›ื•ืช ื‘ืชืงืŸ ONVIF, ื›ืืฉืจ ืคื•ืขืœื•ืช ื‘ืจืฉืช ืžืงื•ืžื™ืช, ืžื—ื•ื‘ืจื•ืช ืœืงื‘ื•ืฆืช ืจื™ื‘ื•ื™ ืฉื™ื“ื•ืจ ืžื™ื•ื—ื“ืช ืขื ื”ื›ืชื•ื‘ืช 239.255.255.250. ื™ืฉ ืคืจื•ื˜ื•ืงื•ืœ WS Discovery, ื”ืžืืคืฉืจ ืœืš ืœื”ืคื•ืš ืืช ื”ื—ื™ืคื•ืฉ ืื—ืจ ืžื›ืฉื™ืจื™ื ื‘ืจืฉืช ื”ืžืงื•ืžื™ืช ืœืื•ื˜ื•ืžื˜ื™ืช.

ื”ืžืžืฉืง ื”ื’ืจืคื™ ืฉืœ ื‘ืงืจ ื”ื‘ื™ืช ื”ื—ื›ื ืžื™ื™ืฉื ืคื•ื ืงืฆื™ื™ืช ื—ื™ืคื•ืฉ ืขื‘ื•ืจ ืžืฆืœืžื•ืช IP ื‘-PHP, ื”ื ื•ื—ื” ืžืื•ื“ ื‘ืขืช ืื™ื ื˜ืจืืงืฆื™ื” ืขื ืฉื™ืจื•ืชื™ ืื™ื ื˜ืจื ื˜ ื‘ืืžืฆืขื•ืช ื”ื•ื“ืขื•ืช XML. ื‘ืขืช ื‘ื—ื™ืจืช ืคืจื™ื˜ื™ ืชืคืจื™ื˜ ื”ืชืงื ื™ื > ืžืฆืœืžื•ืช IP > ืกืจื™ืงื” ื”ืืœื’ื•ืจื™ืชื ืœื—ื™ืคื•ืฉ ืžืฆืœืžื•ืช IP ืžื•ืคืขืœ, ื•ืžืฆื™ื’ ืืช ื”ืชื•ืฆืื” ื‘ืฆื•ืจื” ืฉืœ ื˜ื‘ืœื”:

ื‘ื™ืช ื—ื›ื ื‘ืขื ืŸ. ื—ืœืง 1: ื‘ืงืจ ื•ื—ื™ื™ืฉื ื™ื
(ืœื—ืฅ ืขืœ ื”ืชืžื•ื ื” ื›ื“ื™ ืœืคืชื•ื— ื‘ืจื–ื•ืœื•ืฆื™ื” ื’ื“ื•ืœื” ื™ื•ืชืจ)

ื›ืืฉืจ ืืชื” ืžื•ืกื™ืฃ ืžืฆืœืžื” ืœื‘ืงืจ, ืืชื” ื™ื›ื•ืœ ืœืฆื™ื™ืŸ ืืช ื”ื”ื’ื“ืจื•ืช ืœืคื™ื”ืŸ ื”ื™ื ืชื™ืฆื•ืจ ืื™ื ื˜ืจืืงืฆื™ื” ืขื ื”ืขื ืŸ. ื’ื ื‘ืฉืœื‘ ื–ื” ืžื•ืงืฆื” ืœื• ืื•ื˜ื•ืžื˜ื™ืช ืžื–ื”ื” ืžื›ืฉื™ืจ ื™ื™ื—ื•ื“ื™, ืฉื‘ืืžืฆืขื•ืชื• ื ื™ืชืŸ ืžืื•ื—ืจ ื™ื•ืชืจ ืœื–ื”ื•ืช ืื•ืชื• ื‘ืงืœื•ืช ื‘ืชื•ืš ื”ืขื ืŸ.

ื‘ื™ืช ื—ื›ื ื‘ืขื ืŸ. ื—ืœืง 1: ื‘ืงืจ ื•ื—ื™ื™ืฉื ื™ื

ืœืื—ืจ ืžื›ืŸ, ื ื•ืฆืจืช ื”ื•ื“ืขื” ื‘ืคื•ืจืžื˜ JSON ื”ืžื›ื™ืœื” ืืช ื›ืœ ื”ืคืจืžื˜ืจื™ื ืฉืœ ื”ืžืฆืœืžื” ืฉื ื•ืกืคื” ื•ื ืฉืœื—ืช ืœืชื”ืœื™ืš ื”ืฉืจืช ืฉืœ ื‘ืงืจ ื”ื‘ื™ืช ื”ื—ื›ื ื‘ืืžืฆืขื•ืช ืคืงื•ื“ืช RESTful API, ื›ืืฉืจ ืคืจืžื˜ืจื™ ื”ืžืฆืœืžื” ืžืคื•ืขื ื—ื™ื ื•ื ืฉืžืจื™ื ื‘ืžืกื“ ื”ื ืชื•ื ื™ื ื”ืคื ื™ืžื™ ืฉืœ SQLite, ื•ื”ื ืžืฉืžืฉ ื’ื ืœื”ืคืขืœืช ืฉืจืฉื•ืจื™ ื”ืขื™ื‘ื•ื“ ื”ื‘ืื™ื:

  1. ื™ืฆื™ืจืช ื—ื™ื‘ื•ืจ RTSP ืœืงื‘ืœืช ื–ืจืžื™ ื•ื™ื“ืื• ื•ืื•ื“ื™ื•;
  2. ื”ืžืจืช ืื•ื“ื™ื• ืžืคื•ืจืžื˜ื™ื G.711 mu-Law, G.711 A-Law, G.723 ื•ื›ื•'. ืœืคื•ืจืžื˜ AAC;
  3. ื”ืžืจืช ื–ืจืžื™ ื•ื™ื“ืื• ื‘ืคื•ืจืžื˜ H.264 ื•ืื•ื“ื™ื• ื‘ืคื•ืจืžื˜ AAC ืœืชื•ืš ืžื™ื›ืœ FLV ื•ื”ืขื‘ืจืชื• ืœืขื ืŸ ื‘ืืžืฆืขื•ืช ืคืจื•ื˜ื•ืงื•ืœ RTMP;
  4. ื™ืฆื™ืจืช ื—ื™ื‘ื•ืจ ืขื ื ืงื•ื“ืช ื”ืงืฆื” ืฉืœ ื’ืœืื™ ื”ืชื ื•ืขื” ืฉืœ ืžืฆืœืžืช ื”-IP ื‘ืืžืฆืขื•ืช ืคืจื•ื˜ื•ืงื•ืœ ONVIF ื•ืชืฉืื•ืœ ืื•ืชื• ืžืขืช ืœืขืช;
  5. ื™ืฆื™ืจืช ืžืขืช ืœืขืช ืชืžื•ื ืช ืชืฆื•ื’ื” ืžืงื“ื™ืžื” ืฉืœ ืชืžื•ื ื” ืžืžื•ื–ืขืจืช ื•ืฉืœื™ื—ืชื” ืœืขื ืŸ ื‘ืืžืฆืขื•ืช ืคืจื•ื˜ื•ืงื•ืœ MQTT;
  6. ื”ืงืœื˜ื” ืžืงื•ืžื™ืช ืฉืœ ื–ืจืžื™ ื•ื™ื“ืื• ื•ืื•ื“ื™ื• ื‘ืฆื•ืจื” ืฉืœ ืงื‘ืฆื™ื ื ืคืจื“ื™ื ื‘ืคื•ืจืžื˜ MP4 ืขืœ ื’ื‘ื™ ื›ืจื˜ื™ืก SD ืื• Flash ืฉืœ ื‘ืงืจ ื”ื‘ื™ืช ื”ื—ื›ื.

ื‘ื™ืช ื—ื›ื ื‘ืขื ืŸ. ื—ืœืง 1: ื‘ืงืจ ื•ื—ื™ื™ืฉื ื™ื

ื›ื“ื™ ืœื™ืฆื•ืจ ื—ื™ื‘ื•ืจ ืขื ืžืฆืœืžื•ืช, ืœื”ืžื™ืจ, ืœืขื‘ื“ ื•ืœื”ืงืœื™ื˜ ื–ืจืžื™ ื•ื™ื“ืื• ื‘ืชื”ืœื™ืš ื”ืฉืจืช, ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ืคื•ื ืงืฆื™ื•ืช ืžื”ืกืคืจื™ื™ื” FFmpeg 4.1.0.

ื‘ื ื™ืกื•ื™ ื‘ื“ื™ืงืช ื”ื‘ื™ืฆื•ืขื™ื, 3 ืžืฆืœืžื•ืช ื—ื•ื‘ืจื• ืœื‘ืงืจ:

  1. HiWatch DS-I114W (ืจื–ื•ืœื•ืฆื™ื” - 720p, ืคื•ืจืžื˜ ื“ื—ื™ืกื” - H.264, ืงืฆื‘ ืกื™ื‘ื™ื•ืช - 1 Mb/s, ืฆืœื™ืœ G.711 mu-Law);
  2. Microdigital MDC-M6290FTD-1 (ืจื–ื•ืœื•ืฆื™ื” - 1080p, ืคื•ืจืžื˜ ื“ื—ื™ืกื” - H.264, ืงืฆื‘ ืกื™ื‘ื™ื•ืช - 1 Mb/s, ืœืœื ืฆืœื™ืœ);
  3. Dahua DH-IPC-HDW4231EMP-AS-0360B (ืจื–ื•ืœื•ืฆื™ื” - 1080p, ืคื•ืจืžื˜ ื“ื—ื™ืกื” - H.264, ืงืฆื‘ ืกื™ื‘ื™ื•ืช - 1.5 Mb/s, ืื•ื“ื™ื• AAC).

ื‘ื™ืช ื—ื›ื ื‘ืขื ืŸ. ื—ืœืง 1: ื‘ืงืจ ื•ื—ื™ื™ืฉื ื™ื

ื›ืœ ืฉืœื•ืฉืช ื”ื–ืจืžื™ื ื”ื•ืคืงื• ื‘ื• ื–ืžื ื™ืช ืœืขื ืŸ, ื”ืžืจืช ืงื™ื“ื•ื“ ืื•ื“ื™ื• ื‘ื•ืฆืข ืžืžืฆืœืžื” ืื—ืช ื‘ืœื‘ื“, ื•ื”ืงืœื˜ืช ืืจื›ื™ื•ืŸ ืžืงื•ืžื™ ื”ื•ืฉื‘ืชื”. ืขื•ืžืก ื”ืžืขื‘ื“ ื”ื™ื” ื›-5%, ืฉื™ืžื•ืฉ ื‘-RAM ื”ื™ื” 32 ืžื’ื”-ื‘ื™ื™ื˜ (ืœืชื”ืœื™ืš), 56 ืžื’ื”-ื‘ื™ื™ื˜ (ืกื”"ื› ื›ื•ืœืœ ืžืขืจื›ืช ื”ืคืขืœื”).

ื›ืš, ื ื™ืชืŸ ืœื—ื‘ืจ ื›-20 - 30 ืžืฆืœืžื•ืช ืœื‘ืงืจ ื”ื‘ื™ืช ื”ื—ื›ื (ื‘ื”ืชืื ืœืจื–ื•ืœื•ืฆื™ื” ื•ืงืฆื‘ ืกื™ื‘ื™ื•ืช), ืฉืžืกืคื™ืง ืœืžืขืจื›ืช ืžืขืงื‘ ื•ื™ื“ืื• ืœืงื•ื˜ื’' ื‘ืŸ ืฉืœื•ืฉ ืงื•ืžื•ืช ืื• ืœืžื—ืกืŸ ืงื˜ืŸ. ืขื‘ื•ืจ ืžืฉื™ืžื•ืช ื”ื“ื•ืจืฉื•ืช ื‘ื™ืฆื•ืขื™ื ื˜ื•ื‘ื™ื ื™ื•ืชืจ, ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘-nettop ืขื ืžืขื‘ื“ ืื™ื ื˜ืœ ืžืจื•ื‘ื” ืœื™ื‘ื•ืช ื•ืžืขืจื›ืช ื”ื”ืคืขืœื” Linux Debian Sarge. ื”ื‘ืงืจ ื ืžืฆื ื›ืขืช ื‘ื”ืคืขืœืช ื ื™ืกื™ื•ืŸ, ื•ื ืชื•ื ื™ ื”ื‘ื™ืฆื•ืขื™ื ืฉืœื• ื™ืขื•ื“ื›ื ื•.

ืื™ื ื˜ืจืืงืฆื™ื” ืขื ื”ืขื ืŸ

ื‘ื™ืช ื—ื›ื ืžื‘ื•ืกืก ืขื ืŸ ืžืื—ืกืŸ ืืช ื ืชื•ื ื™ ื”ืžืฉืชืžืฉ (ืžื“ื™ื“ื•ืช ื•ื™ื“ืื• ื•ื—ื™ื™ืฉื ื™ื) ื‘ืขื ืŸ. ื”ืืจื›ื™ื˜ืงื˜ื•ืจื” ืฉืœ ืื—ืกื•ืŸ ืขื ืŸ ืชื™ื“ื•ืŸ ื‘ื™ืชืจ ืคื™ืจื•ื˜ ื‘ืžืืžืจ ื”ื‘ื ื‘ืกื“ืจื” ืฉืœื ื•. ื›ืขืช ื ื“ื‘ืจ ืขืœ ื”ืžืžืฉืง ืœื”ืขื‘ืจืช ื”ื•ื“ืขื•ืช ืžื™ื“ืข ืžื‘ืงืจ ื”ื‘ื™ืช ื”ื—ื›ื ืœืขื ืŸ.

ื”ืžืฆื‘ื™ื ืฉืœ ื”ืžื›ืฉื™ืจื™ื ื”ืžื—ื•ื‘ืจื™ื ื•ืžื“ื™ื“ื•ืช ื”ื—ื™ื™ืฉื ื™ื ืžื•ืขื‘ืจื™ื ื‘ืืžืฆืขื•ืช ื”ืคืจื•ื˜ื•ืงื•ืœ MQTT, ืืฉืจ ืžืฉืžืฉ ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื‘ืคืจื•ื™ืงื˜ื™ื ืฉืœ ื”ืื™ื ื˜ืจื ื˜ ืฉืœ ื”ื“ื‘ืจื™ื ื‘ืฉืœ ื”ืคืฉื˜ื•ืช ื•ื”ื™ืขื™ืœื•ืช ื”ืื ืจื’ื˜ื™ืช ืฉืœื•. MQTT ืžืฉืชืžืฉ ื‘ืžื•ื“ืœ ืฉืจืช-ืœืงื•ื—, ืฉื‘ื• ืœืงื•ื—ื•ืช ื ืจืฉืžื™ื ืœื ื•ืฉืื™ื ืกืคืฆื™ืคื™ื™ื ื‘ืชื•ืš ื”ื‘ืจื•ืงืจ ื•ืžืคืจืกืžื™ื ืืช ื”ื”ื•ื“ืขื•ืช ืฉืœื”ื. ื”ืžืชื•ื•ืš ืฉื•ืœื— ื”ื•ื“ืขื•ืช ืœื›ืœ ื”ืžื ื•ื™ื™ื ืขืœ ืคื™ ื›ืœืœื™ื ืฉื ืงื‘ืขื• ืœืคื™ ืจืžืช ื”-QoS (ืื™ื›ื•ืช ื”ืฉื™ืจื•ืช):

  • QoS 0 - ืžืงืกื™ืžื•ื ืคืขื ืื—ืช (ืœืœื ื”ื‘ื˜ื—ืช ืžืฉืœื•ื—);
  • QoS 1 - ืœืคื—ื•ืช ืคืขื ืื—ืช (ืขื ืื™ืฉื•ืจ ืžืกื™ืจื”);
  • QoS 2 - ืคืขื ืื—ืช ื‘ื“ื™ื•ืง (ืขื ืื™ืฉื•ืจ ืžืฉืœื•ื— ื ื•ืกืฃ).

ื‘ืžืงืจื” ืฉืœื ื•, ืื ื—ื ื• ืžืฉืชืžืฉื™ื Eclipse Mosquito. ืฉื ื”ื ื•ืฉื ื”ื•ื ื”ืžื–ื”ื” ื”ื™ื™ื—ื•ื“ื™ ืฉืœ ื‘ืงืจ ื”ื‘ื™ืช ื”ื—ื›ื. ืœืงื•ื— MQTT ื‘ืชื•ืš ืชื”ืœื™ืš ื”ืฉืจืช ื ืจืฉื ืœื ื•ืฉื ื–ื” ื•ืžืชืจื’ื ืืœื™ื• ื”ื•ื“ืขื•ืช JSON ื”ืžื’ื™ืขื•ืช ืžืžื ื”ืœ ื”ื”ื•ื“ืขื•ืช. ืœืขื•ืžืช ื–ืืช, ื”ื•ื“ืขื•ืช ืžื”ืžืชื•ื•ืš ืฉืœ MQTT ืžื•ืขื‘ืจื•ืช ืขืœ ื™ื“ื• ืœืžื ื”ืœ ื”ื”ื•ื“ืขื•ืช, ืฉืœืื—ืจ ืžื›ืŸ ืžืจื‘ื” ืื•ืชืŸ ืœืžื ื•ื™ื™ื ืฉืœื• ื‘ืชื•ืš ืชื”ืœื™ืš ื”ืฉืจืช:

ื‘ื™ืช ื—ื›ื ื‘ืขื ืŸ. ื—ืœืง 1: ื‘ืงืจ ื•ื—ื™ื™ืฉื ื™ื

ืœื”ืขื‘ืจืช ื”ื•ื“ืขื•ืช ืขืœ ืžืฆื‘ ื‘ืงืจ ื”ื‘ื™ืช ื”ื—ื›ื, ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ืžื ื’ื ื•ืŸ ืฉืœ ื”ื•ื“ืขื•ืช ืฉืžื•ืจื•ืช ื”ื•ื“ืขื•ืช ืฉื ืฉืžืจื• ืคืจื•ื˜ื•ืงื•ืœ MQTT. ื–ื” ืžืืคืฉืจ ืœืš ืœืคืงื— ื ื›ื•ืŸ ืขืœ ืชื–ืžื•ืŸ ื”ื—ื™ื‘ื•ืจื™ื ืžื—ื“ืฉ ื‘ืžื”ืœืš ื”ืคืกืงื•ืช ื—ืฉืžืœ.

ืœืงื•ื— MQTT ืคื•ืชื— ืขืœ ื‘ืกื™ืก ื™ื™ืฉื•ื ื”ืกืคืจื™ื™ื” Eclipse Paho ื‘ืฉืคืช C++.

ื–ืจืžื™ ืžื“ื™ื” ืฉืœ H.264 + AAC ื ืฉืœื—ื™ื ืœืขื ืŸ ื‘ืืžืฆืขื•ืช ืคืจื•ื˜ื•ืงื•ืœ RTMP, ื›ืืฉืจ ืืฉื›ื•ืœ ืฉืจืชื™ ืžื“ื™ื” ืื—ืจืื™ ืขืœ ืขื™ื‘ื•ื“ื ื•ืื—ืกื•ืŸื. ื›ื“ื™ ืœืคื–ืจ ื‘ืฆื•ืจื” ืžื™ื˜ื‘ื™ืช ืืช ื”ืขื•ืžืก ื‘ืืฉื›ื•ืœ ื•ืœื‘ื—ื•ืจ ืืช ืฉืจืช ื”ืžื“ื™ื” ื”ื›ื™ ืคื—ื•ืช ื˜ืขื•ืŸ, ื‘ืงืจ ื”ื‘ื™ืช ื”ื—ื›ื ืžื‘ืฆืข ื‘ืงืฉื” ืžืงื“ื™ืžื” ืœืžืื–ืŸ ื”ืขื•ืžืก ื‘ืขื ืŸ ื•ืจืง ืœืื—ืจ ืžื›ืŸ ืฉื•ืœื— ืืช ื–ืจื ื”ืžื“ื™ื”.

ืžืกืงื ื”

ื”ืžืืžืจ ื‘ื—ืŸ ื™ื™ืฉื•ื ืกืคืฆื™ืคื™ ืื—ื“ ืฉืœ ื‘ืงืจ ื‘ื™ืช ื—ื›ื ื”ืžื‘ื•ืกืก ืขืœ ื”ืžื™ืงืจื•-ืžื—ืฉื‘ Raspberry Pi 3 B+, โ€‹โ€‹ืฉื™ื›ื•ืœ ืœืงื‘ืœ, ืœืขื‘ื“ ืžื™ื“ืข ื•ืœืฉืœื•ื˜ ื‘ืฆื™ื•ื“ ื‘ืืžืฆืขื•ืช ืคืจื•ื˜ื•ืงื•ืœ Z-Wave, ืœื™ืฆื•ืจ ืื™ื ื˜ืจืืงืฆื™ื” ืขื ืžืฆืœืžื•ืช IP ื‘ืืžืฆืขื•ืช ืคืจื•ื˜ื•ืงื•ืœ ONVIF, ื•ื’ื ืœื”ื—ืœื™ืฃ ื ืชื•ื ื™ื ื• ืคืงื•ื“ื•ืช ืขื ืฉื™ืจื•ืช ื”ืขื ืŸ ื‘ืืžืฆืขื•ืช ืคืจื•ื˜ื•ืงื•ืœื™ MQTT ื•-RTMP. ืžื ื•ืข ืœื•ื’ื™ืงืช ื™ื™ืฆื•ืจ ืคื•ืชื— ืขืœ ื‘ืกื™ืก ื”ืฉื•ื•ืื” ืฉืœ ื›ืœืœื™ื ืœื•ื’ื™ื™ื ื•ืขื•ื‘ื“ื•ืช ื”ืžื•ืฆื’ื•ืช ื‘ืคื•ืจืžื˜ JSON.

ื‘ืงืจ ื”ื‘ื™ืช ื”ื—ื›ื ืขื•ื‘ืจ ื›ืขืช ืชืคืขื•ืœ ื ื™ืกื™ื•ืŸ ื‘ืžืกืคืจ ืืชืจื™ื ื‘ืžื•ืกืงื‘ื” ื•ื‘ืื–ื•ืจ ืžื•ืกืงื‘ื”.

ื”ื’ืจืกื” ื”ื‘ืื” ืฉืœ ื”ื‘ืงืจ ืžืชื›ื ื ืช ืœื—ื‘ืจ ืกื•ื’ื™ื ืื—ืจื™ื ืฉืœ ืžื›ืฉื™ืจื™ื (RF, Bluetooth, WiFi, ื—ื•ื˜ื™). ืœื ื•ื—ื•ืช ื”ืžืฉืชืžืฉื™ื, ื”ืœื™ืš ื—ื™ื‘ื•ืจ ื—ื™ื™ืฉื ื™ื ื•ืžืฆืœืžื•ืช IP ื™ื•ืขื‘ืจ ืœืืคืœื™ืงืฆื™ื™ืช ื”ื ื™ื™ื“. ื™ืฉ ื’ื ืจืขื™ื•ื ื•ืช ืœืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืฉืœ ืงื•ื“ ืชื”ืœื™ืš ื”ืฉืจืช ื•ื”ืขื‘ืจืช ื”ืชื•ื›ื ื” ืœืžืขืจื›ืช ื”ื”ืคืขืœื” OpenWRT. ื–ื” ื™ืืคืฉืจ ืœื›ื ืœื—ืกื•ืš ื‘ื‘ืงืจ ื ืคืจื“ ื•ืœื”ืขื‘ื™ืจ ืืช ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืœ ื‘ื™ืช ื—ื›ื ืœื ืชื‘ ื‘ื™ืชื™ ืจื’ื™ืœ.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”