Add GetChargers draft

This commit is contained in:
Simon Stürz 2025-11-10 16:53:03 +01:00
parent af48d25a34
commit 1467445d86
4 changed files with 53 additions and 3 deletions

View File

@ -411,6 +411,10 @@ class DashboardApp {
return this.sendAction('ping', { timestamp: new Date().toISOString() });
}
sendGetChargers() {
return this.sendAction('GetChargers', { });
}
updateConnectionStatus(text, state) {
if (this.elements.connectionStatus)
this.elements.connectionStatus.textContent = text;

View File

@ -290,8 +290,8 @@
<header>
<div class="header-bar">
<div class="brand">
<h1>nymea EV Dash</h1>
<p>Monitor nymea EV chargers in real time.</p>
<h1>EV Dash</h1>
<p>Monitor EV chargers in real time.</p>
</div>
<div class="session-panel">
<p class="status-indicator">
@ -299,7 +299,7 @@
<span id="connectionStatus">Awaiting login…</span>
</p>
<div class="session-details">
<span id="sessionSummary">Please sign in to start the WebSocket session.</span>
<span id="sessionSummary">Please sign in.</span>
<button type="button" id="logoutButton" class="ghost hidden">Logout</button>
</div>
</div>

View File

@ -42,6 +42,7 @@
#include <QJsonParseError>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QLoggingCategory>
Q_DECLARE_LOGGING_CATEGORY(dcEvDashExperience)
@ -134,6 +135,8 @@ void EvDashEngine::processTextMessage(QWebSocket *socket, const QString &message
return;
}
qCDebug(dcEvDashExperience()) << "-->" << qUtf8Printable(doc.toJson(QJsonDocument::Compact));
const QJsonObject requestObject = doc.object();
const QString requestId = requestObject.value(QStringLiteral("requestId")).toString();
const QString action = requestObject.value(QStringLiteral("action")).toString();
@ -204,6 +207,18 @@ QJsonObject EvDashEngine::handleApiRequest(QWebSocket *socket, const QJsonObject
return createSuccessResponse(requestId, payload);
}
if (action.compare(QStringLiteral("GetChargers"), Qt::CaseInsensitive) == 0) {
QJsonObject payload;
QJsonArray chargerList;
for (Thing *charger : m_thingManager->configuredThings().filterByInterface("evcharger")) {
chargerList.append(packCharger(charger));
}
payload.insert(QStringLiteral("chargers"), chargerList);
return createSuccessResponse(requestId, payload);
}
return createErrorResponse(requestId, QStringLiteral("unknownAction"));
}
@ -213,6 +228,7 @@ void EvDashEngine::sendReply(QWebSocket *socket, QJsonObject response) const
return;
const QJsonDocument replyDoc(response);
qCDebug(dcEvDashExperience()) << "<--" << qUtf8Printable(replyDoc.toJson(QJsonDocument::Compact));
socket->sendTextMessage(QString::fromUtf8(replyDoc.toJson(QJsonDocument::Compact)));
}
@ -237,3 +253,30 @@ QJsonObject EvDashEngine::createErrorResponse(const QString &requestId, const QS
response.insert(QStringLiteral("error"), errorMessage);
return response;
}
QJsonObject EvDashEngine::packCharger(Thing *charger) const
{
QJsonObject chargerObject;
chargerObject.insert("id", charger->id().toString(QUuid::WithoutBraces));
chargerObject.insert("name", charger->name());
chargerObject.insert("connected", charger->stateValue("connected").toBool());
chargerObject.insert("chargingCurrent", charger->stateValue("maxChargingCurrent").toDouble());
chargerObject.insert("chargingAllowed", charger->stateValue("power").toBool());
chargerObject.insert("currentPower", charger->stateValue("currentPower").toBool());
chargerObject.insert("pluggedIn", charger->stateValue("pluggedIn").toBool());
if (charger->hasState("currentVersion"))
chargerObject.insert("version", charger->stateValue("currentVersion").toDouble());
if (charger->hasState("sessionEnergy"))
chargerObject.insert("sessionEnergy", charger->stateValue("sessionEnergy").toDouble());
if (charger->hasState("temperature"))
chargerObject.insert("temperature", charger->stateValue("temperature").toDouble());
if (charger->hasState("desiredPhaseCount"))
chargerObject.insert("chargingPhases", charger->stateValue("desiredPhaseCount").toInt());
return chargerObject;
}

View File

@ -38,6 +38,7 @@
class QWebSocket;
class QWebSocketServer;
class Thing;
class ThingManager;
class EvDashWebServerResource;
@ -65,6 +66,8 @@ private:
void sendReply(QWebSocket *socket, QJsonObject response) const;
QJsonObject createSuccessResponse(const QString &requestId, const QJsonObject &payload = {}) const;
QJsonObject createErrorResponse(const QString &requestId, const QString &errorMessage) const;
QJsonObject packCharger(Thing *charger) const;
};
#endif // EVDASHENGINE_H