www.kappmeier.net


Modellbau - Lua Script für ETHOS

16. Juli 2024

Lua Script für ETHOS


ETHOS ist das Betriebssystem auf einigen Sender der Firma FrSky.  In vielen Punkten ähnelt das ETHOS dem openTX resp. edgeTX, insbesondere die Erweiterbarkeit mit eigenen Scripten, welche in Lua verfasst werden.

Damit lassen sich viele Funktionen der Sender nutzen oder auch erweitern. Es gibt einige Scripte, sogenannte Widgets, welche überwiegend den fliegerischen Bereich abdecken.
 
Was ich vermisst habe ist eine Art Tastenfeld als Widget mit denen sich die Servokanäle steuern lassen. Es gibt zwar auf der mir zur Verfügung stehenden X20 einige (Hardware-)Tasten/Schalter, jedoch sind es derer nicht allzu viele.  Hinzu kommt das diese Schalter natürlich auch für viele andere Funktionen genutzt werden können.

Es gibt auch Sender mit deutlich weniger Schaltern, z.b. die X-Lite. Häufig haben diese Sender einen Farbbildschirm mit Fingerbedienung. Warum sollte diese Fläche ungenutzt bleiben? Für edgeTX gibt es derartiges schon, nur leider nicht für ETHOS...  


Da es nun nichts fertiges gab muss selber Abhilfe geschaffen werden. Dies sollte jedoch nicht einfach werden. Ich hatte bislang keine Berührung mit Lua, gerade mal davon gehört. Weiterhin galt es die Struktur der Widgets unter ETHOS erst einmal zu verstehen. So ging es daran Informationen zu suchen. Es gibt sogar eine "Dokumentation" von FrSky, diese ist jedoch mehr oder weniger nur eine Auflistung der angebotenen Funktionen. Es fehlen konkrete Beispiele wie die jeweiligen Funktionen angewendet werden. Nicht mal der korrekte Aufbau einer Funktion wird gezeigt, jedes Fitzelchen muss selbst heraus gefunden werden.

Wie eine solche Dokumentation m.M.n. auszusehen hat zeigt die Windows Script Sprache Autoit [1]  bzw. das Wiki [2]  . Hier wird jede, ich betone JEDE, Funktion bzw. jeder Befehl mit einem fertigen Beispiel gezeigt. Einfach aus der Hilfe das Beispiel kopieren, starten und sehen wie es arbeitet. So kann sich jeder herantasten....

Bei den Widgets für ETHOS muss man sich an bereits existierenden Scripten entlang hangeln, hoffen das der/diejenige das Gemachte auch vernünftig umgesetzt hat, sonst eignet man sich falsche Dinge an.  

Leider habe ich lange Zeit nichts zum Thema "Touch" gefunden. Erst jetzt fiel mir ein Beispiel in die Hände, welches nichts anderes gemacht hat als ein Fadenkreuz auf dem Bildschirm an der berührten Stelle darzustellen. Das war der erste Durchbruch. Ein paar Quadrate auf den Bildschirm gemalt, Text darüber - fertig. Wenn die "Buttons" ihre Informationen in einem Array halten, lassen sich so einfach der Text, die Koordinaten, Farbe und anderes nutzen.

Was nun noch fehlte war die Möglichkeit einen Kanal zu steuern. Auch hier fand ich nichts gescheites, nicht mal in der Lua-Doku [3] war irgendetwas relevantes. Die einzige Möglichkeit vom Widget etwas verwertbares zu bekommen ist ein änderbarer Wert in verschiedensten Formatierungen. Dieser Wert wird als "Source" bereit gestellt. Es muss nun noch ein Mischer angelegt werden, der als Quelle nicht einen Schalter oder die Knüppel verwendet, sondern eine sogenannte "Lua Source".  In einem meiner gefunden Scripte wurde dies schon gezeigt, ich hatte es nur nicht war genommen.

Erst als ich beim Durchwühlen eines Threads auf RCgroups.com [4] auf Seite 32768 oder so in einen Discordchannel abgebogen bin fand ich jemanden der an der gleichen Sache dran war, aber auch noch Fragen offen hatte. Ich schaute mir sein Script an und stolperte über diese Source Geschichte.

Interessant war auch das der Script Aufbau dem meinen ähnelte, lediglich die Art der Button-Verwaltung wich ab. Ich hatte ein 1-dimensionales Array  Button [1]  für jeden einzelnen Button. Er (sie?) hatte ein mehrdimensionales Array, also nur ein einzelnes Array in Form von Button [1] [2] . Ebenso fand die eben erwähnte Source-Verarbeitung hier Anwendung, in genau der gleichen Schreibweise wie aus dem mir vorliegenden Beispielscript. Hat da eventuell jemand kopiert ;-)

Am Ende habe ich beides miteinander vermengt und somit eine erste Version. Nun hieß es noch ein wenig Feinarbeit und alles hübsch machen...

Das (derzeitige) Produkt sieht erst einmal so aus:

Memory.Switch-Panel



Über die Bildschirmkonfiguration ( [+] ) geht es in die Widgetkonfiguration die dann so aussieht :

Memory-Switch-Config
 


Es lassen sich die Farbe der Button, deren Text und der gesendete Wert einstellen. Für die Arbeit mit dem Memory-Switch sind das die notwendigen Infos.

Von meinem Ansinnen das als allgemeines, von jedem verwendbares Widget hinzubekommen bin ich erst einmal abgerückt. Aber vielleicht findet sich die dazu notwendige Information noch irgendwo, ich habe sie nur noch nicht gefunden...

Aktuell gibt es noch zwei größere Baustellen :

Die Konfiguration wird nicht Widget bezogen gespeichert, sondern gilt für alle und Sender-weit. Dies hat auch zur Folge das nur eine Variante des Multi-Switch Moduls verwendet werden kann, entweder das mit den Negativ-Werten oder das mit den Positiv-Werten.

Ebenso ist der Bildschirmaufbau statisch an die Auflösung der X20 gebunden und nicht dynamisch für kleinere Auflösungen. Da ist noch Luft nach oben. Zumindest rechts es erst einmal um den Memory-Switch damit zu nutzen...

Für die Zukunft denkbar wäre auch die Button Farbe aus dem System zu verwenden oder auch die Sprache anpassbar zu machen.


Wer es ausprobieren möchte, hier mal eine Version zum testen (vorerst nur als luac)  :  Multi Switch




Einrichtung des Widgets

Zunächst auf der SD-Card des Senders im Ordner scripts einen Ordner mswitch anlegen, dann das Script als main.luac dort ablegen. Den Sender nun in Betrieb nehmen



Zuerst muss das Widget als Lua-Source bereitgestellt werden, wobei es je nach ETHOS Version zwei Varianten gibt.

Für ETHOS bis Version 1.4.x in den Modelleinstellungen unter 'Lua Sources' :

ETHOS-lua-source-1.4.x


Ab Version 1.5 in Lua unter dem Haupt-Menü :

ETHOS-lua-source-1.5 a ETHOS-lua-source-1.5 b


Nun über das Bildschirm Menü [+] einen neuen Bildschirm mit "Fullscreen-Widget" anlegen :

ETHOS-Screen-a.png ETHOS-Screen-b.png



Mit "Konfigurieren" wird das Widget "Multi Switch" ausgewählt und auch gleich eingerichtet :

Memory-Switch-Config



Danach wird ein Mischer angelegt und wie folgt eingestellt:

Memory-Switch-Mixer-1

Memory-Switch-Mixer-2

Memory-Switch-Mixer-3



Hier nochmal das Ganze in Kurzform :

        - Script auf den Sender kopieren

        - Lua Source aktivieren

        - Widget -Bildschirm anlegen

        - Mischer anlegen



Wird nun ein Servo an dem konfigurierten Kanal angeschlossen sollte er sich mit Betätigung der jeweiligen Touch-Buttons entsprechend bewegen. Das Multi-Switch Modul reagiert dann entsprechend den Werten mit ein/ausschalten der Ausgänge.






Referenzen :

[1]    Autoit Homepoage
[2]    Autoit Wiki
[3]    FrSky Lua Doku
[3]    Forenbeitrag RCgroups



Download :

[A]    Lua-Widget Testversion





Stand 15.06.2024, Fortsetzung folgt...

 



zurück   -   Startseite   -   Impressum