Sadržaj:
- Korak 1: Dokaz koncepta i izrada prototipa
- Korak 2: Materijali i alati
- Korak 3: Prednja ploča - LCD zaslon
- Korak 4: Prednja ploča - LED diode statusa
- Korak 5: Prednja ploča - Gumbi
- Korak 6: Priključak za napajanje
- Korak 7: Sve spojite
- Korak 8: Slack konfiguracija
- Korak 9: Implementacija softvera
- Korak 10: Upute za uporabu
- Korak 11: Otpuštanje
- Korak 12: Česta pitanja
Video: Sustav jednostavnog kicker statusa i rezervacije sa Slack integracijom: 12 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:32
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
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
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
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
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
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
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
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
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
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:
Slack ažuriranje statusa s ESP8266: 5 koraka (sa slikama)
Alat za ažuriranje statusa Slack s ESP8266: Ovaj projekt pomaže vam olakšati dan ako ste udaljeni radnik koji koristi Slack. Pokazat ću vam kako ga izgraditi pomoću WiFi ploče ESP8266. Ne propustite gornji video za pregled. Jeste li tek počeli koristiti Slack ili ste tek koristili
Upravljanje roletnama s ESP8266, Google Home i Openhab integracijom i web kontrolom: 5 koraka (sa slikama)
Upravljanje roletnama s ESP8266, Google Home i Openhab integracijom i web kontrolom: U ovom Instructableu pokazat ću vam kako sam svojim roletama dodao automatizaciju. Htio sam moći dodati i ukloniti automatizaciju, tako da je sva instalacija pričvršćena. Glavni dijelovi su: Koračni motor Korakom upravljanim upravljačem bij ESP-01 Zupčanik i montaža
Sustav razvrstavanja boja: Arduino sustav s dva pojasa: 8 koraka
Sustav razvrstavanja boja: Sustav na bazi Arduina s dva remena: Prijevoz i/ili pakiranje proizvoda i predmeta na industrijskom području obavlja se pomoću linija izrađenih pomoću transportnih traka. Ti pojasevi pomažu premještanju predmeta s jedne točke na drugu specifičnom brzinom. Neki zadaci obrade ili identifikacije mogu biti
Izrada jednostavnog Steampunked MP3 playera: 6 koraka (sa slikama)
Izrada jednostavnog Steampunked MP3 playera: U Steampunk grupi na FB -u postavilo se pitanje je li teško izgraditi "neki Steampunk koji funkcionira" .I nije tako skupo jer mnogi Steampunk gadgeti koriste skupe materijale.OK, Lady's i gospodo pustimo se u to
Senzor vrata na baterije s integracijom kućne automatizacije, WiFi i ESP-SADA: 5 koraka (sa slikama)
Senzor vrata na baterijski pogon s integracijom kućne automatizacije, WiFi i ESP-SADA: U ovom uputstvu pokazat ću vam kako sam napravio senzor vrata na baterije s integracijom kućne automatizacije. Vidio sam neke druge lijepe senzore i alarmne sustave, ali sam ih želio sam napraviti. Moji ciljevi: Senzor koji otkriva i prijavljuje doo