Werte geänderter Gvars bei der X9D mit einem Script anzeigen - für Beginner

Status
Nicht offen für weitere Antworten.

midi_7

Erfahrener Benutzer
#1
hallo,
kann mir jemand einen Tipp geben wie man die Werte geänderter Gvars bei der X9D mit einem Script anzeigen kann?
Ich ändere mit S1 eine GV um sie dann für z.B. Klappenjustierung zu verwenden. Nun möchte ich mir sie auf dem Telemetrie-BS anzeigen lassen. Mit lua Scrips habe ich noch nicht viel Erfahrungen, möchte aber das Beispiel nutzen um mich damit zu befassen.

viele Grüße Michael
 
#2
Es gibt ausnahmsweise eine ausführliche Doku zum Thema (ich versteh´s trotzdem nicht ;))

opentx2.1-lua-reference-guide/content/
opentx-2.2-lua-reference-guide/content/

Hier werden die Telemetrie-scripts erklärt

Mit Ralfs Hinweis müsste man es aber fast schon hinbekommen:
*****************************************************************
"model.getGlobalVariable(index ,[flight_mode])

ist der Befehl den du brauchst.
nur aufpassen zwischen GV(Index) und GV(x) in der Taranis ist ein Versatz von 1

Beispiel:
-- get GV3 (index = 2) from Flight mode 0 (FM0)
val = model.getGlobalVariable(2, 0)

mit getFlightMode(mode) hast du auch die Flight-Mode-Nummer und kannst dann die GV auch aktuell passend auslesen...

Gruss aus China
Ralf "

Edit: Dieses Script "GVar" schreibt schon mal die GV1 aus FM0 auf das Display, wenn man es auf einem der Telemetrie screens laufen lässt. Zusammengeklaut aus der Doku von oben ;)

Code:
local function init_func()
  -- init_func is called once when model is loaded
end

local function bg_func()
  -- bg_func is called periodically when screen is not visible
end

local function run_func ()
 lcd.clear()
  val = model.getGlobalVariable(0, 0)
lcd.drawNumber(75, 11, val, 0)
end

return { run=run_func, background=bg_func, init=init_func  }
GVar.png
GVar1.png
 
Zuletzt bearbeitet:
#3
Anhang anzeigen telGV1.lua.txt
(Version für 2.1;Umbenennen in tel_GV.lua, kommt in den Ordner Scripts/Telemetry)

Anhang anzeigen telGV2.lua.txt
(Version für 2.2)

screenshot-3.png

muss den Sonntag hier totschlagen und habe mein "Telemetriebild" der Uhrzeit-Grossanzeige mal ein bisschen abgeändert um Beispielhaft eine GV darzustellen.

Beispiele sind für mich jedenfalls Aussagekräftiger als nur die Theorie.
Angezeigt werden mit diesem Script:
- Modellmatch Nummer / Modellname
- Flugphase (Nr/Name)
- Timer 1..3
- Datum / Uhrzeit

- GV1, GV5

alle Anzeigen sind für die Darstellung auf der X9D(+) mit OpenTx 2.1.9 eingerichtet.( siehe Screenshot)
mit Schriftgrössen und Positionen muss man spielen, ebenso wenn man eine andere Displaygrösse hat.

Was nicht benötigt wird einfach rauslöschen oder kommentieren..

Hat man die GV nur für eine Flugphase definiert und nutzt diesen Wert in allen Phasen gleich, wird in den nicht definierten Flugphasen dann 1025 als Wert angezeigt.
(siehe Anzeige GV1 für FP2)
hier dann einfach bei den Variablendefinitionen die definierte Phase fest eintragen...
( alternativ prüfen ob ein gültiger Wert vorhanden ist (Wertebereich GV[FM] == -1024..+1024))

Damit haben wir die Anzeige einer GV schonmal geklärt.

Für die Anzeige der Änderung einer GV musst du diese regelmässig speichern
( Entweder über die Auswertung der Uhrzeit oder du definierst einen logischen Schalter mit Funktion Takt oder einfach den Taster SH...)
Damit einen Altwert / Neuwert Vergleich machen, wenn der gespeicherte Wert ungleich dem Aktuellen Wert der GV ist hast du eine Änderung.
Jetzt kannst du die Differenz Berechnen und Anzeigen oder einfach den neuen Wert Anzeigen oder oder oder...

Lua ist da sehr flexibel, vom Funktionsumfang wohl so einzuordnen wie die Programmiersprachen Basic oder Pascal für PC's...

Gruss aus China

Ralf

Edit: 2 Tippfehler im Script gefunden, man sollte sowas nicht auf dem Handy editieren....
 
Zuletzt bearbeitet:

midi_7

Erfahrener Benutzer
#4
hallo Ralf,

vielen Dank für die ausführliche Hilfe, ich werde mich gleich mal ans "probieren" machen.

Viele Grüße nach China (ich hoffe, du musst nicht gerade Hühnerbeine essen :) )

Michael
 
Zuletzt bearbeitet:
#5
Ralf, du bist nicht nur weit weg, sondern (zumindest mir) auch weit voraus.

Ich schreibe mal meine bisherigen Funde hier rein, vielleicht bleibt es ja ein Anfänger Thread:

- Die LUA-build-Option braucht man im Regelfall nicht, nur für Mixer-Scripte - und die sind was für Profis

"If you intend to use mixer scripts, when updating the firmware on your transmitter you need to make sure the lua option is checked in the settings for your radio profile (Main menu -> Settings ->Settings...) as shown below. This is not required if you only intend to run telemetry, one-time and function scripts, support for those is included by default."

- Telemetrie-Scripte heißen so, weil sie von einem Telemetrie-Screen aufgerufen werden, nicht weil sie etwas mit Telemetrie zu tun haben müssen. Sie sind universell einsetzbar. Ein Nachteil scheint zu sein, dass man sie nicht mit einer Spezialfunktion aufrufen kann. Man kann sie nur "zu Fuß" starten, s.u.

- Eigene Scripte baut man sinnvollerweise in dieses Gerüst ein:

Code:
local function init_func()
  -- init_func is called once when model is loaded
end

local function bg_func()
  -- bg_func is called periodically when screen is not visible
end

local function run_func(key-event)
  -- run_func is called periodically when screen is visible
  bg_func() -- run typically calls bg_func to start
end

return { run=run_func, background=bg_func, init=init_func  }
- Das eigentliche "Programm" läuft hier: "local function run_func(key-event)", "key-event" bedeutet, dass noch eine Taste ausgewertet wird (zum Start oder zur Parameterübergabe?). Nutzt man key-event nicht, müssen wenigstens die Klammern stehen bleiben. Das Programm wird dann einige Male pro Sekunde ausgeführt, wenn der Ausgabe-Bildschirm, s.u. angezeigt wird.

- Das eigentliche Skript bearbeitet man mit einem Texteditor z.B. Notepad++

- Es kann in Companion simuliert werden, dazu muss ein Pfad in den Einstellungen zu dem SD-Karten-Abbild vorhanden sein. Das Script legt man im Ordner /SCRIPTS/TELEMETRY ab. Dann wählt man es in einem Telemetriescreen (letzter Tab der Modelleinstellungen) an.

- Mit "Page" lange drücken, dann kurz drücken, navigiert man vom Standardbildschirm des Senders zur entsprechenden Telemetrieseite und sieht dort die Programmausgabe(n)

Ich hoffe, das ist soweit korrekt, wenn nicht, wird editiert ;)
 
Zuletzt bearbeitet:
#6
Hallo Bernd

local function run(event)
-- Scriptinhalt.....
end
return { run=run }

Telemetriescripte lass ich bisher nur innerhalb dieses einfachen Rahmens laufen.
Sie werden bei Aufruf über die Page (long) aktiviert und bleiben dann aktiv ( auch wenn sie aktuell nicht sichtbar sind...)

Hilfreich im Simulator sind die Tasten F6 ( Debug- Konsole) da kann man Fehlermeldungen etwas ausführlicher begutachten
und F7 ( Script neu laden) wenn man das Script editiert hat braucht man die ganze Aufrufprozedur nicht nochmal durchlaufen..

Viel Spass beim Probieren...

Ralf

ps. meine Scripte sind bisher alle nur für OpenTx 2.1
( bzw nur im Simulator auf OpenTx 2.2 gelaufen)
 
Zuletzt bearbeitet:
#7
local function run(event)
-- Scriptinhalt.....
end
return { run=run }
Sie werden bei Aufruf über die Page (long) aktiviert und bleiben dann aktiv ( auch wenn sie aktuell nicht sichtbar sind...)
Danke für die Tips!

"run_func is called periodically when screen is visible"

Bedeutet das, dass "run" immer, auch im Hintergrund, läuft und "run_func" nur bei sichtbarem Fenster?
 
#8
@ Bernd:

Falsch ausgedrückt:
Die Scripte werden geladen und bleiben im Speicher...
( erkennbar am Verfügbaren Speicher in der Debug Konsole)

Das was im Background Task Berechnet wird ist auch (wenn nicht als lokale Variable definiert)
in allen Bildern zu sehen:

Beispiel:

local function bg_func()
-- bg_func is called periodically when screen is not visible
TestV = getTime() --Number of 10ms ticks since the radio was started
Zeit = getValue("clock") --RTC clock [minutes from midnight]
end

Dann ist "TestV" bzw. "Zeit" global definiert und kann z.B. mit
lcd.drawNumber(130,10,TestV,0)
lcd.drawNumber(130,20,Zeit,0)
im run des sichtbaren Telemetriebildes genutzt werden.

Du wolltest doch nur wissen wo du die Berechnungen für deinen Airspeed Sensor ausführen sollst...


Ralf

( Mit "clock" war unter Lua 2.0 die Systemzeit zu ermitteln und wurde damals auch in Stunden:Minuten ausgegeben....)
http://downloads-21.open-tx.org/firmware/lua_fields.txt
ist eine Liste der verfügbaren Lua Felder, damit kann man z.B. Logische Schalter oder Trim-Werte in Lua einlesen...
 
Zuletzt bearbeitet:

midi_7

Erfahrener Benutzer
#9
kurze Zwischenfrage:welche Funktion hat das Y bei ClockY; GV1Y?
 
#10
X = Horizontale Position
Y = Vertikale Position

links oben ist X,Y (0,0)
bei der X9D ist Rechts unten (212,64)

also ClockY ist in meinem Script die Vertikale Position für die Darstellung der Uhrzeit
( Damit brauchst du die Y Position nur einmal definieren und verschiebst die ganze Zeile nach oben oder unten...)

Ralf
 
Zuletzt bearbeitet:
#11
Du wolltest doch nur wissen wo du die Berechnungen für deinen Airspeed Sensor ausführen sollst...
Fast :D, es war die neue LUA Funktion in 2.2, einen Telemetriesensor mit LUA zu generieren, mit Daten zu füttern und dann zu loggen, die mich elektrisiert hat. Damit kann man alles Denkbare berechnen und im Standard-Log integrieren - ein Traum wird wahr!
 

midi_7

Erfahrener Benutzer
#12
hallo Ralf,
vielen Dank, war genau das was ich wissen wollte.
Hab mir dein Beispiel etwas zurechtgeschnitzt, fuktioniert wunderbar.
vielen Dank noch mal
Gruß Michael
 

midi_7

Erfahrener Benutzer
#14
Fast :D, es war die neue LUA Funktion in 2.2, einen Telemetriesensor mit LUA zu generieren, mit Daten zu füttern und dann zu loggen, die mich elektrisiert hat. Damit kann man alles Denkbare berechnen und im Standard-Log integrieren - ein Traum wird wahr!
sollte es damit möglich sein, Flächenmodelle über GPS Daten zu steuern?
D. h. einen autarken "Rückflug" zu generieren?
 
#15
sollte es damit möglich sein, Flächenmodelle über GPS Daten zu steuern?
D. h. einen autarken "Rückflug" zu generieren?
Das wäre schon immer möglich gewesen, nur ist der Regelkreis über die Telemetrie zu langsam und zu unzuverlässig. Das macht man besser mit einem Controler im Modell. Bisher war es "nur" möglich, die Steuereingaben und die Telemetrie zu loggen, mit 2.2 sind noch die logischen Schalter dazugekommen.

Einen PWM Kanal, also die eigentliche Ausgabe des Senders, konnte man nicht loggen - das geht jetzt.
Ein mit LUA berechnetes Ergebnis aus der Telemetrie konnte man nur in einer separaten Datei mit LUA-Mitteln loggen, ohne zeitlichen Bezug zur Hauptlogdatei. Konkret ist für mich die Distanz zwischen Sender und Modell interessant, wenn sich nicht nur das Modell, sondern auch der Pilot/Sender bewegt - und genau so etwas kann man jetzt mit dieser Funktion in der Logdatei aufzeichnen.

Was übrigens auch noch interessant werden könnte: Mit meiner "GPS im Sender"-Technik kann jetzt auch das Modell wissen, wo der Pilot gerade ist, nicht nur umgekehrt. Mal schauen, was da noch kommt. Es bleibt spannend.
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
FPV1

Banggood

Oben Unten