diff --git a/libguh/libguh.pro b/libguh/libguh.pro
index cf1860c8..df846d8a 100644
--- a/libguh/libguh.pro
+++ b/libguh/libguh.pro
@@ -18,7 +18,7 @@ SOURCES += plugin/device.cpp \
types/statetype.cpp \
types/eventtype.cpp \
types/event.cpp \
- types/vendor.cpp
+ types/vendor.cpp
HEADERS += plugin/device.h \
plugin/deviceclass.h \
@@ -33,5 +33,5 @@ HEADERS += plugin/device.h \
types/eventtype.h \
types/event.h \
types/vendor.h \
- types/typeutils.h
+ types/typeutils.h
diff --git a/plugins/deviceplugins/deviceplugins.pro b/plugins/deviceplugins/deviceplugins.pro
index dbde40b1..078a0651 100644
--- a/plugins/deviceplugins/deviceplugins.pro
+++ b/plugins/deviceplugins/deviceplugins.pro
@@ -1,10 +1,11 @@
TEMPLATE = subdirs
SUBDIRS += elro \
intertechno \
- meisteranker \
+# meisteranker \
wifidetector \
conrad \
mock \
- weatherground \
+# weatherground \
+ openweathermap \
# boblight \
diff --git a/plugins/deviceplugins/openweathermap/devicepluginopenweathermap.cpp b/plugins/deviceplugins/openweathermap/devicepluginopenweathermap.cpp
new file mode 100644
index 00000000..08e56589
--- /dev/null
+++ b/plugins/deviceplugins/openweathermap/devicepluginopenweathermap.cpp
@@ -0,0 +1,186 @@
+/****************************************************************************
+ * *
+ * This file is part of guh. *
+ * *
+ * Guh is free software: you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, version 2 of the License. *
+ * *
+ * Guh 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 General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with guh. If not, see . *
+ * *
+ ***************************************************************************/
+
+#include "devicepluginopenweathermap.h"
+
+#include "plugin/device.h"
+#include "devicemanager.h"
+
+#include
+#include
+#include
+#include
+
+
+VendorId openweathermapVendorId = VendorId("bf1e96f0-9650-4e7c-a56c-916d54d18e7a");
+
+DevicePluginOpenweathermap::DevicePluginOpenweathermap()
+{
+ m_openweaher = new OpenWeatherMap(this);
+}
+
+QList DevicePluginOpenweathermap::supportedVendors() const
+{
+ QList ret;
+ Vendor openweathermap(openweathermapVendorId, "openweathermap");
+ ret.append(openweathermap);
+ return ret;
+}
+
+QList DevicePluginOpenweathermap::supportedDevices() const
+{
+ QList ret;
+
+ DeviceClass deviceClassOpenweathermap(pluginId(), openweathermapVendorId, DeviceClassId("985195aa-17ad-4530-88a4-cdd753d747d7"));
+ deviceClassOpenweathermap.setName("Weather from openweathermap");
+
+ QVariantList weatherParams;
+ QVariantMap autoDetectParam;
+ autoDetectParam.insert("name", "autodetect");
+ autoDetectParam.insert("type", "bool");
+ weatherParams.append(autoDetectParam);
+
+ // Actions
+ QList weatherActions;
+ ActionType updateWeather(ActionTypeId("cfbc6504-d86f-4856-8dfa-97b6fbb385e4"));
+ updateWeather.setName("refresh");
+ weatherActions.append(updateWeather);
+
+ // States
+ QList weatherStates;
+ StateType cityNameState(StateTypeId("fd9e7b7f-cf1f-4093-8f6d-fff5b223471f"));
+ cityNameState.setName("city name");
+ cityNameState.setType(QVariant::String);
+ cityNameState.setDefaultValue("");
+ weatherStates.append(cityNameState);
+
+ StateType cityIdState(StateTypeId("c6ef1c07-e817-4251-b83d-115bbf6f0ae9"));
+ cityIdState.setName("city id");
+ cityIdState.setType(QVariant::String);
+ cityIdState.setDefaultValue("");
+ weatherStates.append(cityIdState);
+
+ StateType countryNameState(StateTypeId("0e607a5f-1938-4e77-a146-15e9ad15bfad"));
+ countryNameState.setName("country name");
+ countryNameState.setType(QVariant::String);
+ countryNameState.setDefaultValue("");
+ weatherStates.append(countryNameState);
+
+ StateType updateTimeState(StateTypeId("98e48095-87da-47a4-b812-28c6c17a3e76"));
+ updateTimeState.setName("last update [unixtime]");
+ updateTimeState.setType(QVariant::UInt);
+ updateTimeState.setDefaultValue(0);
+ weatherStates.append(updateTimeState);
+
+ StateType temperatureState(StateTypeId("2f949fa3-ff21-4721-87ec-0a5c9d0a5b8a"));
+ temperatureState.setName("temperature [°C]");
+ temperatureState.setType(QVariant::Double);
+ temperatureState.setDefaultValue(-999.9);
+ weatherStates.append(temperatureState);
+
+ StateType temperatureMinState(StateTypeId("701338b3-80de-4c95-8abf-26f44529d620"));
+ temperatureMinState.setName("temperature minimum [Celsius]");
+ temperatureMinState.setType(QVariant::Double);
+ temperatureMinState.setDefaultValue(-999.9);
+ weatherStates.append(temperatureMinState);
+
+ StateType temperatureMaxState(StateTypeId("f69bedd2-c997-4a7d-9242-76bf2aab3d3d"));
+ temperatureMaxState.setName("temperature maximum [Celsius]");
+ temperatureMaxState.setType(QVariant::Double);
+ temperatureMaxState.setDefaultValue(999.9);
+ weatherStates.append(temperatureMaxState);
+
+ StateType humidityState(StateTypeId("3f01c9f0-206b-4477-afa2-80d6e5e54fbb"));
+ humidityState.setName("humidity [%]");
+ humidityState.setType(QVariant::Int);
+ humidityState.setDefaultValue(-1);
+ weatherStates.append(humidityState);
+
+ StateType pressureState(StateTypeId("6a57b6e9-7010-4a89-982c-ce0bc2a71f11"));
+ pressureState.setName("pressure [hPa]");
+ pressureState.setType(QVariant::Double);
+ pressureState.setDefaultValue(-1);
+ weatherStates.append(pressureState);
+
+ StateType windSpeedState(StateTypeId("12dc85a9-825d-4375-bef4-abd66e9e301b"));
+ windSpeedState.setName("wind speed [m/s]");
+ windSpeedState.setType(QVariant::Double);
+ windSpeedState.setDefaultValue(-1);
+ weatherStates.append(windSpeedState);
+
+ StateType windDirectionState(StateTypeId("a8b0383c-d615-41fe-82b8-9b797f045cc9"));
+ windDirectionState.setName("wind direction [°]");
+ windDirectionState.setType(QVariant::Int);
+ windDirectionState.setDefaultValue(-1);
+ weatherStates.append(windDirectionState);
+
+ StateType cloudinessState(StateTypeId("0c1dc881-560e-40ac-a4a1-9ab69138cfe3"));
+ cloudinessState.setName("cloudiness [%]");
+ cloudinessState.setType(QVariant::Int);
+ cloudinessState.setDefaultValue(-1);
+ weatherStates.append(cloudinessState);
+
+ StateType weatherDescriptionState(StateTypeId("e71d98e3-ebd8-4abf-ad25-9ecc2d05276a"));
+ weatherDescriptionState.setName("weather description");
+ weatherDescriptionState.setType(QVariant::String);
+ weatherDescriptionState.setDefaultValue("");
+ weatherStates.append(weatherDescriptionState);
+
+ StateType sunsetState(StateTypeId("5dd6f5a3-25d6-4e60-82ca-e934ad76a4b6"));
+ sunsetState.setName("sunset [unixtime]");
+ sunsetState.setType(QVariant::UInt);
+ sunsetState.setDefaultValue(0);
+ weatherStates.append(sunsetState);
+
+ StateType sunriseState(StateTypeId("413b3fc6-bd1c-46fb-8c86-03096254f94f"));
+ sunriseState.setName("sunrise [unixtime]");
+ sunriseState.setType(QVariant::UInt);
+ sunriseState.setDefaultValue(0);
+ weatherStates.append(sunriseState);
+
+ //Events
+
+
+ deviceClassOpenweathermap.setActions(weatherActions);
+ deviceClassOpenweathermap.setStates(weatherStates);
+
+ ret.append(deviceClassOpenweathermap);
+ return ret;
+}
+
+DeviceManager::HardwareResources DevicePluginOpenweathermap::requiredHardware() const
+{
+ return DeviceManager::HardwareResourceTimer;
+}
+
+QString DevicePluginOpenweathermap::pluginName() const
+{
+ return "Openweathermap";
+}
+
+QUuid DevicePluginOpenweathermap::pluginId() const
+{
+ return QUuid("bc6af567-2338-41d5-aac1-462dec6e4783");
+}
+
+void DevicePluginOpenweathermap::guhTimer()
+{
+ m_openweaher->update();
+}
+
+
diff --git a/plugins/deviceplugins/openweathermap/devicepluginopenweathermap.h b/plugins/deviceplugins/openweathermap/devicepluginopenweathermap.h
new file mode 100644
index 00000000..9c793f45
--- /dev/null
+++ b/plugins/deviceplugins/openweathermap/devicepluginopenweathermap.h
@@ -0,0 +1,54 @@
+/****************************************************************************
+ * *
+ * This file is part of guh. *
+ * *
+ * Guh is free software: you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, version 2 of the License. *
+ * *
+ * Guh 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 General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with guh. If not, see . *
+ * *
+ ***************************************************************************/
+
+#ifndef DEVICEPLUGINOPENWEATHERMAP_H
+#define DEVICEPLUGINOPENWEATHERMAP_H
+
+#include "plugin/deviceplugin.h"
+#include "openweathermap.h"
+
+
+class DevicePluginOpenweathermap : public DevicePlugin
+{
+ Q_OBJECT
+
+ Q_PLUGIN_METADATA(IID "org.guh.DevicePlugin" FILE "devicepluginopenweathermap.json")
+ Q_INTERFACES(DevicePlugin)
+
+public:
+ explicit DevicePluginOpenweathermap();
+
+ OpenWeatherMap *m_openweaher;
+
+ QList supportedVendors() const override;
+ QList supportedDevices() const override;
+ DeviceManager::HardwareResources requiredHardware() const override;
+
+ QString pluginName() const override;
+ QUuid pluginId() const override;
+
+ void guhTimer() override;
+
+private slots:
+
+public slots:
+
+
+};
+
+#endif // DEVICEPLUGINOPENWEATHERMAP_H
diff --git a/plugins/deviceplugins/openweathermap/devicepluginopenweathermap.json b/plugins/deviceplugins/openweathermap/devicepluginopenweathermap.json
new file mode 100644
index 00000000..0967ef42
--- /dev/null
+++ b/plugins/deviceplugins/openweathermap/devicepluginopenweathermap.json
@@ -0,0 +1 @@
+{}
diff --git a/plugins/deviceplugins/openweathermap/openweathermap.cpp b/plugins/deviceplugins/openweathermap/openweathermap.cpp
new file mode 100644
index 00000000..41fdbc3e
--- /dev/null
+++ b/plugins/deviceplugins/openweathermap/openweathermap.cpp
@@ -0,0 +1,223 @@
+#include "openweathermap.h"
+
+OpenWeatherMap::OpenWeatherMap(QObject *parent) :
+ QObject(parent)
+{
+ m_manager = new QNetworkAccessManager(this);
+
+ connect(m_manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*)));
+}
+
+void OpenWeatherMap::updateLocationData()
+{
+ QString urlString = "http://ip-api.com/json";
+ QNetworkRequest locationRequest;
+ locationRequest.setUrl(QUrl(urlString));
+
+ m_locationReplay = m_manager->get(locationRequest);
+}
+
+void OpenWeatherMap::updateSearchData()
+{
+ QString urlString = "http://api.openweathermap.org/data/2.5/find?q=" + m_cityName;
+ QNetworkRequest searchRequest;
+ searchRequest.setUrl(QUrl(urlString));
+
+ m_searchReplay = m_manager->get(searchRequest);
+}
+
+void OpenWeatherMap::updateWeatherData()
+{
+ QString urlString = "http://api.openweathermap.org/data/2.5/weather?id="+ m_cityId + "&mode=json&units=metric";
+ QNetworkRequest weatherRequest;
+ weatherRequest.setUrl(QUrl(urlString));
+
+ m_weatherReplay = m_manager->get(weatherRequest);
+}
+
+void OpenWeatherMap::processLocationResponse(QByteArray data)
+{
+ QJsonParseError error;
+ QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
+
+ if(error.error != QJsonParseError::NoError) {
+ qWarning() << "failed to parse data" << data << ":" << error.errorString();
+ }
+ //qDebug() << jsonDoc.toJson();
+
+ QVariantMap dataMap = jsonDoc.toVariant().toMap();
+ if(dataMap.contains("city")){
+ QString cityName = dataMap.value("city").toString();
+ if(m_cityName != cityName){
+ m_cityName = cityName;
+ updateSearchData();
+ return;
+ }else{
+ updateWeatherData();
+ return;
+ }
+ }
+}
+
+void OpenWeatherMap::processSearchResponse(QByteArray data)
+{
+ QJsonParseError error;
+ QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
+
+ if(error.error != QJsonParseError::NoError) {
+ qWarning() << "failed to parse data" << data << ":" << error.errorString();
+ }
+ //qDebug() << jsonDoc.toJson();
+
+ QVariantMap dataMap = jsonDoc.toVariant().toMap();
+ if(dataMap.contains("list")){
+ QVariantList list = dataMap.value("list").toList();
+ foreach (QVariant key, list) {
+ QVariantMap elemant = key.toMap();
+ if(elemant.contains("id")){
+ m_cityId = elemant.value("id").toString();
+ updateWeatherData();
+ return;
+ }
+ }
+ }
+}
+
+void OpenWeatherMap::processWeatherResponse(QByteArray data)
+{
+ QJsonParseError error;
+ QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
+
+ if(error.error != QJsonParseError::NoError) {
+ qWarning() << "failed to parse data" << data << ":" << error.errorString();
+ }
+ //qDebug() << jsonDoc.toJson();
+
+ QVariantMap dataMap = jsonDoc.toVariant().toMap();
+ if(dataMap.contains("clouds")){
+ int cloudiness = dataMap.value("clouds").toMap().value("all").toInt();
+ if(m_cloudiness != cloudiness){
+ m_cloudiness = cloudiness;
+ //emit cloudiness changed
+ }
+ }
+ if(dataMap.contains("dt")){
+ uint lastUpdate = dataMap.value("dt").toUInt();
+ if(m_lastUpdate != lastUpdate){
+ m_lastUpdate = lastUpdate;
+ // emit
+ }
+ }
+
+ if(dataMap.contains("main")){
+ double temperatur = dataMap.value("main").toMap().value("temp").toDouble();
+ if(m_temperatur != temperatur){
+ m_temperatur = temperatur;
+ // emit
+ }
+
+ double temperaturMax = dataMap.value("main").toMap().value("temp_max").toDouble();
+ if(m_temperaturMax != temperaturMax){
+ m_temperaturMax = temperaturMax;
+ // emit
+ }
+
+ double temperaturMin = dataMap.value("main").toMap().value("temp_min").toDouble();
+ if(m_temperaturMin != temperaturMin){
+ m_temperaturMin = temperaturMin;
+ // emit
+ }
+
+ double pressure = dataMap.value("main").toMap().value("pressure").toDouble();
+ if(m_pressure != pressure){
+ m_pressure = pressure;
+ //emit
+ }
+
+ int humidity = dataMap.value("main").toMap().value("humidity").toInt();
+ if(m_humidity != humidity){
+ m_humidity = humidity;
+ //emit
+ }
+ }
+
+ if(dataMap.contains("sys")){
+ uint sunrise = dataMap.value("sys").toMap().value("sunrise").toUInt();
+ if(m_sunrise != sunrise){
+ m_sunrise = sunrise;
+ // emit
+ }
+
+ uint sunset = dataMap.value("sys").toMap().value("sunset").toUInt();
+ if(m_sunset != sunset){
+ m_sunset = sunset;
+ // emit
+ }
+ }
+
+ if(dataMap.contains("weather")){
+ QString description = dataMap.value("weather").toMap().value("description").toString();
+ if(m_weatherDescription != description){
+ m_weatherDescription = description;
+ // emit
+ }
+ }
+
+ if(dataMap.contains("wind")){
+ int windDirection = dataMap.value("wind").toMap().value("deg").toInt();
+ if(m_windDirection != windDirection){
+ m_windDirection = windDirection;
+ //emit
+ }
+
+ double windSpeed = dataMap.value("wind").toMap().value("speed").toDouble();
+ if(m_windSpeed != windSpeed){
+ m_windSpeed = windSpeed;
+ // emit
+ }
+ }
+ // qDebug() << "#########################################################";
+ // qDebug() << m_cityName << m_cityId;
+ // qDebug() << "#########################################################";
+ // qDebug() << "temp" << m_temperatur;
+ // qDebug() << "temp min" << m_temperaturMin;
+ // qDebug() << "temp max" << m_temperaturMax;
+ // qDebug() << "cloudiness" << m_cloudiness;
+ // qDebug() << "humidity" << m_humidity;
+ // qDebug() << "pressure" << m_pressure;
+ // qDebug() << "sunrise" << QDateTime::fromTime_t(m_sunrise);
+ // qDebug() << "wind dir" << m_windDirection;
+ // qDebug() << "wind speed" << m_windSpeed;
+ // qDebug() << "sunrise" << QDateTime::fromTime_t(m_sunrise);
+ // qDebug() << "sunset" << QDateTime::fromTime_t(m_sunset);
+ // qDebug() << "last update" << QDateTime::fromTime_t(m_lastUpdate);
+}
+
+void OpenWeatherMap::update()
+{
+ updateLocationData();
+}
+
+void OpenWeatherMap::replyFinished(QNetworkReply *reply)
+{
+ int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
+ QByteArray data;
+
+ if(reply == m_locationReplay && status == 200){
+ data = reply->readAll();
+ processLocationResponse(data);
+ return;
+ }
+
+ if(reply == m_searchReplay && status == 200){
+ data = reply->readAll();
+ processSearchResponse(data);
+ return;
+ }
+
+ if(reply == m_weatherReplay && status == 200){
+ data = reply->readAll();
+ processWeatherResponse(data);
+ return;
+ }
+}
diff --git a/plugins/deviceplugins/openweathermap/openweathermap.h b/plugins/deviceplugins/openweathermap/openweathermap.h
new file mode 100644
index 00000000..1788c848
--- /dev/null
+++ b/plugins/deviceplugins/openweathermap/openweathermap.h
@@ -0,0 +1,60 @@
+#ifndef OPENWEATHERMAP_H
+#define OPENWEATHERMAP_H
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+class OpenWeatherMap : public QObject
+{
+ Q_OBJECT
+public:
+ explicit OpenWeatherMap(QObject *parent = 0);
+
+private:
+ QNetworkAccessManager *m_manager;
+
+ QString m_cityName;
+ QString m_cityId;
+
+ QNetworkReply *m_locationReplay;
+ QNetworkReply *m_searchReplay;
+ QNetworkReply *m_weatherReplay;
+
+ QString m_country;
+ QString m_weatherDescription;
+ uint m_lastUpdate;
+ uint m_sunrise;
+ uint m_sunset;
+ double m_temperatur;
+ double m_temperaturMin;
+ double m_temperaturMax;
+ double m_pressure;
+ double m_windSpeed;
+ int m_windDirection;
+ int m_humidity;
+ int m_cloudiness;
+
+ void updateLocationData();
+ void updateSearchData();
+ void updateWeatherData();
+
+ void processLocationResponse(QByteArray data);
+ void processSearchResponse(QByteArray data);
+ void processWeatherResponse(QByteArray data);
+
+signals:
+
+
+public slots:
+ void update();
+
+private slots:
+ void replyFinished(QNetworkReply *reply);
+
+};
+
+#endif // OPENWEATHERMAP_H
diff --git a/plugins/deviceplugins/openweathermap/openweathermap.pro b/plugins/deviceplugins/openweathermap/openweathermap.pro
new file mode 100644
index 00000000..928b05a6
--- /dev/null
+++ b/plugins/deviceplugins/openweathermap/openweathermap.pro
@@ -0,0 +1,15 @@
+include(../../plugins.pri)
+
+TARGET = $$qtLibraryTarget(guh_devicepluginopenweathermap)
+
+QT+= network
+
+SOURCES += \
+ devicepluginopenweathermap.cpp \
+ openweathermap.cpp
+
+HEADERS += \
+ devicepluginopenweathermap.h \
+ openweathermap.h
+
+
diff --git a/plugins/deviceplugins/weatherground/devicepluginweatherground.cpp b/plugins/deviceplugins/weatherground/devicepluginweatherground.cpp
index f67d09c0..655fb942 100644
--- a/plugins/deviceplugins/weatherground/devicepluginweatherground.cpp
+++ b/plugins/deviceplugins/weatherground/devicepluginweatherground.cpp
@@ -26,7 +26,6 @@
#include
#include
-// Key: 779a480dea5163c6
VendorId weathergroundVendorId = VendorId("68f84197-b158-4d24-9d7b-709cfff843c1");
@@ -48,7 +47,7 @@ QList DevicePluginWeatherground::supportedDevices() const
QList ret;
DeviceClass deviceClassWeatherground(pluginId(), weathergroundVendorId, DeviceClassId("af2e15f0-650e-4452-b379-fa76a2dc46c6"));
- deviceClassWeatherground.setName("Weather");
+ deviceClassWeatherground.setName("Weather from Weatherground");
QVariantList weatherParams;
QVariantMap cityParam;
@@ -153,16 +152,6 @@ QUuid DevicePluginWeatherground::pluginId() const
void DevicePluginWeatherground::guhTimer()
{
- qDebug() << "update Weatherground states...";
-}
-
-void DevicePluginWeatherground::setState(const QUuid &stateTypeId, const QVariant &value)
-{
-
-}
-
-void DevicePluginWeatherground::executeAction(Device *device, const Action &action)
-{
-
+ m_parser->updateData();
}
diff --git a/plugins/deviceplugins/weatherground/devicepluginweatherground.h b/plugins/deviceplugins/weatherground/devicepluginweatherground.h
index 6fd80298..1e0c9fdf 100644
--- a/plugins/deviceplugins/weatherground/devicepluginweatherground.h
+++ b/plugins/deviceplugins/weatherground/devicepluginweatherground.h
@@ -45,10 +45,8 @@ public:
void guhTimer() override;
private slots:
- void setState(const QUuid &stateTypeId, const QVariant &value);
public slots:
- void executeAction(Device *device, const Action &action) override;
};
diff --git a/plugins/deviceplugins/weatherground/weathergroundparser.cpp b/plugins/deviceplugins/weatherground/weathergroundparser.cpp
index dff203c1..f9631922 100644
--- a/plugins/deviceplugins/weatherground/weathergroundparser.cpp
+++ b/plugins/deviceplugins/weatherground/weathergroundparser.cpp
@@ -6,11 +6,12 @@ WeathergroundParser::WeathergroundParser(QObject *parent) :
m_manager = new QNetworkAccessManager(this);
m_cityCode = "/q/zmw:00000.2.11034";
- m_language = "DL";
+ m_language = "EN";
+ m_apikey = "779a480dea5163c6";
connect(m_manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*)));
connect(this,SIGNAL(dataReady(QByteArray)),this,SLOT(processResponse(QByteArray)));
- connect(this,SIGNAL(locationDetected()),this,SLOT(getDataFromLocation()));
+ connect(this,SIGNAL(locationDetected(QString,QString)),this,SLOT(updateData(QString,QString)));
}
void WeathergroundParser::replyFinished(QNetworkReply *reply)
@@ -23,14 +24,14 @@ void WeathergroundParser::processResponse(const QByteArray &data)
QJsonParseError error;
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
+ qDebug() << jsonDoc.toJson();
+
if(error.error != QJsonParseError::NoError) {
- qDebug() << "failed to parse data" << data << ":" << error.errorString();
+ qWarning() << "failed to parse data" << data << ":" << error.errorString();
}
- //qDebug() << "-------------------------\n" << jsonDoc.toJson();
QVariantMap dataMap = jsonDoc.toVariant().toMap();
-
//=====================================================================================
// Pars answere
@@ -41,32 +42,25 @@ void WeathergroundParser::processResponse(const QByteArray &data)
m_cityCode = locationMap.value("l").toString();
m_country = locationMap.value("country_iso3166").toString();
- qDebug() << m_cityName << m_country << m_cityCode;
- qDebug() << "-------------------";
- emit locationDetected();
+ emit locationDetected(m_cityCode,m_language);
}
//----------------------------------------------------
if(dataMap.contains("RESULTS")){
QVariantList list = dataMap.value("RESULTS").toList();
-
- QStringList *cityList;
-
- foreach (QVariant key, list) {
- qDebug() << "----------------------------------------";
- QVariantMap elemant = key.toMap();
- if(elemant.contains("name")){
- qDebug() << elemant.value("name").toString();
- qDebug() << elemant.value("l").toString();
- cityList->append(elemant.value("name").toString());
- }
- }
- emit querryListReady(cityList);
+// foreach (QVariant key, list) {
+// qDebug() << "----------------------------------------";
+// QVariantMap elemant = key.toMap();
+// if(elemant.contains("name")){
+// qDebug() << elemant.value("name").toString();
+// qDebug() << elemant.value("l").toString();
+// }
+// }
+ emit querryListReady(list);
}
//----------------------------------------------------
if(dataMap.contains("sun_phase")){
- qDebug() << jsonDoc.toJson();
int sunRiseH = dataMap.value("sun_phase").toMap().value("sunrise").toMap().value("hour").toInt();
int sunRiseM = dataMap.value("sun_phase").toMap().value("sunrise").toMap().value("minute").toInt();
@@ -76,52 +70,39 @@ void WeathergroundParser::processResponse(const QByteArray &data)
m_sunrise = QTime(sunRiseH,sunRiseM);
m_sunset = QTime(sunSetH,sunSetM);
- qDebug() << "sunrise =" << m_sunrise.toString();
- qDebug() << "sunset =" << m_sunset.toString();
-
emit sunDataReady(m_sunset, m_sunrise);
}
//----------------------------------------------------
if(dataMap.contains("current_observation")){
- //qDebug() << jsonDoc.toJson();
m_weather = dataMap.value("current_observation").toMap().value("weather").toString();
- qDebug() << "Currently = " << m_weather;
m_temperature = dataMap.value("current_observation").toMap().value("temp_c").toDouble();
- qDebug() << "Temperature =" << m_temperature;
m_temperatureFeeling = dataMap.value("current_observation").toMap().value("feelslike_c").toDouble();
- qDebug() << "Temperature feels like =" << m_temperatureFeeling;
m_humidity = dataMap.value("current_observation").toMap().value("relative_humidity").toString();
- qDebug() << "Humidity =" << m_humidity ;
m_windSpeed = dataMap.value("current_observation").toMap().value("wind_kph").toDouble();
- qDebug() << "Wind speed =" << m_windSpeed ;
m_windDirection = dataMap.value("current_observation").toMap().value("wind_dir").toString();
- qDebug() << "Wind direction =" << m_windDirection;
}
}
-void WeathergroundParser::getDataFromLocation()
-{
- QUrl url = "http://api.wunderground.com/api/bc9fbd0a246f151c/conditions/lang:" + m_language + m_cityCode + ".json";
- m_manager->get(QNetworkRequest(url));
-
- url = "http://api.wunderground.com/api/bc9fbd0a246f151c/astronomy/lang:" + m_language + m_cityCode + ".json";
- m_manager->get(QNetworkRequest(url));
-}
-
void WeathergroundParser::updateData()
{
- qDebug() << "=============================================";
- qDebug() << QTime::currentTime().toString();
+// qDebug() << "=============================================";
+// qDebug() << QTime::currentTime().toString();
- QUrl url = QUrl("http://api.wunderground.com/api/bc9fbd0a246f151c/geolookup/lang:" + m_language + "/q/autoip.json");
+ QUrl url = QUrl("http://api.wunderground.com/api/" + m_apikey +"/geolookup/lang:" + m_language + "/q/autoip.json");
m_manager->get(QNetworkRequest(url));
}
-void WeathergroundParser::updateData(QString cityCode, QString language)
+void WeathergroundParser::updateData(const QString &cityCode, const QString &language)
{
- QUrl url = "http://api.wunderground.com/api/bc9fbd0a246f151c/conditions/lang:" + m_language + m_cityCode + ".json";
+ QUrl url = "http://api.wunderground.com/api/" + m_apikey +"/conditions/lang:" + language + cityCode + ".json";
m_manager->get(QNetworkRequest(url));
- url = "http://api.wunderground.com/api/bc9fbd0a246f151c/astronomy/lang:" + m_language + m_cityCode + ".json";
+ url = "http://api.wunderground.com/api/" + m_apikey +"/astronomy/lang:" + language + cityCode + ".json";
+ m_manager->get(QNetworkRequest(url));
+}
+
+void WeathergroundParser::searchCity(const QString &searchString)
+{
+ QUrl url = QUrl("http://autocomplete.wunderground.com/aq?query=" + searchString);
m_manager->get(QNetworkRequest(url));
}
diff --git a/plugins/deviceplugins/weatherground/weathergroundparser.h b/plugins/deviceplugins/weatherground/weathergroundparser.h
index 51a5d2f8..ed980e02 100644
--- a/plugins/deviceplugins/weatherground/weathergroundparser.h
+++ b/plugins/deviceplugins/weatherground/weathergroundparser.h
@@ -21,6 +21,8 @@ private:
QString m_cityName;
QString m_country;
QString m_language;
+ QString m_apikey;
+
QTime m_currentTime;
//current weather
@@ -38,20 +40,26 @@ private:
signals:
void dataReady(const QByteArray &data);
- void locationDetected();
- void querryListReady(const QStringList *citys);
+ void locationDetected(const QString &cityCode, const QString &language);
+ void querryListReady(const QVariantList &querryList);
+
void temperatureReady(const double &temperature);
void humidityReady(const double &humidity);
+ void windSpeedReady(const double &windSpeed);
+ void windDirectionReady(const QString &windDirection);
+ void currentWeatherReady(const QString ¤tWeather);
+ void moonAgeReady(const int &age);
+ void moonIlluminationReady(const int &age);
void sunDataReady(const QTime &sunSet, const QTime &sunRise);
private slots:
void replyFinished(QNetworkReply *reply);
void processResponse(const QByteArray &data);
- void getDataFromLocation();
public slots:
void updateData();
- void updateData(QString cityCode, QString language);
+ void updateData(const QString &cityCode, const QString &language);
+ void searchCity(const QString &searchString);
};
diff --git a/server/main.cpp b/server/main.cpp
index 7e8cb0a3..6a76b446 100644
--- a/server/main.cpp
+++ b/server/main.cpp
@@ -23,11 +23,12 @@
Q_IMPORT_PLUGIN(DevicePluginElro)
Q_IMPORT_PLUGIN(DevicePluginIntertechno)
-Q_IMPORT_PLUGIN(DevicePluginMeisterAnker)
+//Q_IMPORT_PLUGIN(DevicePluginMeisterAnker)
Q_IMPORT_PLUGIN(DevicePluginWifiDetector)
Q_IMPORT_PLUGIN(DevicePluginConrad)
Q_IMPORT_PLUGIN(DevicePluginMock)
-Q_IMPORT_PLUGIN(DevicePluginWeatherground)
+//Q_IMPORT_PLUGIN(DevicePluginWeatherground)
+Q_IMPORT_PLUGIN(DevicePluginOpenweathermap)
int main(int argc, char *argv[])
{
diff --git a/server/server.pro b/server/server.pro
index dd558b44..ce020391 100644
--- a/server/server.pro
+++ b/server/server.pro
@@ -17,8 +17,9 @@ SOURCES += main.cpp
# FIXME: Drop this and link them dynamically
LIBS += -L../plugins/deviceplugins/elro/ -lguh_devicepluginelro
LIBS += -L../plugins/deviceplugins/intertechno/ -lguh_devicepluginintertechno
-LIBS += -L../plugins/deviceplugins/meisteranker/ -lguh_devicepluginmeisteranker
+#LIBS += -L../plugins/deviceplugins/meisteranker/ -lguh_devicepluginmeisteranker
LIBS += -L../plugins/deviceplugins/wifidetector/ -lguh_devicepluginwifidetector
LIBS += -L../plugins/deviceplugins/conrad -lguh_devicepluginconrad
LIBS += -L../plugins/deviceplugins/mock -lguh_devicepluginmock
-LIBS += -L../plugins/deviceplugins/weatherground -lguh_devicepluginweatherground
+#LIBS += -L../plugins/deviceplugins/weatherground -lguh_devicepluginweatherground
+LIBS += -L../plugins/deviceplugins/openweathermap -lguh_devicepluginopenweathermap
diff --git a/tests/scripts/addconfigureddevice.sh b/tests/scripts/addconfigureddevice.sh
index 992a4ca5..ed24e9dc 100755
--- a/tests/scripts/addconfigureddevice.sh
+++ b/tests/scripts/addconfigureddevice.sh
@@ -4,7 +4,7 @@
if [ -z $1 ]; then
echo "usage $0 host device"
elif [ $1 == "list" ]; then
- echo "elroremote elroswitch intertechnoremote meisteranker wifidetector"
+ echo "elroremote elroswitch intertechnoremote wifidetector mock1 mock2 openweathermap"
elif [ -z $2 ]; then
echo "usage $0 host device"
else
@@ -17,9 +17,9 @@ else
elif [ $2 == "intertechnoremote" ]; then
# Adds an intertechno remote control
(echo '{"id":1, "method":"Devices.AddConfiguredDevice", "params":{"deviceClassId": "{ab73ad2f-6594-45a3-9063-8f72d365c5e5}","deviceParams":{"familyCode":"J"}}}'; sleep 1) | nc $1 1234
- elif [ $2 == "meisteranker" ]; then
- # Adds an intertechno remote control
- (echo '{"id":1, "method":"Devices.AddConfiguredDevice", "params":{"deviceClassId": "{e37e9f34-95b9-4a22-ae4f-e8b874eec871}","deviceParams":{"id":"1"}}}'; sleep 1) | nc $1 1234
+# elif [ $2 == "meisteranker" ]; then
+# # Adds an intertechno remote control
+# (echo '{"id":1, "method":"Devices.AddConfiguredDevice", "params":{"deviceClassId": "{e37e9f34-95b9-4a22-ae4f-e8b874eec871}","deviceParams":{"id":"1"}}}'; sleep 1) | nc $1 1234
elif [ $2 == "wifidetector" ]; then
# Adds a WiFi detector
(echo '{"id":1, "method":"Devices.AddConfiguredDevice", "params":{"deviceClassId": "{bd216356-f1ec-4324-9785-6982d2174e17}","deviceParams":{"mac":"90:cf:15:1b:ce:bb"}}}'; sleep 1) | nc $1 1234
@@ -29,7 +29,13 @@ else
elif [ $2 == "mock2" ]; then
# Adds a Mock device
(echo '{"id":1, "method":"Devices.AddConfiguredDevice", "params":{"deviceClassId": "{753f0d32-0468-4d08-82ed-1964aab03298}","deviceParams":{"httpport":"8082"}}}'; sleep 1) | nc $1 1234
+# elif [ $2 == "weatherground" ]; then
+# # Adds a weatherground device
+# (echo '{"id":1, "method":"Devices.AddConfiguredDevice", "params":{"deviceClassId": "{af2e15f0-650e-4452-b379-fa76a2dc46c6}","deviceParams":{"autodetect":"true"}}}'; sleep 1) | nc $1 1234
+ elif [ $2 == "openweathermap" ]; then
+ # Adds a openweathermap device
+ (echo '{"id":1, "method":"Devices.AddConfiguredDevice", "params":{"deviceClassId": "{985195aa-17ad-4530-88a4-cdd753d747d7}","deviceParams":{"autodetect":"true"}}}'; sleep 1) | nc $1 1234
else
- echo "unknown type $2. Possible values are: elroremote, elroswitch, intertechnoremote, meisteranker, wifidetector, mock1, mock2"
+ echo "unknown type $2. Possible values are: elroremote, elroswitch, intertechnoremote, wifidetector, mock1, mock2, openweathermap"
fi
fi