Daftar Isi:

Status Kicker Sederhana dan Sistem Reservasi Dengan Integrasi Slack: 12 Langkah (dengan Gambar)
Status Kicker Sederhana dan Sistem Reservasi Dengan Integrasi Slack: 12 Langkah (dengan Gambar)

Video: Status Kicker Sederhana dan Sistem Reservasi Dengan Integrasi Slack: 12 Langkah (dengan Gambar)

Video: Status Kicker Sederhana dan Sistem Reservasi Dengan Integrasi Slack: 12 Langkah (dengan Gambar)
Video: Aplikasi Pemesanan Kamar Hotel Sederhana Berbasis Web 2024, Juli
Anonim
Status Kicker Sederhana dan Sistem Reservasi Dengan Integrasi Slack
Status Kicker Sederhana dan Sistem Reservasi Dengan Integrasi Slack

Di perusahaan tempat saya bekerja ada kicker table. Perusahaan menempati banyak lantai dan untuk beberapa karyawan dibutuhkan waktu hingga 3 menit untuk sampai ke meja dan…menyadari bahwa meja sudah ditempati.

Oleh karena itu muncul ide untuk membangun semacam sistem penyiaran dan reservasi status sederhana yang beroperasi secara real time.

Perusahaan menggunakan alat komunikasi Slack dimana setiap karyawan memiliki akun. Kami bahkan memiliki saluran #kicker hanya untuk diskusi tentang…kicker. Saluran dapat digunakan sebagai semacam "titik masuk" untuk reservasi dan untuk diberitahu tentang status tabel saat ini.

Seperti biasa, ada banyak konsep bagaimana menangani sistem seperti itu. Tetapi secara umum, satu aturan dasar muncul di semuanya: itu harus mudah digunakan tanpa langkah-langkah berlebihan yang harus dilakukan ketika berhadapan dengan sistem.

Perangkat dan layanan tidak melekat pada tabel kicker dan dapat digunakan untuk "sumber daya umum" (seperti meja ping-pong, konsol, dll…) yang memerlukan semacam status penyiaran dan solusi reservasi.

Jadi, mari kita mulai…

Langkah 1: Bukti Konsep dan Pembuatan Prototipe

Bukti Konsep dan Prototyping
Bukti Konsep dan Prototyping
Bukti Konsep dan Prototyping
Bukti Konsep dan Prototyping
Bukti Konsep dan Prototyping
Bukti Konsep dan Prototyping

Kira-kira idenya adalah untuk membangun perangkat yang akan diletakkan di sebelah meja kicker mengikuti persyaratan ini:

  • beberapa indikator tentang status meja saat ini - jika Anda berdiri di sebelahnya, Anda harus dapat mengetahui bahwa itu gratis atau dipesan dan seseorang akan datang untuk bermain dalam 3 menit. Lampu lalu lintas sangat cocok dengan ide tersebut:

    • lampu hijau - gratis untuk dimainkan,
    • lampu kuning - dicadangkan,
    • lampu merah - ditempati.
  • button(s) Anda dapat mengklik sebelum dan sesudah permainan sehingga semua orang mendapatkan informasi tentang status tabel saat ini. Alih-alih 1 tombol sakelar, saya memutuskan untuk menggunakan 2 tombol terpisah:

    • tombol merah - menempati meja, memulai permainan (setelah reservasi atau ad hoc).
    • tombol hijau - meja rilis.
  • beberapa tampilan dengan informasi lebih rinci tentang "apa yang terjadi" - batas waktu reservasi, status tabel berulang, batas waktu bermain, dll…

Dengan reservasi, maksud saya hanya reservasi untuk 3 menit berikutnya. Sistem tidak dirancang agar pengguna dapat memesan meja pada waktu yang tepat (misalnya 14:00). Ini tidak berfungsi seperti reservasi mis. di restoran tetapi hanya untuk menit mendatang.

Karena kurangnya koneksi LAN, satu-satunya pilihan adalah menggunakan WLAN - ini adalah pilihan terbaik. Otak sistem harus menggunakan Slack API untuk mengirim dan menerima perintah dari saluran Slack. Pertama saya mencoba menggunakan NodeMCU. Saya bisa mendapatkan dan menerima pesan ke dan dari Slack tetapi karena penggunaan HTTPS dan juga ukuran "pesan selamat datang" Slack (~ 300kB), NodeMCU kehilangan koneksi dan/atau mendapat pengecualian aneh yang tidak dapat saya selesaikan saat menggali melalui Internet.

Jadi saya memutuskan untuk menggunakan sesuatu yang lebih kuat: Raspberry Pi 3 (Zero W dengan WiFi belum dirilis pada waktu itu). Dengan memiliki RPi, saya dapat mengganti bahasa implementasi dari C ke Java karena lebih nyaman bagi saya - jadi ini merupakan keuntungan. Hari ini Anda dapat menggunakan sesuatu yang lebih kuat dari NodeMCU dan kurang kuat dari RPi. Raspberry Zero mungkin?

Setelah membangun prototipe pertama di papan tempat memotong roti dengan beberapa kabel gila, banyak sketsa dan prototipe, sistem tampak seperti dapat bekerja.

Memiliki semua ide ini dan PoC yang berfungsi, saya mulai merencanakan konfigurasi penempatan yang berbeda dari item-item di atas pada panel depan sehingga mereka akan menjadi yang paling informatif dan nyaman untuk digunakan. Anda dapat memeriksa beberapa proposal lain, mungkin beberapa lebih cocok untuk Anda. Yang terakhir adalah yang saya pilih.

Langkah 2: Bahan dan Alat

Bahan yang saya gunakan:

  • Kotak
  • Raspberry Pi, kartu microSD, catu daya micro USB
  • Tombol arcade hijau dan merah
  • Layar LCD 16x2
  • LED - Saya menggunakan RGB tetapi Anda dapat menggunakan warna yang tepat
  • Kabel jumper papan tempat memotong roti Pria ke Wanita dan Wanita ke Wanita
  • Antarmuka USB mikro
  • Papan tempat memotong roti mini hanya untuk menghubungkan beberapa kabel
  • Kabel micro USB pendek berfungsi sebagai jumper di dalam kotak untuk memberi daya pada RPi

Alat yang saya gunakan:

  • Pisau tajam (misalnya pisau utilitas untuk memotong karpet)
  • Alat putar
  • Pistol lem panas
  • Stasiun solder
  • Tang, tang diagonal / pemotong samping
  • Obeng
  • Mengajukan
  • Aku

Alat Anda mungkin perlu:

Semua hal di atas tetapi alih-alih "Saya" seharusnya: "Kamu":)

Langkah 3: Panel Depan - Layar LCD

Panel Depan - Layar LCD
Panel Depan - Layar LCD
Panel Depan - Layar LCD
Panel Depan - Layar LCD

Lubang untuk layar LCD pun langsung. Hanya persegi panjang yang pas dengan layar LCD saya. Setelah mencoba memotongnya dengan pisau tajam, saya menyadari bahwa plastik kotak itu cukup keras. Jadi saya menggunakan alat bor untuk memotong jendela dan memoles tepinya.

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 mengambil bor besar untuk kayu dan kemudian saya memoles ujungnya dengan alat bor. LED besar dipasang sangat kencang. Saya belum menyolder resistor apa pun ke LED - saya meninggalkannya untuk proses perakitan.

Langkah 5: Panel Depan - Tombol

Panel Depan - Tombol
Panel Depan - Tombol
Panel Depan - Tombol
Panel Depan - Tombol
Panel Depan - Tombol
Panel Depan - Tombol
Panel Depan - Tombol
Panel Depan - Tombol

Masalah terbesar dengan 2 tombol besar ini adalah menempatkannya secara merata dengan jarak yang tepat. Saya memotong lubang hanya menggunakan alat bor saya karena saya bisa meningkatkan diameter langkah demi langkah sehingga kancingnya pas.

Langkah 6: Konektor Daya

Konektor Daya
Konektor Daya

Sebuah lubang kecil untuk daya USB mikro adalah pekerjaan yang sangat rumit untuk dilakukan. Saya ingin lubangnya secocok mungkin, jadi saya menghabiskan banyak waktu di sini untuk memoles. Tapi saya puas dengan hasil akhirnya.

Kemudian saya memotong kabel mini USB pendek yang ditempatkan di dalam kotak. Satu sisi dicolokkan ke RPi, dan di sisi lain, semua kabel disolder ke antarmuka micro USB sesuai dengan pinout USB.

Kemudian saya menempelkan PCB kecil langsung ke kotak (dapat dilihat pada foto di langkah perakitan).

Langkah 7: Menyatukan Semuanya

Menyatukan Semuanya
Menyatukan Semuanya
Menyatukan Semuanya
Menyatukan Semuanya
Menyatukan Semuanya
Menyatukan Semuanya

Pertama saya menyolder resistor yang sesuai ke LED sesuai dengan warnanya (tegangan) sebesar 3.3V volt. Saya menggunakan 100Ω untuk merah, dua resistor 82 dan 100 untuk kuning (simpul hijau dan merah), dan 100Ω untuk hijau. Anda dapat menggunakan salah satu resistor online untuk kalkulator LED. Tapi tolong lakukan riset sendiri sesuai dengan kecerahan dan nada warna yang tepat yang ingin Anda capai.

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

Menurut diagram pinout ini:

Node LED terhubung:

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

Saya menghubungkan LCD menggunakan pin I2C pada pin RPi

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

LCD dilem panas ke kotak sebagai perlindungan tambahan.

Saya menghubungkan 3.3V dan GND ke papan tempat memotong roti kecil sehingga saya dapat menggunakannya untuk tombol.

Tombol hijau terhubung ke 3.3V melalui papan tempat memotong roti mini dan ke GPIO5 di RPi.

Tombol merah terhubung ke 3.3V melalui papan tempat memotong roti mini dan ke GPIO4 di RPi.

Jadi setiap kali Anda menekan tombol, ada status tinggi pada pin RPi.

Bradboard mini berfungsi dengan baik jadi saya melewatkan menyolder semua kabel ke PCB. Sebaliknya saya hanya menutupi papan tempat memotong roti mini dengan lem panas agar kabel tidak rontok.

Saya juga menempelkan penutup RPi panas ke kotak sehingga tidak akan goyah di dalam.

Saya mengacaukan panel depan dengan semua barang di dalamnya.

Kemudian saya mencetak, memotong, dan menempelkan label sederhana di sebelah lampu lalu lintas dan tombol.

Langkah 8: Konfigurasi Slack

Konfigurasi Slack
Konfigurasi Slack
Konfigurasi Slack
Konfigurasi Slack

Buat tim Anda di Slack.com atau gunakan yang Anda miliki dan Anda memiliki setidaknya hak admin.

Di Slack, buat saluran untuk integrasi Slack layanan (atau lewati pembuatan saluran jika Anda ingin menggunakan saluran yang sudah Anda miliki).

Tambahkan integrasi Webhook Masuk ke tim Anda. Pilih saluran dan salin URL webhook.

Tambahkan integrasi Bot ke tim Anda. Pilih beberapa nama untuk bot Anda dan salin token API bot.

Halaman pengelolaan integrasi kustom Anda akan terlihat seperti pada gambar.

Anda harus mengundang bot sebagai anggota saluran Anda. Anda sudah bisa melakukannya saat membuat saluran.

Jika Anda ingin menyesuaikan layanan nanti, silakan periksa Slack API.

Langkah 9: Implementasi Perangkat Lunak

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

Seperti disebutkan di bagian prototyping, saya menggunakan Java untuk mengimplementasikan otak dari keseluruhan sistem. Kode tersedia di GitHub -

Pustaka Java yang saya gunakan:

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

Anda perlu mengedit file konfigurasi di src/resources/config.properties. Ada 3 entri yang harus Anda konfigurasi untuk menggunakan Slack API:

  • channelName - nama saluran Anda ingin memposting perubahan status dan menerima perintah.
  • slackBotToken - token bot yang dikonfigurasi dalam integrasi tim Slack Anda yang akan digunakan untuk mengirim pesan ke saluran yang disebutkan di atas. Harap dicatat Anda harus menambahkan Slack Bot sebagai anggota saluran.
  • webhookUrl - URL yang bisa Anda dapatkan dari integrasi khusus Slack Team.

Proyek Mavenized jadi untuk membangunnya cukup ketik (Anda memerlukan setidaknya Java 8 dan Maven diinstal):

paket bersih mvn

Dan di target yang lelah Anda dapat menemukan file JAR Springbooted. Untuk memulai layanan:

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

Saya mengatur baris ini ke skrip.sh dan menambahkannya sebagai autostart. Jadi, setiap kali listrik menyala, layanan melakukan booting secara otomatis.

Satu penjelasan khusus diperlukan untuk LCD.

Saya mencoba berbagai pendekatan/perpustakaan untuk mengontrol LCD melalui I2C dari RPi tetapi saya gagal. Untuk beberapa LCD tidak berfungsi dengan baik, untuk beberapa itu menunjukkan beberapa sampah.

Tapi satu hal bekerja sangat baik di luar kotak. Ini adalah alat baris perintah utilitas yang saya temukan dapat Anda gunakan untuk mengontrol LCD. Jadi saya memutuskan untuk menggunakan alat ini langsung dari Java. Ini bekerja seperti ini bahwa proses Linux normal (lcdi2c) dipanggil (dengan parameter yang disiapkan) setiap kali saya ingin menampilkan sesuatu di layar LCD.

Anda perlu mengunduh alat dan meletakkannya di sebelah layanan JAR

Menggunakan alat ini adalah semacam solusi peretasan dan bodoh. Tapi saya mengikuti aturan teknik pertama:

Jika itu bodoh, tetapi berhasil … itu tidak bodoh

Langkah 10: Instruksi Penggunaan

Instruksi penggunaan
Instruksi penggunaan

Anda dapat memeriksa status kicker table saat ini pada saluran Slack yang dibuat dengan mengetik perintah "status" (atau singkatnya "st") atau langsung memeriksa lampu lalu lintas di perangkat.

Jika Anda hanya ingin bermain - tekan tombol merah. Pesan akan dikirim ke saluran Slack dengan info bahwa tabel kicker ditempati. Setelah Anda selesai bermain - tekan tombol hijau. Pesan akan dikirim ke saluran Slack dengan info bahwa tabel kicker gratis untuk dimainkan.

Lampu lalu lintas juga akan berubah dan layar LCD akan menampilkan beberapa informasi rinci.

Untuk berjaga-jaga jika Anda lupa melepaskan meja setelah Anda selesai bermain, ada batas waktu yang ditetapkan hingga 20 menit. Jika Anda masih bermain dan membutuhkan lebih banyak waktu, tekan tombol merah lagi dan pertandingan akan diperpanjang 5 menit (hanya berlaku jika waktu tersisa kurang dari 5 menit sebelum waktu habis). Batas waktu pemutaran akan ditampilkan di layar LCD.

Untuk memesan meja kicker, tulis pesan reserve” (atau cukup: res”) ke saluran Slack.

Lampu lalu lintas Kuning akan menyala memberi tahu orang lain di dekat meja kicker bahwa itu sudah dipesan dan segera seseorang akan datang untuk bermain.

Batas waktu reservasi diatur ke 3 menit. Setelah itu, kicker table mengubah statusnya menjadi free to play.

Jika perlu, Anda dapat membatalkan reservasi dengan menulis "batal" di saluran Slack.

Sistem juga memiliki beberapa fitur kecil lainnya seperti:

  • Setelah reservasi, tombol dibekukan selama 5 detik. Ini untuk mencegah situasi, bahwa pada saat yang sama seseorang memesan dan satu milidetik kemudian seseorang menekan tombol merah berpikir bahwa Dia adalah orang yang menempati meja tetapi tanpa sepengetahuan bahwa seseorang memesan meja hanya satu milidetik sebelumnya.
  • Menekan tombol apa saja akan membekukan keduanya selama setengah detik. Ini untuk mencegah clickers tombol gila sehingga saluran Slack tidak akan banyak di-spam.
  • Versi gratis Slack memungkinkan untuk menyimpan 10.000 pesan oleh seluruh tim. Untuk mempertahankan beberapa pesan, layanan menghapus pesan lama yang terkait dengan sistem reservasi/status) dan hanya menyimpan 6 pesan terakhir. Mengapa 6? Karena paling sering ada 2 skenario status: "Reserved-Occupied-Free" dan "Occupied-Free". Jadi sistem dapat menyimpan setidaknya 2 sesi bebas penuh. Untuk membersihkan semua pesan sistem, ketik perintah "clean" (atau "clear").

Langkah 11: Melepaskan

Melepaskan
Melepaskan
Melepaskan
Melepaskan

Sampai sekarang (saat penerbitan instruksi ini), sistem berjalan selama 2,5+ bulan dan digunakan oleh lebih dari 30 orang. Karena pembaruan status tabel kicker, kami selalu tahu kapan itu kosong atau sibuk sehingga kami tidak kehilangan waktu untuk bolak-balik lagi. Koneksi dan layanannya sangat stabil sehingga kami dapat mengandalkannya.

Sejauh ini baik…

Langkah 12: FAQ

Mengapa batas waktu reservasi diatur ke 3 menit?

3 menit adalah waktu reservasi maksimal, gunakan sesuka Anda dalam kode. Umumnya akan jarang terjadi, 3 menit penuh akan berlalu dan reservasi akan habis. Dalam kebanyakan kasus, seseorang pada akhirnya akan datang dan menempati meja.

Mengapa batas waktu bermain diatur ke 20 menit?

Tergantung pada pemain, waktu bermain rata-rata adalah ~10 menit. Jika Anda perlu bermain lebih lama, tekan tombol merah lagi saat waktu tersisa kurang dari 5 menit dan batas waktu akan diperpanjang kembali menjadi 5 menit. Batas waktu ini diatur untuk berjaga-jaga jika seseorang lupa melepaskan tabel.

Mengapa tidak ada papan PIN pada perangkat untuk mengonfirmasi reservasi; tidak ada login dan kata sandi?

Ide utamanya adalah untuk tetap-sederhana-bodoh. Jika tidak, jika reservasi, memulai dan menyelesaikan permainan membutuhkan terlalu banyak usaha, maka tidak ada yang mau menggunakannya.

Mengapa perangkat ini terlihat sangat jelek untuk industri?

Karena saya tidak memiliki pemotong laser, CNC, printer 3D, pembuat label berwarna mewah, dll. Anda sangat senang untuk memperbaikinya dan membuatnya lebih indah.

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

Aplikasi, aplikasi di mana-mana. Orang-orang suka berinteraksi secara fisik dengan berbagai hal dan tidak hanya mengetuk layar datar.

Direkomendasikan: