diff --git a/dashboard/app.js b/dashboard/app.js index b11221c..ad41854 100644 --- a/dashboard/app.js +++ b/dashboard/app.js @@ -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; diff --git a/dashboard/index.html b/dashboard/index.html index 7943cc4..5d3f4f3 100644 --- a/dashboard/index.html +++ b/dashboard/index.html @@ -290,8 +290,8 @@
-

nymea EV Dash

-

Monitor nymea EV chargers in real time.

+

EV Dash

+

Monitor EV chargers in real time.

@@ -299,7 +299,7 @@ Awaiting login…

- Please sign in to start the WebSocket session. + Please sign in.
diff --git a/plugin/evdashengine.cpp b/plugin/evdashengine.cpp index 635a3c3..1ab0024 100644 --- a/plugin/evdashengine.cpp +++ b/plugin/evdashengine.cpp @@ -42,6 +42,7 @@ #include #include #include +#include #include 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; +} diff --git a/plugin/evdashengine.h b/plugin/evdashengine.h index 16ad106..6b6e7d2 100644 --- a/plugin/evdashengine.h +++ b/plugin/evdashengine.h @@ -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