Svenskt MJ-forum

Digitalt & elektronik => Mitt MJukvaru-/elektronikprojekt => Ämnet startat av: Tompa skrivet sön 24 mar 2019, 15:04:15

Titel: CLEES banstyrning
Skrivet av: Tompa skrivet sön 24 mar 2019, 15:04:15
CLEES banstyrning - ett öppet källkodsprojekt
Jag har under senaste dryga 1,5 året jobbat lite lågintensivt med ett helt nytt banstyrningskoncept.
Tillsammans med alias Nohab här på forumet skissade vi på att helt överge gängse LocoNet och andra banbussar till förmån för standard protokoll med TCP/IP över ethernet och kunna dra nytta av all den befintliga tekniken som utvecklas med Internet.
Vi ville också sänka den tekniska tröskeln och göra det enklare att programmera och att enkelt kunna använda standardhårdvara.

Nu har vi gjort en första installation av CLEES på alias Staffan S station Holmfors (http://www.svensktmjforum.se/forum/index.php?topic=12658.0) där vi tänkte utvärdera och utveckla vidare.
Här är en bild under installationsprocessen.

(http://www.svensktmjforum.se/forum/uploads/1067/clees-banstyrning-01.jpg)

Innan vi byggde in allt på stationen körde vi på en prototypplatta där vi kunde testa allt och programmera och greja

(http://www.svensktmjforum.se/forum/uploads/1067/clees-banstyrning-02.jpg)


Vad står CLEES för
CLEES är en akronym för "Controll your Layout over Ethernet using Easy Scripts". Mjukvara är skriven i Python och körs under Linux.
Du kan köra CLEES på Raspberry Pi eller Orange Pi. Alla kommunikation sker via MQTT meddelande.


Hårdvara håller på att bli "gratis"
Bakgrunden till arbetet är att idag får man väldigt mycket datorkraft för väldigt lite pengar.
All hårdvara till station Hfs har vi köpt via AliExpress

https://www.aliexpress.com/item/New-Orange-Pi-Zero-H2-Quad-Core-Open-source-development-board-beyond-Raspberry-Pi/32760774493.html (https://www.aliexpress.com/item/New-Orange-Pi-Zero-H2-Quad-Core-Open-source-development-board-beyond-Raspberry-Pi/32760774493.html)
Dator
(http://www.svensktmjforum.se/forum/uploads/1067/clees-banstyrning-03.jpg)

https://www.aliexpress.com/item/16-Channel-12-bit-PWM-Servo-Driver-I2C-interface-PCA9685-module-for-arduino-Robot-Raspberry-pi/32969999177.html (https://www.aliexpress.com/item/16-Channel-12-bit-PWM-Servo-Driver-I2C-interface-PCA9685-module-for-arduino-Robot-Raspberry-pi/32969999177.html)
Servokontroll
(http://www.svensktmjforum.se/forum/uploads/1067/clees-banstyrning-04.jpg)

Även allt I2C kablage är köpta på AliExpress men nätdelarna kommer från IKEA

Det finns mycket att berätta om CLEES, mer info kommer.
Du hittar beskrivningar och mjukvara på Github, här https://github.com/TomasLan/CLEES (https://github.com/TomasLan/CLEES)

Titel: SV: CLEES banstyrning
Skrivet av: Staffan S skrivet mån 25 mar 2019, 12:26:08
En länk till bygget av Hfs där CLEES ingår numera. http://www.svensktmjforum.se/forum/index.php?topic=18245.0
Titel: SV: CLEES banstyrning
Skrivet av: Lasp skrivet mån 25 mar 2019, 13:32:43
Tack. Det var en riktigt bra första beskrivning. Rätt! Hårdvara är inte dyrt och måste inte vara special!
Med programmering når man långt, lätt att testa och ändra.
Skall bli spännande att följa och se hur allt kan kombineras. Hoppas ingen låser in sig eller att det blir ett ståndskrig kring val av prylar och protokoll.
Titel: SV: CLEES banstyrning
Skrivet av: LLJ skrivet mån 25 mar 2019, 14:03:10
Intressant med ny teknik. Jag ser dock inte fördelen jämfört med t.ex. LocoNet så kan ni utveckla era tankar lite?
Går det enbart att köra på Raspberry eller går det även att köra på Arduino?

/Lars
Titel: SV: CLEES banstyrning
Skrivet av: Mekanoid skrivet mån 25 mar 2019, 18:03:28
Angående Loconet är det väl så att det kan inte en Arduino, Raspberry Pi eller liknande hantera "out-of-the-box" hårdvarumässigt? Det krävs väl lite extra elektronik (drivkrets)?

I så fall är fördelen med CLEES och MMRC att ingen extra hårdvara behövs för kommunikationen. Även mjukvaran för kommunikationen är väl spridd, beprövad och öppen källkod. I MMRCs fall är det dessutom trådlöst för hela slanten som gäller, vilket jag tror är rätt väg att börja gå.

Dessutom vill jag minnas att Loconet-protokollet är väldigt komplicerat och utan att blinka vill jag påstå att MQTT är betydligt enklare. ;)
En nackdel är också att Loconet är (var?) proprietärt, d.v.s inte helt fritt att använda.
Titel: SV: CLEES banstyrning
Skrivet av: LLJ skrivet mån 25 mar 2019, 18:51:36
Du svarade aldrig på om det går att köra CLEES på Arduino eller om det kräver kraftfullare MCU.

LocoNet går att köra på Arduino Pro Mini. Kräver lite elektronik, men är i praktiken bara nivåomvandlare + transistor som klarar att sänka lite mer ström än de vanliga utgångarna på Arduino.

/Lars
Titel: SV: CLEES banstyrning
Skrivet av: Mekanoid skrivet mån 25 mar 2019, 20:00:15
Du svarade aldrig på om det går att köra CLEES på Arduino eller om det kräver kraftfullare MCU.
Jag ska egentligen inte svara, för jag har inte skapat CLEES (den äran ska Tompa & Nohab ha). Men på Github ligger just nu bara Python-programvara och den kan såvitt jag vet inte köras på en Arduino. (Python är ett programspråk som måste "omvandlas" från textformat till datorkod innan det kan köras. Omvandligen måste datorn själv göra och det brukar ge att den måste vara lite kraftfullare.)

Men man skulle nog ganska enkelt kunna ta en MMRC-klient och bara ändra vilka MQTT-ämnen den använder för att kommunicera. Jag hade min första klient gjord för både MMRC & CLEES, men jag har tagit bort det nu för allt jag behövde för mina klienter fanns inte definierat i CLEES.

LocoNet går att köra på Arduino Pro Mini. Kräver lite elektronik, men är i praktiken bara nivåomvandlare + transistor som klarar att sänka lite mer ström än de vanliga utgångarna på Arduino.
Jo, som sagt är fördelen med MMRC att du slipper även nivåomvandlaren & transistorn. Och trådarna!

Och du bemötte inte på påstående om Loconets krångliga spec... ;)
Titel: SV: CLEES banstyrning
Skrivet av: LLJ skrivet mån 25 mar 2019, 20:24:08
Vad jag ser på bilderna så är CLEES trådat och inte trådlöst, fast det kanske går det också?

Har inte läst på om CLEES så att jag kan uttala mig om dess komplexitet/enkelhet jämfört med LocoNet, men visst, LocoNet kräver kanske lite mer läsande.

/Lars

Titel: SV: CLEES banstyrning
Skrivet av: AlexEhn skrivet mån 25 mar 2019, 20:33:03
Vad jag ser på bilderna så är CLEES trådat och inte trådlöst, fast det kanske går det också?

Har inte läst på om CLEES så att jag kan uttala mig om dess komplexitet/enkelhet jämfört med LocoNet, men visst, LocoNet kräver kanske lite mer läsande.

/Lars


CLEES och MMRC är inte samma sak. MMRC kan vara trådlöst om jag förstår Mekanoid rätt.

Det verkar pågå två parallella utvecklingsprojekt som båda bygger på MQTT och standardkomponenter. Läste en parallell tråd om detta i morse här på forumet. EDIT: här är den andra tråden. http://www.svensktmjforum.se/forum/index.php?topic=21831.0
Titel: SV: CLEES banstyrning
Skrivet av: Mekanoid skrivet mån 25 mar 2019, 22:08:37
Både CLEES och MMRC använder TCP/IP (Ethernet) för kommunikation. Spelar ingen roll om det är per tråd eller trådlöst.

Och ja, det är två olika projekt men det enda som egentligen skiljer är hur man anger "MQTT-adresserna".

CLEES kan se ut så här:
clees/<stationsförkortning>/<meddelandetyp>/<banobjekttyp>/<banobjektid>

Exempel: clees/hfs/cmd/t/203

I MMRC kan samma adress se ut så här:
mmrc/<stationsförkortning>/<banobjektid>/<banobjekttyp>/<meddelandetyp>

men har de mer engelskklingande namnen:
mmrc/<client>/<node>/<property>

Exempel: mmrc/hfs/203/turnout/set

MMRC har alltid bara två meddelandetyper: Adressen utan "/set" är aktuell status och adressen med "/set" är ett kommando. Och som bekräftelse på ett mottaget kommando, svarar klienten lämpligen med att sätta samma värde som status.
Titel: SV: CLEES banstyrning
Skrivet av: BenWah46 skrivet mån 25 mar 2019, 23:03:00
Oroande om protokollvarianter utvecklar sig på detta tidiga stadium Kan ni som är framåt på detta snacka ihop er?
Titel: SV: CLEES banstyrning
Skrivet av: LLJ skrivet mån 25 mar 2019, 23:11:36
Både CLEES och MMRC använder TCP/IP (Ethernet) för kommunikation. Spelar ingen roll om det är per tråd eller trådlöst.

Och ja, det är två olika projekt men det enda som egentligen skiljer är hur man anger "MQTT-adresserna".

CLEES kan se ut så här:
clees/<stationsförkortning>/<meddelandetyp>/<banobjekttyp>/<banobjektid>

Exempel: clees/hfs/cmd/t/203

I MMRC kan samma adress se ut så här:
mmrc/<stationsförkortning>/<banobjektid>/<banobjekttyp>/<meddelandetyp>

men har de mer engelskklingande namnen:
mmrc/<client>/<node>/<property>

Exempel: mmrc/hfs/203/turnout/set

MMRC har alltid bara två meddelandetyper: Adressen utan "/set" är aktuell status och adressen med "/set" är ett kommando. Och som bekräftelse på ett mottaget kommando, svarar klienten lämpligen med att sätta samma värde som status.

Saknar en "nivå" i MMRC, värdet som man skall sätta property till. T.ex. mmrc/hfs/203/turnout/dirverging/set

/Lars
Titel: SV: CLEES banstyrning
Skrivet av: Mekanoid skrivet tis 26 mar 2019, 07:40:30
Saknar en "nivå" i MMRC, värdet som man skall sätta property till. T.ex. mmrc/hfs/203/turnout/dirverging/set
Värdet saknas i båda exemplen! Jag visade bara adresserna, för i övrigt skiljer inte hanteringen.

Du så att säga skickar värdet, t.ex "left", till adressen "mmrc/hfs/203/turnout/set" och sen svarar klienten med att skicka "left" till adress "mmrc/hfs/203/turnout/" som bekräftelse.

I MMRC ligger sen det sista värdet kvar på sin adress tills klienten ändrar det eller stängs av - så att andra klienter kan kolla på växelns adress och se hur den ligger. Exempelvis låter man min signalklient lyssna på adressen och agera när värdet ändras...
Titel: SV: CLEES banstyrning
Skrivet av: dennisb skrivet tis 26 mar 2019, 09:13:38
Det här är verkligen spännande projekt! Både detta och MMRC. Har läst dokumentationen på Github för båda och inser att jag bör nog kvällsplugga lite MQTT de kommande kvällarna  :beer:

Extremt attraktiv prisbild på hårdvaran! Inser att detta skulle kunna bespara mig inköpt av ett antal ESU Switchpilot Servos för kommande banan ju :) Har ett par PI3B över så det vore kul att installera och testa ju. Jag drömmer om en framtid med en färdig dockercontainer där config sker i klienten.

Jag förstår att både dessa protokoll fortfarande är i utvecklingsstadiet men de är verkligen intressanta! Men om jag förstår det rätt så krävs det att man har en klient (styrprogramvara) för att kunna styra enheterna. Rätt? Jag tänker att de flesta av oss som håller på med automatisering av MJ redan har någon form av mjukvara för automationen typ RocRail, iTrain eller TC via DCC/Mfx. Själv har jag TC och iTrain men föredrar helt klart den sistnämnda. Vad skulle krävas för att dessa skulle fungera ihop med CLEES? Att standarden implementeras i iTrain eller går det att skriva en "konverterare"? Har ni haft tankar kring detta?

Grymt imponerad av ert arbete! Gäller på både CKEES och MMRCför den delen :up:

D.
Titel: SV: CLEES banstyrning
Skrivet av: IngBo skrivet tis 26 mar 2019, 13:26:59
.
Titel: SV: CLEES banstyrning
Skrivet av: Tompa skrivet ons 27 mar 2019, 13:41:41
Det har varit en massa bra diskussioner i tråden. Tack Peter för dina inlägg. CLEES är både trådlöst via Wifi och ethernet. På Holmfors station har vi valt att koppla ihop de två Opi0 (Orange Pi Zero) med ethernet via en switch. Men en av Opi0:orna har Wifi aktiverat och en brygga mot ethernet och en DHCP server som delar ut IP adresser. Allt standard programvaror till Linux. Så du kan koppla upp din telefon mot hfs och göra inställningar i CLEES filerna.
Titel: SV: CLEES banstyrning
Skrivet av: Mekanoid skrivet ons 27 mar 2019, 19:22:33
Så du kan koppla upp din telefon mot hfs och göra inställningar i CLEES filerna.
Är det mot ett webbgränssnitt? Eller hur går konfigureringen till via telefon? Bild?
Titel: SV: CLEES banstyrning
Skrivet av: Tompa skrivet tor 28 mar 2019, 07:46:33
Så du kan koppla upp din telefon mot hfs och göra inställningar i CLEES filerna.
Är det mot ett webbgränssnitt? Eller hur går konfigureringen till via telefon? Bild?
Inget webgränsnitt ännu utan med ssh, sftp och en editor app i telefonen. Men visst CLEES är ett öppet system så vill man installera en Web server i Opi0 och bygga tex en webapp så är det fullt möjligt
Titel: SV: CLEES banstyrning
Skrivet av: Tompa skrivet fre 29 mar 2019, 22:22:04
Här kommer lite mer bilder på CLEES från utvecklingslabbet

Så här såg labbet ut en tid när jag utvecklade nuvarande kodbas.
Här syns att servon och datorer drivs på samma nätdel. Det visade sig inte så lyckat för servona rycker lite i matningsspänningen och då kunder Opi0:orna hänga sig. Då införde jag separata nätdelar till servokorten och problem försvann.

(http://www.svensktmjforum.se/forum/uploads/1067/clees-banstyrning-05.jpg)

När Hfs skulle få sina ställverkspaneler så valde jag använda en gammal seriekabel som anslutningskablage.
DSUBar är ganska hållbara och på detta sätt nycklades respektive ställverkspanel till sin ände av stationen eftersom den har en hon och en hankontakt.

(http://www.svensktmjforum.se/forum/uploads/1067/clees-banstyrning-06.jpg)

Ställverkslådorna för lokal omläggning är gjorda så att dom kan sättas på valfri sida om modulen
Opi0:orna fick var sitt enkelt träsvep för som skydd, dragavlastning och förenklat montage på modulerna.

(http://www.svensktmjforum.se/forum/uploads/1067/clees-banstyrning-07.jpg)

(http://www.svensktmjforum.se/forum/uploads/1067/clees-banstyrning-08.jpg)

I ställverkslådorna sitter ett I/O kort. CLEES hanterar knappar och utgångar via sådana
https://www.aliexpress.com/item/youe-shone-PCF8574-IO-Expansion-Board-I-O-Expander-I2C-Bus-Evaluation-Development-Module/32971883657.html (https://www.aliexpress.com/item/youe-shone-PCF8574-IO-Expansion-Board-I-O-Expander-I2C-Bus-Evaluation-Development-Module/32971883657.html)
I/O kort
(http://www.svensktmjforum.se/forum/uploads/1067/clees-banstyrning-13.jpg)

(http://www.svensktmjforum.se/forum/uploads/1067/clees-banstyrning-09.jpg)

Servokorten monteras med Opi0:orna

(http://www.svensktmjforum.se/forum/uploads/1067/clees-banstyrning-10.jpg)

En grön LED tänds när Opi0 har bootat och kört igång CLEES. Den gröna LEDen blinkar om den saknar/tappar kontakten med MQTT servern och återställer anslutningen automatiskt så snart MQTT servern är tillbaka.

(http://www.svensktmjforum.se/forum/uploads/1067/clees-banstyrning-11.jpg)

På Hfs modulern skruvas här de två Opi0:orna fast.
På denna bild syns även ethernetswitchen som sitter på ena modulen och Wifi antennen är den lilla svarta pinnen bredvid ethernetkablaget

(http://www.svensktmjforum.se/forum/uploads/1067/clees-banstyrning-12.jpg)

Hoppas det ger en liten inblick i installationen av CLEES
Titel: SV: CLEES banstyrning
Skrivet av: Tompa skrivet sön 31 mar 2019, 11:50:06
... Jag tänker att de flesta av oss som håller på med automatisering av MJ redan har någon form av mjukvara för automationen typ RocRail, iTrain eller TC via DCC/Mfx. Själv har jag TC och iTrain men föredrar helt klart den sistnämnda. Vad skulle krävas för att dessa skulle fungera ihop med CLEES? Att standarden implementeras i iTrain eller går det att skriva en "konverterare"? Har ni haft tankar kring detta?

Det vi har tänkt skulle lösa detta är en som du säger en "konverterare" eller jag skulle nog kalla det "brygga", mellan Ethernet MQTT meddelande och LocoNet med sina meddelanden. Till det krävs en hårdvara som kan prata LocoNet och Ethernet. Man skulle kunna köra ett program i tex. PCn där man kör TC och en extra LocoBuffer och PCn pratar MQTT mot sin nätverksanslutning så det behövs nödvändigtvis inte någon "specialhårdvara" mer än LocoBuffern.
Jag har själv ingen plan i dagsläget att göra en sådan brygga men CLEES är ju som sagt ett öppet system så den som vill får gärna bidraga med en sådan och jag hjälper gärna till att ta fram det. Vi behöver en provanläggning också så man kan se hur det fungerar.
Titel: SV: CLEES banstyrning
Skrivet av: lgrfbs skrivet sön 31 mar 2019, 19:37:35
 :P DR5000 har loconet i närverkskontakten, har jag hört.
Titel: SV: CLEES banstyrning
Skrivet av: nohab skrivet tor 04 apr 2019, 15:29:57
Nu finns även en lyssnare för MRclock till CLEES.

För er som inte vet så är MRclock en Android-app som är vanlig som snabbklocka på modulmöten.
Nu finns alltså ett enkelt Pythonscript som lyssnar på MRclock, och publicerar informationen på följande topics:
clees/mrclock/active   (yes/no), skrivs med retais True, övriga utan retain
clees/mrclock/name  (namnet på den snabbklocka man lyssner på, ifall flera är igång)
clees/mrclock/clock (säger sig självt...)
clees/mrclock/speed  (hastighet jämfört med normal tid)
clees/mrclock/weekday  (verkar dock inte vara aktivt i MRclock)
clees/mrclock/text  (det finns möjlighet att lägga ut ett meddelande från MRclock. Tyvärr klarar inte mitt Pythonscript åäö än)

Titel: SV: CLEES banstyrning
Skrivet av: Mekanoid skrivet tor 04 apr 2019, 16:06:01
Kalasbra! Finns scriptet att ladda ner nånstans?

Sen gissar jag att både MRclock och CLEES måste finnas på samma nät för att det ska fungera?

På en RPi borde man väl kunna sätta in en wifi-dongel för att få två nät och kunna hämta MRclockdata från ett nät för att skicka ut på nästa? Har du/ni testat det?

(Jag tänker mig att på en modulträff finns oftast ett separat nät för MRclock - och man kanske inte ens vill blanda det med CLEES/MMRC?)
Titel: SV: CLEES banstyrning
Skrivet av: nohab skrivet tor 04 apr 2019, 17:59:13
Ja, jag ska bara fundera på om jag ska lägga det på Tompas GitHub, tillsammans med resten av CLEES, eller om jag ska börja på en egen.
Kanske blir fler "gateways" :)

Ja, samma nät, och jag har inte funderat på behovet av flera nät. Om man ska ha flera nät så borde kanske delningen ligga mellan tågstyrning och banstyrning.
För hemmabruk räcker nog ett när gott.
Titel: SV: CLEES banstyrning
Skrivet av: Mekanoid skrivet tor 04 apr 2019, 22:28:38
Jo, för test och hemmabruk räcker ett nät. Personligen tror jag att varje modulägare kommer vilja ha sitt eget nät, om inte annat så för säkerheten. Men jag får undersöka om man kan ha två trådlösa nät till en RPi...

Sen är en fundering om inte "mrclock" borde heta "fastclock" istället? För det är väl inte bara MRclock som kan ge tid, tänker jag.
Sen kanske "clock" borde heta "time" för att det är tiden (och inte klockan) som publiceras där... ;)

Ursäkta om jag är för noga och generell. :(
Titel: SV: CLEES banstyrning
Skrivet av: Tompa skrivet sön 07 apr 2019, 17:32:45
CLEESweb - En webclient för ställverk
Till CLEES finns även en webclient, kallad CLEESweb, som fungerar som en stationskontrollpanel du kör i din telefon, på paddan eller från datorn, allt via en vanlig webläsare.
CLEESweb fick ett eget repository på Github, här
https://github.com/TomasLan/CLEESweb (https://github.com/TomasLan/CLEESweb)

Drt funkar så här att du lägger filerna i en lokal katalog och sen öppnar du cleesweb.html så öppnas kontrollpanelen som för Holmfors Station ser ut såhär

(http://www.svensktmjforum.se/forum/uploads/1067/cleesweb-hfs-01.jpg)

Växlarna är gråa tills dom har fått rapporter från CLEES vilket läge dom har

(http://www.svensktmjforum.se/forum/uploads/1067/cleesweb-hfs-02.jpg)

Växlarna är klickbara. De gråa rutorna visas inte men finns där och är klickkänsliga.
Klickar man så lägger växeln om.

(http://www.svensktmjforum.se/forum/uploads/1067/cleesweb-hfs-03.jpg)

Filen cleesweb_objects.js är en javascriptfil men i JSON format och där definierar man alla "rälsbitarna"
Andra inställningar som behöver finsjusteras finns i början på cleesweb.js. tex IPadress till MQTTsevern mm.

Det finns en manual på Github som mer i detalj förklarar hur CLEESweb fungerar
https://github.com/TomasLan/CLEESweb (https://github.com/TomasLan/CLEESweb)
Titel: SV: CLEES banstyrning
Skrivet av: BenWah46 skrivet sön 07 apr 2019, 18:48:13
Detta ser ut som ett  fantastiskt framsteg; att kunna beskriva en spårplan i några enkla rader.
Systemet kanske i en framtid kan utvidgas så att koordinaterna får vara relativa.
Då kan ju en hel bana kombineras ihop genom att skript för resp station läggs samman men en offset för resp station.

Det öppnar nya möjligheter.

Applåder!!!!!
Titel: SV: CLEES banstyrning
Skrivet av: Tompa skrivet fre 06 sep 2019, 10:03:55
Har inte hunnit med att göra så mycket på CLEES sedan i våras men kan berätta att Holmfors Station (https://www.svensktmjforum.se/forum/index.php?topic=18245.msg), som har CLEES som banstyrning, fintrimmades och var med på Modulkörningen i Gävle i Juni.

En av fintrimningarna handlade om att vi upptäckte att några av RCservona rört lite på sig och jag tog därför fram en ny RCservohållare. Jag har funderat på detta länge för jag vill ha en hållare som inte ökar byggdjupet mer än servots "tjocklek". Ni som följt mina försök till ultralågprofilmoduler (https://www.svensktmjforum.se/forum/index.php?topic=14316.msg) för flera år sedan vet mer om varför jag inte vill ha för stora klumpar på modulens undersida :)

Så jag ritade upp och printade ut en RCservohållare som ser ut såhär

(http://www.svensktmjforum.se/forum/uploads/1067/tompa-servo-hallare-01.jpg)

Länkarmen kan klippas av så att den inte sticker utanför servots kropp.