Mündəricat:

Sadə Kicker Vəziyyəti və Rezervasyon Sistemi Gücsüz İnteqrasiya ilə: 12 Addım (Şəkillərlə)
Sadə Kicker Vəziyyəti və Rezervasyon Sistemi Gücsüz İnteqrasiya ilə: 12 Addım (Şəkillərlə)

Video: Sadə Kicker Vəziyyəti və Rezervasyon Sistemi Gücsüz İnteqrasiya ilə: 12 Addım (Şəkillərlə)

Video: Sadə Kicker Vəziyyəti və Rezervasyon Sistemi Gücsüz İnteqrasiya ilə: 12 Addım (Şəkillərlə)
Video: Heydər Əliyev və Həyat yoldaşını Birdə belə görün #azerbaijan #president #prezident #xeberler #xeber 2024, Iyul
Anonim
Sadə inteqrasiya ilə sadə Kicker Statusu və Rezervasyon Sistemi
Sadə inteqrasiya ilə sadə Kicker Statusu və Rezervasyon Sistemi

İşlədiyim bir şirkətdə kicker masası var. Şirkət bir çox mərtəbəni tutur və bəzi işçilər üçün masaya çatmaq üçün 3 dəqiqəyə qədər vaxt lazımdır və… masanın artıq işğal altında olduğunu başa düşmək.

Buna görə real vaxt rejimində işləyən bir növ sadə status yayım və rezervasyon sistemi qurmaq fikri yarandı.

Şirkət hər bir işçinin hesabının olduğu Slack ünsiyyət vasitəsindən istifadə edir. Hətta… kicker haqqında müzakirələr üçün bir #kicker kanalımız da var. Kanal, rezervasyon üçün bir növ "giriş nöqtəsi" olaraq istifadə edilə bilər və cədvəlin cari vəziyyəti haqqında məlumatlandırıla bilər.

Həmişə olduğu kimi, belə bir sistemlə necə davranılacağına dair bir çox anlayış var. Ancaq ümumiyyətlə, hamısında bir əsas qayda ortaya çıxdı: sistemlə işləyərkən heç bir həddindən artıq addım atmadan istifadə etmək sadə olmalıdır.

Cihaz və xidmət kicker masasına yapışdırılmır və hər hansı bir "ümumi qaynaq" üçün istifadə edilə bilər (stolüstü tennis masası, konsol, və s.)

Beləliklə, başlayaq…

Addım 1: Konsepsiya və Prototipləşdirmənin sübutu

Konsepsiya və Prototipləşdirmənin sübutu
Konsepsiya və Prototipləşdirmənin sübutu
Konsepsiya və Prototipləşdirmənin sübutu
Konsepsiya və Prototipləşdirmənin sübutu
Konsepsiya və Prototipləşdirmənin sübutu
Konsepsiya və Prototipləşdirmənin sübutu

Ciddi fikir, bu tələblərə uyğun olaraq kicker masasının yanında qoyulacaq bir cihaz qurmaq idi:

  • cari masanın vəziyyəti ilə bağlı bəzi göstəricilər - yanında dayansanız, bunun pulsuz və ya ayrılmış olduğunu bilməlisiniz və kimsə 3 dəqiqədən sonra oynamağa gələcək. Svetoforlar fikrə mükəmməl uyğun gəlir:

    • yaşıl işıq - oynamaq pulsuzdur,
    • sarı işıq - qorunur,
    • qırmızı işıq - işğal olunmuşdur.
  • düymələr (lər) Oyundan əvvəl və sonra tıklayarak hamı cari masanın vəziyyəti haqqında məlumat ala bilər. 1 keçid düyməsinin yerinə 2 ayrı düyməni istifadə etmək qərarına gəldim:

    • qırmızı düymə - masanı tutun, oyuna başlayın (rezervasiyadan və ya ad hocdan sonra).
    • yaşıl düymə - buraxılış masası.
  • "neler oluyor" haqqında daha ətraflı məlumatı olan bəzi ekranlar - rezervasiya zaman aşımı, təkrarlanan cədvəl vəziyyəti, oyun vaxtı fasiləsi və s.

Rezervasiya dedikdə, növbəti 3 dəqiqəlik rezervasyonu nəzərdə tuturam. Sistem, istifadəçinin cədvəli dəqiq vaxtda (məsələn, 02:00) rezerv edə bilməsi üçün nəzərdə tutulmamışdır. Rezervasiya kimi işləmir, məsələn. restoranlarda ancaq bir neçə dəqiqə ərzində.

Yerdə LAN bağlantısı olmadığından, yeganə seçim WLAN -dan istifadə etməkdir - hər halda ən yaxşı seçimdir. Sistemin beyni Slack kanalından əmr göndərmək və almaq üçün Slack API -dən istifadə etməlidir. Əvvəlcə NodeMCU istifadə etməyə çalışdım. Slack -ə və ondan mesaj ala bildim, amma HTTPS istifadəsi və eyni zamanda Slack -in "xoş mesaj" ölçüsü (~ 300kB) səbəbiylə NodeMCU əlaqəni kəsdi və/və ya İnternet vasitəsilə qazmağı həll edə bilmədiyim qəribə bir istisna aldı..

Buna görə daha güclü bir şey istifadə etmək qərarına gəldim: Raspberry Pi 3 (WiFi ilə Zero W hələ o vaxt buraxılmamışdı). RPi -yə sahib olmaq mənim üçün daha əlverişli olduğu üçün tətbiq dilini C -dən Java -ya keçirə bilərdim - buna görə də bu bir üstünlük idi. Bu gün NodeMCU -dan daha güclü və RPi -dən daha az güclü bir şey istifadə edə bilərsiniz. Raspberry Zero bəlkə?

Çılpaq bir naqildə, çoxlu eskiz və prototipləri olan bir çörək taxtasında ilk prototip qurduqdan sonra, sistem işləyə bilər kimi görünürdü.

Bütün bu fikirlərə və işləyən PoC -ə malik olduqdan sonra, yuxarıdakı maddələrin fərqli yerləşdirmə konfiqurasiyalarını ön paneldə planlaşdırmağa başladım ki, istifadə üçün ən məlumatlı və əlverişli olsun. Digər təkliflərdən bəzilərini yoxlaya bilərsiniz, bəlkə bəziləri sizə daha uyğun gəlir. Sonuncu mənim seçdiyim idi.

Addım 2: Materiallar və Alətlər

İstifadə etdiyim materiallar:

  • Qutu
  • Raspberry Pi, microSD kart, micro USB enerji təchizatı
  • Yaşıl və qırmızı arcade düymələri
  • 16x2 LCD ekran
  • LEDlər - RGB istifadə etdim, ancaq uyğun rəngdən istifadə edə bilərsiniz
  • Kişi -Dişi və Qadın -Dişi çörək taxtası tullanan kabelləri
  • Mikro USB interfeysi
  • Mini çörək taxtası yalnız bəzi telləri bağlamaq üçün
  • RPi -ni gücləndirmək üçün qutunun içərisində tullanan kimi işləyən qısa mikro USB kabeli

İstifadə etdiyim vasitələr:

  • Kəskin bıçaq (məsələn, xalça kəsmək üçün köməkçi bıçaq)
  • Rotary aləti
  • İsti yapışqan silahı
  • Lehim stansiyası
  • Kəlbətinlər, diaqonal kəlbətinlər/yan kəsicilər
  • Tornavida
  • Fayl
  • Mən

Ehtimal ki, ehtiyacınız olan vasitələr:

Yuxarıda göstərilənlərin hamısı, ancaq "Mən" yerinə: "Sən" olmalıdır:)

Addım 3: Ön Panel - LCD Ekran

Ön Panel - LCD Ekran
Ön Panel - LCD Ekran
Ön Panel - LCD Ekran
Ön Panel - LCD Ekran

LCD ekran üçün deşik sadə idi. Sadəcə LCD ekranıma uyğun bir düzbucaq. Kəskin bir bıçaqla kəsməyə çalışdıqdan sonra, sandığın plastikinin olduqca çətin olduğunu başa düşdüm. Pəncərəni kəsmək və kənarlarını cilalamaq üçün qazma alətindən istifadə etdim.

Addım 4: Ön Panel - Status LEDləri

Ön Panel - Vəziyyət LEDləri
Ön Panel - Vəziyyət LEDləri
Ön Panel - Vəziyyət LEDləri
Ön Panel - Vəziyyət LEDləri

LED delikləri də sadədir. Ağac üçün böyük bir matkap aldım və sonra kənarlarını qazma aləti ilə cilaladım. Böyük LED -lər mükəmməl uyğunlaşdırılmışdır. Hələ heç bir rezistoru LED -ə lehimləməmişəm - montaj prosesinə buraxmışam.

Addım 5: Ön Panel - Düymələr

Ön Panel - Düymələr
Ön Panel - Düymələr
Ön Panel - Düymələr
Ön Panel - Düymələr
Ön Panel - Düymələr
Ön Panel - Düymələr
Ön Panel - Düymələr
Ön Panel - Düymələr

Bu 2 böyük düymənin ən böyük problemi onları düzgün aralıqla bərabər yerləşdirmək idi. Delikləri addım -addım artıra biləcəyim üçün qazma alətimdən istifadə edərək kəsdim, belə ki düymələr sıx bağlanır.

Addım 6: Güc Konnektoru

Güc Konnektoru
Güc Konnektoru

Mikro USB gücü üçün kiçik bir çuxur etmək çox həssas bir iş idi. Deliyin mümkün qədər uyğun olmasını istədim, buna görə cilalamaq üçün çox vaxt sərf etdim. Amma son nəticədən razı qaldım.

Sonra qutunun içərisinə qoyulmuş qısa bir mini USB kabelini kəsdim. Bir tərəfdən RPi -yə qoşulur, digər tərəfdən isə bütün kabellər USB pinlərinə uyğun olaraq mikro USB interfeysinə lehimlənir.

Sonra kiçik PCB-ni birbaşa qutuya yapışdırdım (montaj addımındakı bir fotoşəkildə görmək olar).

Addım 7: Hər şeyi bir yerə yığın

Hər şeyi bir yerə yığmaq
Hər şeyi bir yerə yığmaq
Hər şeyi bir yerə yığmaq
Hər şeyi bir yerə yığmaq
Hər şeyi bir yerə yığmaq
Hər şeyi bir yerə yığmaq

Əvvəlcə rənglərinə (gərginliyinə) görə 3.3V volt üçün LED -lərə uyğun rezistorları lehimlədim. Qırmızı üçün 100Ω, sarı üçün iki rezistor 82 və 100 (yaşıl və qırmızı düyün) və yaşıl üçün 100Ω istifadə etdim. LED kalkulyatoru üçün onlayn rezistorlardan birini istifadə edə bilərsiniz. Ancaq əldə etmək istədiyiniz parlaqlığa və dəqiq rəng tonuna görə özünüz tərəfindən bir az araşdırma aparın.

Sarı LED ayaqları birlikdə lehimlənmişdi, buna görə də LED -in özü RPi -də yalnız bir pinlə idarə oluna bilər.

Bu pin diaqramına görə:

LED düyünləri birləşdirildi:

  • Yaşıl LED - Rpi üzərində GPIO1
  • Sarı LED (hər iki ayağı) RPi üzərindəki GPIO2 -yə
  • RPi -də GPIO0 -a qırmızı LED

LCD -ni RPi pinlərindəki I2C pinlərindən istifadə edərək bağladım

  • RPi -də GPIO8 -dən LCD SDA
  • RPi -də GPIO9 -a LCD SCL
  • RPi -də 5V -ə qədər LCD PWR
  • LCD GND - RPi üzərindəki GND

LCD, əlavə bir qoruma olaraq qutuya isti yapışdırıldı.

Kiçik çörək taxtasına 3.3V və GND bağladım ki, düymələr üçün istifadə edim.

Yaşıl düymə, mini çörək taxtası vasitəsilə 3.3V -ə və RPi -də GPIO5 -ə qoşuldu.

Qırmızı düymə, mini çörək taxtası vasitəsilə 3.3V -ə və RPi -də GPIO4 -ə qoşuldu.

Beləliklə, düyməni hər dəfə basdığınızda, RPi pinində yüksək bir vəziyyət var.

Mini bradboard yaxşı işləyir, buna görə bütün telləri PCB -yə lehimləməyi atdım. Bunun əvəzinə, mini çörək taxtasını isti yapışqanla örtdüm ki, kabellər düşməsin.

İçəridə titrəməyəcəyi üçün RPi-nin qapağını da isti yapışdırdım.

Ön paneli içərisindəki bütün əşyalarla vidaladım.

Sonra işıqforların və düymələrin yanındakı sadə yazıları çap etdim, kəsdim və yapışdırdım.

Addım 8: Slack Konfiqurasiyası

Slack Konfiqurasiyası
Slack Konfiqurasiyası
Slack Konfiqurasiyası
Slack Konfiqurasiyası

Slack.com -da komandanızı yaradın və ya ən azı idarəçi hüququnuza sahib olduğunuzdan istifadə edin.

Slack -də xidmətin Slack inteqrasiyası üçün bir kanal yaradın (və ya artıq istifadə etdiyiniz bir kanaldan istifadə etmək istəyirsinizsə kanal yaratmağı atlayın).

Komandanıza Gələn Webhooks inteqrasiyasını əlavə edin. Kanalı seçin və webhook URL -ni kopyalayın.

Komandanıza Botların inteqrasiyasını əlavə edin. Botunuz üçün bir ad seçin və bot API simvolunu kopyalayın.

Xüsusi inteqrasiya səhifəniz şəkildəki kimi görünməlidir.

Botu kanalınızın üzvü olaraq dəvət etməlisiniz. Kanal yaratarkən bunu edə bilərsiniz.

Xidməti daha sonra fərdiləşdirmək istəyirsinizsə, Slack API -ni yoxlayın.

Addım 9: Proqram təminatı

Bu təlimatı izləyərək RPB -ni RPi üçün əməliyyat sistemi olaraq istifadə etdim. Zəhmət olmasa bir çox yerdə sənədləşdirildiyi və prosesin sadə olduğu üçün izah etməyi atacağam, məni bağışlayın. Ümid edirəm ki, RPi -ni özünüz qura biləcəyiniz qədər bacarıqlı və təcrübəlisiniz. Zəhmət olmasa Raspberry Pi -də WiFi girişini konfiqurasiya etməyi unutmayın;)

Prototipləşdirmə bölməsində qeyd edildiyi kimi, bütün sistemin beynini həyata keçirmək üçün Java istifadə etdim. Kod GitHub -da mövcuddur -

İstifadə etdiyim Java kitabxanaları:

  • pi4j - Java'dan Raspberry Pi istifadə etmək
  • Bir tətbiq platrorm olaraq Springboot
  • allbegray/slack-api, Slack inteqrasiyası kimi

Src/resources/config.properties konfiqurasiya faylını redaktə etməlisiniz. Slack API istifadə etmək üçün konfiqurasiya etməli olduğunuz 3 giriş var:

  • channelName - status dəyişikliklərini göndərmək və əmrləri almaq istədiyiniz kanalın adı.
  • slackBotToken - yuxarıda qeyd olunan kanala mesaj göndərmək üçün istifadə ediləcək Slack komanda inteqrasiyanızda konfiqurasiya edilmiş bir bot simvolu. Unutmayın ki, Slack Botu kanalın üzvü olaraq əlavə etməlisiniz.
  • webhookUrl - Slack Team -in xüsusi inteqrasiyalarından əldə edə biləcəyiniz URL.

Layihə Mavenizeddir, buna görə onu qurmaq üçün sadəcə yazın (ən azı Java 8 və Maven quraşdırılmalıdır):

mvn təmiz paketi

Və hədəf tirektoriyasında Springbooted JAR faylını tapa bilərsiniz. Xidmətə başlamaq üçün:

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

Bu xətti.sh skriptinə qoydum və avtomatik başlanğıc olaraq əlavə etdim. Beləliklə, güc nə vaxt açılırsa, xidmət avtomatik olaraq açılır.

LCD üçün xüsusi bir izahat lazımdır.

LCD -ni I2C üzərindən RPi -dən idarə etmək üçün fərqli yanaşmalar/kitabxanalar sınadım, ancaq uğursuz oldum. Bəzi LCD -lər düzgün işləmirdi, bəziləri üçün zibil göstərirdi.

Ancaq bir şey qutudan kənarda çox gözəl işləyirdi. LCD -ni idarə etmək üçün istifadə edə biləcəyim bir köməkçi əmr satırı vasitəsidir. Bu vasitəni birbaşa Java -dan istifadə etməyə qərar verdim. Hər dəfə LCD ekranda bir şey göstərmək istədiyim zaman normal bir Linux prosesinin (lcdi2c) (hazır parametrlərlə) adlandırılması belə işləyir.

Aləti yükləməli və JAR xidmətinin yanında yerləşdirməlisiniz

Bu vasitədən istifadə etmək bir növ hack və axmaq bir həlldir, amma mühəndisliyin 1 -ci qaydasına əməl edirəm:

Axmaqdır, amma işləyirsə … axmaq deyil

Addım 10: İstifadə Təlimatı

İstifadə Təlimatı
İstifadə Təlimatı

Yaradılmış Slack kanalında "status" (və ya qısaca "st") əmrini yazaraq cərəyan cədvəlinin cari vəziyyətini yoxlaya və ya birbaşa cihazdakı işıqforları yoxlaya bilərsiniz.

Yalnız oynamaq istəyirsinizsə - qırmızı düyməni basın. Kicker masasının tutulduğu barədə məlumat Slack kanalına göndəriləcək. Oynamağı bitirdikdə - yaşıl düyməni basın. Mesaj, Slack kanalına kicker masasının pulsuz oynanılacağı məlumatla göndəriləcək.

Svetoforlar da dəyişəcək və LCD ekranda bəzi detallı məlumatlar göstəriləcək.

Oynamağı bitirdikdən sonra cədvəli buraxmağı unudursanız, 20 dəqiqəlik bir fasilə var. Hələ də oynayırsınızsa və daha çox vaxt lazımdırsa, qırmızı düyməni yenidən basın və matç 5 dəqiqə uzadılacaq (yalnız fasilənin bitməsinə 5 dəqiqədən az vaxt qaldıqda tətbiq oluna bilər). Çalma zaman aşımı LCD ekranda təqdim olunacaq.

Kicker cədvəlini rezerv etmək üçün Slack kanalına "rezerv" (və ya sadəcə: "res") mesajı yazın.

Sarı svetofor açılan masanın yaxınlığındakı yerlərin ayrıldığını bildirir və tezliklə kimsə oynamağa gələcək.

Rezervasyon zaman aşımı 3 dəqiqəyə təyin edilmişdir. Bundan sonra, kicker masası vəziyyətini pulsuz oynamaq üçün dəyişir.

Lazım gələrsə, Slack kanalına "ləğv et" yazaraq rezervasiyanı ləğv edə bilərsiniz.

Sistemin bəzi digər kiçik xüsusiyyətləri də var:

  • Rezervasyondan sonra düymələr 5 saniyə ərzində donur. Vəziyyətlərin qarşısını almaq üçün budur ki, eyni anda kimsə ehtiyat edir və bir milisaniyədən sonra kimsə masanı əlində tutan adam olduğunu düşünərək qırmızı düyməni basır, ancaq kiminsə masanı yalnız bir milisaniyə əvvəl ayırdığını bilmir.
  • Hər hansı bir düyməyə basmaq hər ikisini yarım saniyə ərzində dondurur. Bu, dəli düymələrin tıklanmasının qarşısını almaq üçündür, beləliklə Slack kanalına o qədər spam göndərilməyəcək.
  • Slack -in pulsuz versiyası bütün komanda tərəfindən 10000 mesaj saxlamağa imkan verir. Mesajların bir hissəsini qorumaq üçün xidmət rezervasyon/status sistemi ilə bağlı köhnə mesajları silin) və yalnız son 6 -nı saxlayın. Niyə 6? Çünki ən çox 2 status ssenarisi var: "Qorunmuş-İşğalsız" və "İşğalsız". Beləliklə, sistem ən azı 2 tam boş sessiyanı saxlaya bilər. Bütün sistem mesajlarını təmizləmək üçün "təmizlə" (və ya "sil") əmrini yazın.

Addım 11: Sərbəst buraxın

Sərbəst buraxılır
Sərbəst buraxılır
Sərbəst buraxılır
Sərbəst buraxılır

İndiyə qədər (bu təlimatı dərc etmək anında) sistem 2.5+ ay ərzində işləyir və 30 -dan çox insan tərəfindən istifadə olunur. Kicker masa statusu yeniləməsi səbəbindən, həmişə boş və ya işğal edildiyini bilirik, buna görə artıq geri və irəli gedən vaxtımızı itirmirik. Bağlantı və xidmət çox sabitdir, buna görə etibar edə bilərik.

İndiyə qədər, çox yaxşı…

Addım 12: FAQ

Niyə rezervasiya müddəti 3 dəqiqəyə təyin olunur?

Maksimum sifariş müddəti 3 dəqiqədir, kodda istədiyiniz kimi qəbul edin. Ümumiyyətlə nadir hallarda baş verir, tam 3 dəqiqə keçəcək və rezervasyonun vaxtı bitəcək. Əksər hallarda kimsə axırda gəlib masanı tutacaq.

Niyə oyun fasiləsi 20 dəqiqəyə təyin olunur?

Bir oyunçudan asılı olaraq, orta oyun müddəti ~ 10 dəqiqədir. Daha uzun oynamaq lazımdırsa, 5 dəqiqədən az qaldıqda yenidən qırmızı düyməni basın və fasilə 5 dəqiqəyə qədər uzadılacaq. Bu zaman aşımı, kimsə masanı buraxmağı unudarsa qurulur.

Rezervasiyanı təsdiqləmək üçün cihazda niyə PİN pad yoxdur; giriş və parol yoxdur?

Əsas fikir sadə-axmaq saxlamaq idi. Əks təqdirdə, oyunun başlanması və bitməsi üçün çox səy lazımdırsa, heç kim bundan istifadə etmək istəməyəcək.

Niyə cihaz bu qədər sənaye baxımından çirkin görünür?

Lazer kəsici, CNC, 3D printer, xülya rəngli etiket istehsalçısı vs. olmadığım üçün onu təkmilləşdirmək və daha gözəl etməkdən çox məmnunuq.

Niyə yalnız bir tətbiq tətbiq etməyib eyni funksiyaya malik ucuz planşeti divara yapışdırmırsınız?

Hər yerdə tətbiqlər, tətbiqlər. İnsanlar şeylərlə fiziki olaraq ünsiyyət qurmağı sevirlər və yalnız düz bir ekrana toxunmurlar.

Tövsiyə: