سحابة المنزل الذكي. الجزء 2: الخدمة السحابية

صورة

أواصل سلسلة من ثلاث مقالات حول سحابة المنزل الذكي.

في مقال سابق ، تم النظر في معدات الاستشعار عن المنزل الذكي ، وكذلك خوارزميات لتحويل البيانات الحسية إلى أوامر تحكم للأجهزة التنفيذية. المكون الرئيسي للمنزل الذكي هو وحدة التحكم ، والتي تعمل في معظم الأحيان بشكل مستقل وفقًا للمنطق المحدد في مرحلة الإعداد. يتم توصيل أجهزة مختلفة (كاميرات IP ، وأجهزة الاستشعار ، والمشغلات) بوحدة التحكم ، التي ترسل البيانات المستلمة من هذه الأجهزة إلى السحابة.

الآن دعنا نتحدث عن بنية الخدمة السحابية لتخزين ومعالجة المعلومات من أجهزة الاستشعار والكاميرات.

فوائد الخدمة السحابية


توفر الخدمة السحابية المنزلية الذكية طريقة بسيطة ومرنة وغير مكلفة لتخزين البيانات الواردة من الأجهزة المنزلية الذكية والوصول إليها. لا يحتاج مستخدم الخدمة السحابية إلى القلق بشأن سلامة بياناته. تتجاوز إمكانيات خادم وسائط متعددة المعالجات ، مزود بسلة أقراص بمجموعة RAID تضم عدة محركات أقراص من 10 إلى 12 تيرابايت ، سعة بطاقة SD أو Flash داخل وحدة تحكم منزلية ذكية. بالإضافة إلى ذلك ، لا يمكن الاعتماد على بطاقات الذاكرة لأنها تحتوي على عدد محدود من دورات إعادة الكتابة وغالبًا ما تفشل. يتم تحديد عمق تخزين البيانات في السحابة بواسطة تعرفة المستخدم ويمكن تهيئتها بسهولة في حسابه الشخصي.

بالإضافة إلى ذلك ، للوصول إلى البيانات ليست هناك حاجة إلى "إعادة توجيه المنفذ" على جهاز توجيه المستخدم عندما يتم إخفاء الأجهزة المنزلية الذكية عن الشبكات الخارجية بواسطة بروتوكول NAT. في حسابك الشخصي ، الذي يمكن الوصول إليه من الأجهزة المحمولة ، يمكنك بسهولة تكوين تكوين ومنطق المنزل الذكي.

من المريح ليس فقط تخزين البيانات في السحابة ، ولكن أيضًا معالجتها ، مما يوفر للمستخدم إحصاءات لفترات زمنية مختلفة. أدناه سننظر في مثال لحساب متوسط ​​درجة حرارة الغرفة في الأسبوع بناءً على قياسات متعددة المحولات.

سحابة هندسة الخدمة


في مقال سابق ، تحدثنا عن وحدة تحكم منزلية ذكية مثبتة على جانب المستخدم وتتفاعل مع خدمة سحابية باستخدام عدة بروتوكولات:

  • يتم استخدام MQTT لتبادل رسائل JSON بين وحدة التحكم وخادم منطق الأعمال ؛
  • HTTP للحصول على عنوان IP لخادم الوسائط الأقل تحميلًا من موازن التحميل لمجموعة خوادم الوسائط ؛
  • RTMP لنقل دفق H.264 + AAC إلى خادم الوسائط.

سننظر الآن في الخدمة السحابية للمنزل الذكي - المكونات الرئيسية التي يتكون منها ، وكيفية حدوث التفاعل مع وحدة تحكم المنزل الذكي.


(انقر على الصورة لفتحها بدقة أعلى)

يعد خادم منطق الأعمال عنصرًا أساسيًا في مخطط تبادل المعلومات بالكامل داخل الخدمة السحابية. الغرض الرئيسي منه هو إدارة أنظمة الخادم الفرعية المختلفة من خلال واجهات واجهة برمجة تطبيقات RESTful. تطبق منطق الخدمة السحابية استنادًا إلى طراز المستخدم : تسجيل أرشيف الفيديو وقياسات أجهزة الاستشعار وفقًا للتعريفة المحددة ، والتفاعل بين المستخدم وجهاز التحكم الذكي بالمنزل ، إلخ.

مطلوب وسيط MQTT لتبادل رسائل JSON بين وحدات تحكم المنزل الذكي المثبتة على جانب العميل وخادم منطق الأعمال. يشترك العملاء في موضوعات ضمن الوسيط تعمل كقنوات رسائل. كوسيط MQTT ، يتم استخدام Eclipse Mosquitto .

مجموعة خوادم الوسائط عبارة عن نظام موزع لتخزين معلومات الفيديو ومعالجتها والبحث عنها ولعبها لكاميرات IP للمنزل الذكي الغائم. يقوم موازن تحميل خاص بجمع معلومات حول الأداء الحالي لكل خادم في المجموعة ، ويقوم بحساب الأقل تحميلًا ويبلغ عن عنوان IP الخاص به إلى وحدة تحكم المنزل الذكي ، التي تنقل الفيديو من الكاميرات إليه.

هناك حاجة إلى قاعدة بيانات سحابية لتخزين نموذج المستخدم للخدمة السحابية ، والتهيئة والحالة الحالية لمعداتها ، وكذلك المعلومات الوصفية حول إدخالات أرشيف الفيديو. كتطبيق لقاعدة البيانات السحابية ، يتم استخدام قاعدة بيانات MySQL.

قاعدة بيانات Touch هي قاعدة بيانات NoSQL غير ذات علاقة. يقوم بتخزين الأحداث وقياسات أجهزة استشعار المنزل الذكي ، مرتبة حسب الوقت. يؤدي استخدام InfluxDB DBMS ، المُحسّن للعمل مع هذا النوع من البيانات ، إلى تحسين أداء الخدمة السحابية بشكل كبير.

الجزء الخلفي من تطبيق العميل هو تطبيق خادم وظيفته الرئيسية هي توفير البيانات المستلمة من قاعدة البيانات السحابية واللمس بتنسيق مناسب للعرض اللاحق بواسطة تطبيق العميل على جهاز المستخدم. تقوم الواجهة الخلفية أيضًا بإنشاء أوامر تحكم بتنسيق JSON لوحدة التحكم في المنزل الذكي. تستند الخلفية على إطار Laravel PHP. سيتم مناقشته بمزيد من التفصيل في المقالة التالية حول تطبيق عميل للتفاعل مع المنزل الذكي السحابي.

يقوم موفر إشعار الدفع بتسليم رسائل حول أحداث المنزل الذكي إلى جهاز المستخدم المتحرك حتى يتمكن من التدخل بسرعة في الموقف (على سبيل المثال ، عندما يظهر تسرب للمياه أو دخان ، اتصل بخدمات الاستجابة المناسبة). تم اختيار خدمة OneSignal كموفر لخدمة Push-notifications ، والتي تحتوي على واجهة RESTful API مريحة ووظيفة تحديد هوية الأجهزة المحمولة ، وهو أمر ضروري للتشغيل الصحيح للإشعارات داخل حساب المستخدم الشخصي.

خادم منطق الأعمال


كما ذكرنا سابقًا ، يعد خادم منطق الأعمال مكونًا رئيسيًا للمنزل السحابي الذكي. استنادًا إلى نموذج المستخدم (الوصف المعلوماتي لمستخدم النظام ، والذي يتضمن ميزات النظام والميزات المالية والمالية والمنطقية) ، فإنه يدير مجموعة متنوعة من الخدمات داخل السحابة التي لها تطبيقات ووظائف مختلفة وتتواصل مع بعضها البعض من خلال واجهات واجهة برمجة تطبيقات RESTful.



وحدة منطق الأعمال داخل الخادم مسؤولة عن العمليات التالية:

  1. إدارة تخزين قياسات أجهزة الاستشعار وأحداث كاشفات الحركة من كاميرات IP الخاصة بالمنزل الذكي داخل قاعدة بيانات تعمل باللمس ؛
  2. إدارة تسجيل دفق الوسائط لكاميرا IP التي تبثها وحدة التحكم في المنزل الذكي في أرشيف خادم الوسائط (ثابت / بواسطة كاشف الحركة) ؛
  3. ترجمة الأوامر من تطبيق العميل إلى وحدة تحكم المنزل الذكي ؛
  4. بث تكوين وحدة تحكم المنزل الذكي (الأجهزة المتصلة ، قواعد منطق الإنتاج المحددة من قبل المستخدم) ؛
  5. إرسال إعلامات الدفع حول حالة وحدة تحكم المنزل الذكي والأجهزة المتصلة إلى تطبيق العميل.

تتمثل ميزة خادم منطق الأعمال في الاتصال المتبادل مع التطبيقات البعيدة التي تعمل على عدة خوادم على الإنترنت. غالبًا ما يكون تطبيق خادم منطق العمل في وضع الخمول على أقفال الإدخال / الإخراج ، لذلك تم تصميمه استنادًا إلى بنية متعددة الخيوط ويتألف من مجموعة من المهام الفرعية المحددة.

لضمان أقصى قدر من الكفاءة ، يجب أن يكون التنفيذ الداخلي لخادم منطق الأعمال أبسط ( مبدأ KISS ). نظرًا لأن طراز المستخدم محدد تمامًا ولا يحتوي على تغيير العلاقات بين الميزات ، فليست هناك حاجة لآلية استدلال مرنة (كما في وحدة تحكم المنزل الذكي ، حيث يقوم المستخدم بتكوين منطق المستخدم). لذلك ، يمكن وصف تشغيل وحدة منطق الأعمال داخل الخادم من خلال مخطط كتلة خوارزمي تقليدي مع التحولات الشرطية.


(انقر على الصورة لفتحها بدقة أعلى)

بعد بدء التشغيل مباشرة ، ينتقل خادم منطق الأعمال إلى حالة الانتظار للرسائل التي تستخدم بروتوكولات MQTT (من وحدات التحكم في المنزل الذكي) و HTTP (من الواجهة الخلفية لتطبيق العميل). في حالة وصول الرسالة عبر HTTP ، فهذا يعني أن المستخدم يتفاعل مع تطبيق العميل ويرسل الأوامر إلى وحدة تحكم المنزل الذكي أو يقوم بتحديث التكوين الخاص بها. من أجل سقوط رسالة العميل في وحدة التحكم في المنزل الذكي ، يتم إرسالها بواسطة خادم منطق الأعمال إلى الموضوع المقابل لسمس MQTT ، الذي اشتركت فيه وحدة التحكم ( وظيفة SendGatewayMessage الفرعية).

في مرحلة التهيئة ، ينتظر جهاز التحكم الذكي في المنزل للمستخدم تسجيله في حسابه الشخصي. لذلك ، يتم تنفيذ المهام الفرعية CheckGatewayExistance ، والتي تتحقق من الحالة المقابلة في قاعدة بيانات سحابة MySQL. للتسجيل في حسابك الشخصي ، ترسل وحدة التحكم تكوينها الكامل إلى خادم منطق الأعمال ، وهذا بدوره يقوم ببث الخلفية الخاصة به لتطبيق العميل ( SendBackend sub- task ) ، الذي يقوم بإنشاء وتحديث سجلات التكوين في قواعد بيانات السحابة واللمس.

عندما يتم تسجيل وحدة التحكم في المنزل الذكي بنجاح في الحساب الشخصي للمستخدم ، يقوم خادم منطق الأعمال بتحميل نموذج المستخدم من قاعدة البيانات السحابية إلى RAM الخاصة به ويبدأ في معالجة الرسائل من كاميرات IP وأجهزة استشعار Z-Wave وفقًا لخوارزمية منطق العمل التالية.

رسالة JSON من جهاز استشعار Z- الموجة مع حقول المعلومات:

{ "vendor": "*****", "version": "3.0.0", "timestampMs": "1571754749561", "clientType": "gateway", "deviceId": "c8e8de37-d301-45f4-ba01-************", "deviceType": "sensor", "protocol": "zwave", "messageType": "sensorData", "homeId": "0xefa0cfa7", "nodeId": "19", "sensorType": "SENSOR MULTILEVEL", "label": "Temperature", "sensorData": "26.1", "units": "C", "gatewayId": "6774f85a-0a5b-4059-9b68-************" } 

عندما تصل رسالة من مستشعر Z-Wave عبر بروتوكول MQTT ، يتم تنفيذ المهام الفرعية التالية:

  • يقوم StoreSensorDataMySQL بتحديث (UPDATE) بسجل موجود في قاعدة بيانات سحابة MySQL ، حيث يتم تخزين معلومات حول الحالة الحالية والقياسات من المستشعر. يعد ذلك ضروريًا لتطبيق عميل يعرض الحالة الحالية للمنزل الذكي للمستخدم ؛
  • يضيف StoreSensorDataInfluxDB (INSERT) سجلًا جديدًا إلى قاعدة بيانات InfluxDB التي تعمل باللمس ، حيث يتم تخزين محفوظات القياسات من المستشعر. تُستخدم هذه المعلومات في حساب البيانات الإحصائية لفترات زمنية مختلفة (على سبيل المثال ، استهلاك الطاقة في اليوم أو الشهر أو السنة) ويتم عرضها في تطبيق العميل في شكل رسوم بيانية وجداول ؛
  • ينشئ SendPushNotification رسالة JSON تحتوي على طابع زمني واسم استشعار ووصفًا نصيًا للحدث ومعرف الهاتف الذكي للمستخدم الذي دخل معه في حسابه الشخصي والمعرف الداخلي للتطبيق في نظام مزود OneSignal. علاوة على ذلك ، يتم إرسال هذه الرسالة إلى مزود إعلام الدفع من خلال واجهة برمجة تطبيقات RESTful https://onesignal.com/api/v1/notifications ، والتي تسلمها إلى الهاتف الذكي للمستخدم.

