Fix solalaweb integration
Build Linux and Android / build (push) Successful in 3m22s

This commit is contained in:
2026-08-19 20:40:18 +02:00
parent dc27e0ec10
commit 196709ffc4
20 changed files with 2145 additions and 1019 deletions
+1
View File
@@ -167,6 +167,7 @@ qt_add_qml_module(evcharger-app
qml/SettingsTabPage.qml
qml/SetValueHelper.qml
qml/SimpleNavigationItem.qml
qml/SolalawebSetupDialog.qml
qml/StartStopButton.qml
qml/SwitchLanguagePage.qml
qml/TimeComponentLabel.qml
+144 -20
View File
@@ -1,7 +1,47 @@
#include "appsettings.h"
#include <QFile>
#include <QQmlFile>
#include <QNetworkRequest>
using namespace std::chrono_literals;
namespace
{
QByteArray basicAuthorization(const QString &username, const QString &password)
{
QByteArray credentials = username.toUtf8();
credentials.append(':');
credentials.append(password.toUtf8());
return "Basic " + credentials.toBase64();
}
}
AppSettings::AppSettings()
{
m_solalawebVerificationTimeout.setSingleShot(true);
m_solalawebVerificationTimeout.setInterval(15s);
connect(&m_solalawebVerificationTimeout, &QTimer::timeout,
this, [this] {
finishSolalawebVerification(false, tr("The Solalaweb authentication check timed out."));
});
connect(&m_solalawebVerificationSocket, &QWebSocket::connected,
this, [this] {
finishSolalawebVerification(true);
});
connect(&m_solalawebVerificationSocket, &QWebSocket::errorOccurred,
this, [this](QAbstractSocket::SocketError) {
finishSolalawebVerification(
false,
tr("Authentication could not be verified: %1")
.arg(m_solalawebVerificationSocket.errorString()));
});
// Old installations may still have the visibility flag set from the
// certificate-based implementation. Never expose Solalaweb until the new
// Authentik credentials have completed a successful check.
if (!solalawebCredentialsVerified() && showSolalaweb())
setShowSolalaweb(false);
}
QLocale::Language AppSettings::uiLanguage() const
{
@@ -48,30 +88,114 @@ void AppSettings::setUiLanguage(QLocale::Language uiLanguage)
emit uiLanguageChanged(uiLanguage);
}
bool AppSettings::loadSolalawebKey(const QString &url)
QString AppSettings::solalawebUsername() const
{
QFile file{QQmlFile::urlToLocalFileOrQrc(url)};
if (!file.open(QFile::ReadOnly))
{
qWarning() << "Could not open file:" << file.errorString();
return false;
}
setSolalawebKey(file.readAll());
return true;
return value("solalawebUsername").toString();
}
bool AppSettings::loadSolalawebCert(const QString &url)
QString AppSettings::solalawebPassword() const
{
QFile file{QQmlFile::urlToLocalFileOrQrc(url)};
if (!file.open(QFile::ReadOnly))
return value("solalawebPassword").toString();
}
bool AppSettings::solalawebCredentialsVerified() const
{
return value("solalawebCredentialsVerified", false).toBool()
&& !solalawebUsername().isEmpty()
&& !solalawebPassword().isEmpty();
}
void AppSettings::verifySolalawebCredentials(const QString &username,
const QString &appPassword)
{
if (m_solalawebVerificationInProgress)
return;
m_pendingSolalawebUsername = username.trimmed();
m_pendingSolalawebPassword = appPassword;
if (m_pendingSolalawebUsername.isEmpty() || m_pendingSolalawebPassword.isEmpty())
{
qWarning() << "Could not open file:" << file.errorString();
return false;
setSolalawebVerificationError(tr("Enter both the username and the app password."));
emit solalawebVerificationFinished(false);
return;
}
setSolalawebCert(file.readAll());
setSolalawebVerificationError({});
m_solalawebVerificationInProgress = true;
emit solalawebVerificationInProgressChanged(true);
return true;
QNetworkRequest request{QUrl{QStringLiteral("wss://solalaweb.com/123456")}};
request.setRawHeader("Authorization",
basicAuthorization(m_pendingSolalawebUsername,
m_pendingSolalawebPassword));
m_solalawebVerificationTimeout.start();
m_solalawebVerificationSocket.open(request);
}
void AppSettings::clearSolalawebCredentials()
{
const auto oldUsername = solalawebUsername();
remove("solalawebUsername");
remove("solalawebPassword");
remove("solalawebCredentialsVerified");
setShowSolalaweb(false);
setSolalawebVerificationError({});
if (!oldUsername.isEmpty())
emit solalawebUsernameChanged({});
emit solalawebCredentialsVerifiedChanged(false);
}
void AppSettings::invalidateSolalawebCredentials(const QString &reason)
{
setSolalawebCredentialsVerified(false);
setShowSolalaweb(false);
setSolalawebVerificationError(reason);
}
void AppSettings::finishSolalawebVerification(bool success, const QString &error)
{
if (!m_solalawebVerificationInProgress)
return;
m_solalawebVerificationInProgress = false;
emit solalawebVerificationInProgressChanged(false);
m_solalawebVerificationTimeout.stop();
if (success)
{
const auto oldUsername = solalawebUsername();
setValue("solalawebUsername", m_pendingSolalawebUsername);
setValue("solalawebPassword", m_pendingSolalawebPassword);
if (oldUsername != m_pendingSolalawebUsername)
emit solalawebUsernameChanged(m_pendingSolalawebUsername);
setSolalawebCredentialsVerified(true);
setSolalawebVerificationError({});
}
else
{
setSolalawebVerificationError(error);
}
m_pendingSolalawebUsername.clear();
m_pendingSolalawebPassword.clear();
m_solalawebVerificationSocket.abort();
emit solalawebVerificationFinished(success);
}
void AppSettings::setSolalawebCredentialsVerified(bool verified)
{
if (solalawebCredentialsVerified() == verified)
return;
setValue("solalawebCredentialsVerified", verified);
emit solalawebCredentialsVerifiedChanged(verified);
}
void AppSettings::setSolalawebVerificationError(const QString &error)
{
if (m_solalawebVerificationError == error)
return;
m_solalawebVerificationError = error;
emit solalawebVerificationErrorChanged(error);
}
+35 -2
View File
@@ -1,6 +1,8 @@
#pragma once
#include <QLocale>
#include <QTimer>
#include <QWebSocket>
#include <QtQml/qqmlregistration.h>
#include "goesettings.h"
@@ -10,8 +12,14 @@ class AppSettings : public GoeSettings
Q_OBJECT
QML_ELEMENT
Q_PROPERTY(QLocale::Language uiLanguage READ uiLanguage WRITE setUiLanguage NOTIFY uiLanguageChanged FINAL)
Q_PROPERTY(QString solalawebUsername READ solalawebUsername NOTIFY solalawebUsernameChanged FINAL)
Q_PROPERTY(bool solalawebCredentialsVerified READ solalawebCredentialsVerified NOTIFY solalawebCredentialsVerifiedChanged FINAL)
Q_PROPERTY(bool solalawebVerificationInProgress READ solalawebVerificationInProgress NOTIFY solalawebVerificationInProgressChanged FINAL)
Q_PROPERTY(QString solalawebVerificationError READ solalawebVerificationError NOTIFY solalawebVerificationErrorChanged FINAL)
public:
AppSettings();
enum UiLanguageValue {
SystemLanguage = QLocale::AnyLanguage,
GermanLanguage = QLocale::German,
@@ -27,10 +35,35 @@ public:
QLocale::Language uiLanguage() const;
void setUiLanguage(QLocale::Language uiLanguage);
Q_INVOKABLE bool loadSolalawebKey(const QString &url);
Q_INVOKABLE bool loadSolalawebCert(const QString &url);
QString solalawebUsername() const;
QString solalawebPassword() const;
bool solalawebCredentialsVerified() const;
bool solalawebVerificationInProgress() const { return m_solalawebVerificationInProgress; }
QString solalawebVerificationError() const { return m_solalawebVerificationError; }
Q_INVOKABLE void verifySolalawebCredentials(const QString &username,
const QString &appPassword);
Q_INVOKABLE void clearSolalawebCredentials();
void invalidateSolalawebCredentials(const QString &reason);
signals:
void uiLanguageChanged(QLocale::Language uiLanguage);
void homeAssistantConfigurationChanged();
void solalawebUsernameChanged(const QString &username);
void solalawebCredentialsVerifiedChanged(bool verified);
void solalawebVerificationInProgressChanged(bool inProgress);
void solalawebVerificationErrorChanged(const QString &error);
void solalawebVerificationFinished(bool success);
private:
void finishSolalawebVerification(bool success, const QString &error = {});
void setSolalawebCredentialsVerified(bool verified);
void setSolalawebVerificationError(const QString &error);
QWebSocket m_solalawebVerificationSocket;
QTimer m_solalawebVerificationTimeout;
bool m_solalawebVerificationInProgress{};
QString m_pendingSolalawebUsername;
QString m_pendingSolalawebPassword;
QString m_solalawebVerificationError;
};
+52 -31
View File
@@ -4,11 +4,9 @@
#include <QMetaEnum>
#include <QJsonDocument>
#include <QJsonParseError>
#include <QNetworkRequest>
#include <QPasswordDigestor>
#include <QMessageAuthenticationCode>
#include <QSslConfiguration>
#include <QSslCertificate>
#include <QSslKey>
#include <QTimer>
#include <utility>
@@ -51,6 +49,14 @@ QString deriveBcryptPassword(const QString &password, const QString &serial)
return QString::fromLatin1(fullHash.mid(salt.size(), 32));
}
QByteArray basicAuthorization(const QString &username, const QString &password)
{
QByteArray credentials = username.toUtf8();
credentials.append(':');
credentials.append(password.toUtf8());
return "Basic " + credentials.toBase64();
}
}
DeviceConnection::DeviceConnection(QObject *parent) :
@@ -94,38 +100,35 @@ void DeviceConnection::setUrl(const QString &url)
void DeviceConnection::start()
{
emit logMessage(tr("Connecting to %0").arg(m_url));
openWebSocket();
}
if (m_settings && !m_settings->solalawebKey().isEmpty() && !m_settings->solalawebCert().isEmpty())
void DeviceConnection::openWebSocket()
{
QNetworkRequest request{QUrl{m_url}};
if (isSolalawebConnection())
{
auto sslConfig = m_websocket.sslConfiguration();
if (!m_settings || !m_settings->solalawebCredentialsVerified())
{
QSslCertificate cert{m_settings->solalawebCert().toUtf8()};
if (cert.isNull())
{
emit logMessage(tr("Could not parse solalaweb certificate!"));
goto after;
}
qDebug() << "cert" << cert.issuerDisplayName();
sslConfig.setLocalCertificate(cert);
const auto message = tr("Solalaweb authentication must be configured again.");
emit logMessage(message);
emit solalawebAuthenticationRequired(message);
return;
}
{
QSslKey key{m_settings->solalawebKey().toUtf8(), QSsl::KeyAlgorithm::Rsa, QSsl::Pem};
if (key.isNull())
{
emit logMessage(tr("Could not parse solalaweb key!"));
goto after;
}
qDebug() << "key" << key.algorithm();
sslConfig.setPrivateKey(key);
}
m_websocket.setSslConfiguration(sslConfig);
request.setRawHeader("Authorization",
basicAuthorization(m_settings->solalawebUsername(),
m_settings->solalawebPassword()));
}
after:
m_websocket.open(QUrl{m_url});
m_solalawebAuthenticationFailed = false;
m_websocket.open(request);
}
bool DeviceConnection::isSolalawebConnection() const
{
return QUrl{m_url}.host().compare(QStringLiteral("solalaweb.com"),
Qt::CaseInsensitive) == 0;
}
void DeviceConnection::setPassword(const QString &password)
@@ -537,9 +540,8 @@ void DeviceConnection::disconnected()
emit showDisturbed();
emit logMessage(tr("Reconnecting to %0").arg(m_url));
QTimer::singleShot(1s, this, [this](){
m_websocket.open(QUrl{m_url});
});
if (!m_solalawebAuthenticationFailed)
QTimer::singleShot(1s, this, &DeviceConnection::openWebSocket);
}
void DeviceConnection::stateChanged(QAbstractSocket::SocketState state)
@@ -580,6 +582,25 @@ void DeviceConnection::errorOccurred(QAbstractSocket::SocketError error)
{
qDebug() << error;
emit logMessage(tr("error occured: %0").arg(enumToString(error)));
if (!isSolalawebConnection())
return;
const auto errorText = m_websocket.errorString();
if (errorText.contains("401")
|| errorText.contains("403")
|| errorText.contains("302")
|| errorText.contains("unauthorized", Qt::CaseInsensitive)
|| errorText.contains("forbidden", Qt::CaseInsensitive)
|| errorText.contains("redirect", Qt::CaseInsensitive))
{
m_solalawebAuthenticationFailed = true;
const auto message = tr("Solalaweb rejected the saved authentication: %1")
.arg(errorText);
if (m_settings)
m_settings->invalidateSolalawebCredentials(message);
emit solalawebAuthenticationRequired(message);
}
}
void DeviceConnection::peerVerifyError(const QSslError &error)
+4
View File
@@ -61,6 +61,7 @@ signals:
void authError(const QString &message);
void authImpossible();
void authSuccess();
void solalawebAuthenticationRequired(const QString &message);
void fullStatusReceived();
void valueChanged(const QString &key, const QVariant &value);
@@ -90,6 +91,8 @@ private:
void sendAuthInternal();
void authResponse(const QString &type, const QVariantMap &message);
void openWebSocket();
bool isSolalawebConnection() const;
AppSettings *m_settings{};
@@ -110,6 +113,7 @@ private:
PasswordHashAlgorithm m_passwordHashAlgorithm{PasswordHashAlgorithm::Pbkdf2};
QString m_password;
bool m_solalawebAuthenticationFailed{};
QHash<QString, callback_t> m_callbacks;
+273 -147
View File
@@ -165,54 +165,100 @@
<translation>https://github.com/goecharger/go-eCharger-API-v1/blob/master/go-eCharger%20API%20v1%20EN.md</translation>
</message>
</context>
<context>
<name>AppSettings</name>
<message>
<location filename="../appsettings.cpp" line="25"/>
<source>The Solalaweb authentication check timed out.</source>
<translation>Timeout under kontrollen af Solalaweb-godkendelse.</translation>
</message>
<message>
<location filename="../appsettings.cpp" line="35"/>
<source>Authentication could not be verified: %1</source>
<translation>Godkendelsen kunne ikke bekræftes: %1</translation>
</message>
<message>
<location filename="../appsettings.cpp" line="118"/>
<source>Enter both the username and the app password.</source>
<translation>Indtast både brugernavn og appadgangskode.</translation>
</message>
</context>
<context>
<name>AppSettingsPage</name>
<message>
<location filename="../qml/AppSettingsPage.qml" line="8"/>
<location filename="../qml/AppSettingsPage.qml" line="9"/>
<source>App Settings</source>
<translation>App-indstillinger</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="15"/>
<location filename="../qml/AppSettingsPage.qml" line="20"/>
<source>Language</source>
<translation>Sprog</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="29"/>
<location filename="../qml/AppSettingsPage.qml" line="34"/>
<source>Number of app instances:</source>
<translation>Antal app-forekomster:</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="43"/>
<location filename="../qml/AppSettingsPage.qml" line="48"/>
<source>Swipe left or right with three fingers to switch between app instances.</source>
<translation>Stryg til venstre eller højre med tre fingre for at skifte mellem appinstanser.</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="58"/>
<location filename="../qml/AppSettingsPage.qml" line="56"/>
<source>Solalaweb</source>
<translation>Solalaweb</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="61"/>
<source>Set up Authentik access to make the private Solalaweb connection available for saved devices.</source>
<translation>Konfigurer Authentik-adgang, så den private Solalaweb-forbindelse bliver tilgængelig for gemte enheder.</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="69"/>
<source>Authentication verified for %1</source>
<translation>Godkendelse bekræftet for %1</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="70"/>
<source>Authentication has not been verified</source>
<translation>Godkendelsen er ikke bekræftet</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="79"/>
<source>Change Solalaweb authentication</source>
<translation>Skift Solalaweb-godkendelse</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="80"/>
<source>Set up Solalaweb</source>
<translation>Konfigurer Solalaweb</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="87"/>
<source>Show Solalaweb</source>
<translation>Vis Solalaweb</translation>
</message>
<message>
<source>solalaweb key:</source>
<translation>solalaweb nøgle:</translation>
<translation type="vanished">solalaweb nøgle:</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="64"/>
<location filename="../qml/AppSettingsPage.qml" line="81"/>
<source>Select...</source>
<translation>Vælg...</translation>
<translation type="vanished">Vælg...</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="64"/>
<location filename="../qml/AppSettingsPage.qml" line="81"/>
<source>Replace...</source>
<translation>Erstat...</translation>
<translation type="vanished">Erstat...</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="75"/>
<source>solalaweb cert:</source>
<translation>solalaweb certifikat:</translation>
<translation type="vanished">solalaweb certifikat:</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="95"/>
<source>Show solalaweb:</source>
<translation>Vis solalaweb:</translation>
<translation type="vanished">Vis solalaweb:</translation>
</message>
</context>
<context>
@@ -1752,227 +1798,235 @@
<context>
<name>DeviceConnection</name>
<message>
<location filename="../deviceconnection.cpp" line="96"/>
<location filename="../deviceconnection.cpp" line="102"/>
<source>Connecting to %0</source>
<translation>Opretter forbindelse til %0</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="106"/>
<source>Could not parse solalaweb certificate!</source>
<translation>Kunne ikke parse solalaweb certifikat!</translation>
<translation type="vanished">Kunne ikke parse solalaweb certifikat!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="117"/>
<source>Could not parse solalaweb key!</source>
<translation>Kunne ikke parse solalaweb nøgle!</translation>
<translation type="vanished">Kunne ikke parse solalaweb nøgle!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="143"/>
<location filename="../deviceconnection.cpp" line="113"/>
<source>Solalaweb authentication must be configured again.</source>
<translation>Solalaweb-godkendelsen skal konfigureres igen.</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="146"/>
<source>Received something that is not a json object!</source>
<translation>Modtog noget, der ikke er et json-objekt!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="151"/>
<location filename="../deviceconnection.cpp" line="154"/>
<source>Received something that does not contain a type!</source>
<translation>Modtaget noget, der ikke indeholder en type!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="158"/>
<location filename="../deviceconnection.cpp" line="161"/>
<source>Received something with a non-string type!</source>
<translation>Modtaget noget med en ikke-streng type!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="166"/>
<location filename="../deviceconnection.cpp" line="169"/>
<source>Received message type %0 %1</source>
<translation>Modtaget meddelelsestype %0 %1</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="174"/>
<location filename="../deviceconnection.cpp" line="177"/>
<source>Received hello without serial!</source>
<translation>Modtaget hej uden føljeton!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="181"/>
<location filename="../deviceconnection.cpp" line="184"/>
<source>Received hello with a non-string serial!</source>
<translation>Modtaget hej med en ikke-streng føljeton!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="193"/>
<location filename="../deviceconnection.cpp" line="196"/>
<source>Received hello with a non-bool secured!</source>
<translation>Modtaget hej med en ikke-bool sikret!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="206"/>
<location filename="../deviceconnection.cpp" line="209"/>
<source>Received hello without manufacturer!</source>
<translation>Modtaget hej uden producent!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="213"/>
<location filename="../deviceconnection.cpp" line="216"/>
<source>Received hello with a non-string manufacturer!</source>
<translation>Modtaget hej med en ikke-streng producent!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="224"/>
<location filename="../deviceconnection.cpp" line="227"/>
<source>Received hello without devicetype!</source>
<translation>Modtaget hej uden devicetype!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="231"/>
<location filename="../deviceconnection.cpp" line="234"/>
<source>Received hello with a non-string devicetype!</source>
<translation>Modtaget hej med en ikke-streng enhedstype!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="242"/>
<location filename="../deviceconnection.cpp" line="245"/>
<source>Received hello without friendly_name!</source>
<translation>Modtaget hej uden friendly_name!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="249"/>
<location filename="../deviceconnection.cpp" line="252"/>
<source>Received hello with a non-string friendly_name!</source>
<translation>Modtaget hej med et ikke-strengvenligt_navn!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="270"/>
<location filename="../deviceconnection.cpp" line="273"/>
<source>Received authRequired without token1!</source>
<translation>Modtog authRequired uden token1!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="277"/>
<location filename="../deviceconnection.cpp" line="280"/>
<source>Received authRequired with a non-string token1!</source>
<translation>Modtog authRequired, hvor token1 ikke er en streng!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="288"/>
<location filename="../deviceconnection.cpp" line="291"/>
<source>Received authRequired without token2!</source>
<translation>Modtog authRequired uden token2!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="295"/>
<location filename="../deviceconnection.cpp" line="298"/>
<source>Received authRequired with a non-string token2!</source>
<translation>Modtog authRequired, hvor token2 ikke er en streng!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="308"/>
<location filename="../deviceconnection.cpp" line="311"/>
<source>Received authRequired with a non-string hash algorithm!</source>
<translation>Modtog authRequired, hvor hash-algoritmen ikke er en streng!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="321"/>
<location filename="../deviceconnection.cpp" line="324"/>
<source>Received authRequired with unsupported hash algorithm %0!</source>
<translation>Modtog authRequired med hash-algoritmen %0, som ikke understøttes!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="344"/>
<location filename="../deviceconnection.cpp" line="347"/>
<source>Received fullStatus with a non-bool partial!</source>
<translation>Modtog fuld status med en ikke-bool partial!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="354"/>
<location filename="../deviceconnection.cpp" line="357"/>
<source>Received fullStatus without a status!</source>
<translation>Modtaget fuld status uden status!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="361"/>
<location filename="../deviceconnection.cpp" line="364"/>
<source>Received fullStatus with a non-object status!</source>
<translation>Modtaget fuld status med en ikke-objekt status!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="369"/>
<location filename="../deviceconnection.cpp" line="372"/>
<source>Received partial fullStatus</source>
<translation>Modtaget delvis fuld status</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="369"/>
<location filename="../deviceconnection.cpp" line="372"/>
<source>Received last fullStatus</source>
<translation>Modtaget sidste fuldstatus</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="379"/>
<location filename="../deviceconnection.cpp" line="382"/>
<source>Received deltaStatus without a status!</source>
<translation>Modtaget deltaStatus uden status!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="386"/>
<location filename="../deviceconnection.cpp" line="389"/>
<source>Received deltaStatus with a non-object status!</source>
<translation>Modtaget deltaStatus med en ikke-objekt status!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="427"/>
<location filename="../deviceconnection.cpp" line="430"/>
<source>Received message with a non-string requestId!</source>
<translation>Modtaget besked med et ikke-streng requestId!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="480"/>
<location filename="../deviceconnection.cpp" line="483"/>
<source>Sending %0</source>
<translation>Sender %0</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="510"/>
<location filename="../deviceconnection.cpp" line="513"/>
<source>Could not derive bcrypt authentication hash!</source>
<translation>Kunne ikke udlede bcrypt-godkendelses-hash!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="529"/>
<location filename="../deviceconnection.cpp" line="532"/>
<source>Connected!</source>
<translation>Forbundet!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="535"/>
<location filename="../deviceconnection.cpp" line="538"/>
<source>Disconnected!</source>
<translation>Ikke forbundet!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="539"/>
<location filename="../deviceconnection.cpp" line="542"/>
<source>Reconnecting to %0</source>
<translation>Genopretter forbindelse til %0</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="548"/>
<location filename="../deviceconnection.cpp" line="550"/>
<source>state changed: %0</source>
<translation>tilstand ændret: %0</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="557"/>
<location filename="../deviceconnection.cpp" line="559"/>
<source>could not parse received json: %0 at offset %1</source>
<translation>kunne ikke parse modtaget json: %0 ved offset %1</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="574"/>
<location filename="../deviceconnection.cpp" line="576"/>
<source>unknown binary message type %0 received</source>
<translation>ukendt binær meddelelsestype %0 modtaget</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="582"/>
<location filename="../deviceconnection.cpp" line="584"/>
<source>error occured: %0</source>
<translation>der opstod en fejl: %0</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="588"/>
<location filename="../deviceconnection.cpp" line="598"/>
<source>Solalaweb rejected the saved authentication: %1</source>
<translation>Solalaweb afviste den gemte godkendelse: %1</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="609"/>
<source>ssl peer verify error</source>
<translation>ssl peer verify fejl</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="594"/>
<location filename="../deviceconnection.cpp" line="615"/>
<source>ssl errors</source>
<translation>ssl fejl</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="605"/>
<location filename="../deviceconnection.cpp" line="626"/>
<source>ssl alert sent level=%0 type=%1 description=%2</source>
<translation>ssl alarm sendt niveau=%0 type=%1 beskrivelse=%2</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="611"/>
<location filename="../deviceconnection.cpp" line="632"/>
<source>ssl alert received level=%0 type=%1 description=%2</source>
<translation>ssl alarm modtaget niveau=%0 type=%1 beskrivelse=%2</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="617"/>
<location filename="../deviceconnection.cpp" line="638"/>
<source>ssl handshake interrupted on error</source>
<translation>ssl-håndtryk afbrudt ved fejl</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="664"/>
<location filename="../deviceconnection.cpp" line="685"/>
<source>unknown response type %0</source>
<translation>ukendt svartype %0</translation>
</message>
@@ -2053,7 +2107,7 @@
<translation>Solala</translation>
</message>
<message>
<location filename="../qml/DeviceListScreen.qml" line="277"/>
<location filename="../qml/DeviceListScreen.qml" line="278"/>
<source>Add or setup device</source>
<translation>Tilføj eller opsæt enhed</translation>
</message>
@@ -2061,32 +2115,32 @@
<context>
<name>DeviceScreen</name>
<message>
<location filename="../qml/DeviceScreen.qml" line="88"/>
<location filename="../qml/DeviceScreen.qml" line="97"/>
<source>Password required</source>
<translation>Adgangskode påkrævet</translation>
</message>
<message>
<location filename="../qml/DeviceScreen.qml" line="111"/>
<location filename="../qml/DeviceScreen.qml" line="120"/>
<source>Password:</source>
<translation>Adgangskode:</translation>
</message>
<message>
<location filename="../qml/DeviceScreen.qml" line="121"/>
<location filename="../qml/DeviceScreen.qml" line="130"/>
<source>Password</source>
<translation>Adgangskode</translation>
</message>
<message>
<location filename="../qml/DeviceScreen.qml" line="131"/>
<location filename="../qml/DeviceScreen.qml" line="140"/>
<source>Authentication impossible!</source>
<translation>Autentificering umulig!</translation>
</message>
<message>
<location filename="../qml/DeviceScreen.qml" line="140"/>
<location filename="../qml/DeviceScreen.qml" line="149"/>
<source>To use this password remotely a password has to be setup first. This can be done over the AccessPoint.</source>
<translation>For fjernadgang skal der først konfigureres en adgangskode. Det kan gøres via adgangspunktet.</translation>
</message>
<message>
<location filename="../qml/DeviceScreen.qml" line="183"/>
<location filename="../qml/DeviceScreen.qml" line="199"/>
<source>Connection disturbed</source>
<translation>Forbindelsen forstyrret</translation>
</message>
@@ -2928,37 +2982,37 @@
<context>
<name>HomeAssistantSetupDialog</name>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="17"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="19"/>
<source>Edit chart</source>
<translation>Rediger diagram</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="17"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="19"/>
<source>Connect Home Assistant</source>
<translation>Forbind Home Assistant</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="138"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="140"/>
<source>Server</source>
<translation>Server</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="138"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="140"/>
<source>Login</source>
<translation>Login</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="138"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="140"/>
<source>Charts</source>
<translation>Diagrammer</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="145"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="147"/>
<source>%1. %2</source>
<translation>%1. %2</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="185"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="191"/>
<source>Before you begin</source>
<translation>Før du begynder</translation>
</message>
@@ -2981,7 +3035,7 @@ Før diagrammer kan modtage data:
• Kontrollér, at laderens entiteter er synlige i Home Assistant.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="190"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="197"/>
<source>Home Assistant must already be installed and running. A Raspberry Pi with Home Assistant on an SD card is one option; other supported Home Assistant installations work as well.
Before charts can receive data:
@@ -3000,78 +3054,83 @@ Før diagrammer kan modtage data:
• Kontrollér, at enhedens entiteter er synlige i Home Assistant.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="198"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="205"/>
<source>Installation guide</source>
<translation>Installationsvejledning</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="203"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="210"/>
<source>MQTT guide</source>
<translation>MQTT-vejledning</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="212"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="219"/>
<source>Enter the address you normally use to open Home Assistant. The app will contact this server directly.</source>
<translation>Indtast den adresse, du normalt bruger til at åbne Home Assistant. Appen kontakter denne server direkte.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="229"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="494"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="236"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="525"/>
<source>Cancel</source>
<translation>Annuller</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="232"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="239"/>
<source>Next</source>
<translation>Næste</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="247"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="254"/>
<source>Create a long-lived access token in your Home Assistant profile and paste it below. Your Home Assistant password is never entered into this app.</source>
<translation>Opret et langtidsholdbart adgangstoken i din Home Assistant-profil, og indsæt det nedenfor. Din Home Assistant-adgangskode indtastes aldrig i denne app.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="253"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="260"/>
<source>Open Home Assistant profile</source>
<translation>Åbn Home Assistant-profil</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="266"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="273"/>
<source>Long-lived access token</source>
<translation>Langtidsholdbart adgangstoken</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="272"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="279"/>
<source>Hide</source>
<translation>Skjul</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="272"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="279"/>
<source>Show</source>
<translation>Vis</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="296"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="303"/>
<source>Back</source>
<translation>Tilbage</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="299"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="306"/>
<source>Connect</source>
<translation>Opret forbindelse</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="315"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="322"/>
<source>Create charts and choose exactly which Home Assistant entities each chart should display.</source>
<translation>Opret diagrammer, og vælg præcist, hvilke Home Assistant-entiteter hvert diagram skal vise.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="329"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="336"/>
<source>Change server or access token</source>
<translation>Skift server eller adgangstoken</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="343"/>
<source>Forget Home Assistant configuration</source>
<translation>Glem Home Assistant-konfigurationen</translation>
</message>
<message numerus="yes">
<location filename="../qml/HomeAssistantSetupDialog.qml" line="363"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="377"/>
<source>%n entity(s)</source>
<translation>
<numerusform>%n entitet</numerusform>
@@ -3079,42 +3138,42 @@ Før diagrammer kan modtage data:
</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="368"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="382"/>
<source>Edit</source>
<translation>Rediger</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="372"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="386"/>
<source>Delete</source>
<translation>Slet</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="381"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="395"/>
<source>No charts configured yet.</source>
<translation>Der er endnu ikke konfigureret nogen diagrammer.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="389"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="403"/>
<source>Add chart</source>
<translation>Tilføj diagram</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="391"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="405"/>
<source>Done</source>
<translation>Færdig</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="404"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="418"/>
<source>Chart title</source>
<translation>Diagramtitel</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="412"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="426"/>
<source>Search by name, entity ID, unit or device class…</source>
<translation>Søg efter navn, entitets-id, enhed eller enhedsklasse…</translation>
</message>
<message numerus="yes">
<location filename="../qml/HomeAssistantSetupDialog.qml" line="421"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="435"/>
<source>%n entity(s) selected</source>
<translation>
<numerusform>%n entitet valgt</numerusform>
@@ -3122,17 +3181,17 @@ Før diagrammer kan modtage data:
</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="431"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="445"/>
<source>Reload</source>
<translation>Indlæs igen</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="486"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="517"/>
<source>No matching entities found.</source>
<translation>Ingen matchende entiteter fundet.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="497"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="528"/>
<source>Save chart</source>
<translation>Gem diagram</translation>
</message>
@@ -3292,7 +3351,7 @@ Før diagrammer kan modtage data:
<translation type="vanished">Information</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="297"/>
<location filename="../qml/InformationsTabPage.qml" line="303"/>
<source>Idle</source>
<translation>Inaktiv</translation>
</message>
@@ -3305,138 +3364,137 @@ Før diagrammer kan modtage data:
<translation type="vanished">INDLÆSER</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="90"/>
<location filename="../qml/InformationsTabPage.qml" line="93"/>
<source>%1 – %2</source>
<translation>%1 – %2</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="175"/>
<location filename="../qml/InformationsTabPage.qml" line="178"/>
<source>Receiving manufacturer data…</source>
<translation>Modtager producentdata…</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="177"/>
<location filename="../qml/InformationsTabPage.qml" line="180"/>
<source>Loading manufacturer charts…</source>
<translation>Indlæser producentdiagrammer…</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="191"/>
<location filename="../qml/InformationsTabPage.qml" line="194"/>
<source>%1 images</source>
<translation>%1 billeder</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="193"/>
<location filename="../qml/InformationsTabPage.qml" line="196"/>
<source>%1 charts</source>
<translation>%1 diagrammer</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="195"/>
<location filename="../qml/InformationsTabPage.qml" line="198"/>
<source>Loaded %1</source>
<translation>%1 indlæst</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="196"/>
<location filename="../qml/InformationsTabPage.qml" line="199"/>
<source>No information data received</source>
<translation>Ingen informationsdata modtaget</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="198"/>
<location filename="../qml/InformationsTabPage.qml" line="201"/>
<source>The manufacturer cloud returned invalid data.</source>
<translation>Producentens cloud returnerede ugyldige data.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="208"/>
<location filename="../qml/InformationsTabPage.qml" line="211"/>
<source>Requesting manufacturer data…</source>
<translation>Anmoder om producentdata…</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="216"/>
<location filename="../qml/InformationsTabPage.qml" line="219"/>
<source>Information</source>
<translation>Information</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="231"/>
<location filename="../qml/InformationsTabPage.qml" line="234"/>
<source>Manufacturer cloud</source>
<translation>Producentens cloud</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="305"/>
<location filename="../qml/InformationsTabPage.qml" line="311"/>
<source>The manufacturer does not even think you are worth the raw data that you could inspect and zoom. Instead, it sends these ugly low-resolution pictures that you cannot meaningfully interact with—let alone control the displayed time range.</source>
<translation>Producenten mener ikke engang, at du er værdig til rådataene, som du kunne undersøge og zoome ind i. I stedet sender den disse grimme billeder i lav opløsning, som du ikke kan interagere meningsfuldt med – endsige styre det viste tidsinterval.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="352"/>
<location filename="../qml/InformationsTabPage.qml" line="362"/>
<source>Own your consumption history</source>
<translation>Bevar ejerskabet over din forbrugshistorik</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="357"/>
<location filename="../qml/InformationsTabPage.qml" line="368"/>
<source>Connect the device to your own Home Assistant installation for fast, dependable history that remains under your control. You decide how long data is retained and which measurements are recorded.</source>
<translation>Forbind enheden med din egen Home Assistant-installation for at få hurtig og pålidelig historik, der forbliver under din kontrol. Du bestemmer, hvor længe data gemmes, og hvilke målinger der registreres.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="372"/>
<location filename="../qml/InformationsTabPage.qml" line="383"/>
<source>Connected to Home Assistant</source>
<translation>Forbundet med Home Assistant</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="373"/>
<location filename="../qml/InformationsTabPage.qml" line="384"/>
<source>Home Assistant is not configured</source>
<translation>Home Assistant er ikke konfigureret</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="387"/>
<location filename="../qml/InformationsTabPage.qml" line="398"/>
<source>Configure</source>
<translation>Konfigurer</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="387"/>
<location filename="../qml/InformationsTabPage.qml" line="521"/>
<location filename="../qml/InformationsTabPage.qml" line="398"/>
<location filename="../qml/InformationsTabPage.qml" line="536"/>
<source>Set up</source>
<translation>Konfigurer</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="451"/>
<location filename="../qml/InformationsTabPage.qml" line="462"/>
<source>Refresh</source>
<translation>Opdater</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="503"/>
<location filename="../qml/InformationsTabPage.qml" line="517"/>
<source>Connect Home Assistant to display history</source>
<translation>Forbind Home Assistant for at vise historik</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="504"/>
<location filename="../qml/InformationsTabPage.qml" line="518"/>
<source>Create your first history chart</source>
<translation>Opret dit første historikdiagram</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="512"/>
<location filename="../qml/InformationsTabPage.qml" line="527"/>
<source>The setup wizard connects to your server and lets you select the entities to display.</source>
<translation>Opsætningsguiden opretter forbindelse til din server og lader dig vælge de entiteter, der skal vises.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="513"/>
<location filename="../qml/InformationsTabPage.qml" line="528"/>
<source>Open the configuration and add a chart with one or more Home Assistant entities.</source>
<translation>Åbn konfigurationen, og tilføj et diagram med en eller flere Home Assistant-entiteter.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="521"/>
<location filename="../qml/InformationsTabPage.qml" line="536"/>
<source>Add chart</source>
<translation>Tilføj diagram</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="530"/>
<source>Forget Home Assistant configuration</source>
<translation>Glem Home Assistant-konfigurationen</translation>
<translation type="vanished">Glem Home Assistant-konfigurationen</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="543"/>
<location filename="../qml/InformationsTabPage.qml" line="553"/>
<source>Forget Home Assistant?</source>
<translation>Glem Home Assistant?</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="550"/>
<location filename="../qml/InformationsTabPage.qml" line="563"/>
<source>This removes the server address, access token and all chart definitions stored in this app.</source>
<translation>Dette fjerner serveradressen, adgangstokenet og alle diagramdefinitioner, der er gemt i appen.</translation>
</message>
@@ -3445,7 +3503,7 @@ Før diagrammer kan modtage data:
<translation type="vanished">Begrænset · upålidelig · langsom</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="254"/>
<location filename="../qml/InformationsTabPage.qml" line="257"/>
<source>Your own cloud</source>
<translation>Din egen cloud</translation>
</message>
@@ -3454,22 +3512,22 @@ Før diagrammer kan modtage data:
<translation type="vanished">Historik · vedligeholdt · hurtig</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="238"/>
<location filename="../qml/InformationsTabPage.qml" line="241"/>
<source>Lacks features · unreliable · slow</source>
<translation>Mangler funktioner · upålidelig · langsom</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="261"/>
<location filename="../qml/InformationsTabPage.qml" line="264"/>
<source>Historical data · properly maintained · fast</source>
<translation>Historiske data · godt vedligeholdt · hurtig</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="288"/>
<location filename="../qml/InformationsTabPage.qml" line="294"/>
<source>The manufacturer cloud provides basic charts, but can be slow, unavailable or limited to the data selected by the manufacturer.</source>
<translation>Producentens cloud leverer grundlæggende diagrammer, men kan være langsom, utilgængelig eller begrænset til de data, som producenten har valgt.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="339"/>
<location filename="../qml/InformationsTabPage.qml" line="345"/>
<source>Download information</source>
<translation>Download information</translation>
</message>
@@ -3490,37 +3548,37 @@ Før diagrammer kan modtage data:
<translation type="vanished">Opsæt forbindelse til Home Assistant</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="395"/>
<location filename="../qml/InformationsTabPage.qml" line="406"/>
<source>Historical data</source>
<translation>Historiske data</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="405"/>
<location filename="../qml/InformationsTabPage.qml" line="416"/>
<source>Day</source>
<translation>Dag</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="406"/>
<location filename="../qml/InformationsTabPage.qml" line="417"/>
<source>Week</source>
<translation>Uge</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="407"/>
<location filename="../qml/InformationsTabPage.qml" line="418"/>
<source>Month</source>
<translation>Måned</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="408"/>
<location filename="../qml/InformationsTabPage.qml" line="419"/>
<source>Year</source>
<translation>År</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="427"/>
<location filename="../qml/InformationsTabPage.qml" line="438"/>
<source>Previous</source>
<translation>Forrige</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="442"/>
<location filename="../qml/InformationsTabPage.qml" line="453"/>
<source>Next</source>
<translation>Næste</translation>
</message>
@@ -5104,6 +5162,74 @@ Før diagrammer kan modtage data:
<translation>Licenser</translation>
</message>
</context>
<context>
<name>SolalawebSetupDialog</name>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="15"/>
<source>Set up Solalaweb</source>
<translation>Konfigurer Solalaweb</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="48"/>
<source>Solalaweb now uses Authentik. Create a dedicated app password instead of entering your normal account password. Choose a lifetime long enough for this app, then copy the password itself—not its name.</source>
<translation>Solalaweb bruger nu Authentik. Opret en særskilt appadgangskode i stedet for at indtaste din normale kontoadgangskode. Vælg en gyldighedsperiode, der er lang nok til denne app, og kopiér derefter selve adgangskoden – ikke dens navn.</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="54"/>
<source>Create an Authentik app password</source>
<translation>Opret en Authentik-appadgangskode</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="61"/>
<source>Your username is usually your email address. The user-details page shows the exact username expected by Authentik.</source>
<translation>Dit brugernavn er normalt din e-mailadresse. Siden med brugeroplysninger viser det nøjagtige brugernavn, som Authentik forventer.</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="68"/>
<source>Open Authentik user details</source>
<translation>Åbn brugeroplysninger i Authentik</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="74"/>
<source>Username</source>
<translation>Brugernavn</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="83"/>
<source>Username or email address</source>
<translation>Brugernavn eller e-mailadresse</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="89"/>
<source>App password</source>
<translation>Appadgangskode</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="101"/>
<source>Authentik app password</source>
<translation>Authentik-appadgangskode</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="109"/>
<source>Hide</source>
<translation>Skjul</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="109"/>
<source>Show</source>
<translation>Vis</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="133"/>
<source>Cancel</source>
<translation>Annuller</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="145"/>
<source>Verify and save</source>
<translation>Bekræft og gem</translation>
</message>
</context>
<context>
<name>StartStopButton</name>
<message>
+271 -153
View File
@@ -177,54 +177,100 @@
<translation>https://github.com/goecharger/go-eCharger-API-v1/blob/master/go-eCharger%20API%20v1%20DE.md</translation>
</message>
</context>
<context>
<name>AppSettings</name>
<message>
<location filename="../appsettings.cpp" line="25"/>
<source>The Solalaweb authentication check timed out.</source>
<translation>Zeitüberschreitung bei der Solalaweb-Authentifizierungsprüfung.</translation>
</message>
<message>
<location filename="../appsettings.cpp" line="35"/>
<source>Authentication could not be verified: %1</source>
<translation>Die Authentifizierung konnte nicht überprüft werden: %1</translation>
</message>
<message>
<location filename="../appsettings.cpp" line="118"/>
<source>Enter both the username and the app password.</source>
<translation>Gib sowohl den Benutzernamen als auch das App-Passwort ein.</translation>
</message>
</context>
<context>
<name>AppSettingsPage</name>
<message>
<location filename="../qml/AppSettingsPage.qml" line="8"/>
<location filename="../qml/AppSettingsPage.qml" line="9"/>
<source>App Settings</source>
<translation>App Einstellungen</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="15"/>
<location filename="../qml/AppSettingsPage.qml" line="20"/>
<source>Language</source>
<translation>Sprache</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="29"/>
<location filename="../qml/AppSettingsPage.qml" line="34"/>
<source>Number of app instances:</source>
<translation>Anzahl an App Instanzen:</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="43"/>
<location filename="../qml/AppSettingsPage.qml" line="48"/>
<source>Swipe left or right with three fingers to switch between app instances.</source>
<translation>Mit drei Fingern nach links oder rechts wischen, um zwischen App-Instanzen zu wechseln.</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="58"/>
<location filename="../qml/AppSettingsPage.qml" line="56"/>
<source>Solalaweb</source>
<translation>Solalaweb</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="61"/>
<source>Set up Authentik access to make the private Solalaweb connection available for saved devices.</source>
<translation>Richte den Authentik-Zugang ein, um die private Solalaweb-Verbindung für gespeicherte Geräte verfügbar zu machen.</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="69"/>
<source>Authentication verified for %1</source>
<translation>Authentifizierung für %1 bestätigt</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="70"/>
<source>Authentication has not been verified</source>
<translation>Die Authentifizierung wurde nicht bestätigt</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="79"/>
<source>Change Solalaweb authentication</source>
<translation>Solalaweb-Authentifizierung ändern</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="80"/>
<source>Set up Solalaweb</source>
<translation>Solalaweb einrichten</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="87"/>
<source>Show Solalaweb</source>
<translation>Solalaweb anzeigen</translation>
</message>
<message>
<source>solalaweb key:</source>
<translation>solalaweb key:</translation>
<translation type="vanished">solalaweb key:</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="64"/>
<location filename="../qml/AppSettingsPage.qml" line="81"/>
<source>Select...</source>
<translation>Auswählen...</translation>
<translation type="vanished">Auswählen...</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="64"/>
<location filename="../qml/AppSettingsPage.qml" line="81"/>
<source>Replace...</source>
<translation>Ersetzen...</translation>
<translation type="vanished">Ersetzen...</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="75"/>
<source>solalaweb cert:</source>
<translation>solalaweb cert:</translation>
<translation type="vanished">solalaweb cert:</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="95"/>
<source>Show solalaweb:</source>
<translation>Zeige solalaweb:</translation>
<translation type="vanished">Zeige solalaweb:</translation>
</message>
</context>
<context>
@@ -1864,227 +1910,227 @@
<translation type="obsolete">Unbekannt</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="96"/>
<location filename="../deviceconnection.cpp" line="102"/>
<source>Connecting to %0</source>
<translation>Verbinde zu %0</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="143"/>
<location filename="../deviceconnection.cpp" line="146"/>
<source>Received something that is not a json object!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="151"/>
<location filename="../deviceconnection.cpp" line="154"/>
<source>Received something that does not contain a type!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="158"/>
<location filename="../deviceconnection.cpp" line="161"/>
<source>Received something with a non-string type!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="174"/>
<location filename="../deviceconnection.cpp" line="177"/>
<source>Received hello without serial!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="181"/>
<location filename="../deviceconnection.cpp" line="184"/>
<source>Received hello with a non-string serial!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="193"/>
<location filename="../deviceconnection.cpp" line="196"/>
<source>Received hello with a non-bool secured!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="206"/>
<location filename="../deviceconnection.cpp" line="209"/>
<source>Received hello without manufacturer!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="213"/>
<location filename="../deviceconnection.cpp" line="216"/>
<source>Received hello with a non-string manufacturer!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="242"/>
<location filename="../deviceconnection.cpp" line="245"/>
<source>Received hello without friendly_name!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="249"/>
<location filename="../deviceconnection.cpp" line="252"/>
<source>Received hello with a non-string friendly_name!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="224"/>
<location filename="../deviceconnection.cpp" line="227"/>
<source>Received hello without devicetype!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="106"/>
<source>Could not parse solalaweb certificate!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="117"/>
<source>Could not parse solalaweb key!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="231"/>
<location filename="../deviceconnection.cpp" line="234"/>
<source>Received hello with a non-string devicetype!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="270"/>
<location filename="../deviceconnection.cpp" line="273"/>
<source>Received authRequired without token1!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="277"/>
<location filename="../deviceconnection.cpp" line="280"/>
<source>Received authRequired with a non-string token1!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="288"/>
<location filename="../deviceconnection.cpp" line="291"/>
<source>Received authRequired without token2!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="295"/>
<location filename="../deviceconnection.cpp" line="298"/>
<source>Received authRequired with a non-string token2!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="344"/>
<location filename="../deviceconnection.cpp" line="347"/>
<source>Received fullStatus with a non-bool partial!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="354"/>
<location filename="../deviceconnection.cpp" line="357"/>
<source>Received fullStatus without a status!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="361"/>
<location filename="../deviceconnection.cpp" line="364"/>
<source>Received fullStatus with a non-object status!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="369"/>
<location filename="../deviceconnection.cpp" line="372"/>
<source>Received partial fullStatus</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="369"/>
<location filename="../deviceconnection.cpp" line="372"/>
<source>Received last fullStatus</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="379"/>
<location filename="../deviceconnection.cpp" line="382"/>
<source>Received deltaStatus without a status!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="386"/>
<location filename="../deviceconnection.cpp" line="389"/>
<source>Received deltaStatus with a non-object status!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="166"/>
<location filename="../deviceconnection.cpp" line="169"/>
<source>Received message type %0 %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="308"/>
<location filename="../deviceconnection.cpp" line="113"/>
<source>Solalaweb authentication must be configured again.</source>
<translation>Die Solalaweb-Authentifizierung muss erneut eingerichtet werden.</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="311"/>
<source>Received authRequired with a non-string hash algorithm!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="321"/>
<location filename="../deviceconnection.cpp" line="324"/>
<source>Received authRequired with unsupported hash algorithm %0!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="427"/>
<location filename="../deviceconnection.cpp" line="430"/>
<source>Received message with a non-string requestId!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="480"/>
<location filename="../deviceconnection.cpp" line="483"/>
<source>Sending %0</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="510"/>
<location filename="../deviceconnection.cpp" line="513"/>
<source>Could not derive bcrypt authentication hash!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="529"/>
<location filename="../deviceconnection.cpp" line="532"/>
<source>Connected!</source>
<translation>Verbunden!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="535"/>
<location filename="../deviceconnection.cpp" line="538"/>
<source>Disconnected!</source>
<translation>Verbindung verloren!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="539"/>
<location filename="../deviceconnection.cpp" line="542"/>
<source>Reconnecting to %0</source>
<translation>Verbinde wieder zu %0</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="548"/>
<location filename="../deviceconnection.cpp" line="550"/>
<source>state changed: %0</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="557"/>
<location filename="../deviceconnection.cpp" line="559"/>
<source>could not parse received json: %0 at offset %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="574"/>
<location filename="../deviceconnection.cpp" line="576"/>
<source>unknown binary message type %0 received</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="582"/>
<location filename="../deviceconnection.cpp" line="584"/>
<source>error occured: %0</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="588"/>
<location filename="../deviceconnection.cpp" line="598"/>
<source>Solalaweb rejected the saved authentication: %1</source>
<translation>Solalaweb hat die gespeicherte Authentifizierung abgelehnt: %1</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="609"/>
<source>ssl peer verify error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="594"/>
<location filename="../deviceconnection.cpp" line="615"/>
<source>ssl errors</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="605"/>
<location filename="../deviceconnection.cpp" line="626"/>
<source>ssl alert sent level=%0 type=%1 description=%2</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="611"/>
<location filename="../deviceconnection.cpp" line="632"/>
<source>ssl alert received level=%0 type=%1 description=%2</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="617"/>
<location filename="../deviceconnection.cpp" line="638"/>
<source>ssl handshake interrupted on error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="664"/>
<location filename="../deviceconnection.cpp" line="685"/>
<source>unknown response type %0</source>
<translation type="unfinished"></translation>
</message>
@@ -2161,7 +2207,7 @@
<translation>Solala</translation>
</message>
<message>
<location filename="../qml/DeviceListScreen.qml" line="277"/>
<location filename="../qml/DeviceListScreen.qml" line="278"/>
<source>Add or setup device</source>
<translation>Gerät hinzufügen oder einrichten</translation>
</message>
@@ -2221,32 +2267,32 @@
<context>
<name>DeviceScreen</name>
<message>
<location filename="../qml/DeviceScreen.qml" line="88"/>
<location filename="../qml/DeviceScreen.qml" line="97"/>
<source>Password required</source>
<translation>Passwort erforderlich</translation>
</message>
<message>
<location filename="../qml/DeviceScreen.qml" line="111"/>
<location filename="../qml/DeviceScreen.qml" line="120"/>
<source>Password:</source>
<translation>Passwort:</translation>
</message>
<message>
<location filename="../qml/DeviceScreen.qml" line="121"/>
<location filename="../qml/DeviceScreen.qml" line="130"/>
<source>Password</source>
<translation>Passwort</translation>
</message>
<message>
<location filename="../qml/DeviceScreen.qml" line="131"/>
<location filename="../qml/DeviceScreen.qml" line="140"/>
<source>Authentication impossible!</source>
<translation>Authentifizierung unmöglich!</translation>
</message>
<message>
<location filename="../qml/DeviceScreen.qml" line="140"/>
<location filename="../qml/DeviceScreen.qml" line="149"/>
<source>To use this password remotely a password has to be setup first. This can be done over the AccessPoint.</source>
<translation>Um dieses Gerät aus der Ferne nutzen zu können, müssen Sie erst ein Passwort einrichten. Dies kann über den AccessPoint gemacht werden.</translation>
</message>
<message>
<location filename="../qml/DeviceScreen.qml" line="183"/>
<location filename="../qml/DeviceScreen.qml" line="199"/>
<source>Connection disturbed</source>
<translation>Verbindung schwer gestört</translation>
</message>
@@ -3103,37 +3149,37 @@
<context>
<name>HomeAssistantSetupDialog</name>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="17"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="19"/>
<source>Edit chart</source>
<translation>Diagramm bearbeiten</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="17"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="19"/>
<source>Connect Home Assistant</source>
<translation>Home Assistant verbinden</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="138"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="140"/>
<source>Server</source>
<translation>Server</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="138"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="140"/>
<source>Login</source>
<translation>Anmeldung</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="138"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="140"/>
<source>Charts</source>
<translation>Diagramme</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="145"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="147"/>
<source>%1. %2</source>
<translation>%1. %2</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="185"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="191"/>
<source>Before you begin</source>
<translation>Bevor du beginnst</translation>
</message>
@@ -3156,7 +3202,7 @@ Bevor Diagramme Daten empfangen können:
• Prüfe, ob die Entitäten des Chargers in Home Assistant sichtbar sind.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="190"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="197"/>
<source>Home Assistant must already be installed and running. A Raspberry Pi with Home Assistant on an SD card is one option; other supported Home Assistant installations work as well.
Before charts can receive data:
@@ -3175,78 +3221,83 @@ Bevor Diagramme Daten empfangen können:
• Prüfe, ob die Entitäten des Geräts in Home Assistant sichtbar sind.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="198"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="205"/>
<source>Installation guide</source>
<translation>Installationsanleitung</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="203"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="210"/>
<source>MQTT guide</source>
<translation>MQTT-Anleitung</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="212"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="219"/>
<source>Enter the address you normally use to open Home Assistant. The app will contact this server directly.</source>
<translation>Gib die Adresse ein, über die du Home Assistant normalerweise öffnest. Die App verbindet sich direkt mit diesem Server.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="229"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="494"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="236"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="525"/>
<source>Cancel</source>
<translation>Abbrechen</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="232"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="239"/>
<source>Next</source>
<translation>Weiter</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="247"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="254"/>
<source>Create a long-lived access token in your Home Assistant profile and paste it below. Your Home Assistant password is never entered into this app.</source>
<translation>Erstelle in deinem Home-Assistant-Profil ein langlebiges Zugriffstoken und füge es unten ein. Dein Home-Assistant-Passwort wird niemals in diese App eingegeben.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="253"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="260"/>
<source>Open Home Assistant profile</source>
<translation>Home-Assistant-Profil öffnen</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="266"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="273"/>
<source>Long-lived access token</source>
<translation>Langlebiges Zugriffstoken</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="272"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="279"/>
<source>Hide</source>
<translation>Ausblenden</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="272"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="279"/>
<source>Show</source>
<translation>Anzeigen</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="296"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="303"/>
<source>Back</source>
<translation>Zurück</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="299"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="306"/>
<source>Connect</source>
<translation>Verbinden</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="315"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="322"/>
<source>Create charts and choose exactly which Home Assistant entities each chart should display.</source>
<translation>Erstelle Diagramme und wähle genau aus, welche Home-Assistant-Entitäten jedes Diagramm anzeigen soll.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="329"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="336"/>
<source>Change server or access token</source>
<translation>Server oder Zugriffstoken ändern</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="343"/>
<source>Forget Home Assistant configuration</source>
<translation>Home-Assistant-Konfiguration vergessen</translation>
</message>
<message numerus="yes">
<location filename="../qml/HomeAssistantSetupDialog.qml" line="363"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="377"/>
<source>%n entity(s)</source>
<translation>
<numerusform>%n Entität</numerusform>
@@ -3254,42 +3305,42 @@ Bevor Diagramme Daten empfangen können:
</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="368"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="382"/>
<source>Edit</source>
<translation>Bearbeiten</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="372"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="386"/>
<source>Delete</source>
<translation>Löschen</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="381"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="395"/>
<source>No charts configured yet.</source>
<translation>Noch keine Diagramme eingerichtet.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="389"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="403"/>
<source>Add chart</source>
<translation>Diagramm hinzufügen</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="391"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="405"/>
<source>Done</source>
<translation>Fertig</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="404"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="418"/>
<source>Chart title</source>
<translation>Diagrammtitel</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="412"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="426"/>
<source>Search by name, entity ID, unit or device class…</source>
<translation>Nach Name, Entitäts-ID, Einheit oder Geräteklasse suchen…</translation>
</message>
<message numerus="yes">
<location filename="../qml/HomeAssistantSetupDialog.qml" line="421"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="435"/>
<source>%n entity(s) selected</source>
<translation>
<numerusform>%n Entität ausgewählt</numerusform>
@@ -3297,17 +3348,17 @@ Bevor Diagramme Daten empfangen können:
</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="431"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="445"/>
<source>Reload</source>
<translation>Neu laden</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="486"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="517"/>
<source>No matching entities found.</source>
<translation>Keine passenden Entitäten gefunden.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="497"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="528"/>
<source>Save chart</source>
<translation>Diagramm speichern</translation>
</message>
@@ -3467,143 +3518,142 @@ Bevor Diagramme Daten empfangen können:
<translation type="vanished">Informationen</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="297"/>
<location filename="../qml/InformationsTabPage.qml" line="303"/>
<source>Idle</source>
<translation>Inaktiv</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="90"/>
<location filename="../qml/InformationsTabPage.qml" line="93"/>
<source>%1 – %2</source>
<translation>%1 – %2</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="175"/>
<location filename="../qml/InformationsTabPage.qml" line="178"/>
<source>Receiving manufacturer data…</source>
<translation>Herstellerdaten werden empfangen…</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="177"/>
<location filename="../qml/InformationsTabPage.qml" line="180"/>
<source>Loading manufacturer charts…</source>
<translation>Herstellerdiagramme werden geladen…</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="191"/>
<location filename="../qml/InformationsTabPage.qml" line="194"/>
<source>%1 images</source>
<translation>%1 Bilder</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="193"/>
<location filename="../qml/InformationsTabPage.qml" line="196"/>
<source>%1 charts</source>
<translation>%1 Diagramme</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="195"/>
<location filename="../qml/InformationsTabPage.qml" line="198"/>
<source>Loaded %1</source>
<translation>%1 geladen</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="196"/>
<location filename="../qml/InformationsTabPage.qml" line="199"/>
<source>No information data received</source>
<translation>Keine Informationsdaten empfangen</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="198"/>
<location filename="../qml/InformationsTabPage.qml" line="201"/>
<source>The manufacturer cloud returned invalid data.</source>
<translation>Die Hersteller-Cloud hat ungültige Daten zurückgegeben.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="208"/>
<location filename="../qml/InformationsTabPage.qml" line="211"/>
<source>Requesting manufacturer data…</source>
<translation>Herstellerdaten werden angefordert…</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="216"/>
<location filename="../qml/InformationsTabPage.qml" line="219"/>
<source>Information</source>
<translation>Informationen</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="231"/>
<location filename="../qml/InformationsTabPage.qml" line="234"/>
<source>Manufacturer cloud</source>
<translation>Hersteller-Cloud</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="305"/>
<location filename="../qml/InformationsTabPage.qml" line="311"/>
<source>The manufacturer does not even think you are worth the raw data that you could inspect and zoom. Instead, it sends these ugly low-resolution pictures that you cannot meaningfully interact with—let alone control the displayed time range.</source>
<translation>Der Hersteller hält dich nicht einmal für würdig, die Rohdaten zu erhalten, die du untersuchen und vergrößern könntest. Stattdessen schickt er diese hässlichen Bilder in niedriger Auflösung, mit denen du nicht sinnvoll interagieren kannst – geschweige denn den angezeigten Zeitraum steuern.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="352"/>
<location filename="../qml/InformationsTabPage.qml" line="362"/>
<source>Own your consumption history</source>
<translation>Dein Verbrauchsverlauf gehört dir</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="357"/>
<location filename="../qml/InformationsTabPage.qml" line="368"/>
<source>Connect the device to your own Home Assistant installation for fast, dependable history that remains under your control. You decide how long data is retained and which measurements are recorded.</source>
<translation>Verbinde das Gerät mit deiner eigenen Home-Assistant-Installation, um einen schnellen, zuverlässigen Verlauf unter deiner Kontrolle zu erhalten. Du bestimmst, wie lange Daten aufbewahrt und welche Messwerte aufgezeichnet werden.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="372"/>
<location filename="../qml/InformationsTabPage.qml" line="383"/>
<source>Connected to Home Assistant</source>
<translation>Mit Home Assistant verbunden</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="373"/>
<location filename="../qml/InformationsTabPage.qml" line="384"/>
<source>Home Assistant is not configured</source>
<translation>Home Assistant ist nicht eingerichtet</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="387"/>
<location filename="../qml/InformationsTabPage.qml" line="398"/>
<source>Configure</source>
<translation>Konfigurieren</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="387"/>
<location filename="../qml/InformationsTabPage.qml" line="521"/>
<location filename="../qml/InformationsTabPage.qml" line="398"/>
<location filename="../qml/InformationsTabPage.qml" line="536"/>
<source>Set up</source>
<translation>Einrichten</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="451"/>
<location filename="../qml/InformationsTabPage.qml" line="462"/>
<source>Refresh</source>
<translation>Aktualisieren</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="503"/>
<location filename="../qml/InformationsTabPage.qml" line="517"/>
<source>Connect Home Assistant to display history</source>
<translation>Verbinde Home Assistant, um den Verlauf anzuzeigen</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="504"/>
<location filename="../qml/InformationsTabPage.qml" line="518"/>
<source>Create your first history chart</source>
<translation>Erstelle dein erstes Verlaufsdiagramm</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="512"/>
<location filename="../qml/InformationsTabPage.qml" line="527"/>
<source>The setup wizard connects to your server and lets you select the entities to display.</source>
<translation>Der Einrichtungsassistent verbindet sich mit deinem Server und lässt dich die anzuzeigenden Entitäten auswählen.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="513"/>
<location filename="../qml/InformationsTabPage.qml" line="528"/>
<source>Open the configuration and add a chart with one or more Home Assistant entities.</source>
<translation>Öffne die Konfiguration und füge ein Diagramm mit einer oder mehreren Home-Assistant-Entitäten hinzu.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="521"/>
<location filename="../qml/InformationsTabPage.qml" line="536"/>
<source>Add chart</source>
<translation>Diagramm hinzufügen</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="530"/>
<source>Forget Home Assistant configuration</source>
<translation>Home-Assistant-Konfiguration vergessen</translation>
<translation type="vanished">Home-Assistant-Konfiguration vergessen</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="543"/>
<location filename="../qml/InformationsTabPage.qml" line="553"/>
<source>Forget Home Assistant?</source>
<translation>Home Assistant vergessen?</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="550"/>
<location filename="../qml/InformationsTabPage.qml" line="563"/>
<source>This removes the server address, access token and all chart definitions stored in this app.</source>
<translation>Dadurch werden die Serveradresse, das Zugriffstoken und alle in dieser App gespeicherten Diagrammdefinitionen entfernt.</translation>
</message>
@@ -3612,7 +3662,7 @@ Bevor Diagramme Daten empfangen können:
<translation type="vanished">Eingeschränkt · unzuverlässig · langsam</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="254"/>
<location filename="../qml/InformationsTabPage.qml" line="257"/>
<source>Your own cloud</source>
<translation>Eigene Cloud</translation>
</message>
@@ -3621,22 +3671,22 @@ Bevor Diagramme Daten empfangen können:
<translation type="vanished">Verlauf · gepflegt · schnell</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="238"/>
<location filename="../qml/InformationsTabPage.qml" line="241"/>
<source>Lacks features · unreliable · slow</source>
<translation>Fehlende Funktionen · unzuverlässig · langsam</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="261"/>
<location filename="../qml/InformationsTabPage.qml" line="264"/>
<source>Historical data · properly maintained · fast</source>
<translation>Historische Daten · gut gepflegt · schnell</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="288"/>
<location filename="../qml/InformationsTabPage.qml" line="294"/>
<source>The manufacturer cloud provides basic charts, but can be slow, unavailable or limited to the data selected by the manufacturer.</source>
<translation>Die Hersteller-Cloud stellt grundlegende Diagramme bereit, kann jedoch langsam, nicht erreichbar oder auf vom Hersteller ausgewählte Daten beschränkt sein.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="339"/>
<location filename="../qml/InformationsTabPage.qml" line="345"/>
<source>Download information</source>
<translation>Informationen herunterladen</translation>
</message>
@@ -3657,37 +3707,37 @@ Bevor Diagramme Daten empfangen können:
<translation type="vanished">Verbindung zu Home Assistant einrichten</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="395"/>
<location filename="../qml/InformationsTabPage.qml" line="406"/>
<source>Historical data</source>
<translation>Historische Daten</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="405"/>
<location filename="../qml/InformationsTabPage.qml" line="416"/>
<source>Day</source>
<translation>Tag</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="406"/>
<location filename="../qml/InformationsTabPage.qml" line="417"/>
<source>Week</source>
<translation>Woche</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="407"/>
<location filename="../qml/InformationsTabPage.qml" line="418"/>
<source>Month</source>
<translation>Monat</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="408"/>
<location filename="../qml/InformationsTabPage.qml" line="419"/>
<source>Year</source>
<translation>Jahr</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="427"/>
<location filename="../qml/InformationsTabPage.qml" line="438"/>
<source>Previous</source>
<translation>Zurück</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="442"/>
<location filename="../qml/InformationsTabPage.qml" line="453"/>
<source>Next</source>
<translation>Weiter</translation>
</message>
@@ -5400,6 +5450,74 @@ Bevor Diagramme Daten empfangen können:
<translation type="vanished">Firmware • Hardwareinformationen • Lizenzen</translation>
</message>
</context>
<context>
<name>SolalawebSetupDialog</name>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="15"/>
<source>Set up Solalaweb</source>
<translation>Solalaweb einrichten</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="48"/>
<source>Solalaweb now uses Authentik. Create a dedicated app password instead of entering your normal account password. Choose a lifetime long enough for this app, then copy the password itself—not its name.</source>
<translation>Solalaweb verwendet jetzt Authentik. Erstelle ein eigenes App-Passwort, statt dein normales Kontopasswort einzugeben. Wähle eine für diese App ausreichend lange Gültigkeitsdauer und kopiere dann das Passwort selbst – nicht seinen Namen.</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="54"/>
<source>Create an Authentik app password</source>
<translation>Authentik-App-Passwort erstellen</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="61"/>
<source>Your username is usually your email address. The user-details page shows the exact username expected by Authentik.</source>
<translation>Dein Benutzername ist normalerweise deine E-Mail-Adresse. Auf der Seite mit den Benutzerdetails steht der genaue Benutzername, den Authentik erwartet.</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="68"/>
<source>Open Authentik user details</source>
<translation>Authentik-Benutzerdetails öffnen</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="74"/>
<source>Username</source>
<translation>Benutzername</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="83"/>
<source>Username or email address</source>
<translation>Benutzername oder E-Mail-Adresse</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="89"/>
<source>App password</source>
<translation>App-Passwort</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="101"/>
<source>Authentik app password</source>
<translation>Authentik-App-Passwort</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="109"/>
<source>Hide</source>
<translation>Ausblenden</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="109"/>
<source>Show</source>
<translation>Anzeigen</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="133"/>
<source>Cancel</source>
<translation>Abbrechen</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="145"/>
<source>Verify and save</source>
<translation>Überprüfen und speichern</translation>
</message>
</context>
<context>
<name>StartStopButton</name>
<message>
+2 -2
View File
@@ -4,14 +4,14 @@
<context>
<name>HomeAssistantSetupDialog</name>
<message numerus="yes">
<location filename="../qml/HomeAssistantSetupDialog.qml" line="363"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="377"/>
<source>%n entity(s)</source>
<translation type="unfinished">
<numerusform></numerusform>
</translation>
</message>
<message numerus="yes">
<location filename="../qml/HomeAssistantSetupDialog.qml" line="421"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="435"/>
<source>%n entity(s) selected</source>
<translation type="unfinished">
<numerusform></numerusform>
+273 -147
View File
@@ -165,54 +165,100 @@
<translation>https://github.com/goecharger/go-eCharger-API-v1/blob/master/go-eCharger%20API%20v1%20EN.md</translation>
</message>
</context>
<context>
<name>AppSettings</name>
<message>
<location filename="../appsettings.cpp" line="25"/>
<source>The Solalaweb authentication check timed out.</source>
<translation>Solalaweb-todennuksen tarkistus aikakatkaistiin.</translation>
</message>
<message>
<location filename="../appsettings.cpp" line="35"/>
<source>Authentication could not be verified: %1</source>
<translation>Todennusta ei voitu vahvistaa: %1</translation>
</message>
<message>
<location filename="../appsettings.cpp" line="118"/>
<source>Enter both the username and the app password.</source>
<translation>Syötä sekä käyttäjänimi että sovellussalasana.</translation>
</message>
</context>
<context>
<name>AppSettingsPage</name>
<message>
<location filename="../qml/AppSettingsPage.qml" line="8"/>
<location filename="../qml/AppSettingsPage.qml" line="9"/>
<source>App Settings</source>
<translation>Sovellusasetukset</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="15"/>
<location filename="../qml/AppSettingsPage.qml" line="20"/>
<source>Language</source>
<translation>Kieli</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="29"/>
<location filename="../qml/AppSettingsPage.qml" line="34"/>
<source>Number of app instances:</source>
<translation>Sovellusesiintymien määrä:</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="43"/>
<location filename="../qml/AppSettingsPage.qml" line="48"/>
<source>Swipe left or right with three fingers to switch between app instances.</source>
<translation>Vaihda sovellusinstanssien välillä pyyhkäisemällä vasemmalle tai oikealle kolmella sormella.</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="58"/>
<location filename="../qml/AppSettingsPage.qml" line="56"/>
<source>Solalaweb</source>
<translation>Solalaweb</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="61"/>
<source>Set up Authentik access to make the private Solalaweb connection available for saved devices.</source>
<translation>Määritä Authentik-yhteys, jotta yksityinen Solalaweb-yhteys on käytettävissä tallennetuille laitteille.</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="69"/>
<source>Authentication verified for %1</source>
<translation>Käyttäjän %1 todennus vahvistettu</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="70"/>
<source>Authentication has not been verified</source>
<translation>Todennusta ei ole vahvistettu</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="79"/>
<source>Change Solalaweb authentication</source>
<translation>Muuta Solalaweb-todennusta</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="80"/>
<source>Set up Solalaweb</source>
<translation>Määritä Solalaweb</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="87"/>
<source>Show Solalaweb</source>
<translation>Näytä Solalaweb</translation>
</message>
<message>
<source>solalaweb key:</source>
<translation>solalaweb avain:</translation>
<translation type="vanished">solalaweb avain:</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="64"/>
<location filename="../qml/AppSettingsPage.qml" line="81"/>
<source>Select...</source>
<translation>Valitse...</translation>
<translation type="vanished">Valitse...</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="64"/>
<location filename="../qml/AppSettingsPage.qml" line="81"/>
<source>Replace...</source>
<translation>Korvaa...</translation>
<translation type="vanished">Korvaa...</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="75"/>
<source>solalaweb cert:</source>
<translation>solalaweb-sertifikaatti:</translation>
<translation type="vanished">solalaweb-sertifikaatti:</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="95"/>
<source>Show solalaweb:</source>
<translation>Näytä solalaweb:</translation>
<translation type="vanished">Näytä solalaweb:</translation>
</message>
</context>
<context>
@@ -1752,227 +1798,235 @@
<context>
<name>DeviceConnection</name>
<message>
<location filename="../deviceconnection.cpp" line="96"/>
<location filename="../deviceconnection.cpp" line="102"/>
<source>Connecting to %0</source>
<translation>Yhdistetään laitteeseen %0</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="106"/>
<source>Could not parse solalaweb certificate!</source>
<translation>Solalaweb-varmennetta ei voitu jäsentää!</translation>
<translation type="vanished">Solalaweb-varmennetta ei voitu jäsentää!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="117"/>
<source>Could not parse solalaweb key!</source>
<translation>Solalaweb-avainta ei voitu jäsentää!</translation>
<translation type="vanished">Solalaweb-avainta ei voitu jäsentää!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="143"/>
<location filename="../deviceconnection.cpp" line="113"/>
<source>Solalaweb authentication must be configured again.</source>
<translation>Solalaweb-todennus on määritettävä uudelleen.</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="146"/>
<source>Received something that is not a json object!</source>
<translation>Vastaanotettu jotain, joka ei ole json-objekti!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="151"/>
<location filename="../deviceconnection.cpp" line="154"/>
<source>Received something that does not contain a type!</source>
<translation>Sain jotain, joka ei sisällä tyyppiä!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="158"/>
<location filename="../deviceconnection.cpp" line="161"/>
<source>Received something with a non-string type!</source>
<translation>Sain jotain ei-merkkijonotyyppistä!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="166"/>
<location filename="../deviceconnection.cpp" line="169"/>
<source>Received message type %0 %1</source>
<translation>Vastaanotetun viestin tyyppi %0 %1</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="174"/>
<location filename="../deviceconnection.cpp" line="177"/>
<source>Received hello without serial!</source>
<translation>Vastaanotettu tervehdys ilman sarjaa!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="181"/>
<location filename="../deviceconnection.cpp" line="184"/>
<source>Received hello with a non-string serial!</source>
<translation>Vastaanotettu tervehdys ei-merkkijonosarjassa!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="193"/>
<location filename="../deviceconnection.cpp" line="196"/>
<source>Received hello with a non-bool secured!</source>
<translation>Vastaanotettu tervehdys ilman bool-suojattu!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="206"/>
<location filename="../deviceconnection.cpp" line="209"/>
<source>Received hello without manufacturer!</source>
<translation>Vastaanotettu tervehdys ilman valmistajaa!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="213"/>
<location filename="../deviceconnection.cpp" line="216"/>
<source>Received hello with a non-string manufacturer!</source>
<translation>Tervehdys ei-merkkijonovalmistajan kanssa!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="224"/>
<location filename="../deviceconnection.cpp" line="227"/>
<source>Received hello without devicetype!</source>
<translation>Vastaanotettu tervehdys ilman laitetyyppiä!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="231"/>
<location filename="../deviceconnection.cpp" line="234"/>
<source>Received hello with a non-string devicetype!</source>
<translation>Vastaanotettu tervehdys ei-merkkijonoisella laitetyypillä!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="242"/>
<location filename="../deviceconnection.cpp" line="245"/>
<source>Received hello without friendly_name!</source>
<translation>Vastaanotettu tervehdys ilman friendly_namea!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="249"/>
<location filename="../deviceconnection.cpp" line="252"/>
<source>Received hello with a non-string friendly_name!</source>
<translation>Vastaanotettu tervehdys ei-merkkijonolla friendly_name!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="270"/>
<location filename="../deviceconnection.cpp" line="273"/>
<source>Received authRequired without token1!</source>
<translation>Vastaanotettiin authRequired ilman token1-arvoa!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="277"/>
<location filename="../deviceconnection.cpp" line="280"/>
<source>Received authRequired with a non-string token1!</source>
<translation>Vastaanotettiin authRequired, jossa token1 ei ole merkkijono!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="288"/>
<location filename="../deviceconnection.cpp" line="291"/>
<source>Received authRequired without token2!</source>
<translation>Vastaanotettiin authRequired ilman token2-arvoa!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="295"/>
<location filename="../deviceconnection.cpp" line="298"/>
<source>Received authRequired with a non-string token2!</source>
<translation>Vastaanotettiin authRequired, jossa token2 ei ole merkkijono!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="308"/>
<location filename="../deviceconnection.cpp" line="311"/>
<source>Received authRequired with a non-string hash algorithm!</source>
<translation>Vastaanotettiin authRequired, jossa hajautusalgoritmi ei ole merkkijono!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="321"/>
<location filename="../deviceconnection.cpp" line="324"/>
<source>Received authRequired with unsupported hash algorithm %0!</source>
<translation>Vastaanotettiin authRequired, jonka hajautusalgoritmia %0 ei tueta!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="344"/>
<location filename="../deviceconnection.cpp" line="347"/>
<source>Received fullStatus with a non-bool partial!</source>
<translation>Vastaanotettu fullStatus ei-bool-osiolla!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="354"/>
<location filename="../deviceconnection.cpp" line="357"/>
<source>Received fullStatus without a status!</source>
<translation>Saatiin fullStatus ilman tilaa!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="361"/>
<location filename="../deviceconnection.cpp" line="364"/>
<source>Received fullStatus with a non-object status!</source>
<translation>Vastaanotettu fullStatus ei-objektin tilalla!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="369"/>
<location filename="../deviceconnection.cpp" line="372"/>
<source>Received partial fullStatus</source>
<translation>Vastaanotettu osittainen fullStatus</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="369"/>
<location filename="../deviceconnection.cpp" line="372"/>
<source>Received last fullStatus</source>
<translation>Vastaanotettu viimeksi fullStatus</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="379"/>
<location filename="../deviceconnection.cpp" line="382"/>
<source>Received deltaStatus without a status!</source>
<translation>Vastaanotettu deltaStatus ilman tilaa!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="386"/>
<location filename="../deviceconnection.cpp" line="389"/>
<source>Received deltaStatus with a non-object status!</source>
<translation>Vastaanotettu deltaStatus ei-objektitilassa!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="427"/>
<location filename="../deviceconnection.cpp" line="430"/>
<source>Received message with a non-string requestId!</source>
<translation>Vastaanotettu viesti, jossa on ei-merkkijono requestId!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="480"/>
<location filename="../deviceconnection.cpp" line="483"/>
<source>Sending %0</source>
<translation>Lähetetään %0</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="510"/>
<location filename="../deviceconnection.cpp" line="513"/>
<source>Could not derive bcrypt authentication hash!</source>
<translation>Bcrypt-todennushajautetta ei voitu johtaa!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="529"/>
<location filename="../deviceconnection.cpp" line="532"/>
<source>Connected!</source>
<translation>Yhdistetty!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="535"/>
<location filename="../deviceconnection.cpp" line="538"/>
<source>Disconnected!</source>
<translation>Yhteys katkaistu!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="539"/>
<location filename="../deviceconnection.cpp" line="542"/>
<source>Reconnecting to %0</source>
<translation>Yhdistetään uudelleen laitteeseen %0</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="548"/>
<location filename="../deviceconnection.cpp" line="550"/>
<source>state changed: %0</source>
<translation>tila muutettu: %0</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="557"/>
<location filename="../deviceconnection.cpp" line="559"/>
<source>could not parse received json: %0 at offset %1</source>
<translation>vastaanotettua json-tiedostoa ei voitu jäsentää: %0 offsetissa %1</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="574"/>
<location filename="../deviceconnection.cpp" line="576"/>
<source>unknown binary message type %0 received</source>
<translation>tuntematon binääriviestityyppi %0 vastaanotettu</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="582"/>
<location filename="../deviceconnection.cpp" line="584"/>
<source>error occured: %0</source>
<translation>tapahtui virhe: %0</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="588"/>
<location filename="../deviceconnection.cpp" line="598"/>
<source>Solalaweb rejected the saved authentication: %1</source>
<translation>Solalaweb hylkäsi tallennetun todennuksen: %1</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="609"/>
<source>ssl peer verify error</source>
<translation>ssl peer verify -virhe</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="594"/>
<location filename="../deviceconnection.cpp" line="615"/>
<source>ssl errors</source>
<translation>ssl-virheitä</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="605"/>
<location filename="../deviceconnection.cpp" line="626"/>
<source>ssl alert sent level=%0 type=%1 description=%2</source>
<translation>ssl-hälytys lähetetty level=%0 type=%1 kuvaus=%2</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="611"/>
<location filename="../deviceconnection.cpp" line="632"/>
<source>ssl alert received level=%0 type=%1 description=%2</source>
<translation>ssl-hälytys vastaanotettu taso=%0 type=%1 kuvaus=%2</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="617"/>
<location filename="../deviceconnection.cpp" line="638"/>
<source>ssl handshake interrupted on error</source>
<translation>ssl-kättely keskeytettiin virheen vuoksi</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="664"/>
<location filename="../deviceconnection.cpp" line="685"/>
<source>unknown response type %0</source>
<translation>tuntematon vastaustyyppi %0</translation>
</message>
@@ -2053,7 +2107,7 @@
<translation>Solala</translation>
</message>
<message>
<location filename="../qml/DeviceListScreen.qml" line="277"/>
<location filename="../qml/DeviceListScreen.qml" line="278"/>
<source>Add or setup device</source>
<translation>Lisää tai määritä laite</translation>
</message>
@@ -2061,32 +2115,32 @@
<context>
<name>DeviceScreen</name>
<message>
<location filename="../qml/DeviceScreen.qml" line="88"/>
<location filename="../qml/DeviceScreen.qml" line="97"/>
<source>Password required</source>
<translation>Salasana vaaditaan</translation>
</message>
<message>
<location filename="../qml/DeviceScreen.qml" line="111"/>
<location filename="../qml/DeviceScreen.qml" line="120"/>
<source>Password:</source>
<translation>Salasana:</translation>
</message>
<message>
<location filename="../qml/DeviceScreen.qml" line="121"/>
<location filename="../qml/DeviceScreen.qml" line="130"/>
<source>Password</source>
<translation>Salasana</translation>
</message>
<message>
<location filename="../qml/DeviceScreen.qml" line="131"/>
<location filename="../qml/DeviceScreen.qml" line="140"/>
<source>Authentication impossible!</source>
<translation>Todennus mahdotonta!</translation>
</message>
<message>
<location filename="../qml/DeviceScreen.qml" line="140"/>
<location filename="../qml/DeviceScreen.qml" line="149"/>
<source>To use this password remotely a password has to be setup first. This can be done over the AccessPoint.</source>
<translation>Etäkäyttöä varten salasana on ensin määritettävä. Sen voi tehdä tukiaseman kautta.</translation>
</message>
<message>
<location filename="../qml/DeviceScreen.qml" line="183"/>
<location filename="../qml/DeviceScreen.qml" line="199"/>
<source>Connection disturbed</source>
<translation>Yhteys häiriintynyt</translation>
</message>
@@ -2928,37 +2982,37 @@
<context>
<name>HomeAssistantSetupDialog</name>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="17"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="19"/>
<source>Edit chart</source>
<translation>Muokkaa kaaviota</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="17"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="19"/>
<source>Connect Home Assistant</source>
<translation>Yhdistä Home Assistantiin</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="138"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="140"/>
<source>Server</source>
<translation>Palvelin</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="138"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="140"/>
<source>Login</source>
<translation>Kirjautuminen</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="138"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="140"/>
<source>Charts</source>
<translation>Kaaviot</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="145"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="147"/>
<source>%1. %2</source>
<translation>%1. %2</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="185"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="191"/>
<source>Before you begin</source>
<translation>Ennen aloittamista</translation>
</message>
@@ -2981,7 +3035,7 @@ Ennen kuin kaaviot voivat vastaanottaa tietoja:
• Varmista, että laturin entiteetit näkyvät Home Assistantissa.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="190"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="197"/>
<source>Home Assistant must already be installed and running. A Raspberry Pi with Home Assistant on an SD card is one option; other supported Home Assistant installations work as well.
Before charts can receive data:
@@ -3000,78 +3054,83 @@ Ennen kuin kaaviot voivat vastaanottaa tietoja:
• Varmista, että laitteen entiteetit näkyvät Home Assistantissa.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="198"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="205"/>
<source>Installation guide</source>
<translation>Asennusohje</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="203"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="210"/>
<source>MQTT guide</source>
<translation>MQTT-ohje</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="212"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="219"/>
<source>Enter the address you normally use to open Home Assistant. The app will contact this server directly.</source>
<translation>Anna osoite, jolla yleensä avaat Home Assistantin. Sovellus ottaa suoraan yhteyden tähän palvelimeen.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="229"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="494"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="236"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="525"/>
<source>Cancel</source>
<translation>Peruuta</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="232"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="239"/>
<source>Next</source>
<translation>Seuraava</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="247"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="254"/>
<source>Create a long-lived access token in your Home Assistant profile and paste it below. Your Home Assistant password is never entered into this app.</source>
<translation>Luo pitkäikäinen käyttöoikeustunnus Home Assistant -profiilissasi ja liitä se alle. Home Assistant -salasanaasi ei koskaan syötetä tähän sovellukseen.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="253"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="260"/>
<source>Open Home Assistant profile</source>
<translation>Avaa Home Assistant -profiili</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="266"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="273"/>
<source>Long-lived access token</source>
<translation>Pitkäikäinen käyttöoikeustunnus</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="272"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="279"/>
<source>Hide</source>
<translation>Piilota</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="272"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="279"/>
<source>Show</source>
<translation>Näytä</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="296"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="303"/>
<source>Back</source>
<translation>Takaisin</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="299"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="306"/>
<source>Connect</source>
<translation>Yhdistä</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="315"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="322"/>
<source>Create charts and choose exactly which Home Assistant entities each chart should display.</source>
<translation>Luo kaavioita ja valitse tarkasti, mitkä Home Assistant -entiteetit kussakin kaaviossa näytetään.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="329"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="336"/>
<source>Change server or access token</source>
<translation>Vaihda palvelinta tai käyttöoikeustunnusta</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="343"/>
<source>Forget Home Assistant configuration</source>
<translation>Unohda Home Assistant -määritys</translation>
</message>
<message numerus="yes">
<location filename="../qml/HomeAssistantSetupDialog.qml" line="363"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="377"/>
<source>%n entity(s)</source>
<translation>
<numerusform>%n entiteetti</numerusform>
@@ -3079,42 +3138,42 @@ Ennen kuin kaaviot voivat vastaanottaa tietoja:
</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="368"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="382"/>
<source>Edit</source>
<translation>Muokkaa</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="372"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="386"/>
<source>Delete</source>
<translation>Poista</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="381"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="395"/>
<source>No charts configured yet.</source>
<translation>Kaavioita ei ole vielä määritetty.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="389"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="403"/>
<source>Add chart</source>
<translation>Lisää kaavio</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="391"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="405"/>
<source>Done</source>
<translation>Valmis</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="404"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="418"/>
<source>Chart title</source>
<translation>Kaavion otsikko</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="412"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="426"/>
<source>Search by name, entity ID, unit or device class…</source>
<translation>Hae nimellä, entiteettitunnuksella, yksiköllä tai laiteluokalla…</translation>
</message>
<message numerus="yes">
<location filename="../qml/HomeAssistantSetupDialog.qml" line="421"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="435"/>
<source>%n entity(s) selected</source>
<translation>
<numerusform>%n entiteetti valittu</numerusform>
@@ -3122,17 +3181,17 @@ Ennen kuin kaaviot voivat vastaanottaa tietoja:
</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="431"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="445"/>
<source>Reload</source>
<translation>Lataa uudelleen</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="486"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="517"/>
<source>No matching entities found.</source>
<translation>Vastaavia entiteettejä ei löytynyt.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="497"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="528"/>
<source>Save chart</source>
<translation>Tallenna kaavio</translation>
</message>
@@ -3292,7 +3351,7 @@ Ennen kuin kaaviot voivat vastaanottaa tietoja:
<translation type="vanished">Tiedot</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="297"/>
<location filename="../qml/InformationsTabPage.qml" line="303"/>
<source>Idle</source>
<translation>Valmiustila</translation>
</message>
@@ -3305,138 +3364,137 @@ Ennen kuin kaaviot voivat vastaanottaa tietoja:
<translation type="vanished">LADATAAN</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="90"/>
<location filename="../qml/InformationsTabPage.qml" line="93"/>
<source>%1 – %2</source>
<translation>%1 – %2</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="175"/>
<location filename="../qml/InformationsTabPage.qml" line="178"/>
<source>Receiving manufacturer data…</source>
<translation>Vastaanotetaan valmistajan tietoja…</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="177"/>
<location filename="../qml/InformationsTabPage.qml" line="180"/>
<source>Loading manufacturer charts…</source>
<translation>Ladataan valmistajan kaavioita…</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="191"/>
<location filename="../qml/InformationsTabPage.qml" line="194"/>
<source>%1 images</source>
<translation>%1 kuvaa</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="193"/>
<location filename="../qml/InformationsTabPage.qml" line="196"/>
<source>%1 charts</source>
<translation>%1 kaaviota</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="195"/>
<location filename="../qml/InformationsTabPage.qml" line="198"/>
<source>Loaded %1</source>
<translation>Ladattu: %1</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="196"/>
<location filename="../qml/InformationsTabPage.qml" line="199"/>
<source>No information data received</source>
<translation>Tietoja ei vastaanotettu</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="198"/>
<location filename="../qml/InformationsTabPage.qml" line="201"/>
<source>The manufacturer cloud returned invalid data.</source>
<translation>Valmistajan pilvipalvelu palautti virheellisiä tietoja.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="208"/>
<location filename="../qml/InformationsTabPage.qml" line="211"/>
<source>Requesting manufacturer data…</source>
<translation>Pyydetään valmistajan tietoja…</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="216"/>
<location filename="../qml/InformationsTabPage.qml" line="219"/>
<source>Information</source>
<translation>Tiedot</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="231"/>
<location filename="../qml/InformationsTabPage.qml" line="234"/>
<source>Manufacturer cloud</source>
<translation>Valmistajan pilvipalvelu</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="305"/>
<location filename="../qml/InformationsTabPage.qml" line="311"/>
<source>The manufacturer does not even think you are worth the raw data that you could inspect and zoom. Instead, it sends these ugly low-resolution pictures that you cannot meaningfully interact with—let alone control the displayed time range.</source>
<translation>Valmistaja ei edes pidä sinua raakadatan arvoisena, vaikka voisit tarkastella ja zoomata sitä. Sen sijaan se lähettää nämä rumat matalan resoluution kuvat, joita et voi käsitellä mielekkäästi – saati hallita näytettävää aikaväliä.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="352"/>
<location filename="../qml/InformationsTabPage.qml" line="362"/>
<source>Own your consumption history</source>
<translation>Pidä kulutushistoriasi omassa hallinnassasi</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="357"/>
<location filename="../qml/InformationsTabPage.qml" line="368"/>
<source>Connect the device to your own Home Assistant installation for fast, dependable history that remains under your control. You decide how long data is retained and which measurements are recorded.</source>
<translation>Yhdistä laite omaan Home Assistant -asennukseesi saadaksesi nopean ja luotettavan historian, joka pysyy hallinnassasi. Päätät, kuinka kauan tietoja säilytetään ja mitkä mittaukset tallennetaan.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="372"/>
<location filename="../qml/InformationsTabPage.qml" line="383"/>
<source>Connected to Home Assistant</source>
<translation>Yhdistetty Home Assistantiin</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="373"/>
<location filename="../qml/InformationsTabPage.qml" line="384"/>
<source>Home Assistant is not configured</source>
<translation>Home Assistantia ei ole määritetty</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="387"/>
<location filename="../qml/InformationsTabPage.qml" line="398"/>
<source>Configure</source>
<translation>Määritä</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="387"/>
<location filename="../qml/InformationsTabPage.qml" line="521"/>
<location filename="../qml/InformationsTabPage.qml" line="398"/>
<location filename="../qml/InformationsTabPage.qml" line="536"/>
<source>Set up</source>
<translation>Määritä</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="451"/>
<location filename="../qml/InformationsTabPage.qml" line="462"/>
<source>Refresh</source>
<translation>Päivitä</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="503"/>
<location filename="../qml/InformationsTabPage.qml" line="517"/>
<source>Connect Home Assistant to display history</source>
<translation>Yhdistä Home Assistant historian näyttämiseksi</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="504"/>
<location filename="../qml/InformationsTabPage.qml" line="518"/>
<source>Create your first history chart</source>
<translation>Luo ensimmäinen historiakaaviosi</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="512"/>
<location filename="../qml/InformationsTabPage.qml" line="527"/>
<source>The setup wizard connects to your server and lets you select the entities to display.</source>
<translation>Ohjattu määritys yhdistää palvelimeesi ja antaa valita näytettävät entiteetit.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="513"/>
<location filename="../qml/InformationsTabPage.qml" line="528"/>
<source>Open the configuration and add a chart with one or more Home Assistant entities.</source>
<translation>Avaa määritys ja lisää kaavio, jossa on yksi tai useampi Home Assistant -entiteetti.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="521"/>
<location filename="../qml/InformationsTabPage.qml" line="536"/>
<source>Add chart</source>
<translation>Lisää kaavio</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="530"/>
<source>Forget Home Assistant configuration</source>
<translation>Unohda Home Assistant -määritys</translation>
<translation type="vanished">Unohda Home Assistant -määritys</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="543"/>
<location filename="../qml/InformationsTabPage.qml" line="553"/>
<source>Forget Home Assistant?</source>
<translation>Unohdetaanko Home Assistant?</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="550"/>
<location filename="../qml/InformationsTabPage.qml" line="563"/>
<source>This removes the server address, access token and all chart definitions stored in this app.</source>
<translation>Tämä poistaa palvelimen osoitteen, käyttöoikeustunnuksen ja kaikki tähän sovellukseen tallennetut kaaviomääritykset.</translation>
</message>
@@ -3445,7 +3503,7 @@ Ennen kuin kaaviot voivat vastaanottaa tietoja:
<translation type="vanished">Rajallinen · epäluotettava · hidas</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="254"/>
<location filename="../qml/InformationsTabPage.qml" line="257"/>
<source>Your own cloud</source>
<translation>Oma pilvipalvelusi</translation>
</message>
@@ -3454,22 +3512,22 @@ Ennen kuin kaaviot voivat vastaanottaa tietoja:
<translation type="vanished">Historia · ylläpidetty · nopea</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="238"/>
<location filename="../qml/InformationsTabPage.qml" line="241"/>
<source>Lacks features · unreliable · slow</source>
<translation>Puutteelliset ominaisuudet · epäluotettava · hidas</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="261"/>
<location filename="../qml/InformationsTabPage.qml" line="264"/>
<source>Historical data · properly maintained · fast</source>
<translation>Historiatiedot · hyvin ylläpidetty · nopea</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="288"/>
<location filename="../qml/InformationsTabPage.qml" line="294"/>
<source>The manufacturer cloud provides basic charts, but can be slow, unavailable or limited to the data selected by the manufacturer.</source>
<translation>Valmistajan pilvipalvelu tarjoaa peruskaavioita, mutta se voi olla hidas, poissa käytöstä tai rajoittunut valmistajan valitsemiin tietoihin.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="339"/>
<location filename="../qml/InformationsTabPage.qml" line="345"/>
<source>Download information</source>
<translation>Lataa tiedot</translation>
</message>
@@ -3490,37 +3548,37 @@ Ennen kuin kaaviot voivat vastaanottaa tietoja:
<translation type="vanished">Määritä yhteys Home Assistantiin</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="395"/>
<location filename="../qml/InformationsTabPage.qml" line="406"/>
<source>Historical data</source>
<translation>Historiatiedot</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="405"/>
<location filename="../qml/InformationsTabPage.qml" line="416"/>
<source>Day</source>
<translation>Päivä</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="406"/>
<location filename="../qml/InformationsTabPage.qml" line="417"/>
<source>Week</source>
<translation>Viikko</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="407"/>
<location filename="../qml/InformationsTabPage.qml" line="418"/>
<source>Month</source>
<translation>Kuukausi</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="408"/>
<location filename="../qml/InformationsTabPage.qml" line="419"/>
<source>Year</source>
<translation>Vuosi</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="427"/>
<location filename="../qml/InformationsTabPage.qml" line="438"/>
<source>Previous</source>
<translation>Edellinen</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="442"/>
<location filename="../qml/InformationsTabPage.qml" line="453"/>
<source>Next</source>
<translation>Seuraava</translation>
</message>
@@ -5104,6 +5162,74 @@ Ennen kuin kaaviot voivat vastaanottaa tietoja:
<translation>Lisenssit</translation>
</message>
</context>
<context>
<name>SolalawebSetupDialog</name>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="15"/>
<source>Set up Solalaweb</source>
<translation>Määritä Solalaweb</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="48"/>
<source>Solalaweb now uses Authentik. Create a dedicated app password instead of entering your normal account password. Choose a lifetime long enough for this app, then copy the password itself—not its name.</source>
<translation>Solalaweb käyttää nyt Authentikia. Luo erillinen sovellussalasana tavallisen tilisalasanasi antamisen sijaan. Valitse tälle sovellukselle riittävän pitkä voimassaoloaika ja kopioi sitten itse salasana – älä sen nimeä.</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="54"/>
<source>Create an Authentik app password</source>
<translation>Luo Authentik-sovellussalasana</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="61"/>
<source>Your username is usually your email address. The user-details page shows the exact username expected by Authentik.</source>
<translation>Käyttäjänimesi on yleensä sähköpostiosoitteesi. Käyttäjätietosivu näyttää Authentikin odottaman tarkan käyttäjänimen.</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="68"/>
<source>Open Authentik user details</source>
<translation>Avaa Authentikin käyttäjätiedot</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="74"/>
<source>Username</source>
<translation>Käyttäjätunnus</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="83"/>
<source>Username or email address</source>
<translation>Käyttäjänimi tai sähköpostiosoite</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="89"/>
<source>App password</source>
<translation>Sovellussalasana</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="101"/>
<source>Authentik app password</source>
<translation>Authentik-sovellussalasana</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="109"/>
<source>Hide</source>
<translation>Piilota</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="109"/>
<source>Show</source>
<translation>Näytä</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="133"/>
<source>Cancel</source>
<translation>Peruuta</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="145"/>
<source>Verify and save</source>
<translation>Vahvista ja tallenna</translation>
</message>
</context>
<context>
<name>StartStopButton</name>
<message>
+273 -147
View File
@@ -165,54 +165,100 @@
<translation>https://github.com/goecharger/go-eCharger-API-v1/blob/master/go-eCharger%20API%20v1%20EN.md</translation>
</message>
</context>
<context>
<name>AppSettings</name>
<message>
<location filename="../appsettings.cpp" line="25"/>
<source>The Solalaweb authentication check timed out.</source>
<translation>Tidsavbrudd under kontrollen av Solalaweb-autentisering.</translation>
</message>
<message>
<location filename="../appsettings.cpp" line="35"/>
<source>Authentication could not be verified: %1</source>
<translation>Autentiseringen kunne ikke bekreftes: %1</translation>
</message>
<message>
<location filename="../appsettings.cpp" line="118"/>
<source>Enter both the username and the app password.</source>
<translation>Skriv inn både brukernavn og app-passord.</translation>
</message>
</context>
<context>
<name>AppSettingsPage</name>
<message>
<location filename="../qml/AppSettingsPage.qml" line="8"/>
<location filename="../qml/AppSettingsPage.qml" line="9"/>
<source>App Settings</source>
<translation>Appinnstillinger</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="15"/>
<location filename="../qml/AppSettingsPage.qml" line="20"/>
<source>Language</source>
<translation>Språk</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="29"/>
<location filename="../qml/AppSettingsPage.qml" line="34"/>
<source>Number of app instances:</source>
<translation>Antall appforekomster:</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="43"/>
<location filename="../qml/AppSettingsPage.qml" line="48"/>
<source>Swipe left or right with three fingers to switch between app instances.</source>
<translation>Sveip mot venstre eller høyre med tre fingre for å bytte mellom appinstanser.</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="58"/>
<location filename="../qml/AppSettingsPage.qml" line="56"/>
<source>Solalaweb</source>
<translation>Solalaweb</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="61"/>
<source>Set up Authentik access to make the private Solalaweb connection available for saved devices.</source>
<translation>Konfigurer Authentik-tilgang for å gjøre den private Solalaweb-tilkoblingen tilgjengelig for lagrede enheter.</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="69"/>
<source>Authentication verified for %1</source>
<translation>Autentisering bekreftet for %1</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="70"/>
<source>Authentication has not been verified</source>
<translation>Autentiseringen er ikke bekreftet</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="79"/>
<source>Change Solalaweb authentication</source>
<translation>Endre Solalaweb-autentisering</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="80"/>
<source>Set up Solalaweb</source>
<translation>Konfigurer Solalaweb</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="87"/>
<source>Show Solalaweb</source>
<translation>Vis Solalaweb</translation>
</message>
<message>
<source>solalaweb key:</source>
<translation>solalaweb nøkkel:</translation>
<translation type="vanished">solalaweb nøkkel:</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="64"/>
<location filename="../qml/AppSettingsPage.qml" line="81"/>
<source>Select...</source>
<translation>Velg...</translation>
<translation type="vanished">Velg...</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="64"/>
<location filename="../qml/AppSettingsPage.qml" line="81"/>
<source>Replace...</source>
<translation>Bytt ut...</translation>
<translation type="vanished">Bytt ut...</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="75"/>
<source>solalaweb cert:</source>
<translation>solalaweb sertifikat:</translation>
<translation type="vanished">solalaweb sertifikat:</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="95"/>
<source>Show solalaweb:</source>
<translation>Vis solalaweb:</translation>
<translation type="vanished">Vis solalaweb:</translation>
</message>
</context>
<context>
@@ -1752,227 +1798,235 @@
<context>
<name>DeviceConnection</name>
<message>
<location filename="../deviceconnection.cpp" line="96"/>
<location filename="../deviceconnection.cpp" line="102"/>
<source>Connecting to %0</source>
<translation>Kobler til %0</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="106"/>
<source>Could not parse solalaweb certificate!</source>
<translation>Kunne ikke analysere solalaweb-sertifikatet!</translation>
<translation type="vanished">Kunne ikke analysere solalaweb-sertifikatet!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="117"/>
<source>Could not parse solalaweb key!</source>
<translation>Kunne ikke analysere solalaweb-nøkkelen!</translation>
<translation type="vanished">Kunne ikke analysere solalaweb-nøkkelen!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="143"/>
<location filename="../deviceconnection.cpp" line="113"/>
<source>Solalaweb authentication must be configured again.</source>
<translation>Solalaweb-autentiseringen må konfigureres på nytt.</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="146"/>
<source>Received something that is not a json object!</source>
<translation>Mottok noe som ikke er et json-objekt!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="151"/>
<location filename="../deviceconnection.cpp" line="154"/>
<source>Received something that does not contain a type!</source>
<translation>Mottatt noe som ikke inneholder en type!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="158"/>
<location filename="../deviceconnection.cpp" line="161"/>
<source>Received something with a non-string type!</source>
<translation>Mottatt noe med en ikke-streng type!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="166"/>
<location filename="../deviceconnection.cpp" line="169"/>
<source>Received message type %0 %1</source>
<translation>Mottatt meldingstype %0 %1</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="174"/>
<location filename="../deviceconnection.cpp" line="177"/>
<source>Received hello without serial!</source>
<translation>Mottatt hei uten serienummer!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="181"/>
<location filename="../deviceconnection.cpp" line="184"/>
<source>Received hello with a non-string serial!</source>
<translation>Mottatt hei med en ikke-streng serie!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="193"/>
<location filename="../deviceconnection.cpp" line="196"/>
<source>Received hello with a non-bool secured!</source>
<translation>Mottatt hei med en ikke-bool sikret!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="206"/>
<location filename="../deviceconnection.cpp" line="209"/>
<source>Received hello without manufacturer!</source>
<translation>Mottatt hei uten produsent!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="213"/>
<location filename="../deviceconnection.cpp" line="216"/>
<source>Received hello with a non-string manufacturer!</source>
<translation>Mottatt hei med en ikke-streng produsent!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="224"/>
<location filename="../deviceconnection.cpp" line="227"/>
<source>Received hello without devicetype!</source>
<translation>Mottatt hei uten devicetype!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="231"/>
<location filename="../deviceconnection.cpp" line="234"/>
<source>Received hello with a non-string devicetype!</source>
<translation>Mottatt hei med en ikke-streng enhetstype!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="242"/>
<location filename="../deviceconnection.cpp" line="245"/>
<source>Received hello without friendly_name!</source>
<translation>Mottatt hei uten friendly_name!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="249"/>
<location filename="../deviceconnection.cpp" line="252"/>
<source>Received hello with a non-string friendly_name!</source>
<translation>Mottatt hei med et vennlig_navn uten strenger!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="270"/>
<location filename="../deviceconnection.cpp" line="273"/>
<source>Received authRequired without token1!</source>
<translation>Mottok authRequired uten token1!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="277"/>
<location filename="../deviceconnection.cpp" line="280"/>
<source>Received authRequired with a non-string token1!</source>
<translation>Mottok authRequired med token1 som ikke er en streng!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="288"/>
<location filename="../deviceconnection.cpp" line="291"/>
<source>Received authRequired without token2!</source>
<translation>Mottok authRequired uten token2!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="295"/>
<location filename="../deviceconnection.cpp" line="298"/>
<source>Received authRequired with a non-string token2!</source>
<translation>Mottok authRequired med token2 som ikke er en streng!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="308"/>
<location filename="../deviceconnection.cpp" line="311"/>
<source>Received authRequired with a non-string hash algorithm!</source>
<translation>Mottok authRequired med en hash-algoritme som ikke er en streng!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="321"/>
<location filename="../deviceconnection.cpp" line="324"/>
<source>Received authRequired with unsupported hash algorithm %0!</source>
<translation>Mottok authRequired med hash-algoritmen %0 som ikke støttes!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="344"/>
<location filename="../deviceconnection.cpp" line="347"/>
<source>Received fullStatus with a non-bool partial!</source>
<translation>Mottatt fullstatus med en ikke-bool-del!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="354"/>
<location filename="../deviceconnection.cpp" line="357"/>
<source>Received fullStatus without a status!</source>
<translation>Mottatt fullstatus uten status!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="361"/>
<location filename="../deviceconnection.cpp" line="364"/>
<source>Received fullStatus with a non-object status!</source>
<translation>Mottatt fullstatus med ikke-objekt-status!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="369"/>
<location filename="../deviceconnection.cpp" line="372"/>
<source>Received partial fullStatus</source>
<translation>Mottatt delvis fullstatus</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="369"/>
<location filename="../deviceconnection.cpp" line="372"/>
<source>Received last fullStatus</source>
<translation>Mottatt siste fullstatus</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="379"/>
<location filename="../deviceconnection.cpp" line="382"/>
<source>Received deltaStatus without a status!</source>
<translation>Mottatt deltaStatus uten status!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="386"/>
<location filename="../deviceconnection.cpp" line="389"/>
<source>Received deltaStatus with a non-object status!</source>
<translation>Mottatt deltaStatus med en ikke-objekt status!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="427"/>
<location filename="../deviceconnection.cpp" line="430"/>
<source>Received message with a non-string requestId!</source>
<translation>Mottatt melding med en ikke-streng requestId!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="480"/>
<location filename="../deviceconnection.cpp" line="483"/>
<source>Sending %0</source>
<translation>Sender %0</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="510"/>
<location filename="../deviceconnection.cpp" line="513"/>
<source>Could not derive bcrypt authentication hash!</source>
<translation>Kunne ikke utlede bcrypt autentisering hash!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="529"/>
<location filename="../deviceconnection.cpp" line="532"/>
<source>Connected!</source>
<translation>Tilkoblet!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="535"/>
<location filename="../deviceconnection.cpp" line="538"/>
<source>Disconnected!</source>
<translation>Koblet fra!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="539"/>
<location filename="../deviceconnection.cpp" line="542"/>
<source>Reconnecting to %0</source>
<translation>Kobler til %0 på nytt</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="548"/>
<location filename="../deviceconnection.cpp" line="550"/>
<source>state changed: %0</source>
<translation>tilstand endret: %0</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="557"/>
<location filename="../deviceconnection.cpp" line="559"/>
<source>could not parse received json: %0 at offset %1</source>
<translation>kunne ikke analysere mottatt json: %0 ved offset %1</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="574"/>
<location filename="../deviceconnection.cpp" line="576"/>
<source>unknown binary message type %0 received</source>
<translation>ukjent binær meldingstype %0 mottatt</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="582"/>
<location filename="../deviceconnection.cpp" line="584"/>
<source>error occured: %0</source>
<translation>feil oppstod: %0</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="588"/>
<location filename="../deviceconnection.cpp" line="598"/>
<source>Solalaweb rejected the saved authentication: %1</source>
<translation>Solalaweb avviste den lagrede autentiseringen: %1</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="609"/>
<source>ssl peer verify error</source>
<translation>ssl peer verify feil</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="594"/>
<location filename="../deviceconnection.cpp" line="615"/>
<source>ssl errors</source>
<translation>ssl feil</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="605"/>
<location filename="../deviceconnection.cpp" line="626"/>
<source>ssl alert sent level=%0 type=%1 description=%2</source>
<translation>ssl-varsel sendt nivå=%0 type=%1 beskrivelse=%2</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="611"/>
<location filename="../deviceconnection.cpp" line="632"/>
<source>ssl alert received level=%0 type=%1 description=%2</source>
<translation>ssl-varsel mottatt nivå=%0 type=%1 beskrivelse=%2</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="617"/>
<location filename="../deviceconnection.cpp" line="638"/>
<source>ssl handshake interrupted on error</source>
<translation>ssl-håndtrykk avbrutt ved feil</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="664"/>
<location filename="../deviceconnection.cpp" line="685"/>
<source>unknown response type %0</source>
<translation>ukjent svartype %0</translation>
</message>
@@ -2053,7 +2107,7 @@
<translation>Solala</translation>
</message>
<message>
<location filename="../qml/DeviceListScreen.qml" line="277"/>
<location filename="../qml/DeviceListScreen.qml" line="278"/>
<source>Add or setup device</source>
<translation>Legg til eller konfigurer enhet</translation>
</message>
@@ -2061,32 +2115,32 @@
<context>
<name>DeviceScreen</name>
<message>
<location filename="../qml/DeviceScreen.qml" line="88"/>
<location filename="../qml/DeviceScreen.qml" line="97"/>
<source>Password required</source>
<translation>Passord kreves</translation>
</message>
<message>
<location filename="../qml/DeviceScreen.qml" line="111"/>
<location filename="../qml/DeviceScreen.qml" line="120"/>
<source>Password:</source>
<translation>Passord:</translation>
</message>
<message>
<location filename="../qml/DeviceScreen.qml" line="121"/>
<location filename="../qml/DeviceScreen.qml" line="130"/>
<source>Password</source>
<translation>Passord</translation>
</message>
<message>
<location filename="../qml/DeviceScreen.qml" line="131"/>
<location filename="../qml/DeviceScreen.qml" line="140"/>
<source>Authentication impossible!</source>
<translation>Autentisering umulig!</translation>
</message>
<message>
<location filename="../qml/DeviceScreen.qml" line="140"/>
<location filename="../qml/DeviceScreen.qml" line="149"/>
<source>To use this password remotely a password has to be setup first. This can be done over the AccessPoint.</source>
<translation>For fjerntilgang må et passord først konfigureres. Dette kan gjøres via tilgangspunktet.</translation>
</message>
<message>
<location filename="../qml/DeviceScreen.qml" line="183"/>
<location filename="../qml/DeviceScreen.qml" line="199"/>
<source>Connection disturbed</source>
<translation>Forbindelsen forstyrret</translation>
</message>
@@ -2928,37 +2982,37 @@
<context>
<name>HomeAssistantSetupDialog</name>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="17"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="19"/>
<source>Edit chart</source>
<translation>Rediger diagram</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="17"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="19"/>
<source>Connect Home Assistant</source>
<translation>Koble til Home Assistant</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="138"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="140"/>
<source>Server</source>
<translation>Server</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="138"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="140"/>
<source>Login</source>
<translation>Pålogging</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="138"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="140"/>
<source>Charts</source>
<translation>Diagrammer</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="145"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="147"/>
<source>%1. %2</source>
<translation>%1. %2</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="185"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="191"/>
<source>Before you begin</source>
<translation>Før du begynner</translation>
</message>
@@ -2981,7 +3035,7 @@ Før diagrammer kan motta data:
• Kontroller at laderens entiteter er synlige i Home Assistant.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="190"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="197"/>
<source>Home Assistant must already be installed and running. A Raspberry Pi with Home Assistant on an SD card is one option; other supported Home Assistant installations work as well.
Before charts can receive data:
@@ -3000,78 +3054,83 @@ Før diagrammer kan motta data:
• Kontroller at enhetens entiteter er synlige i Home Assistant.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="198"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="205"/>
<source>Installation guide</source>
<translation>Installasjonsveiledning</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="203"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="210"/>
<source>MQTT guide</source>
<translation>MQTT-veiledning</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="212"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="219"/>
<source>Enter the address you normally use to open Home Assistant. The app will contact this server directly.</source>
<translation>Skriv inn adressen du vanligvis bruker for å åpne Home Assistant. Appen kontakter denne serveren direkte.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="229"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="494"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="236"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="525"/>
<source>Cancel</source>
<translation>Avbryt</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="232"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="239"/>
<source>Next</source>
<translation>Neste</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="247"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="254"/>
<source>Create a long-lived access token in your Home Assistant profile and paste it below. Your Home Assistant password is never entered into this app.</source>
<translation>Opprett et langlivet tilgangstoken i Home Assistant-profilen din, og lim det inn nedenfor. Home Assistant-passordet ditt skrives aldri inn i denne appen.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="253"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="260"/>
<source>Open Home Assistant profile</source>
<translation>Åpne Home Assistant-profil</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="266"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="273"/>
<source>Long-lived access token</source>
<translation>Langlivet tilgangstoken</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="272"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="279"/>
<source>Hide</source>
<translation>Skjul</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="272"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="279"/>
<source>Show</source>
<translation>Vis</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="296"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="303"/>
<source>Back</source>
<translation>Tilbake</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="299"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="306"/>
<source>Connect</source>
<translation>Koble til</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="315"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="322"/>
<source>Create charts and choose exactly which Home Assistant entities each chart should display.</source>
<translation>Opprett diagrammer og velg nøyaktig hvilke Home Assistant-entiteter hvert diagram skal vise.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="329"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="336"/>
<source>Change server or access token</source>
<translation>Bytt server eller tilgangstoken</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="343"/>
<source>Forget Home Assistant configuration</source>
<translation>Glem Home Assistant-konfigurasjonen</translation>
</message>
<message numerus="yes">
<location filename="../qml/HomeAssistantSetupDialog.qml" line="363"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="377"/>
<source>%n entity(s)</source>
<translation>
<numerusform>%n entitet</numerusform>
@@ -3079,42 +3138,42 @@ Før diagrammer kan motta data:
</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="368"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="382"/>
<source>Edit</source>
<translation>Rediger</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="372"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="386"/>
<source>Delete</source>
<translation>Slett</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="381"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="395"/>
<source>No charts configured yet.</source>
<translation>Ingen diagrammer er konfigurert ennå.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="389"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="403"/>
<source>Add chart</source>
<translation>Legg til diagram</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="391"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="405"/>
<source>Done</source>
<translation>Ferdig</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="404"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="418"/>
<source>Chart title</source>
<translation>Diagramtittel</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="412"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="426"/>
<source>Search by name, entity ID, unit or device class…</source>
<translation>Søk etter navn, entitets-ID, enhet eller enhetsklasse…</translation>
</message>
<message numerus="yes">
<location filename="../qml/HomeAssistantSetupDialog.qml" line="421"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="435"/>
<source>%n entity(s) selected</source>
<translation>
<numerusform>%n entitet valgt</numerusform>
@@ -3122,17 +3181,17 @@ Før diagrammer kan motta data:
</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="431"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="445"/>
<source>Reload</source>
<translation>Last inn på nytt</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="486"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="517"/>
<source>No matching entities found.</source>
<translation>Fant ingen samsvarende entiteter.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="497"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="528"/>
<source>Save chart</source>
<translation>Lagre diagram</translation>
</message>
@@ -3292,7 +3351,7 @@ Før diagrammer kan motta data:
<translation type="vanished">Informasjon</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="297"/>
<location filename="../qml/InformationsTabPage.qml" line="303"/>
<source>Idle</source>
<translation>Inaktiv</translation>
</message>
@@ -3305,138 +3364,137 @@ Før diagrammer kan motta data:
<translation type="vanished">LASTER INN</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="90"/>
<location filename="../qml/InformationsTabPage.qml" line="93"/>
<source>%1 – %2</source>
<translation>%1 – %2</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="175"/>
<location filename="../qml/InformationsTabPage.qml" line="178"/>
<source>Receiving manufacturer data…</source>
<translation>Mottar produsentdata…</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="177"/>
<location filename="../qml/InformationsTabPage.qml" line="180"/>
<source>Loading manufacturer charts…</source>
<translation>Laster produsentdiagrammer…</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="191"/>
<location filename="../qml/InformationsTabPage.qml" line="194"/>
<source>%1 images</source>
<translation>%1 bilder</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="193"/>
<location filename="../qml/InformationsTabPage.qml" line="196"/>
<source>%1 charts</source>
<translation>%1 diagrammer</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="195"/>
<location filename="../qml/InformationsTabPage.qml" line="198"/>
<source>Loaded %1</source>
<translation>Lastet inn %1</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="196"/>
<location filename="../qml/InformationsTabPage.qml" line="199"/>
<source>No information data received</source>
<translation>Ingen informasjonsdata mottatt</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="198"/>
<location filename="../qml/InformationsTabPage.qml" line="201"/>
<source>The manufacturer cloud returned invalid data.</source>
<translation>Produsentskyen returnerte ugyldige data.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="208"/>
<location filename="../qml/InformationsTabPage.qml" line="211"/>
<source>Requesting manufacturer data…</source>
<translation>Ber om produsentdata…</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="216"/>
<location filename="../qml/InformationsTabPage.qml" line="219"/>
<source>Information</source>
<translation>Informasjon</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="231"/>
<location filename="../qml/InformationsTabPage.qml" line="234"/>
<source>Manufacturer cloud</source>
<translation>Produsentsky</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="305"/>
<location filename="../qml/InformationsTabPage.qml" line="311"/>
<source>The manufacturer does not even think you are worth the raw data that you could inspect and zoom. Instead, it sends these ugly low-resolution pictures that you cannot meaningfully interact with—let alone control the displayed time range.</source>
<translation>Produsenten synes ikke engang du er verdt rådataene som du kunne ha undersøkt og zoomet inn i. I stedet sender den disse stygge lavoppløselige bildene som du ikke kan samhandle meningsfullt med – langt mindre styre det viste tidsintervallet.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="352"/>
<location filename="../qml/InformationsTabPage.qml" line="362"/>
<source>Own your consumption history</source>
<translation>Behold eierskapet til forbrukshistorikken din</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="357"/>
<location filename="../qml/InformationsTabPage.qml" line="368"/>
<source>Connect the device to your own Home Assistant installation for fast, dependable history that remains under your control. You decide how long data is retained and which measurements are recorded.</source>
<translation>Koble enheten til din egen Home Assistant-installasjon for rask og pålitelig historikk som forblir under din kontroll. Du bestemmer hvor lenge data lagres og hvilke målinger som registreres.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="372"/>
<location filename="../qml/InformationsTabPage.qml" line="383"/>
<source>Connected to Home Assistant</source>
<translation>Koblet til Home Assistant</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="373"/>
<location filename="../qml/InformationsTabPage.qml" line="384"/>
<source>Home Assistant is not configured</source>
<translation>Home Assistant er ikke konfigurert</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="387"/>
<location filename="../qml/InformationsTabPage.qml" line="398"/>
<source>Configure</source>
<translation>Konfigurer</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="387"/>
<location filename="../qml/InformationsTabPage.qml" line="521"/>
<location filename="../qml/InformationsTabPage.qml" line="398"/>
<location filename="../qml/InformationsTabPage.qml" line="536"/>
<source>Set up</source>
<translation>Konfigurer</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="451"/>
<location filename="../qml/InformationsTabPage.qml" line="462"/>
<source>Refresh</source>
<translation>Oppdater</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="503"/>
<location filename="../qml/InformationsTabPage.qml" line="517"/>
<source>Connect Home Assistant to display history</source>
<translation>Koble til Home Assistant for å vise historikk</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="504"/>
<location filename="../qml/InformationsTabPage.qml" line="518"/>
<source>Create your first history chart</source>
<translation>Opprett ditt første historikkdiagram</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="512"/>
<location filename="../qml/InformationsTabPage.qml" line="527"/>
<source>The setup wizard connects to your server and lets you select the entities to display.</source>
<translation>Oppsettsveiviseren kobler til serveren og lar deg velge entitetene som skal vises.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="513"/>
<location filename="../qml/InformationsTabPage.qml" line="528"/>
<source>Open the configuration and add a chart with one or more Home Assistant entities.</source>
<translation>Åpne konfigurasjonen og legg til et diagram med én eller flere Home Assistant-entiteter.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="521"/>
<location filename="../qml/InformationsTabPage.qml" line="536"/>
<source>Add chart</source>
<translation>Legg til diagram</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="530"/>
<source>Forget Home Assistant configuration</source>
<translation>Glem Home Assistant-konfigurasjonen</translation>
<translation type="vanished">Glem Home Assistant-konfigurasjonen</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="543"/>
<location filename="../qml/InformationsTabPage.qml" line="553"/>
<source>Forget Home Assistant?</source>
<translation>Glemme Home Assistant?</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="550"/>
<location filename="../qml/InformationsTabPage.qml" line="563"/>
<source>This removes the server address, access token and all chart definitions stored in this app.</source>
<translation>Dette fjerner serveradressen, tilgangstokenet og alle diagramdefinisjoner som er lagret i appen.</translation>
</message>
@@ -3445,7 +3503,7 @@ Før diagrammer kan motta data:
<translation type="vanished">Begrenset · upålitelig · treg</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="254"/>
<location filename="../qml/InformationsTabPage.qml" line="257"/>
<source>Your own cloud</source>
<translation>Din egen sky</translation>
</message>
@@ -3454,22 +3512,22 @@ Før diagrammer kan motta data:
<translation type="vanished">Historikk · vedlikeholdt · rask</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="238"/>
<location filename="../qml/InformationsTabPage.qml" line="241"/>
<source>Lacks features · unreliable · slow</source>
<translation>Mangler funksjoner · upålitelig · treg</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="261"/>
<location filename="../qml/InformationsTabPage.qml" line="264"/>
<source>Historical data · properly maintained · fast</source>
<translation>Historiske data · godt vedlikeholdt · rask</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="288"/>
<location filename="../qml/InformationsTabPage.qml" line="294"/>
<source>The manufacturer cloud provides basic charts, but can be slow, unavailable or limited to the data selected by the manufacturer.</source>
<translation>Produsentskyen tilbyr grunnleggende diagrammer, men kan være treg, utilgjengelig eller begrenset til data som produsenten har valgt.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="339"/>
<location filename="../qml/InformationsTabPage.qml" line="345"/>
<source>Download information</source>
<translation>Last ned informasjon</translation>
</message>
@@ -3490,37 +3548,37 @@ Før diagrammer kan motta data:
<translation type="vanished">Konfigurer tilkobling til Home Assistant</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="395"/>
<location filename="../qml/InformationsTabPage.qml" line="406"/>
<source>Historical data</source>
<translation>Historiske data</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="405"/>
<location filename="../qml/InformationsTabPage.qml" line="416"/>
<source>Day</source>
<translation>Dag</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="406"/>
<location filename="../qml/InformationsTabPage.qml" line="417"/>
<source>Week</source>
<translation>Uke</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="407"/>
<location filename="../qml/InformationsTabPage.qml" line="418"/>
<source>Month</source>
<translation>Måned</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="408"/>
<location filename="../qml/InformationsTabPage.qml" line="419"/>
<source>Year</source>
<translation>År</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="427"/>
<location filename="../qml/InformationsTabPage.qml" line="438"/>
<source>Previous</source>
<translation>Forrige</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="442"/>
<location filename="../qml/InformationsTabPage.qml" line="453"/>
<source>Next</source>
<translation>Neste</translation>
</message>
@@ -5104,6 +5162,74 @@ Før diagrammer kan motta data:
<translation>Lisenser</translation>
</message>
</context>
<context>
<name>SolalawebSetupDialog</name>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="15"/>
<source>Set up Solalaweb</source>
<translation>Konfigurer Solalaweb</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="48"/>
<source>Solalaweb now uses Authentik. Create a dedicated app password instead of entering your normal account password. Choose a lifetime long enough for this app, then copy the password itself—not its name.</source>
<translation>Solalaweb bruker nå Authentik. Opprett et eget app-passord i stedet for å skrive inn det vanlige kontopassordet. Velg en gyldighetstid som er lang nok for denne appen, og kopier deretter selve passordet – ikke navnet.</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="54"/>
<source>Create an Authentik app password</source>
<translation>Opprett et Authentik-app-passord</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="61"/>
<source>Your username is usually your email address. The user-details page shows the exact username expected by Authentik.</source>
<translation>Brukernavnet ditt er vanligvis e-postadressen din. Siden med brukerdetaljer viser det nøyaktige brukernavnet som Authentik forventer.</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="68"/>
<source>Open Authentik user details</source>
<translation>Åpne brukerdetaljer i Authentik</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="74"/>
<source>Username</source>
<translation>Brukernavn</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="83"/>
<source>Username or email address</source>
<translation>Brukernavn eller e-postadresse</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="89"/>
<source>App password</source>
<translation>App-passord</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="101"/>
<source>Authentik app password</source>
<translation>Authentik-app-passord</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="109"/>
<source>Hide</source>
<translation>Skjul</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="109"/>
<source>Show</source>
<translation>Vis</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="133"/>
<source>Cancel</source>
<translation>Avbryt</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="145"/>
<source>Verify and save</source>
<translation>Bekreft og lagre</translation>
</message>
</context>
<context>
<name>StartStopButton</name>
<message>
+273 -147
View File
@@ -165,54 +165,100 @@
<translation>https://github.com/goecharger/go-eCharger-API-v1/blob/master/go-eCharger%20API%20v1%20EN.md</translation>
</message>
</context>
<context>
<name>AppSettings</name>
<message>
<location filename="../appsettings.cpp" line="25"/>
<source>The Solalaweb authentication check timed out.</source>
<translation>Tidsgränsen för Solalawebs autentiseringskontroll överskreds.</translation>
</message>
<message>
<location filename="../appsettings.cpp" line="35"/>
<source>Authentication could not be verified: %1</source>
<translation>Autentiseringen kunde inte verifieras: %1</translation>
</message>
<message>
<location filename="../appsettings.cpp" line="118"/>
<source>Enter both the username and the app password.</source>
<translation>Ange både användarnamn och applösenord.</translation>
</message>
</context>
<context>
<name>AppSettingsPage</name>
<message>
<location filename="../qml/AppSettingsPage.qml" line="8"/>
<location filename="../qml/AppSettingsPage.qml" line="9"/>
<source>App Settings</source>
<translation>Appinställningar</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="15"/>
<location filename="../qml/AppSettingsPage.qml" line="20"/>
<source>Language</source>
<translation>Språk</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="29"/>
<location filename="../qml/AppSettingsPage.qml" line="34"/>
<source>Number of app instances:</source>
<translation>Antal appinstanser:</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="43"/>
<location filename="../qml/AppSettingsPage.qml" line="48"/>
<source>Swipe left or right with three fingers to switch between app instances.</source>
<translation>Svep åt vänster eller höger med tre fingrar för att växla mellan appinstanser.</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="58"/>
<location filename="../qml/AppSettingsPage.qml" line="56"/>
<source>Solalaweb</source>
<translation>Solalaweb</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="61"/>
<source>Set up Authentik access to make the private Solalaweb connection available for saved devices.</source>
<translation>Konfigurera Authentik-åtkomst för att göra den privata Solalaweb-anslutningen tillgänglig för sparade enheter.</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="69"/>
<source>Authentication verified for %1</source>
<translation>Autentisering verifierad för %1</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="70"/>
<source>Authentication has not been verified</source>
<translation>Autentiseringen har inte verifierats</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="79"/>
<source>Change Solalaweb authentication</source>
<translation>Ändra Solalaweb-autentisering</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="80"/>
<source>Set up Solalaweb</source>
<translation>Konfigurera Solalaweb</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="87"/>
<source>Show Solalaweb</source>
<translation>Visa Solalaweb</translation>
</message>
<message>
<source>solalaweb key:</source>
<translation>solalaweb nyckel:</translation>
<translation type="vanished">solalaweb nyckel:</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="64"/>
<location filename="../qml/AppSettingsPage.qml" line="81"/>
<source>Select...</source>
<translation>Välj...</translation>
<translation type="vanished">Välj...</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="64"/>
<location filename="../qml/AppSettingsPage.qml" line="81"/>
<source>Replace...</source>
<translation>Ersätt...</translation>
<translation type="vanished">Ersätt...</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="75"/>
<source>solalaweb cert:</source>
<translation>solalaweb certifikat:</translation>
<translation type="vanished">solalaweb certifikat:</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="95"/>
<source>Show solalaweb:</source>
<translation>Visa solalaweb:</translation>
<translation type="vanished">Visa solalaweb:</translation>
</message>
</context>
<context>
@@ -1752,227 +1798,235 @@
<context>
<name>DeviceConnection</name>
<message>
<location filename="../deviceconnection.cpp" line="96"/>
<location filename="../deviceconnection.cpp" line="102"/>
<source>Connecting to %0</source>
<translation>Ansluter till %0</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="106"/>
<source>Could not parse solalaweb certificate!</source>
<translation>Kunde inte analysera solalaweb-certifikat!</translation>
<translation type="vanished">Kunde inte analysera solalaweb-certifikat!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="117"/>
<source>Could not parse solalaweb key!</source>
<translation>Kunde inte analysera solalaweb-nyckeln!</translation>
<translation type="vanished">Kunde inte analysera solalaweb-nyckeln!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="143"/>
<location filename="../deviceconnection.cpp" line="113"/>
<source>Solalaweb authentication must be configured again.</source>
<translation>Solalaweb-autentiseringen måste konfigureras igen.</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="146"/>
<source>Received something that is not a json object!</source>
<translation>Fick något som inte är ett json-objekt!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="151"/>
<location filename="../deviceconnection.cpp" line="154"/>
<source>Received something that does not contain a type!</source>
<translation>Fick något som inte innehåller en typ!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="158"/>
<location filename="../deviceconnection.cpp" line="161"/>
<source>Received something with a non-string type!</source>
<translation>Fick något med en icke-sträng typ!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="166"/>
<location filename="../deviceconnection.cpp" line="169"/>
<source>Received message type %0 %1</source>
<translation>Mottaget meddelande typ %0 %1</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="174"/>
<location filename="../deviceconnection.cpp" line="177"/>
<source>Received hello without serial!</source>
<translation>Fick hej utan serie!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="181"/>
<location filename="../deviceconnection.cpp" line="184"/>
<source>Received hello with a non-string serial!</source>
<translation>Fick hej med en icke-strängad serie!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="193"/>
<location filename="../deviceconnection.cpp" line="196"/>
<source>Received hello with a non-bool secured!</source>
<translation>Fick hej med en icke-bool säkrad!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="206"/>
<location filename="../deviceconnection.cpp" line="209"/>
<source>Received hello without manufacturer!</source>
<translation>Fick hej utan tillverkare!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="213"/>
<location filename="../deviceconnection.cpp" line="216"/>
<source>Received hello with a non-string manufacturer!</source>
<translation>Fick hej med en icke-strängtillverkare!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="224"/>
<location filename="../deviceconnection.cpp" line="227"/>
<source>Received hello without devicetype!</source>
<translation>Fick hej utan devicetype!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="231"/>
<location filename="../deviceconnection.cpp" line="234"/>
<source>Received hello with a non-string devicetype!</source>
<translation>Fick hej med en icke-strängad enhetstyp!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="242"/>
<location filename="../deviceconnection.cpp" line="245"/>
<source>Received hello without friendly_name!</source>
<translation>Fick hej utan friendly_name!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="249"/>
<location filename="../deviceconnection.cpp" line="252"/>
<source>Received hello with a non-string friendly_name!</source>
<translation>Fick hej med ett icke-strängat friendly_name!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="270"/>
<location filename="../deviceconnection.cpp" line="273"/>
<source>Received authRequired without token1!</source>
<translation>Mottog authRequired utan token1!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="277"/>
<location filename="../deviceconnection.cpp" line="280"/>
<source>Received authRequired with a non-string token1!</source>
<translation>Mottog authRequired med token1 som inte är en sträng!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="288"/>
<location filename="../deviceconnection.cpp" line="291"/>
<source>Received authRequired without token2!</source>
<translation>Mottog authRequired utan token2!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="295"/>
<location filename="../deviceconnection.cpp" line="298"/>
<source>Received authRequired with a non-string token2!</source>
<translation>Mottog authRequired med token2 som inte är en sträng!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="308"/>
<location filename="../deviceconnection.cpp" line="311"/>
<source>Received authRequired with a non-string hash algorithm!</source>
<translation>Mottog authRequired med en hash-algoritm som inte är en sträng!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="321"/>
<location filename="../deviceconnection.cpp" line="324"/>
<source>Received authRequired with unsupported hash algorithm %0!</source>
<translation>Mottog authRequired med hash-algoritmen %0 som inte stöds!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="344"/>
<location filename="../deviceconnection.cpp" line="347"/>
<source>Received fullStatus with a non-bool partial!</source>
<translation>Fick fullstatus med en icke-bool partial!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="354"/>
<location filename="../deviceconnection.cpp" line="357"/>
<source>Received fullStatus without a status!</source>
<translation>Fick fullstatus utan status!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="361"/>
<location filename="../deviceconnection.cpp" line="364"/>
<source>Received fullStatus with a non-object status!</source>
<translation>Fick fullstatus med en icke-objektstatus!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="369"/>
<location filename="../deviceconnection.cpp" line="372"/>
<source>Received partial fullStatus</source>
<translation>Fick delvis fullstatus</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="369"/>
<location filename="../deviceconnection.cpp" line="372"/>
<source>Received last fullStatus</source>
<translation>Fick senaste fullständiga status</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="379"/>
<location filename="../deviceconnection.cpp" line="382"/>
<source>Received deltaStatus without a status!</source>
<translation>Fick deltaStatus utan status!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="386"/>
<location filename="../deviceconnection.cpp" line="389"/>
<source>Received deltaStatus with a non-object status!</source>
<translation>Mottog deltaStatus med en icke-objektstatus!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="427"/>
<location filename="../deviceconnection.cpp" line="430"/>
<source>Received message with a non-string requestId!</source>
<translation>Mottaget meddelande med ett begäran-ID utan sträng!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="480"/>
<location filename="../deviceconnection.cpp" line="483"/>
<source>Sending %0</source>
<translation>Skickar %0</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="510"/>
<location filename="../deviceconnection.cpp" line="513"/>
<source>Could not derive bcrypt authentication hash!</source>
<translation>Kunde inte härleda bcrypt-autentiseringshash!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="529"/>
<location filename="../deviceconnection.cpp" line="532"/>
<source>Connected!</source>
<translation>Ansluten!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="535"/>
<location filename="../deviceconnection.cpp" line="538"/>
<source>Disconnected!</source>
<translation>Frånkopplad!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="539"/>
<location filename="../deviceconnection.cpp" line="542"/>
<source>Reconnecting to %0</source>
<translation>Återansluter till %0</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="548"/>
<location filename="../deviceconnection.cpp" line="550"/>
<source>state changed: %0</source>
<translation>tillstånd ändrat: %0</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="557"/>
<location filename="../deviceconnection.cpp" line="559"/>
<source>could not parse received json: %0 at offset %1</source>
<translation>kunde inte analysera mottagen json: %0 vid offset %1</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="574"/>
<location filename="../deviceconnection.cpp" line="576"/>
<source>unknown binary message type %0 received</source>
<translation>okänd binär meddelandetyp %0 mottagen</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="582"/>
<location filename="../deviceconnection.cpp" line="584"/>
<source>error occured: %0</source>
<translation>fel uppstod: %0</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="588"/>
<location filename="../deviceconnection.cpp" line="598"/>
<source>Solalaweb rejected the saved authentication: %1</source>
<translation>Solalaweb avvisade den sparade autentiseringen: %1</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="609"/>
<source>ssl peer verify error</source>
<translation>ssl peer verifieringsfel</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="594"/>
<location filename="../deviceconnection.cpp" line="615"/>
<source>ssl errors</source>
<translation>ssl-fel</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="605"/>
<location filename="../deviceconnection.cpp" line="626"/>
<source>ssl alert sent level=%0 type=%1 description=%2</source>
<translation>ssl alert skickad nivå=%0 typ=%1 beskrivning=%2</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="611"/>
<location filename="../deviceconnection.cpp" line="632"/>
<source>ssl alert received level=%0 type=%1 description=%2</source>
<translation>ssl alert mottagen nivå=%0 typ=%1 beskrivning=%2</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="617"/>
<location filename="../deviceconnection.cpp" line="638"/>
<source>ssl handshake interrupted on error</source>
<translation>ssl-handskakning avbröts vid fel</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="664"/>
<location filename="../deviceconnection.cpp" line="685"/>
<source>unknown response type %0</source>
<translation>okänd svarstyp %0</translation>
</message>
@@ -2053,7 +2107,7 @@
<translation>Solala</translation>
</message>
<message>
<location filename="../qml/DeviceListScreen.qml" line="277"/>
<location filename="../qml/DeviceListScreen.qml" line="278"/>
<source>Add or setup device</source>
<translation>Lägg till eller konfigurera enhet</translation>
</message>
@@ -2061,32 +2115,32 @@
<context>
<name>DeviceScreen</name>
<message>
<location filename="../qml/DeviceScreen.qml" line="88"/>
<location filename="../qml/DeviceScreen.qml" line="97"/>
<source>Password required</source>
<translation>Lösenord krävs</translation>
</message>
<message>
<location filename="../qml/DeviceScreen.qml" line="111"/>
<location filename="../qml/DeviceScreen.qml" line="120"/>
<source>Password:</source>
<translation>Lösenord:</translation>
</message>
<message>
<location filename="../qml/DeviceScreen.qml" line="121"/>
<location filename="../qml/DeviceScreen.qml" line="130"/>
<source>Password</source>
<translation>Lösenord</translation>
</message>
<message>
<location filename="../qml/DeviceScreen.qml" line="131"/>
<location filename="../qml/DeviceScreen.qml" line="140"/>
<source>Authentication impossible!</source>
<translation>Autentisering omöjlig!</translation>
</message>
<message>
<location filename="../qml/DeviceScreen.qml" line="140"/>
<location filename="../qml/DeviceScreen.qml" line="149"/>
<source>To use this password remotely a password has to be setup first. This can be done over the AccessPoint.</source>
<translation>För fjärråtkomst måste ett lösenord först konfigureras. Det kan göras via åtkomstpunkten.</translation>
</message>
<message>
<location filename="../qml/DeviceScreen.qml" line="183"/>
<location filename="../qml/DeviceScreen.qml" line="199"/>
<source>Connection disturbed</source>
<translation>Anslutningen störd</translation>
</message>
@@ -2928,37 +2982,37 @@
<context>
<name>HomeAssistantSetupDialog</name>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="17"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="19"/>
<source>Edit chart</source>
<translation>Redigera diagram</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="17"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="19"/>
<source>Connect Home Assistant</source>
<translation>Anslut Home Assistant</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="138"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="140"/>
<source>Server</source>
<translation>Server</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="138"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="140"/>
<source>Login</source>
<translation>Inloggning</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="138"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="140"/>
<source>Charts</source>
<translation>Diagram</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="145"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="147"/>
<source>%1. %2</source>
<translation>%1. %2</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="185"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="191"/>
<source>Before you begin</source>
<translation>Innan du börjar</translation>
</message>
@@ -2981,7 +3035,7 @@ Innan diagram kan ta emot data:
• Kontrollera att laddarens entiteter är synliga i Home Assistant.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="190"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="197"/>
<source>Home Assistant must already be installed and running. A Raspberry Pi with Home Assistant on an SD card is one option; other supported Home Assistant installations work as well.
Before charts can receive data:
@@ -3000,78 +3054,83 @@ Innan diagram kan ta emot data:
• Kontrollera att enhetens entiteter är synliga i Home Assistant.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="198"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="205"/>
<source>Installation guide</source>
<translation>Installationsguide</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="203"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="210"/>
<source>MQTT guide</source>
<translation>MQTT-guide</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="212"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="219"/>
<source>Enter the address you normally use to open Home Assistant. The app will contact this server directly.</source>
<translation>Ange adressen som du normalt använder för att öppna Home Assistant. Appen kontaktar servern direkt.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="229"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="494"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="236"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="525"/>
<source>Cancel</source>
<translation>Avbryt</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="232"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="239"/>
<source>Next</source>
<translation>Nästa</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="247"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="254"/>
<source>Create a long-lived access token in your Home Assistant profile and paste it below. Your Home Assistant password is never entered into this app.</source>
<translation>Skapa en långlivad åtkomsttoken i din Home Assistant-profil och klistra in den nedan. Ditt Home Assistant-lösenord anges aldrig i appen.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="253"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="260"/>
<source>Open Home Assistant profile</source>
<translation>Öppna Home Assistant-profil</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="266"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="273"/>
<source>Long-lived access token</source>
<translation>Långlivad åtkomsttoken</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="272"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="279"/>
<source>Hide</source>
<translation>Dölj</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="272"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="279"/>
<source>Show</source>
<translation>Visa</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="296"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="303"/>
<source>Back</source>
<translation>Tillbaka</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="299"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="306"/>
<source>Connect</source>
<translation>Anslut</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="315"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="322"/>
<source>Create charts and choose exactly which Home Assistant entities each chart should display.</source>
<translation>Skapa diagram och välj exakt vilka Home Assistant-entiteter varje diagram ska visa.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="329"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="336"/>
<source>Change server or access token</source>
<translation>Byt server eller åtkomsttoken</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="343"/>
<source>Forget Home Assistant configuration</source>
<translation>Glöm Home Assistant-konfiguration</translation>
</message>
<message numerus="yes">
<location filename="../qml/HomeAssistantSetupDialog.qml" line="363"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="377"/>
<source>%n entity(s)</source>
<translation>
<numerusform>%n entitet</numerusform>
@@ -3079,42 +3138,42 @@ Innan diagram kan ta emot data:
</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="368"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="382"/>
<source>Edit</source>
<translation>Redigera</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="372"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="386"/>
<source>Delete</source>
<translation>Ta bort</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="381"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="395"/>
<source>No charts configured yet.</source>
<translation>Inga diagram har konfigurerats ännu.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="389"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="403"/>
<source>Add chart</source>
<translation>Lägg till diagram</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="391"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="405"/>
<source>Done</source>
<translation>Klar</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="404"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="418"/>
<source>Chart title</source>
<translation>Diagramrubrik</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="412"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="426"/>
<source>Search by name, entity ID, unit or device class…</source>
<translation>Sök efter namn, entitets-ID, enhet eller enhetsklass…</translation>
</message>
<message numerus="yes">
<location filename="../qml/HomeAssistantSetupDialog.qml" line="421"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="435"/>
<source>%n entity(s) selected</source>
<translation>
<numerusform>%n entitet vald</numerusform>
@@ -3122,17 +3181,17 @@ Innan diagram kan ta emot data:
</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="431"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="445"/>
<source>Reload</source>
<translation>Läs in igen</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="486"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="517"/>
<source>No matching entities found.</source>
<translation>Inga matchande entiteter hittades.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="497"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="528"/>
<source>Save chart</source>
<translation>Spara diagram</translation>
</message>
@@ -3292,7 +3351,7 @@ Innan diagram kan ta emot data:
<translation type="vanished">Information</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="297"/>
<location filename="../qml/InformationsTabPage.qml" line="303"/>
<source>Idle</source>
<translation>Viloläge</translation>
</message>
@@ -3305,138 +3364,137 @@ Innan diagram kan ta emot data:
<translation type="vanished">LÄSER IN</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="90"/>
<location filename="../qml/InformationsTabPage.qml" line="93"/>
<source>%1 – %2</source>
<translation>%1 – %2</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="175"/>
<location filename="../qml/InformationsTabPage.qml" line="178"/>
<source>Receiving manufacturer data…</source>
<translation>Tar emot tillverkardata…</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="177"/>
<location filename="../qml/InformationsTabPage.qml" line="180"/>
<source>Loading manufacturer charts…</source>
<translation>Läser in tillverkarens diagram…</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="191"/>
<location filename="../qml/InformationsTabPage.qml" line="194"/>
<source>%1 images</source>
<translation>%1 bilder</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="193"/>
<location filename="../qml/InformationsTabPage.qml" line="196"/>
<source>%1 charts</source>
<translation>%1 diagram</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="195"/>
<location filename="../qml/InformationsTabPage.qml" line="198"/>
<source>Loaded %1</source>
<translation>%1 inläst</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="196"/>
<location filename="../qml/InformationsTabPage.qml" line="199"/>
<source>No information data received</source>
<translation>Ingen informationsdata mottogs</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="198"/>
<location filename="../qml/InformationsTabPage.qml" line="201"/>
<source>The manufacturer cloud returned invalid data.</source>
<translation>Tillverkarens molntjänst returnerade ogiltiga data.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="208"/>
<location filename="../qml/InformationsTabPage.qml" line="211"/>
<source>Requesting manufacturer data…</source>
<translation>Begär tillverkardata…</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="216"/>
<location filename="../qml/InformationsTabPage.qml" line="219"/>
<source>Information</source>
<translation>Information</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="231"/>
<location filename="../qml/InformationsTabPage.qml" line="234"/>
<source>Manufacturer cloud</source>
<translation>Tillverkarens moln</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="305"/>
<location filename="../qml/InformationsTabPage.qml" line="311"/>
<source>The manufacturer does not even think you are worth the raw data that you could inspect and zoom. Instead, it sends these ugly low-resolution pictures that you cannot meaningfully interact with—let alone control the displayed time range.</source>
<translation>Tillverkaren tycker inte ens att du är värd rådata som du skulle kunna granska och zooma in. I stället skickar den dessa fula lågupplösta bilder som du inte kan interagera med på ett meningsfullt sätt – än mindre styra det visade tidsintervallet.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="352"/>
<location filename="../qml/InformationsTabPage.qml" line="362"/>
<source>Own your consumption history</source>
<translation>Äg din förbrukningshistorik</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="357"/>
<location filename="../qml/InformationsTabPage.qml" line="368"/>
<source>Connect the device to your own Home Assistant installation for fast, dependable history that remains under your control. You decide how long data is retained and which measurements are recorded.</source>
<translation>Anslut enheten till din egen Home Assistant-installation för snabb och tillförlitlig historik som förblir under din kontroll. Du bestämmer hur länge data sparas och vilka mätvärden som registreras.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="372"/>
<location filename="../qml/InformationsTabPage.qml" line="383"/>
<source>Connected to Home Assistant</source>
<translation>Ansluten till Home Assistant</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="373"/>
<location filename="../qml/InformationsTabPage.qml" line="384"/>
<source>Home Assistant is not configured</source>
<translation>Home Assistant är inte konfigurerat</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="387"/>
<location filename="../qml/InformationsTabPage.qml" line="398"/>
<source>Configure</source>
<translation>Konfigurera</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="387"/>
<location filename="../qml/InformationsTabPage.qml" line="521"/>
<location filename="../qml/InformationsTabPage.qml" line="398"/>
<location filename="../qml/InformationsTabPage.qml" line="536"/>
<source>Set up</source>
<translation>Konfigurera</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="451"/>
<location filename="../qml/InformationsTabPage.qml" line="462"/>
<source>Refresh</source>
<translation>Uppdatera</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="503"/>
<location filename="../qml/InformationsTabPage.qml" line="517"/>
<source>Connect Home Assistant to display history</source>
<translation>Anslut Home Assistant för att visa historik</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="504"/>
<location filename="../qml/InformationsTabPage.qml" line="518"/>
<source>Create your first history chart</source>
<translation>Skapa ditt första historikdiagram</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="512"/>
<location filename="../qml/InformationsTabPage.qml" line="527"/>
<source>The setup wizard connects to your server and lets you select the entities to display.</source>
<translation>Installationsguiden ansluter till servern och låter dig välja vilka entiteter som ska visas.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="513"/>
<location filename="../qml/InformationsTabPage.qml" line="528"/>
<source>Open the configuration and add a chart with one or more Home Assistant entities.</source>
<translation>Öppna konfigurationen och lägg till ett diagram med en eller flera Home Assistant-entiteter.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="521"/>
<location filename="../qml/InformationsTabPage.qml" line="536"/>
<source>Add chart</source>
<translation>Lägg till diagram</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="530"/>
<source>Forget Home Assistant configuration</source>
<translation>Glöm Home Assistant-konfiguration</translation>
<translation type="vanished">Glöm Home Assistant-konfiguration</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="543"/>
<location filename="../qml/InformationsTabPage.qml" line="553"/>
<source>Forget Home Assistant?</source>
<translation>Glöm Home Assistant?</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="550"/>
<location filename="../qml/InformationsTabPage.qml" line="563"/>
<source>This removes the server address, access token and all chart definitions stored in this app.</source>
<translation>Detta tar bort serveradressen, åtkomsttoken och alla diagramdefinitioner som lagras i appen.</translation>
</message>
@@ -3445,7 +3503,7 @@ Innan diagram kan ta emot data:
<translation type="vanished">Begränsat · opålitligt · långsamt</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="254"/>
<location filename="../qml/InformationsTabPage.qml" line="257"/>
<source>Your own cloud</source>
<translation>Ditt eget moln</translation>
</message>
@@ -3454,22 +3512,22 @@ Innan diagram kan ta emot data:
<translation type="vanished">Historik · underhållet · snabbt</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="238"/>
<location filename="../qml/InformationsTabPage.qml" line="241"/>
<source>Lacks features · unreliable · slow</source>
<translation>Saknar funktioner · opålitligt · långsamt</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="261"/>
<location filename="../qml/InformationsTabPage.qml" line="264"/>
<source>Historical data · properly maintained · fast</source>
<translation>Historiska data · väl underhållet · snabbt</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="288"/>
<location filename="../qml/InformationsTabPage.qml" line="294"/>
<source>The manufacturer cloud provides basic charts, but can be slow, unavailable or limited to the data selected by the manufacturer.</source>
<translation>Tillverkarens molntjänst erbjuder grundläggande diagram, men kan vara långsam, otillgänglig eller begränsad till data som tillverkaren har valt.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="339"/>
<location filename="../qml/InformationsTabPage.qml" line="345"/>
<source>Download information</source>
<translation>Hämta information</translation>
</message>
@@ -3490,37 +3548,37 @@ Innan diagram kan ta emot data:
<translation type="vanished">Konfigurera anslutning till Home Assistant</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="395"/>
<location filename="../qml/InformationsTabPage.qml" line="406"/>
<source>Historical data</source>
<translation>Historiska data</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="405"/>
<location filename="../qml/InformationsTabPage.qml" line="416"/>
<source>Day</source>
<translation>Dag</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="406"/>
<location filename="../qml/InformationsTabPage.qml" line="417"/>
<source>Week</source>
<translation>Vecka</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="407"/>
<location filename="../qml/InformationsTabPage.qml" line="418"/>
<source>Month</source>
<translation>Månad</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="408"/>
<location filename="../qml/InformationsTabPage.qml" line="419"/>
<source>Year</source>
<translation>År</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="427"/>
<location filename="../qml/InformationsTabPage.qml" line="438"/>
<source>Previous</source>
<translation>Föregående</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="442"/>
<location filename="../qml/InformationsTabPage.qml" line="453"/>
<source>Next</source>
<translation>Nästa</translation>
</message>
@@ -5104,6 +5162,74 @@ Innan diagram kan ta emot data:
<translation>Licenser</translation>
</message>
</context>
<context>
<name>SolalawebSetupDialog</name>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="15"/>
<source>Set up Solalaweb</source>
<translation>Konfigurera Solalaweb</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="48"/>
<source>Solalaweb now uses Authentik. Create a dedicated app password instead of entering your normal account password. Choose a lifetime long enough for this app, then copy the password itself—not its name.</source>
<translation>Solalaweb använder nu Authentik. Skapa ett särskilt applösenord i stället för att ange ditt vanliga kontolösenord. Välj en giltighetstid som är tillräckligt lång för den här appen och kopiera sedan själva lösenordet – inte dess namn.</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="54"/>
<source>Create an Authentik app password</source>
<translation>Skapa ett Authentik-applösenord</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="61"/>
<source>Your username is usually your email address. The user-details page shows the exact username expected by Authentik.</source>
<translation>Ditt användarnamn är vanligtvis din e-postadress. Sidan med användaruppgifter visar det exakta användarnamn som Authentik förväntar sig.</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="68"/>
<source>Open Authentik user details</source>
<translation>Öppna användaruppgifter i Authentik</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="74"/>
<source>Username</source>
<translation>Användarnamn</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="83"/>
<source>Username or email address</source>
<translation>Användarnamn eller e-postadress</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="89"/>
<source>App password</source>
<translation>Applösenord</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="101"/>
<source>Authentik app password</source>
<translation>Authentik-applösenord</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="109"/>
<source>Hide</source>
<translation>Dölj</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="109"/>
<source>Show</source>
<translation>Visa</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="133"/>
<source>Cancel</source>
<translation>Avbryt</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="145"/>
<source>Verify and save</source>
<translation>Verifiera och spara</translation>
</message>
</context>
<context>
<name>StartStopButton</name>
<message>
+273 -147
View File
@@ -165,54 +165,100 @@
<translation>https://github.com/goecharger/go-eCharger-API-v1/blob/master/go-eCharger%20API%20v1%20EN.md</translation>
</message>
</context>
<context>
<name>AppSettings</name>
<message>
<location filename="../appsettings.cpp" line="25"/>
<source>The Solalaweb authentication check timed out.</source>
<translation>Solalaweb kimlik doğrulama kontrolü zaman aşımına uğradı.</translation>
</message>
<message>
<location filename="../appsettings.cpp" line="35"/>
<source>Authentication could not be verified: %1</source>
<translation>Kimlik doğrulama doğrulanamadı: %1</translation>
</message>
<message>
<location filename="../appsettings.cpp" line="118"/>
<source>Enter both the username and the app password.</source>
<translation>Hem kullanıcı adını hem de uygulama parolasını girin.</translation>
</message>
</context>
<context>
<name>AppSettingsPage</name>
<message>
<location filename="../qml/AppSettingsPage.qml" line="8"/>
<location filename="../qml/AppSettingsPage.qml" line="9"/>
<source>App Settings</source>
<translation>Uygulama Ayarları</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="15"/>
<location filename="../qml/AppSettingsPage.qml" line="20"/>
<source>Language</source>
<translation>Dil</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="29"/>
<location filename="../qml/AppSettingsPage.qml" line="34"/>
<source>Number of app instances:</source>
<translation>Uygulama örneklerinin sayısı:</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="43"/>
<location filename="../qml/AppSettingsPage.qml" line="48"/>
<source>Swipe left or right with three fingers to switch between app instances.</source>
<translation>Uygulama örnekleri arasında geçiş yapmak için üç parmağınızla sola veya sağa kaydırın.</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="58"/>
<location filename="../qml/AppSettingsPage.qml" line="56"/>
<source>Solalaweb</source>
<translation>Solalaweb</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="61"/>
<source>Set up Authentik access to make the private Solalaweb connection available for saved devices.</source>
<translation>Kayıtlı cihazlar için özel Solalaweb bağlantısını kullanılabilir hale getirmek üzere Authentik erişimini ayarlayın.</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="69"/>
<source>Authentication verified for %1</source>
<translation>%1 için kimlik doğrulama doğrulandı</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="70"/>
<source>Authentication has not been verified</source>
<translation>Kimlik doğrulama doğrulanmadı</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="79"/>
<source>Change Solalaweb authentication</source>
<translation>Solalaweb kimlik doğrulamasını değiştir</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="80"/>
<source>Set up Solalaweb</source>
<translation>Solalaweb'i ayarla</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="87"/>
<source>Show Solalaweb</source>
<translation>Solalaweb'i göster</translation>
</message>
<message>
<source>solalaweb key:</source>
<translation>solalaweb anahtarı:</translation>
<translation type="vanished">solalaweb anahtarı:</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="64"/>
<location filename="../qml/AppSettingsPage.qml" line="81"/>
<source>Select...</source>
<translation>Seç...</translation>
<translation type="vanished">Seç...</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="64"/>
<location filename="../qml/AppSettingsPage.qml" line="81"/>
<source>Replace...</source>
<translation>Değiştir...</translation>
<translation type="vanished">Değiştir...</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="75"/>
<source>solalaweb cert:</source>
<translation>solalaweb sertifikası:</translation>
<translation type="vanished">solalaweb sertifikası:</translation>
</message>
<message>
<location filename="../qml/AppSettingsPage.qml" line="95"/>
<source>Show solalaweb:</source>
<translation>Solalaweb&apos;i göster:</translation>
<translation type="vanished">Solalaweb&apos;i göster:</translation>
</message>
</context>
<context>
@@ -1752,227 +1798,235 @@
<context>
<name>DeviceConnection</name>
<message>
<location filename="../deviceconnection.cpp" line="96"/>
<location filename="../deviceconnection.cpp" line="102"/>
<source>Connecting to %0</source>
<translation>%0&apos;ye bağlanma</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="106"/>
<source>Could not parse solalaweb certificate!</source>
<translation>Solalaweb sertifikası ayrıştırılamadı!</translation>
<translation type="vanished">Solalaweb sertifikası ayrıştırılamadı!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="117"/>
<source>Could not parse solalaweb key!</source>
<translation>Solalaweb anahtarı ayrıştırılamadı!</translation>
<translation type="vanished">Solalaweb anahtarı ayrıştırılamadı!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="143"/>
<location filename="../deviceconnection.cpp" line="113"/>
<source>Solalaweb authentication must be configured again.</source>
<translation>Solalaweb kimlik doğrulaması yeniden yapılandırılmalıdır.</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="146"/>
<source>Received something that is not a json object!</source>
<translation>Json nesnesi olmayan bir şey alındı!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="151"/>
<location filename="../deviceconnection.cpp" line="154"/>
<source>Received something that does not contain a type!</source>
<translation>Tür içermeyen bir şey alındı!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="158"/>
<location filename="../deviceconnection.cpp" line="161"/>
<source>Received something with a non-string type!</source>
<translation>Dize olmayan türde bir şey alındı!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="166"/>
<location filename="../deviceconnection.cpp" line="169"/>
<source>Received message type %0 %1</source>
<translation>Alınan mesaj türü %0 %1</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="174"/>
<location filename="../deviceconnection.cpp" line="177"/>
<source>Received hello without serial!</source>
<translation>Seri olmadan merhaba aldım!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="181"/>
<location filename="../deviceconnection.cpp" line="184"/>
<source>Received hello with a non-string serial!</source>
<translation>Dize dışı bir diziyle merhaba aldım!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="193"/>
<location filename="../deviceconnection.cpp" line="196"/>
<source>Received hello with a non-bool secured!</source>
<translation>Bool olmayan bir güvenlikle merhaba aldım!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="206"/>
<location filename="../deviceconnection.cpp" line="209"/>
<source>Received hello without manufacturer!</source>
<translation>Üretici olmadan merhaba aldım!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="213"/>
<location filename="../deviceconnection.cpp" line="216"/>
<source>Received hello with a non-string manufacturer!</source>
<translation>String olmayan bir üreticiden merhaba aldım!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="224"/>
<location filename="../deviceconnection.cpp" line="227"/>
<source>Received hello without devicetype!</source>
<translation>Devicetype olmadan merhaba alındı!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="231"/>
<location filename="../deviceconnection.cpp" line="234"/>
<source>Received hello with a non-string devicetype!</source>
<translation>Dize dışı bir cihaz türüyle merhaba alındı!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="242"/>
<location filename="../deviceconnection.cpp" line="245"/>
<source>Received hello without friendly_name!</source>
<translation>Friendly_name olmadan merhaba aldım!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="249"/>
<location filename="../deviceconnection.cpp" line="252"/>
<source>Received hello with a non-string friendly_name!</source>
<translation>Dize olmayan bir dostu_ad ile merhaba aldım!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="270"/>
<location filename="../deviceconnection.cpp" line="273"/>
<source>Received authRequired without token1!</source>
<translation>token1 olmadan authRequired alındı!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="277"/>
<location filename="../deviceconnection.cpp" line="280"/>
<source>Received authRequired with a non-string token1!</source>
<translation>token1 dize değilken authRequired alındı!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="288"/>
<location filename="../deviceconnection.cpp" line="291"/>
<source>Received authRequired without token2!</source>
<translation>token2 olmadan authRequired alındı!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="295"/>
<location filename="../deviceconnection.cpp" line="298"/>
<source>Received authRequired with a non-string token2!</source>
<translation>token2 dize değilken authRequired alındı!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="308"/>
<location filename="../deviceconnection.cpp" line="311"/>
<source>Received authRequired with a non-string hash algorithm!</source>
<translation>Dize olmayan bir karma algoritmasıyla authRequired alındı!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="321"/>
<location filename="../deviceconnection.cpp" line="324"/>
<source>Received authRequired with unsupported hash algorithm %0!</source>
<translation>Desteklenmeyen %0 karma algoritmasıyla authRequired alındı!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="344"/>
<location filename="../deviceconnection.cpp" line="347"/>
<source>Received fullStatus with a non-bool partial!</source>
<translation>Bool olmayan bir kısmi ile fullStatus alındı!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="354"/>
<location filename="../deviceconnection.cpp" line="357"/>
<source>Received fullStatus without a status!</source>
<translation>Durum olmadan fullStatus alındı!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="361"/>
<location filename="../deviceconnection.cpp" line="364"/>
<source>Received fullStatus with a non-object status!</source>
<translation>Nesne olmayan bir durumla fullStatus alındı!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="369"/>
<location filename="../deviceconnection.cpp" line="372"/>
<source>Received partial fullStatus</source>
<translation>Kısmi tam durum alındı</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="369"/>
<location filename="../deviceconnection.cpp" line="372"/>
<source>Received last fullStatus</source>
<translation>En son alınan fullStatus</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="379"/>
<location filename="../deviceconnection.cpp" line="382"/>
<source>Received deltaStatus without a status!</source>
<translation>Durum olmadan deltaStatus alındı!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="386"/>
<location filename="../deviceconnection.cpp" line="389"/>
<source>Received deltaStatus with a non-object status!</source>
<translation>Nesne olmayan bir durumla deltaStatus alındı!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="427"/>
<location filename="../deviceconnection.cpp" line="430"/>
<source>Received message with a non-string requestId!</source>
<translation>Dize olmayan bir istek kimliğine sahip ileti alındı!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="480"/>
<location filename="../deviceconnection.cpp" line="483"/>
<source>Sending %0</source>
<translation>%0 gönderiliyor</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="510"/>
<location filename="../deviceconnection.cpp" line="513"/>
<source>Could not derive bcrypt authentication hash!</source>
<translation>Bcrypt kimlik doğrulama karması türetilemedi!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="529"/>
<location filename="../deviceconnection.cpp" line="532"/>
<source>Connected!</source>
<translation>Bağlı!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="535"/>
<location filename="../deviceconnection.cpp" line="538"/>
<source>Disconnected!</source>
<translation>Bağlantı kesildi!</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="539"/>
<location filename="../deviceconnection.cpp" line="542"/>
<source>Reconnecting to %0</source>
<translation>%0&apos;ye yeniden bağlanılıyor</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="548"/>
<location filename="../deviceconnection.cpp" line="550"/>
<source>state changed: %0</source>
<translation>durum değişti: %0</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="557"/>
<location filename="../deviceconnection.cpp" line="559"/>
<source>could not parse received json: %0 at offset %1</source>
<translation>alınan json ayrıştırılamadı: %1 konumunda %0</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="574"/>
<location filename="../deviceconnection.cpp" line="576"/>
<source>unknown binary message type %0 received</source>
<translation>bilinmeyen ikili mesaj türü %0 alındı</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="582"/>
<location filename="../deviceconnection.cpp" line="584"/>
<source>error occured: %0</source>
<translation>hata oluştu: %0</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="588"/>
<location filename="../deviceconnection.cpp" line="598"/>
<source>Solalaweb rejected the saved authentication: %1</source>
<translation>Solalaweb kayıtlı kimlik doğrulamasını reddetti: %1</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="609"/>
<source>ssl peer verify error</source>
<translation>SSL eş doğrulama hatası</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="594"/>
<location filename="../deviceconnection.cpp" line="615"/>
<source>ssl errors</source>
<translation>SSL hataları</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="605"/>
<location filename="../deviceconnection.cpp" line="626"/>
<source>ssl alert sent level=%0 type=%1 description=%2</source>
<translation>SSL uyarısı gönderildi seviye=%0 tür=%1 açıklama=%2</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="611"/>
<location filename="../deviceconnection.cpp" line="632"/>
<source>ssl alert received level=%0 type=%1 description=%2</source>
<translation>SSL uyarısı alındı düzey=%0 tür=%1 açıklama=%2</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="617"/>
<location filename="../deviceconnection.cpp" line="638"/>
<source>ssl handshake interrupted on error</source>
<translation>SSL anlaşması hata nedeniyle kesintiye uğradı</translation>
</message>
<message>
<location filename="../deviceconnection.cpp" line="664"/>
<location filename="../deviceconnection.cpp" line="685"/>
<source>unknown response type %0</source>
<translation>bilinmeyen yanıt türü %0</translation>
</message>
@@ -2053,7 +2107,7 @@
<translation>Solala</translation>
</message>
<message>
<location filename="../qml/DeviceListScreen.qml" line="277"/>
<location filename="../qml/DeviceListScreen.qml" line="278"/>
<source>Add or setup device</source>
<translation>Cihaz ekleyin veya kurun</translation>
</message>
@@ -2061,32 +2115,32 @@
<context>
<name>DeviceScreen</name>
<message>
<location filename="../qml/DeviceScreen.qml" line="88"/>
<location filename="../qml/DeviceScreen.qml" line="97"/>
<source>Password required</source>
<translation>Şifre gerekli</translation>
</message>
<message>
<location filename="../qml/DeviceScreen.qml" line="111"/>
<location filename="../qml/DeviceScreen.qml" line="120"/>
<source>Password:</source>
<translation>Şifre:</translation>
</message>
<message>
<location filename="../qml/DeviceScreen.qml" line="121"/>
<location filename="../qml/DeviceScreen.qml" line="130"/>
<source>Password</source>
<translation>Şifre</translation>
</message>
<message>
<location filename="../qml/DeviceScreen.qml" line="131"/>
<location filename="../qml/DeviceScreen.qml" line="140"/>
<source>Authentication impossible!</source>
<translation>Kimlik doğrulama imkansız!</translation>
</message>
<message>
<location filename="../qml/DeviceScreen.qml" line="140"/>
<location filename="../qml/DeviceScreen.qml" line="149"/>
<source>To use this password remotely a password has to be setup first. This can be done over the AccessPoint.</source>
<translation>Bu şifreyi uzaktan kullanmak için önce bir şifre ayarlanmalıdır. Bu işlem erişim noktası üzerinden yapılabilir.</translation>
</message>
<message>
<location filename="../qml/DeviceScreen.qml" line="183"/>
<location filename="../qml/DeviceScreen.qml" line="199"/>
<source>Connection disturbed</source>
<translation>Bağlantı bozuldu</translation>
</message>
@@ -2928,37 +2982,37 @@
<context>
<name>HomeAssistantSetupDialog</name>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="17"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="19"/>
<source>Edit chart</source>
<translation>Grafiği düzenle</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="17"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="19"/>
<source>Connect Home Assistant</source>
<translation>Home Assistant&apos;ı bağla</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="138"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="140"/>
<source>Server</source>
<translation>Sunucu</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="138"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="140"/>
<source>Login</source>
<translation>Oturum açma</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="138"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="140"/>
<source>Charts</source>
<translation>Grafikler</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="145"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="147"/>
<source>%1. %2</source>
<translation>%1. %2</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="185"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="191"/>
<source>Before you begin</source>
<translation>Başlamadan önce</translation>
</message>
@@ -2981,7 +3035,7 @@ Grafiklerin veri alabilmesi için:
• Şarj cihazının varlıklarının Home Assistant&apos;ta göründüğünü doğrulayın.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="190"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="197"/>
<source>Home Assistant must already be installed and running. A Raspberry Pi with Home Assistant on an SD card is one option; other supported Home Assistant installations work as well.
Before charts can receive data:
@@ -3000,137 +3054,142 @@ Grafiklerin veri alabilmesi için:
• Cihazın varlıklarının Home Assistant&apos;ta göründüğünü doğrulayın.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="198"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="205"/>
<source>Installation guide</source>
<translation>Kurulum kılavuzu</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="203"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="210"/>
<source>MQTT guide</source>
<translation>MQTT kılavuzu</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="212"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="219"/>
<source>Enter the address you normally use to open Home Assistant. The app will contact this server directly.</source>
<translation>Home Assistant&apos;ı açmak için normalde kullandığınız adresi girin. Uygulama bu sunucuyla doğrudan iletişim kuracaktır.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="229"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="494"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="236"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="525"/>
<source>Cancel</source>
<translation>İptal</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="232"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="239"/>
<source>Next</source>
<translation>Sonraki</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="247"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="254"/>
<source>Create a long-lived access token in your Home Assistant profile and paste it below. Your Home Assistant password is never entered into this app.</source>
<translation>Home Assistant profilinizde uzun ömürlü bir erişim belirteci oluşturup aşağıya yapıştırın. Home Assistant parolanız bu uygulamaya hiçbir zaman girilmez.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="253"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="260"/>
<source>Open Home Assistant profile</source>
<translation>Home Assistant profilini aç</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="266"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="273"/>
<source>Long-lived access token</source>
<translation>Uzun ömürlü erişim belirteci</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="272"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="279"/>
<source>Hide</source>
<translation>Gizle</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="272"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="279"/>
<source>Show</source>
<translation>Göster</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="296"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="303"/>
<source>Back</source>
<translation>Geri</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="299"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="306"/>
<source>Connect</source>
<translation>Bağlan</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="315"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="322"/>
<source>Create charts and choose exactly which Home Assistant entities each chart should display.</source>
<translation>Grafikler oluşturun ve her grafiğin hangi Home Assistant varlıklarını göstereceğini tam olarak seçin.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="329"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="336"/>
<source>Change server or access token</source>
<translation>Sunucuyu veya erişim belirtecini değiştir</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="343"/>
<source>Forget Home Assistant configuration</source>
<translation>Home Assistant yapılandırmasını unut</translation>
</message>
<message numerus="yes">
<location filename="../qml/HomeAssistantSetupDialog.qml" line="363"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="377"/>
<source>%n entity(s)</source>
<translation>
<numerusform>%n varlık</numerusform>
</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="368"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="382"/>
<source>Edit</source>
<translation>Düzenle</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="372"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="386"/>
<source>Delete</source>
<translation>Sil</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="381"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="395"/>
<source>No charts configured yet.</source>
<translation>Henüz yapılandırılmış grafik yok.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="389"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="403"/>
<source>Add chart</source>
<translation>Grafik ekle</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="391"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="405"/>
<source>Done</source>
<translation>Bitti</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="404"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="418"/>
<source>Chart title</source>
<translation>Grafik başlığı</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="412"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="426"/>
<source>Search by name, entity ID, unit or device class…</source>
<translation>Ada, varlık kimliğine, birime veya cihaz sınıfına göre ara…</translation>
</message>
<message numerus="yes">
<location filename="../qml/HomeAssistantSetupDialog.qml" line="421"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="435"/>
<source>%n entity(s) selected</source>
<translation>
<numerusform>%n varlık seçildi</numerusform>
</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="431"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="445"/>
<source>Reload</source>
<translation>Yeniden yükle</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="486"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="517"/>
<source>No matching entities found.</source>
<translation>Eşleşen varlık bulunamadı.</translation>
</message>
<message>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="497"/>
<location filename="../qml/HomeAssistantSetupDialog.qml" line="528"/>
<source>Save chart</source>
<translation>Grafiği kaydet</translation>
</message>
@@ -3290,7 +3349,7 @@ Grafiklerin veri alabilmesi için:
<translation type="vanished">Bilgiler</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="297"/>
<location filename="../qml/InformationsTabPage.qml" line="303"/>
<source>Idle</source>
<translation>Boşta</translation>
</message>
@@ -3303,138 +3362,137 @@ Grafiklerin veri alabilmesi için:
<translation type="vanished">YÜKLENİYOR</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="90"/>
<location filename="../qml/InformationsTabPage.qml" line="93"/>
<source>%1 – %2</source>
<translation>%1 – %2</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="175"/>
<location filename="../qml/InformationsTabPage.qml" line="178"/>
<source>Receiving manufacturer data…</source>
<translation>Üretici verileri alınıyor…</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="177"/>
<location filename="../qml/InformationsTabPage.qml" line="180"/>
<source>Loading manufacturer charts…</source>
<translation>Üretici grafikleri yükleniyor…</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="191"/>
<location filename="../qml/InformationsTabPage.qml" line="194"/>
<source>%1 images</source>
<translation>%1 resim</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="193"/>
<location filename="../qml/InformationsTabPage.qml" line="196"/>
<source>%1 charts</source>
<translation>%1 grafik</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="195"/>
<location filename="../qml/InformationsTabPage.qml" line="198"/>
<source>Loaded %1</source>
<translation>%1 yüklendi</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="196"/>
<location filename="../qml/InformationsTabPage.qml" line="199"/>
<source>No information data received</source>
<translation>Bilgi verisi alınmadı</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="198"/>
<location filename="../qml/InformationsTabPage.qml" line="201"/>
<source>The manufacturer cloud returned invalid data.</source>
<translation>Üretici bulutu geçersiz veri döndürdü.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="208"/>
<location filename="../qml/InformationsTabPage.qml" line="211"/>
<source>Requesting manufacturer data…</source>
<translation>Üretici verileri isteniyor…</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="216"/>
<location filename="../qml/InformationsTabPage.qml" line="219"/>
<source>Information</source>
<translation>Bilgi</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="231"/>
<location filename="../qml/InformationsTabPage.qml" line="234"/>
<source>Manufacturer cloud</source>
<translation>Üretici bulutu</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="305"/>
<location filename="../qml/InformationsTabPage.qml" line="311"/>
<source>The manufacturer does not even think you are worth the raw data that you could inspect and zoom. Instead, it sends these ugly low-resolution pictures that you cannot meaningfully interact with—let alone control the displayed time range.</source>
<translation>Üretici, inceleyip yakınlaştırabileceğiniz ham verileri size vermeye değer bile görmüyor. Bunun yerine, anlamlı biçimde etkileşim kuramadığınız bu çirkin, düşük çözünürlüklü görüntüleri gönderiyor; gösterilen zaman aralığını kontrol etmek ise zaten mümkün değil.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="352"/>
<location filename="../qml/InformationsTabPage.qml" line="362"/>
<source>Own your consumption history</source>
<translation>Tüketim geçmişiniz size ait olsun</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="357"/>
<location filename="../qml/InformationsTabPage.qml" line="368"/>
<source>Connect the device to your own Home Assistant installation for fast, dependable history that remains under your control. You decide how long data is retained and which measurements are recorded.</source>
<translation>Hızlı, güvenilir ve kontrolünüz altında kalan bir geçmiş için cihazı kendi Home Assistant kurulumunuza bağlayın. Verilerin ne kadar süre saklanacağına ve hangi ölçümlerin kaydedileceğine siz karar verirsiniz.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="372"/>
<location filename="../qml/InformationsTabPage.qml" line="383"/>
<source>Connected to Home Assistant</source>
<translation>Home Assistant&apos;a bağlı</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="373"/>
<location filename="../qml/InformationsTabPage.qml" line="384"/>
<source>Home Assistant is not configured</source>
<translation>Home Assistant yapılandırılmadı</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="387"/>
<location filename="../qml/InformationsTabPage.qml" line="398"/>
<source>Configure</source>
<translation>Yapılandır</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="387"/>
<location filename="../qml/InformationsTabPage.qml" line="521"/>
<location filename="../qml/InformationsTabPage.qml" line="398"/>
<location filename="../qml/InformationsTabPage.qml" line="536"/>
<source>Set up</source>
<translation>Kur</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="451"/>
<location filename="../qml/InformationsTabPage.qml" line="462"/>
<source>Refresh</source>
<translation>Yenile</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="503"/>
<location filename="../qml/InformationsTabPage.qml" line="517"/>
<source>Connect Home Assistant to display history</source>
<translation>Geçmişi görüntülemek için Home Assistant&apos;ı bağlayın</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="504"/>
<location filename="../qml/InformationsTabPage.qml" line="518"/>
<source>Create your first history chart</source>
<translation>İlk geçmiş grafiğinizi oluşturun</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="512"/>
<location filename="../qml/InformationsTabPage.qml" line="527"/>
<source>The setup wizard connects to your server and lets you select the entities to display.</source>
<translation>Kurulum sihirbazı sunucunuza bağlanır ve görüntülenecek varlıkları seçmenizi sağlar.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="513"/>
<location filename="../qml/InformationsTabPage.qml" line="528"/>
<source>Open the configuration and add a chart with one or more Home Assistant entities.</source>
<translation>Yapılandırmayı açın ve bir veya daha fazla Home Assistant varlığı içeren bir grafik ekleyin.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="521"/>
<location filename="../qml/InformationsTabPage.qml" line="536"/>
<source>Add chart</source>
<translation>Grafik ekle</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="530"/>
<source>Forget Home Assistant configuration</source>
<translation>Home Assistant yapılandırmasını unut</translation>
<translation type="vanished">Home Assistant yapılandırmasını unut</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="543"/>
<location filename="../qml/InformationsTabPage.qml" line="553"/>
<source>Forget Home Assistant?</source>
<translation>Home Assistant unutulsun mu?</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="550"/>
<location filename="../qml/InformationsTabPage.qml" line="563"/>
<source>This removes the server address, access token and all chart definitions stored in this app.</source>
<translation>Bu işlem sunucu adresini, erişim belirtecini ve bu uygulamada saklanan tüm grafik tanımlarını kaldırır.</translation>
</message>
@@ -3443,7 +3501,7 @@ Grafiklerin veri alabilmesi için:
<translation type="vanished">Kısıtlı · güvenilmez · yavaş</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="254"/>
<location filename="../qml/InformationsTabPage.qml" line="257"/>
<source>Your own cloud</source>
<translation>Kendi bulutunuz</translation>
</message>
@@ -3452,22 +3510,22 @@ Grafiklerin veri alabilmesi için:
<translation type="vanished">Geçmiş · bakımlı · hızlı</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="238"/>
<location filename="../qml/InformationsTabPage.qml" line="241"/>
<source>Lacks features · unreliable · slow</source>
<translation>Eksik özellikler · güvenilmez · yavaş</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="261"/>
<location filename="../qml/InformationsTabPage.qml" line="264"/>
<source>Historical data · properly maintained · fast</source>
<translation>Geçmiş veriler · iyi bakımlı · hızlı</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="288"/>
<location filename="../qml/InformationsTabPage.qml" line="294"/>
<source>The manufacturer cloud provides basic charts, but can be slow, unavailable or limited to the data selected by the manufacturer.</source>
<translation>Üretici bulutu temel grafikler sağlar, ancak yavaş veya erişilemez olabilir ya da üreticinin seçtiği verilerle sınırlı kalabilir.</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="339"/>
<location filename="../qml/InformationsTabPage.qml" line="345"/>
<source>Download information</source>
<translation>Bilgileri indir</translation>
</message>
@@ -3488,37 +3546,37 @@ Grafiklerin veri alabilmesi için:
<translation type="vanished">Home Assistant bağlantısını kur</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="395"/>
<location filename="../qml/InformationsTabPage.qml" line="406"/>
<source>Historical data</source>
<translation>Geçmiş veriler</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="405"/>
<location filename="../qml/InformationsTabPage.qml" line="416"/>
<source>Day</source>
<translation>Gün</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="406"/>
<location filename="../qml/InformationsTabPage.qml" line="417"/>
<source>Week</source>
<translation>Hafta</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="407"/>
<location filename="../qml/InformationsTabPage.qml" line="418"/>
<source>Month</source>
<translation>Ay</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="408"/>
<location filename="../qml/InformationsTabPage.qml" line="419"/>
<source>Year</source>
<translation>Yıl</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="427"/>
<location filename="../qml/InformationsTabPage.qml" line="438"/>
<source>Previous</source>
<translation>Önceki</translation>
</message>
<message>
<location filename="../qml/InformationsTabPage.qml" line="442"/>
<location filename="../qml/InformationsTabPage.qml" line="453"/>
<source>Next</source>
<translation>Sonraki</translation>
</message>
@@ -5102,6 +5160,74 @@ Grafiklerin veri alabilmesi için:
<translation>Lisanslar</translation>
</message>
</context>
<context>
<name>SolalawebSetupDialog</name>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="15"/>
<source>Set up Solalaweb</source>
<translation>Solalaweb'i ayarla</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="48"/>
<source>Solalaweb now uses Authentik. Create a dedicated app password instead of entering your normal account password. Choose a lifetime long enough for this app, then copy the password itself—not its name.</source>
<translation>Solalaweb artık Authentik kullanıyor. Normal hesap parolanızı girmek yerine özel bir uygulama parolası oluşturun. Bu uygulama için yeterince uzun bir geçerlilik süresi seçin, ardından adını değil parolanın kendisini kopyalayın.</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="54"/>
<source>Create an Authentik app password</source>
<translation>Authentik uygulama parolası oluştur</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="61"/>
<source>Your username is usually your email address. The user-details page shows the exact username expected by Authentik.</source>
<translation>Kullanıcı adınız genellikle e-posta adresinizdir. Kullanıcı ayrıntıları sayfası, Authentik'in beklediği tam kullanıcı adını gösterir.</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="68"/>
<source>Open Authentik user details</source>
<translation>Authentik kullanıcı ayrıntılarını aç</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="74"/>
<source>Username</source>
<translation>Kullanıcı adı</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="83"/>
<source>Username or email address</source>
<translation>Kullanıcı adı veya e-posta adresi</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="89"/>
<source>App password</source>
<translation>Uygulama parolası</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="101"/>
<source>Authentik app password</source>
<translation>Authentik uygulama parolası</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="109"/>
<source>Hide</source>
<translation>Gizle</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="109"/>
<source>Show</source>
<translation>Göster</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="133"/>
<source>Cancel</source>
<translation>İptal</translation>
</message>
<message>
<location filename="../qml/SolalawebSetupDialog.qml" line="145"/>
<source>Verify and save</source>
<translation>Doğrula ve kaydet</translation>
</message>
</context>
<context>
<name>StartStopButton</name>
<message>
+43 -46
View File
@@ -1,13 +1,18 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Dialogs
import QtQuick.Layouts
import EVChargerApp
NavigationPage {
id: page
title: qsTr("App Settings")
function backPressed() {
if (solalawebSetupDialog.opened) {
solalawebSetupDialog.close()
return true
}
return false
}
@@ -47,55 +52,47 @@ NavigationPage {
}
}
WhiteBox {
Layout.fillWidth: true
SettingsCard {
SettingsSectionLabel { text: qsTr("Solalaweb") }
GridLayout {
anchors.fill: parent
columns: 2
Text {
Layout.fillWidth: true
Layout.minimumWidth: 0
text: qsTr("Set up Authentik access to make the private Solalaweb connection available for saved devices.")
wrapMode: Text.Wrap
}
Text {
text: qsTr("solalaweb key:")
font.bold: true
wrapMode: Text.Wrap
}
Label {
Layout.fillWidth: true
Layout.minimumWidth: 0
text: theSettings.solalawebCredentialsVerified
? qsTr("Authentication verified for %1").arg(theSettings.solalawebUsername)
: qsTr("Authentication has not been verified")
color: theSettings.solalawebCredentialsVerified
? AppTheme.successColor : palette.placeholderText
wrapMode: Text.Wrap
}
Button {
text: theSettings.solalawebKey == "" ? qsTr("Select...") : qsTr("Replace...")
onClicked: keyFileDialog.open()
Button {
Layout.fillWidth: true
text: theSettings.solalawebCredentialsVerified
? qsTr("Change Solalaweb authentication")
: qsTr("Set up Solalaweb")
onClicked: solalawebSetupDialog.open()
}
FileDialog {
id: keyFileDialog
fileMode: FileDialog.OpenFile
onAccepted: theSettings.loadSolalawebKey(selectedFile)
}
}
Text {
text: qsTr("solalaweb cert:")
font.bold: true
wrapMode: Text.Wrap
}
Button {
text: theSettings.solalawebCert == "" ? qsTr("Select...") : qsTr("Replace...")
onClicked: certFileDialog.open()
FileDialog {
id: certFileDialog
fileMode: FileDialog.OpenFile
onAccepted: theSettings.loadSolalawebCert(selectedFile)
}
}
CheckDelegate {
Layout.columnSpan: 2
Layout.fillWidth: true
text: qsTr("Show solalaweb:")
checked: theSettings.showSolalaweb
onClicked: theSettings.showSolalaweb = checked
}
WhiteCheckDelegate {
Layout.fillWidth: true
enabled: theSettings.solalawebCredentialsVerified
text: qsTr("Show Solalaweb")
checked: theSettings.solalawebCredentialsVerified
&& theSettings.showSolalaweb
onClicked: theSettings.showSolalaweb = checked
}
}
SolalawebSetupDialog {
id: solalawebSetupDialog
settings: theSettings
}
}
+1
View File
@@ -8,4 +8,5 @@ QtObject {
readonly property color cardColor: "white"
readonly property color cardPressedColor: "#f1f1f1"
readonly property color sectionLabelColor: "#5f6368"
readonly property color successColor: "#2e7d32"
}
+2 -1
View File
@@ -242,7 +242,8 @@ BaseNavigationPage {
Layout.fillWidth: true
text: qsTr("Solala")
onClicked: deviceSelected("wss://solalaweb.com/" + delegate.serial, delegate.password)
visible: theSettings.showSolalaweb
visible: theSettings.solalawebCredentialsVerified
&& theSettings.showSolalaweb
}
}
}
+16
View File
@@ -12,6 +12,11 @@ Loader {
property alias password: theDeviceConnection.password
function backPressed() {
if (solalawebSetupDialog.opened) {
solalawebSetupDialog.close()
closeRequested()
return true
}
if (connectionDisturbed.visible) {
connectionDisturbed.visible = false
closeRequested()
@@ -50,6 +55,10 @@ Loader {
passwordDialog.open();
}
onAuthImpossible: authImpossibleDialog.open()
onSolalawebAuthenticationRequired: function(message) {
connectionDisturbed.visible = false
solalawebSetupDialog.open()
}
}
sourceComponent: Component {
@@ -141,6 +150,13 @@ Loader {
}
}
SolalawebSetupDialog {
id: solalawebSetupDialog
settings: theSettings
onAuthenticated: theDeviceConnection.start()
onCancelled: loader.closeRequested()
}
Item {
id: connectionDisturbed
+48 -22
View File
@@ -14,6 +14,8 @@ CenteredDialog {
property int selectionRevision: 0
property bool tokenVisible: false
signal forgetRequested()
title: wizardStep === 3 ? qsTr("Edit chart") : qsTr("Connect Home Assistant")
modal: true
focus: true
@@ -335,6 +337,13 @@ CenteredDialog {
onClicked: dialog.wizardStep = 0
}
Button {
Layout.fillWidth: true
visible: dialog.client.configured
text: qsTr("Forget Home Assistant configuration")
onClicked: dialog.forgetRequested()
}
ScrollView {
Layout.fillWidth: true
Layout.fillHeight: true
@@ -446,7 +455,7 @@ CenteredDialog {
spacing: 1
model: dialog.client.entitiesModel
delegate: CheckDelegate {
delegate: WhiteItemDelegate {
id: entityDelegate
required property string entityId
required property string name
@@ -454,30 +463,47 @@ CenteredDialog {
required property string deviceClass
required property string currentValue
width: ListView.view.width
checked: dialog.selected(entityId)
onClicked: dialog.setSelected(entityId, checked)
onClicked: dialog.setSelected(entityId,
!dialog.selected(entityId))
contentItem: Column {
spacing: 1
Label {
width: parent.width
text: entityDelegate.name
font.bold: true
elide: Text.ElideRight
contentItem: RowLayout {
spacing: 8
CheckBox {
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
checked: dialog.selected(entityDelegate.entityId)
Accessible.name: entityDelegate.name
onClicked: dialog.setSelected(entityDelegate.entityId,
checked)
}
Label {
width: parent.width
text: {
let details = entityDelegate.entityId
if (entityDelegate.currentValue.length > 0)
details += " · " + entityDelegate.currentValue
if (entityDelegate.unit.length > 0)
details += " " + entityDelegate.unit
return details
ColumnLayout {
Layout.fillWidth: true
Layout.minimumWidth: 0
spacing: 1
Label {
Layout.fillWidth: true
Layout.minimumWidth: 0
text: entityDelegate.name
font.bold: true
elide: Text.ElideRight
}
Label {
Layout.fillWidth: true
Layout.minimumWidth: 0
text: {
let details = entityDelegate.entityId
if (entityDelegate.currentValue.length > 0)
details += " · " + entityDelegate.currentValue
if (entityDelegate.unit.length > 0)
details += " " + entityDelegate.unit
return details
}
color: palette.placeholderText
font.pixelSize: 11
elide: Text.ElideMiddle
}
color: palette.placeholderText
font.pixelSize: 11
elide: Text.ElideMiddle
}
}
}
+5 -7
View File
@@ -539,25 +539,23 @@ ScrollableTabPage {
}
}
Button {
Layout.fillWidth: true
visible: homeAssistant.configured
text: qsTr("Forget Home Assistant configuration")
onClicked: forgetHomeAssistantDialog.open()
}
}
}
HomeAssistantSetupDialog {
id: homeAssistantDialog
client: homeAssistant
onForgetRequested: forgetHomeAssistantDialog.open()
}
CenteredDialog {
id: forgetHomeAssistantDialog
title: qsTr("Forget Home Assistant?")
standardButtons: Dialog.Cancel | Dialog.Ok
onAccepted: homeAssistant.clearConfiguration()
onAccepted: {
homeAssistant.clearConfiguration()
homeAssistantDialog.close()
}
contentItem: ColumnLayout {
Text {
Layout.fillWidth: true
+155
View File
@@ -0,0 +1,155 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import EVChargerApp
CenteredDialog {
id: dialog
required property AppSettings settings
property bool passwordVisible: false
signal authenticated()
signal cancelled()
title: qsTr("Set up Solalaweb")
modal: true
focus: true
width: Math.min(500, Overlay.overlay.width - 20)
height: Math.min(contentLayout.implicitHeight + topPadding + bottomPadding,
Overlay.overlay.height - 20)
closePolicy: Popup.NoAutoClose
onOpened: {
usernameInput.text = settings.solalawebUsername
passwordInput.clear()
usernameInput.forceActiveFocus()
}
Connections {
target: dialog.settings
function onSolalawebVerificationFinished(success) {
if (!success)
return
dialog.authenticated()
dialog.close()
}
}
contentItem: ColumnLayout {
id: contentLayout
width: dialog.availableWidth
spacing: 10
Text {
Layout.fillWidth: true
Layout.minimumWidth: 0
text: qsTr("Solalaweb now uses Authentik. Create a dedicated app password instead of entering your normal account password. Choose a lifetime long enough for this app, then copy the password itself—not its name.")
wrapMode: Text.Wrap
}
Button {
Layout.fillWidth: true
text: qsTr("Create an Authentik app password")
onClicked: Qt.openUrlExternally("https://auth.go-e.com/if/user/#/settings;%7B%22page%22:%22page-tokens%22%7D")
}
Text {
Layout.fillWidth: true
Layout.minimumWidth: 0
text: qsTr("Your username is usually your email address. The user-details page shows the exact username expected by Authentik.")
wrapMode: Text.Wrap
color: AppTheme.sectionLabelColor
}
Button {
Layout.fillWidth: true
text: qsTr("Open Authentik user details")
onClicked: Qt.openUrlExternally("https://auth.go-e.com/if/user/#/settings;%7B%22ak-user-settings-mfa-page%22%3A0%7D")
}
SettingsLabel {
Layout.fillWidth: true
text: qsTr("Username")
}
TextField {
id: usernameInput
Layout.fillWidth: true
Layout.minimumWidth: 0
enabled: !dialog.settings.solalawebVerificationInProgress
inputMethodHints: Qt.ImhEmailCharactersOnly | Qt.ImhNoAutoUppercase
placeholderText: qsTr("Username or email address")
selectByMouse: true
}
SettingsLabel {
Layout.fillWidth: true
text: qsTr("App password")
}
RowLayout {
Layout.fillWidth: true
Layout.minimumWidth: 0
TextField {
id: passwordInput
Layout.fillWidth: true
Layout.minimumWidth: 0
enabled: !dialog.settings.solalawebVerificationInProgress
placeholderText: qsTr("Authentik app password")
echoMode: dialog.passwordVisible ? TextInput.Normal
: TextInput.Password
selectByMouse: true
onAccepted: verifyButton.clicked()
}
ToolButton {
text: dialog.passwordVisible ? qsTr("Hide") : qsTr("Show")
onClicked: dialog.passwordVisible = !dialog.passwordVisible
}
}
Label {
Layout.fillWidth: true
Layout.minimumWidth: 0
visible: dialog.settings.solalawebVerificationError.length > 0
text: dialog.settings.solalawebVerificationError
color: palette.brightText
wrapMode: Text.Wrap
}
BusyIndicator {
Layout.alignment: Qt.AlignHCenter
visible: dialog.settings.solalawebVerificationInProgress
running: visible
}
RowLayout {
Layout.fillWidth: true
Button {
text: qsTr("Cancel")
enabled: !dialog.settings.solalawebVerificationInProgress
onClicked: {
dialog.cancelled()
dialog.close()
}
}
Item { Layout.fillWidth: true }
Button {
id: verifyButton
text: qsTr("Verify and save")
enabled: !dialog.settings.solalawebVerificationInProgress
&& usernameInput.text.trim().length > 0
&& passwordInput.text.length > 0
highlighted: true
onClicked: dialog.settings.verifySolalawebCredentials(
usernameInput.text, passwordInput.text)
}
}
}
}
+1
View File
@@ -90,6 +90,7 @@ EVChargerApp 1.0 SetPriceLimitPage.qml
EVChargerApp 1.0 SettingsTabPage.qml
EVChargerApp 1.0 SetValueHelper.qml
EVChargerApp 1.0 SimpleNavigationItem.qml
EVChargerApp 1.0 SolalawebSetupDialog.qml
EVChargerApp 1.0 StartStopButton.qml
EVChargerApp 1.0 SwitchLanguagePage.qml
EVChargerApp 1.0 TimeComponentLabel.qml