Turinys:

Paprasta „Kicker“būsenos ir rezervavimo sistema su „Slack“integracija: 12 žingsnių (su paveikslėliais)
Paprasta „Kicker“būsenos ir rezervavimo sistema su „Slack“integracija: 12 žingsnių (su paveikslėliais)

Video: Paprasta „Kicker“būsenos ir rezervavimo sistema su „Slack“integracija: 12 žingsnių (su paveikslėliais)

Video: Paprasta „Kicker“būsenos ir rezervavimo sistema su „Slack“integracija: 12 žingsnių (su paveikslėliais)
Video: Flash Voyage - Paprasta 2024, Liepa
Anonim
Paprasta „Kicker“būsenos ir rezervavimo sistema su „Slack“integracija
Paprasta „Kicker“būsenos ir rezervavimo sistema su „Slack“integracija

Įmonėje, kurioje aš dirbu, yra spardomasis stalas. Įmonė užima daug aukštų, o kai kuriems darbuotojams užtrunka iki 3 minučių, kad pasiektų stalą ir … suprastų, kad stalas jau yra užimtas.

Todėl kilo mintis sukurti paprastą transliavimo ir rezervavimo sistemą, veikiančią realiu laiku.

Bendrovė naudoja „Slack“komunikacijos priemonę, kurioje kiekvienas darbuotojas turi sąskaitą. Mes netgi turime #kicker kanalą tik diskusijoms apie… kicker. Kanalas galėtų būti naudojamas kaip savotiškas „įėjimo taškas“rezervavimui ir informavimui apie dabartinę lentelės būseną.

Kaip įprasta, yra daug koncepcijų, kaip elgtis su tokia sistema. Tačiau apskritai visuose buvo viena pagrindinė taisyklė: ją turi būti paprasta naudoti, be jokių pernelyg didelių veiksmų, susijusių su sistema.

Prietaisas ir paslauga nėra prilipę prie „kicker“stalo ir gali būti naudojami bet kokiems „bendriems ištekliams“(pvz., Stalo teniso stalui, konsolėms ir pan.), Kuriems reikalingas tam tikras būsenos platinimo ir rezervavimo sprendimas.

Taigi, pradėkime…

1 žingsnis: koncepcijos ir prototipų įrodymas

Koncepcijos ir prototipų įrodymas
Koncepcijos ir prototipų įrodymas
Koncepcijos ir prototipų įrodymas
Koncepcijos ir prototipų įrodymas
Koncepcijos ir prototipų įrodymas
Koncepcijos ir prototipų įrodymas

Maždaug idėja buvo sukurti įrenginį, kuris bus pastatytas šalia „kicker“stalo, laikantis šių reikalavimų:

  • kai kurie indikatoriai apie dabartinę stalo būseną - jei stovite šalia, turėtumėte žinoti, kad jis yra nemokamas arba rezervuotas ir kas nors ateis žaisti po 3 minučių. Šviesoforai puikiai atitinka idėją:

    • žalia šviesa - nemokamai žaisti,
    • geltona šviesa - rezervuota,
    • raudona šviesa - užimta.
  • mygtukas (-ai) Galite spustelėti prieš ir po žaidimo, kad visi kiti gautų informaciją apie dabartinę stalo būseną. Vietoj vieno perjungimo mygtuko nusprendžiau naudoti 2 atskirtus mygtukus:

    • raudonas mygtukas - užimti stalą, pradėti žaidimą (po rezervacijos arba ad hoc).
    • žalias mygtukas - atleidimo lentelė.
  • kai kurie ekranai su išsamesne informacija apie tai, kas vyksta - rezervavimo skirtasis laikas, pakartotinė stalo būsena, žaidimo laiko skirtasis laikas ir tt …

Turėdamas omenyje rezervaciją turiu omenyje tik užsakymą kitoms 3 minutėms. Sistema nėra suprojektuota taip, kad vartotojas galėtų rezervuoti stalą tiksliu laiku (pvz., 02:00). Tai neveikia kaip rezervavimas, pvz. restoranuose, bet tik kelioms minutėms.

Kadangi trūksta LAN ryšio, vienintelė galimybė yra naudoti WLAN - bet kokiu atveju tai yra geriausias pasirinkimas. Sistemos smegenys turi naudoti „Slack“API komandoms siųsti ir gauti iš „Slack“kanalo. Pirmiausia bandžiau naudoti „NodeMCU“. Aš galėjau gauti ir gauti pranešimus į „Slack“ir iš jos, tačiau dėl HTTPS naudojimo ir „Slack“„pasveikinimo pranešimo“dydžio (~ 300 KB) „NodeMCU“prarado ryšį ir (arba) gavo keistą išimtį, kurios negalėjau išspręsti kasdamasis internetu.

Taigi nusprendžiau naudoti ką nors galingesnio: „Raspberry Pi 3“(„Zero W“su „WiFi“tuo metu dar nebuvo išleistas). Turėdamas RPi, galėčiau pakeisti įgyvendinimo kalbą iš C į „Java“, nes man tai patogiau - taigi tai buvo privalumas. Šiandien galite naudoti kažką galingesnio už „NodeMCU“ir mažiau galingą nei RPi. Gal Raspberry Zero?

Sukūrus pirmąjį prototipą ant duonos lentos su keistais laidais, daug eskizų ir prototipų, sistema atrodė, kad gali veikti.

Turėdamas visas šias idėjas ir dirbdamas su „PoC“, pradėjau planuoti skirtingas aukščiau esančių elementų išdėstymo konfigūracijas priekiniame skydelyje, kad jie būtų informatyviausi ir patogiausi naudoti. Galite patikrinti kai kuriuos kitus pasiūlymus, galbūt kai kurie jums labiau tinka. Paskutinis buvo mano išrinktasis.

2 žingsnis: medžiagos ir įrankiai

Medžiagos, kurias naudojau:

  • Dėžė
  • „Raspberry Pi“, „microSD“kortelė, „micro USB“maitinimo šaltinis
  • Žalios ir raudonos spalvos pasažo mygtukai
  • 16x2 LCD ekranas
  • Šviesos diodai - naudojau RGB, bet galite naudoti tinkamą spalvą
  • Kabeliai nuo patelių iki moterų ir nuo moterų iki moterų
  • Mikro USB sąsaja
  • Mini duonos lenta, skirta tik kai kuriems laidams prijungti
  • Trumpas mikro USB kabelis, veikiantis kaip trumpiklis dėžutės viduje, skirtas RPi maitinti

Naudojami įrankiai:

  • Aštrus peilis (pvz., Naudingas peilis kilimui pjaustyti)
  • Sukamasis įrankis
  • Karštas klijų pistoletas
  • Litavimo stotis
  • Replės, įstrižainės replės/šoniniai pjaustytuvai
  • Atsuktuvas
  • Failas

Įrankiai, kurių jums tikriausiai reikia:

Viskas aukščiau, bet vietoj „aš“turėtų būti: „tu“:)

3 žingsnis: Priekinis skydelis - LCD ekranas

Priekinis skydelis - LCD ekranas
Priekinis skydelis - LCD ekranas
Priekinis skydelis - LCD ekranas
Priekinis skydelis - LCD ekranas

Skylė LCD ekranui buvo paprasta. Tiesiog stačiakampis, kuris tinka mano LCD ekranui. Pabandęs jį supjaustyti aštriu peiliu, supratau, kad dėžutės plastikas yra gana kietas. Taigi aš naudoju gręžimo įrankį, norėdamas iškirpti langą ir nušlifuoti kraštus.

4 žingsnis: Priekinis skydelis - būsenos šviesos diodai

Priekinis skydelis - būsenos šviesos diodai
Priekinis skydelis - būsenos šviesos diodai
Priekinis skydelis - būsenos šviesos diodai
Priekinis skydelis - būsenos šviesos diodai

LED skylės taip pat yra paprastos. Aš ką tik paėmiau didelį gręžtuvą, skirtą medienai, ir tada šlifavau kraštus gręžimo įrankiu. Dideli šviesos diodai buvo tvirtai pritvirtinti. Prie šviesos diodų kol kas lituoti jokių rezistorių neturėjau - palikau surinkimo procesui.

5 žingsnis: Priekinis skydelis - mygtukai

Priekinis skydelis - mygtukai
Priekinis skydelis - mygtukai
Priekinis skydelis - mygtukai
Priekinis skydelis - mygtukai
Priekinis skydelis - mygtukai
Priekinis skydelis - mygtukai
Priekinis skydelis - mygtukai
Priekinis skydelis - mygtukai

Didžiausia šių dviejų didelių mygtukų problema buvo juos išdėstyti tolygiai su tinkamu atstumu. Aš išpjoviau skyles tik naudodamas savo gręžimo įrankį, nes žingsnis po žingsnio galėjau padidinti skersmenį, kad mygtukai tvirtai priglustų.

6 žingsnis: maitinimo jungtis

Maitinimo jungtis
Maitinimo jungtis

Maža skylė mikro USB maitinimui buvo labai subtilus darbas. Norėjau, kad skylė būtų kuo tinkamesnė, todėl praleidau čia daug laiko poliravimui. Bet galutiniu rezultatu likau patenkinta.

Tada aš nukirpau trumpą mini USB kabelį, kuris buvo įdėtas į dėžutę. Viena pusė yra prijungta prie RPi, o kitoje pusėje visi kabeliai buvo prilituoti prie „micro USB“sąsajos pagal USB kištukus.

Tada karštai priklijavau mažą PCB tiesiai prie dėžutės (tai matoma nuotraukoje surinkimo etape).

7 žingsnis: viską sudėkite

Viską sujungti
Viską sujungti
Viską sujungti
Viską sujungti
Viską sujungti
Viską sujungti

Pirmiausia prie šviesos diodų litavau atitinkamus rezistorius pagal jų spalvą (įtampą) 3,3 V voltui. Aš naudoju 100Ω raudonai, du rezistorius 82 ir 100 geltonai (žalias ir raudonas mazgas) ir 100Ω žaliai. LED skaičiuotuvui galite naudoti vieną iš internetinių rezistorių. Tačiau atlikite tyrimus patys, atsižvelgdami į ryškumą ir tikslų spalvų toną, kurį norite pasiekti.

Geltono šviesos diodo kojelės buvo lituojamos kartu, todėl pats šviesos diodas gali būti valdomas tik vienu RPi kaiščiu.

Pagal šią ištraukimo diagramą:

LED mazgai buvo prijungti:

  • Žalias šviesos diodas - GPIO1 ant Rpi
  • Geltonas šviesos diodas (abi kojos) į GPIO2 ant RPi
  • Raudonas šviesos diodas į GPIO0 RPi

Aš prijungiau skystųjų kristalų ekraną naudodami I2C kaiščius ant RPi kaiščių

  • LCD SDA į GPIO8 RPi
  • LCD SCL į GPIO9 RPi
  • LCD PWR iki 5V RPi
  • LCD GND į GND RPi

Skystųjų kristalų ekranas buvo karštai priklijuotas prie dėžutės kaip papildoma apsauga.

Aš prijungiau 3.3V ir GND prie mažos duonos lentos, kad galėčiau juos naudoti mygtukams.

Žalias mygtukas buvo prijungtas prie 3.3V per mini duonos lentą ir prie GPIO5 RPi.

Raudonas mygtukas buvo prijungtas prie 3.3V per mini duonos lentą ir prie GPIO4 RPi.

Taigi kiekvieną kartą, kai paspaudžiate mygtuką, RPi kaiščio būsena yra aukšta.

Mini bradboard veikia puikiai, todėl praleidau visų laidų litavimą į PCB. Vietoj to aš tiesiog uždengiau mini duonos lentą karštais klijais, kad kabeliai nenukristų.

Taip pat karštai priklijavau RPi dangtelį prie dėžutės, kad jis nesvyruotų viduje.

Prisukau priekinį skydelį su visais daiktais viduje.

Tada prie šviesoforų ir mygtukų atspausdinau, iškirpiau ir priklijavau paprastas etiketes.

8 veiksmas: neveikli konfigūracija

Slanki konfigūracija
Slanki konfigūracija
Slanki konfigūracija
Slanki konfigūracija

Sukurkite savo komandą „Slack.com“arba naudokite turimą komandą ir turite bent administratoriaus teises.

Programoje „Slack“sukurkite kanalą paslaugos „Slack“integravimui (arba praleiskite kanalo kūrimą, jei norite naudoti jau turimą kanalą).

Pridėkite „Incoming Webhooks“integraciją prie savo komandos. Pasirinkite kanalą ir nukopijuokite „webhook“URL.

Pridėkite „Bots“integraciją prie savo komandos. Pasirinkite savo bot pavadinimą ir nukopijuokite roboto API žetoną.

Jūsų valdomas tinkintų integracijų puslapis turėtų atrodyti kaip paveikslėlyje.

Turite pakviesti robotą kaip savo kanalo narį. Tai galite padaryti jau kurdami kanalą.

Jei vėliau norite tinkinti paslaugą, patikrinkite „Slack“API.

9 veiksmas: programinės įrangos diegimas

Aš naudoju „Raspbian“kaip savo RPi operacinę sistemą, vadovaudamasi šia pamoka. Prašau atleisti, aš praleisiu paaiškinimą, nes tai jau dokumentuota daugelyje vietų, o procesas yra paprastas. Tikiuosi, kad esate pakankamai įgudęs ir patyręs, kad galėtumėte savarankiškai nustatyti RPi. Nepamirškite sukonfigūruoti „Raspberry Pi“„WiFi“prieigos;)

Kaip minėta prototipų kūrimo skyriuje, aš panaudojau „Java“, kad įdiegčiau visos sistemos smegenis. Kodą galima rasti „GitHub“-

Mano naudojamos „Java“bibliotekos:

  • pi4j - naudoti „Raspberry Pi“iš „Java“
  • „Springboot“kaip taikomoji platforma
  • allbegray/slack-api kaip „Slack“integracija

Turite redaguoti konfigūracijos failą src/resources/config.properties. Yra 3 įrašai, kuriuos turite sukonfigūruoti, kad galėtumėte naudoti „Slack“API:

  • channelName - kanalo, kuriame norite paskelbti būsenos pakeitimus ir gauti komandas, pavadinimas.
  • slackBotToken - roboto, sukonfigūruoto jūsų „Slack“komandos integracijose, ženklas, kuris bus naudojamas pranešimams skelbti aukščiau paminėtame kanale. Atminkite, kad turite pridėti „Slack Bot“kaip kanalo narį.
  • webhookUrl - URL, kurį galite gauti iš „Slack Team“pasirinktinių integracijų.

Projektas yra „Mavenized“, todėl norėdami jį sukurti tiesiog įveskite (jums reikia bent jau įdiegtos „Java 8“ir „Maven“):

mvn švarus paketas

Tikslinėje nuovargyje galite rasti „Springbooted JAR“failą. Norėdami pradėti paslaugą:

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

Aš nustatiau šią eilutę į.sh scenarijų ir pridėjau ją kaip automatinį paleidimą. Taigi, kai maitinimas įjungtas, paslauga įsijungia automatiškai.

Skystųjų kristalų ekranui reikia specialaus paaiškinimo.

Bandžiau įvairius metodus/bibliotekas valdyti LCD per I2C iš RPi, bet man nepavyko. Kai kurie skystųjų kristalų ekranai netinkamai veikė, o kai kurie rodė šiukšles.

Bet vienas dalykas labai gerai veikė tik iš dėžutės. Tai naudingumo komandų eilutės įrankis, kurį radau Galite naudoti LCD valdymui. Taigi nusprendžiau tiesiog naudoti šį įrankį tiesiai iš „Java“. Tai veikia taip, kad įprastas „Linux“procesas (lcdi2c) vadinamas (su paruoštais parametrais) kiekvieną kartą, kai noriu kažką rodyti LCD ekrane.

Turite atsisiųsti įrankį ir įdėti jį šalia JAR paslaugos

Šio įrankio naudojimas yra savotiškas įsilaužimas ir kvailas sprendimas, tačiau laikausi 1 -osios inžinerijos taisyklės:

Jei tai kvaila, bet veikia … tai nėra kvaila

10 veiksmas: naudojimo instrukcija

Naudojimo instrukcija
Naudojimo instrukcija

Galite patikrinti dabartinę „kicker“stalo būseną sukurtame „Slack“kanale, įvesdami komandą „status“(arba netrukus „st“) arba tiesiogiai patikrinti įrenginio šviesoforus.

Jei norite žaisti - paspauskite raudoną mygtuką. Pranešimas bus išsiųstas į „Slack“kanalą su informacija, kad užpuolikas yra užimtas. Kai baigsite žaisti - paspauskite žalią mygtuką. Pranešimas bus išsiųstas į „Slack“kanalą su informacija, kad „kicker“stalas yra laisvai žaidžiamas.

Taip pat pasikeis šviesoforai, o LCD ekrane bus rodoma išsami informacija.

Tik tuo atveju, kai baigę žaisti pamiršite atleisti stalą, nustatytas 20 minučių skirtasis laikas. Jei vis dar žaidžiate ir jums reikia daugiau laiko, dar kartą paspauskite raudoną mygtuką ir rungtynės bus pratęstos 5 minutėmis (taikoma tik tada, kai iki laiko pabaigos liko mažiau nei 5 minutės). Žaidimo laikas baigsis LCD ekrane.