مثال على رسالة JSON من كاميرا IP مع حقول المعلومات:

 { "vendor": "*****", "version": "3.0.0", "timestampMs": "1571753150317", "clientType": "gateway", "deviceId": "1616453d-30cd-44b7-9bf0-************", "deviceType": "camera", "protocol": "onvif", "messageType": "deviceState", "deviceState": "streamingOn", "mediaserverIp": "***.***.***.***", "applicationName": "rtp-live-iot", "gatewayId": "6774f85a-0a5b-4059-9b68-************" } 

عندما تصل رسالة من كاميرا IP باستخدام بروتوكول MQTT ، يستخرج خادم منطق العمل نوعه من حقل messageType . اعتمادًا على قيمة هذا الحقل ، يتم تنفيذ الإجراءات التالية:

  • "MessageType": "deviceState" - تحتوي الرسالة على معلومات حول تغيير حالة كاميرا IP. يتم تنفيذ UpdateCameraState المهمة الفرعية ، وتحديث المعلومات في قاعدة البيانات السحابية. إذا كان حقل deviceState إما يتدفق أو يتدفق (تقوم كاميرا IP بإرسال / إيقاف دفق البيانات إلى خادم الوسائط) ، يتم تنفيذ المهمة الفرعية لـ RecordMediaStream ، والتي تنشئ أمرًا لتمكين / تعطيل وضع تسجيل الأرشيف وإرساله إلى خادم الوسائط ؛
  • "MessageType": "sensorData" - معلومات حول تشغيل كاشف الحركة على كاميرا IP. إذا تم ضبط وضع تسجيل الأرشيف في طراز المستخدم على "بواسطة كاشف الحركة" ، فسيتم تنفيذ المهمة الفرعية لـ RecordMediaStream . بعد ذلك ، يتم تنفيذ المهام الفرعية StoreSensorDataInfluxDB (حفظ محفوظات الكاشف في قاعدة بيانات اللمس) و SendPushNotification (إرسال إشعارات الدفع عبر الموفر) ؛
  • "MessageType": "معاينة" - تحتوي الرسالة على إطار لصورة مصغرة من كاميرا IP ، والتي يتم إرسالها بشكل دوري إلى السحابة. تقوم المهمة الفرعية StorePreview بحفظها في قاعدة بيانات سحابية. ثم يتم استخدامه في تطبيق العميل عند عرض قائمة الكاميرات.
  • "MessageType": "command" - أمر يتم إرساله بواسطة وحدة تحكم المنزل الذكي عندما يغير المستخدم إعداداته عبر واجهة الويب. يتم تنفيذ RecordMediaStream المهمة الفرعية ، والتي تعمل ، حسب طراز المستخدم ، على تشغيل / إيقاف وضع التسجيل على خادم الوسائط.


(انقر على الصورة لفتحها بدقة أعلى)

نتيجة لعمل وحدة منطق الأعمال ، يتم تشكيل قائمة انتظار المهام - سلسلة من الأقسام الدنيا من التعليمات البرمجية التي يتم تنفيذها بشكل مستقل عن بعضها البعض. يتم نقل قائمة انتظار المهام إلى تجمع مؤشرات الترابط ، الذي يوزع المهام بين النوى المجانية للمعالج المركزي. عند حدوث قفل I / O أثناء التنفيذ ، يتوقف مؤشر الترابط مؤقتًا ويدخل في حالة الخمول ويحرر جوهر المعالج المركزي ، مما يسمح لتجمع مؤشرات الترابط ببدء المهمة التالية على الفور من قائمة الانتظار. في لحظة تحرير قفل الإدخال / الإخراج ، يغير مؤشر الترابط المحظور حالته إلى العمل ويستمر التنفيذ حالما يتم تحرير أحد مراكز المعالج المركزي.

وبالتالي ، من خلال تحليل مهمة منطق العمل في العديد من المهام الفرعية المنفصلة التي يتم تنفيذها في وقت واحد ، يتم زيادة أداء وحدة خدمة منطق الأعمال. يتحقق تحجيم النظام من خلال زيادة عدد نوى المعالج المركزي وزيادة عدد خوادم منطق الأعمال في النظام.

تم تطوير تطبيق خادم منطق الأعمال في C ++ ويعمل كخدمة systemd لنظام التشغيل Linux Debian Sarge. لمراقبة الأداء الإضافية ، يتم استخدام نظام مراقبة موارد monit ، والذي يقوم بإعادة تشغيل الخدمة في حالة حدوث مشاكل في الأداء.

تعمل الخدمة السحابية حاليًا على تشغيل خادم منطق عمل واحد يعمل على Yandex. المعلمات الجهاز الظاهري - 4 النوى vCPU مع حصة مضمونة من 20 ٪ ، 2 غيغابايت من ذاكرة الوصول العشوائي ، 100 جيجابايت محرك الأقراص الصلبة. وفقًا للحسابات ، يكون هذا الأداء كافيًا لمعالجة الرسائل من حوالي 1000 وحدة تحكم منزلية ذكية مع 3 كاميرات IP و 5 مستشعرات Z-Wave لكل منها (سيتم توضيح الحسابات أثناء تشغيل النظام).

خادم الوسائط


خادم الوسائط هو خادم مخصص مثبت عليه برنامج خاص من أجل:

  • تلقي تدفقات من بيانات الفيديو والصوت من أجهزة التشفير باستخدام بروتوكولات الشبكة المتخصصة ؛
  • تخزين البيانات في شكل ملفات الأرشيف في نظام الملفات الخاص بها ؛
  • بث المعلومات من ملفات الأرشيف بتنسيق دفق قياسي للتشغيل على أجهزة العميل.

يستخدم Wowza Streaming Engine 4.7.2 مع وحدات إضافية تم تطويرها في Java كخادم وسائط في نظام المنزل الذكي السحابي لتسجيل بيانات التدفق إلى أرشيف الملفات وللتعامل مع قاعدة بيانات سحابية.


(انقر على الصورة لفتحها بدقة أعلى)

يدخل دفق الوسائط من وحدة تحكم المنزل الذكي بتنسيق RTMP إلى خادم الوسائط ويتم محاذاته مع طوابع الوقت في المخزن المؤقت jitter . يعد ذلك ضروريًا للتعويض عن تأثير تأخر حزم الشبكة عند إرسال تدفق البيانات عبر الإنترنت.

لتسجيل دفق الفيديو على نظام ملفات خادم الوسائط كملف MP4 ، يرسل خادم منطق العمل الأمر التالي إلى خادم الوسائط من خلال RESTful HTTP API:

 http://<mediaserverIp>:<port>/v2/servers/_defaultServer_/vhosts/_defaultVHost_/applications/rtp-live-iot/instances/_definst_/streamrecorders/1616453d-30cd-44b7-9bf0-************ { "instanceName": "_definst_", "fileVersionDelegateName": "CustomFileVersionDelegate", "serverName": "", "recorderName": "1616453d-30cd-44b7-9bf0-************", "segmentSchedule": "", "outputPath": "", "currentFile": "", "applicationName": "rtp-live-iot", "fileTemplate": "", "segmentationType": "SegmentByDuration", "fileFormat": "MP4", "recorderState": "", "option": "", "currentSize": "0", "segmentSize": "0", "segmentDuration": "1800000", "backBufferTime": "0", "currentDuration": "0", "startOnKeyFrame": "true", "recordData": "false", "moveFirstVideoFrameToZero": "true", "defaultRecorder": "false", "splitOnTcDiscontinuity": "false" } 

يشار إلى اسم دفق الفيديو (معرف كاميرا IP على وحدة تحكم المنزل الذكي) في الحقل recorderName ، في الحقل fileVersionDelegateName هو اسم الفئة الموروثة لتحديد المسار إلى المجلد واسم الملف. يظهر رمز فئة Java في القائمة التالية:

 import java.io.File; import java.util.Calendar; import java.util.TimeZone; import com.wowza.wms.livestreamrecord.manager.IStreamRecorder; import com.wowza.wms.livestreamrecord.manager.IStreamRecorderFileVersionDelegate; import com.wowza.wms.logging.WMSLoggerFactory; public class CustomFileVersionDelegate implements IStreamRecorderFileVersionDelegate { @Override public String getFilename(IStreamRecorder recorder) { String sDisk = GetDisk(); if(sDisk == null) { WMSLoggerFactory.getLogger(null).error("CustomFileVersionDelegate::getFilename(): No drive chosen"); return null; } String sStreamName = recorder.getStreamName(); int nCameraId = Integer.parseUnsignedInt(ServiceQueries.GetCameraId(sStreamName)); TimeZone tz = TimeZone.getTimeZone("Europe/Moscow"); Calendar now = Calendar.getInstance(tz); String sDirPath = ServerParams.m_sServerContentPath + "/" + sDisk + "/" + Integer.toString(nCameraId / 200) + "/" + sStreamName + "/" + String.format("%1$tY/%1$tm/%1$td", now); String sFullFilePath = sDirPath + "/" + sStreamName + "_" + String.format("%1$tH_%1$tM_%1$tS", now) + ".mp4"; File dirs = new File(sDirPath); dirs.setExecutable(true); dirs.setWritable(true); dirs.mkdirs(); WMSLoggerFactory.getLogger(null).info( "CustomFileVersionDelegate::getFilename(): Filename created: " + sFullFilePath); return sFullFilePath; } } 

في فئة CustomFileVersionDelegate ، يتم تحميل وظيفة getFilename الظاهرية للفئة الأساسية IStreamRecorderFileVersionDelegate ، والتي يتم استدعاؤها بواسطة خادم الوسائط قبل بدء الدفق في الكتابة إلى الملف. تقوم الدالة بإنشاء مجلد على القرص باستخدام المسار sDirPath وإرجاع المسار الكامل إلى ملف sFullFilePath .

نظرًا لأن حجم بيانات الوسائط كبير جدًا ، يشتمل نظام الملفات على العديد من الأقراص الفعلية ذات الحجم الكبير (8 - 12 تيرابايت) التي تم تركيبها كدلائل فرعية. يتم تحديد القرص الذي يحتوي على أكبر قدر من المساحة الحرة كقرص الوجهة أثناء التسجيل. للتشغيل الأمثل لنظام الملفات عند الوصول إلى الملف ، يتم تشكيل المسار إلى المجلد الهدف على النحو التالي:

 /content/<diskId>/<cameraIdDivideBy200>/<streamUuid>/<year>/<month>/<day>/ 

حيث diskId هو معرف القرص (المجلد المثبت) ،
cameraIdDivideBy200 - نتيجة تقسيم عدد صحيح لمعرف الكاميرا بمقدار 200 ،
streamUuid - معرف دفق الوسائط ،
السنة والشهر واليوم والسنة والشهر ويوم التسجيل ، على التوالي.

هذا يتجنب عددًا كبيرًا من المجلدات الفرعية داخل مجلد واحد ، وبالتالي انخفاض كبير في أداء نظام الملفات بأكمله مع زيادة عدد كاميرات IP في المنازل الذكية الملبدة بالغيوم.

يتم تخزين المعلومات حول عنوان IP لخادم الوسائط ، والمسار إلى الملف مع بيانات الوسائط ، ووقت بداية ونهاية الكتابة إلى الملف في قاعدة البيانات السحابية ، ثم يتم استخدامها من قبل تطبيق العميل لعرض الجدول الزمني للأرشيف الذي يمكن فيه اختيار الفيديو وتشغيله.

للحصول على دفق الفيديو ، تصل الواجهة الأمامية لتطبيق العميل إلى خادم الوسائط ، وإرسال الأوامر التالية عبر بروتوكول HTTP. لدفق الفيديو "المباشر":

 https://<mediaserverIp>:<port>/rtp-live-iot/<streamUuid>/playlist.m3u8 

لدفق الفيديو المؤرشفة:

 https://<mediaserverIp>:<port>/vod/_definst_/mp4:<diskId>/<cameraIdDivideBy200>/<streamUuid>/<year>/<month>/<day>/<fileName>/playlist.m3u8?wowzaplaystart=<offsetMs>&wowzaplayduration=<durationMs> 

حيث fileName هو اسم ملف الأرشيف على القرص ،
offsetMs - إزاحة التشغيل نسبة إلى بداية الملف بالمللي ثانية ،
- مدة العرض بالميلي ثانية.

يرسل خادم الوسائط دفقًا بتنسيق HLS ، والذي يسمح لك بعرض فيديو H.264 + AAC في جميع المتصفحات الحديثة والأجهزة المحمولة التي تعمل بنظامي التشغيل iOS و Android. تقوم أداة packetizer HLS بترميز الدفق في شكل قطع منفصلة وترسلها عبر HTTP كاستجابة لطلب من تطبيق جوال.

لتحسين تكاليف التخزين والوصول إلى ملفات الأرشيف ، تم تطوير خادم وسائط المنزل الذكي السحابي على النظام الأساسي للأجهزة Supermicro CSE-825TQ واللوحة الأم X8DT6 و 2 xCPU Intel Xeon E5645 بسرعة 2.4 جيجاهرتز وذاكرة الوصول العشوائي بسعة 32 جيجا بايت وذاكرة الوصول العشوائي HDD Adaptec AAC-RAID. تم تثبيت خادم الوسائط كخادم مخصص على موقع الاستضافة ويتصل بقناة الإنترنت بعرض 400 ميجابت في الثانية. يعد أداء خادم وسائط واحد كافيًا لمعالجة تدفقات الوسائط من حوالي 400 من كاميرات IP مع ترميز H.264 ودقة إطار 720 بكسل ومعدل بت 1 ميجابت في الثانية.



وفقًا لذلك ، من أجل التمكن من معالجة التدفقات من 1000 كاميرا IP ، من الضروري تثبيت 3 خوادم وسائط وتوزيع بالتساوي بين الحمل. لهذا الغرض ، يتم استخدام موازن التحميل ، المتصل بخادم وسائط Wowza Streaming Engine كمكون إضافي إضافي Dynamic Load Balancing AddOn . هذا يميز ، في الواقع ، موازن التحميل (أو خادم الأصل ) ، الذي يستقبل بشكل دوري مقاييس الأداء من خوادم الوسائط النهائية (أو خوادم الحافة ) ، وبناءً على هذه المعلومات ، يعثر على الخادم الأقل تحميلاً في الكتلة.

تصل وحدة التحكم في المنزل الذكي إلى الموازن عبر HTTP وتستجيب استجابةً لعنوان IP لهذا الخادم ، الذي تنقل إليه وحدة التحكم دفق الوسائط من كاميرا IP عبر RTMP. يتضمن مقياس الأداء عدد الاتصالات التي تم إنشاؤها بمصادر دفق الوسائط والمستهلكين وعرض النطاق الترددي الحالي لقناة الإنترنت على الخادم. في إعدادات الموازن ، يمكنك أيضًا تحديد اختيار خادم الحافة ، مع الأخذ في الاعتبار موقعه الجغرافي المكاني ، والذي يسمح لك باستضافة خوادم في مدن ودول مختلفة لإنشاء شبكة موزعة لتقديم محتوى CDN .

لمسة قاعدة البيانات


كما ذكرنا سابقًا في المقالة السابقة ، يتم إرسال قراءات أجهزة استشعار Z-Wave ، بالإضافة إلى الوضع الحالي وأحداث كاميرات IP بتنسيق JSON بواسطة وحدة تحكم المنزل الذكي إلى السحابة باستخدام بروتوكول MQTT. يقوم خادم منطق العمل بفك تشفير هذه الرسائل وتشغيل المهمة الفرعية StoreSensorDataInfluxDB ، التي تنقل البيانات إلى قاعدة بيانات اللمس عبر HTTP.


(انقر على الصورة لفتحها بدقة أعلى)

تم تطوير قاعدة البيانات السحابية من المنزل الذكي على أساس InfluxDB 1.7.x - نظام إدارة قاعدة بيانات مفتوح المصدر للعمل مع تسلسل الوقت ، والذي يستخدم في العديد من مشاريع Internet of Things لتخزين البيانات من أجهزة الاستشعار والتحليلات. يتم إنشاء استعلامات إلى قاعدة بيانات اللمس بلغة InfluxQL المشابهة لـ SQL التقليدية.

يتم تحديد وقت تخزين البيانات في المنزل السحابي الذكي من خلال التعريفات المحددة وفقًا لطراز المستخدم. نظرًا للاختلاف الكبير في كمية بيانات الفيديو وبيانات المستشعر ، سيكون وقت تخزينها مختلفًا. يتم قياس حجم أرشيف الفيديو بالأيام (7 ، 14 ، 30 يومًا بمعدلات مختلفة) ، ويتم قياس حجم أرشيف المستشعرات بالسنوات (3 ، 5 ، 7 سنوات ، على التوالي). لذلك ، لكل وحدة تحكم في المنزل الذكي ، عندما يتم تسجيلها في حساب المستخدم الشخصي ، يتم إنشاء قاعدتي بيانات منفصلتين بسياسات استبقاء مختلفة داخل قاعدة بيانات اللمس:

 CREATE DATABASE "gateway_6774f85a_0a5b_4059_9b68_************_cameras" WITH DURATION 720h SHARD DURATION 1h; CREATE DATABASE "gateway_6774f85a_0a5b_4059_9b68_************_sensors" WITH DURATION 61320h SHARD DURATION 24h; 

الخلفية من تطبيق العميل هي المسؤولة عن إنشاء وتحرير وحذف قاعدة البيانات داخل قاعدة بيانات اللمس. على سبيل المثال ، إذا قام أحد مستخدمي المنزل الذكي السحابي بتغيير التعريفة ، فإن الواجهة الخلفية ترسل الأوامر التالية لإجراء تغييرات على سياسة التخزين:

 ALTER RETENTION POLICY "autogen" ON "gateway_6774f85a_0a5b_4059_9b68_************_cameras" DURATION 168h SHARD DURATION 1h; 

عند إزالة وحدة تحكم المنزل الذكي من الحساب الشخصي للمستخدم ، يحذف الواجهة الخلفية قواعد البيانات المقابلة:

 DROP DATABASE "gateway_6774f85a_0a5b_4059_9b68_************_cameras"; DROP DATABASE "gateway_6774f85a_0a5b_4059_9b68_************_sensors"; 

عند استلام رسالة إعلامية من وحدة تحكم المنزل الذكي ، ينفذ خادم منطق الأعمال طلبًا لإدراج البيانات في قاعدة بيانات اللمس:

 INSERT device_20873eb0_dd5e_4213_a175_************,class=METER,label=Energy,units=kWh value_float=0.05 1572194550125; 

مثال على جدول يحتوي على بيانات من مجسات Z-Wave لوحدة تحكم منزلية ذكية واحدة:



واحدة من أكثر الميزات المفيدة للمنزل السحابي هي حساب الإحصاءات بناءً على البيانات المستلمة. يحتاج المستخدم إلى معرفة متوسط ​​درجة الحرارة في الغرفة أو كمية الكهرباء التي ينفقها شهريا.

تتيح لك لغة InfluxQL إجراء استعلامات باستخدام الدوال التحليلية . على سبيل المثال ، لحساب متوسط ​​درجة الحرارة لمدة أسبوع ، تحتاج إلى تشغيل الاستعلام التالي:

 SELECT MEAN("value_float") FROM device_63c660da_f0e8_4eca_8d5f_************ WHERE label = 'Temperature' AND time >= '2019-10-21T00:00:00.000Z' AND time <= '2019-10-27T23:59:59.999Z' GROUP BY time(1d) fill(null); 

يتم عرض نتائج هذا الاستعلام في الجدول:



في المقالة التالية ، المكرسة بالكامل لتطبيق العميل ، سننظر بالتفصيل في حساب الإحصائيات لمختلف المعلمات وبناء الجداول والرسوم البيانية بناءً عليه.

في نظام المنزل الذكي السحابي ، يتم نشر InfluxDB DBMS على جهاز Yandex ، وهو الجهاز الظاهري السحابي مع المعلمات التالية: 4 نوى وحدة المعالجة المركزية مع حصة مضمونة من 20 ٪ ، 2 غيغابايت من ذاكرة الوصول العشوائي ، 100 غيغابايت من الأقراص الصلبة. وفقًا لحسابات هذا التكوين ، يكفي تخزين بيانات المستشعر من 3000 كاميرا IP و 5000 جهاز استشعار Z-Wave لمدة 7 سنوات.

استنتاج


فحص المقال بنية خدمة سحابية للمنزل الذكي ، خوارزمية خادم منطق الأعمال ، بنية خادم الوسائط لتسجيل وتخزين وتشغيل دفق الوسائط من كاميرات IP ، بالإضافة إلى بنية قاعدة بيانات تعمل باللمس لتخزين وتحليل البيانات من أجهزة استشعار المنزل الذكي. يعمل نظام الخدمة السحابية على كل من الخوادم المخصصة والظاهرية ، لتوفير مزيد من الاستقرار في مواقع الاستضافة المختلفة. يخضع النظام حاليًا للعملية التجريبية.

كلما كانت البيانات المخزنة في السحابة أقدم ، كلما قل وصول المستخدم إليها. في الإصدار التالي من الخدمة السحابية ، يُقترح استخدام آلية التخفيف (أو الإفراط في) البيانات باستخدام InfluxDB Continuous Queries من أجل تقليل كمية البيانات المخزنة باستخدام وظائف التجميع ، وبالتالي زيادة سعة قاعدة بيانات اللمس.



أيضًا ، في الإصدار التالي من الخدمة السحابية ، سيتم تنفيذ مجموعة من خوادم منطق الأعمال وفقًا لمبدأ مجموعة من خوادم الوسائط ، التي تمت مناقشتها في هذه المقالة. يوضح الشكل بنية مثل هذه المجموعة ، حيث تقوم عدة خوادم متطورة (لكل منها وسيط MQTT منفصل وبرنامج خادم منطق الأعمال) بإرسال مقاييس الأداء إلى الخادم الأصلي ، الذي يحسب عنوان IP الخاص بالخادم الأقل تحميلًا. سيتيح لك ذلك توسيع نطاق النظام إلى حد كبير والتغلب على الحد الحالي وهو 1000 منزل ذكي.

Source: https://habr.com/ru/post/ar474700/


All Articles