فهرست مطالب:

وضعیت لگد زدن ساده و سیستم رزرو با ادغام Slack: 12 مرحله (همراه با تصاویر)
وضعیت لگد زدن ساده و سیستم رزرو با ادغام Slack: 12 مرحله (همراه با تصاویر)

تصویری: وضعیت لگد زدن ساده و سیستم رزرو با ادغام Slack: 12 مرحله (همراه با تصاویر)

تصویری: وضعیت لگد زدن ساده و سیستم رزرو با ادغام Slack: 12 مرحله (همراه با تصاویر)
تصویری: dying light 2 انسان بمان تمام صحنه های برش فیلم کامل به 18 زبان زیرنویس 2024, نوامبر
Anonim
وضعیت لگد زدن ساده و سیستم رزرو با ادغام Slack
وضعیت لگد زدن ساده و سیستم رزرو با ادغام Slack

در شرکتی که من کار می کنم میز کیکر وجود دارد. این شرکت طبقه های زیادی را اشغال کرده است و برای برخی از کارکنان تا 3 دقیقه طول می کشد تا به میز برسند و … بفهمند که میز قبلاً اشغال شده است.

بنابراین ایده ای برای ایجاد نوعی سیستم پخش و رزرو وضعیت ساده ایجاد شد که در زمان واقعی کار می کند.

شرکت از ابزار ارتباطی Slack استفاده می کند که در آن هر کارمند یک حساب کاربری دارد. ما حتی یک کانال #kicker فقط برای بحث در مورد … kicker داریم. این کانال می تواند به عنوان نوعی "نقطه ورود" برای رزرو و اطلاع از وضعیت جدول فعلی مورد استفاده قرار گیرد.

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

دستگاه و سرویس به میز بازکن چسبیده نیستند و می توانند برای هر "منبع مشترک" (مانند میز پینگ پنگ ، کنسول ، و غیره …) که به نوعی راه حل رزرو amd برای پهنای باند وضعیت نیاز دارد ، استفاده شود.

بنابراین ، بیایید شروع کنیم…

مرحله 1: اثبات مفهوم و نمونه سازی

اثبات مفهوم و نمونه سازی
اثبات مفهوم و نمونه سازی
اثبات مفهوم و نمونه سازی
اثبات مفهوم و نمونه سازی
اثبات مفهوم و نمونه سازی
اثبات مفهوم و نمونه سازی

ایده Raughly این بود که دستگاهی بسازیم که با رعایت این الزامات در کنار میز بازکن قرار می گیرد:

  • برخی از شاخص ها در مورد وضعیت فعلی میز - اگر در کنار آن ایستاده اید ، باید بتوانید بدانید که این میز رایگان یا رزرو شده است و شخصی در مدت 3 دقیقه به بازی می آید. چراغ های راهنمایی و رانندگی کاملاً با ایده مطابقت دارد:

    • چراغ سبز - بازی رایگان ،
    • نور زرد - محفوظ است ،
    • چراغ قرمز - اشغال شده
  • دکمه (های) شما می توانید قبل و بعد از بازی کلیک کنید تا دیگران از وضعیت جدول فعلی مطلع شوند. به جای 1 دکمه ضامن ، تصمیم گرفتم از 2 دکمه جدا شده استفاده کنم:

    • دکمه قرمز - میز را اشغال کنید ، بازی را شروع کنید (پس از رزرو یا موقت).
    • دکمه سبز - جدول انتشار.
  • برخی از اطلاعات با جزئیات بیشتر در مورد "چه خبر است" - زمان رزرو ، وضعیت جدول تکراری ، زمان بازی و غیره …

منظور من از رزرو فقط رزرو برای 3 دقیقه آینده است. سیستم طوری طراحی نشده است که کاربر بتواند جدول را در زمان دقیق (به عنوان مثال 02:00 بعد از ظهر) رزرو کند. مانند رزرو عمل نمی کند به عنوان مثال در رستوران ها اما فقط برای چند دقیقه جالب.

