Ankündigung

Einklappen
Keine Ankündigung bisher.

FrSky X10S OpenTX lua scripts

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • lawww
    Member
    • 04.01.2018
    • 366
    • Lars
    • Schwalm-Eder-Kreis
    • 85
    • 71

    FrSky X10S OpenTX lua scripts

    Hallo,

    ich habe mich heute mal etwas mit lua Skripten beschäftigt, ich möchte letztlich Warnmeldungen ansagen lassen, wenn gewissen Schwellen bzgl. der verbrauchten Kapazität verbraucht sind. Die Daten bekomme ich von meinem Telemetriesensor.

    Ich habe aber ein grundlegendes Problem lua Skripte zum Laufen zu bringen. Egal ob im Companion oder direkt auf dem Sender. Egal ob selbsterstellte oder heruntergeladene Beispiele.

    Ich habe in OpenTx (2.2.1) natürlich lua bei den Optionen angehakt. Ich habe verschieden Typen von Skripten probiert: Telemetrie, Funktionen und Mixes. Aber egal was ich mache, ich bekomme überhaupt keine Rückmeldung. Keine Ansage, keine Fehler, nichts. Selbst wenn ich ein Skript über die Funktionen durch einen Schalter ausführen lasse: gar nichts...

    Ich bin da jetzt wirklich ratlos, habe jede Menge Tutorials und Anleitungen durchgesehen, aber ich komme nicht weiter. Es muss ja etwas grundlegendes fehlen...

    Habt ihr Tips für mich, was ich kontrollieren kann?

    Vielen Dank und viele Grüße
    Lars
  • tom555
    Member
    • 13.01.2008
    • 128
    • Thomas
    • Düsseldorf, NRW
    • 7
    • 7

    #2
    AW: FrSky X10S OpenTX lua scripts

    Hallo Lars,

    ich weiß nicht, wo deine Probleme liegen, daher hier ein paar allgemeine Information und ein einfaches Beispiel für ein Telemetrie Widget.

    Opentx 2.2.1 benutzt für Telemetrie z.B. Widgtes, was recht elegant funktioniert.

    Lua hast du schon als Option gewählt; luac kannst du auch auswählen, ist aber nicht nötig.
    Wenn du ein Telemetrie Widget in Companion machst (z.B. WIDGETS\meinwidget\main.lua), und dann die Simulation aufrufts, macht Companion ein main.luac, wann der Compilier-Vorgang erfolgreich war.
    Bei opentx wirst du kein main.luac sehen, wenn du nicht vorher luac ausgewählt hast. Opentx compiliert das main.lua File, wenn ein Modell ausgewählt wird bzw. der Sender eingeschaltet wird und führt das Widget aus.

    Viele gute Informationen zum opentx 2.2.1 API findest du unter:
    OpenTX 2.2 Lua Reference Guide · OpenTX 2.2 Lua Reference Guide

    Hier ist das kleine einfache Beispiel für ein Telemetrie Widget. Zum Editieren kann man sehr gut z.B. den Notepad++ benutzen. Das Widget passt eigentlich nur in die oberste Zeit; dafür habe ich es gemacht.

    Es geht bestimmt eleganter.

    Wie bekommt man es zu laufen:
    a) Das Skript unten als main.lua speicher, z.B. Notepad++
    b) In opentx unter WIDGET noch einen Odner machen, z.B. Hoehe und in diesem das main.lua speichern.
    c) Im Sender dann Telemetrie auswählen und dann das Widget -Höhe- (oberste Zeile)
    d) Wichtig: Im Telemetrie Menü ist -Alt- aus Höhe-Output des Unisense-E definiert. Man dies auch in dem Skript entsprechend ändern.

    Grüße
    tom555

    PS: Ich habe auch ein deutlich größeres Skript geschrieben, das ich teilen kann, aber noch nicht viel getestet, daher nur als PN.

    Code:
    local x_offset_text = 0
    local y_offset_sm_text = 0
    local y_offset_md_text = 15
    
    
    -- colour variables
    local light_green 
    local green 
    local dark_green 
    local orange 
    local red 
    local dark_red
    local light_blue
    local blue 
    local dark_blue
    
    
    local options = {
    --	wird nicht benötigt
    }
    
    function create(zone, options)
    	
    	local thisZone  = {zone=zone, options=options}
    	return thisZone
    	
    end
    
    function update(thisZone, options)
    
      thisZone.options = options
      
    end
    
    -- colour definition
    local function color_def()
    
    	light_green = lcd.RGB(0, 248, 0)
    	green = lcd.RGB(0, 196, 0)
    	dark_green = lcd.RGB(0, 140, 0)
    	orange = lcd.RGB(248, 150, 0)
    	red = lcd.RGB(248, 0, 0)
    	light_blue = lcd.RGB(0, 188, 248)
    	blue = lcd.RGB(0, 00, 248)
    	dark_blue = lcd.RGB(0, 0, 90)
    	
    end
    
     -- round function
     function round(num, numDecimalPlaces)
     
        local mult = 10^(numDecimalPlaces or 0)
       
       if num >= 0 then 
    		return math.floor(num * mult + 0.5) / mult
        else 
    		return math.ceil(num * mult - 0.5) / mult 
    	end
    	
    end
     
    -- Höhe
    local function update_alt(thisZone)
    	
    	local x0 = thisZone.zone.x 
    	local y0 = thisZone.zone.y 
    	local hoehe
    	local valTxt
    	local text
    
    	hoehe = getValue("Alt") - This is defined in the Telemetry menue as -Höhe- output from Unisense-E
    	hoehe = round(hoehe, 1)
    	
    	lcd.drawText(x0 + x_offset_text, y0 + y_offset_sm_text, "H" .. string.char(155) .. "he", SMLSIZE)
    	text = hoehe 
    	lcd.drawText(x0 + x_offset_text, y0 + y_offset_md_text, text, MIDSIZE)
    	lcd.setColor(TEXT_COLOR, BLACK)	
    	
    end
    
    
    local function background(thisZone)
    --  hier wird nichts benötigt
    	return
    end
    
    local function refresh(thisZone)
    
    	color_def()
    	update_alt(thisZone)
    
    end
    
    return { name="H" .. string.char(155) .. "he", options=options, create=create, update=update, refresh=refresh, background=background }
    Zuletzt geändert von JMalberg; 22.01.2018, 11:05.
    VooDoo 400, Spirit Pro, Jeti DS-12 & Frsky HORUS X12S (opentx 2.2.1)

    Kommentar

    • lawww
      Member
      • 04.01.2018
      • 366
      • Lars
      • Schwalm-Eder-Kreis
      • 85
      • 71

      #3
      AW: FrSky X10S OpenTX lua scripts

      Vielen Dank, Tom.

      Wie genau funktioniert das dann, wenn ich luac nicht aktiv habe?

      Kannst Du mir noch einen Tipp geben, wie ich es einrichte, wenn ich kein Widget brauche? Ich möchte ja nichts anzeigen, sondern nur etwas per Sound ausgeben, dann muss das doch eigentlich einfacher gehen, oder?

      Ich habe mir soetwas vorgestellt (mal die einfachste Version):

      local function init_func()
      end

      local function run_func()

      local mah =getValue(-A4-)
      local warn = 1000

      if mah > warn then
      playNumber(mah,14,0)
      end
      return
      end
      return {run=run_func,init=init_func}


      Danke
      Lars

      Kommentar

      • tom555
        Member
        • 13.01.2008
        • 128
        • Thomas
        • Düsseldorf, NRW
        • 7
        • 7

        #4
        AW: FrSky X10S OpenTX lua scripts

        Ich denke, das wäre ein Widget.

        Du brauchen ein Skript, das ständig im Hintergrund läuft und ständig den Wert "A4" abfragt.
        Zusätzlich hast auch eine visuelle Ausgabe.

        Versuch das mal (aus dem Kopf ohne Ausprobieren):

        local x_offset_text = 0
        local y_offset_sm_text = 0
        local y_offset_md_text = 15


        -- colour variables
        local light_green
        local green
        local dark_green
        local orange
        local red
        local dark_red
        local light_blue
        local blue
        local dark_blue


        local options = {
        -- wird nicht benötigt
        }

        function create(zone, options)

        local thisZone = {zone=zone, options=options}
        return thisZone

        end

        function update(thisZone, options)

        thisZone.options = options

        end

        -- colour definition
        local function color_def()

        light_green = lcd.RGB(0, 248, 0)
        green = lcd.RGB(0, 196, 0)
        dark_green = lcd.RGB(0, 140, 0)
        orange = lcd.RGB(248, 150, 0)
        red = lcd.RGB(248, 0, 0)
        light_blue = lcd.RGB(0, 188, 248)
        blue = lcd.RGB(0, 00, 248)
        dark_blue = lcd.RGB(0, 0, 90)

        end

        -- round function
        function round(num, numDecimalPlaces)

        local mult = 10^(numDecimalPlaces or 0)

        if num >= 0 then
        return math.floor(num * mult + 0.5) / mult
        else
        return math.ceil(num * mult - 0.5) / mult
        end

        end

        -- Kapazität
        local function update_capacity(thisZone)

        local x0 = thisZone.zone.x
        local y0 = thisZone.zone.y
        local mah
        local valTxt
        local text

        mah = getValue("AA") - Unisense-E Kapazität
        -- hoehe = round(hoehe, 1)

        local warn = 1000

        if mah > warn then
        playNumber(mah,14,0)

        lcd.drawText(x0 + x_offset_text, y0 + y_offset_sm_text, "Kapazität", SMLSIZE
        text = mah
        lcd.drawText(x0 + x_offset_text, y0 + y_offset_md_text, text, MIDSIZE)
        lcd.setColor(TEXT_COLOR, BLACK)

        end


        local function background(thisZone)
        update_capacity(thisZone)
        return
        end

        local function refresh(thisZone)

        color_def()
        update_capacity(thisZone)

        end

        return { name="Kap", options=options, create=create, update=update, refresh=refresh, background=background }
        VooDoo 400, Spirit Pro, Jeti DS-12 & Frsky HORUS X12S (opentx 2.2.1)

        Kommentar

        • tom555
          Member
          • 13.01.2008
          • 128
          • Thomas
          • Düsseldorf, NRW
          • 7
          • 7

          #5
          AW: FrSky X10S OpenTX lua scripts

          Zitat von lawww Beitrag anzeigen
          Wie genau funktioniert das dann, wenn ich luac nicht aktiv habe?
          Wenn du luac auch auswählst, wird main.lua beim Einschalten des Senders bzw. beim auswählen des Modells kompiliert und du findest im Verzeichnis auch main.luac. Wenn du luac nicht auswählst, kompiliert der Sender main.lua bei jedem Einschalten bzw. Auswahl des Modells neu und führt es dann aus.

          Grüße
          tom555
          VooDoo 400, Spirit Pro, Jeti DS-12 & Frsky HORUS X12S (opentx 2.2.1)

          Kommentar

          • catdog79
            Member
            • 28.07.2008
            • 768
            • Tobias
            • 331
            • 32

            #6
            AW: FrSky X10S OpenTX lua scripts

            Zitat von lawww Beitrag anzeigen
            Hallo,

            ich möchte letztlich Warnmeldungen ansagen lassen, wenn gewissen Schwellen bzgl. der verbrauchten Kapazität verbraucht sind. Die Daten bekomme ich von meinem Telemetriesensor.

            Lars
            Für Warnmeldungen ansagen benötigt man doch gar kein Script. Einfach bei Logical Switches den gewünschten Telemetriewert incl. der Warnschwelle anwählen.
            Danach bei Special Funktions den LS nutzen und ein Soundfile deiner Wahl, oder den Wert direkt ansagen lassen.

            Ich hab zwar die Horus X12S, sollte aber bei der X10S auch nicht anderst sein.

            LS.jpg


            Spezial Funktion.jpg
            Zuletzt geändert von catdog79; 21.01.2018, 17:25.
            Goblin 800 Speed/Goblin 570/Goblin 380/Racequads/ FPV Wing/ Horus X10S Express/X-Lite S

            Kommentar

            • Thoemse
              Senior Member
              • 10.01.2016
              • 1090
              • Thomas
              • Vorarlberg, Österreich
              • 421
              • 172

              #7
              AW: FrSky X10S OpenTX lua scripts

              Zitat von catdog79 Beitrag anzeigen
              Für Warnmeldungen ansagen benötigt man doch gar kein Script. Einfach bei Logical Switches den gewünschten Telemetriewert incl. der Warnschwelle anwählen.
              Danach bei Special Funktions den LS nutzen und ein Soundfile deiner Wahl, oder den Wert direkt ansagen lassen.

              Ich hab zwar die Horus X12S, sollte aber bei der X10S auch nicht anderst sein.

              [ATTACH]264286[/ATTACH]


              [ATTACH]264287[/ATTACH]
              Exakt! Ich mache das auch über die logical switches bei meiner X12S.
              Ich habe für jeden Heli drei Ansagen hinterlegt.
              Ich habe übrigens nicht play track sondern play value bei mir. Dann sagt er eben: 3000 millamp hours (habe Amber Sounds).
              Ich habe zusätzlich noch einen Schalter bei dem ich nach Bedarf abfragen kann. Dann sagt sie mir die genaue aktuelle Verbrauchszahl.
              Funktioniert absolut klasse und verlässlich.
              Kingtech KT-800, T-Rex 700X, Tarot 550, Bell 222 (600), MD500E (450), Devil 380

              Kommentar

              • tom555
                Member
                • 13.01.2008
                • 128
                • Thomas
                • Düsseldorf, NRW
                • 7
                • 7

                #8
                AW: FrSky X10S OpenTX lua scripts

                Hallo,

                das geht natürlich. Ich dachte, Lars wollte etwas mit den LUA Skripten experimentieren.

                Grüße
                tom555
                VooDoo 400, Spirit Pro, Jeti DS-12 & Frsky HORUS X12S (opentx 2.2.1)

                Kommentar

                • lawww
                  Member
                  • 04.01.2018
                  • 366
                  • Lars
                  • Schwalm-Eder-Kreis
                  • 85
                  • 71

                  #9
                  AW: FrSky X10S OpenTX lua scripts

                  Hallo zusammen.

                  Ihr habt alle Recht. So habe ich das auch gemacht und natürlich funktioniert das. Aber wie Tom schreibt, möchte ich mich an die lua Skripte rantasten und damit experimentieren. Dazu habe ich mir das als ersten Versuch ausgesucht, da hier keine Anzeigen etc. notwenig sind und auch sonst nicht viel gemacht werden muss, quasi ein -Hello World- mit Werten.

                  Im nächsten Schritt könnte ich mir vorstellen je nach Verbrauch in unterschiedlichen Intervallen oder mit unterschiedlichen Warnmeldungen zu verfeinern, und ggf. Noch andere Telemetriewerte einzubeziehen. Ja, auch das geht noch alles mit logischen Schaltern und Funktionen, wird dann aber schnell unübersichtlich. Z.B. könnte man die Warnschwelle abhängig vom durchschnittlichen Verbrauch oder der Spannungslage der Zellen oder der Temperatur anpassen. Auch gehen irgendwann die globalen Variablen aus, wenn man diese nutzen möchte...

                  Bitte keine Diskussion, ob das sinnvoll ist, mir geht es darum mich mit lua in openTX auseinanderzusetzen und es zu lernen. Da müssen die Beispiele nicht immer sinnvoll sein...

                  Danke dennoch für Eure Hinweise, denn für den von mir gewählten simplen Fall ist das natürlich die richtige Vorgehensweise!

                  Viele Grüße
                  Lars

                  Kommentar

                  • lawww
                    Member
                    • 04.01.2018
                    • 366
                    • Lars
                    • Schwalm-Eder-Kreis
                    • 85
                    • 71

                    #10
                    AW: FrSky X10S OpenTX lua scripts

                    Ha, ich habe es hinbekommen. Danke, vor allem an Tom!

                    Was muss man beachten:
                    1. natürlich korrekten Editor verwenden! Ich hatte durch copy-paste falsche unicode Zeichen und wurde nicht gewarnt, dass hier nicht im eingestellten Encoding gespeichert wurde...
                    2. Telemetrie Scripte werden in der Horus (X10S) nicht ausgeführt, hier muss über die Widgets gearbeitet werden.
                    3. Mixes funktionieren auch, müssen dann aber in dem Punkt LUA Scripte im Modell auch ausgewählt werden. Diese werden nicht beim Laden automatisch ausgeführt, sondern nur, wenn sie pro Modell gewählt sind (eigentlich logisch!).

                    In Mixes funktioniert nun dieses Script als einfachste Variante, wenn im Modell aktiviert:


                    local function init_func()
                    end

                    local function run_func()

                    local mah =getValue("A4")
                    local warn = 100

                    if mah > warn then
                    playNumber(mah,14,0)
                    end
                    return 0
                    end
                    return {run=run_func,init=init_func}


                    Aber Achtung: die Ansage erfolgt nun dauerhaft, hier muss natürlich noch ein Intervall eingebaut werden... Es ging mir erstmal darum, es überhaupt zum Laufen zu bekommen!

                    Alternativ kann es natürlich wie von Tom vorgeschlagen in die Background Funktion eines Widgets eingefügt werden, dann muss das Widget aber in der Telemetrie auch ausgewählt sein, damit es geladen und ausgeführt wird.

                    Viele Grüße
                    Lars

                    Kommentar

                    Lädt...
                    X