Hallo zusammen,
nachdem ich in der Zwischenzeit meine PV-Anlage installiert habe, will ich mich mal wieder ein wenig dem Thema PV-Überschuss widmen.
Aber leider komme ich immer noch nicht dahinter, wie ich einen response weiter „verarbeiten“ kann.
Ich habe mir die von @jeep erstellte QA genommen und einige Funktion dazugeschrieben. Hier mal mein kompletter Entwurf (ich weiß dass das bestimmt von der Programmierung her besser geht; aber das ist erstmal mein Weg das überhaupt zu verstehen )
local version = 1.5
--local INTERVAL = 60000 * 60 --1 std.
local INTERVAL = 1000 * 20 --alle 20 Sek. Status aktualisieren
local QA = nil
local function getToken()
local url = "https://api.easee.cloud/api/accounts/token"
local requestBody = {
["username"] = user,
["password"] = pwd
}
local extraheaders = {
['Accept'] = 'application/json',
['Content-Type'] = 'application/*+json'
}
local selfhttp = net.HTTPClient({timeout=2000})
selfhttp:request(url, {
options= {
headers = extraheaders,
data = json.encode(requestBody),
method = "POST"
},
success = function(response)
data = response.data
easee = json.decode(data)
QA:trace("AccesToken:",easee.accessToken )
QA:trace("RefreshToken:",easee.refreshToken)
--QA:trace("Ablauf des Token in ",(easee.expiresIn/3600), " Stunden"))
QA:updateView("label_1", "text", "Token läuft ab in : "..(easee.expiresIn/3600).. " Stunden")
QA:setVariable("Token", easee.accessToken)
QA:setVariable("refreshToken", easee.refreshToken)
end,
error = function(message)
print("error:", message)
end
})
end --function
local function getState()
local chargerOpMode = {
[0] = "Offline",
[1] = "Disconnected",
[2] = "AwaitingStart",
[3] = "Charging",
[4] = "Completed",
[5] = "Error",
[6] = "ReadyToCharge",
}
local url = "https://api.easee.cloud/api/chargers/" .. ChargerID .. "/state"
local extraheaders = {
['Authorization'] = "Bearer " .. Token,
['Content-Type'] = 'application/*+json'
}
local selfhttp = net.HTTPClient({timeout=2000})
selfhttp:request(url, {
options= {
headers = extraheaders,
method = "GET"
},
success = function(response)
QA:debug("******* response status of Get State Data :", response.status .. " ********")
data = json.decode(response.data)
--easee = json.decode(data)
QA:debug("Response ChargerOpMode: ",data.chargerOpMode )
if data.chargerOpMode == 0 then
QA:updateView("label_status", "text", json.encode(chargerOpMode[0]))
elseif data.chargerOpMode == 1 then
QA:updateView("label_status", "text", json.encode(chargerOpMode[1]))
elseif data.chargerOpMode == 2 then
QA:updateView("label_status", "text", json.encode(chargerOpMode[2]))
elseif data.chargerOpMode == 3 then
QA:updateView("label_status", "text", json.encode(chargerOpMode[3]))
elseif data.chargerOpMode == 4 then
QA:updateView("label_status", "text", json.encode(chargerOpMode[4]))
elseif data.chargerOpMode == 5 then
QA:updateView("label_status", "text", json.encode(chargerOpMode[5]))
elseif data.chargerOpMode == 6 then
QA:updateView("label_status", "text", json.encode(chargerOpMode[6]))
end
--QA:debug("Response Energiekosten: ",data.energyPerHour )
QA:debug("Response dynamicChargerCurrent: ",data.dynamicChargerCurrent )
end,
error = function(message)
print("error:", message)
end
})
end --function
function QuickApp:uibuttongetState()
getState()
end
function QuickApp:uibuttongetToken()
getToken()
end
function QuickApp:onInit()
self:debug(self.name,", version:",version,", deviceId:",self.id, ", gestartet am: ", os.date("🕑 %a, %d.%m.%Y, %H:%M"))
QA = self
pwd = QA:getVariable("pwd")
user = QA:getVariable("user")
Token = tostring(QA:getVariable("Token"))
refreshToken = tostring(QA:getVariable("refreshToken"))
ChargerID = QA:getVariable("ChargerID")
--setInterval(getToken,INTERVAL)
setInterval(getState,INTERVAL)
setInterval(getConfiguration,INTERVAL)
--setInterval(getToken,60000 * 60 * 24) --alle 24 Stunden den Token erneuern
end
Mein Problem ist, das ich mir bei der Funktion getState mit einer Krücke behelfe, indem ich den Response der Funktion getToken in eine Variable schreibe. Diese wiederum rufe ich dann in der Funktion getState ab (Bereich extraheader/username).
Geht das auch anders?? Wenn ja, was muss ich wo einbauen??
Bin über jede Hilfe dankbar
Gruß
KaWi