Sadržaj:

Sustav jednostavnog kicker statusa i rezervacije sa Slack integracijom: 12 koraka (sa slikama)
Sustav jednostavnog kicker statusa i rezervacije sa Slack integracijom: 12 koraka (sa slikama)

Video: Sustav jednostavnog kicker statusa i rezervacije sa Slack integracijom: 12 koraka (sa slikama)

Video: Sustav jednostavnog kicker statusa i rezervacije sa Slack integracijom: 12 koraka (sa slikama)
Video: Toyota fortuner vertical screen amplified with hyfonics & woofer box by kicker💪🏼 2024, Studeni
Anonim
Sustav jednostavnog igranja statusa i rezervacije s Slack integracijom
Sustav jednostavnog igranja statusa i rezervacije s Slack integracijom

U tvrtki u kojoj radim postoji stol za udaranje. Tvrtka zauzima mnogo katova, a nekima od zaposlenika potrebno je i do 3 minute da dođu do stola i… shvate da je stol već zauzet.

Stoga se pojavila ideja o izgradnji svojevrsnog sustava jednostavnog statusa emitiranja i rezervacije koji djeluje u stvarnom vremenu.

Tvrtka 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 svojevrsna "ulazna točka" za rezervacije i biti informiran o statusu trenutnog stola.

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

Uređaj i usluga nisu zalijepljeni za početnu tablicu i mogu se koristiti za bilo koji "zajednički resurs" (poput stola za ping-pong, 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

Raughly ideja je bila izgraditi uređaj koji će ležati pored stola za kretanje slijedeći ove zahtjeve:

  • 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.
  • gumb (i) Možete kliknuti prije i poslije igre kako bi svi ostali bili informirani o statusu trenutnog stola. Umjesto 1 tipke za prebacivanje odlučio sam upotrijebiti 2 odvojena gumba:

    • crveni gumb - zauzmite stol, započnite igru (nakon rezervacije ili ad hoc).
    • zeleni gumb - tablica za otpuštanje.
  • neki zaslon s detaljnijim informacijama o tome "što se događa" - istek rezervacije, ponovljeni status stola, istek vremena za reprodukciju itd …

Pod rezervacijom mislim samo na rezervaciju za sljedeće 3 minute. Sustav nije projektiran tako da korisnik može rezervirati stol u točno određeno vrijeme (npr. 14:00). Ne radi kao rezervacija npr. u restoranima, ali samo za nadolazeće minute.

Zbog nedostatka LAN veze, jedina mogućnost je korištenje WLAN -a - to je ipak najbolja opcija. Mozak sustava mora koristiti Slack API za slanje i primanje naredbi sa Slack kanala. Prvo sam pokušao koristiti NodeMCU. Uspio sam primati i primati poruke sa i na Slack, ali zbog korištenja HTTPS -a i Slackove "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 upotrijebiti nešto moćnije: Raspberry Pi 3 (Zero W s WiFi -om tada još nije bio objavljen). Imajući RPi, mogao sam promijeniti jezik implementacije s 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 što je napravio prvi prototip na ploči s ludim ožičenjima, puno skica i prototipova, sustav je izgledao kao da može funkcionirati.

Imajući sve ove ideje i radni PoC, počeo sam planirati različite konfiguracije postavljanja gore navedenih stavki na prednjoj ploči kako bi bile najinformativnije i najprikladnije za upotrebu. Možete provjeriti neke druge prijedloge, možda vam neki bolje odgovaraju. Posljednji je bio odabran od mene.

Korak 2: Materijali i alati

Materijali koje sam koristio:

  • Kutija
  • Raspberry Pi, microSD kartica, mikro USB napajanje
  • Zeleni i crveni arkadni gumbi
  • 16x2 LCD zaslon
  • LED diode - koristio sam RGB, ali možete koristiti odgovarajuću boju
  • Muški na ženski i ženski na ženski spojni kabel
  • Mikro USB sučelje
  • Mini ploča samo za povezivanje nekih žica
  • Kratki mikro USB kabel koji radi kao kratkospojnik unutar kutije za napajanje RPi -ja

Alati koje sam koristio:

  • Oštri nož (npr. Pomoćni nož za rezanje tepiha)
  • Rotacijski alat
  • Pištolj za vruće ljepilo
  • Stanica za lemljenje
  • Klešta, dijagonalna kliješta/bočni rezači
  • Odvijač
  • Datoteka
  • Mi

Alati koji vam vjerojatno trebaju:

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

Korak 3: Prednja ploča - LCD zaslon

Prednja ploča - LCD zaslon
Prednja ploča - LCD zaslon
Prednja ploča - LCD zaslon
Prednja ploča - LCD zaslon

Rupa za LCD zaslon bila je 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đer jednostavne. Upravo sam uzeo veliku bušilicu za drvo, a zatim sam polirao rubove alatom za bušenje. Velike LED diode savršeno su pripijene. Još nisam lemio nijedan otpornik na LED diode - ostavio sam ga za postupak sastavljanja.

Korak 5: Prednja ploča - Gumbi

Prednja ploča - Gumbi
Prednja ploča - Gumbi
Prednja ploča - Gumbi
Prednja ploča - Gumbi
Prednja ploča - Gumbi
Prednja ploča - Gumbi
Prednja ploča - Gumbi
Prednja ploča - Gumbi

Najveći problem s ova dva velika gumba bilo je njihovo ravnomjerno postavljanje s odgovarajućim razmakom. Izrezao sam rupe samo pomoću alata za bušenje jer sam mogao povećavati promjer korak po korak tako da se gumbi čvrsto priliježu.

Korak 6: Priključak za napajanje

Priključak za napajanje
Priključak za napajanje

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

Zatim sam odrezao 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 mali PCB izravno na kutiju (može se vidjeti na fotografiji u koraku montaže).

Korak 7: Sve spojite

Spajanje svega
Spajanje svega
Spajanje svega
Spajanje svega
Spajanje svega
Spajanje svega

Prvo sam lemio odgovarajuće otpornike na LED diode 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 toč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 iscrtavanja:

LED čvorovi su spojeni:

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

Spojio 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 gumbe.

Zeleni gumb je spojen na 3.3V putem mini ploče i na GPIO5 na RPi.

Crveni gumb je spojen na 3.3V putem mini ploče i na GPIO4 na RPi.

Dakle, kad god pritisnete gumb, na kontaktu RPi 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 kabeli neće otpasti.

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 gumba.

Korak 8: Slack konfiguracija

Slack konfiguracija
Slack konfiguracija
Slack konfiguracija
Slack konfiguracija

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

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

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

Dodajte integraciju Botova u svoj tim. Odaberite neki naziv 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ć tijekom stvaranja kanala.

Ako kasnije želite prilagoditi uslugu, provjerite Slack API.

Korak 9: Implementacija softvera

Koristio sam Raspbian kao operativni sustav za svoj RPi slijedeći ovaj vodič. Oprostite, preskočit ću objašnjenje jer je već dokumentirano 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 sustava. Kod je dostupan na GitHubu -

Java biblioteke koje sam koristio:

  • pi4j - za korištenje Raspberry Pi s 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: Slack Bota morate dodati kao člana kanala.
  • webhookUrl - URL koji možete dobiti od prilagođenih integracija Slack Tima.

Projekt je maveniziran pa za 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. Za pokretanje usluge:

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

Postavio sam ovaj redak na.sh skriptu i dodao ga kao automatsko pokretanje. Dakle, kad god je napajanje uključeno, usluga se automatski pokreće.

Za LCD zaslon potrebno je jedno posebno objašnjenje.

Pokušao sam s različitim pristupima/knjižnicama 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.

No, jedna je stvar vrlo dobro funkcionirala. To je pomoćni alat naredbenog retka koji sam pronašao Možete koristiti za upravljanje LCD -om. Stoga sam odlučio koristiti ovaj alat izravno s Jave. Radi ovako da se zove normalni Linux proces (lcdi2c) (s pripremljenim parametrima) svaki put kad želim prikazati nešto na LCD zaslonu.

Morate preuzeti alat i postaviti ga pored JAR usluge

Korištenje ovog alata svojevrsno je hakiranje i glupo rješenje, ali slijedim prvo pravilo inženjeringa:

Ako je glupo, ali radi … nije glupo

Korak 10: Upute za uporabu

Upute za uporabu
Upute za uporabu

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

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

Promijenit će se i semafori, a LCD zaslon će pokazati neke detaljne informacije.

Za slučaj da zaboravite otpustiti stol nakon što ste završili s igranjem, vrijeme čekanja je postavljeno na 20 minuta. Ako još uvijek igrate i trebate više vremena, ponovno pritisnite crvenu tipku i utakmica će se produžiti za 5 minuta (primjenjuje se samo ako je do isteka vremena ostalo manje od 5 minuta). Vremensko ograničenje reprodukcije bit će prikazano na LCD zaslonu.

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

Žuti semafor će se uključiti i obavijestiti druge u blizini stola za igru da je rezervirano i uskoro će netko doći igrati.

Vremensko ograničenje rezervacije postavljeno je 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.

Sustav ima i neke druge manje značajke poput:

  • Nakon rezervacije, gumbi se zamrzavaju 5 sekundi. To se događa radi sprječavanja situacija, 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 na bilo koju tipku oboje se zamrzne na pola sekunde. To je potrebno 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čuvala neke od poruka, usluga briše stare poruke vezane za rezervacijski/statusni sustav) 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 sustav može pohraniti najmanje 2 pune sesije bez zaposlenja. Za čišćenje svih poruka sustava upišite naredbu "clean" (ili "clear").

Korak 11: Otpuštanje

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

Do sada (trenutak objavljivanja ovog uputstva) sustav 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 kako ne bismo više gubili 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 se rijetko događa da će proći pune 3 minute, a rezervacija će isteći. U većini slučajeva netko će na kraju doći i zauzeti stol.

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, ponovno pritisnite crvenu tipku kad preostane manje od 5 minuta, a vrijeme čekanja će se produžiti na 5 minuta. Ovo vremensko ograničenje postavlja se u slučaju da netko zaboravi otpustiti stol.

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. Inače, ako rezervacija, početak i završetak igre zahtijevaju previše truda, nitko je neće htjeti upotrijebiti.

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

Budući da nisam imao laserski rezač, CNC, 3D pisač, aparat za izradu etiketa u boji itd. S zadovoljstvom ste ga poboljšali i učinili 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čeni: