Obsah:

Jednoduchý stav kopce a rezervační systém s integrací Slack: 12 kroků (s obrázky)
Jednoduchý stav kopce a rezervační systém s integrací Slack: 12 kroků (s obrázky)

Video: Jednoduchý stav kopce a rezervační systém s integrací Slack: 12 kroků (s obrázky)

Video: Jednoduchý stav kopce a rezervační systém s integrací Slack: 12 kroků (s obrázky)
Video: Co prozradil Franz von Holzhousen chief designer TESLA? | LIVE 2024, Listopad
Anonim
Jednoduchý systém Kicker Status a rezervační systém s integrací Slack
Jednoduchý systém Kicker Status a rezervační systém s integrací Slack

Ve firmě, kde pracuji, je kickerový stůl. Společnost zabírá mnoho pater a některým zaměstnancům trvá až 3 minuty, než se dostanou ke stolu a… aby si uvědomili, že stůl je již obsazen.

Proto vznikla myšlenka vybudovat jakýsi jednoduchý stavový vysílací a rezervační systém, který funguje v reálném čase.

Společnost používá komunikační nástroj Slack, kde má každý zaměstnanec účet. Máme dokonce kanál #kicker jen pro diskuse o … kickeru. Kanál by mohl být použit jako jakýsi „vstupní bod“pro rezervaci a pro informování o aktuálním stavu tabulky.

Jako obvykle existuje mnoho konceptů, jak se s takovým systémem vypořádat. Obecně se však ve všech objevilo jedno základní pravidlo: jeho použití musí být jednoduché, bez zbytečných kroků, které je třeba při práci se systémem provádět.

Zařízení a služba nejsou přilepeny ke stolu kickerů a lze je použít pro jakýkoli „společný zdroj“(jako je ping-pongový stůl, konzole atd.…), Který potřebuje nějaký druh řešení pro široké spektrum stavů a rezervací.

Začněme tedy…

Krok 1: Důkaz koncepce a prototypování

Důkaz koncepce a prototypování
Důkaz koncepce a prototypování
Důkaz koncepce a prototypování
Důkaz koncepce a prototypování
Důkaz koncepce a prototypování
Důkaz koncepce a prototypování

Raughly byla myšlenka postavit zařízení, které bude pokládáno vedle stolu pro kickery podle těchto požadavků:

  • některé indikátory aktuálního stavu stolu - pokud stojíte vedle něj, měli byste vědět, že je volný nebo rezervovaný a někdo přijde hrát za 3 minuty. Semafor se dokonale hodí k této myšlence:

    • zelené světlo - hraní zdarma,
    • žluté světlo - vyhrazeno,
    • červené světlo - obsazeno.
  • tlačítka Můžete kliknout před a po hře, aby byli všichni ostatní informováni o aktuálním stavu stolu. Místo 1 přepínacího tlačítka jsem se rozhodl použít 2 oddělená tlačítka:

    • červené tlačítko - obsaďte stůl, spusťte hru (po rezervaci nebo ad hoc).
    • zelené tlačítko - uvolňovací tabulka.
  • některé zobrazení s podrobnějšími informacemi o tom, „co se děje“- časový limit rezervace, opakovaný stav stolu, časový limit přehrávání atd …

Rezervací mám na mysli pouze rezervaci na další 3 minuty. Systém není navržen tak, aby si uživatel mohl rezervovat stůl v přesný čas (např. 14:00). Nefunguje to jako rezervace, např. v restauracích, ale jen na nadcházející minuty.

Z důvodu chybějícího připojení LAN je jedinou možností použít WLAN - je to každopádně nejlepší volba. Mozek systému musí používat Slack API k odesílání a přijímání příkazů z kanálu Slack. Nejprve jsem zkusil použít NodeMCU. Dokázal jsem přijímat a přijímat zprávy do a ze Slacku, ale kvůli využití HTTPS a také Slackově velikosti „uvítací zprávy“(~ 300 kB) NodeMCU ztrácel připojení a/nebo dostal nějakou podivnou výjimku, kterou jsem nemohl vyřešit kopáním přes internet.

Rozhodl jsem se tedy použít něco výkonnějšího: Raspberry Pi 3 (Zero W s WiFi v té době ještě nevyšlo). Tím, že mám RPi, jsem mohl přepnout implementační jazyk z C na Java, protože je to pro mě pohodlnější - takže to byla výhoda. Dnes můžete použít něco výkonnějšího než NodeMCU a méně výkonného než RPi. Třeba Raspberry Zero?

Poté, co systém postavil první prototyp na prkénku s nějakým šíleným zapojením, spoustou skicování a prototypování, systém vypadal, že může fungovat.

Když jsem měl všechny tyto nápady a fungující PoC, začal jsem plánovat různé konfigurace umístění výše uvedených položek na předním panelu, takže budou nejinformativnější a nejpohodlnější k použití. Můžete zkontrolovat některé z dalších návrhů, možná se vám některé budou hodit lépe. Poslední byl mnou vybraný.

Krok 2: Materiály a nástroje

Materiály, které jsem použil:

  • Krabice
  • Raspberry Pi, karta microSD, napájení micro USB
  • Zelená a červená arkádová tlačítka
  • 16x2 LCD displej
  • LED diody - použil jsem RGB, ale můžete použít správnou barvu
  • Propojovací kabely propojovacího kabelu mezi muži a ženami a mezi ženami a ženami
  • Rozhraní micro USB
  • Mini prkénko jen pro připojení některých vodičů
  • Krátký kabel micro USB, který funguje jako propojka uvnitř krabice pro napájení RPi

Nástroje, které jsem použil:

  • Ostrý nůž (např. Nůž na řezání koberců)
  • Rotační nástroj
  • Horká lepicí pistole
  • Pájecí stanice
  • Kleště, diagonální kleště/boční řezačky
  • Šroubovák
  • Soubor

Nástroje, které pravděpodobně budete potřebovat:

Všechno výše uvedené, ale místo „Já“by to mělo být: „Vy“:)

Krok 3: Přední panel - LCD obrazovka

Přední panel - LCD obrazovka
Přední panel - LCD obrazovka
Přední panel - LCD obrazovka
Přední panel - LCD obrazovka

Otvor pro LCD obrazovku byl přímočarý. Prostě obdélník, který se hodí k mé LCD obrazovce. Poté, co jsem to zkusil řezat ostrým nožem, jsem si uvědomil, že plast krabice je docela tvrdý. Takže jsem použil vrtací nástroj k řezání okna a leštění hran.

Krok 4: Přední panel - stavové kontrolky LED

Přední panel - stavové LED diody
Přední panel - stavové LED diody
Přední panel - stavové LED diody
Přední panel - stavové LED diody

LED otvory jsou také jednoduché. Jen jsem vzal velký vrták do dřeva a poté jsem leštil hrany vrtacím nástrojem. Velké LED diody byly dokonale těsné. K LEDkám jsem ještě nepájel žádné odpory - nechal jsem to na proces montáže.

Krok 5: Přední panel - tlačítka

Přední panel - tlačítka
Přední panel - tlačítka
Přední panel - tlačítka
Přední panel - tlačítka
Přední panel - tlačítka
Přední panel - tlačítka
Přední panel - tlačítka
Přední panel - tlačítka

Největším problémem těchto 2 velkých tlačítek bylo umístit je rovnoměrně se správným rozestupem. Otvory jsem vyřízl pouze pomocí svého vrtacího nástroje, protože jsem mohl krok za krokem zvětšovat průměr, aby knoflíky pevně seděly.

Krok 6: Napájecí konektor

Napájecí konektor
Napájecí konektor

Malý otvor pro napájení micro USB byl velmi delikátní úkol. Chtěl jsem, aby byla díra co nejvíce fit, a tak jsem zde strávil spoustu času leštěním. Ale s konečným výsledkem jsem byl spokojený.

Potom jsem přestřihl krátký mini USB kabel, který byl umístěn uvnitř krabice. Na jedné straně je zapojen do RPi a na druhé straně byly všechny kabely připájeny k rozhraní micro USB podle vývodů USB.

Poté jsem malou DPS zalepil za tepla přímo do krabice (je to vidět na fotografii v montážním kroku).

Krok 7: Dát vše dohromady

Dát všechno dohromady
Dát všechno dohromady
Dát všechno dohromady
Dát všechno dohromady
Dát všechno dohromady
Dát všechno dohromady

Nejprve jsem připájel příslušné odpory k LED diodám podle jejich barvy (napětí) na 3,3 V volt. Použil jsem 100Ω pro červenou, dva odpory 82 a 100 pro žlutou (zelený a červený uzel) a 100Ω pro zelenou. Můžete použít jeden z online odporů pro kalkulačku LED. Ale prosím proveďte nějaký průzkum sami podle jasu a přesného barevného tónu, kterého chcete dosáhnout.

Nohy žluté LED byly pájeny dohromady, takže samotnou LED lze ovládat pouze jedním kolíkem na RPi.

Podle tohoto diagramu pinoutu:

Byly připojeny uzly LED:

  • Zelená LED - GPIO1 na Rpi
  • Žlutá LED (obě nohy) na GPIO2 na RPi
  • Červená LED na GPIO0 na RPi

Připojil jsem LCD pomocí pinů I2C na piny RPi

  • LCD SDA na GPIO8 na RPi
  • LCD SCL na GPIO9 na RPi
  • LCD PWR až 5V na RPi
  • LCD GND na GND na RPi

LCD displej byl jako dodatečná ochrana nalepen na krabici za tepla.

Připojil jsem 3.3V a GND k malému prkénku, abych je mohl použít pro tlačítka.

Zelené tlačítko bylo připojeno k 3,3 V přes mini breadboard a ke GPIO5 na RPi.

Červené tlačítko bylo připojeno k 3,3 V přes mini prkénko a ke GPIO4 na RPi.

Kdykoli tedy stisknete tlačítko, na pinu RPi je vysoký stav.

Mini bradboard funguje dobře, takže jsem přeskočil pájení všech vodičů do PCB. Místo toho jsem jen pokryl mini prkénko horkým lepidlem, aby kabely nespadly.

Také jsem za tepla nalepil kryt RPi na krabici, aby se uvnitř neviklal.

Zašrouboval jsem přední panel se všemi věcmi uvnitř.

Poté jsem tiskl, stříhal a lepil jednoduché štítky vedle semaforů a tlačítek.

Krok 8: Slack Configuration

Slack konfigurace
Slack konfigurace
Slack konfigurace
Slack konfigurace

Vytvořte svůj tým na Slack.com nebo použijte ten, který máte a máte alespoň práva správce.

V Slack vytvořte kanál pro integraci Slack služby (nebo přeskočte vytvoření kanálu, pokud chcete použít ten, který již máte).

Přidejte do svého týmu integraci Incomming Webhooks. Vyberte kanál a zkopírujte adresu URL webhooku.

Přidejte do svého týmu integraci robotů. Vyberte nějaké jméno pro svého robota a zkopírujte token API robota.

Stránka správy vašich vlastních integrací by měla vypadat jako na obrázku.

Musíte pozvat robota jako člena svého kanálu. Můžete to udělat již při vytváření kanálu.

Pokud si budete chtít službu přizpůsobit později, zkontrolujte prosím Slack API.

Krok 9: Implementace softwaru

Podle tohoto tutoriálu jsem jako operační systém pro svůj RPi použil Raspbian. Prosím, promiňte, přeskočím vysvětlení, protože je již zdokumentováno na mnoha místech a proces je přímočarý. Doufám, že jste dostatečně zruční a zkušení, abyste si sami dokázali nastavit RPi. Nezapomeňte na svém Raspberry Pi nakonfigurovat přístup k WiFi;)

Jak bylo zmíněno v sekci prototypování, k implementaci mozku celého systému jsem použil Javu. Kód je k dispozici na GitHub -

Knihovny Java, které jsem použil:

  • pi4j - používat Raspberry Pi z Javy
  • Springboot jako aplikační platforma
  • allbegray/slack-api jako integrace Slack

Konfigurační soubor musíte upravit v souboru src/resources/config.properties. K použití rozhraní Slack API je třeba nakonfigurovat 3 položky:

  • channelName - název kanálu Chcete odeslat změny stavu a přijímat příkazy.
  • slackBotToken - token robota nakonfigurovaného v integraci vašeho týmu Slack, který bude použit k odesílání zpráv na výše uvedený kanál. Vezměte prosím na vědomí, že musíte přidat Slack Bot jako člena kanálu.
  • webhookUrl - adresa URL, kterou můžete získat z vlastních integrací Slack Team.

Project je Mavenized, takže jej postavíte tak, že napíšete (potřebujete alespoň nainstalovanou Javu 8 a Maven):

mvn čistý balíček

A v cílovém adresáři můžete najít soubor Springbooted JAR. Spuštění služby:

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

Tento řádek jsem nastavil na skript.sh a přidal jej jako automatické spuštění. Kdykoli je tedy napájení zapnuto, služba se spustí automaticky.

Na LCD je potřeba jedno speciální vysvětlení.

Zkoušel jsem různé přístupy/knihovny pro ovládání LCD přes I2C z RPi, ale prostě jsem selhal. U některých LCD displej nefungoval správně, u některých vykazoval určité nesmysly.

Ale jedna věc fungovala velmi hezky hned po vybalení z krabice. Je to nástroj příkazového řádku nástroje, který jsem našel Můžete použít k ovládání LCD. Rozhodl jsem se tedy použít tento nástroj přímo z Javy. Funguje to tak, že pokaždé, když chci něco zobrazit na obrazovce LCD, se nazývá (s připravenými parametry) normální linuxový proces (lcdi2c).

Nástroj si musíte stáhnout a umístit vedle služby JAR

Použití tohoto nástroje je druhem hloupého a hloupého řešení. Řídím se však prvním pravidlem inženýrství:

Pokud je to hloupé, ale funguje to … není to hloupé

Krok 10: Pokyny k použití

Návod k použití
Návod k použití

Aktuální stav tabulky kickerů na vytvořeném kanálu Slack můžete zkontrolovat zadáním příkazu „status“(nebo krátce „st“) nebo přímo zkontrolovat semafory na zařízení.

Pokud chcete jen hrát - stiskněte červené tlačítko. Zpráva bude odeslána na kanál Slack s informací, že je tabulka kicker obsazena. Po dokončení přehrávání - stiskněte zelené tlačítko. Zpráva bude odeslána na kanál Slack s informacemi, že kickerový stůl lze hrát zdarma.

Semafory se také změní a LCD obrazovka zobrazí některé podrobné informace.

Pro případ, že zapomenete uvolnit stůl po skončení hraní, je časový limit nastaven na 20 minut. Pokud stále hrajete a potřebujete více času, stiskněte znovu červené tlačítko a zápas se prodlouží o 5 minut (platí pouze v případě, že do vypršení časového limitu zbývá méně než 5 minut). Časový limit přehrávání se zobrazí na LCD obrazovce.

Chcete -li rezervovat stůl kicker, napište na kanál Slack zprávu „rezervovat“(nebo jen: „res“).

Žlutý semafor se rozsvítí a informuje ostatní poblíž stolu, že je rezervovaný a brzy si někdo přijde zahrát.

Časový limit rezervace je nastaven na 3 minuty. Poté kickerový stůl přepne svůj stav na volné hraní.

Pokud potřebujete, můžete rezervaci zrušit napsáním „zrušit“na kanálu Slack.

Systém má také některé další drobné funkce, jako například:

  • Po rezervaci se tlačítka na 5 sekund zmrazí. Je tomu tak proto, aby se předešlo situacím, kdy si někdo ve stejnou dobu vyhradí a o milisekundu později někdo stiskne červené tlačítko v domnění, že je to on, kdo okupuje stůl, ale bez vědomí, že si někdo stůl rezervoval jen o milisekundu dříve.
  • Stisknutím libovolného tlačítka oba na půl sekundy zmrazíte. Důvodem je zabránit šíleným klikáním na tlačítka, aby kanál Slack nebyl tolik spamován.
  • Bezplatná verze Slack umožňuje uložit 10 000 zpráv celého týmu. Chcete -li zachovat některé zprávy, služba odstraní staré zprávy související se systémem rezervace/stavu) a ponechá pouze posledních 6 z nich. Proč 6? Protože nejčastěji existují 2 scénáře stavu: „Reserved-Occupied-Free“a „Occupied-Free“. Systém tedy může uložit alespoň 2 plně obsazené volné relace. Chcete -li vyčistit všechny systémové zprávy, zadejte příkaz „clean“(nebo „clear“).

Krok 11: Uvolnění

Uvolnění
Uvolnění
Uvolnění
Uvolnění

Až dosud (okamžik zveřejnění tohoto pokynu) systém běží déle než 2,5 měsíce a používá jej více než 30 lidí. Díky aktualizaci stavu tabulky kickerů vždy víme, kdy je volná nebo obsazená, takže už neztrácíme čas tam a zpět. Připojení a služba jsou velmi stabilní, takže se na ni můžeme spolehnout.

Zatím je vše dobré…

Krok 12: Časté dotazy

Proč je časový limit rezervace nastaven na 3 minuty?

3 minuty jsou maximální doba rezervace, v kódu ji přijměte, jak se vám líbí. Obecně se málokdy stane, že uplynou celé 3 minuty a rezervaci vyprší časový limit. Ve většině případů někdo nakonec přijde a obsadí stůl.

Proč je časový limit hraní nastaven na 20 minut?

V závislosti na hráči je průměrná doba hraní ~ 10 minut. Pokud potřebujete hrát déle, stiskněte znovu červené tlačítko, když zbývá méně než 5 minut a časový limit se prodlouží zpět na 5 minut. Tento časový limit je nastaven jen pro případ, že někdo zapomene uvolnit stůl.

Proč na zařízení není žádná podložka PIN pro potvrzení rezervace; žádná přihlašovací jména a hesla?

Hlavní myšlenkou bylo udržet to jednoduché. V opačném případě, pokud rezervace, spuštění a dokončení hry vyžadují příliš mnoho úsilí, pak ji nikdo nebude chtít použít.

Proč to zařízení vypadá tak průmyslově ošklivě?

Protože jsem neměl laserovou řezačku, CNC, 3D tiskárnu, efektní výrobce barevných štítků atd. Jste více než potěšeni, že ji můžete vylepšit a udělat ji krásnější.

Proč neimplementovat nějakou aplikaci a nepřilepit levný tablet na zeď se stejnou funkčností?

Aplikace, aplikace všude. Lidé rádi fyzicky komunikují s věcmi a ne jen ťukají na ploché obrazovky.

Doporučuje: