نظام أمان منزلي الصنع قائم على منتجات للمنزل الذكي من Nootekhnika

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

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

1. بيان المشكلة


النظام الذي أصممه يجب أن:

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

أعني بواجهات تسليح مختلفة:

  • تسليح ونزع سلاحها بمساعدة مفاتيح الراديو Nootehnika ؛
  • تسليح ونزع سلاح عبر واجهة الويب لإدارة المنزل الذكي.

2. وصف الحل


لحل هذه المشكلة ، استخدمت الأجهزة التالية:

  • مستشعران للحركة 112 ؛
  • استقبال الإشارات من أجهزة الاستشعار والمفاتيح RX2164 ؛
  • مفتاح PU311-2 ؛
  • 3VI nettop (بناءً على معالج Atom D525) ؛
  • كاميرا IP الصينية بدون اسم.

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

لذلك ، لوصف النظام. على 3VI nettop ، يتم تثبيت Debian Linux 7 ، وبرنامج Simple Event Correlation (SEC) ومجموعة من أدوات لينكس لإدارة أجهزة Nootechnics من Oleg Artamonov .

يتم تثبيت أجهزة استشعار الحركة (PM112) في الدهليز أمام الباب الأمامي وفي الممر (داخل الشقة). جهاز الاستقبال RX2164 USB متصل بالقاعدة. يستقبل جهاز الاستقبال الإشارات من أجهزة الاستشعار والمفاتيح ، كما تقوم أدوات إدارة جهاز Nootehnics (المشار إليها فيما يلي باسم أدوات Noolite) المثبتة على nettop بإرسال الإشارات المستلمة إلى سجل النظام. تقرأ SEC الملف الذي تتم كتابة بيانات سجل النظام فيه وتعالجه وفقًا للقواعد المكونة. نتيجة للمعالجة ، يتم تنفيذ إجراءات مثل استقبال الصور من كاميرا IP وإرسال رسائل البريد الإلكتروني.

هناك طريقتان لتمكين (وتعطيل) وضع الأمان:

  1. عن طريق الضغط على زر على مفتاح PU311-2 ؛
  2. عن طريق الضغط على زر في واجهة الويب لنظام التحكم في المنزل الذكي.

ويظهر في الشكل 1 رسم تخطيطي يوضح عمل النظام.



الشكل 1 - رسم تخطيطي يوضح عمل النظام

3. تثبيت أجهزة النظام


بالنسبة لهذا النظام ، أستخدم نفس مستشعري الحركة ، اللذين وصفتهما في القسم 4 من المقالة .

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

يتم تثبيت كاميرا IP خارج الشقة في الدهليز تحت السقف. يقع الباب الأمامي ومساحة 1.5 متر أمامها في مجال رؤيتها.

يتم تثبيت مفتاح PU311-2 داخل الخزانة حتى لا تجذب العين ولا يتم الضغط عليه عن طريق الخطأ.

يوجد nettop 3VI مع مستقبل إشارة RX2164 بالقرب من الميزانين لتوفير استقبال ثابت للإشارات من أجهزة الاستشعار والمفاتيح.

يظهر الرسم التخطيطي لتركيب المعدات في الشكل 2.



الشكل 2 - رسم تخطيطي لتركيب المعدات

4. إعداد البرنامج


يتضمن إعداد البرنامج:

  • إنشاء أدوات Noolite لاستقبال الإشارات من أجهزة الاستشعار والمفاتيح ؛
  • وضع قواعد SEC للاستجابة للإشارات القادمة من أجهزة الاستشعار والمفاتيح ؛
  • إنشاء برنامج نصي يستقبل صورة من الكاميرا وإرسال رسائل البريد الإلكتروني ؛
  • إنشاء زر لتشغيل وإيقاف تشغيل النظام في واجهة الويب.

تكوين أدوات Noolite لاستقبال الإشارات من أجهزة الاستشعار والمفاتيح


لكي يبدأ جهاز استقبال RX2164 في استقبال الإشارات من مستشعر أو مفتاح تحويل ، من الضروري "ربطه". للقيام بذلك ، نضغط على الزر "ربط" على المستشعر نفسه (على الجانب الخلفي) ، وننفذ على الكمبيوتر الذي يتصل به جهاز الاستقبال الأمر: nooliterxcfg –bind <رقم القناة من 1 إلى 64>. وبالمثل ، فإن المفتاح مرتبط بجهاز الاستقبال.

في حالتي ، تم توصيل المستشعر في الدهليز بالقناة 3 ، والمستشعر الموجود في الشقة بالقناة 2 وزري التبديل إلى القناتين 1 و 4 ، على التوالي.

لتلقي إشارات من أجهزة الاستشعار في الوقت الحقيقي ، تحتاج إلى تشغيل الأداة المساعدة nooliterx في وضع daemon. تم وصف عملية تثبيت الأدوات المساعدة وإعداداتها من قبل المطور نفسه (Oleg Artamonov في وثائق المرافق) وأيضًا بواسطتي في القسم 4 من المقالة (LINK). نتيجة لذلك ، نحصل على سجل من الإشارات من أجهزة الاستشعار والمفاتيح في سجل النظام. يبقى فقط لتكوين تسجيل هذه الرسائل في ملف في سجل النظام نفسه ويتم الحصول على ما يلي في الإخراج (عينة رسائل من أجهزة الاستشعار):

Jan 7 15:47:39 vmon nooliterx[23022]: Received: status 133, channel 3, command 25, format 1, data 2 0 0 0 Jan 7 18:43:58 vmon nooliterx[23022]: Received: status 135, channel 2, command 25, format 1, data 1 0 0 0 

تبدو عينات الرسائل من المفاتيح (عند الضغط على زر عليها) مختلفة قليلاً:

 Jan 5 22:29:43 vmon nooliterx[23022]: Received: status 26, channel 1, command 4, format 0, data 1 0 0 0 Jan 5 22:27:55 vmon nooliterx[23022]: Received: status 145, channel 4, command 4, format 0, data 1 0 0 0 

تكوين قواعد SEC لتشغيل الإشارات القادمة من أجهزة الاستشعار والمفاتيح.


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

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

في SEC ، قمت بتكوين 4 قواعد. 2 - لمعالجة الأحداث من مستشعرات الحركة واثنين - لمعالجة الإشارات من زري المفتاح. القواعد موجودة في /etc/sec.conf

القاعدة 1: معالجة الإشارة من مستشعر الحركة في الدهليز (المستشعر متصل بالقناة 3)

 type=SingleWithSuppress ptype=RegExp pattern=\w+\s+\d+\s+\d+\:\d+\:\d+\s+\w+\s+nooliterx\S+\s+Received\:\s+status\s+\d+,\s+channel\s+(3),\s+command\s+25.* desc=Motion sensor frontdoor $1 triggered action=shellcmd (/usr/local/smarthome/security/send_photo_alert.sh $1); event %s window=60 

تم تصميم نوع هذه القاعدة - "SingleWithSurpress" - للرد فقط على أول حدث تم تسجيله خلال الفاصل الزمني المحدد بواسطة معلمة "window" بالثواني. على سبيل المثال يعني هذا الإعداد أن القاعدة لن تعمل أكثر من مرة واحدة في الدقيقة ، ولن يتم تشغيل الإجراء المحدد في معلمة "الإجراء" أكثر من مرة واحدة في الدقيقة. يتم ذلك حتى في حالة تعثر شخص ما حول الباب لعدة دقائق لعدم إرسال بريد إلكتروني غير مرغوب فيه بأطنان من الرسائل. في معلمة "النمط" ، يتم كتابة تعبير عادي ، يتم بموجبه البحث عن أحداث من المستشعر المرتبط بالقناة 3. ويتم تحديد إجراءين في معلمة "action" - shellcmd ، التي تقوم بتشغيل البرنامج النصي وتمريرها إلى معلمة مستخرجة من التعبير العادي (في هذا حالة تمثل الرقم "3") ، والإجراء الثاني "حدث٪ s" الذي يعمل على نقل التعبير المسجل في المعلمة "desc" إلى قواعد أخرى ، وهو غير ضروري لتشغيل هذا النظام ويمكن حذفه. تشير المعلمة "desc" إلى معلومات الخدمة الإضافية التي تستخدمها القواعد الأخرى. لهذا النظام ، ليس من الضروري ويمكن إدخال البيانات التعسفية هناك.

القاعدة 2: معالجة الإشارة من مستشعر الحركة في الممر (المستشعر متصل بالقناة 2)

 type=SingleWithSuppress ptype=RegExp pattern=\w+\s+\d+\s+\d+\:\d+\:\d+\s+\w+\s+nooliterx\S+\s+Received\:\s+status\s+\d+,\s+channel\s+(2),\s+command\s+25.* desc=Motion sensor lobby $1 triggered action=shellcmd (/usr/local/smarthome/security/send_photo_alert.sh $1); event %s window=60 

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

القاعدة 3: معالجة الإشارة من زر التبديل المرتبط بالقناة 1

 type=single ptype=regexp pattern=\w+\s+\d+\s+\d+\:\d+\:\d+\s+\w+\s+nooliterx\S+\s+Received\:\s+status\s+\d+,\s+channel\s+(1),\s+command\s+4.* desc=switch guard mode online action=shellcmd (/bin/echo "online" > /usr/local/smarthome/security/status) 

هذه القاعدة أبسط - يتم تنشيطها لكل حدث يتطابق مع التعبير العادي المحدد في معلمة "النمط". كإجراء ، يكتب إلى ملف حالة النظام. يتم تحليل هذا الملف بواسطة برنامج نصي تم تشغيله بواسطة القاعدتين 1 و 2. إذا كانت الحالة "متصل" ، يتم تشغيل البرنامج النصي ؛ إذا كانت القيمة "غير متصل" ، فإن البرنامج النصي لا يعمل. المزيد عن هذا قليلا أكثر.

القاعدة 4: معالجة الإشارة من زر التبديل المرتبط بالقناة 4

 type=single ptype=regexp pattern=\w+\s+\d+\s+\d+\:\d+\:\d+\s+\w+\s+nooliterx\S+\s+Received\:\s+status\s+\d+,\s+channel\s+(4),\s+command\s+4.* desc=switch guard mode offline action=shellcmd (/bin/echo "offline" > /usr/local/smarthome/security/status) 

كل شيء مشابه للقاعدة 3 ، يتم تعيين الحالة فقط على "غير متصل".

نص برمجي يلتقط صورًا من الكاميرا ويرسل رسائل بريد إلكتروني


يتحقق النص البرمجي الذي أطلقته القاعدتان 1 و 2 من حالة النظام في ملف الحالة ، ويتوقف على قيمته ("متصل" أو "غير متصل") ، أو يقوم بتنفيذ الإجراءات التالية:

  • يتلقى صورة من كاميرا IP في الدهليز ويرسل بريدًا إلكترونيًا في حالة وجود جهاز استشعار في الدهليز ؛
  • يرسل رسالة إنذار في حالة وجود جهاز استشعار في الممر.

ما يلي هو نص البرنامج النصي. عند إدخاله ، يتلقى (من SEC) رقم القناة الذي يتصل به المستشعر ، ويتوقف على هذا الرقم وحالة النظام ، ويقوم ببعض الإجراءات.

 #!/bin/sh dir="/usr/local/smarthome/security" MAIL=$dir/mail.letter stat_file="$dir/status" dt=`date` if [ "$1" -eq 2 ] then if grep "online" $stat_file then cd $dir rm -f $dir/snapshot.cgi wget http://<IP  >/snapshot.cgi --user=<username> --password=<password> mpack -s "Someone at the door at $dt" $dir/snapshot.cgi d.shulinin@gmail.com fi elif [ "$1" -eq 3 ] then if grep "online" $stat_file then printf "Subject: Motion in the lobby spotted at $dt\n" > $MAIL /usr/sbin/ssmtp email@gmail.com < $MAIL fi else echo "no legitimate input detected" fi 

للحصول على صور من كاميرا IP الخاصة بي ، أستخدم wget وخط مثل هذا:

 wget http://<IP  >/snapshot.cgi --user=<username> --password=<password> 

بالنسبة لكاميرات IP الأخرى ، قد تحتاج إلى البحث عن خيارات أخرى ، لا يوجد حل واحد. RTFM للكاميرا ، كما يقولون.

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

تبدو كما يلي:

 <?php if (isset($_POST['button9_on'])) { exec('/bin/echo "online" > /usr/local/smarthome/security/status'); } ?> <?php if (isset($_POST['button9_off'])) { exec('/bin/echo "offline" > /usr/local/smarthome/security/status'); } ?> <p><h2>Guard mode</h2></p> <form method="post"> <p> <button name="button9_on">ON</button> <button name="button9_off">OFF</button> </p> 

كل شيء بسيط هنا - عند النقر على زر "تشغيل" ، يتم كتابة "عبر الإنترنت" في ملف الحالة ، عند النقر على "إيقاف" - "غير متصل".

5. الخلاصة


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

عينة رسائل البريد الإلكتروني تبدو مثل هذا (انظر الشكل 3). الصور نفسها ، بالطبع ، أكبر وتتوسع عندما تنقر عليها بالماوس.


الشكل 3 - مثال بريد إلكتروني مع صورة

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

على المدى القصير ، أريد أيضًا عرض الحالة الحالية للنظام (نشط / غير نشط) في واجهة الويب.

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


All Articles