Orodha ya maudhui:

Hali Rahisi ya Kicker na Mfumo wa Kuhifadhi Na Ushirikiano wa Slack: Hatua 12 (na Picha)
Hali Rahisi ya Kicker na Mfumo wa Kuhifadhi Na Ushirikiano wa Slack: Hatua 12 (na Picha)

Video: Hali Rahisi ya Kicker na Mfumo wa Kuhifadhi Na Ushirikiano wa Slack: Hatua 12 (na Picha)

Video: Hali Rahisi ya Kicker na Mfumo wa Kuhifadhi Na Ushirikiano wa Slack: Hatua 12 (na Picha)
Video: Только стакан этого сока ... Обратное забивание артерий и снижение высокого кровяного давления 2024, Novemba
Anonim
Hali rahisi ya Kicker na Mfumo wa Kuhifadhi Na Ushirikiano wa Slack
Hali rahisi ya Kicker na Mfumo wa Kuhifadhi Na Ushirikiano wa Slack

Katika kampuni ninayofanya kazi kuna meza ya kicker. Kampuni hiyo inachukua sakafu nyingi na kwa wafanyikazi wengine inachukua hadi dakika 3 kufika mezani na… kutambua kuwa meza tayari imechukuliwa.

Kwa hivyo wazo lilitokea kujenga aina ya hali rahisi ya utangazaji na mfumo wa uhifadhi ambao unafanya kazi kwa wakati halisi.

Kampuni hutumia zana ya mawasiliano ya Slack ambapo kila mfanyakazi ana akaunti. Tuna kituo cha #kicker tu kwa majadiliano juu ya … kicker. Kituo kinaweza kutumika kama aina ya "kiingilio" cha kuhifadhi na kufahamishwa juu ya hali ya meza ya sasa.

Kama kawaida, kuna dhana nyingi za jinsi ya kushughulika na mfumo kama huo. Lakini kwa ujumla, sheria moja ya kimsingi ilionekana katika zote: lazima iwe rahisi kutumia bila hatua zozote za kupindukia wakati wa kushughulika na mfumo.

Kifaa na huduma hazijatiwa kwenye meza ya kicker na inaweza kutumika kwa "rasilimali ya kawaida" yoyote (kama meza ya ping-pong, koni, nk…) ambayo inahitaji aina fulani ya utangazaji wa hali ya suluhisho la uhifadhi wa amd.

Kwa hivyo, wacha tuanze …

Hatua ya 1: Uthibitisho wa Dhana na Prototyping

Uthibitisho wa Dhana na Prototyping
Uthibitisho wa Dhana na Prototyping
Uthibitisho wa Dhana na Prototyping
Uthibitisho wa Dhana na Prototyping
Uthibitisho wa Dhana na Prototyping
Uthibitisho wa Dhana na Prototyping

Kwa dharau wazo lilikuwa kujenga kifaa ambacho kitakuwa kimewekwa karibu na meza ya kicker kufuatia mahitaji haya:

  • viashiria kadhaa juu ya hali ya sasa ya meza - ikiwa umesimama karibu nayo, unapaswa kujua kuwa ni bure au imehifadhiwa na mtu atakuja kucheza kwa dakika 3. Taa za trafiki zinafaa kwa wazo kabisa:

    • taa ya kijani - huru kucheza,
    • taa ya manjano - imehifadhiwa,
    • taa nyekundu - ulichukua.
  • kifungo (s) Unaweza kubofya kabla na baada ya mchezo ili kila mtu mwingine apate habari juu ya hali ya meza ya sasa. Badala ya kitufe 1 cha kugeuza niliamua kutumia vifungo 2 vilivyotengwa:

    • kitufe nyekundu - chukua meza, anza mchezo (baada ya kuweka nafasi au ad hoc).
    • kifungo kijani - meza ya kutolewa.
  • onyesho zingine zilizo na habari ya kina zaidi juu ya "kinachoendelea" - muda wa kuweka nafasi, hali ya meza iliyorudiwa, muda wa kucheza wa kucheza nk …

Kwa kuweka nafasi ninamaanisha uhifadhi tu kwa dakika 3 zijazo. Mfumo haujatengenezwa ili mtumiaji aweze kuhifadhi meza kwa wakati halisi (k.m 02:00 PM). Haifanyi kazi kama kuweka nafasi n.k. katika mikahawa lakini kwa dakika za kupendeza.

Kwa sababu ya ukosefu wa muunganisho wa LAN mahali, chaguo pekee ni kutumia WLAN - ndio chaguo bora hata hivyo. Ubongo wa mfumo lazima utumie Slack API kutuma na kupokea amri kutoka kwa kituo cha Slack. Kwanza nilijaribu kutumia NodeMCU. Niliweza kupata na kupokea ujumbe kwenda na kutoka Slack lakini kwa sababu ya matumizi ya HTTPS na pia saizi ya "ujumbe wa kukaribisha" wa Slack (~ 300kB), NodeMCU ilikuwa inapoteza unganisho na / au ilipata ubaguzi wa kushangaza ambao sikuweza kutatua kuchimba kupitia Mtandao.

Kwa hivyo niliamua kutumia kitu chenye nguvu zaidi: Raspberry Pi 3 (Zero W na WiFi ilikuwa bado haijatolewa wakati huo). Kwa kuwa na RPi, ningeweza kubadilisha lugha ya utekelezaji kutoka C kwenda Java kwani ni rahisi zaidi kwangu - kwa hivyo hii ilikuwa faida. Leo Unaweza kutumia kitu chenye nguvu kuliko NodeMCU na isiyo na nguvu kuliko RPi. Zero ya Raspberry labda?

Baada ya kujenga mfano wa kwanza kwenye ubao wa mkate na wiring kadhaa ya kupendeza, michoro mingi na mfano, mfumo ulionekana kama unaweza kufanya kazi.

Kuwa na maoni haya yote na kufanya kazi kwa PoC, nilianza kupanga usanidi tofauti wa uwekaji wa vitu hapo juu kwenye jopo la mbele ili iwe ndiyo yenye kuelimisha zaidi na rahisi kutumia. Unaweza kuangalia mapendekezo mengine, labda mengine yanakufaa zaidi. Wa mwisho alikuwa mteule na mimi.

Hatua ya 2: Vifaa na Zana

Vifaa nilivyotumia:

  • Sanduku
  • Raspberry Pi, kadi ya MicroSD, usambazaji umeme wa USB ndogo
  • Vifungo vya Arcade kijani na nyekundu
  • Skrini ya 16x2 LCD
  • LEDs - Nilitumia RGB lakini Unaweza kutumia rangi inayofaa
  • Kiume hadi Kike na Kike hadi Kike nyaya za kuruka
  • Micro interface ya USB
  • Bodi ndogo ya mkate ili kuunganisha waya
  • Cable fupi ndogo ya USB inayofanya kazi kama jumper ndani ya sanduku ili kuwezesha RPi

Zana ambazo nilitumia:

  • Kisu kali (k. Kisu cha matumizi ya kukata zulia)
  • Chombo cha Rotary
  • Bunduki ya gundi moto
  • Kituo cha Soldering
  • Viziwi, koleo za ulalo / wakataji wa pembeni
  • Bisibisi
  • Faili
  • Mimi

Zana Labda unahitaji:

Yote hapo juu lakini badala ya "Mimi" inapaswa kuwa: "Wewe":)

Hatua ya 3: Jopo la mbele - Skrini ya LCD

Jopo la mbele - Skrini ya LCD
Jopo la mbele - Skrini ya LCD
Jopo la mbele - Skrini ya LCD
Jopo la mbele - Skrini ya LCD

Shimo kwa skrini ya LCD ilikuwa moja kwa moja. Mstatili tu ambao unafaa kwa skrini yangu ya LCD. Baada ya kujaribu kuikata kwa kisu kikali, niligundua kuwa plastiki ya sanduku ni ngumu sana. Kwa hivyo nilitumia zana ya kuchimba visima kukata dirisha na kupaka kingo.

Hatua ya 4: Jopo la mbele - Hali za LED

Jopo la mbele - Hali za LED
Jopo la mbele - Hali za LED
Jopo la mbele - Hali za LED
Jopo la mbele - Hali za LED

Mashimo ya LED pia ni ya moja kwa moja. Nilichukua tu kuchimba kuni kubwa na kisha nikasafisha kingo na zana ya kuchimba visima. LED kubwa zilitoshea vizuri kabisa. Sikuwa na solder resistors yoyote kwa LEDs bado - niliiacha kwa mchakato wa kukusanyika.

Hatua ya 5: Jopo la mbele - Vifungo

Jopo la mbele - Vifungo
Jopo la mbele - Vifungo
Jopo la mbele - Vifungo
Jopo la mbele - Vifungo
Jopo la mbele - Vifungo
Jopo la mbele - Vifungo
Jopo la mbele - Vifungo
Jopo la mbele - Vifungo

Shida kubwa na vifungo 2 vikubwa ilikuwa kuziweka sawasawa na nafasi inayofaa. Nilikata mashimo tu kwa kutumia zana yangu ya kuchimba visima kwani naweza kuongeza kipenyo hatua kwa hatua ili vifungo vitoshe.

Hatua ya 6: Kiunganishi cha Nguvu

Kiunganishi cha Nguvu
Kiunganishi cha Nguvu

Shimo ndogo kwa nguvu ndogo ya USB ilikuwa kazi maridadi sana kufanya. Nilitaka shimo liwe sawa kadiri inavyowezekana kwa hivyo nilitumia hapa muda mwingi wa polishing. Lakini niliridhika na matokeo ya mwisho.

Kisha nikakata kebo fupi ndogo ya USB ambayo iliwekwa ndani ya sanduku. Upande mmoja umefungwa kwenye RPi, na kwa upande mwingine, nyaya zote ziliuzwa kwa kiunganishi cha USB kidogo kulingana na pinouts za USB.

Kisha nikaunganisha moto PCB ndogo moja kwa moja kwenye sanduku (linaweza kuonekana kwenye picha kwenye hatua ya kukusanyika).

Hatua ya 7: Kuweka Kila kitu Pamoja

Kuweka Kila kitu Pamoja
Kuweka Kila kitu Pamoja
Kuweka Kila kitu Pamoja
Kuweka Kila kitu Pamoja
Kuweka Kila kitu Pamoja
Kuweka Kila kitu Pamoja

Kwanza niliuza vipinga sahihi kwa LED kulingana na rangi yao (voltage) kwa volt 3.3V. Nilitumia 100Ω kwa nyekundu, vipinga viwili 82 na 100 kwa manjano (node ya kijani na nyekundu), na 100Ω kwa kijani. Unaweza kutumia moja ya kontena mkondoni kwa kikokotoo cha LED. Lakini tafadhali fanya utafiti na wewe mwenyewe kulingana na mwangaza na sauti halisi ya rangi Unataka kufikia.

Miguu ya LED ya manjano iliuzwa pamoja kwa hivyo LED yenyewe inaweza kudhibitiwa na pini moja kwenye RPi.

Kulingana na mchoro huu wa pinout:

Node za LED ziliunganishwa:

  • Kijani cha LED - GPIO1 kwenye Rpi
  • LED ya manjano (miguu yote miwili) hadi GPIO2 kwenye RPi
  • LED Nyekundu kwa GPIO0 kwenye RPi

Niliunganisha LCD kwa kutumia pini za I2C kwenye pini za RPi

  • LCD SDA kwa GPIO8 kwenye RPi
  • LCD SCL kwa GPIO9 kwenye RPi
  • LCD PWR hadi 5V kwenye RPi
  • LCD GND kwa GND kwenye RPi

LCD ilikuwa imechomwa moto kwenye sanduku kama kinga ya ziada.

Niliunganisha 3.3V na GND kwenye ubao mdogo wa mkate ili niweze kuzitumia kwa vifungo.

Kitufe cha kijani kiliunganishwa na 3.3V kupitia mkate wa mini na kwa GPIO5 kwenye RPi.

Kitufe chekundu kiliunganishwa na 3.3V kupitia mkate wa mini na kwa GPIO4 kwenye RPi.

Kwa hivyo wakati wowote Unapobonyeza kitufe, kuna hali ya juu kwenye pini ya RPi.

Bradboard mini hufanya kazi vizuri tu kwa hivyo niliruka waya zote kwenye PCB. Badala yake nilifunika tu mkate mdogo wa mini na gundi moto ili nyaya zisianguke.

Niliunganisha pia kifuniko cha RPi chenye moto kwenye sanduku kwa hivyo haitatetemeka ndani.

Niligonga jopo la mbele na vitu vyote ndani.

Kisha nikachapisha, nikakata na kubandika lebo rahisi karibu na taa za barabarani na vifungo.

Hatua ya 8: Usanidi wa Slack

Usanidi wa Slack
Usanidi wa Slack
Usanidi wa Slack
Usanidi wa Slack

Unda timu yako kwenye Slack.com au tumia uliyonayo na Una angalau haki za msimamizi.

Katika Slack, tengeneza kituo cha ujumuishaji wa huduma ya Slack (au ruka kuunda kituo ikiwa Unataka kutumia moja ambayo unayo tayari).

Ongeza ujumuishaji unaoingiliana wa Wavuti kwenye timu yako. Chagua kituo na nakili URL ya wavuti.

Ongeza ujumuishaji wa Boti kwenye timu yako. Chagua jina la bot yako na nakili ishara ya bot API.

Ukurasa wako wa ujumuishaji wa desturi unapaswa kuonekana kama kwenye picha.

Lazima umwalike bot kama mshiriki wa kituo chako. Unaweza kuifanya tayari wakati wa kuunda kituo.

Ikiwa unataka kubadilisha huduma baadaye, tafadhali angalia Slack API.

Hatua ya 9: Utekelezaji wa Programu

Nilitumia Raspbian kama mfumo wa uendeshaji wa RPi yangu kwa kufuata mafunzo haya. Tafadhali unisamehe nitaruka kuelezea kwani tayari imeandikwa katika maeneo mengi na mchakato ni sawa. Natumai Una ujuzi na uzoefu wa kutosha kuweza kusanidi RPi peke yako. Tafadhali usisahau kusanidi ufikiaji wa WiFi kwenye Raspberry Pi yako;)

Kama nilivyosema katika sehemu ya prototyping, nilitumia Java kutekeleza ubongo wa mfumo mzima. Nambari hiyo inapatikana kwenye GitHub -

Maktaba za Java nilizotumia:

  • pi4j - kutumia Raspberry Pi kutoka Java
  • Springboot kama platrorm ya maombi
  • allbegray / slack-api kama ujumuishaji wa Slack

Unahitaji kuhariri faili ya usanidi katika src / rasilimali / usanidi. Kuna viingilio 3 Unapaswa kusanidi ili kutumia Slack API:

  • channelName - jina la kituo Unataka kuchapisha mabadiliko ya hali na kupokea amri.
  • slackBotToken - ishara ya bot iliyosanidiwa katika ujumuishaji wa timu yako ya Slack ambayo itatumika kutuma ujumbe kwa kituo kilichotajwa hapo juu. Tafadhali kumbuka Lazima uongeze Slack Bot kama mshiriki wa kituo.
  • webhookUrl - URL Unaweza kupata kutoka kwa ujumuishaji wa kawaida wa Timu ya Slack.

Mradi umeharibiwa ili kuijenga tu aina (Unahitaji angalau Java 8 na Maven imewekwa):

mfuko safi wa mvn

Na katika mwelekeo wa lengo Unaweza kupata faili ya JAR ya Springbooted. Kuanzisha huduma:

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

Niliweka laini hii kwa maandishi ya.sh na kuiongeza kama sehemu ya kujiendesha. Kwa hivyo wakati wowote umeme umewashwa, buti za huduma moja kwa moja.

Ufafanuzi mmoja maalum unahitajika kwa LCD.

Nilijaribu mbinu / maktaba tofauti kudhibiti LCD juu ya I2C kutoka RPi lakini nilishindwa tu. Kwa LCD fulani haikuwa ikifanya kazi vizuri, kwa wengine ilikuwa ikionyesha takataka.

Lakini jambo moja lilikuwa likifanya kazi nzuri sana nje ya sanduku. Ni zana ya amri ya matumizi ambayo nimepata Unaweza kutumia kudhibiti LCD. Kwa hivyo niliamua kutumia zana hii moja kwa moja kutoka Java. Inafanya kazi kama hii kwamba mchakato wa kawaida wa Linux (lcdi2c) unaitwa (na vigezo tayari) kila wakati ninataka kuonyesha kitu kwenye skrini ya LCD.

Unahitaji kupakua zana na kuiweka karibu na huduma ya JAR

Kutumia zana hii ni aina ya suluhisho la ujanja na la kijinga Lakini mimi hufuata kanuni ya 1 ya uhandisi:

Ikiwa ni ya kijinga, lakini inafanya kazi… sio ya kijinga

Hatua ya 10: Maagizo ya Matumizi

Maagizo ya Matumizi
Maagizo ya Matumizi

Unaweza kuangalia hali ya sasa ya meza ya kicker kwenye kituo cha Slack kilichoundwa kwa kuandika "hadhi" (au kwa muda mfupi "amri") au angalia taa za trafiki moja kwa moja kwenye kifaa.

Ikiwa unataka tu kucheza - bonyeza kitufe nyekundu. Ujumbe utatumwa kwa kituo cha Slack na maelezo kwamba meza ya kicker inachukuliwa. Unapomaliza kucheza - bonyeza kitufe kijani. Ujumbe utatumwa kwa kituo cha Slack na maelezo kwamba meza ya kicker ni bure kucheza.

Taa za trafiki pia zitabadilika na skrini ya LCD itaonyesha habari ya kina.

Ila ikiwa utasahau kutolewa kwa meza baada ya kumaliza kucheza, kuna muda wa kuweka muda kuwa dakika 20. Ikiwa bado unacheza na unahitaji muda zaidi, bonyeza kitufe chekundu tena na mechi itaongezwa kwa dakika 5 (tumia tu wakati imebaki chini ya dakika 5 kabla ya muda kuisha). Muda wa kucheza utawasilishwa kwenye skrini ya LCD.

Kuhifadhi meza ya kicker, andika ujumbe "hifadhi" (au tu: „res") kwa kituo cha Slack.

Taa ya trafiki ya Njano itawasha habari wengine karibu na meza ya kicker kwamba imehifadhiwa na hivi karibuni mtu atakuja kucheza.

Muda wa kuweka nafasi umewekwa kuwa dakika 3. Baada ya hapo, meza ya kicker inabadilisha hali yake kuwa huru kucheza.

Ikiwa unahitaji, Unaweza kughairi uhifadhi kwa kuandika „ghairi” kwenye kituo cha Slack.

Mfumo pia una huduma zingine ndogo kama:

  • Baada ya kuweka nafasi, vifungo huhifadhiwa kwa sekunde 5. Hii ni kwa kuzuia hali, kwamba wakati huo huo mtu anahifadhi na milisecond baadaye mtu anashinikiza kitufe chekundu akidhani kuwa Yeye ndiye anayeshika meza lakini bila kujua kwamba mtu alikuwa amehifadhi meza tu milisecond hapo awali.
  • Kubonyeza kitufe chochote huganda wote wawili kwa nusu ya sekunde. Hii ni kwa sababu ya kuzuia vitufe vya wazimu kwa hivyo kituo cha Slack hakitatapikwa sana.
  • Toleo la bure la Slack inaruhusu kuhifadhi ujumbe 10000 na timu nzima. Ili kuhifadhi jumbe zingine, huduma futa jumbe za zamani zinazohusiana na mfumo wa uhifadhi / hadhi) na uweke 6 za mwisho tu. Kwa nini 6? Kwa sababu mara nyingi kuna hali 2 za hali: "Imehifadhiwa-Inakaliwa-Bure" na "Inakaliwa-Bure". Kwa hivyo mfumo unaweza kuhifadhi angalau vipindi 2 kamili vya bure. Kusafisha fujo zote za mfumo, andika amri "safi" (au "wazi").

Hatua ya 11: Kutoa

Inatoa
Inatoa
Inatoa
Inatoa

Mpaka sasa (wakati wa kuchapisha hii inayoweza kufundishwa), mfumo unafanya kazi kwa mwezi 2.5+ na unatumiwa na zaidi ya watu 30. Kwa sababu ya sasisho la hali ya meza ya kicker, siku zote tunajua wakati ni bure au inamilikiwa kwa hivyo haturuhusu wakati kurudi na kurudi tena. Uunganisho na huduma ni thabiti sana kwa hivyo tunaweza kuitegemea.

Hadi sasa, nzuri sana…

Hatua ya 12: Maswali Yanayoulizwa Sana

Kwa nini muda wa kuweka nafasi umewekwa kwa dakika 3?

Dakika 3 ni wakati wa kuweka nafasi kubwa, ipokee kama Unavyopenda kwenye nambari. Kwa ujumla haitatokea mara chache, kwamba dakika 3 kamili zitapita na uwekaji wa muda utawekwa. Katika hali nyingi mtu atakuja na kuchukua meza.

Kwa nini muda wa kucheza umewekwa kwa dakika 20?

Kulingana na wachezaji, wastani wa muda wa kucheza ni ~ dakika 10. Ikiwa unahitaji kucheza kwa muda mrefu, bonyeza kitufe nyekundu tena wakati chini ya dakika 5 kushoto na muda wa muda utapanuliwa kurudi kwa dakika 5. Muda huu umewekwa ikiwa mtu atasahau kutolewa kwa meza.

Kwa nini hakuna pedi ya PIN kwenye kifaa ili kuthibitisha uhifadhi; hakuna kuingia na nywila?

Wazo kuu lilikuwa kuweka-rahisi-kijinga. Vinginevyo, ikiwa uhifadhi, kuanzia na kumaliza mchezo unahitaji juhudi nyingi, basi hakuna mtu atakayetaka kuitumia.

Kwa nini kifaa kinaonekana kuwa mbaya sana viwandani?

Kwa sababu sikuwa na mkataji wa laser, CNC, printa ya 3D, mtengenezaji wa lebo ya dhana n.k. Wewe ni zaidi ya radhi kuiboresha na kuifanya iwe nzuri zaidi.

Kwa nini usitekeleze tu programu na ubandike kibao cha bei rahisi ukutani na utendaji sawa?

Programu, programu kila mahali. Watu wanapenda kushirikiana kimwili na vitu na sio kugonga tu skrini tambarare.

Ilipendekeza: