LUA Scripting voor o.a. Taranis

Sinds OpenTX 2.0 is het mogelijk om met lua scripting allerlei zaken in de OpenTX te regelen. Aangezien er steeds meer gebruikers zijn van de OpenTX zenders (zoals Taranis) wellicht handig hier je LUA scripts te delen die je gebruikt.

Aftrap:
Script voor telemetry (dus naze32 moet gearmed zijn)
Getest met Naze32 Acro met telemetry enabled voor 3S LIPO
Moet op SD card in folder: /Scripts/<modelname>/telem1.lua
Geeft de RSSI weer, voltage van de 3S lipo met percentage (10,5 als onderwaarde=0%) en de flightmodus (op basis van switch SG) en 2 timers.

Dan krijg je:

full


Code:
local function run(event)
  lcd.drawNumber(210, 10, getValue("rssi"), XXLSIZE)
  lcd.drawText(150, 54, "RSSI ", 0)

  local timer = model.getTimer(0)
  lcd.drawTimer(2, 1, timer.value, MIDSIZE)
  lcd.drawRectangle(0, 0, 34, 14)
  timer = model.getTimer(1)
  lcd.drawTimer(40, 1, timer.value, MIDSIZE)
  lcd.drawRectangle(38, 0, 34, 14)
   if getValue(MIXSRC_SG)<0 then
      lcd.drawText(80,1,"ANGLE MD",0)
   elseif getValue(MIXSRC_SG) == 0 then
      lcd.drawText(80,1,"RATE MD",0)
   else
      lcd.drawText(80,1,"HORIZON MD",0)
   end


   lcd.drawRectangle(78, 0, 65, 40)
   lcd.drawText(80,12,"x-AS: ",0)
   lcd.drawText(120,12,getValue("accx"),0)

   lcd.drawText(80,20,"y-AS: ",0)
   lcd.drawText(120,20,getValue("accy"),0)

   lcd.drawText(80,28,"Z-AS: ",0)
   lcd.drawText(120,28,getValue("accz"),0)


  lcd.drawChannel(11, 29, "cell-sum", LEFT+MIDSIZE)
  local settings = getGeneralSettings()
-- voor 4s hieronder de 10.5 aanpassen naar je onderwaarde bij 4S
-- dus bijv. 13,5 laag en 16,3 hoog, 16,3 -13,5 = 2,8 
-- dan wordt de 50 in dit geval 100/2,8 = 36
-- dus: local percent = (getValue("cell-sum")-13.5)*36

  local percent = (getValue("cell-sum")-10.5)*50
  lcd.drawNumber(35, 45, percent, LEFT+MIDSIZE)
  lcd.drawText(lcd.getLastPos(), 45, "%", MIDSIZE)
  lcd.drawGauge(5, 42, 88, 18, percent, 100)
end

return { run=run }
 
Laatst bewerkt door een moderator:
En ja: eerste aanpassing is reeds doorgevoerd!
Perfect deze manier van scripting: dank!

Een waarschuwing: pas geen parameters aan met LUA scripting die de vliegeigenschappen aanpassen van je quad etc. Als het script niet goed is dan werkt niks meer ;)
 
Kun je je frsky ontvanger direct aan sluiten op de telemetry poort van de naze32 en op de telemetry poort van de ontvanger? Vind dit wel interessant. Moet toch eens de online manual gaan lezen van de ontvanger :)
 
Ah dus toch reden om de lipo voltage op de naze32 aan te sluiten;-).. ben bezig met een fpv flip waar ik veel van deze opties in verwerk meeste is luxe opties en moet toe geven dat meeste luxe dingen vaak gewoon open source zijn ideal:-) ga me hier in verdiepen met een X8R als ik die binnen heb
 
Dat lijkt niet te gaan werken. X8r heb ik ook op mijn F550 ideaal, maar niet voor de naze32. De X8R kent geen ppm dus of speciale kabel nodig of heel veel draden.

Daar komt bij dat telemetry met smart port werkt, wederom ideaal als je met de frsky voltmeter en gps etc werkt. Maar zover ik kan vinden werkt die niet met telemetry vd naze32

Daarom overgestapt naar d4r-II heeft en ppm en kan telemetrie overbrengen, en scheelt 12 gram gewicht :-)
 
Versie 2.0

Nieuwe versie, detecteert nu zelf aantal cellen van de lipo en geeft dat weer in scherm voor dubbelcheck, waarden kan je bovenin het script zelf aanpassen (low en high voltage)

Tips of adviezen, laat het me weten.
Moet op SD card in folder: /Scripts/<modelname>/telem1.lua
Getest met OpenTX 2.08

Code:
-- versie 2.0 auto  lipo cell detectie.
local function run(event)

-- De 0% van de 2S, 3S of 4S, deze kan je zelf instellen zoals je wilt.
local four_low=13.5
local three_low=10.2
local two_low=6.9

-- De 100% van de 2S, 3S of 4S, deze kan je zelf instellen zoals je wilt.
local four_high=16.5
local three_high=12.5
local two_high=8.5

-- Hieronder geen aanpassingen nodig. 

local battype = 3
local battypestr="_S"
local percent=0
local batt_sum = getValue("cell-sum")

   if batt_sum>3 then
    battype=math.ceil(batt_sum/4.25)
	if battype==4 then
	  battypestr="4S"
	  percent = (batt_sum-four_low)*(100/(four_high-four_low))
	end
	if battype==3 then
	  battypestr="3S"
	  percent = (batt_sum-three_low)*(100/(three_high-three_low))
	end
	if battype==2 then
	  battypestr="2S"
	  percent = (batt_sum-two_low)*(100/(two_high-two_low))
	end
   end

  lcd.drawNumber(210, 10, getValue("rssi"), XXLSIZE)
  lcd.drawText(175, 54, "RSSI ", 0)

  local timer = model.getTimer(0)
  lcd.drawTimer(2, 1, timer.value, MIDSIZE)
  lcd.drawRectangle(0, 0, 34, 14)
  timer = model.getTimer(1)
  lcd.drawTimer(40, 1, timer.value, MIDSIZE)
  lcd.drawRectangle(38, 0, 34, 14)
   if getValue(MIXSRC_SG)<0 then
      lcd.drawText(80,1,"ANGLE MD",0)
   elseif getValue(MIXSRC_SG) == 0 then
      lcd.drawText(80,1,"RATE MD",0)
   else
      lcd.drawText(80,1,"HORIZON MD",0)
   end

   -- cell_count = math.ceil(filtered_voltage / 4.25)

   lcd.drawRectangle(78, 0, 65, 40)
   lcd.drawText(80,12,"x-AS: ",0)
   lcd.drawText(120,12,getValue("accx"),0)

   lcd.drawText(80,20,"y-AS: ",0)
   lcd.drawText(120,20,getValue("accy"),0)

   lcd.drawText(80,28,"Z-AS: ",0)
   lcd.drawText(120,28,getValue("accz"),0)


  lcd.drawChannel(10, 29, "cell-sum", LEFT+MIDSIZE)
  lcd.drawText(40,29,battypestr,MIDSIZE)
  lcd.drawNumber(35, 45, percent, LEFT+MIDSIZE)
  lcd.drawText(lcd.getLastPos(), 45, "%", MIDSIZE)
  lcd.drawGauge(5, 42, 88, 18, percent, 100)
end

return { run=run }
 
Laatst bewerkt:
Heel gaaf Richard, als ik tijd heb ga ik even de nieuwste openTx in de taranis inladen en eens spelen met LUA scripting! Voor mij wederom de bevestiging dat de Taranis icm OpenTX voor de prijs echt niet te overtreffen is...ben nog elke dag blij met de taranis!
 
Hoihoi, heel erg bedankt voor het script, ziet er uit alsof ik daar wat mee kan. 1 vraagje nog, klopt het dat de naze32 nog geen smart port ondersteund? heb een X8R ontvanger aangesloten maar krijg nog erg weinig telemetry over:P zal eens mijn D4R-II proberen binnenkort, kijken of dat wel werkt.
 
X8r werkt niet standaard inderdaad, de d4r heb ik ook en die werkt uitstekend met naze en telemetry en dit script. Mocht je ideeen hebben mbt script laat maar weten.
 
Hoihoi, ben nu met de D4R-II aan het testen, werkt leuk, behalve dat de spanning welke in de cells waarde heb staan op de taranis maar 1.9-2.0 V is. in baseflight is deze wel netjes 10.5V. enig idee waar dit door komt? moet ik in de naze32 verder nog wat instellen?
Alvast bedankt.
 
Beide. In het lua script is de spanning 1,9V, maar deze spanning haalt hij uit de cells variabele zag ik, deze is is de normale telemetry ook 1,9V. De naze is inderdaad ge-armed, hiervoor krijg ik nog helemaal geen data binnen(behalve rssi en ontvangerspanning)
 
Ik heb idd de + en - vanaf de kabelboom hierop aangesloten, ik meet hier ook de accuspanning met de multimeter. Ook heb ik feature vbat aan. In de baseflight gui(Chrome app) zie ik ook netjes de accuspanning. Dus de naze weet hem wel. De naze is verder gevoed via een step-down naar 5v.

EDIT:
Na enkele malen opnieuw aansluiten van de accu komt er een goede spanning ui"vertrouw het nog niet helemaal dus later even verder testen. Voorlopig werkt het iig. Bedankt voor je hulp=)
 
Laatst bewerkt:
Versie 0.4

f5860508e2.jpg


Visuele wijzigingen, daarom nu ook een paar BMP's nodig.

ZIPFILE: http://www.richardoe.nl/BMP.zip

uitpakken in SCRIPTS folder, dus de bmp files moeten komen in <SDCARD>SCRIPTS\BMP\*
Code hieronder moet op SD card in folder: /Scripts/<modelname>/telem1.lua

Code:
-- ###############################################################
-- #                                                             #
-- #        Telemetry Lua Script Naze32, version 0.4             #
-- #                                                             #
-- #  + naze32 telemetry enabled                                 #
-- #  + tested with D4r-II                                       #
-- #                                                             #
-- #  License (Script & images): Share Alike                     #
-- #  Can be used and changed non commercial	         		 #
-- #                                                             #
-- #  Inspired by SockEye                                        #
-- #  Questions: [email]Richard@hetnet.nl[/email]                               #
-- #                                                             #
-- ###############################################################

local function run(event)

-- The 0% value for 2S, 3S, 4S, you can change these to your own likings.
local four_low=13.5
local three_low=10.2
local two_low=6.9

-- The 100% value for 2S, 3S, 4S, , you can change these to your own likings.
local four_high=16.5
local three_high=12.5
local two_high=8.5

-- NO changes needed below here, except when using different switch for flight mode (I use SG) change line:
--   if getValue(MIXSRC_SG)<0 then

local battype = 3
local battypestr="_S"
local percent=0
local batt_sum = getValue("cell-sum")

   if batt_sum>3 then
    battype=math.ceil(batt_sum/4.25)
	if battype==4 then
	  battypestr="4S"
	  percent = (batt_sum-four_low)*(100/(four_high-four_low))
	end
	if battype==3 then
	  battypestr="3S"
	  percent = (batt_sum-three_low)*(100/(three_high-three_low))
	end
	if battype==2 then
	  battypestr="2S"
	  percent = (batt_sum-two_low)*(100/(two_high-two_low))
	end
   end

--   local percent = 8 -- for simulation only
 
   local myPxHeight = math.floor(percent * 0.37)            	
   local myPxY = 11 + 37 - myPxHeight

   lcd.drawPixmap(3, 1, "/SCRIPTS/BMP/battery.bmp")

   if percent > 0 then
   	lcd.drawFilledRectangle(8, myPxY, 21, myPxHeight, FILL_WHITE ) 
   end

    local i = 36
    while (i > 0) do
    	lcd.drawLine(7, 11 + i, 27, 11 +i, SOLID, GREY_DEFAULT)
    	i= i-2
    end

   if (percent < 15) then
    lcd.drawNumber(4,55, batt_sum * 100  ,PREC2 + LEFT + BLINK)
   else
    lcd.drawNumber(4,55, batt_sum * 100  ,PREC2 + LEFT)
   end
    lcd.drawText(lcd.getLastPos(), 55, "v ", 0)
    lcd.drawText(lcd.getLastPos(), 55,battypestr,0)

-- ###############################################################
-- TIMERS
-- ###############################################################
  local timer = model.getTimer(0)
  lcd.drawText(40, 1, "TIMER1", 0)
  lcd.drawTimer(40, 11, timer.value, MIDSIZE)
  
  timer = model.getTimer(1)
  lcd.drawText(40, 31, "TIMER2", 0)
  lcd.drawTimer(40, 41, timer.value, MIDSIZE)

-- ###############################################################
-- FLIGHTMODE
-- ###############################################################

    lcd.drawPixmap(78, 1, "/SCRIPTS/BMP/fm.bmp")

   if getValue(MIXSRC_SG)<0 then
      lcd.drawText(98,1,"Horizon",MIDSIZE)
   elseif getValue(MIXSRC_SG) == 0 then
      lcd.drawText(98,1,"Acro",MIDSIZE)
   else
      lcd.drawText(98,1,"Angle",MIDSIZE)
   end


-- ###############################################################
-- Displays xyz data
-- ###############################################################
   lcd.drawText(80,31,"x-AS: ",0)
   lcd.drawText(120,31,getValue("accx"),0)

   lcd.drawText(80,40,"y-AS: ",0)
   lcd.drawText(120,40,getValue("accy"),0)

   lcd.drawText(80,49,"Z-AS: ",0)
   lcd.drawText(120,49,getValue("accz"),0)

-- ###############################################################
-- Displays RSSI data
-- ###############################################################
 if getValue("rssi") > 38 then
   percent = ((math.log(getValue("rssi")-28, 10)-1)/(math.log(72, 10)-1))*100
  else
   percent = 0
  end

  if percent > 90 then
   	lcd.drawPixmap(164, 1, "/SCRIPTS/BMP/RSSI10.bmp")
  elseif percent > 80 then
		lcd.drawPixmap(164, 1, "/SCRIPTS/BMP/RSSI09.bmp")
  elseif percent > 70 then
		lcd.drawPixmap(164, 1, "/SCRIPTS/BMP/RSSI08.bmp")
  elseif percent > 60 then
		lcd.drawPixmap(164, 1, "/SCRIPTS/BMP/RSSI07.bmp")
  elseif percent > 50 then
		lcd.drawPixmap(164, 1, "/SCRIPTS/BMP/RSSI06.bmp")
	elseif percent > 40 then
		lcd.drawPixmap(164, 1, "/SCRIPTS/BMP/RSSI05.bmp")
  elseif percent > 30 then
		lcd.drawPixmap(164, 1, "/SCRIPTS/BMP/RSSI04.bmp")
  elseif percent > 20 then
		lcd.drawPixmap(164, 1, "/SCRIPTS/BMP/RSSI03.bmp")
  elseif percent > 10 then
		lcd.drawPixmap(164, 1, "/SCRIPTS/BMP/RSSI02.bmp")
  elseif percent > 0 then
		lcd.drawPixmap(164, 1, "/SCRIPTS/BMP/RSSI01.bmp")
  else
    lcd.drawPixmap(164, 1, "/SCRIPTS/BMP/RSSI00.bmp")
  end

  lcd.drawChannel(178, 55, 200, LEFT)
  lcd.drawText(lcd.getLastPos(), 56, "dB", SMLSIZE)


end

return { run=run }
 
Knap gedaan hoor Richard
Zal het na morgen eens installeren

Tip: test het eerst uit thuis achter de buis! Is een LUA script fout "hangt" de Taranis
 
Back
Top