Kazalo:

Enostaven sistem za preverjanje statusa in rezervacije s Slack integracijo: 12 korakov (s slikami)
Enostaven sistem za preverjanje statusa in rezervacije s Slack integracijo: 12 korakov (s slikami)

Video: Enostaven sistem za preverjanje statusa in rezervacije s Slack integracijo: 12 korakov (s slikami)

Video: Enostaven sistem za preverjanje statusa in rezervacije s Slack integracijo: 12 korakov (s slikami)
Video: Часть 1. Аудиокнига Джона Бьюкена «Тридцать девять шагов» (главы 1–5) 2024, Julij
Anonim
Enostaven sistem za rezervacijo statusa in rezervacije s Slack integracijo
Enostaven sistem za rezervacijo statusa in rezervacije s Slack integracijo

V podjetju, kjer delam, je mizica. Podjetje zaseda veliko nadstropij in nekaterim zaposlenim traja do 3 minute, da pridejo do mize in … da se zavedajo, da je miza že zasedena.

Zato se je porodila ideja o izgradnji neke vrste enostavnega sistema za oddajanje in rezervacijo statusa, ki deluje v realnem času.

Podjetje uporablja komunikacijsko orodje Slack, kjer ima vsak zaposleni račun. Imamo celo kanal #kicker samo za razprave o … kickerju. Kanal bi lahko uporabili kot nekakšno "vstopno točko" za rezervacijo in obveščanje o trenutnem stanju mize.

Kot ponavadi obstaja veliko konceptov, kako ravnati s takšnim sistemom. Na splošno pa se je pri vseh pojavilo eno osnovno pravilo: mora biti enostavna za uporabo, brez kakršnih koli pretiranih korakov, ki jih je treba izvesti pri obravnavi sistema.

Naprava in storitev nista prilepljena na začetno mizo in ju je mogoče uporabiti za kateri koli "skupni vir" (na primer mizo za namizni tenis, konzolo itd.), Ki potrebuje nekakšno rešitev za razširjanje statusa in rezervacijo.

Torej, začnimo…

1. korak: Dokaz koncepta in izdelava prototipov

Dokaz koncepta in prototipiziranje
Dokaz koncepta in prototipiziranje
Dokaz koncepta in prototipiziranje
Dokaz koncepta in prototipiziranje
Dokaz koncepta in izdelava prototipov
Dokaz koncepta in izdelava prototipov

Nenavadno je bila zamisel zgraditi napravo, ki bo položena poleg mize za udarce v skladu s temi zahtevami:

  • nekaj kazalcev trenutnega stanja mize - če stojite ob njej, bi morali vedeti, da je brezplačna ali rezervirana in da se bo nekdo prišel igrati v 3 minutah. Semaforji popolnoma ustrezajo ideji:

    • zelena luč - prosto igranje,
    • rumena luč - rezervirano,
    • rdeča luč - zasedena.
  • gumb (i) Lahko kliknete pred i po igri, tako da bodo vsi ostali obveščeni o stanju trenutne mize. Namesto enega preklopnega gumba sem se odločil za uporabo dveh ločenih gumbov:

    • rdeči gumb - zasedite mizo, začnite igro (po rezervaciji ali ad hoc).
    • zeleni gumb - sprostitvena miza.
  • nekaj prikaza s podrobnejšimi informacijami o tem, kaj se dogaja - časovna omejitev rezervacije, stanje ponavljajoče se mize, čas predvajanja itd …

Z rezervacijo mislim samo na rezervacijo za naslednje 3 minute. Sistem ni zasnovan tako, da lahko uporabnik rezervira mizo ob točno določenem času (npr. Ob 14.00). Ne deluje kot rezervacija npr. v restavracijah, a le za prihajajoče minute.

Zaradi pomanjkanja povezave LAN je edina možnost uporaba WLAN - vseeno je to najboljša možnost. Možgani sistema morajo uporabljati Slack API za pošiljanje in sprejemanje ukazov iz kanala Slack. Najprej sem poskusil uporabiti NodeMCU. Lahko sem prejemal in prejemal sporočila v in iz Slacka, vendar zaradi uporabe HTTPS in tudi Slackovega sporočila dobrodošlice (~ 300 kB) je NodeMCU izgubljal povezavo in/ali dobil neko čudno izjemo, ki je nisem mogel rešiti pri iskanju po internetu.

Zato sem se odločil uporabiti nekaj močnejšega: Raspberry Pi 3 (Zero W z WiFi takrat še ni bil izdan). Z RPi -jem bi lahko prevedel implementacijski jezik iz C v Javo, saj mi je to bolj priročno - zato je bila to prednost. Danes lahko uporabite nekaj močnejšega od NodeMCU in manj zmogljivega od RPi. Mogoče malina nič?

Po izdelavi prvega prototipa na plošči z noro napeljavo, veliko skicami in izdelavo prototipov je bil sistem videti, kot da lahko deluje.

Ob vseh teh zamislih in delujočem PoC -ju sem začel načrtovati različne konfiguracije postavitev zgornjih elementov na sprednji plošči, tako da bodo najbolj informativne in priročne za uporabo. Lahko preverite nekatere druge predloge, morda se vam kakšen bolj prilega. Zadnji je bil moj izbranec.

2. korak: Materiali in orodja

Materiali, ki sem jih uporabil:

  • Škatla
  • Raspberry Pi, kartica microSD, napajalnik mikro USB
  • Zeleni in rdeči arkadni gumbi
  • 16x2 LCD zaslon
  • LED - Uporabil sem RGB, lahko pa uporabite ustrezno barvo
  • Moški na žensko in ženski na ženski mostični kabli
  • Vmesnik mikro USB
  • Mini plošča samo za povezavo nekaterih žic
  • Kratek kabel mikro USB, ki deluje kot mostiček v škatli za napajanje RPi

Orodja, ki sem jih uporabil:

  • Ostri nož (npr. Nož za rezanje preprog)
  • Rotacijsko orodje
  • Pištola za vroče lepilo
  • Spajkalna postaja
  • Klešče, diagonalne klešče/stranski rezalniki
  • Izvijač
  • mapa
  • Jaz

Orodja, ki jih verjetno potrebujete:

Vse zgoraj, ampak namesto "jaz" bi moralo biti: "ti":)

3. korak: Sprednja plošča - LCD zaslon

Sprednja plošča - LCD zaslon
Sprednja plošča - LCD zaslon
Sprednja plošča - LCD zaslon
Sprednja plošča - LCD zaslon

Luknja za LCD zaslon je bila preprosta. Samo pravokotnik, ki se prilega mojemu LCD zaslonu. Ko sem ga poskušal rezati z ostrim nožem, sem spoznal, da je plastika škatle precej trda. Zato sem uporabil vrtalno orodje za rezanje okna in poliranje robov.

4. korak: Sprednja plošča - LED diode stanja

Sprednja plošča - LED diode stanja
Sprednja plošča - LED diode stanja
Sprednja plošča - LED diode stanja
Sprednja plošča - LED diode stanja

LED luknje so tudi preproste. Pravkar sem vzel velik vrtalnik za les in nato poliral robove z vrtalnim orodjem. Velike LED diode so popolnoma pritrjene. Na LED še nisem spajkal nobenega upora - pustil sem ga za postopek sestavljanja.

5. korak: Sprednja plošča - gumbi

Sprednja plošča - gumbi
Sprednja plošča - gumbi
Sprednja plošča - gumbi
Sprednja plošča - gumbi
Sprednja plošča - gumbi
Sprednja plošča - gumbi
Sprednja plošča - gumbi
Sprednja plošča - gumbi

Največja težava teh dveh velikih gumbov je bila njihova enakomerna postavitev s pravilnim razmikom. Luknje sem izrezal samo s svojim vrtalnim orodjem, saj sem lahko korak za korakom povečal premer, da se gumbi tesno prilegajo.

6. korak: Priključek za napajanje

Priključek za napajanje
Priključek za napajanje

Majhna luknja za napajanje mikro USB je bila zelo občutljiva naloga. Želel sem, da je luknja čim bolj primerna, zato sem tukaj preživel veliko časa za poliranje. Toda s končnim rezultatom sem bil zadovoljen.

Nato sem prerezal kratek mini USB kabel, ki je bil nameščen v škatli. Na eni strani je priključen na RPi, na drugi strani pa so bili vsi kabli spajkani na vmesnik mikro USB v skladu z izhodi USB.

Nato sem vroče zlepil majhno tiskano vezje neposredno na škatlo (to je mogoče videti na fotografiji v koraku sestavljanja).

7. korak: Vse združite

Združevanje vsega skupaj
Združevanje vsega skupaj
Združevanje vsega skupaj
Združevanje vsega skupaj
Združevanje vsega skupaj
Združevanje vsega skupaj

Najprej sem LED -diode prilepil ustrezne upore glede na njihovo barvo (napetost) za 3,3 V volta. Uporabil sem 100Ω za rdečo barvo, dva upora 82 in 100 za rumeno (zeleno in rdeče vozlišče) in 100Ω za zeleno. Za kalkulator LED lahko uporabite enega od spletnih uporov. Prosimo, da sami raziščete glede na svetlost in natančen barvni ton, ki ga želite doseči.

Noge rumene LED so spajane skupaj, tako da lahko samo LED upravljate le z enim zatičem na RPi.

V skladu s tem diagramom pinout:

Priključena so bila LED vozlišča:

  • Zelena LED - GPIO1 na Rpi
  • Rumena LED (obe nogi) do GPIO2 na RPi
  • Rdeča LED na GPIO0 na RPi

LCD sem povezal z zatiči I2C na zatičih RPi

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

LCD je bil kot dodatna zaščita vroče lepljen na škatlo.

Priključil sem 3.3V in GND na majhno ploščo, da sem jih lahko uporabil za gumbe.

Zeleni gumb je bil priključen na 3.3V prek mini plošče in na GPIO5 na RPi.

Rdeči gumb je bil priključen na 3.3V prek mini plošče in na GPIO4 na RPi.

Torej, ko pritisnete gumb, je na pin -ju RPi visoko stanje.

Mini bradboard deluje v redu, zato sem preskočil spajkanje vseh žic v tiskano vezje. Namesto tega sem mini ploščo samo prekril z vročim lepilom, da kabli ne bodo odpadli.

Na škatlo sem vroče zlepil tudi pokrov RPi, tako da se v notranjosti ne bo nihal.

Privil sem sprednjo ploščo z vsemi stvarmi.

Nato sem na semaforje in gumbe natisnila, izrezala in prilepila preproste nalepke.

8. korak: Slack konfiguracija

Slack konfiguracija
Slack konfiguracija
Slack konfiguracija
Slack konfiguracija

Ustvarite svojo ekipo na Slack.com ali uporabite tisto, ki jo imate, in imate vsaj skrbniške pravice.

V Slacku ustvarite kanal za integracijo storitve Slack (ali preskočite ustvarjanje kanala, če ga želite uporabiti že imate).

Dodajte integracijo Incomming Webhooks v svojo ekipo. Izberite kanal in kopirajte URL spletnega kljuka.

Dodajte integracijo Botov v svojo ekipo. Izberite ime za svojega bota in kopirajte žeton API -ja bota.

Stran za upravljanje integracij po meri bi morala izgledati kot na sliki.

Bota morate povabiti kot člana svojega kanala. To lahko storite že med ustvarjanjem kanala.

Če želite storitev kasneje prilagoditi, preverite Slack API.

9. korak: Izvajanje programske opreme

Po tej vadnici sem uporabil Raspbian kot operacijski sistem za svoj RPi. Oprostite, opustil bom razlago, saj je že velikokrat dokumentirano in postopek je preprost. Upam, da ste dovolj usposobljeni in izkušeni, da lahko sami nastavite RPi. Ne pozabite konfigurirati dostopa do WiFi na vašem Raspberry Pi;)

Kot je omenjeno v oddelku za izdelavo prototipov, sem uporabil Javo za implementacijo možganov celotnega sistema. Koda je na voljo na GitHub -

Knjižnice Java, ki sem jih uporabljal:

  • pi4j - za uporabo Raspberry Pi iz Jave
  • Springboot kot aplikacijski platrorm
  • allbegray/slack-api kot integracija Slack

Konfiguracijsko datoteko morate urediti v src/resources/config.properties. Za uporabo Slack API -ja morate konfigurirati 3 vnose:

  • channelName - ime kanala Želite objaviti spremembe stanja in prejemati ukaze.
  • slackBotToken - žeton bota, konfiguriranega v integracijah vaše ekipe Slack, ki bo uporabljen za objavljanje sporočil na zgoraj omenjeni kanal. Opomba: Slack Bota morate dodati kot člana kanala.
  • webhookUrl - URL, ki ga lahko dobite iz integracij po meri Slack Team.

Projekt je Mavenized, zato ga vnesite (potrebujete vsaj Java 8 in Maven):

mvn čisti paket

V ciljnem tovarni pnevmatik najdete datoteko JAR Springbooted. Za zagon storitve:

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

To vrstico sem nastavil na.sh script in jo dodal kot samodejni zagon. Zato se storitev samodejno zažene, kadar je vklopljen.

Za LCD je potrebna posebna razlaga.

Poskusil sem različne pristope/knjižnice za nadzor LCD preko I2C iz RPi, vendar mi ni uspelo. Za nekatere LCD ni deloval pravilno, za nekatere je prikazoval nekaj smeti.

Toda ena stvar je delovala zelo dobro, takoj ko je škatla. To je orodje ukazne vrstice, ki sem ga našel. Uporabite ga lahko za nadzor LCD -ja. Zato sem se odločil, da bom to orodje uporabil neposredno iz Jave. Deluje tako, da se pokliče običajen postopek Linuxa (lcdi2c) (s pripravljenimi parametri) vsakič, ko želim nekaj prikazati na LCD zaslonu.

Orodje morate prenesti in ga postaviti poleg storitve JAR

Uporaba tega orodja je nekakšen kramp in neumna rešitev, vendar se držim prvega inženirskega pravila:

Če je neumno, vendar deluje … ni neumno

10. korak: Navodila za uporabo

Navodila za uporabo
Navodila za uporabo

Trenutno stanje mize za sprožitev lahko preverite na ustvarjenem kanalu Slack tako, da vnesete ukaz "status" (ali na kratko "st") ali neposredno preverite semaforje na napravi.

Če želite samo igrati - pritisnite rdeči gumb. Sporočilo bo poslano na Slack kanal z informacijami, da je igralna miza zasedena. Ko končate z igranjem - pritisnite zeleni gumb. Sporočilo bo poslano na kanal Slack z informacijami, da je igralna miza brezplačna.

Spremenili se bodo tudi semaforji in na LCD zaslonu bodo prikazane nekatere podrobne informacije.

Če pozabite spustiti mizo, potem ko ste končali z igranjem, je časovna omejitev nastavljena na 20 minut. Če še vedno igrate in potrebujete več časa, znova pritisnite rdeči gumb in tekma se bo podaljšala za 5 minut (velja le, če je do časovne omejitve ostalo manj kot 5 minut). Časovna omejitev predvajanja bo prikazana na LCD zaslonu.

Če želite rezervirati mizico za kicker, napišite sporočilo „rezerviraj“(ali samo: „res“) na Slack kanal.

Rumeni semafor se bo vklopil in obvestil druge v bližini igralne mize, da je rezerviran in kmalu se bo prišel kdo igrati.

Časovna omejitev rezervacije je nastavljena na 3 minute. Po tem miza za preklop spremeni stanje v prosto igranje.

Če potrebujete, lahko prekličete rezervacijo tako, da na kanalu Slack napišete „prekliči“.

Sistem ima tudi nekatere druge manjše lastnosti, kot so:

  • Po rezervaciji se gumbi zamrznejo za 5 sekund. To je zato, da bi preprečili situacije, da istočasno nekdo rezervira in milisekundo kasneje nekdo pritisne rdeč gumb, misleč, da on/ona zaseda mizo, vendar ne ve, da je nekdo rezerviral mizo le za milisekundo prej.
  • S pritiskom na kateri koli gumb oba zamrzneta za pol sekunde. To je zato, da se prepreči noro klikanje gumbov, tako da Slack kanal ne bo toliko vsiljen.
  • Brezplačna različica Slacka omogoča shranjevanje 10000 sporočil celotne ekipe. Če želite ohraniti nekatera sporočila, storitev izbriše stara sporočila, povezana s sistemom rezervacije/statusa) in ohrani le zadnjih 6 sporočil. Zakaj 6? Ker najpogosteje obstajata 2 scenarija statusa: "Reserved-Occupied-Free" in "Occuposed-Free". Tako lahko sistem shrani vsaj 2 polni seji brez zasedenosti. Če želite očistiti vsa sistemska sporočila, vnesite ukaz "clean" (ali "clear").

11. korak: Sprostitev

Sprostitev
Sprostitev
Sprostitev
Sprostitev

Do sedaj (v trenutku objave tega navodila) sistem deluje 2,5+ meseca in ga uporablja več kot 30 ljudi. Zaradi posodobitve stanja mize za kicker vedno vemo, kdaj je prosta ali zasedena, da ne izgubimo več časa naprej in nazaj. Povezava in storitev sta zelo stabilna, zato se lahko zanesemo nanjo.

Zaenkrat tako dobro…

12. korak: Pogosta vprašanja

Zakaj je časovna omejitev rezervacije nastavljena na 3 minute?

Najdaljši čas rezervacije je 3 minute, sprejmite ga tako, kot želite v kodi. Na splošno se bo redko zgodilo, da bodo minile polne 3 minute, rezervacija pa bo potekla. V večini primerov bo na koncu nekdo prišel in zasedel mizo.

Zakaj je čas predvajanja nastavljen na 20 minut?

Odvisno od igralcev je povprečni čas igranja ~ 10 minut. Če morate igrati dlje, znova pritisnite rdeči gumb, ko ostane manj kot 5 minut, časovna omejitev pa se podaljša nazaj na 5 minut. Ta časovna omejitev je nastavljena samo v primeru, da kdo pozabi sprostiti mizo.

Zakaj v napravi ni vnosne kode PIN za potrditev rezervacije; ni prijav in gesel?

Glavna ideja je bila, da je preprosto-neumno. V nasprotnem primeru, če rezervacija, začetek in končanje igre zahtevajo preveč napora, je nihče ne bo želel uporabiti.

Zakaj naprava izgleda tako industrijsko grdo?

Ker nisem imel laserskega rezalnika, CNC -ja, 3D -tiskalnika, izdelovalca modnih barvnih etiket itd. Z veseljem ga izboljšate in polepšate.

Zakaj preprosto ne bi implementirali kakšne aplikacije in poceni tabličnega računalnika prilepili na steno z enako funkcionalnostjo?

Aplikacije, aplikacije povsod. Ljudje radi fizično komunicirajo s stvarmi in se ne dotikajo le ravnih zaslonov.

Priporočena: