Obsah:

Jednoduchý systém stavu a rezervácie kickeru s integráciou Slack: 12 krokov (s obrázkami)
Jednoduchý systém stavu a rezervácie kickeru s integráciou Slack: 12 krokov (s obrázkami)

Video: Jednoduchý systém stavu a rezervácie kickeru s integráciou Slack: 12 krokov (s obrázkami)

Video: Jednoduchý systém stavu a rezervácie kickeru s integráciou Slack: 12 krokov (s obrázkami)
Video: Maximize your occupancy with a digital reservation system | Tips & Tricks | DISH by METRO 2024, Júl
Anonim
Jednoduchý systém stavu a rezervácie kickeru s integráciou Slack
Jednoduchý systém stavu a rezervácie kickeru s integráciou Slack

V spoločnosti, kde pracujem, je stôl na kopanie. Spoločnosť zaberá mnoho poschodí a niektorým zamestnancom trvá až 3 minúty, kým sa dostanú k stolu a … kým si uvedomia, že stôl je už obsadený.

Preto vznikla myšlienka vybudovať druh jednoduchého stavového vysielacieho a rezervačného systému, ktorý funguje v reálnom čase.

Spoločnosť používa komunikačný nástroj Slack, kde má každý zamestnanec účet. Dokonca máme kanál #kicker len na diskusie o … kickeri. Kanál by mohol byť použitý ako akýsi „vstupný bod“pre rezerváciu a informovanie o aktuálnom stave tabuľky.

Ako obvykle, existuje mnoho konceptov, ako sa s takýmto systémom vysporiadať. Spravidla sa však vo všetkých objavilo jedno základné pravidlo: používanie musí byť jednoduché, bez zbytočných krokov, ktoré je potrebné pri práci so systémom vykonávať.

Zariadenie a služba nie sú prilepené k tabuľke kickerov a dajú sa použiť na akýkoľvek „spoločný zdroj“(napríklad stolný tenis, konzolu atď.…), Ktorý potrebuje nejaký druh riešenia na šírenie stavu a rezerváciu.

Začnime teda…

Krok 1: Dôkaz konceptu a prototypu

Dôkaz koncepcie a prototypu
Dôkaz koncepcie a prototypu
Dôkaz koncepcie a prototypu
Dôkaz koncepcie a prototypu
Dôkaz koncepcie a prototypu
Dôkaz koncepcie a prototypu

Raughly bola myšlienka postaviť zariadenie, ktoré bude ležať vedľa kopacieho stolu podľa týchto požiadaviek:

  • niektoré indikátory o aktuálnom stave stola - ak stojíte vedľa neho, mali by ste vedieť, že je bezplatný alebo rezervovaný a niekto príde hrať o 3 minúty. Semafory dokonale zodpovedajú tejto myšlienke:

    • zelené svetlo - bezplatné hranie,
    • žlté svetlo - vyhradené,
    • červené svetlo - obsadené.
  • tlačidlá Môžete kliknúť pred a po hre, aby boli všetci ostatní informovaní o aktuálnom stave stola. Namiesto 1 prepínacieho tlačidla som sa rozhodol použiť 2 oddelené tlačidlá:

    • červené tlačidlo - obsadiť stôl, začať hru (po rezervácii alebo ad hoc).
    • zelené tlačidlo - uvoľňovacia tabuľka.
  • nejaký displej s podrobnejšími informáciami o „tom, čo sa deje“- časový limit rezervácie, stav opakovaného stola, časový limit prehrávania atď …

Pod rezerváciou mám na mysli iba rezerváciu na ďalšie 3 minúty. Systém nie je navrhnutý tak, aby si užívateľ mohol rezervovať stôl v presnom čase (napr. 14:00). Nefunguje to ako rezervácia napr. v reštauráciách, ale iba na minúty.