Norėdami rezervuoti „kicker“stalą, parašykite pranešimą „rezervas“(arba tiesiog: „res“) „Slack“kanalui.

Geltonas šviesoforas įsijungs ir informuos kitus šalia spyrio stalo esančius žmones, kad jis yra rezervuotas, ir netrukus kažkas ateis žaisti.

Rezervavimo laikas baigėsi 3 minutėmis. Po to „kicker“stalas perjungia savo būseną į laisvą žaisti.

Jei reikia, galite atšaukti rezervaciją rašydami „atšaukti“Slack kanale.

Sistema taip pat turi keletą kitų smulkių funkcijų, tokių kaip:

  • Po rezervacijos mygtukai užšaldomi 5 sekundėms. Taip siekiama užkirsti kelią situacijoms, kad tuo pačiu metu kažkas rezervuoja ir po milisekundės kas nors paspaudžia raudoną mygtuką galvodamas, kad jis/ji yra tas, kuris užima stalą, bet nežinodamas, kad kažkas rezervavo stalą tik milisekundę anksčiau.
  • Paspaudus bet kurį mygtuką, abu jie užšąla pusei sekundės. Taip siekiama užkirsti kelią beprotiškiems mygtukų spustelėjimams, kad „Slack“kanalas nebūtų šlamštas.
  • Nemokama „Slack“versija leidžia saugoti 10 000 visos komandos pranešimų. Norėdami išsaugoti kai kuriuos pranešimus, tarnyba ištrina senus pranešimus, susijusius su rezervavimo/būsenos sistema) ir pasilieka tik paskutinius 6 pranešimus. Kodėl 6? Kadangi dažniausiai yra 2 būsenos scenarijai: „Rezervuotas-užimtas-laisvas“ir „Užimtas-laisvas“. Taigi sistema gali saugoti mažiausiai 2 sesijas, kuriose nėra užimtų vietų. Norėdami išvalyti visas sistemos žinutes, įveskite komandą „išvalyti“(arba „išvalyti“).

11 žingsnis: atleidimas

Atleidimas
Atleidimas
Atleidimas
Atleidimas

Iki šiol (šios instrukcijos paskelbimo momentu) sistema veikia 2,5 ir daugiau mėnesių ir ja naudojasi daugiau nei 30 žmonių. Dėl „Kicker“stalo būsenos atnaujinimo mes visada žinome, kada jis yra laisvas ar užimtas, todėl nebegaišime laiko važiuodami pirmyn ir atgal. Ryšys ir paslauga yra labai stabilūs, todėl galime jais pasikliauti.

Kol kas viskas gerai…

12 žingsnis: DUK

Kodėl nustatytas 3 minučių rezervavimo laikas?

Maksimali rezervacijos trukmė yra 3 minutės, patvirtinkite ją taip, kaip jums patinka kode. Paprastai retai atsitiks taip, kad praeis visos 3 minutės, o rezervacija baigsis. Daugeliu atvejų kažkas ateis ir užims stalą.

Kodėl nustatytas laikas žaisti 20 minučių?

Priklausomai nuo žaidėjų, vidutinė žaidimo trukmė yra ~ 10 minučių. Jei jums reikia žaisti ilgiau, paspauskite raudoną mygtuką dar kartą, kai liko mažiau nei 5 minutės, o laikas baigsis iki 5 minučių. Šis skirtasis laikas nustatytas tik tuo atveju, jei kas nors pamiršta paleisti lentelę.

Kodėl įrenginyje nėra PIN kodo, patvirtinančio rezervaciją; nėra prisijungimo duomenų ir slaptažodžių?

Pagrindinė idėja buvo išlaikyti-paprasta-kvaila. Priešingu atveju, jei rezervuoti, pradėti ir baigti žaidimą reikia per daug pastangų, niekas nenorės juo naudotis.

Kodėl prietaisas atrodo toks pramoninis-negražus?

Kadangi neturėjau lazerinio pjaustytuvo, CNC, 3D spausdintuvo, išgalvoto spalvoto etikečių gamintojo ir pan. Jums malonu jį patobulinti ir padaryti gražesnį.

Kodėl gi ne tik įdiegus kokią nors programą ir priklijuojant prie sienos tą pačią funkciją turinčią pigią planšetę?

Programos, programos visur. Žmonės mėgsta fiziškai bendrauti su daiktais ir ne tik bakstelėti į plokščius ekranus.

Rekomenduojamas: