----------------------------------------------------------------------------------------- -- -- 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