Files
askiPortalSolar2D/askirepository.lua
2026-05-27 14:11:48 +02:00

144 lines
4.6 KiB
Lua

-----------------------------------------------------------------------------------------
--
-- askirepository.lua
-- ASKI Portal API Repository
--
-----------------------------------------------------------------------------------------
local json = require("json")
local AskiRepository = {}
-- Cookie-Authentifizierungsfunktion
function AskiRepository.getPostCookieAuth(url, email, password, code, callback)
-- Erstelle den Request Body
local requestBody = json.encode({
email = email,
password = password,
code = code
})
-- Callback-Funktion für die Antwort
local function networkListener(event)
if event.isError then
print("Netzwerkfehler: " .. tostring(event.response))
if callback then
callback(false, nil, "Netzwerkfehler: " .. tostring(event.response))
end
else
print("Status Code: " .. event.status)
--print("Response: " .. event.response)
-- Extrahiere Cookie aus den Headers
if event.responseHeaders then
local cookie = event.responseHeaders["Set-Cookie"] or
event.responseHeaders["set-cookie"]
if cookie then
--print("Cookie: " .. cookie)
if callback then
callback(true, cookie, event.response)
end
else
print("Kein Cookie in der Antwort gefunden")
if callback then
callback(false, nil, "Kein Cookie gefunden")
end
end
else
if callback then
callback(false, nil, "Keine Headers in der Antwort")
end
end
end
end
-- POST Request Parameter
local params = {
headers = {
["Content-Type"] = "application/json",
["Content-Length"] = tostring(#requestBody)
},
body = requestBody
}
-- Führe den POST Request aus
network.request(url, "POST", networkListener, params)
end
-- Post Pv Data
function AskiRepository.getPostHistoricData(url, deviceId, fromDate, toDate, cookie, callback)
-- Erstelle den Request Body
local requestBody = json.encode({
meters = {
{
deviceId = deviceId,
meterId = 40,
meterSubId = 0
}
},
sumTariffs = true,
type = 1,
tariff = 0,
from = fromDate,
to = toDate
})
-- Callback-Funktion für die Antwort
local function networkListener(event)
if event.isError then
print("Netzwerkfehler: " .. tostring(event.response))
if callback then
callback(false, nil, "Netzwerkfehler: " .. tostring(event.response))
end
else
print("Status Code: " .. event.status)
print("Response: " .. event.response)
-- Prüfe ob Status Code erfolgreich ist (200-299)
if event.status >= 200 and event.status < 300 then
-- Parse die JSON Response
if event.response and event.response ~= "" then
local dataSet = json.decode(event.response)
if dataSet then
print("DataSet erfolgreich empfangen")
if callback then
callback(true, dataSet, event.response)
end
else
print("Fehler beim Parsen der Response")
if callback then
callback(false, nil, "JSON Parse Fehler")
end
end
else
print("Leere Response erhalten")
if callback then
callback(false, nil, "Leere Response")
end
end
else
print("HTTP Fehler: " .. event.status)
if callback then
callback(false, nil, "HTTP Fehler " .. event.status .. ": " .. tostring(event.response))
end
end
end
end
-- POST Request Parameter
local params = {
headers = {
["Content-Type"] = "application/json",
["Content-Length"] = tostring(#requestBody),
["Cookie"] = cookie
},
body = requestBody
}
-- Führe den POST Request aus
network.request(url, "POST", networkListener, params)
end
return AskiRepository