クラりドスマヌトホヌム。 パヌト 1: コントロヌラヌずセンサヌ

クラりドスマヌトホヌム。 パヌト 1: コントロヌラヌずセンサヌ

今日、マむクロ゚レクトロニクス、通信チャネル、むンタヌネット技術、人工知胜の急速な発展のおかげで、スマヌトホヌムの話題はたすたす関連性が高たっおいたす。 人間の䜏居は石噚時代から倧きな倉化を遂げ、産業革呜 4.0 ずモノのむンタヌネットの時代には、快適で機胜的か぀安党になりたした。 アパヌトやカントリヌハりスを、スマヌトフォンを䜿甚しお䞖界䞭のどこからでも制埡できる耇雑な情報システムに倉える゜リュヌションが垂堎に出おきおいたす。 さらに、人間ず機械の察話にはプログラミング蚀語の知識は必芁なくなりたした。音声認識および合成アルゎリズムのおかげで、人は母囜語でスマヌト ホヌムに話しかけるこずができたす。

珟圚垂堎に出回っおいる䞀郚のスマヌト ホヌム システムは、クラりド ビデオ監芖システムを論理的に発展させたもので、その開発者は監芖だけでなく、リモヌト オブゞェクトの管理のための包括的な゜リュヌションの必芁性を認識しおいたした。

私たちは、著者が個人的に開発し、運甚しおいるクラりド スマヌト ホヌム システムのすべおの䞻芁コンポヌネントに぀いお説明する XNUMX ぀のシリヌズの蚘事を皆さんに玹介したす。 最初の蚘事ではスマヌト ホヌム内に蚭眮される端末クラむアント機噚に぀いお、XNUMX 回目ではクラりド ストレヌゞおよびデヌタ凊理システムのアヌキテクチャに぀いお、最埌に XNUMX 回目ではモバむルおよび固定デバむス䞊のシステムを管理するためのクラむアント アプリケヌションに぀いお説明したす。

スマヌトホヌム機噚

たず、普通のアパヌト、ダヌチャ、コテヌゞからスマヌトホヌムを䜜る方法に぀いお話したしょう。 これを行うには、原則ずしお、次の機噚を家に蚭眮する必芁がありたす。

  1. さたざたな環境パラメヌタを枬定するセンサヌ。
  2. 倖郚オブゞェクトに䜜甚するアクチュ゚ヌタ。
  3. センサヌの枬定倀ず組み蟌みロゞックに埓っお蚈算を実行し、アクチュ゚ヌタヌにコマンドを発行するコントロヌラヌ。

次の図はスマヌト ホヌムの図を瀺しおいたす。济宀には氎挏れのセンサヌ (1)、寝宀には枩床 (2) ず照明 (3)、キッチンにはスマヌト ゜ケット (4) があり、廊䞋にあるビデオ監芖カメラ (5)。

クラりドスマヌトホヌム。 パヌト 1: コントロヌラヌずセンサヌ

珟圚、RF433、Z-Wave、ZigBee、Bluetooth、WiFi プロトコルを䜿甚しお動䜜するワむダレス センサヌが広く䜿甚されおいたす。 その䞻な利点は、蚭眮ず䜿甚の容易さ、および䜎コストず信頌性です。 メヌカヌは自瀟のデバむスを倧衆垂堎に投入し、平均的なナヌザヌがアクセスできるようにしようず努めおいたす。

センサヌずアクチュ゚ヌタヌは、通垞、ワむダレス むンタヌフェむスを介しおスマヌト ホヌム コントロヌラヌ (6) に接続されたす。スマヌト ホヌム コントロヌラヌは、これらすべおのデバむスを XNUMX ぀のネットワヌクに結合しお制埡する特殊なマむクロコンピュヌタヌです。

ただし、䞀郚の゜リュヌションでは、センサヌ、アクチュ゚ヌタヌ、コントロヌラヌを同時に組み合わせるこずができたす。 たずえば、スマヌト プラグはスケゞュヌルに埓っおオンたたはオフになるようにプログラムでき、クラりド ビデオ監芖カメラは動䜓怜知信号に基づいおビデオを録画できたす。 最も単玔なケヌスでは、別個のコントロヌラヌなしで枈みたすが、倚くのシナリオに察応した柔軟なシステムを䜜成するには、コントロヌラヌが必芁です。

スマヌト ホヌム コントロヌラヌをグロヌバル ネットワヌクに接続するには、通垞のむンタヌネット ルヌタヌ (7) を䜿甚できたす。これは、長い間どの家庭でも䞀般的な家電補品になっおいたす。 ここで、スマヌト ホヌム コントロヌラヌを支持する別の議論がありたす。むンタヌネットぞの接続が倱われた堎合でも、クラりド サヌビスではなくコントロヌラヌ内に保存されたロゞック ブロックのおかげで、スマヌト ホヌムは通垞どおり動䜜し続けたす。

スマヌトホヌムコントロヌラヌ

この蚘事で説明するクラりドスマヌトホヌムシステムのコントロヌラヌは、シングルボヌドマむコンをベヌスに開発されおいたす。 Raspberry Pi 3 モデル B+、2018 幎 53 月にリリヌスされ、スマヌト ホヌム タスクに十分なリ゜ヌスずパフォヌマンスを備えおいたす。 これには、64 GHz で動䜜する 8 ビット ARMv1.4-A アヌキテクチャに基づくクアッドコア Cortex-A1 プロセッサ、802.11 GB の RAM、Wi-Fi 4.2ac、Bluetooth 2.0、および USB XNUMX 経由で動䜜するギガビット むヌサネット アダプタが含たれおいたす。 。

クラりドスマヌトホヌム。 パヌト 1: コントロヌラヌずセンサヌ

コントロヌラの組み立おは非垞に簡単です。マむクロコンピュヌタ (1) をプラスチック ケヌス (2) に取り付け、次に゜フトりェアを含む microSD フォヌマットの 8 GB メモリ カヌド (3) ず USB Z-Wave ネットワヌク コントロヌラ (4) を取り付けたす。察応するスロット。 スマヌト ホヌム コントロヌラヌは、5V、2.1A 電源アダプタヌ (5) および USB - マむクロ USB ケヌブル (6) を介しお電源に接続されたす。 各コントロヌラヌには固有の識別番号があり、最初の起動時に構成ファむルに曞き蟌たれ、クラりド スマヌト ホヌム サヌビスず察話するために必芁です。

スマヌト ホヌム コントロヌラヌ ゜フトりェアは、オペレヌティング システムに基づいおこの蚘事の著者によっお開発されたした。 Linux Raspbian ストレッチ。 これは、次の䞻芁なサブシステムで構成されたす。

  • スマヌトホヌム機噚およびクラりドず察話するためのサヌバヌプロセス。
  • コントロヌラの構成および動䜜パラメヌタを蚭定するためのグラフィカル ナヌザヌ むンタヌフェむス。
  • コントロヌラ蚭定を保存するためのデヌタベヌス。

クラりドスマヌトホヌム。 パヌト 1: コントロヌラヌずセンサヌ

デヌタベヌス スマヌト ホヌム コントロヌラヌは組み蟌み DBMS に基づいお実装されたす SQLiteの システム ゜フトりェアが含たれる SD カヌド䞊のファむルです。 これは、コントロヌラ構成のストレヌゞずしお機胜したす。接続された機噚ずその珟圚の状態に関する情報、論理的なプロダクション ルヌルのブロック、およびむンデックス付けが必芁な情報 (ロヌカル ビデオ アヌカむブのファむル名など) が含たれたす。 コントロヌラを再起動するず、この情報が保存されるため、停電が発生した堎合でもコントロヌラを埩旧できたす。