Pretože nie je k dispozícii pripojenie k sieti LAN, jedinou možnosťou je použiť sieť WLAN - je to aj tak najlepšia voľba. Mozog systému musí používať Slack API na odosielanie a prijímanie príkazov z kanála Slack. Najprv som skúsil použiť NodeMCU. Dokázal som dostávať a prijímať správy do a zo Slacku, ale kvôli použitiu HTTPS a tiež Slackovej veľkosti „uvítacej správy“(~ 300 kB) NodeMCU strácal pripojenie a/alebo dostal nejakú podivnú výnimku, ktorú som nedokázal vyriešiť prekopávaním cez internet..

Rozhodol som sa teda použiť niečo výkonnejšie: Raspberry Pi 3 (Zero W s WiFi vtedy ešte nebolo vydané). Tým, že mám RPi, som mohol prepnúť implementačný jazyk z C na Java, pretože je to pre mňa pohodlnejšie - takže to bola výhoda. Dnes môžete používať niečo výkonnejšie ako NodeMCU a menej výkonné ako RPi. Možno Raspberry Nula?

Po vybudovaní prvého prototypu na doske s bláznivým zapojením, veľa skicovania a prototypovania systém vyzeral, že môže fungovať.

Po všetkých týchto myšlienkach a fungujúcom PoC som začal plánovať rôzne konfigurácie umiestnenia vyššie uvedených položiek na prednom paneli, aby boli najinformatívnejšie a najpohodlnejšie na použitie. Môžete si pozrieť niektoré z ďalších návrhov, možno vám niektoré budú lepšie vyhovovať. Posledný bol mnou vybraný.

Krok 2: Materiály a nástroje

Materiály, ktoré som použil:

  • Box
  • Raspberry Pi, karta microSD, napájanie micro USB
  • Zelené a červené arkádové tlačidlá
  • LCD obrazovka 16x2
  • LED diódy - použil som RGB, ale môžete použiť správnu farbu
  • Prepojovacie káble medzi mužmi a ženami a medzi ženami a ženami
  • Rozhranie micro USB
  • Mini nepájivá doska len na pripojenie niektorých vodičov
  • Krátky kábel micro USB, ktorý slúži ako prepojka vo vnútri skrinky na napájanie RPi

Nástroje, ktoré som použil:

  • Ostrý nôž (napr. Nôž na rezanie kobercov)
  • Rotačný nástroj
  • Horúca lepiaca pištoľ
  • Spájkovacia stanica
  • Kliešte, diagonálne kliešte/bočné frézy
  • Skrutkovač
  • Súbor
  • Ja

Nástroje, ktoré pravdepodobne budete potrebovať:

Všetko vyššie uvedené, ale namiesto „Ja“by to malo byť: „Vy“:)

Krok 3: Predný panel - obrazovka LCD

Predný panel - LCD obrazovka
Predný panel - LCD obrazovka
Predný panel - LCD obrazovka
Predný panel - LCD obrazovka

Otvor pre obrazovku LCD bol jednoduchý. Len obdĺžnik, ktorý sa zmestí na moju obrazovku LCD. Potom, čo som sa to pokúsil nakrájať ostrým nožom, som zistil, že plast krabice je dosť tvrdý. Použil som teda vŕtací nástroj na rezanie okna a leštenie okrajov.

Krok 4: Predný panel - stavové diódy LED

Predný panel - stavové diódy LED
Predný panel - stavové diódy LED
Predný panel - stavové diódy LED
Predný panel - stavové diódy LED

LED diery sú tiež jednoduché. Vzal som si veľkú vŕtačku na drevo a potom som hrany vyleštil vŕtacím nástrojom. Veľké LED diódy dokonale priliehali. Na diódy LED som ešte nespájkoval žiadne odpory - nechal som to na proces montáže.

Krok 5: Predný panel - tlačidlá

Predný panel - tlačidlá
Predný panel - tlačidlá
Predný panel - tlačidlá
Predný panel - tlačidlá
Predný panel - tlačidlá
Predný panel - tlačidlá
Predný panel - tlačidlá
Predný panel - tlačidlá

Najväčším problémom týchto dvoch veľkých tlačidiel bolo ich rovnomerné umiestnenie so správnym rozstupom. Otvory som vyrezal iba pomocou vŕtacieho nástroja, pretože som mohol krok za krokom zväčšovať priemer, aby gombíky pevne sedeli.

