خانه هوشمند ابری. بخش 1: کنترل کننده و سنسورها

خانه هوشمند ابری. بخش 1: کنترل کننده و سنسورها

امروزه به لطف توسعه سریع میکروالکترونیک، کانال‌های ارتباطی، فناوری‌های اینترنتی و هوش مصنوعی، موضوع خانه‌های هوشمند بیشتر و بیشتر مطرح می‌شود. خانه انسان از عصر حجر دستخوش تغییرات قابل توجهی شده است و در عصر انقلاب صنعتی 4.0 و اینترنت اشیا، راحت، کاربردی و ایمن شده است. راه‌حل‌هایی به بازار می‌آیند که یک آپارتمان یا یک خانه روستایی را به سیستم‌های اطلاعاتی پیچیده‌ای تبدیل می‌کنند که از هر کجای دنیا با استفاده از تلفن هوشمند کنترل می‌شوند. علاوه بر این، برای تعامل انسان و ماشین، دانش زبان های برنامه نویسی دیگر مورد نیاز نیست - به لطف الگوریتم های تشخیص و سنتز گفتار، فرد با یک خانه هوشمند به زبان مادری خود صحبت می کند.

برخی از سیستم‌های خانه هوشمند در حال حاضر در بازار توسعه منطقی سیستم‌های نظارت تصویری ابری هستند که توسعه‌دهندگان آن نیاز به یک راه‌حل جامع نه تنها برای نظارت، بلکه برای مدیریت اشیاء راه دور را نیز درک کرده‌اند.

توجه شما به مجموعه‌ای از سه مقاله دعوت می‌شود که در مورد تمام اجزای اصلی سیستم خانه هوشمند ابری صحبت می‌کند که شخصاً توسط نویسنده توسعه داده شده و مورد بهره‌برداری قرار گرفته است. مقاله اول به تجهیزات سرویس گیرنده ترمینال نصب شده در خانه هوشمند، مقاله دوم به معماری سیستم ذخیره سازی ابری و پردازش داده ها و در نهایت مقاله سوم به برنامه مشتری برای مدیریت سیستم اختصاص دارد. در دستگاه های تلفن همراه و ثابت

تجهیزات خانه هوشمند

ابتدا بیایید در مورد چگونگی ساخت یک خانه هوشمند از یک آپارتمان معمولی، خانه تابستانی یا کلبه صحبت کنیم. برای انجام این کار، به عنوان یک قاعده، لازم است تجهیزات زیر را در خانه قرار دهید:

  1. سنسورهای اندازه گیری پارامترهای مختلف محیط خارجی؛
  2. محرک هایی که بر روی اشیاء خارجی عمل می کنند.
  3. کنترل‌کننده‌ای که محاسبات را مطابق با اندازه‌گیری سنسورها و منطق زیربنایی انجام می‌دهد و دستورات را برای محرک‌ها صادر می‌کند.

شکل زیر نمودار یک خانه هوشمند را نشان می دهد که شامل سنسورهای نشت آب (1) در حمام، سنسور دما (2) و روشنایی (3) در اتاق خواب، یک سوکت هوشمند (4) در آشپزخانه و یک نظارت تصویری است. دوربین (5) در راهرو.

خانه هوشمند ابری. بخش 1: کنترل کننده و سنسورها

در حال حاضر، سنسورهای بی‌سیمی که بر روی پروتکل‌های RF433، Z-Wave، ZigBee، بلوتوث و وای‌فای کار می‌کنند، به‌طور گسترده مورد استفاده قرار می‌گیرند. مزایای اصلی آنها سهولت نصب و استفاده و همچنین هزینه و قابلیت اطمینان پایین است. سازندگان در تلاش هستند تا دستگاه های خود را به بازار انبوه برسانند و در دسترس کاربران عادی قرار دهند.

سنسورها و محرک ها، به عنوان یک قاعده، از طریق یک رابط بی سیم به کنترل کننده خانه هوشمند (6) متصل می شوند - یک میکرو کامپیوتر تخصصی که همه این دستگاه ها را در یک شبکه واحد ترکیب می کند و آنها را کنترل می کند.

با این حال، برخی از راه حل ها می توانند یک حسگر، یک محرک و یک کنترل کننده را به طور همزمان ترکیب کنند. برای مثال، یک دوشاخه هوشمند را می‌توان طوری برنامه‌ریزی کرد که طبق یک برنامه زمان‌بندی روشن یا خاموش شود، و یک دوربین نظارت تصویری ابری می‌تواند ویدیو را روی سیگنال آشکارساز حرکت ضبط کند. در ساده ترین موارد می توانید بدون کنترلر مجزا این کار را انجام دهید، اما برای ایجاد یک سیستم انعطاف پذیر با سناریوهای زیاد، لازم است.

برای اتصال کنترلر خانه هوشمند به شبکه جهانی می توان از یک روتر معمولی اینترنت (7) استفاده کرد که مدت هاست به یک وسیله خانگی آشنا در هر خانه تبدیل شده است. استدلال دیگری به نفع کنترلر خانه هوشمند وجود دارد - اگر اتصال به اینترنت قطع شود، خانه هوشمند به لطف بلوک منطقی ذخیره شده در داخل کنترلر و نه در سرویس ابری، به طور معمول به کار خود ادامه می دهد.

کنترلر خانه هوشمند

کنترل کننده سیستم خانه هوشمند ابری که در این مقاله مورد بحث قرار گرفته است، بر اساس یک میکرو کامپیوتر تک بردی توسعه یافته است Raspberry Pi 3 مدل B+، که در مارس 2018 منتشر شد و دارای منابع و کارایی کافی برای کارهای خانه هوشمند است. این شامل یک پردازنده چهار هسته‌ای Cortex-A53 با معماری 64 بیتی ARMv8-A، با کلاک 1.4 گیگاهرتز، و همچنین 1 گیگابایت رم، Wi-Fi 802.11ac، بلوتوث 4.2 و آداپتور اترنت گیگابیتی است که از طریق USB 2.0 کار می‌کند. اتوبوس.

خانه هوشمند ابری. بخش 1: کنترل کننده و سنسورها

مونتاژ کنترل بسیار ساده است - میکرو کامپیوتر (1) در یک محفظه پلاستیکی (2) نصب می شود، سپس یک کارت حافظه microSD 8 گیگابایتی با نرم افزار (3) و یک کنترلر شبکه USB Z-Wave (4) در آن نصب می شود. اسلات های مناسب کنترلر خانه هوشمند از طریق یک آداپتور برق 5 ولت، 2.1 آمپر (5) و یک کابل USB-micro-USB (6) به برق وصل می شود. هر کنترل کننده دارای یک شماره شناسایی منحصر به فرد است که در ابتدا در فایل پیکربندی نوشته می شود و برای تعامل با خدمات خانه هوشمند ابری مورد نیاز است.

نرم افزار کنترلر خانه هوشمند توسط نویسنده این مقاله بر اساس سیستم عامل توسعه یافته است لینوکس Raspbian Stretch. از زیر سیستم های اصلی زیر تشکیل شده است:

  • فرآیند سرور برای تعامل با تجهیزات خانه هوشمند و ابر؛
  • رابط کاربری گرافیکی برای تنظیم تنظیمات و پارامترهای عملیاتی کنترلر.
  • پایگاه داده برای ذخیره پیکربندی کنترلر.

خانه هوشمند ابری. بخش 1: کنترل کننده و سنسورها

پایگاه داده کنترلر خانه هوشمند بر اساس یک DBMS تعبیه شده پیاده سازی شده است از SQLite و یک فایل روی کارت SD با نرم افزار سیستم است. این به عنوان یک ذخیره سازی پیکربندی کنترلر عمل می کند - اطلاعات مربوط به تجهیزات متصل و وضعیت فعلی آن، بلوکی از قوانین تولید منطقی، و همچنین اطلاعاتی که نیاز به نمایه سازی دارند (به عنوان مثال، نام فایل های آرشیو ویدیوی محلی). هنگامی که کنترلر راه اندازی مجدد می شود، این اطلاعات ذخیره می شود، که امکان بازیابی عملکرد کنترل را در صورت قطع برق فراهم می کند.

رابط گرافیکی کنترلر خانه هوشمند در PHP 7 با استفاده از یک microframework توسعه یافته است لاغر. وب سرور وظیفه اجرای برنامه را بر عهده دارد. lighttpd، که به دلیل عملکرد خوب و نیاز به منابع کم اغلب در دستگاه های تعبیه شده استفاده می شود.

خانه هوشمند ابری. بخش 1: کنترل کننده و سنسورها
(روی تصویر کلیک کنید تا با وضوح بزرگتر باز شود)

وظیفه اصلی رابط کاربری گرافیکی اتصال تجهیزات خانه هوشمند (دوربین های IP و سنسورها) به کنترلر است. برنامه وب پیکربندی و وضعیت فعلی کنترلر و دستگاه های متصل به آن را از پایگاه داده SQLite می خواند. برای تغییر پیکربندی کنترلر، دستورات کنترلی را با فرمت JSON از طریق RESTful API فرآیند سرور ارسال می کند.

فرآیند سرور

فرآیند سرور - یک مؤلفه کلیدی که تمام کارهای اصلی را بر روی خودکارسازی فرآیندهای اطلاعاتی که اساس یک خانه هوشمند را تشکیل می دهند انجام می دهد: دریافت و پردازش داده های حسی، صدور اقدامات کنترلی بسته به منطق اساسی. هدف از فرآیند سرور تعامل با تجهیزات خانه هوشمند، اجرای قوانین منطقی تولید، دریافت و پردازش دستورات از رابط گرافیکی و ابر است. فرآیند سرور در کنترلر خانه هوشمند در نظر گرفته شده به عنوان یک برنامه چند رشته ای توسعه یافته در C ++ پیاده سازی شده و به عنوان یک سرویس جداگانه راه اندازی شده است. systemd سیستم عامل لینوکس راسپبین.

بلوک های اصلی فرآیند سرور عبارتند از:

  1. مدیر پیام؛
  2. سرور دوربین IP;
  3. سرور دستگاه Z-Wave;
  4. سرور قوانین منطقی تولید;
  5. پایگاه داده پیکربندی کنترل کننده و بلوک قوانین منطقی؛
  6. سرور API RESTful برای تعامل با رابط گرافیکی.
  7. کلاینت MQTT برای تعامل با ابر.

بلوک‌های فرآیند سرور به‌عنوان جریان‌های جداگانه پیاده‌سازی می‌شوند، اطلاعات بین آنها به شکل پیام‌هایی در قالب JSON (یا ساختارهای داده‌ای که این قالب را در حافظه پردازش نشان می‌دهند) منتقل می‌شوند.

خانه هوشمند ابری. بخش 1: کنترل کننده و سنسورها

جزء اصلی فرآیند سرور است مدیر پیام، که پیام های JSON را به تمام بلوک های فرآیند سرور هدایت می کند. انواع فیلدهای اطلاعاتی در پیام JSON و مقادیری که می توانند بگیرند در جدول ذکر شده است:

نوع وسیله
پروتکل
نوع پیام
وضعیت دستگاه
فرمان

دوربین
onvif
داده های حسگر
on
پخش جریانی (روشن/خاموش)

حسی
موج
فرمان
خاموش
ضبط (روشن/خاموش)

مؤثر
MQTT
قانون تجارت منطق
پخش جریانی (روشن/خاموش)
دستگاه (افزودن/حذف)

منطق تجارت
configurationData
ضبط (روشن/خاموش)

بلوتوث
وضعیت دستگاه
خطا

فای

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 دستورات را از رابط کاربری گرافیکی و فضای ابری دریافت کند، باید قانون زیر را اضافه کنید:

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

اگر شرایط مشخص شده در پیشین پس قوانین (سمت چپ) درست هستند دارای اهمیت (سمت راست) قوانین، و کنترل کننده به بدنه پیام JSON دسترسی پیدا می کند. پیشین از عملگرهای منطقی پشتیبانی می کند که جفت های کلید-مقدار JSON را با هم مقایسه می کنند:

  1. برابر است با "برابر"؛
  2. برابر با "not_equal" نیست.
  3. کمتر از "کمتر"؛
  4. بیشتر "بزرگتر"؛
  5. کمتر یا مساوی با "کمتر_یا_برابر"؛
  6. بزرگتر یا مساوی "بزرگتر_یا_برابر".

نتایج مقایسه را می توان با استفاده از عملگرهای جبر بولی به هم مرتبط کرد:

  1. و و"؛
  2. یا "یا"؛
  3. نه نه".

بنابراین، با نوشتن عملگرها و عملوندها در نماد لهستانی، می توان شرایط نسبتاً پیچیده ای را با تعداد زیادی پارامتر ایجاد کرد.

دقیقاً همان مکانیسم، بر اساس پیام‌های JSON و قوانین تولید در قالب JSON، در بلوک سرور منطق تولید برای نمایش دانش و انجام استنتاج با استفاده از داده‌های حسگر از سنسورهای خانه هوشمند استفاده می‌شود.

کاربر با استفاده از یک اپلیکیشن موبایل سناریوهایی را ایجاد می کند که بر اساس آن یک خانه هوشمند باید کار کند. مثلا: "اگر سنسور باز کردن درب جلو فعال شد، چراغ راهرو را روشن کنید.". این برنامه شناسه سنسورها (سنسور باز) و محرک ها (سوکت هوشمند یا لامپ هوشمند) را از پایگاه داده می خواند و یک قانون منطقی با فرمت JSON ایجاد می کند که به کنترل کننده خانه هوشمند ارسال می شود. این مکانیزم در مقاله سوم چرخه ما با جزئیات بیشتری مورد بحث قرار خواهد گرفت، جایی که ما در مورد برنامه مشتری برای مدیریت خانه هوشمند صحبت خواهیم کرد.

مکانیسم منطق تولید که در بالا مورد بحث قرار گرفت با استفاده از کتابخانه اجرا می شود Rapid JSON - تجزیه کننده 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)جایی که کنترلر قانون یک شی حاوی منطق عملگرهای بولی و عملگرهای مقایسه است. sRuleId - یک شناسه قانون منحصر به فرد، که به لطف آن امکان ذخیره و ویرایش قوانین در داخل پایگاه داده کنترلر خانه هوشمند وجود دارد. m_pActions - آرایه ای با نتایج استنتاج: پیام های JSON حاوی پیامدهایی از پایه قوانین و ارسال بیشتر به مدیر پیام تا رشته های مشترک بتوانند آنها را پردازش کنند.

عملکرد RapidJSON با عملکرد قابل مقایسه است strlen()، و حداقل منابع مورد نیاز سیستم به این کتابخانه اجازه می دهد تا در دستگاه های تعبیه شده استفاده شود. استفاده از پیام ها و قوانین منطقی در فرمت JSON به شما این امکان را می دهد که یک سیستم تبادل اطلاعات منعطف را بین تمام اجزای کنترل کننده خانه هوشمند پیاده سازی کنید.

سنسورها و محرک های Z-Wave

مزیت اصلی خانه هوشمند این است که می تواند به طور مستقل پارامترهای مختلف محیط خارجی را اندازه گیری کند و بسته به موقعیت عملکردهای مفیدی را انجام دهد. برای انجام این کار، سنسورها و محرک ها به کنترلر خانه هوشمند متصل می شوند. در نسخه فعلی، اینها دستگاه های بی سیم هستند که تحت پروتکل کار می کنند Z- موج در فرکانس اختصاصی 869 مگاهرتز برای روسیه برای کار آنها، آنها در یک شبکه مش ترکیب می شوند که در آن تکرار کننده های سیگنال به منظور افزایش منطقه پوشش وجود دارد. این دستگاه ها همچنین دارای یک حالت صرفه جویی در مصرف انرژی هستند - آنها بیشتر وقت خود را در حالت خواب می گذرانند و فقط زمانی که وضعیت آنها تغییر می کند اطلاعات را ارسال می کنند که می تواند به طور قابل توجهی عمر باتری داخلی را افزایش دهد.

خانه هوشمند ابری. بخش 1: کنترل کننده و سنسورها

امروزه تعداد زیادی دستگاه Z-Wave مختلف در بازار وجود دارد. به عنوان نمونه به چند مورد توجه کنید:

  1. سوکت هوشمند Zipato PAN16 می تواند پارامترهای زیر را اندازه گیری کند: مصرف برق (کیلووات ساعت)، توان (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 ارسال می شود که کنترل کننده شبکه Z-Wave USB را در حالت ویژه ای برای افزودن دستگاه ها قرار می دهد. بعد، در دستگاه 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 یا فلش کنترلر خانه هوشمند.

خانه هوشمند ابری. بخش 1: کنترل کننده و سنسورها

برای برقراری ارتباط با دوربین ها، رمزگذاری، پردازش و ضبط جریان های ویدئویی در فرآیند سرور، از توابع کتابخانه استفاده می شود. FFmpeg به 4.1.0.

در آزمایش تست عملکرد، 3 دوربین به کنترلر متصل شد:

  1. HiWatch DS-I114W (رزولوشن - 720p، فرمت فشرده سازی - H.264، نرخ بیت - 1 مگابیت بر ثانیه، صدا G.711 mu-Law)؛
  2. میکرودیجیتال MDC-M6290FTD-1 (رزولوشن - 1080p، فرمت فشرده سازی - H.264، نرخ بیت - 1 مگابیت بر ثانیه، بدون صدا)؛
  3. داهوا DH-IPC-HDW4231EMP-AS-0360B (رزولوشن - 1080p، فرمت فشرده سازی - H.264، نرخ بیت - 1.5 مگابیت بر ثانیه، صدای AAC).

خانه هوشمند ابری. بخش 1: کنترل کننده و سنسورها

هر سه جریان به طور همزمان به ابر خروجی می‌شدند، صدا تنها از یک دوربین رمزگذاری شد و ضبط بایگانی محلی غیرفعال شد. بار CPU حدود 5٪ بود، استفاده از RAM 32 مگابایت (در هر فرآیند)، 56 مگابایت (در کل با سیستم عامل).

بنابراین، حدود 20 تا 30 دوربین را می توان به کنترل کننده خانه هوشمند متصل کرد (بسته به وضوح و میزان بیت) که برای یک سیستم نظارت تصویری یک کلبه سه طبقه یا یک انبار کوچک کافی است. در کارهایی که به کارایی بالا نیاز است، می توانید از یک نت تاپ با پردازنده چند هسته ای اینتل و لینوکس Debian Sarge استفاده کنید. کنترل کننده در حال حاضر در حال انجام عملیات آزمایشی است و داده های مربوط به عملکرد کار آن مشخص خواهد شد.

تعامل با ابر

خانه هوشمند ابری داده های کاربر (سنجش های ویدئویی و حسگر) را در فضای ابری ذخیره می کند. معماری ذخیره سازی ابری در مقاله بعدی مجموعه ما با جزئیات بیشتری مورد بحث قرار خواهد گرفت. حالا بیایید در مورد رابط برای انتقال پیام های اطلاعاتی از کنترلر خانه هوشمند به فضای ابری صحبت کنیم.

وضعیت دستگاه های متصل و اندازه گیری حسگرها از طریق پروتکل منتقل می شود MQTTکه به دلیل سادگی و صرفه جویی در مصرف انرژی اغلب در پروژه های اینترنت اشیا استفاده می شود. MQTT از مدل مشتری-سرور استفاده می کند که در آن مشتریان در موضوعات خاصی در کارگزار مشترک می شوند و پیام های خود را منتشر می کنند. کارگزار طبق قوانین تعیین شده توسط سطح QoS (کیفیت خدمات) برای همه مشترکین پیام ارسال می کند:

  • QoS 0 - حداکثر یک بار (بدون تضمین تحویل)؛
  • QoS 1 - حداقل یک بار (با تایید تحویل)؛
  • QoS 2 - دقیقا یک بار (با تایید اضافی تحویل).

در مورد ما، کارگزار MQTT است پشه گرفتگی. نام موضوع شناسه منحصر به فرد کنترلر خانه هوشمند است. کلاینت MQTT در داخل فرآیند سرور در این موضوع مشترک می شود و پیام های JSON که از توزیع کننده پیام ارسال می شود را به آن ترجمه می کند. و بالعکس، پیام‌های کارگزار MQTT به مدیر پیام ارسال می‌شوند، که سپس آنها را به مشترکین خود در فرآیند سرور چندگانه می‌کند:

خانه هوشمند ابری. بخش 1: کنترل کننده و سنسورها

برای ارسال پیام در مورد وضعیت کنترلر خانه هوشمند از مکانیسم پیام های ذخیره شده استفاده می شود. پیام های حفظ شده پروتکل MQTT این به شما امکان می دهد در صورت قطع برق، لحظه های اتصال مجدد را به درستی ردیابی کنید.

مشتری MQTT بر اساس پیاده سازی کتابخانه توسعه یافته است کسوف پاهو در C++

جریان‌های رسانه‌ای H.264 + AAC از طریق پروتکل RTMP به ابر ارسال می‌شوند، جایی که خوشه‌ای از سرورهای رسانه مسئولیت پردازش و ذخیره‌سازی آنها را بر عهده دارند. برای توزیع بهینه بار در خوشه و انتخاب کمترین بارگذاری سرور رسانه، کنترل‌کننده خانه هوشمند یک درخواست اولیه از متعادل‌کننده بار ابری ارائه می‌کند و تنها پس از آن جریان رسانه را ارسال می‌کند.

نتیجه

این مقاله یک پیاده‌سازی خاص از یک کنترل‌کننده خانه هوشمند مبتنی بر میکرو رایانه Raspberry Pi 3 B+ را در نظر گرفت که می‌تواند اطلاعات را دریافت، پردازش و تجهیزات را با استفاده از پروتکل Z-Wave کنترل کند، با دوربین‌های IP با استفاده از پروتکل ONVIF تعامل داشته باشد، و همچنین داده‌ها را مبادله کند. با سرویس ابری از طریق پروتکل های MQTT و RTMP فرمان می دهد. یک موتور منطق تولید بر اساس مقایسه قوانین منطقی و حقایق ارائه شده در قالب JSON توسعه یافته است.

اکنون کنترل کننده خانه هوشمند در چندین مرکز در مسکو و منطقه مسکو در حال عملیات آزمایشی است.

در نسخه بعدی کنترلر، قرار است دستگاه هایی از انواع دیگر (RF، بلوتوث، وای فای، سیمی) متصل شود. برای راحتی کاربران، روش اتصال سنسورها و دوربین های IP به برنامه تلفن همراه منتقل می شود. همچنین ایده هایی برای بهینه سازی کد فرآیند سرور و انتقال نرم افزار به سیستم عامل وجود دارد openwrt. این باعث صرفه جویی در یک کنترلر جداگانه می شود و عملکرد یک خانه هوشمند را به یک روتر معمولی خانگی منتقل می کند.

منبع: www.habr.com

اضافه کردن نظر