Isi kandungan:

Status dan Sistem Tempahan Kicker Mudah Dengan Integrasi Slack: 12 Langkah (dengan Gambar)
Status dan Sistem Tempahan Kicker Mudah Dengan Integrasi Slack: 12 Langkah (dengan Gambar)

Video: Status dan Sistem Tempahan Kicker Mudah Dengan Integrasi Slack: 12 Langkah (dengan Gambar)

Video: Status dan Sistem Tempahan Kicker Mudah Dengan Integrasi Slack: 12 Langkah (dengan Gambar)
Video: Ilmu Pengurangan Berat Badan: Rintangan Leptin | Dr. J9Live 2024, Julai
Anonim
Status dan Sistem Tempahan Kicker Mudah Dengan Integrasi Slack
Status dan Sistem Tempahan Kicker Mudah Dengan Integrasi Slack

Di sebuah syarikat tempat saya bekerja ada meja kicker. Syarikat ini menempati banyak tingkat dan bagi sebilangan pekerja memerlukan masa hingga 3 minit untuk sampai ke meja dan… untuk menyedari bahawa meja tersebut sudah penuh.

Oleh itu, timbul idea untuk membina sejenis sistem penyiaran dan tempahan status sederhana yang beroperasi dalam masa nyata.

Syarikat menggunakan alat komunikasi Slack di mana setiap pekerja mempunyai akaun. Kami juga mempunyai saluran #kicker hanya untuk perbincangan mengenai… kicker. Saluran ini dapat digunakan sebagai semacam "pintu masuk" untuk membuat tempahan dan untuk diberitahu mengenai status jadual semasa.

Seperti biasa, terdapat banyak konsep bagaimana menangani sistem sedemikian. Tetapi secara umum, ada satu peraturan dasar yang muncul: semuanya harus mudah digunakan tanpa ada langkah-langkah yang berlebihan untuk berurusan dengan sistem.

Peranti dan perkhidmatan tidak dilekatkan di meja kicker dan dapat digunakan untuk "sumber biasa" (seperti meja ping-pong, konsol, dll …) yang memerlukan semacam status penyiaran dan penyelesaian tempahan.

Oleh itu, mari kita mulakan …

Langkah 1: Bukti Konsep dan Prototaip

Bukti Konsep dan Prototaip
Bukti Konsep dan Prototaip
Bukti Konsep dan Prototaip
Bukti Konsep dan Prototaip
Bukti Konsep dan Prototaip
Bukti Konsep dan Prototaip

Raughly idea itu adalah untuk membina sebuah peranti yang akan diletakkan di sebelah meja kicker mengikuti keperluan ini:

  • beberapa petunjuk mengenai status jadual semasa - jika Anda berdiri di sebelahnya, anda seharusnya dapat mengetahui bahawa ia adalah percuma atau disediakan dan seseorang akan bermain dalam masa 3 minit. Lampu isyarat sesuai dengan idea dengan sempurna:

    • lampu hijau - percuma untuk bermain,
    • cahaya kuning - terpelihara,
    • lampu merah - diduduki.
  • butang Anda boleh mengklik sebelum dan selepas permainan sehingga orang lain mendapat maklumat mengenai status jadual semasa. Daripada 1 butang togol, saya memutuskan untuk menggunakan 2 butang yang dipisahkan:

    • butang merah - memenuhi meja, memulakan permainan (selepas membuat tempahan atau ad hoc).
    • butang hijau - jadual pelepasan.
  • beberapa paparan dengan maklumat yang lebih terperinci mengenai "apa yang sedang berlaku" - tamat waktu tempahan, status jadual berulang, waktu tamat waktu bermain dll …

Dengan tempahan, maksud saya hanya tempahan untuk 3 minit seterusnya. Sistem tidak dirancang supaya pengguna dapat menempah jadual pada waktu yang tepat (mis. 02:00 PM). Ia tidak berfungsi seperti tempahan, mis. di restoran tetapi hanya untuk beberapa minit sahaja.

Kerana kekurangan sambungan LAN, satu-satunya pilihan adalah menggunakan WLAN - ia tetap merupakan pilihan terbaik. Otak sistem mesti menggunakan Slack API untuk menghantar dan menerima arahan dari saluran Slack. Mula-mula saya cuba menggunakan NodeMCU. Saya dapat mendapatkan dan menerima mesej ke dan dari Slack tetapi kerana penggunaan HTTPS dan juga saiz "mesej selamat datang" Slack (~ 300kB), NodeMCU terputus sambungan dan / atau mendapat beberapa pengecualian pelik yang saya tidak dapat menyelesaikan penggalian melalui Internet.

Oleh itu, saya memutuskan untuk menggunakan sesuatu yang lebih hebat: Raspberry Pi 3 (Zero W dengan WiFi belum dilancarkan pada masa itu). Dengan memiliki RPi, saya dapat menukar bahasa pelaksanaan dari C ke Java kerana lebih mudah bagi saya - jadi ini adalah kelebihan. Hari ini Anda boleh menggunakan sesuatu yang lebih hebat daripada NodeMCU dan kurang berkuasa daripada RPi. Raspberry Zero mungkin?

Setelah membina prototaip pertama di papan roti dengan pendawaian gila, banyak lakaran dan prototaip, sistem kelihatan seperti dapat berfungsi.

Memiliki semua idea ini dan menggunakan PoC, saya mula merancang konfigurasi penempatan item di atas yang berbeza pada panel depan sehingga mereka akan menjadi yang paling bermaklumat dan senang digunakan. Anda boleh menyemak beberapa cadangan lain, mungkin ada yang lebih sesuai dengan Anda. Yang terakhir adalah yang dipilih oleh saya.

Langkah 2: Bahan dan Alat

Bahan yang saya gunakan:

  • Kotak
  • Raspberry Pi, kad microSD, bekalan kuasa USB mikro
  • Butang arked hijau dan merah
  • Skrin LCD 16x2
  • LED - Saya menggunakan RGB tetapi Anda boleh menggunakan warna yang sesuai
  • Kabel pelompat papan roti Lelaki hingga Perempuan dan Perempuan ke Perempuan
  • Antara muka USB mikro
  • Papan roti mini hanya untuk menyambungkan beberapa wayar
  • Kabel USB mikro pendek berfungsi sebagai pelompat di dalam kotak untuk menghidupkan RPi

Alat yang saya gunakan:

  • Pisau tajam (mis. Pisau utiliti untuk memotong permaidani)
  • Alat putar
  • Pistol gam panas
  • Stesen pematerian
  • Tang, tang pepenjuru / pemotong sisi
  • Pemutar skru
  • Fail
  • Saya

Alat yang mungkin anda perlukan:

Semua perkara di atas tetapi bukannya "Saya" seharusnya: "Anda":)

Langkah 3: Panel Depan - Skrin LCD

Panel Depan - Skrin LCD
Panel Depan - Skrin LCD
Panel Depan - Skrin LCD
Panel Depan - Skrin LCD

Lubang untuk skrin LCD adalah mudah. Hanya segi empat tepat yang sesuai dengan skrin LCD saya. Setelah mencuba memotongnya dengan pisau tajam, saya menyedari plastik kotak itu agak keras. Oleh itu, saya menggunakan alat penggerudian untuk memotong tingkap dan menggilap tepi.

Langkah 4: Panel Depan - LED Status

Panel Depan - LED Status
Panel Depan - LED Status
Panel Depan - LED Status
Panel Depan - LED Status

Lubang LED juga mudah. Saya hanya menggunakan gerudi besar untuk kayu dan kemudian saya menggilap tepi dengan alat penggerudian. LED besar dipasang dengan ketat. Saya belum menyekat perintang ke LED - saya meninggalkannya untuk proses pemasangan.

Langkah 5: Panel Depan - Butang

Panel Depan - Butang
Panel Depan - Butang
Panel Depan - Butang
Panel Depan - Butang
Panel Depan - Butang
Panel Depan - Butang
Panel Depan - Butang
Panel Depan - Butang

Masalah terbesar dengan 2 butang besar ini adalah meletakkannya dengan jarak yang sama. Saya memotong lubang hanya menggunakan alat penggerudian saya kerana saya dapat meningkatkan diameter langkah demi langkah sehingga butang sesuai dengan ketat.

Langkah 6: Penyambung Kuasa

Penyambung Kuasa
Penyambung Kuasa

Satu lubang kecil untuk kuasa mikro USB adalah tugas yang sangat sukar dilakukan. Saya mahu lubang itu sepadan mungkin, jadi saya menghabiskan banyak masa di sini untuk menggilap. Tetapi saya berpuas hati dengan keputusan akhir.

Kemudian saya memotong kabel mini USB pendek yang diletakkan di dalam kotak. Di satu sisi terpasang ke RPi, dan di sisi lain, semua kabel disolder ke antara muka USB mikro sesuai dengan pinout USB.

Kemudian saya melekatkan PCB kecil secara langsung ke kotak (ia dapat dilihat pada foto pada langkah pemasangan).

Langkah 7: Menggabungkan Semuanya

Menggabungkan Semuanya
Menggabungkan Semuanya
Menggabungkan Semuanya
Menggabungkan Semuanya
Menggabungkan Semuanya
Menggabungkan Semuanya

Mula-mula saya memasangkan perintang yang sesuai ke LED mengikut warna (voltan) mereka untuk voltan 3.3V. Saya menggunakan 100Ω untuk merah, dua perintang 82 dan 100 untuk kuning (nod hijau dan merah), dan 100Ω untuk hijau. Anda boleh menggunakan salah satu perintang dalam talian untuk kalkulator LED. Tetapi sila buat kajian sendiri mengikut kecerahan dan nada warna yang tepat yang ingin anda capai.

Kaki LED kuning disolder bersama sehingga LED itu sendiri dapat dikendalikan hanya dengan satu pin pada RPi.

Menurut gambarajah pinout ini:

Nod LED disambungkan:

  • LED Hijau - GPIO1 dengan harga Rpi
  • LED kuning (kedua kaki) ke GPIO2 pada RPi
  • LED merah ke GPIO0 pada RPi

Saya menyambungkan LCD menggunakan pin I2C pada pin RPi

  • LCD SDA ke GPIO8 pada RPi
  • LCD SCL ke GPIO9 pada RPi
  • LCD PWR hingga 5V pada RPi
  • LCD GND ke GND pada RPi

LCD dilekatkan panas ke kotak sebagai perlindungan tambahan.

Saya menyambungkan 3.3V dan GND ke papan roti kecil sehingga saya dapat menggunakannya untuk butang.

Butang hijau disambungkan ke 3.3V melalui papan roti mini dan ke GPIO5 pada RPi.

Butang merah disambungkan ke 3.3V melalui papan roti mini dan ke GPIO4 pada RPi.

Oleh itu, setiap kali Anda menekan butang, terdapat keadaan tinggi pada pin RPi.

Bradboard mini berfungsi dengan baik jadi saya melangkau pematerian semua wayar ke dalam PCB. Sebaliknya saya hanya menutup papan roti mini dengan gam panas supaya kabel tidak jatuh.

Saya juga melekatkan penutup RPi ke kotak supaya tidak bergoyang-goyang di dalam.

Saya mengacaukan panel depan dengan semua barang di dalamnya.

Kemudian saya mencetak, memotong dan melekatkan label ringkas di sebelah lampu isyarat dan butang.

Langkah 8: Konfigurasi Slack

Konfigurasi Slack
Konfigurasi Slack
Konfigurasi Slack
Konfigurasi Slack

Buat pasukan Anda di Slack.com atau gunakan pasukan yang Anda miliki dan Anda sekurang-kurangnya mempunyai hak pentadbir.

Di Slack, buat saluran untuk integrasi Slack perkhidmatan (atau lompat membuat saluran jika anda ingin menggunakan saluran yang sudah anda miliki).

Tambahkan integrasi Webhooks yang Tidak Bersesuaian ke pasukan anda. Pilih saluran dan salin URL webhook.

Tambahkan integrasi Bots ke pasukan anda. Pilih beberapa nama untuk bot Anda dan salin token API bot.

Halaman integrasi tersuai anda akan kelihatan seperti pada gambar.

Anda harus menjemput bot sebagai ahli saluran Anda. Anda boleh melakukannya semasa membuat saluran.

Sekiranya anda ingin menyesuaikan perkhidmatan di kemudian hari, sila periksa Slack API.

Langkah 9: Pelaksanaan Perisian

Saya menggunakan Raspbian sebagai sistem operasi untuk RPi saya dengan mengikuti tutorial ini. Maafkan saya, saya akan berhenti menerangkannya kerana sudah didokumentasikan di banyak tempat dan prosesnya mudah. Saya harap Anda cukup mahir dan berpengalaman untuk mengatur RPi sendiri. Jangan lupa untuk mengkonfigurasi akses WiFi pada Raspberry Pi anda;)

Seperti disebutkan di bagian prototaip, saya menggunakan Java untuk menerapkan otak seluruh sistem. Kodnya terdapat di GitHub -

Perpustakaan Java yang saya gunakan:

  • pi4j - untuk menggunakan Raspberry Pi dari Java
  • Springboot sebagai aplikasi platform
  • allbegray / slack-api sebagai integrasi Slack

Anda perlu mengedit fail konfigurasi di src / resources / config.properties. Terdapat 3 entri yang harus anda konfigurasikan untuk menggunakan Slack API:

  • channelName - nama saluran Anda ingin menghantar perubahan status dan menerima arahan.
  • slackBotToken - token bot yang dikonfigurasi dalam integrasi pasukan Slack Anda yang akan digunakan untuk menghantar mesej ke saluran yang disebutkan di atas. Harap maklum Anda harus menambah Slack Bot sebagai ahli saluran.
  • webhookUrl - URL yang anda dapat dari integrasi khas Slack Team.

Project Mavenized jadi untuk membuatnya hanya ketik (Anda memerlukan sekurang-kurangnya Java 8 dan Maven dipasang):

pakej bersih mvn

Dan dalam direktori sasaran Anda boleh mendapatkan fail Springbooted JAR. Untuk memulakan perkhidmatan:

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

Saya menetapkan baris ini ke skrip.sh dan menambahkannya sebagai autostart. Oleh itu, setiap kali kuasa dihidupkan, perkhidmatan akan dibuat secara automatik.

Satu penjelasan khas diperlukan untuk LCD.

Saya mencuba pelbagai pendekatan / perpustakaan untuk mengawal LCD melalui I2C dari RPi tetapi saya gagal. Untuk sebilangan LCD tidak berfungsi dengan baik, bagi sebahagiannya menunjukkan beberapa sampah.

Tetapi satu perkara berfungsi sangat baik di luar kotak. Ini adalah alat baris arahan utiliti yang saya dapati yang boleh anda gunakan untuk mengawal LCD. Oleh itu, saya memutuskan untuk menggunakan alat ini terus dari Java. Ia berfungsi seperti ini sehingga proses Linux biasa (lcdi2c) dipanggil (dengan parameter siap) setiap kali saya mahu memaparkan sesuatu di skrin LCD.

Anda perlu memuat turun alat dan meletakkannya di sebelah perkhidmatan JAR

Menggunakan alat ini adalah sejenis kaedah meretas dan bodoh Tetapi saya mengikuti peraturan kejuruteraan pertama:

Sekiranya ia bodoh, tetapi ia berfungsi … itu tidak bodoh

Langkah 10: Arahan Penggunaan

Arahan Penggunaan
Arahan Penggunaan

Anda boleh memeriksa status terkini kicker table pada saluran Slack yang dibuat dengan mengetik perintah "status" (atau sebentar lagi "st") atau secara langsung memeriksa lampu isyarat pada peranti.

Sekiranya anda hanya mahu bermain - tekan butang merah. Mesej akan dihantar ke saluran Slack dengan maklumat bahawa meja kicker ditempati. Apabila anda selesai bermain - tekan butang hijau. Mesej akan dihantar ke saluran Slack dengan maklumat bahawa meja kicker dimainkan secara percuma.

Lampu isyarat juga akan berubah dan skrin LCD akan menunjukkan beberapa maklumat terperinci.

Sekiranya anda lupa melepaskan meja setelah anda selesai bermain, ada masa tamat ditetapkan hingga 20 minit. Sekiranya anda masih bermain dan memerlukan lebih banyak masa, tekan butang merah sekali lagi dan perlawanan akan dilanjutkan selama 5 minit (hanya berlaku apabila masih ada kurang dari 5 minit sebelum waktu tamat). Waktu tamat bermain akan ditunjukkan pada skrin LCD.

Untuk menempah meja kicker, tulis mesej "reserve" (atau hanya: "res") ke saluran Slack.

Lampu isyarat Kuning akan menyala memberitahu orang lain di dekat meja kicker bahawa ia telah disediakan dan tidak lama lagi seseorang akan datang bermain.

Waktu tamat tempahan ditetapkan pada 3 minit. Selepas itu, meja kicker menukar keadaannya menjadi bebas untuk dimainkan.

Sekiranya anda memerlukan, anda boleh membatalkan tempahan dengan menulis "batal" di saluran Slack.

Sistem juga mempunyai beberapa ciri kecil lain seperti:

  • Selepas membuat tempahan, butang dibekukan selama 5 saat. Ini untuk mengelakkan situasi, yang pada waktu yang sama seseorang menempah dan satu milisaat kemudian seseorang menekan butang merah sambil berfikir bahawa Dia / Dia adalah orang yang menduduki meja tetapi tanpa pengetahuan bahawa seseorang menempah meja hanya satu mil mil kedua sebelumnya.
  • Menekan sebarang butang membekukan kedua-duanya selama setengah saat. Ini adalah untuk mengelakkan klik butang gila sehingga saluran Slack tidak akan disebarkan sebanyak itu.
  • Slack versi percuma membolehkan menyimpan 10000 mesej oleh seluruh pasukan. Untuk menyimpan beberapa mesej, perkhidmatan hapus mesej lama yang berkaitan dengan sistem tempahan / status) dan simpan hanya 6 yang terakhir. Mengapa 6? Kerana selalunya terdapat 2 senario status: "Reserved-Occupied-Free" dan "Occupied-Free". Oleh itu, sistem ini dapat menyimpan sekurang-kurangnya 2 sesi bebas pekerjaan penuh. Untuk membersihkan semua pesanan sistem, ketik perintah "clean" (atau "clear").

Langkah 11: Melepaskan

Melepaskan
Melepaskan
Melepaskan
Melepaskan

Hingga kini (saat menerbitkan arahan ini), sistem ini berjalan selama 2.5+ bulan dan digunakan oleh lebih dari 30 orang. Kerana kemas kini status kicker table, kami selalu tahu kapan ia percuma atau sibuk sehingga kami tidak melepaskan masa untuk pergi dan balik lagi. Sambungan dan perkhidmatannya sangat stabil sehingga kami dapat bergantung padanya.

Setakat ini, begitu baik …

Langkah 12: Soalan Lazim

Mengapa tamat waktu tempahan ditetapkan pada 3 minit?

3 minit adalah masa tempahan maksimum, pakai mengikut keinginan anda dalam kod. Umumnya jarang berlaku, 3 minit penuh akan berlalu dan tempahan akan tamat. Dalam kebanyakan kes, seseorang akan datang akhirnya dan menduduki meja.

Mengapa tamat waktu bermain ditetapkan pada 20 minit?

Bergantung pada pemain, masa bermain rata-rata adalah ~ 10 minit. Sekiranya anda perlu bermain lebih lama, tekan butang merah sekali lagi apabila kurang dari 5 minit dan waktu tamat akan dilanjutkan kembali ke 5 minit. Waktu tunggu ini disiapkan sekiranya seseorang lupa melepaskan jadual.

Mengapa tidak ada pad PIN pada peranti untuk mengesahkan tempahan; tiada log masuk dan kata laluan?

Idea utama adalah menjaga-sederhana-bodoh. Jika tidak, jika membuat tempahan, memulakan dan menyelesaikan permainan memerlukan usaha yang terlalu banyak, maka tidak ada yang mahu menggunakannya.

Mengapa peranti ini kelihatan begitu industri?

Kerana saya tidak mempunyai pemotong laser, CNC, pencetak 3D, pembuat label berwarna mewah dan lain-lain. Anda lebih senang memperbaikinya dan menjadikannya lebih cantik.

Mengapa tidak hanya melaksanakan beberapa aplikasi dan menempelkan tablet murah ke dinding dengan fungsi yang sama?

Aplikasi, aplikasi di mana sahaja. Orang suka berinteraksi secara fizikal dengan perkara dan bukan hanya mengetuk skrin rata.

Disyorkan: