158 lines
5.9 KiB
Lua
158 lines
5.9 KiB
Lua
-----------------------------------------------------------------------------------------
|
|
--
|
|
-- scene01.lua
|
|
-- Datenansicht Scene
|
|
--
|
|
-----------------------------------------------------------------------------------------
|
|
|
|
local composer = require("composer")
|
|
local json = require("json")
|
|
|
|
local scene = composer.newScene()
|
|
|
|
-- -----------------------------------------------------------------------------------
|
|
-- Scene event functions
|
|
-- -----------------------------------------------------------------------------------
|
|
|
|
-- create()
|
|
function scene:create(event)
|
|
local sceneGroup = self.view
|
|
-- Kein Hintergrund, keine UI-Elemente
|
|
end
|
|
|
|
-- show()
|
|
function scene:show(event)
|
|
local sceneGroup = self.view
|
|
local phase = event.phase
|
|
|
|
if phase == "will" then
|
|
-- Code hier wird ausgeführt, wenn die Scene noch off-screen ist (aber im Begriff ist, on-screen zu kommen)
|
|
|
|
elseif phase == "did" then
|
|
-- Code hier wird ausgeführt, wenn die Scene komplett on-screen ist
|
|
|
|
-- Hole die übergebenen Daten
|
|
local deviceDataSets = event.params.deviceDataSets
|
|
local devices = event.params.devices
|
|
|
|
if deviceDataSets and devices then
|
|
-- Berechne Layout
|
|
local itemHeight = 90
|
|
local cardWidth = display.contentWidth - 60
|
|
local totalHeight = #devices * itemHeight
|
|
local startY = (display.contentHeight - totalHeight) / 2 + (itemHeight / 2)
|
|
|
|
for i, device in ipairs(devices) do
|
|
local yPos = startY + ((i - 1) * itemHeight)
|
|
|
|
-- Container für jedes Device (zentral)
|
|
local itemBg = display.newRoundedRect(sceneGroup, display.contentCenterX, yPos, cardWidth, itemHeight - 10, 8)
|
|
itemBg:setFillColor(1, 1, 1)
|
|
itemBg.strokeWidth = 2
|
|
itemBg:setStrokeColor(0.85, 0.85, 0.85)
|
|
|
|
-- Device Name (Titel)
|
|
local nameText = display.newText({
|
|
parent = sceneGroup,
|
|
text = device.name,
|
|
x = display.contentCenterX,
|
|
y = yPos - 25,
|
|
fontSize = 18,
|
|
font = native.systemFontBold,
|
|
align = "center"
|
|
})
|
|
nameText:setFillColor(0.2, 0.2, 0.2)
|
|
|
|
-- Daten extrahieren
|
|
local dataSet = deviceDataSets[device.name]
|
|
local valueText = "Keine Daten"
|
|
local dateText = ""
|
|
|
|
if dataSet and not dataSet.error then
|
|
if type(dataSet) == "table" and #dataSet > 0 then
|
|
local meterData = nil
|
|
for _, meter in ipairs(dataSet) do
|
|
if meter.deviceId == device.deviceId then
|
|
meterData = meter
|
|
break
|
|
end
|
|
end
|
|
|
|
if meterData and meterData.values and #meterData.values > 0 then
|
|
local firstValue = meterData.values[1]
|
|
if firstValue.value then
|
|
valueText = string.format("%.2f kW", firstValue.value)
|
|
end
|
|
if firstValue.datetime then
|
|
dateText = firstValue.datetime
|
|
end
|
|
end
|
|
end
|
|
elseif dataSet and dataSet.error then
|
|
valueText = "Fehler: " .. dataSet.error
|
|
end
|
|
|
|
-- Wert anzeigen
|
|
local valueLabel = display.newText({
|
|
parent = sceneGroup,
|
|
text = valueText,
|
|
x = display.contentCenterX,
|
|
y = yPos,
|
|
fontSize = 16,
|
|
align = "center"
|
|
})
|
|
valueLabel:setFillColor(0.3, 0.6, 0.3)
|
|
|
|
-- Datum anzeigen (falls vorhanden)
|
|
if dateText ~= "" then
|
|
local formattedDate = dateText:match("(%d%d%d%d%-%d%d%-%d%d)")
|
|
if formattedDate then
|
|
local dateLabel = display.newText({
|
|
parent = sceneGroup,
|
|
text = "📅 " .. formattedDate,
|
|
x = display.contentCenterX,
|
|
y = yPos + 25,
|
|
fontSize = 12,
|
|
align = "center"
|
|
})
|
|
dateLabel:setFillColor(0.5, 0.5, 0.5)
|
|
end
|
|
end
|
|
end
|
|
|
|
print("✓ Scene01 geladen mit zentral angeordneten Datenboxen")
|
|
end
|
|
end
|
|
end
|
|
|
|
-- hide()
|
|
function scene:hide(event)
|
|
local sceneGroup = self.view
|
|
local phase = event.phase
|
|
|
|
if phase == "will" then
|
|
-- Code hier wird ausgeführt, wenn die Scene on-screen ist (aber im Begriff ist, off-screen zu gehen)
|
|
|
|
elseif phase == "did" then
|
|
-- Code hier wird ausgeführt, unmittelbar nachdem die Scene off-screen gegangen ist
|
|
-- ScrollView-Inhalt wird automatisch mit der Scene entfernt
|
|
end
|
|
end
|
|
|
|
-- destroy()
|
|
function scene:destroy(event)
|
|
local sceneGroup = self.view
|
|
print("Scene01 zerstört")
|
|
end
|
|
|
|
-- -----------------------------------------------------------------------------------
|
|
-- Scene event function listeners
|
|
-- -----------------------------------------------------------------------------------
|
|
scene:addEventListener("create", scene)
|
|
scene:addEventListener("show", scene)
|
|
scene:addEventListener("hide", scene)
|
|
scene:addEventListener("destroy", scene)
|
|
-- -----------------------------------------------------------------------------------
|
|
|
|
return scene
|