به دلیل عدم وجود اتصال LAN در محل ، تنها گزینه استفاده از WLAN است - به هر حال بهترین گزینه است. مغز سیستم باید از Slack API برای ارسال و دریافت دستورات از کانال Slack استفاده کند. ابتدا سعی کردم از NodeMCU استفاده کنم. من قادر به دریافت و دریافت پیام ها به Slack و از آن بودم ، اما به دلیل استفاده از HTTPS و همچنین اندازه "پیام خوش آمدگویی" Slack (300 کیلوبایت پوند) ، NodeMCU ارتباط خود را از دست داده و/یا استثنایی عجیب و غریب داشت که نمی توانم از طریق اینترنت آن را حل کنم. به

بنابراین تصمیم گرفتم از چیزی قدرتمندتر استفاده کنم: Raspberry Pi 3 (Zero W با WiFi هنوز در آن زمان منتشر نشده بود). با داشتن RPi ، می توانم زبان پیاده سازی را از C به جاوا تغییر دهم ، زیرا برای من راحت تر است - بنابراین این یک مزیت بود. امروزه می توانید از چیزی قدرتمندتر از NodeMCU و قدرت کمتری از RPi استفاده کنید. شاید تمشک صفر باشد؟

پس از ساخت اولین نمونه اولیه روی یک تخته نان با سیم کشی دیوانه ، طراحی و نمونه سازی زیاد ، سیستم به نظر می رسید که می تواند کار کند.

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

مرحله 2: مواد و ابزارها

موادی که استفاده کردم:

  • جعبه
  • رزبری پای ، کارت microSD ، منبع تغذیه میکرو USB
  • دکمه های سبز و قرمز بازی
  • صفحه نمایش LCD 16x2
  • LED ها - من از RGB استفاده کردم اما می توانید از رنگ مناسب استفاده کنید
  • کابل های جامپر مردانه به زن و زن به زن
  • رابط میکرو USB
  • مینی بردبرد فقط برای اتصال برخی سیم ها
  • کابل میکرو USB کوتاه به عنوان یک جهنده در داخل جعبه برای تغذیه RPi کار می کند

ابزارهایی که استفاده کردم:

  • چاقوی تیز (به عنوان مثال چاقوی مفید برای برش فرش)
  • ابزار چرخشی
  • چسب حرارتی تفنگی
  • ایستگاه لحیم کاری
  • انبردست ، انبردست/برش های جانبی
  • پیچ گوشتی
  • فایل
  • من

ابزارهایی که احتمالاً به آنها احتیاج دارید:

همه موارد بالا اما به جای "من" باید این باشد: "شما":)

مرحله 3: پنل جلو - صفحه LCD

پنل جلو - صفحه LCD
پنل جلو - صفحه LCD
پنل جلویی - صفحه LCD
پنل جلویی - صفحه LCD

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

مرحله 4: پنل جلو - LED های وضعیت

پنل جلو - LED های وضعیت
پنل جلو - LED های وضعیت
پنل جلو - LED های وضعیت
پنل جلو - LED های وضعیت

سوراخ های LED نیز ساده هستند. من فقط یک مته بزرگ برای چوب برداشتم و سپس لبه ها را با ابزار حفاری صیقل دادم. LED های بزرگ کاملاً محکم نصب شده اند. من هنوز هیچ مقاومتی را به LED ها نچسباندم - آن را برای فرایند مونتاژ گذاشتم.

مرحله 5: پنل جلو - دکمه ها

پنل جلو - دکمه ها
پنل جلو - دکمه ها
پنل جلو - دکمه ها
پنل جلو - دکمه ها
پنل جلو - دکمه ها
پنل جلو - دکمه ها
پنل جلو - دکمه ها
پنل جلو - دکمه ها

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

مرحله 6: اتصال برق

اتصال دهنده برق
اتصال دهنده برق

یک حفره کوچک برای تغذیه میکرو USB کار بسیار ظریفی بود. من می خواستم سوراخ تا آنجا که ممکن است مناسب باشد ، بنابراین من زمان زیادی را برای پرداخت انجام دادم. اما از نتیجه نهایی راضی بودم.

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

سپس PCB کوچک را مستقیماً روی جعبه چسباندم (در مرحله مونتاژ روی عکس قابل مشاهده است).

مرحله 7: همه چیز را کنار هم قرار دهید

همه چیز را کنار هم قرار دادن
همه چیز را کنار هم قرار دادن
همه چیز را کنار هم قرار دادن
همه چیز را کنار هم قرار دادن
همه چیز را کنار هم قرار دادن
همه چیز را کنار هم قرار دادن

ابتدا مقاومتهای مناسب را با توجه به رنگ (ولتاژ) LED ها به مدت 3.3 ولت به LED ها لحیم کردم. من از 100Ω برای رنگ قرمز ، دو مقاومت 82 و 100 برای رنگ زرد (گره سبز و قرمز) و 100Ω برای رنگ سبز استفاده کردم. می توانید از یک مقاومت آنلاین برای ماشین حساب LED استفاده کنید. اما لطفاً خودتان با توجه به روشنایی و رنگ دقیق مورد نظر خود تحقیق کنید.

پاهای LED زرد به هم چسبیده اند بنابراین خود LED می تواند تنها با یک پین در RPi کنترل شود.

با توجه به این نمودار pinout:

گره های LED متصل شدند:

  • چراغ سبز - GPIO1 در Rpi
  • LED زرد (هر دو پا) تا GPIO2 در RPi
  • LED قرمز به GPIO0 در RPi

من LCD را با استفاده از پین های I2C روی پین های RPi متصل کردم

  • LCD SDA به GPIO8 در RPi
  • LCD SCL به GPIO9 در RPi
  • LCD PWR تا 5V در RPi
  • LCD GND به GND در RPi

LCD به عنوان محافظ اضافی به صورت داغ روی جعبه چسبانده شد.

3.3V و GND را به تخته نان کوچک وصل کردم تا بتوانم از آنها برای دکمه ها استفاده کنم.

دکمه سبز از طریق مینی بردبرد به 3.3V و در RPi به GPIO5 متصل شد.

دکمه قرمز از طریق مینی بردبرد به 3.3V و در RPi به GPIO4 متصل شد.

بنابراین هر زمان که دکمه را فشار دهید ، وضعیت بالایی روی پین RPi وجود دارد.

مینی براد بورد بسیار خوب کار می کند بنابراین از لحیم تمام سیم ها به PCB صرف نظر کردم. در عوض من فقط مینی برد را با چسب داغ پوشاندم تا کابل ها از بین نروند.

همچنین جلد RPi را به صورت گرم روی جعبه چسبانده ام تا در داخل تکان نخورد.

پنل جلویی را با تمام وسایل داخلش پیچ کردم.

سپس برچسب های ساده را در کنار چراغ راهنما و دکمه ها چاپ ، برش و چسباندم.

مرحله 8: پیکربندی Slack

پیکربندی Slack
پیکربندی Slack
پیکربندی Slack
پیکربندی Slack

تیم خود را در Slack.com ایجاد کنید یا از تیمی که دارید و حداقل حقوق سرپرست دارید استفاده کنید.

در Slack ، یک کانال برای ادغام Slack سرویس ایجاد کنید (یا اگر می خواهید از کانالی که قبلاً دارید استفاده کنید ، از ایجاد آن صرف نظر کنید).

ادغام Webhooks ورودی را به تیم خود اضافه کنید. کانال را انتخاب کرده و نشانی وب webhook را کپی کنید.

یکپارچگی ربات ها را به تیم خود اضافه کنید. نامی برای ربات خود انتخاب کنید و رمز API ربات را کپی کنید.

صفحه ادغام سفارشی شما باید مانند تصویر باشد.

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

اگر می خواهید بعداً سرویس را سفارشی کنید ، لطفاً Slack API را بررسی کنید.

مرحله 9: پیاده سازی نرم افزار

من با دنبال کردن این آموزش از Raspbian به عنوان یک سیستم عامل برای RPi خود استفاده کردم. لطفاً مرا ببخشید ، من از توضیح آن صرف نظر خواهم کرد زیرا قبلاً در بسیاری از نقاط مستند شده است و روند آن ساده است. امیدوارم از مهارت و تجربه کافی برخوردار باشید تا بتوانید RPi را به تنهایی تنظیم کنید. لطفاً پیکربندی دسترسی WiFi را در Raspberry Pi خود فراموش نکنید ؛)

همانطور که در بخش نمونه سازی ذکر شد ، من از جاوا برای پیاده سازی مغز کل سیستم استفاده کردم. کد در GitHub در دسترس است -

کتابخانه های جاوا که استفاده کردم:

  • pi4j - برای استفاده از Raspberry Pi از جاوا
  • Springboot به عنوان یک برنامه کاربردی
  • allbegray/slack-api به عنوان ادغام Slack

شما باید فایل پیکربندی را در src/resources/config.properties ویرایش کنید. 3 ورودی وجود دارد که برای استفاده از Slack API باید آنها را پیکربندی کنید:

  • channelName - نام کانالی که می خواهید تغییرات وضعیت را ارسال کرده و دستورات را دریافت کنید.
  • slackBotToken - نشانه ربات پیکربندی شده در ترکیب تیم Slack شما که برای ارسال پیام به کانال ذکر شده در بالا استفاده می شود. لطفا توجه داشته باشید باید Slack Bot را به عنوان عضو کانال اضافه کنید.
  • webhookUrl - نشانی اینترنتی که می توانید از ادغام های سفارشی Slack Team دریافت کنید.

پروژه Mavenized است ، بنابراین برای ساخت آن فقط تایپ کنید (شما حداقل باید Java 8 و Maven را نصب کنید):

بسته تمیز mvn

و در فهرست راهنمای هدف می توانید فایل JAR Springbooted را پیدا کنید. برای راه اندازی سرویس:

sudo java -jar kicker-reservation-service-0.3.0.jar

این خط را روی اسکریپت.sh قرار دادم و آن را به عنوان راه اندازی خودکار اضافه کردم. بنابراین هر زمان که برق روشن باشد ، سرویس بطور خودکار بوت می شود.

یک توضیح ویژه برای LCD لازم است.

من روشها/کتابخانه های مختلف را برای کنترل LCD بر روی I2C از طریق RPi امتحان کردم ، اما من شکست خوردم. برای برخی از LCD ها به درستی کار نمی کرد ، برای برخی دیگر زباله ها نشان داده می شد.

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

باید ابزار را بارگیری کرده و در کنار سرویس JAR قرار دهید

استفاده از این ابزار نوعی راه حل هک و احمقانه است اما من از قانون اول مهندسی پیروی می کنم:

اگر احمقانه باشد ، اما کار کند … احمقانه نیست

مرحله 10: دستورالعمل استفاده

دستورالعمل استفاده
دستورالعمل استفاده

می توانید با تایپ فرمان "status" (یا به اختصار "st") وضعیت فعلی جدول kicker table را در کانال Slack ایجاد شده بررسی کنید یا مستقیماً چراغ های راهنمای دستگاه را بررسی کنید.

اگر فقط می خواهید بازی کنید - دکمه قرمز را فشار دهید. پیام با اطلاعاتی مبنی بر اینکه میز بازکن اشغال شده است به کانال Slack ارسال می شود. وقتی بازی را تمام کردید - دکمه سبز را فشار دهید. پیامی با اطلاعاتی مبنی بر رایگان بودن بازی kicker table به کانال Slack ارسال می شود.

چراغ های راهنمایی نیز تغییر می کنند و صفحه LCD برخی اطلاعات دقیق را نشان می دهد.

فقط در صورتی که فراموش کنید بعد از اتمام بازی جدول را رها کنید ، یک تایم اوت روی 20 دقیقه تنظیم شده است. اگر هنوز در حال بازی هستید و به زمان بیشتری احتیاج دارید ، دوباره دکمه قرمز را فشار دهید و مسابقه 5 دقیقه تمدید می شود (فقط زمانی اعمال می شود که کمتر از 5 دقیقه به پایان زمان باقی مانده باشد). زمان پایان بازی روی صفحه LCD نمایش داده می شود.

برای رزرو میز بازکن ، یک پیام "رزرو" (یا فقط: "res") به کانال Slack بنویسید.

چراغ راهنمایی زرد روشن می شود و به دیگران در نزدیکی میز لگد اطلاع می دهد که رزرو شده است و به زودی کسی به بازی می آید.

مدت زمان رزرو 3 دقیقه تنظیم شده است. پس از آن ، میز kicker حالت خود را به حالت رایگان برای بازی تغییر می دهد.

در صورت نیاز ، می توانید رزرو را با نوشتن "لغو" در کانال Slack لغو کنید.

سیستم دارای برخی از ویژگی های جزئی دیگر مانند:

  • پس از رزرو ، دکمه ها به مدت 5 ثانیه فریز می شوند. این امر به منظور جلوگیری از شرایط است ، همانطور که در همان زمان شخصی رزرو می کند و یک میلی ثانیه بعد ، کسی دکمه قرمز را فشار می دهد و فکر می کند که او کسی است که میز را اشغال کرده است ، اما بدون آنکه کسی میز را فقط یک میلی ثانیه قبل رزرو کرده باشد.
  • با فشردن هر دکمه هر دوی آنها برای نیم ثانیه منجمد می شوند. این به منظور جلوگیری از کلیک های دیوانه وار دکمه است تا کانال Slack اینقدر اسپم نشود.
  • نسخه رایگان Slack امکان ذخیره 10000 پیام توسط کل تیم را فراهم می کند. برای حفظ برخی از پیام ها ، سرویس پیام های قدیمی مربوط به رزرو/سیستم وضعیت را حذف کنید) و فقط 6 مورد از آنها را نگه دارید. چرا 6؟ زیرا اغلب 2 سناریو وضعیت وجود دارد: "رزرو شده-اشغال شده-رایگان" و "اشغال-رایگان". بنابراین سیستم می تواند حداقل 2 جلسه کامل بدون اشغال را ذخیره کند. برای پاک کردن همه پیام های سیستم ، دستور "clean" (یا "clear") را تایپ کنید.

مرحله 11: رهاسازی

رها کردن
رها کردن
رها کردن
رها کردن

تا کنون (زمان انتشار این دستورالعمل) ، این سیستم بیش از 2.5 ماه کار می کند و بیش از 30 نفر از آن استفاده می کنند. به دلیل بروزرسانی وضعیت میز میزبان ، ما همیشه می دانیم چه زمانی رایگان یا اشغال شده است ، بنابراین دیگر زمان را برای رفت و برگشت از دست نمی دهیم. اتصال و سرویس بسیار پایدار است ، بنابراین می توانیم به آن اعتماد کنیم.

تا کنون خیلی خوب…

مرحله 12: سوالات متداول

چرا مدت زمان رزرو 3 دقیقه تنظیم شده است؟

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

چرا تایم اوت بازی روی 20 دقیقه تنظیم شده است؟

بسته به بازیکنان ، متوسط زمان بازی 10 دقیقه است. اگر نیاز به بازی بیشتر دارید ، در کمتر از 5 دقیقه دیگر دکمه قرمز را دوباره فشار دهید و مهلت زمانی به 5 دقیقه افزایش می یابد. این تایم اوت فقط در صورتی تنظیم می شود که کسی فراموش کند جدول را رها کند.

چرا هیچ پد PIN روی دستگاه برای تأیید رزرو وجود ندارد. ورود و رمز ورود ندارید؟

ایده اصلی این بود که ساده-احمقانه به نظر برسد. در غیر این صورت ، اگر رزرو ، شروع و پایان بازی به تلاش زیادی نیاز داشته باشد ، هیچ کس نخواهد از آن استفاده کند.

چرا این دستگاه از نظر صنعتی بسیار زشت به نظر می رسد؟

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

چرا فقط برخی از برنامه ها را اجرا نکرده و رایانه لوحی ارزان قیمت را با همان عملکرد به دیوار چسبانده اید؟

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

توصیه شده: