E-shop MojeTT

Rocrail – rozjíždíme kolejiště přes počítač (4) – vlastní appka

Minule jsem chtěl Raspberry Pi zahodit, protože ovládání dostupných aplikací a webových „aplikací“ bylo strašné a nepřinášelo mi to žádný benefit nebo radost z ovládání přes mobil. Jednou jsem se nudil a tak jsem do AI zadal dotaz, zda jde vytvořit vlastní aplikace.

První pokus v Copilotovi dopadl špatně. Ale druhý pokus v Gemini už dopadl mnohem lépe. Až jsem byl překvapený, jak dokázal poskládat do HTML kombinaci JS skriptů a závislostí, to vše obalit do vlastně webové stránky. A tak nebudu napínat – povedlo se mi nakonec vytvořit appku pro ovládání kolejiště přesně takovou, jakou jsem chtěl.

Kdo někdy přestavoval na Roco myši výhybky po jedné, nejlépe ve skryťáku, ten jistě potvrdí, že tudy cesta nevede. Spletete se snadno, kontrola špatná, jednou dojde k nehodě, srážce, chybě. Střední kolejiště se bez nějaké automatiky neobejde. I to byl jeden z motivátorů – chtěl jsem zkusit mít možnost stavět jednoduše vlakové cesty přes mobil.

Chtěl jsem něco podobného, ale s lepší možností ovládat hlavně víc výhybek, protože za kolejišti jich mám přes 30. A samozřejmě vycházet z protokolu Rocrailu, který si povídá se zařízeními přes XML příkazy. Inspirací mi určitě byla nedávná appka od MTB, která je jednoduchá, přehledná a může jí dostat do ruky i malé dítě.

MTB DCC-prog1 – centrála do kapsy řízená (jenom) mobilem

Kdyby už bylo MTB dál a umělo booster k jejich DCCprog1, aby poskytoval dostatený proud pro celé kolejiště, asi bych rovnou využíval toto řešení bez hraní si s Rocrailem. Stále si ale držím aktivní aplikaci MTB hlavně pro programování, kdy si můžu prostě přes tu ukázanou cestu „banánky-centrála-USBkabel-mobil“ hodit na kousek koleje vlak a bokem si ho naprogramovat během minuty.

Vývoj do první plnohodnotné funkční verze mi trval cca 10 hodin, a ladění + vylepšování dalších cca 10-15 hodin. Takže nic „na jeden dotaz“. Ale když už jsem viděl, že to začíná dávat smysl, měl jsem velkou chuť pokračovat. Používal jsem k tomu ve většině případů obyčejného chatbota, většinou Gemini. Copilot pak kontroloval debugging a dával útržky kódu ke změně. Přes VScode by to asi trvalo rychleji, ale naběhla by tam nějaká suma za využit „tokenů“. Takto mě to vyšlo doslova zdarma. Každopádně, jde to i dnes udělat na nástrojích, které jsou zdarma. I obyčejný Gemini Flash-Lite poskytoval dostatečné odpovědi a třeba pro úpravu kódu bude perfektně dostačovat. Zvládá si poradit cca do 1000 řádků kódu, pak narazí na svůj limit.

Povedlo se mi nakonec vytvořit si aplikaci „na míru“. Umí logging (zaznamenávat aktivitu), zapnout napájení po zkratu. Umí si nastavit IP adresu a port (v případě, že by se měnily, což se u stabilního setupu většinou neděje).

Umí ovládat 3 lokomotivy jakékoliv adresy najednou, jde samozřejmě měnit jejich adresy v rámci 3 „slotů“ a umí načíst názvy a adresy z Rocrailu. Umí plynulý ovladač rychlosti, umí předdefinovaná procenta (0-25-50-75-100), umí směr i nouzové zastavení velkým tlačítkem. Umí ovládat 6 funkcí, pro mojí potřebu používaných dekodérů stačí a pomocí AI přidat další je otázka 3 minut.

Umí ovládat všechy výhybky na kolejišti, jejich pozice víceméně odpovídá skutečnému umístění (v rámci grafické přehlednosti a možností). Asi by šlo jako podklad umístit vrstu JPG s nákresem kolejí, aby byl plánek přehlednější, ale z pohledu responzitivity to nedává smysl). Může to vypadat pro neznalého čtenáře chaoticky, ale každý známe svoje vlastní kolejiště jako svoje boty, takže s orientací po rychlém zaškolení není problém. Už od začátku existence kolejiště mám vytisknuté schéma (plánek) u kolejiště, abych mohl ručně přehazovat výhybky, je vidět, že se tedy poloha výhybek téměř shoduje s realitou.

Umí číst senzory obsazení a zobrazit obsazené úseky (jsou zvýrazněné červeně).

A hlavně umí stavět vlakové cesty mezi bloky (postavená cesta je zvýrazněná).

Šlo by samozřejmě přidat víc bloků na vlečkové koleje ale plánek by byl nepřehledný. Když stisknu směr (+/-) a dvě koleje mezi sebou, dojde k přestavení všech výhybek na cestě podobně, jako s tím pracuje výchozí Rocrail. Vlakové cesty jsem převzal z XML souboru z Rocrailu, stačí je jen implementovat do aplikace. Při kliknutí na každou výhybku jí můžu ručně přestavit. Zelená = rovně, oranžová = odbočka.

Lze stavět až tři cesty najednou, které nejsou navzájem kolizní. Bloky „od/do“ jsou zvýrazněné. Při přestavení kolizní výhybky dojde ke zrušení zvýraznění postavené cesty. Lze si s tím v AI dál hrát, už se mění jen uživatelské rozhraní, ale odesílané příkazy jsou stejné.

Umí přestavovat výhybky v nezávislém režimu. Pokud si chci posunovat a nevadí mi scrollovat v seznamu. Víc ale využívám grafické pojetí o obrázek výše, jsou tam stejná tlačítka, a navíc formátovaná v pozici na kolejišti. Toto okno používám spíš pro testování nebo jednorázové přestavování.

Co tedy appka umí

  • připojit se k serveru jako další klient a spravovat napětí v kolejišt (ON/OFF)
  • automatický reconnect při výpadku/resetu serveru
  • ovládat lokomotivy výběrem adresy (s načtením uložených na serveru)
  • stop lokomotivy nebo všech lokomotiv
  • hlídat směr (polaritu) každé lokomotivy, pokud je na kolejiště položená obráceně
  • mít otevřených víc instancí (pro více strojvedoucích) a mezi nimi synchronizovat stav lokomotiv (rychlost, směr)
  • ovládat výhybky zadáním přímé adresy nebo ze seznamu (dle verze pro děti / pro dospělé)
  • stavět vlakové cesty převzetím logiky z Rocrailu prostým výběrem bloků z-do (přehodí všechny výhybky na trase)

Co appka naopak neumí (protože jsem to nepotřeboval, nebo neuměl)

  • správně pracovat s angličany a trojcestnými výhybkami (pouze umí posílat jednotlivé adresy)
  • sdílet stav výhybek mezi aplikacemi, principielně to jde, ale nějak u mě nefunguje logika příkaz rovně = výhybka rovně a někdy jsem musel reverzovat příkazy (docházelo k chybnému zobrazení)
  • zobrazit live plánek kolejiště (vše běží na textové podobě, nikoliv grafickém zobrazení plánku)

Když jsem měl hotovou velkou verzi, napadlo mě z ní vyseparovat jen základní „dětské“ funkce – 1 loko, pár výhybek (pro děti jsem fixně zvolil jen dvě, aby mohly jezdit 2 vlaky a střídat se v nádraží). Pro děti dostatečná zábava – jeden zastaví, přehodí výhybky, dá druhému přikaz na odjezd – druhý obkrouží kolečko, opět přehodí výhybky zpět a takto se střídají. Mají to v mobilech a musím uznat, že je to bavilo víc, než na myši. Nedělají chyby v přehazování nebo se omylem neprokliknou na jinou adresu nebo režim. Adresa lokomotivy je dostatečně daleko od ovládání směru a rychlosti vlaku. Tím z toho nejsou mrzutí a vydrží u toho déle 🙂 Úprava výhybek je přes AI otázka tří minut. Do této (a další) verze už jsem nedával vyčítání názvu lokomotivy ze serveru, šlo by ale doplnit celkem snadno.

Další verze je jakási „univerzální“ – tu můžu využít pro ovládání při posunu, nebo jí může středně porkočilý uživatel využít pro ovldánání vlaku a několika výhybek. A to pro jakékoliv kolejiště, příkazy v Rocrailu jsou stejné. Lze měnit adresu výhybky v rámci 3 slotů (víc se rozumně nevejde na obrazovku), zbytek je shodný s dětskou verzí. Stále ale slouží pro jednoduché ovládání menšího kolejiště, nebo pro jednu z více obsluh kolejiště. Všechy verze si spolu „povídají“ – čtou příkazy a pokud dětská verze pošle vlak 21 na rychlost 50%, univerzální verze o tom ví a rovnou změnu promítne na aplikaci. Tato verze asi nejvíce odpovídá aplikaci od MTB.

Nabízím MOJÍ VLASTNÍ appku ve verzi Univerzál bezplatně ke stažení a otestování, bez jakýchkoliv podmínek a omezení. Bude vás limitovat jen 5-ti minutový slot na Rocrail serveru, pokud nemáte zaplacenou podporu. Appka se ale umí po restartu sama připojit zpět.

Pokud si jí dáte do AI a upravíte si práci s výhybkami, věřím, že můžete appky donutit pracovat i s vaším layoutem. Upozorním na fakt, že u mě Rocrail pracuje zvláštně s přehazováním výhybek a apliakce je má nastanené „inverzně“. Nevím proč, ale jen takto mi to funguje. To si ale v AI lehce opravíte, nebo pokud to otestujete a víc uživatelů mi potvrdí, že jim to funguje „bez reverzování“, můžu opravit řádek v kódu na běžné přehazování a vydat novou verzi. A budu rád, když mi napišete, jestli se vám povedlo aplikaci rozchodit (a jak). Ale nejsem absolutně schopen provádět nějaké custom změny a úpravy, nebo poskytovat jakoukoliv podporu. Vše bez záruky jako fanouškovský neoficiální mini-projekt. Aplikace logicky vyžaduje, že máte hotový funkční rocrail server s funkčním plánem. Samostatně aplikace pracovat neumí.

Ale pozor – aplikace by měla fungovat i pro připojení k notebooku, na kterém běží Rocrail server. Není třeba mít dedikované Raspberry Pi pro provoz serveru. Stačí zapnout notebook, připojit se k jeho IP adrese (nutno zjistit si jí v domácí síti) a poběží to i jako externí ovladač k notebookové verzi Rocrail + Rocview. Nezkoušel jsem to, ale toerie říká, že by to běžet mělo.

Aplikaci můžete kliknutím rovnou otevřít a prohlédnout si jí bez připojení k serveru, v případě zájmu si HTML stáhněte do počítače nebo do mobilu a dále upravujte, sdílejte, vylepšujte, používejte a užívejte 🙂 Pokud uděláte nějakou super úpravu, budu rád, když se ozvete zpět na e-mail, rád bych jí třeba využil. Napadlo mě třeba doplnit programování pár základních CV (zhruba rozsah CV2 až CV6).

RR mobile control – Universal (ke stažení)

Co bude appka umět

  • zadáte IP adresu serveru (většinou 192.168.0.něco) + port (musí být v Rocrail nastavení aktivní port pro web, většinou 8080)
  • bude umět ovládat lokomotivy i ve více přihlášených klientech (vhodné pro vícemužnou obsluhu)
  • u lokomotiv lze prohodit napevno směr (Swap direction) tlačítkem, pokud je lokomotiva nasazená na koleje opačným směrem, než je „vpřed“ a „vzad“ dle zvyklostí vašeho kolejiště i zvyklostí DCC
  • bude umět ovládat 6 funkcí vybrané lokomotivy
  • bude umět ovládat výhybky adresovým způsobem (pokud přehazují opačně, musíte v AI upravit logiku přehazování na inverzní – závisí na designu plánu v Rocview)
  • bude umět CZ a EN jazyk

Na co se appka hodí

  • pro děti na jednoduché ovládání
  • na ovládání malého kolejiště
  • na občasné jízdy přes wifi

Na co se appka nehodí

  • pokud chcete řešení na míru (pak předělejte přes AI potřebné funkce nebo si přidejte víc lokomotiv nebo výhybek)
  • pro velké kolejiště s velkým počtem výhybek (můžete si přidat stránky s výhybkami)
  • pokud si neumíte udělat úpravy (nikdo to za vás nepředělá)
  • pokud nemáte funkční rocrail server přes wifi 🙂

A nyní je ten moment, kdy mi to celé dává smysl. U tatranského kolejiště jsem si musel na stavění vlakových cest dělat ovládací pult pomocí převodníku TCO, který převáděl mechanické kombinace číselných příkazů na příkazy DCC pro stavění výhybek. Byla s tím spousta počítání, přemýšlení, plánování, drátování.

Byla to krásná technická práce a na ten pult jsem dodnes hrdý. Ale doba je jinde, a téhle drátenické práci se dá vyhnout díky tomu, že se stavění cest přenese do telefonu. A to je pro mě skutečně ta největší úleva, než samotná změna v ovládání lokomtiv.

Kdo si chce přečíst hodně starý článek:

Tvorba ovládacího pultu pro DCC (díky TCO)

To je z Rocailu asi vše. V základní verzi je to takové polovičaté řešení. Umí to spoustu věcí, ale některé jsou dost old-school. Pomocí mobilní aplikace se mi povedlo Rocrail povýšit na současnost tím, že se ovládá moderní aplikací z mobilu, s plnohodnotným stavěním vlakových cest, a to vše komfortně dotykově. V pozadí běží server, který mě vlastně nezajímá, a na straně uživatele běží moderní apka. Ideální stav. Můžu příjít ke kolejišti a během chvilky jezdit. Pokud vše funguje, nemusím vzít fyzický ovladač do ruky. A upřímně – baví mě to, baví mě ta jednoduchost a to stavění cest a rychlé přehazování výhybek mi ušetří tolik času, že mě opět baví střídat vlaky ve skryťáku. Po dlouhé době jsem pořádně očistil koleje a jdu si občas večer na chvilku zajezdit nebo zaposunovat.

1 komentář u „Rocrail – rozjíždíme kolejiště přes počítač (4) – vlastní appka“

  1. Pěkná práce.

    Takže když je zase chuť jezdit, bude pokračování Aktivit?

Napsat komentář

Web používá Akismet ke snížení množství spamu. Zjistěte, jak jsou zpracovávány údaje z komentářů.