From 3257413b74655f6a7419cfc196be90d68b8d2654 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Thu, 7 Aug 2025 14:38:10 +0200 Subject: [PATCH 01/82] aqi: Add Qt6 support --- aqi/airqualityindex.cpp | 61 +++++++++++++++++++++++------------- aqi/airqualityindex.h | 6 ++-- aqi/aqi.pro | 6 ++-- aqi/integrationpluginaqi.cpp | 17 +++++----- aqi/integrationpluginaqi.h | 12 ++++--- 5 files changed, 63 insertions(+), 39 deletions(-) diff --git a/aqi/airqualityindex.cpp b/aqi/airqualityindex.cpp index c7837e92..42fd2b61 100644 --- a/aqi/airqualityindex.cpp +++ b/aqi/airqualityindex.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -54,8 +54,9 @@ QUuid AirQualityIndex::searchByName(const QString &name) { if (m_apiKey.isEmpty()) { qCWarning(dcAirQualityIndex()) << "API key is not set, not sending request"; - return ""; + return QUuid(); } + QUuid requestId = QUuid::createUuid();; QUrl url; url.setUrl(m_baseUrl); @@ -75,13 +76,14 @@ QUuid AirQualityIndex::searchByName(const QString &name) // Check HTTP status code if (status != 200 || reply->error() != QNetworkReply::NoError) { - if (status == 400) { + if (status == 400) qCWarning(dcAirQualityIndex()) << "Request error due to exceeded request quota"; - } - requestExecuted(requestId, false); + + emit requestExecuted(requestId, false); qCWarning(dcAirQualityIndex()) << "Request error:" << status << reply->errorString(); return; } + QByteArray rawData = reply->readAll(); qCDebug(dcAirQualityIndex()) << "Search response" << rawData; @@ -95,7 +97,7 @@ QUuid AirQualityIndex::searchByName(const QString &name) QList stations; QVariantList stationList = doc.toVariant().toMap().value("data").toList(); - foreach (QVariant stationVariant, stationList) { + foreach (const QVariant &stationVariant, stationList) { Station station; station.aqi = stationVariant.toMap().value("aqi").toInt(); station.idx = stationVariant.toMap().value("idx").toInt(); @@ -107,10 +109,11 @@ QUuid AirQualityIndex::searchByName(const QString &name) station.location.longitude = stationVariant.toMap().value("city").toMap().value("geo").toList().last().toDouble(); stations.append(station); } + if (!stations.isEmpty()) emit stationsReceived(requestId, stations); - requestExecuted(requestId, true); + emit requestExecuted(requestId, true); }); return requestId; } @@ -119,18 +122,23 @@ QUuid AirQualityIndex::getDataByIp() { if (m_apiKey.isEmpty()) { qCWarning(dcAirQualityIndex()) << "API key is not set, not sending request"; - return ""; + return QUuid(); } + QUuid requestId = QUuid::createUuid(); + QUrl url; url.setUrl(m_baseUrl); url.setPath("/feed/here/"); + QUrlQuery query; query.addQueryItem("token", m_apiKey); url.setQuery(query); + QNetworkRequest request; request.setUrl(url); request.setRawHeader("User-Agent", "nymea"); + qCDebug(dcAirQualityIndex()) << "Get data by IP request" << url.toString(); QNetworkReply *reply = m_networkAccessManager->get(request); connect(reply, &QNetworkReply::finished, this, [requestId, reply, this] { @@ -139,17 +147,20 @@ QUuid AirQualityIndex::getDataByIp() // Check HTTP status code if (status != 200 || reply->error() != QNetworkReply::NoError) { - if (status == 400) { + if (status == 400) qCWarning(dcAirQualityIndex()) << "Request error due to exceeded request quota"; - } - requestExecuted(requestId, false); + + emit requestExecuted(requestId, false); qCWarning(dcAirQualityIndex()) << "Request error:" << status << reply->errorString(); return; } + if (!parseData(requestId, reply->readAll())) - requestExecuted(requestId, false); - requestExecuted(requestId, true); + emit requestExecuted(requestId, false); + + emit requestExecuted(requestId, true); }); + return requestId; } @@ -157,19 +168,23 @@ QUuid AirQualityIndex::getDataByGeolocation(double lat, double lng) { if (m_apiKey.isEmpty()) { qCWarning(dcAirQualityIndex()) << "API key is not set, not sending request"; - return ""; + return QUuid(); } QUuid requestId = QUuid::createUuid(); + QUrl url; url.setUrl(m_baseUrl); url.setPath(QString("/feed/geo:%1;%2/").arg(lat).arg(lng)); + QUrlQuery query; query.addQueryItem("token", m_apiKey); url.setQuery(query); + QNetworkRequest request; request.setUrl(url); request.setRawHeader("User-Agent", "nymea"); + qCDebug(dcAirQualityIndex()) << "Get data by geo location request" << url.toString(); QNetworkReply *reply = m_networkAccessManager->get(request); connect(reply, &QNetworkReply::finished, this, [requestId, reply, this] { @@ -178,21 +193,22 @@ QUuid AirQualityIndex::getDataByGeolocation(double lat, double lng) // Check HTTP status code if (status != 200 || reply->error() != QNetworkReply::NoError) { - if (status == 400) { + if (status == 400) qCWarning(dcAirQualityIndex()) << "Request error due to exceeded request quota"; - } - requestExecuted(requestId, false); + + emit requestExecuted(requestId, false); qCWarning(dcAirQualityIndex()) << "Request error:" << status << reply->errorString(); return; } if (!parseData(requestId, reply->readAll())) - requestExecuted(requestId, false); - requestExecuted(requestId, true); + emit requestExecuted(requestId, false); + + emit requestExecuted(requestId, true); }); + return requestId; } - bool AirQualityIndex::parseData(QUuid requestId, const QByteArray &data) { qCDebug(dcAirQualityIndex()) << "Parsing data" << data; @@ -211,8 +227,8 @@ bool AirQualityIndex::parseData(QUuid requestId, const QByteArray &data) } Station station; - station.aqi = doc.toVariant().toMap().value("data").toMap().value("aqi").toInt(); - station.idx = doc.toVariant().toMap().value("data").toMap().value("idx").toInt(); + station.aqi = doc.toVariant().toMap().value("data").toMap().value("aqi").toInt(); + station.idx = doc.toVariant().toMap().value("data").toMap().value("idx").toInt(); QVariantMap city = doc.toVariant().toMap().value("data").toMap().value("city").toMap(); if (city["geo"].toList().length() == 2) { @@ -241,6 +257,7 @@ bool AirQualityIndex::parseData(QUuid requestId, const QByteArray &data) aqiData.co = iaqi["co"].toMap().value("v").toDouble(); aqiData.temperature = iaqi["t"].toMap().value("v").toDouble(); aqiData.windSpeed = iaqi["w"].toMap().value("v").toDouble(); + emit dataReceived(requestId, aqiData); return true; } diff --git a/aqi/airqualityindex.h b/aqi/airqualityindex.h index 79cd1393..e84dabc9 100644 --- a/aqi/airqualityindex.h +++ b/aqi/airqualityindex.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,12 +31,13 @@ #ifndef AIRQUALITYINDEX_H #define AIRQUALITYINDEX_H -#include "network/networkaccessmanager.h" #include #include #include +#include + class AirQualityIndex : public QObject { Q_OBJECT @@ -70,6 +71,7 @@ public: }; explicit AirQualityIndex(NetworkAccessManager *networkAccessManager, const QString &apiKey, QObject *parent = nullptr); + void setApiKey(const QString &apiKey); QUuid searchByName(const QString &name); QUuid getDataByIp(); diff --git a/aqi/aqi.pro b/aqi/aqi.pro index 0c7b9893..a95cf11e 100644 --- a/aqi/aqi.pro +++ b/aqi/aqi.pro @@ -1,12 +1,12 @@ include(../plugins.pri) -QT+= network +QT *= network SOURCES += \ airqualityindex.cpp \ - integrationpluginaqi.cpp \ + integrationpluginaqi.cpp HEADERS += \ airqualityindex.h \ - integrationpluginaqi.h \ + integrationpluginaqi.h diff --git a/aqi/integrationpluginaqi.cpp b/aqi/integrationpluginaqi.cpp index 1d5261b5..46cfacf1 100644 --- a/aqi/integrationpluginaqi.cpp +++ b/aqi/integrationpluginaqi.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -30,7 +30,8 @@ #include "integrationpluginaqi.h" #include "plugininfo.h" -#include "nymeasettings.h" + +#include #include @@ -122,7 +123,8 @@ void IntegrationPluginAqi::discoverThings(ThingDiscoveryInfo *info) if(!createAqiConnection()) { return info->finish(Thing::ThingErrorHardwareNotAvailable, QT_TR_NOOP("API key is not available.")); } - connect(info, &ThingDiscoveryInfo::aborted, [this] { + + connect(info, &ThingDiscoveryInfo::aborted, this, [this] { if (myThings().filterByThingClassId(airQualityIndexThingClassId).isEmpty()) { m_aqiConnection->deleteLater(); m_aqiConnection = nullptr; @@ -133,7 +135,9 @@ void IntegrationPluginAqi::discoverThings(ThingDiscoveryInfo *info) } QUuid requestId = m_aqiConnection->getDataByIp(); m_asyncDiscovery.insert(requestId, info); - connect(info, &ThingDiscoveryInfo::aborted, [=] {m_asyncDiscovery.remove(requestId);}); + connect(info, &ThingDiscoveryInfo::aborted, this, [this, requestId] { + m_asyncDiscovery.remove(requestId); + }); } void IntegrationPluginAqi::setupThing(ThingSetupInfo *info) @@ -148,7 +152,7 @@ void IntegrationPluginAqi::setupThing(ThingSetupInfo *info) QUuid requestId = m_aqiConnection->getDataByGeolocation(latitude, longitude); m_asyncSetups.insert(requestId, info); - connect(info, &ThingSetupInfo::aborted, [requestId, this] { + connect(info, &ThingSetupInfo::aborted, this, [requestId, this] { m_asyncSetups.remove(requestId); if (myThings().filterByThingClassId(airQualityIndexThingClassId).isEmpty()) { m_aqiConnection->deleteLater(); @@ -219,6 +223,7 @@ double IntegrationPluginAqi::convertFromAQI(int aqi, const QListsetStateValue(airQualityIndexConnectedStateTypeId, true); thing->setStateValue(airQualityIndexHumidityStateTypeId, data.humidity); thing->setStateValue(airQualityIndexTemperatureStateTypeId, data.temperature); @@ -284,7 +288,6 @@ void IntegrationPluginAqi::onAirQualityStationsReceived(QUuid requestId, QListfinish(Thing::ThingErrorNoError); } - if (m_asyncRequests.contains(requestId)) { Thing * thing = myThings().findById(m_asyncRequests.value(requestId)); if (!thing) { diff --git a/aqi/integrationpluginaqi.h b/aqi/integrationpluginaqi.h index b3c115e0..ee515db2 100644 --- a/aqi/integrationpluginaqi.h +++ b/aqi/integrationpluginaqi.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,11 +31,11 @@ #ifndef INTEGRATIONPLUGINAQI_H #define INTEGRATIONPLUGINAQI_H -#include "plugintimer.h" -#include "integrations/integrationplugin.h" -#include "network/networkaccessmanager.h" -#include "airqualityindex.h" +#include +#include +#include +#include "airqualityindex.h" #include "extern-plugininfo.h" #include @@ -64,6 +64,7 @@ private: QHash m_asyncDiscovery; QHash m_asyncSetups; QHash m_asyncRequests; + QString getApiKey(); bool createAqiConnection(); @@ -74,6 +75,7 @@ private slots: void onRequestExecuted(QUuid requestId, bool success); void onAirQualityDataReceived(QUuid requestId, AirQualityIndex::AirQualityData data); void onAirQualityStationsReceived(QUuid requestId, QList stations); + }; #endif // INTEGRATIONPLUGINAQI_H From 96b55b81774075035195ace74588fda7532e67f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Thu, 7 Aug 2025 14:51:32 +0200 Subject: [PATCH 02/82] avahimonitor: Add Qt6 support --- avahimonitor/avahimonitor.pro | 4 +--- avahimonitor/integrationpluginavahimonitor.cpp | 8 ++++---- avahimonitor/integrationpluginavahimonitor.h | 11 +++++++---- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/avahimonitor/avahimonitor.pro b/avahimonitor/avahimonitor.pro index 5ef34b6a..5da0aad2 100644 --- a/avahimonitor/avahimonitor.pro +++ b/avahimonitor/avahimonitor.pro @@ -1,8 +1,6 @@ include(../plugins.pri) -QT += network - -TARGET = $$qtLibraryTarget(nymea_integrationpluginavahimonitor) +QT *= network SOURCES += \ integrationpluginavahimonitor.cpp diff --git a/avahimonitor/integrationpluginavahimonitor.cpp b/avahimonitor/integrationpluginavahimonitor.cpp index ee61eec0..3a5fdf1c 100644 --- a/avahimonitor/integrationpluginavahimonitor.cpp +++ b/avahimonitor/integrationpluginavahimonitor.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -30,10 +30,10 @@ #include "integrationpluginavahimonitor.h" -#include "integrations/thing.h" +#include +#include + #include "plugininfo.h" -#include "platform/platformzeroconfcontroller.h" -#include "network/zeroconf/zeroconfservicebrowser.h" #include #include diff --git a/avahimonitor/integrationpluginavahimonitor.h b/avahimonitor/integrationpluginavahimonitor.h index 90680973..e46aa04e 100644 --- a/avahimonitor/integrationpluginavahimonitor.h +++ b/avahimonitor/integrationpluginavahimonitor.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,12 +31,14 @@ #ifndef INTEGRATIONPLUGINAVAHIMONITOR_H #define INTEGRATIONPLUGINAVAHIMONITOR_H -#include "integrations/integrationplugin.h" -#include "network/zeroconf/zeroconfservicebrowser.h" -#include "network/zeroconf/zeroconfserviceentry.h" +#include +#include +#include #include +#include "extern-plugininfo.h" + class IntegrationPluginAvahiMonitor : public IntegrationPlugin { Q_OBJECT @@ -56,6 +58,7 @@ private slots: private: ZeroConfServiceBrowser *m_serviceBrowser = nullptr; + }; #endif // INTEGRATIONPLUGINAVAHIMONITOR_H From 68d8cf1c40b60a60371d24b3ce4ec7fb94713ff0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Thu, 7 Aug 2025 14:54:57 +0200 Subject: [PATCH 03/82] awattar: Add Qt6 support --- awattar/awattar.pro | 4 +--- awattar/integrationpluginawattar.cpp | 14 +++++++------- awattar/integrationpluginawattar.h | 6 +++--- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/awattar/awattar.pro b/awattar/awattar.pro index 567b07c8..e8006804 100644 --- a/awattar/awattar.pro +++ b/awattar/awattar.pro @@ -1,8 +1,6 @@ include(../plugins.pri) -QT += network - -TARGET = $$qtLibraryTarget(nymea_integrationpluginawattar) +QT *= network SOURCES += \ integrationpluginawattar.cpp diff --git a/awattar/integrationpluginawattar.cpp b/awattar/integrationpluginawattar.cpp index da2de913..d0ccd975 100644 --- a/awattar/integrationpluginawattar.cpp +++ b/awattar/integrationpluginawattar.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -29,10 +29,11 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "integrationpluginawattar.h" -#include "integrations/thing.h" #include "plugininfo.h" -#include "hardwaremanager.h" -#include "network/networkaccessmanager.h" + +#include +#include +#include #include #include @@ -73,7 +74,6 @@ void IntegrationPluginAwattar::setupThing(ThingSetupInfo *info) { qCDebug(dcAwattar) << "Setup thing" << info->thing()->name() << info->thing()->params(); - if (!m_pluginTimer) { m_pluginTimer = hardwareManager()->pluginTimerManager()->registerTimer(60 * 60); connect(m_pluginTimer, &PluginTimer::timeout, this, &IntegrationPluginAwattar::onPluginTimer); @@ -190,7 +190,7 @@ void IntegrationPluginAwattar::processPriceData(Thing *thing, const QVariantMap minPrice = price; thing->setStateValue(m_currentMarketPriceStateTypeIds.value(thing->thingClassId()), currentPrice / 10.0); - thing->setStateValue(m_validUntilStateTypeIds.value(thing->thingClassId()), endTime.toLocalTime().toTime_t()); + thing->setStateValue(m_validUntilStateTypeIds.value(thing->thingClassId()), endTime.toLocalTime().toSecsSinceEpoch()); } } @@ -210,7 +210,7 @@ void IntegrationPluginAwattar::processPriceData(Thing *thing, const QVariantMap thing->setStateValue(m_averageDeviationStateTypeIds.value(thing->thingClassId()), deviation); qCDebug(dcAwattar()) << "AVG:" << averagePrice << "Min:" << minPrice << "Max:" << maxPrice << "Curr:" << currentPrice; - qSort(prices.begin(), prices.end()); + std::sort(prices.begin(), prices.end()); int rank = prices.indexOf(currentPrice); if (rank < 0) { rank = 100; diff --git a/awattar/integrationpluginawattar.h b/awattar/integrationpluginawattar.h index bda88b48..78bb5f19 100644 --- a/awattar/integrationpluginawattar.h +++ b/awattar/integrationpluginawattar.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,8 +31,8 @@ #ifndef INTEGRATIONPLUGINAWATTAR_H #define INTEGRATIONPLUGINAWATTAR_H -#include "integrations/integrationplugin.h" -#include "plugintimer.h" +#include +#include #include #include From 259e0c7d1d4f803ff897a8fe14f68ab18720ae2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Thu, 7 Aug 2025 15:08:47 +0200 Subject: [PATCH 04/82] bluos: Add Qt6 support --- bluos/bluos.cpp | 48 ++++++++++++++-------------- bluos/bluos.h | 55 ++++++++++++++++---------------- bluos/bluos.pro | 2 +- bluos/integrationpluginbluos.cpp | 36 ++++++++++----------- bluos/integrationpluginbluos.h | 11 ++++--- 5 files changed, 77 insertions(+), 75 deletions(-) diff --git a/bluos/bluos.cpp b/bluos/bluos.cpp index eea5df2d..f39d93be 100644 --- a/bluos/bluos.cpp +++ b/bluos/bluos.cpp @@ -38,9 +38,9 @@ BluOS::BluOS(NetworkAccessManager *networkmanager, QHostAddress hostAddress, int port, QObject *parent) : QObject(parent), + m_networkManager(networkmanager), m_hostAddress(hostAddress), - m_port(port), - m_networkManager(networkmanager) + m_port(port) { } @@ -121,7 +121,7 @@ QUuid BluOS::setVolume(uint volume) int volume = 0; bool mute = false; if (xml.readNextStartElement()) { - if (xml.name() == "volume") { + if (xml.name() == QString("volume")) { if(xml.attributes().hasAttribute("mute")) { mute = xml.attributes().value("mute").toInt(); } @@ -277,7 +277,7 @@ QUuid BluOS::setRepeat(RepeatMode repeatMode) return; } if (xml.readNextStartElement()) { - if (xml.name() == "playlist") { + if (xml.name() == QString("playlist")) { if (xml.attributes().hasAttribute("repeat")) { RepeatMode mode = RepeatMode(xml.attributes().value("repeat").toInt()); emit repeatModeReceived(mode); @@ -323,9 +323,9 @@ QUuid BluOS::listPresets() } QList presetList; if (xml.readNextStartElement()) { - if (xml.name() == "presets") { + if (xml.name() == QString("presets")) { while(xml.readNextStartElement()){ - if(xml.name() == "preset"){ + if(xml.name() == QString("preset")){ Preset preset; if (xml.attributes().hasAttribute("id")) { preset.Id = xml.attributes().value("id").toInt(); @@ -417,9 +417,9 @@ QUuid BluOS::getSources() } QList sourceList; if (xml.readNextStartElement()) { - if (xml.name() == "browse") { + if (xml.name() == QString("browse")) { while(xml.readNextStartElement()){ - if(xml.name() == "item"){ + if(xml.name() == QString("item")){ Source source; if (xml.attributes().hasAttribute("text")) { source.Text = xml.attributes().value("text").toString(); @@ -483,9 +483,9 @@ QUuid BluOS::browseSource(const QString &key) } QList sourceList; if (xml.readNextStartElement()) { - if (xml.name() == "browse") { + if (xml.name() == QString("browse")) { while(xml.readNextStartElement()){ - if(xml.name() == "item"){ + if(xml.name() == QString("item")){ Source source; if (xml.attributes().hasAttribute("text")) { source.Text = xml.attributes().value("text").toString(); @@ -648,23 +648,23 @@ bool BluOS::parseState(const QByteArray &state) StatusResponse statusResponse; if (xml.readNextStartElement()) { - if (xml.name() == "status") { + if (xml.name() == QString("status")) { while(xml.readNextStartElement()){ - if(xml.name() == "artist"){ + if(xml.name() == QString("artist")){ statusResponse.Artist = xml.readElementText(); - } else if(xml.name() == "album"){ + } else if(xml.name() == QString("album")){ statusResponse.Album = xml.readElementText(); - } else if(xml.name() == "name"){ + } else if(xml.name() == QString("name")){ statusResponse.Name = xml.readElementText(); - } else if(xml.name() == "service"){ + } else if(xml.name() == QString("service")){ statusResponse.Service = xml.readElementText(); - } else if(xml.name() == "serviceIcon"){ + } else if(xml.name() == QString("serviceIcon")){ statusResponse.ServiceIcon = xml.readElementText(); - } else if(xml.name() == "shuffle"){ + } else if(xml.name() == QString("shuffle")){ statusResponse.Shuffle = xml.readElementText().toInt(); - } else if(xml.name() == "repeat"){ + } else if(xml.name() == QString("repeat")){ statusResponse.Shuffle = xml.readElementText().toInt(); - } else if(xml.name() == "state"){ + } else if(xml.name() == QString("state")){ QString playback = xml.readElementText(); if (playback == "play") { statusResponse.State = PlaybackState::Playing; @@ -680,15 +680,15 @@ bool BluOS::parseState(const QByteArray &state) statusResponse.State = PlaybackState::Stopped; qCWarning(dcBluOS()) << "State response, unhandled playback mode" << playback; } - } else if(xml.name() == "volume"){ + } else if(xml.name() == QString("volume")){ statusResponse.Volume = xml.readElementText().toInt(); - } else if(xml.name() == "mute"){ + } else if(xml.name() == QString("mute")){ statusResponse.Mute = xml.readElementText().toInt(); - } else if(xml.name() == "image") { + } else if(xml.name() == QString("image")) { statusResponse.Image = xml.readElementText(); - } else if(xml.name() == "title1") { + } else if(xml.name() == QString("title1")) { statusResponse.Title = xml.readElementText(); - } else if(xml.name() == "group") { + } else if(xml.name() == QString("group")) { statusResponse.Group = xml.readElementText(); } else { xml.skipCurrentElement(); diff --git a/bluos/bluos.h b/bluos/bluos.h index 6263bd34..88319495 100644 --- a/bluos/bluos.h +++ b/bluos/bluos.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,13 +31,13 @@ #ifndef BLUOS_H #define BLUOS_H -#include -#include -#include #include +#include +#include +#include -#include "network/networkaccessmanager.h" -#include "integrations/thing.h" +#include +#include class BluOS : public QObject { @@ -67,20 +67,20 @@ public: }; struct StatusResponse { - QString Album; - QString Artist; - QString Name; - QString Title; - QString Service; - QUrl ServiceIcon; - PlaybackState State; - QUrl StationUrl; - int Volume; - bool Mute; - RepeatMode Repeat; - bool Shuffle; - QUrl Image; - QString Group; + QString Album; + QString Artist; + QString Name; + QString Title; + QString Service; + QUrl ServiceIcon; + PlaybackState State; + QUrl StationUrl; + int Volume; + bool Mute; + RepeatMode Repeat; + bool Shuffle; + QUrl Image; + QString Group; }; struct Preset { @@ -98,6 +98,7 @@ public: }; explicit BluOS(NetworkAccessManager *networkManager, QHostAddress hostAddress, int port, QObject *parent = nullptr); + int port(); QHostAddress hostAddress(); @@ -130,24 +131,24 @@ public: QUuid removeGroupPlayer(QHostAddress address, int port); private: + NetworkAccessManager *m_networkManager = nullptr; QHostAddress m_hostAddress; int m_port; - NetworkAccessManager *m_networkManager = nullptr; QUuid playBackControl(PlaybackCommand command); bool parseState(const QByteArray &state); signals: void connectionChanged(bool connected); - void actionExecuted(QUuid actionId, bool success); + void actionExecuted(const QUuid &actionId, bool success); - void statusReceived(const StatusResponse &status); + void statusReceived(const BluOS::StatusResponse &status); void volumeReceived(int volume, bool mute); void shuffleStateReceived(bool state); - void repeatModeReceived(RepeatMode mode); + void repeatModeReceived(BluOS::RepeatMode mode); - void presetsReceived(QUuid requestId, const QList &presets); - void sourcesReceived(QUuid requestId, const QList &sources); - void browseResultReceived(QUuid requestId, const QList &sources); + void presetsReceived(const QUuid &requestId, const QList &presets); + void sourcesReceived(const QUuid &requestId, const QList &sources); + void browseResultReceived(const QUuid &requestId, const QList &sources); }; #endif // BLUOS_H diff --git a/bluos/bluos.pro b/bluos/bluos.pro index 4297114e..c54b2a57 100644 --- a/bluos/bluos.pro +++ b/bluos/bluos.pro @@ -1,6 +1,6 @@ include(../plugins.pri) -QT += network +QT *= network SOURCES += \ integrationpluginbluos.cpp \ diff --git a/bluos/integrationpluginbluos.cpp b/bluos/integrationpluginbluos.cpp index 7b3280fb..86b8e7b1 100644 --- a/bluos/integrationpluginbluos.cpp +++ b/bluos/integrationpluginbluos.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,10 +31,10 @@ #include "integrationpluginbluos.h" #include "plugininfo.h" -#include "integrations/thing.h" -#include "network/networkaccessmanager.h" -#include "types/mediabrowseritem.h" -#include "types/browseritem.h" + +#include +#include +#include #include #include @@ -158,42 +158,42 @@ void IntegrationPluginBluOS::executeAction(ThingActionInfo *info) qCWarning(dcBluOS()) << "Unhandled Playback mode"; } m_asyncActions.insert(requestId, info); - connect(info, &ThingActionInfo::aborted, [this, requestId] {m_asyncActions.remove(requestId);}); + connect(info, &ThingActionInfo::aborted, this, [this, requestId] {m_asyncActions.remove(requestId);}); } else if (action.actionTypeId() == bluosPlayerPlayActionTypeId) { QUuid requestId = bluos->play(); m_asyncActions.insert(requestId, info); - connect(info, &ThingActionInfo::aborted, [this, requestId] {m_asyncActions.remove(requestId);}); + connect(info, &ThingActionInfo::aborted, this, [this, requestId] {m_asyncActions.remove(requestId);}); } else if (action.actionTypeId() == bluosPlayerPauseActionTypeId) { QUuid requestId = bluos->pause(); m_asyncActions.insert(requestId, info); - connect(info, &ThingActionInfo::aborted, [this, requestId] {m_asyncActions.remove(requestId);}); + connect(info, &ThingActionInfo::aborted, this, [this, requestId] {m_asyncActions.remove(requestId);}); } else if (action.actionTypeId() == bluosPlayerStopActionTypeId) { QUuid requestId = bluos->stop(); m_asyncActions.insert(requestId, info); - connect(info, &ThingActionInfo::aborted, [this, requestId] {m_asyncActions.remove(requestId);}); + connect(info, &ThingActionInfo::aborted, this, [this, requestId] {m_asyncActions.remove(requestId);}); } else if (action.actionTypeId() == bluosPlayerSkipNextActionTypeId) { QUuid requestId = bluos->skip(); m_asyncActions.insert(requestId, info); - connect(info, &ThingActionInfo::aborted, [this, requestId] {m_asyncActions.remove(requestId);}); + connect(info, &ThingActionInfo::aborted, this, [this, requestId] {m_asyncActions.remove(requestId);}); } else if (action.actionTypeId() == bluosPlayerSkipBackActionTypeId) { QUuid requestId = bluos->back(); m_asyncActions.insert(requestId, info); - connect(info, &ThingActionInfo::aborted, [this, requestId] {m_asyncActions.remove(requestId);}); + connect(info, &ThingActionInfo::aborted, this, [this, requestId] {m_asyncActions.remove(requestId);}); } else if (action.actionTypeId() == bluosPlayerVolumeActionTypeId) { uint volume = action.param(bluosPlayerVolumeActionVolumeParamTypeId).value().toUInt(); QUuid requestId = bluos->setVolume(volume); m_asyncActions.insert(requestId, info); - connect(info, &ThingActionInfo::aborted, [this, requestId] {m_asyncActions.remove(requestId);}); + connect(info, &ThingActionInfo::aborted, this, [this, requestId] {m_asyncActions.remove(requestId);}); } else if (action.actionTypeId() == bluosPlayerMuteActionTypeId) { bool mute = action.param(bluosPlayerMuteActionMuteParamTypeId).value().toBool(); QUuid requestId = bluos->setMute(mute); m_asyncActions.insert(requestId, info); - connect(info, &ThingActionInfo::aborted, [this, requestId] {m_asyncActions.remove(requestId);}); + connect(info, &ThingActionInfo::aborted, this, [this, requestId] {m_asyncActions.remove(requestId);}); } else if (action.actionTypeId() == bluosPlayerShuffleActionTypeId) { bool shuffle = action.param(bluosPlayerShuffleActionShuffleParamTypeId).value().toBool(); QUuid requestId = bluos->setShuffle(shuffle); m_asyncActions.insert(requestId, info); - connect(info, &ThingActionInfo::aborted, [this, requestId] {m_asyncActions.remove(requestId);}); + connect(info, &ThingActionInfo::aborted, this, [this, requestId] {m_asyncActions.remove(requestId);}); } else if (action.actionTypeId() == bluosPlayerRepeatActionTypeId) { QString repeat = action.param(bluosPlayerRepeatActionRepeatParamTypeId).value().toString(); QUuid requestId; @@ -207,17 +207,17 @@ void IntegrationPluginBluOS::executeAction(ThingActionInfo *info) qCWarning(dcBluOS()) << "Unhandled Repeat Mode"; } m_asyncActions.insert(requestId, info); - connect(info, &ThingActionInfo::aborted, [this, requestId] {m_asyncActions.remove(requestId);}); + connect(info, &ThingActionInfo::aborted, this, [this, requestId] {m_asyncActions.remove(requestId);}); } else if (action.actionTypeId() == bluosPlayerIncreaseVolumeActionTypeId) { uint step = action.param(bluosPlayerIncreaseVolumeActionStepParamTypeId).value().toUInt(); QUuid requestId = bluos->setVolume(qMin(100, thing->stateValue(bluosPlayerVolumeStateTypeId).toUInt() + step)); m_asyncActions.insert(requestId, info); - connect(info, &ThingActionInfo::aborted, [this, requestId] {m_asyncActions.remove(requestId);}); + connect(info, &ThingActionInfo::aborted, this, [this, requestId] {m_asyncActions.remove(requestId);}); } else if (action.actionTypeId() == bluosPlayerDecreaseVolumeActionTypeId) { uint step = action.param(bluosPlayerDecreaseVolumeActionStepParamTypeId).value().toUInt(); QUuid requestId = bluos->setVolume(qMax(0, thing->stateValue(bluosPlayerVolumeStateTypeId).toUInt() - step)); m_asyncActions.insert(requestId, info); - connect(info, &ThingActionInfo::aborted, [this, requestId] {m_asyncActions.remove(requestId);}); + connect(info, &ThingActionInfo::aborted, this, [this, requestId] {m_asyncActions.remove(requestId);}); } else { qCWarning(dcBluOS()) << "Execute Action, unhandled action type id" << action.actionTypeId(); return info->finish(Thing::ThingErrorThingClassNotFound); @@ -414,7 +414,7 @@ void IntegrationPluginBluOS::onActionExecuted(QUuid requestId, bool success) } else { info->finish(Thing::ThingErrorHardwareFailure); } - m_pluginTimer->timeout(); // get a status update + emit m_pluginTimer->timeout(); // get a status update } } diff --git a/bluos/integrationpluginbluos.h b/bluos/integrationpluginbluos.h index 21ebb495..8d2c2e26 100644 --- a/bluos/integrationpluginbluos.h +++ b/bluos/integrationpluginbluos.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -33,10 +33,10 @@ #include "bluos.h" -#include "integrations/integrationplugin.h" -#include "platform/platformzeroconfcontroller.h" -#include "network/zeroconf/zeroconfservicebrowser.h" -#include "plugintimer.h" +#include +#include +#include +#include #include #include @@ -86,5 +86,6 @@ private slots: void onPresetsReceived(QUuid requestId, const QList &presets); void onSourcesReceived(QUuid requestId, const QList &sources); void onBrowseResultReceived(QUuid requestId, const QList &sources); + }; #endif // INTEGRATIONPLUGINBLUOS_H From e0328bbd4bba7a6153e07bc1da52e967a0fd331d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Thu, 7 Aug 2025 15:34:18 +0200 Subject: [PATCH 05/82] Disable python plugins --- nymea-plugins.pro | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/nymea-plugins.pro b/nymea-plugins.pro index 5e12641e..7bf5ab85 100644 --- a/nymea-plugins.pro +++ b/nymea-plugins.pro @@ -5,7 +5,6 @@ PLUGIN_DIRS = \ aqi \ avahimonitor \ awattar \ - bimmerconnected \ bluos \ bose \ bosswerk \ @@ -15,7 +14,6 @@ PLUGIN_DIRS = \ daylightsensor \ denon \ doorbird \ - dht \ dweetio \ dynatrace \ easee \ @@ -25,7 +23,6 @@ PLUGIN_DIRS = \ espuino \ evbox \ everest \ - fastcom \ flowercare \ fronius \ garadget \ @@ -44,13 +41,11 @@ PLUGIN_DIRS = \ mailnotification \ mqttclient \ mystrom \ - neatobotvac \ nanoleaf \ netatmo \ networkdetector \ notifyevents \ nuki \ - mcp3008 \ onewire \ openuv \ openweathermap \ @@ -69,7 +64,6 @@ PLUGIN_DIRS = \ somfytahoma \ sonos \ spothinta \ - sunposition \ systemmonitor \ tado \ tasmota \ @@ -90,6 +84,13 @@ PLUGIN_DIRS = \ ws2812fx \ +# bimmerconnected \ +# dht \ +# fastcom \ +# mcp3008 \ +# neatobotvac \ +# sunposition \ + message(============================================) message("Qt version:" $$[QT_VERSION]) From 7d782078b42e82a13613e5157dab856198dad627 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Thu, 7 Aug 2025 15:45:07 +0200 Subject: [PATCH 06/82] bose: Add Qt6 support --- bose/bose.pro | 6 +- bose/integrationpluginbose.cpp | 21 ++-- bose/integrationpluginbose.h | 9 +- bose/soundtouch.cpp | 213 +++++++++++++++++---------------- bose/soundtouch.h | 32 +++-- 5 files changed, 139 insertions(+), 142 deletions(-) diff --git a/bose/bose.pro b/bose/bose.pro index a2d4b66d..317e228c 100644 --- a/bose/bose.pro +++ b/bose/bose.pro @@ -1,10 +1,6 @@ include(../plugins.pri) -QT += \ - network \ - websockets \ - -TARGET = $$qtLibraryTarget(nymea_integrationpluginbose) +QT *= network websockets SOURCES += \ integrationpluginbose.cpp \ diff --git a/bose/integrationpluginbose.cpp b/bose/integrationpluginbose.cpp index 34d4ea20..3ef850e9 100644 --- a/bose/integrationpluginbose.cpp +++ b/bose/integrationpluginbose.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -29,11 +29,12 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "integrationpluginbose.h" -#include "integrations/thing.h" #include "plugininfo.h" -#include "platform/platformzeroconfcontroller.h" -#include "network/zeroconf/zeroconfserviceentry.h" -#include "types/mediabrowseritem.h" + +#include +#include +#include +#include #include #include @@ -545,7 +546,7 @@ void IntegrationPluginBose::onSourcesObjectReceived(QUuid requestId, SourcesObje if (m_asyncBrowseResults.contains(requestId)) { BrowseResult *result = m_asyncBrowseResults.value(requestId); foreach (SourceItemObject sourceItem, sources.sourceItems) { - qDebug(dcBose()) << "Source:" << sourceItem.source; + qCDebug(dcBose()) << "Source:" << sourceItem.source; if (sourceItem.source == "BLUETOOTH") { MediaBrowserItem item(sourceItem.source, sourceItem.source, false, true); item.setDescription(sourceItem.sourceAccount); @@ -591,15 +592,15 @@ void IntegrationPluginBose::onBassObjectReceived(QUuid requestId, BassObject bas void IntegrationPluginBose::onBassCapabilitiesObjectReceived(QUuid requestId, BassCapabilitiesObject bassCapabilities) { Q_UNUSED(requestId); - qDebug(dcBose()) << "Bass capabilities (max, min, default):" << bassCapabilities.bassMax << bassCapabilities.bassMin << bassCapabilities.bassDefault; + qCDebug(dcBose()) << "Bass capabilities (max, min, default):" << bassCapabilities.bassMax << bassCapabilities.bassMin << bassCapabilities.bassDefault; } void IntegrationPluginBose::onGroupObjectReceived(QUuid requestId, GroupObject group) { Q_UNUSED(requestId); - qDebug(dcBose()) << "Group" << group.name << group.status; + qCDebug(dcBose()) << "Group" << group.name << group.status; foreach (RolesObject role, group.roles) { - qDebug(dcBose()) << "-> member:" << role.groupRole.deviceID; + qCDebug(dcBose()) << "-> member:" << role.groupRole.deviceID; } } @@ -607,7 +608,7 @@ void IntegrationPluginBose::onZoneObjectReceived(QUuid requestId, ZoneObject zon { Q_UNUSED(requestId); foreach (MemberObject member, zone.members) { - qDebug(dcBose()) << "-> member:" << member.deviceID; + qCDebug(dcBose()) << "-> member:" << member.deviceID; } } diff --git a/bose/integrationpluginbose.h b/bose/integrationpluginbose.h index 16223879..6af1a327 100644 --- a/bose/integrationpluginbose.h +++ b/bose/integrationpluginbose.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,9 +31,10 @@ #ifndef INTEGRATIONPLUGINBOSE_H #define INTEGRATIONPLUGINBOSE_H -#include "integrations/integrationplugin.h" -#include "network/zeroconf/zeroconfservicebrowser.h" -#include "plugintimer.h" +#include +#include +#include + #include "soundtouch.h" #include "soundtouchtypes.h" diff --git a/bose/soundtouch.cpp b/bose/soundtouch.cpp index 357567a2..0241dd62 100644 --- a/bose/soundtouch.cpp +++ b/bose/soundtouch.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -29,9 +29,9 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "soundtouch.h" -#include "hardwaremanager.h" -#include "integrations/thing.h" -#include "network/networkaccessmanager.h" + +#include +#include SoundTouch::SoundTouch(NetworkAccessManager *networkAccessManager, QString ipAddress, QObject *parent) : QObject(parent), @@ -47,7 +47,7 @@ SoundTouch::SoundTouch(NetworkAccessManager *networkAccessManager, QString ipAdd //url.setHost(m_ipAddress); //url.setScheme("ws"); //url.setPort(8080); - //qDebug(dcBose) << "Connecting websocket to" << url; + //qCDebug(dcBose()) << "Connecting websocket to" << url; //TODO missing websocket subprotocol "gabbo" //QWebsockets doesn't support subprotocols //m_websocket->open(url); @@ -249,9 +249,10 @@ QUuid SoundTouch::setKey(KEY_VALUE keyValue, bool pressed) xml.writeCharacters("PRESET_6"); break; default: - qWarning(dcBose) << "key not yet implemented"; - return "0"; + qCWarning(dcBose()) << "key not yet implemented"; + return QUuid(); } + xml.writeEndElement(); //key xml.writeEndDocument(); QNetworkRequest request(url); @@ -444,7 +445,7 @@ QUuid SoundTouch::setBass(int volume) return requestId; } -QUuid SoundTouch::setName(QString name) +QUuid SoundTouch::setName(const QString &name) { QUuid requestId = QUuid::createUuid(); QUrl url; @@ -454,7 +455,7 @@ QUuid SoundTouch::setName(QString name) url.setPath("/name"); QByteArray content = (""); content.append(""); - content.append(name); + content.append(name.toUtf8()); content.append(""); QNetworkRequest request(url); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/xml"); @@ -498,13 +499,13 @@ QUuid SoundTouch::setSpeaker(PlayInfoObject playInfo) void SoundTouch::onWebsocketConnected() { - qDebug(dcBose) << "Bose websocket connected"; + qCDebug(dcBose()) << "Bose websocket connected"; emit connectionChanged(true); } void SoundTouch::onWebsocketDisconnected() { - qDebug(dcBose) << "Bose websocket disconnected"; + qCDebug(dcBose()) << "Bose websocket disconnected"; emit connectionChanged(false); QTimer::singleShot(5000, this, [this](){ QUrl url; @@ -517,7 +518,7 @@ void SoundTouch::onWebsocketDisconnected() void SoundTouch::onWebsocketMessageReceived(QString message) { - qDebug(dcBose) << "Websocket message received:" << message; + qCDebug(dcBose()) << "Websocket message received:" << message; //TODO as soon as QWebSocket supports sub-protocols } @@ -529,7 +530,7 @@ QUuid SoundTouch::sendGetRequest(QString path) url.setScheme("http"); url.setPort(m_port); url.setPath(path); - //qDebug(dcBose) << "Sending request" << url; + //qCDebug(dcBose()) << "Sending request" << url; QNetworkRequest request = QNetworkRequest(url); QNetworkReply *reply = m_networkAccessManager->get(request); @@ -563,7 +564,7 @@ QUuid SoundTouch::sendGetRequest(QString path) return requestId; } -void SoundTouch::emitRequestStatus(QUuid requestId, QNetworkReply *reply) +void SoundTouch::emitRequestStatus(const QUuid &requestId, QNetworkReply *reply) { int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); // Check HTTP status code @@ -584,17 +585,17 @@ void SoundTouch::emitRequestStatus(QUuid requestId, QNetworkReply *reply) xml.addData(data); if (xml.readNextStartElement()) { - if (xml.name() == "status") { + if (xml.name() == QString("status")) { //QString status = xml.readElementText(); emit requestExecuted(requestId, true); - } else if (xml.name() == "errors") { + } else if (xml.name() == QString("errors")) { emit requestExecuted(requestId, false); QString deviceId; if(xml.attributes().hasAttribute("deviceID")) { deviceId = xml.attributes().value("deviceID").toString(); } while(xml.readNextStartElement()){ - if(xml.name() == "error"){ + if(xml.name() == QString("error")){ ErrorObject error; error.deviceId = deviceId; error.error = xml.readElementText(); @@ -614,36 +615,36 @@ void SoundTouch::emitRequestStatus(QUuid requestId, QNetworkReply *reply) } } -void SoundTouch::parseData(QUuid requestId, const QByteArray &data) +void SoundTouch::parseData(const QUuid &requestId, const QByteArray &data) { QXmlStreamReader xml; xml.addData(data); if (xml.readNextStartElement()) { - if (xml.name() == "info") { + if (xml.name() == QString("info")) { InfoObject info; if(xml.attributes().hasAttribute("deviceID")) { - //qDebug(dcBose) << "Device ID" << xml.attributes().value("deviceID").toString(); + //qCDebug(dcBose()) << "Device ID" << xml.attributes().value("deviceID").toString(); info.deviceID = xml.attributes().value("deviceID").toString(); } while(xml.readNextStartElement()){ - if(xml.name() == "name"){ - //qDebug(dcBose) << "name" << xml.readElementText(); + if(xml.name() == QString("name")){ + //qCDebug(dcBose()) << "name" << xml.readElementText(); info.name = xml.readElementText(); - } else if(xml.name() == "type"){ - //qDebug(dcBose) << "type" << xml.readElementText(); + } else if(xml.name() == QString("type")){ + //qCDebug(dcBose()) << "type" << xml.readElementText(); info.type = xml.readElementText(); - } else if(xml.name() == "components"){ - //qDebug(dcBose) << "components element"; + } else if(xml.name() == QString("components")){ + //qCDebug(dcBose()) << "components element"; while(xml.readNextStartElement()){ - if(xml.name() == "component"){ + if(xml.name() == QString("component")){ ComponentObject component; while(xml.readNextStartElement()){ - if(xml.name() == "softwareVersion"){ - //qDebug(dcBose) << "Software version" << xml.readElementText(); + if(xml.name() == QString("softwareVersion")){ + //qCDebug(dcBose()) << "Software version" << xml.readElementText(); component.softwareVersion = xml.readElementText(); - } else if(xml.name() == "serialNumber") { - //qDebug(dcBose) << "Serialnumber" << xml.readElementText(); + } else if(xml.name() == QString("serialNumber")) { + //qCDebug(dcBose()) << "Serialnumber" << xml.readElementText(); component.serialNumber = xml.readElementText(); } else { xml.skipCurrentElement(); @@ -654,11 +655,11 @@ void SoundTouch::parseData(QUuid requestId, const QByteArray &data) xml.skipCurrentElement(); } } - } else if(xml.name() == "networkInfo"){ + } else if(xml.name() == QString("networkInfo")){ while (xml.readNextStartElement()) { - if (xml.name() == "macAddress") { + if (xml.name() == QString("macAddress")) { info.networkInfo.macAddress = xml.readElementText(); - } else if(xml.name() == "ipAddress") { + } else if(xml.name() == QString("ipAddress")) { info.networkInfo.ipAddress = xml.readElementText(); } else { xml.skipCurrentElement(); @@ -669,45 +670,45 @@ void SoundTouch::parseData(QUuid requestId, const QByteArray &data) } } emit infoReceived(requestId, info); - } else if (xml.name() == "nowPlaying") { + } else if (xml.name() == QString("nowPlaying")) { NowPlayingObject nowPlaying; if(xml.attributes().hasAttribute("deviceID")) { - //qDebug(dcBose) << "Device ID" << xml.attributes().value("deviceID").toString(); + //qCDebug(dcBose()) << "Device ID" << xml.attributes().value("deviceID").toString(); nowPlaying.deviceID = xml.attributes().value("deviceID").toString(); } if(xml.attributes().hasAttribute("source")) { - //qDebug(dcBose) << "Source" << xml.attributes().value("source").toString(); + //qCDebug(dcBose()) << "Source" << xml.attributes().value("source").toString(); nowPlaying.source = xml.attributes().value("source").toString(); } if(xml.attributes().hasAttribute("sourceAccount")) { - //qDebug(dcBose) << "Source Account" << xml.attributes().value("sourceAccount").toString(); + //qCDebug(dcBose()) << "Source Account" << xml.attributes().value("sourceAccount").toString(); nowPlaying.sourceAccount = xml.attributes().value("sourceAccount").toString(); } while(xml.readNextStartElement()){ - if (xml.name() == "track") { - //qDebug(dcBose) << "track" << xml.readElementText(); + if (xml.name() == QString("track")) { + //qCDebug(dcBose()) << "track" << xml.readElementText(); nowPlaying.track = xml.readElementText(); - } else if(xml.name() == "artist") { - //qDebug(dcBose) << "artist" << xml.readElementText(); + } else if(xml.name() == QString("artist")) { + //qCDebug(dcBose()) << "artist" << xml.readElementText(); nowPlaying.artist = xml.readElementText(); - } else if(xml.name() == "album") { - //qDebug(dcBose) << "album" << xml.readElementText(); + } else if(xml.name() == QString("album")) { + //qCDebug(dcBose()) << "album" << xml.readElementText(); nowPlaying.album = xml.readElementText(); - } else if(xml.name() == "genre") { - //qDebug(dcBose) << "genre" << xml.readElementText(); + } else if(xml.name() == QString("genre")) { + //qCDebug(dcBose()) << "genre" << xml.readElementText(); nowPlaying.genre = xml.readElementText(); - } else if(xml.name() == "rating") { - //qDebug(dcBose) << "rating" << xml.readElementText(); + } else if(xml.name() == QString("rating")) { + //qCDebug(dcBose()) << "rating" << xml.readElementText(); nowPlaying.rating = xml.readElementText(); - } else if(xml.name() == "stationName") { - //qDebug(dcBose) << "Station name" << xml.readElementText(); + } else if(xml.name() == QString("stationName")) { + //qCDebug(dcBose()) << "Station name" << xml.readElementText(); nowPlaying.stationName = xml.readElementText(); - } else if(xml.name() == "art") { + } else if(xml.name() == QString("art")) { ArtObject art; if(xml.attributes().hasAttribute("artImageStatus")) { QString artStatus = xml.attributes().value("artImageStatus").toString().toUpper(); //ART_STATUS: INVALID, SHOW_DEFAULT_IMAGE, DOWNLOADING, IMAGE_PRESENT - //qDebug(dcBose) << "Art Image status" << artStatus; + //qCDebug(dcBose()) << "Art Image status" << artStatus; if (artStatus == "INVALID") { art.artStatus = ART_STATUS_INVALID; } else if (artStatus == "SHOW_DEFAULT_IMAGE") { @@ -719,9 +720,9 @@ void SoundTouch::parseData(QUuid requestId, const QByteArray &data) } } nowPlaying.art.url = xml.readElementText(); - }else if(xml.name() == "playStatus") { + }else if(xml.name() == QString("playStatus")) { QString playStatus = xml.readElementText(); - //qDebug(dcBose) << "Play Status" << playStatus; + //qCDebug(dcBose()) << "Play Status" << playStatus; //Modes: PLAY_STATE, PAUSE_STATE, STOP_STATE, BUFFERING_STATE if (playStatus == "PLAY_STATE") { nowPlaying.playStatus = PLAY_STATUS_PLAY_STATE; @@ -732,17 +733,17 @@ void SoundTouch::parseData(QUuid requestId, const QByteArray &data) } else if (playStatus == "BUFFERING_STATE") { nowPlaying.playStatus = PLAY_STATUS_BUFFERING_STATE; } - } else if(xml.name() == "shuffleSetting") { + } else if(xml.name() == QString("shuffleSetting")) { QString shuffle = xml.readElementText().toUpper(); - //qDebug(dcBose) << "Shuffle Setting" << shuffle; + //qCDebug(dcBose()) << "Shuffle Setting" << shuffle; if (shuffle == "SHUFFLE_ON") { nowPlaying.shuffleSetting = SHUFFLE_STATUS_SHUFFLE_ON; } else { nowPlaying.shuffleSetting = SHUFFLE_STATUS_SHUFFLE_OFF; } - }else if(xml.name() == "repeatSetting") { + }else if(xml.name() == QString("repeatSetting")) { QString repeat = xml.readElementText().toUpper(); - //qDebug(dcBose) << "Repeat Setting" << repeat; + //qCDebug(dcBose()) << "Repeat Setting" << repeat; //Modes: REPEAT_OFF, REPEAT_ALL, REPEAT_ONE if (repeat == "REPEAT_OFF") { nowPlaying.repeatSettings = REPEAT_STATUS_REPEAT_OFF; @@ -751,9 +752,9 @@ void SoundTouch::parseData(QUuid requestId, const QByteArray &data) } else if (repeat == "REPEAT_ALL") { nowPlaying.repeatSettings = REPEAT_STATUS_REPEAT_ALL; } - } else if(xml.name() == "streamType") { + } else if(xml.name() == QString("streamType")) { QString streamType = xml.readElementText().toUpper(); - //qDebug(dcBose) << "Stream Type" << streamType; + //qCDebug(dcBose()) << "Stream Type" << streamType; //Types: TRACK_ONDEMAND, RADIO_STREAMING, RADIO_TRACKS, NO_TRANSPORT_CONTROLS if (streamType == "RADIO_TRACKS") { nowPlaying.streamType = STREAM_STATUS_RADIO_TRACKS; @@ -764,54 +765,54 @@ void SoundTouch::parseData(QUuid requestId, const QByteArray &data) } else if (streamType == "NO_TRANSPORT_CONTROLS") { nowPlaying.streamType = STREAM_STATUS_NO_TRANSPORT_CONTROLS; }; - } else if(xml.name() == "stationLocation") { + } else if(xml.name() == QString("stationLocation")) { nowPlaying.stationLocation = xml.readElementText(); } else { xml.skipCurrentElement(); } } emit nowPlayingReceived(requestId, nowPlaying); - } else if (xml.name() == "volume") { + } else if (xml.name() == QString("volume")) { VolumeObject volumeObject; if(xml.attributes().hasAttribute("deviceID")) { - //qDebug(dcBose) << "Device ID" << xml.attributes().value("deviceID").toString(); + //qCDebug(dcBose()) << "Device ID" << xml.attributes().value("deviceID").toString(); volumeObject.deviceID = xml.attributes().value("deviceID").toString(); } while(xml.readNextStartElement()){ - if(xml.name() == "targetvolume"){ - //qDebug(dcBose) << "Target volume" << xml.readElementText(); + if(xml.name() == QString("targetvolume")){ + //qCDebug(dcBose()) << "Target volume" << xml.readElementText(); volumeObject.targetVolume = xml.readElementText().toInt(); - }else if(xml.name() == "actualvolume"){ - //qDebug(dcBose) << "Actual volume" << xml.readElementText(); + }else if(xml.name() == QString("actualvolume")){ + //qCDebug(dcBose()) << "Actual volume" << xml.readElementText(); volumeObject.actualVolume = xml.readElementText().toInt(); - }else if(xml.name() == "muteenabled"){ - //qDebug(dcBose) << "Mute enabled" << xml.readElementText(); + }else if(xml.name() == QString("muteenabled")){ + //qCDebug(dcBose()) << "Mute enabled" << xml.readElementText(); volumeObject.muteEnabled = ( xml.readElementText().toUpper() == "TRUE" ); //TODO convert from "false" to bool }else { xml.skipCurrentElement(); } } emit volumeReceived(requestId, volumeObject); - } else if (xml.name() == "sources") { + } else if (xml.name() == QString("sources")) { SourcesObject sourcesObject; if(xml.attributes().hasAttribute("deviceID")) { - //qDebug(dcBose) << "Device ID" << xml.attributes().value("deviceID").toString(); + //qCDebug(dcBose()) << "Device ID" << xml.attributes().value("deviceID").toString(); sourcesObject.deviceId = xml.attributes().value("deviceID").toString(); } while(xml.readNextStartElement()){ - if(xml.name() == "sourceItem"){ + if(xml.name() == QString("sourceItem")){ SourceItemObject sourceItem; if(xml.attributes().hasAttribute("source")) { - //qDebug(dcBose) << "Source" << xml.attributes().value("source").toString(); + //qCDebug(dcBose()) << "Source" << xml.attributes().value("source").toString(); sourceItem.source = xml.attributes().value("source").toString(); } if(xml.attributes().hasAttribute("sourceAccount")) { - //qDebug(dcBose) << "Source Account" << xml.attributes().value("sourceAccount").toString(); + //qCDebug(dcBose()) << "Source Account" << xml.attributes().value("sourceAccount").toString(); sourceItem.sourceAccount = xml.attributes().value("sourceAccount").toString(); } if(xml.attributes().hasAttribute("status")) { QString status = xml.attributes().value("status").toString().toUpper(); //UNAVAILABLE, READY - //qDebug(dcBose) << "status" << status; + //qCDebug(dcBose()) << "status" << status; if (status == "READY") { sourceItem.status = SOURCE_STATUS_READY; } else { @@ -819,7 +820,7 @@ void SoundTouch::parseData(QUuid requestId, const QByteArray &data) } } if(xml.attributes().hasAttribute("isLocal")) { - //qDebug(dcBose) << "is Local" << xml.attributes().value("isLocal").toString(); + //qCDebug(dcBose()) << "is Local" << xml.attributes().value("isLocal").toString(); sourceItem.isLocal = ( xml.attributes().value("isLocal").toString().toUpper() == "TRUE" ); } if(xml.attributes().hasAttribute("multiroomallowed")) { @@ -833,52 +834,52 @@ void SoundTouch::parseData(QUuid requestId, const QByteArray &data) } } emit sourcesReceived(requestId, sourcesObject); - } else if (xml.name() == "bass") { + } else if (xml.name() == QString("bass")) { BassObject bassObject; if(xml.attributes().hasAttribute("deviceID")) { - //qDebug(dcBose) << "Device ID" << xml.attributes().value("deviceID").toString(); + //qCDebug(dcBose()) << "Device ID" << xml.attributes().value("deviceID").toString(); bassObject.deviceID = xml.attributes().value("deviceID").toString(); } while(xml.readNextStartElement()){ - if(xml.name() == "targetbass"){ - //qDebug(dcBose) << "Target bas" << xml.readElementText(); + if(xml.name() == QString("targetbass")){ + //qCDebug(dcBose()) << "Target bas" << xml.readElementText(); bassObject.targetBass = xml.readElementText().toInt(); - } else if(xml.name() == "actualbass"){ - //qDebug(dcBose) << "Actual bass" << xml.readElementText(); + } else if(xml.name() == QString("actualbass")){ + //qCDebug(dcBose()) << "Actual bass" << xml.readElementText(); bassObject.actualBass = xml.readElementText().toInt(); } else { xml.skipCurrentElement(); } } emit bassReceived(requestId, bassObject); - } else if (xml.name() == "bassCapabilities") { + } else if (xml.name() == QString("bassCapabilities")) { BassCapabilitiesObject bassCapabilities; if(xml.attributes().hasAttribute("deviceID")) { bassCapabilities.deviceID = xml.attributes().value("deviceID").toString(); } while(xml.readNextStartElement()){ - if(xml.name() == "bassAvailable"){ - //qDebug(dcBose) << "BassAvailable" << xml.readElementText(); + if(xml.name() == QString("bassAvailable")){ + //qCDebug(dcBose()) << "BassAvailable" << xml.readElementText(); bassCapabilities.bassAvailable = ( xml.readElementText().toUpper() == "TRUE" ); - } else if(xml.name() == "bassMin"){ - //qDebug(dcBose) << "bass Min" << xml.readElementText(); + } else if(xml.name() == QString("bassMin")){ + //qCDebug(dcBose()) << "bass Min" << xml.readElementText(); bassCapabilities.bassMin = xml.readElementText().toInt(); - } else if(xml.name() == "bassMax"){ - //qDebug(dcBose) << "bass Max" << xml.readElementText(); + } else if(xml.name() == QString("bassMax")){ + //qCDebug(dcBose()) << "bass Max" << xml.readElementText(); bassCapabilities.bassMax = xml.readElementText().toInt(); - } else if(xml.name() == "bassDefault"){ - //qDebug(dcBose) << "bass default" << xml.readElementText(); + } else if(xml.name() == QString("bassDefault")){ + //qCDebug(dcBose()) << "bass default" << xml.readElementText(); bassCapabilities.bassDefault = xml.readElementText().toInt(); }else { xml.skipCurrentElement(); } } emit bassCapabilitiesReceived(requestId, bassCapabilities); - } else if (xml.name() == "presets") { + } else if (xml.name() == QString("presets")) { QList presets; - qDebug(dcBose) << "Presets"; + qCDebug(dcBose()) << "Presets"; while(xml.readNextStartElement()){ - if(xml.name() == "preset"){ + if(xml.name() == QString("preset")){ PresetObject preset; if(xml.attributes().hasAttribute("id")) { preset.presetId = xml.attributes().value("id").toInt(); @@ -889,10 +890,10 @@ void SoundTouch::parseData(QUuid requestId, const QByteArray &data) if(xml.attributes().hasAttribute("updatedOn")) { preset.updatedOn = xml.attributes().value("updatedOn").toULong(); } - qDebug(dcBose) << "Preset" << preset.presetId; + qCDebug(dcBose()) << "Preset" << preset.presetId; while(xml.readNextStartElement()){ - if (xml.name() == "ContentItem") { + if (xml.name() == QString("ContentItem")) { if(xml.attributes().hasAttribute("source")) { preset.ContentItem.source = xml.attributes().value("source").toString(); } @@ -904,9 +905,9 @@ void SoundTouch::parseData(QUuid requestId, const QByteArray &data) } while(xml.readNextStartElement()){ - if (xml.name() == "itemName") { + if (xml.name() == QString("itemName")) { preset.ContentItem.itemName = xml.readElementText(); - } else if (xml.name() == "containerArt"){ + } else if (xml.name() == QString("containerArt")){ preset.ContentItem.containerArt = xml.readElementText(); } else { qCWarning(dcBose()) << "Presets: unhandled XML element" << xml.name(); @@ -927,35 +928,35 @@ void SoundTouch::parseData(QUuid requestId, const QByteArray &data) } emit presetsReceived(requestId, presets); - } else if (xml.name() == "group") { + } else if (xml.name() == QString("group")) { GroupObject group; if(xml.attributes().hasAttribute("deviceID")) { group.id = xml.attributes().value("id").toString(); } while(xml.readNextStartElement()){ - if(xml.name() == "name") { + if(xml.name() == QString("name")) { group.name = xml.readElementText(); - } else if(xml.name() == "masterDeviceId") { + } else if(xml.name() == QString("masterDeviceId")) { group.masterDeviceId = xml.readElementText(); - } else if(xml.name() == "roles") { + } else if(xml.name() == QString("roles")) { //group.roles = xml.readElementText().toInt(); - } else if(xml.name() == "status"){ + } else if(xml.name() == QString("status")){ QString groupStatus = xml.readElementText(); - //qDebug(dcBose) << "Group role" << groupStatus; + //qCDebug(dcBose()) << "Group role" << groupStatus; //group.status = xml.readElementText(); }else { xml.skipCurrentElement(); } } emit groupReceived(requestId, group); - } else if (xml.name() == "zone") { + } else if (xml.name() == QString("zone")) { ZoneObject zone; if(xml.attributes().hasAttribute("master")) { zone.deviceID = xml.attributes().value("master").toString(); } while(xml.readNextStartElement()){ MemberObject member; - if(xml.name() == "member") { + if(xml.name() == QString("member")) { if(xml.attributes().hasAttribute("ipaddress")) { member.ipAddress = xml.attributes().value("ipaddress").toString(); } diff --git a/bose/soundtouch.h b/bose/soundtouch.h index 76199475..b3b7d91d 100644 --- a/bose/soundtouch.h +++ b/bose/soundtouch.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -39,9 +39,7 @@ #include "extern-plugininfo.h" #include "soundtouchtypes.h" -#include "hardwaremanager.h" -#include "network/networkaccessmanager.h" - +#include class SoundTouch : public QObject { @@ -67,7 +65,7 @@ public: QUuid addZoneSlave(ZoneObject zone); //Add one or more slave product(s) to a multiroom zone. QUuid removeZoneSlave(ZoneObject zone); //Remove one or more slave product(s) from a multiroom zone. QUuid setBass(int volume); //Set the bass level of a product, if supported.*/ - QUuid setName(QString name); //Set the products user-facing name. + QUuid setName(const QString &name); //Set the products user-facing name. QUuid setSpeaker(PlayInfoObject playInfo); //initiate playback of a specified network-accessible audio file on a Bose SoundTouch product. private: @@ -82,23 +80,23 @@ private: QString m_ipAddress; int m_port = 8090; QWebSocket *m_websocket = nullptr; - void emitRequestStatus(QUuid requestId, QNetworkReply *reply); //returns the status, -1 in case of error - void parseData(QUuid requestId, const QByteArray &data); + void emitRequestStatus(const QUuid &requestId, QNetworkReply *reply); //returns the status, -1 in case of error + void parseData(const QUuid &requestId, const QByteArray &data); signals: void connectionChanged(bool connected); - void infoReceived(QUuid requestId, InfoObject info); - void nowPlayingReceived(QUuid requestId, NowPlayingObject nowPlaying); - void volumeReceived(QUuid requestId, VolumeObject volume); - void sourcesReceived(QUuid requestId, SourcesObject sources); - void zoneReceived(QUuid requestId, ZoneObject); - void bassCapabilitiesReceived(QUuid requestId, BassCapabilitiesObject bassCapabilities); - void bassReceived(QUuid requestId, BassObject bass); - void presetsReceived(QUuid requestId, QList presets); - void groupReceived(QUuid requestId, GroupObject group); + void infoReceived(const QUuid &requestId, InfoObject info); + void nowPlayingReceived(const QUuid &requestId, NowPlayingObject nowPlaying); + void volumeReceived(const QUuid &requestId, VolumeObject volume); + void sourcesReceived(const QUuid &requestId, SourcesObject sources); + void zoneReceived(const QUuid &requestId, ZoneObject); + void bassCapabilitiesReceived(const QUuid &requestId, BassCapabilitiesObject bassCapabilities); + void bassReceived(const QUuid &requestId, BassObject bass); + void presetsReceived(const QUuid &requestId, QList presets); + void groupReceived(const QUuid &requestId, GroupObject group); - void requestExecuted(QUuid requestId, bool success); + void requestExecuted(const QUuid &requestId, bool success); void errorReceived(ErrorObject error); private slots: From f848502467348769a632142581e2acb95d72eb25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Thu, 7 Aug 2025 15:47:15 +0200 Subject: [PATCH 07/82] bosswerk: Add Qt6 support --- bosswerk/bosswerk.pro | 6 +++--- bosswerk/integrationpluginbosswerk.cpp | 6 ++---- bosswerk/integrationpluginbosswerk.h | 4 ++-- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/bosswerk/bosswerk.pro b/bosswerk/bosswerk.pro index e3a95cdb..65870a85 100644 --- a/bosswerk/bosswerk.pro +++ b/bosswerk/bosswerk.pro @@ -1,9 +1,9 @@ include(../plugins.pri) -QT += network +QT *= network SOURCES += \ - integrationpluginbosswerk.cpp \ + integrationpluginbosswerk.cpp HEADERS += \ - integrationpluginbosswerk.h \ + integrationpluginbosswerk.h diff --git a/bosswerk/integrationpluginbosswerk.cpp b/bosswerk/integrationpluginbosswerk.cpp index 4ef9f9c3..26c7d580 100644 --- a/bosswerk/integrationpluginbosswerk.cpp +++ b/bosswerk/integrationpluginbosswerk.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2024, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -28,7 +28,6 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - #include "integrationpluginbosswerk.h" #include "plugininfo.h" @@ -71,8 +70,7 @@ void IntegrationPluginBosswerk::discoverThings(ThingDiscoveryInfo *info) QUrl url("http://" + address.toString() + "/status.html"); QNetworkRequest request(url); - - QNetworkReply *probeReply = hardwareManager()->networkManager()->get(QNetworkRequest(url)); + QNetworkReply *probeReply = hardwareManager()->networkManager()->get(request); connect(probeReply, &QNetworkReply::finished, probeReply, &QNetworkReply::deleteLater); connect(probeReply, &QNetworkReply::finished, info, [probeReply, address, this](){ QByteArray data = probeReply->readAll(); diff --git a/bosswerk/integrationpluginbosswerk.h b/bosswerk/integrationpluginbosswerk.h index d2670bbd..d0ae6e14 100644 --- a/bosswerk/integrationpluginbosswerk.h +++ b/bosswerk/integrationpluginbosswerk.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2024, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,7 +31,7 @@ #ifndef INTEGRATIONPLUGINMEROSS_H #define INTEGRATIONPLUGINMEROSS_H -#include "integrations/integrationplugin.h" +#include #include "extern-plugininfo.h" #include From d212742a5a4b68e91c4eaddc1a8405e09966e8e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Thu, 7 Aug 2025 15:48:57 +0200 Subject: [PATCH 08/82] coinmarketcap: Add Qt6 support --- coinmarketcap/coinmarketcap.pro | 8 +++---- .../integrationplugincoinmarketcap.cpp | 21 ++++++++++--------- .../integrationplugincoinmarketcap.h | 6 +++--- 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/coinmarketcap/coinmarketcap.pro b/coinmarketcap/coinmarketcap.pro index 22b2e0a6..93f2b52e 100644 --- a/coinmarketcap/coinmarketcap.pro +++ b/coinmarketcap/coinmarketcap.pro @@ -1,11 +1,9 @@ include(../plugins.pri) -QT += network - -TARGET = $$qtLibraryTarget(nymea_integrationplugincoinmarketcap) +QT *= network SOURCES += \ - integrationplugincoinmarketcap.cpp \ + integrationplugincoinmarketcap.cpp HEADERS += \ - integrationplugincoinmarketcap.h \ + integrationplugincoinmarketcap.h diff --git a/coinmarketcap/integrationplugincoinmarketcap.cpp b/coinmarketcap/integrationplugincoinmarketcap.cpp index 68ac2915..612068bf 100644 --- a/coinmarketcap/integrationplugincoinmarketcap.cpp +++ b/coinmarketcap/integrationplugincoinmarketcap.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -29,9 +29,10 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "integrationplugincoinmarketcap.h" -#include "network/networkaccessmanager.h" #include "plugininfo.h" +#include + #include IntegrationPluginCoinMarketCap::IntegrationPluginCoinMarketCap() @@ -44,7 +45,7 @@ void IntegrationPluginCoinMarketCap::startPairing(ThingPairingInfo *info) NetworkAccessManager *network = hardwareManager()->networkManager(); QNetworkReply *reply = network->get(QNetworkRequest(QUrl("https://pro-api.coinmarketcap.com"))); connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater); - connect(reply, &QNetworkReply::finished, this, [this, reply, info] { + connect(reply, &QNetworkReply::finished, this, [reply, info] { if (reply->error() == QNetworkReply::NetworkError::HostNotFoundError) { info->finish(Thing::ThingErrorHardwareNotAvailable, QT_TR_NOOP("CoinMarketCap server is not reachable.")); @@ -175,31 +176,31 @@ void IntegrationPluginCoinMarketCap::onPriceCallFinished() qCDebug(dcCoinMarketCap()) << "Name" << elementMap.value("name").toString(); price = elementMap.value("quote").toMap().value(fiatCurrency).toMap().value("price").toDouble(); if (elementMap.value("name").toString() == "Bitcoin") { - qDebug(dcCoinMarketCap()) << "Bitcoin Price in" << fiatCurrency << price; + qCDebug(dcCoinMarketCap()) << "Bitcoin Price in" << fiatCurrency << price; thing->setStateValue(currentPricesBtcStateTypeId, price); } else if (elementMap.value("name").toString() == "Ethereum") { - qDebug(dcCoinMarketCap()) << "Etherium Price in" << fiatCurrency << price; + qCDebug(dcCoinMarketCap()) << "Etherium Price in" << fiatCurrency << price; thing->setStateValue(currentPricesEthStateTypeId, price); } else if (elementMap.value("name").toString() == "XRP") { - qDebug(dcCoinMarketCap()) << "XRP Price in" << fiatCurrency << price; + qCDebug(dcCoinMarketCap()) << "XRP Price in" << fiatCurrency << price; thing->setStateValue(currentPricesXrpStateTypeId, price); } else if (elementMap.value("name").toString() == "Bitcoin Cash") { - qDebug(dcCoinMarketCap()) << "Bitcoin-cash Price in" << fiatCurrency << price; + qCDebug(dcCoinMarketCap()) << "Bitcoin-cash Price in" << fiatCurrency << price; thing->setStateValue(currentPricesBchStateTypeId, price); } else if (elementMap.value("name").toString() == "Litecoin") { - qDebug(dcCoinMarketCap()) << "Litecoin Price in" << fiatCurrency << price; + qCDebug(dcCoinMarketCap()) << "Litecoin Price in" << fiatCurrency << price; thing->setStateValue(currentPricesLtcStateTypeId, price); } else if (elementMap.value("name").toString() == "NEM") { - qDebug(dcCoinMarketCap()) << "Nem Price in" << fiatCurrency << price; + qCDebug(dcCoinMarketCap()) << "Nem Price in" << fiatCurrency << price; thing->setStateValue(currentPricesXemStateTypeId, price); } else if (elementMap.value("name").toString() == "Ethereum Classic") { - qDebug(dcCoinMarketCap()) << "Ethereum Classic Price in" << fiatCurrency << price; + qCDebug(dcCoinMarketCap()) << "Ethereum Classic Price in" << fiatCurrency << price; thing->setStateValue(currentPricesEtcStateTypeId, price); } else if (elementMap.value("name").toString() == "Dash") { diff --git a/coinmarketcap/integrationplugincoinmarketcap.h b/coinmarketcap/integrationplugincoinmarketcap.h index 097f0503..d81f9f02 100644 --- a/coinmarketcap/integrationplugincoinmarketcap.h +++ b/coinmarketcap/integrationplugincoinmarketcap.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,8 +31,8 @@ #ifndef INTEGRATIONPLUGINCOINMARKETCAP_H #define INTEGRATIONPLUGINCOINMARKETCAP_H -#include "integrations/integrationplugin.h" -#include "plugintimer.h" +#include +#include #include #include From f9a5bfa55e97a9431431bdf799daaedbd18c270b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Thu, 7 Aug 2025 15:51:23 +0200 Subject: [PATCH 09/82] commandlauncher: Add Qt6 support --- commandlauncher/commandlauncher.pro | 2 -- commandlauncher/integrationplugincommandlauncher.cpp | 10 +++++----- commandlauncher/integrationplugincommandlauncher.h | 8 ++++---- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/commandlauncher/commandlauncher.pro b/commandlauncher/commandlauncher.pro index d5fc37b2..bc967b6a 100644 --- a/commandlauncher/commandlauncher.pro +++ b/commandlauncher/commandlauncher.pro @@ -1,7 +1,5 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(nymea_integrationplugincommandlauncher) - SOURCES += \ integrationplugincommandlauncher.cpp diff --git a/commandlauncher/integrationplugincommandlauncher.cpp b/commandlauncher/integrationplugincommandlauncher.cpp index ee5d5966..8f379d1e 100644 --- a/commandlauncher/integrationplugincommandlauncher.cpp +++ b/commandlauncher/integrationplugincommandlauncher.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -29,11 +29,11 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "integrationplugincommandlauncher.h" - -#include "integrations/thing.h" #include "plugininfo.h" -#include +#include + +#include IntegrattionPluginCommandLauncher::IntegrattionPluginCommandLauncher() { @@ -50,7 +50,7 @@ void IntegrattionPluginCommandLauncher::setupThing(ThingSetupInfo *info) // Script if(info->thing()->thingClassId() == scriptThingClassId){ - QStringList scriptArguments = info->thing()->paramValue(scriptThingScriptParamTypeId).toString().split(QRegExp("[ \r\n][ \r\n]*")); + QStringList scriptArguments = info->thing()->paramValue(scriptThingScriptParamTypeId).toString().split(QRegularExpression("[ \r\n][ \r\n]*")); // check if script exists and if it is executable QFileInfo fileInfo(scriptArguments.first()); if (!fileInfo.exists()) { diff --git a/commandlauncher/integrationplugincommandlauncher.h b/commandlauncher/integrationplugincommandlauncher.h index e9c8579d..632b030d 100644 --- a/commandlauncher/integrationplugincommandlauncher.h +++ b/commandlauncher/integrationplugincommandlauncher.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,7 +31,7 @@ #ifndef INTEGRATIONPLUGINCOMMANDLAUNCHER_H #define INTEGRATIONPLUGINCOMMANDLAUNCHER_H -#include "integrations/integrationplugin.h" +#include #include #include @@ -52,8 +52,8 @@ public: void thingRemoved(Thing *thing) override; private: - QHash m_scripts; - QHash m_applications; + QHash m_scripts; + QHash m_applications; }; #endif // INTEGRATIONPLUGINCOMMANDLAUNCHER_H From b9c8be43db70e6c654214d27af371eaab0039a24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Thu, 7 Aug 2025 15:54:38 +0200 Subject: [PATCH 10/82] datetime: Add Qt6 support --- datetime/datetime.pro | 4 +--- datetime/integrationplugindatetime.cpp | 20 ++++++++++---------- datetime/integrationplugindatetime.h | 13 +++++++------ 3 files changed, 18 insertions(+), 19 deletions(-) diff --git a/datetime/datetime.pro b/datetime/datetime.pro index 620d54bf..b23e0cf0 100644 --- a/datetime/datetime.pro +++ b/datetime/datetime.pro @@ -1,8 +1,6 @@ include(../plugins.pri) -QT += network - -TARGET = $$qtLibraryTarget(nymea_integrationplugindatetime) +QT *= network SOURCES += \ integrationplugindatetime.cpp \ diff --git a/datetime/integrationplugindatetime.cpp b/datetime/integrationplugindatetime.cpp index 99bb6470..95525484 100644 --- a/datetime/integrationplugindatetime.cpp +++ b/datetime/integrationplugindatetime.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -30,10 +30,10 @@ #include "integrationplugindatetime.h" -#include "integrations/thing.h" -#include "plugininfo.h" -#include "hardwaremanager.h" -#include "network/networkaccessmanager.h" +#include +#include +#include +#include #include #include @@ -416,13 +416,13 @@ void IntegrationPluginDateTime::updateTimes() return; if (m_dusk.isValid()) { - m_todayDevice->setStateValue(todayDuskTimeStateTypeId, m_dusk.toTime_t()); + m_todayDevice->setStateValue(todayDuskTimeStateTypeId, m_dusk.toSecsSinceEpoch()); } else { m_todayDevice->setStateValue(todayDuskTimeStateTypeId, 0); } if (m_sunrise.isValid() && m_sunset.isValid()) { - m_todayDevice->setStateValue(todaySunriseTimeStateTypeId, m_sunrise.toTime_t()); - m_todayDevice->setStateValue(todaySunsetTimeStateTypeId, m_sunset.toTime_t()); + m_todayDevice->setStateValue(todaySunriseTimeStateTypeId, m_sunrise.toSecsSinceEpoch()); + m_todayDevice->setStateValue(todaySunsetTimeStateTypeId, m_sunset.toSecsSinceEpoch()); m_todayDevice->setStateValue(todayDaylightStateTypeId, m_sunrise < m_currentDateTime && m_currentDateTime < m_sunset); } else { m_todayDevice->setStateValue(todaySunriseTimeStateTypeId, 0); @@ -430,12 +430,12 @@ void IntegrationPluginDateTime::updateTimes() m_todayDevice->setStateValue(todayDaylightStateTypeId, false); } if (m_dusk.isValid()) { - m_todayDevice->setStateValue(todayNoonTimeStateTypeId, m_noon.toTime_t()); + m_todayDevice->setStateValue(todayNoonTimeStateTypeId, m_noon.toSecsSinceEpoch()); } else { m_todayDevice->setStateValue(todayNoonTimeStateTypeId, 0); } if (m_dusk.isValid()) { - m_todayDevice->setStateValue(todayDawnTimeStateTypeId, m_dawn.toTime_t()); + m_todayDevice->setStateValue(todayDawnTimeStateTypeId, m_dawn.toSecsSinceEpoch()); } else { m_todayDevice->setStateValue(todayDawnTimeStateTypeId, 0); } diff --git a/datetime/integrationplugindatetime.h b/datetime/integrationplugindatetime.h index e5998e71..52642ad8 100644 --- a/datetime/integrationplugindatetime.h +++ b/datetime/integrationplugindatetime.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,9 +31,7 @@ #ifndef INTEGRATIONPLUGINDATETIME_H #define INTEGRATIONPLUGINDATETIME_H -#include "integrations/integrationplugin.h" -#include "alarm.h" -#include "countdown.h" +#include #include #include @@ -41,6 +39,9 @@ #include #include +#include "alarm.h" +#include "countdown.h" + class IntegrationPluginDateTime : public IntegrationPlugin { Q_OBJECT @@ -60,8 +61,8 @@ public: void startMonitoringAutoThings() override; private: - QTimer *m_timer; - Thing *m_todayDevice; + QTimer *m_timer = nullptr; + Thing *m_todayDevice = nullptr; QTimeZone m_timeZone; QDateTime m_currentDateTime; From 783a7858385189f902551288b8c4f46009d4c1c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Thu, 7 Aug 2025 15:57:38 +0200 Subject: [PATCH 11/82] daylightsensor: Add Qt6 support --- daylightsensor/daylightsensor.pro | 8 +++----- daylightsensor/integrationplugindaylightsensor.cpp | 13 +++++++------ daylightsensor/integrationplugindaylightsensor.h | 9 ++++----- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/daylightsensor/daylightsensor.pro b/daylightsensor/daylightsensor.pro index e6f1d8e7..734a87ee 100644 --- a/daylightsensor/daylightsensor.pro +++ b/daylightsensor/daylightsensor.pro @@ -1,11 +1,9 @@ include(../plugins.pri) -QT += network - -TARGET = $$qtLibraryTarget(nymea_integrationplugindaylightsensor) +QT *= network SOURCES += \ - integrationplugindaylightsensor.cpp \ + integrationplugindaylightsensor.cpp HEADERS += \ - integrationplugindaylightsensor.h \ + integrationplugindaylightsensor.h diff --git a/daylightsensor/integrationplugindaylightsensor.cpp b/daylightsensor/integrationplugindaylightsensor.cpp index 07bd4e89..58af2b9d 100644 --- a/daylightsensor/integrationplugindaylightsensor.cpp +++ b/daylightsensor/integrationplugindaylightsensor.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -30,7 +30,8 @@ #include "plugininfo.h" #include "integrationplugindaylightsensor.h" -#include "network/networkaccessmanager.h" + +#include #include #include @@ -56,7 +57,7 @@ void IntegrationPluginDaylightSensor::discoverThings(ThingDiscoveryInfo *info) QNetworkRequest request(QUrl("http://ip-api.com/json")); QNetworkReply* reply = hardwareManager()->networkManager()->get(request); connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater); - connect(reply, &QNetworkReply::finished, info, [this, reply, info]() { + connect(reply, &QNetworkReply::finished, info, [reply, info]() { if (reply->error() != QNetworkReply::NoError) { qCWarning(dcDaylightSensor()) << "Error fetching geolocation from ip-api:" << reply->error() << reply->errorString(); info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Failed to fetch data from the internet.")); @@ -124,8 +125,8 @@ void IntegrationPluginDaylightSensor::updateDevice(Thing *thing) QDateTime sunrise = sunriseSunset.first.toTimeZone(tz); QDateTime sunset = sunriseSunset.second.toTimeZone(tz); qCDebug(dcDaylightSensor()) << "Setting up daylight sensor:" << thing->name() << "Sunrise:" << sunrise.toString() << "Sunset:" << sunset.toString(); - thing->setStateValue(daylightSensorSunriseTimeStateTypeId, sunrise.toTime_t()); - thing->setStateValue(daylightSensorSunsetTimeStateTypeId, sunset.toTime_t()); + thing->setStateValue(daylightSensorSunriseTimeStateTypeId, sunrise.toSecsSinceEpoch()); + thing->setStateValue(daylightSensorSunsetTimeStateTypeId, sunset.toSecsSinceEpoch()); thing->setStateValue(daylightSensorDaylightStateTypeId, sunrise < now && sunset > now); qint64 timeToNext = -1; @@ -228,5 +229,5 @@ QPair IntegrationPluginDaylightSensor::calculateSunriseSun QDateTime sunrise(dateTime.date(), QTime(hourRise, minuteRise)); QDateTime sunset(dateTime.date(), QTime(hourSet, minuteSet)); - return qMakePair(sunrise, sunset); + return QPair(sunrise, sunset); } diff --git a/daylightsensor/integrationplugindaylightsensor.h b/daylightsensor/integrationplugindaylightsensor.h index 3206fc18..937301bc 100644 --- a/daylightsensor/integrationplugindaylightsensor.h +++ b/daylightsensor/integrationplugindaylightsensor.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,9 +31,8 @@ #ifndef INTEGRATIONPLUGINDAYLIGHTSENSOR_H #define INTEGRATIONPLUGINDAYLIGHTSENSOR_H - -#include "integrations/integrationplugin.h" -#include "plugintimer.h" +#include +#include class IntegrationPluginDaylightSensor: public IntegrationPlugin { @@ -54,7 +53,7 @@ private slots: void updateDevice(Thing *thing); private: - QHash m_timers; + QHash m_timers; QPair calculateSunriseSunset(qreal lat, qreal lon, const QDateTime &dateTime); }; From e673a6fceaaaa817dc239e9495f8af01d5028fdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Thu, 7 Aug 2025 16:22:29 +0200 Subject: [PATCH 12/82] denon: Add Qt6 support --- denon/avrconnection.cpp | 27 +++--- denon/denon.pro | 4 +- denon/heos.cpp | 144 ++++++++++++++++--------------- denon/integrationplugindenon.cpp | 48 +++++------ 4 files changed, 115 insertions(+), 108 deletions(-) diff --git a/denon/avrconnection.cpp b/denon/avrconnection.cpp index b5b6d6e9..e2016694 100644 --- a/denon/avrconnection.cpp +++ b/denon/avrconnection.cpp @@ -41,8 +41,13 @@ AvrConnection::AvrConnection(const QHostAddress &hostAddress, const int &port, Q connect(m_socket, &QTcpSocket::connected, this, &AvrConnection::onConnected); connect(m_socket, &QTcpSocket::disconnected, this, &AvrConnection::onDisconnected); connect(m_socket, &QTcpSocket::readyRead, this, &AvrConnection::readData); +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) + connect(m_socket, &QTcpSocket::errorOccurred, this, &AvrConnection::onError); +#else // Note: error signal will be interpreted as function, not as signal in C++11 connect(m_socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onError(QAbstractSocket::SocketError))); +#endif + m_commandTimer = new QTimer(this); m_commandTimer->start(50); // 50ms is the minimum request interval specified @@ -157,20 +162,20 @@ QUuid AvrConnection::sendCommand(const QByteArray &message) QUuid AvrConnection::setChannel(const QByteArray &channel) { QByteArray cmd = "SI" + channel + "\r"; - qCDebug(dcDenon) << "Change to channel:" << channel; + qCDebug(dcDenon()) << "Change to channel:" << channel; return sendCommand(cmd); } QUuid AvrConnection::setVolume(uint volume) { - qCDebug(dcDenon) << "Set volume" << volume; + qCDebug(dcDenon()) << "Set volume" << volume; QByteArray cmd = "MV" + QByteArray::number(volume) + "\r"; return sendCommand(cmd); } QUuid AvrConnection::setMute(bool mute) { - qCDebug(dcDenon) << "Set mute" << mute; + qCDebug(dcDenon()) << "Set mute" << mute; QByteArray cmd; if (mute) { cmd = "MUON\r"; @@ -182,7 +187,7 @@ QUuid AvrConnection::setMute(bool mute) QUuid AvrConnection::setPower(bool power) { - qCDebug(dcDenon) << "Set power" << power; + qCDebug(dcDenon()) << "Set power" << power; QByteArray cmd; if (power) { cmd = "PWON\r"; @@ -194,7 +199,7 @@ QUuid AvrConnection::setPower(bool power) QUuid AvrConnection::setSurroundMode(const QByteArray &surroundMode) { - qCDebug(dcDenon) << "Set surround mode" << surroundMode; + qCDebug(dcDenon()) << "Set surround mode" << surroundMode; QByteArray cmd = "MS" + surroundMode + "\r"; return sendCommand(cmd); } @@ -298,33 +303,33 @@ QUuid AvrConnection::setRepeat(AvrConnection::RepeatMode mode) QUuid AvrConnection::increaseVolume() { - qCDebug(dcDenon) << "Execute volume increase"; + qCDebug(dcDenon()) << "Execute volume increase"; QByteArray cmd = "MVUP\r"; return sendCommand(cmd); } QUuid AvrConnection::decreaseVolume() { - qCDebug(dcDenon) << "Execute volume decrease"; + qCDebug(dcDenon()) << "Execute volume decrease"; QByteArray cmd = "MVDOWN\r"; return sendCommand(cmd); } void AvrConnection::onConnected() { - qCDebug(dcDenon) << "connected successfully to" << hostAddress().toString() << port(); + qCDebug(dcDenon()) << "connected successfully to" << hostAddress().toString() << port(); emit connectionStatusChanged(true); } void AvrConnection::onDisconnected() { - qCDebug(dcDenon) << "disconnected from" << hostAddress().toString() << port(); + qCDebug(dcDenon()) << "disconnected from" << hostAddress().toString() << port(); emit connectionStatusChanged(false); } void AvrConnection::onError(QAbstractSocket::SocketError socketError) { - qCWarning(dcDenon) << "socket error:" << socketError << m_socket->errorString(); + qCWarning(dcDenon()) << "socket error:" << socketError << m_socket->errorString(); emit socketErrorOccured(socketError); } @@ -337,7 +342,7 @@ void AvrConnection::readData() if(line.isEmpty()) continue; - qCDebug(dcDenon) << "Data received" << line; + qCDebug(dcDenon()) << "Data received" << line; if (line.contains("MV") && !data.contains("MAX")){ int index = data.indexOf("MV"); int volume = data.mid(index+2, 2).toInt(); diff --git a/denon/denon.pro b/denon/denon.pro index 04bb1aac..edd2b677 100644 --- a/denon/denon.pro +++ b/denon/denon.pro @@ -1,8 +1,6 @@ include(../plugins.pri) -QT += network - -TARGET = $$qtLibraryTarget(nymea_integrationplugindenon) +QT *= network SOURCES += \ integrationplugindenon.cpp \ diff --git a/denon/heos.cpp b/denon/heos.cpp index b0ebb618..2c179d17 100644 --- a/denon/heos.cpp +++ b/denon/heos.cpp @@ -50,7 +50,11 @@ Heos::Heos(const QHostAddress &hostAddress, QObject *parent) : connect(m_socket, &QTcpSocket::connected, this, &Heos::onConnected); connect(m_socket, &QTcpSocket::disconnected, this, &Heos::onDisconnected); connect(m_socket, &QTcpSocket::readyRead, this, &Heos::readData); +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) + connect(m_socket, &QTcpSocket::errorOccurred, this, &Heos::onError); +#else connect(m_socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onError(QAbstractSocket::SocketError))); +#endif m_reconnectTimer = new QTimer(this); m_reconnectTimer->setInterval(5000); @@ -113,7 +117,7 @@ void Heos::registerForChangeEvents(bool state) query = "?enable=off"; } QByteArray cmd = "heos://system/register_for_change_events" + query + "\r\n"; - qCDebug(dcDenon) << "Register for change events:" << cmd; + qCDebug(dcDenon()) << "Register for change events:" << cmd; m_socket->write(cmd); } @@ -164,35 +168,35 @@ void Heos::prettifyJsonResponse(bool enable) void Heos::playNext(int playerId) { QByteArray cmd = "heos://player/play_next?pid=" + QVariant(playerId).toByteArray() + "\r\n"; - qCDebug(dcDenon) << "Play next:" << cmd; + qCDebug(dcDenon()) << "Play next:" << cmd; m_socket->write(cmd); } void Heos::playPrevious(int playerId) { QByteArray cmd = "heos://player/play_previous?pid=" + QVariant(playerId).toByteArray() + "\r\n"; - qCDebug(dcDenon) << "Play previous:" << cmd; + qCDebug(dcDenon()) << "Play previous:" << cmd; m_socket->write(cmd); } void Heos::volumeUp(int playerId, int step) { QByteArray cmd = "heos://player/volume_up?pid=" + QVariant(playerId).toByteArray() + "&step=" + QVariant(step).toByteArray() + "\r\n"; - qCDebug(dcDenon) << "Volume up:" << cmd; + qCDebug(dcDenon()) << "Volume up:" << cmd; m_socket->write(cmd); } void Heos::volumeDown(int playerId, int step) { QByteArray cmd = "heos://player/volume_down?pid=" + QVariant(playerId).toByteArray() + "&step=" + QVariant(step).toByteArray() + "\r\n"; - qCDebug(dcDenon) << "Volume down:" << cmd; + qCDebug(dcDenon()) << "Volume down:" << cmd; m_socket->write(cmd); } void Heos::clearQueue(int playerId) { QByteArray cmd = "heos://player/clear_queue?pid=" + QVariant(playerId).toByteArray() + "\r\n"; - qCDebug(dcDenon) << "clear queue:" << cmd; + qCDebug(dcDenon()) << "clear queue:" << cmd; m_socket->write(cmd); } @@ -203,16 +207,16 @@ void Heos::moveQueue(int playerId, int sourcQueueId, int destinationQueueId) queryParams.addQueryItem("pid", QString::number(playerId)); queryParams.addQueryItem("sqid", QString::number(sourcQueueId)); queryParams.addQueryItem("dqid", QString::number(destinationQueueId)); - cmd.append(queryParams.toString()); + cmd.append(queryParams.toString().toUtf8()); cmd.append("\r\n"); - qCDebug(dcDenon) << "moving queue:" << cmd; + qCDebug(dcDenon()) << "moving queue:" << cmd; m_socket->write(cmd); } void Heos::checkForFirmwareUpdate(int playerId) { QByteArray cmd = "heos://player/check_update?pid=" + QVariant(playerId).toByteArray() + "\r\n"; - qCDebug(dcDenon) << "Check firmware update:" << cmd; + qCDebug(dcDenon()) << "Check firmware update:" << cmd; m_socket->write(cmd); } void Heos::getNowPlayingMedia(int playerId) @@ -230,7 +234,7 @@ void Heos::getPlayers() void Heos::getPlayerInfo(int playerId) { QByteArray cmd = "heos://player/get_player_info?pid=" + QVariant(playerId).toByteArray() + "\r\n"; - qCDebug(dcDenon) << "Get player info:" << cmd; + qCDebug(dcDenon()) << "Get player info:" << cmd; m_socket->write(cmd); } @@ -243,7 +247,7 @@ void Heos::getVolume(int playerId) void Heos::setVolume(int playerId, int volume) { QByteArray cmd = "heos://player/set_volume?pid=" + QVariant(playerId).toByteArray() + "&level=" + QVariant(volume).toByteArray() + "\r\n"; - qCDebug(dcDenon) << "Set volume:" << cmd; + qCDebug(dcDenon()) << "Set volume:" << cmd; m_socket->write(cmd); } @@ -262,7 +266,7 @@ void Heos::setMute(int playerId, bool state) stateQuery = "&state=off"; } QByteArray cmd = "heos://player/set_mute?pid=" + QVariant(playerId).toByteArray() + stateQuery + "\r\n"; - qCDebug(dcDenon) << "Set mute:" << cmd; + qCDebug(dcDenon()) << "Set mute:" << cmd; m_socket->write(cmd); } @@ -279,7 +283,7 @@ void Heos::setPlayerState(int playerId, PLAYER_STATE state) } QByteArray cmd = "heos://player/set_play_state?pid=" + QVariant(playerId).toByteArray() + playerStateQuery + "\r\n"; - qCDebug(dcDenon) << "Set play mode:" << cmd; + qCDebug(dcDenon()) << "Set play mode:" << cmd; m_socket->write(cmd); } @@ -310,7 +314,7 @@ void Heos::setPlayMode(int playerId, REPEAT_MODE repeatMode, bool shuffle) } QByteArray cmd = "heos://player/set_play_mode?pid=" + QVariant(playerId).toByteArray() + repeatModeQuery + shuffleQuery + "\r\n"; - qCDebug(dcDenon) << "Set play mode:" << cmd; + qCDebug(dcDenon()) << "Set play mode:" << cmd; m_socket->write(cmd); } @@ -357,7 +361,7 @@ void Heos::getGroupMute(int groupId) void Heos::setGroupVolume(int groupId, bool volume) { QByteArray cmd = "heos://group/set_volume?gid=" + QVariant(groupId).toByteArray() + "&level=" + QVariant(volume).toByteArray() + "\r\n"; - qCDebug(dcDenon) << "Volume up:" << cmd; + qCDebug(dcDenon()) << "Volume up:" << cmd; m_socket->write(cmd); } @@ -381,28 +385,28 @@ void Heos::setGroup(QList playerIds) } cmd.resize(cmd.size()-1); //remove last ',' cmd.append("\r\n"); - qCDebug(dcDenon) << "Set group:" << cmd; + qCDebug(dcDenon()) << "Set group:" << cmd; m_socket->write(cmd); } void Heos::toggleGroupMute(int groupId) { QByteArray cmd = "heos://group/toggle_mute?gid=" + QVariant(groupId).toByteArray() + "\r\n"; - qCDebug(dcDenon) << "Volume up:" << cmd; + qCDebug(dcDenon()) << "Volume up:" << cmd; m_socket->write(cmd); } void Heos::groupVolumeUp(int groupId, int step) { QByteArray cmd = "heos://group/volume_up?pid=" + QVariant(groupId).toByteArray() + "&step=" + QVariant(step).toByteArray() + "\r\n"; - qCDebug(dcDenon) << "Group volume up:" << cmd; + qCDebug(dcDenon()) << "Group volume up:" << cmd; m_socket->write(cmd); } void Heos::groupVolumeDown(int groupId, int step) { QByteArray cmd = "heos://group/volume_down?pid=" + QVariant(groupId).toByteArray() + "&step=" + QVariant(step).toByteArray() + "\r\n"; - qCDebug(dcDenon) << "Group volume up:" << cmd; + qCDebug(dcDenon()) << "Group volume up:" << cmd; m_socket->write(cmd); } @@ -416,9 +420,9 @@ quint32 Heos::getMusicSources() QByteArray cmd = "heos://browse/get_music_sources?"; QUrlQuery queryParams; queryParams.addQueryItem("SEQUENCE", QString::number(sequence)); - cmd.append(queryParams.toString()); + cmd.append(queryParams.toString().toUtf8()); cmd.append("\r\n"); - qCDebug(dcDenon) << "Get music sources:" << cmd; + qCDebug(dcDenon()) << "Get music sources:" << cmd; m_socket->write(cmd); return sequence; } @@ -430,9 +434,9 @@ quint32 Heos::getSourceInfo(const QString &sourceId) QUrlQuery queryParams; queryParams.addQueryItem("sid", sourceId); queryParams.addQueryItem("SEQUENCE", QString::number(sequence)); - cmd.append(queryParams.toString()); + cmd.append(queryParams.toString().toUtf8()); cmd.append("\r\n"); - qCDebug(dcDenon) << "Get source info:" << cmd; + qCDebug(dcDenon()) << "Get source info:" << cmd; m_socket->write(cmd); return sequence; } @@ -443,9 +447,9 @@ quint32 Heos::getSearchCriteria(const QString &sourceId) QByteArray cmd = "heos://browse/get_search_criteria?"; QUrlQuery queryParams; queryParams.addQueryItem("sid", sourceId); - cmd.append(queryParams.toString()); + cmd.append(queryParams.toString().toUtf8()); cmd.append("\r\n"); - qCDebug(dcDenon) << "Get search criteria:" << cmd; + qCDebug(dcDenon()) << "Get search criteria:" << cmd; m_socket->write(cmd); return sequence; } @@ -457,9 +461,9 @@ quint32 Heos::browseSource(const QString &sourceId) QUrlQuery queryParams; queryParams.addQueryItem("sid", sourceId); queryParams.addQueryItem("SEQUENCE", QString::number(sequence)); - cmd.append(queryParams.toString()); + cmd.append(queryParams.toString().toUtf8()); cmd.append("\r\n"); - qCDebug(dcDenon) << "Browse source:" << cmd; + qCDebug(dcDenon()) << "Browse source:" << cmd; m_socket->write(cmd); return sequence; } @@ -472,9 +476,9 @@ quint32 Heos::browseSourceContainers(const QString &sourceId, const QString &con queryParams.addQueryItem("sid", sourceId); queryParams.addQueryItem("cid", containerId); queryParams.addQueryItem("SEQUENCE", QString::number(sequence)); - cmd.append(queryParams.toString()); + cmd.append(queryParams.toString().toUtf8()); cmd.append("\r\n"); - qCDebug(dcDenon) << "Browsing container:" << cmd; + qCDebug(dcDenon()) << "Browsing container:" << cmd; m_socket->write(cmd); return sequence; } @@ -498,9 +502,9 @@ quint32 Heos::playStation(int playerId, const QString &sourceId, const QString & queryParams.addQueryItem("name", stationName); } queryParams.addQueryItem("SEQUENCE", QString::number(sequence)); - cmd.append(queryParams.toString()); + cmd.append(queryParams.toString().toUtf8()); cmd.append("\r\n"); - qCDebug(dcDenon) << "playing station:" << cmd; + qCDebug(dcDenon()) << "playing station:" << cmd; m_socket->write(cmd); return sequence; } @@ -513,9 +517,9 @@ quint32 Heos::playPresetStation(int playerId, int presetNumber) queryParams.addQueryItem("pid", QString::number(playerId)); queryParams.addQueryItem("preset", QString::number(presetNumber)); queryParams.addQueryItem("SEQUENCE", QString::number(sequence)); - cmd.append(queryParams.toString()); + cmd.append(queryParams.toString().toUtf8()); cmd.append("\r\n"); - qCDebug(dcDenon) << "playing preset station:" << cmd; + qCDebug(dcDenon()) << "playing preset station:" << cmd; m_socket->write(cmd); return sequence; } @@ -528,9 +532,9 @@ quint32 Heos::playInputSource(int playerId, const QString &inputName) queryParams.addQueryItem("pid", QString::number(playerId)); queryParams.addQueryItem("input", inputName); queryParams.addQueryItem("SEQUENCE", QString::number(sequence)); - cmd.append(queryParams.toString()); + cmd.append(queryParams.toString().toUtf8()); cmd.append("\r\n"); - qCDebug(dcDenon) << "playing input source:" << cmd; + qCDebug(dcDenon()) << "playing input source:" << cmd; m_socket->write(cmd); return sequence; } @@ -543,9 +547,9 @@ quint32 Heos::playUrl(int playerId, const QUrl &mediaUrl) queryParams.addQueryItem("pid", QString::number(playerId)); queryParams.addQueryItem("url", mediaUrl.toString()); queryParams.addQueryItem("SEQUENCE", QString::number(sequence)); - cmd.append(queryParams.toString()); + cmd.append(queryParams.toString().toUtf8()); cmd.append("\r\n"); - qCDebug(dcDenon) << "playing url:" << cmd; + qCDebug(dcDenon()) << "playing url:" << cmd; m_socket->write(cmd); return sequence; } @@ -574,16 +578,16 @@ quint32 Heos::addContainerToQueue(int playerId, const QString &sourceId, const Q queryParams.addQueryItem("cid", containerId); queryParams.addQueryItem("aid", QString::number(addCriteria)); queryParams.addQueryItem("SEQUENCE", QString::number(sequence)); - cmd.append(queryParams.toString()); + cmd.append(queryParams.toString().toUtf8()); cmd.append("\r\n"); - qCDebug(dcDenon) << "Adding to queue:" << cmd; + qCDebug(dcDenon()) << "Adding to queue:" << cmd; m_socket->write(cmd); return sequence; } void Heos::onError(QAbstractSocket::SocketError socketError) { - qCWarning(dcDenon) << "Heos: Socket error:" << socketError << m_socket->errorString(); + qCWarning(dcDenon()) << "Heos: Socket error:" << socketError << m_socket->errorString(); } void Heos::readData() @@ -595,7 +599,7 @@ void Heos::readData() data = m_socket->readLine(); QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error); if (error.error != QJsonParseError::NoError) { - qCWarning(dcDenon) << "failed to parse json :" << error.errorString(); + qCWarning(dcDenon()) << "failed to parse json :" << error.errorString(); return; } QVariantMap dataMap = jsonDoc.toVariant().toMap(); @@ -627,18 +631,18 @@ void Heos::readData() if (command.contains("register_for_change_events")) { QString enabled = message.queryItemValue("enabled"); if (enabled.contains("off")) { - qDebug(dcDenon) << "Events are disabled"; + qCDebug(dcDenon()) << "Events are disabled"; m_eventRegistered = false; emit systemEventsEnabled(false); } else { - qDebug(dcDenon) << "Events are enabled"; + qCDebug(dcDenon()) << "Events are enabled"; m_eventRegistered = true; emit systemEventsEnabled(true); } } else if (command.contains("check_account")) { - qDebug(dcDenon()) << "System command check_account:" << message.toString(); + qCDebug(dcDenon()) << "System command check_account:" << message.toString(); bool signedIn; QString username = ""; if (message.hasQueryItem("signed_in")){ @@ -651,7 +655,7 @@ void Heos::readData() } else if (command.contains("sign_in")) { - qDebug(dcDenon()) << "System command sign_in:" << message.toString(); + qCDebug(dcDenon()) << "System command sign_in:" << message.toString(); if (message.hasQueryItem("signed_in")) { QString username = message.queryItemValue("un"); @@ -660,7 +664,7 @@ void Heos::readData() } // otherwise it will be command under process and we will wait for the event } else if (command.contains("sign_out")) { - qDebug(dcDenon()) << "System command sign_out:" << message.toString(); + qCDebug(dcDenon()) << "System command sign_out:" << message.toString(); emit userChanged(false, ""); } else if (command.contains("heart_beat")) { @@ -670,7 +674,7 @@ void Heos::readData() } else if (command.contains("prettify_json_response")) { } else { - qDebug(dcDenon) << "Unhandled Heos system command" << command; + qCDebug(dcDenon()) << "Unhandled Heos system command" << command; } /* 4.2 Player Commands * 4.2.1 Get Players @@ -743,7 +747,7 @@ void Heos::readData() QString artwork = dataMap.value("payload").toMap().value("image_url").toString(); QString album = dataMap.value("payload").toMap().value("album").toString(); QString sourceId = dataMap.value("payload").toMap().value("sid").toString(); - qDebug(dcDenon) << "Now playing" << playerId << sourceId << artist << album << song; + qCDebug(dcDenon()) << "Now playing" << playerId << sourceId << artist << album << song; emit nowPlayingMediaStatusReceived(playerId, sourceId, artist, album, song, artwork); } else if (command.contains("get_play_state") || command.contains("set_play_state")) { @@ -797,7 +801,7 @@ void Heos::readData() bool updateExist = payloadVariantMap.value("update").toString().contains("exist"); emit playerUpdateAvailable(playerId, updateExist); } else { - qDebug(dcDenon) << "Unhandled Heos group command" << command; + qCDebug(dcDenon()) << "Unhandled Heos group command" << command; } /* * 4.3 Group Commands @@ -815,7 +819,7 @@ void Heos::readData() } else if (command.startsWith("group")) { int groupId = 0; if (message.hasQueryItem("gid")) { - qDebug(dcDenon) << "Group id" << message.queryItemValue("gid"); + qCDebug(dcDenon()) << "Group id" << message.queryItemValue("gid"); groupId = message.queryItemValue("gid").toInt(); } if (command.contains("get_groups")) { @@ -887,7 +891,7 @@ void Heos::readData() } else if (command.contains("toggle_mute")) { } else { - qDebug(dcDenon) << "Unhandled Heos group command" << command; + qCDebug(dcDenon()) << "Unhandled Heos group command" << command; } @@ -912,12 +916,12 @@ void Heos::readData() quint32 sequenceNumber = 0; if (message.hasQueryItem("SEQUENCE")) { - qDebug(dcDenon) << "Sequence number" << message.queryItemValue("SEQUENCE"); + qCDebug(dcDenon()) << "Sequence number" << message.queryItemValue("SEQUENCE"); sequenceNumber = message.queryItemValue("SEQUENCE").toUInt(); } if (command.contains("get_music_sources") || command.contains("get_source_info")) { - qDebug(dcDenon()) << "Get music source request response received" << command; + qCDebug(dcDenon()) << "Get music source request response received" << command; QVariantList payloadVariantList = jsonDoc.toVariant().toMap().value("payload").toList(); QList musicSources; if (success) { @@ -935,7 +939,7 @@ void Heos::readData() } } else if (command.contains("browse/browse")) { - qDebug(dcDenon()) << "Browse response:" << jsonDoc.toVariant().toMap().value("payload"); + qCDebug(dcDenon()) << "Browse response:" << jsonDoc.toVariant().toMap().value("payload"); QVariantList payloadVariantList = jsonDoc.toVariant().toMap().value("payload").toList(); QString sourceId; QString containerId; @@ -947,7 +951,7 @@ void Heos::readData() } if (message.toString().contains("command under process")){ - qDebug(dcDenon()) << "Browse command is beeing processed"; + qCDebug(dcDenon()) << "Browse command is beeing processed"; return; } if (success) { @@ -961,13 +965,13 @@ void Heos::readData() source.image_url = payloadEntryVariant.toMap().value("image_url").toString(); source.type = payloadEntryVariant.toMap().value("type").toString(); source.sourceId = payloadEntryVariant.toMap().value("sid").toInt(); - qDebug(dcDenon()) << "Source" << source.name << source.type << source.sourceId << payloadEntryVariant.toMap().value("sid"); + qCDebug(dcDenon()) << "Source" << source.name << source.type << source.sourceId << payloadEntryVariant.toMap().value("sid"); //source.available = payloadEntryVariant.toMap().value("available").toString().contains("true"); //source.serviceUsername = payloadEntryVariant.toMap().value("service_username").toString(); musicSources.append(source); } else { MediaObject media; - qDebug(dcDenon()) << "Media Item" << payloadEntryVariant.toMap().value("mid").toString() << payloadEntryVariant.toMap().value("cid").toString(); + qCDebug(dcDenon()) << "Media Item" << payloadEntryVariant.toMap().value("mid").toString() << payloadEntryVariant.toMap().value("cid").toString(); media.name = payloadEntryVariant.toMap().value("name").toString(); if (payloadEntryVariant.toMap().contains("cid")) { media.containerId = payloadEntryVariant.toMap().value("cid").toString(); @@ -1016,7 +1020,7 @@ void Heos::readData() } else if (command.contains("retrieve_metadata")) { } else { - qDebug(dcDenon) << "Unhandled Heos browse command" << command; + qCDebug(dcDenon()) << "Unhandled Heos browse command" << command; } @@ -1046,7 +1050,7 @@ void Heos::readData() emit groupsChanged(); } else if (command.contains("player_state_changed")) { - qDebug(dcDenon()) << "Player state changed"; + qCDebug(dcDenon()) << "Player state changed"; if (message.hasQueryItem("pid")) { int playerId = message.queryItemValue("pid").toInt(); if (message.hasQueryItem("state")) { @@ -1062,13 +1066,13 @@ void Heos::readData() } } } else if (command.contains("player_now_playing_changed")) { - qDebug(dcDenon()) << "Player now playing changed, player id:" << message.queryItemValue("pid").toInt(); + qCDebug(dcDenon()) << "Player now playing changed, player id:" << message.queryItemValue("pid").toInt(); if (message.hasQueryItem("pid")) { int playerId = message.queryItemValue("pid").toInt(); emit playerNowPlayingChanged(playerId); } } else if (command.contains("player_now_playing_progress")) { - //qDebug(dcDenon()) << "Player now playing progress"; + //qCDebug(dcDenon()) << "Player now playing progress"; if (message.hasQueryItem("pid")) { int playerId = message.queryItemValue("pid").toInt(); int currentPossition = message.queryItemValue("cur_pos").toInt(); @@ -1076,7 +1080,7 @@ void Heos::readData() emit playerNowPlayingProgressReceived(playerId, currentPossition, duration); } } else if (command.contains("player_playback_error")) { - qDebug(dcDenon) << "Player playback error"; + qCDebug(dcDenon()) << "Player playback error"; int playerId = 0; if (message.hasQueryItem("pid")) { playerId = message.queryItemValue("pid").toInt(); @@ -1084,14 +1088,14 @@ void Heos::readData() emit playerPlaybackErrorReceived(playerId, errorMessage); } } else if (command.contains("player_queue_changed")) { - qDebug(dcDenon()) << "Player queue Changed"; + qCDebug(dcDenon()) << "Player queue Changed"; int playerId = 0; if (message.hasQueryItem("pid")) { playerId = message.queryItemValue("pid").toInt(); emit playerQueueChanged(playerId); } } else if (command.contains("player_volume_changed")) { - qDebug(dcDenon()) << "Event player volume Changed"; + qCDebug(dcDenon()) << "Event player volume Changed"; int playerId = 0; if (message.hasQueryItem("pid")) { playerId = message.queryItemValue("pid").toInt(); @@ -1111,7 +1115,7 @@ void Heos::readData() } } } else if (command.contains("repeat_mode_changed")) { - qDebug(dcDenon()) << "Repeat mode Changed"; + qCDebug(dcDenon()) << "Repeat mode Changed"; int playerId = 0; if (message.hasQueryItem("pid")) { playerId = message.queryItemValue("pid").toInt(); @@ -1129,7 +1133,7 @@ void Heos::readData() } } } else if (command.contains("shuffle_mode_changed")) { - qDebug(dcDenon()) << "Shuffle mode Changed"; + qCDebug(dcDenon()) << "Shuffle mode Changed"; int playerId = 0; if (message.hasQueryItem("pid")) { playerId = message.queryItemValue("pid").toInt(); @@ -1145,7 +1149,7 @@ void Heos::readData() } } } else if (command.contains("group_volume_changed")) { - qDebug(dcDenon()) << "Event group volume Changed"; + qCDebug(dcDenon()) << "Event group volume Changed"; int playerId = 0; if (message.hasQueryItem("gid")) { playerId = message.queryItemValue("gid").toInt(); @@ -1166,7 +1170,7 @@ void Heos::readData() } } else if (command.contains("user_changed")) { - qDebug(dcDenon()) << "Event user changed" << message.toString(); + qCDebug(dcDenon()) << "Event user changed" << message.toString(); bool signedIn; QString username; if (message.hasQueryItem("signed_out")){ @@ -1177,10 +1181,10 @@ void Heos::readData() } emit userChanged(signedIn, username); } else { - qDebug(dcDenon) << "Unhandled Heos event"; + qCDebug(dcDenon()) << "Unhandled Heos event"; } } else { - qDebug(dcDenon) << "Unhandled Heos category" << command; + qCDebug(dcDenon()) << "Unhandled Heos category" << command; } } } diff --git a/denon/integrationplugindenon.cpp b/denon/integrationplugindenon.cpp index fb15edf4..0154ff54 100644 --- a/denon/integrationplugindenon.cpp +++ b/denon/integrationplugindenon.cpp @@ -90,7 +90,7 @@ void IntegrationPluginDenon::discoverThings(ThingDiscoveryInfo *info) QString id = service.name().split("@").first(); QString name = service.name().split("@").last(); QString address = service.hostAddress().toString(); - qCDebug(dcDenon) << "service discovered" << name << "ID:" << id; + qCDebug(dcDenon()) << "service discovered" << name << "ID:" << id; if (discoveredIds.contains(id)) break; discoveredIds.append(id); @@ -135,7 +135,7 @@ void IntegrationPluginDenon::discoverThings(ThingDiscoveryInfo *info) foreach (const UpnpDeviceDescriptor &upnpThing, reply->deviceDescriptors()) { if (upnpThing.modelName().contains("HEOS", Qt::CaseSensitivity::CaseInsensitive) && upnpThing.serialNumber() != "0000001") { // child things have serial number 0000001 - qCDebug(dcDenon) << "uPnP thing found:" << upnpThing.modelDescription() << upnpThing.friendlyName() << upnpThing.hostAddress().toString() << upnpThing.modelName() << upnpThing.manufacturer() << upnpThing.serialNumber(); + qCDebug(dcDenon()) << "uPnP thing found:" << upnpThing.modelDescription() << upnpThing.friendlyName() << upnpThing.hostAddress().toString() << upnpThing.modelName() << upnpThing.manufacturer() << upnpThing.serialNumber(); m_heosIpAddresses.insert(upnpThing.serialNumber(), upnpThing.hostAddress()); ThingDescriptor descriptor(heosThingClassId, upnpThing.modelName(), upnpThing.serialNumber()); @@ -206,7 +206,7 @@ void IntegrationPluginDenon::setupThing(ThingSetupInfo *info) Thing *thing = info->thing(); if (thing->thingClassId() == AVRX1000ThingClassId) { - qCDebug(dcDenon) << "Setup AVR X1000 thing" << thing->name(); + qCDebug(dcDenon()) << "Setup AVR X1000 thing" << thing->name(); if (m_avrConnections.contains(thing->id())) { qCDebug(dcDenon()) << "Setup after reconfiguration, cleaning up ..."; @@ -251,10 +251,10 @@ void IntegrationPluginDenon::setupThing(ThingSetupInfo *info) return; } else if (thing->thingClassId() == heosThingClassId) { - qCDebug(dcDenon) << "Setup Heos connection thing" << thing->name(); + qCDebug(dcDenon()) << "Setup Heos connection thing" << thing->name(); QString serialnumber = thing->paramValue(heosThingSerialNumberParamTypeId).toString(); if (serialnumber.isEmpty()) { - qCWarning(dcDenon) << "Serial number is empty"; + qCWarning(dcDenon()) << "Serial number is empty"; info->finish(Thing::ThingErrorInvalidParameter, QT_TR_NOOP("Serial number is not set")); return; } @@ -312,7 +312,7 @@ void IntegrationPluginDenon::setupThing(ThingSetupInfo *info) } } else if (thing->thingClassId() == heosPlayerThingClassId) { - qCDebug(dcDenon) << "Setup Heos player" << thing->name(); + qCDebug(dcDenon()) << "Setup Heos player" << thing->name(); Thing *parentThing = myThings().findById(thing->parentId()); if (!parentThing) { qCWarning(dcDenon()) << "Parent thing not found for Heos player" << thing->name(); @@ -334,7 +334,7 @@ void IntegrationPluginDenon::setupThing(ThingSetupInfo *info) void IntegrationPluginDenon::thingRemoved(Thing *thing) { - qCDebug(dcDenon) << "Delete " << thing->name(); + qCDebug(dcDenon()) << "Delete " << thing->name(); if (thing->thingClassId() == AVRX1000ThingClassId) { if (m_avrConnections.contains(thing->id())) { @@ -361,7 +361,7 @@ void IntegrationPluginDenon::executeAction(ThingActionInfo *info) Thing *thing = info->thing(); Action action = info->action(); - qCDebug(dcDenon) << "Execute action" << thing->id() << action.params(); + qCDebug(dcDenon()) << "Execute action" << thing->id() << action.params(); if (thing->thingClassId() == AVRX1000ThingClassId) { AvrConnection *avrConnection = m_avrConnections.value(thing->id()); @@ -944,7 +944,7 @@ void IntegrationPluginDenon::onHeosPlayersReceived(QList heosPlaye params.append(Param(heosPlayerThingSerialNumberParamTypeId, player->serialNumber())); params.append(Param(heosPlayerThingVersionParamTypeId, player->playerVersion())); descriptor.setParams(params); - qCDebug(dcDenon) << "Found new heos player" << player->name(); + qCDebug(dcDenon()) << "Found new heos player" << player->name(); heosPlayerDescriptors.append(descriptor); } if (!heosPlayerDescriptors.isEmpty()) @@ -969,7 +969,7 @@ void IntegrationPluginDenon::onHeosPlayersReceived(QList heosPlaye void IntegrationPluginDenon::onHeosPlayerInfoRecieved(HeosPlayer *heosPlayer) { - qDebug(dcDenon()) << "Heos player info received" << heosPlayer->name() << heosPlayer->playerId() << heosPlayer->groupId(); + qCDebug(dcDenon()) << "Heos player info received" << heosPlayer->name() << heosPlayer->playerId() << heosPlayer->groupId(); m_playerBuffer.insert(heosPlayer->playerId(), heosPlayer); } @@ -1110,7 +1110,7 @@ void IntegrationPluginDenon::onHeosMusicSourcesReceived(quint32 sequenceNumber, } else { item.setThumbnail(source.image_url); } - qDebug(dcDenon()) << "Music source received:" << source.name << source.type << source.sourceId << source.image_url; + qCDebug(dcDenon()) << "Music source received:" << source.name << source.type << source.sourceId << source.image_url; } result->finish(Thing::ThingErrorNoError); } @@ -1141,7 +1141,7 @@ void IntegrationPluginDenon::onHeosBrowseRequestReceived(quint32 sequenceNumber, foreach(MediaObject media, mediaItems) { MediaBrowserItem item; item.setIcon(BrowserItem::BrowserIconMusic); - qDebug(dcDenon()) << "Adding Item" << media.name << media.mediaId << media.containerId << media.mediaType; + qCDebug(dcDenon()) << "Adding Item" << media.name << media.mediaId << media.containerId << media.mediaType; item.setDisplayName(media.name); if (media.mediaType == MEDIA_TYPE_CONTAINER) { item.setId("container=" + media.containerId + "&" + sourceId); @@ -1158,7 +1158,7 @@ void IntegrationPluginDenon::onHeosBrowseRequestReceived(quint32 sequenceNumber, foreach(MusicSourceObject source, musicSources) { MediaBrowserItem item; item.setDisplayName(source.name); - qDebug(dcDenon()) << "Adding Item" << source.name << source.sourceId; + qCDebug(dcDenon()) << "Adding Item" << source.name << source.sourceId; item.setId("source=" + QString::number(source.sourceId)); item.setIcon(BrowserItem::BrowserIconMusic); item.setExecutable(false); @@ -1209,7 +1209,7 @@ void IntegrationPluginDenon::onHeosBrowseRequestReceived(quint32 sequenceNumber, } result->finish(Thing::ThingErrorNoError); } else { - qWarning(dcDenon()) << "Pending browser result doesnt recognize" << identifier << m_pendingBrowseResult.keys(); + qCWarning(dcDenon()) << "Pending browser result doesnt recognize" << identifier << m_pendingBrowseResult.keys(); } } @@ -1224,7 +1224,7 @@ void IntegrationPluginDenon::onHeosBrowseErrorReceived(const QString &sourceId, if (m_pendingBrowseResult.contains(identifier)) { BrowseResult *result = m_pendingBrowseResult.take(identifier); - qWarning(dcDenon) << "Browse error" << errorMessage << errorId; + qCWarning(dcDenon()) << "Browse error" << errorMessage << errorId; result->finish(Thing::ThingErrorHardwareFailure, errorMessage); } } @@ -1323,7 +1323,7 @@ void IntegrationPluginDenon::browseThing(BrowseResult *result) } if (result->itemId().isEmpty()) { - qDebug(dcDenon()) << "Browse source"; + qCDebug(dcDenon()) << "Browse source"; MediaBrowserItem item; item.setId("type=group"); item.setIcon(BrowserItem::BrowserIcon::BrowserIconPackage); @@ -1341,7 +1341,7 @@ void IntegrationPluginDenon::browseThing(BrowseResult *result) if (itemQuery.hasQueryItem("group")) { //TBD list players in groups } else { - qDebug(dcDenon()) << "Browse source" << result->itemId(); + qCDebug(dcDenon()) << "Browse source" << result->itemId(); int pid = result->thing()->paramValue(heosPlayerThingPlayerIdParamTypeId).toInt(); HeosPlayer *browsingPlayer = m_playerBuffer.value(pid); foreach (GroupObject group, m_groupBuffer) { @@ -1362,7 +1362,7 @@ void IntegrationPluginDenon::browseThing(BrowseResult *result) } foreach (HeosPlayer *player, m_playerBuffer.values()) { - qDebug(dcDenon) << "Adding group item" << player->name(); + qCDebug(dcDenon()) << "Adding group item" << player->name(); if (browsingPlayer->playerId() == player->playerId()) { //player is the current browsing thing continue; } @@ -1384,14 +1384,14 @@ void IntegrationPluginDenon::browseThing(BrowseResult *result) } } else if (result->itemId().startsWith("source=")){ - qDebug(dcDenon()) << "Browse source" << result->itemId(); + qCDebug(dcDenon()) << "Browse source" << result->itemId(); QString id = result->itemId().remove("source="); heos->browseSource(id); m_pendingBrowseResult.insert(id, result); connect(result, &QObject::destroyed, this, [this, id](){ m_pendingBrowseResult.remove(id);}); } else if (result->itemId().startsWith("container=")){ - qDebug(dcDenon()) << "Browse container" << result->itemId(); + qCDebug(dcDenon()) << "Browse container" << result->itemId(); QStringList values = result->itemId().split("&"); if (values.length() == 2) { QString id = values[0].remove("container="); @@ -1413,7 +1413,7 @@ void IntegrationPluginDenon::browserItem(BrowserItemResult *result) result->finish(Thing::ThingErrorHardwareNotAvailable); return; } - qDebug(dcDenon()) << "Browse item called" << result->itemId(); + qCDebug(dcDenon()) << "Browse item called" << result->itemId(); result->item().setDisplayName("Test name"); if (m_mediaObjects.contains(result->itemId())) { @@ -1435,7 +1435,7 @@ void IntegrationPluginDenon::executeBrowserItem(BrowserActionInfo *info) } BrowserAction action = info->browserAction(); int playerId = info->thing()->paramValue(heosPlayerThingPlayerIdParamTypeId).toInt(); - qDebug(dcDenon()) << "Execute browse item called. Player Id:" << playerId << "Item ID" << action.itemId(); + qCDebug(dcDenon()) << "Execute browse item called. Player Id:" << playerId << "Item ID" << action.itemId(); if (m_mediaObjects.contains(action.itemId())) { MediaObject media = m_mediaObjects.value(action.itemId()); @@ -1445,7 +1445,7 @@ void IntegrationPluginDenon::executeBrowserItem(BrowserActionInfo *info) heos->playStation(playerId, media.sourceId, media.containerId, media.mediaId, media.name); } } else { - qWarning(dcDenon()) << "Media item not found" << action.itemId(); + qCWarning(dcDenon()) << "Media item not found" << action.itemId(); } info->finish(Thing::ThingErrorNoError); @@ -1470,7 +1470,7 @@ void IntegrationPluginDenon::executeBrowserItemAction(BrowserItemActionInfo *inf } else if(query.hasQueryItem("group")) { GroupObject group = m_groupBuffer.value(query.queryItemValue("group").toInt()); - qDebug(dcDenon()) << "Execute browse item action called, Group:" << query.queryItemValue("group").toInt() << group.name; + qCDebug(dcDenon()) << "Execute browse item action called, Group:" << query.queryItemValue("group").toInt() << group.name; QList playerIds; foreach(PlayerObject player, group.players) { playerIds.append(player.playerId); From 8809ca8d9072e081a8e0be5687df8c65e39736a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Thu, 7 Aug 2025 16:27:28 +0200 Subject: [PATCH 13/82] doorbird: Add Qt6 support --- doorbird/doorbird.cpp | 6 +++--- doorbird/doorbird.h | 8 +++----- doorbird/doorbird.pro | 2 +- doorbird/integrationplugindoorbird.cpp | 6 +++--- doorbird/integrationplugindoorbird.h | 7 ++++--- 5 files changed, 14 insertions(+), 15 deletions(-) diff --git a/doorbird/doorbird.cpp b/doorbird/doorbird.cpp index 7d1a768c..46362802 100644 --- a/doorbird/doorbird.cpp +++ b/doorbird/doorbird.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -361,7 +361,7 @@ void Doorbird::connectToEventMonitor() while (!m_readBuffer.isEmpty()) { // find next --ioboundary QString boundary = QStringLiteral("--ioboundary"); - int startIndex = m_readBuffer.indexOf(boundary); + int startIndex = m_readBuffer.indexOf(boundary.toUtf8()); if (startIndex == -1) { qCWarning(dcDoorBird) << "No meaningful data in buffer:" << m_readBuffer; if (m_readBuffer.size() > 1024) { @@ -387,7 +387,7 @@ void Doorbird::connectToEventMonitor() // At this point we have the boundary and Content-Type. Remove all of that and take the entire string to either end or next boundary m_readBuffer.remove(0, contentTypeIndex + contentType.length()); - int nextStartIndex = m_readBuffer.indexOf(boundary); + int nextStartIndex = m_readBuffer.indexOf(boundary.toUtf8()); QByteArray data; if (nextStartIndex == -1) { data = m_readBuffer; diff --git a/doorbird/doorbird.h b/doorbird/doorbird.h index e3842ab9..4390d20b 100644 --- a/doorbird/doorbird.h +++ b/doorbird/doorbird.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -37,8 +37,6 @@ #include #include -#include "network/networkaccessmanager.h" - class Doorbird : public QObject { Q_OBJECT @@ -89,7 +87,7 @@ public: void connectToEventMonitor(); private: QHostAddress m_address; - QNetworkAccessManager *m_networkAccessManager; + QNetworkAccessManager *m_networkAccessManager = nullptr; QByteArray m_readBuffer; QList m_networkRequests; @@ -103,7 +101,7 @@ signals: void requestSent(QUuid requestId, bool success); void eventReveiced(EventType eventType, bool status); - void favoritesReceived(QList favourites); + void favoritesReceived(QList favourites); void sessionIdReceived(const QString &sessionId); void liveImageReceived(QImage image); diff --git a/doorbird/doorbird.pro b/doorbird/doorbird.pro index 7efb2342..a0a583be 100644 --- a/doorbird/doorbird.pro +++ b/doorbird/doorbird.pro @@ -1,6 +1,6 @@ include(../plugins.pri) -QT += network +QT *= network gui SOURCES += \ integrationplugindoorbird.cpp \ diff --git a/doorbird/integrationplugindoorbird.cpp b/doorbird/integrationplugindoorbird.cpp index 911dbb72..fa2cb4ee 100644 --- a/doorbird/integrationplugindoorbird.cpp +++ b/doorbird/integrationplugindoorbird.cpp @@ -31,8 +31,8 @@ #include "integrationplugindoorbird.h" #include "plugininfo.h" -#include "platform/platformzeroconfcontroller.h" -#include "network/zeroconf/zeroconfserviceentry.h" +#include +#include #include #include @@ -270,7 +270,7 @@ void IntegrationPluginDoorbird::onDoorBirdEvent(Doorbird::EventType eventType, b case Doorbird::EventType::Motion: thing->setStateValue(doorBirdIsPresentStateTypeId, status); if (status) { - thing->setStateValue(doorBirdLastSeenTimeStateTypeId, QDateTime::currentDateTime().toTime_t()); + thing->setStateValue(doorBirdLastSeenTimeStateTypeId, QDateTime::currentDateTime().toSecsSinceEpoch()); } break; case Doorbird::EventType::Doorbell: diff --git a/doorbird/integrationplugindoorbird.h b/doorbird/integrationplugindoorbird.h index db82fa78..88ea15a8 100644 --- a/doorbird/integrationplugindoorbird.h +++ b/doorbird/integrationplugindoorbird.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -33,8 +33,9 @@ #include -#include "integrations/integrationplugin.h" -#include "network/zeroconf/zeroconfservicebrowser.h" +#include +#include + #include "doorbird.h" class QNetworkAccessManager; From f20a3eca837c2a0a189790588f827c8a148a3d74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Thu, 7 Aug 2025 16:28:44 +0200 Subject: [PATCH 14/82] dweetio: Add Qt6 support --- dweetio/dweetio.pro | 8 +++----- dweetio/integrationplugindweetio.cpp | 15 ++++++++------- dweetio/integrationplugindweetio.h | 4 ++-- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/dweetio/dweetio.pro b/dweetio/dweetio.pro index b4ba8d3c..75d34e20 100644 --- a/dweetio/dweetio.pro +++ b/dweetio/dweetio.pro @@ -1,11 +1,9 @@ include(../plugins.pri) -QT += network - -TARGET = $$qtLibraryTarget(nymea_integrationplugindweetio) +QT *= network SOURCES += \ - integrationplugindweetio.cpp \ + integrationplugindweetio.cpp HEADERS += \ - integrationplugindweetio.h \ + integrationplugindweetio.h diff --git a/dweetio/integrationplugindweetio.cpp b/dweetio/integrationplugindweetio.cpp index 2e410c49..f02cd8a3 100644 --- a/dweetio/integrationplugindweetio.cpp +++ b/dweetio/integrationplugindweetio.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -30,8 +30,9 @@ #include "integrationplugindweetio.h" #include "plugininfo.h" -#include "hardwaremanager.h" -#include "network/networkaccessmanager.h" + +#include +#include #include #include @@ -60,7 +61,7 @@ void IntegrationPluginDweetio::setupThing(ThingSetupInfo *info) if (info->thing()->thingClassId() == postThingClassId) { QString thing = info->thing()->paramValue(postThingThingParamTypeId).toString(); if (thing.isEmpty()){ - qDebug(dcDweetio) << "No thing name given, creating one"; + qCDebug(dcDweetio()) << "No thing name given, creating one"; thing = QUuid::createUuid().toString(); } return info->finish(Thing::ThingErrorNoError); @@ -135,7 +136,7 @@ void IntegrationPluginDweetio::postContent(const QString &content, Thing *thing, contentMap.insert(thing->paramValue(postThingContentNameParamTypeId).toString(), content); QByteArray data = QJsonDocument::fromVariant(contentMap).toJson(QJsonDocument::Compact); - qDebug(dcDweetio) << "Dweet: " << data << "Url: " << url; + qCDebug(dcDweetio()) << "Dweet: " << data << "Url: " << url; QNetworkReply *reply = hardwareManager()->networkManager()->post(request, data); m_asyncActions.insert(reply, info); @@ -155,7 +156,7 @@ void IntegrationPluginDweetio::setConnectionStatus(bool status, Thing *thing) void IntegrationPluginDweetio::processPostReply(const QVariantMap &data, Thing *thing) { QString message = data.value("this").toString(); - qDebug(dcDweetio) << "Access Reply: " << message << "Device: " << thing->name(); + qCDebug(dcDweetio()) << "Access Reply: " << message << "Device: " << thing->name(); } void IntegrationPluginDweetio::processGetReply(const QVariantMap &data, Thing *thing) @@ -165,7 +166,7 @@ void IntegrationPluginDweetio::processGetReply(const QVariantMap &data, Thing *t QString content = contentMap.value(thing->paramValue(getThingContentNameParamTypeId).toString()).toString(); thing->setStateValue(getContentStateTypeId, content); - qDebug(dcDweetio) << "Data: " << data << "Device: " << thing->name(); + qCDebug(dcDweetio()) << "Data: " << data << "Device: " << thing->name(); } void IntegrationPluginDweetio::onNetworkReplyFinished() diff --git a/dweetio/integrationplugindweetio.h b/dweetio/integrationplugindweetio.h index 3a9703e7..7d7a16b1 100644 --- a/dweetio/integrationplugindweetio.h +++ b/dweetio/integrationplugindweetio.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,7 +31,7 @@ #ifndef INTEGRATIONPLUGINDWEETIO_H #define INTEGRATIONPLUGINDWEETIO_H -#include "integrations/integrationplugin.h" +#include #include #include From 67f7a5874b37451c648a2d6dbacd68567225906a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 09:42:19 +0200 Subject: [PATCH 15/82] dynatrace: Add Qt6 support --- dynatrace/dynatrace.pro | 4 +--- dynatrace/integrationplugindynatrace.cpp | 6 ++++-- dynatrace/integrationplugindynatrace.h | 11 ++++++----- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/dynatrace/dynatrace.pro b/dynatrace/dynatrace.pro index 9ab1b668..cb381733 100644 --- a/dynatrace/dynatrace.pro +++ b/dynatrace/dynatrace.pro @@ -1,8 +1,6 @@ include(../plugins.pri) -QT += network - -TARGET = $$qtLibraryTarget(nymea_integrationplugindynatrace) +QT *= network SOURCES += \ integrationplugindynatrace.cpp \ diff --git a/dynatrace/integrationplugindynatrace.cpp b/dynatrace/integrationplugindynatrace.cpp index da646363..9d3572af 100644 --- a/dynatrace/integrationplugindynatrace.cpp +++ b/dynatrace/integrationplugindynatrace.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -30,7 +30,8 @@ #include "integrationplugindynatrace.h" #include "plugininfo.h" -#include "network/networkaccessmanager.h" + +#include #include #include @@ -369,5 +370,6 @@ void IntegrationPluginDynatrace::onConnectionChanged(bool connected) Thing *thing = myThings().findById(m_ufoConnections.key(ufo)); if (!thing) return; + thing->setStateValue(ufoConnectedStateTypeId, connected); } diff --git a/dynatrace/integrationplugindynatrace.h b/dynatrace/integrationplugindynatrace.h index cc7494be..67708731 100644 --- a/dynatrace/integrationplugindynatrace.h +++ b/dynatrace/integrationplugindynatrace.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,15 +31,16 @@ #ifndef INTEGRATIONPLUGINDYNATRACE_H #define INTEGRATIONPLUGINDYNATRACE_H -#include "plugintimer.h" -#include "integrations/integrationplugin.h" -#include "network/oauth2.h" -#include "ufo.h" +#include +#include +#include #include #include #include +#include "ufo.h" + class IntegrationPluginDynatrace : public IntegrationPlugin { Q_OBJECT From 01137cc53e7f706950bb2a0a78e375e234c9556e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 09:44:12 +0200 Subject: [PATCH 16/82] easee: Add Qt6 support --- easee/easee.pro | 2 +- easee/signalrconnection.cpp | 30 ++++++++++++++++++++++++++++++ easee/signalrconnection.h | 30 ++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 1 deletion(-) diff --git a/easee/easee.pro b/easee/easee.pro index 05cdefde..0ccef67f 100644 --- a/easee/easee.pro +++ b/easee/easee.pro @@ -1,6 +1,6 @@ include(../plugins.pri) -QT += network websockets +QT *= network websockets SOURCES += \ integrationplugineasee.cpp \ diff --git a/easee/signalrconnection.cpp b/easee/signalrconnection.cpp index a6ecab1a..dcf3fa74 100644 --- a/easee/signalrconnection.cpp +++ b/easee/signalrconnection.cpp @@ -1,3 +1,33 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2025, nymea GmbH +* Contact: contact@nymea.io +* +* This file is part of nymea. +* This project including source code and documentation is protected by +* copyright law, and remains the property of nymea GmbH. All rights, including +* reproduction, publication, editing and translation, are reserved. The use of +* this project is subject to the terms of a license agreement to be concluded +* with nymea GmbH in accordance with the terms of use of nymea GmbH, available +* under https://nymea.io/license +* +* GNU Lesser General Public License Usage +* Alternatively, this project may be redistributed and/or modified under the +* terms of the GNU Lesser General Public License as published by the Free +* Software Foundation; version 3. This project is distributed in the hope that +* it will be useful, but WITHOUT ANY WARRANTY; without even the implied +* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this project. If not, see . +* +* For any further details and any questions please contact us under +* contact@nymea.io or see our FAQ/Licensing Information on +* https://nymea.io/license/faq +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + #include "signalrconnection.h" #include diff --git a/easee/signalrconnection.h b/easee/signalrconnection.h index a81c9cc2..f0832300 100644 --- a/easee/signalrconnection.h +++ b/easee/signalrconnection.h @@ -1,3 +1,33 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2025, nymea GmbH +* Contact: contact@nymea.io +* +* This file is part of nymea. +* This project including source code and documentation is protected by +* copyright law, and remains the property of nymea GmbH. All rights, including +* reproduction, publication, editing and translation, are reserved. The use of +* this project is subject to the terms of a license agreement to be concluded +* with nymea GmbH in accordance with the terms of use of nymea GmbH, available +* under https://nymea.io/license +* +* GNU Lesser General Public License Usage +* Alternatively, this project may be redistributed and/or modified under the +* terms of the GNU Lesser General Public License as published by the Free +* Software Foundation; version 3. This project is distributed in the hope that +* it will be useful, but WITHOUT ANY WARRANTY; without even the implied +* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this project. If not, see . +* +* For any further details and any questions please contact us under +* contact@nymea.io or see our FAQ/Licensing Information on +* https://nymea.io/license/faq +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + #ifndef SIGNALRCONNECTION_H #define SIGNALRCONNECTION_H From 6acf92f22ab058527e6fae13e0ecb6d419b700ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 09:49:48 +0200 Subject: [PATCH 17/82] elgato: Add Qt6 support --- elgato/aveabulb.cpp | 26 +++++++++++++++++++++++++- elgato/aveabulb.h | 8 ++++---- elgato/elgato.pro | 8 +++----- elgato/integrationpluginelgato.cpp | 8 ++++---- elgato/integrationpluginelgato.h | 9 +++++---- 5 files changed, 41 insertions(+), 18 deletions(-) diff --git a/elgato/aveabulb.cpp b/elgato/aveabulb.cpp index 8545a3c7..f9cf4077 100644 --- a/elgato/aveabulb.cpp +++ b/elgato/aveabulb.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -68,7 +68,11 @@ bool AveaBulb::setPower(bool power) // Power off QByteArray command; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&command, QDataStream::WriteOnly); +#else QDataStream stream(&command, QIODevice::WriteOnly); +#endif stream.setByteOrder(QDataStream::LittleEndian); quint8 commandId = static_cast(ColorMessageColor); @@ -108,7 +112,11 @@ bool AveaBulb::setColor(const QColor &color) // Convert rgb to wrgb QByteArray command; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&command, QDataStream::WriteOnly); +#else QDataStream stream(&command, QIODevice::WriteOnly); +#endif stream.setByteOrder(QDataStream::LittleEndian); m_red = scaleColorValueUp(color.red()); @@ -133,7 +141,11 @@ bool AveaBulb::setBrightness(int percentage) qCDebug(dcElgato()) << "Brightness value" << percentage << "% -->" << brightnessValue; QByteArray command; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&command, QDataStream::WriteOnly); +#else QDataStream stream(&command, QIODevice::WriteOnly); +#endif stream.setByteOrder(QDataStream::LittleEndian); stream << static_cast(ColorMessageBrightness); stream << brightnessValue; @@ -216,7 +228,11 @@ bool AveaBulb::syncColor() // Convert rgb to wrgb QByteArray command; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&command, QDataStream::WriteOnly); +#else QDataStream stream(&command, QIODevice::WriteOnly); +#endif stream.setByteOrder(QDataStream::LittleEndian); quint8 commandId = static_cast(ColorMessageColor); @@ -301,7 +317,11 @@ void AveaBulb::onColorServiceStateChanged(const QLowEnergyService::ServiceState } // Enable notifications +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QLowEnergyDescriptor notificationDescriptor = m_colorCharacteristic.descriptor(QBluetoothUuid::DescriptorType::ClientCharacteristicConfiguration); +#else QLowEnergyDescriptor notificationDescriptor = m_colorCharacteristic.descriptor(QBluetoothUuid::ClientCharacteristicConfiguration); +#endif m_colorService->writeDescriptor(notificationDescriptor, QByteArray::fromHex("0100")); // Load current configuration @@ -318,7 +338,11 @@ void AveaBulb::onColorServiceCharacteristicChanged(const QLowEnergyCharacteristi qCDebug(dcElgato()) << "Color characteristic changed" << characteristic.uuid().toString() << value.toHex(); QByteArray payload = value; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&payload, QDataStream::WriteOnly); +#else QDataStream stream(&payload, QIODevice::ReadOnly); +#endif quint16 messageType; stream.setByteOrder(QDataStream::LittleEndian); stream >> messageType; diff --git a/elgato/aveabulb.h b/elgato/aveabulb.h index f84d310b..9f4b02a6 100644 --- a/elgato/aveabulb.h +++ b/elgato/aveabulb.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -35,9 +35,9 @@ #include #include -#include "typeutils.h" -#include "integrations/thing.h" -#include "hardware/bluetoothlowenergy/bluetoothlowenergydevice.h" +#include +#include +#include static QBluetoothUuid colorServiceUuid = QBluetoothUuid(QUuid("f815e810-456c-6761-746f-4d756e696368")); static QBluetoothUuid colorCharacteristicUuid = QBluetoothUuid(QUuid("f815e811-456c-6761-746f-4d756e696368")); diff --git a/elgato/elgato.pro b/elgato/elgato.pro index 758abd4c..d2b3f4c2 100644 --- a/elgato/elgato.pro +++ b/elgato/elgato.pro @@ -1,16 +1,14 @@ include(../plugins.pri) -QT += bluetooth - -TARGET = $$qtLibraryTarget(nymea_integrationpluginelgato) +QT *= bluetooth gui SOURCES += \ integrationpluginelgato.cpp \ - aveabulb.cpp \ + aveabulb.cpp HEADERS += \ integrationpluginelgato.h \ - aveabulb.h \ + aveabulb.h diff --git a/elgato/integrationpluginelgato.cpp b/elgato/integrationpluginelgato.cpp index 65961388..b95320d7 100644 --- a/elgato/integrationpluginelgato.cpp +++ b/elgato/integrationpluginelgato.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -383,9 +383,9 @@ #include "integrationpluginelgato.h" -#include "integrations/thing.h" -#include "plugininfo.h" -#include "hardware/bluetoothlowenergy/bluetoothlowenergymanager.h" +#include +#include +#include IntegrationPluginElgato::IntegrationPluginElgato() { diff --git a/elgato/integrationpluginelgato.h b/elgato/integrationpluginelgato.h index e861fb63..bbf03893 100644 --- a/elgato/integrationpluginelgato.h +++ b/elgato/integrationpluginelgato.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,10 +31,11 @@ #ifndef INTEGRATIONPLUGINELGATO_H #define INTEGRATIONPLUGINELGATO_H +#include +#include +#include + #include "aveabulb.h" -#include "plugintimer.h" -#include "integrations/integrationplugin.h" -#include "hardware/bluetoothlowenergy/bluetoothlowenergydevice.h" class IntegrationPluginElgato : public IntegrationPlugin { From da1d8158940fb831c9114b0c33edbb1bbb76b456 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 10:02:28 +0200 Subject: [PATCH 18/82] eq-3: Add Qt6 support --- eq-3/eq-3.pro | 20 ++++++++-------- eq-3/eqivabluetooth.cpp | 42 ++++++++++++++++++++++++++++++---- eq-3/eqivabluetooth.h | 6 ++--- eq-3/integrationplugineq-3.cpp | 18 +++++++++------ eq-3/integrationplugineq-3.h | 13 ++++++----- eq-3/maxcube.cpp | 17 ++++++++------ eq-3/maxcube.h | 14 ++++++------ eq-3/maxcubediscovery.cpp | 4 ++-- eq-3/maxcubediscovery.h | 10 ++++---- eq-3/maxdevice.h | 8 +------ eq-3/radiatorthermostat.h | 6 +---- eq-3/room.h | 6 ----- 12 files changed, 92 insertions(+), 72 deletions(-) diff --git a/eq-3/eq-3.pro b/eq-3/eq-3.pro index 3e44bb00..5e266379 100644 --- a/eq-3/eq-3.pro +++ b/eq-3/eq-3.pro @@ -1,24 +1,22 @@ include(../plugins.pri) -QT += network bluetooth - -TARGET = $$qtLibraryTarget(nymea_integrationplugineq-3) +QT *= network bluetooth SOURCES += \ - integrationplugineq-3.cpp \ - maxcubediscovery.cpp \ - maxcube.cpp \ - maxdevice.cpp \ + integrationplugineq-3.cpp \ + maxcubediscovery.cpp \ + maxcube.cpp \ + maxdevice.cpp \ room.cpp \ wallthermostat.cpp \ radiatorthermostat.cpp \ eqivabluetooth.cpp HEADERS += \ - integrationplugineq-3.h \ - maxcubediscovery.h \ - maxcube.h \ - maxdevice.h \ + integrationplugineq-3.h \ + maxcubediscovery.h \ + maxcube.h \ + maxdevice.h \ room.h \ wallthermostat.h \ radiatorthermostat.h \ diff --git a/eq-3/eqivabluetooth.cpp b/eq-3/eqivabluetooth.cpp index e84c0ac6..e600d962 100644 --- a/eq-3/eqivabluetooth.cpp +++ b/eq-3/eqivabluetooth.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -166,7 +166,11 @@ bool EqivaBluetooth::locked() const int EqivaBluetooth::setLocked(bool locked) { QByteArray data; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&data, QDataStream::WriteOnly); +#else QDataStream stream(&data, QIODevice::WriteOnly); +#endif stream << commandLock; stream << (locked ? valueOn : valueOff); return enqueue("SetLocked", data); @@ -180,7 +184,11 @@ bool EqivaBluetooth::boostEnabled() const int EqivaBluetooth::setBoostEnabled(bool enabled) { QByteArray data; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&data, QDataStream::WriteOnly); +#else QDataStream stream(&data, QIODevice::WriteOnly); +#endif stream << commandBoost; stream << (enabled ? valueOn : valueOff); return enqueue("SetBoostEnabled", data); @@ -194,7 +202,11 @@ qreal EqivaBluetooth::targetTemperature() const int EqivaBluetooth::setTargetTemperature(qreal targetTemperature) { QByteArray data; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&data, QDataStream::WriteOnly); +#else QDataStream stream(&data, QIODevice::WriteOnly); +#endif stream << commandSetTemp; if (targetTemperature == 4.5) { stream << static_cast(4.5 * 2); // 4.5 degrees is off @@ -211,8 +223,12 @@ EqivaBluetooth::Mode EqivaBluetooth::mode() const int EqivaBluetooth::setMode(EqivaBluetooth::Mode mode) { - QByteArray data; + QByteArray data; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&data, QDataStream::WriteOnly); +#else QDataStream stream(&data, QIODevice::WriteOnly); +#endif stream << commandSetMode; switch (mode) { case ModeAuto: @@ -259,7 +275,7 @@ void EqivaBluetooth::controllerStateChanged(const QLowEnergyController::Controll if (state == QLowEnergyController::UnconnectedState) { int delay = qMin(m_reconnectAttempt, 30); - qWarning(dcEQ3()) << m_name << "Eqiva thing disconnected. Reconnecting in" << delay << "sec"; + qCWarning(dcEQ3()) << m_name << "Eqiva thing disconnected. Reconnecting in" << delay << "sec"; m_available = false; emit availableChanged(); @@ -312,7 +328,11 @@ void EqivaBluetooth::controllerStateChanged(const QLowEnergyController::Controll qCDebug(dcEQ3()) << m_name << "Characteristic read:" << info.name() << info.uuid() << value.toHex(); QByteArray data(value); - QDataStream stream(&data, QIODevice::ReadOnly); +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&data, QDataStream::WriteOnly); +#else + QDataStream stream(&data, QIODevice::WriteOnly); +#endif quint8 header; stream >> header; quint8 notificationType; @@ -371,7 +391,11 @@ void EqivaBluetooth::serviceStateChanged(QLowEnergyService::ServiceState newStat // Enable notifications QLowEnergyCharacteristic characteristic = m_eqivaService->characteristic(notificationCharacteristicUuid); +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QLowEnergyDescriptor notificationDescriptor = characteristic.descriptor(QBluetoothUuid::DescriptorType::ClientCharacteristicConfiguration); +#else QLowEnergyDescriptor notificationDescriptor = characteristic.descriptor(QBluetoothUuid::ClientCharacteristicConfiguration); +#endif m_eqivaService->writeDescriptor(notificationDescriptor, QByteArray::fromHex("0100")); } @@ -384,7 +408,11 @@ void EqivaBluetooth::characteristicChanged(const QLowEnergyCharacteristic &info, m_refreshTimer.start(); QByteArray data(value); - QDataStream stream(&data, QIODevice::ReadOnly); +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&data, QDataStream::WriteOnly); +#else + QDataStream stream(&data, QIODevice::WriteOnly); +#endif quint8 header; stream >> header; if (header == notifyHeader) { @@ -470,7 +498,11 @@ void EqivaBluetooth::sendDate() QDateTime now = QDateTime::currentDateTime(); QByteArray data; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&data, QDataStream::WriteOnly); +#else QDataStream stream(&data, QIODevice::WriteOnly); +#endif stream << commandSetDate; stream << static_cast(now.date().year() - 2000); stream << static_cast(now.date().month()); diff --git a/eq-3/eqivabluetooth.h b/eq-3/eqivabluetooth.h index da458e91..c1b67356 100644 --- a/eq-3/eqivabluetooth.h +++ b/eq-3/eqivabluetooth.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -33,7 +33,7 @@ #include -#include "hardware/bluetoothlowenergy/bluetoothlowenergymanager.h" +#include class EqivaBluetooth : public QObject @@ -145,7 +145,7 @@ private slots: void deviceDiscoveryDone(); signals: - void finished(const QList &results); + void finished(const QList &results); private: BluetoothLowEnergyManager *m_bluetoothManager = nullptr; diff --git a/eq-3/integrationplugineq-3.cpp b/eq-3/integrationplugineq-3.cpp index 84357963..8a5df228 100644 --- a/eq-3/integrationplugineq-3.cpp +++ b/eq-3/integrationplugineq-3.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -29,12 +29,14 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "integrationplugineq-3.h" - -#include "integrations/thing.h" -#include "types/param.h" -#include "plugininfo.h" - +#include "maxcubediscovery.h" #include "eqivabluetooth.h" +#include "plugininfo.h" +#include "maxcube.h" + +#include +#include +#include #include @@ -169,7 +171,9 @@ void IntegrationPluginEQ3::setupThing(ThingSetupInfo *info) qCDebug(dcEQ3) << "Setup thing" << thing->params(); if(thing->thingClassId() == cubeThingClassId){ - MaxCube *cube = new MaxCube(this,thing->paramValue(cubeThingSerialParamTypeId).toString(),QHostAddress(thing->paramValue(cubeThingHostParamTypeId).toString()),thing->paramValue(cubeThingPortParamTypeId).toInt()); + MaxCube *cube = new MaxCube(this, thing->paramValue(cubeThingSerialParamTypeId).toString(), + QHostAddress(thing->paramValue(cubeThingHostParamTypeId).toString()), + thing->paramValue(cubeThingPortParamTypeId).toInt()); m_cubes.insert(cube,thing); connect(cube, &MaxCube::cubeConnectionStatusChanged, this, &IntegrationPluginEQ3::cubeConnectionStatusChanged); diff --git a/eq-3/integrationplugineq-3.h b/eq-3/integrationplugineq-3.h index f1bdab49..40ce7da5 100644 --- a/eq-3/integrationplugineq-3.h +++ b/eq-3/integrationplugineq-3.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,13 +31,14 @@ #ifndef INTEGRATIONPLUGINEQ3_H #define INTEGRATIONPLUGINEQ3_H -#include "integrations/integrationplugin.h" -#include "maxcubediscovery.h" -#include "plugintimer.h" -#include "eqivabluetooth.h" +#include +#include #include +#include "eqivabluetooth.h" + +class MaxCube; class QNetworkReply; class IntegrationPluginEQ3: public IntegrationPlugin @@ -70,7 +71,7 @@ private: QList m_config; QHash m_cubes; - QHash m_eqivaDevices; + QHash m_eqivaDevices; private slots: void onPluginTimer(); diff --git a/eq-3/maxcube.cpp b/eq-3/maxcube.cpp index 809fa262..e10da4ee 100644 --- a/eq-3/maxcube.cpp +++ b/eq-3/maxcube.cpp @@ -37,12 +37,15 @@ MaxCube::MaxCube(QObject *parent, QString serialNumber, QHostAddress hostAdress, m_cubeInitialized = false; - connect(this,SIGNAL(stateChanged(QAbstractSocket::SocketState)),this,SLOT(connectionStateChanged(QAbstractSocket::SocketState))); + connect(this, &MaxCube::stateChanged, this, &MaxCube::connectionStateChanged); + connect(this, &MaxCube::readyRead, this, &MaxCube::onReadyRead); + connect(this, &MaxCube::cubeDataAvailable, this, &MaxCube::processCubeData); +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) + connect(this, &MaxCube::errorOccurred, this, &MaxCube::onTcpError); +#else + connect(this, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onTcpError(QAbstractSocket::SocketError))); +#endif - connect(this,SIGNAL(readyRead()),this,SLOT(onReadyRead())); - connect(this,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(error(QAbstractSocket::SocketError))); - - connect(this,SIGNAL(cubeDataAvailable(QByteArray)),this,SLOT(processCubeData(QByteArray))); } QString MaxCube::serialNumber() const @@ -698,7 +701,7 @@ quint8 MaxCube::generateCommandId() return cmd++; } -void MaxCube::connectionStateChanged(const QAbstractSocket::SocketState &socketState) +void MaxCube::connectionStateChanged(QAbstractSocket::SocketState socketState) { switch (socketState) { case QAbstractSocket::ConnectedState: @@ -715,7 +718,7 @@ void MaxCube::connectionStateChanged(const QAbstractSocket::SocketState &socketS } } -void MaxCube::error(QAbstractSocket::SocketError error) +void MaxCube::onTcpError(QAbstractSocket::SocketError error) { qCWarning(dcEQ3) << "connection error (" << m_serialNumber << "): " << error; emit cubeConnectionStatusChanged(false); diff --git a/eq-3/maxcube.h b/eq-3/maxcube.h index 749a21ed..4ea49725 100644 --- a/eq-3/maxcube.h +++ b/eq-3/maxcube.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -36,11 +36,11 @@ #include #include -#include "maxdevice.h" +#include + #include "room.h" #include "wallthermostat.h" #include "radiatorthermostat.h" -#include "integrations/integrationplugin.h" class MaxCube : public QTcpSocket { @@ -79,8 +79,8 @@ public: bool portalEnabeld() const; - QList wallThermostatList(); - QList radiatorThermostatList(); + QList wallThermostatList(); + QList radiatorThermostatList(); QList roomList(); @@ -120,8 +120,8 @@ signals: void commandActionFinished(bool succeeded, int commandId); private slots: - void connectionStateChanged(const QAbstractSocket::SocketState &socketState); - void error(QAbstractSocket::SocketError error); + void connectionStateChanged(SocketState socketState); + void onTcpError(QAbstractSocket::SocketError error); void onReadyRead(); void processCubeData(const QByteArray &data); diff --git a/eq-3/maxcubediscovery.cpp b/eq-3/maxcubediscovery.cpp index 855aa64a..33f04d51 100644 --- a/eq-3/maxcubediscovery.cpp +++ b/eq-3/maxcubediscovery.cpp @@ -42,8 +42,8 @@ MaxCubeDiscovery::MaxCubeDiscovery(QObject *parent) : m_timeout = new QTimer(this); m_timeout->setSingleShot(true); - connect(m_udpSocket,SIGNAL(readyRead()),this,SLOT(readData())); - connect(m_timeout,SIGNAL(timeout()),this,SLOT(discoverTimeout())); + connect(m_udpSocket, &QUdpSocket::readyRead, this, &MaxCubeDiscovery::readData); + connect(m_timeout, &QTimer::timeout, this, &MaxCubeDiscovery::discoverTimeout); } void MaxCubeDiscovery::detectCubes() diff --git a/eq-3/maxcubediscovery.h b/eq-3/maxcubediscovery.h index 46e41d76..71ba2e95 100644 --- a/eq-3/maxcubediscovery.h +++ b/eq-3/maxcubediscovery.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -36,8 +36,6 @@ #include #include -#include "maxcube.h" - class MaxCubeDiscovery : public QObject { Q_OBJECT @@ -60,11 +58,11 @@ private slots: void discoverTimeout(); signals: - void cubesDetected(const QList &cubeList); + void cubesDetected(const QList &cubeList); private: - QUdpSocket *m_udpSocket; - QTimer *m_timeout; + QUdpSocket *m_udpSocket = nullptr; + QTimer *m_timeout = nullptr; quint16 m_port; diff --git a/eq-3/maxdevice.h b/eq-3/maxdevice.h index af0d1430..03d974c5 100644 --- a/eq-3/maxdevice.h +++ b/eq-3/maxdevice.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -33,8 +33,6 @@ #include -#include "room.h" - class MaxDevice : public QObject { Q_OBJECT @@ -87,10 +85,6 @@ private: QString m_roomName; bool m_batteryOk; -signals: - -public slots: - }; #endif // MAXDEVICE_H diff --git a/eq-3/radiatorthermostat.h b/eq-3/radiatorthermostat.h index 2f6e5811..f603012a 100644 --- a/eq-3/radiatorthermostat.h +++ b/eq-3/radiatorthermostat.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -147,10 +147,6 @@ private: int m_valvePosition; double m_setpointTemperature; -signals: - -public slots: - }; #endif // RADIATORTHERMOSTAT_H diff --git a/eq-3/room.h b/eq-3/room.h index c0e33a8c..79320f41 100644 --- a/eq-3/room.h +++ b/eq-3/room.h @@ -53,12 +53,6 @@ private: QString m_roomName; QByteArray m_groupRfAddress; -signals: - - - -public slots: - }; #endif // ROOM_H From 725b2d0fa8e7030261a012b243b98b2ac25c02fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 10:03:39 +0200 Subject: [PATCH 19/82] espsomfyrts: Add Qt6 support --- espsomfyrts/espsomfyrts.pro | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/espsomfyrts/espsomfyrts.pro b/espsomfyrts/espsomfyrts.pro index e0e85d66..0a994c8d 100644 --- a/espsomfyrts/espsomfyrts.pro +++ b/espsomfyrts/espsomfyrts.pro @@ -1,13 +1,13 @@ include(../plugins.pri) -QT += network websockets +QT *= network websockets SOURCES += \ espsomfyrts.cpp \ espsomfyrtsdiscovery.cpp \ - integrationpluginespsomfyrts.cpp \ + integrationpluginespsomfyrts.cpp HEADERS += \ espsomfyrts.h \ espsomfyrtsdiscovery.h \ - integrationpluginespsomfyrts.h \ + integrationpluginespsomfyrts.h From a06333719ba26dc55c733356859a76cb1e20ff82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 10:08:55 +0200 Subject: [PATCH 20/82] espuino: Add Qt6 support --- espuino/espuino.pro | 3 +-- espuino/integrationpluginespuino.cpp | 24 +++++++++++------------- espuino/integrationpluginespuino.h | 10 +++++----- 3 files changed, 17 insertions(+), 20 deletions(-) diff --git a/espuino/espuino.pro b/espuino/espuino.pro index efefd13f..a1a5d94f 100644 --- a/espuino/espuino.pro +++ b/espuino/espuino.pro @@ -1,7 +1,6 @@ include(../plugins.pri) -QT += network \ - websockets +QT *= network websockets PKGCONFIG += nymea-mqtt diff --git a/espuino/integrationpluginespuino.cpp b/espuino/integrationpluginespuino.cpp index 42d3054b..dfe79384 100644 --- a/espuino/integrationpluginespuino.cpp +++ b/espuino/integrationpluginespuino.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2022, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -30,15 +30,13 @@ #include "integrationpluginespuino.h" -#include "integrations/integrationplugin.h" - #include "plugininfo.h" -#include "network/networkaccessmanager.h" -#include "network/mqtt/mqttprovider.h" -#include "network/mqtt/mqttchannel.h" -#include "network/zeroconf/zeroconfservicebrowser.h" -#include "platform/platformzeroconfcontroller.h" +#include +#include +#include +#include +#include #include @@ -46,6 +44,7 @@ #include #include #include +#include void IntegrationPluginEspuino::init() { @@ -55,10 +54,9 @@ void IntegrationPluginEspuino::init() void IntegrationPluginEspuino::discoverThings(ThingDiscoveryInfo *info) { foreach (const ZeroConfServiceEntry &entry, m_zeroConfBrowser->serviceEntries()) { - QRegExp match("espuino.*"); - if (!match.exactMatch(entry.name())) { + + if (!QRegularExpression("espuino.*").match(entry.name()).hasMatch()) continue; - } qCDebug(dcESPuino()) << "Found device:" << entry; ThingDescriptor descriptor(info->thingClassId(), entry.hostName(), entry.hostAddress().toString()); @@ -421,7 +419,7 @@ void IntegrationPluginEspuino::browseThing(BrowseResult *result) void IntegrationPluginEspuino::browseThing(BrowseResult *result, const QString &path) { - QUrl url(QString("http://%1/explorer?path=%2").arg(getHost(result->thing())).arg(path.isEmpty() ? "/" : path)); + QUrl url(QString("http://%1/explorer?path=%2").arg(getHost(result->thing()), path.isEmpty() ? "/" : path)); QNetworkRequest request(url); QNetworkReply *reply = hardwareManager()->networkManager()->get(request); connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater); @@ -450,7 +448,7 @@ void IntegrationPluginEspuino::browseThing(BrowseResult *result, const QString & if (variantMap.value("dir").toBool()) { id.addQueryItem("playmode", QString::number(5)); id.addQueryItem("type", "dir"); - } else if (variantMap.value("name").toString().contains(QRegExp("\\.(:?mp3|ogg|wav|wma|acc|m4a|flac)$", Qt::CaseInsensitive))) { + } else if (variantMap.value("name").toString().contains(QRegularExpression("\\.(:?mp3|ogg|wav|wma|acc|m4a|flac)$", QRegularExpression::CaseInsensitiveOption))) { id.addQueryItem("playmode", QString::number(1)); id.addQueryItem("type", "audiofile"); } else if (variantMap.value("name").toString().endsWith(".m3u", Qt::CaseInsensitive)) { diff --git a/espuino/integrationpluginespuino.h b/espuino/integrationpluginespuino.h index 3e4d224c..87b171f0 100644 --- a/espuino/integrationpluginespuino.h +++ b/espuino/integrationpluginespuino.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2022, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,8 +31,8 @@ #ifndef INTEGRATIONPLUGINESPUINO_H #define INTEGRATIONPLUGINESPUINO_H -#include "integrations/integrationplugin.h" -#include "plugintimer.h" +#include +#include #include @@ -69,8 +69,8 @@ private slots: private: QString getHost(Thing *thing) const; - ZeroConfServiceBrowser *m_zeroConfBrowser; - QHash m_mqttChannels; + ZeroConfServiceBrowser *m_zeroConfBrowser = nullptr; + QHash m_mqttChannels; QHash m_ipAddressParamTypeMap; QMap> m_pendingActions; }; From 3e2dc2940a89d09fe9b0ad38aa7692ab701425a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 10:14:25 +0200 Subject: [PATCH 21/82] evbox: Add Qt6 support --- evbox/evbox.pro | 4 +-- evbox/evboxdiscovery.cpp | 39 ------------------------ evbox/evboxdiscovery.h | 51 -------------------------------- evbox/evboxport.cpp | 30 +++++++++---------- evbox/integrationpluginevbox.cpp | 4 +-- evbox/integrationpluginevbox.h | 13 ++++---- 6 files changed, 23 insertions(+), 118 deletions(-) delete mode 100644 evbox/evboxdiscovery.cpp delete mode 100644 evbox/evboxdiscovery.h diff --git a/evbox/evbox.pro b/evbox/evbox.pro index e149ca78..9738dcb4 100644 --- a/evbox/evbox.pro +++ b/evbox/evbox.pro @@ -1,13 +1,11 @@ include(../plugins.pri) -QT += network serialport +QT *= network serialport SOURCES += \ - evboxdiscovery.cpp \ evboxport.cpp \ integrationpluginevbox.cpp \ HEADERS += \ - evboxdiscovery.h \ evboxport.h \ integrationpluginevbox.h \ diff --git a/evbox/evboxdiscovery.cpp b/evbox/evboxdiscovery.cpp deleted file mode 100644 index 72787fb5..00000000 --- a/evbox/evboxdiscovery.cpp +++ /dev/null @@ -1,39 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* -* Copyright 2013 - 2023, nymea GmbH -* Contact: contact@nymea.io -* -* This file is part of nymea. -* This project including source code and documentation is protected by -* copyright law, and remains the property of nymea GmbH. All rights, including -* reproduction, publication, editing and translation, are reserved. The use of -* this project is subject to the terms of a license agreement to be concluded -* with nymea GmbH in accordance with the terms of use of nymea GmbH, available -* under https://nymea.io/license -* -* GNU Lesser General Public License Usage -* Alternatively, this project may be redistributed and/or modified under the -* terms of the GNU Lesser General Public License as published by the Free -* Software Foundation; version 3. This project is distributed in the hope that -* it will be useful, but WITHOUT ANY WARRANTY; without even the implied -* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public License -* along with this project. If not, see . -* -* For any further details and any questions please contact us under -* contact@nymea.io or see our FAQ/Licensing Information on -* https://nymea.io/license/faq -* -* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -#include "evboxdiscovery.h" - -EVBoxDiscovery::EVBoxDiscovery(EVBoxPort *evboxPort, QObject *parent) - : QObject{parent}, - m_port{evboxPort} -{ - -} - diff --git a/evbox/evboxdiscovery.h b/evbox/evboxdiscovery.h deleted file mode 100644 index edcffd14..00000000 --- a/evbox/evboxdiscovery.h +++ /dev/null @@ -1,51 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* -* Copyright 2013 - 2023, nymea GmbH -* Contact: contact@nymea.io -* -* This file is part of nymea. -* This project including source code and documentation is protected by -* copyright law, and remains the property of nymea GmbH. All rights, including -* reproduction, publication, editing and translation, are reserved. The use of -* this project is subject to the terms of a license agreement to be concluded -* with nymea GmbH in accordance with the terms of use of nymea GmbH, available -* under https://nymea.io/license -* -* GNU Lesser General Public License Usage -* Alternatively, this project may be redistributed and/or modified under the -* terms of the GNU Lesser General Public License as published by the Free -* Software Foundation; version 3. This project is distributed in the hope that -* it will be useful, but WITHOUT ANY WARRANTY; without even the implied -* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public License -* along with this project. If not, see . -* -* For any further details and any questions please contact us under -* contact@nymea.io or see our FAQ/Licensing Information on -* https://nymea.io/license/faq -* -* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -#ifndef EVBOXDISCOVERY_H -#define EVBOXDISCOVERY_H - -#include -#include "evboxport.h" - -class EVBoxDiscovery : public QObject -{ - Q_OBJECT -public: - explicit EVBoxDiscovery(EVBoxPort *evboxPort, QObject *parent = nullptr); - -signals: - - -private: - EVBoxPort *m_port = nullptr; - -}; - -#endif // EVBOXDISCOVERY_H diff --git a/evbox/evboxport.cpp b/evbox/evboxport.cpp index 8c60a452..9f8114c5 100644 --- a/evbox/evboxport.cpp +++ b/evbox/evboxport.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2023, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -30,17 +30,14 @@ #include "evboxport.h" +#include #include #include "extern-plugininfo.h" - -#include - #define STX 0x02 #define ETX 0x03 - EVBoxPort::EVBoxPort(const QString &portName, QObject *parent) : QObject{parent} { @@ -51,8 +48,11 @@ EVBoxPort::EVBoxPort(const QString &portName, QObject *parent) m_serialPort->setParity(QSerialPort::NoParity); connect(m_serialPort, &QSerialPort::readyRead, this, &EVBoxPort::onReadyRead); - +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + connect(m_serialPort, &QSerialPort::errorOccurred, this, [this](){ +#else connect(m_serialPort, static_cast(&QSerialPort::error), this, [=](){ +#endif qCWarning(dcEVBox()) << "Serial Port error" << m_serialPort->error() << m_serialPort->errorString(); if (m_serialPort->error() != QSerialPort::NoError) { if (m_serialPort->isOpen()) { @@ -262,7 +262,7 @@ void EVBoxPort::processQueue() commandData += "80"; // Dst addr commandData += "A0"; // Sender address - commandData += QString::number(cmd.command); + commandData += QString::number(cmd.command).toUtf8(); qCDebug(dcEVBox()) << "Sending command" << cmd.command << "to" << cmd.serial << "MaxCurrent:" << cmd.maxChargingCurrent; @@ -272,7 +272,7 @@ void EVBoxPort::processQueue() processQueue(); return; } - commandData += cmd.serial; + commandData += cmd.serial.toUtf8(); // The content of the “information module” is 16 bytes in size and not defined. ¯\_(ツ)_/¯ commandData += "00112233445566778899AABBCCDDEEFF"; @@ -281,16 +281,16 @@ void EVBoxPort::processQueue() } - commandData += QString("%1").arg(cmd.maxChargingCurrent * 10, 4, 10, QChar('0')); - commandData += QString("%1").arg(cmd.maxChargingCurrent * 10, 4, 10, QChar('0')); - commandData += QString("%1").arg(cmd.maxChargingCurrent * 10, 4, 10, QChar('0')); - commandData += QString("%1").arg(cmd.timeout, 4, 10, QChar('0')); + commandData += QString("%1").arg(cmd.maxChargingCurrent * 10, 4, 10, QChar('0')).toUtf8(); + commandData += QString("%1").arg(cmd.maxChargingCurrent * 10, 4, 10, QChar('0')).toUtf8(); + commandData += QString("%1").arg(cmd.maxChargingCurrent * 10, 4, 10, QChar('0')).toUtf8(); + commandData += QString("%1").arg(cmd.timeout, 4, 10, QChar('0')).toUtf8(); // If we fail to refresh the wallbox after the timeout, it shall turn off, which is what we'll use as default // when we don't know what its set to (as we can't read it). // Hence we do *not* cache the power and maxChargingCurrent states for this one - commandData += QString("%1").arg(6, 4, 10, QChar('0')); - commandData += QString("%1").arg(6, 4, 10, QChar('0')); - commandData += QString("%1").arg(6, 4, 10, QChar('0')); + commandData += QString("%1").arg(6, 4, 10, QChar('0')).toUtf8(); + commandData += QString("%1").arg(6, 4, 10, QChar('0')).toUtf8(); + commandData += QString("%1").arg(6, 4, 10, QChar('0')).toUtf8(); commandData += createChecksum(commandData); diff --git a/evbox/integrationpluginevbox.cpp b/evbox/integrationpluginevbox.cpp index de807a91..94109a00 100644 --- a/evbox/integrationpluginevbox.cpp +++ b/evbox/integrationpluginevbox.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2022, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -28,10 +28,8 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - #include "integrationpluginevbox.h" #include "plugininfo.h" -#include "plugintimer.h" #include "evboxport.h" #include diff --git a/evbox/integrationpluginevbox.h b/evbox/integrationpluginevbox.h index c1df0234..2104b5e1 100644 --- a/evbox/integrationpluginevbox.h +++ b/evbox/integrationpluginevbox.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2022, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,11 +31,10 @@ #ifndef INTEGRATIONPLUGINEVBOX_H #define INTEGRATIONPLUGINEVBOX_H -#include "integrations/integrationplugin.h" - -#include "evboxport.h" +#include #include "extern-plugininfo.h" +#include "evboxport.h" #include #include @@ -63,9 +62,9 @@ private: void finishPendingAction(Thing *thing); private: - QHash m_ports; - QHash> m_pendingActions; - QHash m_waitingForResponses; + QHash m_ports; + QHash> m_pendingActions; + QHash m_waitingForResponses; PluginTimer *m_timer = nullptr; }; From d46177e1ebe854a8f5238f5168de06ff61edb1d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 13:32:16 +0200 Subject: [PATCH 22/82] flowercare: Add Qt6 support --- flowercare/flowercare.cpp | 30 +++++++++++++++++++++- flowercare/flowercare.h | 4 +-- flowercare/flowercare.pro | 4 +-- flowercare/integrationpluginflowercare.cpp | 6 +++-- flowercare/integrationpluginflowercare.h | 8 +++--- 5 files changed, 40 insertions(+), 12 deletions(-) diff --git a/flowercare/flowercare.cpp b/flowercare/flowercare.cpp index 7e51b328..954633ea 100644 --- a/flowercare/flowercare.cpp +++ b/flowercare/flowercare.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -89,7 +89,11 @@ void FlowerCare::onSensorServiceStateChanged(const QLowEnergyService::ServiceSta } QByteArray value = batteryFirmwareCharacteristic.value(); +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&value, QDataStream::ReadOnly); +#else QDataStream stream(&value, QIODevice::ReadOnly); +#endif stream.setByteOrder(QDataStream::LittleEndian); stream >> m_batteryLevel; @@ -110,7 +114,11 @@ void FlowerCare::onSensorServiceStateChanged(const QLowEnergyService::ServiceSta } // Enable notifications +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QLowEnergyDescriptor notificationDescriptor = m_sensorDataCharacteristic.descriptor(QBluetoothUuid::DescriptorType::ClientCharacteristicConfiguration); +#else QLowEnergyDescriptor notificationDescriptor = m_sensorDataCharacteristic.descriptor(QBluetoothUuid::ClientCharacteristicConfiguration); +#endif m_sensorService->writeDescriptor(notificationDescriptor, QByteArray::fromHex("0100")); // Read the data manually @@ -122,7 +130,11 @@ void FlowerCare::onSensorServiceStateChanged(const QLowEnergyService::ServiceSta void FlowerCare::onSensorServiceCharacteristicRead(const QLowEnergyCharacteristic &characteristic, const QByteArray &value) { +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + qCDebug(dcFlowerCare()) << "Characteristic read" << characteristic.uuid().toString() << value.toHex(); +#else qCDebug(dcFlowerCare()) << "Characteristic read" << QString::number(characteristic.handle(), 16) << value.toHex(); +#endif if (characteristic != m_sensorDataCharacteristic) { return; } @@ -131,7 +143,11 @@ void FlowerCare::onSensorServiceCharacteristicRead(const QLowEnergyCharacteristi void FlowerCare::onSensorServiceCharacteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &value) { +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + qCDebug(dcFlowerCare()) << "Notification received" << characteristic.uuid().toString() << value.toHex(); +#else qCDebug(dcFlowerCare()) << "Notification received" << QString::number(characteristic.handle(), 16) << value.toHex(); +#endif if (characteristic != m_sensorDataCharacteristic) { return; } @@ -142,9 +158,17 @@ void FlowerCare::onSensorServiceCharacteristicChanged(const QLowEnergyCharacteri void FlowerCare::printServiceDetails(QLowEnergyService *service) const { foreach (const QLowEnergyCharacteristic &characteristic, service->characteristics()) { +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + qCDebug(dcFlowerCare()).nospace() << "C: --> " << characteristic.uuid().toString() << " (" << " Name: " << characteristic.name() << "): " << characteristic.value() << ", " << characteristic.value().toHex(); +#else qCDebug(dcFlowerCare()).nospace() << "C: --> " << characteristic.uuid().toString() << " (" << characteristic.handle() << " Name: " << characteristic.name() << "): " << characteristic.value() << ", " << characteristic.value().toHex(); +#endif foreach (const QLowEnergyDescriptor &descriptor, characteristic.descriptors()) { +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + qCDebug(dcFlowerCare()).nospace() << "D: --> " << descriptor.uuid().toString() << " (" << " Name: " << descriptor.name() << "): " << descriptor.value() << ", " << descriptor.value().toHex(); +#else qCDebug(dcFlowerCare()).nospace() << "D: --> " << descriptor.uuid().toString() << " (" << descriptor.handle() << " Name: " << descriptor.name() << "): " << descriptor.value() << ", " << descriptor.value().toHex(); +#endif } } } @@ -152,7 +176,11 @@ void FlowerCare::printServiceDetails(QLowEnergyService *service) const void FlowerCare::processSensorData(const QByteArray &data) { QByteArray copy = data; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(©, QDataStream::ReadOnly); +#else QDataStream stream(©, QIODevice::ReadOnly); +#endif stream.setByteOrder(QDataStream::LittleEndian); qint16 temp; stream >> temp; diff --git a/flowercare/flowercare.h b/flowercare/flowercare.h index 2652fa1a..e4c1ec26 100644 --- a/flowercare/flowercare.h +++ b/flowercare/flowercare.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -33,7 +33,7 @@ #include -#include "hardware/bluetoothlowenergy/bluetoothlowenergydevice.h" +#include static QBluetoothUuid sensorServiceUuid = QBluetoothUuid(QUuid("00001204-0000-1000-8000-00805f9b34fb")); diff --git a/flowercare/flowercare.pro b/flowercare/flowercare.pro index da4459f9..8ca79bdd 100644 --- a/flowercare/flowercare.pro +++ b/flowercare/flowercare.pro @@ -1,8 +1,6 @@ include(../plugins.pri) -QT += bluetooth - -TARGET = $$qtLibraryTarget(nymea_integrationpluginflowercare) +QT *= bluetooth SOURCES += \ integrationpluginflowercare.cpp \ diff --git a/flowercare/integrationpluginflowercare.cpp b/flowercare/integrationpluginflowercare.cpp index 4f9c1271..46757251 100644 --- a/flowercare/integrationpluginflowercare.cpp +++ b/flowercare/integrationpluginflowercare.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -37,8 +37,10 @@ * {0000fe95-0000-1000-8000-00805f9b34fb} * {0000fef5-0000-1000-8000-00805f9b34fb} */ + +#include + #include "plugininfo.h" -#include "hardware/bluetoothlowenergy/bluetoothlowenergymanager.h" #include "integrationpluginflowercare.h" #include "flowercare.h" diff --git a/flowercare/integrationpluginflowercare.h b/flowercare/integrationpluginflowercare.h index 96184d83..589f909e 100644 --- a/flowercare/integrationpluginflowercare.h +++ b/flowercare/integrationpluginflowercare.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,12 +31,12 @@ #ifndef INTEGRATIONPLUGINFLOWERCARE_H #define INTEGRATIONPLUGINFLOWERCARE_H +#include +#include +#include #include #include -#include "integrations/integrationplugin.h" -#include "plugintimer.h" -#include "hardware/bluetoothlowenergy/bluetoothlowenergydevice.h" class FlowerCare; From d49f9ddbdfa9b2b6ffa5b77fac4dc2d3c0fe7627 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 13:35:26 +0200 Subject: [PATCH 23/82] garadget: Add Qt6 support --- garadget/integrationplugingaradget.cpp | 14 ++++++++------ garadget/integrationplugingaradget.h | 7 +++---- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/garadget/integrationplugingaradget.cpp b/garadget/integrationplugingaradget.cpp index 001d2d9d..fb078def 100644 --- a/garadget/integrationplugingaradget.cpp +++ b/garadget/integrationplugingaradget.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -29,14 +29,15 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "integrationplugingaradget.h" -#include "integrations/thing.h" #include "plugininfo.h" -#include - -#include "network/mqtt/mqttprovider.h" +#include +#include +#include #include +#include + void IntegrationPluginGaradget::setupThing(ThingSetupInfo *info) { @@ -63,7 +64,6 @@ void IntegrationPluginGaradget::setupThing(ThingSetupInfo *info) } } - void IntegrationPluginGaradget::postSetupThing(Thing *thing) { @@ -71,6 +71,7 @@ void IntegrationPluginGaradget::postSetupThing(Thing *thing) int updatetime = 30; int lwtupdatetime = 300 / updatetime; m_pluginTimer = hardwareManager()->pluginTimerManager()->registerTimer(updatetime); + connect(m_pluginTimer, &PluginTimer::timeout, this, [=](){ m_statuscounter[thing] += 1; foreach (Thing *thing, myThings()) { @@ -89,6 +90,7 @@ void IntegrationPluginGaradget::postSetupThing(Thing *thing) m_statuscounter[thing] = 1; } }); + connect(thing, &Thing::settingChanged, this, [=](const ParamTypeId &settingTypeId){ foreach (Thing *thing, myThings()) { QJsonObject garadgetobj; diff --git a/garadget/integrationplugingaradget.h b/garadget/integrationplugingaradget.h index 7e0daa39..c4215758 100644 --- a/garadget/integrationplugingaradget.h +++ b/garadget/integrationplugingaradget.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,9 +31,8 @@ #ifndef INTEGRATIONPLUGINGARADGET_H #define INTEGRATIONPLUGINGARADGET_H -#include "plugintimer.h" -#include "integrations/integrationplugin.h" -#include "network/networkaccessmanager.h" +#include +#include #include #include From d2eacc95a118cc923fcc40167fe032645af68ca3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 13:39:17 +0200 Subject: [PATCH 24/82] gpio: Add Qt6 support --- gpio/integrationplugingpio.cpp | 7 ++++--- gpio/integrationplugingpio.h | 8 ++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/gpio/integrationplugingpio.cpp b/gpio/integrationplugingpio.cpp index d94a686b..7a13fb6c 100644 --- a/gpio/integrationplugingpio.cpp +++ b/gpio/integrationplugingpio.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2021, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -29,10 +29,11 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "integrationplugingpio.h" -#include "types/param.h" -#include "integrations/thing.h" #include "plugininfo.h" +#include +#include + IntegrationPluginGpio::IntegrationPluginGpio() { diff --git a/gpio/integrationplugingpio.h b/gpio/integrationplugingpio.h index 2e8765a3..1086702a 100644 --- a/gpio/integrationplugingpio.h +++ b/gpio/integrationplugingpio.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2021, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,8 +31,9 @@ #ifndef INTEGRATIONPLUGINGPIO_H #define INTEGRATIONPLUGINGPIO_H -#include "integrations/integrationplugin.h" -#include "plugintimer.h" +#include +#include + #include "gpiodescriptor.h" // libnymea-gpio @@ -57,7 +58,6 @@ public: void thingRemoved(Thing *thing) override; void executeAction(ThingActionInfo *info) override; - private: QHash m_gpioParamTypeIds; QHash m_activeLowParamTypeIds; From 233b89d65e602df2ec2b9ecbd16ece1992696232 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 13:48:23 +0200 Subject: [PATCH 25/82] homeconnect: Add Qt6 support --- homeconnect/homeconnect.cpp | 39 ++++++------- homeconnect/homeconnect.h | 8 +-- homeconnect/integrationpluginhomeconnect.cpp | 60 ++++++++++---------- homeconnect/integrationpluginhomeconnect.h | 9 +-- 4 files changed, 59 insertions(+), 57 deletions(-) diff --git a/homeconnect/homeconnect.cpp b/homeconnect/homeconnect.cpp index 23b5fdc2..b0307b84 100644 --- a/homeconnect/homeconnect.cpp +++ b/homeconnect/homeconnect.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -35,6 +35,7 @@ #include #include #include +#include HomeConnect::HomeConnect(NetworkAccessManager *networkmanager, const QByteArray &clientKey, const QByteArray &clientSecret, bool simulationMode, QObject *parent) : QObject(parent), @@ -76,12 +77,12 @@ void HomeConnect::setSimulationMode(bool simulation) QUrl HomeConnect::getLoginUrl(const QUrl &redirectUrl, const QString &scope) { if (m_clientKey.isEmpty()) { - qWarning(dcHomeConnect) << "Client key not defined!"; + qCWarning(dcHomeConnect()) << "Client key not defined!"; return QUrl(""); } if (redirectUrl.isEmpty()){ - qWarning(dcHomeConnect) << "No redirect uri defined!"; + qCWarning(dcHomeConnect()) << "No redirect uri defined!"; } m_redirectUri = QUrl::toPercentEncoding(redirectUrl.toString()); @@ -93,7 +94,7 @@ QUrl HomeConnect::getLoginUrl(const QUrl &redirectUrl, const QString &scope) queryParams.addQueryItem("scope", scope); queryParams.addQueryItem("state", QUuid::createUuid().toString()); queryParams.addQueryItem("nonce", QUuid::createUuid().toString()); - m_codeChallenge = QUuid::createUuid().toString().remove(QRegExp("[{}-]")); + m_codeChallenge = QUuid::createUuid().toString().remove(QRegularExpression("[{}-]")); queryParams.addQueryItem("code_challenge", m_codeChallenge); queryParams.addQueryItem("code_challenge_method", "plain"); url.setQuery(queryParams); @@ -103,7 +104,7 @@ QUrl HomeConnect::getLoginUrl(const QUrl &redirectUrl, const QString &scope) void HomeConnect::onRefreshTimeout() { - qCDebug(dcHomeConnect) << "Refresh authentication token"; + qCDebug(dcHomeConnect()) << "Refresh authentication token"; getAccessTokenFromRefreshToken(m_refreshToken); } @@ -131,19 +132,19 @@ bool HomeConnect::checkStatusCode(QNetworkReply *reply, const QByteArray &rawDat case 400: //Error occurred (e.g. validation error - value is out of range) if(!jsonDoc.toVariant().toMap().contains("error")) { if(jsonDoc.toVariant().toMap().value("error").toString() == "invalid_client") { - qWarning(dcHomeConnect()) << "Client token provided doesn’t correspond to client that generated auth code."; + qCWarning(dcHomeConnect()) << "Client token provided doesn’t correspond to client that generated auth code."; } if(jsonDoc.toVariant().toMap().value("error").toString() == "invalid_redirect_uri") { - qWarning(dcHomeConnect()) << "Missing redirect_uri parameter."; + qCWarning(dcHomeConnect()) << "Missing redirect_uri parameter."; } if(jsonDoc.toVariant().toMap().value("error").toString() == "invalid_code") { - qWarning(dcHomeConnect()) << "Expired authorization code."; + qCWarning(dcHomeConnect()) << "Expired authorization code."; } } setAuthenticated(false); return false; case 401: - qWarning(dcHomeConnect()) << "Client does not have permission to use this API."; + qCWarning(dcHomeConnect()) << "Client does not have permission to use this API."; setAuthenticated(false); return false; case 403: @@ -154,7 +155,7 @@ bool HomeConnect::checkStatusCode(QNetworkReply *reply, const QByteArray &rawDat qCWarning(dcHomeConnect()) << "Not Found. This resource is not available (e.g. no images on washing machine)"; return false; case 405: - qWarning(dcHomeConnect()) << "Wrong HTTP method used."; + qCWarning(dcHomeConnect()) << "Wrong HTTP method used."; setAuthenticated(false); return false; case 408: @@ -194,7 +195,7 @@ bool HomeConnect::checkStatusCode(QNetworkReply *reply, const QByteArray &rawDat void HomeConnect::getAccessTokenFromRefreshToken(const QByteArray &refreshToken) { if (refreshToken.isEmpty()) { - qWarning(dcHomeConnect) << "No refresh token given!"; + qCWarning(dcHomeConnect()) << "No refresh token given!"; setAuthenticated(false); return; } @@ -228,9 +229,9 @@ void HomeConnect::getAccessTokenFromRefreshToken(const QByteArray &refreshToken) if (data.toVariant().toMap().contains("expires_in")) { int expireTime = data.toVariant().toMap().value("expires_in").toInt(); - qCDebug(dcHomeConnect) << "Access token expires int" << expireTime << "s, at" << QDateTime::currentDateTime().addSecs(expireTime).toString(); + qCDebug(dcHomeConnect()) << "Access token expires int" << expireTime << "s, at" << QDateTime::currentDateTime().addSecs(expireTime).toString(); if (!m_tokenRefreshTimer) { - qWarning(dcHomeConnect()) << "Access token refresh timer not initialized"; + qCWarning(dcHomeConnect()) << "Access token refresh timer not initialized"; return; } if (expireTime < 20) { @@ -246,11 +247,11 @@ void HomeConnect::getAccessTokenFromAuthorizationCode(const QByteArray &authoriz { // Obtaining access token if(authorizationCode.isEmpty()) - qWarning(dcHomeConnect) << "No authorization code given!"; + qCWarning(dcHomeConnect()) << "No authorization code given!"; if(m_clientKey.isEmpty()) - qWarning(dcHomeConnect) << "Client key not set!"; + qCWarning(dcHomeConnect()) << "Client key not set!"; if(m_clientSecret.isEmpty()) - qWarning(dcHomeConnect) << "Client secret not set!"; + qCWarning(dcHomeConnect()) << "Client secret not set!"; QUrl url = QUrl(m_baseTokenUrl); QUrlQuery query; url.setQuery(query); @@ -288,7 +289,7 @@ void HomeConnect::getAccessTokenFromAuthorizationCode(const QByteArray &authoriz int expireTime = jsonDoc.toVariant().toMap().value("expires_in").toInt(); qCDebug(dcHomeConnect()) << "Token expires in" << expireTime << "s, at" << QDateTime::currentDateTime().addSecs(expireTime).toString(); if (!m_tokenRefreshTimer) { - qWarning(dcHomeConnect()) << "Token refresh timer not initialized"; + qCWarning(dcHomeConnect()) << "Token refresh timer not initialized"; setAuthenticated(false); return; } @@ -546,7 +547,7 @@ QUuid HomeConnect::selectProgram(const QString &haId, const QString &programKey, QUuid HomeConnect::setSelectedProgramOptions(const QString &haId, QList options) { if (options.isEmpty()) - return ""; + return QUuid(); QUuid commandId = QUuid::createUuid(); QUrl url = QUrl(m_baseControlUrl+"/api/homeappliances/"+haId+"/programs/selected/options"); @@ -754,7 +755,7 @@ void HomeConnect::connectEventStream() QNetworkReply *reply = m_networkManager->get(request); connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater); - connect(reply, &QNetworkReply::finished, [reply, this] { + connect(reply, &QNetworkReply::finished, this, [reply, this] { int reconnectTime = 5000; // Usual reconnect in 5 s if (reply->error() != QNetworkReply::NetworkError::NoError) { qCDebug(dcHomeConnect()) << "Event stream error" << reply->errorString() << reply->readAll(); diff --git a/homeconnect/homeconnect.h b/homeconnect/homeconnect.h index 486bb651..e69c867d 100644 --- a/homeconnect/homeconnect.h +++ b/homeconnect/homeconnect.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -35,7 +35,7 @@ #include #include -#include "network/networkaccessmanager.h" +#include class HomeConnect : public QObject { @@ -177,13 +177,13 @@ signals: void receivedAccessToken(const QByteArray &accessToken); void commandExecuted(const QUuid &commandId, bool success); - void receivedHomeAppliances(const QList &appliances); + void receivedHomeAppliances(const QList &appliances); void receivedStatusList(const QString &haId, const QHash &statusList); void receivedPrograms(const QString &haId, const QStringList &programs); void receivedAvailablePrograms(const QString &haId, const QStringList &programs); void receivedSettings(const QString &haId, const QHash &settings); void receivedActiveProgram(const QString &haId, const QString &key, const QHash &options); void receivedSelectedProgram(const QString &haId, const QString &key, const QHash &options); - void receivedEvents(EventType eventType, const QString &haId, const QList &events); + void receivedEvents(HomeConnect::EventType eventType, const QString &haId, const QList &events); }; #endif // HOMECONNECT_H diff --git a/homeconnect/integrationpluginhomeconnect.cpp b/homeconnect/integrationpluginhomeconnect.cpp index f687d95a..9e94a049 100644 --- a/homeconnect/integrationpluginhomeconnect.cpp +++ b/homeconnect/integrationpluginhomeconnect.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -29,10 +29,10 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "integrationpluginhomeconnect.h" -#include "integrations/integrationplugin.h" -#include "network/networkaccessmanager.h" #include "plugininfo.h" +#include + #include #include #include @@ -218,7 +218,7 @@ void IntegrationPluginHomeConnect::confirmPairing(ThingPairingInfo *info, const HomeConnect *homeConnect = m_setupHomeConnectConnections.value(info->thingId()); if (!homeConnect) { - qWarning(dcHomeConnect()) << "No HomeConnect connection found for device:" << info->thingName(); + qCWarning(dcHomeConnect()) << "No HomeConnect connection found for device:" << info->thingName(); m_setupHomeConnectConnections.remove(info->thingId()); return info->finish(Thing::ThingErrorHardwareFailure); } @@ -326,7 +326,7 @@ void IntegrationPluginHomeConnect::postSetupThing(Thing *thing) Q_FOREACH (Thing *thing, myThings().filterByThingClassId(homeConnectAccountThingClassId)) { HomeConnect *homeConnect = m_homeConnectConnections.value(thing); if (!homeConnect) { - qWarning(dcHomeConnect()) << "No HomeConnect account found for" << thing->name(); + qCWarning(dcHomeConnect()) << "No HomeConnect account found for" << thing->name(); continue; } homeConnect->getHomeAppliances(); @@ -411,7 +411,7 @@ void IntegrationPluginHomeConnect::executeAction(ThingActionInfo *info) options.append(coffeeTemperature); requestId = homeConnect->setSelectedProgramOptions(haid, options); m_pendingActions.insert(requestId, info); - connect(info, &ThingActionInfo::aborted, [requestId, this] { + connect(info, &ThingActionInfo::aborted, this, [requestId, this] { m_pendingActions.remove(requestId); }); @@ -429,7 +429,7 @@ void IntegrationPluginHomeConnect::executeAction(ThingActionInfo *info) options.append(beanAmount); requestId = homeConnect->setSelectedProgramOptions(haid, options); m_pendingActions.insert(requestId, info); - connect(info, &ThingActionInfo::aborted, [requestId, this] { + connect(info, &ThingActionInfo::aborted, this, [requestId, this] { m_pendingActions.remove(requestId); }); @@ -443,7 +443,7 @@ void IntegrationPluginHomeConnect::executeAction(ThingActionInfo *info) options.append(fillQuantity); requestId = homeConnect->setSelectedProgramOptions(haid, options); m_pendingActions.insert(requestId, info); - connect(info, &ThingActionInfo::aborted, [requestId, this] { + connect(info, &ThingActionInfo::aborted, this, [requestId, this] { m_pendingActions.remove(requestId); }); } else if (action.actionTypeId() == coffeeMakerStartActionTypeId) { @@ -454,7 +454,7 @@ void IntegrationPluginHomeConnect::executeAction(ThingActionInfo *info) QUuid requestId; requestId = homeConnect->startProgram(haid, m_selectedProgram.value(thing), QList()); m_pendingActions.insert(requestId, info); - connect(info, &ThingActionInfo::aborted, [requestId, this] { + connect(info, &ThingActionInfo::aborted, this, [requestId, this] { m_pendingActions.remove(requestId); }); } @@ -473,7 +473,7 @@ void IntegrationPluginHomeConnect::executeAction(ThingActionInfo *info) startTime.value = action.param(dishwasherStartActionStartTimeParamTypeId).value().toInt() * 60; requestId = homeConnect->startProgram(haid, m_selectedProgram.value(thing), QList() << startTime); m_pendingActions.insert(requestId, info); - connect(info, &ThingActionInfo::aborted, [requestId, this] { + connect(info, &ThingActionInfo::aborted, this, [requestId, this] { m_pendingActions.remove(requestId); }); } else { @@ -489,7 +489,7 @@ void IntegrationPluginHomeConnect::executeAction(ThingActionInfo *info) QUuid requestId; requestId = homeConnect->startProgram(haid, m_selectedProgram.value(thing), QList()); m_pendingActions.insert(requestId, info); - connect(info, &ThingActionInfo::aborted, [requestId, this] { + connect(info, &ThingActionInfo::aborted, this, [requestId, this] { m_pendingActions.remove(requestId); }); } @@ -502,7 +502,7 @@ void IntegrationPluginHomeConnect::executeAction(ThingActionInfo *info) QUuid requestId; requestId = homeConnect->startProgram(haid, m_selectedProgram.value(thing), QList()); m_pendingActions.insert(requestId, info); - connect(info, &ThingActionInfo::aborted, [requestId, this] { + connect(info, &ThingActionInfo::aborted, this, [requestId, this] { m_pendingActions.remove(requestId); }); } else if (action.actionTypeId() == dryerDryingTargetActionTypeId) { @@ -521,7 +521,7 @@ void IntegrationPluginHomeConnect::executeAction(ThingActionInfo *info) options.append(dryingTarget); requestId = homeConnect->setSelectedProgramOptions(haid, options); m_pendingActions.insert(requestId, info); - connect(info, &ThingActionInfo::aborted, [requestId, this] { + connect(info, &ThingActionInfo::aborted, this, [requestId, this] { m_pendingActions.remove(requestId); }); } @@ -538,7 +538,7 @@ void IntegrationPluginHomeConnect::executeAction(ThingActionInfo *info) void IntegrationPluginHomeConnect::thingRemoved(Thing *thing) { - qCDebug(dcHomeConnect) << "Delete " << thing->name(); + qCDebug(dcHomeConnect()) << "Delete " << thing->name(); if (thing->thingClassId() == homeConnectAccountThingClassId) { HomeConnect *homeConnect = m_homeConnectConnections.take(thing); if (homeConnect) @@ -567,7 +567,7 @@ void IntegrationPluginHomeConnect::browseThing(BrowseResult *result) homeConnect->getProgramsAvailable(haid); connect(homeConnect, &HomeConnect::receivedAvailablePrograms, result, [result, this] (const QString &haId, const QStringList programs) { if(result->thing()->paramValue(m_idParamTypeIds.value(result->thing()->thingClassId())).toString() == haId) { - Q_FOREACH(QString program, programs) { + Q_FOREACH(const QString &program, programs) { BrowserItem item; item.setExecutable(true); item.setDisplayName(program.split('.').last()); @@ -723,7 +723,7 @@ void IntegrationPluginHomeConnect::parseKey(Thing *thing, const QString &key, co if (value.toString().split('.').last().contains("Finished")) { //apparently the finished event is not emitted by HomeConnect so this will hopefully do the trick if (m_programFinishedEventTypeIds.contains(thing->thingClassId())) { - emitEvent(Event(m_programFinishedEventTypeIds.value(thing->thingClassId()), thing->id())); + emit emitEvent(Event(m_programFinishedEventTypeIds.value(thing->thingClassId()), thing->id())); } if (m_progressStateTypeIds.contains(thing->thingClassId())) { thing->setStateValue(m_progressStateTypeIds.value(thing->thingClassId()), 0); @@ -732,21 +732,21 @@ void IntegrationPluginHomeConnect::parseKey(Thing *thing, const QString &key, co // Program Progress Events } else if (key == "BSH.Common.Event.ProgramAborted") { if (m_programFinishedEventTypeIds.contains(thing->thingClassId())) { - emitEvent(Event(m_programFinishedEventTypeIds.value(thing->thingClassId()), thing->id())); + emit emitEvent(Event(m_programFinishedEventTypeIds.value(thing->thingClassId()), thing->id())); } if (m_progressStateTypeIds.contains(thing->thingClassId())) { thing->setStateValue(m_progressStateTypeIds.value(thing->thingClassId()), 0); } } else if (key == "BSH.Common.Event.ProgramFinished") { if (m_programFinishedEventTypeIds.contains(thing->thingClassId())) { - emitEvent(Event(m_programFinishedEventTypeIds.value(thing->thingClassId()), thing->id())); + emit emitEvent(Event(m_programFinishedEventTypeIds.value(thing->thingClassId()), thing->id())); } if (m_progressStateTypeIds.contains(thing->thingClassId())) { thing->setStateValue(m_progressStateTypeIds.value(thing->thingClassId()), 0); } //} else if (key == "BSH.Common.Event.AlarmClockElapsed") { } else if (key == "Cooking.Oven.Event.PreheatFinished") { - emitEvent(Event(ovenPreheatFinishedEventTypeId, thing->id())); + emit emitEvent(Event(ovenPreheatFinishedEventTypeId, thing->id())); // Home Appliance State Changes //} else if (key == "BSH.Common.Setting.PowerState") { } else if (key == "BSH.Common.Status.RemoteControlActive") { @@ -768,23 +768,23 @@ void IntegrationPluginHomeConnect::parseKey(Thing *thing, const QString &key, co // Home Appliance Events } else if (key == "ConsumerProducts.CoffeeMaker.Event.BeanContainerEmpty") { - emitEvent(Event(coffeeMakerBeanContainerEmptyEventTypeId, thing->id())); + emit emitEvent(Event(coffeeMakerBeanContainerEmptyEventTypeId, thing->id())); } else if (key == "ConsumerProducts.CoffeeMaker.Event.WaterTankEmpty") { - emitEvent(Event(coffeeMakerWaterTankEmptyEventTypeId, thing->id())); + emit emitEvent(Event(coffeeMakerWaterTankEmptyEventTypeId, thing->id())); } else if (key == "ConsumerProducts.CoffeeMaker.Event.DripTrayFull") { - emitEvent(Event(coffeeMakerDripTrayFullEventTypeId, thing->id())); + emit emitEvent(Event(coffeeMakerDripTrayFullEventTypeId, thing->id())); } else if (key == "Refrigeration.FridgeFreezer.Event.DoorAlarmFreezer") {; - emitEvent(Event(fridgeDoorAlarmFreezerEventTypeId, thing->id())); + emit emitEvent(Event(fridgeDoorAlarmFreezerEventTypeId, thing->id())); } else if (key == "Refrigeration.FridgeFreezer.Event.DoorAlarmRefrigerator") { - emitEvent(Event(fridgeDoorAlarmRefrigeratorEventTypeId, thing->id())); + emit emitEvent(Event(fridgeDoorAlarmRefrigeratorEventTypeId, thing->id())); } else if (key == "Refrigeration.FridgeFreezer.Event.TemperatureAlarmFreezer") { - emitEvent(Event(fridgeTemperatureAlarmFreezerEventTypeId, thing->id())); + emit emitEvent(Event(fridgeTemperatureAlarmFreezerEventTypeId, thing->id())); } else if (key == "ConsumerProducts.CleaningRobot.Event.EmptyDustBoxAndCleanFilter") { - emitEvent(Event(cleaningRobotEmptyDustBoxAndCleanFilterEventTypeId, thing->id())); + emit emitEvent(Event(cleaningRobotEmptyDustBoxAndCleanFilterEventTypeId, thing->id())); } else if (key == "ConsumerProducts.CleaningRobot.Event.RobotIsStuck") { - emitEvent(Event(cleaningRobotRobotIsStuckEventTypeId, thing->id())); + emit emitEvent(Event(cleaningRobotRobotIsStuckEventTypeId, thing->id())); } else if (key == "ConsumerProducts.CleaningRobot.Event.DockingStationNotFound") { - emitEvent(Event(cleaningRobotDockingStationNotFoundEventTypeId, thing->id())); + emit emitEvent(Event(cleaningRobotDockingStationNotFoundEventTypeId, thing->id())); // UNDOCUMENTED } else if (key == "Cooking.Oven.Status.CurrentCavityTemperature") { @@ -999,7 +999,7 @@ void IntegrationPluginHomeConnect::onReceivedStatusList(const QString &haId, con Q_FOREACH(Thing *thing, myThings().filterByParentId(parentThing->id())) { if (thing->paramValue(m_idParamTypeIds.value(thing->thingClassId())).toString() == haId) { qCDebug(dcHomeConnect()) << "Received status list device" << thing->name(); - Q_FOREACH(QString key, statusList.keys()) { + Q_FOREACH(const QString &key, statusList.keys()) { parseKey(thing, key, statusList.value(key)); } break; @@ -1076,7 +1076,7 @@ void IntegrationPluginHomeConnect::onReceivedSettings(const QString &haId, const Q_FOREACH(Thing *thing, myThings().filterByParentId(parentThing->id())) { if (thing->paramValue(m_idParamTypeIds.value(thing->thingClassId())).toString() == haId) { qCDebug(dcHomeConnect()) << "Received setting" << thing->name() << settings; - Q_FOREACH(QString setting, settings.keys()) { + Q_FOREACH(const QString &setting, settings.keys()) { parseSettingKey(thing, setting, settings.value(setting)); } break; diff --git a/homeconnect/integrationpluginhomeconnect.h b/homeconnect/integrationpluginhomeconnect.h index 28f9b00e..0f20ed78 100644 --- a/homeconnect/integrationpluginhomeconnect.h +++ b/homeconnect/integrationpluginhomeconnect.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,13 +31,14 @@ #ifndef INTEGRATIONPLUGINHOMECONNECT_H #define INTEGRATIONPLUGINHOMECONNECT_H -#include "integrations/integrationplugin.h" -#include "plugintimer.h" -#include "homeconnect.h" +#include +#include #include #include +#include "homeconnect.h" + class IntegrationPluginHomeConnect : public IntegrationPlugin { Q_OBJECT From 6091d24574fbca95921f0f4cfea7d6d6546246ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 13:53:44 +0200 Subject: [PATCH 26/82] httpcommander: Add Qt6 support --- httpcommander/httpcommander.pro | 4 +-- httpcommander/httpsimpleserver.cpp | 30 +++++++++---------- httpcommander/httpsimpleserver.h | 8 ++--- .../integrationpluginhttpcommander.cpp | 16 ++++++---- .../integrationpluginhttpcommander.h | 9 ++---- 5 files changed, 30 insertions(+), 37 deletions(-) diff --git a/httpcommander/httpcommander.pro b/httpcommander/httpcommander.pro index e7f52426..f7d0af7a 100644 --- a/httpcommander/httpcommander.pro +++ b/httpcommander/httpcommander.pro @@ -1,8 +1,6 @@ include(../plugins.pri) -QT += network - -TARGET = $$qtLibraryTarget(nymea_integrationpluginhttpcommander) +QT *= network SOURCES += \ integrationpluginhttpcommander.cpp \ diff --git a/httpcommander/httpsimpleserver.cpp b/httpcommander/httpsimpleserver.cpp index 576f8b6e..f9b075b9 100644 --- a/httpcommander/httpsimpleserver.cpp +++ b/httpcommander/httpsimpleserver.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -30,14 +30,13 @@ #include "httpsimpleserver.h" -#include "types/statetype.h" #include "extern-plugininfo.h" #include #include #include #include -#include +#include #include HttpSimpleServer::HttpSimpleServer(quint16 port, QObject *parent): @@ -58,8 +57,8 @@ void HttpSimpleServer::incomingConnection(qintptr socket) // works asynchronously, this means that all the communication is done // in the two slots readClient() and discardClient(). QTcpSocket* tcpSocket = new QTcpSocket(this); - connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(readClient())); - connect(tcpSocket, SIGNAL(disconnected()), this, SLOT(discardClient())); + connect(tcpSocket, &QTcpSocket::readyRead, this, &HttpSimpleServer::readClient); + connect(tcpSocket, &QTcpSocket::disconnected, this, &HttpSimpleServer::discardClient); tcpSocket->setSocketDescriptor(socket); } @@ -69,17 +68,16 @@ void HttpSimpleServer::readClient() // This slot is called when the client sent data to the server. The // server looks if it was a get request and sends a very simple HTML // document back. - QTcpSocket* tcpSocket = static_cast(sender()); + QTcpSocket *tcpSocket = static_cast(sender()); if (tcpSocket->canReadLine()) { - QByteArray data = tcpSocket->readAll(); - QStringList tokens = QString(data).split(QRegExp("[ \r\n][ \r\n]*")); + QStringList tokens = QString(data).split(QRegularExpression("[ \r\n][ \r\n]*")); qCDebug(dcHttpCommander()) << "Http Request, type" << tokens[0] << "path" << tokens[1] << "body" << tokens.last(); if ((tokens[0] == "GET") || - (tokens[0] == "PUT") || - (tokens[0] == "POST") || - (tokens[0] == "DELETE")) { + (tokens[0] == "PUT") || + (tokens[0] == "POST") || + (tokens[0] == "DELETE")) { QTextStream os(tcpSocket); os.setAutoDetectUnicode(true); @@ -96,16 +94,16 @@ void HttpSimpleServer::readClient() void HttpSimpleServer::discardClient() { - QTcpSocket* socket = static_cast(sender()); + QTcpSocket *socket = static_cast(sender()); socket->deleteLater(); } QString HttpSimpleServer::generateHeader() { QString contentHeader( - "HTTP/1.0 200 Ok\r\n" - "Content-Type: text/html; charset=\"utf-8\"\r\n" - "\r\n" - ); + "HTTP/1.0 200 Ok\r\n" + "Content-Type: text/html; charset=\"utf-8\"\r\n" + "\r\n" + ); return contentHeader; } diff --git a/httpcommander/httpsimpleserver.h b/httpcommander/httpsimpleserver.h index 075a9822..23160921 100644 --- a/httpcommander/httpsimpleserver.h +++ b/httpcommander/httpsimpleserver.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,15 +31,12 @@ #ifndef HTTPSIMPLESERVER1_H #define HTTPSIMPLESERVER1_H -#include "typeutils.h" - #include #include #include #include -class Device; -class DevicePlugin; +#include class HttpSimpleServer : public QTcpServer { @@ -48,6 +45,7 @@ public: HttpSimpleServer(quint16 port, QObject* parent = nullptr); ~HttpSimpleServer() override; + void incomingConnection(qintptr socket) override; signals: diff --git a/httpcommander/integrationpluginhttpcommander.cpp b/httpcommander/integrationpluginhttpcommander.cpp index de29fce0..6f3086f2 100644 --- a/httpcommander/integrationpluginhttpcommander.cpp +++ b/httpcommander/integrationpluginhttpcommander.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -29,8 +29,12 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "integrationpluginhttpcommander.h" -#include "network/networkaccessmanager.h" #include "plugininfo.h" + +#include + +#include +#include #include IntegrationPluginHttpCommander::IntegrationPluginHttpCommander() @@ -40,14 +44,14 @@ IntegrationPluginHttpCommander::IntegrationPluginHttpCommander() void IntegrationPluginHttpCommander::setupThing(ThingSetupInfo *info) { Thing *thing = info->thing(); - qDebug(dcHttpCommander()) << "Setup thing" << thing->name() << thing->params(); + qCDebug(dcHttpCommander()) << "Setup thing" << thing->name() << thing->params(); if (thing->thingClassId() == httpRequestThingClassId) { QUrl url = thing->paramValue(httpRequestThingUrlParamTypeId).toUrl(); if (!url.isValid()) { - qDebug(dcHttpCommander()) << "Given URL is not valid"; + qCDebug(dcHttpCommander()) << "Given URL is not valid"; //: Error setting up thing return info->finish(Thing::ThingErrorInvalidParameter, QT_TR_NOOP("The given url is not valid.")); } @@ -92,9 +96,9 @@ void IntegrationPluginHttpCommander::executeAction(ThingActionInfo *info) info->finish(Thing::ThingErrorInvalidParameter); return; } - connect(reply, &QNetworkReply::finished, this, [thing, reply, this](){ - qDebug(dcHttpCommander()) << "POST reply finished"; + connect(reply, &QNetworkReply::finished, this, [thing, reply](){ + qCDebug(dcHttpCommander()) << "POST reply finished"; QByteArray data = reply->readAll(); int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); diff --git a/httpcommander/integrationpluginhttpcommander.h b/httpcommander/integrationpluginhttpcommander.h index 6e83f43e..faccc281 100644 --- a/httpcommander/integrationpluginhttpcommander.h +++ b/httpcommander/integrationpluginhttpcommander.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,13 +31,9 @@ #ifndef INTEGRATIONPLUGINHTTPCOMMANDER_H #define INTEGRATIONPLUGINHTTPCOMMANDER_H -#include "integrations/integrationplugin.h" -#include "plugintimer.h" +#include #include "httpsimpleserver.h" -#include -#include - class IntegrationPluginHttpCommander : public IntegrationPlugin { Q_OBJECT @@ -46,7 +42,6 @@ class IntegrationPluginHttpCommander : public IntegrationPlugin Q_INTERFACES(IntegrationPlugin) public: - explicit IntegrationPluginHttpCommander(); void setupThing(ThingSetupInfo *info) override; From ecd29be68eaa8b2900ff192f40dda168159746b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 13:57:23 +0200 Subject: [PATCH 27/82] keba: Add Qt6 support --- keba/integrationpluginkeba.cpp | 6 +++--- keba/keba.pro | 4 +--- keba/kecontact.h | 12 ++++++------ keba/kecontactdatalayer.cpp | 4 ++++ 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/keba/integrationpluginkeba.cpp b/keba/integrationpluginkeba.cpp index d96ef2ed..c25c0c6c 100644 --- a/keba/integrationpluginkeba.cpp +++ b/keba/integrationpluginkeba.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2024, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -28,9 +28,9 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -#include "plugininfo.h" -#include "kebaproductinfo.h" #include "integrationpluginkeba.h" +#include "kebaproductinfo.h" +#include "plugininfo.h" #include #include diff --git a/keba/keba.pro b/keba/keba.pro index d28edbd8..af37ee02 100644 --- a/keba/keba.pro +++ b/keba/keba.pro @@ -1,8 +1,6 @@ include(../plugins.pri) -QT += network - -TARGET = $$qtLibraryTarget(nymea_integrationpluginkeba) +QT *= network SOURCES += \ integrationpluginkeba.cpp \ diff --git a/keba/kecontact.h b/keba/kecontact.h index 3df318d1..321bc65e 100644 --- a/keba/kecontact.h +++ b/keba/kecontact.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2021, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -228,11 +228,11 @@ signals: void reachableChanged(bool status); void commandExecuted(QUuid requestId, bool success); void deviceInformationReceived(const QString &firmware); - void reportOneReceived(const ReportOne &reportOne); - void reportTwoReceived(const ReportTwo &reportTwo); - void reportThreeReceived(const ReportThree &reportThree); - void report1XXReceived(int reportNumber, const Report1XX &report); - void broadcastReceived(BroadcastType type, const QVariant &content); + void reportOneReceived(const KeContact::ReportOne &reportOne); + void reportTwoReceived(const KeContact::ReportTwo &reportTwo); + void reportThreeReceived(const KeContact::ReportThree &reportThree); + void report1XXReceived(int reportNumber, const KeContact::Report1XX &report); + void broadcastReceived(KeContact::BroadcastType type, const QVariant &content); private slots: void onReceivedDatagram(const QHostAddress &address, const QByteArray &datagram); diff --git a/keba/kecontactdatalayer.cpp b/keba/kecontactdatalayer.cpp index 806c1a60..a60e5c1c 100644 --- a/keba/kecontactdatalayer.cpp +++ b/keba/kecontactdatalayer.cpp @@ -37,7 +37,11 @@ KeContactDataLayer::KeContactDataLayer(QObject *parent) : QObject(parent) m_udpSocket = new QUdpSocket(this); connect(m_udpSocket, &QUdpSocket::readyRead, this, &KeContactDataLayer::readPendingDatagrams); connect(m_udpSocket, &QUdpSocket::stateChanged, this, &KeContactDataLayer::onSocketStateChanged); +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) + connect(m_udpSocket, &QUdpSocket::errorOccurred, this, &KeContactDataLayer::onSocketError); +#else connect(m_udpSocket, SIGNAL(error(QAbstractSocket::SocketError)),this, SLOT(onSocketError(QAbstractSocket::SocketError))); +#endif } KeContactDataLayer::~KeContactDataLayer() From c31980a4cd0a50ddf1b47f5246eac8559798ae18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 14:12:38 +0200 Subject: [PATCH 28/82] kodi: Add Qt6 support --- kodi/integrationpluginkodi.cpp | 23 +++++++-------- kodi/integrationpluginkodi.h | 15 +++++----- kodi/kodi.cpp | 53 +++++++++++++++++----------------- kodi/kodi.h | 17 +++++------ kodi/kodi.pro | 4 +-- kodi/kodiconnection.cpp | 16 ++++++---- kodi/kodiconnection.h | 10 +++---- kodi/kodijsonhandler.h | 5 ++-- kodi/kodireply.h | 4 +-- 9 files changed, 71 insertions(+), 76 deletions(-) diff --git a/kodi/integrationpluginkodi.cpp b/kodi/integrationpluginkodi.cpp index ff4d7857..ce3d29b9 100644 --- a/kodi/integrationpluginkodi.cpp +++ b/kodi/integrationpluginkodi.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -29,13 +29,13 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "integrationpluginkodi.h" -#include "integrations/thing.h" #include "plugininfo.h" -#include "network/upnp/upnpdiscovery.h" -#include "platform/platformzeroconfcontroller.h" -#include "network/zeroconf/zeroconfservicebrowser.h" -#include "network/zeroconf/zeroconfserviceentry.h" -#include "network/networkaccessmanager.h" + +#include +#include +#include +#include +#include #include #include @@ -213,7 +213,7 @@ void IntegrationPluginKodi::discoverThings(ThingDiscoveryInfo *info) foreach (const ZeroConfServiceEntry avahiEntry, m_serviceBrowser->serviceEntries()) { - QUuid uuid = avahiEntry.txt("uuid"); + QUuid uuid(avahiEntry.txt("uuid")); if (descriptors.contains(uuid)) { // Might appear multiple times, IPv4 and IPv6 continue; @@ -312,7 +312,7 @@ void IntegrationPluginKodi::executeAction(ThingActionInfo *info) commandId = kodi->setRepeat("off"); } } else { - qWarning(dcKodi()) << "Unhandled action type" << action.actionTypeId(); + qCWarning(dcKodi()) << "Unhandled action type" << action.actionTypeId(); return info->finish(Thing::ThingErrorActionTypeNotFound); } @@ -385,7 +385,7 @@ IntegrationPluginKodi::KodiHostInfo IntegrationPluginKodi::resolve(Thing *thing) continue; } - QUuid entryUuid = entry.txt("uuid"); + QUuid entryUuid(entry.txt("uuid")); if (entryUuid != uuid) { continue; } @@ -405,7 +405,7 @@ IntegrationPluginKodi::KodiHostInfo IntegrationPluginKodi::resolve(Thing *thing) if (ret.address.isNull()) { if (pluginStorage()->childGroups().contains(thing->id().toString())) { pluginStorage()->beginGroup(thing->id().toString()); - ret.address = pluginStorage()->value("address").toString(); + ret.address = QHostAddress(pluginStorage()->value("address").toString()); ret.rpcPort = pluginStorage()->value("rpcPort").toUInt(); ret.httpPort = pluginStorage()->value("httpPort").toUInt(); pluginStorage()->endGroup(); @@ -427,7 +427,6 @@ void IntegrationPluginKodi::onConnectionChanged(bool connected) thing->setStateValue(kodiConnectedStateTypeId, connected); - if (connected) { pluginStorage()->beginGroup(thing->id().toString()); pluginStorage()->setValue("address", kodi->hostAddress().toString()); diff --git a/kodi/integrationpluginkodi.h b/kodi/integrationpluginkodi.h index 34b3177e..7f498abd 100644 --- a/kodi/integrationpluginkodi.h +++ b/kodi/integrationpluginkodi.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,8 +31,9 @@ #ifndef INTEGRATIONPLUGINKODI_H #define INTEGRATIONPLUGINKODI_H -#include "integrations/integrationplugin.h" -#include "plugintimer.h" +#include +#include + #include "kodi.h" #include @@ -74,13 +75,13 @@ private: private: PluginTimer *m_pluginTimer = nullptr; - QHash m_kodis; + QHash m_kodis; ZeroConfServiceBrowser *m_serviceBrowser = nullptr; ZeroConfServiceBrowser *m_httpServiceBrowser = nullptr; - QHash m_pendingActions; - QHash m_pendingBrowserActions; - QHash m_pendingBrowserItemActions; + QHash m_pendingActions; + QHash m_pendingBrowserActions; + QHash m_pendingBrowserItemActions; private slots: void onConnectionChanged(bool connected); diff --git a/kodi/kodi.cpp b/kodi/kodi.cpp index ff24888d..5b155515 100644 --- a/kodi/kodi.cpp +++ b/kodi/kodi.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -29,10 +29,12 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "kodi.h" -#include #include "extern-plugininfo.h" + #include #include +#include +#include Kodi::Kodi(const QHostAddress &hostAddress, int port, int httpPort, QObject *parent) : QObject(parent), @@ -47,7 +49,6 @@ Kodi::Kodi(const QHostAddress &hostAddress, int port, int httpPort, QObject *par connect(m_jsonHandler, &KodiJsonHandler::notificationReceived, this, &Kodi::processNotification); connect(m_jsonHandler, &KodiJsonHandler::replyReceived, this, &Kodi::processResponse); - // Init FS m_virtualFs = new VirtualFsNode(BrowserItem()); @@ -172,8 +173,6 @@ Kodi::Kodi(const QHostAddress &hostAddress, int port, int httpPort, QObject *par musicAddons->getParams.insert("sort", sort); musicAddons->getParams.insert("properties", properties); addons->addChild(musicAddons); - - } Kodi::~Kodi() @@ -362,7 +361,7 @@ void Kodi::browse(BrowseResult *result) if (result->itemId().startsWith("artist:")) { QString idString = result->itemId(); - idString.remove(QRegExp("^artist:")); + idString.remove(QRegularExpression("^artist:")); QVariantMap filter; filter.insert("artistid", idString.toInt()); QVariantMap params; @@ -378,7 +377,7 @@ void Kodi::browse(BrowseResult *result) if (result->itemId().startsWith("album:")) { QString idString = result->itemId(); - idString.remove(QRegExp("^album:")); + idString.remove(QRegularExpression("^album:")); QVariantMap filter; filter.insert("albumid", idString.toInt()); QVariantMap params; @@ -396,7 +395,7 @@ void Kodi::browse(BrowseResult *result) if (result->itemId().startsWith("tvshow:")) { QString idString = result->itemId(); - idString.remove(QRegExp("^tvshow:")); + idString.remove(QRegularExpression("^tvshow:")); QVariantMap params; params.insert("tvshowid", idString.toInt()); QVariantList properties; @@ -412,9 +411,9 @@ void Kodi::browse(BrowseResult *result) if (result->itemId().startsWith("season:")) { QString idString = result->itemId(); - idString.remove(QRegExp("^season:")); + idString.remove(QRegularExpression("^season:")); int seasonId = idString.left(idString.indexOf(",")).toInt(); - idString.remove(QRegExp("^[0-9]*,tvshow:")); + idString.remove(QRegularExpression("^[0-9]*,tvshow:")); int tvShowId = idString.toInt(); QVariantMap params; params.insert("tvshowid", tvShowId); @@ -432,7 +431,7 @@ void Kodi::browse(BrowseResult *result) if (result->itemId().startsWith("addon:")) { QString idString = result->itemId(); - idString.remove(QRegExp("^addon:")); + idString.remove(QRegularExpression("^addon:")); QVariantMap params; params.insert("directory", "plugin://" + idString); // QVariantList properties; @@ -447,7 +446,7 @@ void Kodi::browse(BrowseResult *result) if (result->itemId().startsWith("file:")) { QString idString = result->itemId(); - idString.remove(QRegExp("^file:")); + idString.remove(QRegularExpression("^file:")); QVariantMap params; params.insert("directory", idString); params.insert("properties", properties); @@ -468,19 +467,19 @@ void Kodi::browserItem(BrowserItemResult *result) QString method; QVariantMap params; if (idString.startsWith("song:")) { - idString.remove(QRegExp("^song:")); + idString.remove(QRegularExpression("^song:")); params.insert("songid", idString.toInt()); method = "AudioLibrary.GetSongDetails"; } else if (idString.startsWith("movie:")) { - idString.remove(QRegExp("^movie:")); + idString.remove(QRegularExpression("^movie:")); params.insert("movieid", idString.toInt()); method = "VideoLibrary.GetMovieDetails"; } else if (idString.startsWith("episode:")) { - idString.remove(QRegExp("^episode:")); + idString.remove(QRegularExpression("^episode:")); params.insert("episodeid", idString.toInt()); method = "VideoLibrary.GetEpisodeDetails"; } else if (idString.startsWith("musicvideo:")) { - idString.remove(QRegExp("^musicvideo:")); + idString.remove(QRegularExpression("^musicvideo:")); params.insert("musicvideoid", idString.toInt()); method = "VideoLibrary.GetMusicVideoDetails"; } else { @@ -499,11 +498,11 @@ int Kodi::launchBrowserItem(const QString &itemId) QString idString = itemId; if (idString.startsWith("song:")) { - idString.remove(QRegExp("^song:")); + idString.remove(QRegularExpression("^song:")); int idx = idString.indexOf(",album:"); if (idx > 0) { int position = idString.left(idx).toInt(); - idString.remove(QRegExp("^[0-9]*,album:")); + idString.remove(QRegularExpression("^[0-9]*,album:")); int albumId = idString.toInt(); QVariantMap params; @@ -522,13 +521,13 @@ int Kodi::launchBrowserItem(const QString &itemId) playlistItem.insert("songid", idString.toInt()); } } else if (idString.startsWith("movie:")) { - idString.remove(QRegExp("^movie:")); + idString.remove(QRegularExpression("^movie:")); playlistItem.insert("movieid", idString.toInt()); } else if (idString.startsWith("episode:")) { - idString.remove(QRegExp("^episode:")); + idString.remove(QRegularExpression("^episode:")); playlistItem.insert("episodeid", idString.toInt()); } else if (idString.startsWith("file:")) { - idString.remove(QRegExp("^file:")); + idString.remove(QRegularExpression("^file:")); playlistItem.insert("file", idString); } else { qCWarning(dcKodi()) << "Unhandled launchBrowserItem request!" << itemId; @@ -585,7 +584,7 @@ void Kodi::onVolumeChanged(const int &volume, const bool &muted) void Kodi::onUpdateFinished(const QVariantMap &data) { - qCDebug(dcKodi()) << "update finished:" << data; + qCDebug(dcKodi()) << "Update finished:" << data; if (data.contains("volume")) { m_volume = data.value("volume").toInt(); } @@ -597,7 +596,7 @@ void Kodi::onUpdateFinished(const QVariantMap &data) void Kodi::activePlayersChanged(const QVariantList &data) { - qCDebug(dcKodi()) << "active players changed" << data.count() << data; + qCDebug(dcKodi()) << "Active players changed" << data.count() << data; m_activePlayerCount = data.count(); if (m_activePlayerCount == 0) { onPlaybackStatusChanged("Stopped"); @@ -612,7 +611,7 @@ void Kodi::activePlayersChanged(const QVariantList &data) void Kodi::playerPropertiesReceived(const QVariantMap &properties) { - qCDebug(dcKodi()) << "player props received" << properties; + qCDebug(dcKodi()) << "Player props received" << properties; if (m_activePlayerCount > 0) { if (properties.value("speed").toDouble() > 0) { @@ -657,7 +656,7 @@ void Kodi::mediaMetaDataReceived(const QVariantMap &data) if (artwork.isEmpty()) { artwork = item.value("fanart").toString(); } - qCDebug(dcKodi) << "title:" << title << artwork; + qCDebug(dcKodi) << "Title:" << title << artwork; emit mediaMetadataChanged(title, artist, collection, artwork); } @@ -673,7 +672,7 @@ void Kodi::onPlaybackStatusChanged(const QString &playbackState) void Kodi::processNotification(const QString &method, const QVariantMap ¶ms) { - qCDebug(dcKodi) << "got notification" << method << params; + qCDebug(dcKodi) << "Got notification" << method << params; if (method == "Application.OnVolumeChanged") { QVariantMap data = params.value("data").toMap(); @@ -693,7 +692,7 @@ void Kodi::processNotification(const QString &method, const QVariantMap ¶ms) void Kodi::processResponse(int id, const QString &method, const QVariantMap &response) { - qCDebug(dcKodi) << "response received:" << method << response; + qCDebug(dcKodi) << "Response received:" << method << response; if (response.contains("error")) { qCWarning(dcKodi) << "got error response for request " << method << ":" << response.value("error").toMap().value("message").toString(); diff --git a/kodi/kodi.h b/kodi/kodi.h index f86a33e9..d4685d58 100644 --- a/kodi/kodi.h +++ b/kodi/kodi.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -37,11 +37,9 @@ #include "kodiconnection.h" #include "kodijsonhandler.h" -#include "types/browseritem.h" -#include "types/browseritemaction.h" -#include "integrations/thing.h" -#include "integrations/browseresult.h" -#include "integrations/browseritemresult.h" +#include +#include +#include class Kodi : public QObject { @@ -120,10 +118,10 @@ private: QString prepareThumbnail(const QString &thumbnail); private: - KodiConnection *m_connection; + KodiConnection *m_connection = nullptr; int m_httpPort; - KodiJsonHandler *m_jsonHandler; - bool m_muted; + KodiJsonHandler *m_jsonHandler = nullptr; + bool m_muted = false; int m_volume; int m_activePlayerCount = 0; // if it's > 0, there is something playing (either music or video or slideshow) int m_activePlayer = -1; @@ -146,6 +144,7 @@ private: return nullptr; } }; + VirtualFsNode* m_virtualFs = nullptr; QHash m_pendingBrowseRequests; diff --git a/kodi/kodi.pro b/kodi/kodi.pro index 02d20f9e..e49a2fc7 100644 --- a/kodi/kodi.pro +++ b/kodi/kodi.pro @@ -1,8 +1,6 @@ include(../plugins.pri) -QT += network - -TARGET = $$qtLibraryTarget(nymea_integrationpluginkodi) +QT *= gui network SOURCES += \ integrationpluginkodi.cpp \ diff --git a/kodi/kodiconnection.cpp b/kodi/kodiconnection.cpp index 901647aa..20580677 100644 --- a/kodi/kodiconnection.cpp +++ b/kodi/kodiconnection.cpp @@ -29,7 +29,6 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "kodiconnection.h" -#include "kodijsonhandler.h" #include "extern-plugininfo.h" #include @@ -44,7 +43,11 @@ KodiConnection::KodiConnection(const QHostAddress &hostAddress, int port, QObjec connect(m_socket, &QTcpSocket::connected, this, &KodiConnection::onConnected); connect(m_socket, &QTcpSocket::disconnected, this, &KodiConnection::onDisconnected); +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) + connect(m_socket, &QTcpSocket::errorOccurred, this, &KodiConnection::onError); +#else connect(m_socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onError(QAbstractSocket::SocketError))); +#endif connect(m_socket, &QTcpSocket::readyRead, this, &KodiConnection::readData); } @@ -54,6 +57,7 @@ void KodiConnection::connectKodi() qCDebug(dcKodi) << "Aready connecting... skipping request"; return; } + m_socket->connectToHost(m_hostAddress, m_port); } @@ -83,7 +87,7 @@ void KodiConnection::setPort(int port) } -bool KodiConnection::connected() +bool KodiConnection::connected() const { return m_connected; } @@ -114,15 +118,15 @@ void KodiConnection::readData() QByteArray data = m_socket->readAll(); QStringList commandList = QString(data).split("}{"); - for(int i = 0; i < commandList.count(); ++i) { + for (int i = 0; i < commandList.count(); ++i) { QString command = commandList.at(i); - if(command.isEmpty()) { + if (command.isEmpty()) { continue; } - if(i < commandList.count() - 1) { + if (i < commandList.count() - 1) { command.append("}"); } - if(i > 0) { + if (i > 0) { command.prepend("{"); } emit dataReady(command.toUtf8()); diff --git a/kodi/kodiconnection.h b/kodi/kodiconnection.h index 202e00c7..d19b71f3 100644 --- a/kodi/kodiconnection.h +++ b/kodi/kodiconnection.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -51,14 +51,14 @@ public: int port() const; void setPort(int port); - bool connected(); + bool connected() const; private: - QTcpSocket *m_socket; + QTcpSocket *m_socket = nullptr; QHostAddress m_hostAddress; int m_port; - bool m_connected; + bool m_connected = false; private slots: void onConnected(); @@ -73,8 +73,6 @@ signals: public slots: void sendData(const QByteArray &message); - - }; #endif // KODICONNECTION_H diff --git a/kodi/kodijsonhandler.h b/kodi/kodijsonhandler.h index a555431f..552a66e8 100644 --- a/kodi/kodijsonhandler.h +++ b/kodi/kodijsonhandler.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -37,7 +37,6 @@ #include "kodiconnection.h" #include "kodireply.h" -#include "typeutils.h" class KodiJsonHandler : public QObject { @@ -55,7 +54,7 @@ private slots: void processResponse(const QByteArray &data); private: - KodiConnection *m_connection; + KodiConnection *m_connection = nullptr; int m_id; QHash m_replys; QByteArray m_dataBuffer; diff --git a/kodi/kodireply.h b/kodi/kodireply.h index ed174135..4c1317ed 100644 --- a/kodi/kodireply.h +++ b/kodi/kodireply.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -34,8 +34,6 @@ #include #include -#include "typeutils.h" - class KodiReply { public: From 6e153628c123edd4783820dc15c3b816f7c8c94f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 14:26:22 +0200 Subject: [PATCH 29/82] lgsmarttv: Add Qt6 support --- lgsmarttv/integrationpluginlgsmarttv.cpp | 11 ++--- lgsmarttv/integrationpluginlgsmarttv.h | 14 ++++--- lgsmarttv/lgsmarttv.pro | 8 +++- lgsmarttv/tvdevice.cpp | 52 ++++++++++++------------ lgsmarttv/tvdevice.h | 22 +++++----- lgsmarttv/tveventhandler.cpp | 11 +++-- lgsmarttv/tveventhandler.h | 9 +--- 7 files changed, 66 insertions(+), 61 deletions(-) diff --git a/lgsmarttv/integrationpluginlgsmarttv.cpp b/lgsmarttv/integrationpluginlgsmarttv.cpp index 9562961e..10c8d950 100644 --- a/lgsmarttv/integrationpluginlgsmarttv.cpp +++ b/lgsmarttv/integrationpluginlgsmarttv.cpp @@ -29,12 +29,13 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "integrationpluginlgsmarttv.h" - -#include "integrations/thing.h" #include "plugininfo.h" -#include "network/networkaccessmanager.h" -#include "network/upnp/upnpdiscovery.h" -#include "hardwaremanager.h" +#include "tvdevice.h" + +#include +#include +#include +#include #include diff --git a/lgsmarttv/integrationpluginlgsmarttv.h b/lgsmarttv/integrationpluginlgsmarttv.h index fe127b78..6bd78026 100644 --- a/lgsmarttv/integrationpluginlgsmarttv.h +++ b/lgsmarttv/integrationpluginlgsmarttv.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,10 +31,14 @@ #ifndef INTEGRATIONPLUGINLGSMARTTV_H #define INTEGRATIONPLUGINLGSMARTTV_H -#include "tvdevice.h" -#include "plugintimer.h" -#include "integrations/integrationplugin.h" -#include "network/upnp/upnpdevicedescriptor.h" +#include + +#include +#include + +#include + +class TvDevice; class IntegrationPluginLgSmartTv : public IntegrationPlugin { diff --git a/lgsmarttv/lgsmarttv.pro b/lgsmarttv/lgsmarttv.pro index 1b8349c5..36c5e987 100644 --- a/lgsmarttv/lgsmarttv.pro +++ b/lgsmarttv/lgsmarttv.pro @@ -1,8 +1,12 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(nymea_integrationpluginlgsmarttv) +QT += network -QT+= network xml +greaterThan(QT_MAJOR_VERSION, 5) { + QT += core5compat +} else { + QT += xml +} SOURCES += \ integrationpluginlgsmarttv.cpp \ diff --git a/lgsmarttv/tvdevice.cpp b/lgsmarttv/tvdevice.cpp index 13c8c76b..a3a98532 100644 --- a/lgsmarttv/tvdevice.cpp +++ b/lgsmarttv/tvdevice.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -67,7 +67,7 @@ QHostAddress TvDevice::hostAddress() const return m_hostAddress; } -void TvDevice::setPort(const int &port) +void TvDevice::setPort(int port) { m_port = port; } @@ -87,11 +87,11 @@ QString TvDevice::uuid() const return m_uuid; } -void TvDevice::setPaired(const bool &paired) +void TvDevice::setPaired(bool paired) { if (m_paired != paired) { m_paired = paired; - stateChanged(); + emit stateChanged(); } } @@ -100,7 +100,7 @@ bool TvDevice::paired() const return m_paired; } -void TvDevice::setReachable(const bool &reachable) +void TvDevice::setReachable(bool reachable) { if (m_reachable != reachable) { qCDebug(dcLgSmartTv()) << "TV Event handler" << (reachable ? "reachable" : "not reachable any more"); @@ -159,7 +159,7 @@ QString TvDevice::inputSourceLabelName() const return m_inputSourceLabel; } -QPair TvDevice::createDisplayKeyRequest(const QHostAddress &host, const int &port) +QPair TvDevice::createDisplayKeyRequest(const QHostAddress &host, int port) { QString urlString = "http://" + host.toString() + ":" + QString::number(port) + "/udap/api/pairing"; QNetworkRequest request; @@ -171,7 +171,7 @@ QPair TvDevice::createDisplayKeyRequest(const QHost return QPair(request, data); } -QPair TvDevice::createPairingRequest(const QHostAddress &host, const int &port, const QString &key) +QPair TvDevice::createPairingRequest(const QHostAddress &host, int port, const QString &key) { QString urlString = "http://" + host.toString() + ":" + QString::number(port) + "/udap/api/pairing"; QNetworkRequest request; @@ -195,7 +195,7 @@ QPair TvDevice::createEndPairingRequest(const QUrl return QPair(request, data); } -QPair TvDevice::createEndPairingRequest(const QHostAddress &host, const int &port) +QPair TvDevice::createEndPairingRequest(const QHostAddress &host, int port) { QString urlString = "http://" + host.toString() + ":" + QString::number(port) + "/udap/api/pairing"; QNetworkRequest request; @@ -208,7 +208,7 @@ QPair TvDevice::createEndPairingRequest(const QHost return QPair(request, data); } -QPair TvDevice::createEventRequest(const QHostAddress &host, const int &port) +QPair TvDevice::createEventRequest(const QHostAddress &host, int port) { QString urlString = "http://" + host.toString() + ":" + QString::number(port) + "/udap/api/event"; QNetworkRequest request; @@ -243,7 +243,7 @@ QNetworkRequest TvDevice::createChannelInformationRequest() return request; } -QPair TvDevice::createPressButtonRequest(const TvDevice::RemoteKey &key) +QPair TvDevice::createPressButtonRequest(RemoteKey key) { QString urlString = "http://" + hostAddress().toString() + ":" + QString::number(port()) + "/udap/api/command"; QNetworkRequest request; @@ -265,10 +265,10 @@ void TvDevice::onVolumeInformationUpdate(const QByteArray &data) while(!xml.atEnd() && !xml.hasError()) { xml.readNext(); - if(xml.name() == "mute") { + if (xml.name() == QString("mute")) { m_mute = QVariant(xml.readElementText()).toBool(); } - if(xml.name() == "level") { + if (xml.name() == QString("level")) { m_volumeLevel = QVariant(xml.readElementText()).toInt(); } } @@ -283,22 +283,22 @@ void TvDevice::onChannelInformationUpdate(const QByteArray &data) while(!xml.atEnd() && !xml.hasError()) { xml.readNext(); - if(xml.name() == "chtype") { + if (xml.name() == QString("chtype")) { m_channelType = xml.readElementText(); } - if(xml.name() == "major") { + if (xml.name() == QString("major")) { m_channelNumber = QVariant(xml.readElementText()).toInt(); } - if(xml.name() == "chname") { + if (xml.name() == QString("chname")) { m_channelName = xml.readElementText(); } - if(xml.name() == "progName") { + if (xml.name() == QString("progName")) { m_programName = xml.readElementText(); } - if(xml.name() == "inputSourceIdx") { + if (xml.name() == QString("inputSourceIdx")) { m_inputSourceIndex = QVariant(xml.readElementText()).toInt(); } - if(xml.name() == "labelName") { + if (xml.name() == QString("labelName")) { m_inputSourceLabel = xml.readElementText(); } } @@ -314,11 +314,12 @@ QString TvDevice::printXmlData(const QByteArray &data) while (!reader.atEnd()) { reader.readNext(); - if(!reader.isWhitespace()) { + if (!reader.isWhitespace()) { writer.writeCurrentToken(reader); } } - if(reader.hasError()) { + + if (reader.hasError()) { qCWarning(dcLgSmartTv()) << "error reading XML thing information:" << reader.errorString(); } return xmlOut; @@ -329,7 +330,7 @@ void TvDevice::eventOccured(const QByteArray &data) qCDebug(dcLgSmartTv()) << "Event handler data received" << printXmlData(data); // if we got a channel changed event... - if(data.contains("ChannelChanged")) { + if (data.contains("ChannelChanged")) { onChannelInformationUpdate(data); return; } @@ -338,7 +339,7 @@ void TvDevice::eventOccured(const QByteArray &data) // if the tv suspends, it will send a byebye message, which means // the pairing will be closed. - if(data.contains("api type=\"pairing\"") && data.contains("byebye")) { + if (data.contains("api type=\"pairing\"") && data.contains("byebye")) { qCDebug(dcLgSmartTv()) << "Ended pairing (host)"; setPaired(false); setReachable(false); @@ -351,14 +352,15 @@ void TvDevice::eventOccured(const QByteArray &data) while(!xml.atEnd() && !xml.hasError()) { xml.readNext(); - if(xml.name() == "name") { - if(xml.readElementText() == "3DMode") { + if (xml.name() == QString("name")) { + if (xml.readElementText() == "3DMode") { xml.readNext(); - if(xml.name() == "value") { + if (xml.name() == QString("value")) { m_is3DMode = QVariant(xml.readElementText()).toBool(); } } } } + emit stateChanged(); } diff --git a/lgsmarttv/tvdevice.h b/lgsmarttv/tvdevice.h index c1fb917a..4a72567c 100644 --- a/lgsmarttv/tvdevice.h +++ b/lgsmarttv/tvdevice.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -37,13 +37,11 @@ #include #include #include -#include #include #include #include #include -#include "integrations/integrationplugin.h" #include "tveventhandler.h" class TvDevice : public QObject @@ -128,17 +126,17 @@ public: void setHostAddress(const QHostAddress &hostAddress); QHostAddress hostAddress() const; - void setPort(const int &port); + void setPort(int port); int port() const; void setUuid(const QString &uuid); QString uuid() const; // States - void setPaired(const bool &paired); + void setPaired(bool paired); bool paired() const; - void setReachable(const bool &reachable); + void setReachable(bool reachable); bool reachable() const; bool is3DMode() const; @@ -152,13 +150,13 @@ public: QString inputSourceLabelName() const; // other methods - static QPair createDisplayKeyRequest(const QHostAddress &host, const int &port); - static QPair createPairingRequest(const QHostAddress &host, const int &port, const QString &key); + static QPair createDisplayKeyRequest(const QHostAddress &host, int port); + static QPair createPairingRequest(const QHostAddress &host, int port, const QString &key); static QPair createEndPairingRequest(const QUrl &url); - static QPair createEndPairingRequest(const QHostAddress &host, const int &port); - static QPair createEventRequest(const QHostAddress &host, const int &port); + static QPair createEndPairingRequest(const QHostAddress &host, int port); + static QPair createEventRequest(const QHostAddress &host, int port); - QPair createPressButtonRequest(const TvDevice::RemoteKey &key); + QPair createPressButtonRequest(TvDevice::RemoteKey key); QNetworkRequest createVolumeInformationRequest(); QNetworkRequest createChannelInformationRequest(); @@ -166,7 +164,7 @@ public: void onChannelInformationUpdate(const QByteArray &data); private: - TvEventHandler *m_eventHandler; + TvEventHandler *m_eventHandler = nullptr; QHostAddress m_hostAddress; int m_port; diff --git a/lgsmarttv/tveventhandler.cpp b/lgsmarttv/tveventhandler.cpp index 6ce827f2..b3f7e1de 100644 --- a/lgsmarttv/tveventhandler.cpp +++ b/lgsmarttv/tveventhandler.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,6 +31,9 @@ #include "tveventhandler.h" #include "extern-plugininfo.h" +#include +#include + TvEventHandler::TvEventHandler(const QHostAddress &host, const int &port, QObject *parent) : QTcpServer(parent), m_host(host), @@ -85,8 +88,8 @@ void TvEventHandler::readClient() // check if we got header if (data.startsWith("POST") && !m_expectingData) { m_expectingData = true; - QStringList tokens = QString(data).split(QRegExp("[ \r\n][ \r\n]*")); - qCDebug(dcLgSmartTv()) << "event handler -> event occured" << "http://" << m_host.toString() << ":" << m_port << tokens[1]; + QStringList tokens = QString(data).split(QRegularExpression("[ \r\n][ \r\n]*")); + qCDebug(dcLgSmartTv()) << "Event handler -> event occured" << "http://" << m_host.toString() << ":" << m_port << tokens[1]; } } } @@ -94,7 +97,7 @@ void TvEventHandler::readClient() void TvEventHandler::onDisconnected() { QTcpSocket* socket = (QTcpSocket*)sender(); - qCDebug(dcLgSmartTv()) << "event handler -> client disconnected" << socket->peerAddress(); + qCDebug(dcLgSmartTv()) << "Event handler -> client disconnected" << socket->peerAddress(); socket->deleteLater(); } diff --git a/lgsmarttv/tveventhandler.h b/lgsmarttv/tveventhandler.h index 188ef74e..67050d2d 100644 --- a/lgsmarttv/tveventhandler.h +++ b/lgsmarttv/tveventhandler.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -33,13 +33,6 @@ #include #include -#include -#include -#include -#include -#include -#include -#include class TvEventHandler : public QTcpServer { From 02739277e5b1655f3e22b6dc6d62cc05c92b27ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 14:34:53 +0200 Subject: [PATCH 30/82] lifx: Add Qt6 support --- lifx/integrationpluginlifx.cpp | 9 ++++----- lifx/integrationpluginlifx.h | 17 +++++++++-------- lifx/lifx.pro | 2 +- lifx/lifxcloud.cpp | 15 ++++++++------- lifx/lifxcloud.h | 27 +++++++++++++++------------ lifx/lifxlan.cpp | 11 ++++++----- lifx/lifxlan.h | 22 +++++++++++----------- 7 files changed, 54 insertions(+), 49 deletions(-) diff --git a/lifx/integrationpluginlifx.cpp b/lifx/integrationpluginlifx.cpp index 6f39f9e5..252be577 100644 --- a/lifx/integrationpluginlifx.cpp +++ b/lifx/integrationpluginlifx.cpp @@ -29,12 +29,11 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "integrationpluginlifx.h" - -#include "integrations/integrationplugin.h" -#include "types/param.h" #include "plugininfo.h" -#include "platform/platformzeroconfcontroller.h" -#include "network/zeroconf/zeroconfservicebrowser.h" + +#include +#include +#include #include #include diff --git a/lifx/integrationpluginlifx.h b/lifx/integrationpluginlifx.h index 2b440d5d..c19ff3cc 100644 --- a/lifx/integrationpluginlifx.h +++ b/lifx/integrationpluginlifx.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,17 +31,18 @@ #ifndef INTEGRATIONPLUGINLIFX_H #define INTEGRATIONPLUGINLIFX_H -#include "integrations/integrationplugin.h" -#include "plugintimer.h" -#include "lifxlan.h" -#include "lifxcloud.h" +#include -#include "network/networkaccessmanager.h" -#include "network/zeroconf/zeroconfservicebrowser.h" -#include "network/zeroconf/zeroconfserviceentry.h" +#include +#include +#include +#include #include +#include "lifxlan.h" +#include "lifxcloud.h" + class IntegrationPluginLifx : public IntegrationPlugin { Q_OBJECT diff --git a/lifx/lifx.pro b/lifx/lifx.pro index 20671af6..3f07884a 100644 --- a/lifx/lifx.pro +++ b/lifx/lifx.pro @@ -1,6 +1,6 @@ include(../plugins.pri) -QT += network +QT += network gui SOURCES += \ integrationpluginlifx.cpp \ diff --git a/lifx/lifxcloud.cpp b/lifx/lifxcloud.cpp index 1aabda98..617bc115 100644 --- a/lifx/lifxcloud.cpp +++ b/lifx/lifxcloud.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -83,7 +83,7 @@ void LifxCloud::listLights() QJsonDocument data; QJsonParseError error; data = QJsonDocument::fromJson(rawData, &error); if (error.error != QJsonParseError::NoError) { - qDebug(dcLifx()) << "List lights: Received invalide JSON object" << error.errorString(); + qCDebug(dcLifx()) << "List lights: Received invalide JSON object" << error.errorString(); return; } @@ -151,7 +151,7 @@ void LifxCloud::listScenes() QNetworkRequest request; request.setUrl(QUrl("https://api.lifx.com/v1/scenes")); request.setHeader(QNetworkRequest::KnownHeaders::ContentTypeHeader, "application/json"); - request.setRawHeader("Authorization","Bearer "+m_authorizationToken); + request.setRawHeader("Authorization","Bearer " + m_authorizationToken); QNetworkReply *reply = m_networkManager->get(request); connect(reply, &QNetworkReply::finished, &QNetworkReply::deleteLater); @@ -164,7 +164,7 @@ void LifxCloud::listScenes() QJsonDocument data; QJsonParseError error; data = QJsonDocument::fromJson(rawData, &error); if (error.error != QJsonParseError::NoError) { - qDebug(dcLifx()) << "List scenes: Received invalide JSON object" << error.errorString(); + qCDebug(dcLifx()) << "List scenes: Received invalide JSON object" << error.errorString(); return; } if (!data.isArray()) @@ -213,7 +213,8 @@ int LifxCloud::activateScene(const QString &sceneId) qCWarning(dcLifx()) << "Authorization token is not set"; return -1; } - int requestId = qrand(); + + int requestId = std::rand(); QNetworkRequest request; request.setUrl(QUrl(QString("https://api.lifx.com/v1/scenes/scene_id:%1/activate").arg(sceneId))); @@ -235,7 +236,7 @@ int LifxCloud::setEffect(const QString &lightId, LifxCloud::Effect effect, QColo qCWarning(dcLifx()) << "Authorization token is not set"; return -1; } - int requestId = qrand(); + int requestId = std::rand(); QNetworkRequest request; QUrlQuery params; switch (effect) { @@ -285,7 +286,7 @@ int LifxCloud::setState(const QString &selector, State state, QVariant stateValu qCWarning(dcLifx()) << "Authorization token is not set"; return -1; } - int requestId = qrand(); + int requestId = std::rand(); QNetworkRequest request; request.setUrl(QUrl(QString("https://api.lifx.com/v1/lights/%1/state").arg(selector))); request.setHeader(QNetworkRequest::KnownHeaders::ContentTypeHeader, "application/json"); diff --git a/lifx/lifxcloud.h b/lifx/lifxcloud.h index df95369b..752a8d73 100644 --- a/lifx/lifxcloud.h +++ b/lifx/lifxcloud.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -34,7 +34,8 @@ #include #include #include -#include "network/networkaccessmanager.h" + +#include class LifxCloud : public QObject { @@ -73,13 +74,13 @@ public: }; struct Capabilities { - bool color; - bool colorTemperature; - bool ir; - bool chain; - bool multizone; - int minKelvin; - int maxKelvin; + bool color; + bool colorTemperature; + bool ir; + bool chain; + bool multizone; + int minKelvin; + int maxKelvin; }; struct Product { @@ -105,6 +106,7 @@ public: }; explicit LifxCloud(NetworkAccessManager *networkManager, QObject *parent = nullptr); + void setAuthorizationToken(const QByteArray &token); bool cloudAuthenticated(); bool cloudConnected(); @@ -119,7 +121,7 @@ public: int activateScene(const QString &sceneId); - int setEffect(const QString &lightId, Effect effect, QColor color = "#FFFFFF"); + int setEffect(const QString &lightId, Effect effect, QColor color = QColor("#FFFFFF")); private: NetworkAccessManager *m_networkManager = nullptr; @@ -129,11 +131,12 @@ private: bool checkHttpStatusCode(QNetworkReply *reply); bool m_authenticated = false; bool m_connected = false; + signals: void connectionChanged(bool m_connected); void authenticationChanged(bool m_authenticated); - void lightsListReceived(const QList &lights); - void scenesListReceived(const QList &scenes); + void lightsListReceived(const QList &lights); + void scenesListReceived(const QList &scenes); void requestExecuted(int requestId, bool susccess); }; diff --git a/lifx/lifxlan.cpp b/lifx/lifxlan.cpp index 2c707627..e299cc6b 100644 --- a/lifx/lifxlan.cpp +++ b/lifx/lifxlan.cpp @@ -33,13 +33,14 @@ #include "extern-plugininfo.h" #include +#include LifxLan::LifxLan(const QHostAddress &address, quint16 port, QObject *parent) : QObject(parent), m_host(address), m_port(port) { - m_clientId = qrand(); + m_clientId = std::rand(); m_socket = new QUdpSocket(this); @@ -89,7 +90,7 @@ int LifxLan::setColorTemperature(uint mirad, uint msFadeTime) { Q_UNUSED(mirad) Q_UNUSED(msFadeTime) - int requestId = qrand(); + int requestId = std::rand(); Message message; sendMessage(message); return requestId; @@ -99,7 +100,7 @@ int LifxLan::setColor(QColor color, uint msFadeTime) { Q_UNUSED(color) Q_UNUSED(msFadeTime) - int requestId = qrand(); + int requestId = std::rand(); Message message; //TODO create LAN message sendMessage(message); @@ -110,7 +111,7 @@ int LifxLan::setBrightness(uint percentage, uint msFadeTime) { Q_UNUSED(percentage) Q_UNUSED(msFadeTime) - int requestId = qrand(); + int requestId = std::rand(); Message message; sendMessage(message); //TODO create LAN message @@ -121,7 +122,7 @@ int LifxLan::setPower(bool power, uint msFadeTime) { Q_UNUSED(power) Q_UNUSED(msFadeTime) - int requestId = qrand(); + int requestId = std::rand(); Message message; sendMessage(message); //TODO create LAN message diff --git a/lifx/lifxlan.h b/lifx/lifxlan.h index e15dea84..e029824b 100644 --- a/lifx/lifxlan.h +++ b/lifx/lifxlan.h @@ -36,8 +36,6 @@ #include #include -#include "network/networkaccessmanager.h" - #include class LifxLan : public QObject @@ -111,19 +109,20 @@ public: }; struct LifxProduct { - int pid; - QString name; - bool color; - bool infrared; - bool matrix; - bool multizone; - uint minColorTemperature; - uint maxColorTemperature; - bool chain; + int pid; + QString name; + bool color; + bool infrared; + bool matrix; + bool multizone; + uint minColorTemperature; + uint maxColorTemperature; + bool chain; }; explicit LifxLan(const QHostAddress &address, quint16 port = 56700, QObject *parent = nullptr); ~LifxLan(); + bool enable(); void setHostAddress(const QHostAddress &address); void setPort(quint16 port); @@ -150,5 +149,6 @@ private slots: signals: void connectionChanged(bool connected); void requestExecuted(int requestId, bool success); + }; #endif // LIFXLAN_H From 9e5b735e144631ec93a3c87e2c59b476154e5dc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 14:37:54 +0200 Subject: [PATCH 31/82] logilink: Add Qt6 support --- logilink/integrationpluginlogilink.cpp | 17 +++++++++-------- logilink/integrationpluginlogilink.h | 4 ++-- logilink/logilink.pro | 2 -- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/logilink/integrationpluginlogilink.cpp b/logilink/integrationpluginlogilink.cpp index c5058ada..11cc3180 100644 --- a/logilink/integrationpluginlogilink.cpp +++ b/logilink/integrationpluginlogilink.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2024, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -30,9 +30,10 @@ #include "integrationpluginlogilink.h" #include "plugininfo.h" -#include "plugintimer.h" +#include #include + #include #include #include @@ -243,30 +244,30 @@ void IntegrationPluginLogilink::getStates(Thing *thing) } thing->setStateValue(pdu8p01ConnectedStateTypeId, true); if (xml.readNextStartElement()) { - if (xml.name() == "response") { + if (xml.name() == QString("response")) { qCDebug(dcLogilink()) << "XML contains response"; } else { qCWarning(dcLogilink()) << "xml name" << xml.name(); } while(xml.readNextStartElement()) { qCDebug(dcLogilink()) << "XML name" << xml.name(); - if (xml.name() == "curBan") { + if (xml.name() == QString("curBan")) { auto current = xml.readElementText().toDouble(); qCDebug(dcLogilink()) << "Current" << current; thing->setStateValue(pdu8p01TotalLoadStateTypeId, current); - } else if (xml.name() == "statBan") { + } else if (xml.name() == QString("statBan")) { auto status = xml.readElementText(); qCDebug(dcLogilink()) << "Status" << status; thing->setStateValue(pdu8p01StatusStateTypeId, status); - } else if (xml.name() == "tempBan") { + } else if (xml.name() == QString("tempBan")) { auto temperature = xml.readElementText().toDouble(); qCDebug(dcLogilink()) << "Temperature" << temperature; thing->setStateValue(pdu8p01TemperatureStateTypeId, temperature); - } else if (xml.name() == "humBan") { + } else if (xml.name() == QString("humBan")) { auto humidity = xml.readElementText().toDouble(); qCDebug(dcLogilink()) << "hummidity" << humidity; thing->setStateValue(pdu8p01HumidityStateTypeId, humidity); - } else if (xml.name().startsWith("outletStat")){ + } else if (xml.name().startsWith(QString("outletStat"))){ int socketNumber = xml.name().right(1).toInt(); bool socketValue = xml.readElementText().startsWith("on"); auto socketThing = myThings().filterByParentId(thing->id()) diff --git a/logilink/integrationpluginlogilink.h b/logilink/integrationpluginlogilink.h index 5d77ad79..c2073d70 100644 --- a/logilink/integrationpluginlogilink.h +++ b/logilink/integrationpluginlogilink.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2024, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,7 +31,7 @@ #ifndef INTEGRATIONPLUGINLOGILINK_H #define INTEGRATIONPLUGINLOGILINK_H -#include "integrations/integrationplugin.h" +#include #include diff --git a/logilink/logilink.pro b/logilink/logilink.pro index 41fb471d..9dd6d111 100644 --- a/logilink/logilink.pro +++ b/logilink/logilink.pro @@ -2,8 +2,6 @@ include(../plugins.pri) QT += network xml -TARGET = $$qtLibraryTarget(nymea_integrationpluginlogilink) - SOURCES += \ integrationpluginlogilink.cpp \ From 202e726df436193d918d63530641fac618537cbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 14:43:17 +0200 Subject: [PATCH 32/82] mailnotification: Add Qt6 support --- .../integrationpluginmailnotification.cpp | 6 +++--- .../integrationpluginmailnotification.h | 7 ++++--- mailnotification/mailnotification.pro | 4 +--- mailnotification/smtpclient.cpp | 14 +++++++++----- mailnotification/smtpclient.h | 5 +---- 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/mailnotification/integrationpluginmailnotification.cpp b/mailnotification/integrationpluginmailnotification.cpp index c96875f5..c33ac2a7 100644 --- a/mailnotification/integrationpluginmailnotification.cpp +++ b/mailnotification/integrationpluginmailnotification.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -29,10 +29,10 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "integrationpluginmailnotification.h" - -#include "integrations/thing.h" #include "plugininfo.h" +#include + #include #include #include diff --git a/mailnotification/integrationpluginmailnotification.h b/mailnotification/integrationpluginmailnotification.h index 0ebefaeb..8eb7148d 100644 --- a/mailnotification/integrationpluginmailnotification.h +++ b/mailnotification/integrationpluginmailnotification.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,7 +31,8 @@ #ifndef INTEGRATIONPLUGINMAILNOTIFICATION_H #define INTEGRATIONPLUGINMAILNOTIFICATION_H -#include "integrations/integrationplugin.h" +#include + #include "smtpclient.h" class IntegrationPluginMailNotification : public IntegrationPlugin @@ -52,7 +53,7 @@ public: void thingRemoved(Thing *thing) override; private: - QHash m_clients; + QHash m_clients; }; diff --git a/mailnotification/mailnotification.pro b/mailnotification/mailnotification.pro index ca65461d..47f5d4bd 100644 --- a/mailnotification/mailnotification.pro +++ b/mailnotification/mailnotification.pro @@ -1,8 +1,6 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(nymea_integrationpluginmailnotification) - -QT+= network +QT *= network SOURCES += \ integrationpluginmailnotification.cpp \ diff --git a/mailnotification/smtpclient.cpp b/mailnotification/smtpclient.cpp index dcb9beb9..cac5b5a5 100644 --- a/mailnotification/smtpclient.cpp +++ b/mailnotification/smtpclient.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -42,7 +42,11 @@ SmtpClient::SmtpClient(QObject *parent): connect(m_socket, &QSslSocket::readyRead, this, &SmtpClient::readData); connect(m_socket, &QSslSocket::disconnected, this, &SmtpClient::disconnected); connect(m_socket, &QSslSocket::encrypted, this, &SmtpClient::onEncrypted); +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) + connect(m_socket, &QTcpSocket::errorOccurred, this, &SmtpClient::onSocketError); +#else connect(m_socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onSocketError(QAbstractSocket::SocketError))); +#endif } void SmtpClient::connectToHost() @@ -247,9 +251,9 @@ void SmtpClient::processServerResponse(int responseCode, const QString &response if (m_authenticationMethod == AuthenticationMethodPlain) { send("AUTH PLAIN " + QByteArray().append(static_cast(0)) - .append(m_user) + .append(m_user.toUtf8()) .append(static_cast(0)) - .append(m_password) + .append(m_password.toUtf8()) .toBase64()); // If we just want to test the Login, we are almost done here @@ -266,7 +270,7 @@ void SmtpClient::processServerResponse(int responseCode, const QString &response break; case StateUser: if (responseCode == 334) { - send(QByteArray().append(m_user).toBase64()); + send(QByteArray().append(m_user.toUtf8()).toBase64()); setState(StatePassword); } else { handleUnexpectedSmtpCode(responseCode, response); @@ -274,7 +278,7 @@ void SmtpClient::processServerResponse(int responseCode, const QString &response break; case StatePassword: if (responseCode == 334) { - send(QByteArray().append(m_password).toBase64()); + send(QByteArray().append(m_password.toUtf8()).toBase64()); // if we just want to test the Login, we are almost done here if (!m_testLogin) { setState(StateMail); diff --git a/mailnotification/smtpclient.h b/mailnotification/smtpclient.h index 3f948bdd..80ca6eec 100644 --- a/mailnotification/smtpclient.h +++ b/mailnotification/smtpclient.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -39,8 +39,6 @@ #include #include -//#include "integrations/integrationplugin.h" - Q_DECLARE_LOGGING_CATEGORY(dcSmtpClient) struct Message { @@ -49,7 +47,6 @@ struct Message { int id; }; - class SmtpClient : public QObject { Q_OBJECT From 19921dc6db4a3eaf9d89dd571f818bcdc4b59a92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 14:46:04 +0200 Subject: [PATCH 33/82] mecelectronics: Add Qt6 support --- mecelectronics/integrationpluginmecelectronics.cpp | 11 ++++++----- mecelectronics/integrationpluginmecelectronics.h | 4 ++-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/mecelectronics/integrationpluginmecelectronics.cpp b/mecelectronics/integrationpluginmecelectronics.cpp index 1f2fef14..706857a1 100644 --- a/mecelectronics/integrationpluginmecelectronics.cpp +++ b/mecelectronics/integrationpluginmecelectronics.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,11 +31,12 @@ #include "integrationpluginmecelectronics.h" #include "plugininfo.h" -#include #include +#include #include #include +#include #include #include #include @@ -69,8 +70,8 @@ void IntegrationPluginMecMeter::discoverThings(ThingDiscoveryInfo *info) continue; } qCDebug(dcMecElectronics()) << "zeroconf entry:" << entry; - QRegExp match("mec[A-Z0-9]{12}"); - if (match.exactMatch(entry.name())) { + + if (QRegularExpression("mec[A-Z0-9]{12}").match(entry.name()).hasMatch()) { qCDebug(dcMecElectronics()) << "Found mec meter!"; ThingDescriptor descriptor(mecMeterThingClassId, entry.name(), entry.hostAddress().toString()); descriptor.setParams({Param(mecMeterThingIdParamTypeId, entry.name())}); @@ -345,7 +346,7 @@ QNetworkRequest IntegrationPluginMecMeter::composeRequest(const QString &meterId if (address.isNull()) { pluginStorage()->beginGroup(meterId); - address = pluginStorage()->value("cachedAddress").toString(); + address = QHostAddress(pluginStorage()->value("cachedAddress").toString()); pluginStorage()->endGroup(); } diff --git a/mecelectronics/integrationpluginmecelectronics.h b/mecelectronics/integrationpluginmecelectronics.h index c0534e78..65f4406a 100644 --- a/mecelectronics/integrationpluginmecelectronics.h +++ b/mecelectronics/integrationpluginmecelectronics.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,7 +31,7 @@ #ifndef INTEGRATIONPLUGINMECMETER_H #define INTEGRATIONPLUGINMECMETER_H -#include "integrations/integrationplugin.h" +#include class PluginTimer; class ZeroConfServiceBrowser; From f4a6c8bff968c25a600a1d85102417ddf61ae516 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 14:47:31 +0200 Subject: [PATCH 34/82] meross: Add Qt6 support --- meross/integrationpluginmeross.cpp | 9 +++++---- meross/integrationpluginmeross.h | 5 +++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/meross/integrationpluginmeross.cpp b/meross/integrationpluginmeross.cpp index c9a446cc..7a0491da 100644 --- a/meross/integrationpluginmeross.cpp +++ b/meross/integrationpluginmeross.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2024, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -32,16 +32,17 @@ #include "integrationpluginmeross.h" #include "plugininfo.h" -#include #include #include #include +#include #include #include #include #include #include +#include IntegrationPluginMeross::IntegrationPluginMeross() { @@ -122,7 +123,7 @@ void IntegrationPluginMeross::confirmPairing(ThingPairingInfo *info, const QStri params.insert("password", secret); QByteArray encodedParams = QJsonDocument::fromVariant(params).toJson(QJsonDocument::Compact).toBase64(); - QByteArray nonce = QUuid::createUuid().toString().remove(QRegExp("[{}-]")).left(16).toUtf8(); + QByteArray nonce = QUuid::createUuid().toString().remove(QRegularExpression("[{}-]")).left(16).toUtf8(); QByteArray initKey = "23x17ahWarFH6w29"; QByteArray timestamp = QByteArray::number(QDateTime::currentMSecsSinceEpoch() / 1000); QByteArray signature = initKey + timestamp + nonce + encodedParams; @@ -373,7 +374,7 @@ QNetworkReply* IntegrationPluginMeross::request(Thing *thing, const QString &nam { QByteArray key = m_keys.value(thing); - QString messageId = QUuid::createUuid().toString().remove(QRegExp("[{}-]")); + QString messageId = QUuid::createUuid().toString().remove(QRegularExpression("[{}-]")); qulonglong timestamp = QDateTime::currentMSecsSinceEpoch(); quint16 timestampMs = timestamp % 1000; timestamp = timestamp / 1000; diff --git a/meross/integrationpluginmeross.h b/meross/integrationpluginmeross.h index 8cc63296..5d032678 100644 --- a/meross/integrationpluginmeross.h +++ b/meross/integrationpluginmeross.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2024, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,7 +31,8 @@ #ifndef INTEGRATIONPLUGINMEROSS_H #define INTEGRATIONPLUGINMEROSS_H -#include "integrations/integrationplugin.h" +#include + #include "extern-plugininfo.h" class PluginTimer; From c323e0ffd7e9123bd824fb76744839004b22cd7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 14:49:01 +0200 Subject: [PATCH 35/82] mqttclient: Add Qt6 support --- mqttclient/integrationpluginmqttclient.cpp | 10 ++++++---- mqttclient/integrationpluginmqttclient.h | 4 ++-- mqttclient/mqttclient.pro | 2 -- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/mqttclient/integrationpluginmqttclient.cpp b/mqttclient/integrationpluginmqttclient.cpp index d6189b15..34be7e22 100644 --- a/mqttclient/integrationpluginmqttclient.cpp +++ b/mqttclient/integrationpluginmqttclient.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -29,9 +29,10 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "integrationpluginmqttclient.h" -#include "integrations/thing.h" #include "plugininfo.h" -#include "network/mqtt/mqttprovider.h" + +#include +#include #include @@ -173,7 +174,8 @@ void IntegrationPluginMqttClient::publishReceived(const QString &topic, const QB topicParamTypeId = mqttClientTriggeredEventTopicParamTypeId; payloadParamTypeId = mqttClientTriggeredEventDataParamTypeId; } - emitEvent(Event(eventTypeId, thing->id(), ParamList() << Param(topicParamTypeId, topic) << Param(payloadParamTypeId, payload))); + + emit emitEvent(Event(eventTypeId, thing->id(), ParamList() << Param(topicParamTypeId, topic) << Param(payloadParamTypeId, payload))); } void IntegrationPluginMqttClient::thingRemoved(Thing *thing) diff --git a/mqttclient/integrationpluginmqttclient.h b/mqttclient/integrationpluginmqttclient.h index 6ddf12ef..09e8e439 100644 --- a/mqttclient/integrationpluginmqttclient.h +++ b/mqttclient/integrationpluginmqttclient.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,7 +31,7 @@ #ifndef INTEGRATIONPLUGINMQTTCLIENT_H #define INTEGRATIONPLUGINMQTTCLIENT_H -#include "integrations/integrationplugin.h" +#include #include #include diff --git a/mqttclient/mqttclient.pro b/mqttclient/mqttclient.pro index c63d7bcc..feecf735 100644 --- a/mqttclient/mqttclient.pro +++ b/mqttclient/mqttclient.pro @@ -4,8 +4,6 @@ QT += network PKGCONFIG += nymea-mqtt -TARGET = $$qtLibraryTarget(nymea_integrationpluginmqttclient) - SOURCES += \ integrationpluginmqttclient.cpp From 47d8cb8a7b7929b46627d3d579718bbded465d52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 14:51:07 +0200 Subject: [PATCH 36/82] mystrom: Add Qt6 support --- mystrom/integrationpluginmystrom.cpp | 4 ++-- mystrom/integrationpluginmystrom.h | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/mystrom/integrationpluginmystrom.cpp b/mystrom/integrationpluginmystrom.cpp index 6ac536b3..45d464a5 100644 --- a/mystrom/integrationpluginmystrom.cpp +++ b/mystrom/integrationpluginmystrom.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2021, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -254,7 +254,7 @@ QUrl IntegrationPluginMyStrom::composeUrl(Thing *thing, const QString &path) if (address.isNull()) { pluginStorage()->beginGroup(thing->id().toString()); - address = pluginStorage()->value("cachedAddress").toString(); + address = QHostAddress(pluginStorage()->value("cachedAddress").toString()); pluginStorage()->endGroup(); } diff --git a/mystrom/integrationpluginmystrom.h b/mystrom/integrationpluginmystrom.h index 8091eaa4..d3efe39a 100644 --- a/mystrom/integrationpluginmystrom.h +++ b/mystrom/integrationpluginmystrom.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2021, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,7 +31,7 @@ #ifndef INTEGRATIONPLUGINMYSTROM_H #define INTEGRATIONPLUGINMYSTROM_H -#include "integrations/integrationplugin.h" +#include #include #include @@ -58,7 +58,7 @@ public: void executeAction(ThingActionInfo *info) override; private: - void finishDiscoveryReply(QNetworkReply* reply, ThingDiscoveryInfo* info, QList *pendingReplies); + void finishDiscoveryReply(QNetworkReply *reply, ThingDiscoveryInfo *info, QList *pendingReplies); QUrl composeUrl(Thing *thing, const QString &path); ZeroConfServiceBrowser *m_zeroConf = nullptr; From 2b3d60071e1585e54f05da3f29178e0fa84c037b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 14:55:46 +0200 Subject: [PATCH 37/82] nanoleaf: Add Qt6 support --- nanoleaf/integrationpluginnanoleaf.cpp | 19 +++++----- nanoleaf/integrationpluginnanoleaf.h | 16 ++++----- nanoleaf/nanoleaf.cpp | 48 +++++++++++++------------- nanoleaf/nanoleaf.h | 12 +++---- 4 files changed, 47 insertions(+), 48 deletions(-) diff --git a/nanoleaf/integrationpluginnanoleaf.cpp b/nanoleaf/integrationpluginnanoleaf.cpp index 8410c959..caf4fd3b 100644 --- a/nanoleaf/integrationpluginnanoleaf.cpp +++ b/nanoleaf/integrationpluginnanoleaf.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,8 +31,8 @@ #include "integrationpluginnanoleaf.h" #include "plugininfo.h" -#include "network/zeroconf/zeroconfservicebrowser.h" -#include "platform/platformzeroconfcontroller.h" +#include +#include #include #include @@ -60,9 +60,8 @@ void IntegrationPluginNanoleaf::discoverThings(ThingDiscoveryInfo *info) QString model = entry.txt("md"); QString firmwareVersion = entry.txt("srcvers"); - if (serialNumbers.contains(serialNo)) { + if (serialNumbers.contains(serialNo)) continue; //To avoid duplicated devices - } Thing *existingThing = myThings().findByParams(ParamList() << Param(lightPanelsThingSerialNoParamTypeId, serialNo)); if (existingThing) { @@ -199,29 +198,29 @@ void IntegrationPluginNanoleaf::executeAction(ThingActionInfo *info) if (action.actionTypeId() == lightPanelsPowerActionTypeId) { bool power = action.param(lightPanelsPowerActionPowerParamTypeId).value().toBool(); QUuid requestId = nanoleaf->setPower(power); - connect(info, &ThingActionInfo::aborted,[requestId, this](){m_asyncActions.remove(requestId);}); + connect(info, &ThingActionInfo::aborted, this, [requestId, this](){ m_asyncActions.remove(requestId); }); m_asyncActions.insert(requestId, info); } else if (action.actionTypeId() == lightPanelsBrightnessActionTypeId) { int brightness = action.param(lightPanelsBrightnessActionBrightnessParamTypeId).value().toInt(); QUuid requestId = nanoleaf->setBrightness(brightness); - connect(info, &ThingActionInfo::aborted,[requestId, this](){m_asyncActions.remove(requestId);}); + connect(info, &ThingActionInfo::aborted, this, [requestId, this](){ m_asyncActions.remove(requestId); }); m_asyncActions.insert(requestId, info); } else if (action.actionTypeId() == lightPanelsColorActionTypeId) { QColor color(action.param(lightPanelsColorActionColorParamTypeId).value().toString()); QUuid requestId = nanoleaf->setColor(color); - connect(info, &ThingActionInfo::aborted,[requestId, this](){m_asyncActions.remove(requestId);}); + connect(info, &ThingActionInfo::aborted, this, [requestId, this](){ m_asyncActions.remove(requestId); }); m_asyncActions.insert(requestId, info); } else if (action.actionTypeId() == lightPanelsColorTemperatureActionTypeId) { int colorTemperature = action.param(lightPanelsColorTemperatureActionColorTemperatureParamTypeId).value().toInt(); QUuid requestId = nanoleaf->setMired(colorTemperature); - connect(info, &ThingActionInfo::aborted,[requestId, this](){m_asyncActions.remove(requestId);}); + connect(info, &ThingActionInfo::aborted, this, [requestId, this](){ m_asyncActions.remove(requestId); }); m_asyncActions.insert(requestId, info); } else if (action.actionTypeId() == lightPanelsAlertActionTypeId) { QUuid requestId = nanoleaf->identify(); - connect(info, &ThingActionInfo::aborted,[requestId, this](){m_asyncActions.remove(requestId);}); + connect(info, &ThingActionInfo::aborted, this, [requestId, this](){ m_asyncActions.remove(requestId); }); m_asyncActions.insert(requestId, info); } } diff --git a/nanoleaf/integrationpluginnanoleaf.h b/nanoleaf/integrationpluginnanoleaf.h index 017ed2da..74e2b01c 100644 --- a/nanoleaf/integrationpluginnanoleaf.h +++ b/nanoleaf/integrationpluginnanoleaf.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,12 +31,12 @@ #ifndef INTEGRATIONPLUGINNANOLEAF_H #define INTEGRATIONPLUGINNANOLEAF_H -#include "integrations/integrationplugin.h" -#include "nanoleaf.h" +#include +#include +#include +#include -#include "plugintimer.h" -#include "network/networkaccessmanager.h" -#include "network/zeroconf/zeroconfservicebrowser.h" +#include "nanoleaf.h" #include @@ -66,8 +66,8 @@ public: private: ZeroConfServiceBrowser *m_zeroconfBrowser = nullptr; PluginTimer *m_pluginTimer = nullptr; - QHash m_nanoleafConnections; - QHash m_unfinishedNanoleafConnections; + QHash m_nanoleafConnections; + QHash m_unfinishedNanoleafConnections; QHash m_asyncActions; QHash m_unfinishedPairing; QHash m_asyncDeviceSetup; diff --git a/nanoleaf/nanoleaf.cpp b/nanoleaf/nanoleaf.cpp index 0102e55b..7609c2b0 100644 --- a/nanoleaf/nanoleaf.cpp +++ b/nanoleaf/nanoleaf.cpp @@ -87,7 +87,7 @@ void Nanoleaf::addUser() request.setUrl(url); request.setHeader(QNetworkRequest::KnownHeaders::ContentTypeHeader, "application/json"); QNetworkReply *reply = m_networkManager->post(request, ""); - //qDebug(dcNanoleaf()) << "Sending request" << request.url(); + //qCDebug(dcNanoleaf()) << "Sending request" << request.url(); connect(reply, &QNetworkReply::finished, this, [reply, this] { reply->deleteLater(); int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); @@ -108,7 +108,7 @@ void Nanoleaf::addUser() QJsonParseError error; QJsonDocument data = QJsonDocument::fromJson(reply->readAll(), &error); if (error.error != QJsonParseError::NoError) { - qDebug(dcNanoleaf()) << "Recieved invalide JSON object"; + qCDebug(dcNanoleaf()) << "Recieved invalide JSON object"; return; } m_authToken = data.toVariant().toMap().value("auth_token").toString(); @@ -129,7 +129,7 @@ void Nanoleaf::deleteUser() QNetworkRequest request; request.setUrl(url); QNetworkReply *reply = m_networkManager->deleteResource(request); - //qDebug(dcNanoleaf()) << "Sending request" << request.url(); + //qCDebug(dcNanoleaf()) << "Sending request" << request.url(); connect(reply, &QNetworkReply::finished, this, [reply, this] { reply->deleteLater(); int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); @@ -153,7 +153,7 @@ void Nanoleaf::getControllerInfo() QNetworkRequest request; request.setUrl(url); QNetworkReply *reply = m_networkManager->get(request); - //qDebug(dcNanoleaf()) << "Sending request" << request.url(); + //qCDebug(dcNanoleaf()) << "Sending request" << request.url(); connect(reply, &QNetworkReply::finished, this, [reply, this] { reply->deleteLater(); int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); @@ -166,7 +166,7 @@ void Nanoleaf::getControllerInfo() QJsonParseError error; QJsonDocument data = QJsonDocument::fromJson(reply->readAll(), &error); if (error.error != QJsonParseError::NoError) { - qDebug(dcNanoleaf()) << "Recieved invalide JSON object"; + qCDebug(dcNanoleaf()) << "Recieved invalide JSON object"; return; } emit connectionChanged(true); @@ -241,7 +241,7 @@ void Nanoleaf::getPower() QNetworkRequest request; request.setUrl(url); QNetworkReply *reply = m_networkManager->get(request); - //qDebug(dcNanoleaf()) << "Sending request" << request.url(); + //qCDebug(dcNanoleaf()) << "Sending request" << request.url(); connect(reply, &QNetworkReply::finished, this, [reply, this] { reply->deleteLater(); int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); @@ -254,7 +254,7 @@ void Nanoleaf::getPower() QJsonParseError error; QJsonDocument data = QJsonDocument::fromJson(reply->readAll(), &error); if (error.error != QJsonParseError::NoError) { - qDebug(dcNanoleaf()) << "Recieved invalide JSON object"; + qCDebug(dcNanoleaf()) << "Recieved invalide JSON object"; return; } bool power = data.toVariant().toMap().value("value").toBool(); @@ -274,7 +274,7 @@ void Nanoleaf::getHue() QNetworkRequest request; request.setUrl(url); QNetworkReply *reply = m_networkManager->get(request); - //qDebug(dcNanoleaf()) << "Sending request" << request.url(); + //qCDebug(dcNanoleaf()) << "Sending request" << request.url(); connect(reply, &QNetworkReply::finished, this, [reply, this] { reply->deleteLater(); int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); @@ -286,7 +286,7 @@ void Nanoleaf::getHue() QJsonParseError error; QJsonDocument data = QJsonDocument::fromJson(reply->readAll(), &error); if (error.error != QJsonParseError::NoError) { - qDebug(dcNanoleaf()) << "Recieved invalide JSON object"; + qCDebug(dcNanoleaf()) << "Recieved invalide JSON object"; return; } int hue = data.toVariant().toMap().value("value").toBool(); @@ -317,7 +317,7 @@ void Nanoleaf::getBrightness() QJsonParseError error; QJsonDocument data = QJsonDocument::fromJson(reply->readAll(), &error); if (error.error != QJsonParseError::NoError) { - qDebug(dcNanoleaf()) << "Recieved invalide JSON object"; + qCDebug(dcNanoleaf()) << "Recieved invalide JSON object"; return; } int brightness = data.toVariant().toMap().value("value").toInt(); @@ -348,7 +348,7 @@ void Nanoleaf::getSaturation() QJsonParseError error; QJsonDocument data = QJsonDocument::fromJson(reply->readAll(), &error); if (error.error != QJsonParseError::NoError) { - qDebug(dcNanoleaf()) << "Recieved invalide JSON object"; + qCDebug(dcNanoleaf()) << "Recieved invalide JSON object"; return; } int brightness = data.toVariant().toMap().value("value").toInt(); @@ -380,7 +380,7 @@ void Nanoleaf::getColorTemperature() QJsonParseError error; QJsonDocument data = QJsonDocument::fromJson(reply->readAll(), &error); if (error.error != QJsonParseError::NoError) { - qDebug(dcNanoleaf()) << "Recieved invalide JSON object"; + qCDebug(dcNanoleaf()) << "Recieved invalide JSON object"; return; } int kelvin = data.toVariant().toMap().value("value").toInt(); @@ -412,7 +412,7 @@ void Nanoleaf::getColorMode() QJsonParseError error; QJsonDocument data = QJsonDocument::fromJson(reply->readAll(), &error); if (error.error != QJsonParseError::NoError) { - qDebug(dcNanoleaf()) << "Recieved invalide JSON object"; + qCDebug(dcNanoleaf()) << "Recieved invalide JSON object"; return; } emit connectionChanged(true); @@ -443,11 +443,11 @@ void Nanoleaf::registerForEvents() request.setUrl(url); QNetworkReply *reply = m_networkManager->get(request); - connect(reply, &QNetworkReply::readyRead, this, [reply, this] { + connect(reply, &QNetworkReply::readyRead, this, [reply] { QJsonParseError error; QJsonDocument data = QJsonDocument::fromJson(reply->readAll(), &error); if (error.error != QJsonParseError::NoError) { - qDebug(dcNanoleaf()) << "Recieved invalide JSON object"; + qCDebug(dcNanoleaf()) << "Recieved invalide JSON object"; return; } qCDebug(dcNanoleaf()) << "On event stream" << data.toJson(); @@ -464,7 +464,7 @@ void Nanoleaf::registerForEvents() QJsonParseError error; QJsonDocument data = QJsonDocument::fromJson(reply->readAll(), &error); if (error.error != QJsonParseError::NoError) { - qDebug(dcNanoleaf()) << "Recieved invalide JSON object"; + qCDebug(dcNanoleaf()) << "Recieved invalide JSON object"; return; } qCDebug(dcNanoleaf()) << "Event received" << data.toJson(); @@ -528,7 +528,7 @@ QUuid Nanoleaf::setPower(bool power) request.setUrl(url); request.setHeader(QNetworkRequest::KnownHeaders::ContentTypeHeader, "application/json"); QNetworkReply *reply = m_networkManager->put(request, body.toJson()); - //qDebug(dcNanoleaf()) << "Sending request" << request.url(); + //qCDebug(dcNanoleaf()) << "Sending request" << request.url(); connect(reply, &QNetworkReply::finished, this, [requestId, reply, this] { reply->deleteLater(); int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); @@ -570,7 +570,7 @@ QUuid Nanoleaf::setHue(int hue) request.setUrl(url); request.setHeader(QNetworkRequest::KnownHeaders::ContentTypeHeader, "application/json"); QNetworkReply *reply = m_networkManager->put(request, body.toJson()); - //qDebug(dcNanoleaf()) << "Sending request" << request.url(); + //qCDebug(dcNanoleaf()) << "Sending request" << request.url(); connect(reply, &QNetworkReply::finished, this, [requestId, reply, this] { reply->deleteLater(); int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); @@ -604,7 +604,7 @@ QUuid Nanoleaf::setBrightness(int percentage) request.setUrl(url); request.setHeader(QNetworkRequest::KnownHeaders::ContentTypeHeader, "application/json"); QNetworkReply *reply = m_networkManager->put(request, body.toJson()); - //qDebug(dcNanoleaf()) << "Sending request" << request.url(); + //qCDebug(dcNanoleaf()) << "Sending request" << request.url(); connect(reply, &QNetworkReply::finished, this, [requestId, reply, this] { reply->deleteLater(); int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); @@ -638,7 +638,7 @@ QUuid Nanoleaf::setSaturation(int percentage) request.setUrl(url); request.setHeader(QNetworkRequest::KnownHeaders::ContentTypeHeader, "application/json"); QNetworkReply *reply = m_networkManager->put(request, body.toJson()); - //qDebug(dcNanoleaf()) << "Sending request" << request.url() << body.toJson(); + //qCDebug(dcNanoleaf()) << "Sending request" << request.url() << body.toJson(); connect(reply, &QNetworkReply::finished, this, [requestId, reply, this] { reply->deleteLater(); int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); @@ -680,7 +680,7 @@ QUuid Nanoleaf::setKelvin(int kelvin) request.setUrl(url); request.setHeader(QNetworkRequest::KnownHeaders::ContentTypeHeader, "application/json"); QNetworkReply *reply = m_networkManager->put(request, body.toJson()); - qDebug(dcNanoleaf()) << "Sending request" << request.url() << body.toJson(); + qCDebug(dcNanoleaf()) << "Sending request" << request.url() << body.toJson(); connect(reply, &QNetworkReply::finished, this, [requestId, reply, this] { reply->deleteLater(); int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); @@ -718,7 +718,7 @@ void Nanoleaf::getEffects() QJsonParseError error; QJsonDocument data = QJsonDocument::fromJson(reply->readAll(), &error); if (error.error != QJsonParseError::NoError) { - qDebug(dcNanoleaf()) << "Recieved invalide JSON object"; + qCDebug(dcNanoleaf()) << "Recieved invalide JSON object"; return; } QStringList effects; @@ -774,7 +774,7 @@ QUuid Nanoleaf::setEffect(const QString &effect) request.setUrl(url); request.setHeader(QNetworkRequest::KnownHeaders::ContentTypeHeader, "application/json"); QNetworkReply *reply = m_networkManager->put(request, body.toJson()); - qDebug(dcNanoleaf()) << "Sending request" << request.url(); + qCDebug(dcNanoleaf()) << "Sending request" << request.url(); connect(reply, &QNetworkReply::finished, this, [requestId, reply, this] { reply->deleteLater(); int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); @@ -802,7 +802,7 @@ QUuid Nanoleaf::identify() request.setUrl(url); request.setHeader(QNetworkRequest::KnownHeaders::ContentTypeHeader, "application/json"); QNetworkReply *reply = m_networkManager->put(request, ""); - qDebug(dcNanoleaf()) << "Sending request" << request.url(); + qCDebug(dcNanoleaf()) << "Sending request" << request.url(); connect(reply, &QNetworkReply::finished, this, [requestId, reply, this] { reply->deleteLater(); int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); diff --git a/nanoleaf/nanoleaf.h b/nanoleaf/nanoleaf.h index d0db87d8..c8d677a9 100644 --- a/nanoleaf/nanoleaf.h +++ b/nanoleaf/nanoleaf.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -37,8 +37,8 @@ #include #include -#include "network/networkaccessmanager.h" -#include "integrations/thing.h" +#include +#include class Nanoleaf : public QObject { @@ -119,11 +119,11 @@ signals: void authenticationStatusChanged(bool authenticated); void requestExecuted(QUuid requestId, bool success); - void controllerInfoReceived(const ControllerInfo &controllerInfo); + void controllerInfoReceived(const Nanoleaf::ControllerInfo &controllerInfo); void authTokenRecieved(const QString &token); void powerReceived(bool power); void brightnessReceived(int percentage); - void colorModeReceived(ColorMode colorMode); + void colorModeReceived(Nanoleaf::ColorMode colorMode); void hueReceived(int hue); void saturationReceived(int percentage); void effectListReceived(const QStringList &effects); @@ -132,7 +132,7 @@ signals: void selectedEffectReceived(const QString &effect); //Only supported by Canvas - void touchEventReceived(GestureID gesture); + void touchEventReceived(Nanoleaf::GestureID gesture); }; #endif // NANOLEAF_H From d84f69466af19a97c3d323977d7e449d055a2f7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 14:56:59 +0200 Subject: [PATCH 38/82] netatmo: Add Qt6 support --- netatmo/integrationpluginnetatmo.cpp | 2 +- netatmo/netatmo.pro | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/netatmo/integrationpluginnetatmo.cpp b/netatmo/integrationpluginnetatmo.cpp index 60f46c6c..e68f2342 100644 --- a/netatmo/integrationpluginnetatmo.cpp +++ b/netatmo/integrationpluginnetatmo.cpp @@ -103,7 +103,7 @@ void IntegrationPluginNetatmo::confirmPairing(ThingPairingInfo *info, const QStr NetatmoConnection *connection = m_pendingSetups.value(info->thingId()); if (!connection) { - qWarning(dcNetatmo()) << "No NetatmoConnect connection found for device:" << info->thingName(); + qCWarning(dcNetatmo()) << "No NetatmoConnect connection found for device:" << info->thingName(); m_pendingSetups.remove(info->thingId()); info->finish(Thing::ThingErrorHardwareFailure); return; diff --git a/netatmo/netatmo.pro b/netatmo/netatmo.pro index 04bd1cb8..b22791af 100644 --- a/netatmo/netatmo.pro +++ b/netatmo/netatmo.pro @@ -1,8 +1,6 @@ include(../plugins.pri) -QT += network - -TARGET = $$qtLibraryTarget(nymea_integrationpluginnetatmo) +QT *= network SOURCES += \ integrationpluginnetatmo.cpp \ From a7ccccd962efa69cc5a2f296443c5cd702943ca5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 14:58:15 +0200 Subject: [PATCH 39/82] networkdetector: Add Qt6 support --- networkdetector/networkdetector.pro | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/networkdetector/networkdetector.pro b/networkdetector/networkdetector.pro index b0e50179..b3bd0391 100644 --- a/networkdetector/networkdetector.pro +++ b/networkdetector/networkdetector.pro @@ -1,8 +1,6 @@ include(../plugins.pri) -QT += network - -TARGET = $$qtLibraryTarget(nymea_integrationpluginnetworkdetector) +QT *= network SOURCES += \ integrationpluginnetworkdetector.cpp From d991034b6198f7a55e287c0a3cd3952b286d99c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 15:00:32 +0200 Subject: [PATCH 40/82] notifyevents: Add Qt6 support --- notifyevents/integrationpluginnotifyevents.cpp | 9 +++------ notifyevents/notifyevents.pro | 2 +- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/notifyevents/integrationpluginnotifyevents.cpp b/notifyevents/integrationpluginnotifyevents.cpp index 312de450..06a5b9c7 100644 --- a/notifyevents/integrationpluginnotifyevents.cpp +++ b/notifyevents/integrationpluginnotifyevents.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2023, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -81,7 +81,7 @@ void IntegrationPluginNotfyEvents::executeAction(ThingActionInfo *info) connect(reply, &QNetworkReply::finished, info, [reply, info]{ if (reply->error() != QNetworkReply::NoError) { qCWarning(dcNotifyEvents()) << "Notify.Events message sending failed for" << info->thing()->name() << info->thing()->id() << reply->errorString() << reply->error(); - emit info->finish(Thing::ThingErrorHardwareNotAvailable); + info->finish(Thing::ThingErrorHardwareNotAvailable); return; } @@ -96,10 +96,7 @@ void IntegrationPluginNotfyEvents::executeAction(ThingActionInfo *info) return; } - QVariantMap replyMap = jsonDoc.toVariant().toMap(); - qDebug(dcNotifyEvents()) << qUtf8Printable(jsonDoc.toJson()); - - + qCDebug(dcNotifyEvents()) << qUtf8Printable(jsonDoc.toJson()); qCDebug(dcNotifyEvents()) << "Message sent successfully"; info->finish(Thing::ThingErrorNoError); }); diff --git a/notifyevents/notifyevents.pro b/notifyevents/notifyevents.pro index 4978109a..5ac77022 100644 --- a/notifyevents/notifyevents.pro +++ b/notifyevents/notifyevents.pro @@ -1,6 +1,6 @@ include(../plugins.pri) -QT+= network +QT *= network SOURCES += \ integrationpluginnotifyevents.cpp From 35abae7683117f51f6036aa0b9e9c901e6c20edf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 15:32:03 +0200 Subject: [PATCH 41/82] nuki: Add Qt6 support --- nuki/integrationpluginnuki.cpp | 8 ++++--- nuki/integrationpluginnuki.h | 10 ++++----- nuki/nuki.cpp | 32 ++++++++++++++++++++++++++ nuki/nuki.h | 11 ++++----- nuki/nuki.pro | 4 +--- nuki/nukiauthenticator.cpp | 41 +++++++++++++++++++++++++--------- nuki/nukiauthenticator.h | 2 +- nuki/nukicontroller.cpp | 34 +++++++++++++++++++++++++--- nuki/nukiutils.cpp | 38 ++++++++++++++++++++++++++++--- 9 files changed, 147 insertions(+), 33 deletions(-) diff --git a/nuki/integrationpluginnuki.cpp b/nuki/integrationpluginnuki.cpp index 46f64201..a58256c4 100644 --- a/nuki/integrationpluginnuki.cpp +++ b/nuki/integrationpluginnuki.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -29,9 +29,11 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "integrationpluginnuki.h" -#include "integrations/thing.h" #include "plugininfo.h" -#include "hardware/bluetoothlowenergy/bluetoothlowenergymanager.h" + +#include +#include + extern "C"{ #include "sodium.h" diff --git a/nuki/integrationpluginnuki.h b/nuki/integrationpluginnuki.h index 08dcf05d..699d27f6 100644 --- a/nuki/integrationpluginnuki.h +++ b/nuki/integrationpluginnuki.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,9 +31,9 @@ #ifndef INTEGRATIONPLUGINNUKI_H #define INTEGRATIONPLUGINNUKI_H -#include "plugintimer.h" -#include "integrations/integrationplugin.h" -#include "bluez/bluetoothmanager.h" +#include +#include +#include #include "nuki.h" @@ -41,7 +41,7 @@ class IntegrationPluginNuki : public IntegrationPlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "integrationpluginnuki.json") + Q_PLUGIN_METADATA(IID "io.nymea.IntegrationPlugin" FILE "integrationpluginnuki.json") Q_INTERFACES(IntegrationPlugin) public: diff --git a/nuki/nuki.cpp b/nuki/nuki.cpp index 6c7d7390..11005ce7 100644 --- a/nuki/nuki.cpp +++ b/nuki/nuki.cpp @@ -154,6 +154,15 @@ void Nuki::printServices() void Nuki::readDeviceInformationCharacteristics() { qCDebug(dcNuki()) << "Start reading device information"; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + m_initUuidsToRead.append(QBluetoothUuid::CharacteristicType::SerialNumberString); + m_initUuidsToRead.append(QBluetoothUuid::CharacteristicType::HardwareRevisionString); + m_initUuidsToRead.append(QBluetoothUuid::CharacteristicType::FirmwareRevisionString); + + m_deviceInformationService->readCharacteristic(QBluetoothUuid::CharacteristicType::SerialNumberString); + m_deviceInformationService->readCharacteristic(QBluetoothUuid::CharacteristicType::HardwareRevisionString); + m_deviceInformationService->readCharacteristic(QBluetoothUuid::CharacteristicType::FirmwareRevisionString); +#else m_initUuidsToRead.append(QBluetoothUuid::SerialNumberString); m_initUuidsToRead.append(QBluetoothUuid::HardwareRevisionString); m_initUuidsToRead.append(QBluetoothUuid::FirmwareRevisionString); @@ -161,6 +170,8 @@ void Nuki::readDeviceInformationCharacteristics() m_deviceInformationService->readCharacteristic(QBluetoothUuid::SerialNumberString); m_deviceInformationService->readCharacteristic(QBluetoothUuid::HardwareRevisionString); m_deviceInformationService->readCharacteristic(QBluetoothUuid::FirmwareRevisionString); +#endif + } void Nuki::executeCurrentAction() @@ -253,6 +264,18 @@ void Nuki::onBluetoothDeviceStateChanged(const BluetoothDevice::State &state) void Nuki::onDeviceInfoCharacteristicReadFinished(BluetoothGattCharacteristic *characteristic, const QByteArray &value) { qCDebug(dcNuki()) << "Read thing information characteristic finished" << characteristic->chararcteristicName() << qUtf8Printable(value); +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + if (characteristic->uuid() == QBluetoothUuid::CharacteristicType::SerialNumberString) { + m_serialNumber = QString::fromUtf8(value); + m_initUuidsToRead.removeOne(QBluetoothUuid::CharacteristicType::SerialNumberString); + } else if (characteristic->uuid() == QBluetoothUuid::CharacteristicType::HardwareRevisionString) { + m_hardwareRevision = QString::fromUtf8(value); + m_initUuidsToRead.removeOne(QBluetoothUuid::CharacteristicType::HardwareRevisionString); + } else if (characteristic->uuid() == QBluetoothUuid::CharacteristicType::FirmwareRevisionString) { + m_firmwareRevision = QString::fromUtf8(value); + m_initUuidsToRead.removeOne(QBluetoothUuid::CharacteristicType::FirmwareRevisionString); + } +#else if (characteristic->uuid() == QBluetoothUuid::SerialNumberString) { m_serialNumber = QString::fromUtf8(value); m_initUuidsToRead.removeOne(QBluetoothUuid::SerialNumberString); @@ -263,6 +286,7 @@ void Nuki::onDeviceInfoCharacteristicReadFinished(BluetoothGattCharacteristic *c m_firmwareRevision = QString::fromUtf8(value); m_initUuidsToRead.removeOne(QBluetoothUuid::FirmwareRevisionString); } +#endif if (m_initUuidsToRead.isEmpty()) { // Initial read done. Make thing available @@ -412,7 +436,11 @@ bool Nuki::init() } // Verify services +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + if (!m_bluetoothDevice->hasService(QBluetoothUuid::ServiceClassUuid::DeviceInformation)) { +#else if (!m_bluetoothDevice->hasService(QBluetoothUuid::DeviceInformation)) { +#endif qCWarning(dcNuki()) << "Could not find device information service on device" << m_bluetoothDevice; return false; } @@ -429,7 +457,11 @@ bool Nuki::init() // Create service and characteristic objects // Device information +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + m_deviceInformationService = m_bluetoothDevice->getService(QBluetoothUuid::ServiceClassUuid::DeviceInformation); +#else m_deviceInformationService = m_bluetoothDevice->getService(QBluetoothUuid::DeviceInformation); +#endif connect(m_deviceInformationService, &BluetoothGattService::characteristicReadFinished, this, &Nuki::onDeviceInfoCharacteristicReadFinished); // Keyturner service diff --git a/nuki/nuki.h b/nuki/nuki.h index 8d664260..71ebf40c 100644 --- a/nuki/nuki.h +++ b/nuki/nuki.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -37,15 +37,16 @@ #include #include -#include "typeutils.h" -#include "integrations/thing.h" -#include "bluez/bluetoothdevice.h" -#include "integrations/thingactioninfo.h" +#include +#include +#include #include "nukiutils.h" #include "nukicontroller.h" #include "nukiauthenticator.h" +#include "bluez/bluetoothdevice.h" + //#include "nacl-20110221/crypto_auth/" class Nuki : public QObject diff --git a/nuki/nuki.pro b/nuki/nuki.pro index 6083bb64..95a516f6 100644 --- a/nuki/nuki.pro +++ b/nuki/nuki.pro @@ -1,8 +1,6 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(nymea_integrationpluginnuki) - -QT += bluetooth dbus +QT *= bluetooth dbus # apt install libsodium-dev LIBS += -lsodium diff --git a/nuki/nukiauthenticator.cpp b/nuki/nukiauthenticator.cpp index cbbd2a6f..765bd9c8 100644 --- a/nuki/nukiauthenticator.cpp +++ b/nuki/nukiauthenticator.cpp @@ -127,7 +127,9 @@ QByteArray NukiAuthenticator::encryptData(const QByteArray &data, const QByteArr * const unsigned char *sk The private key of nymea for this Nuki */ - unsigned char encrypted[crypto_box_MACBYTES + data.length()]; + unsigned char *encrypted = NULL; + std::vector realBuffer(crypto_box_MACBYTES + data.length()); + encrypted = &realBuffer[0]; int result = crypto_box_easy(encrypted, reinterpret_cast(data.data()), static_cast(data.length()), @@ -165,8 +167,9 @@ QByteArray NukiAuthenticator::decryptData(const QByteArray &data, const QByteArr * const unsigned char *pk The public key of the Nuki * const unsigned char *sk The private key of nymea for this Nuki */ - - unsigned char decrypted[data.length() - crypto_box_MACBYTES]; + unsigned char *decrypted = NULL; + std::vector realBuffer(data.length() - crypto_box_MACBYTES); + decrypted = &realBuffer[0]; int result = crypto_box_open_easy(decrypted, reinterpret_cast(data.data()), static_cast(data.length()), @@ -190,9 +193,11 @@ QByteArray NukiAuthenticator::decryptData(const QByteArray &data, const QByteArr return decryptedData; } -QByteArray NukiAuthenticator::generateNonce(const int &length) const +QByteArray NukiAuthenticator::generateNonce(int length) const { - unsigned char nounce[length]; + unsigned char *nounce = NULL; + std::vector realBuffer(length); + nounce = &realBuffer[0]; randombytes_buf(nounce, length); return QByteArray(reinterpret_cast(nounce), length); } @@ -295,7 +300,11 @@ void NukiAuthenticator::requestPublicKey() qCDebug(dcNuki()) << "Authenticator: Request public key fom Nuki"; QByteArray payload; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&payload, QDataStream::WriteOnly); +#else QDataStream stream(&payload, QIODevice::WriteOnly); +#endif stream.setByteOrder(QDataStream::LittleEndian); stream << static_cast(NukiUtils::CommandPublicKey); QByteArray data = NukiUtils::createRequestMessageForUnencrypted(NukiUtils::CommandRequestData, payload); @@ -351,7 +360,11 @@ void NukiAuthenticator::sendAuthenticateData() m_nonce = generateNonce(); QByteArray content; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&content, QDataStream::WriteOnly); +#else QDataStream stream(&content, QIODevice::WriteOnly); +#endif // Note: 0x00 = App, 0x01 = Bridge, 0x02 = Fob stream << static_cast(0x01); // Note: app id (42) @@ -359,7 +372,7 @@ void NukiAuthenticator::sendAuthenticateData() // Note: the name of the bridge in 32 bytes [ 0 0 0 ... n y m e a ] QByteArray name = QByteArray(27, '\0').append(QByteArray("nymea")); - Q_ASSERT_X(name.count() == 32, "data length", "Name has not the correct length."); + Q_ASSERT_X(name.length() == 32, "data length", "Name has not the correct length."); QByteArray valueR = content; valueR.append(name); @@ -454,7 +467,11 @@ void NukiAuthenticator::onPairingDataCharacteristicChanged(const QByteArray &val // Process pairing characteristic data QByteArray data = QByteArray(value); +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&data, QDataStream::ReadOnly); +#else QDataStream stream(&data, QIODevice::ReadOnly); +#endif stream.setByteOrder(QDataStream::LittleEndian); quint16 command; stream >> command; @@ -517,21 +534,25 @@ void NukiAuthenticator::onPairingDataCharacteristicChanged(const QByteArray &val } // Parse data - QByteArray message = m_currentReceivingData.mid(2, m_currentReceivingData.count() - 4); + QByteArray message = m_currentReceivingData.mid(2, m_currentReceivingData.length() - 4); QByteArray authenticator = message.left(32); - Q_ASSERT_X(authenticator.count() == 32, "data length", "Nuki nonce has not the correct length."); + Q_ASSERT_X(authenticator.length() == 32, "data length", "Nuki nonce has not the correct length."); // Read authorization ID m_authorizationIdRawData = message.mid(32, 4); +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&m_authorizationIdRawData, QDataStream::ReadOnly); +#else QDataStream stream(&m_authorizationIdRawData, QIODevice::ReadOnly); +#endif stream.setByteOrder(QDataStream::LittleEndian); stream >> m_authorizationId; m_uuid = message.mid(36, 16); - Q_ASSERT_X(m_uuid.count() == 16, "data length", "UUID has not the correct length."); + Q_ASSERT_X(m_uuid.length() == 16, "data length", "UUID has not the correct length."); m_nonceNuki = message.mid(52, 32); - Q_ASSERT_X(m_nonceNuki.count() == 32, "data length", "Nuki nonce has not the correct length."); + Q_ASSERT_X(m_nonceNuki.length() == 32, "data length", "Nuki nonce has not the correct length."); if (m_debug) qCDebug(dcNuki()) << " Full message :" << NukiUtils::convertByteArrayToHexStringCompact(message); if (m_debug) qCDebug(dcNuki()) << " Authenticator :" << NukiUtils::convertByteArrayToHexStringCompact(authenticator); diff --git a/nuki/nukiauthenticator.h b/nuki/nukiauthenticator.h index 740d7e02..2dcc9e75 100644 --- a/nuki/nukiauthenticator.h +++ b/nuki/nukiauthenticator.h @@ -77,7 +77,7 @@ public: QByteArray decryptData(const QByteArray &data, const QByteArray &nonce); // Generate 32 byte nonce data - QByteArray generateNonce(const int &length = 32) const; + QByteArray generateNonce(int length = 32) const; private: QBluetoothHostInfo m_hostInfo; diff --git a/nuki/nukicontroller.cpp b/nuki/nukicontroller.cpp index 3bfd6265..8076f21a 100644 --- a/nuki/nukicontroller.cpp +++ b/nuki/nukicontroller.cpp @@ -238,7 +238,11 @@ void NukiController::processNukiStatesData(const QByteArray &data) quint8 batteryCritical = 0; QByteArray payload = data; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&payload, QDataStream::ReadOnly); +#else QDataStream stream(&payload, QIODevice::ReadOnly); +#endif stream.setByteOrder(QDataStream::LittleEndian); stream >> nukiState >> nukiLockState >> nukiLockTrigger >> year >> month >> day >> hour >> minute >> second >> utcOffset >> batteryCritical; @@ -273,7 +277,11 @@ void NukiController::processNukiErrorReport(const QByteArray &data) quint16 nukiCommand; QByteArray payload = data; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&payload, QDataStream::ReadOnly); +#else QDataStream stream(&payload, QIODevice::ReadOnly); +#endif stream.setByteOrder(QDataStream::LittleEndian); stream >> errorCode >> nukiCommand; @@ -441,7 +449,11 @@ void NukiController::sendReadLockStateRequest() // Create data for encryption QByteArray payload; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&payload, QDataStream::WriteOnly); +#else QDataStream stream(&payload, QIODevice::WriteOnly); +#endif stream.setByteOrder(QDataStream::LittleEndian); stream << static_cast(NukiUtils::CommandNukiStates); @@ -477,7 +489,11 @@ void NukiController::sendReadConfigurationRequest() // Create data for encryption QByteArray payload; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&payload, QDataStream::WriteOnly); +#else QDataStream stream(&payload, QIODevice::WriteOnly); +#endif stream.setByteOrder(QDataStream::LittleEndian); stream << static_cast(NukiUtils::CommandRequestConfig); for (int i = 0; i < m_nukiNonce.length(); i++) { @@ -516,7 +532,11 @@ void NukiController::sendRequestChallengeRequest() // Create data for encryption QByteArray payload; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&payload, QDataStream::WriteOnly); +#else QDataStream stream(&payload, QIODevice::WriteOnly); +#endif stream.setByteOrder(QDataStream::LittleEndian); stream << static_cast(NukiUtils::CommandChallenge); @@ -554,7 +574,11 @@ void NukiController::sendLockActionRequest(NukiUtils::LockAction lockAction, qui // Create data for encryption QByteArray payload; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&payload, QDataStream::WriteOnly); +#else QDataStream stream(&payload, QIODevice::WriteOnly); +#endif stream.setByteOrder(QDataStream::LittleEndian); stream << static_cast(lockAction); stream << static_cast(m_nukiAuthenticator->authorizationId()); @@ -596,7 +620,7 @@ void NukiController::onUserDataCharacteristicChanged(const QByteArray &value) m_messageBuffer = value; - if (m_messageBuffer.count() < 30) { + if (m_messageBuffer.length() < 30) { qCWarning(dcNuki()) << "Controller: Cannot understand message. Rejecting."; resetMessageBuffer(); return; @@ -605,14 +629,18 @@ void NukiController::onUserDataCharacteristicChanged(const QByteArray &value) // Parse message length // ADATA: 24 byte nonce, 4 byte autorization, 2 byte encrypted message length m_messageBufferAData = m_messageBuffer.left(30); - m_messageBufferPData = m_messageBuffer.right(m_messageBuffer.count() - 30); + m_messageBufferPData = m_messageBuffer.right(m_messageBuffer.length() - 30); m_messageBufferNonce = m_messageBufferAData.left(24); QByteArray messageInformation = m_messageBufferAData.right(6); +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&messageInformation, QDataStream::ReadOnly); +#else QDataStream stream(&messageInformation, QIODevice::ReadOnly); +#endif stream.setByteOrder(QDataStream::LittleEndian); stream >> m_messageBufferIdentifier >> m_messageBufferLength; - if (m_messageBufferPData.count() == m_messageBufferLength) { + if (m_messageBufferPData.length() == m_messageBufferLength) { processUserDataNotification(m_messageBufferNonce, m_messageBufferIdentifier, m_messageBufferPData); resetMessageBuffer(); } diff --git a/nuki/nukiutils.cpp b/nuki/nukiutils.cpp index 35e26737..8256682f 100644 --- a/nuki/nukiutils.cpp +++ b/nuki/nukiutils.cpp @@ -44,9 +44,9 @@ QString NukiUtils::convertByteToHexString(const quint8 &byte) QString NukiUtils::convertByteArrayToHexString(const QByteArray &byteArray) { QString hexString; - for (int i = 0; i < byteArray.count(); i++) { + for (int i = 0; i < byteArray.length(); i++) { hexString.append(convertByteToHexString(static_cast(byteArray.at(i)))); - if (i != byteArray.count() - 1) { + if (i != byteArray.length() - 1) { hexString.append(" "); } } @@ -67,7 +67,11 @@ QString NukiUtils::convertByteArrayToHexStringCompact(const QByteArray &byteArra QString NukiUtils::convertUint16ToHexString(const quint16 &value) { QByteArray data; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&data, QDataStream::WriteOnly); +#else QDataStream stream(&data, QIODevice::WriteOnly); +#endif stream << value; return QString("0x%1").arg(convertByteArrayToHexString(data).remove(" ").remove("0x")); @@ -76,7 +80,11 @@ QString NukiUtils::convertUint16ToHexString(const quint16 &value) QByteArray NukiUtils::converUint32ToByteArrayLittleEndian(const quint32 &value) { QByteArray data; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&data, QDataStream::WriteOnly); +#else QDataStream stream(&data, QIODevice::WriteOnly); +#endif stream.setByteOrder(QDataStream::LittleEndian); stream << value; Q_ASSERT_X(data.length() == 4, "data converting", "Could not convert quint32 value to byte array (little endian)"); @@ -86,7 +94,11 @@ QByteArray NukiUtils::converUint32ToByteArrayLittleEndian(const quint32 &value) QByteArray NukiUtils::converUint16ToByteArrayLittleEndian(const quint16 &value) { QByteArray data; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&data, QDataStream::WriteOnly); +#else QDataStream stream(&data, QIODevice::WriteOnly); +#endif stream.setByteOrder(QDataStream::LittleEndian); stream << value; Q_ASSERT_X(data.length() == 2, "data converting", "Could not convert quint16 value to byte array (little endian)"); @@ -99,7 +111,11 @@ quint16 NukiUtils::convertByteArrayToUint16BigEndian(const QByteArray &littleEnd quint16 value = 0; QByteArray data(littleEndianByteArray); +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&data, QDataStream::ReadOnly); +#else QDataStream stream(&data, QIODevice::ReadOnly); +#endif stream.setByteOrder(QDataStream::LittleEndian); stream >> value; return value; @@ -111,7 +127,11 @@ quint32 NukiUtils::convertByteArrayToUint32BigEndian(const QByteArray &littleEnd quint32 value = 0; QByteArray data(littleEndianByteArray); +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&data, QDataStream::ReadOnly); +#else QDataStream stream(&data, QIODevice::ReadOnly); +#endif stream.setByteOrder(QDataStream::LittleEndian); stream >> value; return value; @@ -140,11 +160,15 @@ bool NukiUtils::validateMessageCrc(const QByteArray &message) { quint16 crcValue = 0; QByteArray crcValueRaw = message.right(2); +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&crcValueRaw, QDataStream::ReadOnly); +#else QDataStream stream(&crcValueRaw, QIODevice::ReadOnly); +#endif stream.setByteOrder(QDataStream::LittleEndian); stream >> crcValue; - QByteArray content = message.left(message.count() - 2); + QByteArray content = message.left(message.length() - 2); quint16 calculatedCrcValue = calculateCrc(content); if (crcValue != calculatedCrcValue) { @@ -163,7 +187,11 @@ QByteArray NukiUtils::createRequestMessageForUnencrypted(NukiUtils::Command comm * 2 Bytes: crc (LittleEndian) */ QByteArray message; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&message, QDataStream::WriteOnly); +#else QDataStream stream(&message, QIODevice::WriteOnly); +#endif stream.setByteOrder(QDataStream::LittleEndian); stream << static_cast(command); @@ -186,7 +214,11 @@ QByteArray NukiUtils::createRequestMessageForUnencryptedForEncryption(quint32 au */ QByteArray message; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QDataStream stream(&message, QDataStream::WriteOnly); +#else QDataStream stream(&message, QIODevice::WriteOnly); +#endif stream.setByteOrder(QDataStream::LittleEndian); stream << authenticationId; stream << static_cast(command); From c73647c20eb6b51467e03dcc603d8bc40aed9d82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 15:36:13 +0200 Subject: [PATCH 42/82] onewire: Add Qt6 support --- onewire/integrationpluginonewire.cpp | 7 ++++--- onewire/integrationpluginonewire.h | 11 ++++++----- onewire/onewire.pro | 6 +----- onewire/owfs.cpp | 25 ++++++++++++++----------- onewire/owfs.h | 6 ++---- onewire/w1.cpp | 4 ++-- 6 files changed, 29 insertions(+), 30 deletions(-) diff --git a/onewire/integrationpluginonewire.cpp b/onewire/integrationpluginonewire.cpp index 5ac02108..57419cfa 100644 --- a/onewire/integrationpluginonewire.cpp +++ b/onewire/integrationpluginonewire.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -29,9 +29,10 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "integrationpluginonewire.h" -#include "integrations/thing.h" #include "plugininfo.h" +#include + #include #include @@ -591,7 +592,7 @@ void IntegrationPluginOneWire::onOneWireDevicesDiscovered(QList +#include + +#include +#include #include "extern-plugininfo.h" diff --git a/onewire/onewire.pro b/onewire/onewire.pro index 8e786aba..18f29526 100644 --- a/onewire/onewire.pro +++ b/onewire/onewire.pro @@ -1,10 +1,6 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(nymea_integrationpluginonewire) - -LIBS += \ - -low \ - -lowcapi \ +LIBS += -low -lowcapi SOURCES += \ integrationpluginonewire.cpp \ diff --git a/onewire/owfs.cpp b/onewire/owfs.cpp index 132e468d..6bab4983 100644 --- a/onewire/owfs.cpp +++ b/onewire/owfs.cpp @@ -29,8 +29,12 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "owfs.h" +#include "owcapi.h" + #include "extern-plugininfo.h" +#include + Owfs::Owfs(QObject *parent) : QObject(parent) { @@ -56,7 +60,7 @@ bool Owfs::init(const QByteArray &owfsInitArguments) //inifArguments.append("--w1"); if (OW_init(owfsInitArguments) < 0) { - qWarning(dcOneWire()) << "ERROR initialising one wire" << strerror(errno); + qCWarning(dcOneWire()) << "ERROR initialising one wire" << strerror(errno); return false; } m_path = "/"; @@ -69,10 +73,10 @@ bool Owfs::discoverDevices() size_t dirLength ; if (OW_get(m_path, &dirBuffer, &dirLength) < 0) { - qWarning(dcOneWire()) << "DIRECTORY ERROR" << strerror(errno); + qCWarning(dcOneWire()) << "DIRECTORY ERROR" << strerror(errno); return false; } - qDebug(dcOneWire()) << "Directory has members" << dirBuffer; + qCDebug(dcOneWire()) << "Directory has members" << dirBuffer; QList dirMembers ; dirMembers = QByteArray(dirBuffer, dirLength).split(','); @@ -95,7 +99,6 @@ bool Owfs::discoverDevices() int family = member.split('.').first().toInt(nullptr, 16); if (family != 0) { member.remove(member.indexOf('/'), 1); - QByteArray type; OwfsDevice thing; thing.family = family; thing.address = member; @@ -148,10 +151,10 @@ QByteArray Owfs::getValue(const QByteArray &address, const QByteArray &type) devicePath.append('\0'); if (OW_get(devicePath, &getBuffer, &getLength) < 0) { - qWarning(dcOneWire()) << "ERROR reading" << devicePath << strerror(errno); + qCWarning(dcOneWire()) << "ERROR reading" << devicePath << strerror(errno); } - qDebug(dcOneWire()) << "Device value" << devicePath << getBuffer; + qCDebug(dcOneWire()) << "Device value" << devicePath << getBuffer; QByteArray value = QByteArray(getBuffer, getLength); free(getBuffer); @@ -171,21 +174,21 @@ void Owfs::setValue(const QByteArray &address, const QByteArray &type, const QBy devicePath.append('\0'); if (OW_put(devicePath, value, value.length()) < 0) { - qWarning(dcOneWire()) << "ERROR reading" << devicePath << strerror(errno); + qCWarning(dcOneWire()) << "ERROR reading" << devicePath << strerror(errno); } } double Owfs::getTemperature(const QByteArray &address, bool *ok) { QByteArray temperature = getValue(address, "temperature"); - qDebug(dcOneWire()) << "Temperature" << temperature << temperature.replace(',','.').toDouble(); + qCDebug(dcOneWire()) << "Temperature" << temperature << temperature.replace(',','.').toDouble(); return temperature.toDouble(ok); } double Owfs::getHumidity(const QByteArray &address, bool *ok) { QByteArray humidity = getValue(address, "humidity"); - qDebug(dcOneWire()) << "Humidity" << humidity << humidity.replace(',','.').toDouble(); + qCDebug(dcOneWire()) << "Humidity" << humidity << humidity.replace(',','.').toDouble(); return humidity.toDouble(ok); } @@ -226,7 +229,7 @@ bool Owfs::getSwitchOutput(const QByteArray &address, SwitchChannel channel, boo break; } QByteArray state = getValue(address, c); - qDebug(dcOneWire()) << "Switch state" << state.toInt(); + qCDebug(dcOneWire()) << "Switch state" << state.toInt(); return state.toInt(ok); } @@ -261,7 +264,7 @@ bool Owfs::getSwitchInput(const QByteArray &address, SwitchChannel channel, bool break; } QByteArray state = getValue(address, c); - qDebug(dcOneWire()) << "Switch state" << state.toInt(); + qCDebug(dcOneWire()) << "Switch state" << state.toInt(); return state.toInt(ok); } diff --git a/onewire/owfs.h b/onewire/owfs.h index 1ef1937e..9eb642f6 100644 --- a/onewire/owfs.h +++ b/onewire/owfs.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,8 +31,6 @@ #ifndef OWFS_H #define OWFS_H -#include "owcapi.h" - #include class Owfs : public QObject @@ -88,7 +86,7 @@ private: void setValue(const QByteArray &address, const QByteArray &deviceType, const QByteArray &value); signals: - void devicesDiscovered(QList devices); + void devicesDiscovered(QList devices); }; #endif // OWFS_H diff --git a/onewire/w1.cpp b/onewire/w1.cpp index ccd2ace1..a22631b8 100644 --- a/onewire/w1.cpp +++ b/onewire/w1.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -52,7 +52,7 @@ QStringList W1::discoverDevices() QFileInfoList list = w1SysFSDir.entryInfoList(); for (int i = 0; i < list.size(); ++i) { QFileInfo fileInfo = list.at(i); - if(fileInfo.fileName()[2] == '-') { + if(fileInfo.fileName().at(2) == '-') { qCDebug(dcOneWire()) << "Found one wire device" << fileInfo.filePath(); deviceList.append(fileInfo.fileName()); } From 22191713af1099768c379a5b1e5d937ec368123c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 15:38:09 +0200 Subject: [PATCH 43/82] openuv: Add Qt6 support --- openuv/integrationpluginopenuv.cpp | 10 ++++++---- openuv/integrationpluginopenuv.h | 5 ++--- openuv/openuv.pro | 8 +++----- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/openuv/integrationpluginopenuv.cpp b/openuv/integrationpluginopenuv.cpp index 54ab464b..d2381942 100644 --- a/openuv/integrationpluginopenuv.cpp +++ b/openuv/integrationpluginopenuv.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -29,9 +29,11 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "integrationpluginopenuv.h" -#include "integrations/thing.h" #include "plugininfo.h" +#include +#include + #include #include #include @@ -133,7 +135,7 @@ void IntegrationPluginOpenUv::getUvIndex(Thing *thing) request.setRawHeader("x-access-token", m_apiKey); QNetworkReply *reply = hardwareManager()->networkManager()->get(request); - connect(reply, &QNetworkReply::finished, this, [reply, thing, this] { + connect(reply, &QNetworkReply::finished, this, [reply, thing] { reply->deleteLater(); int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); @@ -150,7 +152,7 @@ void IntegrationPluginOpenUv::getUvIndex(Thing *thing) QJsonParseError error; QJsonDocument data = QJsonDocument::fromJson(reply->readAll(), &error); if (error.error != QJsonParseError::NoError) { - qDebug(dcOpenUv()) << "Recieved invalide JSON object"; + qCDebug(dcOpenUv()) << "Recieved invalide JSON object"; return; } QVariantMap result = data.toVariant().toMap().value("result").toMap(); diff --git a/openuv/integrationpluginopenuv.h b/openuv/integrationpluginopenuv.h index c9d128c6..01bbbc56 100644 --- a/openuv/integrationpluginopenuv.h +++ b/openuv/integrationpluginopenuv.h @@ -31,9 +31,8 @@ #ifndef INTEGRATIONPLUGINOPENUV_H #define INTEGRATIONPLUGINOPENUV_H -#include "plugintimer.h" -#include "integrations/integrationplugin.h" -#include "network/networkaccessmanager.h" +#include +#include #include #include diff --git a/openuv/openuv.pro b/openuv/openuv.pro index a5896008..a050220b 100644 --- a/openuv/openuv.pro +++ b/openuv/openuv.pro @@ -1,13 +1,11 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(nymea_integrationpluginopenuv) - -QT+= network +QT += network SOURCES += \ - integrationpluginopenuv.cpp \ + integrationpluginopenuv.cpp HEADERS += \ - integrationpluginopenuv.h \ + integrationpluginopenuv.h From acf5e36925477e9207408697eddcc52618f12fca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 15:40:55 +0200 Subject: [PATCH 44/82] openweathermap: Add Qt6 support --- openweathermap/integrationpluginopenweathermap.cpp | 8 +++++--- openweathermap/integrationpluginopenweathermap.h | 7 +++---- openweathermap/openweathermap.pro | 8 +++----- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/openweathermap/integrationpluginopenweathermap.cpp b/openweathermap/integrationpluginopenweathermap.cpp index 4a7f2a2b..60f2ac63 100644 --- a/openweathermap/integrationpluginopenweathermap.cpp +++ b/openweathermap/integrationpluginopenweathermap.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -29,7 +29,6 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "integrationpluginopenweathermap.h" -#include "integrations/thing.h" #include "plugininfo.h" #include @@ -40,7 +39,10 @@ #include #include #include -#include "nymeasettings.h" + +#include +#include +#include IntegrationPluginOpenweathermap::IntegrationPluginOpenweathermap() { diff --git a/openweathermap/integrationpluginopenweathermap.h b/openweathermap/integrationpluginopenweathermap.h index 9d218336..d04a0180 100644 --- a/openweathermap/integrationpluginopenweathermap.h +++ b/openweathermap/integrationpluginopenweathermap.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,9 +31,8 @@ #ifndef INTEGRATIONPLUGINOPENWEATHERMAP_H #define INTEGRATIONPLUGINOPENWEATHERMAP_H -#include "plugintimer.h" -#include "integrations/integrationplugin.h" -#include "network/networkaccessmanager.h" +#include +#include #include #include diff --git a/openweathermap/openweathermap.pro b/openweathermap/openweathermap.pro index d698d788..aeb4f897 100644 --- a/openweathermap/openweathermap.pro +++ b/openweathermap/openweathermap.pro @@ -1,13 +1,11 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(nymea_integrationpluginopenweathermap) - -QT+= network +QT *= network SOURCES += \ - integrationpluginopenweathermap.cpp \ + integrationpluginopenweathermap.cpp HEADERS += \ - integrationpluginopenweathermap.h \ + integrationpluginopenweathermap.h From ab2588db07fcb999316a7047000b0f0cdc9c9c53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 15:41:50 +0200 Subject: [PATCH 45/82] osdomotics: Add Qt6 support --- osdomotics/integrationpluginosdomotics.cpp | 5 +++-- osdomotics/integrationpluginosdomotics.h | 9 ++++----- osdomotics/osdomotics.pro | 4 +--- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/osdomotics/integrationpluginosdomotics.cpp b/osdomotics/integrationpluginosdomotics.cpp index 20f4d3b8..c4bc488d 100644 --- a/osdomotics/integrationpluginosdomotics.cpp +++ b/osdomotics/integrationpluginosdomotics.cpp @@ -52,9 +52,10 @@ */ #include "integrationpluginosdomotics.h" -#include "integrations/thing.h" #include "plugininfo.h" -#include "network/networkaccessmanager.h" + +#include +#include IntegrationPluginOsdomotics::IntegrationPluginOsdomotics() { diff --git a/osdomotics/integrationpluginosdomotics.h b/osdomotics/integrationpluginosdomotics.h index f14e8c6a..36c97d62 100644 --- a/osdomotics/integrationpluginosdomotics.h +++ b/osdomotics/integrationpluginosdomotics.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,15 +31,14 @@ #ifndef INTEGRATIONPLUGINOSDOMOTICS_H #define INTEGRATIONPLUGINOSDOMOTICS_H -#include "integrations/integrationplugin.h" +#include +#include +#include #include #include #include -#include "coap/coap.h" -#include "plugintimer.h" - class IntegrationPluginOsdomotics : public IntegrationPlugin { Q_OBJECT diff --git a/osdomotics/osdomotics.pro b/osdomotics/osdomotics.pro index eb200854..c58f0345 100644 --- a/osdomotics/osdomotics.pro +++ b/osdomotics/osdomotics.pro @@ -1,8 +1,6 @@ include(../plugins.pri) -QT += network - -TARGET = $$qtLibraryTarget(nymea_integrationpluginosdomotics) +QT *= network SOURCES += \ integrationpluginosdomotics.cpp From 6c104c018a124c9ff2757adddad8a784a673dbed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 15:50:56 +0200 Subject: [PATCH 46/82] philipshue: Add Qt6 support --- philipshue/huelight.h | 4 ++-- philipshue/hueremote.h | 4 ++-- philipshue/integrationpluginphilipshue.cpp | 25 +++++++++---------- philipshue/integrationpluginphilipshue.h | 28 ++++++++++------------ philipshue/philipshue.pro | 4 +--- 5 files changed, 31 insertions(+), 34 deletions(-) diff --git a/philipshue/huelight.h b/philipshue/huelight.h index f3a8150c..6faa1fea 100644 --- a/philipshue/huelight.h +++ b/philipshue/huelight.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -39,7 +39,7 @@ #include #include -#include "typeutils.h" +#include #include "huedevice.h" class HueLight : public HueDevice diff --git a/philipshue/hueremote.h b/philipshue/hueremote.h index 9f3d1253..438405ba 100644 --- a/philipshue/hueremote.h +++ b/philipshue/hueremote.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -37,7 +37,7 @@ #include #include -#include "typeutils.h" +#include #include "huedevice.h" class HueRemote : public HueDevice diff --git a/philipshue/integrationpluginphilipshue.cpp b/philipshue/integrationpluginphilipshue.cpp index 48eb2692..f345adf1 100644 --- a/philipshue/integrationpluginphilipshue.cpp +++ b/philipshue/integrationpluginphilipshue.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -29,21 +29,22 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "integrationpluginphilipshue.h" - -#include "integrations/thing.h" -#include "types/param.h" #include "plugininfo.h" -#include "network/upnp/upnpdiscovery.h" -#include "network/upnp/upnpdiscoveryreply.h" -#include "platform/platformzeroconfcontroller.h" -#include "network/zeroconf/zeroconfservicebrowser.h" +#include +#include +#include +#include +#include +#include +#include #include #include #include #include #include +#include IntegrationPluginPhilipsHue::IntegrationPluginPhilipsHue() { @@ -409,7 +410,7 @@ void IntegrationPluginPhilipsHue::setupThing(ThingSetupInfo *info) ParamList migratedParams; foreach (const Param &oldParam, thing->params()) { QString oldId = oldParam.paramTypeId().toString(); - oldId.remove(QRegExp("[{}]")); + oldId.remove(QRegularExpression("[{}]")); if (migrationMap.contains(oldId)) { ParamTypeId newId = migrationMap.value(oldId); QVariant oldValue = oldParam.value(); @@ -470,7 +471,7 @@ void IntegrationPluginPhilipsHue::setupThing(ThingSetupInfo *info) ParamList migratedParams; foreach (const Param &oldParam, thing->params()) { QString oldId = oldParam.paramTypeId().toString(); - oldId.remove(QRegExp("[{}]")); + oldId.remove(QRegularExpression("[{}]")); if (migrationMap.contains(oldId)) { ParamTypeId newId = migrationMap.value(oldId); QVariant oldValue = oldParam.value(); @@ -1557,7 +1558,7 @@ void IntegrationPluginPhilipsHue::onMotionSensorPresenceChanged(bool presence) HueMotionSensor *sensor = static_cast(sender()); Thing *sensorDevice = m_motionSensors.value(sensor); sensorDevice->setStateValue(sensor->isPresentStateTypeId(), presence); - if (presence) sensorDevice->setStateValue(sensor->lastSeenTimeStateTypeId(), QDateTime::currentDateTime().toTime_t()); + if (presence) sensorDevice->setStateValue(sensor->lastSeenTimeStateTypeId(), QDateTime::currentDateTime().toSecsSinceEpoch()); } void IntegrationPluginPhilipsHue::onMotionSensorLightIntensityChanged(double lightIntensity) @@ -2539,4 +2540,4 @@ void IntegrationPluginPhilipsHue::abortRequests(QHash reply->abort(); } } -} \ No newline at end of file +} diff --git a/philipshue/integrationpluginphilipshue.h b/philipshue/integrationpluginphilipshue.h index f67d57a3..0ac5db66 100644 --- a/philipshue/integrationpluginphilipshue.h +++ b/philipshue/integrationpluginphilipshue.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,21 +31,19 @@ #ifndef INTEGRATIONPLUGINPHILIPSHUE_H #define INTEGRATIONPLUGINPHILIPSHUE_H -#include "integrations/integrationplugin.h" +#include +#include +#include +#include + #include "huebridge.h" #include "huelight.h" #include "hueremote.h" #include "huemotionsensor.h" #include "huetapdial.h" -#include "plugintimer.h" -#include "network/networkaccessmanager.h" -#include "network/upnp/upnpdiscovery.h" -#include "network/zeroconf/zeroconfservicebrowser.h" -#include "network/zeroconf/zeroconfserviceentry.h" - - class QNetworkReply; +class UpnpDiscoveryReply; class IntegrationPluginPhilipsHue: public IntegrationPlugin { @@ -99,9 +97,9 @@ private: private: class DiscoveryJob { public: - UpnpDiscoveryReply* upnpReply; + UpnpDiscoveryReply *upnpReply; bool upnpDone = false; - QNetworkReply* nUpnpReply; + QNetworkReply *nUpnpReply; bool nUpnpDone = false; ThingDescriptors results; }; @@ -109,7 +107,7 @@ private: void startUpnPDiscovery(ThingDiscoveryInfo *info, DiscoveryJob *discovery); void startNUpnpDiscovery(ThingDiscoveryInfo *info, DiscoveryJob *discovery); - void finishDiscovery(ThingDiscoveryInfo *info, DiscoveryJob* job); + void finishDiscovery(ThingDiscoveryInfo *info, DiscoveryJob *job); PluginTimer *m_pluginTimer1Sec = nullptr; PluginTimer *m_pluginTimer5Sec = nullptr; @@ -154,14 +152,14 @@ private: void bridgeReachableChanged(Thing *thing, bool reachable); - Thing* bridgeForBridgeId(const QString &id); + Thing *bridgeForBridgeId(const QString &id); bool lightAlreadyAdded(const QString &uuid); bool sensorAlreadyAdded(const QString &uuid); int brightnessToPercentage(int brightness); int percentageToBrightness(int percentage); - void abortRequests(QHash requestList, Thing* thing); + void abortRequests(QHash requestList, Thing *thing); }; -#endif // INTEGRATIONPLUGINPHILIPSHUE_H \ No newline at end of file +#endif // INTEGRATIONPLUGINPHILIPSHUE_H diff --git a/philipshue/philipshue.pro b/philipshue/philipshue.pro index 7f433f9e..d3895008 100644 --- a/philipshue/philipshue.pro +++ b/philipshue/philipshue.pro @@ -1,8 +1,6 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(nymea_integrationpluginphilipshue) - -QT += network +QT *= network SOURCES += \ integrationpluginphilipshue.cpp \ From b16a71401a20720897bfa4b1b47486db6757c41b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 15:52:36 +0200 Subject: [PATCH 47/82] powerfox: Add Qt6 support --- powerfox/integrationpluginpowerfox.cpp | 5 +++-- powerfox/integrationpluginpowerfox.h | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/powerfox/integrationpluginpowerfox.cpp b/powerfox/integrationpluginpowerfox.cpp index 6ed80b08..df6d879e 100644 --- a/powerfox/integrationpluginpowerfox.cpp +++ b/powerfox/integrationpluginpowerfox.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2022, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -30,9 +30,10 @@ #include "integrationpluginpowerfox.h" #include "plugininfo.h" -#include "plugintimer.h" #include +#include + #include #include diff --git a/powerfox/integrationpluginpowerfox.h b/powerfox/integrationpluginpowerfox.h index 271125c4..418f79cf 100644 --- a/powerfox/integrationpluginpowerfox.h +++ b/powerfox/integrationpluginpowerfox.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2022, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,7 +31,8 @@ #ifndef INTEGRATIONPLUGINPOWERFOX_H #define INTEGRATIONPLUGINPOWERFOX_H -#include "integrations/integrationplugin.h" +#include + #include "extern-plugininfo.h" #include From 604ee1933fbdf8d173cd7bb04cde2a7c1e927a7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 15:53:43 +0200 Subject: [PATCH 48/82] pushbullet: Add Qt6 support --- pushbullet/integrationpluginpushbullet.cpp | 6 +++--- pushbullet/integrationpluginpushbullet.h | 4 ++-- pushbullet/pushbullet.pro | 2 -- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/pushbullet/integrationpluginpushbullet.cpp b/pushbullet/integrationpluginpushbullet.cpp index 302eb18c..5afadb6f 100644 --- a/pushbullet/integrationpluginpushbullet.cpp +++ b/pushbullet/integrationpluginpushbullet.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,7 +31,7 @@ #include "integrationpluginpushbullet.h" #include "plugininfo.h" -#include "network/networkaccessmanager.h" +#include #include @@ -150,7 +150,7 @@ void IntegrationPluginPushbullet::executeAction(ThingActionInfo *info) connect(reply, &QNetworkReply::finished, info, [reply, info]{ if (reply->error() != QNetworkReply::NoError) { qCWarning(dcPushbullet()) << "Push message sending failed for" << info->thing()->name() << info->thing()->id() << reply->errorString() << reply->error(); - emit info->finish(Thing::ThingErrorHardwareNotAvailable); + info->finish(Thing::ThingErrorHardwareNotAvailable); return; } diff --git a/pushbullet/integrationpluginpushbullet.h b/pushbullet/integrationpluginpushbullet.h index cae61010..3574d1f7 100644 --- a/pushbullet/integrationpluginpushbullet.h +++ b/pushbullet/integrationpluginpushbullet.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,7 +31,7 @@ #ifndef INTEGRATIONPLUGINPUSHBULLET_H #define INTEGRATIONPLUGINPUSHBULLET_H -#include "integrations/integrationplugin.h" +#include class IntegrationPluginPushbullet: public IntegrationPlugin { diff --git a/pushbullet/pushbullet.pro b/pushbullet/pushbullet.pro index dcf90f76..953f8450 100644 --- a/pushbullet/pushbullet.pro +++ b/pushbullet/pushbullet.pro @@ -1,7 +1,5 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(nymea_integrationpluginpushbullet) - QT+= network SOURCES += \ From b99f9f5d90989139d97a87479dfa4488460e6586 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 15:56:13 +0200 Subject: [PATCH 49/82] pushnotifications: Add Qt6 support --- .../integrationpluginpushnotifications.cpp | 12 ++++++------ .../integrationpluginpushnotifications.h | 4 ++-- pushnotifications/pushnotifications.pro | 4 +--- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/pushnotifications/integrationpluginpushnotifications.cpp b/pushnotifications/integrationpluginpushnotifications.cpp index 24d118aa..c9205eb1 100644 --- a/pushnotifications/integrationpluginpushnotifications.cpp +++ b/pushnotifications/integrationpluginpushnotifications.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2024, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,12 +31,12 @@ #include "integrationpluginpushnotifications.h" #include "plugininfo.h" -#include "network/networkaccessmanager.h" -#include "nymeasettings.h" +#include +#include #include -IntegrationPluginPushNotifications::IntegrationPluginPushNotifications(QObject* parent) +IntegrationPluginPushNotifications::IntegrationPluginPushNotifications(QObject *parent) : IntegrationPlugin{parent} { } @@ -202,7 +202,7 @@ void IntegrationPluginPushNotifications::executeAction(ThingActionInfo *info) payload.insert("data", data); payload.insert("appid", "io.guh.nymeaapp_nymea-app"); - payload.insert("expire_on", QDateTime::currentDateTime().toUTC().addMSecs(1000 * 60 * 10).toString(Qt::ISODate)); + payload.insert("expire_on", QDateTime::currentDateTimeUtc().addMSecs(1000 * 60 * 10).toString(Qt::ISODate)); payload.insert("token", token.toUtf8().trimmed()); } else if (pushService == "None") { // Nothing to do here... It's the clients responsibility to fetch it from nymea @@ -235,7 +235,7 @@ void IntegrationPluginPushNotifications::executeAction(ThingActionInfo *info) QVariantMap replyMap = jsonDoc.toVariant().toMap(); int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); - qDebug(dcPushNotifications) << status << qUtf8Printable(jsonDoc.toJson()); + qCDebug(dcPushNotifications()) << status << qUtf8Printable(jsonDoc.toJson()); if (pushService == "UBPorts") { if (!replyMap.value("ok").toBool()) { diff --git a/pushnotifications/integrationpluginpushnotifications.h b/pushnotifications/integrationpluginpushnotifications.h index 69e98ef7..2978711a 100644 --- a/pushnotifications/integrationpluginpushnotifications.h +++ b/pushnotifications/integrationpluginpushnotifications.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2024, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,7 +31,7 @@ #ifndef INTEGRATIONPLUGINPUSHNOTIFICATIONS_H #define INTEGRATIONPLUGINPUSHNOTIFICATIONS_H -#include "integrations/integrationplugin.h" +#include #include "googleoauth2.h" #include "extern-plugininfo.h" diff --git a/pushnotifications/pushnotifications.pro b/pushnotifications/pushnotifications.pro index f6d81fd7..28c61523 100644 --- a/pushnotifications/pushnotifications.pro +++ b/pushnotifications/pushnotifications.pro @@ -1,8 +1,6 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(nymea_integrationpluginpushnotifications) - -QT+= network +QT *= network # For RSA signing JWT PKGCONFIG += openssl From e157a9b64c04483b95c97cbe1bc7b72746a0c3af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 15:57:36 +0200 Subject: [PATCH 50/82] reversessh: Add Qt6 support --- reversessh/integrationpluginreversessh.h | 9 +++++---- reversessh/reversessh.pro | 6 ++---- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/reversessh/integrationpluginreversessh.h b/reversessh/integrationpluginreversessh.h index 5f8b16db..fe178e4d 100644 --- a/reversessh/integrationpluginreversessh.h +++ b/reversessh/integrationpluginreversessh.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,8 +31,9 @@ #ifndef INTEGRATIONPLUGINREMOTESSH_H #define INTEGRATIONPLUGINREMOTESSH_H -#include "plugintimer.h" -#include "integrations/integrationplugin.h" +#include +#include + #include "extern-plugininfo.h" #include @@ -54,7 +55,7 @@ public: void thingRemoved(Thing *thing) override; private: - QHash m_processes; + QHash m_processes; PluginTimer *m_watchdog = nullptr; }; diff --git a/reversessh/reversessh.pro b/reversessh/reversessh.pro index 8746ec49..504396c9 100644 --- a/reversessh/reversessh.pro +++ b/reversessh/reversessh.pro @@ -1,10 +1,8 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(nymea_integrationpluginreversessh) - SOURCES += \ - integrationpluginreversessh.cpp \ + integrationpluginreversessh.cpp HEADERS += \ - integrationpluginreversessh.h \ + integrationpluginreversessh.h From 878f727e1c3f1e3fd14bf9f28a7b3c58d9f503a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 16:05:25 +0200 Subject: [PATCH 51/82] senic: Add Qt6 support --- senic/integrationpluginsenic.cpp | 24 +++++++++-------- senic/integrationpluginsenic.h | 13 +++++---- senic/nuimo.cpp | 45 ++++++++++++++++++++++++++++++++ senic/nuimo.h | 12 ++++----- senic/senic.pro | 4 +-- 5 files changed, 71 insertions(+), 27 deletions(-) diff --git a/senic/integrationpluginsenic.cpp b/senic/integrationpluginsenic.cpp index ceca3bcc..a9be9eca 100644 --- a/senic/integrationpluginsenic.cpp +++ b/senic/integrationpluginsenic.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -29,9 +29,11 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "integrationpluginsenic.h" -#include "integrations/thing.h" #include "plugininfo.h" -#include "hardware/bluetoothlowenergy/bluetoothlowenergymanager.h" + +#include +#include +#include IntegrationPluginSenic::IntegrationPluginSenic() { @@ -240,7 +242,7 @@ void IntegrationPluginSenic::onButtonLongPressed() { Nuimo *nuimo = static_cast(sender()); Thing *thing = m_nuimos.value(nuimo); - emitEvent(Event(nuimoLongPressedEventTypeId, thing->id())); + emit emitEvent(Event(nuimoLongPressedEventTypeId, thing->id())); if (m_autoSymbolMode) { nuimo->showImage(Nuimo::MatrixTypeFilledCircle); @@ -248,23 +250,23 @@ void IntegrationPluginSenic::onButtonLongPressed() } -void IntegrationPluginSenic::onSwipeDetected(const Nuimo::SwipeDirection &direction) +void IntegrationPluginSenic::onSwipeDetected(Nuimo::SwipeDirection direction) { Nuimo *nuimo = static_cast(sender()); Thing *thing = m_nuimos.value(nuimo); switch (direction) { case Nuimo::SwipeDirectionLeft: - emitEvent(Event(nuimoPressedEventTypeId, thing->id(), ParamList() << Param(nuimoPressedEventButtonNameParamTypeId, "←"))); + emit emitEvent(Event(nuimoPressedEventTypeId, thing->id(), ParamList() << Param(nuimoPressedEventButtonNameParamTypeId, "←"))); break; case Nuimo::SwipeDirectionRight: - emitEvent(Event(nuimoPressedEventTypeId, thing->id(), ParamList() << Param(nuimoPressedEventButtonNameParamTypeId, "→"))); + emit emitEvent(Event(nuimoPressedEventTypeId, thing->id(), ParamList() << Param(nuimoPressedEventButtonNameParamTypeId, "→"))); break; case Nuimo::SwipeDirectionUp: - emitEvent(Event(nuimoPressedEventTypeId, thing->id(), ParamList() << Param(nuimoPressedEventButtonNameParamTypeId, "↑"))); + emit emitEvent(Event(nuimoPressedEventTypeId, thing->id(), ParamList() << Param(nuimoPressedEventButtonNameParamTypeId, "↑"))); break; case Nuimo::SwipeDirectionDown: - emitEvent(Event(nuimoPressedEventTypeId, thing->id(), ParamList() << Param(nuimoPressedEventButtonNameParamTypeId, "↓"))); + emit emitEvent(Event(nuimoPressedEventTypeId, thing->id(), ParamList() << Param(nuimoPressedEventButtonNameParamTypeId, "↓"))); break; } @@ -287,7 +289,7 @@ void IntegrationPluginSenic::onSwipeDetected(const Nuimo::SwipeDirection &direct } -void IntegrationPluginSenic::onRotationValueChanged(const uint &value) +void IntegrationPluginSenic::onRotationValueChanged(uint value) { Nuimo *nuimo = static_cast(sender()); Thing *thing = m_nuimos.value(nuimo); @@ -324,7 +326,7 @@ void IntegrationPluginSenic::onPluginConfigurationChanged(const ParamTypeId &par } } -void IntegrationPluginSenic::onBatteryValueChanged(const uint &percentage) +void IntegrationPluginSenic::onBatteryValueChanged(uint percentage) { Nuimo *nuimo = static_cast(sender()); Thing *thing = m_nuimos.value(nuimo); diff --git a/senic/integrationpluginsenic.h b/senic/integrationpluginsenic.h index 7fd6939b..4eaaced0 100644 --- a/senic/integrationpluginsenic.h +++ b/senic/integrationpluginsenic.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,9 +31,8 @@ #ifndef INTEGRATIONPLUGINSENIC_H #define INTEGRATIONPLUGINSENIC_H -#include "plugintimer.h" -#include "integrations/integrationplugin.h" -#include "hardware/bluetoothlowenergy/bluetoothlowenergydevice.h" +#include +#include #include "nuimo.h" @@ -65,11 +64,11 @@ private slots: void onReconnectTimeout(); void onConnectedChanged(bool connected); - void onBatteryValueChanged(const uint &percentage); + void onBatteryValueChanged(uint percentage); void onButtonPressed(); void onButtonLongPressed(); - void onSwipeDetected(const Nuimo::SwipeDirection &direction); - void onRotationValueChanged(const uint &value); + void onSwipeDetected(Nuimo::SwipeDirection direction); + void onRotationValueChanged(uint value); void onDeviceInformationChanged(const QString &firmwareRevision, const QString &hardwareRevision, const QString &softwareRevision); }; diff --git a/senic/nuimo.cpp b/senic/nuimo.cpp index b3a92b50..b0d81252 100644 --- a/senic/nuimo.cpp +++ b/senic/nuimo.cpp @@ -335,7 +335,11 @@ void Nuimo::onServiceDiscoveryFinished() { qCDebug(dcSenic()) << "Service scan finised"; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + if (!m_bluetoothDevice->serviceUuids().contains(QBluetoothUuid::ServiceClassUuid::DeviceInformation)) { +#else if (!m_bluetoothDevice->serviceUuids().contains(QBluetoothUuid::DeviceInformation)) { +#endif qCWarning(dcSenic()) << "Device Information service not found for device" << bluetoothDevice()->name() << bluetoothDevice()->address().toString(); emit deviceInitializationFinished(false); return; @@ -363,7 +367,11 @@ void Nuimo::onServiceDiscoveryFinished() // Device info service if (!m_deviceInfoService) { +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + m_deviceInfoService = m_bluetoothDevice->controller()->createServiceObject(QBluetoothUuid::ServiceClassUuid::DeviceInformation, this); +#else m_deviceInfoService = m_bluetoothDevice->controller()->createServiceObject(QBluetoothUuid::DeviceInformation, this); +#endif if (!m_deviceInfoService) { qCWarning(dcSenic()) << "Could not create thing info service."; emit deviceInitializationFinished(false); @@ -379,7 +387,11 @@ void Nuimo::onServiceDiscoveryFinished() // Battery service if (!m_batteryService) { +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + m_batteryService = m_bluetoothDevice->controller()->createServiceObject(QBluetoothUuid::ServiceClassUuid::BatteryService, this); +#else m_batteryService = m_bluetoothDevice->controller()->createServiceObject(QBluetoothUuid::BatteryService, this); +#endif if (!m_batteryService) { qCWarning(dcSenic()) << "Could not create battery service."; @@ -441,9 +453,16 @@ void Nuimo::onDeviceInfoServiceStateChanged(const QLowEnergyService::ServiceStat qCDebug(dcSenic()) << "Device info service discovered."; printService(m_deviceInfoService); + +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QString firmware = QString::fromUtf8(m_deviceInfoService->characteristic(QBluetoothUuid::CharacteristicType::FirmwareRevisionString).value()); + QString hardware = QString::fromUtf8(m_deviceInfoService->characteristic(QBluetoothUuid::CharacteristicType::HardwareRevisionString).value()); + QString software = QString::fromUtf8(m_deviceInfoService->characteristic(QBluetoothUuid::CharacteristicType::SoftwareRevisionString).value()); +#else QString firmware = QString::fromUtf8(m_deviceInfoService->characteristic(QBluetoothUuid::FirmwareRevisionString).value()); QString hardware = QString::fromUtf8(m_deviceInfoService->characteristic(QBluetoothUuid::HardwareRevisionString).value()); QString software = QString::fromUtf8(m_deviceInfoService->characteristic(QBluetoothUuid::SoftwareRevisionString).value()); +#endif emit deviceInformationChanged(firmware, hardware, software); } @@ -458,14 +477,22 @@ void Nuimo::onBatteryServiceStateChanged(const QLowEnergyService::ServiceState & printService(m_batteryService); +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + m_batteryCharacteristic = m_batteryService->characteristic(QBluetoothUuid::CharacteristicType::BatteryLevel); +#else m_batteryCharacteristic = m_batteryService->characteristic(QBluetoothUuid::BatteryLevel); +#endif if (!m_batteryCharacteristic.isValid()) { qCWarning(dcSenic()) << "Battery characteristc not found for thing " << bluetoothDevice()->name() << bluetoothDevice()->address().toString(); return; } // Enable notifications +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QLowEnergyDescriptor notificationDescriptor = m_batteryCharacteristic.descriptor(QBluetoothUuid::DescriptorType::ClientCharacteristicConfiguration); +#else QLowEnergyDescriptor notificationDescriptor = m_batteryCharacteristic.descriptor(QBluetoothUuid::ClientCharacteristicConfiguration); +#endif m_batteryService->writeDescriptor(notificationDescriptor, QByteArray::fromHex("0100")); uint batteryPercentage = m_batteryCharacteristic.value().toHex().toUInt(nullptr, 16); @@ -497,7 +524,11 @@ void Nuimo::onInputServiceStateChanged(const QLowEnergyService::ServiceState &st return; } // Enable notifications +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QLowEnergyDescriptor notificationDescriptor = m_inputButtonCharacteristic.descriptor(QBluetoothUuid::DescriptorType::ClientCharacteristicConfiguration); +#else QLowEnergyDescriptor notificationDescriptor = m_inputButtonCharacteristic.descriptor(QBluetoothUuid::ClientCharacteristicConfiguration); +#endif m_inputService->writeDescriptor(notificationDescriptor, QByteArray::fromHex("0100")); @@ -508,7 +539,11 @@ void Nuimo::onInputServiceStateChanged(const QLowEnergyService::ServiceState &st return; } // Enable notifications +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + notificationDescriptor = m_inputSwipeCharacteristic.descriptor(QBluetoothUuid::DescriptorType::ClientCharacteristicConfiguration); +#else notificationDescriptor = m_inputSwipeCharacteristic.descriptor(QBluetoothUuid::ClientCharacteristicConfiguration); +#endif m_inputService->writeDescriptor(notificationDescriptor, QByteArray::fromHex("0100")); @@ -519,7 +554,11 @@ void Nuimo::onInputServiceStateChanged(const QLowEnergyService::ServiceState &st return; } // Enable notifications +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + notificationDescriptor = m_inputRotationCharacteristic.descriptor(QBluetoothUuid::DescriptorType::ClientCharacteristicConfiguration); +#else notificationDescriptor = m_inputRotationCharacteristic.descriptor(QBluetoothUuid::ClientCharacteristicConfiguration); +#endif m_inputService->writeDescriptor(notificationDescriptor, QByteArray::fromHex("0100")); } @@ -586,8 +625,14 @@ void Nuimo::onInputCharacteristicChanged(const QLowEnergyCharacteristic &charact void Nuimo::onLedMatrixServiceStateChanged(const QLowEnergyService::ServiceState &state) { // Only continue if discovered + +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + if (state != QLowEnergyService::RemoteServiceDiscovered) + return; +#else if (state != QLowEnergyService::ServiceDiscovered) return; +#endif qCDebug(dcSenic()) << "Led matrix service discovered."; diff --git a/senic/nuimo.h b/senic/nuimo.h index 23b2f0f1..33b9f73a 100644 --- a/senic/nuimo.h +++ b/senic/nuimo.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -35,8 +35,8 @@ #include #include -#include "typeutils.h" -#include "hardware/bluetoothlowenergy/bluetoothlowenergydevice.h" +#include +#include class Nuimo : public QObject { @@ -99,9 +99,9 @@ signals: void connectedChanged(bool connected); void buttonPressed(); void buttonLongPressed(); - void batteryValueChanged(const uint &percentage); - void swipeDetected(const SwipeDirection &direction); - void rotationValueChanged(const uint &value); + void batteryValueChanged(uint percentage); + void swipeDetected(Nuimo::SwipeDirection direction); + void rotationValueChanged(uint value); void deviceInformationChanged(const QString &firmwareRevision, const QString &hardwareRevision, const QString &softwareRevision); void deviceInitializationFinished(bool success); diff --git a/senic/senic.pro b/senic/senic.pro index 3f735b53..20b6b66d 100644 --- a/senic/senic.pro +++ b/senic/senic.pro @@ -1,8 +1,6 @@ include(../plugins.pri) -QT += bluetooth - -TARGET = $$qtLibraryTarget(nymea_integrationpluginsenic) +QT *= bluetooth SOURCES += \ integrationpluginsenic.cpp \ From 70d6519409128a50c3a91a470994249666691c18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 16:11:53 +0200 Subject: [PATCH 52/82] serialportcommander: Add Qt6 support --- .../integrationpluginserialportcommander.cpp | 24 ++++++++++++------- .../integrationpluginserialportcommander.h | 4 ++-- serialportcommander/serialportcommander.pro | 9 +++---- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/serialportcommander/integrationpluginserialportcommander.cpp b/serialportcommander/integrationpluginserialportcommander.cpp index 5de0338d..93feab53 100644 --- a/serialportcommander/integrationpluginserialportcommander.cpp +++ b/serialportcommander/integrationpluginserialportcommander.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -109,13 +109,19 @@ void IntegrationPluginSerialPortCommander::setupThing(ThingSetupInfo *info) return info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Could not open serial port.")); } +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) + connect(serialPort, &QSerialPort::errorOccurred, this, &IntegrationPluginSerialPortCommander::onSerialError); +#else connect(serialPort, SIGNAL(error(QSerialPort::SerialPortError)), this, SLOT(onSerialError(QSerialPort::SerialPortError))); - connect(serialPort, SIGNAL(readyRead()), this, SLOT(onReadyRead())); - connect(serialPort, SIGNAL(baudRateChanged(qint32, QSerialPort::Directions)), this, SLOT(onBaudRateChanged(qint32, QSerialPort::Directions))); - connect(serialPort, SIGNAL(parityChanged(QSerialPort::Parity)), this, SLOT(onParityChanged(QSerialPort::Parity))); - connect(serialPort, SIGNAL(dataBitsChanged(QSerialPort::DataBits)), this, SLOT(onDataBitsChanged(QSerialPort::DataBits))); - connect(serialPort, SIGNAL(stopBitsChanged(QSerialPort::StopBits)), this, SLOT(onStopBitsChanged(QSerialPort::StopBits))); - connect(serialPort, SIGNAL(flowControlChanged(QSerialPort::FlowControl)), this, SLOT(onFlowControlChanged(QSerialPort::FlowControl))); +#endif + connect(serialPort, &QSerialPort::readyRead, this, &IntegrationPluginSerialPortCommander::onReadyRead); + connect(serialPort, &QSerialPort::baudRateChanged, this, &IntegrationPluginSerialPortCommander::onBaudRateChanged); + connect(serialPort, &QSerialPort::parityChanged, this, &IntegrationPluginSerialPortCommander::onParityChanged); + connect(serialPort, &QSerialPort::dataBitsChanged, this, &IntegrationPluginSerialPortCommander::onDataBitsChanged); + connect(serialPort, &QSerialPort::stopBitsChanged, this, &IntegrationPluginSerialPortCommander::onStopBitsChanged); + connect(serialPort, &QSerialPort::flowControlChanged, this, &IntegrationPluginSerialPortCommander::onFlowControlChanged); + + m_serialPorts.insert(thing, serialPort); thing->setStateValue(serialPortCommanderConnectedStateTypeId, true); } @@ -171,13 +177,13 @@ void IntegrationPluginSerialPortCommander::onReadyRead() while (!serialPort->atEnd()) { data.append(serialPort->read(100)); } - qDebug(dcSerialPortCommander()) << "Message received" << data; + qCDebug(dcSerialPortCommander()) << "Message received" << data; Event event(serialPortCommanderTriggeredEventTypeId, thing->id()); ParamList parameters; parameters.append(Param(serialPortCommanderTriggeredEventInputDataParamTypeId, data)); event.setParams(parameters); - emitEvent(event); + emit emitEvent(event); } void IntegrationPluginSerialPortCommander::onSerialError(QSerialPort::SerialPortError error) diff --git a/serialportcommander/integrationpluginserialportcommander.h b/serialportcommander/integrationpluginserialportcommander.h index f2e88293..79943929 100644 --- a/serialportcommander/integrationpluginserialportcommander.h +++ b/serialportcommander/integrationpluginserialportcommander.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,7 +31,7 @@ #ifndef INTEGRATIONPLUGINSERIALPORTCOMMANDER_H #define INTEGRATIONPLUGINSERIALPORTCOMMANDER_H -#include "integrations/integrationplugin.h" +#include #include #include diff --git a/serialportcommander/serialportcommander.pro b/serialportcommander/serialportcommander.pro index df14d777..6da03f9a 100644 --- a/serialportcommander/serialportcommander.pro +++ b/serialportcommander/serialportcommander.pro @@ -1,12 +1,9 @@ include(../plugins.pri) -QT += serialport - -TARGET = $$qtLibraryTarget(nymea_integrationpluginserialportcommander) +QT *= serialport SOURCES += \ - integrationpluginserialportcommander.cpp \ - + integrationpluginserialportcommander.cpp HEADERS += \ - integrationpluginserialportcommander.h \ + integrationpluginserialportcommander.h From 4f728d259547b97635eadfba9de314611a86a7cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 16:14:09 +0200 Subject: [PATCH 53/82] sgready: Add Qt6 support --- sgready/integrationpluginsgready.cpp | 3 ++- sgready/integrationpluginsgready.h | 7 ++++--- sgready/sgreadyinterface.h | 5 ++--- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/sgready/integrationpluginsgready.cpp b/sgready/integrationpluginsgready.cpp index 384b8037..fc792f87 100644 --- a/sgready/integrationpluginsgready.cpp +++ b/sgready/integrationpluginsgready.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2021, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -29,6 +29,7 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "integrationpluginsgready.h" +#include "sgreadyinterface.h" #include "plugininfo.h" IntegrationPluginSgReady::IntegrationPluginSgReady() diff --git a/sgready/integrationpluginsgready.h b/sgready/integrationpluginsgready.h index 4c72b137..be7ce81b 100644 --- a/sgready/integrationpluginsgready.h +++ b/sgready/integrationpluginsgready.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2021, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,8 +31,9 @@ #ifndef INTEGRATIONPLUGINSGREADY_H #define INTEGRATIONPLUGINSGREADY_H -#include "integrations/integrationplugin.h" -#include "sgreadyinterface.h" +#include + +class SgReadyInterface; class IntegrationPluginSgReady : public IntegrationPlugin { diff --git a/sgready/sgreadyinterface.h b/sgready/sgreadyinterface.h index 5c1f9869..145b5b21 100644 --- a/sgready/sgreadyinterface.h +++ b/sgready/sgreadyinterface.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2021, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -32,8 +32,7 @@ #define SGREADYINTERFACE_H #include - -#include "gpio.h" +#include class SgReadyInterface : public QObject { From d387be5c11a2f9bfd41b0779b3866b907765203f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 16:18:05 +0200 Subject: [PATCH 54/82] shelly: Add Qt6 support --- shelly/integrationpluginshelly.cpp | 3 +-- shelly/integrationpluginshelly.h | 1 - shelly/shellyjsonrpcclient.cpp | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/shelly/integrationpluginshelly.cpp b/shelly/integrationpluginshelly.cpp index 86f12d1f..4890e0b7 100644 --- a/shelly/integrationpluginshelly.cpp +++ b/shelly/integrationpluginshelly.cpp @@ -2127,8 +2127,7 @@ bool IntegrationPluginShelly::isGen2Plus(const QString &shellyId) const return shellyId.contains("Plus", Qt::CaseInsensitive) || shellyId.contains("Pro", Qt::CaseInsensitive) || shellyId.contains("G3", Qt::CaseInsensitive) // Gen3 devices have API 2 - || QRegExp("^(ShellyPlusPlugS|ShellyPlug(US|IT|UK))-[0-9A-Z]+$", Qt::CaseInsensitive).exactMatch(shellyId) // Plus plug variants need to be matched quite precisely to not also match the v1 Plug - ; + || QRegularExpression("^(ShellyPlusPlugS|ShellyPlug(US|IT|UK))-[0-9A-Z]+$", QRegularExpression::CaseInsensitiveOption).match(shellyId).hasMatch(); // Plus plug variants need to be matched quite precisely to not also match the v1 Plug } void IntegrationPluginShelly::handleInputEvent(Thing *thing, const QString &buttonName, const QString &inputEventString, int inputEventCount) diff --git a/shelly/integrationpluginshelly.h b/shelly/integrationpluginshelly.h index ec9f2da8..746440a6 100644 --- a/shelly/integrationpluginshelly.h +++ b/shelly/integrationpluginshelly.h @@ -52,7 +52,6 @@ class IntegrationPluginShelly: public IntegrationPlugin Q_PLUGIN_METADATA(IID "io.nymea.IntegrationPlugin" FILE "integrationpluginshelly.json") Q_INTERFACES(IntegrationPlugin) - public: explicit IntegrationPluginShelly(); ~IntegrationPluginShelly() override; diff --git a/shelly/shellyjsonrpcclient.cpp b/shelly/shellyjsonrpcclient.cpp index 97d22e11..de1bec4a 100644 --- a/shelly/shellyjsonrpcclient.cpp +++ b/shelly/shellyjsonrpcclient.cpp @@ -132,7 +132,7 @@ void ShellyJsonRpcClient::onTextMessageReceived(const QString &message) QVariantMap ShellyJsonRpcClient::createAuthMap() const { - int cnonce = qrand(); + int cnonce = std::rand(); QByteArray ha1 = QString("%1:%2:%3").arg(m_user).arg(m_shellyId.toLower()).arg(m_password).toUtf8(); ha1 = QCryptographicHash::hash(ha1, QCryptographicHash::Sha256).toHex(); QByteArray ha2 = QByteArrayLiteral("dummy_method:dummy_uri"); From 1ffb4626772e0d52914c7b63d392123ecc497363 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 16:19:19 +0200 Subject: [PATCH 55/82] simpleheatpump: Add Qt6 support --- simpleheatpump/integrationpluginsimpleheatpump.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/simpleheatpump/integrationpluginsimpleheatpump.h b/simpleheatpump/integrationpluginsimpleheatpump.h index cc06e34d..c9497017 100644 --- a/simpleheatpump/integrationpluginsimpleheatpump.h +++ b/simpleheatpump/integrationpluginsimpleheatpump.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2021, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,8 +31,7 @@ #ifndef INTEGRATIONPLUGINSIMPLEHEATPUMP_H #define INTEGRATIONPLUGINSIMPLEHEATPUMP_H -#include "integrations/integrationplugin.h" - +#include #include class IntegrationPluginSimpleHeatpump : public IntegrationPlugin From 34540ad217f913417eeb81b09783cfe9c91d3376 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 16:20:48 +0200 Subject: [PATCH 56/82] solarlog: Add Qt6 support --- solarlog/integrationpluginsolarlog.cpp | 6 ++++-- solarlog/integrationpluginsolarlog.h | 9 +++++---- solarlog/solarlog.pro | 4 ++-- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/solarlog/integrationpluginsolarlog.cpp b/solarlog/integrationpluginsolarlog.cpp index 3e030dae..05f9d560 100644 --- a/solarlog/integrationpluginsolarlog.cpp +++ b/solarlog/integrationpluginsolarlog.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -30,7 +30,9 @@ #include "integrationpluginsolarlog.h" #include "plugininfo.h" -#include "network/networkaccessmanager.h" + +#include +#include #include #include diff --git a/solarlog/integrationpluginsolarlog.h b/solarlog/integrationpluginsolarlog.h index cfe6570d..d47c6d10 100644 --- a/solarlog/integrationpluginsolarlog.h +++ b/solarlog/integrationpluginsolarlog.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,15 +31,16 @@ #ifndef INTEGRATIONPLUGINSOLARLOG_H #define INTEGRATIONPLUGINSOLARLOG_H -#include "integrations/integrationplugin.h" -#include "plugintimer.h" +#include #include #include #include +class PluginTimer; -class IntegrationPluginSolarLog: public IntegrationPlugin { +class IntegrationPluginSolarLog: public IntegrationPlugin +{ Q_OBJECT Q_PLUGIN_METADATA(IID "io.nymea.IntegrationPlugin" FILE "integrationpluginsolarlog.json") Q_INTERFACES(IntegrationPlugin) diff --git a/solarlog/solarlog.pro b/solarlog/solarlog.pro index 06846de6..b2110182 100644 --- a/solarlog/solarlog.pro +++ b/solarlog/solarlog.pro @@ -3,7 +3,7 @@ include(../plugins.pri) QT += network SOURCES += \ - integrationpluginsolarlog.cpp \ + integrationpluginsolarlog.cpp HEADERS += \ - integrationpluginsolarlog.h \ + integrationpluginsolarlog.h From 77e5b43d77c41219bec2dd3f7f87901bd9c7bdf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 16:23:41 +0200 Subject: [PATCH 57/82] somfytahoma: Add Qt6 support --- somfytahoma/integrationpluginsomfytahoma.cpp | 9 +++++---- somfytahoma/integrationpluginsomfytahoma.h | 9 +++------ somfytahoma/somfytahomarequests.cpp | 5 ++--- 3 files changed, 10 insertions(+), 13 deletions(-) diff --git a/somfytahoma/integrationpluginsomfytahoma.cpp b/somfytahoma/integrationpluginsomfytahoma.cpp index bce7216c..d22f3cd3 100644 --- a/somfytahoma/integrationpluginsomfytahoma.cpp +++ b/somfytahoma/integrationpluginsomfytahoma.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2022, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -34,9 +34,10 @@ #include #include -#include "network/networkaccessmanager.h" -#include "network/zeroconf/zeroconfservicebrowser.h" -#include "platform/platformzeroconfcontroller.h" +#include +#include +#include +#include #include "plugininfo.h" #include "somfytahomarequests.h" diff --git a/somfytahoma/integrationpluginsomfytahoma.h b/somfytahoma/integrationpluginsomfytahoma.h index 330467c3..fc8ea12c 100644 --- a/somfytahoma/integrationpluginsomfytahoma.h +++ b/somfytahoma/integrationpluginsomfytahoma.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2022, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,15 +31,12 @@ #ifndef INTEGRATIONPLUGINSOMFYTAHOMA_H #define INTEGRATIONPLUGINSOMFYTAHOMA_H -#include "integrations/integrationplugin.h" -#include "plugintimer.h" +#include #include "extern-plugininfo.h" -class QHostAddress; - +class PluginTimer; class ZeroConfServiceBrowser; - class SomfyTahomaRequest; class IntegrationPluginSomfyTahoma : public IntegrationPlugin diff --git a/somfytahoma/somfytahomarequests.cpp b/somfytahoma/somfytahomarequests.cpp index 617ab2e3..6acf6310 100644 --- a/somfytahoma/somfytahomarequests.cpp +++ b/somfytahoma/somfytahomarequests.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2022, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -33,11 +33,10 @@ #include #include -#include "network/networkaccessmanager.h" +#include #include "extern-plugininfo.h" - static const QString somfyTahomaWebUrl = QStringLiteral("https://ha101-1.overkiz.com/enduser-mobile-web/enduserAPI"); static const QString localSomfyTahomaPath = QStringLiteral("/enduser-mobile-web/1/enduserAPI"); From aba181a81269a51c49eb55ce4db95065b3653ff7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 16:32:47 +0200 Subject: [PATCH 58/82] sonos: Add Qt6 support --- sonos/integrationpluginsonos.cpp | 42 ++++++++-------- sonos/integrationpluginsonos.h | 13 +++-- sonos/sonos.cpp | 84 ++++++++++++++++---------------- sonos/sonos.h | 41 ++++++++-------- sonos/sonos.pro | 6 +-- 5 files changed, 96 insertions(+), 90 deletions(-) diff --git a/sonos/integrationpluginsonos.cpp b/sonos/integrationpluginsonos.cpp index 99f3e7e9..2bbeed53 100644 --- a/sonos/integrationpluginsonos.cpp +++ b/sonos/integrationpluginsonos.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -29,11 +29,12 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "integrationpluginsonos.h" -#include "integrations/thing.h" -#include "network/networkaccessmanager.h" #include "plugininfo.h" -#include "types/mediabrowseritem.h" +#include +#include +#include +#include #include #include @@ -59,7 +60,7 @@ void IntegrationPluginSonos::setupThing(ThingSetupInfo *info) Thing *thing = info->thing(); if (thing->thingClassId() == sonosConnectionThingClassId) { - Sonos *sonos; + Sonos *sonos = nullptr; if (m_setupSonosConnections.keys().contains(thing->id())) { //Fresh thing setup, has already a fresh access token qCDebug(dcSonos()) << "Sonos OAuth setup complete"; @@ -143,13 +144,13 @@ void IntegrationPluginSonos::confirmPairing(ThingPairingInfo *info, const QStrin QUrl url(secret); QUrlQuery query(url); QByteArray authorizationCode = query.queryItemValue("code").toLocal8Bit(); - QByteArray state = query.queryItemValue("state").toLocal8Bit(); + //QByteArray state = query.queryItemValue("state").toLocal8Bit(); //TODO evaluate state if it equals the given state Sonos *sonos = m_setupSonosConnections.value(info->thingId()); if (!sonos) { - qWarning(dcSonos()) << "No sonos connection found for thing:" << info->thingName(); + qCWarning(dcSonos()) << "No sonos connection found for thing:" << info->thingName(); m_setupSonosConnections.remove(info->thingId()); info->finish(Thing::ThingErrorHardwareFailure); return; @@ -157,7 +158,7 @@ void IntegrationPluginSonos::confirmPairing(ThingPairingInfo *info, const QStrin sonos->getAccessTokenFromAuthorizationCode(authorizationCode); connect(sonos, &Sonos::authenticationStatusChanged, info, [this, info, sonos](bool authenticated){ if(!authenticated) { - qWarning(dcSonos()) << "Authentication process failed" << info->thingName(); + qCWarning(dcSonos()) << "Authentication process failed" << info->thingName(); m_setupSonosConnections.remove(info->thingId()); sonos->deleteLater(); info->finish(Thing::ThingErrorSetupFailed, QT_TR_NOOP("Authentication failed. Please try again.")); @@ -188,7 +189,7 @@ void IntegrationPluginSonos::postSetupThing(Thing *thing) foreach (Thing *connectionDevice, myThings().filterByThingClassId(sonosConnectionThingClassId)) { Sonos *sonos = m_sonosConnections.value(connectionDevice); if (!sonos) { - qWarning(dcSonos()) << "No sonos connection found to" << connectionDevice->name(); + qCWarning(dcSonos()) << "No sonos connection found to" << connectionDevice->name(); continue; } foreach (Thing *groupDevice, myThings().filterByParentId(connectionDevice->id())) { @@ -210,7 +211,7 @@ void IntegrationPluginSonos::postSetupThing(Thing *thing) foreach (Thing *thing, myThings().filterByThingClassId(sonosConnectionThingClassId)) { Sonos *sonos = m_sonosConnections.value(thing); if (!sonos) { - qWarning(dcSonos()) << "No sonos connection found to" << thing->name(); + qCWarning(dcSonos()) << "No sonos connection found to" << thing->name(); continue; } //get groups for each household in order to add or remove groups @@ -269,7 +270,7 @@ void IntegrationPluginSonos::executeAction(ThingActionInfo *info) QString groupId = thing->paramValue(sonosGroupThingGroupIdParamTypeId).toString(); if (!sonos) { - qWarning(dcSonos()) << "Action cannot be executed: Sonos connection not available"; + qCWarning(dcSonos()) << "Action cannot be executed: Sonos connection not available"; return info->finish(Thing::ThingErrorHardwareNotAvailable, QT_TR_NOOP("Sonos thing is not available.")); } @@ -368,7 +369,7 @@ void IntegrationPluginSonos::browseThing(BrowseResult *result) return; } - qDebug(dcSonos()) << "Browse Device" << result->itemId(); + qCDebug(dcSonos()) << "Browse Device" << result->itemId(); QString householdId = result->thing()->paramValue(sonosGroupThingHouseholdIdParamTypeId).toString(); if (result->itemId().isEmpty()){ BrowserItem item; @@ -382,7 +383,7 @@ void IntegrationPluginSonos::browseThing(BrowseResult *result) } else if (result->itemId() == m_browseFavoritesPrefix) { QUuid requestId = sonosConnection->getFavorites(householdId); m_pendingBrowseResult.insert(requestId, result); - connect(result, &BrowseResult::aborted,[requestId, this](){m_pendingBrowseResult.remove(requestId);}); + connect(result, &BrowseResult::aborted, this, [requestId, this](){ m_pendingBrowseResult.remove(requestId); }); } else { //TODO add media browsing result->finish(Thing::ThingErrorItemNotFound); @@ -403,7 +404,7 @@ void IntegrationPluginSonos::browserItem(BrowserItemResult *result) if (result->itemId().startsWith(m_browseFavoritesPrefix)) { QUuid requestId = sonosConnection->getFavorites(householdId); m_pendingBrowserItemResult.insert(requestId, result); - connect(result, &BrowserItemResult::aborted, [requestId, this](){m_pendingBrowserItemResult.remove(requestId);}); + connect(result, &BrowserItemResult::aborted, this, [requestId, this](){ m_pendingBrowserItemResult.remove(requestId); }); } else { //TODO add media browsing result->finish(Thing::ThingErrorItemNotFound); @@ -423,7 +424,7 @@ void IntegrationPluginSonos::executeBrowserItem(BrowserActionInfo *info) favoriteId.remove('/'); QUuid requestId = sonosConnection->loadFavorite(groupId, favoriteId); m_pendingBrowserExecution.insert(requestId, info); - connect(info, &BrowserActionInfo::aborted,[requestId, this](){m_pendingBrowserExecution.remove(requestId);}); + connect(info, &BrowserActionInfo::aborted, this, [requestId, this](){ m_pendingBrowserExecution.remove(requestId); }); } else { //TODO add media browsing info->finish(Thing::ThingErrorItemNotFound); @@ -436,6 +437,7 @@ void IntegrationPluginSonos::onConnectionChanged(bool connected) Thing *thing = m_sonosConnections.key(sonos); if (!thing) return; + thing->setStateValue(sonosConnectionConnectedStateTypeId, connected); foreach (Thing *groupDevice, myThings().filterByParentId(thing->id())) { @@ -491,7 +493,7 @@ void IntegrationPluginSonos::onFavoritesReceived(QUuid requestId, const QString item.setDisplayName(favorite.name); item.setDescription(favorite.description); result->addItem(item); - qDebug(dcSonos()) << "Favorite: " << favorite.name << favorite.description; + qCDebug(dcSonos()) << "Favorite: " << favorite.name << favorite.description; } result->finish(Thing::ThingErrorNoError); @@ -527,7 +529,7 @@ void IntegrationPluginSonos::onPlaylistsReceived(const QString &householdId, QLi Sonos *sonos = static_cast(sender()); foreach(Sonos::PlaylistObject playlist, playlists) { - qDebug(dcSonos()) << "Playlist: " << playlist.name << playlist.type << playlist.trackCount; + qCDebug(dcSonos()) << "Playlist: " << playlist.name << playlist.type << playlist.trackCount; sonos->getPlaylist(householdId, playlist.id); //Get the playlist details } } @@ -535,9 +537,9 @@ void IntegrationPluginSonos::onPlaylistsReceived(const QString &householdId, QLi void IntegrationPluginSonos::onPlaylistSummaryReceived(const QString &householdId, Sonos::PlaylistSummaryObject playlistSummary) { Q_UNUSED(householdId); - qDebug(dcSonos()) << "Playlist summary received: " << playlistSummary.name; + qCDebug(dcSonos()) << "Playlist summary received: " << playlistSummary.name; foreach(Sonos::PlaylistTrackObject track, playlistSummary.tracks) { - qDebug(dcSonos()) << "---- Track: " << track.name << track.album << track.artist; + qCDebug(dcSonos()) << "---- Track: " << track.name << track.album << track.artist; } } @@ -553,7 +555,7 @@ void IntegrationPluginSonos::onGroupsReceived(const QString &householdId, QList< Thing *groupDevice = myThings().findByParams(ParamList() << Param(sonosGroupThingGroupIdParamTypeId, groupObject.groupId)); if (groupDevice) { if (groupDevice->name() != groupObject.displayName) { - qDebug(dcSonos()) << "Updating group name" << groupDevice->name() << "to" << groupObject.displayName; + qCDebug(dcSonos()) << "Updating group name" << groupDevice->name() << "to" << groupObject.displayName; groupDevice->setName(groupObject.displayName); } } else { diff --git a/sonos/integrationpluginsonos.h b/sonos/integrationpluginsonos.h index adcddaed..c87937d2 100644 --- a/sonos/integrationpluginsonos.h +++ b/sonos/integrationpluginsonos.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,13 +31,18 @@ #ifndef INTEGRATIONPLUGINSONOS_H #define INTEGRATIONPLUGINSONOS_H -#include "integrations/integrationplugin.h" -#include "plugintimer.h" -#include "sonos.h" +#include #include #include +#include "sonos.h" + +class PluginTimer; +class BrowseResult; +class BrowseResult; +class BrowserItemResult; + class IntegrationPluginSonos : public IntegrationPlugin { Q_OBJECT diff --git a/sonos/sonos.cpp b/sonos/sonos.cpp index 3105c72b..21e66618 100644 --- a/sonos/sonos.cpp +++ b/sonos/sonos.cpp @@ -52,12 +52,12 @@ Sonos::Sonos(NetworkAccessManager *networkmanager, const QByteArray &clientKey, QUrl Sonos::getLoginUrl(const QUrl &redirectUrl) { if (m_clientKey.isEmpty()) { - qWarning(dcSonos()) << "Client key not defined!"; + qCWarning(dcSonos()) << "Client key not defined!"; return QUrl(""); } if (redirectUrl.isEmpty()){ - qWarning(dcSonos()) << "No redirect uri defined!"; + qCWarning(dcSonos()) << "No redirect uri defined!"; } m_redirectUri = QUrl::toPercentEncoding(redirectUrl.toString()); @@ -91,7 +91,7 @@ void Sonos::getHouseholds() request.setRawHeader("X-Sonos-Api-Key", m_clientKey); request.setUrl(QUrl(m_baseControlUrl + "/households")); QNetworkReply *reply = m_networkManager->get(request); - qDebug(dcSonos()) << "Sending request" << request.url() << request.rawHeaderList() << request.rawHeader("Authorization"); + qCDebug(dcSonos()) << "Sending request" << request.url() << request.rawHeaderList() << request.rawHeader("Authorization"); connect(reply, &QNetworkReply::finished, this, [reply, this] { reply->deleteLater(); int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); @@ -113,13 +113,13 @@ void Sonos::getHouseholds() QJsonParseError error; QJsonDocument data = QJsonDocument::fromJson(reply->readAll(), &error); if (error.error != QJsonParseError::NoError) { - qDebug(dcSonos()) << "Household ID: Recieved invalide JSON object"; + qCDebug(dcSonos()) << "Household ID: Recieved invalide JSON object"; return; } QList households; foreach (const QVariant &variant, data.toVariant().toMap().value("households").toList()) { QVariantMap obj = variant.toMap(); - //qDebug(dcSonos()) << "Household ID received:" << obj["id"].toString(); + //qCDebug(dcSonos()) << "Household ID received:" << obj["id"].toString(); households.append(obj["id"].toString()); } emit householdIdsReceived(households); @@ -140,7 +140,7 @@ QUuid Sonos::loadFavorite(const QString &groupId, const QString &favouriteId) object.insert("favoriteId", favouriteId); object.insert("playOnCompletion", true); QJsonDocument doc(object); - qDebug(dcSonos()) << "Sending request" << doc.toJson(); + qCDebug(dcSonos()) << "Sending request" << doc.toJson(); QNetworkReply *reply = m_networkManager->post(request, doc.toJson(QJsonDocument::Compact)); connect(reply, &QNetworkReply::finished, this, [reply, actionId, this] { @@ -205,7 +205,7 @@ QUuid Sonos::getFavorites(const QString &householdId) return; QVariantList array = data.toVariant().toMap().value("items").toList(); - //qDebug(dcSonos()) << "Favorites received:" << data.toJson(); + //qCDebug(dcSonos()) << "Favorites received:" << data.toJson(); QList favorites; foreach (const QVariant &variant, array) { @@ -249,7 +249,7 @@ void Sonos::getGroups(const QString &householdId) emit connectionChanged(true); emit authenticationStatusChanged(true); - //qDebug(dcSonos()) << "Received response from Sonos" << reply->readAll(); + //qCDebug(dcSonos()) << "Received response from Sonos" << reply->readAll(); QJsonParseError error; QJsonDocument data = QJsonDocument::fromJson(reply->readAll(), &error); if (error.error != QJsonParseError::NoError) @@ -262,7 +262,7 @@ void Sonos::getGroups(const QString &householdId) QList groupObjects; foreach (const QVariant &value, array) { QVariantMap obj = value.toMap(); - //qDebug(dcSonos()) << "Group ID received:" << obj["id"].toString(); + //qCDebug(dcSonos()) << "Group ID received:" << obj["id"].toString(); GroupObject group; group.groupId = obj["id"].toString(); group.displayName = obj["name"].toString(); @@ -304,7 +304,7 @@ void Sonos::getGroupVolume(const QString &groupId) emit connectionChanged(true); emit authenticationStatusChanged(true); - //qDebug(dcSonos()) << "Received response from Sonos" << reply->readAll(); + //qCDebug(dcSonos()) << "Received response from Sonos" << reply->readAll(); QJsonParseError error; QJsonDocument data = QJsonDocument::fromJson(reply->readAll(), &error); if (error.error != QJsonParseError::NoError) { @@ -335,7 +335,7 @@ QUuid Sonos::setGroupVolume(const QString &groupId, int volume) QJsonObject object; object.insert("volume", volume); QJsonDocument doc(object); - qDebug(dcSonos()) << "Set volume:" << groupId << doc.toJson(QJsonDocument::Compact); + qCDebug(dcSonos()) << "Set volume:" << groupId << doc.toJson(QJsonDocument::Compact); QNetworkReply *reply = m_networkManager->post(request, doc.toJson(QJsonDocument::Compact)); connect(reply, &QNetworkReply::finished, this, [reply, actionId, groupId, this] { @@ -375,7 +375,7 @@ QUuid Sonos::setGroupMute(const QString &groupId, bool mute) object.insert("muted", mute); QJsonDocument doc(object); - qDebug(dcSonos()) << "Set mute:" << groupId << doc.toJson(QJsonDocument::Compact); + qCDebug(dcSonos()) << "Set mute:" << groupId << doc.toJson(QJsonDocument::Compact); QNetworkReply *reply = m_networkManager->post(request, doc.toJson(QJsonDocument::Compact)); connect(reply, &QNetworkReply::finished, this, [reply, actionId, groupId, this] { @@ -415,7 +415,7 @@ QUuid Sonos::setGroupRelativeVolume(const QString &groupId, int volumeDelta) object.insert("volumeDelta", QJsonValue::fromVariant(volumeDelta)); QJsonDocument doc(object); - qDebug(dcSonos()) << "Relative volume:" << groupId << volumeDelta; + qCDebug(dcSonos()) << "Relative volume:" << groupId << volumeDelta; QNetworkReply *reply = m_networkManager->post(request, doc.toJson(QJsonDocument::Compact)); connect(reply, &QNetworkReply::finished, this, [reply, actionId, groupId, this] { @@ -476,7 +476,7 @@ void Sonos::getGroupPlaybackStatus(const QString &groupId) QJsonObject object = data.object(); playBack.itemId = object["itemId"].toString(); playBack.positionMillis = object["positionMillis"].toInt(); - playBack.previousItemId = object["previousItemId"].toInt(); + playBack.previousItemId = QString::number(object["previousItemId"].toInt()); playBack.previousPositionMillis = object["previousPositionMillis"].toInt(); QString playBackState = object["playbackState"].toString(); if (playBackState.contains("BUFFERING")) { @@ -505,7 +505,7 @@ void Sonos::getGroupPlaybackStatus(const QString &groupId) QUuid Sonos::groupLoadLineIn(const QString &groupId) { - qDebug(dcSonos()) << "Load line in:" << groupId; + qCDebug(dcSonos()) << "Load line in:" << groupId; QNetworkRequest request; request.setHeader(QNetworkRequest::KnownHeaders::ContentTypeHeader, "application/json"); request.setRawHeader("Authorization", "Bearer " + m_accessToken); @@ -547,7 +547,7 @@ QUuid Sonos::groupPlay(const QString &groupId) request.setUrl(QUrl(m_baseControlUrl + "/groups/" + groupId + "/playback/play")); QUuid actionId = QUuid::createUuid(); - qDebug(dcSonos()) << "Play:" << groupId; + qCDebug(dcSonos()) << "Play:" << groupId; QNetworkReply *reply = m_networkManager->post(request, ""); connect(reply, &QNetworkReply::finished, this, [reply, actionId, groupId, this] { @@ -583,7 +583,7 @@ QUuid Sonos::groupPause(const QString &groupId) request.setUrl(QUrl(m_baseControlUrl + "/groups/" + groupId + "/playback/pause")); QUuid actionId = QUuid::createUuid(); - qDebug(dcSonos()) << "Pause:" << groupId; + qCDebug(dcSonos()) << "Pause:" << groupId; QNetworkReply *reply = m_networkManager->post(request, ""); connect(reply, &QNetworkReply::finished, this, [reply, actionId, groupId, this] { @@ -780,15 +780,15 @@ QUuid Sonos::groupSetRepeat(const QString &groupId, RepeatMode repeatMode) QJsonObject object; QJsonObject playModesObject; if (repeatMode == RepeatModeAll) { - qDebug(dcSonos()) << "Setting repeat mode all"; + qCDebug(dcSonos()) << "Setting repeat mode all"; playModesObject["repeat"] = true; playModesObject["repeatOne"] = false; } else if (repeatMode == RepeatModeOne) { - qDebug(dcSonos()) << "Setting repeat mode one"; + qCDebug(dcSonos()) << "Setting repeat mode one"; playModesObject["repeat"] = false; playModesObject["repeatOne"] = true; } else if (repeatMode == RepeatModeNone) { - qDebug(dcSonos()) << "Setting repeat mode none"; + qCDebug(dcSonos()) << "Setting repeat mode none"; playModesObject["repeat"] = false; playModesObject["repeatOne"] = false; } @@ -1024,21 +1024,21 @@ void Sonos::getGroupMetadataStatus(const QString &groupId) ArtistObject artist; QJsonObject artistObject = trackObject["artist"].toObject(); artist.name = artistObject["name"].toString(); - //qDebug(dcSonos()) << "Track object contains artist" << artist.name; + //qCDebug(dcSonos()) << "Track object contains artist" << artist.name; track.artist = artist; } if (trackObject.contains("album")) { AlbumObject album; QJsonObject albumObject = trackObject["album"].toObject(); album.name = albumObject["name"].toString(); - //qDebug(dcSonos()) << "Track object contains album" << album.name; + //qCDebug(dcSonos()) << "Track object contains album" << album.name; track.album = album; } if (trackObject.contains("service")) { ServiceObject service; QJsonObject serviceObject = trackObject["service"].toObject(); service.name = serviceObject["name"].toString(); - //qDebug(dcSonos()) << "Track object contains service" << service.name; + //qCDebug(dcSonos()) << "Track object contains service" << service.name; track.service = service; } if (trackObject.contains("id")) { @@ -1067,21 +1067,21 @@ void Sonos::getGroupMetadataStatus(const QString &groupId) ArtistObject artist; QJsonObject artistObject = trackObject.value("artist").toObject(); artist.name = artistObject["name"].toString(); - //qDebug(dcSonos()) << "Track object contains artist" << artist.name; + //qCDebug(dcSonos()) << "Track object contains artist" << artist.name; track.artist = artist; } if (trackObject.contains("album")) { AlbumObject album; QJsonObject albumObject = trackObject.value("album").toObject(); album.name = albumObject["name"].toString(); - //qDebug(dcSonos()) << "Track object contains album" << album.name; + //qCDebug(dcSonos()) << "Track object contains album" << album.name; track.album = album; } if (trackObject.contains("service")) { ServiceObject service; QJsonObject serviceObject = trackObject.value("service").toObject(); service.name = serviceObject["name"].toString(); - //qDebug(dcSonos()) << "Track object contains service" << service.name; + //qCDebug(dcSonos()) << "Track object contains service" << service.name; track.service = service; } if (trackObject.contains("id")) { @@ -1127,7 +1127,7 @@ void Sonos::getPlayerVolume(const QByteArray &playerId) emit connectionChanged(true); emit authenticationStatusChanged(true); - //qDebug(dcSonos()) << "Received response from Sonos" << reply->readAll(); + //qCDebug(dcSonos()) << "Received response from Sonos" << reply->readAll(); QJsonParseError error; QJsonDocument data = QJsonDocument::fromJson(reply->readAll(), &error); if (error.error != QJsonParseError::NoError) { @@ -1153,7 +1153,7 @@ QUuid Sonos::setPlayerVolume(const QByteArray &playerId, int volume) request.setUrl(QUrl(m_baseControlUrl + "/players/" + playerId + "/playerVolume")); QUuid actionId = QUuid::createUuid(); - qDebug(dcSonos()) << "Setting volume:" << playerId << volume; + qCDebug(dcSonos()) << "Setting volume:" << playerId << volume; QJsonObject object; object.insert("volume", QJsonValue::fromVariant(volume)); @@ -1292,7 +1292,7 @@ void Sonos::getPlaylist(const QString &householdId, const QString &playlistId) emit connectionChanged(true); emit authenticationStatusChanged(true); - //qDebug(dcSonos()) << "Received response from Sonos" << reply->readAll(); + //qCDebug(dcSonos()) << "Received response from Sonos" << reply->readAll(); QJsonParseError error; QJsonDocument data = QJsonDocument::fromJson(reply->readAll(), &error); if (error.error != QJsonParseError::NoError) { @@ -1345,7 +1345,7 @@ void Sonos::getPlaylists(const QString &householdId) emit connectionChanged(true); emit authenticationStatusChanged(true); - //qDebug(dcSonos()) << "Received response from Sonos" << reply->readAll(); + //qCDebug(dcSonos()) << "Received response from Sonos" << reply->readAll(); QJsonParseError error; QJsonDocument data = QJsonDocument::fromJson(reply->readAll(), &error); if (!data.isObject()) { @@ -1504,7 +1504,7 @@ void Sonos::onRefreshTimeout() void Sonos::getAccessTokenFromRefreshToken(const QByteArray &refreshToken) { if (refreshToken.isEmpty()) { - qWarning(dcSonos()) << "No refresh token given!"; + qCWarning(dcSonos()) << "No refresh token given!"; emit authenticationStatusChanged(false); return; } @@ -1530,7 +1530,7 @@ void Sonos::getAccessTokenFromRefreshToken(const QByteArray &refreshToken) int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); if (status != 200 || reply->error() != QNetworkReply::NoError) { if(jsonDoc.toVariant().toMap().contains("error_description")) { - qWarning(dcSonos()) << "Access token error:" << jsonDoc.toVariant().toMap().value("error_description").toString(); + qCWarning(dcSonos()) << "Access token error:" << jsonDoc.toVariant().toMap().value("error_description").toString(); } emit authenticationStatusChanged(false); return; @@ -1545,7 +1545,7 @@ void Sonos::getAccessTokenFromRefreshToken(const QByteArray &refreshToken) int expireTime = jsonDoc.toVariant().toMap().value("expires_in").toInt(); qCDebug(dcSonos()) << "Access token expires at" << QDateTime::currentDateTime().addSecs(expireTime).toString(); if (!m_tokenRefreshTimer) { - qWarning(dcSonos()) << "Access token refresh timer not initialized"; + qCWarning(dcSonos()) << "Access token refresh timer not initialized"; return; } m_tokenRefreshTimer->start((expireTime - 20) * 1000); @@ -1558,11 +1558,11 @@ void Sonos::getAccessTokenFromAuthorizationCode(const QByteArray &authorizationC { // Obtaining access token if(authorizationCode.isEmpty()) - qWarning(dcSonos) << "No auhtorization code given!"; + qCWarning(dcSonos()) << "No auhtorization code given!"; if(m_clientKey.isEmpty()) - qWarning(dcSonos) << "Client key not set!"; + qCWarning(dcSonos()) << "Client key not set!"; if(m_clientSecret.isEmpty()) - qWarning(dcSonos) << "Client secret not set!"; + qCWarning(dcSonos()) << "Client secret not set!"; QUrl url = QUrl(m_baseAuthorizationUrl); QUrlQuery query; @@ -1588,21 +1588,21 @@ void Sonos::getAccessTokenFromAuthorizationCode(const QByteArray &authorizationC case 400: if(!jsonDoc.toVariant().toMap().contains("error")) { if(jsonDoc.toVariant().toMap().value("error").toString() == "invalid_client") { - qWarning(dcSonos()) << "Client token provided doesn’t correspond to client that generated auth code."; + qCWarning(dcSonos()) << "Client token provided doesn’t correspond to client that generated auth code."; } if(jsonDoc.toVariant().toMap().value("error").toString() == "invalid_redirect_uri") { - qWarning(dcSonos()) << "Missing redirect_uri parameter."; + qCWarning(dcSonos()) << "Missing redirect_uri parameter."; } if(jsonDoc.toVariant().toMap().value("error").toString() == "invalid_code") { - qWarning(dcSonos()) << "Expired authorization code."; + qCWarning(dcSonos()) << "Expired authorization code."; } } return; case 401: - qWarning(dcSonos()) << "Client does not have permission to use this API."; + qCWarning(dcSonos()) << "Client does not have permission to use this API."; return; case 405: - qWarning(dcSonos()) << "Wrong HTTP method used."; + qCWarning(dcSonos()) << "Wrong HTTP method used."; return; default: break; @@ -1622,7 +1622,7 @@ void Sonos::getAccessTokenFromAuthorizationCode(const QByteArray &authorizationC int expireTime = jsonDoc.toVariant().toMap().value("expires_in").toInt(); qCDebug(dcSonos()) << "expires at" << QDateTime::currentDateTime().addSecs(expireTime).toString(); if (!m_tokenRefreshTimer) { - qWarning(dcSonos()) << "Token refresh timer not initialized"; + qCWarning(dcSonos()) << "Token refresh timer not initialized"; emit authenticationStatusChanged(false); return; } diff --git a/sonos/sonos.h b/sonos/sonos.h index 732b8d36..0f7e0407 100644 --- a/sonos/sonos.h +++ b/sonos/sonos.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -34,8 +34,7 @@ #include #include -#include "network/networkaccessmanager.h" -#include "integrations/thing.h" +#include class Sonos : public QObject { @@ -271,6 +270,24 @@ public: void getPlayerSettings(const QString &playerId); QUuid setPlayerSettings(const QString &playerId, PlayerSettingsObject settings); +signals: + void connectionChanged(bool connected); + void authenticationStatusChanged(bool authenticated); + + void householdIdsReceived(const QList &householdIds); + void favoritesReceived(const QUuid &requestId, const QString &householdId, const QList &favorites); + void playlistsReceived(const QString &householdId, const QList &playlists); + void groupsReceived(const QString &householdId, const QList &groups); + void playlistSummaryReceived(const QString &householdId, Sonos::PlaylistSummaryObject playlistSummary); + + void playBackStatusReceived(const QString &groupId, Sonos::PlayBackObject playBack); + void metadataStatusReceived(const QString &groupId, Sonos::MetadataStatus metaDataStatus); + void volumeReceived(const QString &groupId, Sonos::VolumeObject groupVolume); + + void playerVolumeReceived(const QString &playerId, Sonos::VolumeObject playerVolume); + void playerSettingsRecieved(const QString &playerId, Sonos::PlayerSettingsObject playerSettings); + void actionExecuted(const QUuid &actionId, bool success); + private: QByteArray m_baseAuthorizationUrl = "https://api.sonos.com/login/v3/oauth/access"; QByteArray m_baseControlUrl = "https://api.ws.sonos.com/control/api/v1"; @@ -283,25 +300,9 @@ private: NetworkAccessManager *m_networkManager = nullptr; QTimer *m_tokenRefreshTimer = nullptr; + private slots: void onRefreshTimeout(); -signals: - void connectionChanged(bool connected); - void authenticationStatusChanged(bool authenticated); - - void householdIdsReceived(QList householdIds); - void favoritesReceived(QUuid requestId, const QString &householdId, QList favorites); - void playlistsReceived(const QString &householdId, QList playlists); - void groupsReceived(const QString &householdId, QList groups); - void playlistSummaryReceived(const QString &householdId, PlaylistSummaryObject playlistSummary); - - void playBackStatusReceived(const QString &groupId, PlayBackObject playBack); - void metadataStatusReceived(const QString &groupId, MetadataStatus metaDataStatus); - void volumeReceived(const QString &groupId, VolumeObject groupVolume); - - void playerVolumeReceived(const QString &playerId, VolumeObject playerVolume); - void playerSettingsRecieved(const QString &playerId, PlayerSettingsObject playerSettings); - void actionExecuted(QUuid actionId, bool success); }; #endif // SONOS_H diff --git a/sonos/sonos.pro b/sonos/sonos.pro index 2be34644..7341c8ef 100644 --- a/sonos/sonos.pro +++ b/sonos/sonos.pro @@ -2,12 +2,10 @@ include(../plugins.pri) QT += network -TARGET = $$qtLibraryTarget(nymea_integrationpluginsonos) - SOURCES += \ integrationpluginsonos.cpp \ - sonos.cpp \ + sonos.cpp HEADERS += \ integrationpluginsonos.h \ - sonos.h \ + sonos.h From 40a67689a54d0470bf62a20ade4f5ed4485f4089 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 16:34:31 +0200 Subject: [PATCH 59/82] spothinta: Add Qt6 support --- spothinta/integrationpluginspothinta.cpp | 12 +++++++----- spothinta/integrationpluginspothinta.h | 7 ++++--- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/spothinta/integrationpluginspothinta.cpp b/spothinta/integrationpluginspothinta.cpp index 57014bc0..ddd95864 100644 --- a/spothinta/integrationpluginspothinta.cpp +++ b/spothinta/integrationpluginspothinta.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2022, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -29,10 +29,12 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "integrationpluginspothinta.h" -#include "integrations/thing.h" #include "plugininfo.h" -#include "hardwaremanager.h" -#include "network/networkaccessmanager.h" + +#include +#include +#include +#include #include #include @@ -154,7 +156,7 @@ void IntegrationPluginSpotHinta::processPriceData(Thing *thing, const QVariant & minPrice = price; thing->setStateValue(spothintaCurrentMarketPriceStateTypeId, price); - thing->setStateValue(spothintaValidUntilStateTypeId, endTime.toLocalTime().toTime_t()); + thing->setStateValue(spothintaValidUntilStateTypeId, endTime.toLocalTime().toSecsSinceEpoch()); thing->setStateValue(spothintaCurrentRankStateTypeId, rank); } } diff --git a/spothinta/integrationpluginspothinta.h b/spothinta/integrationpluginspothinta.h index a1f88c23..cc810674 100644 --- a/spothinta/integrationpluginspothinta.h +++ b/spothinta/integrationpluginspothinta.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2022, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,10 +31,11 @@ #ifndef INTEGRATIONPLUGINSPOTHINTA_H #define INTEGRATIONPLUGINSPOTHINTA_H -#include "integrations/integrationplugin.h" -#include "plugintimer.h" +#include #include "extern-plugininfo.h" +class PluginTimer; + class IntegrationPluginSpotHinta : public IntegrationPlugin { Q_OBJECT From 51ccbc0ca4f47bc1c4d6fbaddbec059b24680c15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 16:38:42 +0200 Subject: [PATCH 60/82] tado: Add Qt6 support --- tado/integrationplugintado.cpp | 5 +++-- tado/integrationplugintado.h | 8 ++++---- tado/tado.cpp | 30 +++++++++++++++--------------- tado/tado.pro | 4 +--- 4 files changed, 23 insertions(+), 24 deletions(-) diff --git a/tado/integrationplugintado.cpp b/tado/integrationplugintado.cpp index 9b8a7676..40ff3fd5 100644 --- a/tado/integrationplugintado.cpp +++ b/tado/integrationplugintado.cpp @@ -29,9 +29,10 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "integrationplugintado.h" -#include "integrations/thing.h" #include "plugininfo.h" -#include "network/networkaccessmanager.h" + +#include +#include #include #include diff --git a/tado/integrationplugintado.h b/tado/integrationplugintado.h index 20b13977..1c2875e3 100644 --- a/tado/integrationplugintado.h +++ b/tado/integrationplugintado.h @@ -31,16 +31,16 @@ #ifndef INTEGRATIONPLUGINTADO_H #define INTEGRATIONPLUGINTADO_H -#include "tado.h" -#include "extern-plugininfo.h" - -#include #include +#include #include #include #include +#include "extern-plugininfo.h" +#include "tado.h" + class IntegrationPluginTado : public IntegrationPlugin { Q_OBJECT diff --git a/tado/tado.cpp b/tado/tado.cpp index eb3e1511..5bec52c8 100644 --- a/tado/tado.cpp +++ b/tado/tado.cpp @@ -143,7 +143,7 @@ void Tado::getLoginUrl() QJsonParseError error; QJsonDocument responseJsonDoc = QJsonDocument::fromJson(data, &error); if (error.error != QJsonParseError::NoError) { - qDebug(dcTado()) << "Get Token: Received invalid JSON object:" << data; + qCDebug(dcTado()) << "Get Token: Received invalid JSON object:" << data; emit getLoginUrlFinished(false); return; } @@ -205,7 +205,7 @@ void Tado::getAccessToken() QJsonParseError error; QJsonDocument responseJsonDoc = QJsonDocument::fromJson(data, &error); if (error.error != QJsonParseError::NoError) { - qDebug(dcTado()) << "Get access token received invalid JSON object:" << data; + qCDebug(dcTado()) << "Get access token received invalid JSON object:" << data; emit getLoginUrlFinished(false); return; } @@ -247,7 +247,7 @@ void Tado::getHomes() request.setHeader(QNetworkRequest::KnownHeaders::ContentTypeHeader, "application/x-www-form-urlencoded"); request.setRawHeader("Authorization", "Bearer " + m_accessToken.toLocal8Bit()); QNetworkReply *reply = m_networkManager->get(request); - //qDebug(dcTado()) << "Sending request" << request.url() << request.rawHeaderList(); + //qCDebug(dcTado()) << "Sending request" << request.url() << request.rawHeaderList(); connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater); connect(reply, &QNetworkReply::finished, this, [reply, this] { @@ -271,7 +271,7 @@ void Tado::getHomes() QJsonParseError error; QJsonDocument data = QJsonDocument::fromJson(reply->readAll(), &error); if (error.error != QJsonParseError::NoError) { - qDebug(dcTado()) << "Get Homes: Recieved invalid JSON object"; + qCDebug(dcTado()) << "Get Homes: Recieved invalid JSON object"; return; } @@ -315,7 +315,7 @@ void Tado::getZones(const QString &homeId) request.setHeader(QNetworkRequest::KnownHeaders::ContentTypeHeader, "application/x-www-form-urlencoded"); request.setRawHeader("Authorization", "Bearer " + m_accessToken.toLocal8Bit()); QNetworkReply *reply = m_networkManager->get(request); - //qDebug(dcTado()) << "Sending request" << request.url() << request.rawHeaderList(); + //qCDebug(dcTado()) << "Sending request" << request.url() << request.rawHeaderList(); connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater); connect(reply, &QNetworkReply::finished, this, [reply, homeId, this] { @@ -338,7 +338,7 @@ void Tado::getZones(const QString &homeId) QJsonParseError error; QJsonDocument data = QJsonDocument::fromJson(reply->readAll(), &error); if (error.error != QJsonParseError::NoError) { - qDebug(dcTado()) << "Get Token: Recieved invalid JSON object"; + qCDebug(dcTado()) << "Get Token: Recieved invalid JSON object"; return; } QList zones; @@ -372,7 +372,7 @@ void Tado::getZoneState(const QString &homeId, const QString &zoneId) request.setHeader(QNetworkRequest::KnownHeaders::ContentTypeHeader, "application/x-www-form-urlencoded"); request.setRawHeader("Authorization", "Bearer " + m_accessToken.toLocal8Bit()); QNetworkReply *reply = m_networkManager->get(request); - //qDebug(dcTado()) << "Sending request" << request.url() << request.rawHeaderList(); + //qCDebug(dcTado()) << "Sending request" << request.url() << request.rawHeaderList(); connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater); connect(reply, &QNetworkReply::finished, this, [reply, homeId, zoneId, this] { @@ -399,7 +399,7 @@ void Tado::getZoneState(const QString &homeId, const QString &zoneId) QJsonParseError error; QJsonDocument data = QJsonDocument::fromJson(reply->readAll(), &error); if (error.error != QJsonParseError::NoError) { - qDebug(dcTado()) << "Get Token: Recieved invalid JSON object"; + qCDebug(dcTado()) << "Get Token: Recieved invalid JSON object"; return; } qCDebug(dcTado()) << "Zone status received:" << qUtf8Printable(data.toJson(QJsonDocument::Indented)); @@ -439,12 +439,12 @@ QUuid Tado::setOverlay(const QString &homeId, const QString &zoneId, bool power, { if (!m_apiAvailable) { qCWarning(dcTado()) << "Not sending request, get API credentials first"; - return ""; + return QUuid(); } if(m_accessToken.isEmpty()) { qCWarning(dcTado()) << "Not sending request, get the access token first"; - return ""; + return QUuid(); } QUuid requestId = QUuid::createUuid(); @@ -493,7 +493,7 @@ QUuid Tado::setOverlay(const QString &homeId, const QString &zoneId, bool power, QJsonParseError error; QJsonDocument data = QJsonDocument::fromJson(reply->readAll(), &error); if (error.error != QJsonParseError::NoError) { - qDebug(dcTado()) << "Get Token: Recieved invalid JSON object"; + qCDebug(dcTado()) << "Get Token: Recieved invalid JSON object"; return; } QVariantMap map = data.toVariant().toMap(); @@ -516,12 +516,12 @@ QUuid Tado::deleteOverlay(const QString &homeId, const QString &zoneId) { if (!m_apiAvailable) { qCWarning(dcTado()) << "Not sending request, get API credentials first"; - return ""; + return QUuid(); } if(m_accessToken.isEmpty()) { qCWarning(dcTado()) << "Not sending request, get the access token first"; - return ""; + return QUuid(); } QUuid requestId = QUuid::createUuid(); @@ -560,7 +560,7 @@ QUuid Tado::deleteOverlay(const QString &homeId, const QString &zoneId) QJsonParseError error; QJsonDocument data = QJsonDocument::fromJson(reply->readAll(), &error); if (error.error != QJsonParseError::NoError) { - qDebug(dcTado()) << "Get Token: Recieved invalid JSON object"; + qCDebug(dcTado()) << "Get Token: Recieved invalid JSON object"; return; } @@ -618,7 +618,7 @@ void Tado::requestAuthenticationToken() QJsonParseError error; QJsonDocument responseJsonDoc = QJsonDocument::fromJson(data, &error); if (error.error != QJsonParseError::NoError) { - qDebug(dcTado()) << "Authentication received invalid JSON object:" << data; + qCDebug(dcTado()) << "Authentication received invalid JSON object:" << data; emit startAuthenticationFinished(false); setAuthenticationStatus(false); return; diff --git a/tado/tado.pro b/tado/tado.pro index 9896fb83..3df97932 100644 --- a/tado/tado.pro +++ b/tado/tado.pro @@ -1,8 +1,6 @@ include(../plugins.pri) -QT += network - -TARGET = $$qtLibraryTarget(nymea_integrationplugintado) +QT *= network SOURCES += \ integrationplugintado.cpp \ From 5d06bdbac10997785aa9c5c79491fad4da559ffe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 16:40:54 +0200 Subject: [PATCH 61/82] tasmota: Add Qt6 support --- tasmota/integrationplugintasmota.cpp | 13 +++++++------ tasmota/integrationplugintasmota.h | 7 +++---- tasmota/tasmota.pro | 6 ++---- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/tasmota/integrationplugintasmota.cpp b/tasmota/integrationplugintasmota.cpp index a733646f..93b6de48 100644 --- a/tasmota/integrationplugintasmota.cpp +++ b/tasmota/integrationplugintasmota.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -35,11 +35,12 @@ #include #include #include +#include -#include "hardwaremanager.h" -#include "network/networkaccessmanager.h" -#include "network/mqtt/mqttprovider.h" -#include "network/mqtt/mqttchannel.h" +#include +#include +#include +#include static QHash sonoff_basicPowerStateTypeIds = { {"POWER", sonoff_basicPowerStateTypeId}, // On single channel devices, sometimes there's no index @@ -124,7 +125,7 @@ void IntegrationPluginTasmota::setupThing(ThingSetupInfo *info) //: Error setting up thing return info->finish(Thing::ThingErrorInvalidParameter, QT_TR_NOOP("The given IP address is not valid.")); } - MqttChannel *channel = hardwareManager()->mqttProvider()->createChannel(thing->id().toString().remove(QRegExp("[{}-]")), deviceAddress); + MqttChannel *channel = hardwareManager()->mqttProvider()->createChannel(thing->id().toString().remove(QRegularExpression("[{}-]")), deviceAddress); if (!channel) { qCWarning(dcTasmota) << "Failed to create MQTT channel."; //: Error setting up thing diff --git a/tasmota/integrationplugintasmota.h b/tasmota/integrationplugintasmota.h index 55aa85e8..699c1f9f 100644 --- a/tasmota/integrationplugintasmota.h +++ b/tasmota/integrationplugintasmota.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,7 +31,7 @@ #ifndef INTEGRATIONPLUGINTASMOTA_H #define INTEGRATIONPLUGINTASMOTA_H -#include "integrations/integrationplugin.h" +#include #include "extern-plugininfo.h" @@ -44,7 +44,6 @@ class IntegrationPluginTasmota: public IntegrationPlugin Q_PLUGIN_METADATA(IID "io.nymea.IntegrationPlugin" FILE "integrationplugintasmota.json") Q_INTERFACES(IntegrationPlugin) - public: explicit IntegrationPluginTasmota(); ~IntegrationPluginTasmota(); @@ -60,7 +59,7 @@ private slots: void onPublishReceived(MqttChannel *channel, const QString &topic, const QByteArray &payload); private: - QHash m_mqttChannels; + QHash m_mqttChannels; // Helpers for parent devices (the ones starting with sonoff) QHash m_ipAddressParamTypeMap; diff --git a/tasmota/tasmota.pro b/tasmota/tasmota.pro index d986a30e..328c965b 100644 --- a/tasmota/tasmota.pro +++ b/tasmota/tasmota.pro @@ -4,10 +4,8 @@ QT += network PKGCONFIG += nymea-mqtt -TARGET = $$qtLibraryTarget(nymea_integrationplugintasmota) - SOURCES += \ - integrationplugintasmota.cpp \ + integrationplugintasmota.cpp HEADERS += \ - integrationplugintasmota.h \ + integrationplugintasmota.h From 09b08550451f6e47f74a8bddfbf5e53847e38fe1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 16:46:02 +0200 Subject: [PATCH 62/82] systemmonitor: Add Qt6 support --- systemmonitor/integrationpluginsystemmonitor.cpp | 8 ++++++-- systemmonitor/integrationpluginsystemmonitor.h | 13 +++++++------ systemmonitor/systemmonitor.pro | 6 ++---- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/systemmonitor/integrationpluginsystemmonitor.cpp b/systemmonitor/integrationpluginsystemmonitor.cpp index 4b97319e..ee9048e8 100644 --- a/systemmonitor/integrationpluginsystemmonitor.cpp +++ b/systemmonitor/integrationpluginsystemmonitor.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,7 +31,11 @@ #include "integrationpluginsystemmonitor.h" #include "plugininfo.h" +#include + #include +#include + #include #include #include @@ -309,7 +313,7 @@ qint32 IntegrationPluginSystemMonitor::getPidByName(const QString &processName) continue; } QString line = statusFile.readLine().trimmed(); - line.remove(QRegExp("Name:(\\s)*")); + line.remove(QRegularExpression("Name:(\\s)*")); // qCDebug(dcSystemMonitor()) << "Found process:" << line << "looking for" << processName.left(15); // names in /proc//status are trimmed to 15 characters... if (processName.left(15) == line.left(15)) { diff --git a/systemmonitor/integrationpluginsystemmonitor.h b/systemmonitor/integrationpluginsystemmonitor.h index d0e215cb..9bf475b9 100644 --- a/systemmonitor/integrationpluginsystemmonitor.h +++ b/systemmonitor/integrationpluginsystemmonitor.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,8 +31,7 @@ #ifndef INTEGRATIONPLUGINSYSTEMMONITOR_H #define INTEGRATIONPLUGINSYSTEMMONITOR_H -#include "integrations/integrationplugin.h" -#include "plugintimer.h" +#include #include #include @@ -40,6 +39,8 @@ #include "extern-plugininfo.h" +class PluginTimer; + class IntegrationPluginSystemMonitor: public IntegrationPlugin { Q_OBJECT Q_PLUGIN_METADATA(IID "io.nymea.IntegrationPlugin" FILE "integrationpluginsystemmonitor.json") @@ -66,9 +67,9 @@ private: private: PluginTimer *m_refreshTimer = nullptr; - QHash m_oldTotalJiffies; - QHash m_oldWorkJiffies; - QHash m_oldProcessWorkJiffies; + QHash m_oldTotalJiffies; + QHash m_oldWorkJiffies; + QHash m_oldProcessWorkJiffies; }; diff --git a/systemmonitor/systemmonitor.pro b/systemmonitor/systemmonitor.pro index 675de848..afdc0491 100644 --- a/systemmonitor/systemmonitor.pro +++ b/systemmonitor/systemmonitor.pro @@ -1,9 +1,7 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(nymea_integrationpluginsystemmonitor) - SOURCES += \ - integrationpluginsystemmonitor.cpp \ + integrationpluginsystemmonitor.cpp HEADERS += \ - integrationpluginsystemmonitor.h \ + integrationpluginsystemmonitor.h From 4609b79a070dfe2ee75e412f8a882328b728a5b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 16:46:14 +0200 Subject: [PATCH 63/82] tcpcommander: Add Qt6 support --- .../integrationplugintcpcommander.cpp | 15 ++++++------ tcpcommander/integrationplugintcpcommander.h | 13 ++++++---- tcpcommander/tcpcommander.pro | 2 -- tcpcommander/tcpserver.cpp | 24 +++++++++++-------- 4 files changed, 30 insertions(+), 24 deletions(-) diff --git a/tcpcommander/integrationplugintcpcommander.cpp b/tcpcommander/integrationplugintcpcommander.cpp index a30f17dd..5317afdf 100644 --- a/tcpcommander/integrationplugintcpcommander.cpp +++ b/tcpcommander/integrationplugintcpcommander.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -30,6 +30,7 @@ #include "integrationplugintcpcommander.h" #include "plugininfo.h" +#include "tcpserver.h" #include @@ -58,14 +59,14 @@ void IntegrationPluginTcpCommander::setupThing(ThingSetupInfo *info) connect(tcpSocket, &QTcpSocket::stateChanged, thing, [=](QAbstractSocket::SocketState state){ thing->setStateValue(tcpClientConnectedStateTypeId, state == QAbstractSocket::ConnectedState); if (state == QAbstractSocket::UnconnectedState) { - QTimer::singleShot(10000, tcpSocket, [=](){ + QTimer::singleShot(10000, tcpSocket, [tcpSocket, address, port](){ qCDebug(dcTCPCommander()) << "Reconnecting to server" << address << port; tcpSocket->connectToHost(address, port); }); } }); - connect(tcpSocket, &QTcpSocket::readyRead, thing, [=](){ + connect(tcpSocket, &QTcpSocket::readyRead, thing, [this, thing, tcpSocket](){ QByteArray data = tcpSocket->readAll(); ParamList params; params << Param(tcpClientTriggeredEventDataParamTypeId, data); @@ -91,7 +92,7 @@ void IntegrationPluginTcpCommander::setupThing(ThingSetupInfo *info) if (tcpServer->isValid()) { m_tcpServers.insert(thing, tcpServer); - connect(thing, &Thing::settingChanged, tcpServer, [=](const ParamTypeId ¶mTypeId, const QVariant &value){ + connect(thing, &Thing::settingChanged, tcpServer, [tcpServer](const ParamTypeId ¶mTypeId, const QVariant &value){ if (paramTypeId == tcpServerSettingsConfirmCommandParamTypeId) { tcpServer->setConfirmCommands(value.toBool()); } @@ -106,7 +107,7 @@ void IntegrationPluginTcpCommander::setupThing(ThingSetupInfo *info) return; } else { tcpServer->deleteLater(); - qDebug(dcTCPCommander()) << "Could not open TCP Server"; + qCDebug(dcTCPCommander()) << "Could not open TCP Server"; info->finish(Thing::ThingErrorSetupFailed, QT_TR_NOOP("Error opening TCP port.")); return; } @@ -172,7 +173,7 @@ void IntegrationPluginTcpCommander::onTcpServerConnectionCountChanged(int connec TcpServer *tcpServer = static_cast(sender()); Thing *thing = m_tcpServers.key(tcpServer); if (thing && thing->thingClassId() == tcpServerThingClassId) { - qDebug(dcTCPCommander()) << thing->name() << "Tcp Server Client connected"; + qCDebug(dcTCPCommander()) << thing->name() << "Tcp Server Client connected"; thing->setStateValue(tcpServerConnectionCountStateTypeId, connections); } } @@ -181,7 +182,7 @@ void IntegrationPluginTcpCommander::onTcpServerCommandReceived(const QString &cl { TcpServer *tcpServer = static_cast(sender()); Thing *thing = m_tcpServers.key(tcpServer); - qDebug(dcTCPCommander()) << thing->name() << "Message received" << data; + qCDebug(dcTCPCommander()) << thing->name() << "Message received" << data; ParamList params; params.append(Param(tcpServerTriggeredEventDataParamTypeId, data)); diff --git a/tcpcommander/integrationplugintcpcommander.h b/tcpcommander/integrationplugintcpcommander.h index d3bae82e..26c7303e 100644 --- a/tcpcommander/integrationplugintcpcommander.h +++ b/tcpcommander/integrationplugintcpcommander.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,8 +31,11 @@ #ifndef INTEGRATIONPLUGINDEVTCPCOMMANDER_H #define INTEGRATIONPLUGINDEVTCPCOMMANDER_H -#include "integrations/integrationplugin.h" -#include "tcpserver.h" +#include + +#include + +class TcpServer; class IntegrationPluginTcpCommander : public IntegrationPlugin { @@ -51,8 +54,8 @@ public: void executeAction(ThingActionInfo *info) override; private: - QHash m_tcpSockets; - QHash m_tcpServers; + QHash m_tcpSockets; + QHash m_tcpServers; private slots: void onTcpSocketConnectionChanged(bool connected); diff --git a/tcpcommander/tcpcommander.pro b/tcpcommander/tcpcommander.pro index 3e0a4d50..71e4cf34 100644 --- a/tcpcommander/tcpcommander.pro +++ b/tcpcommander/tcpcommander.pro @@ -2,8 +2,6 @@ include(../plugins.pri) QT += network -TARGET = $$qtLibraryTarget(nymea_integrationplugintcpcommander) - SOURCES += \ integrationplugintcpcommander.cpp \ tcpserver.cpp diff --git a/tcpcommander/tcpserver.cpp b/tcpcommander/tcpserver.cpp index f735f9be..9b080378 100644 --- a/tcpcommander/tcpserver.cpp +++ b/tcpcommander/tcpserver.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -30,17 +30,17 @@ #include "tcpserver.h" #include "extern-plugininfo.h" -#include +#include TcpServer::TcpServer(const QHostAddress address, const quint16 &port, QObject *parent) : QObject(parent) { m_tcpServer = new QTcpServer(this); connect(m_tcpServer, &QTcpServer::newConnection, this, &TcpServer::newConnection); - qDebug(dcTCPCommander()) << "TCP Server on Port: " << port << "Address: " << address.toString(); + qCDebug(dcTCPCommander()) << "TCP Server on Port: " << port << "Address: " << address.toString(); if (!m_tcpServer->listen(address, port)) { - qWarning(dcTCPCommander()) << "Unable to start the server: " << m_tcpServer->errorString(); + qCWarning(dcTCPCommander()) << "Unable to start the server: " << m_tcpServer->errorString(); return; } } @@ -50,9 +50,9 @@ TcpServer::TcpServer(const quint16 &port, QObject *parent) : { m_tcpServer = new QTcpServer(this); connect(m_tcpServer, &QTcpServer::newConnection, this, &TcpServer::newConnection); - qDebug(dcTCPCommander()) << "TCP Server on Port: " << port; + qCDebug(dcTCPCommander()) << "TCP Server on Port: " << port; if (!m_tcpServer->listen(QHostAddress::Any, port)) { - qWarning(dcTCPCommander()) << "Unable to start the server: " << m_tcpServer->errorString(); + qCWarning(dcTCPCommander()) << "Unable to start the server: " << m_tcpServer->errorString(); return; } } @@ -113,7 +113,7 @@ bool TcpServer::sendCommand(const QString &clientIp, const QByteArray &data) void TcpServer::newConnection() { - qDebug(dcTCPCommander()) << "TCP Server new Connection request"; + qCDebug(dcTCPCommander()) << "TCP Server new Connection request"; QTcpSocket *socket = m_tcpServer->nextPendingConnection(); socket->flush(); @@ -121,14 +121,18 @@ void TcpServer::newConnection() emit connectionCountChanged(m_clients.count()); connect(socket, &QTcpSocket::disconnected, this, &TcpServer::onDisconnected); connect(socket, &QTcpSocket::readyRead, this, &TcpServer::readData); +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) + connect(socket, &QTcpSocket::errorOccurred, this, &TcpServer::onError); +#else // Note: error signal will be interpreted as function, not as signal in C++11 connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onError(QAbstractSocket::SocketError))); +#endif } void TcpServer::onDisconnected() { QTcpSocket *client = qobject_cast(sender()); - qDebug(dcTCPCommander()) << "TCP client disconnected"; + qCDebug(dcTCPCommander()) << "TCP client disconnected"; m_clients.removeAll(client); emit connectionCountChanged(m_clients.count()); } @@ -137,7 +141,7 @@ void TcpServer::readData() { QTcpSocket *socket = static_cast(sender()); QByteArray data = socket->readAll(); - qDebug(dcTCPCommander()) << "TCP Server data received: " << data; + qCDebug(dcTCPCommander()) << "TCP Server data received: " << data; if (m_confirmCommands) { socket->write("OK\n"); } @@ -148,5 +152,5 @@ void TcpServer::readData() void TcpServer::onError(QAbstractSocket::SocketError error) { QTcpSocket *socket = static_cast(sender()); - qWarning(dcTCPCommander()) << "Socket Error" << socket->errorString() << error; + qCWarning(dcTCPCommander()) << "Socket Error" << socket->errorString() << error; } From c04d9a5ae57d8eaa21eef304d98d7650b1a75a10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 16:47:11 +0200 Subject: [PATCH 64/82] telegram: Add Qt6 support --- telegram/integrationplugintelegram.cpp | 4 ++-- telegram/integrationplugintelegram.h | 4 ++-- telegram/telegram.pro | 4 +--- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/telegram/integrationplugintelegram.cpp b/telegram/integrationplugintelegram.cpp index c4c106d4..968a23bf 100644 --- a/telegram/integrationplugintelegram.cpp +++ b/telegram/integrationplugintelegram.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,7 +31,7 @@ #include "integrationplugintelegram.h" #include "plugininfo.h" -#include "network/networkaccessmanager.h" +#include #include diff --git a/telegram/integrationplugintelegram.h b/telegram/integrationplugintelegram.h index 1576a679..8e21ef14 100644 --- a/telegram/integrationplugintelegram.h +++ b/telegram/integrationplugintelegram.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,7 +31,7 @@ #ifndef INTEGRATIONPLUGINPUSHBULLET_H #define INTEGRATIONPLUGINPUSHBULLET_H -#include "integrations/integrationplugin.h" +#include #include "extern-plugininfo.h" class IntegrationPluginTelegram: public IntegrationPlugin diff --git a/telegram/telegram.pro b/telegram/telegram.pro index eaabe276..5f835906 100644 --- a/telegram/telegram.pro +++ b/telegram/telegram.pro @@ -1,8 +1,6 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(nymea_integrationplugintelegram) - -QT+= network +QT *= network SOURCES += \ integrationplugintelegram.cpp From d480c61cc946a1f648fc7a01f3b85ddef0eb5f88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 16:48:50 +0200 Subject: [PATCH 65/82] tempo: Add Qt6 support --- tempo/integrationplugintempo.cpp | 5 +++-- tempo/integrationplugintempo.h | 6 ++++-- tempo/tempo.cpp | 10 +++++----- tempo/tempo.pro | 4 +--- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/tempo/integrationplugintempo.cpp b/tempo/integrationplugintempo.cpp index 856c1efa..62682062 100644 --- a/tempo/integrationplugintempo.cpp +++ b/tempo/integrationplugintempo.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,7 +31,8 @@ #include "integrationplugintempo.h" #include "plugininfo.h" -#include "network/networkaccessmanager.h" +#include +#include #include #include diff --git a/tempo/integrationplugintempo.h b/tempo/integrationplugintempo.h index 17d73b22..5bfab717 100644 --- a/tempo/integrationplugintempo.h +++ b/tempo/integrationplugintempo.h @@ -31,11 +31,12 @@ #ifndef INTEGRATIONPLUGINTEMPO_H #define INTEGRATIONPLUGINTEMPO_H -#include "integrations/integrationplugin.h" -#include "plugintimer.h" +#include #include "tempo.h" +class PluginTimer; + class IntegrationPluginTempo : public IntegrationPlugin { Q_OBJECT @@ -70,5 +71,6 @@ private slots: void onAccountWorkloadReceived(const QString &accountKey, QList workloads, int limit, int offset); void onTeamWorkloadReceived(int teamId, QList workloads, int limit, int offset); + }; #endif // INTEGRATIONPLUGINTEMPO_H diff --git a/tempo/tempo.cpp b/tempo/tempo.cpp index b0f698fa..5a6c5dca 100644 --- a/tempo/tempo.cpp +++ b/tempo/tempo.cpp @@ -291,19 +291,19 @@ bool Tempo::checkStatusCode(QNetworkReply *reply, const QByteArray &rawData) case 400: //Error occurred (e.g. validation error - value is out of range) if(!jsonDoc.toVariant().toMap().contains("error")) { if(jsonDoc.toVariant().toMap().value("error").toString() == "invalid_client") { - qWarning(dcTempo()) << "Client token provided doesn’t correspond to client that generated auth code."; + qCWarning(dcTempo()) << "Client token provided doesn’t correspond to client that generated auth code."; } if(jsonDoc.toVariant().toMap().value("error").toString() == "invalid_redirect_uri") { - qWarning(dcTempo()) << "Missing redirect_uri parameter."; + qCWarning(dcTempo()) << "Missing redirect_uri parameter."; } if(jsonDoc.toVariant().toMap().value("error").toString() == "invalid_code") { - qWarning(dcTempo()) << "Expired authorization code."; + qCWarning(dcTempo()) << "Expired authorization code."; } } setAuthenticated(false); return false; case 401: - qWarning(dcTempo()) << "Client does not have permission to use this API."; + qCWarning(dcTempo()) << "Client does not have permission to use this API."; setAuthenticated(false); return false; case 403: @@ -314,7 +314,7 @@ bool Tempo::checkStatusCode(QNetworkReply *reply, const QByteArray &rawData) qCWarning(dcTempo()) << "Not Found. This resource is not available (e.g. no images on washing machine)"; return false; case 405: - qWarning(dcTempo()) << "Wrong HTTP method used."; + qCWarning(dcTempo()) << "Wrong HTTP method used."; setAuthenticated(false); return false; case 408: diff --git a/tempo/tempo.pro b/tempo/tempo.pro index f649c4e5..1a84d1c3 100644 --- a/tempo/tempo.pro +++ b/tempo/tempo.pro @@ -1,8 +1,6 @@ include(../plugins.pri) -QT += network - -TARGET = $$qtLibraryTarget(nymea_integrationplugintempo) +QT *= network SOURCES += \ integrationplugintempo.cpp \ From 952d21c0eeab109ad8cbb249973dd7b82bde86d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Tue, 19 Aug 2025 15:49:19 +0200 Subject: [PATCH 66/82] tempo: Remove uneeded and unsupported setting type --- tempo/integrationplugintempo.json | 7 ------- 1 file changed, 7 deletions(-) diff --git a/tempo/integrationplugintempo.json b/tempo/integrationplugintempo.json index 4040a3df..6285770b 100644 --- a/tempo/integrationplugintempo.json +++ b/tempo/integrationplugintempo.json @@ -42,13 +42,6 @@ "interfaces": ["connectable"], "createMethods": ["discovery"], "settingsTypes": [ - { - "id": "56c460b2-37d8-453a-b4f4-8e58be348f85", - "name": "startDate", - "displayName": "Start date", - "defaultValue": "", - "type": "QDate" - } ], "paramTypes": [ { From da460f1e8ee3ff765b3cc8044157979c51ec3320 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 16:56:22 +0200 Subject: [PATCH 67/82] texasinstruments: Add Qt6 support --- .../integrationplugintexasinstruments.cpp | 6 ++-- .../integrationplugintexasinstruments.h | 8 ++--- texasinstruments/sensordataprocessor.cpp | 26 +++++++-------- texasinstruments/sensordataprocessor.h | 11 ++----- texasinstruments/sensortag.cpp | 33 +++++++++++++++++-- texasinstruments/texasinstruments.pro | 4 +-- 6 files changed, 55 insertions(+), 33 deletions(-) diff --git a/texasinstruments/integrationplugintexasinstruments.cpp b/texasinstruments/integrationplugintexasinstruments.cpp index e4501661..7b4e8d94 100644 --- a/texasinstruments/integrationplugintexasinstruments.cpp +++ b/texasinstruments/integrationplugintexasinstruments.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -32,8 +32,8 @@ #include "plugininfo.h" #include "sensortag.h" -#include "hardware/bluetoothlowenergy/bluetoothlowenergymanager.h" -#include "plugintimer.h" +#include +#include #include diff --git a/texasinstruments/integrationplugintexasinstruments.h b/texasinstruments/integrationplugintexasinstruments.h index 446addad..c650c66a 100644 --- a/texasinstruments/integrationplugintexasinstruments.h +++ b/texasinstruments/integrationplugintexasinstruments.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -33,7 +33,7 @@ #include -#include "integrations/integrationplugin.h" +#include class SensorTag; @@ -56,9 +56,9 @@ public: void executeAction(ThingActionInfo *info) override; private: - QHash m_sensorTags; - + QHash m_sensorTags; PluginTimer *m_reconnectTimer = nullptr; + }; #endif // INTEGRATIONPLUGINTEXASINSTRUMENTS_H diff --git a/texasinstruments/sensordataprocessor.cpp b/texasinstruments/sensordataprocessor.cpp index b983f78b..d982e1f9 100644 --- a/texasinstruments/sensordataprocessor.cpp +++ b/texasinstruments/sensordataprocessor.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -36,6 +36,7 @@ #include #include #include +#include SensorDataProcessor::SensorDataProcessor(Thing *thing, QObject *parent) : QObject(parent), @@ -107,7 +108,7 @@ bool SensorDataProcessor::testBitUint8(quint8 value, int bitPosition) void SensorDataProcessor::processTemperatureData(const QByteArray &data) { - Q_ASSERT(data.count() == 4); + Q_ASSERT(data.length() == 4); quint16 rawObjectTemperature = 0; quint16 rawAmbientTemperature = 0; @@ -141,7 +142,7 @@ void SensorDataProcessor::processTemperatureData(const QByteArray &data) void SensorDataProcessor::processKeyData(const QByteArray &data) { - Q_ASSERT(data.count() == 1); + Q_ASSERT(data.length() == 1); quint8 flags = static_cast(data.at(0)); setLeftButtonPressed(testBitUint8(flags, 0)); setRightButtonPressed(testBitUint8(flags, 1)); @@ -150,7 +151,7 @@ void SensorDataProcessor::processKeyData(const QByteArray &data) void SensorDataProcessor::processHumidityData(const QByteArray &data) { - Q_ASSERT(data.count() == 4); + Q_ASSERT(data.length() == 4); quint16 rawHumidityTemperature = 0; quint16 rawHumidity = 0; @@ -171,14 +172,14 @@ void SensorDataProcessor::processHumidityData(const QByteArray &data) void SensorDataProcessor::processPressureData(const QByteArray &data) { - Q_ASSERT(data.count() == 6); + Q_ASSERT(data.length() == 6); QByteArray temperatureData(data.left(3)); - quint32 rawTemperature = static_cast(temperatureData.at(2)); - rawTemperature <<= 8; - rawTemperature |= static_cast(temperatureData.at(1)); - rawTemperature <<= 8; - rawTemperature |= static_cast(temperatureData.at(0)); + // quint32 rawTemperature = static_cast(temperatureData.at(2)); + // rawTemperature <<= 8; + // rawTemperature |= static_cast(temperatureData.at(1)); + // rawTemperature <<= 8; + // rawTemperature |= static_cast(temperatureData.at(0)); QByteArray pressureData(data.right(3)); quint32 rawPressure = static_cast(pressureData.at(2)); @@ -199,7 +200,7 @@ void SensorDataProcessor::processPressureData(const QByteArray &data) void SensorDataProcessor::processOpticalData(const QByteArray &data) { - Q_ASSERT(data.count() == 2); + Q_ASSERT(data.length() == 2); quint16 rawOptical = 0; QByteArray payload(data); @@ -329,9 +330,8 @@ void SensorDataProcessor::logSensorValue(double originalValue, double filteredVa if (!m_filterDebug || !m_logFile) return; - QString logLine = QString("%1 %2 %3\n").arg(QDateTime::currentDateTime().toTime_t()).arg(originalValue).arg(filteredValue); + QString logLine = QString("%1 %2 %3\n").arg(QDateTime::currentDateTime().toSecsSinceEpoch()).arg(originalValue).arg(filteredValue); QTextStream logStream(m_logFile); - logStream.setCodec("UTF-8"); logStream << logLine; } diff --git a/texasinstruments/sensordataprocessor.h b/texasinstruments/sensordataprocessor.h index 3ee59780..fb615556 100644 --- a/texasinstruments/sensordataprocessor.h +++ b/texasinstruments/sensordataprocessor.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -34,9 +34,9 @@ #include #include -#include "integrations/thing.h" -#include "extern-plugininfo.h" +#include +#include "extern-plugininfo.h" #include "sensorfilter.h" class SensorDataProcessor : public QObject @@ -91,11 +91,6 @@ private: void logSensorValue(double originalValue, double filteredValue); - -signals: - -private slots: - }; #endif // SENSORDATAPROCESSOR_H diff --git a/texasinstruments/sensortag.cpp b/texasinstruments/sensortag.cpp index 21386db1..bd38cab4 100644 --- a/texasinstruments/sensortag.cpp +++ b/texasinstruments/sensortag.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -30,7 +30,8 @@ #include "sensortag.h" #include "extern-plugininfo.h" -#include "math.h" + +#include #include #include @@ -588,7 +589,11 @@ void SensorTag::onTemperatureServiceStateChanged(const QLowEnergyService::Servic } // Enable notifications +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QLowEnergyDescriptor notificationDescriptor = m_temperatureDataCharacteristic.descriptor(QBluetoothUuid::DescriptorType::ClientCharacteristicConfiguration); +#else QLowEnergyDescriptor notificationDescriptor = m_temperatureDataCharacteristic.descriptor(QBluetoothUuid::ClientCharacteristicConfiguration); +#endif m_temperatureService->writeDescriptor(notificationDescriptor, QByteArray::fromHex("0100")); @@ -645,7 +650,11 @@ void SensorTag::onHumidityServiceStateChanged(const QLowEnergyService::ServiceSt } // Enable notifications +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QLowEnergyDescriptor notificationDescriptor = m_humidityDataCharacteristic.descriptor(QBluetoothUuid::DescriptorType::ClientCharacteristicConfiguration); +#else QLowEnergyDescriptor notificationDescriptor = m_humidityDataCharacteristic.descriptor(QBluetoothUuid::ClientCharacteristicConfiguration); +#endif m_humidityService->writeDescriptor(notificationDescriptor, QByteArray::fromHex("0100")); // Config characteristic @@ -701,7 +710,11 @@ void SensorTag::onPressureServiceStateChanged(const QLowEnergyService::ServiceSt } // Enable notifications +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QLowEnergyDescriptor notificationDescriptor = m_pressureDataCharacteristic.descriptor(QBluetoothUuid::DescriptorType::ClientCharacteristicConfiguration); +#else QLowEnergyDescriptor notificationDescriptor = m_pressureDataCharacteristic.descriptor(QBluetoothUuid::ClientCharacteristicConfiguration); +#endif m_pressureService->writeDescriptor(notificationDescriptor, QByteArray::fromHex("0100")); // Config characteristic @@ -757,7 +770,11 @@ void SensorTag::onOpticalServiceStateChanged(const QLowEnergyService::ServiceSta } // Enable notifications +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QLowEnergyDescriptor notificationDescriptor = m_opticalDataCharacteristic.descriptor(QBluetoothUuid::DescriptorType::ClientCharacteristicConfiguration); +#else QLowEnergyDescriptor notificationDescriptor = m_opticalDataCharacteristic.descriptor(QBluetoothUuid::ClientCharacteristicConfiguration); +#endif m_opticalService->writeDescriptor(notificationDescriptor, QByteArray::fromHex("0100")); // Config characteristic @@ -810,7 +827,11 @@ void SensorTag::onKeyServiceStateChanged(const QLowEnergyService::ServiceState & } // Enable notifications +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QLowEnergyDescriptor notificationDescriptor = m_keyDataCharacteristic.descriptor(QBluetoothUuid::DescriptorType::ClientCharacteristicConfiguration); +#else QLowEnergyDescriptor notificationDescriptor = m_keyDataCharacteristic.descriptor(QBluetoothUuid::ClientCharacteristicConfiguration); +#endif m_keyService->writeDescriptor(notificationDescriptor, QByteArray::fromHex("0100")); } @@ -844,7 +865,11 @@ void SensorTag::onMovementServiceStateChanged(const QLowEnergyService::ServiceSt } // Enable notifications +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QLowEnergyDescriptor notificationDescriptor = m_movementDataCharacteristic.descriptor(QBluetoothUuid::DescriptorType::ClientCharacteristicConfiguration); +#else QLowEnergyDescriptor notificationDescriptor = m_movementDataCharacteristic.descriptor(QBluetoothUuid::ClientCharacteristicConfiguration); +#endif m_movementService->writeDescriptor(notificationDescriptor, QByteArray::fromHex("0100")); // Config characteristic @@ -899,7 +924,11 @@ void SensorTag::onIoServiceStateChanged(const QLowEnergyService::ServiceState &s } // Enable notifications +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QLowEnergyDescriptor notificationDescriptor = m_ioDataCharacteristic.descriptor(QBluetoothUuid::DescriptorType::ClientCharacteristicConfiguration); +#else QLowEnergyDescriptor notificationDescriptor = m_ioDataCharacteristic.descriptor(QBluetoothUuid::ClientCharacteristicConfiguration); +#endif m_ioService->writeDescriptor(notificationDescriptor, QByteArray::fromHex("0100")); // Config characteristic diff --git a/texasinstruments/texasinstruments.pro b/texasinstruments/texasinstruments.pro index ccc5b59c..88132716 100644 --- a/texasinstruments/texasinstruments.pro +++ b/texasinstruments/texasinstruments.pro @@ -1,8 +1,6 @@ include(../plugins.pri) -QT += bluetooth - -TARGET = $$qtLibraryTarget(nymea_integrationplugintexasinstruments) +QT *= bluetooth HEADERS += \ integrationplugintexasinstruments.h \ From 1d629d50a67f34dcf414cdd138079c78256f253e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 8 Aug 2025 16:58:33 +0200 Subject: [PATCH 68/82] tmate: Add Qt6 support --- tmate/integrationplugintmate.cpp | 5 ++++- tmate/integrationplugintmate.h | 14 ++++++-------- tmate/tmate.pro | 4 ++-- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/tmate/integrationplugintmate.cpp b/tmate/integrationplugintmate.cpp index c7e0d006..f9acf5cf 100644 --- a/tmate/integrationplugintmate.cpp +++ b/tmate/integrationplugintmate.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2023, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,8 +31,11 @@ #include "integrationplugintmate.h" #include "plugininfo.h" +#include + #include #include +#include #include IntegrationPluginTmate::IntegrationPluginTmate() diff --git a/tmate/integrationplugintmate.h b/tmate/integrationplugintmate.h index b308445e..eaa64c32 100644 --- a/tmate/integrationplugintmate.h +++ b/tmate/integrationplugintmate.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2023, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,11 +31,11 @@ #ifndef INTEGRATIONPLUGINREMOTESSH_H #define INTEGRATIONPLUGINREMOTESSH_H -#include "plugintimer.h" -#include "integrations/integrationplugin.h" +#include #include "extern-plugininfo.h" -#include +class QProcess; +class PluginTimer; class IntegrationPluginTmate : public IntegrationPlugin { @@ -46,16 +46,14 @@ class IntegrationPluginTmate : public IntegrationPlugin public: explicit IntegrationPluginTmate(); - ~IntegrationPluginTmate(); + ~IntegrationPluginTmate() override; -// void startPairing(ThingPairingInfo *info) override; -// void confirmPairing(ThingPairingInfo *info, const QString &user, const QString &secret) override; void executeAction(ThingActionInfo *info) override; void setupThing(ThingSetupInfo *info) override; void thingRemoved(Thing *thing) override; private: - QHash m_processes; + QHash m_processes; PluginTimer *m_watchdog = nullptr; }; diff --git a/tmate/tmate.pro b/tmate/tmate.pro index b53656b6..4809fe5a 100644 --- a/tmate/tmate.pro +++ b/tmate/tmate.pro @@ -1,8 +1,8 @@ include(../plugins.pri) SOURCES += \ - integrationplugintmate.cpp \ + integrationplugintmate.cpp HEADERS += \ - integrationplugintmate.h \ + integrationplugintmate.h From d2593bb465fc1ae644d496e685d781b8e65e4a41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Mon, 11 Aug 2025 14:46:25 +0200 Subject: [PATCH 69/82] tplink: Add Qt6 support --- tplink/integrationplugintplink.cpp | 19 ++++++++++++------- tplink/integrationplugintplink.h | 21 +++++++++++---------- tplink/tplink.pro | 4 ++-- 3 files changed, 25 insertions(+), 19 deletions(-) diff --git a/tplink/integrationplugintplink.cpp b/tplink/integrationplugintplink.cpp index d391a49c..f0cabcf4 100644 --- a/tplink/integrationplugintplink.cpp +++ b/tplink/integrationplugintplink.cpp @@ -38,6 +38,7 @@ #include #include #include +#include // Related projects: @@ -138,19 +139,19 @@ void IntegrationPluginTPLink::discoverThings(ThingDiscoveryInfo *info) qCWarning(dcTplink()) << qUtf8Printable(jsonDoc.toJson(QJsonDocument::Indented)); - QRegExp modelFilter; + QRegularExpression modelFilter; if (info->thingClassId() == kasaPlug100ThingClassId) { - modelFilter = QRegExp("(HS100|HS103|HS105|KP100|KP105).*"); + modelFilter = QRegularExpression("(HS100|HS103|HS105|KP100|KP105).*"); } else if (info->thingClassId() == kasaPlug110ThingClassId) { - modelFilter = QRegExp("(HS110|KP115).*"); + modelFilter = QRegularExpression("(HS110|KP115).*"); } else if (info->thingClassId() == kasaSwitch200ThingClassId) { - modelFilter = QRegExp("HS200.*"); + modelFilter = QRegularExpression("HS200.*"); } else if (info->thingClassId() == kasaPowerStrip300ThingClassId) { - modelFilter = QRegExp("HS300.*"); + modelFilter = QRegularExpression("HS300.*"); } QString model = sysInfo.value("model").toString(); - if (modelFilter.exactMatch(model)) { + if (modelFilter.match(model).hasMatch()) { ThingDescriptor descriptor(info->thingClassId(), sysInfo.value("alias").toString(), sysInfo.value("dev_name").toString()); Param idParam = Param(idParamTypesMap.value(info->thingClassId()), sysInfo.value("deviceId").toString()); descriptor.setParams(ParamList() << idParam); @@ -363,7 +364,7 @@ void IntegrationPluginTPLink::executeAction(ThingActionInfo *info) job.data = data; job.actionInfo = info; m_jobQueue[targetThing].append(job); - connect(info, &ThingActionInfo::aborted, this, [=](){ + connect(info, &ThingActionInfo::aborted, targetThing, [this, targetThing, job](){ m_jobQueue[targetThing].removeAll(job); }); @@ -422,8 +423,12 @@ void IntegrationPluginTPLink::connectToDevice(Thing *thing, const QHostAddress & fetchState(thing); }); +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) + connect(socket, &QTcpSocket::errorOccurred, this, [](QAbstractSocket::SocketError error){ +#else typedef void (QTcpSocket:: *errorSignal)(QAbstractSocket::SocketError); connect(socket, static_cast(&QTcpSocket::error), thing, [](QAbstractSocket::SocketError error) { +#endif qCWarning(dcTplink()) << "Error in device connection:" << error; }); diff --git a/tplink/integrationplugintplink.h b/tplink/integrationplugintplink.h index 332bbe24..a81f2351 100644 --- a/tplink/integrationplugintplink.h +++ b/tplink/integrationplugintplink.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,7 +31,7 @@ #ifndef INTEGRATIONPLUGINTPLINK_H #define INTEGRATIONPLUGINTPLINK_H -#include "integrations/integrationplugin.h" +#include #include @@ -49,7 +49,7 @@ class IntegrationPluginTPLink: public IntegrationPlugin public: explicit IntegrationPluginTPLink(); - ~IntegrationPluginTPLink(); + ~IntegrationPluginTPLink() override; void init() override; void discoverThings(ThingDiscoveryInfo *info) override; @@ -73,18 +73,19 @@ private: int id = 0; QByteArray data; ThingActionInfo *actionInfo = nullptr; - bool operator==(const Job &other) { return id == other.id; } + bool operator==(const Job &other) const { return id == other.id; } }; - QHash m_pendingJobs; - QHash> m_jobQueue; - QHash m_jobTimers; + + QHash m_pendingJobs; + QHash> m_jobQueue; + QHash m_jobTimers; int m_jobIdx = 0; QUdpSocket *m_broadcastSocket = nullptr; - QHash m_sockets; - QHash m_setupRetries; + QHash m_sockets; + QHash m_setupRetries; - QHash m_inputBuffers; + QHash m_inputBuffers; PluginTimer *m_timer = nullptr; }; diff --git a/tplink/tplink.pro b/tplink/tplink.pro index a9a89cc9..1652d473 100644 --- a/tplink/tplink.pro +++ b/tplink/tplink.pro @@ -3,10 +3,10 @@ include(../plugins.pri) QT += network SOURCES += \ - integrationplugintplink.cpp \ + integrationplugintplink.cpp HEADERS += \ - integrationplugintplink.h \ + integrationplugintplink.h OTHER_FILES += \ sampledata/HS200.txt \ From e5413a89500c32d0f403b698994b855537eb33e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Mon, 11 Aug 2025 14:48:11 +0200 Subject: [PATCH 70/82] tuya: Add Qt6 support --- tuya/integrationplugintuya.cpp | 8 ++++---- tuya/integrationplugintuya.h | 8 ++++---- tuya/tuya.pro | 8 +++----- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/tuya/integrationplugintuya.cpp b/tuya/integrationplugintuya.cpp index c3dab1b4..487bb214 100644 --- a/tuya/integrationplugintuya.cpp +++ b/tuya/integrationplugintuya.cpp @@ -36,10 +36,10 @@ #include #include -#include "hardwaremanager.h" -#include "network/networkaccessmanager.h" +#include +#include -#include "plugintimer.h" +#include // API info: // Python project: https://github.com/PaulAnnekov/tuyaha @@ -547,7 +547,7 @@ void IntegrationPluginTuya::queryDevice(Thing *thing) QNetworkReply *reply = hardwareManager()->networkManager()->post(request, jsonDoc.toJson(QJsonDocument::Compact)); connect(reply, &QNetworkReply::finished, [reply](){reply->deleteLater();}); - connect(reply, &QNetworkReply::finished, thing, [this, thing, reply](){ + connect(reply, &QNetworkReply::finished, thing, [thing, reply](){ if (reply->error() != QNetworkReply::NoError) { qCWarning(dcTuya()) << "Error fetching devices from Tuya cloud" << reply->error(); return; diff --git a/tuya/integrationplugintuya.h b/tuya/integrationplugintuya.h index f2d3bbe3..a9fde2dc 100644 --- a/tuya/integrationplugintuya.h +++ b/tuya/integrationplugintuya.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -33,7 +33,7 @@ #include -#include "integrations/integrationplugin.h" +#include class PluginTimer; @@ -66,11 +66,11 @@ private: void controlTuyaSwitch(const QString &devId, const QString &command, const QVariant &value, ThingActionInfo *info); - QHash m_tokenExpiryTimers; + QHash m_tokenExpiryTimers; PluginTimer *m_pluginTimerQuery = nullptr; PluginTimer *m_pluginTimerDiscovery = nullptr; - QHash> m_pollQueue; + QHash> m_pollQueue; }; #endif // INTEGRATIONPLUGINTUYA_H diff --git a/tuya/tuya.pro b/tuya/tuya.pro index 92220a64..2dfcfcb6 100644 --- a/tuya/tuya.pro +++ b/tuya/tuya.pro @@ -1,13 +1,11 @@ include(../plugins.pri) -QT += network +QT *= network PKGCONFIG += nymea-mqtt -TARGET = $$qtLibraryTarget(nymea_integrationplugintuya) - SOURCES += \ - integrationplugintuya.cpp \ + integrationplugintuya.cpp HEADERS += \ - integrationplugintuya.h \ + integrationplugintuya.h From 5cbb2db471d3a8ba97b7ffb6ca505cd217570f21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Mon, 11 Aug 2025 14:52:09 +0200 Subject: [PATCH 71/82] udpcommander: Add Qt6 support --- udpcommander/integrationpluginudpcommander.cpp | 9 +++++---- udpcommander/integrationpluginudpcommander.h | 4 ++-- udpcommander/udpcommander.pro | 4 +--- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/udpcommander/integrationpluginudpcommander.cpp b/udpcommander/integrationpluginudpcommander.cpp index 97c09b5f..6ceb82f7 100644 --- a/udpcommander/integrationpluginudpcommander.cpp +++ b/udpcommander/integrationpluginudpcommander.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -29,9 +29,10 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "integrationpluginudpcommander.h" -#include "integrations/thing.h" #include "plugininfo.h" +#include + IntegrationPluginUdpCommander::IntegrationPluginUdpCommander() { @@ -53,7 +54,7 @@ void IntegrationPluginUdpCommander::setupThing(ThingSetupInfo *info) } qCDebug(dcUdpCommander()) << "Listening on port" << port; - connect(udpSocket, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams())); + connect(udpSocket, &QUdpSocket::readyRead, this, &IntegrationPluginUdpCommander::readPendingDatagrams); m_receiverList.insert(udpSocket, thing); return info->finish(Thing::ThingErrorNoError); @@ -76,7 +77,7 @@ void IntegrationPluginUdpCommander::executeAction(ThingActionInfo *info) int port = thing->paramValue(udpCommanderThingPortParamTypeId).toInt(); QHostAddress address = QHostAddress(thing->paramValue(udpCommanderThingAddressParamTypeId).toString()); QByteArray data = action.param(udpCommanderTriggerActionDataParamTypeId).value().toByteArray(); - qDebug(dcUdpCommander()) << "Send UDP datagram:" << data << "address:" << address.toIPv4Address() << "port:" << port; + qCDebug(dcUdpCommander()) << "Send UDP datagram:" << data << "address:" << address.toIPv4Address() << "port:" << port; udpSocket->writeDatagram(data, address, port); return info->finish(Thing::ThingErrorNoError); diff --git a/udpcommander/integrationpluginudpcommander.h b/udpcommander/integrationpluginudpcommander.h index 52b29ee5..475d5e04 100644 --- a/udpcommander/integrationpluginudpcommander.h +++ b/udpcommander/integrationpluginudpcommander.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,7 +31,7 @@ #ifndef INTEGRATIONPLUGINUDPCOMMANDER_H #define INTEGRATIONPLUGINUDPCOMMANDER_H -#include "integrations/integrationplugin.h" +#include #include #include diff --git a/udpcommander/udpcommander.pro b/udpcommander/udpcommander.pro index ab0034a4..85940b7e 100644 --- a/udpcommander/udpcommander.pro +++ b/udpcommander/udpcommander.pro @@ -1,8 +1,6 @@ include(../plugins.pri) -QT += network - -TARGET = $$qtLibraryTarget(nymea_integrationpluginudpcommander) +QT *= network SOURCES += \ integrationpluginudpcommander.cpp From 673a25ef8de5a098d48daf13fbf92a4f3adcb4f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Mon, 11 Aug 2025 14:54:30 +0200 Subject: [PATCH 72/82] unifi: Add Qt6 support --- unifi/integrationpluginunifi.cpp | 8 ++++---- unifi/integrationpluginunifi.h | 9 ++++----- unifi/unifi.pro | 6 +++--- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/unifi/integrationpluginunifi.cpp b/unifi/integrationpluginunifi.cpp index a09a1e70..d8e908c3 100644 --- a/unifi/integrationpluginunifi.cpp +++ b/unifi/integrationpluginunifi.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -144,7 +144,7 @@ void IntegrationPluginUnifi::discoverThings(ThingDiscoveryInfo *info) } else { QVariantList clients = response.value("data").toList(); foreach (const QVariant &clientVariant, clients) { -// qCDebug(dcUnifi()) << "client:" << qUtf8Printable(QJsonDocument::fromVariant(clientVariant).toJson()); + // qCDebug(dcUnifi()) << "client:" << qUtf8Printable(QJsonDocument::fromVariant(clientVariant).toJson()); QString name = clientVariant.toMap().value("name").toString(); if (name.isEmpty()) { @@ -262,7 +262,7 @@ void IntegrationPluginUnifi::setupThing(ThingSetupInfo *info) QNetworkReply *reply = hardwareManager()->networkManager()->post(request, QJsonDocument::fromVariant(login).toJson()); connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater); - connect(reply, &QNetworkReply::finished, info, [this, info, reply](){ + connect(reply, &QNetworkReply::finished, info, [info, reply](){ if (reply->error() != QNetworkReply::NoError) { qCWarning(dcUnifi()) << "SetupThing: Network request error:" << reply->error() << reply->errorString(); info->finish(Thing::ThingErrorHardwareFailure); @@ -348,7 +348,7 @@ void IntegrationPluginUnifi::postSetupThing(Thing *thing) return; } -// qCDebug(dcUnifi()) << "Client is present reply" << qUtf8Printable(jsonDoc.toJson()); + // qCDebug(dcUnifi()) << "Client is present reply" << qUtf8Printable(jsonDoc.toJson()); QVariantList clientEntries = jsonDoc.toVariant().toMap().value("data").toList(); if (clientEntries.count() != 1) { qCWarning(dcUnifi()) << "Client data not found in controller reply"; diff --git a/unifi/integrationpluginunifi.h b/unifi/integrationpluginunifi.h index b1806175..29a1d94c 100644 --- a/unifi/integrationpluginunifi.h +++ b/unifi/integrationpluginunifi.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -33,7 +33,7 @@ #include -#include "integrations/integrationplugin.h" +#include #include @@ -56,7 +56,6 @@ public: void setupThing(ThingSetupInfo *info) override; void postSetupThing(Thing *thing) override; void thingRemoved(Thing *thing) override; -// void executeAction(ThingActionInfo *info) override; private: QNetworkRequest createRequest(const QString &address, uint port, const QString &path, const QString &prefix = QString()); @@ -64,8 +63,8 @@ private: void markOffline(Thing *thing); private: - QHash m_pendingDiscoveries; - QHash m_pendingSiteDiscoveries; + QHash m_pendingDiscoveries; + QHash m_pendingSiteDiscoveries; PluginTimer *m_loginTimer = nullptr; PluginTimer *m_pollTimer = nullptr; diff --git a/unifi/unifi.pro b/unifi/unifi.pro index c0049e1d..f62934af 100644 --- a/unifi/unifi.pro +++ b/unifi/unifi.pro @@ -1,11 +1,11 @@ include(../plugins.pri) -QT += network +QT *= network HEADERS += \ - integrationpluginunifi.h \ + integrationpluginunifi.h SOURCES += \ - integrationpluginunifi.cpp \ + integrationpluginunifi.cpp From 20d2b6c8977d86a1413fea8cf491aa99de16e50f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Mon, 11 Aug 2025 14:59:10 +0200 Subject: [PATCH 73/82] usbrelay: Add Qt6 support --- usbrelay/integrationpluginusbrelay.cpp | 11 ++++++----- usbrelay/integrationpluginusbrelay.h | 9 ++++----- usbrelay/rawhiddevicewatcher.cpp | 4 +--- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/usbrelay/integrationpluginusbrelay.cpp b/usbrelay/integrationpluginusbrelay.cpp index 6f6bddc9..738227e8 100644 --- a/usbrelay/integrationpluginusbrelay.cpp +++ b/usbrelay/integrationpluginusbrelay.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -28,8 +28,9 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -#include "plugininfo.h" #include "integrationpluginusbrelay.h" +#include "plugininfo.h" +#include "usbrelay.h" #include #include @@ -132,9 +133,9 @@ void IntegrationPluginUsbRelay::discoverThings(ThingDiscoveryInfo *info) quint16 releaseNumber = static_cast(currentDevice->release_number); quint16 productId = static_cast(currentDevice->product_id); quint16 vendorId = static_cast(currentDevice->vendor_id); - int relayCount = QString(product.at(product.count() -1)).toInt(); + int relayCount = QString(product.at(product.length() -1)).toInt(); - qCDebug(dcUsbRelay()) << path << manufacturer << product << serialnumber << "Relay count" << relayCount << QString("%1:%2").arg(QString::number(vendorId, 16)).arg(QString::number(productId, 16)) << releaseNumber; + qCDebug(dcUsbRelay()) << path << manufacturer << product << serialnumber << "Relay count" << relayCount << QString("%1:%2").arg(QString::number(vendorId, 16), QString::number(productId, 16)) << releaseNumber; // Open it to get more details hid_device *hidDevice = nullptr; @@ -161,7 +162,7 @@ void IntegrationPluginUsbRelay::discoverThings(ThingDiscoveryInfo *info) hid_close(hidDevice); - ThingDescriptor descriptor(usbRelayConnectorThingClassId, "USB Relay Connector", QString("%1 (%2)").arg(product).arg(path)); + ThingDescriptor descriptor(usbRelayConnectorThingClassId, "USB Relay Connector", QString("%1 (%2)").arg(product, path)); ParamList params; params.append(Param(usbRelayConnectorThingPathParamTypeId, path)); params.append(Param(usbRelayConnectorThingRelayCountParamTypeId, relayCount)); diff --git a/usbrelay/integrationpluginusbrelay.h b/usbrelay/integrationpluginusbrelay.h index 45d0ea6b..b576f237 100644 --- a/usbrelay/integrationpluginusbrelay.h +++ b/usbrelay/integrationpluginusbrelay.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,8 +31,9 @@ #ifndef INTEGRATIONPLUGINUSBRELAY_H #define INTEGRATIONPLUGINUSBRELAY_H -#include "usbrelay.h" -#include "integrations/integrationplugin.h" +#include + +class UsbRelay; class IntegrationPluginUsbRelay: public IntegrationPlugin { @@ -41,7 +42,6 @@ class IntegrationPluginUsbRelay: public IntegrationPlugin Q_PLUGIN_METADATA(IID "io.nymea.IntegrationPlugin" FILE "integrationpluginusbrelay.json") Q_INTERFACES(IntegrationPlugin) - public: explicit IntegrationPluginUsbRelay(); @@ -59,7 +59,6 @@ private: Thing *getRelayDevice(Thing *parentDevice, int relayNumber); UsbRelay *getRelayForDevice(Thing *relayDevice); -private slots: }; diff --git a/usbrelay/rawhiddevicewatcher.cpp b/usbrelay/rawhiddevicewatcher.cpp index 67b489d6..6100b243 100644 --- a/usbrelay/rawhiddevicewatcher.cpp +++ b/usbrelay/rawhiddevicewatcher.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -81,7 +81,6 @@ RawHidDeviceWatcher::RawHidDeviceWatcher(QObject *parent) : QObject(parent) return; } - udev_enumerate_add_match_subsystem(enumerate, "hidraw"); udev_enumerate_scan_devices(enumerate); devices = udev_enumerate_get_list_entry(enumerate); @@ -96,7 +95,6 @@ RawHidDeviceWatcher::RawHidDeviceWatcher(QObject *parent) : QObject(parent) qCDebug(dcUsbRelay()) << "[+]" << devicePath; m_devicePaths.append(devicePath); - emit deviceAdded(devicePath); } udev_enumerate_unref(enumerate); From f65a66281719cfa9bb9394e60e1326fc44a1bef7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Mon, 11 Aug 2025 15:01:54 +0200 Subject: [PATCH 74/82] usbrly82: Add Qt6 support --- usbrly82/integrationpluginusbrly82.cpp | 5 +++-- usbrly82/integrationpluginusbrly82.h | 8 +++++--- usbrly82/serialportmonitor.cpp | 1 - usbrly82/usbrly82.cpp | 6 +++++- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/usbrly82/integrationpluginusbrly82.cpp b/usbrly82/integrationpluginusbrly82.cpp index cd7202e3..cb073f49 100644 --- a/usbrly82/integrationpluginusbrly82.cpp +++ b/usbrly82/integrationpluginusbrly82.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2022, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -28,8 +28,9 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -#include "plugininfo.h" #include "integrationpluginusbrly82.h" +#include "plugininfo.h" +#include "usbrly82.h" IntegrationPluginUsbRly82::IntegrationPluginUsbRly82() { diff --git a/usbrly82/integrationpluginusbrly82.h b/usbrly82/integrationpluginusbrly82.h index 811c337e..03fc9d9f 100644 --- a/usbrly82/integrationpluginusbrly82.h +++ b/usbrly82/integrationpluginusbrly82.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2022, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,9 +31,11 @@ #ifndef INTEGRATIONPLUGINUSBRLY82_H #define INTEGRATIONPLUGINUSBRLY82_H -#include "integrations/integrationplugin.h" +#include + #include "serialportmonitor.h" -#include "usbrly82.h" + +class UsbRly82; class IntegrationPluginUsbRly82: public IntegrationPlugin { diff --git a/usbrly82/serialportmonitor.cpp b/usbrly82/serialportmonitor.cpp index a69cf318..eb9d95d4 100644 --- a/usbrly82/serialportmonitor.cpp +++ b/usbrly82/serialportmonitor.cpp @@ -97,7 +97,6 @@ SerialPortMonitor::SerialPortMonitor(QObject *parent) : QObject(parent) qCDebug(dcUsbRly82()) << "SerialPortMonitor: [+]" << info; m_serialPortInfos.insert(info.systemLocation, info); - emit serialPortAdded(info); } udev_enumerate_unref(enumerate); diff --git a/usbrly82/usbrly82.cpp b/usbrly82/usbrly82.cpp index a2387e24..656d8efb 100644 --- a/usbrly82/usbrly82.cpp +++ b/usbrly82/usbrly82.cpp @@ -192,7 +192,11 @@ bool UsbRly82::connectRelay(const QString &serialPort) } connect(m_serialPort, &QSerialPort::readyRead, this, &UsbRly82::onReadyRead); +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) + connect(m_serialPort, &QSerialPort::errorOccurred, this, &UsbRly82::onError, Qt::QueuedConnection); +#else connect(m_serialPort, SIGNAL(error(QSerialPort::SerialPortError)), this, SLOT(onError(QSerialPort::SerialPortError)), Qt::QueuedConnection); +#endif // Get serial number UsbRly82Reply *reply = getSerialNumber(); @@ -450,7 +454,7 @@ void UsbRly82::updateAnalogInputs() return; } - if (m_updateAnalogInputsReply->responseData().count() != 16) { + if (m_updateAnalogInputsReply->responseData().length() != 16) { qCWarning(dcUsbRly82()) << "Reading analog inputs response returned invalid size" << m_updateAnalogInputsReply->responseData().count() << "(should be 16)"; m_updateAnalogInputsReply = nullptr; return; From 2bc88e5aa2b897c39ac3992b91c6e55fbacddbcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Thu, 14 Aug 2025 10:30:03 +0200 Subject: [PATCH 75/82] v2xeamberelectric: Add Qt6 support --- v2xeamberelectric/v2xeamberelectric.cpp | 9 ++++----- v2xeamberelectric/v2xeamberelectric.h | 8 +++----- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/v2xeamberelectric/v2xeamberelectric.cpp b/v2xeamberelectric/v2xeamberelectric.cpp index d7911c7b..ba70c9b5 100644 --- a/v2xeamberelectric/v2xeamberelectric.cpp +++ b/v2xeamberelectric/v2xeamberelectric.cpp @@ -20,8 +20,10 @@ #include "v2xeamberelectric.h" #include "plugininfo.h" -#include "hardwaremanager.h" -#include "network/networkaccessmanager.h" + +#include +#include +#include #include #include @@ -30,9 +32,6 @@ #include #include - - - const QString constSite = "01J1XBQFGX57137EH0C6AG040D"; const QString noOfDataNeed = "5"; const QString siteHttpLink = "https://api.amber.com.au/v1/sites"; diff --git a/v2xeamberelectric/v2xeamberelectric.h b/v2xeamberelectric/v2xeamberelectric.h index 6774899c..a0df30c9 100644 --- a/v2xeamberelectric/v2xeamberelectric.h +++ b/v2xeamberelectric/v2xeamberelectric.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 2025 devendragajjar * + * Copyright (C) 2025 devendragajjar * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -21,10 +21,8 @@ #ifndef INTEGRATIONPLUGINEV_CHARGER_H #define INTEGRATIONPLUGINEV_CHARGER_H -#include "integrations/integrationplugin.h" +#include #include "extern-plugininfo.h" -#include "plugintimer.h" -#include "network/networkaccessmanager.h" #include #include @@ -32,6 +30,7 @@ #include #include +class PluginTimer; class V2xeAmberElectric: public IntegrationPlugin { @@ -40,7 +39,6 @@ class V2xeAmberElectric: public IntegrationPlugin Q_PLUGIN_METADATA(IID "io.nymea.IntegrationPlugin" FILE "integrationpluginv2xeamberelectric.json") Q_INTERFACES(IntegrationPlugin) - public: explicit V2xeAmberElectric(); ~V2xeAmberElectric(); From d9e02a719c858985cf6a1e8c09c239e3d2115387 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Mon, 11 Aug 2025 15:03:32 +0200 Subject: [PATCH 76/82] wakeonlan: Add Qt6 support --- wakeonlan/integrationpluginwakeonlan.cpp | 8 ++++---- wakeonlan/integrationpluginwakeonlan.h | 5 +---- wakeonlan/wakeonlan.pro | 4 +--- 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/wakeonlan/integrationpluginwakeonlan.cpp b/wakeonlan/integrationpluginwakeonlan.cpp index deb71649..30d9da67 100644 --- a/wakeonlan/integrationpluginwakeonlan.cpp +++ b/wakeonlan/integrationpluginwakeonlan.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -29,13 +29,13 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "integrationpluginwakeonlan.h" - -#include "integrations/thing.h" #include "plugininfo.h" -#include "network/networkdevicediscovery.h" +#include +#include #include +#include #include #include diff --git a/wakeonlan/integrationpluginwakeonlan.h b/wakeonlan/integrationpluginwakeonlan.h index 8116612a..afed93db 100644 --- a/wakeonlan/integrationpluginwakeonlan.h +++ b/wakeonlan/integrationpluginwakeonlan.h @@ -31,9 +31,7 @@ #ifndef INTEGRATIONPLUGINWAKEONLAN_H #define INTEGRATIONPLUGINWAKEONLAN_H -#include "integrations/integrationplugin.h" - -#include +#include class IntegrationPluginWakeOnLan : public IntegrationPlugin { @@ -46,7 +44,6 @@ public: explicit IntegrationPluginWakeOnLan(); void discoverThings(ThingDiscoveryInfo *info) override; - void executeAction(ThingActionInfo *info) override; private slots: diff --git a/wakeonlan/wakeonlan.pro b/wakeonlan/wakeonlan.pro index 5a5106c5..06078633 100644 --- a/wakeonlan/wakeonlan.pro +++ b/wakeonlan/wakeonlan.pro @@ -1,8 +1,6 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(nymea_integrationpluginwakeonlan) - -QT += network +QT *= network SOURCES += \ integrationpluginwakeonlan.cpp From d935f0eb4087406962a7fba965e2b8643002ce04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Mon, 11 Aug 2025 15:05:15 +0200 Subject: [PATCH 77/82] wemo: Add Qt6 support --- wemo/integrationpluginwemo.cpp | 11 ++++++----- wemo/integrationpluginwemo.h | 6 +++--- wemo/wemo.pro | 4 +--- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/wemo/integrationpluginwemo.cpp b/wemo/integrationpluginwemo.cpp index 4fb39adc..1dd3e9ad 100644 --- a/wemo/integrationpluginwemo.cpp +++ b/wemo/integrationpluginwemo.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -29,11 +29,12 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "integrationpluginwemo.h" - -#include "integrations/thing.h" #include "plugininfo.h" -#include "network/networkaccessmanager.h" -#include "network/upnp/upnpdiscovery.h" + +#include +#include +#include +#include #include #include diff --git a/wemo/integrationpluginwemo.h b/wemo/integrationpluginwemo.h index ac813fef..4d9e6e6e 100644 --- a/wemo/integrationpluginwemo.h +++ b/wemo/integrationpluginwemo.h @@ -31,10 +31,10 @@ #ifndef INTEGRATIONPLUGINWEMO_H #define INTEGRATIONPLUGINWEMO_H -#include "plugintimer.h" -#include "integrations/integrationplugin.h" +#include -#include +class QNetworkReply; +class PluginTimer; class IntegrationPluginWemo : public IntegrationPlugin { diff --git a/wemo/wemo.pro b/wemo/wemo.pro index 3c2ddd9e..0b55c56d 100644 --- a/wemo/wemo.pro +++ b/wemo/wemo.pro @@ -1,8 +1,6 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(nymea_integrationpluginwemo) - -QT+= network +QT *= network SOURCES += \ integrationpluginwemo.cpp From e5b241e4fa0005caa9f3382564b9a0a645ca2b02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Mon, 11 Aug 2025 15:11:13 +0200 Subject: [PATCH 78/82] ws2812fx: Add Qt6 support --- ws2812fx/integrationpluginws2812fx.cpp | 146 +++++++++++++------------ ws2812fx/integrationpluginws2812fx.h | 6 +- ws2812fx/ws2812fx.pro | 9 +- 3 files changed, 80 insertions(+), 81 deletions(-) diff --git a/ws2812fx/integrationpluginws2812fx.cpp b/ws2812fx/integrationpluginws2812fx.cpp index 7eb50c1d..3e2b77b3 100644 --- a/ws2812fx/integrationpluginws2812fx.cpp +++ b/ws2812fx/integrationpluginws2812fx.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -44,6 +44,7 @@ \quotefile plugins/deviceplugins/ws2812fx/devicepluginws2812fx.json */ + #include #include "integrationpluginws2812fx.h" #include "plugininfo.h" @@ -77,8 +78,12 @@ void IntegrationPluginWs2812fx::setupThing(ThingSetupInfo *info) return info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Error opening serial port.")); } +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + connect(serialPort, &QSerialPort::errorOccurred, this, &IntegrationPluginWs2812fx::onSerialError); +#else connect(serialPort, SIGNAL(error(QSerialPort::SerialPortError)), this, SLOT(onSerialError(QSerialPort::SerialPortError))); - connect(serialPort, SIGNAL(readyRead()), this, SLOT(onReadyRead())); +#endif + connect(serialPort, &QSerialPort::readyRead, this, &IntegrationPluginWs2812fx::onReadyRead); qCDebug(dcWs2812fx()) << "Setup successfully serial port" << interface; thing->setStateValue(ws2812fxConnectedStateTypeId, true); @@ -139,7 +144,7 @@ void IntegrationPluginWs2812fx::executeAction(ThingActionInfo *info) if (action.actionTypeId() == ws2812fxBrightnessActionTypeId) { command.append("b "); - command.append(action.param(ws2812fxBrightnessActionBrightnessParamTypeId).value().toString()); + command.append(action.param(ws2812fxBrightnessActionBrightnessParamTypeId).value().toString().toUtf8()); command.append("\r\n"); return sendCommand(info, command, CommandType::Brightness); } @@ -147,7 +152,7 @@ void IntegrationPluginWs2812fx::executeAction(ThingActionInfo *info) if (action.actionTypeId() == ws2812fxSpeedActionTypeId) { command.append("s "); - command.append(action.param(ws2812fxSpeedActionSpeedParamTypeId).value().toString()); + command.append(action.param(ws2812fxSpeedActionSpeedParamTypeId).value().toString().toUtf8()); command.append("\r\n"); return sendCommand(info, command, CommandType::Speed); } @@ -157,7 +162,7 @@ void IntegrationPluginWs2812fx::executeAction(ThingActionInfo *info) QColor color; color= action.param(ws2812fxColorActionColorParamTypeId).value().value(); command.append("c "); - command.append(QString(color.name()).remove("#")); + command.append(QString(color.name()).remove("#").toUtf8()); command.append("\r\n"); return sendCommand(info, command, CommandType::Color); } @@ -169,7 +174,7 @@ void IntegrationPluginWs2812fx::executeAction(ThingActionInfo *info) color.setRgb(255, 255, static_cast((255.00-(((action.param(ws2812fxColorTemperatureActionColorTemperatureParamTypeId).value().toDouble()-153.00)/347.00))*255.00))); thing->setStateValue(ws2812fxColorTemperatureStateTypeId, action.param(ws2812fxColorTemperatureActionColorTemperatureParamTypeId).value()); command.append("c "); - command.append(QString(color.name()).remove("#")); + command.append(QString(color.name()).remove("#").toUtf8()); command.append("\r\n"); return sendCommand(info, command, CommandType::Color); } @@ -179,121 +184,121 @@ void IntegrationPluginWs2812fx::executeAction(ThingActionInfo *info) QString effectMode = action.param(ws2812fxEffectModeActionEffectModeParamTypeId).value().toString(); command.append("m "); if (effectMode == "Static") { - command.append(QString::number(FX_MODE_STATIC)); + command.append(QString::number(FX_MODE_STATIC).toUtf8()); } else if (effectMode == "Blink") { - command.append(QString::number(FX_MODE_BLINK)); + command.append(QString::number(FX_MODE_BLINK).toUtf8()); } else if (effectMode == "Color Wipe") { - command.append(QString::number(FX_MODE_COLOR_WIPE)); + command.append(QString::number(FX_MODE_COLOR_WIPE).toUtf8()); } else if (effectMode == "Color Wipe Inverse") { - command.append(QString::number(FX_MODE_COLOR_WIPE_INV)); + command.append(QString::number(FX_MODE_COLOR_WIPE_INV).toUtf8()); } else if (effectMode == "Color Wipe Reverse") { - command.append(QString::number(FX_MODE_COLOR_WIPE_REV)); + command.append(QString::number(FX_MODE_COLOR_WIPE_REV).toUtf8()); } else if (effectMode == "Color Wipe Reverse Inverse") { - command.append(QString::number(FX_MODE_COLOR_WIPE_REV_INV)); + command.append(QString::number(FX_MODE_COLOR_WIPE_REV_INV).toUtf8()); } else if (effectMode == "Color Wipe Random") { - command.append(QString::number(FX_MODE_COLOR_WIPE_RANDOM)); + command.append(QString::number(FX_MODE_COLOR_WIPE_RANDOM).toUtf8()); } else if (effectMode == "Random Color") { - command.append(QString::number(FX_MODE_RANDOM_COLOR)); + command.append(QString::number(FX_MODE_RANDOM_COLOR).toUtf8()); } else if (effectMode == "Single Dynamic") { - command.append(QString::number(FX_MODE_SINGLE_DYNAMIC)); + command.append(QString::number(FX_MODE_SINGLE_DYNAMIC).toUtf8()); } else if (effectMode == "Multi Dynamic") { - command.append(QString::number(FX_MODE_MULTI_DYNAMIC)); + command.append(QString::number(FX_MODE_MULTI_DYNAMIC).toUtf8()); } else if (effectMode == "Rainbow") { - command.append(QString::number(FX_MODE_RAINBOW)); + command.append(QString::number(FX_MODE_RAINBOW).toUtf8()); } else if (effectMode == "Rainbow Cycle") { - command.append(QString::number(FX_MODE_RAINBOW_CYCLE)); + command.append(QString::number(FX_MODE_RAINBOW_CYCLE).toUtf8()); } else if (effectMode == "Scan") { - command.append(QString::number(FX_MODE_SCAN)); + command.append(QString::number(FX_MODE_SCAN).toUtf8()); } else if (effectMode == "Dual Scan") { - command.append(QString::number(FX_MODE_DUAL_SCAN)); + command.append(QString::number(FX_MODE_DUAL_SCAN).toUtf8()); } else if (effectMode == "Fade") { - command.append(QString::number(FX_MODE_FADE)); + command.append(QString::number(FX_MODE_FADE).toUtf8()); } else if (effectMode == "Theater Chase") { - command.append(QString::number(FX_MODE_THEATER_CHASE)); + command.append(QString::number(FX_MODE_THEATER_CHASE).toUtf8()); } else if (effectMode == "Theater Chase Rainbow") { - command.append(QString::number(FX_MODE_THEATER_CHASE_RAINBOW)); + command.append(QString::number(FX_MODE_THEATER_CHASE_RAINBOW).toUtf8()); } else if (effectMode == "Running Lights") { - command.append(QString::number(FX_MODE_RUNNING_LIGHTS)); + command.append(QString::number(FX_MODE_RUNNING_LIGHTS).toUtf8()); } else if (effectMode == "Twinkle") { - command.append(QString::number(FX_MODE_TWINKLE)); + command.append(QString::number(FX_MODE_TWINKLE).toUtf8()); } else if (effectMode == "Twinkle Random") { - command.append(QString::number(FX_MODE_TWINKLE_RANDOM)); + command.append(QString::number(FX_MODE_TWINKLE_RANDOM).toUtf8()); } else if (effectMode == "Twinkle Fade") { - command.append(QString::number(FX_MODE_TWINKLE_FADE)); + command.append(QString::number(FX_MODE_TWINKLE_FADE).toUtf8()); } else if (effectMode == "Twinkle Fade Random") { - command.append(QString::number(FX_MODE_TWINKLE_FADE_RANDOM)); + command.append(QString::number(FX_MODE_TWINKLE_FADE_RANDOM).toUtf8()); } else if (effectMode == "Sparkle") { - command.append(QString::number(FX_MODE_SPARKLE)); + command.append(QString::number(FX_MODE_SPARKLE).toUtf8()); } else if (effectMode == "Flash Sparkle") { - command.append(QString::number(FX_MODE_FLASH_SPARKLE)); + command.append(QString::number(FX_MODE_FLASH_SPARKLE).toUtf8()); } else if (effectMode == "Hyper Sparkle") { - command.append(QString::number(FX_MODE_HYPER_SPARKLE)); + command.append(QString::number(FX_MODE_HYPER_SPARKLE).toUtf8()); } else if (effectMode == "Strobe") { - command.append(QString::number(FX_MODE_STROBE)); + command.append(QString::number(FX_MODE_STROBE).toUtf8()); } else if (effectMode == "Strobe Rainbow") { - command.append(QString::number(FX_MODE_STROBE_RAINBOW)); + command.append(QString::number(FX_MODE_STROBE_RAINBOW).toUtf8()); } else if (effectMode == "Multi Strobe") { - command.append(QString::number(FX_MODE_MULTI_STROBE)); + command.append(QString::number(FX_MODE_MULTI_STROBE).toUtf8()); } else if (effectMode == "Blink Rainbow") { - command.append(QString::number(FX_MODE_BLINK_RAINBOW)); + command.append(QString::number(FX_MODE_BLINK_RAINBOW).toUtf8()); } else if (effectMode == "Chase White") { - command.append(QString::number(FX_MODE_CHASE_WHITE)); + command.append(QString::number(FX_MODE_CHASE_WHITE).toUtf8()); } else if (effectMode == "Chase Color") { - command.append(QString::number(FX_MODE_CHASE_COLOR)); + command.append(QString::number(FX_MODE_CHASE_COLOR).toUtf8()); } else if (effectMode == "Chase Random") { - command.append(QString::number(FX_MODE_CHASE_RANDOM)); + command.append(QString::number(FX_MODE_CHASE_RANDOM).toUtf8()); } else if (effectMode == "Chase Flash") { - command.append(QString::number(FX_MODE_CHASE_FLASH)); + command.append(QString::number(FX_MODE_CHASE_FLASH).toUtf8()); } else if (effectMode == "Chase Flash Random") { - command.append(QString::number(FX_MODE_CHASE_FLASH_RANDOM)); + command.append(QString::number(FX_MODE_CHASE_FLASH_RANDOM).toUtf8()); } else if (effectMode == "Chase Rainbow White") { - command.append(QString::number(FX_MODE_CHASE_RAINBOW_WHITE)); + command.append(QString::number(FX_MODE_CHASE_RAINBOW_WHITE).toUtf8()); } else if (effectMode == "Chase Blackout") { - command.append(QString::number(FX_MODE_CHASE_BLACKOUT)); + command.append(QString::number(FX_MODE_CHASE_BLACKOUT).toUtf8()); } else if (effectMode == "Chase Blackout Rainbow") { - command.append(QString::number(FX_MODE_CHASE_BLACKOUT_RAINBOW)); + command.append(QString::number(FX_MODE_CHASE_BLACKOUT_RAINBOW).toUtf8()); } else if (effectMode == "Color Sweep Random") { - command.append(QString::number(FX_MODE_COLOR_SWEEP_RANDOM)); + command.append(QString::number(FX_MODE_COLOR_SWEEP_RANDOM).toUtf8()); } else if (effectMode == "Running Color") { - command.append(QString::number(FX_MODE_RUNNING_COLOR)); + command.append(QString::number(FX_MODE_RUNNING_COLOR).toUtf8()); } else if (effectMode == "Running Red Blue") { - command.append(QString::number(FX_MODE_RUNNING_RED_BLUE)); + command.append(QString::number(FX_MODE_RUNNING_RED_BLUE).toUtf8()); } else if (effectMode == "Running Random") { - command.append(QString::number(FX_MODE_RUNNING_RANDOM)); + command.append(QString::number(FX_MODE_RUNNING_RANDOM).toUtf8()); }else if (effectMode == "Larson Scanner") { - command.append(QString::number(FX_MODE_LARSON_SCANNER)); + command.append(QString::number(FX_MODE_LARSON_SCANNER).toUtf8()); }else if (effectMode == "Comet") { - command.append(QString::number(FX_MODE_COMET)); + command.append(QString::number(FX_MODE_COMET).toUtf8()); }else if (effectMode == "Fireworks") { - command.append(QString::number(FX_MODE_FIREWORKS)); + command.append(QString::number(FX_MODE_FIREWORKS).toUtf8()); }else if (effectMode == "Fireworks Random") { - command.append(QString::number(FX_MODE_FIREWORKS_RANDOM)); + command.append(QString::number(FX_MODE_FIREWORKS_RANDOM).toUtf8()); }else if (effectMode == "Merry Christmas") { - command.append(QString::number(FX_MODE_MERRY_CHRISTMAS)); + command.append(QString::number(FX_MODE_MERRY_CHRISTMAS).toUtf8()); }else if (effectMode == "Fire Flicker") { - command.append(QString::number(FX_MODE_FIRE_FLICKER)); + command.append(QString::number(FX_MODE_FIRE_FLICKER).toUtf8()); }else if (effectMode == "Fire Flicker (soft)") { - command.append(QString::number(FX_MODE_FIRE_FLICKER_SOFT)); + command.append(QString::number(FX_MODE_FIRE_FLICKER_SOFT).toUtf8()); }else if (effectMode == "Fire Flicker (intense)") { - command.append(QString::number(FX_MODE_FIRE_FLICKER_INTENSE)); + command.append(QString::number(FX_MODE_FIRE_FLICKER_INTENSE).toUtf8()); }else if (effectMode == "Circus Combustus") { - command.append(QString::number(FX_MODE_CIRCUS_COMBUSTUS)); + command.append(QString::number(FX_MODE_CIRCUS_COMBUSTUS).toUtf8()); }else if (effectMode == "Halloween") { - command.append(QString::number(FX_MODE_HALLOWEEN)); + command.append(QString::number(FX_MODE_HALLOWEEN).toUtf8()); }else if (effectMode == "Bicolor Chase") { - command.append(QString::number(FX_MODE_BICOLOR_CHASE)); + command.append(QString::number(FX_MODE_BICOLOR_CHASE).toUtf8()); }else if (effectMode == "Tricolor Chase") { - command.append(QString::number(FX_MODE_TRICOLOR_CHASE)); + command.append(QString::number(FX_MODE_TRICOLOR_CHASE).toUtf8()); }else if (effectMode == "ICU") { - command.append(QString::number(FX_MODE_ICU)); + command.append(QString::number(FX_MODE_ICU).toUtf8()); }else if (effectMode == "Custom 0") { - command.append(QString::number(FX_MODE_CUSTOM_0)); + command.append(QString::number(FX_MODE_CUSTOM_0).toUtf8()); }else if (effectMode == "Custom 1") { - command.append(QString::number(FX_MODE_CUSTOM_1)); + command.append(QString::number(FX_MODE_CUSTOM_1).toUtf8()); }else if (effectMode == "Custom 2") { - command.append(QString::number(FX_MODE_CUSTOM_2)); + command.append(QString::number(FX_MODE_CUSTOM_2).toUtf8()); }else if (effectMode == "Custom 3") { - command.append(QString::number(FX_MODE_CUSTOM_3)); + command.append(QString::number(FX_MODE_CUSTOM_3).toUtf8()); } command.append("\r\n"); return sendCommand(info, command, CommandType::Mode); @@ -326,7 +331,7 @@ void IntegrationPluginWs2812fx::onReadyRead() QByteArray data; while (serialPort->canReadLine()) { data = serialPort->readLine(); - qDebug(dcWs2812fx()) << "Message received" << data; + qCDebug(dcWs2812fx()) << "Message received" << data; if (data.contains("mode")) { if (m_pendingActions.contains(CommandType::Mode)) { @@ -335,7 +340,7 @@ void IntegrationPluginWs2812fx::onReadyRead() QString mode = data.split('-').at(1); mode.remove(0, 1); mode.remove("\r\n"); - qDebug(dcWs2812fx()) << "set mode to:" << mode; + qCDebug(dcWs2812fx()) << "set mode to:" << mode; thing->setStateValue(ws2812fxEffectModeStateTypeId, mode); } if (data.contains("brightness")) { @@ -347,7 +352,7 @@ void IntegrationPluginWs2812fx::onReadyRead() rawBrightness.remove("\r\n"); int brightness = rawBrightness.toInt(); - qDebug(dcWs2812fx()) << "set brightness to:" << brightness; + qCDebug(dcWs2812fx()) << "set brightness to:" << brightness; thing->setStateValue(ws2812fxBrightnessStateTypeId, brightness); if (brightness == 0) { thing->setStateValue(ws2812fxPowerStateTypeId, false); @@ -364,7 +369,7 @@ void IntegrationPluginWs2812fx::onReadyRead() rawSpeed.remove("\r\n"); int speed = data.split(':').at(1).toInt(); - qDebug(dcWs2812fx()) << "set speed to:" << speed; + qCDebug(dcWs2812fx()) << "set speed to:" << speed; thing->setStateValue(ws2812fxSpeedStateTypeId, speed); } if (data.contains("color")) { @@ -376,7 +381,7 @@ void IntegrationPluginWs2812fx::onReadyRead() rawColor.remove("0x"); rawColor.remove("\r\n"); rawColor.prepend("#"); - qDebug(dcWs2812fx()) << "set color to:" << rawColor; + qCDebug(dcWs2812fx()) << "set color to:" << rawColor; thing->setStateValue(ws2812fxColorStateTypeId, rawColor); } } @@ -397,7 +402,6 @@ void IntegrationPluginWs2812fx::onReconnectTimer() } } } - } void IntegrationPluginWs2812fx::onSerialError(QSerialPort::SerialPortError error) @@ -415,7 +419,7 @@ void IntegrationPluginWs2812fx::onSerialError(QSerialPort::SerialPortError error void IntegrationPluginWs2812fx::sendCommand(ThingActionInfo *info, const QByteArray &command, CommandType commandType) { - qDebug(dcWs2812fx()) << "Sending command" << command; + qCDebug(dcWs2812fx()) << "Sending command" << command; QSerialPort *serialPort = m_serialPorts.value(info->thing()); if (!serialPort) return info->finish(Thing::ThingErrorThingNotFound); diff --git a/ws2812fx/integrationpluginws2812fx.h b/ws2812fx/integrationpluginws2812fx.h index 28beb970..d89d0d3a 100644 --- a/ws2812fx/integrationpluginws2812fx.h +++ b/ws2812fx/integrationpluginws2812fx.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -93,7 +93,7 @@ #define FX_MODE_CUSTOM_2 58 #define FX_MODE_CUSTOM_3 59 -#include "integrations/integrationplugin.h" +#include #include #include @@ -134,8 +134,6 @@ private slots: void onReconnectTimer(); void onSerialError(QSerialPort::SerialPortError error); -signals: - }; #endif // INTEGRATIONPLUGINWS2812FX_H diff --git a/ws2812fx/ws2812fx.pro b/ws2812fx/ws2812fx.pro index 56e63728..2f7b65da 100644 --- a/ws2812fx/ws2812fx.pro +++ b/ws2812fx/ws2812fx.pro @@ -1,12 +1,9 @@ include(../plugins.pri) -QT += serialport - -TARGET = $$qtLibraryTarget(nymea_integrationpluginws2812fx) +QT *= serialport SOURCES += \ - integrationpluginws2812fx.cpp \ - + integrationpluginws2812fx.cpp HEADERS += \ - integrationpluginws2812fx.h \ + integrationpluginws2812fx.h From 8107bd9e9a7b1a6d6debf68a88563301e75e6ed9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Mon, 11 Aug 2025 16:10:03 +0200 Subject: [PATCH 79/82] Disable python plugins for Qt 6 --- nymea-plugins.pro | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/nymea-plugins.pro b/nymea-plugins.pro index 7bf5ab85..01b19cd3 100644 --- a/nymea-plugins.pro +++ b/nymea-plugins.pro @@ -84,16 +84,21 @@ PLUGIN_DIRS = \ ws2812fx \ -# bimmerconnected \ -# dht \ -# fastcom \ -# mcp3008 \ -# neatobotvac \ -# sunposition \ - message(============================================) message("Qt version:" $$[QT_VERSION]) +!greaterThan(QT_MAJOR_VERSION, 5) { + PLUGIN_DIRS += \ + bimmerconnected \ + dht \ + fastcom \ + mcp3008 \ + neatobotvac \ + sunposition \ +} else { + message("Python plugin disabled for Qt 6") +} + plugininfo.depends = FORCE for (entry, PLUGIN_DIRS):plugininfo.commands += test -d $${entry} || mkdir -p $${entry}; cd $${entry} && qmake -o Makefile $$PWD/$${entry}/$${entry}.pro && cd ..; for (entry, PLUGIN_DIRS):plugininfo.commands += make -C $${entry} plugininfo.h; From 855340193c95f5cc75c7a97cfaec21f79fcf29b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Wed, 13 Aug 2025 14:24:41 +0200 Subject: [PATCH 80/82] Add Qt6 debian packaging --- debian | 1 + {debian => debian-qt5}/changelog | 0 {debian => debian-qt5}/compat | 0 {debian => debian-qt5}/control | 0 {debian => debian-qt5}/copyright | 0 .../nymea-plugin-anel.install.in | 0 .../nymea-plugin-aqi.install.in | 0 .../nymea-plugin-avahimonitor.install.in | 0 .../nymea-plugin-awattar.install.in | 0 .../nymea-plugin-bimmerconnected.install.in | 0 .../nymea-plugin-bluos.install.in | 0 .../nymea-plugin-bose.install.in | 0 .../nymea-plugin-bosswerk.install.in | 0 .../nymea-plugin-coinmarketcap.install.in | 0 .../nymea-plugin-commandlauncher.install.in | 0 .../nymea-plugin-daikinairco.install.in | 0 .../nymea-plugin-datetime.install.in | 0 .../nymea-plugin-daylightsensor.install.in | 0 .../nymea-plugin-denon.install.in | 0 .../nymea-plugin-dht.install.in | 0 .../nymea-plugin-doorbird.install.in | 0 .../nymea-plugin-dweetio.install.in | 0 .../nymea-plugin-dynatrace.install.in | 0 .../nymea-plugin-easee.install.in | 0 .../nymea-plugin-elgato.install.in | 0 .../nymea-plugin-eq-3.install.in | 0 .../nymea-plugin-espsomfyrts.install.in | 0 .../nymea-plugin-espuino.install.in | 0 .../nymea-plugin-evbox.install.in | 0 .../nymea-plugin-everest.install.in | 0 .../nymea-plugin-fastcom.install.in | 0 .../nymea-plugin-flowercare.install.in | 0 .../nymea-plugin-fronius.install.in | 0 .../nymea-plugin-garadget.install.in | 0 .../nymea-plugin-goecharger.install.in | 0 .../nymea-plugin-gpio.install.in | 0 .../nymea-plugin-homeconnect.install.in | 0 .../nymea-plugin-httpcommander.install.in | 0 .../nymea-plugin-i2cdevices.install.in | 0 .../nymea-plugin-keba.install.in | 0 .../nymea-plugin-kodi.install.in | 0 .../nymea-plugin-lgsmarttv.install.in | 0 .../nymea-plugin-lifx.install.in | 0 .../nymea-plugin-logilink.install.in | 0 .../nymea-plugin-mailnotification.install.in | 0 .../nymea-plugin-mcp3008.install.in | 0 .../nymea-plugin-mecelectronics.install.in | 0 .../nymea-plugin-meross.install.in | 0 .../nymea-plugin-mqttclient.install.in | 0 .../nymea-plugin-mystrom.install.in | 0 .../nymea-plugin-nanoleaf.install.in | 0 .../nymea-plugin-neatobotvac.install.in | 0 .../nymea-plugin-netatmo.install.in | 0 .../nymea-plugin-networkdetector.install.in | 0 .../nymea-plugin-notifyevents.install.in | 0 .../nymea-plugin-nuki.install.in | 0 .../nymea-plugin-onewire.install.in | 0 .../nymea-plugin-openuv.install.in | 0 .../nymea-plugin-openweathermap.install.in | 0 .../nymea-plugin-osdomotics.install.in | 0 .../nymea-plugin-philipshue.install.in | 0 .../nymea-plugin-powerfox.install.in | 0 .../nymea-plugin-pushbullet.install.in | 0 .../nymea-plugin-pushnotifications.install.in | 0 .../nymea-plugin-reversessh.install.in | 0 .../nymea-plugin-senic.install.in | 0 ...ymea-plugin-serialportcommander.install.in | 0 .../nymea-plugin-sgready.install.in | 0 .../nymea-plugin-shelly.install.in | 0 .../nymea-plugin-simpleheatpump.install.in | 0 .../nymea-plugin-solarlog.install.in | 0 .../nymea-plugin-somfytahoma.install.in | 0 .../nymea-plugin-sonos.install.in | 0 .../nymea-plugin-spothinta.install.in | 0 .../nymea-plugin-sunposition.install.in | 0 .../nymea-plugin-systemmonitor.install.in | 0 .../nymea-plugin-tado.install.in | 0 .../nymea-plugin-tasmota.install.in | 0 .../nymea-plugin-tcpcommander.install.in | 0 .../nymea-plugin-telegram.install.in | 0 .../nymea-plugin-tempo.install.in | 0 .../nymea-plugin-texasinstruments.install.in | 0 .../nymea-plugin-tmate.install.in | 0 .../nymea-plugin-tplink.install.in | 0 .../nymea-plugin-tuya.install.in | 0 .../nymea-plugin-udpcommander.install.in | 0 .../nymea-plugin-unifi.install.in | 0 .../nymea-plugin-usbrelay.install.in | 0 .../nymea-plugin-usbrly82.install.in | 0 .../nymea-plugin-v2xeamberelectric.install.in | 0 .../nymea-plugin-wakeonlan.install.in | 0 .../nymea-plugin-wemo.install.in | 0 .../nymea-plugin-wheretheissat.install.in | 0 .../nymea-plugin-ws2812fx.install.in | 0 .../nymea-plugin-yamahaavr.install.in | 0 .../nymea-plugins-translations.dirs | 0 {debian => debian-qt5}/rules | 0 {debian => debian-qt5}/source/format | 0 debian-qt6/changelog | 1 + debian-qt6/compat | 1 + debian-qt6/control | 820 ++++++++++++++++++ debian-qt6/copyright | 1 + debian-qt6/nymea-plugin-anel.install.in | 1 + debian-qt6/nymea-plugin-aqi.install.in | 1 + .../nymea-plugin-avahimonitor.install.in | 1 + debian-qt6/nymea-plugin-awattar.install.in | 1 + debian-qt6/nymea-plugin-bluos.install.in | 1 + debian-qt6/nymea-plugin-bose.install.in | 1 + debian-qt6/nymea-plugin-bosswerk.install.in | 1 + .../nymea-plugin-coinmarketcap.install.in | 1 + .../nymea-plugin-commandlauncher.install.in | 1 + .../nymea-plugin-daikinairco.install.in | 1 + debian-qt6/nymea-plugin-datetime.install.in | 1 + .../nymea-plugin-daylightsensor.install.in | 1 + debian-qt6/nymea-plugin-denon.install.in | 1 + debian-qt6/nymea-plugin-doorbird.install.in | 1 + debian-qt6/nymea-plugin-dweetio.install.in | 1 + debian-qt6/nymea-plugin-dynatrace.install.in | 1 + debian-qt6/nymea-plugin-easee.install.in | 1 + debian-qt6/nymea-plugin-elgato.install.in | 1 + debian-qt6/nymea-plugin-eq-3.install.in | 1 + .../nymea-plugin-espsomfyrts.install.in | 1 + debian-qt6/nymea-plugin-espuino.install.in | 1 + debian-qt6/nymea-plugin-evbox.install.in | 1 + debian-qt6/nymea-plugin-everest.install.in | 1 + debian-qt6/nymea-plugin-flowercare.install.in | 1 + debian-qt6/nymea-plugin-fronius.install.in | 1 + debian-qt6/nymea-plugin-garadget.install.in | 1 + debian-qt6/nymea-plugin-goecharger.install.in | 1 + debian-qt6/nymea-plugin-gpio.install.in | 1 + .../nymea-plugin-homeconnect.install.in | 1 + .../nymea-plugin-httpcommander.install.in | 1 + debian-qt6/nymea-plugin-i2cdevices.install.in | 1 + debian-qt6/nymea-plugin-keba.install.in | 1 + debian-qt6/nymea-plugin-kodi.install.in | 1 + debian-qt6/nymea-plugin-lgsmarttv.install.in | 1 + debian-qt6/nymea-plugin-lifx.install.in | 1 + debian-qt6/nymea-plugin-logilink.install.in | 1 + .../nymea-plugin-mailnotification.install.in | 1 + .../nymea-plugin-mecelectronics.install.in | 1 + debian-qt6/nymea-plugin-meross.install.in | 1 + debian-qt6/nymea-plugin-mqttclient.install.in | 1 + debian-qt6/nymea-plugin-mystrom.install.in | 1 + debian-qt6/nymea-plugin-nanoleaf.install.in | 1 + debian-qt6/nymea-plugin-netatmo.install.in | 1 + .../nymea-plugin-networkdetector.install.in | 1 + .../nymea-plugin-notifyevents.install.in | 1 + debian-qt6/nymea-plugin-nuki.install.in | 1 + debian-qt6/nymea-plugin-onewire.install.in | 1 + debian-qt6/nymea-plugin-openuv.install.in | 1 + .../nymea-plugin-openweathermap.install.in | 1 + debian-qt6/nymea-plugin-osdomotics.install.in | 1 + debian-qt6/nymea-plugin-philipshue.install.in | 1 + debian-qt6/nymea-plugin-powerfox.install.in | 1 + debian-qt6/nymea-plugin-pushbullet.install.in | 1 + .../nymea-plugin-pushnotifications.install.in | 1 + debian-qt6/nymea-plugin-reversessh.install.in | 1 + debian-qt6/nymea-plugin-senic.install.in | 1 + ...ymea-plugin-serialportcommander.install.in | 1 + debian-qt6/nymea-plugin-sgready.install.in | 1 + debian-qt6/nymea-plugin-shelly.install.in | 1 + .../nymea-plugin-simpleheatpump.install.in | 1 + debian-qt6/nymea-plugin-solarlog.install.in | 1 + .../nymea-plugin-somfytahoma.install.in | 1 + debian-qt6/nymea-plugin-sonos.install.in | 1 + debian-qt6/nymea-plugin-spothinta.install.in | 1 + .../nymea-plugin-systemmonitor.install.in | 1 + debian-qt6/nymea-plugin-tado.install.in | 1 + debian-qt6/nymea-plugin-tasmota.install.in | 1 + .../nymea-plugin-tcpcommander.install.in | 1 + debian-qt6/nymea-plugin-telegram.install.in | 1 + debian-qt6/nymea-plugin-tempo.install.in | 1 + .../nymea-plugin-texasinstruments.install.in | 1 + debian-qt6/nymea-plugin-tmate.install.in | 1 + debian-qt6/nymea-plugin-tplink.install.in | 1 + debian-qt6/nymea-plugin-tuya.install.in | 1 + .../nymea-plugin-udpcommander.install.in | 1 + debian-qt6/nymea-plugin-unifi.install.in | 1 + debian-qt6/nymea-plugin-usbrelay.install.in | 1 + debian-qt6/nymea-plugin-usbrly82.install.in | 1 + .../nymea-plugin-v2xeamberelectric.install.in | 1 + debian-qt6/nymea-plugin-wakeonlan.install.in | 1 + debian-qt6/nymea-plugin-wemo.install.in | 1 + .../nymea-plugin-wheretheissat.install.in | 1 + debian-qt6/nymea-plugin-ws2812fx.install.in | 1 + debian-qt6/nymea-plugins-translations.dirs | 1 + debian-qt6/rules | 29 + debian-qt6/source | 1 + 188 files changed, 938 insertions(+) create mode 120000 debian rename {debian => debian-qt5}/changelog (100%) rename {debian => debian-qt5}/compat (100%) rename {debian => debian-qt5}/control (100%) rename {debian => debian-qt5}/copyright (100%) rename {debian => debian-qt5}/nymea-plugin-anel.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-aqi.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-avahimonitor.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-awattar.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-bimmerconnected.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-bluos.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-bose.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-bosswerk.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-coinmarketcap.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-commandlauncher.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-daikinairco.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-datetime.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-daylightsensor.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-denon.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-dht.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-doorbird.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-dweetio.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-dynatrace.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-easee.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-elgato.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-eq-3.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-espsomfyrts.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-espuino.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-evbox.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-everest.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-fastcom.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-flowercare.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-fronius.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-garadget.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-goecharger.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-gpio.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-homeconnect.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-httpcommander.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-i2cdevices.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-keba.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-kodi.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-lgsmarttv.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-lifx.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-logilink.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-mailnotification.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-mcp3008.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-mecelectronics.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-meross.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-mqttclient.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-mystrom.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-nanoleaf.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-neatobotvac.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-netatmo.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-networkdetector.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-notifyevents.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-nuki.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-onewire.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-openuv.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-openweathermap.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-osdomotics.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-philipshue.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-powerfox.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-pushbullet.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-pushnotifications.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-reversessh.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-senic.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-serialportcommander.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-sgready.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-shelly.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-simpleheatpump.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-solarlog.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-somfytahoma.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-sonos.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-spothinta.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-sunposition.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-systemmonitor.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-tado.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-tasmota.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-tcpcommander.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-telegram.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-tempo.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-texasinstruments.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-tmate.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-tplink.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-tuya.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-udpcommander.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-unifi.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-usbrelay.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-usbrly82.install.in (100%) rename debian/nymea-plugin-v2xeambereletric.install.in => debian-qt5/nymea-plugin-v2xeamberelectric.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-wakeonlan.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-wemo.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-wheretheissat.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-ws2812fx.install.in (100%) rename {debian => debian-qt5}/nymea-plugin-yamahaavr.install.in (100%) rename {debian => debian-qt5}/nymea-plugins-translations.dirs (100%) rename {debian => debian-qt5}/rules (100%) rename {debian => debian-qt5}/source/format (100%) create mode 120000 debian-qt6/changelog create mode 100644 debian-qt6/compat create mode 100644 debian-qt6/control create mode 120000 debian-qt6/copyright create mode 120000 debian-qt6/nymea-plugin-anel.install.in create mode 120000 debian-qt6/nymea-plugin-aqi.install.in create mode 120000 debian-qt6/nymea-plugin-avahimonitor.install.in create mode 120000 debian-qt6/nymea-plugin-awattar.install.in create mode 120000 debian-qt6/nymea-plugin-bluos.install.in create mode 120000 debian-qt6/nymea-plugin-bose.install.in create mode 120000 debian-qt6/nymea-plugin-bosswerk.install.in create mode 120000 debian-qt6/nymea-plugin-coinmarketcap.install.in create mode 120000 debian-qt6/nymea-plugin-commandlauncher.install.in create mode 120000 debian-qt6/nymea-plugin-daikinairco.install.in create mode 120000 debian-qt6/nymea-plugin-datetime.install.in create mode 120000 debian-qt6/nymea-plugin-daylightsensor.install.in create mode 120000 debian-qt6/nymea-plugin-denon.install.in create mode 120000 debian-qt6/nymea-plugin-doorbird.install.in create mode 120000 debian-qt6/nymea-plugin-dweetio.install.in create mode 120000 debian-qt6/nymea-plugin-dynatrace.install.in create mode 120000 debian-qt6/nymea-plugin-easee.install.in create mode 120000 debian-qt6/nymea-plugin-elgato.install.in create mode 120000 debian-qt6/nymea-plugin-eq-3.install.in create mode 120000 debian-qt6/nymea-plugin-espsomfyrts.install.in create mode 120000 debian-qt6/nymea-plugin-espuino.install.in create mode 120000 debian-qt6/nymea-plugin-evbox.install.in create mode 120000 debian-qt6/nymea-plugin-everest.install.in create mode 120000 debian-qt6/nymea-plugin-flowercare.install.in create mode 120000 debian-qt6/nymea-plugin-fronius.install.in create mode 120000 debian-qt6/nymea-plugin-garadget.install.in create mode 120000 debian-qt6/nymea-plugin-goecharger.install.in create mode 120000 debian-qt6/nymea-plugin-gpio.install.in create mode 120000 debian-qt6/nymea-plugin-homeconnect.install.in create mode 120000 debian-qt6/nymea-plugin-httpcommander.install.in create mode 120000 debian-qt6/nymea-plugin-i2cdevices.install.in create mode 120000 debian-qt6/nymea-plugin-keba.install.in create mode 120000 debian-qt6/nymea-plugin-kodi.install.in create mode 120000 debian-qt6/nymea-plugin-lgsmarttv.install.in create mode 120000 debian-qt6/nymea-plugin-lifx.install.in create mode 120000 debian-qt6/nymea-plugin-logilink.install.in create mode 120000 debian-qt6/nymea-plugin-mailnotification.install.in create mode 120000 debian-qt6/nymea-plugin-mecelectronics.install.in create mode 120000 debian-qt6/nymea-plugin-meross.install.in create mode 120000 debian-qt6/nymea-plugin-mqttclient.install.in create mode 120000 debian-qt6/nymea-plugin-mystrom.install.in create mode 120000 debian-qt6/nymea-plugin-nanoleaf.install.in create mode 120000 debian-qt6/nymea-plugin-netatmo.install.in create mode 120000 debian-qt6/nymea-plugin-networkdetector.install.in create mode 120000 debian-qt6/nymea-plugin-notifyevents.install.in create mode 120000 debian-qt6/nymea-plugin-nuki.install.in create mode 120000 debian-qt6/nymea-plugin-onewire.install.in create mode 120000 debian-qt6/nymea-plugin-openuv.install.in create mode 120000 debian-qt6/nymea-plugin-openweathermap.install.in create mode 120000 debian-qt6/nymea-plugin-osdomotics.install.in create mode 120000 debian-qt6/nymea-plugin-philipshue.install.in create mode 120000 debian-qt6/nymea-plugin-powerfox.install.in create mode 120000 debian-qt6/nymea-plugin-pushbullet.install.in create mode 120000 debian-qt6/nymea-plugin-pushnotifications.install.in create mode 120000 debian-qt6/nymea-plugin-reversessh.install.in create mode 120000 debian-qt6/nymea-plugin-senic.install.in create mode 120000 debian-qt6/nymea-plugin-serialportcommander.install.in create mode 120000 debian-qt6/nymea-plugin-sgready.install.in create mode 120000 debian-qt6/nymea-plugin-shelly.install.in create mode 120000 debian-qt6/nymea-plugin-simpleheatpump.install.in create mode 120000 debian-qt6/nymea-plugin-solarlog.install.in create mode 120000 debian-qt6/nymea-plugin-somfytahoma.install.in create mode 120000 debian-qt6/nymea-plugin-sonos.install.in create mode 120000 debian-qt6/nymea-plugin-spothinta.install.in create mode 120000 debian-qt6/nymea-plugin-systemmonitor.install.in create mode 120000 debian-qt6/nymea-plugin-tado.install.in create mode 120000 debian-qt6/nymea-plugin-tasmota.install.in create mode 120000 debian-qt6/nymea-plugin-tcpcommander.install.in create mode 120000 debian-qt6/nymea-plugin-telegram.install.in create mode 120000 debian-qt6/nymea-plugin-tempo.install.in create mode 120000 debian-qt6/nymea-plugin-texasinstruments.install.in create mode 120000 debian-qt6/nymea-plugin-tmate.install.in create mode 120000 debian-qt6/nymea-plugin-tplink.install.in create mode 120000 debian-qt6/nymea-plugin-tuya.install.in create mode 120000 debian-qt6/nymea-plugin-udpcommander.install.in create mode 120000 debian-qt6/nymea-plugin-unifi.install.in create mode 120000 debian-qt6/nymea-plugin-usbrelay.install.in create mode 120000 debian-qt6/nymea-plugin-usbrly82.install.in create mode 120000 debian-qt6/nymea-plugin-v2xeamberelectric.install.in create mode 120000 debian-qt6/nymea-plugin-wakeonlan.install.in create mode 120000 debian-qt6/nymea-plugin-wemo.install.in create mode 120000 debian-qt6/nymea-plugin-wheretheissat.install.in create mode 120000 debian-qt6/nymea-plugin-ws2812fx.install.in create mode 120000 debian-qt6/nymea-plugins-translations.dirs create mode 100755 debian-qt6/rules create mode 120000 debian-qt6/source diff --git a/debian b/debian new file mode 120000 index 00000000..cd83f55c --- /dev/null +++ b/debian @@ -0,0 +1 @@ +debian-qt5 \ No newline at end of file diff --git a/debian/changelog b/debian-qt5/changelog similarity index 100% rename from debian/changelog rename to debian-qt5/changelog diff --git a/debian/compat b/debian-qt5/compat similarity index 100% rename from debian/compat rename to debian-qt5/compat diff --git a/debian/control b/debian-qt5/control similarity index 100% rename from debian/control rename to debian-qt5/control diff --git a/debian/copyright b/debian-qt5/copyright similarity index 100% rename from debian/copyright rename to debian-qt5/copyright diff --git a/debian/nymea-plugin-anel.install.in b/debian-qt5/nymea-plugin-anel.install.in similarity index 100% rename from debian/nymea-plugin-anel.install.in rename to debian-qt5/nymea-plugin-anel.install.in diff --git a/debian/nymea-plugin-aqi.install.in b/debian-qt5/nymea-plugin-aqi.install.in similarity index 100% rename from debian/nymea-plugin-aqi.install.in rename to debian-qt5/nymea-plugin-aqi.install.in diff --git a/debian/nymea-plugin-avahimonitor.install.in b/debian-qt5/nymea-plugin-avahimonitor.install.in similarity index 100% rename from debian/nymea-plugin-avahimonitor.install.in rename to debian-qt5/nymea-plugin-avahimonitor.install.in diff --git a/debian/nymea-plugin-awattar.install.in b/debian-qt5/nymea-plugin-awattar.install.in similarity index 100% rename from debian/nymea-plugin-awattar.install.in rename to debian-qt5/nymea-plugin-awattar.install.in diff --git a/debian/nymea-plugin-bimmerconnected.install.in b/debian-qt5/nymea-plugin-bimmerconnected.install.in similarity index 100% rename from debian/nymea-plugin-bimmerconnected.install.in rename to debian-qt5/nymea-plugin-bimmerconnected.install.in diff --git a/debian/nymea-plugin-bluos.install.in b/debian-qt5/nymea-plugin-bluos.install.in similarity index 100% rename from debian/nymea-plugin-bluos.install.in rename to debian-qt5/nymea-plugin-bluos.install.in diff --git a/debian/nymea-plugin-bose.install.in b/debian-qt5/nymea-plugin-bose.install.in similarity index 100% rename from debian/nymea-plugin-bose.install.in rename to debian-qt5/nymea-plugin-bose.install.in diff --git a/debian/nymea-plugin-bosswerk.install.in b/debian-qt5/nymea-plugin-bosswerk.install.in similarity index 100% rename from debian/nymea-plugin-bosswerk.install.in rename to debian-qt5/nymea-plugin-bosswerk.install.in diff --git a/debian/nymea-plugin-coinmarketcap.install.in b/debian-qt5/nymea-plugin-coinmarketcap.install.in similarity index 100% rename from debian/nymea-plugin-coinmarketcap.install.in rename to debian-qt5/nymea-plugin-coinmarketcap.install.in diff --git a/debian/nymea-plugin-commandlauncher.install.in b/debian-qt5/nymea-plugin-commandlauncher.install.in similarity index 100% rename from debian/nymea-plugin-commandlauncher.install.in rename to debian-qt5/nymea-plugin-commandlauncher.install.in diff --git a/debian/nymea-plugin-daikinairco.install.in b/debian-qt5/nymea-plugin-daikinairco.install.in similarity index 100% rename from debian/nymea-plugin-daikinairco.install.in rename to debian-qt5/nymea-plugin-daikinairco.install.in diff --git a/debian/nymea-plugin-datetime.install.in b/debian-qt5/nymea-plugin-datetime.install.in similarity index 100% rename from debian/nymea-plugin-datetime.install.in rename to debian-qt5/nymea-plugin-datetime.install.in diff --git a/debian/nymea-plugin-daylightsensor.install.in b/debian-qt5/nymea-plugin-daylightsensor.install.in similarity index 100% rename from debian/nymea-plugin-daylightsensor.install.in rename to debian-qt5/nymea-plugin-daylightsensor.install.in diff --git a/debian/nymea-plugin-denon.install.in b/debian-qt5/nymea-plugin-denon.install.in similarity index 100% rename from debian/nymea-plugin-denon.install.in rename to debian-qt5/nymea-plugin-denon.install.in diff --git a/debian/nymea-plugin-dht.install.in b/debian-qt5/nymea-plugin-dht.install.in similarity index 100% rename from debian/nymea-plugin-dht.install.in rename to debian-qt5/nymea-plugin-dht.install.in diff --git a/debian/nymea-plugin-doorbird.install.in b/debian-qt5/nymea-plugin-doorbird.install.in similarity index 100% rename from debian/nymea-plugin-doorbird.install.in rename to debian-qt5/nymea-plugin-doorbird.install.in diff --git a/debian/nymea-plugin-dweetio.install.in b/debian-qt5/nymea-plugin-dweetio.install.in similarity index 100% rename from debian/nymea-plugin-dweetio.install.in rename to debian-qt5/nymea-plugin-dweetio.install.in diff --git a/debian/nymea-plugin-dynatrace.install.in b/debian-qt5/nymea-plugin-dynatrace.install.in similarity index 100% rename from debian/nymea-plugin-dynatrace.install.in rename to debian-qt5/nymea-plugin-dynatrace.install.in diff --git a/debian/nymea-plugin-easee.install.in b/debian-qt5/nymea-plugin-easee.install.in similarity index 100% rename from debian/nymea-plugin-easee.install.in rename to debian-qt5/nymea-plugin-easee.install.in diff --git a/debian/nymea-plugin-elgato.install.in b/debian-qt5/nymea-plugin-elgato.install.in similarity index 100% rename from debian/nymea-plugin-elgato.install.in rename to debian-qt5/nymea-plugin-elgato.install.in diff --git a/debian/nymea-plugin-eq-3.install.in b/debian-qt5/nymea-plugin-eq-3.install.in similarity index 100% rename from debian/nymea-plugin-eq-3.install.in rename to debian-qt5/nymea-plugin-eq-3.install.in diff --git a/debian/nymea-plugin-espsomfyrts.install.in b/debian-qt5/nymea-plugin-espsomfyrts.install.in similarity index 100% rename from debian/nymea-plugin-espsomfyrts.install.in rename to debian-qt5/nymea-plugin-espsomfyrts.install.in diff --git a/debian/nymea-plugin-espuino.install.in b/debian-qt5/nymea-plugin-espuino.install.in similarity index 100% rename from debian/nymea-plugin-espuino.install.in rename to debian-qt5/nymea-plugin-espuino.install.in diff --git a/debian/nymea-plugin-evbox.install.in b/debian-qt5/nymea-plugin-evbox.install.in similarity index 100% rename from debian/nymea-plugin-evbox.install.in rename to debian-qt5/nymea-plugin-evbox.install.in diff --git a/debian/nymea-plugin-everest.install.in b/debian-qt5/nymea-plugin-everest.install.in similarity index 100% rename from debian/nymea-plugin-everest.install.in rename to debian-qt5/nymea-plugin-everest.install.in diff --git a/debian/nymea-plugin-fastcom.install.in b/debian-qt5/nymea-plugin-fastcom.install.in similarity index 100% rename from debian/nymea-plugin-fastcom.install.in rename to debian-qt5/nymea-plugin-fastcom.install.in diff --git a/debian/nymea-plugin-flowercare.install.in b/debian-qt5/nymea-plugin-flowercare.install.in similarity index 100% rename from debian/nymea-plugin-flowercare.install.in rename to debian-qt5/nymea-plugin-flowercare.install.in diff --git a/debian/nymea-plugin-fronius.install.in b/debian-qt5/nymea-plugin-fronius.install.in similarity index 100% rename from debian/nymea-plugin-fronius.install.in rename to debian-qt5/nymea-plugin-fronius.install.in diff --git a/debian/nymea-plugin-garadget.install.in b/debian-qt5/nymea-plugin-garadget.install.in similarity index 100% rename from debian/nymea-plugin-garadget.install.in rename to debian-qt5/nymea-plugin-garadget.install.in diff --git a/debian/nymea-plugin-goecharger.install.in b/debian-qt5/nymea-plugin-goecharger.install.in similarity index 100% rename from debian/nymea-plugin-goecharger.install.in rename to debian-qt5/nymea-plugin-goecharger.install.in diff --git a/debian/nymea-plugin-gpio.install.in b/debian-qt5/nymea-plugin-gpio.install.in similarity index 100% rename from debian/nymea-plugin-gpio.install.in rename to debian-qt5/nymea-plugin-gpio.install.in diff --git a/debian/nymea-plugin-homeconnect.install.in b/debian-qt5/nymea-plugin-homeconnect.install.in similarity index 100% rename from debian/nymea-plugin-homeconnect.install.in rename to debian-qt5/nymea-plugin-homeconnect.install.in diff --git a/debian/nymea-plugin-httpcommander.install.in b/debian-qt5/nymea-plugin-httpcommander.install.in similarity index 100% rename from debian/nymea-plugin-httpcommander.install.in rename to debian-qt5/nymea-plugin-httpcommander.install.in diff --git a/debian/nymea-plugin-i2cdevices.install.in b/debian-qt5/nymea-plugin-i2cdevices.install.in similarity index 100% rename from debian/nymea-plugin-i2cdevices.install.in rename to debian-qt5/nymea-plugin-i2cdevices.install.in diff --git a/debian/nymea-plugin-keba.install.in b/debian-qt5/nymea-plugin-keba.install.in similarity index 100% rename from debian/nymea-plugin-keba.install.in rename to debian-qt5/nymea-plugin-keba.install.in diff --git a/debian/nymea-plugin-kodi.install.in b/debian-qt5/nymea-plugin-kodi.install.in similarity index 100% rename from debian/nymea-plugin-kodi.install.in rename to debian-qt5/nymea-plugin-kodi.install.in diff --git a/debian/nymea-plugin-lgsmarttv.install.in b/debian-qt5/nymea-plugin-lgsmarttv.install.in similarity index 100% rename from debian/nymea-plugin-lgsmarttv.install.in rename to debian-qt5/nymea-plugin-lgsmarttv.install.in diff --git a/debian/nymea-plugin-lifx.install.in b/debian-qt5/nymea-plugin-lifx.install.in similarity index 100% rename from debian/nymea-plugin-lifx.install.in rename to debian-qt5/nymea-plugin-lifx.install.in diff --git a/debian/nymea-plugin-logilink.install.in b/debian-qt5/nymea-plugin-logilink.install.in similarity index 100% rename from debian/nymea-plugin-logilink.install.in rename to debian-qt5/nymea-plugin-logilink.install.in diff --git a/debian/nymea-plugin-mailnotification.install.in b/debian-qt5/nymea-plugin-mailnotification.install.in similarity index 100% rename from debian/nymea-plugin-mailnotification.install.in rename to debian-qt5/nymea-plugin-mailnotification.install.in diff --git a/debian/nymea-plugin-mcp3008.install.in b/debian-qt5/nymea-plugin-mcp3008.install.in similarity index 100% rename from debian/nymea-plugin-mcp3008.install.in rename to debian-qt5/nymea-plugin-mcp3008.install.in diff --git a/debian/nymea-plugin-mecelectronics.install.in b/debian-qt5/nymea-plugin-mecelectronics.install.in similarity index 100% rename from debian/nymea-plugin-mecelectronics.install.in rename to debian-qt5/nymea-plugin-mecelectronics.install.in diff --git a/debian/nymea-plugin-meross.install.in b/debian-qt5/nymea-plugin-meross.install.in similarity index 100% rename from debian/nymea-plugin-meross.install.in rename to debian-qt5/nymea-plugin-meross.install.in diff --git a/debian/nymea-plugin-mqttclient.install.in b/debian-qt5/nymea-plugin-mqttclient.install.in similarity index 100% rename from debian/nymea-plugin-mqttclient.install.in rename to debian-qt5/nymea-plugin-mqttclient.install.in diff --git a/debian/nymea-plugin-mystrom.install.in b/debian-qt5/nymea-plugin-mystrom.install.in similarity index 100% rename from debian/nymea-plugin-mystrom.install.in rename to debian-qt5/nymea-plugin-mystrom.install.in diff --git a/debian/nymea-plugin-nanoleaf.install.in b/debian-qt5/nymea-plugin-nanoleaf.install.in similarity index 100% rename from debian/nymea-plugin-nanoleaf.install.in rename to debian-qt5/nymea-plugin-nanoleaf.install.in diff --git a/debian/nymea-plugin-neatobotvac.install.in b/debian-qt5/nymea-plugin-neatobotvac.install.in similarity index 100% rename from debian/nymea-plugin-neatobotvac.install.in rename to debian-qt5/nymea-plugin-neatobotvac.install.in diff --git a/debian/nymea-plugin-netatmo.install.in b/debian-qt5/nymea-plugin-netatmo.install.in similarity index 100% rename from debian/nymea-plugin-netatmo.install.in rename to debian-qt5/nymea-plugin-netatmo.install.in diff --git a/debian/nymea-plugin-networkdetector.install.in b/debian-qt5/nymea-plugin-networkdetector.install.in similarity index 100% rename from debian/nymea-plugin-networkdetector.install.in rename to debian-qt5/nymea-plugin-networkdetector.install.in diff --git a/debian/nymea-plugin-notifyevents.install.in b/debian-qt5/nymea-plugin-notifyevents.install.in similarity index 100% rename from debian/nymea-plugin-notifyevents.install.in rename to debian-qt5/nymea-plugin-notifyevents.install.in diff --git a/debian/nymea-plugin-nuki.install.in b/debian-qt5/nymea-plugin-nuki.install.in similarity index 100% rename from debian/nymea-plugin-nuki.install.in rename to debian-qt5/nymea-plugin-nuki.install.in diff --git a/debian/nymea-plugin-onewire.install.in b/debian-qt5/nymea-plugin-onewire.install.in similarity index 100% rename from debian/nymea-plugin-onewire.install.in rename to debian-qt5/nymea-plugin-onewire.install.in diff --git a/debian/nymea-plugin-openuv.install.in b/debian-qt5/nymea-plugin-openuv.install.in similarity index 100% rename from debian/nymea-plugin-openuv.install.in rename to debian-qt5/nymea-plugin-openuv.install.in diff --git a/debian/nymea-plugin-openweathermap.install.in b/debian-qt5/nymea-plugin-openweathermap.install.in similarity index 100% rename from debian/nymea-plugin-openweathermap.install.in rename to debian-qt5/nymea-plugin-openweathermap.install.in diff --git a/debian/nymea-plugin-osdomotics.install.in b/debian-qt5/nymea-plugin-osdomotics.install.in similarity index 100% rename from debian/nymea-plugin-osdomotics.install.in rename to debian-qt5/nymea-plugin-osdomotics.install.in diff --git a/debian/nymea-plugin-philipshue.install.in b/debian-qt5/nymea-plugin-philipshue.install.in similarity index 100% rename from debian/nymea-plugin-philipshue.install.in rename to debian-qt5/nymea-plugin-philipshue.install.in diff --git a/debian/nymea-plugin-powerfox.install.in b/debian-qt5/nymea-plugin-powerfox.install.in similarity index 100% rename from debian/nymea-plugin-powerfox.install.in rename to debian-qt5/nymea-plugin-powerfox.install.in diff --git a/debian/nymea-plugin-pushbullet.install.in b/debian-qt5/nymea-plugin-pushbullet.install.in similarity index 100% rename from debian/nymea-plugin-pushbullet.install.in rename to debian-qt5/nymea-plugin-pushbullet.install.in diff --git a/debian/nymea-plugin-pushnotifications.install.in b/debian-qt5/nymea-plugin-pushnotifications.install.in similarity index 100% rename from debian/nymea-plugin-pushnotifications.install.in rename to debian-qt5/nymea-plugin-pushnotifications.install.in diff --git a/debian/nymea-plugin-reversessh.install.in b/debian-qt5/nymea-plugin-reversessh.install.in similarity index 100% rename from debian/nymea-plugin-reversessh.install.in rename to debian-qt5/nymea-plugin-reversessh.install.in diff --git a/debian/nymea-plugin-senic.install.in b/debian-qt5/nymea-plugin-senic.install.in similarity index 100% rename from debian/nymea-plugin-senic.install.in rename to debian-qt5/nymea-plugin-senic.install.in diff --git a/debian/nymea-plugin-serialportcommander.install.in b/debian-qt5/nymea-plugin-serialportcommander.install.in similarity index 100% rename from debian/nymea-plugin-serialportcommander.install.in rename to debian-qt5/nymea-plugin-serialportcommander.install.in diff --git a/debian/nymea-plugin-sgready.install.in b/debian-qt5/nymea-plugin-sgready.install.in similarity index 100% rename from debian/nymea-plugin-sgready.install.in rename to debian-qt5/nymea-plugin-sgready.install.in diff --git a/debian/nymea-plugin-shelly.install.in b/debian-qt5/nymea-plugin-shelly.install.in similarity index 100% rename from debian/nymea-plugin-shelly.install.in rename to debian-qt5/nymea-plugin-shelly.install.in diff --git a/debian/nymea-plugin-simpleheatpump.install.in b/debian-qt5/nymea-plugin-simpleheatpump.install.in similarity index 100% rename from debian/nymea-plugin-simpleheatpump.install.in rename to debian-qt5/nymea-plugin-simpleheatpump.install.in diff --git a/debian/nymea-plugin-solarlog.install.in b/debian-qt5/nymea-plugin-solarlog.install.in similarity index 100% rename from debian/nymea-plugin-solarlog.install.in rename to debian-qt5/nymea-plugin-solarlog.install.in diff --git a/debian/nymea-plugin-somfytahoma.install.in b/debian-qt5/nymea-plugin-somfytahoma.install.in similarity index 100% rename from debian/nymea-plugin-somfytahoma.install.in rename to debian-qt5/nymea-plugin-somfytahoma.install.in diff --git a/debian/nymea-plugin-sonos.install.in b/debian-qt5/nymea-plugin-sonos.install.in similarity index 100% rename from debian/nymea-plugin-sonos.install.in rename to debian-qt5/nymea-plugin-sonos.install.in diff --git a/debian/nymea-plugin-spothinta.install.in b/debian-qt5/nymea-plugin-spothinta.install.in similarity index 100% rename from debian/nymea-plugin-spothinta.install.in rename to debian-qt5/nymea-plugin-spothinta.install.in diff --git a/debian/nymea-plugin-sunposition.install.in b/debian-qt5/nymea-plugin-sunposition.install.in similarity index 100% rename from debian/nymea-plugin-sunposition.install.in rename to debian-qt5/nymea-plugin-sunposition.install.in diff --git a/debian/nymea-plugin-systemmonitor.install.in b/debian-qt5/nymea-plugin-systemmonitor.install.in similarity index 100% rename from debian/nymea-plugin-systemmonitor.install.in rename to debian-qt5/nymea-plugin-systemmonitor.install.in diff --git a/debian/nymea-plugin-tado.install.in b/debian-qt5/nymea-plugin-tado.install.in similarity index 100% rename from debian/nymea-plugin-tado.install.in rename to debian-qt5/nymea-plugin-tado.install.in diff --git a/debian/nymea-plugin-tasmota.install.in b/debian-qt5/nymea-plugin-tasmota.install.in similarity index 100% rename from debian/nymea-plugin-tasmota.install.in rename to debian-qt5/nymea-plugin-tasmota.install.in diff --git a/debian/nymea-plugin-tcpcommander.install.in b/debian-qt5/nymea-plugin-tcpcommander.install.in similarity index 100% rename from debian/nymea-plugin-tcpcommander.install.in rename to debian-qt5/nymea-plugin-tcpcommander.install.in diff --git a/debian/nymea-plugin-telegram.install.in b/debian-qt5/nymea-plugin-telegram.install.in similarity index 100% rename from debian/nymea-plugin-telegram.install.in rename to debian-qt5/nymea-plugin-telegram.install.in diff --git a/debian/nymea-plugin-tempo.install.in b/debian-qt5/nymea-plugin-tempo.install.in similarity index 100% rename from debian/nymea-plugin-tempo.install.in rename to debian-qt5/nymea-plugin-tempo.install.in diff --git a/debian/nymea-plugin-texasinstruments.install.in b/debian-qt5/nymea-plugin-texasinstruments.install.in similarity index 100% rename from debian/nymea-plugin-texasinstruments.install.in rename to debian-qt5/nymea-plugin-texasinstruments.install.in diff --git a/debian/nymea-plugin-tmate.install.in b/debian-qt5/nymea-plugin-tmate.install.in similarity index 100% rename from debian/nymea-plugin-tmate.install.in rename to debian-qt5/nymea-plugin-tmate.install.in diff --git a/debian/nymea-plugin-tplink.install.in b/debian-qt5/nymea-plugin-tplink.install.in similarity index 100% rename from debian/nymea-plugin-tplink.install.in rename to debian-qt5/nymea-plugin-tplink.install.in diff --git a/debian/nymea-plugin-tuya.install.in b/debian-qt5/nymea-plugin-tuya.install.in similarity index 100% rename from debian/nymea-plugin-tuya.install.in rename to debian-qt5/nymea-plugin-tuya.install.in diff --git a/debian/nymea-plugin-udpcommander.install.in b/debian-qt5/nymea-plugin-udpcommander.install.in similarity index 100% rename from debian/nymea-plugin-udpcommander.install.in rename to debian-qt5/nymea-plugin-udpcommander.install.in diff --git a/debian/nymea-plugin-unifi.install.in b/debian-qt5/nymea-plugin-unifi.install.in similarity index 100% rename from debian/nymea-plugin-unifi.install.in rename to debian-qt5/nymea-plugin-unifi.install.in diff --git a/debian/nymea-plugin-usbrelay.install.in b/debian-qt5/nymea-plugin-usbrelay.install.in similarity index 100% rename from debian/nymea-plugin-usbrelay.install.in rename to debian-qt5/nymea-plugin-usbrelay.install.in diff --git a/debian/nymea-plugin-usbrly82.install.in b/debian-qt5/nymea-plugin-usbrly82.install.in similarity index 100% rename from debian/nymea-plugin-usbrly82.install.in rename to debian-qt5/nymea-plugin-usbrly82.install.in diff --git a/debian/nymea-plugin-v2xeambereletric.install.in b/debian-qt5/nymea-plugin-v2xeamberelectric.install.in similarity index 100% rename from debian/nymea-plugin-v2xeambereletric.install.in rename to debian-qt5/nymea-plugin-v2xeamberelectric.install.in diff --git a/debian/nymea-plugin-wakeonlan.install.in b/debian-qt5/nymea-plugin-wakeonlan.install.in similarity index 100% rename from debian/nymea-plugin-wakeonlan.install.in rename to debian-qt5/nymea-plugin-wakeonlan.install.in diff --git a/debian/nymea-plugin-wemo.install.in b/debian-qt5/nymea-plugin-wemo.install.in similarity index 100% rename from debian/nymea-plugin-wemo.install.in rename to debian-qt5/nymea-plugin-wemo.install.in diff --git a/debian/nymea-plugin-wheretheissat.install.in b/debian-qt5/nymea-plugin-wheretheissat.install.in similarity index 100% rename from debian/nymea-plugin-wheretheissat.install.in rename to debian-qt5/nymea-plugin-wheretheissat.install.in diff --git a/debian/nymea-plugin-ws2812fx.install.in b/debian-qt5/nymea-plugin-ws2812fx.install.in similarity index 100% rename from debian/nymea-plugin-ws2812fx.install.in rename to debian-qt5/nymea-plugin-ws2812fx.install.in diff --git a/debian/nymea-plugin-yamahaavr.install.in b/debian-qt5/nymea-plugin-yamahaavr.install.in similarity index 100% rename from debian/nymea-plugin-yamahaavr.install.in rename to debian-qt5/nymea-plugin-yamahaavr.install.in diff --git a/debian/nymea-plugins-translations.dirs b/debian-qt5/nymea-plugins-translations.dirs similarity index 100% rename from debian/nymea-plugins-translations.dirs rename to debian-qt5/nymea-plugins-translations.dirs diff --git a/debian/rules b/debian-qt5/rules similarity index 100% rename from debian/rules rename to debian-qt5/rules diff --git a/debian/source/format b/debian-qt5/source/format similarity index 100% rename from debian/source/format rename to debian-qt5/source/format diff --git a/debian-qt6/changelog b/debian-qt6/changelog new file mode 120000 index 00000000..98cdf8f2 --- /dev/null +++ b/debian-qt6/changelog @@ -0,0 +1 @@ +../debian-qt5/changelog \ No newline at end of file diff --git a/debian-qt6/compat b/debian-qt6/compat new file mode 100644 index 00000000..b1bd38b6 --- /dev/null +++ b/debian-qt6/compat @@ -0,0 +1 @@ +13 diff --git a/debian-qt6/control b/debian-qt6/control new file mode 100644 index 00000000..2bc7f9fc --- /dev/null +++ b/debian-qt6/control @@ -0,0 +1,820 @@ +Source: nymea-plugins +Section: utils +Priority: optional +Maintainer: nymea GmbH +Standards-Version: 4.7.2 +Homepage: https://nymea.io +Vcs-Git: https://github.com/nymea/nymea-plugins.git +Build-depends: debhelper, + pkg-config, + libnymea-dev, + libnymea-mqtt-dev, + libnymea-gpio-dev, + nymea-dev-tools:native, + qt6-base-dev, + qt6-base-dev-tools, + qt6-5compat-dev, + qt6-websockets-dev, + qt6-connectivity-dev, + qt6-serialport-dev, + libow-dev, + libsodium-dev, + libudev-dev, + libhidapi-dev, + libssl-dev, + + +Package: nymea-plugin-anel +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for ANEL Elektronik NET-PwrCtrl power sockets + This package contains the nymea integration plugin for ANEL Elektronik NET-PwrCtrl + network controlled power sockets. + + +Package: nymea-plugin-aqi +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin to fetch the air quaility index from http://aqicn.org + This package contains the nymea integration plugin for the air quality index online service + + +Package: nymea-plugin-avahimonitor +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for avahimonitor + This package contains the nymea integration plugin for monitoring network devices via mDNS + + +Package: nymea-plugin-awattar +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for awattar + This package contains the nymea integration plugin for the awattar online service + + +Package: nymea-plugin-bluos +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for bluos + This package contains the nymea integration plugin for bluos based media devices + + +Package: nymea-plugin-bose +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for bose soundtouch + This package contains the nymea integration plugin for bose soundtouch devices. + + +Package: nymea-plugin-bosswerk +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Description: nymea integration plugin for Bosswerk micro inverters + This package contains the nymea integration plugin for Bosswerk micro inverters. + + +Package: nymea-plugin-coinmarketcap +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for coin market cap + This package contains the nymea integration plugin for the coinmarketcap online service + + +Package: nymea-plugin-commandlauncher +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for commandlauncher + This package contains the nymea integration plugin for launching system commands + + +Package: nymea-plugin-daikinairco +Architecture: any +Depends: ${misc:Depends}, + python3-pip, +Description: nymea integration plugin for Daikin airconditioning units + This package contains the nymea integration plugin for Daikin airconditioning units. + + +Package: nymea-plugin-datetime +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for datetime + This package contains the nymea integration plugin for date and time related features + + +Package: nymea-plugin-daylightsensor +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for a mathematical daylight sensor + This package contains a plugin for a mathematical daylight sensor. That means + it will work without any internet connection or hardware. It computes daylight + times based on the geographical location of the nymea instance. + + +Package: nymea-plugin-denon +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for denon + This package contains the nymea integration plugin for Denon sound devices + + +Package: nymea-plugin-doorbird +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for DoorBird + This package contains the nymea integration plugin for DoorBird doorbells + + +Package: nymea-plugin-dweetio +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for dweet.io + This package contains the nymea integration plugin for dweet.io + + +Package: nymea-plugin-dynatrace +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for dynatrace + This package contains the nymea integration plugin for the dynatrace UFO + + +Package: nymea-plugin-easee +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Description: nymea integration plugin for easee wallboxes + This package contains the nymea integration plugin for easee wallboxes + + +Package: nymea-plugin-elgato +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for elgato + This package contains the nymea integration plugin for devices from Elgato + + +Package: nymea-plugin-espuino +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for ESPuino + This package contains the nymea integration plugin for ESPuino devices. + + +Package: nymea-plugin-espsomfyrts +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for ESP-Somfy-RTS + This package contains the nymea integration plugin for the ESP Somfy RTS project. + + +Package: nymea-plugin-evbox +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Description: nymea integration plugin for EVBox + This package contains the nymea integration plugin for EVBox wallboxes + implementing the Protocol Max v4. + + +Package: nymea-plugin-everest +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Description: nymea integration plugin for EVerest based EV chargers + This package will install the nymea integration plugin for + EVerest based EV charger + + +Package: nymea-plugin-flowercare +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for Xiaomi Flower care devices + This package contains the nymea integration plugin for Xiaomi Flower care devices, + also know as Plant care or MiCare + + +Package: nymea-plugin-fronius +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for Fronius PV inverters + This package contains the nymea integration plugin for Fronius solar inverters + + +Package: nymea-plugin-eq-3 +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for eq-3 + This package contains the nymea integration plugin for eq-3 devices + + +Package: nymea-plugin-garadget +Architecture: any +Multi-Arch: same +Section: libs +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for Garadget + This package contains the nymea integration plugin for Garadget Garage Door Opener + + +Package: nymea-plugin-gpio +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, + libnymea-gpio, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for gpio + This package contains the nymea integration plugin to interact with GPIOs + + +Package: nymea-plugin-goecharger +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for the go-eCharger wallbox + This package contains the nymea integration plugin for the go-eCharger wallbox + + +Package: nymea-plugin-homeconnect +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for home connect + This package contains the nymea integration plugin for home connect appliances + + +Package: nymea-plugin-i2cdevices +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for I2C devies + This plugin adds support for I2C devices to nymea. + Currently supported devices are the ADS1114/1114/1115 and the Pi-16ADC. + + +Package: nymea-plugin-kodi +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for kodi + This package contains the nymea integration plugin for kodi + + +Package: nymea-plugin-lgsmarttv +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for lgsmarttv + This package contains the nymea integration plugin for smart tvs from LG + + +Package: nymea-plugin-lifx +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for lifx + This package contains the nymea integration plugin for lifx devices + +Package: nymea-plugin-logilink +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (< 1.0.1) +Description: nymea integration plugin for Logilink power sockets + This package contains the nymea integration plugin for Logilink PDU + network controlled power sockets. + + +Package: nymea-plugin-mecelectronics +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for mec electronics devices + This package will add support for the mec meter to nymea. + + +Package: nymea-plugin-meross +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Description: nymea integration plugin for meross devices + This package will add support for the meross devices to nymea. + + +Package: nymea-plugin-mailnotification +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for mailnotification + This package contains the nymea integration plugin for sending notifications via email. + + +Package: nymea-plugin-mqttclient +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for a generic MQTT client + This package contains a generic MQTT client plugin for nymea. + + +Package: nymea-plugin-mystrom +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for myStrom devices + This package will add support for myStrom devices to nymea. + + +Package: nymea-plugin-nanoleaf +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for nanoleaf + This package contains the nymea integration plugin for nanoleaf devices. + + +Package: nymea-plugin-netatmo +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for netatmo + This package contains the nymea integration plugin for the netatmo weather station. + + +Package: nymea-plugin-networkdetector +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for networkdetector + This package contains the nymea integration plugin for detecting and monitoring + network devices via basic networking mechanisms (ARP, ICMP..). + + +Package: nymea-plugin-notifyevents +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Description: nymea integration plugin for Notify.Events + This package contains the nymea integration plugin for Notify.Events. + + +Package: nymea-plugin-nuki +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Replaces: nymea-nukiplugin +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for the nuki smart lock + This package contains the nymea integration plugin for nuki smart lock devices. + + +Package: nymea-plugin-onewire +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for one wire devices + This package contains the nymea integration plugin for one wire devices. + + +Package: nymea-plugin-openuv +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for OpenUV + This package contains the nymea integration plugin for OpenUV. + + +Package: nymea-plugin-openweathermap +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for openweathermap + This package contains the nymea integration plugin for openweathermap. + + +Package: nymea-plugin-osdomotics +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for osdomotics + This package contains the nymea integration plugin for osdomotics. + + +Package: nymea-plugin-philipshue +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for philipshue + This package contains the nymea integration plugin for Philips Hue bridges + and connected devices to it. + + +Package: nymea-plugin-powerfox +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Description: nymea integration plugin for powerfox + This package contains the nymea integration plugin for the powerfox online service + to integrate energy meters. + + +Package: nymea-plugin-pushbullet +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for Pushbullet + This package contains the nymea integration plugin for sending messages via Pushbullet. + + +Package: nymea-plugin-pushnotifications +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin to send Push notifications + This package contains the nymea integration plugin for sending messages to nymea:app. + + +Package: nymea-plugin-solarlog +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for Solar-Log + This package contains the nymea integration plugin for Solar-Log devices. + + +Package: nymea-plugin-tasmota +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for Sonoff-Tasmota devices + This package contains the nymea integration plugin for Tasmota-Sonoff devices. + +Package: nymea-plugin-texasinstruments +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for Texas Instruments devices + This package contains the nymea integration plugin for Texas Instruments devices. + + +Package: nymea-plugin-telegram +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for Telegram + This plugin allows nymea to send messages to telegram via the bot API. + + +Package: nymea-plugin-tempo +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for Tempo time tracking + This package contains the nymea integration plugin for Tempo time tracking. + + +Package: nymea-plugin-tmate +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, + tmate, +Description: nymea integration plugin for tmate + This package contains the nymea integration plugin for tmate terminal access. + + +Package: nymea-plugin-tplink +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for tp-link Kasa devices + This package contains the nymea integration plugin for TP-Link Kasa devices. + + +Package: nymea-plugin-tuya +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for Tuya cloud devices + This package contains the nymea integration plugin for Tuya cloud devices. + + +Package: nymea-plugin-udpcommander +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for UDP commander + This package contains the nymea integration plugin for sending arbitrary + UDP commands from and to nymea. + + +Package: nymea-plugin-unifi +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for UniFi network controllers + This package contains the nymea integration plugin for UniFi network controllers. + + +Package: nymea-plugin-usbrelay +Architecture: any +Multi-Arch: same +Section: libs +Depends: ${shlibs:Depends}, + ${misc:Depends}, + libudev1, + libhidapi-hidraw0, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for USB relay + This package contains the nymea integration plugin for USB relays. + + +Package: nymea-plugin-usbrly82 +Architecture: any +Multi-Arch: same +Section: libs +Depends: ${shlibs:Depends}, + ${misc:Depends}, + libudev1, +Description: nymea integration plugin for USB-RLY82 relay + This package will install the nymea integration plugin for USB-RLY82 relay + with 2 relays and 8 analog/digital inputs. + + +Package: nymea-plugin-wakeonlan +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for wakeonlan + This package contains the nymea integration plugin for sending WOL + (wake on lan) magic packets to the network. + + +Package: nymea-plugin-wemo +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for wemo + This package contains the nymea integration plugin for wemo devices. + + +Package: nymea-plugin-ws2812fx +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for ws2812fx + This package contains the nymea integration plugin for using ws2812fx + LEDs via an Arduino based microcontroller connected to nymea. + + +Package: nymea-plugin-tcpcommander +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for TCP commander + This package contains the nymea integration plugin for sending arbitrary + TCP packets from and to nymea. + +Package: nymea-plugin-httpcommander +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for HTTP commander + This package contains the nymea integration plugin for sending arbitrary + HTTP requests from and to nymea. + + +Package: nymea-plugin-senic +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for senic + This package contains the nymea integration plugin for the Senic Nuimo. + + +Package: nymea-plugin-sgready +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, + libnymea-gpio, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for SG-Ready heat pump interface based on GPIOs + This package contains the nymea integration plugin for SG-Ready heat pump interface based on GPIOs. + + +Package: nymea-plugin-shelly +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for Shelly devices + This package contains the nymea integration plugin for Shelly devices. + + +Package: nymea-plugin-simpleheatpump +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, + libnymea-gpio, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for simple heat pumps + This package contains the nymea integration plugin for simple heat pumps. + + +Package: nymea-plugin-somfytahoma +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for Somfy TaHoma + This package contains the nymea integration plugin for Somfy TaHoma devices. + + +Package: nymea-plugin-sonos +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for Sonos smart speakers + This package contains the nymea integration plugin for Sonos smart speakers. + + +Package: nymea-plugin-spothinta +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Description: nymea integration plugin for spot-hinta.fi + This package contains the nymea integration plugin to retrieve Finlands + spotmarket energy prices from spot-hinta.fi. + + +Package: nymea-plugin-keba +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, + nmap, + arping, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for Keba wallboxes + This package contains the nymea integration plugin for Keba wallboxes. + + +Package: nymea-plugin-reversessh +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, + sshpass, +Recommends: openssh-server +Replaces: nymea-plugin-remotessh +Conflicts: nymea-plugin-remotessh, + nymea-plugins-translations (<= 1.0.0) +Description: nymea integration plugin to configure remotessh for your nymea:core + This package contains the nymea integration plugin for remote ssh connections. + + +Package: nymea-plugin-serialportcommander +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, + libqt5serialport5, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin to send and receive strings over a serial port + This package contains the nymea integration plugin for sending and receiving + arbitrary data via serial ports. + + +Package: nymea-plugin-systemmonitor +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin to monitor the system + This package contains the nymea integration plugin for system monitoring. + + +Package: nymea-plugin-tado +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin to connect to your Tado account + This package contains the nymea integration plugin for Tado devices. + + +Package: nymea-plugin-v2xeamberelectric +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: This nymea plugin fetches live and forecasted price data, + providing real-time and future pricing information for integration with smart energy management systems. + + +Package: nymea-plugin-wheretheissat +Architecture: any +Depends: ${misc:Depends}, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin to monitor the ISS position + This package contains the nymea integration plugin for the wheretheiss.at + online service. + + +Package: nymea-plugin-yamahaavr +Architecture: any +Depends: ${misc:Depends}, + python3-pip, +Conflicts: nymea-plugins-translations (<< 1.0.1) +Description: nymea integration plugin for Yamaha receivers + This package contains the nymea integration plugin for (non-Musiccast) Yamaha AV receivers. + + +Package: nymea-plugins-translations +Architecture: all +Depends: ${misc:Depends}, +Description: Transitional package. + This package used to contain plugins translations. It is empty now, used + as a transitional package and will be removed in the future. diff --git a/debian-qt6/copyright b/debian-qt6/copyright new file mode 120000 index 00000000..cc658776 --- /dev/null +++ b/debian-qt6/copyright @@ -0,0 +1 @@ +../debian-qt5/copyright \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-anel.install.in b/debian-qt6/nymea-plugin-anel.install.in new file mode 120000 index 00000000..b2f84cc2 --- /dev/null +++ b/debian-qt6/nymea-plugin-anel.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-anel.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-aqi.install.in b/debian-qt6/nymea-plugin-aqi.install.in new file mode 120000 index 00000000..a7b222ca --- /dev/null +++ b/debian-qt6/nymea-plugin-aqi.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-aqi.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-avahimonitor.install.in b/debian-qt6/nymea-plugin-avahimonitor.install.in new file mode 120000 index 00000000..f97e3f90 --- /dev/null +++ b/debian-qt6/nymea-plugin-avahimonitor.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-avahimonitor.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-awattar.install.in b/debian-qt6/nymea-plugin-awattar.install.in new file mode 120000 index 00000000..80ca0fa9 --- /dev/null +++ b/debian-qt6/nymea-plugin-awattar.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-awattar.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-bluos.install.in b/debian-qt6/nymea-plugin-bluos.install.in new file mode 120000 index 00000000..eba6c8dc --- /dev/null +++ b/debian-qt6/nymea-plugin-bluos.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-bluos.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-bose.install.in b/debian-qt6/nymea-plugin-bose.install.in new file mode 120000 index 00000000..284695f9 --- /dev/null +++ b/debian-qt6/nymea-plugin-bose.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-bose.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-bosswerk.install.in b/debian-qt6/nymea-plugin-bosswerk.install.in new file mode 120000 index 00000000..7906b2be --- /dev/null +++ b/debian-qt6/nymea-plugin-bosswerk.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-bosswerk.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-coinmarketcap.install.in b/debian-qt6/nymea-plugin-coinmarketcap.install.in new file mode 120000 index 00000000..81948a3a --- /dev/null +++ b/debian-qt6/nymea-plugin-coinmarketcap.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-coinmarketcap.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-commandlauncher.install.in b/debian-qt6/nymea-plugin-commandlauncher.install.in new file mode 120000 index 00000000..4dbd348a --- /dev/null +++ b/debian-qt6/nymea-plugin-commandlauncher.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-commandlauncher.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-daikinairco.install.in b/debian-qt6/nymea-plugin-daikinairco.install.in new file mode 120000 index 00000000..7059edec --- /dev/null +++ b/debian-qt6/nymea-plugin-daikinairco.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-daikinairco.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-datetime.install.in b/debian-qt6/nymea-plugin-datetime.install.in new file mode 120000 index 00000000..e34e0e68 --- /dev/null +++ b/debian-qt6/nymea-plugin-datetime.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-datetime.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-daylightsensor.install.in b/debian-qt6/nymea-plugin-daylightsensor.install.in new file mode 120000 index 00000000..5906ad6a --- /dev/null +++ b/debian-qt6/nymea-plugin-daylightsensor.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-daylightsensor.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-denon.install.in b/debian-qt6/nymea-plugin-denon.install.in new file mode 120000 index 00000000..4c9a3242 --- /dev/null +++ b/debian-qt6/nymea-plugin-denon.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-denon.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-doorbird.install.in b/debian-qt6/nymea-plugin-doorbird.install.in new file mode 120000 index 00000000..6295f304 --- /dev/null +++ b/debian-qt6/nymea-plugin-doorbird.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-doorbird.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-dweetio.install.in b/debian-qt6/nymea-plugin-dweetio.install.in new file mode 120000 index 00000000..eefcfa42 --- /dev/null +++ b/debian-qt6/nymea-plugin-dweetio.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-dweetio.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-dynatrace.install.in b/debian-qt6/nymea-plugin-dynatrace.install.in new file mode 120000 index 00000000..b1515095 --- /dev/null +++ b/debian-qt6/nymea-plugin-dynatrace.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-dynatrace.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-easee.install.in b/debian-qt6/nymea-plugin-easee.install.in new file mode 120000 index 00000000..0790de4d --- /dev/null +++ b/debian-qt6/nymea-plugin-easee.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-easee.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-elgato.install.in b/debian-qt6/nymea-plugin-elgato.install.in new file mode 120000 index 00000000..fb5140bd --- /dev/null +++ b/debian-qt6/nymea-plugin-elgato.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-elgato.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-eq-3.install.in b/debian-qt6/nymea-plugin-eq-3.install.in new file mode 120000 index 00000000..9d3b218d --- /dev/null +++ b/debian-qt6/nymea-plugin-eq-3.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-eq-3.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-espsomfyrts.install.in b/debian-qt6/nymea-plugin-espsomfyrts.install.in new file mode 120000 index 00000000..bdd8bec9 --- /dev/null +++ b/debian-qt6/nymea-plugin-espsomfyrts.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-espsomfyrts.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-espuino.install.in b/debian-qt6/nymea-plugin-espuino.install.in new file mode 120000 index 00000000..bf330269 --- /dev/null +++ b/debian-qt6/nymea-plugin-espuino.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-espuino.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-evbox.install.in b/debian-qt6/nymea-plugin-evbox.install.in new file mode 120000 index 00000000..0a55e87f --- /dev/null +++ b/debian-qt6/nymea-plugin-evbox.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-evbox.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-everest.install.in b/debian-qt6/nymea-plugin-everest.install.in new file mode 120000 index 00000000..d4cd59b1 --- /dev/null +++ b/debian-qt6/nymea-plugin-everest.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-everest.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-flowercare.install.in b/debian-qt6/nymea-plugin-flowercare.install.in new file mode 120000 index 00000000..b68f0306 --- /dev/null +++ b/debian-qt6/nymea-plugin-flowercare.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-flowercare.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-fronius.install.in b/debian-qt6/nymea-plugin-fronius.install.in new file mode 120000 index 00000000..4fa191e4 --- /dev/null +++ b/debian-qt6/nymea-plugin-fronius.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-fronius.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-garadget.install.in b/debian-qt6/nymea-plugin-garadget.install.in new file mode 120000 index 00000000..18bd61a1 --- /dev/null +++ b/debian-qt6/nymea-plugin-garadget.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-garadget.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-goecharger.install.in b/debian-qt6/nymea-plugin-goecharger.install.in new file mode 120000 index 00000000..ec759ff6 --- /dev/null +++ b/debian-qt6/nymea-plugin-goecharger.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-goecharger.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-gpio.install.in b/debian-qt6/nymea-plugin-gpio.install.in new file mode 120000 index 00000000..a73c419c --- /dev/null +++ b/debian-qt6/nymea-plugin-gpio.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-gpio.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-homeconnect.install.in b/debian-qt6/nymea-plugin-homeconnect.install.in new file mode 120000 index 00000000..5c35d770 --- /dev/null +++ b/debian-qt6/nymea-plugin-homeconnect.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-homeconnect.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-httpcommander.install.in b/debian-qt6/nymea-plugin-httpcommander.install.in new file mode 120000 index 00000000..2325f708 --- /dev/null +++ b/debian-qt6/nymea-plugin-httpcommander.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-httpcommander.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-i2cdevices.install.in b/debian-qt6/nymea-plugin-i2cdevices.install.in new file mode 120000 index 00000000..4a7b37c0 --- /dev/null +++ b/debian-qt6/nymea-plugin-i2cdevices.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-i2cdevices.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-keba.install.in b/debian-qt6/nymea-plugin-keba.install.in new file mode 120000 index 00000000..4fa53c2f --- /dev/null +++ b/debian-qt6/nymea-plugin-keba.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-keba.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-kodi.install.in b/debian-qt6/nymea-plugin-kodi.install.in new file mode 120000 index 00000000..5afb4f74 --- /dev/null +++ b/debian-qt6/nymea-plugin-kodi.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-kodi.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-lgsmarttv.install.in b/debian-qt6/nymea-plugin-lgsmarttv.install.in new file mode 120000 index 00000000..1a3cc855 --- /dev/null +++ b/debian-qt6/nymea-plugin-lgsmarttv.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-lgsmarttv.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-lifx.install.in b/debian-qt6/nymea-plugin-lifx.install.in new file mode 120000 index 00000000..ebcbe150 --- /dev/null +++ b/debian-qt6/nymea-plugin-lifx.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-lifx.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-logilink.install.in b/debian-qt6/nymea-plugin-logilink.install.in new file mode 120000 index 00000000..95b7b9a8 --- /dev/null +++ b/debian-qt6/nymea-plugin-logilink.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-logilink.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-mailnotification.install.in b/debian-qt6/nymea-plugin-mailnotification.install.in new file mode 120000 index 00000000..92baefb7 --- /dev/null +++ b/debian-qt6/nymea-plugin-mailnotification.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-mailnotification.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-mecelectronics.install.in b/debian-qt6/nymea-plugin-mecelectronics.install.in new file mode 120000 index 00000000..83e63952 --- /dev/null +++ b/debian-qt6/nymea-plugin-mecelectronics.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-mecelectronics.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-meross.install.in b/debian-qt6/nymea-plugin-meross.install.in new file mode 120000 index 00000000..0b5e4fc4 --- /dev/null +++ b/debian-qt6/nymea-plugin-meross.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-meross.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-mqttclient.install.in b/debian-qt6/nymea-plugin-mqttclient.install.in new file mode 120000 index 00000000..a56d64d1 --- /dev/null +++ b/debian-qt6/nymea-plugin-mqttclient.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-mqttclient.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-mystrom.install.in b/debian-qt6/nymea-plugin-mystrom.install.in new file mode 120000 index 00000000..d1249bec --- /dev/null +++ b/debian-qt6/nymea-plugin-mystrom.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-mystrom.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-nanoleaf.install.in b/debian-qt6/nymea-plugin-nanoleaf.install.in new file mode 120000 index 00000000..8b9036ad --- /dev/null +++ b/debian-qt6/nymea-plugin-nanoleaf.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-nanoleaf.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-netatmo.install.in b/debian-qt6/nymea-plugin-netatmo.install.in new file mode 120000 index 00000000..f9f01f63 --- /dev/null +++ b/debian-qt6/nymea-plugin-netatmo.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-netatmo.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-networkdetector.install.in b/debian-qt6/nymea-plugin-networkdetector.install.in new file mode 120000 index 00000000..3a0e0dd3 --- /dev/null +++ b/debian-qt6/nymea-plugin-networkdetector.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-networkdetector.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-notifyevents.install.in b/debian-qt6/nymea-plugin-notifyevents.install.in new file mode 120000 index 00000000..771d1ce0 --- /dev/null +++ b/debian-qt6/nymea-plugin-notifyevents.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-notifyevents.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-nuki.install.in b/debian-qt6/nymea-plugin-nuki.install.in new file mode 120000 index 00000000..a1bfd87f --- /dev/null +++ b/debian-qt6/nymea-plugin-nuki.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-nuki.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-onewire.install.in b/debian-qt6/nymea-plugin-onewire.install.in new file mode 120000 index 00000000..435b6153 --- /dev/null +++ b/debian-qt6/nymea-plugin-onewire.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-onewire.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-openuv.install.in b/debian-qt6/nymea-plugin-openuv.install.in new file mode 120000 index 00000000..493a6d49 --- /dev/null +++ b/debian-qt6/nymea-plugin-openuv.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-openuv.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-openweathermap.install.in b/debian-qt6/nymea-plugin-openweathermap.install.in new file mode 120000 index 00000000..57ab1847 --- /dev/null +++ b/debian-qt6/nymea-plugin-openweathermap.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-openweathermap.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-osdomotics.install.in b/debian-qt6/nymea-plugin-osdomotics.install.in new file mode 120000 index 00000000..055fca38 --- /dev/null +++ b/debian-qt6/nymea-plugin-osdomotics.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-osdomotics.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-philipshue.install.in b/debian-qt6/nymea-plugin-philipshue.install.in new file mode 120000 index 00000000..8801c430 --- /dev/null +++ b/debian-qt6/nymea-plugin-philipshue.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-philipshue.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-powerfox.install.in b/debian-qt6/nymea-plugin-powerfox.install.in new file mode 120000 index 00000000..83330968 --- /dev/null +++ b/debian-qt6/nymea-plugin-powerfox.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-powerfox.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-pushbullet.install.in b/debian-qt6/nymea-plugin-pushbullet.install.in new file mode 120000 index 00000000..2c2e741f --- /dev/null +++ b/debian-qt6/nymea-plugin-pushbullet.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-pushbullet.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-pushnotifications.install.in b/debian-qt6/nymea-plugin-pushnotifications.install.in new file mode 120000 index 00000000..4291f583 --- /dev/null +++ b/debian-qt6/nymea-plugin-pushnotifications.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-pushnotifications.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-reversessh.install.in b/debian-qt6/nymea-plugin-reversessh.install.in new file mode 120000 index 00000000..90a99c44 --- /dev/null +++ b/debian-qt6/nymea-plugin-reversessh.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-reversessh.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-senic.install.in b/debian-qt6/nymea-plugin-senic.install.in new file mode 120000 index 00000000..1c4b9a17 --- /dev/null +++ b/debian-qt6/nymea-plugin-senic.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-senic.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-serialportcommander.install.in b/debian-qt6/nymea-plugin-serialportcommander.install.in new file mode 120000 index 00000000..a14364ac --- /dev/null +++ b/debian-qt6/nymea-plugin-serialportcommander.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-serialportcommander.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-sgready.install.in b/debian-qt6/nymea-plugin-sgready.install.in new file mode 120000 index 00000000..54e2bf48 --- /dev/null +++ b/debian-qt6/nymea-plugin-sgready.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-sgready.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-shelly.install.in b/debian-qt6/nymea-plugin-shelly.install.in new file mode 120000 index 00000000..d6e7074e --- /dev/null +++ b/debian-qt6/nymea-plugin-shelly.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-shelly.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-simpleheatpump.install.in b/debian-qt6/nymea-plugin-simpleheatpump.install.in new file mode 120000 index 00000000..b6727224 --- /dev/null +++ b/debian-qt6/nymea-plugin-simpleheatpump.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-simpleheatpump.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-solarlog.install.in b/debian-qt6/nymea-plugin-solarlog.install.in new file mode 120000 index 00000000..5c0fe2b0 --- /dev/null +++ b/debian-qt6/nymea-plugin-solarlog.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-solarlog.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-somfytahoma.install.in b/debian-qt6/nymea-plugin-somfytahoma.install.in new file mode 120000 index 00000000..eb7b5c76 --- /dev/null +++ b/debian-qt6/nymea-plugin-somfytahoma.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-somfytahoma.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-sonos.install.in b/debian-qt6/nymea-plugin-sonos.install.in new file mode 120000 index 00000000..539b3147 --- /dev/null +++ b/debian-qt6/nymea-plugin-sonos.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-sonos.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-spothinta.install.in b/debian-qt6/nymea-plugin-spothinta.install.in new file mode 120000 index 00000000..0651e7fb --- /dev/null +++ b/debian-qt6/nymea-plugin-spothinta.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-spothinta.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-systemmonitor.install.in b/debian-qt6/nymea-plugin-systemmonitor.install.in new file mode 120000 index 00000000..ef29876b --- /dev/null +++ b/debian-qt6/nymea-plugin-systemmonitor.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-systemmonitor.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-tado.install.in b/debian-qt6/nymea-plugin-tado.install.in new file mode 120000 index 00000000..36c4573b --- /dev/null +++ b/debian-qt6/nymea-plugin-tado.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-tado.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-tasmota.install.in b/debian-qt6/nymea-plugin-tasmota.install.in new file mode 120000 index 00000000..5212020c --- /dev/null +++ b/debian-qt6/nymea-plugin-tasmota.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-tasmota.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-tcpcommander.install.in b/debian-qt6/nymea-plugin-tcpcommander.install.in new file mode 120000 index 00000000..790b52f0 --- /dev/null +++ b/debian-qt6/nymea-plugin-tcpcommander.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-tcpcommander.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-telegram.install.in b/debian-qt6/nymea-plugin-telegram.install.in new file mode 120000 index 00000000..991b427d --- /dev/null +++ b/debian-qt6/nymea-plugin-telegram.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-telegram.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-tempo.install.in b/debian-qt6/nymea-plugin-tempo.install.in new file mode 120000 index 00000000..5170cc1e --- /dev/null +++ b/debian-qt6/nymea-plugin-tempo.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-tempo.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-texasinstruments.install.in b/debian-qt6/nymea-plugin-texasinstruments.install.in new file mode 120000 index 00000000..3713bf26 --- /dev/null +++ b/debian-qt6/nymea-plugin-texasinstruments.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-texasinstruments.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-tmate.install.in b/debian-qt6/nymea-plugin-tmate.install.in new file mode 120000 index 00000000..50b70445 --- /dev/null +++ b/debian-qt6/nymea-plugin-tmate.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-tmate.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-tplink.install.in b/debian-qt6/nymea-plugin-tplink.install.in new file mode 120000 index 00000000..3d9265aa --- /dev/null +++ b/debian-qt6/nymea-plugin-tplink.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-tplink.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-tuya.install.in b/debian-qt6/nymea-plugin-tuya.install.in new file mode 120000 index 00000000..bc7016af --- /dev/null +++ b/debian-qt6/nymea-plugin-tuya.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-tuya.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-udpcommander.install.in b/debian-qt6/nymea-plugin-udpcommander.install.in new file mode 120000 index 00000000..86f28915 --- /dev/null +++ b/debian-qt6/nymea-plugin-udpcommander.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-udpcommander.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-unifi.install.in b/debian-qt6/nymea-plugin-unifi.install.in new file mode 120000 index 00000000..64d2144b --- /dev/null +++ b/debian-qt6/nymea-plugin-unifi.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-unifi.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-usbrelay.install.in b/debian-qt6/nymea-plugin-usbrelay.install.in new file mode 120000 index 00000000..9dbf9620 --- /dev/null +++ b/debian-qt6/nymea-plugin-usbrelay.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-usbrelay.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-usbrly82.install.in b/debian-qt6/nymea-plugin-usbrly82.install.in new file mode 120000 index 00000000..12fa8dd6 --- /dev/null +++ b/debian-qt6/nymea-plugin-usbrly82.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-usbrly82.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-v2xeamberelectric.install.in b/debian-qt6/nymea-plugin-v2xeamberelectric.install.in new file mode 120000 index 00000000..ba4a33e3 --- /dev/null +++ b/debian-qt6/nymea-plugin-v2xeamberelectric.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-v2xeamberelectric.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-wakeonlan.install.in b/debian-qt6/nymea-plugin-wakeonlan.install.in new file mode 120000 index 00000000..ef2e5d62 --- /dev/null +++ b/debian-qt6/nymea-plugin-wakeonlan.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-wakeonlan.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-wemo.install.in b/debian-qt6/nymea-plugin-wemo.install.in new file mode 120000 index 00000000..6fc913e5 --- /dev/null +++ b/debian-qt6/nymea-plugin-wemo.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-wemo.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-wheretheissat.install.in b/debian-qt6/nymea-plugin-wheretheissat.install.in new file mode 120000 index 00000000..cdf93901 --- /dev/null +++ b/debian-qt6/nymea-plugin-wheretheissat.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-wheretheissat.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugin-ws2812fx.install.in b/debian-qt6/nymea-plugin-ws2812fx.install.in new file mode 120000 index 00000000..923b4555 --- /dev/null +++ b/debian-qt6/nymea-plugin-ws2812fx.install.in @@ -0,0 +1 @@ +../debian-qt5/nymea-plugin-ws2812fx.install.in \ No newline at end of file diff --git a/debian-qt6/nymea-plugins-translations.dirs b/debian-qt6/nymea-plugins-translations.dirs new file mode 120000 index 00000000..fa520190 --- /dev/null +++ b/debian-qt6/nymea-plugins-translations.dirs @@ -0,0 +1 @@ +../debian-qt5/nymea-plugins-translations.dirs \ No newline at end of file diff --git a/debian-qt6/rules b/debian-qt6/rules new file mode 100755 index 00000000..9823ee20 --- /dev/null +++ b/debian-qt6/rules @@ -0,0 +1,29 @@ +#!/usr/bin/make -f +# -*- makefile -*- + +export DH_VERBOSE=1 +export QT_QPA_PLATFORM=minimal + +DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH) + +PREPROCESS_FILES := $(wildcard debian/*.in) + +$(PREPROCESS_FILES:.in=): %: %.in + sed 's,/@DEB_HOST_MULTIARCH@,$(DEB_HOST_MULTIARCH:%=/%),g' $< > $@ + +override_dh_auto_build: + dh_auto_build + make lrelease + +override_dh_install: $(PREPROCESS_FILES:.in=) + dh_install + +override_dh_auto_clean: + dh_auto_clean + find -name *plugininfo.h -exec rm {} \; + find -name *.qm -exec rm {} \; + rm -rf $(PREPROCESS_FILES:.in=) + +%: + dh $@ --buildsystem=qmake6 --parallel + diff --git a/debian-qt6/source b/debian-qt6/source new file mode 120000 index 00000000..1eac8ea4 --- /dev/null +++ b/debian-qt6/source @@ -0,0 +1 @@ +../debian-qt5/source \ No newline at end of file From feb80fb1132825010b81146c24df019b5dfe8c24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Thu, 21 Aug 2025 12:47:20 +0200 Subject: [PATCH 81/82] Update deprecated version check for error signals --- denon/avrconnection.cpp | 3 +-- denon/heos.cpp | 2 +- eq-3/maxcube.cpp | 2 +- keba/kecontactdatalayer.cpp | 2 +- kodi/kodiconnection.cpp | 2 +- mailnotification/smtpclient.cpp | 2 +- serialportcommander/integrationpluginserialportcommander.cpp | 2 +- tcpcommander/tcpserver.cpp | 3 +-- usbrly82/usbrly82.cpp | 2 +- ws2812fx/integrationpluginws2812fx.cpp | 2 +- 10 files changed, 10 insertions(+), 12 deletions(-) diff --git a/denon/avrconnection.cpp b/denon/avrconnection.cpp index e2016694..53c53123 100644 --- a/denon/avrconnection.cpp +++ b/denon/avrconnection.cpp @@ -41,10 +41,9 @@ AvrConnection::AvrConnection(const QHostAddress &hostAddress, const int &port, Q connect(m_socket, &QTcpSocket::connected, this, &AvrConnection::onConnected); connect(m_socket, &QTcpSocket::disconnected, this, &AvrConnection::onDisconnected); connect(m_socket, &QTcpSocket::readyRead, this, &AvrConnection::readData); -#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) +#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) connect(m_socket, &QTcpSocket::errorOccurred, this, &AvrConnection::onError); #else - // Note: error signal will be interpreted as function, not as signal in C++11 connect(m_socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onError(QAbstractSocket::SocketError))); #endif diff --git a/denon/heos.cpp b/denon/heos.cpp index 2c179d17..406aaef9 100644 --- a/denon/heos.cpp +++ b/denon/heos.cpp @@ -50,7 +50,7 @@ Heos::Heos(const QHostAddress &hostAddress, QObject *parent) : connect(m_socket, &QTcpSocket::connected, this, &Heos::onConnected); connect(m_socket, &QTcpSocket::disconnected, this, &Heos::onDisconnected); connect(m_socket, &QTcpSocket::readyRead, this, &Heos::readData); -#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) +#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) connect(m_socket, &QTcpSocket::errorOccurred, this, &Heos::onError); #else connect(m_socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onError(QAbstractSocket::SocketError))); diff --git a/eq-3/maxcube.cpp b/eq-3/maxcube.cpp index e10da4ee..965d4e10 100644 --- a/eq-3/maxcube.cpp +++ b/eq-3/maxcube.cpp @@ -40,7 +40,7 @@ MaxCube::MaxCube(QObject *parent, QString serialNumber, QHostAddress hostAdress, connect(this, &MaxCube::stateChanged, this, &MaxCube::connectionStateChanged); connect(this, &MaxCube::readyRead, this, &MaxCube::onReadyRead); connect(this, &MaxCube::cubeDataAvailable, this, &MaxCube::processCubeData); -#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) +#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) connect(this, &MaxCube::errorOccurred, this, &MaxCube::onTcpError); #else connect(this, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onTcpError(QAbstractSocket::SocketError))); diff --git a/keba/kecontactdatalayer.cpp b/keba/kecontactdatalayer.cpp index a60e5c1c..7e27c200 100644 --- a/keba/kecontactdatalayer.cpp +++ b/keba/kecontactdatalayer.cpp @@ -37,7 +37,7 @@ KeContactDataLayer::KeContactDataLayer(QObject *parent) : QObject(parent) m_udpSocket = new QUdpSocket(this); connect(m_udpSocket, &QUdpSocket::readyRead, this, &KeContactDataLayer::readPendingDatagrams); connect(m_udpSocket, &QUdpSocket::stateChanged, this, &KeContactDataLayer::onSocketStateChanged); -#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) +#if QT_VERSION >= QT_VERSION_CHECK(5 , 15, 0) connect(m_udpSocket, &QUdpSocket::errorOccurred, this, &KeContactDataLayer::onSocketError); #else connect(m_udpSocket, SIGNAL(error(QAbstractSocket::SocketError)),this, SLOT(onSocketError(QAbstractSocket::SocketError))); diff --git a/kodi/kodiconnection.cpp b/kodi/kodiconnection.cpp index 20580677..45a2719b 100644 --- a/kodi/kodiconnection.cpp +++ b/kodi/kodiconnection.cpp @@ -43,7 +43,7 @@ KodiConnection::KodiConnection(const QHostAddress &hostAddress, int port, QObjec connect(m_socket, &QTcpSocket::connected, this, &KodiConnection::onConnected); connect(m_socket, &QTcpSocket::disconnected, this, &KodiConnection::onDisconnected); -#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) +#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) connect(m_socket, &QTcpSocket::errorOccurred, this, &KodiConnection::onError); #else connect(m_socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onError(QAbstractSocket::SocketError))); diff --git a/mailnotification/smtpclient.cpp b/mailnotification/smtpclient.cpp index cac5b5a5..6e497f31 100644 --- a/mailnotification/smtpclient.cpp +++ b/mailnotification/smtpclient.cpp @@ -42,7 +42,7 @@ SmtpClient::SmtpClient(QObject *parent): connect(m_socket, &QSslSocket::readyRead, this, &SmtpClient::readData); connect(m_socket, &QSslSocket::disconnected, this, &SmtpClient::disconnected); connect(m_socket, &QSslSocket::encrypted, this, &SmtpClient::onEncrypted); -#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) +#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) connect(m_socket, &QTcpSocket::errorOccurred, this, &SmtpClient::onSocketError); #else connect(m_socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onSocketError(QAbstractSocket::SocketError))); diff --git a/serialportcommander/integrationpluginserialportcommander.cpp b/serialportcommander/integrationpluginserialportcommander.cpp index 93feab53..32c4f156 100644 --- a/serialportcommander/integrationpluginserialportcommander.cpp +++ b/serialportcommander/integrationpluginserialportcommander.cpp @@ -109,7 +109,7 @@ void IntegrationPluginSerialPortCommander::setupThing(ThingSetupInfo *info) return info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Could not open serial port.")); } -#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) +#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) connect(serialPort, &QSerialPort::errorOccurred, this, &IntegrationPluginSerialPortCommander::onSerialError); #else connect(serialPort, SIGNAL(error(QSerialPort::SerialPortError)), this, SLOT(onSerialError(QSerialPort::SerialPortError))); diff --git a/tcpcommander/tcpserver.cpp b/tcpcommander/tcpserver.cpp index 9b080378..5b6d3a3c 100644 --- a/tcpcommander/tcpserver.cpp +++ b/tcpcommander/tcpserver.cpp @@ -121,10 +121,9 @@ void TcpServer::newConnection() emit connectionCountChanged(m_clients.count()); connect(socket, &QTcpSocket::disconnected, this, &TcpServer::onDisconnected); connect(socket, &QTcpSocket::readyRead, this, &TcpServer::readData); -#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) +#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) connect(socket, &QTcpSocket::errorOccurred, this, &TcpServer::onError); #else - // Note: error signal will be interpreted as function, not as signal in C++11 connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onError(QAbstractSocket::SocketError))); #endif } diff --git a/usbrly82/usbrly82.cpp b/usbrly82/usbrly82.cpp index 656d8efb..e06f6aa6 100644 --- a/usbrly82/usbrly82.cpp +++ b/usbrly82/usbrly82.cpp @@ -192,7 +192,7 @@ bool UsbRly82::connectRelay(const QString &serialPort) } connect(m_serialPort, &QSerialPort::readyRead, this, &UsbRly82::onReadyRead); -#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) +#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) connect(m_serialPort, &QSerialPort::errorOccurred, this, &UsbRly82::onError, Qt::QueuedConnection); #else connect(m_serialPort, SIGNAL(error(QSerialPort::SerialPortError)), this, SLOT(onError(QSerialPort::SerialPortError)), Qt::QueuedConnection); diff --git a/ws2812fx/integrationpluginws2812fx.cpp b/ws2812fx/integrationpluginws2812fx.cpp index 3e2b77b3..b2f6d9dd 100644 --- a/ws2812fx/integrationpluginws2812fx.cpp +++ b/ws2812fx/integrationpluginws2812fx.cpp @@ -78,7 +78,7 @@ void IntegrationPluginWs2812fx::setupThing(ThingSetupInfo *info) return info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Error opening serial port.")); } -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) +#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) connect(serialPort, &QSerialPort::errorOccurred, this, &IntegrationPluginWs2812fx::onSerialError); #else connect(serialPort, SIGNAL(error(QSerialPort::SerialPortError)), this, SLOT(onSerialError(QSerialPort::SerialPortError))); From b6709719799fd49ec68a9e52c816db3315199ea4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Thu, 21 Aug 2025 15:27:13 +0200 Subject: [PATCH 82/82] Consider QSerialPort::error deprecation properly --- evbox/evboxport.cpp | 2 +- serialportcommander/integrationpluginserialportcommander.cpp | 2 +- tplink/integrationplugintplink.cpp | 2 +- usbrly82/usbrly82.cpp | 2 +- ws2812fx/integrationpluginws2812fx.cpp | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/evbox/evboxport.cpp b/evbox/evboxport.cpp index 9f8114c5..c3a1bec5 100644 --- a/evbox/evboxport.cpp +++ b/evbox/evboxport.cpp @@ -48,7 +48,7 @@ EVBoxPort::EVBoxPort(const QString &portName, QObject *parent) m_serialPort->setParity(QSerialPort::NoParity); connect(m_serialPort, &QSerialPort::readyRead, this, &EVBoxPort::onReadyRead); -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) +#if QT_VERSION >= QT_VERSION_CHECK(5, 8, 0) connect(m_serialPort, &QSerialPort::errorOccurred, this, [this](){ #else connect(m_serialPort, static_cast(&QSerialPort::error), this, [=](){ diff --git a/serialportcommander/integrationpluginserialportcommander.cpp b/serialportcommander/integrationpluginserialportcommander.cpp index 32c4f156..3acbf483 100644 --- a/serialportcommander/integrationpluginserialportcommander.cpp +++ b/serialportcommander/integrationpluginserialportcommander.cpp @@ -109,7 +109,7 @@ void IntegrationPluginSerialPortCommander::setupThing(ThingSetupInfo *info) return info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Could not open serial port.")); } -#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) +#if QT_VERSION >= QT_VERSION_CHECK(5, 8, 0) connect(serialPort, &QSerialPort::errorOccurred, this, &IntegrationPluginSerialPortCommander::onSerialError); #else connect(serialPort, SIGNAL(error(QSerialPort::SerialPortError)), this, SLOT(onSerialError(QSerialPort::SerialPortError))); diff --git a/tplink/integrationplugintplink.cpp b/tplink/integrationplugintplink.cpp index f0cabcf4..6ec038fd 100644 --- a/tplink/integrationplugintplink.cpp +++ b/tplink/integrationplugintplink.cpp @@ -423,7 +423,7 @@ void IntegrationPluginTPLink::connectToDevice(Thing *thing, const QHostAddress & fetchState(thing); }); -#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) +#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) connect(socket, &QTcpSocket::errorOccurred, this, [](QAbstractSocket::SocketError error){ #else typedef void (QTcpSocket:: *errorSignal)(QAbstractSocket::SocketError); diff --git a/usbrly82/usbrly82.cpp b/usbrly82/usbrly82.cpp index e06f6aa6..dc975ae7 100644 --- a/usbrly82/usbrly82.cpp +++ b/usbrly82/usbrly82.cpp @@ -192,7 +192,7 @@ bool UsbRly82::connectRelay(const QString &serialPort) } connect(m_serialPort, &QSerialPort::readyRead, this, &UsbRly82::onReadyRead); -#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) +#if QT_VERSION >= QT_VERSION_CHECK(5, 8, 0) connect(m_serialPort, &QSerialPort::errorOccurred, this, &UsbRly82::onError, Qt::QueuedConnection); #else connect(m_serialPort, SIGNAL(error(QSerialPort::SerialPortError)), this, SLOT(onError(QSerialPort::SerialPortError)), Qt::QueuedConnection); diff --git a/ws2812fx/integrationpluginws2812fx.cpp b/ws2812fx/integrationpluginws2812fx.cpp index b2f6d9dd..8aab821e 100644 --- a/ws2812fx/integrationpluginws2812fx.cpp +++ b/ws2812fx/integrationpluginws2812fx.cpp @@ -78,7 +78,7 @@ void IntegrationPluginWs2812fx::setupThing(ThingSetupInfo *info) return info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Error opening serial port.")); } -#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) +#if QT_VERSION >= QT_VERSION_CHECK(5, 8, 0) connect(serialPort, &QSerialPort::errorOccurred, this, &IntegrationPluginWs2812fx::onSerialError); #else connect(serialPort, SIGNAL(error(QSerialPort::SerialPortError)), this, SLOT(onSerialError(QSerialPort::SerialPortError)));