Krok 6: Napájací konektor

Napájací konektor
Napájací konektor

Malý otvor pre napájanie micro USB bol veľmi chúlostivou prácou. Chcel som, aby bola diera čo najviac fit, a tak som tu strávil veľa času leštením. Ale s konečným výsledkom som bol spokojný.

Potom som prestrihol krátky mini USB kábel, ktorý bol umiestnený vo vnútri škatule. Na jednej strane je zapojený do RPi a na druhej strane sú všetky káble spájané s rozhraním micro USB podľa vývodov USB.

Potom som malú DPS za tepla prilepil priamo na krabicu (je to vidieť na fotografii v montážnom kroku).

Krok 7: Spojte všetko dohromady

Dať všetko dohromady
Dať všetko dohromady
Dať všetko dohromady
Dať všetko dohromady
Dať všetko dohromady
Dať všetko dohromady

Najprv som k LED diódam pripájal príslušné odpory podľa ich farby (napätia) na 3,3 V volt. Na červenú som použil 100Ω, na žltý (zelený a červený uzol) dva odpory 82 a 100 a na zelený 100Ω. Môžete použiť ten z online rezistora pre LED kalkulačku. Urobte si však nejaký prieskum podľa jasu a presného farebného tónu, ktorý chcete dosiahnuť.

Nohy žltej LED diódy boli spájkované dohromady, takže samotnú LED diódu je možné ovládať iba jedným kolíkom na RPi.

Podľa tohto diagramu vývodov:

Pripojené boli uzly LED:

  • Zelená LED - GPIO1 na Rpi
  • Žltá LED (obe nohy) na GPIO2 na RPi
  • Červená LED na GPIO0 na RPi

Pripojil som LCD pomocou pinov I2C na kolíky RPi

  • LCD SDA na GPIO8 na RPi
  • LCD SCL na GPIO9 na RPi
  • LCD PWR až 5V na RPi
  • LCD GND až GND na RPi

Displej LCD bol na krabicu prilepený za tepla ako dodatočná ochrana.

Pripojil som 3,3 V a GND k malému nepájivému panelu, aby som ich mohol použiť na tlačidlá.

Zelené tlačidlo bolo pripojené k 3,3 V cez mini breadboard a ku GPIO5 na RPi.

Červené tlačidlo bolo pripojené k 3,3 V cez mini breadboard a ku GPIO4 na RPi.

Kedykoľvek teda stlačíte tlačidlo, na kolíku RPi je vysoký stav.

Mini bradboard funguje dobre, takže som preskočil spájkovanie všetkých vodičov do dosky plošných spojov. Namiesto toho som len pokryl mini breadboard horúcim lepidlom, aby káble nespadli.

Na krabicu som tiež za tepla prilepil kryt RPi, aby sa vnútri nekýval.

Zaskrutkoval som predný panel so všetkými vecami vo vnútri.

Potom som vytlačil, vystrihol a nalepil jednoduché štítky vedľa semaforov a tlačidiel.

Krok 8: Konfigurácia uvoľnenia

Slack konfigurácia
Slack konfigurácia
Slack konfigurácia
Slack konfigurácia

Vytvorte si svoj tím na Slack.com alebo použite ten, ktorý máte a máte minimálne práva správcu.

V službe Slack vytvorte kanál pre integráciu služby Slack služby (alebo preskočte vytváranie kanála, ak chcete použiť kanál, ktorý už máte).

Pridajte do svojho tímu integráciu Incomming Webhooks. Vyberte kanál a skopírujte adresu URL webhooku.

Pridajte do svojho tímu integráciu robotov. Vyberte nejaký názov pre svojho robota a skopírujte token API robota.

Stránka vašej správy vlastných integrácií by mala vyzerať ako na obrázku.

Robota musíte pozvať ako člena svojho kanála. Môžete to urobiť už pri vytváraní kanála.

Ak si budete chcieť službu neskôr prispôsobiť, skontrolujte API Slack.

Krok 9: Implementácia softvéru

Podľa tohto tutoriálu som ako operačný systém svojho RPi použil Raspbian. Odpusť mi, preskočím to na vysvetlenie, pretože je to už zdokumentované na mnohých miestach a proces je jednoduchý. Dúfam, že ste dostatočne skúsení a skúsení na to, aby ste si RPi nastavili sami. Nezabudnite na svojom Raspberry Pi nakonfigurovať prístup k WiFi;)

Ako bolo uvedené v sekcii prototypov, na implementáciu mozgu celého systému som použil Javu. Kód je k dispozícii na GitHub -

Knižnice Java, ktoré som použil:

  • pi4j - používať Raspberry Pi z Javy
  • Springboot ako aplikácia pre aplikáciu
  • allbegray/slack-api ako integrácia Slack

Konfiguračný súbor musíte upraviť v src/resources/config.properties. Na používanie rozhrania Slack API je potrebné nakonfigurovať tri položky:

  • channelName - názov kanála Chcete odosielať zmeny stavu a prijímať príkazy.
  • slackBotToken - token robota nakonfigurovaného v integráciách vášho tímu Slack, ktorý sa bude používať na odosielanie správ na vyššie uvedený kanál. Upozorňujeme, že musíte pridať Slacka Bot za člena kanála.
  • webhookUrl - adresa URL, ktorú môžete získať z vlastných integrácií Slack Team.

Project je Mavenized, takže na jeho zostavenie stačí napísať (Potrebujete aspoň nainštalovanú Javu 8 a Maven):

mvn čistý balík

A v cieľovom adresári nájdete súbor JAR Springbooted. Spustenie služby:

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

Tento riadok som nastavil na skript.sh a pridal som ho ako automatický štart. Takže vždy, keď je napájanie zapnuté, služba sa spustí automaticky.

Na LCD je potrebné jedno špeciálne vysvetlenie.

Skúšal som rôzne prístupy/knižnice na ovládanie LCD cez I2C z RPi, ale zlyhal som. U niektorých LCD displej nefungoval správne, u niektorých vykazoval určité odpadky.

Jedna vec však fungovala veľmi pekne už po vybalení z krabice. Je to nástroj príkazového riadka, ktorý som našiel. Môžete použiť na ovládanie LCD. Preto som sa rozhodol použiť iba tento nástroj priamo z Javy. Funguje to tak, že normálny proces Linuxu (lcdi2c) sa nazýva (s pripravenými parametrami) zakaždým, keď chcem niečo zobraziť na obrazovke LCD.

Nástroj si musíte stiahnuť a umiestniť ho vedľa služby JAR

Použitie tohto nástroja je druh hack a hlúpeho riešenia, ale ja sa riadim prvým pravidlom inžinierstva:

Ak je to hlúpe, ale funguje to … nie je to hlúpe

Krok 10: Návod na použitie

Návod na použitie
Návod na použitie

Aktuálny stav tabuľky kicker môžete skontrolovať na vytvorenom kanáli Slack zadaním príkazu „status“(alebo krátko „st“) alebo priamo skontrolovať semafory na zariadení.

Ak chcete len hrať - stlačte červené tlačidlo. Správa bude odoslaná na kanál Slack s informáciou, že tabuľka kicker je obsadená. Po dokončení prehrávania - stlačte zelené tlačidlo. Správa bude odoslaná na kanál Slack s informáciou, že stôl kicker je možné hrať zadarmo.

Tiež sa zmenia semafory a LCD obrazovka zobrazí niektoré podrobné informácie.

Pre prípad, že by ste zabudli uvoľniť stôl po skončení hrania, je časový limit nastavený na 20 minút. Ak stále hráte a potrebujete viac času, znova stlačte červené tlačidlo a zápas sa predĺži o 5 minút (platí iba vtedy, ak do uplynutia časového limitu zostáva menej ako 5 minút). Časový limit hry sa zobrazí na LCD obrazovke.

Ak si chcete rezervovať kicker stôl, napíšte na kanál Slack správu „Reserve“(alebo len: „res“).

Žltý semafor sa rozsvieti a informuje ostatných v blízkosti kopaničiarskeho stolu, že sú rezervované a čoskoro si niekto príde zahrať.

Časový limit rezervácie je nastavený na 3 minúty. Potom stôl kicker prepne svoj stav na voľné hranie.

Ak potrebujete, rezerváciu môžete zrušiť napísaním „zrušiť“na kanáli Slack.

Systém má aj ďalšie drobné funkcie, ako napríklad:

  • Po rezervácii sa tlačidlá zmrazia na 5 sekúnd. Je to tak, aby sa predišlo situáciám, kedy si niekto v rovnakom čase vyhradí rezervu a milisekundu neskôr niekto stlačí červené tlačidlo v domnení, že obsadzuje stôl, ale bez toho, aby vedel, že si niekto stôl rezervoval len milisekundu predtým.
  • Stlačenie ľubovoľného tlačidla zmrazí obidve na pol sekundy. Je to tak, aby sa zabránilo šialeným klikačom na tlačidlá, aby kanál Slack nebol tak spamovaný.
  • Bezplatná verzia Slack umožňuje uložiť 10 000 správ celého tímu. Ak chcete zachovať niektoré správy, služba odstráni staré správy súvisiace so systémom rezervácií/stavu) a ponechá iba posledných 6 z nich. Prečo 6? Pretože najčastejšie existujú 2 scenáre stavu: „Rezervovaný-obsadený-voľný“a „Bez zamestnania“. Systém teda môže uložiť najmenej 2 úplné obsadené bezplatné relácie. Ak chcete vyčistiť všetky systémové správy, zadajte príkaz „clean“(alebo „clear“).

Krok 11: Uvoľnenie

Uvoľnenie
Uvoľnenie
Uvoľnenie
Uvoľnenie

Doteraz (okamih zverejnenia tohto návodu) systém beží 2,5 a viac mesiacov a používa ho viac ako 30 ľudí. Vďaka aktualizácii stavu kickerovej tabuľky vždy vieme, či je voľná alebo obsadená, aby sme už nestrácali čas chodením tam a späť. Pripojenie a služba sú veľmi stabilné, takže sa na to môžeme spoľahnúť.

Zatiaľ je všetko dobré…

Krok 12: Časté otázky

Prečo je časový limit rezervácie nastavený na 3 minúty?

Maximálny čas rezervácie sú 3 minúty, v kóde si ho osvojte tak, ako sa vám páči. Spravidla sa málokedy stane, že uplynú celé 3 minúty a časový limit rezervácie vyprší. Vo väčšine prípadov niekto nakoniec príde a obsadí stôl.

Prečo je časový limit hrania nastavený na 20 minút?

V závislosti od hráča je priemerný hrací čas ~ 10 minút. Ak potrebujete hrať dlhšie, znova stlačte červené tlačidlo, ak zostáva menej ako 5 minút, a časový limit sa predĺži na 5 minút. Tento časový limit je nastavený len pre prípad, že niekto zabudne uvoľniť stôl.

Prečo na zariadení nie je žiadna klávesnica PIN na potvrdenie rezervácie; žiadne prihlasovacie údaje a heslá?

Hlavnou myšlienkou bolo udržať to-jednoduché-hlúpe. V opačnom prípade, ak rezervácia, spustenie a dokončenie hry vyžadujú príliš veľa úsilia, nikto ju nebude chcieť použiť.

Prečo zariadenie vyzerá tak priemyselne-škaredo?

Pretože som nemal laserovú rezačku, CNC, 3D tlačiareň, efektný farebný štítkovač atď. Ste viac ako potešení, že ho môžete vylepšiť a urobiť ho krajším.

Prečo jednoducho neimplementujete nejakú aplikáciu a neprilepíte lacný tablet o stenu s rovnakou funkčnosťou?

Aplikácie, aplikácie všade. Ľudia radi s vecami fyzicky komunikujú a nielen ťukajú na ploché obrazovky.

Odporúča: