من میثم هستم، احتمالا تنها نویسنده سیسوگ که از دنیای نرم افزار اومده!
قبلا اینجا چندتایی مطلب درباره آردوینو نوشتم اما خوب فرصت کم و فیدبک ناکافی باعث شد که حداقل فعلا نتونم ادامه اش بدم.
مدتی پیش تصمیم گرفتم چالش جدیدی برای خودم ایجاد کنم و بعد به این نتیجه رسیدم شاید این چالش برای بعضیها بتونه ابزاری باشه که جایی کمکشون کنه.
تعریف پروژه
طبیعتاً این سرویس کمی فاصله داره با چیزی که به صورت فنی بشه بهش گفت « سرویس اینترنت اشیاء « اما فعلاً ما به همین اسم صداش میزنیم!
این سرویس اینترنت اشیاء چکاری قراره انجام بده؟
فرض کنید یک Gsm Modem دارید که قراره اطلاعات دما و رطوبت و طول و عرض جغرافیایی که از GPS گرفتید رو بفرسته به سروری و اونجا نمایش بدیم.
- چطور ارسال میکنید؟
- و چطور نمایش میدید؟
ما قراره در این مقاله و قسمت دوم اون دو پروژه رو معرفی کنیم که با ترکیب این دو بتونید دو مشکل بالا رو حل کنید!
هرچند پروژه فعلاً در مقیاس کوچکی تعریف شده اما میتونه پایه و اساس پروژه های بزرگی باشه که در این حیطه میتونند کاربرد داشته باشند.
خطر تخصصی شدن مطلب!
خوشبختانه تا اینجا موفق شدم مطلب رو بدون ذکر کلمات تخصصی پیش ببرم! اما از اینجا به بعد ممکنه یکم مقاله برای عاشقان سیم و هویه گیجکننده باشه، امیدوارم تا آخرش دووم بیارید!
چالش
چرا این پروژه برای من چالش بود؟
من یک فریمورک به اسم Net Core. رو انتخاب کردم برای ساختن این پروژه.
اولین نسخه این فریم ورک اواسط 2016 توسط مایکروسافت ریلیز شد(که مشخصاً از دنیای .Net اومده) اما خوشبختانه Cross-Platform هست به این معنی که شما اگه تمایل داشته باشید میتونید روی سروری با سیستم عامل لینوکس، ویندوز و یا حتی mac os اون رو نصب کنید، عالی نیست؟
و جهت یادآوری باید بگم که Net. سالها به عنوان انحصار ویندوز و اون هم فقط در شرایطی که قبل از اجرا کل فریمورک Net. رو نصب میکردید قابل اجرا بود و همچین انقلابی مثل اینه که ژنرال باتیستا بیاد در کنار چهگوارا ضد سرمایهداری مبارزه کنه!
(البته نه به این شدت! اما مهم اینه که در حال حاضر مایکروسافت بزرگترین حمایت کننده و انتشار دهنده متن باز در دنیاست!)
اما قسمت چالش برای من این بود که برای اولین بار میخواستم یک محصول ذاتاً ویندوزی رو با ابزار کاملاً رایگان و جدید روی لینوکس توسعه بدم، و برای اینکه بامزه تر هم بشه از دیتابیس محبوبم یعنی SQL Server جدا شدم و از Postgre که برای من تا الان ناشناس بوده استفاده کنم.
و سخت ترین قسمتش اینکه چون دوست داشتم پروژه رو به صورت متن باز منتشر کنم، سعی کنم با کیفیت بالا کد رو بنویسم، استانداردها رو رعایت کنم و همه اون کارهای نامناسبی که توی محیط کار روزمره بخاطر فرصت کم یا خصوصی بودن سورس ها ممکنه انجام بدیم رو، ازش پرهیز کنم.
ابزارها
من توی توسعه این قسمت از پروژه از این ابزار استفاده کردم:
۱- طبیعتاً در مرحله اول SDK مربوط به Net Core 2.
2- VS Code به عنوان محیط توسعه پروژه
3- Postgre که همونطور که گفتم به عنوان پایگاه داده
4- Dbeaver که یکی از محیط های گرافیکی رایگان استفاده از Postgre هست و در مقایسه با PgAdmin امکانات مناسب تری داره.
5- Postman به عنوان ابزار تست API
و البته که تمامی ابزارهای بالا نات آنی رایگان هستند بات آلسو متن باز هم هستند و میتونید روی گیتهاب به آسونی پیداشون کنید!
قابلیت ها
این API که حکم موتور پروژه رو داره این قابلیتها رو بهتون میده:
- ثبت نام و ورود
- تعریف،ویرایش و حذف سرویس و مشخصه ها (برای مثال من سرویسی به اسم دماسنج میتونم تعریف کنم و بگم این سرویس دوتا مشخصه به اسم دما و رطوبت رو قراره از دستگاه دریافت کنه)
- تعریف دستگاهها یا کاربران که مشخص میکنه چه کسانی حق استفاده از این سرویس رو دارند.
- متدی برای دریافت اطلاعات از دستگاهها به صورت JSON و یا با استفاده از URL
- خروجی دادههای دریافت شده
API چیه؟ JSON از کجا بخریم و چند آمپر جریان کشی داره؟!!
از اونجایی که موقع توسعه پروژه میدونستم اگه قراره همه یا قسمتی از مخاطبان احتمالی اون دوستان سخت افزاری باشن، نوشتن یک API تنها، مثل حلقه قدرت توی فیلم ارباب حلقه هاست، خیلی پرکاربرده اما اگه نتونی ازش استفاده کنی نهایتاً در آتش کوه موردور میسوزه!
برای همین تصمیم گرفتم همزمان با تکمیل API یک پروژه دیگه رو در کنارش شروع کنم که بجای اینکه کاربر رو درگیر پیچیدگی های کار با API کنه، یه واسط کاربری فوقالعاده بهش بده تا اون این کار رو براش انجام بده!
اما اگه کسی علاقهمند باشه میتونه با استفاده از Postman و خروجی نمونهای که توی پروژه گذاشتم نحوه تست همه توابع رو ببینه و یا با مقادیر جدید امتحانش کنه.
در مورد پروژه دوم توی مقاله بعدی توضیح میدم اما اگه علاقه داشتید میتونید توضیحات بیشتر و سورس کامل این API رو اینجا روی گیت هاب من ببینید.
سلام میثم جان
من که بسیار لذت بردم از طرح همچین موضوعاتی نرم افزاری توی سیسوگ
امیدوارم با قدرت ادامه بدی…
ممنون!
اگه استقبال بشه حتما
یه سوال سرویسی مثل mqtt هستش اینی که نوشتین؟
خیر، حداقل توی این نسخه پروتکل mqtt هنوز پشتیبانی نمیشه.
سلام
من که هیچی نفهمیدم ولی بی صبرانه منتظر قسمت های بعدی هستیم چون دقیقاً روی همچین پروژه ای کار می کنیم….
با تشکر فراوان
سلام
قسمت دوم آخرین ویرایش هاش رو میگذرونه و انشالله به زودی منتشر میشه، امیدوارم که اینبار مفهوم رو تونسته باشیم تا حد ممکن ساده منتقل کنیم.
سلام
منم آن عاشق سیم و هویه! 🙂
راستش چیزی نفهمیدم
کاش میشد هر موضوع و بخشی رو لینک میدادید بجایی که یه کلیتی توضیح میداد یا قبل از شروع آموزش هایی وجود داشت
زحمت کشیدید.ممنون
سلام
😉
متاسفانه اگه بخواهیم وارد جزئیات بشیم اینقدر گسترده هست که ممکنه سیسوگ بجای مرجع متن باز الکترونیک به مرجع متن باز نرم افزار تبدیل بشه!
توی قسمت دوم مقاله که به زودی منتشر میشه سعی کردم یکم بیشتر وارد جزئیات بشم.
اما اگه فرصت باشه و مخاطب این نوع محتوا توی سیسوگ به اندازه کافی باشه حتما مقاله های جداگانه ای درباره این موضوع ها ارایه میکنیم!
مثل همیشه بروز مثل همیشه عالی مثل همیشه دوست داشتنی ..ادامه بده مشتاق تر شدم
(امضا مهندس الکترونیک)
ممنون!
امیدوارم از قسمت دوم مقاله هم خوشتون بیاد
افرین!!
هیچی نفهمیدم!!
سره فرصت دوباره میخونم ((:
:))
آماده بشید برای مقاله دوم!