ืืืื, ืืืืืช ืืืชืคืชืืืช ืืืืืจื ืฉื ืืืงืจืืืืงืืจืื ืืงื, ืขืจืืฆื ืชืงืฉืืจืช, ืืื ืืืืืืืช ืืื ืืจื ื ืืืื ื ืืืืืืชืืช, ื ืืฉื ืืืชืื ืืืืืื ืืืคื ืืืชืจ ืืืืชืจ ืจืืืื ืื. ืืืืจ ืืืื ืขืืจ ืฉืื ืืืื ืืฉืืขืืชืืื ืืื ืชืงืืคืช ืืืื ืืืขืืื ืืืืคืื ืืชืขืฉืืืชืืช 4.0 ืืืืื ืืจื ื ืฉื ืืืืจืื, ืืื ืืคื ืื ืื, ืคืื ืงืฆืืื ืื ืืืืื. ืืืฆืืื ืืฉืืง ืคืชืจืื ืืช ืฉืืืคืืื ืืืจื ืื ืืืช ืืคืจื ืืืขืจืืืช ืืืืข ืืืจืืืืช ืื ืฉืืืืช ืืื ืืงืื ืืขืืื ืืืืฆืขืืช ืกืืืจืืคืื. ืืชืจื ืืื, ืืื ืืจืืงืฆืื ืืื ืืื ืืืืื ื ืืื ื ืืืจืฉืช ืขืื ืืืข ืืฉืคืืช ืชืื ืืช - ืืืืืช ืืืืืืจืืชื ืฉื ืืืืื ืืืืืจ ืืกืื ืชืื, ืืื ืืืืจ ืื ืืืช ืืื ืืฉืคืช ืืื ืฉืื.
ืืืง ืืืขืจืืืช ืืืืช ืืืื ืืงืืืืืช ืืืื ืืฉืืง ืื ืคืืชืื ืืืืื ื ืฉื ืืขืจืืืช ืืขืงื ืืืืื ืืขื ื, ืืฉืจ ืืคืชืืืื ืืืื ื ืืช ืืฆืืจื ืืคืชืจืื ืืืื ืื ืจืง ืื ืืืืจ, ืืื ืื ืื ืืืื ืืืืืืงืืื ืืจืืืงืื.
ืื ื ืืฆืืืื ืืชืฉืืืช ืืืื ืกืืจื ืฉื ืฉืืืฉื ืืืืจืื, ืืฉืจ ืืกืคืจื ืืื ืขื ืื ืืืจืืืืื ืืขืืงืจืืื ืฉื ืืขืจืืช ืืืช ืืื ืืขื ื, ืฉืคืืชืื ืืืืคื ืืืฉื ืขื ืืื ืืืืืจ ืืืืื ืกื ืืคืขืืื. ืืืืืจ ืืจืืฉืื ืืืงืืฉ ืืฆืืื ืืงืื ืืงืฆื ืืืืชืงื ืืชืื ืืืช ืืื, ืืฉื ื ืืืจืืืืงืืืจืช ืืขืจืืช ืืืืกืื ืืขืืืื ืื ืชืื ืื ืืขื ื, ืืืืกืืฃ, ืืฉืืืฉื ืืืคืืืงืฆืืืช ืืืงืื ืื ืืืื ืืืขืจืืช ืืืืฉืืจืื ื ืืืืื ืื ืืืืื.
ืฆืืื ืืืืช ืืื
ืจืืฉืืช, ืืืื ื ืืืจ ืขื ืืื ืืขืฉืืช ืืืช ืืื ืืชืื ืืืจื ืจืืืื, ืืืฆ'ื ืื ืงืืื'. ืืื ืืขืฉืืช ืืืช, ืืืื, ืืฉ ืฆืืจื ืืืงื ืืช ืืฆืืื ืืื ืืืืช:
- ืืืืฉื ืื ืืืืืืื ืคืจืืืจืื ืกืืืืชืืื ืฉืื ืื;
- ืืคืขืืืื ืืคืืขืืื ืขื ืขืฆืืื ืืืฆืื ืืื;
- ืืงืจ ืืืืฆืข ืืืฉืืืื ืืืชืื ืืืืืืืช ืืืืฉื ืื ืืืืืืืงื ืืฉืืืฆืช, ืืืืฆืื ืคืงืืืืช ืืืคืขืืืื.
ืืืืืจ ืืื ื ืืชื ืืจืืืช ืชืจืฉืื ืฉื ืืืช ืืื, ืขืืื ืืฉื ื ืืืืฉื ืื ืื ืืืืช ืืื (1) ืืืืจ ืืืืืืื, ืืืคืจืืืจื (2) ืืชืืืจื (3) ืืืืจ ืืฉืื ื, ืฉืงืข ืืื (4) ืืืืื ื- ืืฆืืืช ืืขืงื ืืืืื (5) ืืืกืืจืื.
ืืืื, ืืืืฉื ืื ืืืืืืืื ืืคืืขืืื ืืืืฆืขืืช ืคืจืืืืงืืื RF433, Z-Wave, ZigBee, Bluetooth ื- WiFi ื ืืฆืืื ืืฉืืืืฉ ื ืจืื. ืืืชืจืื ืืช ืืขืืงืจืืื ืฉืืื ืื ืงืืืช ืืืชืงื ื ืืืฉืืืืฉ, ืืื ืื ืขืืืช ื ืืืื ืืืืื ืืช, ืื ืืืฆืจื ืื ืฉืืืคืื ืืืืื ืืช ืืืืฉืืจืื ืฉืืื ืืฉืืง ืืืืื ื ืืืื ืืืฉ ืืืชื ืืืฉืชืืฉ ืืืืืฆืข.
ืืืืฉื ืื ืืืคืขืืืื, ืืืื, ืืืืืจืื ืืืืฆืขืืช ืืืฉืง ืืืืืื ืืืงืจ ืืืช ืืื (6) - ืืืงืจื ืืืฉื ืืืืื ืืืฉืื ืืช ืื ืืืืฉืืจืื ืืืื ืืจืฉืช ืืืช ืืฉืืื ืืื.
ืขื ืืืช, ืคืชืจืื ืืช ืืกืืืืื ืืืืืื ืืฉืื ืืืืฉื, ืืคืขืื ืืืงืจ ืื-ืืื ืืช. ืืืืืื, ื ืืชื ืืชืื ืช ืชืงืข ืืื ืืืคืขืื ืื ืืืืื ืืคื ืืื ืืื ืื, ืืืฆืืืช ืืขืงื ืืืืื ืืขื ื ืืืืื ืืืงืืื ืืืืื ืขื ืกืื ืืืช ืฉื ืืืื ืชื ืืขื. ืืืงืจืื ืืคืฉืืืื ืืืืชืจ, ืืชื ืืืื ืืืกืชืืจ ืืื ืืงืจ ื ืคืจื, ืืื ืืื ืืืฆืืจ ืืขืจืืช ืืืืฉื ืขื ืชืจืืืฉืื ืจืืื, ืื ืืืจืื.
ืืื ืืืืจ ืืช ืืงืจ ืืืืช ืืืื ืืจืฉืช ืืขืืืืืช, ื ืืชื ืืืฉืชืืฉ ืื ืชื ืืื ืืจื ื ืจืืื (7), ืฉืืคื ืืืื ืืืืฉืืจ ืืืชื ื ืคืืฅ ืืื ืืืช. ืืื ืืฉ ืืืขืื ื ืืกืฃ ืืืืืช ืืงืจ ืืืช ืืื - ืื ืืืืืืจ ืืืื ืืจื ื ืืื, ืืืืช ืืืื ืืืฉืื ืืคืขืื ืืจืืื ืืืืืช ืืืืืง ืืืืื ืืืืืืกื ืืชืื ืืืงืจ, ืืื ืืฉืืจืืช ืืขื ื.
ืืงืจ ืืืช ืืื
ืืืงืจ ืืืขืจืืช ืืืืช ืืืื ืืขื ื ืื ืืื ืืืืืจ ืื ืคืืชื ืขื ืืกืืก ืืืงืจื ืืืฉื ืืขื ืืื ืืืื
ืืจืืืช ืืืงืจ ืคืฉืืื ืืืื - ืืืืงืจื ืืืฉื (1) ืืืชืงื ืืืืจื ืคืืกืืืง (2), ืืืืจ ืืื ืืืชืงื ืื ืืจืืืก ืืืืจืื ืื ืคื 8 GB ืืคืืจืื microSD ืขื ืชืืื ื (3) ืืืงืจ ืจืฉืช USB Z-Wave (4) ืืืจืืฆืื ืืืชืืืืื. ืืงืจ ืืืืช ืืืื ืืืืืจ ืืืกืคืงืช ืืืฉืื ืืืืฆืขืืช ืืชืื ืืชื 5V, 2.1A (5) ืืืื USB - ืืืงืจื USB (6). ืืื ืืงืจ ืืฉ ืืกืคืจ ืืืืื ืืืืืื, ืืฉืจ ืืชืื ืืงืืืฅ ืืชืฆืืจื ืืขืช ืืืฉืงื ืืจืืฉืื ื ืืืืจืื ืืืื ืืจืืงืฆืื ืขื ืฉืืจืืชื ืืืช ืืื ืืขื ื.
ืชืืื ืช ืืงืจ ืืืืช ืืืื ืคืืชืื ืขื ืืื ืืืชื ืืืืจ ืื ืขื ืืกืืก ืืขืจืืช ืืืคืขืื Linux Raspbian Stretch. ืืื ืืืจืื ืืชืช ืืืขืจืืืช ืืขืืงืจืืืช ืืืืืช:
- ืชืืืื ืฉืจืช ืืืื ืืจืืงืฆืื ืขื ืฆืืื ืืืช ืืื ืืืขื ื;
- ืืืฉืง ืืฉืชืืฉ ืืจืคื ืืืืืจืช ืคืจืืืจื ืืชืฆืืจื ืืืืคืขืื ืฉื ืืืงืจ;
- ืืกื ื ืชืื ืื ืืืืกืื ืชืฆืืจืช ืืืงืจ.
ืืกื ื ืชืื ืื ืืงืจ ืืืช ืืื ืืืืฉื ืขื ืืกืืก DBMS ืืืืืข
ืืืฉืง ืืจืคื ืืงืจ ืืืช ืืื ืฉืคืืชื ื-PHP 7 ืืืืฆืขืืช ืืืงืจื-ืืกืืจืช
(ืืืฅ ืขื ืืชืืื ื ืืื ืืคืชืื ืืจืืืืืฆืื ืืืืื ืืืชืจ)
ืชืคืงืืื ืืขืืงืจื ืฉื ืืืืฉืง ืืืจืคื ืืื ืืืืืจ ืฆืืื ืืืช ืืื (ืืฆืืืืช ืืขืงื IP ืืืืืฉื ืื) ืืืงืจ. ืืคืืืงืฆืืืช ืืืื ืืจื ื ืงืืจืืช ืืช ืืชืฆืืจื ืืืืฆื ืื ืืืื ืฉื ืืืงืจ ืืืืชืงื ืื ืืืืืืจืื ืืืื ืืืกื ืื ืชืื ืื ืฉื SQLite. ืืื ืืฉื ืืช ืืช ืชืฆืืจืช ืืืงืจ, ืืื ืฉืืื ืคืงืืืืช ืืงืจื ืืคืืจืื JSON ืืจื ืืืฉืง RESTful API ืฉื ืชืืืื ืืฉืจืช.
ืชืืืื ืฉืจืช
ืชืืืื ืฉืจืช - ืืจืืื ืืจืืื ืืืืฆืข ืืช ืื ืืขืืืื ืืขืืงืจืืช ืขื ืืืืืืฆืื ืฉื ืชืืืืื ืืืืืข ืืืืืืื ืืกืืก ืืืืช ืืื: ืงืืืื ืืขืืืื ื ืชืื ืื ืชืืืฉืชืืื, ืืืฆืืช ืคืขืืืืช ืืงืจื ืืืชืื ืืืืืืื ืืืืืืข. ืืืจืช ืชืืืื ืืฉืจืช ืืื ืืืฆืืจ ืืื ืืจืืงืฆืื ืขื ืฆืืื ืืืช ืืื, ืืืฆืข ืืืืื ืืืืืื ืืืืฆืืจ, ืืงืื ืืืขืื ืคืงืืืืช ืืืืืฉืง ืืืจืคื ืืืืขื ื. ืชืืืื ืืฉืจืช ืืืงืจ ืืืืช ืืืื ืื ืืื ืืืืฉื ืืืคืืืงืฆืื ืืจืืื ืืืืื ืฉืคืืชืื ื-C++ ืืืืฉืงื ืืฉืืจืืช ื ืคืจื system ืืขืจืืช ืืคืขืื ืืื ืืงืก ืจืกืคืืืื.
ืืืืืงืื ืืขืืงืจืืื ืฉื ืชืืืื ืืฉืจืช ืื:
- ืื ืื ืืืืขืืช;
- ืฉืจืช ืืฆืืืืช IP;
- ืฉืจืช ืืชืงื ืื Z-Wave;
- ืืืืื ืืืืืื ืฉื ืฉืจืช ืืืืฆืืจ;
- ืืกื ื ืชืื ืื ืฉื ืชืฆืืจื ืฉื ืืืงืจ ืืืืืง ืฉื ืืืืื ืืืืืื;
- ืฉืจืช API RESTful ืืืื ืืจืืงืฆืื ืขื ืืืืฉืง ืืืจืคื;
- ืืงืื MQTT ืืืื ืืจืืงืฆืื ืขื ืืขื ื.
ืืืืงืื ืฉื ืชืืืื ืฉืจืช ืืืืฉืืื ืืืืืื ื ืคืจืืื, ืฉืืืืข ืืื ืืื ืืืขืืจ ืืฆืืจื ืฉื ืืืืขืืช ืืคืืจืื JSON (ืื ืืื ื ื ืชืื ืื ืืืืืฆืืื ืคืืจืื ืื ืืืืืจืื ืืชืืืื).
ืืืจืืื ืืขืืงืจื ืืชืืืื ืืฉืจืช ืืื ืื ืื ืืืืขืืช, ืฉืื ืชื ืืืืขืืช 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:
- ืฉืืื "ืฉืืื";
- ืื ืฉืืื ื"ืื_ืฉืืื";
- ืคืืืช "ืคืืืช";
- ืืืชืจ "ืืืื ืืืชืจ";
- ืคืืืช ืื ืฉืืื ื-"ืคืืืช_ืื_ืฉืืื";
- ืืืื ืื ืฉืืื ื-"ืืืื_ืื_ืฉืืื".
ื ืืชื ืืงืฉืจ ืืช ืชืืฆืืืช ืืืฉืืืื ืื ืืื ืืืืฆืขืืช ืืืคืจืืืจืื ืฉื ืืืืืจื ืืืืืื ืืช:
- ื ื"
- ืื ืื";
- ืื ืื".
ืืคืืื, ืขื ืืื ืืชืืืช ืืืคืจืืืจืื ืืืืคืจื ืืื ืืกืืืื ืคืืื ื, ื ืืชื ืืืฆืืจ ืชื ืืื ืืืจืืืื ืืืื ืขื ืืกืคืจ ืจื ืฉื ืคืจืืืจืื.
ืืืืืง ืืืชื ืื ืื ืื, ืืืืืกืก ืขื ืืืืขืืช JSON ืืืืื ืืืฆืืจ ืืคืืจืื JSON, ืืฉืืฉ ืืืืืง ืฉืจืช ืืืืืืื ืฉื ืืืืฆืืจ ืืื ืืืืฆื ืืืข ืืืืฆืข ืืกืงื ืืืืืช ืืืืฆืขืืช ื ืชืื ืื ืชืืืฉืชืืื ืืืืืฉื ื ืืืช ืืื.
ืืืืฆืขืืช ืืคืืืงืฆืื ืกืืืืจืืช ืืืฆืจ ืืืฉืชืืฉ ืชืจืืืฉืื ืืคืืื ืืืืช ืืืื ืืืืจ ืืชืคืงื. ืืืืืื: "ืื ืืืืืฉื ืืคืชืืืช ืืืช ืืื ืืกื ืืืคืขื, ืืืืง ืืช ืืืืจ ืืืกืืจืื". ืืืคืืืงืฆืื ืงืืจืืช ืืช ืืืืืื ืฉื ืืืืฉื ืื (ืืืืฉื ืคืชืืื) ืืืคืขืืืื (ืฉืงืข ืืื ืื ืื ืืจื ืืืื) ืืืกื ืื ืชืื ืื ืืืืืฆืจืช ืืื ืืืื ืืคืืจืื JSON, ืื ืฉืื ืืืงืจ ืืืืช ืืืื. ืขื ืื ืื ืื ืื ื ืืื ืืืชืจ ืคืืจืื ืืืืืจ ืืฉืืืฉื ืืกืืจื ืฉืื ื, ืื ื ืืืจ ืขื ืืคืืืงืฆืืืช ืืืงืื ืื ืืืื ืืืช ืืื.
ืื ืื ืื ืืืืืืช ืืืืฆืืจ ืฉื ืืื ืืขืื ืืืืฉื ืืืืฆืขืืช ืืกืคืจืืื
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-Wave ืฉืื ืื. ืืืื ื ืกืชืื ืขื ืืื ืืืืืืืช:
- ืืฉืงืข ืืืื Zipato PAN16 ืืืื ืืืืื ืืช ืืคืจืืืจืื ืืืืื: ืฆืจืืืช ืืฉืื (kWh), ืืกืคืง (W), ืืชื (V) ืืืจื (A) ืืจืฉืช ืืืฉืื. ืืฉ ืื ืื ืืชื ืืืื ื ืฉืืขืืจืชื ื ืืชื ืืฉืืื ืืืืฉืืจ ืืืฉืืื ืืืืืืจ;
- ืืืืฉื ืืืืืคื ืฉื Neo Coolcam ืืืื ื ืืืืืช ืฉื ื ืืื ืฉื ืฉืคื ืขื ืืื ืกืืืจืช ืืืืขืื ืฉื ืืืฉืฉ ืืืจืืืง;
- ืืืืฉื ืืขืฉื Zipato PH-PSG01 ืืืคืขื ืืืฉืจ ืืืงืืงื ืขืฉื ื ืื ืกืื ืืชื ืื ืชื ืืื;
- ืืืืฉื ืืชื ืืขื Neo Coolcam ืื ืชื ืืช ืงืจืื ืช ืืืื ืคืจื ืืืื ืฉื ืืืฃ ืืืื. ืื ืืกืฃ ืืฉ ืืืืฉื ืืืจ (Lx);
- Multisensor Philio PST02-A ืืืื ืืืคืจืืืจื (ยฐC), ืืืจ (%), ืคืชืืืช ืืืช, ื ืืืืืช ืฉื ืืื ืืืืจ;
- Z-Wave USB Stick ZME E UZB1 ืืงืจ ืจืฉืช ืฉืืืื ืืืืืจืื ืืืืฉื ืื.
ืืฉืื ืืืื ืฉืืืืฉืืจืื ืืืืงืจ ืืคืขืื ืืืืชื ืชืืจ, ืืืจืช ืื ืคืฉืื ืื ืืจืื ืืื ืืช ืืฉื ื ืืจืืข ืืืืืืจ. ื ืืชื ืืืืจ ืขื 232 ืืืฉืืจืื ืืืงืจ ืจืฉืช Z-Wave ืืื, ืืื ืื ืืกืคืืง ืขืืืจ ืืืจื ืื ืืืช ืืคืจื. ืืื ืืืจืืื ืืช ืฉืื ืืืกืื ืืจืฉืช ืืชืื ืืืืช, ื ืืชื ืืืฉืชืืฉ ืืฉืงืข ืืื ืืืืืจ ืืืชืืช.
ืืชืืืื ืฉืจืช ืืงืจ ืืืืช ืืืื ืฉื ืืื ืืคืกืงื ืืงืืืืช, ืฉืจืช Z-Wave ืืืจืื ืขื ืืื ืืจืืงืฆืื ืขื ืืชืงื ื Z-Wave. ืืื ืืฉืชืืฉ ืืกืคืจืืื ืืื ืืงืื ืืืืข ืืืืืฉื ืื
{
"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. ืืืืจ ืืื ืื ื ืื ืกืื ืืืคืขืื, ืฉืืฉื ื ืืช ืืฆืื ืฉื ืืคืฆืื ืกืืืืชืืื, ืืืืืช ืืืื ืืืฆืข ืื ืขืืืื ืฉืืืืฉืืช.
(ืืืฅ ืขื ืืชืืื ื ืืื ืืคืชืื ืืจืืืืืฆืื ืืืืื ืืืชืจ)
ืืืืืจ ืืืฉืืจื Z-Wave ื ืขืฉื ืืืืฉืง ืืืจืคื ืฉื ืืงืจ ืืืืช ืืืื. ืืื ืืขืฉืืช ืืืช, ืขืืืจ ืืืฃ ืขื ืจืฉืืืช ืืืฉืืจืื ืืืืฅ ืขื ืืคืชืืจ "ืืืกืฃ". ืคืงืืืช ื-add ืืจื ืืืฉืง RESTful API ื ืื ืกืช ืืชืืืื ืืฉืจืช ืืืืืจ ืืื ื ืฉืืืช ืขื ืืื ืื ืื ืืืืืขืืช ืืฉืจืช Z-Wave, ืื ืฉืืื ืืก ืืช ืืงืจ ื-USB ืืจืฉืช Z-Wave ืืืฆื ืืืืื ืืืืกืคืช ืืชืงื ืื. ืืืืจ ืืื, ืืืืฉืืจ ื-Z-Wave ืขืืื ืืืฆืข ืกืืจื ืฉื ืืืืฆืืช ืืืืจืืช (3 ืืืืฆืืช ืชืื 1,5 ืฉื ืืืช) ืขื ืืคืชืืจ ืืฉืืจืืช. ืืงืจ ื-USB ืืืืจ ืืช ืืืืฉืืจ ืืจืฉืช ืืฉืืื ืืืืข ืืืืืชืื ืืฉืจืช Z-Wave. ืื, ืืชืืจื, ืืืฆืจ ืขืจื ืืืฉ ืืืกื ืื ืชืื ืื ืฉื SQLite ืขื ืืคืจืืืจืื ืฉื ืืืืฉืืจ ืืืืฉ. ืืืืจ ืืจืืื ืืื ืืืืืจ, ืืืืฉืง ืืืจืคื ืืืืจ ืืืฃ ืจืฉืืืช ืืชืงื ื Z-Wave, ืงืืจื ืืืืข ืืืกื ืื ืชืื ืื ืืืฆืื ืืช ืืืืฉืืจ ืืืืฉ ืืจืฉืืื. ืื ืืืฉืืจ ืืงืื ืืืื ืืืืืื ืืฉืื, ืืืฉืืฉ ืืืืงื ืืกืงื ืืช ืืืฆืืจ ืืืขืืืื ืืขื ื. ืืคืขืืื ืฉื ืืืืืจืืชื ืื ืืืฆืืช ืืชืจืฉืื UML:
(ืืืฅ ืขื ืืชืืื ื ืืื ืืคืชืื ืืจืืืืืฆืื ืืืืื ืืืชืจ)
ืืืืืจ ืืฆืืืืช IP
ืืขืจืืช ืืืืช ืืืื ืืขื ื ืื ืืื ื ืืืืืจ ืื ืืื ืฉืืจืื ืฉื ืืขืจืืช ืืขืงื ืืืืืืื ืืขื ื, ืฉืคืืชืื ืื ืืื ืขื ืืื ืืืืืจ, ืืงืืืืช ืืฉืืง ืืืจ ืืกืคืจ ืฉื ืื ืืืขืืช ืืชืงื ืืช ืจืืืช ืืจืืกืื.
ืขืืืจ ืืขืจืืืช ืืขืงื ืืืืื ืืขื ื, ืืืช ืืืขืืืช ืืืงืืืืืช ืืื ืืืืืจ ืืืฆืืืฆื ืฉื ืฆืืื ืฉืืืชื ื ืืชื ืืืฆืข ืืื ืืืจืฆืื. ืืชืืื ื ืืืืจืืืช ืืืืืืจ ืืขื ื ืืืชืงื ืช ืืชืื ืืฆืืืช ืืืืืืื, ืื ืฉืืฆืื ืืื ืืจืืฉืืช ืจืฆืื ืืืช ืืืืืจื ืฉืื โ ืืืขืื ืืืืืช ืืืืืจืื ืืคื ืื. ืื ืืขืืงืจ ืืกืืืจ ืืช ืืืืืจ ืืืืื ืืืชืจ ืฉื ืืฆืืืืช ืืืืืืืื ืืืขืื ืกืืืจ ืืขื ื ืืืฉืืืื ืืืฆืืืืช IP ืจืืืืืช. ืื ืืกืฃ, ื ืืจืฉ ืฉืื ืืืืฉื ืฉื ืืฉื ืืืชื ืขื ืืืจืืช ืืืืฆืืจ ืืฆืืืืช ืืืขืื ืกืืืจ ืืื ืืงืื ืืืฉื ืืืขืจืืช ืงืืฆื ืืืฆืืืืช ืืืื ืืื ืืคืืชืื ืื ืืจืฉืื.
ืืฆื ืฉื ื, ืืื ืืฆืืืืช ื-IP ืืืืืจื ืืืช ืืฉ ืคืจืืืืงืืืื ืกืื ืืจืืืื ืืืื ืืจืืงืฆืื ืขื ืฆืืื ืืืจ (ืืืืืื ืืืฉืืจื ืืืืื). ืื, ืืฉืืืืฉ ืืืงืจ ื ืคืจื ืืืชืืืจ ืืืืฆืขืืช ืคืจืืืืงืื ืกืื ืืจืื ืืืฉืืจ ืืจืื ืืืืื ืืืฆืืืืช IP ืืขื ื ืืกืคืง ืืชืจืื ืืช ืชืืจืืชืืื ืืฉืืขืืชืืื ืืืขืจืืืช ืืขืงื ืืืืื ืืขื ื. ืืชืจื ืืื, ืื ืืืงืื ืืืจ ืืชืงืื ืืขืจืืช ืืขืงื ืืืืื ืืืืืกืกืช ืขื ืืฆืืืืช IP ืคืฉืืืืช, ืื ื ืืชื ืืืจืืื ืืืชื ืืืืคืื ืืืชื ืืืืช ืืื ืืขื ื ืื ืืื ืืื.
ืืคืจืืืืงืื ืืคืืคืืืจื ืืืืชืจ ืขืืืจ ืืขืจืืืช ืืขืงื ืืืืื IP, ืื ืชืื ืืขืช ืขื ืืื ืื ืืฆืจื ื ืืฆืืืืช ื-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. ืืฉ ืคืจืืืืงืื
ืืืืฉืง ืืืจืคื ืฉื ืืงืจ ืืืืช ืืืื ืืืืฉื ืคืื ืงืฆืืืช ืืืคืืฉ ืขืืืจ ืืฆืืืืช IP ื-PHP, ืื ืืื ืืืื ืืขืช ืืื ืืจืืงืฆืื ืขื ืฉืืจืืชื ืืื ืืจื ื ืืืืฆืขืืช ืืืืขืืช XML. ืืขืช ืืืืจืช ืคืจืืื ืชืคืจืื ืืชืงื ืื > ืืฆืืืืช IP > ืกืจืืงื ืืืืืืจืืชื ืืืืคืืฉ ืืฆืืืืช IP ืืืคืขื, ืืืฆืื ืืช ืืชืืฆืื ืืฆืืจื ืฉื ืืืื:
(ืืืฅ ืขื ืืชืืื ื ืืื ืืคืชืื ืืจืืืืืฆืื ืืืืื ืืืชืจ)
ืืืฉืจ ืืชื ืืืกืืฃ ืืฆืืื ืืืงืจ, ืืชื ืืืื ืืฆืืื ืืช ืืืืืจืืช ืืคืืื ืืื ืชืืฆืืจ ืืื ืืจืืงืฆืื ืขื ืืขื ื. ืื ืืฉืื ืื ืืืงืฆื ืื ืืืืืืืืช ืืืื ืืืฉืืจ ืืืืืื, ืฉืืืืฆืขืืชื ื ืืชื ืืืืืจ ืืืชืจ ืืืืืช ืืืชื ืืงืืืช ืืชืื ืืขื ื.
ืืืืจ ืืื, ื ืืฆืจืช ืืืืขื ืืคืืจืื JSON ืืืืืื ืืช ืื ืืคืจืืืจืื ืฉื ืืืฆืืื ืฉื ืืกืคื ืื ืฉืืืช ืืชืืืื ืืฉืจืช ืฉื ืืงืจ ืืืืช ืืืื ืืืืฆืขืืช ืคืงืืืช RESTful API, ืืืฉืจ ืคืจืืืจื ืืืฆืืื ืืคืืขื ืืื ืื ืฉืืจืื ืืืกื ืื ืชืื ืื ืืคื ืืื ืฉื SQLite, ืืื ืืฉืืฉ ืื ืืืคืขืืช ืฉืจืฉืืจื ืืขืืืื ืืืืื:
- ืืฆืืจืช ืืืืืจ RTSP ืืงืืืช ืืจืื ืืืืื ืืืืืื;
- ืืืจืช ืืืืื ืืคืืจืืืื G.711 mu-Law, G.711 A-Law, G.723 ืืื'. ืืคืืจืื AAC;
- ืืืจืช ืืจืื ืืืืื ืืคืืจืื H.264 ืืืืืื ืืคืืจืื AAC ืืชืื ืืืื FLV ืืืขืืจืชื ืืขื ื ืืืืฆืขืืช ืคืจืืืืงืื RTMP;
- ืืฆืืจืช ืืืืืจ ืขื ื ืงืืืช ืืงืฆื ืฉื ืืืื ืืชื ืืขื ืฉื ืืฆืืืช ื-IP ืืืืฆืขืืช ืคืจืืืืงืื ONVIF ืืชืฉืืื ืืืชื ืืขืช ืืขืช;
- ืืฆืืจืช ืืขืช ืืขืช ืชืืื ืช ืชืฆืืื ืืงืืืื ืฉื ืชืืื ื ืืืืืขืจืช ืืฉืืืืชื ืืขื ื ืืืืฆืขืืช ืคืจืืืืงืื MQTT;
- ืืงืืื ืืงืืืืช ืฉื ืืจืื ืืืืื ืืืืืื ืืฆืืจื ืฉื ืงืืฆืื ื ืคืจืืื ืืคืืจืื MP4 ืขื ืืื ืืจืืืก SD ืื Flash ืฉื ืืงืจ ืืืืช ืืืื.
ืืื ืืืฆืืจ ืืืืืจ ืขื ืืฆืืืืช, ืืืืืจ, ืืขืื ืืืืงืืื ืืจืื ืืืืื ืืชืืืื ืืฉืจืช, ื ืขืฉื ืฉืืืืฉ ืืคืื ืงืฆืืืช ืืืกืคืจืืื
ืื ืืกืื ืืืืงืช ืืืืฆืืขืื, 3 ืืฆืืืืช ืืืืจื ืืืงืจ:
- HiWatch DS-I114W (ืจืืืืืฆืื - 720p, ืคืืจืื ืืืืกื - H.264, ืงืฆื ืกืืืืืช - 1 Mb/s, ืฆืืื G.711 mu-Law);
- Microdigital MDC-M6290FTD-1 (ืจืืืืืฆืื - 1080p, ืคืืจืื ืืืืกื - H.264, ืงืฆื ืกืืืืืช - 1 Mb/s, ืืื ืฆืืื);
- Dahua DH-IPC-HDW4231EMP-AS-0360B (ืจืืืืืฆืื - 1080p, ืคืืจืื ืืืืกื - H.264, ืงืฆื ืกืืืืืช - 1.5 Mb/s, ืืืืื AAC).
ืื ืฉืืืฉืช ืืืจืืื ืืืคืงื ืื ืืื ืืช ืืขื ื, ืืืจืช ืงืืืื ืืืืื ืืืฆืข ืืืฆืืื ืืืช ืืืื, ืืืงืืืช ืืจืืืื ืืงืืื ืืืฉืืชื. ืขืืืก ืืืขืื ืืื ื-5%, ืฉืืืืฉ ื-RAM ืืื 32 ืืื-ืืืื (ืืชืืืื), 56 ืืื-ืืืื (ืกื"ื ืืืื ืืขืจืืช ืืคืขืื).
ืื, ื ืืชื ืืืืจ ื-20 - 30 ืืฆืืืืช ืืืงืจ ืืืืช ืืืื (ืืืชืื ืืจืืืืืฆืื ืืงืฆื ืกืืืืืช), ืฉืืกืคืืง ืืืขืจืืช ืืขืงื ืืืืื ืืงืืื' ืื ืฉืืืฉ ืงืืืืช ืื ืืืืกื ืงืื. ืขืืืจ ืืฉืืืืช ืืืืจืฉืืช ืืืฆืืขืื ืืืืื ืืืชืจ, ืืชื ืืืื ืืืฉืชืืฉ ื-nettop ืขื ืืขืื ืืื ืื ืืจืืื ืืืืืช ืืืขืจืืช ืืืคืขืื Linux Debian Sarge. ืืืงืจ ื ืืฆื ืืขืช ืืืคืขืืช ื ืืกืืื, ืื ืชืื ื ืืืืฆืืขืื ืฉืื ืืขืืืื ื.
ืืื ืืจืืงืฆืื ืขื ืืขื ื
ืืืช ืืื ืืืืกืก ืขื ื ืืืืกื ืืช ื ืชืื ื ืืืฉืชืืฉ (ืืืืืืช ืืืืื ืืืืืฉื ืื) ืืขื ื. ืืืจืืืืงืืืจื ืฉื ืืืกืื ืขื ื ืชืืืื ืืืชืจ ืคืืจืื ืืืืืจ ืืื ืืกืืจื ืฉืื ื. ืืขืช ื ืืืจ ืขื ืืืืฉืง ืืืขืืจืช ืืืืขืืช ืืืืข ืืืงืจ ืืืืช ืืืื ืืขื ื.
ืืืฆืืื ืฉื ืืืืฉืืจืื ืืืืืืจืื ืืืืืืืช ืืืืืฉื ืื ืืืขืืจืื ืืืืฆืขืืช ืืคืจืืืืงืื
- QoS 0 - ืืงืกืืืื ืคืขื ืืืช (ืืื ืืืืืช ืืฉืืื);
- QoS 1 - ืืคืืืช ืคืขื ืืืช (ืขื ืืืฉืืจ ืืกืืจื);
- QoS 2 - ืคืขื ืืืช ืืืืืง (ืขื ืืืฉืืจ ืืฉืืื ื ืืกืฃ).
ืืืงืจื ืฉืื ื, ืื ืื ื ืืฉืชืืฉืื
ืืืขืืจืช ืืืืขืืช ืขื ืืฆื ืืงืจ ืืืืช ืืืื, ื ืขืฉื ืฉืืืืฉ ืืื ืื ืื ืฉื ืืืืขืืช ืฉืืืจืืช
ืืงืื MQTT ืคืืชื ืขื ืืกืืก ืืืฉืื ืืกืคืจืืื
ืืจืื ืืืื ืฉื H.264 + AAC ื ืฉืืืื ืืขื ื ืืืืฆืขืืช ืคืจืืืืงืื RTMP, ืืืฉืจ ืืฉืืื ืฉืจืชื ืืืื ืืืจืื ืขื ืขืืืืื ืืืืกืืื. ืืื ืืคืืจ ืืฆืืจื ืืืืืืช ืืช ืืขืืืก ืืืฉืืื ืืืืืืจ ืืช ืฉืจืช ืืืืื ืืื ืคืืืช ืืขืื, ืืงืจ ืืืืช ืืืื ืืืฆืข ืืงืฉื ืืงืืืื ืืืืื ืืขืืืก ืืขื ื ืืจืง ืืืืจ ืืื ืฉืืื ืืช ืืจื ืืืืื.
ืืกืงื ื
ืืืืืจ ืืื ืืืฉืื ืกืคืฆืืคื ืืื ืฉื ืืงืจ ืืืช ืืื ืืืืืกืก ืขื ืืืืงืจื-ืืืฉื Raspberry Pi 3 B+, โโืฉืืืื ืืงืื, ืืขืื ืืืืข ืืืฉืืื ืืฆืืื ืืืืฆืขืืช ืคืจืืืืงืื Z-Wave, ืืืฆืืจ ืืื ืืจืืงืฆืื ืขื ืืฆืืืืช IP ืืืืฆืขืืช ืคืจืืืืงืื ONVIF, ืืื ืืืืืืฃ ื ืชืื ืื ื ืคืงืืืืช ืขื ืฉืืจืืช ืืขื ื ืืืืฆืขืืช ืคืจืืืืงืืื MQTT ื-RTMP. ืื ืืข ืืืืืงืช ืืืฆืืจ ืคืืชื ืขื ืืกืืก ืืฉืืืื ืฉื ืืืืื ืืืืืื ืืขืืืืืช ืืืืฆืืืช ืืคืืจืื JSON.
ืืงืจ ืืืืช ืืืื ืขืืืจ ืืขืช ืชืคืขืื ื ืืกืืื ืืืกืคืจ ืืชืจืื ืืืืกืงืื ืืืืืืจ ืืืกืงืื.
ืืืจืกื ืืืื ืฉื ืืืงืจ ืืชืื ื ืช ืืืืจ ืกืืืื ืืืจืื ืฉื ืืืฉืืจืื (RF, Bluetooth, WiFi, ืืืื). ืื ืืืืช ืืืฉืชืืฉืื, ืืืื ืืืืืจ ืืืืฉื ืื ืืืฆืืืืช IP ืืืขืืจ ืืืคืืืงืฆืืืช ืื ืืื. ืืฉ ืื ืจืขืืื ืืช ืืืืคืืืืืืฆืื ืฉื ืงืื ืชืืืื ืืฉืจืช ืืืขืืจืช ืืชืืื ื ืืืขืจืืช ืืืคืขืื
ืืงืืจ: www.habr.com