یک ایده ی بامزه ی اینترنت اشیا(iot) با رزبری پای، پایتون و چاشنی گوگل! (قسمت دوم)

سلام :)تو قسمت قبل کاری کردیم که بشه با مرورگر و با پروتوکل HTTP با یک ریکوست(درخواست) یک چراغ کوچیک رو روشن یا خاموش کرد! تو این نوشته ادامه میدیم و کم کم میریم که کنترل صوتی توسط دستیار صوتی گوگل(google assistant) رو به سیستممون اضافه کنیم و توسعه ش بدیم!اولین چیزی که لازمه بدونین اینه که شما روی رزبری پای یک وب سرور راه اندازی کردین اما این وب سرور فقط به صورت لوکال یا محلی در دسترسه و نمیشه روی اینترنت به اون درخواست ارسال کرد!برای اینکه روی اینترنت بتونین به سرور لوکالتون دسترسی داشته باشین اصولا دوتا راه دارین:یک IP اختصاصی(استاتیک) از ISP تون بگیرید و روی روترتون ست کنین و بعدا تنظیمات NAT رو انجام بدین که ترافیک فوروارد بشه روی رزبری پای و بشه روی اینترنت مثل یه سرور واقعی بهش دسترسی داشت.از داینامیک دی ان اس(DDNS) استفاده کنین که راحت تره اما سرعتش کمی پایین تره! ولی فعلا منطقی تره. خب من راه دوم رو فعلا ترجیح میدم چون رایگانه و کانفیگ های خاص هم نیاز نداره :)ابزار و سرویس های مختلفی هستن که بصورت رایگان دی ان اس به شما اختصاص میدن و با همین IP داینامیکتون هم میتونین کامپیوترتون رو تقریبا به یک سرور با ادرس مشخص تبدیل کنین :)من از ngrok استفاده کردم که میتونین به وب سایتشون برین و داکیومنتشون رو هم مطالعه کنین که خیلی کامله!قطعا قدم اول اینه که توی ngrok ثبت نام کنین و اکانت داشته باشین که راحته مثل هر ثبت نام دیگه ای!قدم دوم اینه که از داخل مرورگری که در رزبری به صورت پیشفرض وجود داره، به آدرس مربوط به دانلود کلاینت ngrok(آدرس صفحه ی دانلود) برید و کلاینت (Linux(ARM رو دانلود کنین روی رزبری پای!توی صفحه ی دانلود و کنار باتن دانلود، راهنمای نصب وجود داره که اگه با لینوکس خیلی میونه ی خوبی نداشته باشین میتونین ازش کمک بگیرین و از طریق ترمینال به راحتی فایل executable رو از فایل فشرده استخراج کنین :)خب وقتی فایل رو دانلود کردین یه ترمینال جدید باز کنین(اگه با VNC به رزبری متصل شدین) یا از SSH استفاده کنین و این کامند هارو به ترتیب اجرا کنین:$ cd home/pi/Downloads$ unzip ngrok.zip$ ./ngrok authtoken <YOUR_AUTH_TOKEN>حالا حتما براتون سوال شد که <YOUR_AUTH_TOKEN> چیه؟! سوال خوبیه!سرویس ngrok برای کانفیگ کردن کلاینتی که دانلود میکنین و اتصال اون به اکانتتون که در وب سایت ساختین از یک توکن یا شناسه ی اختصاصیِ خود شما برای اعتبار سنجی استفاده میکنه که اون رو میتونین داخل پنلتون در ngrok پیدا کنین! بعد از پیدا کردن توکن، اون رو کپی کنین و به جای <YOUR_AUTH_TOKEN> در سومین کامندی که نوشتم قرار بدین و بعد اون کامند رو اجرا کنین!تبریک میگم الان کل کارایی که لازم بود برای دسترسی عمومی به رزبری پای روی بستر اینترنت انجام بدین، انجام شده! یادتون باشه که وب سرور فلسک شما باید در حال اجرا باشه. یعنی همون فایل پایتون که نوشتیم رو باید در حال اجرا داشته باشین که روی پورت 80 بشه اطلاعات رد و بدل کرد!حالا که همه چیز بر وفق مراده، باید کلاینت ngrok رو اجرا کنین که بتونه یک آدرس پابلیک به شما اختصاص بده که با باز کردن اون آدرس در هر جایی از اینترنت، همون لوکال هوست خودتون با هر کدی که نوشتین براتون اجرا بشه! برای این کار، تو همون دایرکتوری ای که فایل executable رو استخراج کردین(دایرکتوری دانلود ها) اون رو با کامند پایین اجرا کنین:$ ./ngrok http 80عبارت HTTP در کامند، پروتوکل و عدد 80 پورت رو مشخص میکنه. دقت کنید که پروتوکل حتما HTTP باشه و پورت هم حتما همون پورتی که در فلسک برای اجرا انتخاب کردین. این پورت لزوما نباید 80 باشه و میتونید به دلخواه اون رو تغییر بدین! خب حالا کامند رو اجرا کنین :)الان ngrok براتون یک اتصال میسازه و لینکی رو با فرمت http://xxxxxx.ngrok.io در ترمینال براتون نمایش میده که به جای عبارت xxxxxx یک رشته ی نامفهوم و رندوم قرار میگیره! اون لینک رو کپی کنید و مثلا با مرورگر گوشیتون یا هر کامپیوتری که به اینترنت عمومی متصله بازش کنین. میبینین که در ترمینالی که ngrok رو استارت کرده بودین در پایین لیستی از درخواست هایی که به رزبری پای اومده وجود داره با کد وضعیت اون درخواستها(status code). حالا لینکی که در نوشته ی قبلی برای روشن یا خاموش کردن چراغ استفاده میکردیم رو تغییر میدیم که بشه روی اینترنت عمومی اینکار رو انجام داد. کافیه که به اخر لینکی که ngrok بهتون داده بود همون / و on یا off رو اضافه کنین:http://localhost:80/on ==> http://xxxxxx.ngrok.io/onhttp://localhost:80/off ==> http://xxxxxx.ngrok.io/offبا باز کردن این آدرس ها میبینین که دقیقا مثل حالت لوکال، چراغتون روشن و خاموش میشه!الان شما چراغتون رو به اینترنت متصل کردین :)خب میریم سراغ قدم بعدی یعنی کنترل چراغ(وسیله ی الکترونیکیتون!) با دستیار صوتی هوشمند گوگل!اول از همه اپلیکیشن google assistant رو روی گوشی اندرویدتون که ترجیحا ورژن اندروید بالاتر از 5 داره نصب کنین. ایمیلی که روی گوشیتون ست شده و با اون sync شده رو هم لازم دارین!حالا به IFTTT.com برین(اینجا میتونید در مورد IFTTT بیشتر بخونین!). میتونین اکانت جدید بسازین یا با اکانت گوگل و ... لاگین کنین به راحتی! خب وقتی لاگین کردین حالا مسئله جالب تر میشه :)بالا سمت چپ یه گزینه وجود داره به اسم My Applets! اون رو باز کنین و روی New Applet کلیک کنین. یه صفحه به شکل پایین براتون باز میشه:روی this که آبی رنگه کلیک کنین. تو صفحه ای که باز میشه google assistant رو توی سرچ باکس وارد کنین و بعد روی آیکون گوگل اسیستنت کلیک کنین. احتمالا ازتون میخواد که اکانت گوگلی که میخواین به این اپلِت وصل باشه و ازش دستورات صوتی رو دریافت کنه انتخاب کنین که باید اینکارو از صفحه ای که باز میشه انجام بدین! بعدش یه صفحه به این شکل باز میشه:اینجا یکی از گزینه هارو انتخاب کنیناز چهار حالت بالا بسته به نیاز میتونین یکی رو برای اپلِت خودتون انتخاب کنین. من اینجا چون یدونه چراغ بیشتر ندارم و فعلا نیازی هم بهش ندارم حالت دوم از سمت راست رو انتخاب میکنم. صفحه ی پایین باز میشه(البته ادامه داره و باید اسکرول کنین به پایین تر!):اینجا در باکس What do you want to say اون جمله ای که میخواین گوگل برای کنترل شیء تشخیص بده رو وارد کنین! مثلا من جمله ی turn on the light رو وارد کردم. وقتی مراحل کامل بشه و اپلِت من ساخته بشه، روی گوشی اندرویدم که به اکانت گوگلم متصله با گفتن این جمله به گوگل اسیستنت، کاری که من در قدم بعدی تعیین میکنم به صورت اتوماتیک انجام میشه! اما یه کار دیگه مونده و اون اینه که ما فقط turn on the light رو نداریم که! turn off the light رو هم داریم!! اینجا از متغییر میتونیم استفاده کنیم که به جای کلمه ی on، بشه متن متغیر گذاشت و مثلا برای هر دو حالت on و off یه اپلِت کافی باشه! برای اینکار به جای کلمه ی on در داخل باکس، علامت دلار یا همون $ رو باید بذارید به این صورت:turn $ the lightاین notation از پیش تعریف شده برای IFTTT هست که خودش تشخیص میده به جای اون علامت دلار قراره یه متن گفته بشه! بعدا از همین متغیر برای روشن و خاموش کردن استفاده میکنیم :)اگه همین صفحه رو یکم پایین تر بیاین یه فیلد با عنوان What do you want the Assistant to say in response میبینین. اینجا باید اون چیزی که میخواین گوگل اسیستنت در پاسخ به جمله تون بده رو بنویسین. مثلا من مینویسم: ok, the light is $اینجا هم از علامت دلار استفاده کردم چون میخوام وقتی دستور on رو دادم به من بگه ok, the light is on و وقتی دستور off رو دادم بگه ok, the light is off!خب همین فعلا کافیه. در آخر صفحه روی Create trigger کلیک کنید که تریگر ساخته بشه! بعدش شمارو به این صفحه میبره:مرحله ی دوم کانفیگ اپلِتاینجا هم باید روی that که آبی شده کلیک کنین. اینبار تو صفحه ی باز شده تو سرچ باکس کلمه ی webhooks رو بنویسین و آیکونی که براتون پیدا میکنه رو کلیک کنین! تو صفحه ی بعدی یه گزینه بیشتر نیست اونم Make a web request که همینو انتخاب کنین. صفحه ای باز میشه اینجوریه:خب اینجا هم تقریبا مشخصه که چیکار باید بکنین :) اولا اون یو آر اِلی که ngrok براتون تولید کرده رو باید وارد کنین(اون xxxxx رو خودتون با رشته ای که بهتون داده جایگزین کنین!). چون ما ساختار یو آر اِلمون جوریه که دستور on یا off که میتونه متغییر باشه آخرش وجود داره، پس باید اینجا یه جور متغییر مشخص کنیم که خودش با مقدار دستوری ما جایگزین بشه! چون کلمه ای که ما میخوایم بگیم عددی نیست و لغته، پس باید دکمه ی Add ingredient رو بزنیم و بعد گزینه ی TextField رو از باکسی که باز میشه انتخاب کنیم که بعد از / قرار بگیره. این یعنی خودش بعدا اون چیزی که ما میگیمو اونجا قرار میده و درخواست رو به وب سرور ما میفرسته. خب الان کار ما تمومه :) به پایین اسکرول کنین و Create action رو بزنین! در نهایت هم برای تایید دکمه ی Finish رو بزنین و تموم :) خب همه ی کارا به قشنگی انجام شد :) الان گوشیتونو باز کنین و برین توی گوگل اسیستنت یا کافیه بگین OK google که اسیستنت فعال بشه! حالا اون جمله ای که تعیین کرده بودین(turn on/off the light) رو با صدای زیباتون بگین که چراغتون روشن یا خاموش بشه :) به همین سادگی!البته یادتون باشه که ngrok با هر بار اجرا و استارت شدن در یک ترمینال، لینک جدیدی رو بهتون میده و نمیتونین لینک ثابت داشته باشین! پس اگه احتمالا رزبری پای رو خاموش کردین و دفعه ی بعدی باز خواستین سیستمتون کار کنه، باید دوباره ngrok رو استارت کنین و لینک جدیدی که میده رو در IFTTT و در تنظیمات اپلِتی که ساخته بودین وارد کنین که مشکلی نداشته باشه و اجرا بشه!امیدوارم چراغ زندگیتون همیشه روشن باشه :)کامنت بذارین، کامنتاتون قشنگه :)