Indholdsfortegnelse:

Simple Kicker Status og Reservationssystem Med Slack Integration: 12 trin (med billeder)
Simple Kicker Status og Reservationssystem Med Slack Integration: 12 trin (med billeder)

Video: Simple Kicker Status og Reservationssystem Med Slack Integration: 12 trin (med billeder)

Video: Simple Kicker Status og Reservationssystem Med Slack Integration: 12 trin (med billeder)
Video: Man Falls OVERBOARD and Boat Keeps Going! | Wavy Boats | Haulover Inlet 2024, Juli
Anonim
Simpel Kicker -status og reservationssystem med slap integration
Simpel Kicker -status og reservationssystem med slap integration

I et firma, hvor jeg arbejder, er der et sparkbord. Virksomheden indtager mange etager, og for nogle af medarbejderne tager det op til 3 minutter at komme til bordet og … at indse, at bordet allerede er optaget.

Derfor opstod en idé om at bygge en slags simpelt statusudsendelses- og reservationssystem, der fungerer i realtid.

Virksomheden bruger Slack -kommunikationsværktøj, hvor hver medarbejder har en konto. Vi har endda en #kicker -kanal bare til diskussioner om … kicker. Kanalen kunne bruges som en slags "indgangspunkt" til reservation og til at blive informeret om den aktuelle tabells status.

Som sædvanlig er der mange begreber, hvordan man skal håndtere et sådant system. Men generelt dukkede en grundregel op i dem alle: Den skal være enkel at bruge uden overdrevne trin, der skal udføres, når man håndterer systemet.

Enheden og tjenesten er ikke fastgjort til kickerbordet og kan bruges til enhver "fælles ressource" (f.eks. Bordtennisbord, konsol osv.), Som har brug for en form for statusudsendelse og reservationsløsning.

Så lad os komme i gang …

Trin 1: Bevis for koncept og prototyper

Bevis for koncept og prototyper
Bevis for koncept og prototyper
Bevis for koncept og prototyper
Bevis for koncept og prototyper
Bevis for koncept og prototyper
Bevis for koncept og prototyper

Idéen var latterligt at bygge en enhed, der vil ligge ved siden af kickerbordet efter disse krav:

  • nogle indikatorer om den aktuelle bordstatus - hvis du står ved siden af, skal du kunne vide, at det er gratis eller reserveret, og at nogen kommer til at spille om 3 minutter. Trafiklys passer perfekt til ideen:

    • grønt lys - gratis at spille,
    • gult lys - reserveret,
    • rødt lys - optaget.
  • knap (er) Du kan klikke før og efter spillet, så alle andre bliver informeret om den aktuelle bordstatus. I stedet for 1 vippeknap besluttede jeg at bruge 2 adskilte knapper:

    • rød knap - indtage bordet, start et spil (efter reservation eller ad hoc).
    • grøn knap - frigivelsesbord.
  • noget display med mere detaljerede oplysninger om "hvad der foregår" - timeout for reservation, status for gentagen tabel, timeout for spilletid osv …

Med reservation mener jeg bare reservationen i de næste 3 minutter. Systemet er ikke designet, så brugeren kan reservere bordet på det nøjagtige tidspunkt (f.eks. 14:00). Det fungerer ikke som reservation f.eks. på restauranter, men kun i de kommende minutter.

På grund af manglende LAN -forbindelse på plads er den eneste mulighed at bruge WLAN - det er alligevel den bedste løsning. Systemets hjerne skal bruge Slack API til at sende og modtage kommandoer fra Slack -kanal. Først forsøgte jeg at bruge NodeMCU. Jeg var i stand til at få og modtage beskeder til og fra Slack, men på grund af HTTPS -brug og også Slacks "velkomstbesked" -størrelse (~ 300 kB) mistede NodeMCU forbindelsen og/eller fik en underlig undtagelse, som jeg ikke kunne løse ved at grave gennem Internettet.

Så jeg besluttede at bruge noget mere kraftfuldt: Raspberry Pi 3 (Zero W med WiFi var endnu ikke frigivet på det tidspunkt). Ved at have RPi kunne jeg skifte implementeringssprog fra C til Java, da det er mere bekvemt for mig - så dette var en fordel. I dag kan du bruge noget mere kraftfuldt end NodeMCU og mindre kraftfuldt end RPi. Hindbær Zero måske?

Efter at have bygget den første prototype på et brødbræt med nogle skøre ledninger, masser af skitser og prototyper, så systemet ud som om det kunne fungere.

Da jeg havde alle disse ideer og arbejdede PoC, begyndte jeg at planlægge forskellige placeringskonfigurationer af ovenstående elementer på et frontpanel, så de vil være de mest informative og praktiske at bruge. Du kan tjekke nogle af de andre forslag, måske passer nogle bedre til dig. Den sidste var den valgte af mig.

Trin 2: Materialer og værktøjer

Materialer jeg brugte:

  • Boks
  • Hindbær Pi, microSD -kort, mikro -USB strømforsyning
  • Grønne og røde arkadeknapper
  • 16x2 LCD -skærm
  • Lysdioder - jeg brugte RGB, men du kan bruge den rigtige farve
  • Mand til hun og kvinde til kvinde brødbrætkabler
  • Micro USB -interface
  • Mini brødbræt bare for at forbinde nogle ledninger
  • Kort mikro -USB -kabel, der fungerer som en jumper inde i boksen for at drive RPi'en

Værktøjer jeg brugte:

  • Skarp kniv (f.eks. Kniv til skæring af tæpper)
  • Roterende værktøj
  • Varm limpistol
  • Lodde station
  • Tænger, diagonal tang/sideskærer
  • Skruetrækker
  • Fil
  • Mig

Værktøjer, du sandsynligvis har brug for:

Alt det ovenstående, men i stedet for "Mig" burde det være: "dig":)

Trin 3: Frontpanel - LCD -skærm

Frontpanel - LCD -skærm
Frontpanel - LCD -skærm
Frontpanel - LCD -skærm
Frontpanel - LCD -skærm

Hul til LCD -skærm var ligetil. Bare et rektangel, der passer til min LCD -skærm. Efter at have forsøgt at skære den med en skarp kniv, indså jeg, at æsken er ret hård. Så jeg brugte et boreværktøj til at skære vinduet og til at polere kanterne.

Trin 4: Frontpanel - Status -lysdioder

Frontpanel - Status -lysdioder
Frontpanel - Status -lysdioder
Frontpanel - Status -lysdioder
Frontpanel - Status -lysdioder

LED -huller er også ligetil. Jeg tog lige en stor boremaskine til træ, og derefter polerede jeg kanterne med et boreværktøj. De store lysdioder passede helt tæt. Jeg lod endnu ingen modstande til lysdioderne - jeg forlod det til samleprocessen.

Trin 5: Frontpanel - knapper

Frontpanel - knapper
Frontpanel - knapper
Frontpanel - knapper
Frontpanel - knapper
Frontpanel - knapper
Frontpanel - knapper
Frontpanel - knapper
Frontpanel - knapper

Det største problem med disse 2 store knapper var at placere dem jævnt med den korrekte afstand. Jeg skar hullerne bare ved hjælp af mit boreværktøj, da jeg trinvis kunne øge diameteren, så knapperne sidder tæt.

Trin 6: Strømstik

Strømstik
Strømstik

Et lille hul til mikro -USB -strøm var et meget sart stykke arbejde. Jeg ville have, at hullet skulle være så passende som muligt, så jeg tilbragte meget tid her til polering. Men jeg var tilfreds med det endelige resultat.

Derefter klippede jeg et kort mini USB -kabel, som blev placeret inde i æsken. Den ene side er tilsluttet RPi, og på den anden side blev alle kabler loddet til mikro -USB -interfacet i henhold til USB -stik.

Derefter varmlimede jeg det lille printkort direkte til æsken (det kan ses på et foto i samlingstrinnet).

Trin 7: Sæt alt sammen

Sætter alt sammen
Sætter alt sammen
Sætter alt sammen
Sætter alt sammen
Sætter alt sammen
Sætter alt sammen

Først lod jeg passende modstande til lysdioderne i henhold til deres farve (spænding) til 3,3V volt. Jeg brugte 100Ω til rød, to modstande 82 og 100 til gul (grøn og rød knude) og 100Ω til grøn. Du kan bruge en af online modstanden til LED -lommeregner. Men foretag nogle undersøgelser selv i henhold til den lysstyrke og den nøjagtige farvetone, du ønsker at opnå.

Ben af gul LED blev loddet sammen, så selve LED'en kan styres kun med en pin på RPi.

Ifølge dette pinout -diagram:

LED -noder blev tilsluttet:

  • Grøn LED - GPIO1 på Rpi
  • Gul LED (begge ben) til GPIO2 på RPi
  • Rød LED til GPIO0 på RPi

Jeg tilsluttede LCD ved hjælp af I2C ben på RPi ben

  • LCD SDA til GPIO8 på RPi
  • LCD SCL til GPIO9 på RPi
  • LCD PWR til 5V på RPi
  • LCD GND til GND på RPi

LCD'en blev varmlimet til æsken som en ekstra beskyttelse.

Jeg sluttede 3.3V og GND til det lille brødbræt, så jeg kunne bruge dem til knapper.

Grøn knap blev forbundet til 3.3V via mini breadboard og til GPIO5 på RPi.

Rød knap blev forbundet til 3.3V via mini breadboard og til GPIO4 på RPi.

Så når du trykker på knappen, er der en høj tilstand på RPi -stiften.

Mini bradboardet fungerer fint, så jeg sprang lodning af alle ledninger ind i printkort. I stedet dækkede jeg bare mini -brødbrættet med varm lim, så kablerne ikke falder af.

Jeg har også varmlimet RPis dæksel til kassen, så den ikke vil vakle indeni.

Jeg skruede frontpanelet med alle tingene indeni.

Derefter printede jeg, klipte og satte simple etiketter ved siden af lyskryds og knapper.

Trin 8: Slap konfiguration

Slap konfiguration
Slap konfiguration
Slap konfiguration
Slap konfiguration

Opret dit team på Slack.com, eller brug det, du har, og du har mindst administratorrettigheder.

I Slack skal du oprette en kanal til serviceens Slack -integration (eller springe over at oprette en kanal, hvis du vil bruge en, du allerede har).

Føj inkommende Webhooks -integration til dit team. Vælg kanalen, og kopier webhook -URL'en.

Føj Bots -integration til dit team. Vælg et navn til din bot, og kopier bot API -token.

Din administrerende tilpassede integrations side skal se ud på billedet.

Du skal invitere botten som medlem af din kanal. Du kunne gøre det allerede under oprettelsen af en kanal.

Hvis du vil tilpasse tjenesten senere, skal du kontrollere Slack API.

Trin 9: Softwareimplementering

Jeg brugte Raspbian som et operativsystem til min RPi ved at følge denne vejledning. Tilgiv mig, jeg vil springe over at forklare det, da det allerede er dokumenteret mange steder, og processen er ligetil. Jeg håber, at du er dygtig og erfaren nok til at klare at konfigurere RPi på egen hånd. Glem ikke at konfigurere WiFi -adgang på din Raspberry Pi;)

Som nævnt i prototypesektionen brugte jeg Java til at implementere hjernen i hele systemet. Koden er tilgængelig på GitHub -

Java -bibliotekerne jeg brugte:

  • pi4j - for at bruge Raspberry Pi fra Java
  • Springboot som applikationsplatform
  • allbegray/slack-api som Slack integration

Du skal redigere konfigurationsfil i src/resources/config.properties. Der er 3 poster, du skal konfigurere for at bruge Slack API:

  • channelName - kanalens navn Du vil sende statusændringer og modtage kommandoer.
  • slackBotToken - token for en bot konfigureret i dine Slack -teamintegrationer, som vil blive brugt til at sende meddelelser til den kanal, der er nævnt ovenfor. Bemærk! Du skal tilføje Slack Bot som medlem af kanalen.
  • webhookUrl - URL'en, du kan få fra Slack Teams tilpassede integrationer.

Projektet er Mavenized, så for at bygge det skal du bare skrive (du skal have mindst Java 8 og Maven installeret):

mvn ren pakke

Og i målkataloget Du kan finde JAR -filen med springboot. Sådan starter du en service:

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

Jeg satte denne linje til.sh script og tilføjede det som en autostart. Så når strømmen er tændt, starter servicen automatisk.

En særlig forklaring er nødvendig for LCD -skærmen.

Jeg prøvede forskellige tilgange/biblioteker til at styre LCD over I2C fra RPi, men jeg mislykkedes bare. For nogle LCD -skærme fungerede ikke korrekt, for nogle viste det noget skrald.

Men en ting fungerede meget fint lige ud af kassen. Det er kommandolinjeværktøjet, jeg fandt, du kan bruge til at styre LCD. Så jeg besluttede mig for bare at bruge dette værktøj direkte fra Java. Det fungerer sådan, at en normal Linux -proces (lcdi2c) kaldes (med forberedte parametre) hver gang jeg vil vise noget på LCD -skærmen.

Du skal downloade værktøjet og placere det ved siden af JAR -tjenesten

Brug af dette værktøj er en slags hack og dum løsning Men jeg følger den første teknikregel:

Hvis det er dumt, men det virker … det er ikke dumt

Trin 10: Brugsanvisning

Brugsanvisning
Brugsanvisning

Du kan kontrollere kickerbordets aktuelle status på den oprettede Slack -kanal ved at skrive kommandoen "status" (eller kort "st") eller kontrollere trafiklysene på enheden direkte.

Hvis du bare vil spille - tryk på den røde knap. Meddelelse vil blive sendt til Slack -kanal med information om, at kickerbordet er optaget. Når du er færdig med at spille - tryk på den grønne knap. Meddelelse vil blive sendt til Slack -kanalen med oplysninger om, at kickerbordet er gratis at spille.

Trafiklys ændres også, og LCD -skærmen viser nogle detaljerede oplysninger.

Bare hvis du glemmer at slippe bordet, når du er færdig med at spille, er der en timeout sat til 20 minutter. Hvis du stadig spiller og har brug for mere tid, skal du trykke på den røde knap igen, og kampen vil blive forlænget med 5 minutter (gælder kun, når der er mindre end 5 minutter tilbage før timeout). Afspilningstiden vises på LCD -skærmen.

For at reservere kickerbord, skal du skrive en besked "reserver" (eller bare: "res") til Slack -kanalen.

Det gule trafiklys tænder for at informere andre i nærheden af kickerbordet om, at det er reserveret, og snart kommer der nogen til at spille.

Reservation timeout er indstillet til 3 minutter. Derefter skifter kickerbord sin tilstand til gratis at spille.

Hvis du har brug for det, kan du annullere reservationen ved at skrive "annuller" på Slack -kanalen.

Systemet har også nogle andre mindre funktioner som:

  • Efter reservation fryses knapperne i 5 sekunder. Dette er for at forhindre situationer, at bare på samme tid er der nogen, der reserverer og et milisekund senere, der trykker på den røde knap og tænker, at det er ham/hende, der indtager bordet, men uden at vide, at nogen reserverede bordet bare et milisekund før.
  • Et tryk på en vilkårlig knap fryser dem begge i et halvt sekund. Dette er for at forhindre skøre knap -klikere, så Slack -kanal ikke bliver spammet så meget.
  • Gratis version af Slack giver mulighed for at gemme 10000 beskeder af hele teamet. For at bevare nogle af meddelelserne skal tjenesten slette de gamle meddelelser relateret til reservations-/statussystem) og kun beholde de sidste 6 af dem. Hvorfor 6? Fordi der oftest er 2 statusscenarier: "Reserveret-Besat-Fri" og "Besat-Fri". Så systemet kan gemme mindst 2 fuldt besættelsesfrie sessioner. For at rense alle systemmeddelelser skal du skrive kommandoen "ren" (eller "ryd").

Trin 11: Frigivelse

Udgivelse
Udgivelse
Udgivelse
Udgivelse

Indtil nu (tidspunktet for offentliggørelsen af dette instruerbare) kører systemet i mere end 2,5 måneder og bruges af mere end 30 personer. På grund af statusopdateringen af kicker -bordet ved vi altid, hvornår det er ledigt eller optaget, så vi ikke mister tid til at gå frem og tilbage længere. Forbindelsen og servicen er meget stabil, så vi kan stole på det.

Så langt så godt…

Trin 12: Ofte stillede spørgsmål

Hvorfor er timeout for reservation sat til 3 minutter?

3 minutter er den maksimale reservationstid, vedtag det som du vil i koden. Generelt vil det sjældent ske, at der vil gå hele 3 minutter, og reservationen vil blive timeout. I de fleste tilfælde vil nogen komme til sidst og indtage bordet.

Hvorfor er timeout for spillet sat til 20 minutter?

Afhængig af en spiller er den gennemsnitlige spilletid ~ 10 minutter. Hvis du skal spille længere, skal du trykke på den røde knap igen, når der er mindre end 5 minutter tilbage, og timeout forlænges til 5 minutter. Denne timeout er sat op, bare hvis nogen glemmer at frigive bordet.

Hvorfor er der ikke en pinkode på enheden til at bekræfte reservationen; ingen login og adgangskoder?

Hovedideen var at holde-det-simpelt-dumt. Ellers, hvis reservation, start og afslutning af spillet har brug for for stor indsats, vil ingen have lyst til at bruge det.

Hvorfor ser enheden så industriel grim ud?

Fordi jeg ikke havde laserskærer, CNC, 3D printer, smarte farvede etiketter osv. Du er mere end glad for at forbedre det og gøre det smukkere.

Hvorfor ikke bare implementere en app og holde en billig tablet på væggen med den samme funktionalitet?

Apps, apps overalt. Folk kan lide at fysisk interagere med ting og ikke bare trykke på en fladskærm.

Anbefalede: