Talaan ng mga Nilalaman:

Simpleng Kicker Status at Reservation System Na may Slack Integration: 12 Hakbang (na may Mga Larawan)
Simpleng Kicker Status at Reservation System Na may Slack Integration: 12 Hakbang (na may Mga Larawan)

Video: Simpleng Kicker Status at Reservation System Na may Slack Integration: 12 Hakbang (na may Mga Larawan)

Video: Simpleng Kicker Status at Reservation System Na may Slack Integration: 12 Hakbang (na may Mga Larawan)
Video: New trick lakwa wala kabbutar k lia😱🤯 || #ytshorts #pigeon #kabootar #youtubeshort #pigeonlover #pet 2024, Hulyo
Anonim
Simpleng Kicker Status at Reservation System Na may Slack Integration
Simpleng Kicker Status at Reservation System Na may Slack Integration

Sa isang kumpanya kung saan ako nagtatrabaho mayroong isang kicker table. Sinasakop ng kumpanya ang maraming palapag at para sa ilan sa mga empleyado ay tumatagal ng hanggang 3 minuto upang makapunta sa mesa at … upang mapagtanto na ang talahanayan ay nasakop na.

Samakatuwid isang ideya na arised upang bumuo ng isang uri ng simpleng katayuan sa pag-broadcast at reserbasyon ng system na nagpapatakbo sa real time.

Gumagamit ang kumpanya ng Slack tool ng komunikasyon kung saan ang bawat empleyado ay may isang account. Mayroon kaming kahit isang #kicker channel para lamang sa mga talakayan tungkol sa… kicker. Ang channel ay maaaring magamit bilang isang uri ng "entry point" para sa pagpapareserba at maipaalam tungkol sa katayuan ng kasalukuyang talahanayan.

Tulad ng dati, maraming mga konsepto kung paano makitungo sa naturang sistema. Ngunit sa pangkalahatan, lumitaw ang isang pangunahing panuntunan sa kanilang lahat: dapat itong maging simple upang magamit nang walang anumang labis na mga hakbang upang maisagawa kapag nakikipag-usap sa system.

Ang aparato at ang serbisyo ay hindi naka-sticks sa kicker table at maaaring magamit para sa anumang "karaniwang mapagkukunan" (tulad ng ping-pong table, console, atbp …) na nangangailangan ng ilang uri ng status broadcadting amd reservation solution.

Kaya, magsimula na tayo …

Hakbang 1: Katibayan ng Konsepto at Prototyping

Katibayan ng Konsepto at Prototyping
Katibayan ng Konsepto at Prototyping
Katibayan ng Konsepto at Prototyping
Katibayan ng Konsepto at Prototyping
Katibayan ng Konsepto at Prototyping
Katibayan ng Konsepto at Prototyping

Nakakatawang ideya na bumuo ng isang aparato na ilalagay sa tabi ng kicker table kasunod sa mga kinakailangang ito:

  • ilang mga tagapagpahiwatig tungkol sa kasalukuyang katayuan ng talahanayan - kung Nakatayo ka sa tabi nito, Dapat mong malaman na ito ay libre o nakalaan at may isang taong maglaro sa loob ng 3 minuto. Ang mga ilaw ng trapiko ay umaangkop sa ideya na perpekto:

    • berdeng ilaw - libre upang i-play,
    • dilaw na ilaw - nakalaan,
    • pulang ilaw - sinakop.
  • (mga) pindutan Maaari kang mag-click bago at pagkatapos ng laro upang malaman ng lahat ang tungkol sa katayuan ng kasalukuyang talahanayan. Sa halip na 1 pindutan ng toggle nagpasya akong gumamit ng 2 magkakahiwalay na mga pindutan:

    • pulang pindutan - sakupin ang talahanayan, magsimula ng isang laro (pagkatapos ng pagpapareserba o ad hoc).
    • berdeng pindutan - ilabas ang mesa.
  • ilang pagpapakita na may mas detalyadong mga impormasyong tungkol sa "kung ano ang nangyayari" - timeout ng reservation, paulit-ulit na katayuan sa talahanayan, timeout ng pag-play atbp…

Sa pamamagitan ng reserbasyon nangangahulugan ako ng reserbasyon lamang para sa susunod na 3 minuto. Hindi idinisenyo ang system upang maipareserba ng gumagamit ang talahanayan sa eksaktong oras (hal. 02:00 PM). Hindi ito gumagana tulad ng pagpapareserba hal. sa mga restawran ngunit para lamang sa upcomming minuto.

Dahil sa kawalan ng koneksyon sa LAN sa lugar, ang tanging pagpipilian ay ang paggamit ng WLAN - ito pa rin ang pinakamahusay na pagpipilian. Ang utak ng system ay dapat gumamit ng Slack API upang magpadala at makatanggap ng mga utos mula sa Slack channel. Una sinubukan kong gamitin ang NodeMCU. Nakuha ko at makatanggap ng mga mensahe sa at mula sa Slack ngunit dahil sa paggamit ng HTTPS at gayundin ang laki ng "maligayang mensahe" ni Slack (~ 300kB), ang NodeMCU ay nawalan ng koneksyon at / o nakakuha ng kakaibang pagbubukod na hindi ko malutas ang paghuhukay sa Internet.

Kaya't nagpasya akong gumamit ng isang bagay na mas malakas: Raspberry Pi 3 (Ang Zero W na may WiFi ay hindi pa inilabas sa oras na iyon). Sa pamamagitan ng pagkakaroon ng RPi, maaari kong ilipat ang pagpapatupad ng wika mula sa C patungong Java dahil mas madali para sa akin - kaya't ito ay isang kalamangan. Ngayon Maaari kang gumamit ng isang bagay na mas malakas kaysa sa NodeMCU at hindi gaanong malakas kaysa sa RPi. Raspberry Zero siguro?

Matapos ang pagbuo ng unang prototype sa isang breadboard na may ilang mga nakatutuwang mga kable, maraming sketch at prototyping, ang system ay mukhang maaari itong gumana.

Ang pagkakaroon ng lahat ng mga ideyang ito at nagtatrabaho PoC, nagsimula akong magplano ng iba't ibang mga setting ng pagkakalagay ng mga item sa itaas sa isang front panel upang sila ang magiging pinaka-nagbibigay-kaalaman at maginhawang gamitin. Maaari mong suriin ang ilan sa iba pang mga panukala, marahil ang ilan ay mas angkop sa Iyo. Ang huli ay ang pinili ko.

Hakbang 2: Mga Materyales at Tool

Mga materyal na ginamit ko:

  • Kahon
  • Raspberry Pi, microSD card, micro USB power supply
  • Mga berdeng at pulang arcade button
  • 16x2 LCD screen
  • Mga LED - Gumamit ako ng RGB ngunit Maaari mong gamitin ang tamang kulay
  • Mga lalaki hanggang Babae at Babae hanggang Babae na mga kable ng jumper ng breadboard
  • Micro USB interface
  • Mini breadboard lamang upang ikonekta ang ilang mga wire
  • Maikling micro USB cable na nagtatrabaho bilang isang lumulukso sa loob ng kahon upang mapagana ang RPi

Mga tool na ginamit ko:

  • Matalim na kutsilyo (hal. Utility kutsilyo para sa paggupit ng karpet)
  • Rotary tool
  • Mainit na glue GUN
  • Istasyon ng paghihinang
  • Mga pllier, diagonal pliers / tagaputol ng gilid
  • Screwdriver
  • File
  • Ako

Mga tool Maaaring kailanganin mo:

Lahat ng nasa itaas ngunit sa halip na "Ako" dapat ay: "Ikaw":)

Hakbang 3: Front Panel - LCD Screen

Front Panel - LCD Screen
Front Panel - LCD Screen
Front Panel - LCD Screen
Front Panel - LCD Screen

Ang butas para sa LCD screen ay prangka. Isang rektanggulo lamang na umaangkop sa aking LCD screen. Matapos subukang gupitin ito ng isang matalim na kutsilyo, napagtanto ko na ang plastik ng kahon ay medyo matigas. Kaya gumamit ako ng tool sa pagbabarena upang i-cut ang bintana at upang makintab ang mga gilid.

Hakbang 4: Front Panel - Mga LED ng Katayuan

Front Panel - Mga LED ng Katayuan
Front Panel - Mga LED ng Katayuan
Front Panel - Mga LED ng Katayuan
Front Panel - Mga LED ng Katayuan

Direkta din ang mga butas ng LED. Kumuha lang ako ng isang malaking drill para sa kahoy at pagkatapos ay pinakintab ko ang mga gilid ng tool sa pagbabarena. Ang malalaking LED ay nilagyan ng perpektong masikip. Hindi pa ako naghinang ng anumang resistors sa mga LED - Iniwan ko ito para sa proseso ng pag-iipon.

Hakbang 5: Front Panel - Mga Pindutan

Front Panel - Mga Pindutan
Front Panel - Mga Pindutan
Front Panel - Mga Pindutan
Front Panel - Mga Pindutan
Front Panel - Mga Pindutan
Front Panel - Mga Pindutan
Front Panel - Mga Pindutan
Front Panel - Mga Pindutan

Ang pinakamalaking problema sa 2 malalaking mga pindutan na ito ay ilagay ang mga ito nang pantay sa tamang puwang. Pinuputol ko ang mga butas gamit lamang ang aking tool sa pagbabarena dahil madaragdagan ko ang diameter ng hakbang-hakbang upang masikip ang mga pindutan.

Hakbang 6: Power Connector

Power connector
Power connector

Ang isang maliit na butas para sa lakas ng micro USB ay isang napakahusay na gawain na gagawin. Nais kong maging butas ang butas hangga't maaari kaya't gumugol ako dito ng maraming oras para sa buli. Ngunit nasiyahan ako sa huling resulta.

Pagkatapos ay pinutol ko ang isang maikling mini USB cable na nakalagay sa loob ng kahon. Ang isang gilid ay naka-plug ito sa RPi, at sa kabilang panig, ang lahat ng mga cable ay na-solder sa micro USB interface ayon sa mga USB pinout.

Pagkatapos ay mainit na nakadikit ko ang maliit na PCB nang direkta sa kahon (makikita ito sa isang larawan sa hakbang sa pag-iipon).

Hakbang 7: Pagsasama-sama sa Lahat

Pinagsasama ang Lahat
Pinagsasama ang Lahat
Pinagsasama ang Lahat
Pinagsasama ang Lahat
Pinagsasama ang Lahat
Pinagsasama ang Lahat

Una akong naghinang ng naaangkop na resistors sa mga LED ayon sa kanilang kulay (boltahe) para sa 3.3V volt. Gumamit ako ng 100Ω para sa pula, dalawang resistors 82 at 100 para sa dilaw (berde at pula na node), at 100Ω para sa berde. Maaari mong gamitin ang isa sa online risistor para sa LED calculator. Ngunit mangyaring gumawa ng ilang pagsasaliksik sa Iyong Sarili alinsunod sa ningning at eksaktong kulay ng kulay na nais mong makamit.

Ang mga binti ng dilaw na LED ay na-solder nang magkasama upang ang LED mismo ay maaaring makontrol sa pamamagitan lamang ng isang pin sa RPi.

Ayon sa diagram ng pinout na ito:

Nakakonekta ang mga LED node:

  • Green LED - GPIO1 sa Rpi
  • Dilaw na LED (parehong mga binti) sa GPIO2 sa RPi
  • Red LED sa GPIO0 sa RPi

Nakakonekta ako sa LCD gamit ang I2C pin sa mga RPi pin

  • LCD SDA sa GPIO8 sa RPi
  • LCD SCL sa GPIO9 sa RPi
  • LCD PWR hanggang 5V sa RPi
  • LCD GND sa GND sa RPi

Ang LCD ay mainit na nakadikit sa kahon bilang isang karagdagang proteksyon.

Ikinonekta ko ang 3.3V at GND sa maliit na breadboard upang magamit ko ang mga ito para sa mga pindutan.

Ang berdeng pindutan ay konektado sa 3.3V sa pamamagitan ng mini breadboard at sa GPIO5 sa RPi.

Ang pulang pindutan ay konektado sa 3.3V sa pamamagitan ng mini breadboard at sa GPIO4 sa RPi.

Kaya't tuwing pinindot mo ang pindutan, mayroong isang mataas na estado sa RPi pin.

Ang mini bradboard ay gumagana nang maayos kaya't nilaktawan ko ang paghihinang ng lahat ng mga wire sa PCB. Sa halip ay tinakpan ko na lang ng mini na pandikit ang mini breadboard upang hindi mahulog ang mga kable.

Nag-init din ako ng takip ng takip ni RPi sa kahon upang hindi ito mag-alog sa loob.

Kinulit ko ang front panel kasama ang lahat ng mga gamit sa loob.

Pagkatapos ay nag-print ako, gupitin at dumikit ang mga simpleng label sa tabi ng mga ilaw at pindutan ng trapiko.

Hakbang 8: Slack Configuration

Slack Configuration
Slack Configuration
Slack Configuration
Slack Configuration

Lumikha ng Iyong koponan sa Slack.com o gamitin ang mayroon ka at Mayroon kang hindi bababa sa mga karapatan sa admin.

Sa Slack, lumikha ng isang channel para sa pagsasama ng Slack ng serbisyo (o laktawan ang paglikha ng isang channel kung nais mong gumamit ng isa Mayroon ka na).

Magdagdag ng pagsasama ng Incomming Webhooks sa Iyong koponan. Piliin ang channel at kopyahin ang webhook URL.

Magdagdag ng pagsasama ng Bots sa Iyong koponan. Pumili ng ilang pangalan para sa Iyong bot at kopyahin ang token ng bot API.

Ang pahina ng iyong pamamahala ng mga pasadyang pagsasama ay dapat magmukhang sa larawan.

Kailangan mong anyayahan ang bot bilang isang miyembro ng Iyong channel. Magagawa mo na ito sa panahon ng paglikha ng isang channel.

Kung nais mong ipasadya ang serbisyo sa paglaon, mangyaring suriin ang Slack API.

Hakbang 9: Pagpapatupad ng Software

Ginamit ko ang Raspbian bilang isang operating system para sa aking RPi sa pamamagitan ng pagsunod sa tutorial na ito. Mangyaring patawarin ako ay laktawan ko ang pagpapaliwanag nito dahil naitala ito sa maraming lugar at prangka ang proseso. Inaasahan Ko na Ikaw ay may kasanayan at sapat na karanasan upang pamahalaan upang i-setup ang RPi sa Iyong Sarili. Mangyaring huwag kalimutan na i-configure ang pag-access sa WiFi sa Iyong Raspberry Pi;)

Tulad ng nabanggit sa seksyon ng prototyping, ginamit ko ang Java upang ipatupad ang utak ng buong system. Magagamit ang code sa GitHub -

Ang mga silid aklatan ng Java na ginamit ko:

  • pi4j - upang magamit ang Raspberry Pi mula sa Java
  • Springboot bilang isang application platrorm
  • allbegray / slack-api bilang Slack integration

Kailangan mong i-edit ang file ng pagsasaayos sa src / mapagkukunan / config.properties. Mayroong 3 mga entry Kailangan mong i-configure upang magamit ang Slack API:

  • channelName - pangalan ng channel Nais mong mag-post ng mga pagbabago sa katayuan at makatanggap ng mga utos.
  • slackBotToken - token ng isang bot na naka-configure sa pagsasama ng Iyong koponan na Slack na gagamitin upang mag-post ng mga mensahe sa channel na nabanggit sa itaas. Mangyaring tandaan Kailangan mong idagdag ang Slack Bot bilang isang miyembro ng channel.
  • webhookUrl - ang URL Maaari kang makakuha mula sa pasadyang pagsasama ng Slack Team.

Ang Project ay Mavenized kaya upang maitayo lamang ito (Kailangan mo ng hindi bababa sa Java 8 at Maven na naka-install):

mvn malinis na package

At sa target na tirectory Maaari mong mahanap ang Springbooted JAR file. Upang simulan ang isang serbisyo:

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

Itinakda ko ang linyang ito sa.sh script at idinagdag ito bilang isang autostart. Kaya't tuwing nakabukas ang kuryente, awtomatiko ang bota ng serbisyo.

Ang isang espesyal na paliwanag ay kinakailangan sa LCD.

Sinubukan ko ang iba't ibang mga diskarte / aklatan upang makontrol ang LCD sa I2C mula sa RPi ngunit nabigo lamang ako. Para sa ilang LCD ay hindi gumagana nang maayos, para sa ilan ay nagpapakita ito ng basura.

Ngunit isang bagay ang gumagana nang napakaganda sa labas lamang ng kahon. Ito ang tool ng linya ng utos ng utility na nahanap ko Maaari mong gamitin upang makontrol ang LCD. Kaya't nagpasya akong gamitin lamang ang tool na ito nang direkta mula sa Java. Gumagana ito tulad nito na ang isang normal na proseso ng Linux (lcdi2c) ay tinatawag na (na may nakahandang mga parameter) sa tuwing nais kong ipakita ang isang bagay sa LCD screen.

Kailangan mong i-download ang tool at ilagay ito sa tabi ng serbisyo ng JAR

Ang paggamit ng tool na ito ay isang uri ng pag-hack at hangal na solusyon Ngunit sinusunod ko ang unang patakaran ng engineering:

Kung ito ay hangal, ngunit ito ay gumagana … hindi ito hangal

Hakbang 10: Tagubilin sa Paggamit

Tagubilin sa Paggamit
Tagubilin sa Paggamit

Maaari mong suriin ang kasalukuyang katayuan ng kicker table sa nilikha na Slack channel sa pamamagitan ng pag-type ng "status" (o sa ilang sandali "st") na utos o direktang suriin ang mga ilaw ng trapiko sa aparato.

Kung nais mo lamang maglaro - pindutin ang pulang pindutan. Ipapadala ang mensahe sa Slack channel na may impormasyon na nasasakop ang talahanayan ng kicker. Kapag natapos mo na ang pag-play - pindutin ang berdeng pindutan. Ipapadala ang mensahe sa Slack channel na may impormasyon na ang kicker table ay malayang laruin.

Magbabago rin ang mga ilaw ng trapiko at magpapakita ang LCD screen ng ilang detalyadong impormasyon.

Kung sakaling makalimutan mong palabasin ang talahanayan pagkatapos mong matapos ang paglalaro, mayroong isang timeout na itinakda sa 20 minuto. Kung naglalaro ka pa rin at nangangailangan ng mas maraming oras, pindutin muli ang pulang pindutan at ang laban ay pahabain ng 5 minuto (mag-apply lamang kapag may mas mababa sa 5 minuto ang natitira bago mag-timeout). Ang pag-playout ng timeout ay ipapakita sa LCD screen.

Upang magreserba ng talahanayan ng kicker, sumulat ng isang mensahe na "reserba" (o lamang: "res") sa Slack channel.

Ang dilaw na ilaw ng trapiko ay magbubukas sa pagpapaalam sa iba malapit sa kicker table na ito ay nakalaan at sa lalong madaling panahon may isang tao na maglaro.

Ang timeout ng pagreserba ay nakatakda sa 3 minuto. Pagkatapos nito, ililipat ng kicker table ang estado nito upang malayang maglaro.

Kung Kailangan mo, Maaari mong kanselahin ang pagpapareserba sa pamamagitan ng pagsulat ng "kanselahin" sa Slack channel.

Ang system ay mayroon ding ilang iba pang mga menor de edad na tampok tulad ng:

  • Pagkatapos ng pagpapareserba, ang mga pindutan ay mai-freeze sa loob ng 5 segundo. Ito ay upang maiwasan ang mga sitwasyon, na sa parehong oras ng isang reserbang tao at isang milisecond mamaya ang isang tao ay pinindot ang pulang pindutan na iniisip na Siya / Siya ang sumasakop sa talahanayan ngunit walang kaalaman na ang isang tao ay nagreserba ng talahanayan isang milisecond lamang dati.
  • Ang pagpindot sa anumang pindutan ay nag-freeze sa pareho sa kanila sa kalahati ng isang segundo. Ito ay upang maiwasan ang mga nakatutuwang mga clicker ng pindutan kaya ang Slack channel ay hindi ma-spam nang ganoong kalaki.
  • Pinapayagan ang libreng bersyon ng Slack na mag-imbak ng 10000 mga mensahe ng buong koponan. Upang mapangalagaan ang ilan sa mga mensahe, tanggalin ng serbisyo ang mga lumang mensahe na nauugnay sa reserbasyon / sistema ng katayuan) at panatilihin lamang ang huling 6 sa mga ito. Bakit 6 Sapagkat kadalasan mayroong 2 mga sitwasyon sa katayuan: "Nakareserba-Walang Sakop na Libre" at "Walang Sakop na Libre". Kaya't ang system ay maaaring mag-imbak ng hindi bababa sa 2 buong session na walang abala. Upang linisin ang lahat ng mga messaging ng system, i-type ang "malinis" (o "malinaw") na utos.

Hakbang 11: Paglabas

Naglalabas
Naglalabas
Naglalabas
Naglalabas

Hanggang ngayon (ang sandali ng pag-publish ng itinuturo na ito), ang system ay tumatakbo sa loob ng 2.5+ buwan at ginagamit ng higit sa 30 mga tao. Dahil sa pag-update sa katayuan ng kicker table, palagi nating nalalaman kung libre ito o sinasakop kaya't hindi na tayo nagpapalipas ng oras sa pabalik-balik. Ang koneksyon at ang serbisyo ay napaka-matatag upang maaari naming umasa dito.

Sa ngayon, napakahusay…

Hakbang 12: FAQ

Bakit ang timeout ng reservation ay nakatakda sa 3 minuto?

3 minuto ang maximum na oras ng pagpapareserba, gamitin ito ayon sa gusto mo sa code. Pangkalahatan bihirang mangyari ito, na ang buong 3 minuto ay lilipas at ang pagreserba ay mag-time-out. Sa karamihan ng mga kaso ang isang tao ay darating sa kalaunan at sakupin ang talahanayan.

Bakit ang paglalaro ng timeout ay nakatakda sa 20 minuto?

Nakasalalay sa isang manlalaro, ang average na oras ng paglalaro ay ~ 10 minuto. Kung Kailangan mong maglaro ng mas mahaba, pindutin muli ang pulang pindutan kapag mas mababa sa 5 minuto ang natitira at ang pag-timeout ay mapalawak pabalik sa 5 minuto. Ang timeout na ito ay na-set up kung sakaling may isang tao na nakalimutan na bitawan ang talahanayan.

Bakit walang PIN pad sa aparato upang kumpirmahin ang pagpapareserba; walang mga pag-login at password?

Pangunahing ideya ay upang mapanatili itong-simpleng-bobo. Kung hindi man, kung ang pagpapareserba, pagsisimula at pagtatapos ng laro ay nangangailangan ng labis na pagsisikap, kung gayon walang sinuman ang gugustong gamitin ito.

Bakit mukhang pang-industriya-pangit ang aparato?

Dahil wala akong laser cutter, CNC, 3D printer, magarbong may kulay na tagagawa ng label atbp. Mas nalulugod ka na pagandahin ito at gawing mas maganda ito.

Bakit hindi na lang ipatupad ang ilang app at idikit ang murang tablet sa dingding na may parehong pag-andar?

Mga app, app saanman. Ang mga taong nais na pisikal na makipag-ugnay sa mga bagay at hindi lamang mag-tap sa isang flat screen.

Inirerekumendang: