چگونه با Siri، یک لامپ را کنترل کنیم؟

چگونه با Siri، یک لامپ را کنترل کنیم؟


HomeKit، فریمورکی برای ارتباط و کنترل ابزارهای جانبی متصل به شبکه در یک خانه است که از کنترل صوتی به وسیله Siri نیز پشتیبانی می کند. در واقع کاربران می توانند از طریق Siri دستورات خود را اعلام کرده و با دستگاه های هوشمند موجود در اطراف خود کار کنند.


متاسفانه، تمام وسایل هوشمند با این ابزار سازگار نیستند. با این حال، این پروتکل مهندسی معکوس شده و در نتیجه یک شبیه سازی برای HomeKit API در دسترس است و یا به بیان ساده تر، شما می توانید دستگاه های HomeKit جعلی ایجاد کنید و در نتیجه Siri، آنها را هم مانند هر لوازم جانبی HomeKit رسمی، کنترل خواهد کرد.
در این پست قصد داریم، یک لامپ قابل کنترل از طریق Wi-Fi ایجاد کنیم و آن را با Siri مدیریت کنیم. لوازم مورد نیاز به صورت زیر است:
-    رزبری پای که در اینجا از رزبری پای 2 استفاده شده است.
-    یک واسط MQTT بر روی رزبری پای نصب شده است. می توان از یک سرور MQTT نیز استفاده کرد ولی از آنجاییکه در اینجا نیاز به یک پای داریم، از واسط نصب شده بر روی آن استفاده می کنیم.
-    NodeMCU v2 سازگار با آردوینو
-    LEDهای نئو پیکسل

نصب یک واسطه برای HomeKit
در ابتدا باید برنامه NodeJS را که HAP-NodeJS نامیده می شود بر روی رزبری پای نصب کرد. با این کار در واقع پلی بین درخواست های HomeKit و دستگاه های WiFi زده می شود. در حال حاضر این پل یا واسطه را با یک دستگاه جانبی تنظیم می کنیم ولی شما می توانید به هر تعداد دستگاه را نیز به آن اضافه کنید.
در ابتدا از طریق ترمینال یا یک نشست SSH، سیستم را به صورت کامل با استفاده از دستورات زیر ارتقا می دهیم.

sudo apt-get update
sudo apt-get upgrade

البته بعد از نصب برنامه ها نیز شاید نیاز باشد که ارتقا دوباره صورت پذیرد. حال تعدادی از بسته های مرکزی مورد نیاز را نصب می کنیم.

 

sudo apt-get install npm git-core libnss-mdns libavahi-compat-libdnssd-dev

حال، باید آخرین نسخه NodeJS را نصب کنیم. این کار را می توان با دستور apt-get انجام داد ولی بهتر است روش دیگر را برگزینیم. می توان از سایت nodejs.org آخرین نسخه این کتابخانه را دانلود کرد. linux-armv71 برای رزبری پای 2 و linuxarmv61 برای مدل های اصلی رزبری پای استفاده می شود. حال با گرفتن URLها و دایرکتوری ها و دستورات زیر می توان این کتابخانه را نصب کرد.

wget https://nodejs.org/download/release/latest-v5.x.0/node-v5.5.0-linux-armv7l.tar.gz
tar -xvf node-v5.5.0-linux-armv7l.tar.gz
cd node-v5.5.0-linux-armv7l
sudo cp -R * /usr/local

برای اطمینان از نصب شدن این کتابخانه، دستور زیر را اجرا کنید که آخرین نسخه نصب شده را به شما می دهد.

node version

حال برای نصب ماژول های مورد نیاز می توان از دستور npm استفاده کرد.

sudo npm install -g npm
sudo npm install -g node-gyp

در دستور اول، از مدیریت کننده بسته های نود (npm) استفاده کردیم تا نسخه جدیدتر را نصب کنیم. حال می توان شبیه ساز HomeKit را که HAP-NodeJS نامیده می شود، دانلود کرد. پس از اجرای دستورات بالا ممکن است با این خطا مواجه شوید:
“#error This version of node/NAN/v8 requires a C++11 compiler“
که در صورت مواجهه، کامپایلر جدید C++ را با دستورات زیر نصب کنید:

sudo apt-get install gcc-4.8 g++-4.8
sudo update-alternatives --install/usr/bin/gccgcc/usr/bin/gcc-4.6 20
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50

حال نباید مشکلی وجود داشته باشد. دستورات زیر را می توانید اجرا کنید.

sudo npm install srp
sudo npm install mdns --unsafe-perm
sudo npm install debug
sudo npm install ed25519 --unsafe-perm
sudo npm install curve25519 --unsafe-perm

اکنون می توانید شبیه ساز را به صورت زیر اجرا کنید.

node Core.js

اگر به خطایی برخورد کردید که نمی تواند چنین ماژولی را پیدا کند، دستور sudo npm install را دوباره اجرا کنید تا ماژول هایی که جا افتاده نصب کند و اگر خطایی وجود نداشته باشد، با چند اخطار مواجه خواهید شد و واسط HomeKit شما اجرا خواهد شد. نتیجه به صورت زیر خواهد بود:

 

Nikkhah97

در همان ابتدا می توانید 6 دستگاه جعلی را ببینید که ایجاد شده اند. ما از این دستگاه ها بعدا استفاده خواهیم کرد ولی حالا برای تست از آنها بهره می بریم. اگر دستور زیر را اجرا کنید، می توانید اطلاعات خطایاب را مشاهده کنید:

DEBUG=* node Core.js

حال به سمت دستگاه اپلی  که قادر به اجرای Siri است، می رویم. برای وصل شدن شبکه HomeKit، نرم افزار Elgato Eve را دانلود کنید. اولین بار که این اپلیکیشن را باز کنید، باید خانه خود را نامگذاری کنید. سپس گزینه Add Accessory را انتخاب کنید.

Nikkhah98

سپس از شما یک HomeKit Setup Code را می خواهد که از آن صرفنظر کنید و گزینه “Add to [name of your home]” را انتخاب کنید. سپس به شما می گوید که این دستگاه تایید نشده است. جلو بروید تا به صفحه ای برسید که از شما کد لوازم جانبی را می خواهد.

Nikkhah99

گزینه Enter code manually را انتخاب کرده و کد زیر را وارد کنید: 031-45-154

031-45-154

این کد را می توان در فایل Light_accessory.js یافت و یا تغییر داد. این وسیله جانبی را به اتاق پیشفرض خود اضافه کنید و آن را Fake Light بنامید و یک آیکون برای آن انتخاب کنید. نهایتا، به نشست SSH بازگردید که HAP-NodeJS در آنجا در حال اجراست. در ادامه پیامی می بینید که نوشته شده است: “Are we on?” این اپلیکیشن Elgato app است که برای وضعیت لامپ سوال می پرسد. Siri را باز کنید و به او بگویید: “Turn on fake light”، سپس آن را برای خاموش کردن امتحان کنید. پیام های خطایاب را از HAP-NodeJS مشاهده می کنید که دریافت دستورات را نشان می دهد.

Are we on? No.
Turning the light on!
Turning the light off!

گام اول پایان یافت. حال به یک لامپ واقعی، پیش از آنکه به پیکربندی واسط بازگردیم، نیاز داریم.

ساخت یک لامپ WiFi
بخش سخت افزاری این مرحله بسیار ساده است. ما با چهار نئوپیکسل کار خود را شروع می کنیم، که می توانیم آنها را به صورت مستقیم با برد NodeMCU و اتصال USB توان بخشیم. اگر به یک باریکه نور بزرگتری احتیاج دارید، در گام های بعدی این قسمت را هم در نرم افزار تعریف خواهیم کرد.
کابل پاور قرمز را از نئوپیکسل به پین VIN وصل کنید،  و آبی را نیز به GND وصل کنید و کابل سیگنال سبز را نیز به پین علامت گذاری شده D2 در NodeMCU وصل کنید. در مورد قطب ها مطمئن باشید: اگر زمین و VIN را  اشتباه متصل کنید، موجی از انرژی را به برد می فرستید که در نتیجه موجب خراب شدن آن می شود.
اگر محیط آردوینو هنوز برای کار با ESP8266 تنظیم نشده است، می توانید راهنمای مربوط به آن را مطالعه کنید. پس از نصب درست آن کتابخانه های زیر را نصب کنید:
-    Imroy’s PubSubClient
-    Adafruit’s NeoPixels
کدی که در اینجا استفاده شده، اصلاح شده کدی است که بر روی گیت هاب موجود است. در این کد، در خطوط زیر، اطلاعات شبکه خود را قرار دهید.

const char* ssid = "....";
const char* password = "...";
const char* host = "officelight"; 
IPAddress MQTTserver(192, 168, 1, 99);

آدرس IP در این قسمت از طریق DHCP به دست می آید و اگر تغییر هم کند مشکلی ایجاد نمی کند زیرا هر بار به همان سرور MQTT وصل می شویم.

در حال حاضر ما از 4 نئوپیکسل استفاده می کنیم ولی شما می توانید تعداد آنها را بعدا افزایش دهید. کد را آپلود کرده و تست کنید. از کلاینت MQTT خود برای ارسال دستورات استفاده کنید. (نام هاست در دستورات زیر را در صورت تغییر آن تطبیق دهید.)
-    می توان on را به کانال officelight بفرستید تا روشن شود و یا هر مقدار دیگری را به آن کانال ارسال کنید، تا خاموش شود.
-    می توانید شماره ای از 0 تا 360 را به officelight ارسال کنید تا رنگ را تغییر دهد. در اینجا از فضای رنگی HSV استفاده می کنیم، بنابراین 0 تا 360، رنگ قرمز، 120 رنگ سبز و 240 رنگ آبی می باشد.
-    می توان مقدار درصدی را برای میزان روشنایی آن ارسال کنید. از 0 تا 100 بدون به کار بردن علامت %.
یکبار تنظیمات مربوط به MQTT خود را امتحان کنید. در صورت درست بودن به مرحله بعد بروید.
پیکربندی یک وسیله جانبی جدید HomeKit
به رزبری پای بازگردید و اپلیکیشن HAP-NodeJS را کنار بگذارید. به دایرکتوری accessories/ بروید. برای آسان کردن این روش، شما می توانید به صورت مستقیم کد را با تایپ دستور زیر و هماهنگ کردن آن با officelight دانلود کنید.

wget https://gist.githubusercontent.com/jamesabruce/a6607fa9d93e41042fee/raw/12e4fd1d1c2624e7540ba5e17c3e79bc6bdec5fd/Officelight_accessory.js

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

-    همه وسیله های باید در فایل accessory.js_* نامگذاری شوند.
-    آدرس IP را در گزینه های مربوطه در بالای سرور MQTT تغییر دهید.
-    اگر شما نام های متفاوتی را برای وسایل خود در نظر گرفته اید، officelight را در تمام نمونه های خود جستجو کرده و آن را با نام وسایل خود جایگزین کنید. این جستجو و جایگزینی را می توانید در نانو با فشار دادن دکمه های CTRL و \ انجام دهید، و موضوعی که می خواهید پیدا کنید؛ تایپ کرده و موضوعی را برای آن جایگزین کنید، سپس A را فشار دهید که منظور همه نمونه ها است. در طول هرکدام حرکت کنید تا یاد بگیرید که دقیقا چه متغیرهایی بروزرسانی می شوند.
-    یک کلمه عبور هگزادسیمال واحد برای وسیله جانبی ایجاد کنید.(light.username = 1B:2B:3C:5D:6E:FF)
-    پین کد را تغییر ندهید. این پین کد باید از یک فرمت خاص پیروی کند.
-    می توانید نام Siri name را به صورت متفاوت به وسیله جانبی با استفاده از اپلیکیشن Elgato Eve تخصیص دهید و آنها را در هر زمانی که مایل باشید ویرایش کنید. احتیاجی به پیکربندی فایل ها و یا روشن و خاموش کردن دوباره سرور نیست.
-    هرگاه که چندین وسیله داشته باشید، می توانید با استفاده از اپلیکیشن آنها را در یک اتاق جمع آوری کرده و یا رخدادهایی شامل چندین اکشن پیچیده برای آنها تعریف کنید که  Scenes  نامیده می شوند. Scenes می توانند شامل چندین اقدام باشند مانند روشن کردن چراغ اداره، کاهش نور آن به بیست و پنج درصد، قرمز کردن آن و فعال کردن ماشین قهوه.
شما احتیاج دارید که لوازم جانبی جدید خود را به برنامه HomeKit بیفزایید.
در نهایت، ما می خواهیم برنامه HAP-NodeJS زمانی که رزبری پای ریستارت می شود اجرا کنیم. کد زیر را به فایل etc/rc.local، دقیقا قبل از exit 0 اضافه کنید.

sudo node /home/pi/HAP-NodeJS/Core.js < /dev/null &

در شکل پایین می توانید این کد را با دیگر دستورات ترکیبی مشاهده کنید.

Nikkhah100

اگر برای اولین بار است که rc.local استفاده می کنید، ممکن است احتیاج به تنظیم آن به عنوان یک فایل قابل اجرا داشته باشید.

sudo chmod 755 /etc/rc.local

اگر بنا به دلایلی احتیاج به اجرای آن در حالت دیباگ دارید، باید اپلیکیشن نود در حال اجرا را از بین ببرید.

killall node

قدم نهایی: به دایرکتوری accessories بروید و فایل GarageDoorOpener_accessory.js را حذف کنید، زیرا این فایل دارای خطاهایی است که ممکن است منجر به شکست سرور شود.

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

وجیهه نیکخواه

وجیهه نیکخواه

وجیهه ، کارشناسی ارشد کامپیوتر، گرایش نرم افزار و علاقمند به دنیای نرم افزارهای آزاد است. تمایل به یادگیری زبان های مختلف و نیز زبان های برنامه نویسی، او را به سمت نوشتن و ترجمه مباحث علمی و تکنولوژی کشانده. پیش از ورود به فیسیت به تدریس در حوزه های مختلف کامپیوتر مشغول بوده است. ترجمه،خوشنویسی و بدمینتون از جمله تفریحات مورد علاقه اوست.


0 نظر درباره‌ی این پست نوشته شده است.

ثبت نظر