LUA Scripting voor o.a. Taranis

Discussie in 'Multicopters electronica' gestart door Richardoe, 20 aug 2014.

  1. Richardoe

    Richardoe

    Lid geworden:
    15 jun 2014
    Berichten:
    441
    Locatie:
    Omg. Groningen
    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:

    [​IMG]

    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: 17 nov 2015
  2. heyudude

    heyudude

    Lid geworden:
    12 sep 2013
    Berichten:
    4.229
    Locatie:
    Noord-Limburg
    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 ;)
     
  3. topix

    topix

    Lid geworden:
    9 sep 2013
    Berichten:
    2.012
    Locatie:
    zuid-oost Drenthe
    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 :)
     
  4. Richardoe

    Richardoe

    Lid geworden:
    15 jun 2014
    Berichten:
    441
    Locatie:
    Omg. Groningen
  5. topix

    topix

    Lid geworden:
    9 sep 2013
    Berichten:
    2.012
    Locatie:
    zuid-oost Drenthe
    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
     
  6. Richardoe

    Richardoe

    Lid geworden:
    15 jun 2014
    Berichten:
    441
    Locatie:
    Omg. Groningen
    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 :)
     
  7. topix

    topix

    Lid geworden:
    9 sep 2013
    Berichten:
    2.012
    Locatie:
    zuid-oost Drenthe
    Heb de sbus naar cppm mee besteld;) ga wel even zoeken als gaat werken
     
  8. Richardoe

    Richardoe

    Lid geworden:
    15 jun 2014
    Berichten:
    441
    Locatie:
    Omg. Groningen
    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: 24 aug 2014
  9. Maarten112

    Maarten112

    Lid geworden:
    22 feb 2011
    Berichten:
    971
    Locatie:
    Rotterdam
    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!
     
  10. KoekieMonster

    KoekieMonster

    Lid geworden:
    14 nov 2011
    Berichten:
    176
    Locatie:
    Doetinchem
    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.
     
  11. Richardoe

    Richardoe

    Lid geworden:
    15 jun 2014
    Berichten:
    441
    Locatie:
    Omg. Groningen
    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.
     
  12. KoekieMonster

    KoekieMonster

    Lid geworden:
    14 nov 2011
    Berichten:
    176
    Locatie:
    Doetinchem
    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.
     
  13. Richardoe

    Richardoe

    Lid geworden:
    15 jun 2014
    Berichten:
    441
    Locatie:
    Omg. Groningen
    Gebruik je het lua script of de taranis data zelf? En je hebt de naze wel ge armed? Anders wekt het niet (goed)
     
  14. KoekieMonster

    KoekieMonster

    Lid geworden:
    14 nov 2011
    Berichten:
    176
    Locatie:
    Doetinchem
    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)
     
  15. Richardoe

    Richardoe

    Lid geworden:
    15 jun 2014
    Berichten:
    441
    Locatie:
    Omg. Groningen
    Op het naze bordje moet je ook de lipo voltage in hebben, de meest rechtse waar je ook je telemetry ingestoken hebt. Voed je daar de naze32 vanaf de lipo direct?

    Dit laat het goed zien http://youtu.be/Q7KpBGDxZQ4
     
  16. KoekieMonster

    KoekieMonster

    Lid geworden:
    14 nov 2011
    Berichten:
    176
    Locatie:
    Doetinchem
    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: 25 sep 2014
  17. Richardoe

    Richardoe

    Lid geworden:
    15 jun 2014
    Berichten:
    441
    Locatie:
    Omg. Groningen
    Versie 0.4

    [​IMG]

    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 }
    
     
  18. m00st

    m00st

    Lid geworden:
    1 sep 2013
    Berichten:
    1.142
    Locatie:
    regio Den Haag
    Heel mooi Richard! Als in eens geld over had voor een Taranis.. :). M'n 9xr doet het nog prima, maar dit is natuurlijk superrrrrr..
     
  19. heyudude

    heyudude

    Lid geworden:
    12 sep 2013
    Berichten:
    4.229
    Locatie:
    Noord-Limburg
    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
     
  20. Richardoe

    Richardoe

    Lid geworden:
    15 jun 2014
    Berichten:
    441
    Locatie:
    Omg. Groningen
    @heyudude, thnx,

    als het goed is kan de taranis niet op telemetry scripting hangen. Maar better safe then sorry.
     

Deel Deze Pagina