Sadržaj:

Sistem za jednostavan status i rezervaciju sa slack integracijom: 12 koraka (sa slikama)
Sistem za jednostavan status i rezervaciju sa slack integracijom: 12 koraka (sa slikama)

Video: Sistem za jednostavan status i rezervaciju sa slack integracijom: 12 koraka (sa slikama)

Video: Sistem za jednostavan status i rezervaciju sa slack integracijom: 12 koraka (sa slikama)
Video: Java Tech Talk: Telegram bot na java za 1 sat 2024, Novembar
Anonim
Sistem jednostavnog pokretača statusa i rezervacije sa Slack integracijom
Sistem jednostavnog pokretača statusa i rezervacije sa Slack integracijom

U firmi u kojoj radim postoji sto za udaranje. Kompanija zauzima mnogo spratova, a nekima od zaposlenih je potrebno do 3 minute da dođu do stola i… shvate da je stol već zauzet.

Stoga je nastala ideja o izgradnji svojevrsnog jednostavnog statusa emitirajućeg i rezervacijskog sistema koji funkcionira u stvarnom vremenu.

Kompanija koristi Slack komunikacijski alat gdje svaki zaposlenik ima račun. Imamo čak i #kicker kanal samo za rasprave o … kicker -u. Kanal se može koristiti kao neka vrsta "ulazne tačke" za rezervacije i biti informiran o statusu trenutnog stola.

Kao i obično, postoji mnogo koncepata kako se nositi s takvim sistemom. No općenito se u svima njima pojavilo jedno osnovno pravilo: ono mora biti jednostavno za upotrebu bez ikakvih pretjeranih koraka koje treba izvesti pri radu sa sistemom.

Uređaj i usluga nisu zalijepljeni za početnu tablicu i mogu se koristiti za bilo koji "zajednički resurs" (poput ping-pong stola, konzole itd.) Kojem je potrebna neka vrsta rješenja za proširenje statusa i rezervacije.

Dakle, počnimo…

Korak 1: Dokaz koncepta i izrada prototipa

Dokaz koncepta i prototipiranje
Dokaz koncepta i prototipiranje
Dokaz koncepta i prototipiranje
Dokaz koncepta i prototipiranje
Dokaz koncepta i prototipiranje
Dokaz koncepta i prototipiranje

Smirena ideja bila je izgraditi uređaj koji će ležati pored stola za kicker prema sljedećim zahtjevima:

  • neki pokazatelji o trenutnom statusu stola - ako stojite pored njega, trebali biste znati da je besplatan ili rezerviran i da će netko doći igrati za 3 minute. Semafori se savršeno uklapaju u ideju:

    • zeleno svjetlo - besplatno igranje,
    • žuto svjetlo - rezervirano,
    • crveno svjetlo - zauzeto.
  • dugme (i) Možete kliknuti prije i poslije utakmice kako bi svi ostali bili informirani o statusu trenutnog stola. Umjesto 1 prekidača, odlučio sam upotrijebiti 2 odvojena dugmeta:

    • crveno dugme - zauzmite sto, započnite igru (nakon rezervacije ili ad hoc).
    • zeleno dugme - tablica za otpuštanje.
  • neki ekran sa detaljnijim informacijama o tome "šta se dešava" - vremensko ograničenje rezervacije, status ponovljenog stola, istek vremena za reprodukciju itd …

Pod rezervacijom mislim samo na rezervaciju za naredne 3 minute. Sistem nije dizajniran tako da korisnik može rezervirati stol u točno određeno vrijeme (npr. 14:00). Ne funkcionira poput rezervacije, npr. u restoranima, ali samo za nadolazeće minute.

Zbog nedostatka LAN veze, jedina opcija je korištenje WLAN -a - to je ipak najbolja opcija. Mozak sistema mora koristiti Slack API za slanje i primanje naredbi sa Slack kanala. Prvo sam pokušao koristiti NodeMCU. Uspio sam primati i primati poruke na i sa Slacka, ali zbog korištenja HTTPS -a i Slackove veličine poruke dobrodošlice (~ 300 kB), NodeMCU je gubio vezu i/ili dobio neki čudan izuzetak koji nisam mogao riješiti kopajući po internetu.

Stoga sam odlučio koristiti nešto moćnije: Raspberry Pi 3 (Zero W s WiFi -om tada još nije bio objavljen). Imajući RPi, mogao sam prebaciti jezik implementacije sa C na Javu jer mi je to bilo prikladnije - pa je to bila prednost. Danas možete koristiti nešto moćnije od NodeMCU -a i manje moćno od RPi -ja. Malina Zero možda?

Nakon izgradnje prvog prototipa na ploči s ludim ožičenjima, mnogo skica i prototipova, sistem je izgledao kao da može funkcionirati.

Imajući sve ove ideje i radni PoC, počeo sam planirati različite konfiguracije postavljanja gornjih stavki na prednjoj ploči tako da će one biti najinformativnije i najprikladnije za upotrebu. Možete provjeriti neke druge prijedloge, možda vam neki više odgovaraju. Posljednji sam odabrao.

Korak 2: Materijali i alati

Materijali koje sam koristio:

  • Box
  • Raspberry Pi, microSD kartica, mikro USB napajanje
  • Zeleni i crveni arkadni tasteri
  • 16x2 LCD ekran
  • LED diode - koristio sam RGB, ali možete koristiti odgovarajuću boju
  • Muški na ženski i ženski na ženski spojni kabel
  • Mikro USB interfejs
  • Mini ploča samo za povezivanje nekih žica
  • Kratki mikro USB kabel radi kao kratkospojnik u kutiji za napajanje RPi

Alati koje sam koristio:

  • Oštri nož (npr. Pomoćni nož za rezanje tepiha)
  • Rotacijski alat
  • Pištolj za vruće ljepilo
  • Lemna stanica
  • Klešta, dijagonalna kliješta/bočni rezači
  • Šrafciger
  • Datoteka
  • Ja

Alati koji vam vjerovatno trebaju:

Sve gore navedeno, ali umjesto "Ja" trebalo bi biti: "Ti":)

Korak 3: Prednja ploča - LCD ekran

Prednja ploča - LCD ekran
Prednja ploča - LCD ekran
Prednja ploča - LCD ekran
Prednja ploča - LCD ekran

Rupa za LCD ekran je bila jasna. Samo pravokutnik koji pristaje mom LCD ekranu. Nakon što sam ga pokušao rezati oštrim nožem, shvatio sam da je plastika kutije prilično tvrda. Zato sam upotrijebio alat za bušenje za rezanje prozora i poliranje rubova.

Korak 4: Prednja ploča - LED diode statusa

Prednja ploča - LED diode statusa
Prednja ploča - LED diode statusa
Prednja ploča - LED diode statusa
Prednja ploča - LED diode statusa

LED rupe su takođe jednostavne. Uzeo sam veliku bušilicu za drvo, a zatim sam polirao rubove alatom za bušenje. Velike LED diode savršeno su pričvršćene. Još nisam lemio otpornike na LED diode - ostavio sam ih za proces sastavljanja.

Korak 5: Prednja ploča - dugmad

Prednja ploča - dugmad
Prednja ploča - dugmad
Prednja ploča - dugmad
Prednja ploča - dugmad
Prednja ploča - dugmad
Prednja ploča - dugmad
Prednja ploča - dugmad
Prednja ploča - dugmad

Najveći problem sa ova dva velika dugmeta bilo je njihovo ravnomjerno postavljanje s odgovarajućim razmakom. Rupe sam izrezao samo alatom za bušenje jer sam mogao povećavati promjer korak po korak tako da se gumbi čvrsto priliježu.

Korak 6: Konektor za napajanje

Konektor za napajanje
Konektor za napajanje

Mala rupa za napajanje mikro USB -a bila je vrlo osjetljiv posao. Htio sam da rupa bude što je moguće prikladnija pa sam ovdje proveo dosta vremena za poliranje. Ali bio sam zadovoljan konačnim rezultatom.

Zatim sam presjekao kratki mini USB kabel koji je stavljen unutar kutije. S jedne strane je priključen na RPi, a s druge strane svi su kabeli lemljeni na mikro USB sučelje prema USB pinout -ovima.

Zatim sam vruće zalijepio malu PCB izravno na kutiju (može se vidjeti na fotografiji u koraku montaže).

Korak 7: Sve spojite

Spajanje svega
Spajanje svega
Spajanje svega zajedno
Spajanje svega zajedno
Spajanje svega
Spajanje svega

Prvo sam lemio odgovarajuće otpornike LED diodama prema njihovoj boji (naponu) za 3,3 V volta. Koristio sam 100Ω za crvenu boju, dva otpornika 82 i 100 za žutu (zeleni i crveni čvor) i 100Ω za zelenu. Za LED kalkulator možete koristiti jedan od mrežnih otpornika. No, molimo vas da sami istražite svjetlinu i tačan ton boje koji želite postići.

Noge žute LED diode su lemljene zajedno tako da se sama LED dioda može kontrolirati samo jednim pinom na RPi.

Prema ovom dijagramu pinout:

LED čvorovi su spojeni:

  • Zelena LED dioda - GPIO1 na Rpi
  • Žuta LED (obje noge) na GPIO2 na RPi
  • Crvena LED na GPIO0 na RPi

Povezao sam LCD pomoću I2C pinova na RPi pinove

  • LCD SDA do GPIO8 na RPi
  • LCD SCL do GPIO9 na RPi
  • LCD PWR do 5V na RPi
  • LCD GND u GND na RPi

LCD je vruće zalijepljen na kutiju kao dodatna zaštita.

Priključio sam 3.3V i GND na malu ploču kako bih ih mogao koristiti za tipke.

Zeleno dugme je spojeno na 3.3V putem mini ploče i na GPIO5 na RPi.

Crveno dugme je spojeno na 3.3V putem mini ploče i na GPIO4 na RPi.

Dakle, kad god pritisnete dugme, na RPi pinu postoji visoko stanje.

Mini bradboard radi sasvim dobro pa sam preskočio lemljenje svih žica u PCB. Umjesto toga, mini ploču sam samo prekrio vrućim ljepilom kako kablovi ne bi otpali.

Također sam vruće zalijepio RPi poklopac na kutiju tako da se neće njihati iznutra.

Zašrafio sam prednju ploču sa svim stvarima unutra.

Zatim sam ispisao, izrezao i zalijepio jednostavne naljepnice pored semafora i dugmadi.

Korak 8: Slack konfiguracija

Slack konfiguracija
Slack konfiguracija
Slack konfiguracija
Slack konfiguracija

Kreirajte svoj tim na Slack.com ili upotrijebite onaj koji imate i imate barem administratorska prava.

U Slacku stvorite kanal za Slack integraciju usluge (ili preskočite kreiranje kanala ako želite koristiti kanal koji već imate).

Dodajte Incomming Webhooks integraciju svom timu. Odaberite kanal i kopirajte URL webhook.

Dodajte integraciju Botova u svoj tim. Odaberite neko ime za svog bota i kopirajte API token za bot.

Stranica vaše prilagođene integracije trebala bi izgledati kao na slici.

Morate pozvati robota kao člana svog kanala. To možete učiniti već prilikom stvaranja kanala.

Ako kasnije želite prilagoditi uslugu, provjerite Slack API.

Korak 9: Implementacija softvera

Koristio sam Raspbian kao operativni sistem za svoj RPi slijedeći ovaj vodič. Oprostite, preskočit ću objašnjenje jer je već dokumentovano na mnogim mjestima, a proces je jednostavan. Nadam se da ste dovoljno vješti i iskusni da sami uspijete postaviti RPi. Ne zaboravite konfigurirati WiFi pristup na vašem Raspberry Pi;)

Kao što je spomenuto u odjeljku prototipova, koristio sam Javu za implementaciju mozga cijelog sistema. Kod je dostupan na GitHubu -

Java biblioteke koje sam koristio:

  • pi4j - za korištenje Raspberry Pi iz Jave
  • Springboot kao aplikacijski platrorm
  • allbegray/slack-api kao Slack integracija

Morate urediti konfiguracijsku datoteku u src/resources/config.properties. Postoje 3 unosa koje morate konfigurirati da biste koristili Slack API:

  • channelName - naziv kanala Želite objaviti promjene statusa i primati naredbe.
  • slackBotToken - token bota konfiguriran u integracijama vašeg Slack tima koji će se koristiti za slanje poruka na gore spomenuti kanal. Napomena: Morate dodati Slack Bota kao člana kanala.
  • webhookUrl - URL koji možete dobiti od prilagođenih integracija Slack Team -a.

Projekt je maveniziran pa za njegovu izradu samo upišite (trebate imati instalirane najmanje Java 8 i Maven):

mvn čisti paket

A u ciljanoj gumariji možete pronaći Springbooted JAR datoteku. Da biste pokrenuli uslugu:

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

Postavio sam ovu liniju na.sh skriptu i dodao je kao autostart. Dakle, kad god je napajanje uključeno, usluga se automatski pokreće.

Potrebno je jedno posebno objašnjenje za LCD.

Pokušao sam s različitim pristupima/bibliotekama za kontrolu LCD -a preko I2C iz RPi -a, ali jednostavno nisam uspio. Za neke LCD nije radio ispravno, za neke je pokazivao smeće.

Ali jedna stvar je radila vrlo dobro, odmah po kutiji. To je pomoćni alat komandne linije koji sam pronašao Možete koristiti za kontrolu LCD -a. Stoga sam odlučio koristiti ovaj alat izravno iz Jave. Radi ovako da se zove normalni Linux proces (lcdi2c) (sa pripremljenim parametrima) svaki put kad želim prikazati nešto na LCD ekranu.

Morate preuzeti alat i postaviti ga pored JAR servisa

Korištenje ovog alata neka je vrsta hakiranja i glupog rješenja, ali slijedim prvo pravilo inženjeringa:

Ako je glupo, ali funkcionira … nije glupo

Korak 10: Upute za upotrebu

Uputstvo za upotrebu
Uputstvo za upotrebu

Možete provjeriti trenutni status kicker tablice na stvorenom Slack kanalu upisivanjem naredbe "status" (ili kratko "st") ili direktno provjeriti semafore na uređaju.

Ako samo želite igrati - pritisnite crveno dugme. Poruka će biti poslana na Slack kanal s informacijom da je kicker stol zauzet. Kada završite igru - pritisnite zeleno dugme. Poruka će biti poslana na Slack kanal s informacijama da je stol za igranje slobodan.

Semafori će se također promijeniti, a LCD ekran će pokazati neke detaljne informacije.

U slučaju da zaboravite otpustiti stol nakon što ste završili s igrom, vremensko ograničenje je postavljeno na 20 minuta. Ako još uvijek igrate i trebate više vremena, ponovno pritisnite crveno dugme i utakmica će se produžiti za 5 minuta (primjenjuje se samo ako je ostalo manje od 5 minuta do isteka vremena). Vremensko ograničenje reprodukcije bit će prikazano na LCD ekranu.

Da biste rezervirali kicker stol, napišite poruku „Reserve“(ili samo: „res“) na Slack kanalu.

Žuti semafor će se upaliti i obavijestiti druge u blizini stola za igru da je rezervisan i uskoro će neko doći da se igra.

Vremensko ograničenje rezervacije je postavljeno na 3 minute. Nakon toga, kicker stol mijenja svoje stanje u slobodno za igru.

Ako vam je potrebno, možete otkazati rezervaciju upisom „cancel“na Slack kanalu.

Sistem ima i neke druge manje značajke poput:

  • Nakon rezervacije, dugmad se zamrzavaju 5 sekundi. To se radi kako bi se spriječile situacije, da u isto vrijeme netko rezervira i milisekundu kasnije netko pritisne crveno dugme misleći da on/ona zauzima stol, ali bez znanja da je netko rezervirao stol prije samo milisekundu.
  • Pritiskom bilo kojeg dugmeta oboje se zamrzavaju na pola sekunde. To se radi kako bi se spriječilo ludo klikanje gumba pa Slack kanal neće biti toliko spamiran.
  • Besplatna verzija Slacka omogućuje pohranu 10000 poruka cijelog tima. Da bi sačuvao neke od poruka, servis briše stare poruke vezane za sistem rezervacije/statusa) i zadržava samo posljednjih 6 od njih. Zašto 6? Budući da najčešće postoje 2 scenarija statusa: "Rezervirano-zauzeto-besplatno" i "zauzeto-besplatno". Tako sistem može pohraniti najmanje 2 pune sesije bez zaposlenja. Da biste očistili sve sistemske poruke, upišite naredbu "clean" (ili "clear").

Korak 11: Otpuštanje

Otpuštanje
Otpuštanje
Otpuštanje
Otpuštanje

Do sada (trenutak objavljivanja ovog uputstva) sistem radi 2.5+ mjeseca i koristi ga više od 30 ljudi. Zbog ažuriranja statusa kicker stola, uvijek znamo kada je slobodan ili zauzet, tako da više ne gubimo vrijeme naprijed -nazad. Veza i usluga su vrlo stabilni pa se na njih možemo osloniti.

Zasada je dobro…

Korak 12: Česta pitanja

Zašto je vremensko ograničenje rezervacije postavljeno na 3 minute?

3 minute je maksimalno vrijeme rezervacije, usvojite ga kako želite u kodu. Općenito, rijetko će se dogoditi da prođu pune 3 minute, a rezervacija će isteći. U većini slučajeva neko će konačno doći i zauzeti sto.

Zašto je vremensko ograničenje igranja postavljeno na 20 minuta?

Ovisno o igračima, prosječno vrijeme igranja je ~ 10 minuta. Ako trebate igrati duže, ponovo pritisnite crveno dugme kad preostane manje od 5 minuta, a vrijeme čekanja će se produžiti na 5 minuta. Ovo vremensko ograničenje je postavljeno samo u slučaju da neko zaboravi osloboditi tablicu.

Zašto na uređaju nema PIN uloška za potvrdu rezervacije; nema prijava i lozinki?

Glavna ideja je bila držati to jednostavno-glupo. U suprotnom, ako rezervacija, početak i završetak igre zahtijevaju previše truda, nitko je neće htjeti koristiti.

Zašto uređaj izgleda tako industrijski ružno?

Budući da nisam imao laserski rezač, CNC, 3D štampač, aparat za izradu etiketa u boji itd. Sa zadovoljstvom ćete ga poboljšati i učiniti ljepšim.

Zašto jednostavno ne implementirate neku aplikaciju i ne zalijepite jeftini tablet na zid s istom funkcionalnošću?

Aplikacije, aplikacije posvuda. Ljudi vole fizički komunicirati sa stvarima, a ne samo dodirivati ravne ekrane.

Preporučuje se: