
----------------------------------------------------------------------------
-- V1.1 : App für die Telemetriedaten GPSLog2.    26.2.2018 , Andre Straßburg
-- V1.2 : Sprachausgane der Maxwerte Höhe , Speed und Beschleunigung 
--        mit Rückstellschalter 9.3.2018
-- V1.3 : Ausgabe mit großen Zahlen , 1.4.2018
----------------------------------------------------------------------------
   
--------------------------------------------------------------------------------
-- Lokale Variablen
--------------------------------------------------------------------------------

local model, owner = " ", " " 
local sensorId
local speed , hoehe , flricht , pos , richtung , entf , strecke , sat , accx , accy , accz = 0,0,0,0,0,0,0,0,0,0,0
local satm , accxm , accym , acczm = 0,0,0,0
local Bgrad , Lgrad = " " , " "
local spstick , hstick , estick ,  frstick , sp = 0 , 0 , 0 , 0 , 0
local spmax , hmax , emax = 0 , 0 ,0
local timer = 0
local swSpeed , swHoehe , swSeite , swG
local tmpmaxsp , tmpmaxh , tmpmaxg , svz, waits , waith , waitg , waitp = 0 , 0 , 0 , 4, true , true , true , true

--------------------------------------------------------------------------------
-- Punkte für einen Pfeil
-------------------------------------------------------------------------------- 
local renShape=lcd.renderer()
local homeShape = {
	{ 0, -30},
	{-25, 25},
	{ 0, 6},
	{ 25, 25}
	}

	--------------------------------------------------------------------------------
-- Telemetriefenster Seite 1 mit großen Zahlen
--------------------------------------------------------------------------------
 --------------------------------------------------------------------------------

-- d = Digit(0-9) ,  Position xy , x (links oben)und Größe g (0.5 - 3)

local function zahl(d,x,y,g)   
	if d == 0 then
		lcd.drawFilledRectangle(x,y,30*g,10*g)
		lcd.drawFilledRectangle(x,y+40*g,30*g,10*g)
		lcd.drawFilledRectangle(x,y+10*g,10*g,30*g)
		lcd.drawFilledRectangle(x+20*g,y+10*g,10*g,30*g)	
	elseif d == 1 then
		lcd.drawFilledRectangle(x+20*g,y,10*g,50*g)
		for i = 0 , 10*g -1, 1 do
			lcd.drawLine(x+i,y+(20*g),x+20*g+i,y)
		end
	elseif d == 2 then	
		lcd.drawFilledRectangle(x,y,30*g,10*g)
		lcd.drawFilledRectangle(x,y+20*g,30*g,10*g)
		lcd.drawFilledRectangle(x,y+40*g,30*g,10*g)
		lcd.drawFilledRectangle(x,y+30*g,10*g,10*g)
		lcd.drawFilledRectangle(x+20*g,y+10*g,10*g,10*g)
	elseif d == 3 then
		lcd.drawFilledRectangle(x,y,30*g,10*g)
		lcd.drawFilledRectangle(x,y+20*g,30*g,10*g)
		lcd.drawFilledRectangle(x,y+40*g,30*g,10*g)
		lcd.drawFilledRectangle(x+20*g,y+30*g,10*g,10*g)
		lcd.drawFilledRectangle(x+20*g,y+10*g,10*g,10*g)	
	elseif d == 4 then
		lcd.drawFilledRectangle(x,y,10*g,30*g)
		lcd.drawFilledRectangle(x+20*g,y+10*g,10*g,40*g)
		lcd.drawFilledRectangle(x+10*g,y+20*g,10*g,10*g)	
	elseif d == 5 then
		lcd.drawFilledRectangle(x,y,30*g,10*g)
		lcd.drawFilledRectangle(x,y+20*g,30*g,10*g)
		lcd.drawFilledRectangle(x,y+40*g,30*g,10*g)
		lcd.drawFilledRectangle(x+20*g,y+30*g,10*g,10*g)
		lcd.drawFilledRectangle(x,y+10*g,10*g,10*g)	
	elseif d == 6 then
		lcd.drawFilledRectangle(x,y,30*g,10*g)
		lcd.drawFilledRectangle(x,y+20*g,30*g,10*g)
		lcd.drawFilledRectangle(x,y+40*g,30*g,10*g)
		lcd.drawFilledRectangle(x,y+30*g,10*g,10*g)
		lcd.drawFilledRectangle(x,y+10*g,10*g,10*g)	
		lcd.drawFilledRectangle(x+20*g,y+30*g,10*g,10*g)		
	elseif d == 7 then
		lcd.drawFilledRectangle(x,y,20*g,10*g)
		for i = 0 , 10*g -1, 1 do
			lcd.drawLine(x+i,y+(50*g),x+20*g+i,y)
		end
	elseif d == 8 then
		lcd.drawFilledRectangle(x,y,30*g,10*g)
		lcd.drawFilledRectangle(x,y+20*g,30*g,10*g)
		lcd.drawFilledRectangle(x,y+40*g,30*g,10*g)
		lcd.drawFilledRectangle(x,y+30*g,10*g,10*g)
		lcd.drawFilledRectangle(x,y+10*g,10*g,10*g)	
		lcd.drawFilledRectangle(x+20*g,y+30*g,10*g,10*g)	
		lcd.drawFilledRectangle(x+20*g,y+10*g,10*g,10*g)	
	elseif d == 9 then	
		lcd.drawFilledRectangle(x,y,30*g,10*g)
		lcd.drawFilledRectangle(x,y+20*g,30*g,10*g)
		lcd.drawFilledRectangle(x,y+40*g,30*g,10*g)
		lcd.drawFilledRectangle(x,y+10*g,10*g,10*g)	
		lcd.drawFilledRectangle(x+20*g,y+30*g,10*g,10*g)	
		lcd.drawFilledRectangle(x+20*g,y+10*g,10*g,10*g)		
	end
end

--------------------------------------------------------------------------------
-- Zahlenausgabe bis zu 3 Stellen
-- z=Zahl , xy-Koordinaten links oben , g=Größe , rb=rechtsbündig

local function za3digit(z,x,y,g,rb)
	local d0 , d1 , d2 , x1 , x2, wert , abstand , anzdigit 
	abstand = 38
	anzdigit = 0
	if z < 1000 and z >= 0 then 
		wert = z
		d2 = math.floor(wert/100)
		wert = wert - d2*100
		d1 = math.floor(wert/10)	
		wert = wert - d1*10			
		d0 = math.floor(wert)
		if d2 > 0 then
			rb = false
			anzdigit = 3
			zahl(d2,x,y,g) 
		end

		if anzdigit == 3 then
			x1 = x + abstand*g
			zahl(d1,x1,y,g) 
		else
			if d1 > 0 then
				anzdigit = 2
				if rb == true then
					x1 = x + abstand*g
				else
					x1 = x
				end
				zahl(d1,x1,y,g) 
			end
		end

		if anzdigit > 1 then
			if rb == true then	
				x1 = x + 2*abstand*g
			else
				x1 = x + (anzdigit-1)*abstand*g
			end
		else
			if rb == true then	
				x1 = x + 2*abstand*g
			else
				x1 = x
			end
		end				
		zahl(d0,x1,y,g) 
	end
end


--------------------------------------------------------------------------------
-- Geschwindigkeitsausgabe 3stellig auf dem kompletten Display
-- kmh=aktuelle Geschwindigkeit

local function onlySpeed(kmh)
	lcd.drawText(36, 2," Aktuelle Geschwindigkeit in Km/h" , FONT_NORMAL)
	za3digit(kmh,21,25,2.6,true)
end

--------------------------------------------------------------------------------
-- Höhenausgabe 3stellig auf dem kompletten Display
-- h= aktuelle Höhe

local function onlyHeight(h)
	lcd.drawText(63, 2," Aktuelle Höhe in meter" , FONT_NORMAL)
	za3digit(h,21,25,2.6,true)
end

--------------------------------------------------------------------------------
-- Geschwindigkeitsausgabe 3stellig und Höhenausgabe 3stellig mit Maxwerten
-- kmh=aktuelle Geschwindigkeit hoehe= aktuelle Höhe

local function sp_hoehe(kmh,kmhMax,h,hMax)
	za3digit(kmh,12,3,1.5,true)
	za3digit(h,12,85,1.5,true)
	za3digit(kmhMax,198,27,1,true)
	za3digit(hMax,198,110,1,true)
	lcd.drawLine(1,81,320,81)
	lcd.drawLine(185,1,185,160)	
	lcd.drawText(190, 3,"<-Kmh / Maximal" , FONT_NORMAL)
	lcd.drawText(190,86,"<-Höhe / Maximal" , FONT_NORMAL)
end

--------------------------------------------------------------------------------
-- Geschwindigkeitsausgabe 3stellig und Höhenausgabe 3stellig , Entfernung zum Start 
-- kmh=aktuelle Geschwindigkeit hoehe= aktuelle Höhe e = Entfernung

local function Sp_H_W(kmh,h,e)
	local i
	za3digit(kmh,4,6,1.4,true)
	za3digit(h,4,85,1.4,true)
	lcd.drawText(163, 4,"S" , FONT_NORMAL)
	lcd.drawText(163, 17,"p" , FONT_NORMAL)
	lcd.drawText(163, 30,"e" , FONT_NORMAL)
	lcd.drawText(163, 43,"e" , FONT_NORMAL)
	lcd.drawText(163, 58,"d" , FONT_NORMAL)	
	lcd.drawText(163, 90,"H" , FONT_NORMAL)
	lcd.drawText(164, 104,"ö" , FONT_NORMAL)	
	lcd.drawText(164, 118,"h" , FONT_NORMAL)	
	lcd.drawText(164, 132,"e" , FONT_NORMAL)
	lcd.drawText(200, 2,"Entfernung (m)" , FONT_NORMAL)
	za3digit(e,200,21,1,true)
	lcd.drawLine(1,81,185,81)
	--lcd.drawLine(185,75,320,75)
	lcd.drawLine(185,1,185,160)	
	lcd.drawLine(185,81,220,81)
	lcd.drawLine(220,81,235,75)
	lcd.drawLine(235,75,267,75)
	lcd.drawLine(267,75,282,81)
	lcd.drawLine(282,81,320,81)
end

--------------------------------------------------------------------
-- Zeichne den Pfeil
-- x,y = Position des Pfeils , shape = Punkte des Pfeils , rotation = Winkel (0-360°)
--------------------------------------------------------------------
local function drawShape(x, y, shape, rotation)
	sinShape = math.sin(rotation)
	cosShape = math.cos(rotation)
	renShape:reset()
	for index, point in pairs(shape) do
		renShape:addPoint(
			x + (point[1] * cosShape - point[2] * sinShape + 0.5),
			y + (point[1] * sinShape + point[2] * cosShape + 0.5)
		)
	end
	renShape:renderPolygon()
end

--------------------------------------------------------------------
-- Sprachausgabe : Seitenauswahl der Telemetrie
--------------------------------------------------------------------
local function sprach_s(s)
	if s == 1 then
		system.playFile("Ausg_G.wav")
	elseif s == 2 then
		system.playFile("Ausg_H.wav")
	elseif s == 3 then
		system.playFile("Ausg_G_H.wav")		
	elseif s == 4 then
		system.playFile("Ausg_G_H_E_K.wav")		
	else 
		system.playFile("Ausg_rest.wav")		
	end
end
	
--------------------------------------------------------------------
-- Telemetrieausgaben 
--------------------------------------------------------------------
local function Page1()
local vals,valh = system.getInputsVal(swSpeed) , system.getInputsVal(swHoehe)  
local valg,valp = system.getInputsVal(swG) , system.getInputsVal(swSeite)
local bgr,bgg,bgb = lcd.getBgColor()

	if(bgr+bgg+bgb)/3 >128 then
	    bgr,bgg,bgb = 0,0,0
	else
	    bgr,bgg,bgb = 255,255,255
	end
	lcd.setColor(bgr,bgg,bgb)
	
-- Abfrage ob Spachausgabe der Maxwerte von Speed oder Höhe	--------------------

	if vals ~= nil then 			-- Schalter max Speed definiert ? 
	    if (vals < 0) then 			-- Schalter auf ein ? 
			if waits == false then
				system.playNumber(tmpmaxsp,0,"km/h","Speed")
				tmpmaxsp = 0		-- die zwischenzeitlichen Maxwerte zurücksetzen 
				waits = true		-- Sperre bis der zurückgestellt ist
			end
		else 						-- Wenn der Schalter zurückgestellt ist , 
			waits = false			-- dann die Sprachausgabe wieder zulassen
		end
	end	
	if valh ~= nil then 			-- Schalter max Höhe definiert ? 
		if (valh < 0) then 			-- Schalter auf ein ?
			if waith == false then
				system.playNumber(tmpmaxh,0,"m","Altitude")
				tmpmaxh = 0			-- die zwischenzeitlichen Maxwerte zurücksetzen 
				waith = true		-- Sperre bis der zurückgestellt ist
			end
		else						-- Wenn der Schalter zurückgestellt ist , 
			waith = false			-- dann die Sprachausgabe wieder zulassen
		end
	end	
	if valg ~= nil then 			-- Schalter max Beschleunigung (G) definiert ? 
		if (valg < 0) then 			-- Schalter auf ein ?
			if waitg == false then
				system.playNumber(tmpmaxg,2)
				system.playFile("maxG.wav")
				tmpmaxg = 0			-- die zwischenzeitlichen Maxwerte zurücksetzen 
				waitg = true		-- Sperre bis der zurückgestellt ist
			end
		else						-- Wenn der Schalter zurückgestellt ist , 
			waitg = false			-- dann die Sprachausgabe wieder zulassen
		end
	end	
	
-- Abfrage ob 3 Wegeschalter für die Auswahl Seite vor oder zurück	------------------
	
	if valp ~= nil then 			-- Schalter Seite vor / zurück definiert ? 
		if (valp < 0) then 			-- Schalter auf Seite vor ?
			if waitp == false then
				svz = svz + 1		-- eine Seite vor
				if svz > 5 then		-- Falls über 5 dann wieder auf Seite 1
					svz = 1
				end
				sprach_s(svz)
				waitp = true		-- Sperre bis der zurückgestellt ist
			end
		elseif(valp > 0) then 		-- Schalter auf Seite zurück ?	
			if waitp == false then
				-- system.playFile("maxG.wav")
				svz = svz - 1		-- eine Seite vor
				if svz < 1 then		-- Falls unter 1 dann wieder auf Seite 5
					svz = 5
				end
				sprach_s(svz)
				waitp = true		-- Sperre bis der zurückgestellt ist
			end	
		else						-- Wenn der Schalter zurückgestellt ist ( mitte), 
			waitp = false			-- dann die Sprachausgabe wieder zulassen
		end
	end	
	
-- Ausgabe der ausgewählten Seite 1-5 -------------------------------------------------

	if(svz == 1 ) then										-- Seite 1 ?
		onlySpeed(speed) 									-- Ausgabe speed
	elseif(svz == 2 ) then 									-- Seite 2 ?
		onlyHeight(hoehe)									-- Ausgabe hoehe
	elseif(svz == 3) then 									-- Seite 3 ?
		sp_hoehe(speed,spmax,hoehe,hmax)					-- Ausgabe speed,spmax,hoehe,hmax
	elseif(svz == 4) then									-- Seite 4 ?
		Sp_H_W(speed,hoehe,entf)							-- Ausgabe speed,hoehe,Entfernung
		lcd.drawText(245, 76,"N" , FONT_NORMAL)				-- Ausgabe der Kompassbeschriftung
		lcd.drawText(246, 141,"S" , FONT_NORMAL)
		lcd.drawText(212, 110,"O" , FONT_NORMAL)
		lcd.drawText(273, 110,"W" , FONT_NORMAL)
		drawShape(250, 119, homeShape, math.rad(flricht))	-- Ausgabe der Kompassnadel
		lcd.drawCircle(250,119,39)
		lcd.setColor(lcd.getBgColor())
		lcd.drawCircle(250,120,1)
		lcd.drawCircle(250,120,2)
	else													-- Seite 5

-- Telemetriefenster Seite 5 mit Werteausgaben in Fenstern
--  Ausgabe der GPS-Koordinaten ------------------------------------------------  

		lcd.drawRectangle(2,2,130,50,5)
		lcd.drawText(32, 3," GPS Position" , FONT_MINI)
		lcd.drawText(4, 13,"B:", FONT_BIG)
		lcd.drawText(19, 13,string.format("%s",Bgrad) , FONT_BIG)
		lcd.drawText(4, 30,"L:" , FONT_BIG)
		lcd.drawText(19, 30, string.format("%s",Lgrad), FONT_BIG)

--  Ausgabe Anzah Satelliten ------------------------------------------------  

		lcd.drawRectangle(2,54,130,50,5)
		lcd.drawText(8, 55," Anz. Satelliten / Max" , FONT_MINI)
		lcd.drawText(30, 65,string.format("%.0f / %.0f",sat,satm) , FONT_MAXI)

--  Ausgabe der zurückgekegten Strecke ------------------------------------------------  

		lcd.drawRectangle(2,106,130,50,5)
		lcd.drawText(22, 106,"geflogene Strecke" , FONT_MINI)
		i = lcd.getTextWidth(FONT_MAXI,string.format("%.0f",strecke))
		j = lcd.getTextWidth(FONT_MINI,string.format("m"))
		k = (i+j) /2
		lcd.drawText(65-k, 117,string.format("%.0f",strecke) , FONT_MAXI)
		lcd.drawText(57+k, 137,"m" , FONT_MINI) 

--  Ausgabe der ACC-Werte ------------------------------------------------  

		lcd.drawRectangle(135,2,180,88,5)
		lcd.drawText(165, 3,"Beschleunigung  X  Y  Z" , FONT_MINI)

		lcd.drawText(145, 15,string.format("X: %.2f",accx) , FONT_BIG) 
		i = lcd.getTextWidth(FONT_BIG,string.format("X: %.2f",accx))
		lcd.drawText(148 + i, 22,"g" , FONT_MINI) 
		lcd.drawText(235 , 22,"max" , FONT_MINI) 
		lcd.drawText(263,18,string.format("%.2f",accxm) , FONT_BOLD) 
		i = lcd.getTextWidth(FONT_BOLD,string.format("%.2f",accxm))
		lcd.drawText(265 + i, 22,"g" , FONT_MINI) 

		lcd.drawText(145, 40,string.format("Y: %.2f",accy) , FONT_BIG) 
		i = lcd.getTextWidth(FONT_BIG,string.format("Y: %.2f",accy))
		lcd.drawText(148 + i, 47,"g" , FONT_MINI) 
		lcd.drawText(235 , 47,"max" , FONT_MINI) 
		lcd.drawText(263,43,string.format("%.2f",accym) , FONT_BOLD) 
		i = lcd.getTextWidth(FONT_BOLD,string.format("%.2f",accym))
		lcd.drawText(265 + i, 47,"g" , FONT_MINI) 

		lcd.drawText(145, 65,string.format("Z: %.2f",accz) , FONT_BIG) 
		i = lcd.getTextWidth(FONT_BIG,string.format("Z: %.2f",accz))
		lcd.drawText(148 + i, 72,"g" , FONT_MINI) 
		lcd.drawText(235 , 72,"max" , FONT_MINI)
		lcd.drawText(263,68,string.format("%.2f",acczm) , FONT_BOLD) 
		i = lcd.getTextWidth(FONT_BOLD,string.format("%.2f",acczm))
		lcd.drawText(265 + i, 72,"g" , FONT_MINI) 

--  Ausgabe maximale Entfernung ----------------  

		lcd.drawRectangle(135,92,87,64,5)
		lcd.drawText(157, 93,"Maximale" , FONT_MINI)
		lcd.drawText(151, 107,"Entfernung" , FONT_MINI)
		i = lcd.getTextWidth(FONT_MAXI,string.format("%.0f",emax)) / 2
		lcd.drawText(180-i, 117,string.format("%.0f",emax) , FONT_MAXI)
		lcd.drawText(180+i+3, 136,"m" , FONT_MINI)

--  Ausgabe der Richtung (Position , Richtung vom Startpunkt zum Modell  -------  

		lcd.drawRectangle(226,92,88,64,5)
		lcd.drawText(233, 94,"Richtung vom" , FONT_MINI)
		lcd.drawText(232, 108,"SP zum Modell" , FONT_MINI)
		i = lcd.getTextWidth(FONT_MAXI,string.format("%.0f°",pos)) / 2
		lcd.drawText(271-i, 117,string.format("%.0f°",pos) , FONT_MAXI)
	end
end

--------------------------------------------------------------------------------
-- Änderungen der Einstellungen speichern
--------------------------------------------------------------------------------

local function sensorChanged(value)
	sensorId  = sensorsAvailable[value].id
	system.pSave("sensorId", sensorId)
end

--------------------------------------------------------------------------------
-- Variablen-Eingabe
--------------------------------------------------------------------------------
local function setupForm(formID)

    sensorsAvailable = {}
    local available = system.getSensors();
    local list={}
    local curIndex=-1
    local descr = ""
    for index,sensor in ipairs(available) do 
		if(sensor.param == 0) then
		  	list[#list+1] = sensor.label
		  	sensorsAvailable[#sensorsAvailable+1] = sensor
		  	if(sensor.id==sensorId ) then
			  	curIndex=#sensorsAvailable
		  	end 
	  	end
    end
    
    local form, addRow, addLabel = form, form.addRow ,form.addLabel
    local addIntbox, addSelectbox = form.addIntbox, form.addSelectbox
    local addInputbox, addCheckbox = form.addInputbox, form.addCheckbox
  	local setTitle, addSpacer = form.setTitle, form.addSpacer
    
	setTitle("Einstellungen Werte")
				
	addSpacer(318,7)		
    addRow(2)
    addLabel({label = "Sensorauswahl", width=200})
    addSelectbox(list, curIndex, true, sensorChanged)
	
	addRow(2)
	addLabel({label="3-Wege-Schalter (Seite vor/zurück)", width=250})  -- Ausgabenwahl der Seite 1
	addInputbox(swSeite, true, function(value)	swSeite = value system.pSave("swSeite",value) end)	
	
	addRow(2)
	addLabel({label="2-Wege-Schalter (MaxSpeed)", width=250})  --für Reset der Maxwerte)
	addInputbox(swSpeed, true, function(value)	swSpeed = value system.pSave("swSpeed",value) end)	
	
	addRow(2)
	addLabel({label="2-Wege-Schalter (MaxHoehe)", width=250})  --für Reset der Maxwerte)
	addInputbox(swHoehe, true, function(value)	swHoehe = value system.pSave("swHoehe",value) end)

	addRow(2)
	addLabel({label="2-Wege-Schalter (Max -G-)", width=250})  --für Reset der Maxwerte)
	addInputbox(swG, true, function(value)	swG = value system.pSave("swG",value) end)
	 
	addRow(2) 
  	addLabel({label="prog von Andre Strassburg ", font=FONT_MINI, alignRight=true})
    
end

--------------------------------------------------------------------------------
-- Endlosschleife
--------------------------------------------------------------------------------

local function loop()

    	-- Read Sensor ID 3 Breitengrad
	sensor = system.getSensorByID(sensorId, 3)
	if(sensor and sensor.valid) then
	    if(sensor.type == 9) then
			-- GPS coordinates
			local nesw = {"N", "O", "S", "W"}
			local minutes = (sensor.valGPS & 0xFFFF) * 0.001
			local degs = (sensor.valGPS >> 16) & 0xFF
			Bgrad = string.format("%3d°%2.3f'%s", degs, minutes, nesw[sensor.decimals+1])
		end
	else
		Bgrad = "---°---.-----' --"
	end
  
	-- Read Sensor ID 4 Lägengrad
	sensor = system.getSensorByID(sensorId, 4)
	if(sensor and sensor.valid) then
	    if(sensor.type == 9) then
			-- GPS coordinates
			local nesw = {"N", "O", "S", "W"}
			local minutes = (sensor.valGPS & 0xFFFF) * 0.001
			local degs = (sensor.valGPS >> 16) & 0xFF
			Lgrad = string.format("%3d°%2.3f'%s", degs, minutes, nesw[sensor.decimals+1])
		end
	else
		Lgrad = "---°---.-----' --"
	end
	
	-- Read Sensor ID 5 Speed
	sensor = system.getSensorByID(sensorId, 5)
	if(sensor and sensor.valid) then 
		speed = sensor.value
		if spmax < speed then
			spmax = speed
		end
		if tmpmaxsp < speed then
			tmpmaxsp = speed
		end
	end

	-- Read Sensor ID 6 Höhe
	sensor = system.getSensorByID(sensorId, 6)
	if(sensor and sensor.valid) then 
		hoehe = sensor.value
		if hmax < hoehe then
		  hmax = hoehe
		end
		if tmpmaxh < hoehe then
		  tmpmaxh = hoehe
		end	
	end	

	-- Read Sensor ID 9 Flugrichtung
	sensor = system.getSensorByID(sensorId, 9)
	if(sensor and sensor.valid) then 
		flricht = sensor.value
	end
			
	-- Read Sensor ID 10 Position
	sensor = system.getSensorByID(sensorId, 10)
	if(sensor and sensor.valid) then 
		pos = sensor.value
	end
	
	-- Read Sensor ID 11 Richtung
	sensor = system.getSensorByID(sensorId, 11)
	if(sensor and sensor.valid) then 
		richtung = sensor.value
	end
		
	-- Read Sensor ID 12 Entfernung
	sensor = system.getSensorByID(sensorId, 12)
	if(sensor and sensor.valid) then 
		entf = sensor.value
		if emax < entf then
			emax = entf
		end
	end
	
	-- Read Sensor ID 13 Strecke
	sensor = system.getSensorByID(sensorId, 13)
	if(sensor and sensor.valid) then 
		strecke = sensor.value
	end
		
	-- Read Sensor ID 14 Satteliten
	sensor = system.getSensorByID(sensorId, 14)
	if(sensor and sensor.valid) then 
		sat = sensor.value
		if satm < sat then
			satm = sat
		end
	end

	-- Read Sensor ID 20 Acc_X
	sensor = system.getSensorByID(sensorId, 20)
	if(sensor and sensor.valid) then 
 		accx = sensor.value
	end
	if accxm < math.abs(accx) then
		accxm = math.abs(accx)
	end
		
	-- Read Sensor ID 21 Acc_Y
	sensor = system.getSensorByID(sensorId, 21)
	if(sensor and sensor.valid) then 
 		accy = sensor.value
	end		
	if accym < math.abs(accy) then
		accym = math.abs(accy)
	end
		
	-- Read Sensor ID 22 Acc_Z
	sensor = system.getSensorByID(sensorId, 22)
	if(sensor and sensor.valid) then 
 		accz = sensor.value
	end
	if acczm < math.abs(accz)then
		acczm = math.abs(accz)
	end		

end


--------------------------------------------------------------------------------
-- Initialisierung
--------------------------------------------------------------------------------
local function init()
   
	model = system.getProperty("Model")
	sensorId = system.pLoad("sensorId", 0)
	--schalter = system.pLoad("schalter")
	swSpeed = system.pLoad("swSpeed")
    swHoehe = system.pLoad("swHoehe")
	swSeite = system.pLoad("swSeite")
    swG = system.pLoad("swG")
    system.registerForm(1, MENU_APPS, "GPS-Log2", setupForm)
    system.registerTelemetry(1, "GPS ".." "..model, 4, Page1) --  Seite 1 mit großen Zahlen
end
--------------------------------------------------------------------------------

Version = "1.3"
return {init=init, loop=loop, author="A.Strassburg", version=Version, name="GPS-Log2"} 