بومی سازی سیستم مانیتورینگ - بخش اول

تقریبا اوایل سال 98 بود که با تکمیل تجهیزات و نصب اونا توی رک های اتاق سرور نیاز به یه سیستم مانیتورینگ مناسب برای دما و رطوب داشتیم. با شرکت های مختلف تماس گرفتیم و نمونه های زیادی هم معرفی شد بهمون ؛ چه نسخه های تولید داخل چه نمونه های وارداتی.

متاسفانه اصلا گزینه های مناسبی نبودن. نمونه های داخلی که کیفیت و امکانات لازم رو نداشتن و نمونه های خارجی هم قیمت های به شدت گرونی داشتن و هرطور حساب کتاب کردم ارزش خرید نداشتن.

الله و اکبر از ظاهر ... امان از باطن !!!
الله و اکبر از ظاهر ... امان از باطن !!!

این شد که تصمیم گرفتم همین سیستم رو خودم بسازم ! اولش زیاد امید نداشتم و بعد از طراحی مدل های مختلف تو ذهنم ، میذاشتمشون کنار تا اینکه یه مدل خیلی خوب رو متصور شدم. اکثر تجهیزاتی که برای رک ها طراحی میشه در حداقل ترین حالت ممکن از نظر ارتفاع 1 یونیت رو اشغال میکنه و برای عرض هم باید استاندارد 19 اینچی رعایت بشه. این سوال برام مطرح شد که اصلا لازمه برای چنین چیز ساده ای این همه فضا اشغال کنیم ؟؟؟؟ دیگه بگذریم از نیاز به ساخت بدنه ای برای قرار گیری تو این استاندارد ها که نهایتا اگر هم بتونم طراحیش کنم و بدم برام بسازنش دست کمی از نمونه های تولید داخل نداره توی بی کیفیت بودن !!

در ضمن بزرگترین مشکلی که این نمونه های آماده دارن اینه که اکثرشون فقط مدیریت تنها یک رک رو در اختیارتون میذارن. حالا ما باید چیکار میکردیم که 14 تا رک داریم ؟ 14 تا آی پی مختلف ؟ 14 تا پنل مدیریت مختلف ؟ کی میخواد به این همه رسیدگی کنه ؟

راه حل ساده بود ! این همه تجربه و پروژه در مورد IoT باید برای خودم هم یه جا به درد بخوره و تصمیم گرفتم با ترکیب RaspberryPI و ماژول های ESP همین سیستم رو بسازم.

::: رزبری پای در نقش یک Gateway یا بهتر بگم یک Collector

::: ماژول های NodeMCU ESP8266 برای کلاینت های پایش اطلاعات

::: سنسور DHT22 جهت دریافت دما و رطوبت محیط

هر ماژول ESP یک سنسور بهش وصل میشه و با توجه به سایز کوچیکش هرجای مناسبی از رک که بخوایم نصب میشه ( محل نصبش تقریبا مهمه مثلا نباید جلوی خروجی فن های یک سرور یا سوییچ باشه که خیلی دما رو زیاد نشون بده یا مثلا روی سقف یا کف رک نصب بشه که دمای غیر واقعی نشون بده. من خودم انتهای طبقه ثابتی که وسط هر رک قرار داشت نصبشون کردم ). هر کدوم از این ماژول ها به صورت WebServer کانفیگ میشن و با تعریف یک route مثل data/ اطلاعات دما و رطوبت رو در قالب JSON بر می گردونن.

curl http://10.1.1.45/data
{&quottemperature&quot:&quot24.00&quot,&quothumidity&quot:&quot21.70&quot}

تا اینجا ما 14 تا کلاینت داریم که هرکدوم به صورت مستقل پس از اتصال به شبکه بی سیم و دریافت IP میتونن خیلی سریع دما و رطوبت لحظه ای رو نشون بدن.

نسخه اولیه کلاینت ها ... چسب کاری شده :))
نسخه اولیه کلاینت ها ... چسب کاری شده :))

مرحله بعد روش استفاده از این هاست. اینجا رزبری پای وارد عمل میشه و با قرار گرفتن تو شبکه ، توسط یه اسکریپت پایتون تمام این دیتا ها رو جمع آوری میکنه. شاید به نظر ساده بیاد ولی پیچیدگی های خیلی خاصی توی این مرحله وجود داشت. اولا که باید این جمع آوری به صورت منظم انجام بشه پس نیاز به یه Cron Job داریم تا این کارو برای ما انجام بده. باید بتونیم این Job رو تغییر بدیم. مثلا الان داره هر 5 دقیقه اطلاعات دریافت میشه فردا میخوایم هر 10 دقیقه این کارو بکنه. منطقی نیست که هر سری با SSH متصل بشیم به رزبری پای و تغییرات رو اعمال کنیم بلکه میخوایم تمام اینا به صورت جامع در پنل کاربری قرار داشته باشه. پس نیاز داریم تا یه Backend مدیریتی خیلی ساده هم روی رزبری داشته باشیم که در صورت دریافت تغییرات لازم ، cron رو ویراش کنه ( دیگه از دردسر های دسترسی و ذخیره لاگ ها و ... نمیگم براتون ). اینجا بود که سراغ Lumen رفتم و یه سرویس خیلی جمع و جور برای این کار نوشتم.

تا اینجا نصف کار انجام شده بود. کلاینت ها فعال بودن و رزبری پای به طور منظم دیتا جمع آوری میکرد و توی دیتابیس خودش ذخیره میکرد ( میتونستم یه دیتابیس خارجی هم تعریف کنم روی یکی از سرور ها ولی خب منطقی نبود برای چنین چیز ساده ای منابع جدا اختصاص داده بشه )

عجب عکس خوشگلی شد :))
عجب عکس خوشگلی شد :))

حالا که کلی دیتا جمع آوری شده نیاز داریم که از اینا استفاده کنیم. قسمت مهم کار ! یک داشبورد مدیریتی ! اینجا بود که به سراغ Laravel رفتم و سعی کردم با کلی سلیقه به خرج دادن به پنل کامل و خوشگل برای شروع کار طراحی کنم. از اول هم طوری طراحی کردم این سیستم رو که بشه همه جا ازش استفاده کرد نه فقط توی یه اتاق سرور ( مثلا همین الان تو خونه خودمون هم چنین سیستمی داره کار میکنه ). این شد از پنل ( توضیحات هر بخش زیر عکس نوشته شده ) :

تعریف مکان اصلی ( مثلا خانه ، کارگاه و ... )
تعریف مکان اصلی ( مثلا خانه ، کارگاه و ... )
تعریف یک اتاق جدید ( در سناریوی ما هر رک معادل یک اتاق در نظر گرفته میشه )
تعریف یک اتاق جدید ( در سناریوی ما هر رک معادل یک اتاق در نظر گرفته میشه )
لیستی از نمودار های مربوط به هر اتاق ( در اینجا هر رک ) که دما و رطوبت رو با توجه به بازه انتخابی نمایش میده
لیستی از نمودار های مربوط به هر اتاق ( در اینجا هر رک ) که دما و رطوبت رو با توجه به بازه انتخابی نمایش میده
تنظیمات هر مکان
تنظیمات هر مکان

گزینه اول همان مقدار متغییر اعلام شده برای Cron job بوده که برای رزبری پای ارسال میشود و Lumen با دریافت این مقدار Cron را تنظیم خواهد کرد.

گزینه دوم مربوط به صفحه نمودار ها بوده و مشخص میکند که چند دقیقه اخیر در نمودار ها نمایش داده شود.




خیلی خب :) دیگه همه چیز آماده است و به بهترین نحو داره کار میکنه ... خیلی نکات فنی و مشکلات ریز و درشت این وسط اتفاق افتاد که دیگه ازشون فاکتور گرفتم. حالا اگه بخوایم از نظر قیمت مقایسه کنیم با راه حل اول یعنی خرید نمونه های آماده ( قیمت ها مال الانه !!! ) قبلا ارزونتر خریدم :)

  • رزبری پای بسته به مدل از 0.7 تا 1.2 میلیون تومان ( نسخه 3 هم میشه استفاده کرد که ارزونتر باشه )
  • ماژول های ESP هر کدام 50 هزار تومان
  • سنسور DHT22 هر کدام 50 هزار تومان ( عجییییب گرون شده ! )

با یه محاسبه ساده همین الان اگر بخوایم چنین سیستمی رو پیاده کنیم کلا 2.2 میلیون تومان هزینه داره !!! 14 تا ماژول و سنسور و یه رزبری پای 4 با 2 گیگ رم


صرفه جویی در هزینه ، طراحی کامل از صفر تا صد طبق نیاز ها ، اشغال نکردن فضای بیهوده


در بخش دوم پست ، از ادامه ی ماجرا پس از گذشت یک سال کار این سیستم می نویسم براتون