FLVSS Sensor in LUA Skript abfragen

Status
Nicht offen für weitere Antworten.

bruchpilot05

Erfahrener Benutzer
#1
Hallo Leute
ich habe nur den FrSky FLVSS Sensor an einem X6R und möchte gern die Gesamtspannung in einem LUA Skript darstellen. Das geht aber leider nicht und führt zum Fehler beim Skript. "Cmin", "Cdif" und Einzelzellen geht aber.
Ich verwende OpenTX 2.1.

Hier mal mein kleines Script mit Fehler:

local cellValue = "unknown"
local cellResult = nil
local cellID = nil

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


local function init()
cellId = getTelemetryId("Cels")
end
local function background()
cellResult = getValue(cellId)
if (type(cellResult) == "table") then
cellValue = ""
for i, v in ipairs(cellResult) do
cellValue = cellValue .. i .. ": " .. v .. " "
end
else
cellValue = "telemetry not available"
end
end
local function run(e)
background()
lcd.clear()
lcd.drawText(1,1,"OpenTX 2.1 cell voltage example",0)
lcd.drawText(1,11,"Cels:", 0)
lcd.drawText(lcd.getLastPos()+2,11,cellValue,0)

local celsid = getTelemetryId("Cels")
lcd.drawText(38,25, "Cels: ",SMLSIZE)
lcd.drawText(lcd.getLastPos(), 25, getValue(celsid), SMLSIZE)
lcd.drawText(lcd.getLastPos(), 25, 'V', 0)

local cminid = getTelemetryId("Cmin")
lcd.drawText(38,40, "Cmin: ",SMLSIZE)
lcd.drawText(lcd.getLastPos(), 40, getValue(cminid), SMLSIZE)
lcd.drawText(lcd.getLastPos(), 40, 'V', 0)

local cdifid = getTelemetryId("Cdif")
lcd.drawText(38,55, "Cdif: ",SMLSIZE,0)
lcd.drawText(lcd.getLastPos(), 55, getValue(cdifid), SMLSIZE)
lcd.drawText(lcd.getLastPos(), 55, 'V', 0)
end
return{init=init,run=run,background=background}


Der Fehler liegt in der Zeile:
lcd.drawText(lcd.getLastPos(), 25, getValue(celsid), SMLSIZE)

Wenn ich die Zeile deaktiviere, geht der Rest. (Siehe Anhang)

In der Taranis wird die Gesamtspannung beim Sensor "Cels" richtig angezeigt.


Und ich habe noch ein 2. Problem. In einem anderen Skript verwende ich diese Zeilen um den Strom darzustellen.

local currentid = getTelemetryId("Curr")
lcd.drawText(38,45, "Curr: ",SMLSIZE)
lcd.drawText(lcd.getLastPos(), 41, getValue(currentid), MIDSIZE)
lcd.drawText(lcd.getLastPos(), 45, 'A', 0)

Dabei wird auch der Strom angezeigt, aber es werden oft sehr vielen Stellen hinter dem Komma angezeigt. In der Sensoreinstellung in der Taranis ist der Strom aber mit nur einer Stelle nach dem Komma eingestellt und angezeigt (so wie ich es will). Woran kann das liegen? Oder kann man irgendwie die Stellen nach dem Komma begrenzen?

Ich hoffe, jemand kann mir helfen.

Gruß Stefan
 

Anhänge

Leo1962

Erfahrener Benutzer
#2
@Stefan

Hast du einen bestimmten Grund das in LUA zu machen?

Das geht ganz einfach schon im Telemetrie Menü
Mit definiren der einzelnen Zellen kannst du jede einzelne an schauen
zb Zel1 Berechnen Zelle Cels Zelle 1
Zel2 Berechnen zell Cels Zelle 2
usw

Du kannst auch Mit Zel- Berechnen Min Zel1 Zel2 Ze3 -- V 2 die tiefste Einzel ziele afragen die verwende ich zb um die werte so ab 3.5 v und bei 3.3 als warnugen an zu sagen. So werde ich gewarnt auch dann wenn nur eine Zelle absinkt und mit der gesamt V zahl ascheined noch genügen Sanft vorhanden wäre.

In den logischen Schaltern kannst du dir dann die Bedingungen berechnen lassen um dise zb ansagen zu lassen in den spezial Funktionen läst du dier den den entsprechenden Sund ansagen..




aber auch
 

bruchpilot05

Erfahrener Benutzer
#3
Ja die Möglichkeiten mit den einzelnen Zellen und ZelleMin sind mir bekannt. Ich wollte nur ein Lua Script nutzen, in dem die gesamte Spannung gebraucht wird. Normalerweise ist das VFAS, aber den Sensor habe ich nicht.
 

wolepo

Erfahrener Benutzer
#4
Hallo,
der FrSky FLVSS Sensor zeigt doch die Gesamt- und die Einzelspannungen. Liefert er diese nicht mit in den Telemetriedaten?
 

bruchpilot05

Erfahrener Benutzer
#5
Doch, die gesamte Spannung wird in der Taranis bei Cels angezeigt, aber das Lua Script kann mit Cels nichts anfangen. Auch wenn ich den Sensor in Cell umbenenne und mir den im Lua Script anzeigen will, geht es nicht. Alle anderen Sensoren, auch Cmin lassen sich im Lua anzeigen. Ich denke Cels schickt mehr Daten als nur die gesamte Spannung mit. Und das kann im Lua Script nicht richtig ausgewertet werden.
 

bruchpilot05

Erfahrener Benutzer
#7
Dieses Beispiel habe ich probiert und Cmin und cdiff eingefügt, siehe mein Anhang im 1. Post. Da wird original nicht die Gesamtspannung abgefragt, nur die einzelnen Zellen. Habe dort versucht Cels abzufragen, da wird aber nichts angezeigt.
 

QuadCrash

Erfahrener Benutzer
#8
Ich denke, da ist nur ein Tippfehler drin ... Definiert wird oben u.a. cellID. Verwendet wird dann getValue(celsID), die Variable ist aber nicht definiert, deshalb wohl der Fehler im Script.
 

bruchpilot05

Erfahrener Benutzer
#9
Danke für deine Antwort. Habe gerade nochmal bissel rumprobiert, ohne Erfolg.
Habe celsID jetzt oben am Anfang des Scriptes definiert.

Als Fehler in der Taranis kommt:
Script Syntax Fehler
TELEMETRY/new 1.lu:42
bad argument #3 to 'draw Text' (string ex

Vielleicht kann ja jemand damit etwas anfangen?
 
#10
Hallo Bruchpilot, hatte dieses Problem auch.
Meine Lösung
Neuen Sensor hinzufügen Typ - Berechnung, Formel - Addieren, Einheit - V, Quelle1 - Cels
die Erstellung funktioniert also genau wie bei der Anzeige von Einzelzellen.
Den Sensor habe ich Akku genannt. Hast jetzt also in der Telemetrie zwei mal die Gesammtspannung. (Cels und Akku)
Wenn du im Script jetzt Akku als Quelle einträgst, zeig es den berechneten Wert an.
 
#11
Und ich habe noch ein 2. Problem. In einem anderen Skript verwende ich diese Zeilen um den Strom darzustellen.

local currentid = getTelemetryId("Curr")
lcd.drawText(38,45, "Curr: ",SMLSIZE)
lcd.drawText(lcd.getLastPos(), 41, getValue(currentid), MIDSIZE)
lcd.drawText(lcd.getLastPos(), 45, 'A', 0)
Bei deinem 2. Problem, bin ich mir nicht ganz sicher. Aber probiere einmal im Script in der dritte Zeile folgendes aus.
lcd.drawText(lcd.getLastPos(), 41, getValue(currentid), PREC1 + MIDSIZE)
Mit dem PRECI1 sollte nur eine Stelle nach dem Komma angezeigt werden.
PRECI2 dann also logischerweise zwei Stellen.
 

bruchpilot05

Erfahrener Benutzer
#13
Danke, das klingt nach einer Lösung. Wenn ich heut abend zeit habe, werde ich mal ein neuen Sensor erstellen.
Mein zweites Problem habe ich mittlerweile in Griff bekommen. Hatte auch schon mit Prec2 probiert, aber das reichte glaube ich nicht. Ich schau heut abend nochmal ins Script und berichte. Der Wert musste glaube ich dann noch mit 100 multipliziert werden.
 
#15
Denke das bringt nichts. Cels wird von Lua irgendwie nicht erkannt und nicht angezeigt, egal wie du das benennst und auch wenn der Name im Script gleich ist.
 

QuadCrash

Erfahrener Benutzer
#16
Sieht wohl so aus ... "Cels" sollte aber schon funktionieren, weil das der Standardname des Sensors ist. Es sei denn, der Sensor wurde umbenannt, aber das wissen wir ja nicht.
 

bruchpilot05

Erfahrener Benutzer
#17
Also den Sensor habe ich nicht umbenannt, der heißt immer noch "Cels". Ich hatte ihn mal in "Cell" umbenannt, ohne Erfolg.
Die Variante mit dem neuen Sensor ("Akku", Berechnung aus "Cels") funktioniert auf Anhieb.
Vielen Dank.
Warum es mit "Cels" nicht geht, kann ich mir immer noch nicht erklären. Vielleicht hängen dort doch mehr Daten dran. Ansonsten könnte ja das Beispielscript von Seite 138 nicht die einzelnen Zellen aus "Cels" herleiten.

Mein 2. Problem habe ich jetzt so gelöst:

local currentid = getTelemetryId("Curr")
local cur = getValue(currentid)
lcd.drawText(38,45, "Curr: ",SMLSIZE)
--lcd.drawText(lcd.getLastPos(), 41, getValue(currentid), MIDSIZE) (Zeile auskommentiert, wegen Fehler)
lcd.drawNumber(lcd.getLastPos(), 41, cur *10, PREC1 +LEFT +MIDSIZE)
lcd.drawText(lcd.getLastPos(), 45, 'A', 0)



lcd.drawText(lcd.getLastPos(), 41, getValue(currentid), PREC1 + MIDSIZE) -->hatte bei mir nicht funktioniert, generiert auch einen Fehler

lcd.drawNumber(lcd.getLastPos(), 41, cur *10, PREC1 +LEFT +MIDSIZE) --> geht und begrenzt die Zahl auf eine Stelle nach dem Komma
 
Status
Nicht offen für weitere Antworten.
FPV1

Banggood

Oben Unten