كيفية بناء نظام التشغيل الآلي للمنزل الأكثر قوة وأمانًا

في هذه المقالة ، سأناقش كيف أنشأت نظام أتمتة المنزل الذكي باستخدام Angular و Node.js على Raspberry Pi دون الاعتماد على أي خدمات سحابية خارجية.

مقدمة

على مدار الأيام القليلة الماضية ، أمضيت بعض الليالي في تصميم وتطوير نظام أتمتة منزلية يعتمد على JavaScript ، باستخدام Angular و Node.js. ومثل أي مشروع آخر ، تضمن التخطيط بعض البحث العميق على الإنترنت.

اتضح أن هناك الكثير من الأسماك في البحر - الكثير من الحلول حول كيفية تنفيذ نظام التشغيل الآلي للمنزل. يقدم البعض خدمات مدفوعة في "السحابة" بينما يشرح البعض الآخر كيفية إنشاء خدماتك الخاصة باستخدام تقنية تسمى MQTT.

لم يكن أي من الحلول منطقيًا بالنسبة لي. كانت جميع الخيارات إما باهظة الثمن أو بها تطبيقات غير ملائمة أو حتى عيوب أمنية.

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

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

لماذا لم أكن مقتنعًا باستخدام MQTT ، أو بأي من الحلول التي وجدتها على الإنترنت؟ سببان:

  1. بينما تبدو تقنية MQTT ملائمة جدًا لأجهزة إنترنت الأشياء ، ما زلت أعتقد أنها غير ضرورية. يعمل النظام الذي سأعرضه في البرنامج التعليمي التالي في نفس الوسيط الذي تعيش فيه أجهزة إنترنت الأشياء. جميع المزايا التي تتمتع بها MQTT لكونها "سريعة" وامتلاكها "نطاق ترددي منخفض" تصبح غير ذات صلة. بالإضافة إلى ذلك ، هناك كل المتاعب التي ينطوي عليها تنفيذه وكل النفقات الإضافية مع حزم npm الإضافية المطلوبة للعمل في بيئة JavaScript. بدلاً من ذلك ، سأستخدم مكتبات JavaScript و Node.js عامة فقط ، لا أكثر!
  2. ماذا عن الجزء الأمني؟ حسنًا ، لست من أشد المعجبين بـ "السحابة" أو الحوسبة السحابية بشكل عام. في بعض الحالات يمكن أن يكون مفيدًا للغاية ، لكنه في معظم الحالات غير ضروري. فكر في الأمر: لماذا لديك خدمة مطلوبة للتحكم في أجهزتك المنزلية ليتم استضافتها في مكان آخر في "السحابة" وليس في شبكتك الخاصة؟

قد يعتقد المرء أن "السحابة" توفر القدرة على الوصول إلى أجهزتك المنزلية من أي مكان في العالم عبر الإنترنت.

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

هذا عندما "تم النقر عليه" بالنسبة لي ، وفكرت في استضافة النظام بأكمله على Raspberry Pi والاحتفاظ به في شبكتي المحلية.

التكنولوجيا

  1. البرنامج: السبب في أنني اخترت Angular و Node.js هو أنهما يعتمدان على JavaScript وأنا على دراية به بالفعل. بعد كل شيء ، كنت أرغب في تصميم وتطوير تطبيق ويب تقدمي يتواصل مع أجهزة إنترنت الأشياء الخاصة بي عبر HTTP - وقدمت JavaScript جميع الوظائف التي أحتاجها.
  2. الأجهزة: يعمل النظام مع وحدات التحكم الدقيقة مثل Arduino Uno / Mega / Du / MKR1000 و Adafruit HUZZAH CC3000 وأي متحكم آخر مزود باتصال WiFi. أنا أستخدم ESP8266 كمكون أساسي لنظام التشغيل الآلي للمنزل. إنها شريحة WiFi منخفضة التكلفة مزودة بإمكانية تحكم دقيق. لديها كل ما أحتاجه وبسعر رخيص! أخيرًا ، نحتاج إلى استضافة النظام في مكان ما على شبكتنا المحلية - فما هو أفضل من Raspberry Pi؟

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

وانشاء

أقدر أن الأمر سيستغرق حوالي 40 دقيقة لإنهاء هذا الإعداد بالكامل بالإضافة إلى أي وقت يقضيه عبر الإنترنت في البحث عن حلول لأخطاء التثبيت.

ما المطلوب؟

مطلوب Raspberry Pi. في المثال الخاص بي ، أستخدم Raspberry Pi 3 ، لكن يجب أن يعمل مع معظم الإصدارات. المكونات المطلوبة هي:

  1. لوحة Raspberry Pi
  2. بطاقة MicroSD (يوصى بفئة 10 بسعة 16 جيجابايت أو أعلى)
  3. قارئ بطاقة USB MicroSD أو محول بطاقة SD
  4. شاشة HDMI ولوحة مفاتيح USB (مطلوبان مؤقتًا فقط للتمهيد الأول لـ Raspberry Pi)
  5. كابل إيثرنت (غير مطلوب لـ Raspberry Pi 3 لأنه مزود بشبكة WiFi)

تثبيت نظام التشغيل Raspbian OS على Raspberry Pi

Raspbian هو نظام تشغيل مجاني يعتمد على Debian Linux ، وهو محسّن لـ Raspberry Pi.

أوصي بإصدار "LITE" مقطوع الرأس. لا يحتوي على بيئة سطح مكتب أو أي واجهة مستخدم رسومية ، ويمكن الوصول إليه عن بُعد من جهاز كمبيوتر أو جهاز موجود على نفس الشبكة عبر SSH. نحن نبقي الأمور بسيطة لأن هذه هي الطريقة الوحيدة التي سنصل بها إلى Raspberry Pi. يحتوي الإصدار LITE على جميع الوظائف التي نبحث عنها.

  1. قم بتنزيل أحدث صورة لـ Raspbian من موقع Raspberry Pi الرسمي.
  2. قم بتحويل صورة نظام التشغيل Raspbian OS إلى بطاقة SD باستخدام Etcher أو أي برنامج آخر لنسخ صور نظام التشغيل من اختيارك.

إعداد Raspberry Pi

لتجهيز Raspberry Pi للتمهيد ، نحتاج إلى:

  1. أدخل بطاقة MicroSD في Raspberry Pi
  2. قم بتوصيل لوحة مفاتيح USB وكابل HDMI
  3. قم بتوصيل كابل Ethernet أو إذا كان لديك Raspberry Pi 3 وتريد استخدام WiFi ، فيجب عليك إعداد الشبكة في القسم التالي

عندما ينتهي Raspberry Pi من التمهيد ، قم بتسجيل الدخول باستخدام اسم المستخدم وكلمة piالمرورraspberry

تمكين WiFi والاتصال بالشبكة

تخطي هذه الخطوة إذا اخترت التوصيل بكابل إيثرنت.

  1. افتح ملف التكوين "wpa-supplicant"
$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

2. أضف ما يلي في أسفل الملف أثناء إضافة اسم wifi وكلمة المرور:

network={
 ssid="your_networks_name" psk="your_networks_password"
}

3. اضغط Ctrl+Xلحفظ الرمز. مع تأكيد Yذلك الحينEnter

4. أعد تشغيل Raspberry Pi باستخدام الأمر التالي:

$ sudo reboot

تفعيل SSH وتغيير اسم المستخدم وكلمة المرور

الآن بعد أن تم توصيل Raspberry Pi بالإنترنت ، يوصى بتغيير كلمة المرور الافتراضية.

  1. افتح أداة تكوين Raspberry Pi وانقر على الخيار الثاني "تغيير كلمة مرور المستخدم" واتبع التعليمات
$ sudo raspi-config

2. حدد الخيار 5 "Interfacing Options" ثم قم بتفعيل SSH

3. إعادة تشغيل Raspberry Pi. عندما ينتهي الأمر ، يكون لديك SSH ممكّنًا ويكون جاهزًا للوصول إليه عن بُعد من كمبيوتر سطح المكتب

$ sudo reboot

تكوين الوصول عن بعد إلى Raspberry Pi

الآن ، أخيرًا ، الجزء عندما نقوم بتثبيت البرنامج المطلوب على Raspberry Pi. يمكن تنفيذ هذا الجزء مباشرة على Pi من خلال الجهاز باستخدام شاشة HDMI ولوحة مفاتيح USB. للراحة - وبما أننا نقوم بتمكين اتصال SSH عن بُعد - سنقوم بالاتصال من بيئة سطح مكتب أخرى. هذه هي أفضل وأسهل طريقة للوصول إلى Pi والتحكم فيه عن بُعد كلما دعت الحاجة إلى تغييرات وتكوينات.

لذلك ، بشكل أساسي ، هذه هي الطريقة التي يمكنك بها الوصول إلى واجهة سطر الأوامر الخاصة بـ Raspberry Pi عن بُعد من كمبيوتر آخر أو أي جهاز على نفس الشبكة باستخدام SSH. ويمكن أن يتم ذلك بطريقتين:

  1. باستخدام موجه الأوامر أو PowerShell (أنا أستخدم Windows على كمبيوتر سطح المكتب) ، استبدل اسم المستخدم وعنوان IP الخاصين بك
$ ssh [email protected]

إذا كنت لا تعرف عنوان IP ، فاكتب " hostname -I"في سطر أوامر Raspberry Pi.

2. الطريقة الثانية هي استخدام برنامج عميل مثل PuTTY أو أي برنامج آخربرنامج SSH للعميل يعمل. إليك دليل سهل لاستخدام PuTTY.

تثبيت البرنامج المطلوب على Raspberry Pi

قبل تثبيت أي شيء ، يوصى بتحديث نظام التشغيل وحزم Raspberry Pi. سيؤدي القيام بذلك بانتظام إلى إبقائه محدثًا.

  1. قم بتحديث قائمة حزم النظام باستخدام الأمر التالي:
$ sudo apt-get update

2. قم بترقية جميع الحزم المثبتة إلى أحدث إصدار لها:

$ sudo apt-get dist-upgrade

3. قم بتنزيل أحدث إصدار من Node.js وتثبيته:

// To download$ curl -sL //deb.nodesource.com/setup_8.x | sudo -E bash -
// To install$ sudo apt-get install -y nodejs
// Check if the installation was successful:$ node -v

4. قم بتثبيت Angular CLI عالميًا:

$ npm install -g @angular/cli

5. قم بتثبيت نظام التحكم في الإصدار Git:

$ sudo apt-get install git

تثبيت قاعدة البيانات (MongoDB)

نحتاج إلى قاعدة بيانات لتخزين المستخدمين المسجلين وبيانات اعتمادهم. فيما يلي الخطوات المطلوبة:

  1. قم بتثبيت MongoDB
$ sudo apt-get install mongodb

2. ابدأ عملية MongoDB

$ sudo service mongodb start

3. ابدأ mongo Shell

$ mongo

3. إنشاء قاعدة بيانات تسمى "smarthaus"

$ use smarthaus

في MongoDB ، قاعدة البيانات الافتراضية هي الاختبار. إذا لم تقم بإنشاء أي قاعدة بيانات ، فسيتم تخزين المجموعات في قاعدة بيانات الاختبار.

تركيب سمارت هاوس

1. تحقق من دليل العمل الحالي باستخدام هذا الأمر:

$ pwd
/* It will probably print "/home/pi" where "pi" is the current user directory */

يوصى باستنساخ مستودع المشروع ضمن دليل مستخدم pi ولكن يمكنك التنقل في مكان آخر إذا كنت متأكدًا.

2. استنساخ المستودع من:

$ git clone //github.com/ameer157/smarthaus.git

تأكد من التنقل داخل الدليل باستخدام:

$ cd smarthaus

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

3. تثبيت جميع الحزم المطلوبة للمشروع:

$ npm install

بدء تشغيل خادم Node.js

قبل بدء الخادم ، نحتاج إلى إنشاء المشروع باستخدام أداة Angular CLI. وأخيرًا ، نقوم بتهيئة Raspberry Pi بحيث يقوم بتشغيل الخادم كلما تم تشغيله.

  1. بناء المشروع باستخدام:
$ ng build --prod

2. قم بتحرير rc.localالملف باستخدام nano:

$ sudo nano /etc/rc.local

3. أضف ما يلي في السطر قبل exit 0الخروج ثم احفظ الملف:

su pi -c 'cd /home/pi/smarthaus/backend && sudo node server.js > log.txt &'

خادم Node.js جاهز الآن! سيتم تشغيله على كل نظام تمهيد ويحفظ سجلات الدخول ضمن نفس الدليل في ملف “log.txt”.

لنقم بتشغيله الآن ونرى ما إذا كان يعمل باستخدام هذا الأمر:

$ sudo node server

يمكن الوصول إلى النظام الآن من أي جهاز على شبكتك عبر عنوان IP الخاص بـ Raspberry Pi.

يرجى المضي قدما وتقسيم هذا المشروع والمشاركة في تطوير الأجزاء المفقودة؟

النهاية

لقد حصلنا لأنفسنا على نظام أتمتة منزلي يعمل بأمان على Raspberry Pi في شبكتنا المحلية دون استخدام "السحابة" أو خادم شخص آخر.

جهاز Raspberry Pi جالس بجوار Fingbox وجهاز التوجيه في غرفة المعيشة؟

أتمنى أن تكون قد استمتعت بالقراءة ،

من فضلك اتبعو حصة للأشياء أكثر التكنولوجيا ؟؟