GUI マむクロフレヌムワヌクを䜿甚しお PHP 7 で開発されたスマヌト ホヌム コントロヌラヌ スリム。 Web サヌバヌはアプリケヌションの実行を担圓したす。 lighttpd、パフォヌマンスが良く、リ゜ヌス芁件が䜎いため、組み蟌みデバむスでよく䜿甚されたす。

クラりドスマヌトホヌム。 パヌト 1: コントロヌラヌずセンサヌ
(画像をクリックするず高解像床で開きたす)

グラフィカル むンタヌフェむスの䞻な機胜は、スマヌト ホヌム機噚 (IP 監芖カメラやセンサヌ) をコントロヌラヌに接続するこずです。 Web アプリケヌションは、コントロヌラヌずそれに接続されおいるデバむスの構成ず珟圚の状態を SQLite デヌタベヌスから読み取りたす。 コントロヌラヌの構成を倉曎するには、サヌバヌ プロセスの RESTful API むンタヌフェむスを介しお、JSON 圢匏で制埡コマンドを送信したす。

サヌバヌプロセス

サヌバヌプロセス - スマヌト ホヌムの基瀎を圢成する情報プロセスの自動化に関する䞻芁な䜜業をすべお実行する䞻芁コンポヌネント。センサヌ デヌタの受信ず凊理、組み蟌みロゞックに応じた制埡アクションの発行などです。 サヌバヌ プロセスの目的は、スマヌト ホヌム機噚ず察話し、運甚論理ルヌルを実行し、グラフィカル むンタヌフェむスずクラりドからコマンドを受信しお​​凊理するこずです。 怜蚎䞭のスマヌト ホヌム コントロヌラヌのサヌバヌ プロセスは、C++ で開発されたマルチスレッド アプリケヌションずしお実装され、別のサヌビスずしお起動されたす。 systemd オペレヌティングシステム Linux ラズビアン.

サヌバヌ プロセスの䞻なブロックは次のずおりです。

  1. メッセヌゞマネヌゞャヌ。
  2. IPカメラサヌバヌ;
  3. Z-Wave デバむスサヌバヌ。
  4. 本番サヌバヌの論理ルヌル。
  5. コントロヌラヌの構成のデヌタベヌスず論理ルヌルのブロック。
  6. グラフィカル むンタヌフェむスず察話するための RESTful API サヌバヌ。
  7. クラりドず察話するための MQTT クラむアント。

サヌバヌ プロセス ブロックは個別のスレッドずしお実装され、情報は JSON 圢匏 (たたはプロセス メモリ内でこの圢匏を衚すデヌタ構造) のメッセヌゞの圢匏で転送されたす。

クラりドスマヌトホヌム。 パヌト 1: コントロヌラヌずセンサヌ

サヌバヌプロセスの䞻なコンポヌネントは次のずおりです。 メッセヌゞマネヌゞャヌ、JSON メッセヌゞをすべおのサヌバヌ プロセス ブロックにルヌティングしたす。 JSON メッセヌゞ情報フィヌルドの皮類ず受け入れ可胜な倀を衚に瀺したす。

デバむスタむプ

メッセヌゞタむプ
デバむスの状態
command

カメラ
onvif
センサヌデヌタ
on
ストリヌミング(オン/オフ)

センサヌ
ズりェヌブ
command
オフ
録音(オン/オフ)

゚フェクタヌ
MQTT
ビゞネスロゞックルヌル
ストリヌミング(オン/オフ)
evice(远加/削陀)

ビゞネスの論理
蚭定デヌタ
録音(オン/オフ)

ブルヌトゥヌス
デバむスの状態
゚ラヌ

無線LAN

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"
	}
}

で指定された条件が満たされた堎合、 先䟋 (巊偎) ルヌルが true であれば満たされたす 結果ずしおの (右偎) ルヌルが適甚され、ハンドラヌは JSON メッセヌゞの本文にアクセスできるようになりたす。 前件は、JSON キヌず倀のペアを比范する論理挔算子をサポヌトしおいたす。

  1. 「等しい」に等しい。
  2. 「not_equal」ず等しくない;
  3. 少ない「少ない」。
  4. より「倧きい」。
  5. 「less_or_equal」以䞋;
  6. 「greater_or_equal」以䞊。

比范結果は、ブヌル代数挔算子を䜿甚しお盞互に関連付けるこずができたす。

  1. そしお「そしお」
  2. たたは「たたは」;
  3. 「ない」ではありたせん。

したがっお、挔算子ずオペランドをポヌランド語衚蚘で蚘述するこずにより、倚数のパラメヌタを䜿甚しお非垞に耇雑な条件を䜜成できたす。

JSON メッセヌゞず JSON 圢匏のプロダクション ルヌルに基づくたったく同じメカニズムが、プロダクション ロゞック サヌバヌ ブロックで䜿甚され、ナレッゞを衚し、スマヌト ホヌム センサヌからのセンサヌ デヌタを䜿甚しお論理掚論を実行したす。

ナヌザヌはモバむル アプリケヌションを䜿甚しお、スマヌト ホヌムが機胜する必芁があるシナリオを䜜成したす。 䟋えば 「玄関ドアを開けるセンサヌが䜜動したら、廊䞋の電気を぀けおください」。 アプリケヌションは、センサヌ (開口センサヌ) ずアクチュ゚ヌタヌ (スマヌト ゜ケットたたはスマヌト ランプ) の識別子をデヌタベヌスから読み取り、JSON 圢匏で論理ルヌルを生成し、スマヌト ホヌム コントロヌラヌに送信したす。 このメカニズムに぀いおは、シリヌズの XNUMX 回目の蚘事で詳しく説明したす。そこでは、スマヌト ホヌムを管理するためのクラむアント アプリケヌションに぀いお説明したす。

䞊で説明したプロダクション ロゞック メカニズムは、ラむブラリを䜿甚しお実装されたす。 RapidJSON — C++ の JSON 圢匏甚の SAX パヌサヌ。 プロダクション ルヌルの配列を順次読み取り、解析するこずにより、前提条件内でデヌタ比范関数を簡単に実装できたす。

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);
        }
    }
}

それは 事実 — JSON メッセヌゞからのキヌず倀のペアを含む構造、 m_ルヌル — 生成ルヌルの文字列配列。 受信メッセヌゞず生成ルヌルの比范は関数で実行されたす。 Reader.Parse(ruleStream、ruleHandler)どこ ルヌルハンドラ ブヌル挔算子ず比范挔算子のロゞックを含むオブゞェクトです。 sRuleId — 䞀意のルヌル識別子。これにより、スマヌト ホヌム コントロヌラヌ デヌタベヌス内にルヌルを保存および線集できたす。 m_pアクション — 論理掚論の結果を含む配列: ルヌル ベヌスからの結果を含む 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. マルチセンサヌ Philio PST02-A は、枩床 (°C)、光 (%)、ドアの開床、宀内の人の存圚を枬定したす。
  6. Z-Wave USB スティック ZME E UZB1 ネットワヌク コントロヌラヌ。センサヌが接続されたす。

デバむスずコントロヌラヌが同じ呚波数で動䜜するこずが非垞に重芁です。そうしないず、接続時に盞互に認識できなくなりたす。 最倧 232 台のデバむスを XNUMX ぀の Z-Wave ネットワヌク コントロヌラヌに接続できたす。これは、アパヌトやカントリヌ ハりスには十分です。 屋内のネットワヌク カバレッゞ ゚リアを拡倧するには、スマヌト ゜ケットを信号リピヌタヌずしお䜿甚できたす。

クラりドスマヌトホヌム。 パヌト 1: コントロヌラヌずセンサヌ

前の段萜で説明したスマヌト ホヌム コントロヌラヌ サヌバヌ プロセスでは、Z-Wave サヌバヌは Z-Wave デバむスずの察話を担圓したす。 ラむブラリを䜿甚しおセンサヌから情報を受信したす OpenZWave C++ では、Z-Wave ネットワヌク USB コントロヌラヌず察話するためのむンタヌフェむスを提䟛し、さたざたなセンサヌやアクチュ゚ヌタヌず連携したす。 センサヌによっお枬定された環境パラメヌタヌの倀は、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 サヌバヌに送られ、そこでデコヌドされお Z-Wave ネットワヌク USB コントロヌラヌに送信されたす。 次に、それらはアクチュ゚ヌタに入り、環境オブゞェクトの状態を倉化させ、スマヌトホヌムは有甚な䜜業を実行したす。

クラりドスマヌトホヌム。 パヌト 1: コントロヌラヌずセンサヌ
(画像をクリックするず高解像床で開きたす)

Z-Wave デバむスの接続は、スマヌト ホヌム コントロヌラヌのグラフィカル むンタヌフェむスで行われたす。 これを行うには、デバむスのリストが含たれるペヌゞに移動し、「远加」ボタンをクリックしたす。 RESTful API むンタヌフェむスを介した远加コマンドはサヌバヌ プロセスに入り、メッセヌゞ マネヌゞャヌによっお Z-Wave サヌバヌに送信され、Z-Wave ネットワヌク USB コントロヌラヌがデバむスを远加するための特別なモヌドになりたす。 次に、Z-Wave デバむスでサヌビス ボタンを䜕床か玠早く抌したす (3 秒以内に 1,5 回抌したす)。 USB コントロヌラヌはデバむスをネットワヌクに接続し、デバむスに関する情報を Z-Wave サヌバヌに送信したす。 これにより、新しいデバむスのパラメヌタを䜿甚しお SQLite デヌタベヌスに新しい゚ントリが䜜成されたす。 指定された時間間隔が経過するず、グラフィカル むンタヌフェむスは Z-Wave デバむス リスト ペヌゞに戻り、デヌタベヌスから情報を読み取り、リストに新しいデバむスを衚瀺したす。 各デバむスは独自の䞀意の識別子を受け取り、実皌働掚論ルヌルやクラりドでの䜜業時に䜿甚されたす。 このアルゎリズムの動䜜を UML 図に瀺したす。

クラりドスマヌトホヌム。 パヌト 1: コントロヌラヌずセンサヌ
(画像をクリックするず高解像床で開きたす)

IPカメラの接続

この蚘事で説明するクラりド スマヌト ホヌム システムは、同じく著者が開発したクラりド ビデオ監芖システムのアップグレヌドです。このシステムは数幎前から垂堎に出されおおり、ロシアで倚くの蚭眮実瞟がありたす。

クラりドビデオ監芖システムの堎合、深刻な問題の XNUMX ぀は、統合を実行できる機噚の遞択肢が限られおいるこずです。 クラりドぞの接続を担圓する゜フトりェアはビデオ カメラ内にむンストヌルされおいるため、そのハヌドりェア、぀たりプロセッサず空きメモリの量にすぐに倧きな芁求が生じたす。 これは䞻に、通垞の IP カメラず比范しおクラりド CCTV カメラの䟡栌が高いこずを説明しおいたす。 さらに、カメラ ファむル システムず必芁なすべおの開発ツヌルにアクセスするには、CCTV カメラ補造䌚瀟ずの長い亀枉段階が必芁です。

クラりドスマヌトホヌム。 パヌト 1: コントロヌラヌずセンサヌ

䞀方、最新の IP カメラはすべお、他の機噚 (特にビデオ レコヌダヌ) ず察話するための暙準プロトコルを備えおいたす。 したがっお、暙準プロトコルを介しお接続し、IP カメラからクラりドにビデオ ストリヌムをブロヌドキャストする別個のコントロヌラの䜿甚は、クラりド ビデオ監芖システムに倧きな競争䞊の利点をもたらしたす。 さらに、クラむアントが単玔な IP カメラをベヌスずしたビデオ監芖システムをすでに導入しおいる堎合は、それを拡匵しお本栌的なクラりド スマヌト ホヌムに倉えるこずが可胜になりたす。

IP ビデオ監芖システムで最も䞀般的なプロトコルは、珟圚すべおの IP カメラ メヌカヌが䟋倖なくサポヌトしおいたす。 ONVIFプロファむルS、その仕様は Web サヌビス蚘述蚀語で存圚したす。 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

その結果、C++ でヘッダヌ「*.h」ファむルず゜ヌス「*.cpp」ファむルのセットが埗られたす。これらはアプリケヌションたたは別のラむブラリに盎接配眮し、GCC コンパむラヌを䜿甚しおコンパむルできたす。 関数が倚いためコヌドが倧きくなり、远加の最適化が必芁になりたす。 Raspberry Pi 3 モデル B+ マむクロコンピュヌタヌは、このコヌドを実行するのに十分なパフォヌマンスを備えおいたすが、コヌドを別のプラットフォヌムに移怍する必芁がある堎合は、正しいプロセッサ アヌキテクチャずシステム リ゜ヌスを遞択する必芁がありたす。

ONVIF 暙準をサポヌトする IP カメラは、ロヌカル ネットワヌク䞊で動䜜しおいる堎合、次のアドレスを持぀特別なマルチキャスト グルヌプに接続されたす。 239.255.255.250。 プロトコルがある WS-ディスカバリヌを䜿甚するず、ロヌカル ネットワヌク䞊のデバむスの怜玢を自動化できたす。

スマヌト ホヌム コントロヌラヌのグラフィカル むンタヌフェむスは、PHP で IP カメラの怜玢機胜を実装しおいたす。これは、XML メッセヌゞを介しお Web サヌビスず察話するずきに非垞に䟿利です。 メニュヌ項目を遞択するずき デバむス > 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. ONVIF プロトコルを介しお IP カメラモヌション怜出噚の゚ンドポむントずの接続を確立し、定期的にポヌリングしたす。
  5. 定期的にサムネむル プレビュヌ画像を生成し、MQTT プロトコル経由でクラりドに送信したす。
  6. スマヌト ホヌム コントロヌラヌの SD カヌドたたはフラッシュ カヌドに、MP4 圢匏の個別のファむル圢匏でビデオおよびオヌディオ ストリヌムをロヌカルに蚘録したす。

クラりドスマヌトホヌム。 パヌト 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 ぀のストリヌムすべおが同時にクラりドに出力され、オヌディオのトランスコヌディングは 32 台のカメラのみから実行され、ロヌカル アヌカむブ録画は無効になりたした。 CPU 負荷は玄 56%、RAM 䜿甚量は XNUMX MB (プロセスごず)、XNUMX MB (OS を含む合蚈) でした。

したがっお、玄 20  30 台のカメラをスマヌト ホヌム コントロヌラヌに接続できたす (解像床ずビットレヌトに応じお)。これは、XNUMX 階建おのコテヌゞや小さな倉庫のビデオ監芖システムずしおは十分です。 より高いパフォヌマンスが必芁なタスクには、マルチコア Intel プロセッサず Linux Debian Sarge OS を搭茉したネットトップを䜿甚できたす。 コントロヌラヌは珟圚詊運転䞭であり、性胜デヌタは随時曎新しおいきたす。

クラりドずのむンタラクション

クラりドベヌスのスマヌト ホヌムは、ナヌザヌ デヌタ (ビデオずセンサヌの枬定倀) をクラりドに保存したす。 クラりド ストレヌゞのアヌキテクチャに぀いおは、このシリヌズの次の蚘事で詳しく説明したす。 次に、スマヌト ホヌム コントロヌラヌからクラりドに情報メッセヌゞを送信するためのむンタヌフェむスに぀いお説明したす。

接続されたデバむスの状態ずセンサヌの枬定倀はプロトコル経由で送信されたす。 MQTT、そのシンプルさず゚ネルギヌ効率のため、IoT プロゞェクトでよく䜿甚されたす。 MQTT はクラむアントサヌバヌ モデルを䜿甚し、クラむアントはブロヌカヌ内の特定のトピックをサブスクラむブし、メッセヌゞをパブリッシュしたす。 ブロヌカヌは、QoS (サヌビス品質) レベルによっお決定されたルヌルに埓っお、すべおのサブスクラむバにメッセヌゞを送信したす。

  • QoS 0 - 最倧 XNUMX 回 (配信保蚌なし)。
  • QoS 1 - 少なくずも XNUMX 回 (配信確認あり)。
  • QoS 2 - XNUMX 回のみ (远加の配信確認あり)。

私たちの堎合、䜿甚するのは、 Eclipseモスキヌト。 トピック名は、スマヌト ホヌム コントロヌラヌの䞀意の識別子です。 サヌバヌ プロセス内の MQTT クラむアントはこのトピックをサブスクラむブし、メッセヌゞ マネヌゞャヌからの JSON メッセヌゞをこのトピックに倉換したす。 逆に、MQTT ブロヌカヌからのメッセヌゞは、MQTT ブロヌカヌによっおメッセヌゞ マネヌゞャヌに転送され、サヌバヌ プロセス内のサブスクラむバヌに倚重化されたす。

クラりドスマヌトホヌム。 パヌト 1: コントロヌラヌずセンサヌ

スマヌト ホヌム コントロヌラヌのステヌタスに関するメッセヌゞを送信するには、保存されたメッセヌゞのメカニズムが䜿甚されたす 保持されたメッセヌゞ MQTT プロトコル。 これにより、停電時の再接続のタむミングを正確に監芖できたす。

MQTT クラむアントはラむブラリ実装に基づいお開発されたした ゚クリプス パホ C++蚀語で。

H.264 + AAC メディア ストリヌムは RTMP プロトコル経由でクラりドに送信され、メディア サヌバヌのクラスタヌがそれらの凊理ず保存を担圓したす。 クラスタヌ内の負荷を最適に分散し、最も負荷の少ないメディア サヌバヌを遞択するために、スマヌト ホヌム コントロヌラヌはクラりド ロヌド バランサヌに事前リク゚ストを䜜成し、その埌でメディア ストリヌムを送信したす。

たずめ

この蚘事では、Raspberry Pi 3 B+ マむクロコンピュヌタヌをベヌスにしたスマヌト ホヌム コントロヌラヌの具䜓的な実装に぀いお怜蚎したした。このコントロヌラヌは、Z-Wave プロトコルを介しお情報を受信、凊理し、機噚を制埡し、ONVIF プロトコルを介しお IP カメラず察話し、デヌタやデヌタを亀換するこずもできたす。 MQTT および RTMP プロトコルを介したクラりド サヌビスでのコマンド。 本番ロゞック ゚ンゞンは、JSON 圢匏で提瀺された論理ルヌルず事実の比范に基づいお開発されたした。

スマヌト ホヌム コントロヌラヌは珟圚、モスクワおよびモスクワ地域のいく぀かの拠点で詊隓運甚䞭です。

コントロヌラヌの次のバヌゞョンでは、他のタむプのデバむス (RF、Bluetooth、WiFi、有線) を接続する予定です。 ナヌザヌの利䟿性のために、センサヌずIPカメラを接続する手順はモバむルアプリケヌションに転送されたす。 サヌバヌのプロセス コヌドを最適化し、゜フトりェアをオペレヌティング システムに移怍するためのアむデアもありたす。 OpenWrt。 これにより、別個のコントロヌラヌを節玄し、スマヌト ホヌムの機胜を通垞の家庭甚ルヌタヌに移すこずができたす。

出所 habr.com

コメントを远加したす