Мазмуну:

Жөнөкөй Kicker статусу жана ээлөө системасы Slack Integration менен: 12 кадам (сүрөттөр менен)
Жөнөкөй Kicker статусу жана ээлөө системасы Slack Integration менен: 12 кадам (сүрөттөр менен)

Video: Жөнөкөй Kicker статусу жана ээлөө системасы Slack Integration менен: 12 кадам (сүрөттөр менен)

Video: Жөнөкөй Kicker статусу жана ээлөө системасы Slack Integration менен: 12 кадам (сүрөттөр менен)
Video: 5-класс | Табият таануу | Суунун бууланышы 2024, Ноябрь
Anonim
Жөнөкөй Kicker статусу жана ээлөө системасы Slack Integration менен
Жөнөкөй Kicker статусу жана ээлөө системасы Slack Integration менен

Мен иштеген компанияда тепкич столу бар. Компания көп кабаттарды ээлейт жана кээ бир кызматкерлер үчүн столго жетүү үчүн 3 мүнөткө чейин убакыт талап кылынат жана… үстөл мурунтан эле бош эмес экенин түшүнүү үчүн.

Андыктан реалдуу убакыт режиминде иштөөчү статустук берүүнүн жана ээлөөнүн жөнөкөй системасын түзүү идеясы пайда болгон.

Компания Slack байланыш куралын колдонот, анда ар бир кызматкердин эсеби бар. Бизде #kicker каналы бар, жөн гана … kicker жөнүндө талкуулоо үчүн. Канал ээлөө үчүн "кирүү чекити" катары колдонулушу мүмкүн жана учурдагы таблицанын абалы жөнүндө кабардар болушу мүмкүн.

Адаттагыдай эле, мындай система менен кантип күрөшүүнүн көптөгөн түшүнүктөрү бар. Бирок, жалпысынан алганда, алардын бардыгында бир негизги эреже пайда болгон: система менен иштөөдө ашыкча кадамдарды жасабастан колдонуу жөнөкөй болушу керек.

Түзмөк жана кызмат тепкич столуна жабышпайт жана аны кандайдыр бир "жалпы ресурска" (пинг-понг столу, консоль ж.

Андыктан, баштайлы…

1 -кадам: Концепциянын далили жана прототиптөө

Концепциянын далили жана прототиптөө
Концепциянын далили жана прототиптөө
Концепциянын далили жана прототиптөө
Концепциянын далили жана прототиптөө
Концепциянын далили жана прототиптөө
Концепциянын далили жана прототиптөө

Бул талаптарга ылайык тепкич столунун жанына орнотула турган түзмөктү куруу идеясы катуу болгон:

  • учурдагы столдун абалы жөнүндө кээ бир көрсөткүчтөр - эгер сиз анын жанында турган болсоңуз, анда ал бекер же корголгон экенин билишиңиз керек жана кимдир бирөө 3 мүнөттөн кийин ойноого келет. Светофор идеяга эң сонун ылайык келет:

    • жашыл жарык - ойноо бекер,
    • сары жарык - корголгон,
    • кызыл жарык - ээлеген.
  • баскыч (тар) Оюнга чейин жана кийин чыкылдатыңыз, андыктан баардыгы учурдагы столдун абалы жөнүндө маалымат алышат. 1 которуштуруу баскычынын ордуна мен 2 бөлүнгөн баскычты колдонууну чечтим:

    • кызыл баскыч - үстөлдү ээлөө, оюнду баштоо (алдын ала эскертүүдөн кийин).
    • жашыл баскыч - релиз столу.
  • кээ бирлер "эмне болуп жатат" жөнүндө кененирээк маалыматты камтыган дисплейде - алдын ала ээлөө убактысы, кайталанган столдун абалы, ойноо убактысынын аяктоосу ж.

Ээлеп коюу менен мен кийинки 3 мүнөткө ээлеп коюуну айтам. Система колдонуучу столду так убакытта ээлей алгыдай иштелип чыккан эмес (мис., 02:00 PM). Бул алдын ала ээлөө сыяктуу иштебейт. ресторандарда, бирок жаңы мүнөттөрдө.

LAN байланышы жоктугунан, WLANды колдонуунун бирден -бир жолу - бул баары бир эң жакшы вариант. Системанын мээси Slack каналынан буйруктарды жөнөтүү жана алуу үчүн Slack API колдонушу керек. Алгач NodeMCU колдонууга аракет кылдым. Мен Slackке жана андан билдирүүлөрдү ала алдым жана ала алдым, бирок HTTPSти колдонуунун жана Slackтин "саламдашуу билдирүүсүнүн" (~ 300kB) көлөмүнүн айынан NodeMCU байланышы үзүлүп бараткан жана/же Интернет аркылуу казууну чече албаган кызыктай өзгөчөлүктөргө ээ болгон..

Ошентип, мен дагы күчтүү нерсени колдонууну чечтим: Raspberry Pi 3 (WiFi менен Zero W ал кезде чыга элек болчу). RPiге ээ болуу менен, мен ишке ашыруу тилин Cден Javaга которо алам, анткени бул мен үчүн ыңгайлуу - ошондуктан бул артыкчылык болду. Бүгүн сиз NodeMCUдан күчтүү жана RPiден азыраак нерсени колдоно аласыз. Балким Raspberry Zero?

Нан тактасында биринчи прототипти жинди зымдары бар, эскиздери жана прототиптери көп болгондон кийин, система иштей тургандай көрүндү.

Бул идеялардын бардыгына жана PoC иштей баштаганда, мен алдыңкы панелдеги элементтердин ар кандай жайгашуу конфигурацияларын пландаштыра баштадым, ошондуктан алар эң маалыматтуу жана колдонууга ыңгайлуу болот. Башка сунуштардын айрымдарын текшерип көрсөңүз болот, балким кээ бирлери сизге көбүрөөк туура келет. Акыркысын мен тандадым.

2 -кадам: материалдар жана инструменттер

Мен колдонгон материалдар:

  • Box
  • Raspberry Pi, microSD карта, микро USB кубаты
  • Жашыл жана кызыл аркада баскычтары
  • 16x2 LCD экран
  • Светодиоддор - Мен RGB колдонгом, бирок сиз туура түстү колдоно аласыз
  • Эркектен Аялга жана Аялдан Аялга Айландыргыч кабель кабельдери
  • Микро USB интерфейси
  • Мини нан тактасы кээ бир зымдарды туташтыруу үчүн
  • Кыска микро USB кабели RPiди иштетүү үчүн кутунун ичинде секирүүчү болуп иштейт

Мен колдонгон куралдар:

  • Курч бычак (мис. Килем кесүү үчүн пайдалуу бычак)
  • Ротари куралы
  • Ысык желим мылтык
  • Лагердик станция
  • Кычкачтар, диагоналдуу кычкачтар/каптал кескичтер
  • Screwdriver
  • Файл
  • Мага

Сизге керек болгон куралдар:

Жогоруда айтылгандардын баары, бирок "Мен" дегендин ордуна мындай болушу керек: "Сен":)

3 -кадам: алдыңкы панель - ЖК экран

Алдыңкы панель - ЖК экран
Алдыңкы панель - ЖК экран
Алдыңкы панель - LCD экран
Алдыңкы панель - LCD экран

ЖК экран үчүн тешик жөнөкөй эле. Жөн эле менин LCD экраныма туура келген тик бурчтук. Аны курч бычак менен кесүүгө аракет кылгандан кийин, кутучанын пластмассасы абдан кыйын экенин түшүндүм. Ошентип, мен бургулоочу куралды колдонуп терезени кесип, четин жылтыраттым.

4 -кадам: Алдыңкы панель - Статус LED

Алдыңкы панель - Статус LED
Алдыңкы панель - Статус LED
Алдыңкы панель - Статус LED
Алдыңкы панель - Статус LED

LED тешиктери да жөнөкөй. Мен жыгач үчүн чоң бургулоону алдым, андан кийин бургулоо шайманы менен кырларын жылтыраттым. Чоң диоддор эң сонун жабдылган. Мен LEDларга эч кандай резисторлорду кошкон жокмун - аны монтаждоо процессине калтырдым.

5 -кадам: алдыңкы панель - баскычтар

Алдыңкы панель - Баскычтар
Алдыңкы панель - Баскычтар
Алдыңкы панель - Баскычтар
Алдыңкы панель - Баскычтар
Алдыңкы панель - Баскычтар
Алдыңкы панель - Баскычтар
Алдыңкы панель - Баскычтар
Алдыңкы панель - Баскычтар

Бул 2 чоң баскычтын эң чоң көйгөйү аларды туура аралык менен бирдей жайгаштыруу болгон. Мен тешиктерди бургулоочу куралымдын жардамы менен кесип алдым, анткени баскычтар бекем жайгашып, диаметри кадам сайын көбөйтүлө баштады.

6 -кадам: Power Connector

Power Connector
Power Connector

Микро USB кубаты үчүн кичинекей тешик абдан кылдат жумуш болчу. Мен тешиктин мүмкүн болушунча туура болушун кааладым, ошондуктан бул жерде жылтыратуу үчүн көп убакыт өткөрдүм. Бирок акыркы жыйынтык мени канааттандырды.

Анан мен кутунун ичине салынган кыска USB кабелин кесип алдым. Бир тарабы RPiге туташтырылган, ал эми экинчи тарабында бардык кабелдер USB пинуттарына ылайык микро USB интерфейсине кошулган.

Андан кийин мен кичинекей ПХБны түз эле коробкага жабыштырдым (аны монтаждоо баскычындагы сүрөттөн көрүүгө болот).

7 -кадам: Бардыгын бириктирүү

Баарын бир жерге коюу
Баарын бир жерге коюу
Баарын бир жерге коюу
Баарын бир жерге коюу
Баарын бир жерге коюу
Баарын бир жерге коюу

Биринчиден, мен тийиштүү резисторлорду 3.3В вольт үчүн түсүнө (чыңалуусуна) жараша Светодиоддорго туташтырдым. Мен кызыл үчүн 100Ω, эки резистор 82 жана 100 сары (жашыл жана кызыл түйүн) үчүн жана жашыл үчүн 100Ω колдондум. Сиз LED калкулятору үчүн онлайн каршылыгынын бирин колдоно аласыз. Сураныч, сиз жетишүүнү каалаган ачыктыкка жана так түс тонусуна жараша өзүңүз бир аз изилдөө жүргүзүңүз.

Сары LED буттары чогуу ширетилген, андыктан LEDдин өзүн RPiдеги бир пин менен башкарса болот.

Бул диаграммага ылайык:

LED түйүндөрү туташты:

  • Жашыл LED - Rpi боюнча GPIO1
  • Сары LED (эки буту) RPi боюнча GPIO2ге
  • Кызыл LED RIO боюнча GPIO0

Мен RPi төөнөгүчтөрүндө I2C төөнөгүчтөрүн колдонуп ЖК коштум

  • LCD SDA RPi боюнча GPIO8ге
  • LCD SCL RPi боюнча GPIO9го
  • LCD PWR 5 V чейин RPi
  • LCD GNDден GNDге RPi боюнча

ЖК кошумча коргонуу катары кутуга ысык желимделген.

Мен 3.3V менен GNDди кичинекей нан тактасына туташтырдым, ошондуктан аларды баскычтар үчүн колдоно алдым.

Жашыл баскыч мини нан аркылуу 3.3Vга жана RPiдеги GPIO5ке туташтырылган.

Кызыл баскыч мини нан аркылуу 3.3Vга жана RPiдеги GPIO4кө туташтырылган.

Ошентип, сиз качан баскычты бассаңыз, RPi пининде жогорку абал бар.

Мини брэдборд абдан жакшы иштейт, ошондуктан мен бардык зымдарды ПХБга кошууну өткөрүп жибердим. Анын ордуна мен кабелдер түшүп кетпеши үчүн чакан панельди ысык клей менен жаптым.

Мен ошондой эле RPi капкагын ысык желим менен кутуга жабыштырдым, анткени ал ичинде термелбейт.

Мен алдыңкы панелди ичиндеги бардык нерселер менен бурап алдым.

Анан светофордун жана баскычтын жанына жөнөкөй этикеткаларды басып, кесип, чаптап койдум.

8 -кадам: Slack конфигурациясы

Slack конфигурациясы
Slack конфигурациясы
Slack конфигурациясы
Slack конфигурациясы

Slack.comдо өз командаңызды түзүңүз же сизде бар жана жок дегенде администратор укуктарына ээ болгон команданы колдонуңуз.

Slackте, кызматтын Slack интеграциясы үчүн канал түзүңүз (же мурунтан эле бар болгуңуз келсе, канал түзүүнү өткөрүп жибериңиз).

Командаңызга Incomming Webhooks интеграциясын кошуңуз. Каналды тандап, вебхуктун URL дарегин көчүрүңүз.

Командаңызга Bots интеграциясын кошуңуз. Ботуңуз үчүн кандайдыр бир атты тандап, боттун API токенин көчүрүңүз.

Сиздин башкаруучу ыңгайлаштырылган баракчаңыз сүрөттөгүдөй болушу керек.

Сиз ботту Каналыңыздын мүчөсү катары чакырышыңыз керек. Сиз муну каналды түзүү учурунда эле жасай аласыз.

Эгерде сиз кызматты кийинчерээк ыңгайлаштыргыңыз келсе, Slack API'син текшериңиз.

9 -кадам: Программаны ишке ашыруу

Мен бул үйрөткүчтү колдонуу менен Raspbianды RPi үчүн операциялык система катары колдондум. Сураныч, мени кечирип коюңуз, мен түшүндүрүп берүүдөн баш тартам, анткени ал көптөгөн жерлерде документтештирилген жана процесс оңой. Сиз RPiди өз алдынча орнотуу үчүн жөндөмдүү жана тажрыйбалуусуз деп үмүттөнөм. Сураныч, Raspberry Piңизде WiFi кирүүнү конфигурациялоону унутпаңыз;)

Прототипдөө бөлүмүндө айтылгандай, мен Java системасын бүт системанын мээсин ишке ашыруу үчүн колдондум. Код GitHubда жеткиликтүү -

Мен колдонгон Java китепканалары:

  • pi4j - Javaдан Raspberry Pi колдонуу
  • Springboot тиркеме катары
  • allbegray/slack-api Slack интеграциясы катары

Сиз src/resources/config.properties ичинде конфигурация файлын түзөтүшүңүз керек. Slack API колдонуу үчүн конфигурациялашыңыз керек болгон 3 жазуу бар:

  • channelName - каналдын аты Сиз статустун өзгөрүшүн жарыялап, буйруктарды алгыңыз келет.
  • slackBotToken - жогоруда айтылган каналга билдирүүлөрдү жөнөтүү үчүн колдонула турган Slack командаңыздын интеграциясында конфигурацияланган боттун белгиси. Эске алыңыз, сиз Slack Botту каналдын мүчөсү катары кошушуңуз керек.
  • webhookUrl - URLди Slack Teamдин ыңгайлаштырылган интеграциясынан ала аласыз.

Долбоор Mavenized болгондуктан аны куруу үчүн жөн эле териңиз (Сизге жок дегенде Java 8 жана Maven орнотулган болушу керек):

mvn таза пакети

Жана максаттуу тиректорияда Springbooted JAR файлын таба аласыз. Кызматты баштоо үчүн:

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

Мен бул сапты.sh скриптине коюп, автоматтык түрдө баштоо катары коштум. Ошентип, кубат күйгүзүлгөндө, кызмат автоматтык түрдө жүктөлөт.

ЖКга бир өзгөчө түшүндүрмө керек.

Мен RPiден I2C аркылуу ЖКны көзөмөлдөө үчүн ар кандай ыкмаларды/китепканаларды сынап көрдүм, бирок мен ийгиликке жете алган жокмун. Кээ бир LCDлер туура эмес иштесе, кээ бирөөлөр үчүн таштанды көрүнүп турган.

Бирок бир нерсе кутудан тышкары эле абдан жакшы иштеген. Бул ЖКны башкаруу үчүн колдоно ала турган мен тапкан утилиталык буйрук сабынын куралы. Ошентип, мен бул куралды Javaдан түз колдонууну чечтим. ЖК экранда бир нерсени көрсөткүм келген сайын, кадимки Linux процесси (lcdi2c) (даярдалган параметрлер менен) деп аталат.

Сиз куралды жүктөп алып, аны JAR кызматынын жанына коюшуңуз керек

Бул куралды колдонуу - бул хакердик жана акылсыз чечимдин бир түрү, бирок мен инженериянын 1 -эрежесин сактайм:

Эгерде ал келесоо болсо, бирок ал иштейт … бул акылсыздык эмес

10 -кадам: Колдонуу инструкциясы

Колдонуу инструкциясы
Колдонуу инструкциясы

Сиз түзүлгөн "Slack" каналындагы тепкич столунун учурдагы абалын "status" (же кыскача "st") буйругун терүү менен текшере аласыз же түзмөктө светофорду текшере аласыз.

Эгерде сиз жөн гана ойногуңуз келсе - кызыл баскычты басыңыз. Билдирүү Slack каналына жөнөтүлөт, анда стикер ээленгени тууралуу маалымат берилет. Сиз ойноп бүткөндөн кийин - жашыл баскычты басыңыз. Билдирүү Slack каналына жөнөтүлөт, анда стикер бекер ойнотулат.

Светофорлор да өзгөрөт жана ЖК экраны толук маалыматты көрсөтөт.

Сиз ойногондон кийин столду бошотууну унутуп калсаңыз, 20 мүнөткө чейин тыныгуу бар. Эгерде сиз дагы эле ойноп жатсаңыз жана көбүрөөк убакыт керек болсо, кызыл баскычты кайра басыңыз жана матч 5 мүнөткө узартылат (таймаутка 5 мүнөткө жетпеген убакытта гана колдонулат). Оюн убактысы LCD экранда көрсөтүлөт.

Кикер столун ээлөө үчүн Slack каналына "резерв" (же жөн эле: "res") билдирүүсүн жазыңыз.

Сары светофор күйүүчү столдун жанындагы башкаларга сакталганын кабарлап, жакында кимдир бирөө ойноого келет.

Ээлеп коюу убактысы 3 мүнөткө коюлган. Андан кийин, тепкич столу анын абалын бекер ойнотууга которот.

Эгер керек болсо, Slack каналына "жокко чыгаруу" деп жазуу аркылуу бронду жокко чыгара аласыз.

Системанын дагы башка кичинекей өзгөчөлүктөрү бар:

  • Ээлеп койгондон кийин, баскычтар 5 секундга тоңуп калат. Бул кырдаалды болтурбоо үчүн, ошол эле учурда кимдир бирөө резервде турат жана милисекунддан кийин кимдир бирөө кызыл баскычты басат, ал үстөлдү ээлеп жатат деп ойлойт, бирок билбестен кимдир бирөө столду бир милисекунд мурун эле сактап койгон.
  • Каалаган баскычты басуу экөөнү тең жарым секундага тоңдурат. Бул жинди баскычтарды чыкылдатуунун алдын алуу үчүн, ошондуктан Slack каналы анчалык спамдалбайт.
  • Slackтин бекер версиясы бүтүндөй команда тарабынан 10000 билдирүүлөрдү сактоого мүмкүндүк берет. Кабарлардын айрымдарын сактоо үчүн, кызмат ээлеп коюу/статус тутумуна байланышкан эски билдирүүлөрдү жок кылат) жана алардын акыркы 6сын гана сактайт. Эмнеге 6? Анткени көбүнчө 2 статус сценарийи бар: "Корголгон-ээленбеген" жана "Басып-бош". Ошентип, система жок дегенде 2 толук ээлеген сессияны сактай алат. Бардык системалык билдирүүлөрдү тазалоо үчүн "clean" (же "clear") буйругун териңиз.

11 -кадам: чыгаруу

Бошотуу
Бошотуу
Бошотуу
Бошотуу

Азырынча (бул нускаманы жарыялоо учуру), система 2,5+ ай бою иштеп жатат жана аны 30дан ашык адам колдонот. Кикер үстөлүнүн статусун жаңыртуунун аркасында, биз ар дайым бош же бош экенин билебиз, андыктан артка жана артка кетүү үчүн убакытты текке кетирбейбиз. Байланыш жана кызмат абдан туруктуу, ошондуктан биз ага таяна алабыз.

Азырынча, абдан жакшы…

12 -кадам: FAQ

Эмне үчүн ээлөө убактысы 3 мүнөткө коюлган?

3 мүнөт - бул эң көп ээлөө убактысы, аны коддо каалагандай кабыл алыңыз. Жалпысынан алганда, сейрек кездешет, толук 3 мүнөт өтөт жана ээлөө убактысы бүтөт. Көпчүлүк учурда, кимдир бирөө акыры келип, столду ээлейт.

Эмне үчүн тайм -аут 20 мүнөткө коюлган?

Оюнчуларга жараша, орточо оюн убактысы ~ 10 мүнөт. Эгерде сизге узак ойноо керек болсо, 5 мүнөттөн аз калганда кызыл баскычты кайра басыңыз жана күтүү 5 мүнөткө чейин узартылат. Бул таймут кимдир бирөө столду бошотууну унутуп калса гана орнотулат.

Эмне үчүн түзмөктө ээлөөнү ырастоо үчүн PIN -код жок; логиндер жана сырсөздөр жокпу?

Негизги идея жөнөкөй-келесоо болуу болчу. Болбосо, эгер оюнду баштоо жана аяктоо өтө көп күчтү талап кылса, анда эч ким аны колдонууну каалабайт.

Эмне үчүн аппарат ушунчалык өнөр жайлуу көрүнөт?

Менде лазер кескич, CNC, 3D принтер, кооз түстүү этикетка жасоочу ж.

Эмне үчүн бир эле колдонмону ишке киргизип, ошол эле функционалдуу арзан планшетти дубалга илип койбойсуз?

Колдонмолор, бардык жерде колдонмолор. Адамдар физикалык жактан нерселер менен өз ара аракеттенүүнү жакшы көрүшөт жана жөн эле экранда таптап коюшпайт.

Сунушталууда: