OTX LUA Scripts zum testen

Moin,
hat jemand ein Beispiel wie man bei OpenTX 2.1 sich die GPS Position von der Zaggometry anzeigen lassen kann?
Die Satelieten und die Qualität hab ich schon mit Tmp1 und Tmp2 herausgefunden und funktioniert.
Nur das Auslesen und anzeigen von z.B.
Code:
local LatPos = getValue("latitude")                      local LatHome = getValue("pilot-latitude")                
local LonPos =  getValue("longitude")                 
local LonHome = getValue("pilot-longitude")
lcd.drawText(55,2, "LatPos" , 0)
Wird nur 0 Angezeigt.
Beim Scannen von Sensoren werden die GPS Daten angezeigt.

Gruß Ingo
 
So ich habe in der PDF "opentx-lua-reference-guide" ein Beispiel für GPS gefunden.
Abgespeichert unter /SCRIPTS/TELEMETRY/gps.lua gespeichert und in der Taranis nach Sensoren gesucht.
Und siehe Da dann wird mir die GPS Position angezeigt. :cool:
Hier das Script
Code:
local gpsValue = "unknown"

local function rnd(v,d)
    if d then
        return math.floor((v*10^d)+0.5)/(10^d)
    else
        return math.floor(v+0.5)
    end
end

local function getTelemetryId(name)
    field = getFieldInfo(name)
    if field then
        return field.id
    else
        return -1
    end
end

local function init()
    gpsId = getTelemetryId("GPS")
end

local function background()
    gpsLatLon = getValue(gpsId)
    if (type(gpsLatLon) == "table") then
        gpsValue = rnd(gpsLatLon["lat"],4) .. ", " .. rnd(gpsLatLon["lon"],4)
    else
        gpsValue = "not currently available"
    end
end

local function run(e)
    lcd.clear()
    background() -- update current GPS position
    lcd.drawText(1,1,"OpenTX 2.1 GPS example",0)
    lcd.drawText(1,11,"GPS:", 0)
    lcd.drawText(lcd.getLastPos()+2,11,gpsValue,0)
end

return{init=init,run=run,background=background}
 

beta

Neuer Benutzer
Ich habe da mal ne Frage:
Ich will aus dem Heading die Himmelsrichtung berechnen. Dazu habe ich ein Array mit den ganzen Namen und die will ich in drawText() ausgeben. ich bekomme aber einen syntax error. was mach ich falsch? Ich steht wahrscheinlich selbst am Schlauch...

Code:
   local heading = getValue("Hdg")
   local direction = 0
   local dirarray = {"N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW", "N"}
   
   direction = math.floor((heading + 11.25)/22.5)+1
   
   lcd.drawText(lcd.getLastPos(), 55, dirarray[direction], SMLSIZE, 0)
Edit: Ich habs jetzt mit einer if-Schleife gelöst. Aber ich würde trotzdem gerne wissen warum das so nicht ging. :)
 
Zuletzt bearbeitet:

strgaltdel

Erfahrener Benutzer
Hi,

dein Coding gibt den Fehler nicht her
habe mal versucht das ganze nachzustellen

Code:
local function run(event)

   local i
   local heading = getValue("Hdg")
   local direction = 0
   local dirarray = {"N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW", "N"}

   lcd.clear()
   for i=0, 15, 1 do
     direction = math.floor((i * (360/16))/22.5)+1  
     lcd.drawText(i*16, 20, dirarray[direction], SMLSIZE)
  end

end
   
return {init=init, run=run }

das läuft problemos durch
was genau ist die Fehlermeldung im debugger ?
 

beta

Neuer Benutzer
Die Taranis meldet "Script Syntax Fehler [...] bad argument #3 to 'drawText' (string"
Das dürfte also
Code:
dirarray[direction]
betreffen. Wenn man jetzt testweise
Code:
dirarray[4]
nimmt, dann funktioniert es.
Wie gesagt mit der If-Schleife gehts jetzt. Ist natürlich unschön gelöst aber ok.
 
Die Taranis meldet "Script Syntax Fehler [...] bad argument #3 to 'drawText' (string"
Das dürfte also
Code:
dirarray[direction]
betreffen. Wenn man jetzt testweise
Code:
dirarray[4]
nimmt, dann funktioniert es.
Wie gesagt mit der If-Schleife gehts jetzt. Ist natürlich unschön gelöst aber ok.
Da mein OpenXsensor GPS jetzt läuft und ich auch Interesse an der Anzeige der Himmelsrichtung habe hier mal mein Versuch für Version 2.1: ( Danke für eure Vorlagen )

local function run(event)
local heading = getValue("Hdg")
local direction = 0
local dirarray = {"N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW", "N"}

lcd.clear() -- Display löschen

lcd.drawText(10, 20, heading, SMLSIZE) -- Heading in Grad
direction = math.floor((heading + 11.25)/22.5)+1
lcd.drawText(10, 50, dirarray[direction], SMLSIZE) -- Richtung
end
return { run=run }


Zumindest im Simulator funktioniert es einwandfrei, ich denke du hast nur irgendwo einen Tippfehler...( vermutlich im drawText 2x Grössendefinition: smlsize ,0 )
Hdg muss jedoch als "Variable" in den Telemetrieeinstellungen definiert sein, sonst ist der angezeigte Wert immer 0 bzw. N.

Ralf
 
Zuletzt bearbeitet:
Die Taranis meldet "Script Syntax Fehler [...] bad argument #3 to 'drawText' (string"
Das dürfte also
Code:
dirarray[direction]
betreffen. Wenn man jetzt testweise
Code:
dirarray[4]
nimmt, dann funktioniert es.
Hab jetzt mit dem Simulator noch etwas rumgespielt, der Fehler kommt bei mir wenn Hdg Werte kleiner -11,25° bzw. >371,25° liefert.

D.H. wenn die Berechnung Werte liefert für die im Array keine Felder mehr definiert sind.

Frage ist jetzt welchen Wert dein Sender als Ersatzwert vom GPS empfängt solange dieses noch keine gültigen Daten liefert.
kommt wie beim OpenXSensor GPS der Wert 0 ist die Welt in Ordnung.
Wird irgendeine Zeichenkette gesendet ("***" oder "###" oder "999" oder "---" oder.... es gibt da leider die verschiedensten Variationen) musst du vor der Berechnung den Wert auf Gültigkeit ( 0..360°) prüfen.

Ralf
 

beta

Neuer Benutzer
Das klingt natürlich plausibel.
Und mit meiner If-Schleife hab ich dann den Zustand abgefangen. Deshalb ging es da dann.
Vielen Dank für die Erklärung. Es ist mir immer viel wert zu wissen warum etwas nicht geht.
 
So ich habe in der PDF "opentx-lua-reference-guide" ein Beispiel für GPS gefunden.
Abgespeichert unter /SCRIPTS/TELEMETRY/gps.lua gespeichert und in der Taranis nach Sensoren gesucht.
Und siehe Da dann wird mir die GPS Position angezeigt. :cool:
Hier das Script
Code:
local gpsValue = "unknown"

local function rnd(v,d)
    if d then
        return math.floor((v*10^d)+0.5)/(10^d)
    else
        return math.floor(v+0.5)
    end
end

local function getTelemetryId(name)
    field = getFieldInfo(name)
    if field then
        return field.id
    else
        return -1
    end
end

local function init()
    gpsId = getTelemetryId("GPS")
end

local function background()
    gpsLatLon = getValue(gpsId)
    if (type(gpsLatLon) == "table") then
        gpsValue = rnd(gpsLatLon["lat"],4) .. ", " .. rnd(gpsLatLon["lon"],4)
    else
        gpsValue = "not currently available"
    end
end

local function run(e)
    lcd.clear()
    background() -- update current GPS position
    lcd.drawText(1,1,"OpenTX 2.1 GPS example",0)
    lcd.drawText(1,11,"GPS:", 0)
    lcd.drawText(lcd.getLastPos()+2,11,gpsValue,0)
end

return{init=init,run=run,background=background}
nach dem ausschalten des Copters werden die GPS-Daten nicht mehr angezeigt? Jedoch bei der Nummern-Telemetrie Taranis bleiben die Daten erhalten...
 
​Hallo
ich weis nicht ob das hier her passt, wenn nicht sorry, ich weis auch nicht wieviele Heli Piloten es hier gibt, aber ich denke das
ist mal ein Ansatz.
Update für Heli

sollte jetzt unter 2.2 laufen, wer es zum laufen bringen möchte unter 2.1.9, muss leider in den einzeln Dateien von

Heli.lua, plane.lua, multi.lua und delta.lua eine Zeile verändern.

Ich vermute man muss das wieder " lcd.lock () " hinzufügen, was in der 2.2 nicht benötigt wird.

kleiner Ausschnitt aus der heli.lua ziemlich am ende zu finden im Script.

-- Main
local function run(event)
if event == nil then
error("Kann nicht als Modell-Skript ausgefuehrt werden!")
end
--lcd.lock()
if page == THROTTLE_PAGE then
throttleMenu(event)

ich hoffe ich habe nix vergessen 3-4 Zuordnungen stimmen noch nicht versuche,

es bis zum Wochenende fertig zu bekommen, ich finde das es dann ziemlich brauch bar wäre

Anhang anzeigen WIZARD.ZIP

Gruß Mario
 

midi_7

Erfahrener Benutzer
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
 
https://www.gitbook.com/book/dsbeach/opentx-lua-reference-guide/details

Allgemeine Anleitung zu Lua für OpenTx 2.1

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
 
Zuletzt bearbeitet:
Mit lua Scrips habe ich noch nicht viel Erfahrungen, möchte aber das Beispiel nutzen um mich damit zu befassen.
Ich würde mich da gerne dranhängen und schlage vor, dass du einen neuen Thread mit einem aussagefähigen Titel aufmachst. Sicher haben noch mehr Kollegen Interesse, so eine Anwendung von Null an entstehen zu sehen. Außer dummen Fragen kann ich vielleicht eine Information beitragen, die mir so auch nicht klar war:

Die LUA-Option in den Companion-Settings braucht man nur für die (gefährlichen) Mixer-scripts. Die Telemetrie-scripts, wie das hier, gehen immer.
 
Die LUA-Option in den Companion-Settings braucht man nur für die (gefährlichen) Mixer-scripts. Die Telemetrie-scripts, wie das hier, gehen immer.
Die Info ist mir neu.
unter OpenTx 2.0.x musste man Lua aktiveren damit die Telemetriescripte gingen.
ist das jetzt ab 2.2 so (kann es im Moment nicht probieren...) damit die Einstellscripte für die S-Empfänger immer funktionieren?

Gruß aus China

Ralf
 
Genaueres weiß ich nicht, aber der Wizzard ist ja auch ein LUA-Script und funktioniert (schon länger?) ohne die LUA-Option.

Bring was Schönes mit!
 
FPV1

Banggood

Oben Unten