diff --git a/avahimonitor/avahimonitor.pro b/avahimonitor/avahimonitor.pro index d58a2c2f..a0a22e2b 100644 --- a/avahimonitor/avahimonitor.pro +++ b/avahimonitor/avahimonitor.pro @@ -1,6 +1,8 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_devicepluginavahimonitor) +QT += network + +TARGET = $$qtLibraryTarget(nymea_devicepluginavahimonitor) SOURCES += \ devicepluginavahimonitor.cpp diff --git a/avahimonitor/devicepluginavahimonitor.cpp b/avahimonitor/devicepluginavahimonitor.cpp index 9749d78f..b4574808 100644 --- a/avahimonitor/devicepluginavahimonitor.cpp +++ b/avahimonitor/devicepluginavahimonitor.cpp @@ -3,7 +3,7 @@ * Copyright (C) 2015 Simon Stürz * * Copyright (C) 2014 Michael Zanetti * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -27,7 +27,7 @@ \brief Plugin to monitor zeroconf devices in the local network. \ingroup plugins - \ingroup guh-plugins-maker + \ingroup nymea-plugins-maker \chapter Plugin properties Following JSON file contains the definition and the description of all available \l{DeviceClass}{DeviceClasses} diff --git a/avahimonitor/devicepluginavahimonitor.h b/avahimonitor/devicepluginavahimonitor.h index b4ce50c0..1ad123a3 100644 --- a/avahimonitor/devicepluginavahimonitor.h +++ b/avahimonitor/devicepluginavahimonitor.h @@ -3,7 +3,7 @@ * Copyright (C) 2015 Simon Stürz * * Copyright (C) 2014 Michael Zanetti * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -33,7 +33,7 @@ class DevicePluginAvahiMonitor : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "devicepluginavahimonitor.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginavahimonitor.json") Q_INTERFACES(DevicePlugin) public: diff --git a/avahimonitor/devicepluginavahimonitor.json b/avahimonitor/devicepluginavahimonitor.json index b9e4fc78..8399dcb7 100644 --- a/avahimonitor/devicepluginavahimonitor.json +++ b/avahimonitor/devicepluginavahimonitor.json @@ -4,7 +4,7 @@ "id": "d83fb167-cef7-4347-8c58-fa39df7bea4f", "vendors": [ { - "displayName": "guh", + "displayName": "guh GmbH", "name": "guh", "id": "2062d64d-3232-433c-88bc-0d33c0ba2ba6", "deviceClasses": [ diff --git a/avahimonitor/translations/d83fb167-cef7-4347-8c58-fa39df7bea4f-de_DE.ts b/avahimonitor/translations/d83fb167-cef7-4347-8c58-fa39df7bea4f-de_DE.ts index 3be1068b..828ab513 100644 --- a/avahimonitor/translations/d83fb167-cef7-4347-8c58-fa39df7bea4f-de_DE.ts +++ b/avahimonitor/translations/d83fb167-cef7-4347-8c58-fa39df7bea4f-de_DE.ts @@ -4,23 +4,20 @@ AvahiMonitor + Avahi Monitor - The name of the DeviceClass (97f0154d-6945-49b8-bd65-0a8cea0c6652) + The name of the plugin AvahiMonitor (d83fb167-cef7-4347-8c58-fa39df7bea4f) +---------- +The name of the DeviceClass (97f0154d-6945-49b8-bd65-0a8cea0c6652) - guh + guh GmbH The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) - - - AvahiMonitor - The name of the plugin AvahiMonitor (d83fb167-cef7-4347-8c58-fa39df7bea4f) - - service name @@ -42,7 +39,7 @@ online - The name of the ParamType of StateType (b5616fd3-da12-4613-9576-6516b2267180) of DeviceClass avahi + The name of the ParamType of the autocreated EventType (b5616fd3-da12-4613-9576-6516b2267180) of DeviceClass avahi diff --git a/avahimonitor/translations/d83fb167-cef7-4347-8c58-fa39df7bea4f-en_US.ts b/avahimonitor/translations/d83fb167-cef7-4347-8c58-fa39df7bea4f-en_US.ts index 00c029ea..2bf214f1 100644 --- a/avahimonitor/translations/d83fb167-cef7-4347-8c58-fa39df7bea4f-en_US.ts +++ b/avahimonitor/translations/d83fb167-cef7-4347-8c58-fa39df7bea4f-en_US.ts @@ -4,23 +4,20 @@ AvahiMonitor + Avahi Monitor - The name of the DeviceClass (97f0154d-6945-49b8-bd65-0a8cea0c6652) + The name of the plugin AvahiMonitor (d83fb167-cef7-4347-8c58-fa39df7bea4f) +---------- +The name of the DeviceClass (97f0154d-6945-49b8-bd65-0a8cea0c6652) - guh + guh GmbH The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) - - - AvahiMonitor - The name of the plugin AvahiMonitor (d83fb167-cef7-4347-8c58-fa39df7bea4f) - - service name @@ -42,7 +39,7 @@ online - The name of the ParamType of StateType (b5616fd3-da12-4613-9576-6516b2267180) of DeviceClass avahi + The name of the ParamType of the autocreated EventType (b5616fd3-da12-4613-9576-6516b2267180) of DeviceClass avahi diff --git a/awattar/awattar.pro b/awattar/awattar.pro index fb9be0fa..87eb6047 100644 --- a/awattar/awattar.pro +++ b/awattar/awattar.pro @@ -1,6 +1,8 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_devicepluginawattar) +QT += network + +TARGET = $$qtLibraryTarget(nymea_devicepluginawattar) SOURCES += \ devicepluginawattar.cpp \ diff --git a/awattar/devicepluginawattar.cpp b/awattar/devicepluginawattar.cpp index a93553c5..96ed5627 100644 --- a/awattar/devicepluginawattar.cpp +++ b/awattar/devicepluginawattar.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -26,7 +26,7 @@ \brief Plugin for aWATTar, an austrian energy provider. \ingroup plugins - \ingroup guh-plugins + \ingroup nymea-plugins This plugin allows to receive the current energy market price from the \l{https://www.awattar.com/}{aWATTar GmbH}. In order to use this plugin you need to enter the access token from your energy provider. You can find more @@ -133,9 +133,9 @@ DeviceManager::DeviceError DevicePluginAwattar::executeAction(Device *device, co return DeviceManager::DeviceErrorHardwareNotAvailable; if (action.actionTypeId() == awattarSgSyncModeActionTypeId) { - qCDebug(dcAwattar) << "Set sg sync mode to" << action.param(awattarSgSyncModeStateParamTypeId).value(); - device->setStateValue(awattarSgSyncModeStateTypeId, action.param(awattarSgSyncModeStateParamTypeId).value()); - if (action.param(awattarSgSyncModeStateParamTypeId).value() == "auto") + qCDebug(dcAwattar) << "Set sg sync mode to" << action.param(awattarSgSyncModeActionParamTypeId).value(); + device->setStateValue(awattarSgSyncModeStateTypeId, action.param(awattarSgSyncModeActionParamTypeId).value()); + if (action.param(awattarSgSyncModeActionParamTypeId).value() == "auto") setSgMode(m_autoSgMode); return DeviceManager::DeviceErrorNoError; diff --git a/awattar/devicepluginawattar.h b/awattar/devicepluginawattar.h index e388d072..aceaec14 100644 --- a/awattar/devicepluginawattar.h +++ b/awattar/devicepluginawattar.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -37,7 +37,7 @@ class DevicePluginAwattar : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "devicepluginawattar.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginawattar.json") Q_INTERFACES(DevicePlugin) public: diff --git a/awattar/heatpump.cpp b/awattar/heatpump.cpp index 6c3d28d7..2d8b0944 100644 --- a/awattar/heatpump.cpp +++ b/awattar/heatpump.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2016 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/awattar/heatpump.h b/awattar/heatpump.h index 6e972f37..e88db6da 100644 --- a/awattar/heatpump.h +++ b/awattar/heatpump.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2016 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/awattar/translations/9c261c33-d44e-461e-8ec1-68803cb73f12-de_DE.ts b/awattar/translations/9c261c33-d44e-461e-8ec1-68803cb73f12-de_DE.ts index ba2341b6..5773109b 100644 --- a/awattar/translations/9c261c33-d44e-461e-8ec1-68803cb73f12-de_DE.ts +++ b/awattar/translations/9c261c33-d44e-461e-8ec1-68803cb73f12-de_DE.ts @@ -4,174 +4,171 @@ awattar - - awattar - The name of the plugin awattar (9c261c33-d44e-461e-8ec1-68803cb73f12) - - - - + RPL address The name of the paramType (cf13eebf-f188-447a-afcb-bbd330983060) of awattar - - + + + aWATTar - The name of the vendor (acd47238-bbbc-4eaf-b484-38c52cfa4866) + The name of the plugin awattar (9c261c33-d44e-461e-8ec1-68803cb73f12) +---------- +The name of the vendor (acd47238-bbbc-4eaf-b484-38c52cfa4866) ---------- The name of the DeviceClass (29cd8265-d8bb-4cf9-9080-bfc2cf9787bc) - + user uuid The name of the paramType (cbbf6f0a-6a91-4844-83f5-60eadb46099b) of awattar - + token The name of the paramType (7ab323d0-f3b5-4baa-9ff9-4843b4dd9811) of awattar - + current market price changed The name of the autocreated EventType (eab37309-3dd8-46a0-94d4-bd05b5bb0430) - - currentMarketPrice - The name of the ParamType of StateType (eab37309-3dd8-46a0-94d4-bd05b5bb0430) of DeviceClass awattar + + current market price + The name of the ParamType of the autocreated EventType (eab37309-3dd8-46a0-94d4-bd05b5bb0430) of DeviceClass awattar - + + average deviation + The name of the ParamType of the autocreated EventType (38b86cee-9588-4269-a585-128907929dc2) of DeviceClass awattar + + + + + valid until + The name of the ParamType of the autocreated EventType (d5a8a176-aca0-45b1-b043-95c43750f383) of DeviceClass awattar + + + + + average market price [+/- 12 h] + The name of the ParamType of the autocreated EventType (55d6d7a8-446f-48ae-8014-1225810d03ee) of DeviceClass awattar + + + + + lowest market price [+/- 12 h] + The name of the ParamType of the autocreated EventType (e7af5bdc-48d7-4e96-b877-331da4dcfae5) of DeviceClass awattar + + + + + highest market price [+/- 12 h] + The name of the ParamType of the autocreated EventType (0c171c42-b070-453e-8a63-df9aebfa8533) of DeviceClass awattar + + + + + pump reachable + The name of the ParamType of the autocreated EventType (1c9d139a-6618-4a39-bc83-37f80942017d) of DeviceClass awattar + + + + + + sync mode + The name of the ParamType of the autocreated EventType (4c303bcd-152d-45ad-874d-d57fc87a26bb) of DeviceClass awattar +---------- +The name of the autocreated ParamType of the writable StateType (4c303bcd-152d-45ad-874d-d57fc87a26bb) of DeviceClass awattar + + + + average deviation changed The name of the autocreated EventType (38b86cee-9588-4269-a585-128907929dc2) - - averageDeviation - The name of the ParamType of StateType (38b86cee-9588-4269-a585-128907929dc2) of DeviceClass awattar - - - - + valid until changed The name of the autocreated EventType (d5a8a176-aca0-45b1-b043-95c43750f383) - - validUntil - The name of the ParamType of StateType (d5a8a176-aca0-45b1-b043-95c43750f383) of DeviceClass awattar - - - - + average market price [+/- 12 h] changed The name of the autocreated EventType (55d6d7a8-446f-48ae-8014-1225810d03ee) - - averagePrice - The name of the ParamType of StateType (55d6d7a8-446f-48ae-8014-1225810d03ee) of DeviceClass awattar - - - - + lowest market price [+/- 12 h] changed The name of the autocreated EventType (e7af5bdc-48d7-4e96-b877-331da4dcfae5) - - lowestPrice - The name of the ParamType of StateType (e7af5bdc-48d7-4e96-b877-331da4dcfae5) of DeviceClass awattar - - - - + highest market price [+/- 12 h] changed The name of the autocreated EventType (0c171c42-b070-453e-8a63-df9aebfa8533) - - highestPrice - The name of the ParamType of StateType (0c171c42-b070-453e-8a63-df9aebfa8533) of DeviceClass awattar - - - - + online changed The name of the autocreated EventType (470b9b88-17f3-42e3-9250-cc181984eafe) - + online - The name of the ParamType of StateType (470b9b88-17f3-42e3-9250-cc181984eafe) of DeviceClass awattar + The name of the ParamType of the autocreated EventType (470b9b88-17f3-42e3-9250-cc181984eafe) of DeviceClass awattar - + pump reachable changed The name of the autocreated EventType (1c9d139a-6618-4a39-bc83-37f80942017d) - - reachable - The name of the ParamType of StateType (1c9d139a-6618-4a39-bc83-37f80942017d) of DeviceClass awattar - - - - + sg-mode changed The name of the autocreated EventType (b83d3533-aeae-4a9b-95d8-28466bf6c0cf) - - sgMode - The name of the ParamType of StateType (b83d3533-aeae-4a9b-95d8-28466bf6c0cf) of DeviceClass awattar - - - - + sync mode changed The name of the autocreated EventType (4c303bcd-152d-45ad-874d-d57fc87a26bb) - - sgSyncMode - The name of the ParamType of StateType (4c303bcd-152d-45ad-874d-d57fc87a26bb) of DeviceClass awattar - - - - + Set sync mode The name of the autocreated ActionType (4c303bcd-152d-45ad-874d-d57fc87a26bb) - + set sg-mode The name of the ActionType dd82f6c7-5e92-48ca-b0bc-bdc55d3e1482 of deviceClass awattar - + + sg-mode - The name of the paramType (c7b13a33-1c05-457c-a087-20ecc1b8ca01) of awattar + The name of the ParamType of the autocreated EventType (b83d3533-aeae-4a9b-95d8-28466bf6c0cf) of DeviceClass awattar +---------- +The name of the paramType (c7b13a33-1c05-457c-a087-20ecc1b8ca01) of awattar diff --git a/awattar/translations/9c261c33-d44e-461e-8ec1-68803cb73f12-en_US.ts b/awattar/translations/9c261c33-d44e-461e-8ec1-68803cb73f12-en_US.ts index 87895f13..73a6270c 100644 --- a/awattar/translations/9c261c33-d44e-461e-8ec1-68803cb73f12-en_US.ts +++ b/awattar/translations/9c261c33-d44e-461e-8ec1-68803cb73f12-en_US.ts @@ -4,174 +4,171 @@ awattar - - awattar - The name of the plugin awattar (9c261c33-d44e-461e-8ec1-68803cb73f12) - - - - + RPL address The name of the paramType (cf13eebf-f188-447a-afcb-bbd330983060) of awattar - - + + + aWATTar - The name of the vendor (acd47238-bbbc-4eaf-b484-38c52cfa4866) + The name of the plugin awattar (9c261c33-d44e-461e-8ec1-68803cb73f12) +---------- +The name of the vendor (acd47238-bbbc-4eaf-b484-38c52cfa4866) ---------- The name of the DeviceClass (29cd8265-d8bb-4cf9-9080-bfc2cf9787bc) - + user uuid The name of the paramType (cbbf6f0a-6a91-4844-83f5-60eadb46099b) of awattar - + token The name of the paramType (7ab323d0-f3b5-4baa-9ff9-4843b4dd9811) of awattar - + current market price changed The name of the autocreated EventType (eab37309-3dd8-46a0-94d4-bd05b5bb0430) - - currentMarketPrice - The name of the ParamType of StateType (eab37309-3dd8-46a0-94d4-bd05b5bb0430) of DeviceClass awattar + + current market price + The name of the ParamType of the autocreated EventType (eab37309-3dd8-46a0-94d4-bd05b5bb0430) of DeviceClass awattar - + + average deviation + The name of the ParamType of the autocreated EventType (38b86cee-9588-4269-a585-128907929dc2) of DeviceClass awattar + + + + + valid until + The name of the ParamType of the autocreated EventType (d5a8a176-aca0-45b1-b043-95c43750f383) of DeviceClass awattar + + + + + average market price [+/- 12 h] + The name of the ParamType of the autocreated EventType (55d6d7a8-446f-48ae-8014-1225810d03ee) of DeviceClass awattar + + + + + lowest market price [+/- 12 h] + The name of the ParamType of the autocreated EventType (e7af5bdc-48d7-4e96-b877-331da4dcfae5) of DeviceClass awattar + + + + + highest market price [+/- 12 h] + The name of the ParamType of the autocreated EventType (0c171c42-b070-453e-8a63-df9aebfa8533) of DeviceClass awattar + + + + + pump reachable + The name of the ParamType of the autocreated EventType (1c9d139a-6618-4a39-bc83-37f80942017d) of DeviceClass awattar + + + + + + sync mode + The name of the ParamType of the autocreated EventType (4c303bcd-152d-45ad-874d-d57fc87a26bb) of DeviceClass awattar +---------- +The name of the autocreated ParamType of the writable StateType (4c303bcd-152d-45ad-874d-d57fc87a26bb) of DeviceClass awattar + + + + average deviation changed The name of the autocreated EventType (38b86cee-9588-4269-a585-128907929dc2) - - averageDeviation - The name of the ParamType of StateType (38b86cee-9588-4269-a585-128907929dc2) of DeviceClass awattar - - - - + valid until changed The name of the autocreated EventType (d5a8a176-aca0-45b1-b043-95c43750f383) - - validUntil - The name of the ParamType of StateType (d5a8a176-aca0-45b1-b043-95c43750f383) of DeviceClass awattar - - - - + average market price [+/- 12 h] changed The name of the autocreated EventType (55d6d7a8-446f-48ae-8014-1225810d03ee) - - averagePrice - The name of the ParamType of StateType (55d6d7a8-446f-48ae-8014-1225810d03ee) of DeviceClass awattar - - - - + lowest market price [+/- 12 h] changed The name of the autocreated EventType (e7af5bdc-48d7-4e96-b877-331da4dcfae5) - - lowestPrice - The name of the ParamType of StateType (e7af5bdc-48d7-4e96-b877-331da4dcfae5) of DeviceClass awattar - - - - + highest market price [+/- 12 h] changed The name of the autocreated EventType (0c171c42-b070-453e-8a63-df9aebfa8533) - - highestPrice - The name of the ParamType of StateType (0c171c42-b070-453e-8a63-df9aebfa8533) of DeviceClass awattar - - - - + online changed The name of the autocreated EventType (470b9b88-17f3-42e3-9250-cc181984eafe) - + online - The name of the ParamType of StateType (470b9b88-17f3-42e3-9250-cc181984eafe) of DeviceClass awattar + The name of the ParamType of the autocreated EventType (470b9b88-17f3-42e3-9250-cc181984eafe) of DeviceClass awattar - + pump reachable changed The name of the autocreated EventType (1c9d139a-6618-4a39-bc83-37f80942017d) - - reachable - The name of the ParamType of StateType (1c9d139a-6618-4a39-bc83-37f80942017d) of DeviceClass awattar - - - - + sg-mode changed The name of the autocreated EventType (b83d3533-aeae-4a9b-95d8-28466bf6c0cf) - - sgMode - The name of the ParamType of StateType (b83d3533-aeae-4a9b-95d8-28466bf6c0cf) of DeviceClass awattar - - - - + sync mode changed The name of the autocreated EventType (4c303bcd-152d-45ad-874d-d57fc87a26bb) - - sgSyncMode - The name of the ParamType of StateType (4c303bcd-152d-45ad-874d-d57fc87a26bb) of DeviceClass awattar - - - - + Set sync mode The name of the autocreated ActionType (4c303bcd-152d-45ad-874d-d57fc87a26bb) - + set sg-mode The name of the ActionType dd82f6c7-5e92-48ca-b0bc-bdc55d3e1482 of deviceClass awattar - + + sg-mode - The name of the paramType (c7b13a33-1c05-457c-a087-20ecc1b8ca01) of awattar + The name of the ParamType of the autocreated EventType (b83d3533-aeae-4a9b-95d8-28466bf6c0cf) of DeviceClass awattar +---------- +The name of the paramType (c7b13a33-1c05-457c-a087-20ecc1b8ca01) of awattar diff --git a/commandlauncher/commandlauncher.pro b/commandlauncher/commandlauncher.pro index 9955aa64..9e479d98 100644 --- a/commandlauncher/commandlauncher.pro +++ b/commandlauncher/commandlauncher.pro @@ -1,6 +1,6 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_deviceplugincommandlauncher) +TARGET = $$qtLibraryTarget(nymea_deviceplugincommandlauncher) SOURCES += \ deviceplugincommandlauncher.cpp diff --git a/commandlauncher/deviceplugincommandlauncher.cpp b/commandlauncher/deviceplugincommandlauncher.cpp index 7e12d1dd..3ab244d2 100644 --- a/commandlauncher/deviceplugincommandlauncher.cpp +++ b/commandlauncher/deviceplugincommandlauncher.cpp @@ -3,7 +3,7 @@ * Copyright (C) 2015 Simon Stürz * * Copyright (C) 2014 Michael Zanetti * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -27,31 +27,31 @@ \brief Plugin for system commands. \ingroup plugins - \ingroup guh-plugins-maker + \ingroup nymea-plugins-maker The application and script launcher plugin allows you to execute bash commands and start bash scripts. \chapter Application launcher The application launcher \l{DeviceClass} allows you to call bash applications or commands (with parameters) - from guh. Once, the application started, the \tt running \l{State} will change to \tt true, if the application + from nymea. Once, the application started, the \tt running \l{State} will change to \tt true, if the application is finished, the \tt running \l{State} will change to \tt false. \section3 Example An example command could be \l{http://linux.die.net/man/1/espeak}{espeak}. (\tt{apt-get install espeak}) \code - espeak -v en "Chuck Norris is using gooe" # gooe = guh pronounced correctly + espeak -v en "Chuck Norris is using nymea" \endcode \chapter Bashscript launcher The bashscript launcher \l{DeviceClass} allows you to call bash script (with parameters) - from guh. Once, the script is running, the \tt running \l{State} will change to \tt true, if the script + from nymea. Once, the script is running, the \tt running \l{State} will change to \tt true, if the script is finished, the \tt running \l{State} will change to \tt false. \section3 Example - An example for a very usefull script could be a backup scrip like following \tt backup.sh script. + An example for a very useful script could be a backup scrip like following \tt backup.sh script. \code #!/bin/sh # Directories to backup... @@ -62,7 +62,7 @@ # Create archive filename... day=$(date +%Y%m%d) - hostname="guh.guru" + hostname="nymea.io" archive_file="$day-$hostname.tgz" # Print start status message... diff --git a/commandlauncher/deviceplugincommandlauncher.h b/commandlauncher/deviceplugincommandlauncher.h index fee4e3e2..63dac59d 100644 --- a/commandlauncher/deviceplugincommandlauncher.h +++ b/commandlauncher/deviceplugincommandlauncher.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -32,7 +32,7 @@ class DevicePluginCommandLauncher : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "deviceplugincommandlauncher.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "deviceplugincommandlauncher.json") Q_INTERFACES(DevicePlugin) public: diff --git a/commandlauncher/deviceplugincommandlauncher.json b/commandlauncher/deviceplugincommandlauncher.json index be4e3a69..17b4c130 100644 --- a/commandlauncher/deviceplugincommandlauncher.json +++ b/commandlauncher/deviceplugincommandlauncher.json @@ -5,7 +5,7 @@ "vendors": [ { "name": "guh", - "displayName": "guh", + "displayName": "guh GmbH", "id": "2062d64d-3232-433c-88bc-0d33c0ba2ba6", "deviceClasses": [ { diff --git a/commandlauncher/translations/5d37b796-4872-4eab-a7af-94ca9ddd8199-de_DE.ts b/commandlauncher/translations/5d37b796-4872-4eab-a7af-94ca9ddd8199-de_DE.ts index 38dfc496..259e2383 100644 --- a/commandlauncher/translations/5d37b796-4872-4eab-a7af-94ca9ddd8199-de_DE.ts +++ b/commandlauncher/translations/5d37b796-4872-4eab-a7af-94ca9ddd8199-de_DE.ts @@ -5,13 +5,13 @@ CommandLauncher - CommandLauncher + Application and script launcher The name of the plugin CommandLauncher (5d37b796-4872-4eab-a7af-94ca9ddd8199) - guh + guh GmbH The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) @@ -38,9 +38,9 @@ running - The name of the ParamType of StateType (28d7e933-ff05-4f4c-95a0-482689543de5) of DeviceClass application + The name of the ParamType of the autocreated EventType (28d7e933-ff05-4f4c-95a0-482689543de5) of DeviceClass application ---------- -The name of the ParamType of StateType (28d7e933-ff05-4f4c-95a0-482689543de5) of DeviceClass script +The name of the ParamType of the autocreated EventType (28d7e933-ff05-4f4c-95a0-482689543de5) of DeviceClass script diff --git a/commandlauncher/translations/5d37b796-4872-4eab-a7af-94ca9ddd8199-en_US.ts b/commandlauncher/translations/5d37b796-4872-4eab-a7af-94ca9ddd8199-en_US.ts index 85406941..c5c4b3ad 100644 --- a/commandlauncher/translations/5d37b796-4872-4eab-a7af-94ca9ddd8199-en_US.ts +++ b/commandlauncher/translations/5d37b796-4872-4eab-a7af-94ca9ddd8199-en_US.ts @@ -5,13 +5,13 @@ CommandLauncher - CommandLauncher + Application and script launcher The name of the plugin CommandLauncher (5d37b796-4872-4eab-a7af-94ca9ddd8199) - guh + guh GmbH The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) @@ -38,9 +38,9 @@ running - The name of the ParamType of StateType (28d7e933-ff05-4f4c-95a0-482689543de5) of DeviceClass application + The name of the ParamType of the autocreated EventType (28d7e933-ff05-4f4c-95a0-482689543de5) of DeviceClass application ---------- -The name of the ParamType of StateType (28d7e933-ff05-4f4c-95a0-482689543de5) of DeviceClass script +The name of the ParamType of the autocreated EventType (28d7e933-ff05-4f4c-95a0-482689543de5) of DeviceClass script diff --git a/conrad/conrad.pro b/conrad/conrad.pro index eb2801e7..ee96505d 100644 --- a/conrad/conrad.pro +++ b/conrad/conrad.pro @@ -1,6 +1,6 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_devicepluginconrad) +TARGET = $$qtLibraryTarget(nymea_devicepluginconrad) SOURCES += \ devicepluginconrad.cpp diff --git a/conrad/devicepluginconrad.cpp b/conrad/devicepluginconrad.cpp index 18964992..2e44344c 100644 --- a/conrad/devicepluginconrad.cpp +++ b/conrad/devicepluginconrad.cpp @@ -3,7 +3,7 @@ * Copyright (C) 2015 Simon Stürz * * Copyright (C) 2014 Michael Zanetti * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -27,7 +27,7 @@ \brief Plugin for Conrad 433 MHz devices. \ingroup plugins - \ingroup guh-plugins + \ingroup nymea-plugins This plugin allows to controll RF 433 MHz actors an receive remote signals from \l{http://www.conrad.at}{Conrad} devices. diff --git a/conrad/devicepluginconrad.h b/conrad/devicepluginconrad.h index 79412ede..329361ff 100644 --- a/conrad/devicepluginconrad.h +++ b/conrad/devicepluginconrad.h @@ -3,7 +3,7 @@ * Copyright (C) 2015 Simon Stürz * * Copyright (C) 2014 Michael Zanetti * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -30,7 +30,7 @@ class DevicePluginConrad : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "org.guh.DevicePlugin" FILE "devicepluginconrad.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginconrad.json") Q_INTERFACES(DevicePlugin) public: diff --git a/datetime/alarm.cpp b/datetime/alarm.cpp index 77bf7ed7..87f28c12 100644 --- a/datetime/alarm.cpp +++ b/datetime/alarm.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/datetime/alarm.h b/datetime/alarm.h index 0f0f6795..8c9edcc8 100644 --- a/datetime/alarm.h +++ b/datetime/alarm.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/datetime/countdown.cpp b/datetime/countdown.cpp index 1a968182..b60a6cd8 100644 --- a/datetime/countdown.cpp +++ b/datetime/countdown.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/datetime/countdown.h b/datetime/countdown.h index e507ccf7..7bee6701 100644 --- a/datetime/countdown.h +++ b/datetime/countdown.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/datetime/datetime.pro b/datetime/datetime.pro index 944d8e43..e7a2c690 100644 --- a/datetime/datetime.pro +++ b/datetime/datetime.pro @@ -1,6 +1,8 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_deviceplugindatetime) +QT += network + +TARGET = $$qtLibraryTarget(nymea_deviceplugindatetime) SOURCES += \ deviceplugindatetime.cpp \ diff --git a/datetime/deviceplugindatetime.cpp b/datetime/deviceplugindatetime.cpp index ebadb979..49a64115 100644 --- a/datetime/deviceplugindatetime.cpp +++ b/datetime/deviceplugindatetime.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -26,7 +26,7 @@ \brief Plugin for timezone based time information. \ingroup plugins - \ingroup guh-plugins + \ingroup nymea-plugins The time plugin allows you create rules based on the time, day, month, year, weekday or on weekend. diff --git a/datetime/deviceplugindatetime.h b/datetime/deviceplugindatetime.h index bb901b6c..bdb993dc 100644 --- a/datetime/deviceplugindatetime.h +++ b/datetime/deviceplugindatetime.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -37,7 +37,7 @@ class DevicePluginDateTime : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "deviceplugindatetime.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "deviceplugindatetime.json") Q_INTERFACES(DevicePlugin) public: diff --git a/datetime/deviceplugindatetime.json b/datetime/deviceplugindatetime.json index 00ffc808..3bda703f 100644 --- a/datetime/deviceplugindatetime.json +++ b/datetime/deviceplugindatetime.json @@ -5,7 +5,7 @@ "vendors": [ { "name": "guh", - "displayName": "guh", + "displayName": "guh GmbH", "id": "2062d64d-3232-433c-88bc-0d33c0ba2ba6", "deviceClasses": [ { diff --git a/datetime/translations/c26014c6-87fb-4233-85ed-01d18625018d-de_DE.ts b/datetime/translations/c26014c6-87fb-4233-85ed-01d18625018d-de_DE.ts index e98a4196..c1a57dd5 100644 --- a/datetime/translations/c26014c6-87fb-4233-85ed-01d18625018d-de_DE.ts +++ b/datetime/translations/c26014c6-87fb-4233-85ed-01d18625018d-de_DE.ts @@ -3,12 +3,6 @@ DateTime - - - guh - The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) - guh - Today @@ -30,7 +24,7 @@ city - The name of the ParamType of StateType (65d2a5ff-bcab-43a8-b043-f88cf01586f4) of DeviceClass today + The name of the ParamType of the autocreated EventType (65d2a5ff-bcab-43a8-b043-f88cf01586f4) of DeviceClass today Stadt @@ -42,7 +36,7 @@ country - The name of the ParamType of StateType (a534bd8b-6826-4d71-b9f9-df1433964b94) of DeviceClass today + The name of the ParamType of the autocreated EventType (a534bd8b-6826-4d71-b9f9-df1433964b94) of DeviceClass today Land @@ -54,7 +48,7 @@ day - The name of the ParamType of StateType (eb5231ea-6a1b-4d7e-a95f-d49e7b25122e) of DeviceClass today + The name of the ParamType of the autocreated EventType (eb5231ea-6a1b-4d7e-a95f-d49e7b25122e) of DeviceClass today Tag @@ -66,7 +60,7 @@ month - The name of the ParamType of StateType (fcd8ec96-4488-438a-8b30-58bfe2a7fae2) of DeviceClass today + The name of the ParamType of the autocreated EventType (fcd8ec96-4488-438a-8b30-58bfe2a7fae2) of DeviceClass today Monat @@ -84,7 +78,7 @@ year - The name of the ParamType of StateType (79d4ae9b-ea27-4346-8229-1d90f1ddfc9d) of DeviceClass today + The name of the ParamType of the autocreated EventType (79d4ae9b-ea27-4346-8229-1d90f1ddfc9d) of DeviceClass today Jahr @@ -96,7 +90,7 @@ weekday - The name of the ParamType of StateType (452c0388-7fa1-414e-aeb2-8c7c385824b4) of DeviceClass today + The name of the ParamType of the autocreated EventType (452c0388-7fa1-414e-aeb2-8c7c385824b4) of DeviceClass today Wochentag @@ -105,28 +99,34 @@ The name of the autocreated EventType (f627d052-cee6-4727-b9c6-0e935d41e04a) Wochentag Name geändert + + + guh GmbH + The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) + + - DateTime + Time The name of the plugin DateTime (c26014c6-87fb-4233-85ed-01d18625018d) Zeit/Datum - timeZone - The name of the ParamType of StateType (ab16997c-be29-438e-b588-2507d723d264) of DeviceClass today + timezone + The name of the ParamType of the autocreated EventType (ab16997c-be29-438e-b588-2507d723d264) of DeviceClass today - monthName - The name of the ParamType of StateType (a37acc9c-5cfb-4687-adce-e56beb32586f) of DeviceClass today + month name + The name of the ParamType of the autocreated EventType (a37acc9c-5cfb-4687-adce-e56beb32586f) of DeviceClass today - weekdayName - The name of the ParamType of StateType (f627d052-cee6-4727-b9c6-0e935d41e04a) of DeviceClass today + weekday name + The name of the ParamType of the autocreated EventType (f627d052-cee6-4727-b9c6-0e935d41e04a) of DeviceClass today @@ -138,7 +138,7 @@ weekend - The name of the ParamType of StateType (4de5b57b-bb1a-4d66-9ce3-22bb280b075d) of DeviceClass today + The name of the ParamType of the autocreated EventType (4de5b57b-bb1a-4d66-9ce3-22bb280b075d) of DeviceClass today Wochenende @@ -150,7 +150,7 @@ dusk - The name of the ParamType of StateType (44a99419-fbcd-4d8e-9441-897848b8f77c) of DeviceClass today + The name of the ParamType of the autocreated EventType (44a99419-fbcd-4d8e-9441-897848b8f77c) of DeviceClass today Abenddämmerung @@ -162,7 +162,7 @@ sunrise - The name of the ParamType of StateType (3a08824d-285b-412e-a515-9664b491a85c) of DeviceClass today + The name of the ParamType of the autocreated EventType (3a08824d-285b-412e-a515-9664b491a85c) of DeviceClass today Sonnenaufgang @@ -174,7 +174,7 @@ noon - The name of the ParamType of StateType (d92be29a-929c-4240-91a0-30153850f838) of DeviceClass today + The name of the ParamType of the autocreated EventType (d92be29a-929c-4240-91a0-30153850f838) of DeviceClass today Sonnenhöchststand @@ -186,7 +186,7 @@ dawn - The name of the ParamType of StateType (a5779b11-0499-4a6d-a7bd-8143dcc546b4) of DeviceClass today + The name of the ParamType of the autocreated EventType (a5779b11-0499-4a6d-a7bd-8143dcc546b4) of DeviceClass today Morgendämmerung @@ -198,7 +198,7 @@ sunset - The name of the ParamType of StateType (377f04a7-df58-42ad-a234-e9e23bdc2f85) of DeviceClass today + The name of the ParamType of the autocreated EventType (377f04a7-df58-42ad-a234-e9e23bdc2f85) of DeviceClass today Sonnenuntergang @@ -312,7 +312,7 @@ The name of the paramType (0a54fe54-45a7-4fc5-a8d2-f9b6a92033de) of countdown running - The name of the ParamType of StateType (b21ccd53-1ebd-41a0-a2a3-662874e79837) of DeviceClass countdown + The name of the ParamType of the autocreated EventType (b21ccd53-1ebd-41a0-a2a3-662874e79837) of DeviceClass countdown Läuft diff --git a/datetime/translations/c26014c6-87fb-4233-85ed-01d18625018d-en_US.ts b/datetime/translations/c26014c6-87fb-4233-85ed-01d18625018d-en_US.ts index 707e3d13..61cc0e83 100644 --- a/datetime/translations/c26014c6-87fb-4233-85ed-01d18625018d-en_US.ts +++ b/datetime/translations/c26014c6-87fb-4233-85ed-01d18625018d-en_US.ts @@ -3,12 +3,6 @@ DateTime - - - guh - The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) - - Today @@ -30,7 +24,7 @@ city - The name of the ParamType of StateType (65d2a5ff-bcab-43a8-b043-f88cf01586f4) of DeviceClass today + The name of the ParamType of the autocreated EventType (65d2a5ff-bcab-43a8-b043-f88cf01586f4) of DeviceClass today @@ -42,7 +36,7 @@ country - The name of the ParamType of StateType (a534bd8b-6826-4d71-b9f9-df1433964b94) of DeviceClass today + The name of the ParamType of the autocreated EventType (a534bd8b-6826-4d71-b9f9-df1433964b94) of DeviceClass today @@ -54,7 +48,7 @@ day - The name of the ParamType of StateType (eb5231ea-6a1b-4d7e-a95f-d49e7b25122e) of DeviceClass today + The name of the ParamType of the autocreated EventType (eb5231ea-6a1b-4d7e-a95f-d49e7b25122e) of DeviceClass today @@ -66,7 +60,7 @@ month - The name of the ParamType of StateType (fcd8ec96-4488-438a-8b30-58bfe2a7fae2) of DeviceClass today + The name of the ParamType of the autocreated EventType (fcd8ec96-4488-438a-8b30-58bfe2a7fae2) of DeviceClass today @@ -84,7 +78,7 @@ year - The name of the ParamType of StateType (79d4ae9b-ea27-4346-8229-1d90f1ddfc9d) of DeviceClass today + The name of the ParamType of the autocreated EventType (79d4ae9b-ea27-4346-8229-1d90f1ddfc9d) of DeviceClass today @@ -96,7 +90,7 @@ weekday - The name of the ParamType of StateType (452c0388-7fa1-414e-aeb2-8c7c385824b4) of DeviceClass today + The name of the ParamType of the autocreated EventType (452c0388-7fa1-414e-aeb2-8c7c385824b4) of DeviceClass today @@ -105,28 +99,34 @@ The name of the autocreated EventType (f627d052-cee6-4727-b9c6-0e935d41e04a) + + + guh GmbH + The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) + + - DateTime + Time The name of the plugin DateTime (c26014c6-87fb-4233-85ed-01d18625018d) - timeZone - The name of the ParamType of StateType (ab16997c-be29-438e-b588-2507d723d264) of DeviceClass today + timezone + The name of the ParamType of the autocreated EventType (ab16997c-be29-438e-b588-2507d723d264) of DeviceClass today - monthName - The name of the ParamType of StateType (a37acc9c-5cfb-4687-adce-e56beb32586f) of DeviceClass today + month name + The name of the ParamType of the autocreated EventType (a37acc9c-5cfb-4687-adce-e56beb32586f) of DeviceClass today - weekdayName - The name of the ParamType of StateType (f627d052-cee6-4727-b9c6-0e935d41e04a) of DeviceClass today + weekday name + The name of the ParamType of the autocreated EventType (f627d052-cee6-4727-b9c6-0e935d41e04a) of DeviceClass today @@ -138,7 +138,7 @@ weekend - The name of the ParamType of StateType (4de5b57b-bb1a-4d66-9ce3-22bb280b075d) of DeviceClass today + The name of the ParamType of the autocreated EventType (4de5b57b-bb1a-4d66-9ce3-22bb280b075d) of DeviceClass today @@ -150,7 +150,7 @@ dusk - The name of the ParamType of StateType (44a99419-fbcd-4d8e-9441-897848b8f77c) of DeviceClass today + The name of the ParamType of the autocreated EventType (44a99419-fbcd-4d8e-9441-897848b8f77c) of DeviceClass today @@ -162,7 +162,7 @@ sunrise - The name of the ParamType of StateType (3a08824d-285b-412e-a515-9664b491a85c) of DeviceClass today + The name of the ParamType of the autocreated EventType (3a08824d-285b-412e-a515-9664b491a85c) of DeviceClass today @@ -174,7 +174,7 @@ noon - The name of the ParamType of StateType (d92be29a-929c-4240-91a0-30153850f838) of DeviceClass today + The name of the ParamType of the autocreated EventType (d92be29a-929c-4240-91a0-30153850f838) of DeviceClass today @@ -186,7 +186,7 @@ dawn - The name of the ParamType of StateType (a5779b11-0499-4a6d-a7bd-8143dcc546b4) of DeviceClass today + The name of the ParamType of the autocreated EventType (a5779b11-0499-4a6d-a7bd-8143dcc546b4) of DeviceClass today @@ -198,7 +198,7 @@ sunset - The name of the ParamType of StateType (377f04a7-df58-42ad-a234-e9e23bdc2f85) of DeviceClass today + The name of the ParamType of the autocreated EventType (377f04a7-df58-42ad-a234-e9e23bdc2f85) of DeviceClass today @@ -312,7 +312,7 @@ The name of the paramType (0a54fe54-45a7-4fc5-a8d2-f9b6a92033de) of countdown running - The name of the ParamType of StateType (b21ccd53-1ebd-41a0-a2a3-662874e79837) of DeviceClass countdown + The name of the ParamType of the autocreated EventType (b21ccd53-1ebd-41a0-a2a3-662874e79837) of DeviceClass countdown diff --git a/debian/changelog b/debian/changelog index eb980c85..ded1bcc9 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +nymea-plugins (0.2.0) UNRELEASED; urgency=medium + + * rename to nymea + + -- Michael Zanetti Tue, 06 Mar 2018 22:49:05 +0100 + guh-plugins (0.1.0) xenial; urgency=medium * Add metapackages diff --git a/debian/control b/debian/control index 38c91786..35d7b079 100644 --- a/debian/control +++ b/debian/control @@ -1,9 +1,9 @@ -Source: guh-plugins +Source: nymea-plugins Section: utils Priority: options Maintainer: Michael Zanetti Build-depends: debhelper (>= 0.0.0), - libguh1-dev, + libnymea1-dev, libqt5serialport5-dev, python:any, qtbase5-dev, @@ -11,647 +11,735 @@ Build-depends: debhelper (>= 0.0.0), Standards-Version: 3.9.3 -Package: guh-plugin-avahimonitor +Package: nymea-plugin-avahimonitor Architecture: any Section: libs Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for avahimonitor - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-avahimonitor +Description: nymea.io plugin for avahimonitor + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for avahimonitor + This package will install the nymea.io plugin for avahimonitor -Package: guh-plugin-awattar +Package: nymea-plugin-awattar Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for awattar - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-awattar +Description: nymea.io plugin for awattar + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for awattar + This package will install the nymea.io plugin for awattar -Package: guh-plugin-commandlauncher +Package: nymea-plugin-commandlauncher Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for commandlauncher - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-commandlauncher +Description: nymea.io plugin for commandlauncher + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for commandlauncher + This package will install the nymea.io plugin for commandlauncher -Package: guh-plugin-conrad +Package: nymea-plugin-conrad Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for conrad - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-conrad +Description: nymea.io plugin for conrad + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for conrad + This package will install the nymea.io plugin for conrad -Package: guh-plugin-datetime +Package: nymea-plugin-datetime Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for datetime - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-datetime +Description: nymea.io plugin for datetime + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for datetime + This package will install the nymea.io plugin for datetime -Package: guh-plugin-denon +Package: nymea-plugin-denon Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for denon - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-denon +Description: nymea.io plugin for denon + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for denon + This package will install the nymea.io plugin for denon -Package: guh-plugin-elro +Package: nymea-plugin-elro Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for elro - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-elro +Description: nymea.io plugin for elro + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for elro + This package will install the nymea.io plugin for elro -Package: guh-plugin-eq-3 +Package: nymea-plugin-eq-3 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for eq-3 - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-eq-3 +Description: nymea.io plugin for eq-3 + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for eq-3 + This package will install the nymea.io plugin for eq-3 -Package: guh-plugin-genericelements +Package: nymea-plugin-genericelements Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for genericelements - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-genericelements +Description: nymea.io plugin for genericelements + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for genericelements + This package will install the nymea.io plugin for genericelements -Package: guh-plugin-gpio +Package: nymea-plugin-gpio Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for gpio - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-gpio +Description: nymea.io plugin for gpio + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for gpio + This package will install the nymea.io plugin for gpio -Package: guh-plugin-intertechno +Package: nymea-plugin-intertechno Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for intertechno - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-intertechno +Description: nymea.io plugin for intertechno + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for intertechno + This package will install the nymea.io plugin for intertechno -Package: guh-plugin-kodi +Package: nymea-plugin-kodi Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for kodi - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-kodi +Description: nymea.io plugin for kodi + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for kodi + This package will install the nymea.io plugin for kodi -Package: guh-plugin-leynew +Package: nymea-plugin-leynew Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for leynew - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-leynew +Description: nymea.io plugin for leynew + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for leynew + This package will install the nymea.io plugin for leynew -Package: guh-plugin-lgsmarttv +Package: nymea-plugin-lgsmarttv Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for lgsmarttv - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-lgsmarttv +Description: nymea.io plugin for lgsmarttv + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for lgsmarttv + This package will install the nymea.io plugin for lgsmarttv -Package: guh-plugin-mailnotification +Package: nymea-plugin-mailnotification Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for mailnotification - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-mailnotification +Description: nymea.io plugin for mailnotification + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for mailnotification + This package will install the nymea.io plugin for mailnotification -Package: guh-plugin-multisensor +Package: nymea-plugin-multisensor Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for multisensor - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-multisensor +Description: nymea.io plugin for multisensor + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for multisensor + This package will install the nymea.io plugin for multisensor -Package: guh-plugin-netatmo +Package: nymea-plugin-netatmo Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for netatmo - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-netatmo +Description: nymea.io plugin for netatmo + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for netatmo + This package will install the nymea.io plugin for netatmo -Package: guh-plugin-networkdetector +Package: nymea-plugin-networkdetector Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, nmap, - guh-plugins-translations, -Description: guh.io plugin for networkdetector - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-networkdetector +Description: nymea.io plugin for networkdetector + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for networkdetector + This package will install the nymea.io plugin for networkdetector -Package: guh-plugin-openweathermap +Package: nymea-plugin-openweathermap Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for openweathermap - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-openweathermap +Description: nymea.io plugin for openweathermap + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for openweathermap + This package will install the nymea.io plugin for openweathermap -Package: guh-plugin-orderbutton +Package: nymea-plugin-orderbutton Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for orderbutton - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-orderbutton +Description: nymea.io plugin for orderbutton + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for orderbutton + This package will install the nymea.io plugin for orderbutton -Package: guh-plugin-osdomotics +Package: nymea-plugin-osdomotics Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for osdomotics - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-osdmotics +Description: nymea.io plugin for osdomotics + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for osdomotics + This package will install the nymea.io plugin for osdomotics -Package: guh-plugin-philipshue +Package: nymea-plugin-philipshue Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for philipshue - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-philipshue +Description: nymea.io plugin for philipshue + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for philipshue + This package will install the nymea.io plugin for philipshue -Package: guh-plugin-plantcare +Package: nymea-plugin-plantcare Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for plantcare - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-plantcare +Description: nymea.io plugin for plantcare + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for plantcare + This package will install the nymea.io plugin for plantcare -Package: guh-plugin-pushbullet +Package: nymea-plugin-pushbullet Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for pushbullet - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-pushbullet +Description: nymea.io plugin for pushbullet + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for pushbullet + This package will install the nymea.io plugin for pushbullet -Package: guh-plugin-udpcommander +Package: nymea-plugin-udpcommander Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for UDP commander - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-udpcommander +Description: nymea.io plugin for UDP commander + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for udpcommander + This package will install the nymea.io plugin for udpcommander -Package: guh-plugin-unitec +Package: nymea-plugin-unitec Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for unitec - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-unitec +Description: nymea.io plugin for unitec + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for unitec + This package will install the nymea.io plugin for unitec -Package: guh-plugin-usbwde +Package: nymea-plugin-usbwde Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for usbwde - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-usbwde +Description: nymea.io plugin for usbwde + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for usbwde + This package will install the nymea.io plugin for usbwde -Package: guh-plugin-wakeonlan +Package: nymea-plugin-wakeonlan Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for wakeonlan - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-wakeonlan +Description: nymea.io plugin for wakeonlan + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for wakeonlan + This package will install the nymea.io plugin for wakeonlan -Package: guh-plugin-wemo +Package: nymea-plugin-wemo Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for wemo - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-wemo +Description: nymea.io plugin for wemo + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for wemo + This package will install the nymea.io plugin for wemo -Package: guh-plugin-ws2812 +Package: nymea-plugin-ws2812 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for ws2812 - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-ws2812 +Description: nymea.io plugin for ws2812 + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for ws2812 + This package will install the nymea.io plugin for ws2812 -Package: guh-plugin-tcpcommander +Package: nymea-plugin-tcpcommander Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for TCP commander - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-tcpcommander +Description: nymea.io plugin for TCP commander + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for TCP commander + This package will install the nymea.io plugin for the TCP commander - -Package: guh-plugin-simulation +Package: nymea-plugin-httpcommander Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for simulated devices - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Description: nymea.io plugin for HTTP commander + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for simulated devices + This package will install the nymea.io plugin for the HTPP commander -Package: guh-plugin-elgato +Package: nymea-plugin-simulation Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for elgato - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-simulation +Description: nymea.io plugin for simulated devices + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for elgato + This package will install the nymea.io plugin for simulated devices -Package: guh-plugin-senic +Package: nymea-plugin-elgato Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for senic - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-elgato +Description: nymea.io plugin for elgato + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for senic + This package will install the nymea.io plugin for elgato -Package: guh-plugin-snapd +Package: nymea-plugin-senic Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - guh-plugins-translations, -Description: guh.io plugin for snapd - The guh daemon is a plugin based IoT (Internet of Things) server. The + nymea-plugins-translations, +Replaces: guh-plugin-senic +Description: nymea.io plugin for senic + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the guh.io plugin for snapd + This package will install the nymea.io plugin for senic +Package: nymea-plugin-snapd +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, + nymea-plugins-translations, +Replaces: guh-plugin-snapd +Description: nymea.io plugin for snapd + The nymea daemon is a plugin based IoT (Internet of Things) server. The + server works like a translator for devices, things and services and + allows them to interact. + With the powerful rule engine you are able to connect any device available + in the system and create individual scenes and behaviors for your environment. + . + This package will install the nymea.io plugin for snapd -Package: guh-plugins-translations +Package: nymea-plugin-keba +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, + nymea-plugins-translations, +Replaces: guh-plugin-keba +Description: nymea.io plugin for keba + The nymea daemon is a plugin based IoT (Internet of Things) server. The + server works like a translator for devices, things and services and + allows them to interact. + With the powerful rule engine you are able to connect any device available + in the system and create individual scenes and behaviors for your environment. + . + This package will install the nymea.io plugin for keba + + +Package: nymea-plugin-remotessh +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, + nymea-plugins-translations, +Description: nymea.io plugin for remote ssh connection + The nymea daemon is a plugin based IoT (Internet of Things) server. The + server works like a translator for devices, things and services and + allows them to interact. + With the powerful rule engine you are able to connect any device available + in the system and create individual scenes and behaviors for your environment. + . + This package will install the nymea.io plugin for remote ssh connection + + +Package: nymea-plugins-translations Section: misc Architecture: all Depends: ${misc:Depends} -Description: Translation files for guh plugins - translations - The guh daemon is a plugin based IoT (Internet of Things) server. The +Replaces: guh-plugins-translations +Description: Translation files for nymea plugins - translations + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package provides the translation files for all guh plugins. + This package provides the translation files for all nymea plugins. - -Package: guh-plugins +Package: nymea-plugins Section: libs Architecture: all -Depends: guh-plugin-awattar, - guh-plugin-datetime, - guh-plugin-denon, - guh-plugin-eq-3, - guh-plugin-kodi, - guh-plugin-lgsmarttv, - guh-plugin-mailnotification, - guh-plugin-multisensor, - guh-plugin-netatmo, - guh-plugin-networkdetector, - guh-plugin-openweathermap, - guh-plugin-philipshue, - guh-plugin-pushbullet, - guh-plugin-usbwde, - guh-plugin-wakeonlan, - guh-plugin-wemo, - guh-plugin-elgato, - guh-plugin-senic -Description: Plugins for guh IoT server - the default plugin collection - The guh daemon is a plugin based IoT (Internet of Things) server. The +Depends: nymea-plugin-awattar, + nymea-plugin-datetime, + nymea-plugin-denon, + nymea-plugin-eq-3, + nymea-plugin-kodi, + nymea-plugin-lgsmarttv, + nymea-plugin-mailnotification, + nymea-plugin-multisensor, + nymea-plugin-netatmo, + nymea-plugin-networkdetector, + nymea-plugin-openweathermap, + nymea-plugin-philipshue, + nymea-plugin-pushbullet, + nymea-plugin-usbwde, + nymea-plugin-wakeonlan, + nymea-plugin-wemo, + nymea-plugin-elgato, + nymea-plugin-senic, + nymea-plugin-keba, +Replaces: guh-plugins +Description: Plugins for nymea IoT server - the default plugin collection + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the default guh plugins. + This package will install the default nymea plugins. -Package: guh-plugins-maker +Package: nymea-plugins-maker Section: libs Architecture: all -Depends: guh-plugin-commandlauncher, - guh-plugin-udpcommander, - guh-plugin-tcpcommander, - guh-plugin-genericelements, - guh-plugin-avahimonitor, - guh-plugin-gpio, -Description: Plugins for guh IoT server - Meta package for makers, tinkers and hackers - The guh daemon is a plugin based IoT (Internet of Things) server. The +Depends: nymea-plugin-commandlauncher, + nymea-plugin-udpcommander, + nymea-plugin-tcpcommander, + nymea-plugin-httpcommander, + nymea-plugin-genericelements, + nymea-plugin-avahimonitor, + nymea-plugin-gpio, + nymea-plugin-remotessh, +Replaces: guh-plugins-maker +Description: Plugins for nymea IoT server - Meta package for makers, tinkers and hackers + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install guh plugins for maker, tinker and hackers. + This package will install nymea plugins for maker, tinker and hackers. -Package: guh-plugins-merkurboard +Package: nymea-plugins-merkurboard Section: libs Architecture: all -Depends: guh-plugin-osdomotics, - guh-plugin-plantcare, - guh-plugin-ws2812, - guh-plugin-orderbutton, -Description: Plugins for guh IoT server - Meta package for 6LoWPAN Merkur boards - The guh daemon is a plugin based IoT (Internet of Things) server. The +Depends: nymea-plugin-osdomotics, + nymea-plugin-plantcare, + nymea-plugin-ws2812, + nymea-plugin-orderbutton, +Replaces: guh-plugins-merkurboard +Description: Plugins for nymea IoT server - Meta package for 6LoWPAN Merkur boards + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the 6LoWPAN Merkur board plugins for guh. + This package will install the 6LoWPAN Merkur board plugins for nymea. -Package: guh-plugins-433mhz +Package: nymea-plugins-433mhz Section: libs Architecture: all -Depends: guh-plugin-elro, - guh-plugin-conrad, - guh-plugin-intertechno, - guh-plugin-leynew, - guh-plugin-unitec, -Description: Plugins for guh IoT server - Meta package for RF 433 MHz plugins - The guh daemon is a plugin based IoT (Internet of Things) server. The +Depends: nymea-plugin-elro, + nymea-plugin-conrad, + nymea-plugin-intertechno, + nymea-plugin-leynew, + nymea-plugin-unitec, +Replaces: guh-plugins-433mhz +Description: Plugins for nymea IoT server - Meta package for RF 433 MHz plugins + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install the RF 433 MHz plugins for guh. + This package will install the RF 433 MHz plugins for nymea. -Package: guh-plugins-all +Package: nymea-plugins-all Section: libs Architecture: all -Depends: guh-plugins, - guh-plugins-433mhz, - guh-plugins-maker, - guh-plugins-merkurboard, -Description: Plugins for guh IoT server - Meta package for all plugins - The guh daemon is a plugin based IoT (Internet of Things) server. The +Depends: nymea-plugins, + nymea-plugin-simulation, + nymea-plugin-snapd, + nymea-plugins-433mhz, + nymea-plugins-maker, + nymea-plugins-merkurboard, +Replaces: guh-plugins-all +Description: Plugins for nymea IoT server - Meta package for all plugins + The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and allows them to interact. With the powerful rule engine you are able to connect any device available in the system and create individual scenes and behaviors for your environment. . - This package will install all the available plugins for guh. + This package will install all the available plugins for nymea. diff --git a/debian/copyright b/debian/copyright index bea535ac..ee080ae0 100644 --- a/debian/copyright +++ b/debian/copyright @@ -1,5 +1,5 @@ Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: guhio +Upstream-Name: nymea-plugins Upstream-Contact: Simon Stürz Copyright: 2014-2017, guh GmbH Download: http://www.github.com/guh/guh-plugins diff --git a/debian/guh-plugin-avahimonitor.install.in b/debian/guh-plugin-avahimonitor.install.in deleted file mode 100644 index c26066f9..00000000 --- a/debian/guh-plugin-avahimonitor.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_devicepluginavahimonitor.so \ No newline at end of file diff --git a/debian/guh-plugin-awattar.install.in b/debian/guh-plugin-awattar.install.in deleted file mode 100644 index 42889dca..00000000 --- a/debian/guh-plugin-awattar.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_devicepluginawattar.so \ No newline at end of file diff --git a/debian/guh-plugin-commandlauncher.install.in b/debian/guh-plugin-commandlauncher.install.in deleted file mode 100644 index faf2298a..00000000 --- a/debian/guh-plugin-commandlauncher.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_deviceplugincommandlauncher.so \ No newline at end of file diff --git a/debian/guh-plugin-conrad.install.in b/debian/guh-plugin-conrad.install.in deleted file mode 100644 index 40003bf1..00000000 --- a/debian/guh-plugin-conrad.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_devicepluginconrad.so \ No newline at end of file diff --git a/debian/guh-plugin-datetime.install.in b/debian/guh-plugin-datetime.install.in deleted file mode 100644 index 242a61a0..00000000 --- a/debian/guh-plugin-datetime.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_deviceplugindatetime.so \ No newline at end of file diff --git a/debian/guh-plugin-denon.install.in b/debian/guh-plugin-denon.install.in deleted file mode 100644 index a7539eb3..00000000 --- a/debian/guh-plugin-denon.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_deviceplugindenon.so \ No newline at end of file diff --git a/debian/guh-plugin-elgato.install.in b/debian/guh-plugin-elgato.install.in deleted file mode 100644 index 13621ec6..00000000 --- a/debian/guh-plugin-elgato.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_devicepluginelgato.so diff --git a/debian/guh-plugin-elro.install.in b/debian/guh-plugin-elro.install.in deleted file mode 100644 index ba733efe..00000000 --- a/debian/guh-plugin-elro.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_devicepluginelro.so \ No newline at end of file diff --git a/debian/guh-plugin-eq-3.install.in b/debian/guh-plugin-eq-3.install.in deleted file mode 100644 index ad0c40e4..00000000 --- a/debian/guh-plugin-eq-3.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_deviceplugineq3.so diff --git a/debian/guh-plugin-genericelements.install.in b/debian/guh-plugin-genericelements.install.in deleted file mode 100644 index 7991688e..00000000 --- a/debian/guh-plugin-genericelements.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_deviceplugingenericelements.so \ No newline at end of file diff --git a/debian/guh-plugin-gpio.install.in b/debian/guh-plugin-gpio.install.in deleted file mode 100644 index dd184af1..00000000 --- a/debian/guh-plugin-gpio.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_deviceplugingpio.so \ No newline at end of file diff --git a/debian/guh-plugin-intertechno.install.in b/debian/guh-plugin-intertechno.install.in deleted file mode 100644 index 90d48590..00000000 --- a/debian/guh-plugin-intertechno.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_devicepluginintertechno.so \ No newline at end of file diff --git a/debian/guh-plugin-kodi.install.in b/debian/guh-plugin-kodi.install.in deleted file mode 100644 index 0c692eb1..00000000 --- a/debian/guh-plugin-kodi.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_devicepluginkodi.so \ No newline at end of file diff --git a/debian/guh-plugin-leynew.install.in b/debian/guh-plugin-leynew.install.in deleted file mode 100644 index 698526d1..00000000 --- a/debian/guh-plugin-leynew.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_devicepluginleynew.so \ No newline at end of file diff --git a/debian/guh-plugin-lgsmarttv.install.in b/debian/guh-plugin-lgsmarttv.install.in deleted file mode 100644 index 1495ca32..00000000 --- a/debian/guh-plugin-lgsmarttv.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_devicepluginlgsmarttv.so \ No newline at end of file diff --git a/debian/guh-plugin-mailnotification.install.in b/debian/guh-plugin-mailnotification.install.in deleted file mode 100644 index df923ef2..00000000 --- a/debian/guh-plugin-mailnotification.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_devicepluginmailnotification.so \ No newline at end of file diff --git a/debian/guh-plugin-multisensor.install.in b/debian/guh-plugin-multisensor.install.in deleted file mode 100644 index cbcab752..00000000 --- a/debian/guh-plugin-multisensor.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_devicepluginmultisensor.so \ No newline at end of file diff --git a/debian/guh-plugin-netatmo.install.in b/debian/guh-plugin-netatmo.install.in deleted file mode 100644 index 7ca1a83c..00000000 --- a/debian/guh-plugin-netatmo.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_devicepluginnetatmo.so \ No newline at end of file diff --git a/debian/guh-plugin-networkdetector.install.in b/debian/guh-plugin-networkdetector.install.in deleted file mode 100644 index 1736f7bc..00000000 --- a/debian/guh-plugin-networkdetector.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_devicepluginnetworkdetector.so \ No newline at end of file diff --git a/debian/guh-plugin-openweathermap.install.in b/debian/guh-plugin-openweathermap.install.in deleted file mode 100644 index 14ebe041..00000000 --- a/debian/guh-plugin-openweathermap.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_devicepluginopenweathermap.so \ No newline at end of file diff --git a/debian/guh-plugin-orderbutton.install.in b/debian/guh-plugin-orderbutton.install.in deleted file mode 100644 index 08f7a10c..00000000 --- a/debian/guh-plugin-orderbutton.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_devicepluginorderbutton.so \ No newline at end of file diff --git a/debian/guh-plugin-osdomotics.install.in b/debian/guh-plugin-osdomotics.install.in deleted file mode 100644 index dcf8df01..00000000 --- a/debian/guh-plugin-osdomotics.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_devicepluginosdomotics.so \ No newline at end of file diff --git a/debian/guh-plugin-philipshue.install.in b/debian/guh-plugin-philipshue.install.in deleted file mode 100644 index 4e044ff8..00000000 --- a/debian/guh-plugin-philipshue.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_devicepluginphilipshue.so \ No newline at end of file diff --git a/debian/guh-plugin-plantcare.install.in b/debian/guh-plugin-plantcare.install.in deleted file mode 100644 index 463ca0b1..00000000 --- a/debian/guh-plugin-plantcare.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_devicepluginplantcare.so \ No newline at end of file diff --git a/debian/guh-plugin-pushbullet.install.in b/debian/guh-plugin-pushbullet.install.in deleted file mode 100644 index ff726669..00000000 --- a/debian/guh-plugin-pushbullet.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_devicepluginpushbullet.so \ No newline at end of file diff --git a/debian/guh-plugin-senic.install.in b/debian/guh-plugin-senic.install.in deleted file mode 100644 index 0fe1924a..00000000 --- a/debian/guh-plugin-senic.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_devicepluginsenic.so diff --git a/debian/guh-plugin-simulation.install.in b/debian/guh-plugin-simulation.install.in deleted file mode 100644 index 76112969..00000000 --- a/debian/guh-plugin-simulation.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_devicepluginsimulation.so diff --git a/debian/guh-plugin-snapd.install.in b/debian/guh-plugin-snapd.install.in deleted file mode 100644 index 281b705a..00000000 --- a/debian/guh-plugin-snapd.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_devicepluginsnapd.so diff --git a/debian/guh-plugin-tcpcommander.install.in b/debian/guh-plugin-tcpcommander.install.in deleted file mode 100644 index 9c2e4152..00000000 --- a/debian/guh-plugin-tcpcommander.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_deviceplugintcpcommander.so diff --git a/debian/guh-plugin-udpcommander.install.in b/debian/guh-plugin-udpcommander.install.in deleted file mode 100644 index dc788d36..00000000 --- a/debian/guh-plugin-udpcommander.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_devicepluginudpcommander.so \ No newline at end of file diff --git a/debian/guh-plugin-unitec.install.in b/debian/guh-plugin-unitec.install.in deleted file mode 100644 index c11266e2..00000000 --- a/debian/guh-plugin-unitec.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_devicepluginunitec.so \ No newline at end of file diff --git a/debian/guh-plugin-usbwde.install.in b/debian/guh-plugin-usbwde.install.in deleted file mode 100644 index 422446c8..00000000 --- a/debian/guh-plugin-usbwde.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_devicepluginusbwde.so \ No newline at end of file diff --git a/debian/guh-plugin-wakeonlan.install.in b/debian/guh-plugin-wakeonlan.install.in deleted file mode 100644 index 91fba24d..00000000 --- a/debian/guh-plugin-wakeonlan.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_devicepluginwakeonlan.so \ No newline at end of file diff --git a/debian/guh-plugin-wemo.install.in b/debian/guh-plugin-wemo.install.in deleted file mode 100644 index c23c7929..00000000 --- a/debian/guh-plugin-wemo.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_devicepluginwemo.so \ No newline at end of file diff --git a/debian/guh-plugin-ws2812.install.in b/debian/guh-plugin-ws2812.install.in deleted file mode 100644 index e33c1096..00000000 --- a/debian/guh-plugin-ws2812.install.in +++ /dev/null @@ -1 +0,0 @@ -usr/lib/@DEB_HOST_MULTIARCH@/guh/plugins/libguh_devicepluginws2812.so \ No newline at end of file diff --git a/debian/guh-plugins-translations.dirs b/debian/guh-plugins-translations.dirs deleted file mode 100644 index 667a6a9b..00000000 --- a/debian/guh-plugins-translations.dirs +++ /dev/null @@ -1 +0,0 @@ -usr/share/guh/translations diff --git a/debian/guh-plugins-translations.install.in b/debian/guh-plugins-translations.install.in deleted file mode 100644 index 370cf002..00000000 --- a/debian/guh-plugins-translations.install.in +++ /dev/null @@ -1 +0,0 @@ -translations/*.qm usr/share/guh/translations diff --git a/debian/nymea-plugin-avahimonitor.install.in b/debian/nymea-plugin-avahimonitor.install.in new file mode 100644 index 00000000..f3c0fd06 --- /dev/null +++ b/debian/nymea-plugin-avahimonitor.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginavahimonitor.so \ No newline at end of file diff --git a/debian/nymea-plugin-awattar.install.in b/debian/nymea-plugin-awattar.install.in new file mode 100644 index 00000000..cbb2e27d --- /dev/null +++ b/debian/nymea-plugin-awattar.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginawattar.so \ No newline at end of file diff --git a/debian/nymea-plugin-commandlauncher.install.in b/debian/nymea-plugin-commandlauncher.install.in new file mode 100644 index 00000000..39bff18d --- /dev/null +++ b/debian/nymea-plugin-commandlauncher.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_deviceplugincommandlauncher.so \ No newline at end of file diff --git a/debian/nymea-plugin-conrad.install.in b/debian/nymea-plugin-conrad.install.in new file mode 100644 index 00000000..f820061b --- /dev/null +++ b/debian/nymea-plugin-conrad.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginconrad.so \ No newline at end of file diff --git a/debian/nymea-plugin-datetime.install.in b/debian/nymea-plugin-datetime.install.in new file mode 100644 index 00000000..828b615d --- /dev/null +++ b/debian/nymea-plugin-datetime.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_deviceplugindatetime.so \ No newline at end of file diff --git a/debian/nymea-plugin-denon.install.in b/debian/nymea-plugin-denon.install.in new file mode 100644 index 00000000..38f6830c --- /dev/null +++ b/debian/nymea-plugin-denon.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_deviceplugindenon.so \ No newline at end of file diff --git a/debian/nymea-plugin-elgato.install.in b/debian/nymea-plugin-elgato.install.in new file mode 100644 index 00000000..4647b312 --- /dev/null +++ b/debian/nymea-plugin-elgato.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginelgato.so diff --git a/debian/nymea-plugin-elro.install.in b/debian/nymea-plugin-elro.install.in new file mode 100644 index 00000000..035894a2 --- /dev/null +++ b/debian/nymea-plugin-elro.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginelro.so \ No newline at end of file diff --git a/debian/nymea-plugin-eq-3.install.in b/debian/nymea-plugin-eq-3.install.in new file mode 100644 index 00000000..a0021906 --- /dev/null +++ b/debian/nymea-plugin-eq-3.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_deviceplugineq3.so diff --git a/debian/nymea-plugin-genericelements.install.in b/debian/nymea-plugin-genericelements.install.in new file mode 100644 index 00000000..c87d473b --- /dev/null +++ b/debian/nymea-plugin-genericelements.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_deviceplugingenericelements.so \ No newline at end of file diff --git a/debian/nymea-plugin-gpio.install.in b/debian/nymea-plugin-gpio.install.in new file mode 100644 index 00000000..f525c8d3 --- /dev/null +++ b/debian/nymea-plugin-gpio.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_deviceplugingpio.so \ No newline at end of file diff --git a/debian/nymea-plugin-httpcommander.install.in b/debian/nymea-plugin-httpcommander.install.in new file mode 100644 index 00000000..74e4374a --- /dev/null +++ b/debian/nymea-plugin-httpcommander.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginhttpcommander.so diff --git a/debian/nymea-plugin-intertechno.install.in b/debian/nymea-plugin-intertechno.install.in new file mode 100644 index 00000000..a5b59dc7 --- /dev/null +++ b/debian/nymea-plugin-intertechno.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginintertechno.so \ No newline at end of file diff --git a/debian/nymea-plugin-keba.install.in b/debian/nymea-plugin-keba.install.in new file mode 100644 index 00000000..050c7a82 --- /dev/null +++ b/debian/nymea-plugin-keba.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginkeba.so diff --git a/debian/nymea-plugin-kodi.install.in b/debian/nymea-plugin-kodi.install.in new file mode 100644 index 00000000..17b10eb6 --- /dev/null +++ b/debian/nymea-plugin-kodi.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginkodi.so \ No newline at end of file diff --git a/debian/nymea-plugin-leynew.install.in b/debian/nymea-plugin-leynew.install.in new file mode 100644 index 00000000..781ce187 --- /dev/null +++ b/debian/nymea-plugin-leynew.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginleynew.so \ No newline at end of file diff --git a/debian/nymea-plugin-lgsmarttv.install.in b/debian/nymea-plugin-lgsmarttv.install.in new file mode 100644 index 00000000..f1b065b6 --- /dev/null +++ b/debian/nymea-plugin-lgsmarttv.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginlgsmarttv.so \ No newline at end of file diff --git a/debian/nymea-plugin-mailnotification.install.in b/debian/nymea-plugin-mailnotification.install.in new file mode 100644 index 00000000..c736259e --- /dev/null +++ b/debian/nymea-plugin-mailnotification.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginmailnotification.so \ No newline at end of file diff --git a/debian/nymea-plugin-multisensor.install.in b/debian/nymea-plugin-multisensor.install.in new file mode 100644 index 00000000..94cdcb43 --- /dev/null +++ b/debian/nymea-plugin-multisensor.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginmultisensor.so \ No newline at end of file diff --git a/debian/nymea-plugin-netatmo.install.in b/debian/nymea-plugin-netatmo.install.in new file mode 100644 index 00000000..5664e422 --- /dev/null +++ b/debian/nymea-plugin-netatmo.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginnetatmo.so \ No newline at end of file diff --git a/debian/nymea-plugin-networkdetector.install.in b/debian/nymea-plugin-networkdetector.install.in new file mode 100644 index 00000000..ee1bcbf8 --- /dev/null +++ b/debian/nymea-plugin-networkdetector.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginnetworkdetector.so \ No newline at end of file diff --git a/debian/nymea-plugin-openweathermap.install.in b/debian/nymea-plugin-openweathermap.install.in new file mode 100644 index 00000000..6c6e8fd5 --- /dev/null +++ b/debian/nymea-plugin-openweathermap.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginopenweathermap.so \ No newline at end of file diff --git a/debian/nymea-plugin-orderbutton.install.in b/debian/nymea-plugin-orderbutton.install.in new file mode 100644 index 00000000..0bcc6dca --- /dev/null +++ b/debian/nymea-plugin-orderbutton.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginorderbutton.so \ No newline at end of file diff --git a/debian/nymea-plugin-osdomotics.install.in b/debian/nymea-plugin-osdomotics.install.in new file mode 100644 index 00000000..6846975e --- /dev/null +++ b/debian/nymea-plugin-osdomotics.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginosdomotics.so \ No newline at end of file diff --git a/debian/nymea-plugin-philipshue.install.in b/debian/nymea-plugin-philipshue.install.in new file mode 100644 index 00000000..991dcc25 --- /dev/null +++ b/debian/nymea-plugin-philipshue.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginphilipshue.so \ No newline at end of file diff --git a/debian/nymea-plugin-plantcare.install.in b/debian/nymea-plugin-plantcare.install.in new file mode 100644 index 00000000..725d6068 --- /dev/null +++ b/debian/nymea-plugin-plantcare.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginplantcare.so \ No newline at end of file diff --git a/debian/nymea-plugin-pushbullet.install.in b/debian/nymea-plugin-pushbullet.install.in new file mode 100644 index 00000000..cc408109 --- /dev/null +++ b/debian/nymea-plugin-pushbullet.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginpushbullet.so \ No newline at end of file diff --git a/debian/nymea-plugin-remotessh.install.in b/debian/nymea-plugin-remotessh.install.in new file mode 100644 index 00000000..aa3836c4 --- /dev/null +++ b/debian/nymea-plugin-remotessh.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginremotessh.so diff --git a/debian/nymea-plugin-senic.install.in b/debian/nymea-plugin-senic.install.in new file mode 100644 index 00000000..716ee40e --- /dev/null +++ b/debian/nymea-plugin-senic.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginsenic.so diff --git a/debian/nymea-plugin-simulation.install.in b/debian/nymea-plugin-simulation.install.in new file mode 100644 index 00000000..b1fa7ae9 --- /dev/null +++ b/debian/nymea-plugin-simulation.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginsimulation.so diff --git a/debian/nymea-plugin-snapd.install.in b/debian/nymea-plugin-snapd.install.in new file mode 100644 index 00000000..5d738bbb --- /dev/null +++ b/debian/nymea-plugin-snapd.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginsnapd.so diff --git a/debian/nymea-plugin-tcpcommander.install.in b/debian/nymea-plugin-tcpcommander.install.in new file mode 100644 index 00000000..c1395c41 --- /dev/null +++ b/debian/nymea-plugin-tcpcommander.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_deviceplugintcpcommander.so diff --git a/debian/nymea-plugin-udpcommander.install.in b/debian/nymea-plugin-udpcommander.install.in new file mode 100644 index 00000000..388c8549 --- /dev/null +++ b/debian/nymea-plugin-udpcommander.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginudpcommander.so \ No newline at end of file diff --git a/debian/nymea-plugin-unitec.install.in b/debian/nymea-plugin-unitec.install.in new file mode 100644 index 00000000..d74e9a65 --- /dev/null +++ b/debian/nymea-plugin-unitec.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginunitec.so \ No newline at end of file diff --git a/debian/nymea-plugin-usbwde.install.in b/debian/nymea-plugin-usbwde.install.in new file mode 100644 index 00000000..5b93c812 --- /dev/null +++ b/debian/nymea-plugin-usbwde.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginusbwde.so \ No newline at end of file diff --git a/debian/nymea-plugin-wakeonlan.install.in b/debian/nymea-plugin-wakeonlan.install.in new file mode 100644 index 00000000..8964e048 --- /dev/null +++ b/debian/nymea-plugin-wakeonlan.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginwakeonlan.so \ No newline at end of file diff --git a/debian/nymea-plugin-wemo.install.in b/debian/nymea-plugin-wemo.install.in new file mode 100644 index 00000000..a13aa338 --- /dev/null +++ b/debian/nymea-plugin-wemo.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginwemo.so \ No newline at end of file diff --git a/debian/nymea-plugin-ws2812.install.in b/debian/nymea-plugin-ws2812.install.in new file mode 100644 index 00000000..64b21ec3 --- /dev/null +++ b/debian/nymea-plugin-ws2812.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_devicepluginws2812.so \ No newline at end of file diff --git a/debian/nymea-plugins-translations.dirs b/debian/nymea-plugins-translations.dirs new file mode 100644 index 00000000..43694e3a --- /dev/null +++ b/debian/nymea-plugins-translations.dirs @@ -0,0 +1 @@ +usr/share/nymea/translations diff --git a/debian/nymea-plugins-translations.install.in b/debian/nymea-plugins-translations.install.in new file mode 100644 index 00000000..69dcb0ca --- /dev/null +++ b/debian/nymea-plugins-translations.install.in @@ -0,0 +1 @@ +translations/*.qm usr/share/nymea/translations diff --git a/debian/rules b/debian/rules index 657cd976..c2a6f38a 100755 --- a/debian/rules +++ b/debian/rules @@ -19,5 +19,6 @@ override_dh_install: $(PREPROCESS_FILES:.in=) override_dh_auto_clean: dh_auto_clean + find -name *plugininfo.h -exec {} \; rm -rf $(PREPROCESS_FILES:.in=) diff --git a/denon/denon.pro b/denon/denon.pro index 3b902e55..6a613690 100644 --- a/denon/denon.pro +++ b/denon/denon.pro @@ -1,6 +1,8 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_deviceplugindenon) +QT += network + +TARGET = $$qtLibraryTarget(nymea_deviceplugindenon) SOURCES += \ deviceplugindenon.cpp \ diff --git a/denon/denonconnection.cpp b/denon/denonconnection.cpp index 75ab892e..d55e15ed 100644 --- a/denon/denonconnection.cpp +++ b/denon/denonconnection.cpp @@ -3,7 +3,7 @@ * Copyright (C) 2015 Simon Stürz * * Copyright (C) 2016 Bernhard Trinnes * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/denon/denonconnection.h b/denon/denonconnection.h index a8886d5b..5241aafb 100644 --- a/denon/denonconnection.h +++ b/denon/denonconnection.h @@ -3,7 +3,7 @@ * Copyright (C) 2015 Simon Stürz * * Copyright (C) 2016 Bernhard Trinnes * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/denon/deviceplugindenon.cpp b/denon/deviceplugindenon.cpp index 20227aeb..8c945c56 100644 --- a/denon/deviceplugindenon.cpp +++ b/denon/deviceplugindenon.cpp @@ -3,7 +3,7 @@ * Copyright (C) 2015 Simon Stürz * * Copyright (C) 2016 Bernhard Trinnes * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -27,7 +27,7 @@ \brief Plugin for Denon AV \ingroup plugins - \ingroup guh-plugins + \ingroup nymea-plugins This plug-in supports the \l {http://www.denon.de/de/product/hometheater/avreceivers/avrx1000}{Denon AV Amplifier AVR-X1000} @@ -116,9 +116,9 @@ DeviceManager::DeviceError DevicePluginDenon::executeAction(Device *device, cons // Print information that we are executing now the update action qCDebug(dcDenon) << "set power action" << action.id(); - qCDebug(dcDenon) << "power: " << action.param(AVRX1000PowerStateParamTypeId).value().Bool; + qCDebug(dcDenon) << "power: " << action.param(AVRX1000PowerActionParamTypeId).value().Bool; - if (action.param(AVRX1000PowerStateParamTypeId).value().toBool() == true){ + if (action.param(AVRX1000PowerActionParamTypeId).value().toBool() == true){ QByteArray cmd = "PWON\r"; qCDebug(dcDenon) << "Execute power: " << action.id() << cmd; m_denonConnection->sendData(cmd); @@ -132,7 +132,7 @@ DeviceManager::DeviceError DevicePluginDenon::executeAction(Device *device, cons } else if (action.actionTypeId() == AVRX1000VolumeActionTypeId) { - QByteArray vol = action.param(AVRX1000VolumeStateParamTypeId).value().toByteArray(); + QByteArray vol = action.param(AVRX1000VolumeActionParamTypeId).value().toByteArray(); QByteArray cmd = "MV" + vol + "\r"; qCDebug(dcDenon) << "Execute volume" << action.id() << cmd; @@ -143,7 +143,7 @@ DeviceManager::DeviceError DevicePluginDenon::executeAction(Device *device, cons } else if (action.actionTypeId() == AVRX1000ChannelActionTypeId) { qCDebug(dcDenon) << "Execute update action" << action.id(); - QByteArray channel = action.param(AVRX1000ChannelStateParamTypeId).value().toByteArray(); + QByteArray channel = action.param(AVRX1000ChannelActionParamTypeId).value().toByteArray(); QByteArray cmd = "SI" + channel + "\r"; qCDebug(dcDenon) << "Change to channel:" << cmd; diff --git a/denon/deviceplugindenon.h b/denon/deviceplugindenon.h index bdfc2fc0..03bf0593 100644 --- a/denon/deviceplugindenon.h +++ b/denon/deviceplugindenon.h @@ -3,7 +3,7 @@ * Copyright (C) 2015 Simon Stürz * * Copyright (C) 2016 Bernhard Trinnes * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -41,7 +41,7 @@ class DevicePluginDenon : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "deviceplugindenon.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "deviceplugindenon.json") Q_INTERFACES(DevicePlugin) public: diff --git a/denon/translations/cd758269-dbbb-4ef0-80ab-48bd9a8a2765-de_DE.ts b/denon/translations/cd758269-dbbb-4ef0-80ab-48bd9a8a2765-de_DE.ts index 595b1be9..6e0214e9 100644 --- a/denon/translations/cd758269-dbbb-4ef0-80ab-48bd9a8a2765-de_DE.ts +++ b/denon/translations/cd758269-dbbb-4ef0-80ab-48bd9a8a2765-de_DE.ts @@ -4,8 +4,8 @@ Denon - + Denon The name of the plugin Denon (cd758269-dbbb-4ef0-80ab-48bd9a8a2765) ---------- @@ -13,79 +13,88 @@ The name of the vendor (cf0a9644-2c13-4daf-85c1-ad88d6745b42) - + AVR X1000 The name of the DeviceClass (1cd3d67e-aba0-450e-9e2a-483a1527aba6) AVR X1000 - + ip The name of the paramType (a54b98b4-b78f-41dd-a257-14425c6cf9ab) of AVRX1000 IP Adresse - + connected changed The name of the autocreated EventType (4d1790bf-28c6-4c1f-8892-ba1a0ef140f5) Verbindungsstatus geändert - + connected - The name of the ParamType of StateType (4d1790bf-28c6-4c1f-8892-ba1a0ef140f5) of DeviceClass AVRX1000 + The name of the ParamType of the autocreated EventType (4d1790bf-28c6-4c1f-8892-ba1a0ef140f5) of DeviceClass AVRX1000 Verbunden - + power changed The name of the autocreated EventType (1cdb6b54-6831-4900-95b2-c78f64497701) Eingeschalten geändert - + + power - The name of the ParamType of StateType (1cdb6b54-6831-4900-95b2-c78f64497701) of DeviceClass AVRX1000 + The name of the ParamType of the autocreated EventType (1cdb6b54-6831-4900-95b2-c78f64497701) of DeviceClass AVRX1000 +---------- +The name of the autocreated ParamType of the writable StateType (1cdb6b54-6831-4900-95b2-c78f64497701) of DeviceClass AVRX1000 Eingeschalten - + Set power The name of the autocreated ActionType (1cdb6b54-6831-4900-95b2-c78f64497701) Schalte ein - + volume changed The name of the autocreated EventType (773636b9-304d-463a-8755-fc7488dc0ff3) Lautstärke geändert - + + volume - The name of the ParamType of StateType (773636b9-304d-463a-8755-fc7488dc0ff3) of DeviceClass AVRX1000 + The name of the ParamType of the autocreated EventType (773636b9-304d-463a-8755-fc7488dc0ff3) of DeviceClass AVRX1000 +---------- +The name of the autocreated ParamType of the writable StateType (773636b9-304d-463a-8755-fc7488dc0ff3) of DeviceClass AVRX1000 Lautstärke - + Set volume The name of the autocreated ActionType (773636b9-304d-463a-8755-fc7488dc0ff3) Setze Lautstärke - + channel changed The name of the autocreated EventType (f29ffa2c-31d6-4d88-b160-a38288c82ce1) Kanal geändert - + + channel - The name of the ParamType of StateType (f29ffa2c-31d6-4d88-b160-a38288c82ce1) of DeviceClass AVRX1000 + The name of the ParamType of the autocreated EventType (f29ffa2c-31d6-4d88-b160-a38288c82ce1) of DeviceClass AVRX1000 +---------- +The name of the autocreated ParamType of the writable StateType (f29ffa2c-31d6-4d88-b160-a38288c82ce1) of DeviceClass AVRX1000 Kanal - + Set channel The name of the autocreated ActionType (f29ffa2c-31d6-4d88-b160-a38288c82ce1) Wähle Kanal diff --git a/denon/translations/cd758269-dbbb-4ef0-80ab-48bd9a8a2765-en_US.ts b/denon/translations/cd758269-dbbb-4ef0-80ab-48bd9a8a2765-en_US.ts index 7638edbf..4b6a4817 100644 --- a/denon/translations/cd758269-dbbb-4ef0-80ab-48bd9a8a2765-en_US.ts +++ b/denon/translations/cd758269-dbbb-4ef0-80ab-48bd9a8a2765-en_US.ts @@ -4,8 +4,8 @@ Denon - + Denon The name of the plugin Denon (cd758269-dbbb-4ef0-80ab-48bd9a8a2765) ---------- @@ -13,79 +13,88 @@ The name of the vendor (cf0a9644-2c13-4daf-85c1-ad88d6745b42) - + AVR X1000 The name of the DeviceClass (1cd3d67e-aba0-450e-9e2a-483a1527aba6) - + ip The name of the paramType (a54b98b4-b78f-41dd-a257-14425c6cf9ab) of AVRX1000 - + connected changed The name of the autocreated EventType (4d1790bf-28c6-4c1f-8892-ba1a0ef140f5) - + connected - The name of the ParamType of StateType (4d1790bf-28c6-4c1f-8892-ba1a0ef140f5) of DeviceClass AVRX1000 + The name of the ParamType of the autocreated EventType (4d1790bf-28c6-4c1f-8892-ba1a0ef140f5) of DeviceClass AVRX1000 - + power changed The name of the autocreated EventType (1cdb6b54-6831-4900-95b2-c78f64497701) - + + power - The name of the ParamType of StateType (1cdb6b54-6831-4900-95b2-c78f64497701) of DeviceClass AVRX1000 + The name of the ParamType of the autocreated EventType (1cdb6b54-6831-4900-95b2-c78f64497701) of DeviceClass AVRX1000 +---------- +The name of the autocreated ParamType of the writable StateType (1cdb6b54-6831-4900-95b2-c78f64497701) of DeviceClass AVRX1000 - + Set power The name of the autocreated ActionType (1cdb6b54-6831-4900-95b2-c78f64497701) - + volume changed The name of the autocreated EventType (773636b9-304d-463a-8755-fc7488dc0ff3) - + + volume - The name of the ParamType of StateType (773636b9-304d-463a-8755-fc7488dc0ff3) of DeviceClass AVRX1000 + The name of the ParamType of the autocreated EventType (773636b9-304d-463a-8755-fc7488dc0ff3) of DeviceClass AVRX1000 +---------- +The name of the autocreated ParamType of the writable StateType (773636b9-304d-463a-8755-fc7488dc0ff3) of DeviceClass AVRX1000 - + Set volume The name of the autocreated ActionType (773636b9-304d-463a-8755-fc7488dc0ff3) - + channel changed The name of the autocreated EventType (f29ffa2c-31d6-4d88-b160-a38288c82ce1) - + + channel - The name of the ParamType of StateType (f29ffa2c-31d6-4d88-b160-a38288c82ce1) of DeviceClass AVRX1000 + The name of the ParamType of the autocreated EventType (f29ffa2c-31d6-4d88-b160-a38288c82ce1) of DeviceClass AVRX1000 +---------- +The name of the autocreated ParamType of the writable StateType (f29ffa2c-31d6-4d88-b160-a38288c82ce1) of DeviceClass AVRX1000 - + Set channel The name of the autocreated ActionType (f29ffa2c-31d6-4d88-b160-a38288c82ce1) diff --git a/elgato/aveabulb.cpp b/elgato/aveabulb.cpp index e9fb0cf1..cfd72330 100644 --- a/elgato/aveabulb.cpp +++ b/elgato/aveabulb.cpp @@ -1,6 +1,8 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * This file is part of guh. * + * Copyright (C) 2016-2018 Simon Stürz * + * * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -21,6 +23,8 @@ #include "aveabulb.h" #include "extern-plugininfo.h" +#include + AveaBulb::AveaBulb(Device *device, BluetoothLowEnergyDevice *bluetoothDevice, QObject *parent) : QObject(parent), m_device(device), @@ -40,6 +44,50 @@ BluetoothLowEnergyDevice *AveaBulb::bluetoothDevice() return m_bluetoothDevice; } +bool AveaBulb::setPower(bool power) +{ + if (!m_bluetoothDevice->connected()) + return false; + + if (!m_colorService) + return false; + + qCDebug(dcElgato()) << "Set power" << (power ? "on" : "off"); + + // Sync current color + if (power) + return syncColor(); + + // Power off + QByteArray command; + QDataStream stream(&command, QIODevice::WriteOnly); + stream.setByteOrder(QDataStream::LittleEndian); + + quint8 commandId = static_cast(ColorMessageColor); + quint16 fade = static_cast(m_fade); + quint16 constant = 0x000a; + quint16 white = 0 | 0x8000; + quint16 red = 0 | 0x3000; + quint16 green = 0 | 0x2000; + quint16 blue = 0 | 0x1000; + + stream << commandId << fade << constant << white << red << green << blue; + + qCDebug(dcElgato()) << "Set color data -->" << command.toHex(); + + m_colorService->writeCharacteristic(m_colorCharacteristic, command); + return true; + +} + +bool AveaBulb::setBulbName(const QString &name) +{ + m_bulbName = name; + + // TODO: + return true; +} + bool AveaBulb::setColor(const QColor &color) { if (!m_bluetoothDevice->connected()) @@ -48,12 +96,138 @@ bool AveaBulb::setColor(const QColor &color) if (!m_colorService) return false; + qCDebug(dcElgato()) << "-->" << color.toRgb(); + // Convert rgb to wrgb QByteArray command; - command.append(QByteArray::fromHex("35")); + QDataStream stream(&command, QIODevice::WriteOnly); + stream.setByteOrder(QDataStream::LittleEndian); - qCDebug(dcElgato()) << color << command; + m_red = scaleColorValueUp(color.red()); + m_green = scaleColorValueUp(color.green()); + m_blue = scaleColorValueUp(color.blue()); + m_color = color; + + return syncColor(); +} + +bool AveaBulb::setBrightness(int percentage) +{ + if (!m_bluetoothDevice->connected()) + return false; + + if (!m_colorService) + return false; + + quint16 brightnessValue = qRound(4095.0 * percentage / 100.0); + qCDebug(dcElgato()) << "Brightness value" << percentage << "% -->" << brightnessValue; + + QByteArray command; + QDataStream stream(&command, QIODevice::WriteOnly); + stream.setByteOrder(QDataStream::LittleEndian); + stream << static_cast(ColorMessageBrightness); + stream << brightnessValue; + + m_colorService->writeCharacteristic(m_colorCharacteristic, command); + return true; +} + +bool AveaBulb::setFade(int fade) +{ + m_fade = fade; + return syncColor(); +} + +bool AveaBulb::setWhite(int white) +{ + m_white = white; + return syncColor(); +} + +bool AveaBulb::setRed(int red) +{ + m_red = red; + return syncColor(); +} + +bool AveaBulb::setGreen(int green) +{ + m_green = green; + return syncColor(); +} + +bool AveaBulb::setBlue(int blue) +{ + m_blue = blue; + return syncColor(); +} + +bool AveaBulb::loadValues() +{ + if (!m_bluetoothDevice->connected()) + return false; + + if (!m_colorService) + return false; + + // Request color + m_colorService->writeCharacteristic(m_colorCharacteristic, QByteArray::fromHex("35")); + + // Request brightness + m_colorService->writeCharacteristic(m_colorCharacteristic, QByteArray::fromHex("57")); + + // Request name + m_colorService->writeCharacteristic(m_colorCharacteristic, QByteArray::fromHex("58")); + return true; +} + +quint16 AveaBulb::scaleColorValueUp(int colorValue) +{ + return static_cast(qRound(4095.0 * colorValue / 255.0)); +} + +int AveaBulb::scaleColorValueDown(quint16 colorValue) +{ + return qRound(255.0 * colorValue / 4095.0); +} + +bool AveaBulb::syncColor() +{ + if (!m_bluetoothDevice->connected()) + return false; + + if (!m_colorService) + return false; + + if (!m_device->stateValue(aveaPowerStateTypeId).toBool()) { + qCWarning(dcElgato()) << "Not syncing color because power off"; + return false; + } + + m_device->setStateValue(aveaBlueStateTypeId, m_white); + m_device->setStateValue(aveaRedStateTypeId, m_red); + m_device->setStateValue(aveaGreenStateTypeId, m_green); + m_device->setStateValue(aveaBlueStateTypeId, m_blue); + m_device->setStateValue(aveaColorStateTypeId, QColor(scaleColorValueDown(m_red), scaleColorValueDown(m_green), scaleColorValueDown(m_blue))); + + // Convert rgb to wrgb + QByteArray command; + QDataStream stream(&command, QIODevice::WriteOnly); + stream.setByteOrder(QDataStream::LittleEndian); + + quint8 commandId = static_cast(ColorMessageColor); + quint16 fade = static_cast(m_fade); + quint16 constant = 0x000a; + quint16 white = m_white | 0x8000; + quint16 red = m_red | 0x3000; + quint16 green = m_green | 0x2000; + quint16 blue = m_blue | 0x1000; + + stream << commandId << fade << constant << white << red << green << blue; + + qCDebug(dcElgato()) << "----> Sync" << command.toHex(); + m_colorService->writeCharacteristic(m_colorCharacteristic, command); return true; } @@ -70,7 +244,6 @@ void AveaBulb::onConnectedChanged(const bool &connected) m_colorService = nullptr; m_imageService = nullptr; } - } void AveaBulb::onServiceDiscoveryFinished() @@ -113,13 +286,13 @@ void AveaBulb::onColorServiceStateChanged(const QLowEnergyService::ServiceState foreach (const QLowEnergyCharacteristic &characteristic, m_colorService->characteristics()) { qCDebug(dcElgato()) << " -->" << characteristic.name() << characteristic.uuid().toString() << characteristic.value(); - foreach (const QLowEnergyDescriptor &desciptor, characteristic.descriptors()) { - qCDebug(dcElgato()) << " -->" << desciptor.name() << desciptor.uuid().toString() << desciptor.value(); + foreach (const QLowEnergyDescriptor &descriptor, characteristic.descriptors()) { + qCDebug(dcElgato()) << " -->" << descriptor.name() << descriptor.uuid().toString() << descriptor.value(); } } // Data characteristic - m_colorCharacteristic = m_colorService->characteristic(QBluetoothUuid(QUuid("f815e811-456c-6761-746f-4d756e696368"))); + m_colorCharacteristic = m_colorService->characteristic(colorCharacteristicUuid); if (!m_colorCharacteristic.isValid()) { qCWarning(dcElgato()) << "Invalid color data characteristic."; } @@ -128,37 +301,72 @@ void AveaBulb::onColorServiceStateChanged(const QLowEnergyService::ServiceState QLowEnergyDescriptor notificationDescriptor = m_colorCharacteristic.descriptor(QBluetoothUuid::ClientCharacteristicConfiguration); m_colorService->writeDescriptor(notificationDescriptor, QByteArray::fromHex("0100")); - // Get current configuration - - // Color - m_colorService->writeCharacteristic(m_colorCharacteristic, QByteArray::fromHex("35")); - - // Brightness - m_colorService->writeCharacteristic(m_colorCharacteristic, QByteArray::fromHex("57")); - - // Name - m_colorService->writeCharacteristic(m_colorCharacteristic, QByteArray::fromHex("58")); - + // Load current configuration + loadValues(); } void AveaBulb::onColorServiceCharacteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &value) { - qCDebug(dcElgato()) << "Color characteristic changed" << characteristic.uuid().toString() << value; - - if (value.startsWith(QByteArray::fromHex("35"))) { - qCDebug(dcElgato()) << "Received color notification"; - qCDebug(dcElgato()) << " Fade" << value.mid(1, 2); - qCDebug(dcElgato()) << " Fixed value" << value.mid(3, 2); - qCDebug(dcElgato()) << " White" << value.mid(5, 2); - qCDebug(dcElgato()) << " Red" << value.mid(7, 2); - qCDebug(dcElgato()) << " Green" << value.mid(9, 2); - qCDebug(dcElgato()) << " Blue" << value.mid(11, 2); - } else if (value.startsWith(QByteArray::fromHex("57"))) { - qCDebug(dcElgato()) << "Received brightness notification"; - qCDebug(dcElgato()) << " Fade" << value.mid(1, 2); - } else if (value.startsWith(QByteArray::fromHex("58"))) { - qCDebug(dcElgato()) << "Received name notification"; - qCDebug(dcElgato()) << " Name" << value.mid(1, value.count() - 2); + if (characteristic.uuid() != colorCharacteristicUuid) { + qCWarning(dcElgato()) << "Unhandled color service characteristic notification received" << value.toHex(); + return; } + + //qCDebug(dcElgato()) << "Color characteristic changed" << characteristic.uuid().toString() << value.toHex(); + + QByteArray payload = value; + QDataStream stream(&payload, QIODevice::ReadOnly); + quint8 messageType; + stream.setByteOrder(QDataStream::LittleEndian); + stream >> messageType; + + //qCDebug(dcElgato()) << "Message type" << messageType << static_cast(messageType); + + switch (messageType) { + case ColorMessageColor: { + quint16 whiteCurrentValue = 0; quint16 blueCurrentValue = 0; quint16 greenCurrentValue = 0; quint16 redCurrentValue = 0; + quint16 whiteTargetValue = 0; quint16 blueTargetValue = 0; quint16 greenTargetValue = 0; quint16 redTargetValue = 0; + + // Read current color + stream >> whiteCurrentValue >> blueCurrentValue >> greenCurrentValue >> redCurrentValue; + + // Read target color + stream >> whiteTargetValue >> blueTargetValue >> greenTargetValue >> redTargetValue; + + // Convert color values + quint16 whiteCurrentAdjustedValue = whiteCurrentValue; + quint16 blueCurrentAdjustedValue = blueCurrentValue ^ 0x1000; + quint16 greenCurrentAdjustedValue = greenCurrentValue ^ 0x2000; + quint16 redCurrentAdjustedValue = redCurrentValue ^ 0x3000; + + qCDebug(dcElgato()) << "Received color notification:"; + qCDebug(dcElgato()) << " white (current):" << value.mid(1, 2).toHex() << whiteCurrentValue << whiteCurrentAdjustedValue; + qCDebug(dcElgato()) << " blue (current):" << value.mid(3, 2).toHex() << blueCurrentValue << blueCurrentAdjustedValue; + qCDebug(dcElgato()) << " green (current):" << value.mid(5, 2).toHex() << greenCurrentValue << greenCurrentAdjustedValue; + qCDebug(dcElgato()) << " red (current):" << value.mid(7, 2).toHex() << redCurrentValue << redCurrentAdjustedValue; + qCDebug(dcElgato()) << " white (target) :" << value.mid(9, 2).toHex() << whiteTargetValue; + qCDebug(dcElgato()) << " blue (target) :" << value.mid(11, 2).toHex() << blueTargetValue; + qCDebug(dcElgato()) << " green (target) :" << value.mid(13, 2).toHex() << greenTargetValue; + qCDebug(dcElgato()) << " red (target) :" << value.mid(15, 2).toHex() << redTargetValue; + + break; + } + case ColorMessageBrightness: { + quint16 brightnessValue = 0; + stream >> brightnessValue; + int brightnessPercentage = qRound(brightnessValue * 100 / 4095.0); + qCDebug(dcElgato()) << "Brightness notification" << value.mid(1, 2).toHex() << brightnessValue << "-->" << brightnessPercentage << "%"; + m_device->setStateValue(aveaBrightnessStateTypeId, brightnessPercentage); + break; + } + case ColorMessageName: { + qCDebug(dcElgato()) << "Name notification:" << value.mid(1, value.count() - 2); + break; + } + default: + qCWarning(dcElgato()) << "Unhandled color characteristic notification received" << value.toHex(); + break; + } + } diff --git a/elgato/aveabulb.h b/elgato/aveabulb.h index d2028939..5cc31072 100644 --- a/elgato/aveabulb.h +++ b/elgato/aveabulb.h @@ -1,6 +1,8 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * This file is part of guh. * + * Copyright (C) 2016-2018 Simon Stürz * + * * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -30,22 +32,55 @@ #include "hardware/bluetoothlowenergy/bluetoothlowenergydevice.h" static QBluetoothUuid colorServiceUuid = QBluetoothUuid(QUuid("f815e810-456c-6761-746f-4d756e696368")); +static QBluetoothUuid colorCharacteristicUuid = QBluetoothUuid(QUuid("f815e811-456c-6761-746f-4d756e696368")); + static QBluetoothUuid imageServiceUuid = QBluetoothUuid(QUuid("f815e500-456c-6761-746f-4d756e696368")); class AveaBulb : public QObject { Q_OBJECT public: + enum ColorMessage { + ColorMessageColor = 0x35, + ColorMessageBrightness = 0x57, + ColorMessageName = 0x58 + }; + Q_ENUM(ColorMessage) + explicit AveaBulb(Device *device, BluetoothLowEnergyDevice *bluetoothDevice, QObject *parent = nullptr); Device *device(); BluetoothLowEnergyDevice *bluetoothDevice(); + bool setPower(bool power); + bool setBulbName(const QString &name); bool setColor(const QColor &color); + bool setBrightness(int percentage); + bool setFade(int fade); + + bool setWhite(int white); + bool setRed(int red); + bool setGreen(int green); + bool setBlue(int blue); + + bool loadValues(); + bool syncColor(); private: - Device *m_device; - BluetoothLowEnergyDevice *m_bluetoothDevice; + Device *m_device = nullptr; + BluetoothLowEnergyDevice *m_bluetoothDevice = nullptr; + + QString m_bulbName; + QColor m_color; + int m_brightness = 0; + int m_fade = 0; + int m_white = 0; + int m_red = 0; + int m_green = 0; + int m_blue = 0; + + quint16 scaleColorValueUp(int colorValue); + int scaleColorValueDown(quint16 colorValue); private: QLowEnergyService *m_colorService = nullptr; diff --git a/elgato/aveacolor.cpp b/elgato/aveacolor.cpp deleted file mode 100644 index df3da5b4..00000000 --- a/elgato/aveacolor.cpp +++ /dev/null @@ -1,70 +0,0 @@ -#include "aveacolor.h" - -AveaColor::AveaColor(const QColor &color) -{ - // Convert rgb to wrgb - - ColorRgbw rgbw = rgbToRgbw(color.red(), color.green(), color.blue()); - Q_UNUSED(rgbw) - -} - -uint AveaColor::white() const -{ - return m_white; -} - -uint AveaColor::red() const -{ - return m_red; -} - -uint AveaColor::green() const -{ - return m_green; -} - -uint AveaColor::blue() const -{ - return m_blue; -} - -QByteArray AveaColor::toByteArray() -{ - return QByteArray(); -} - -// The saturation is the colorfulness of a color relative to its own brightness. -uint AveaColor::saturation(ColorRgbw rgbw) -{ - // Find the smallest of all three parameters. - float low = qMin(rgbw.red, qMin(rgbw.green, rgbw.blue)); - // Find the highest of all three parameters. - float high = qMax(rgbw.red, qMax(rgbw.green, rgbw.blue)); - // The difference between the last two variables - // divided by the highest is the saturation. - return qRound(100 * ((high - low) / high)); -} - -uint AveaColor::getWhite(ColorRgbw rgbw) -{ - return (255 - saturation(rgbw)) / 255 * (rgbw.red + rgbw.green + rgbw.blue) / 3; -} - -uint AveaColor::getWhite(ColorRgbw rgbw, int redMax, int greenMax, int blueMax) -{ - // Set the maximum value for all colors. - rgbw.red = (float)rgbw.red / 255.0 * (float)redMax; - rgbw.green = (float)rgbw.green / 255.0 * (float)greenMax; - rgbw.blue = (float)rgbw.blue / 255.0 * (float)blueMax; - return (255 - saturation(rgbw)) / 255 * (rgbw.red + rgbw.green + rgbw.blue) / 3; - return 0; -} - -ColorRgbw AveaColor::rgbToRgbw(uint red, uint green, uint blue) -{ - uint white = 0; - ColorRgbw rgbw = {red, green, blue, white}; - rgbw.white = getWhite(rgbw); - return rgbw; -} diff --git a/elgato/aveacolor.h b/elgato/aveacolor.h deleted file mode 100644 index a38041b1..00000000 --- a/elgato/aveacolor.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef AVEACOLOR_H -#define AVEACOLOR_H - -#include -#include - -struct ColorRgbw { - uint red; - uint green; - uint blue; - uint white; -}; - - -class AveaColor -{ -public: - AveaColor(const QColor &color); - - uint white() const; - uint red() const; - uint green() const; - uint blue() const; - - QByteArray toByteArray(); - -private: - uint m_white = 0; - uint m_red = 0; - uint m_green = 0; - uint m_blue = 0; - - uint saturation(ColorRgbw rgbw); - uint getWhite(ColorRgbw rgbw); - uint getWhite(ColorRgbw rgbw, int redMax, int greenMax, int blueMax); - ColorRgbw rgbToRgbw(unsigned int red, unsigned int green, unsigned int blue); -}; - -#endif // AVEACOLOR_H diff --git a/elgato/devicepluginelgato.cpp b/elgato/devicepluginelgato.cpp index d21060ce..c9ba8226 100644 --- a/elgato/devicepluginelgato.cpp +++ b/elgato/devicepluginelgato.cpp @@ -1,6 +1,8 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * This file is part of guh. * + * Copyright (C) 2016-2018 Simon Stürz * + * * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -24,7 +26,7 @@ \brief Plugin for Elgato Avea Blutooth lamp. \ingroup plugins - \ingroup guh-plugins + \ingroup nymea-plugins This plugin allows to find and controll the Bluetooth Low Energy bulb from \l{https://www.elgato.com/en/smart/avea}{Elgato Avea}. @@ -408,6 +410,17 @@ DevicePluginElgato::DevicePluginElgato() } +DevicePluginElgato::~DevicePluginElgato() +{ + hardwareManager()->pluginTimerManager()->unregisterTimer(m_pluginTimer); +} + +void DevicePluginElgato::init() +{ + m_pluginTimer = hardwareManager()->pluginTimerManager()->registerTimer(10); + connect(m_pluginTimer, &PluginTimer::timeout, this, &DevicePluginElgato::onPluginTimer); +} + DeviceManager::DeviceError DevicePluginElgato::discoverDevices(const DeviceClassId &deviceClassId, const ParamList ¶ms) { Q_UNUSED(params) @@ -438,31 +451,86 @@ DeviceManager::DeviceSetupStatus DevicePluginElgato::setupDevice(Device *device) BluetoothLowEnergyDevice *bluetoothDevice = hardwareManager()->bluetoothLowEnergyManager()->registerDevice(deviceInfo, QLowEnergyController::PublicAddress); AveaBulb *bulb = new AveaBulb(device, bluetoothDevice, this); - m_bulbs.insert(device, bulb); - bulb->bluetoothDevice()->connectDevice(); return DeviceManager::DeviceSetupStatusSuccess; } return DeviceManager::DeviceSetupStatusFailure; } +void DevicePluginElgato::postSetupDevice(Device *device) +{ + AveaBulb *bulb = m_bulbs.value(device); + // Init values for restore + bulb->setBrightness(device->stateValue(aveaBrightnessStateTypeId).toInt()); + bulb->setFade(device->stateValue(aveaFadeStateTypeId).toInt()); + bulb->setWhite(device->stateValue(aveaWhiteStateTypeId).toInt()); + bulb->setRed(device->stateValue(aveaRedStateTypeId).toInt()); + bulb->setGreen(device->stateValue(aveaGreenStateTypeId).toInt()); + bulb->setBlue(device->stateValue(aveaBlueStateTypeId).toInt()); + + bulb->bluetoothDevice()->connectDevice(); +} + DeviceManager::DeviceError DevicePluginElgato::executeAction(Device *device, const Action &action) { - Q_UNUSED(action) - // check deviceClassId if (device->deviceClassId() == aveaDeviceClassId) { AveaBulb *bulb = m_bulbs.value(device); - Q_UNUSED(bulb) -// // check actionTypeId -// if (action.actionTypeId() == powerOffActionTypeId) { -// bulb->actionPowerOff(action.id()); -// return DeviceManager::DeviceErrorAsync; -// } else if (action.actionTypeId() == colorActionTypeId) { + if (action.actionTypeId() == aveaPowerActionTypeId) { + bool power = action.param(aveaPowerActionParamTypeId).value().toBool(); + device->setStateValue(aveaPowerStateTypeId, power); + if (!bulb->setPower(power)) + return DeviceManager::DeviceErrorHardwareNotAvailable; -// return DeviceManager::DeviceErrorNoError; -// } + return DeviceManager::DeviceErrorNoError; + } else if (action.actionTypeId() == aveaBrightnessActionTypeId) { + int percentage = action.param(aveaBrightnessActionParamTypeId).value().toInt(); + if (!bulb->setBrightness(percentage)) + return DeviceManager::DeviceErrorHardwareNotAvailable; + + device->setStateValue(aveaBrightnessStateTypeId, percentage); + return DeviceManager::DeviceErrorNoError; + } else if (action.actionTypeId() == aveaColorActionTypeId) { + QColor color = action.param(aveaColorActionParamTypeId).value().value(); + if (!bulb->setColor(color)) + return DeviceManager::DeviceErrorHardwareNotAvailable; + + device->setStateValue(aveaColorStateTypeId, color); + return DeviceManager::DeviceErrorNoError; + } else if (action.actionTypeId() == aveaWhiteActionTypeId) { + int whiteValue = action.param(aveaWhiteActionParamTypeId).value().toInt(); + if (!bulb->setWhite(whiteValue)) + return DeviceManager::DeviceErrorHardwareNotAvailable; + + device->setStateValue(aveaWhiteStateTypeId, whiteValue); + return DeviceManager::DeviceErrorNoError; + } else if (action.actionTypeId() == aveaGreenActionTypeId) { + int greenValue = action.param(aveaGreenActionParamTypeId).value().toInt(); + if (!bulb->setGreen(greenValue)) + return DeviceManager::DeviceErrorHardwareNotAvailable; + + return DeviceManager::DeviceErrorNoError; + } else if (action.actionTypeId() == aveaRedActionTypeId) { + int redValue = action.param(aveaRedActionParamTypeId).value().toInt(); + if (!bulb->setRed(redValue)) + return DeviceManager::DeviceErrorHardwareNotAvailable; + + return DeviceManager::DeviceErrorNoError; + } else if (action.actionTypeId() == aveaBlueActionTypeId) { + int blueValue = action.param(aveaBlueActionParamTypeId).value().toInt(); + if (!bulb->setBlue(blueValue)) + return DeviceManager::DeviceErrorHardwareNotAvailable; + + return DeviceManager::DeviceErrorNoError; + } else if (action.actionTypeId() == aveaFadeActionTypeId) { + int fadeValue = action.param(aveaFadeActionParamTypeId).value().toInt(); + device->setStateValue(aveaFadeStateTypeId, fadeValue); + if (!bulb->setFade(fadeValue)) + return DeviceManager::DeviceErrorHardwareNotAvailable; + + return DeviceManager::DeviceErrorNoError; + } return DeviceManager::DeviceErrorActionTypeNotFound; } @@ -490,6 +558,15 @@ bool DevicePluginElgato::verifyExistingDevices(const QBluetoothDeviceInfo &devic return false; } +void DevicePluginElgato::onPluginTimer() +{ + foreach (AveaBulb *bulb, m_bulbs.values()) { + if (!bulb->bluetoothDevice()->connected()) { + bulb->bluetoothDevice()->connectDevice(); + } + } +} + void DevicePluginElgato::onBluetoothDiscoveryFinished() { BluetoothDiscoveryReply *reply = static_cast(sender()); diff --git a/elgato/devicepluginelgato.h b/elgato/devicepluginelgato.h index 7eee753f..65f79dbd 100644 --- a/elgato/devicepluginelgato.h +++ b/elgato/devicepluginelgato.h @@ -1,6 +1,8 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * This file is part of guh. * + * Copyright (C) 2016-2018 Simon Stürz * + * * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -21,30 +23,37 @@ #ifndef DEVICEPLUGINELGATO_H #define DEVICEPLUGINELGATO_H +#include "aveabulb.h" +#include "plugintimer.h" #include "plugin/deviceplugin.h" #include "hardware/bluetoothlowenergy/bluetoothlowenergydevice.h" -#include "aveabulb.h" class DevicePluginElgato : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "devicepluginelgato.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginelgato.json") Q_INTERFACES(DevicePlugin) public: explicit DevicePluginElgato(); + ~DevicePluginElgato(); + void init() override; DeviceManager::DeviceError discoverDevices(const DeviceClassId &deviceClassId, const ParamList ¶ms) override; DeviceManager::DeviceSetupStatus setupDevice(Device *device) override; + void postSetupDevice(Device *device) override; DeviceManager::DeviceError executeAction(Device *device, const Action &action) override; void deviceRemoved(Device *device) override; private: + PluginTimer *m_pluginTimer = nullptr; QHash m_bulbs; + bool verifyExistingDevices(const QBluetoothDeviceInfo &deviceInfo); private slots: + void onPluginTimer(); void onBluetoothDiscoveryFinished(); }; diff --git a/elgato/devicepluginelgato.json b/elgato/devicepluginelgato.json index cfc40484..8626a936 100644 --- a/elgato/devicepluginelgato.json +++ b/elgato/devicepluginelgato.json @@ -1,37 +1,33 @@ { - "displayName": "Elgato", "id": "c5c03ad4-bfdb-444a-8eca-2c234c46cc27", "name": "Elgato", + "displayName": "Elgato", "vendors": [ { - "displayName": "Elgato", - "name": "elgato", "id": "90a3091d-1053-4f77-8dc3-92e27bbcebe7", + "name": "elgato", + "displayName": "Elgato", "deviceClasses": [ { "id": "164f9602-90ee-4693-bda3-9cafae37603e", "name": "avea", "displayName": "Avea", "deviceIcon": "LightBulb", - "criticalStateTypeId": "6d5e792a-c786-40d2-ae35-a48ac6fafcbc", - "basicTags": [ - "Device", - "Actuator", - "Lighting" - ], + "basicTags": ["Device", "Actuator", "Lighting"], + "interfaces": ["connectable"], "createMethods": ["discovery"], "paramTypes": [ { "id": "d7a5d96f-33dc-4dc3-a171-b1e89a5e1a4b", "name": "name", - "displayName": "name", + "displayName": "Name", "type": "QString", "inputType": "TextLine" }, { "id": "20932e39-00fd-40e3-8f39-850ba149844e", "name": "macAddress", - "displayName": "mac address", + "displayName": "MAC address", "type": "QString", "inputType": "MacAddress" } @@ -40,16 +36,27 @@ { "id": "6d5e792a-c786-40d2-ae35-a48ac6fafcbc", "name": "connected", - "displayName": "connected", - "displayNameEvent": "connected changed", + "displayName": "Connected", + "displayNameEvent": "Connected changed", "type": "bool", + "cached": false, + "defaultValue": false + }, + { + "id": "2b779968-ff4f-4a05-a466-074e14288a8c", + "name": "power", + "displayName": "Power", + "displayNameEvent": "Power changed", + "displayNameAction": "Set power", + "type": "bool", + "writable": true, "defaultValue": false }, { "id": "c38181a0-e19b-423f-8b66-dedda94e89b5", "name": "brightness", "displayName": "Brightness", - "displayNameEvent": "brightness changed", + "displayNameEvent": "Brightness changed", "displayNameAction": "Set brightness", "type": "int", "defaultValue": 100, @@ -62,14 +69,84 @@ { "id": "3f15637a-8272-4714-bd08-04806e05bbef", "name": "color", - "displayName": "color", - "displayNameEvent": "color changed", + "displayName": "Color", + "displayNameEvent": "Color changed", "displayNameAction": "Set color", "type": "QColor", "ruleRelevant": false, "eventRuleRelevant": false, "defaultValue": "#000000", "writable": true + }, + { + "id": "50f6a224-fb8d-487d-8774-1a0536e5b1aa", + "name": "white", + "displayName": "white", + "displayNameEvent": "white changed", + "displayNameAction": "Set white", + "type": "int", + "defaultValue": 0, + "ruleRelevant": false, + "minValue": 0, + "maxValue": 4095, + "eventRuleRelevant": false, + "writable": true + }, + { + "id": "50ab71d1-8970-4531-b1ad-f387d01bab90", + "name": "red", + "displayName": "Red", + "displayNameEvent": "Red changed", + "displayNameAction": "Set red", + "type": "int", + "defaultValue": 0, + "ruleRelevant": false, + "minValue": 0, + "maxValue": 4095, + "eventRuleRelevant": false, + "writable": true + }, + { + "id": "9e8ddebc-33fe-418a-895f-d8148fabcfee", + "name": "green", + "displayName": "Green", + "displayNameEvent": "Green changed", + "displayNameAction": "Set green", + "type": "int", + "defaultValue": 0, + "ruleRelevant": false, + "minValue": 0, + "maxValue": 4095, + "eventRuleRelevant": false, + "writable": true + }, + { + "id": "f4310747-d468-4d2e-abe4-b5e4d0245dad", + "name": "blue", + "displayName": "Blue", + "displayNameEvent": "Blue changed", + "displayNameAction": "Set blue", + "type": "int", + "defaultValue": 0, + "ruleRelevant": false, + "minValue": 0, + "maxValue": 4095, + "eventRuleRelevant": false, + "writable": true + }, + { + "id": "01ccda48-44c6-495b-b0a7-c2a0bf5a570d", + "name": "fade", + "displayName": "Fade", + "displayNameEvent": "Fade changed", + "displayNameAction": "Set fade", + "type": "int", + "defaultValue": 0, + "ruleRelevant": false, + "minValue": 0, + "maxValue": 1000, + "eventRuleRelevant": false, + "writable": true } ] } diff --git a/elgato/elgato.pro b/elgato/elgato.pro index 66c85847..eef74c23 100644 --- a/elgato/elgato.pro +++ b/elgato/elgato.pro @@ -1,16 +1,16 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_devicepluginelgato) +QT += bluetooth + +TARGET = $$qtLibraryTarget(nymea_devicepluginelgato) SOURCES += \ devicepluginelgato.cpp \ aveabulb.cpp \ - aveacolor.cpp HEADERS += \ devicepluginelgato.h \ aveabulb.h \ - aveacolor.h diff --git a/elgato/translations/c5c03ad4-bfdb-444a-8eca-2c234c46cc27-de_DE.ts b/elgato/translations/c5c03ad4-bfdb-444a-8eca-2c234c46cc27-de_DE.ts index 2c2f03df..1a8c04ca 100644 --- a/elgato/translations/c5c03ad4-bfdb-444a-8eca-2c234c46cc27-de_DE.ts +++ b/elgato/translations/c5c03ad4-bfdb-444a-8eca-2c234c46cc27-de_DE.ts @@ -4,8 +4,8 @@ Elgato - - + + Elgato The name of the plugin Elgato (c5c03ad4-bfdb-444a-8eca-2c234c46cc27) ---------- @@ -13,69 +13,201 @@ The name of the vendor (90a3091d-1053-4f77-8dc3-92e27bbcebe7) - + Avea The name of the DeviceClass (164f9602-90ee-4693-bda3-9cafae37603e) - - name - The name of the paramType (d7a5d96f-33dc-4dc3-a171-b1e89a5e1a4b) of avea - - - - - mac address - The name of the paramType (20932e39-00fd-40e3-8f39-850ba149844e) of avea - - - - - connected changed - The name of the autocreated EventType (6d5e792a-c786-40d2-ae35-a48ac6fafcbc) - - - - - connected - The name of the ParamType of StateType (6d5e792a-c786-40d2-ae35-a48ac6fafcbc) of DeviceClass avea - - - - - color changed - The name of the autocreated EventType (3f15637a-8272-4714-bd08-04806e05bbef) - - - - + Set color The name of the autocreated ActionType (3f15637a-8272-4714-bd08-04806e05bbef) - - brightness changed + + Name + The name of the paramType (d7a5d96f-33dc-4dc3-a171-b1e89a5e1a4b) of avea + + + + + MAC address + The name of the paramType (20932e39-00fd-40e3-8f39-850ba149844e) of avea + + + + + Connected changed + The name of the autocreated EventType (6d5e792a-c786-40d2-ae35-a48ac6fafcbc) + + + + + Connected + The name of the ParamType of the autocreated EventType (6d5e792a-c786-40d2-ae35-a48ac6fafcbc) of DeviceClass avea + + + + + Power changed + The name of the autocreated EventType (2b779968-ff4f-4a05-a466-074e14288a8c) + + + + + + Power + The name of the ParamType of the autocreated EventType (2b779968-ff4f-4a05-a466-074e14288a8c) of DeviceClass avea +---------- +The name of the autocreated ParamType of the writable StateType (2b779968-ff4f-4a05-a466-074e14288a8c) of DeviceClass avea + + + + + + Brightness + The name of the ParamType of the autocreated EventType (c38181a0-e19b-423f-8b66-dedda94e89b5) of DeviceClass avea +---------- +The name of the autocreated ParamType of the writable StateType (c38181a0-e19b-423f-8b66-dedda94e89b5) of DeviceClass avea + + + + + + Color + The name of the ParamType of the autocreated EventType (3f15637a-8272-4714-bd08-04806e05bbef) of DeviceClass avea +---------- +The name of the autocreated ParamType of the writable StateType (3f15637a-8272-4714-bd08-04806e05bbef) of DeviceClass avea + + + + + + Red + The name of the ParamType of the autocreated EventType (50ab71d1-8970-4531-b1ad-f387d01bab90) of DeviceClass avea +---------- +The name of the autocreated ParamType of the writable StateType (50ab71d1-8970-4531-b1ad-f387d01bab90) of DeviceClass avea + + + + + + Green + The name of the ParamType of the autocreated EventType (9e8ddebc-33fe-418a-895f-d8148fabcfee) of DeviceClass avea +---------- +The name of the autocreated ParamType of the writable StateType (9e8ddebc-33fe-418a-895f-d8148fabcfee) of DeviceClass avea + + + + + + Blue + The name of the ParamType of the autocreated EventType (f4310747-d468-4d2e-abe4-b5e4d0245dad) of DeviceClass avea +---------- +The name of the autocreated ParamType of the writable StateType (f4310747-d468-4d2e-abe4-b5e4d0245dad) of DeviceClass avea + + + + + + Fade + The name of the ParamType of the autocreated EventType (01ccda48-44c6-495b-b0a7-c2a0bf5a570d) of DeviceClass avea +---------- +The name of the autocreated ParamType of the writable StateType (01ccda48-44c6-495b-b0a7-c2a0bf5a570d) of DeviceClass avea + + + + + Set power + The name of the autocreated ActionType (2b779968-ff4f-4a05-a466-074e14288a8c) + + + + + Brightness changed The name of the autocreated EventType (c38181a0-e19b-423f-8b66-dedda94e89b5) - - brightness - The name of the ParamType of StateType (c38181a0-e19b-423f-8b66-dedda94e89b5) of DeviceClass avea - - - - + Set brightness The name of the autocreated ActionType (c38181a0-e19b-423f-8b66-dedda94e89b5) - - color - The name of the ParamType of StateType (3f15637a-8272-4714-bd08-04806e05bbef) of DeviceClass avea + + Color changed + The name of the autocreated EventType (3f15637a-8272-4714-bd08-04806e05bbef) + + + + + white changed + The name of the autocreated EventType (50f6a224-fb8d-487d-8774-1a0536e5b1aa) + + + + + + white + The name of the ParamType of the autocreated EventType (50f6a224-fb8d-487d-8774-1a0536e5b1aa) of DeviceClass avea +---------- +The name of the autocreated ParamType of the writable StateType (50f6a224-fb8d-487d-8774-1a0536e5b1aa) of DeviceClass avea + + + + + Set white + The name of the autocreated ActionType (50f6a224-fb8d-487d-8774-1a0536e5b1aa) + + + + + Red changed + The name of the autocreated EventType (50ab71d1-8970-4531-b1ad-f387d01bab90) + + + + + Set red + The name of the autocreated ActionType (50ab71d1-8970-4531-b1ad-f387d01bab90) + + + + + Green changed + The name of the autocreated EventType (9e8ddebc-33fe-418a-895f-d8148fabcfee) + + + + + Set green + The name of the autocreated ActionType (9e8ddebc-33fe-418a-895f-d8148fabcfee) + + + + + Blue changed + The name of the autocreated EventType (f4310747-d468-4d2e-abe4-b5e4d0245dad) + + + + + Set blue + The name of the autocreated ActionType (f4310747-d468-4d2e-abe4-b5e4d0245dad) + + + + + Fade changed + The name of the autocreated EventType (01ccda48-44c6-495b-b0a7-c2a0bf5a570d) + + + + + Set fade + The name of the autocreated ActionType (01ccda48-44c6-495b-b0a7-c2a0bf5a570d) diff --git a/elgato/translations/c5c03ad4-bfdb-444a-8eca-2c234c46cc27-en_US.ts b/elgato/translations/c5c03ad4-bfdb-444a-8eca-2c234c46cc27-en_US.ts index 75ceb242..1a48e12e 100644 --- a/elgato/translations/c5c03ad4-bfdb-444a-8eca-2c234c46cc27-en_US.ts +++ b/elgato/translations/c5c03ad4-bfdb-444a-8eca-2c234c46cc27-en_US.ts @@ -4,8 +4,8 @@ Elgato - - + + Elgato The name of the plugin Elgato (c5c03ad4-bfdb-444a-8eca-2c234c46cc27) ---------- @@ -13,69 +13,201 @@ The name of the vendor (90a3091d-1053-4f77-8dc3-92e27bbcebe7) - + Avea The name of the DeviceClass (164f9602-90ee-4693-bda3-9cafae37603e) - - name - The name of the paramType (d7a5d96f-33dc-4dc3-a171-b1e89a5e1a4b) of avea - - - - - mac address - The name of the paramType (20932e39-00fd-40e3-8f39-850ba149844e) of avea - - - - - connected changed - The name of the autocreated EventType (6d5e792a-c786-40d2-ae35-a48ac6fafcbc) - - - - - connected - The name of the ParamType of StateType (6d5e792a-c786-40d2-ae35-a48ac6fafcbc) of DeviceClass avea - - - - - color changed - The name of the autocreated EventType (3f15637a-8272-4714-bd08-04806e05bbef) - - - - + Set color The name of the autocreated ActionType (3f15637a-8272-4714-bd08-04806e05bbef) - - brightness changed + + Name + The name of the paramType (d7a5d96f-33dc-4dc3-a171-b1e89a5e1a4b) of avea + + + + + MAC address + The name of the paramType (20932e39-00fd-40e3-8f39-850ba149844e) of avea + + + + + Connected changed + The name of the autocreated EventType (6d5e792a-c786-40d2-ae35-a48ac6fafcbc) + + + + + Connected + The name of the ParamType of the autocreated EventType (6d5e792a-c786-40d2-ae35-a48ac6fafcbc) of DeviceClass avea + + + + + Power changed + The name of the autocreated EventType (2b779968-ff4f-4a05-a466-074e14288a8c) + + + + + + Power + The name of the ParamType of the autocreated EventType (2b779968-ff4f-4a05-a466-074e14288a8c) of DeviceClass avea +---------- +The name of the autocreated ParamType of the writable StateType (2b779968-ff4f-4a05-a466-074e14288a8c) of DeviceClass avea + + + + + + Brightness + The name of the ParamType of the autocreated EventType (c38181a0-e19b-423f-8b66-dedda94e89b5) of DeviceClass avea +---------- +The name of the autocreated ParamType of the writable StateType (c38181a0-e19b-423f-8b66-dedda94e89b5) of DeviceClass avea + + + + + + Color + The name of the ParamType of the autocreated EventType (3f15637a-8272-4714-bd08-04806e05bbef) of DeviceClass avea +---------- +The name of the autocreated ParamType of the writable StateType (3f15637a-8272-4714-bd08-04806e05bbef) of DeviceClass avea + + + + + + Red + The name of the ParamType of the autocreated EventType (50ab71d1-8970-4531-b1ad-f387d01bab90) of DeviceClass avea +---------- +The name of the autocreated ParamType of the writable StateType (50ab71d1-8970-4531-b1ad-f387d01bab90) of DeviceClass avea + + + + + + Green + The name of the ParamType of the autocreated EventType (9e8ddebc-33fe-418a-895f-d8148fabcfee) of DeviceClass avea +---------- +The name of the autocreated ParamType of the writable StateType (9e8ddebc-33fe-418a-895f-d8148fabcfee) of DeviceClass avea + + + + + + Blue + The name of the ParamType of the autocreated EventType (f4310747-d468-4d2e-abe4-b5e4d0245dad) of DeviceClass avea +---------- +The name of the autocreated ParamType of the writable StateType (f4310747-d468-4d2e-abe4-b5e4d0245dad) of DeviceClass avea + + + + + + Fade + The name of the ParamType of the autocreated EventType (01ccda48-44c6-495b-b0a7-c2a0bf5a570d) of DeviceClass avea +---------- +The name of the autocreated ParamType of the writable StateType (01ccda48-44c6-495b-b0a7-c2a0bf5a570d) of DeviceClass avea + + + + + Set power + The name of the autocreated ActionType (2b779968-ff4f-4a05-a466-074e14288a8c) + + + + + Brightness changed The name of the autocreated EventType (c38181a0-e19b-423f-8b66-dedda94e89b5) - - brightness - The name of the ParamType of StateType (c38181a0-e19b-423f-8b66-dedda94e89b5) of DeviceClass avea - - - - + Set brightness The name of the autocreated ActionType (c38181a0-e19b-423f-8b66-dedda94e89b5) - - color - The name of the ParamType of StateType (3f15637a-8272-4714-bd08-04806e05bbef) of DeviceClass avea + + Color changed + The name of the autocreated EventType (3f15637a-8272-4714-bd08-04806e05bbef) + + + + + white changed + The name of the autocreated EventType (50f6a224-fb8d-487d-8774-1a0536e5b1aa) + + + + + + white + The name of the ParamType of the autocreated EventType (50f6a224-fb8d-487d-8774-1a0536e5b1aa) of DeviceClass avea +---------- +The name of the autocreated ParamType of the writable StateType (50f6a224-fb8d-487d-8774-1a0536e5b1aa) of DeviceClass avea + + + + + Set white + The name of the autocreated ActionType (50f6a224-fb8d-487d-8774-1a0536e5b1aa) + + + + + Red changed + The name of the autocreated EventType (50ab71d1-8970-4531-b1ad-f387d01bab90) + + + + + Set red + The name of the autocreated ActionType (50ab71d1-8970-4531-b1ad-f387d01bab90) + + + + + Green changed + The name of the autocreated EventType (9e8ddebc-33fe-418a-895f-d8148fabcfee) + + + + + Set green + The name of the autocreated ActionType (9e8ddebc-33fe-418a-895f-d8148fabcfee) + + + + + Blue changed + The name of the autocreated EventType (f4310747-d468-4d2e-abe4-b5e4d0245dad) + + + + + Set blue + The name of the autocreated ActionType (f4310747-d468-4d2e-abe4-b5e4d0245dad) + + + + + Fade changed + The name of the autocreated EventType (01ccda48-44c6-495b-b0a7-c2a0bf5a570d) + + + + + Set fade + The name of the autocreated ActionType (01ccda48-44c6-495b-b0a7-c2a0bf5a570d) diff --git a/elro/devicepluginelro.cpp b/elro/devicepluginelro.cpp index 8c4792cb..c6ab7a0c 100644 --- a/elro/devicepluginelro.cpp +++ b/elro/devicepluginelro.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -26,7 +26,7 @@ \brief Plugin for all Elro 433 MHz based devices. \ingroup plugins - \ingroup guh-plugins + \ingroup nymea-plugins This plugin allows to controll RF 433 MHz actors an receive remote signals from \l{http://www.elroshop.eu/}{Elro} devices. diff --git a/elro/devicepluginelro.h b/elro/devicepluginelro.h index b9c3360b..d341e183 100644 --- a/elro/devicepluginelro.h +++ b/elro/devicepluginelro.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -29,7 +29,7 @@ class DevicePluginElro : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "devicepluginelro.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginelro.json") Q_INTERFACES(DevicePlugin) public: diff --git a/elro/elro.pro b/elro/elro.pro index 7c9ec86a..bd563663 100644 --- a/elro/elro.pro +++ b/elro/elro.pro @@ -1,6 +1,6 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_devicepluginelro) +TARGET = $$qtLibraryTarget(nymea_devicepluginelro) SOURCES += \ devicepluginelro.cpp diff --git a/eq-3/deviceplugineq-3.cpp b/eq-3/deviceplugineq-3.cpp index 0b9fb1c2..d3526f04 100644 --- a/eq-3/deviceplugineq-3.cpp +++ b/eq-3/deviceplugineq-3.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -26,21 +26,21 @@ \brief Plugin for the eQ-3 heating system. \ingroup plugins - \ingroup guh-plugins + \ingroup nymea-plugins - This plugin allows to find and controll devices from Max!(eQ-3). To use this devices, you need at least + This plugin allows to find and control devices from Max!(eQ-3). To use this devices, you need at least one \l{http://www.eq-3.de/max-heizungssteuerung-produktdetail/items/bc-lgw-o-tw.html}{Max! Cube LAN Gateway} in you local network. Once the cube is connected (DHCP), you can auto detect the cube in the network and - add it to your \l{https://guh.guru}{guh} devices. Also more than one cube in the network is supported. All + add it to your \l{https://nymea.io}{nymea} devices. Also more than one cube in the network is supported. All devices, which are connected to a cube, will be autogenerated. For the setup of a cube, the original - software is recomanded (min/max setpoint temperature, weekly programm...). + software is recomanded (min/max setpoint temperature, weekly program...). \chapter Supported devices \section2 Max! Cube LAN Gateway This \l{http://www.eq-3.de/max-heizungssteuerung-produktdetail/ items/bc-lgw-o-tw.html}{cube} can be discovered in the network. Every device, which is connected with the cube, will be appear automatically, once the cube is configrued and - added to guh. + added to nymea. \section2 Max! Wall Thermostat In order to use this device, you need a \l{http://www.eq-3.de/max-heizungssteuerung-produktdetail/ @@ -162,7 +162,7 @@ DeviceManager::DeviceError DevicePluginEQ3::executeAction(Device *device, const int roomId = device->paramValue(wallThermostateRoomParamTypeId).toInt(); if (action.actionTypeId() == wallThermostateDesiredTemperatureActionTypeId){ - cube->setDeviceSetpointTemp(rfAddress, roomId, action.param(wallThermostateDesiredTemperatureStateParamTypeId).value().toDouble(), action.id()); + cube->setDeviceSetpointTemp(rfAddress, roomId, action.param(wallThermostateDesiredTemperatureActionParamTypeId).value().toDouble(), action.id()); } else if (action.actionTypeId() == wallThermostateSetAutoModeActionTypeId){ cube->setDeviceAutoMode(rfAddress, roomId, action.id()); } else if (action.actionTypeId() == wallThermostateSetManualModeActionTypeId){ @@ -183,7 +183,7 @@ DeviceManager::DeviceError DevicePluginEQ3::executeAction(Device *device, const int roomId = device->paramValue(radiatorThermostateRoomParamTypeId).toInt(); if (action.actionTypeId() == radiatorThermostateDesiredTemperatureActionTypeId){ - cube->setDeviceSetpointTemp(rfAddress, roomId, action.param(radiatorThermostateDesiredTemperatureStateParamTypeId).value().toDouble(), action.id()); + cube->setDeviceSetpointTemp(rfAddress, roomId, action.param(radiatorThermostateDesiredTemperatureActionParamTypeId).value().toDouble(), action.id()); } else if (action.actionTypeId() == radiatorThermostateSetAutoModeActionTypeId){ cube->setDeviceAutoMode(rfAddress, roomId, action.id()); } else if (action.actionTypeId() == radiatorThermostateSetManualModeActionTypeId){ @@ -349,7 +349,7 @@ void DevicePluginEQ3::wallThermostatDataUpdated() device->setStateValue(wallThermostateEcoTempStateTypeId, wallThermostat->ecoTemp()); device->setStateValue(wallThermostateMaxSetpointTempStateTypeId, wallThermostat->maxSetPointTemp()); device->setStateValue(wallThermostateMinSetpointTempStateTypeId, wallThermostat->minSetPointTemp()); - device->setStateValue(wallThermostateErrorOccurredStateTypeId, wallThermostat->errorOccured()); + device->setStateValue(wallThermostateErrorOccurredStateTypeId, wallThermostat->errorOccurred()); device->setStateValue(wallThermostateInitializedStateTypeId, wallThermostat->initialized()); device->setStateValue(wallThermostateBatteryLowStateTypeId, wallThermostat->batteryLow()); device->setStateValue(wallThermostateLinkStatusOKStateTypeId, wallThermostat->linkStatusOK()); @@ -375,7 +375,7 @@ void DevicePluginEQ3::radiatorThermostatDataUpdated() device->setStateValue(radiatorThermostateComfortTempStateTypeId, radiatorThermostat->comfortTemp()); device->setStateValue(radiatorThermostateMaxSetpointTempStateTypeId, radiatorThermostat->maxSetPointTemp()); device->setStateValue(radiatorThermostateMinSetpointTempStateTypeId, radiatorThermostat->minSetPointTemp()); - device->setStateValue(radiatorThermostateErrorOccurredStateTypeId, radiatorThermostat->errorOccured()); + device->setStateValue(radiatorThermostateErrorOccurredStateTypeId, radiatorThermostat->errorOccurred()); device->setStateValue(radiatorThermostateInitializedStateTypeId, radiatorThermostat->initialized()); device->setStateValue(radiatorThermostateBatteryLowStateTypeId, radiatorThermostat->batteryLow()); device->setStateValue(radiatorThermostatePanelLockedStateTypeId, radiatorThermostat->panelLocked()); diff --git a/eq-3/deviceplugineq-3.h b/eq-3/deviceplugineq-3.h index 0bef0abc..664e8570 100644 --- a/eq-3/deviceplugineq-3.h +++ b/eq-3/deviceplugineq-3.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -35,7 +35,7 @@ class DevicePluginEQ3: public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "deviceplugineq-3.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "deviceplugineq-3.json") Q_INTERFACES(DevicePlugin) public: diff --git a/eq-3/eq-3.pro b/eq-3/eq-3.pro index f828738f..117bded4 100644 --- a/eq-3/eq-3.pro +++ b/eq-3/eq-3.pro @@ -1,6 +1,8 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_deviceplugineq3) +QT += network + +TARGET = $$qtLibraryTarget(nymea_deviceplugineq3) SOURCES += \ deviceplugineq-3.cpp \ diff --git a/eq-3/maxcube.cpp b/eq-3/maxcube.cpp index 71c7da13..271da975 100644 --- a/eq-3/maxcube.cpp +++ b/eq-3/maxcube.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -416,7 +416,7 @@ void MaxCube::decodeDevicelistMessage(QByteArray data) // init/valid code QByteArray initCode = fillBin(QByteArray::number(rawData.mid(8,2).toInt(0,16),2),8); device->setInformationValid((bool)initCode.mid(3,1).toInt()); - device->setErrorOccured((bool)initCode.mid(4,1).toInt()); + device->setErrorOccurred((bool)initCode.mid(4,1).toInt()); device->setIsAnswereToCommand((bool)initCode.mid(5,1).toInt()); device->setInitialized((bool)initCode.mid(6,1).toInt()); @@ -444,7 +444,7 @@ void MaxCube::decodeDevicelistMessage(QByteArray data) qCDebug(dcEQ3) << " RF address (hex) | " << device->rfAddress(); qCDebug(dcEQ3) << " initCode | " << initCode; qCDebug(dcEQ3) << " information valid | " << device->informationValid(); - qCDebug(dcEQ3) << " error occured | " << device->errorOccured(); + qCDebug(dcEQ3) << " error occurred | " << device->errorOccurred(); qCDebug(dcEQ3) << " is answere to a command | " << device->isAnswereToCommand(); qCDebug(dcEQ3) << " initialized | " << device->initialized(); qCDebug(dcEQ3) << " battery low | " << device->batteryLow(); @@ -468,7 +468,7 @@ void MaxCube::decodeDevicelistMessage(QByteArray data) QByteArray initCode = fillBin(QByteArray::number(rawData.mid(8,2).toInt(0,16),2),8); device->setInformationValid((bool)initCode.mid(3,1).toInt()); - device->setErrorOccured((bool)initCode.mid(4,1).toInt()); + device->setErrorOccurred((bool)initCode.mid(4,1).toInt()); device->setIsAnswereToCommand((bool)initCode.mid(5,1).toInt()); device->setInitialized((bool)initCode.mid(6,1).toInt()); @@ -487,7 +487,7 @@ void MaxCube::decodeDevicelistMessage(QByteArray data) qCDebug(dcEQ3) << " device name | " << device->deviceName(); qCDebug(dcEQ3) << " RF address (hex) | " << device->rfAddress(); qCDebug(dcEQ3) << " information valid | " << device->informationValid(); - qCDebug(dcEQ3) << " error occured | " << device->errorOccured(); + qCDebug(dcEQ3) << " error occurred | " << device->errorOccurred(); qCDebug(dcEQ3) << " is answere to a command | " << device->isAnswereToCommand(); qCDebug(dcEQ3) << " initialized | " << device->initialized(); qCDebug(dcEQ3) << " battery low | " << device->batteryLow(); @@ -808,7 +808,7 @@ void MaxCube::setDeviceSetpointTemp(QByteArray rfAddress, int roomId, double tem temperatureData = fillBin(QByteArray::number((int)temperature*2,2),6); // set auto/ permanent/ temp - // 00 = auto (weekly programm...the hole tempererature byte to 0x00 + // 00 = auto (weekly program...the hole tempererature byte to 0x00 // 01 = Permanent // 10 = Temporary (date/time has to be set) diff --git a/eq-3/maxcube.h b/eq-3/maxcube.h index 76c17dfe..2eb607f8 100644 --- a/eq-3/maxcube.h +++ b/eq-3/maxcube.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/eq-3/maxcubediscovery.cpp b/eq-3/maxcubediscovery.cpp index 10c29021..18f89ca6 100644 --- a/eq-3/maxcubediscovery.cpp +++ b/eq-3/maxcubediscovery.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/eq-3/maxcubediscovery.h b/eq-3/maxcubediscovery.h index a65c9503..7eef2f24 100644 --- a/eq-3/maxcubediscovery.h +++ b/eq-3/maxcubediscovery.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/eq-3/maxdevice.cpp b/eq-3/maxdevice.cpp index b3038376..31fa32e2 100644 --- a/eq-3/maxdevice.cpp +++ b/eq-3/maxdevice.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/eq-3/maxdevice.h b/eq-3/maxdevice.h index a610925f..a5959486 100644 --- a/eq-3/maxdevice.h +++ b/eq-3/maxdevice.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/eq-3/radiatorthermostat.cpp b/eq-3/radiatorthermostat.cpp index a77d7392..3c244f17 100644 --- a/eq-3/radiatorthermostat.cpp +++ b/eq-3/radiatorthermostat.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -168,14 +168,14 @@ void RadiatorThermostat::setInformationValid(const bool &informationValid) m_informationValid = informationValid; } -bool RadiatorThermostat::errorOccured() const +bool RadiatorThermostat::errorOccurred() const { - return m_errorOccured; + return m_errorOccurred; } -void RadiatorThermostat::setErrorOccured(const bool &errorOccured) +void RadiatorThermostat::setErrorOccurred(const bool &errorOccurred) { - m_errorOccured = errorOccured; + m_errorOccurred = errorOccurred; } bool RadiatorThermostat::isAnswereToCommand() const diff --git a/eq-3/radiatorthermostat.h b/eq-3/radiatorthermostat.h index f6572442..3a43fb99 100644 --- a/eq-3/radiatorthermostat.h +++ b/eq-3/radiatorthermostat.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -76,8 +76,8 @@ public: bool informationValid() const; void setInformationValid(const bool &informationValid); - bool errorOccured() const; - void setErrorOccured(const bool &errorOccured); + bool errorOccurred() const; + void setErrorOccurred(const bool &errorOccurred); bool isAnswereToCommand() const; void setIsAnswereToCommand(const bool &isAnswereToCommand); @@ -126,7 +126,7 @@ private: double m_valveMaximumSettings; double m_valveOffset; bool m_informationValid; - bool m_errorOccured; + bool m_errorOccurred; bool m_isAnswerToCommand; bool m_initialized; bool m_batteryLow; diff --git a/eq-3/room.cpp b/eq-3/room.cpp index 4cb4bfe7..afe50338 100644 --- a/eq-3/room.cpp +++ b/eq-3/room.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/eq-3/room.h b/eq-3/room.h index a977153a..800baaed 100644 --- a/eq-3/room.h +++ b/eq-3/room.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/eq-3/translations/f324c43c-9680-48d8-852a-93b2227139b9-de_DE.ts b/eq-3/translations/f324c43c-9680-48d8-852a-93b2227139b9-de_DE.ts index 18d3d77d..6a0e15a0 100644 --- a/eq-3/translations/f324c43c-9680-48d8-852a-93b2227139b9-de_DE.ts +++ b/eq-3/translations/f324c43c-9680-48d8-852a-93b2227139b9-de_DE.ts @@ -4,39 +4,36 @@ EQ3 - - EQ3 - The name of the plugin EQ3 (f324c43c-9680-48d8-852a-93b2227139b9) - - - - + + eQ-3 - The name of the vendor (2cac0645-855e-44fa-837e-1cab0ae4304c) + The name of the plugin EQ3 (f324c43c-9680-48d8-852a-93b2227139b9) +---------- +The name of the vendor (2cac0645-855e-44fa-837e-1cab0ae4304c) - + Max! Cube LAN Gateway The name of the DeviceClass (1e892268-8bd7-442c-a001-bd4e2e6b2949) - + host address The name of the paramType (b30c14db-5b2a-4366-87e3-13d0d38b1905) of cube - + port The name of the paramType (a4c92442-dc47-463f-8e24-15b5b593adec) of cube - - - + + + serial number The name of the paramType (67dc1a45-7369-422a-b677-881271f29d6c) of cube ---------- @@ -46,215 +43,44 @@ The name of the paramType (67dc1a45-7369-422a-b677-881271f29d6c) of radiatorTher - + firmware version The name of the paramType (8d629061-8d4b-49f1-ab47-b82fdde3036c) of cube - + connected changed The name of the autocreated EventType (d0a9a369-cf8c-47c4-a12e-f2d076bf12fd) - - connection - The name of the ParamType of StateType (d0a9a369-cf8c-47c4-a12e-f2d076bf12fd) of DeviceClass cube + + connected + The name of the ParamType of the autocreated EventType (d0a9a369-cf8c-47c4-a12e-f2d076bf12fd) of DeviceClass cube - - portalEnabled - The name of the ParamType of StateType (2c2367da-c229-40ed-9d47-a6e73cd6dc3b) of DeviceClass cube - - - - - - comfortTemp - The name of the ParamType of StateType (850380ee-a787-43e7-adb8-768a21a6e64d) of DeviceClass wallThermostate ----------- -The name of the ParamType of StateType (850380ee-a787-43e7-adb8-768a21a6e64d) of DeviceClass radiatorThermostate - - - - - ecoTemp - The name of the ParamType of StateType (24dfd20d-bc8d-48e4-8162-b20ae0465c41) of DeviceClass wallThermostate - - - - - - maxSetpointTemp - The name of the ParamType of StateType (a8536ddf-a6e4-41c2-89c1-e7102608f5f6) of DeviceClass wallThermostate ----------- -The name of the ParamType of StateType (a8536ddf-a6e4-41c2-89c1-e7102608f5f6) of DeviceClass radiatorThermostate - - - - - - minSetpointTemp - The name of the ParamType of StateType (ceb0ad05-37ad-4b79-a4d9-540c34a7e3e4) of DeviceClass wallThermostate ----------- -The name of the ParamType of StateType (ceb0ad05-37ad-4b79-a4d9-540c34a7e3e4) of DeviceClass radiatorThermostate - - - - - - errorOccurred - The name of the ParamType of StateType (9880247b-cf9a-453c-b0c3-d910eba8a253) of DeviceClass wallThermostate ----------- -The name of the ParamType of StateType (9880247b-cf9a-453c-b0c3-d910eba8a253) of DeviceClass radiatorThermostate - - - - - - batteryLow - The name of the ParamType of StateType (53b89f32-8894-4290-92a0-6a470c6b69ab) of DeviceClass wallThermostate ----------- -The name of the ParamType of StateType (53b89f32-8894-4290-92a0-6a470c6b69ab) of DeviceClass radiatorThermostate - - - - - linkStatusOK - The name of the ParamType of StateType (aff38be8-7ea6-4fd8-b0fa-e987ab05c719) of DeviceClass wallThermostate - - - - - - panelLocked - The name of the ParamType of StateType (979df197-09a1-46f9-9217-9d323b1062bd) of DeviceClass wallThermostate ----------- -The name of the ParamType of StateType (979df197-09a1-46f9-9217-9d323b1062bd) of DeviceClass radiatorThermostate - - - - - - gatewayKnown - The name of the ParamType of StateType (1d6bd962-5c31-47ad-80a4-dda87bff98f5) of DeviceClass wallThermostate ----------- -The name of the ParamType of StateType (1d6bd962-5c31-47ad-80a4-dda87bff98f5) of DeviceClass radiatorThermostate - - - - - - dtsActive - The name of the ParamType of StateType (1b402ba6-a8ae-45b1-8acf-2b0a89f71889) of DeviceClass wallThermostate ----------- -The name of the ParamType of StateType (1b402ba6-a8ae-45b1-8acf-2b0a89f71889) of DeviceClass radiatorThermostate - - - - - - deviceMode - The name of the ParamType of StateType (639360f0-bb65-43e6-b227-50ae0ac39d6c) of DeviceClass wallThermostate ----------- -The name of the ParamType of StateType (639360f0-bb65-43e6-b227-50ae0ac39d6c) of DeviceClass radiatorThermostate - - - - - - deviceModeString - The name of the ParamType of StateType (ff5194e3-5641-4ac2-92c7-48c431b4a2eb) of DeviceClass wallThermostate ----------- -The name of the ParamType of StateType (ff5194e3-5641-4ac2-92c7-48c431b4a2eb) of DeviceClass radiatorThermostate - - - - - - desiredTemperature - The name of the ParamType of StateType (579aa8c6-8814-491b-9e7c-b98108c323d1) of DeviceClass wallThermostate ----------- -The name of the ParamType of StateType (579aa8c6-8814-491b-9e7c-b98108c323d1) of DeviceClass radiatorThermostate - - - - - currentTemperature - The name of the ParamType of StateType (852e7708-db1d-42d1-96e4-19c13598262c) of DeviceClass wallThermostate - - - - - offsetTemp - The name of the ParamType of StateType (576da571-9a65-478f-96bf-19256c8b9ece) of DeviceClass radiatorThermostate - - - - - windowOpenDuration - The name of the ParamType of StateType (81c6c74a-b0cd-4daa-9eb9-f1cd68f328af) of DeviceClass radiatorThermostate - - - - - boostValveValue - The name of the ParamType of StateType (7c41fa64-b1a1-48d2-9d03-67aa16cd83ad) of DeviceClass radiatorThermostate - - - - - boostDuration - The name of the ParamType of StateType (e75c1398-9ad7-466c-b3b9-b03bbb686a30) of DeviceClass radiatorThermostate - - - - - discalcWeekDay - The name of the ParamType of StateType (bd6f5947-d4b4-444b-81c8-77eec46957e4) of DeviceClass radiatorThermostate - - - - - discalcTime - The name of the ParamType of StateType (e78235ee-affc-41e3-a463-9f0512b4a6c3) of DeviceClass radiatorThermostate - - - - - valveMaximumSettings - The name of the ParamType of StateType (e367fa3a-b30f-49bd-af3f-cff92360ad32) of DeviceClass radiatorThermostate - - - - - valveOffset - The name of the ParamType of StateType (ffaff87b-b741-4db8-9875-3380af4f1885) of DeviceClass radiatorThermostate - - - - - valvePosition - The name of the ParamType of StateType (72956000-0203-4c32-a6b6-3bb7e46c03ca) of DeviceClass radiatorThermostate - - - - + portal enabled changed The name of the autocreated EventType (2c2367da-c229-40ed-9d47-a6e73cd6dc3b) - + + portal enabled + The name of the ParamType of the autocreated EventType (2c2367da-c229-40ed-9d47-a6e73cd6dc3b) of DeviceClass cube + + + + Max! Wall Thermostat The name of the DeviceClass (ffbfec5d-06e8-4082-b62b-92cc5c3e8c4e) - - + + name The name of the paramType (8d32b228-8618-483f-bcc3-2d62868d6912) of wallThermostate ---------- @@ -262,8 +88,8 @@ The name of the paramType (8d32b228-8618-483f-bcc3-2d62868d6912) of radiatorTher - - + + parent cube The name of the paramType (801be701-ea53-4cb2-a933-823f330e7837) of wallThermostate ---------- @@ -271,8 +97,8 @@ The name of the paramType (801be701-ea53-4cb2-a933-823f330e7837) of radiatorTher - - + + rf address The name of the paramType (6ba358c1-0c31-4ea4-93fd-544f030582a7) of wallThermostate ---------- @@ -280,8 +106,8 @@ The name of the paramType (6ba358c1-0c31-4ea4-93fd-544f030582a7) of radiatorTher - - + + room id The name of the paramType (e3bb28dc-5311-4325-805a-e1e3a1495016) of wallThermostate ---------- @@ -289,8 +115,8 @@ The name of the paramType (e3bb28dc-5311-4325-805a-e1e3a1495016) of radiatorTher - - + + room name The name of the paramType (14ea2e10-4545-47ff-8955-8172913f1039) of wallThermostate ---------- @@ -298,124 +124,250 @@ The name of the paramType (14ea2e10-4545-47ff-8955-8172913f1039) of radiatorTher - + confort temperature changed The name of the autocreated EventType (850380ee-a787-43e7-adb8-768a21a6e64d) - + + + comfort temperature + The name of the ParamType of the autocreated EventType (850380ee-a787-43e7-adb8-768a21a6e64d) of DeviceClass wallThermostate +---------- +The name of the ParamType of the autocreated EventType (850380ee-a787-43e7-adb8-768a21a6e64d) of DeviceClass radiatorThermostate + + + + eco temperature changed The name of the autocreated EventType (24dfd20d-bc8d-48e4-8162-b20ae0465c41) - - + + eco temperature + The name of the ParamType of the autocreated EventType (24dfd20d-bc8d-48e4-8162-b20ae0465c41) of DeviceClass wallThermostate + + + + + max setpoint changed The name of the autocreated EventType (a8536ddf-a6e4-41c2-89c1-e7102608f5f6) - - + + + max setpoint + The name of the ParamType of the autocreated EventType (a8536ddf-a6e4-41c2-89c1-e7102608f5f6) of DeviceClass wallThermostate +---------- +The name of the ParamType of the autocreated EventType (a8536ddf-a6e4-41c2-89c1-e7102608f5f6) of DeviceClass radiatorThermostate + + + + + min setpoint changed The name of the autocreated EventType (ceb0ad05-37ad-4b79-a4d9-540c34a7e3e4) - - error occured - The name of the autocreated EventType (9880247b-cf9a-453c-b0c3-d910eba8a253) + + + min setpoint + The name of the ParamType of the autocreated EventType (ceb0ad05-37ad-4b79-a4d9-540c34a7e3e4) of DeviceClass wallThermostate +---------- +The name of the ParamType of the autocreated EventType (ceb0ad05-37ad-4b79-a4d9-540c34a7e3e4) of DeviceClass radiatorThermostate - - + + + error occured + The name of the autocreated EventType (9880247b-cf9a-453c-b0c3-d910eba8a253) +---------- +The name of the ParamType of the autocreated EventType (9880247b-cf9a-453c-b0c3-d910eba8a253) of DeviceClass radiatorThermostate + + + + + error occurred + The name of the ParamType of the autocreated EventType (9880247b-cf9a-453c-b0c3-d910eba8a253) of DeviceClass wallThermostate + + + + + initialized changed The name of the autocreated EventType (a9e29f03-063e-4686-8aac-2f6d8f8a4937) - - + + initialized - The name of the ParamType of StateType (a9e29f03-063e-4686-8aac-2f6d8f8a4937) of DeviceClass wallThermostate + The name of the ParamType of the autocreated EventType (a9e29f03-063e-4686-8aac-2f6d8f8a4937) of DeviceClass wallThermostate ---------- -The name of the ParamType of StateType (a9e29f03-063e-4686-8aac-2f6d8f8a4937) of DeviceClass radiatorThermostate +The name of the ParamType of the autocreated EventType (a9e29f03-063e-4686-8aac-2f6d8f8a4937) of DeviceClass radiatorThermostate - - + + battery low changed The name of the autocreated EventType (53b89f32-8894-4290-92a0-6a470c6b69ab) - - + + + battery low + The name of the ParamType of the autocreated EventType (53b89f32-8894-4290-92a0-6a470c6b69ab) of DeviceClass wallThermostate +---------- +The name of the ParamType of the autocreated EventType (53b89f32-8894-4290-92a0-6a470c6b69ab) of DeviceClass radiatorThermostate + + + + + link status changed The name of the autocreated EventType (aff38be8-7ea6-4fd8-b0fa-e987ab05c719) - + + + link status ok + The name of the ParamType of the autocreated EventType (aff38be8-7ea6-4fd8-b0fa-e987ab05c719) of DeviceClass wallThermostate +---------- +The name of the ParamType of the autocreated EventType (aff38be8-7ea6-4fd8-b0fa-e987ab05c719) of DeviceClass radiatorThermostate + + + + panel locked changed The name of the autocreated EventType (979df197-09a1-46f9-9217-9d323b1062bd) - - + + + panel locked + The name of the ParamType of the autocreated EventType (979df197-09a1-46f9-9217-9d323b1062bd) of DeviceClass wallThermostate +---------- +The name of the ParamType of the autocreated EventType (979df197-09a1-46f9-9217-9d323b1062bd) of DeviceClass radiatorThermostate + + + + + gateway known changed The name of the autocreated EventType (1d6bd962-5c31-47ad-80a4-dda87bff98f5) - - + + + gateway known + The name of the ParamType of the autocreated EventType (1d6bd962-5c31-47ad-80a4-dda87bff98f5) of DeviceClass wallThermostate +---------- +The name of the ParamType of the autocreated EventType (1d6bd962-5c31-47ad-80a4-dda87bff98f5) of DeviceClass radiatorThermostate + + + + + dts active changed The name of the autocreated EventType (1b402ba6-a8ae-45b1-8acf-2b0a89f71889) - - + + + dts active + The name of the ParamType of the autocreated EventType (1b402ba6-a8ae-45b1-8acf-2b0a89f71889) of DeviceClass wallThermostate +---------- +The name of the ParamType of the autocreated EventType (1b402ba6-a8ae-45b1-8acf-2b0a89f71889) of DeviceClass radiatorThermostate + + + + + device mode changed The name of the autocreated EventType (639360f0-bb65-43e6-b227-50ae0ac39d6c) - - + + + device mode + The name of the ParamType of the autocreated EventType (639360f0-bb65-43e6-b227-50ae0ac39d6c) of DeviceClass wallThermostate +---------- +The name of the ParamType of the autocreated EventType (639360f0-bb65-43e6-b227-50ae0ac39d6c) of DeviceClass radiatorThermostate + + + + + device mode string changed The name of the autocreated EventType (ff5194e3-5641-4ac2-92c7-48c431b4a2eb) - - + + + device mode string + The name of the ParamType of the autocreated EventType (ff5194e3-5641-4ac2-92c7-48c431b4a2eb) of DeviceClass wallThermostate +---------- +The name of the ParamType of the autocreated EventType (ff5194e3-5641-4ac2-92c7-48c431b4a2eb) of DeviceClass radiatorThermostate + + + + + desired temperature changed The name of the autocreated EventType (579aa8c6-8814-491b-9e7c-b98108c323d1) - - + + + + + desired temperature + The name of the ParamType of the autocreated EventType (579aa8c6-8814-491b-9e7c-b98108c323d1) of DeviceClass wallThermostate +---------- +The name of the autocreated ParamType of the writable StateType (579aa8c6-8814-491b-9e7c-b98108c323d1) of DeviceClass wallThermostate +---------- +The name of the ParamType of the autocreated EventType (579aa8c6-8814-491b-9e7c-b98108c323d1) of DeviceClass radiatorThermostate +---------- +The name of the autocreated ParamType of the writable StateType (579aa8c6-8814-491b-9e7c-b98108c323d1) of DeviceClass radiatorThermostate + + + + + Set desired temperature The name of the autocreated ActionType (579aa8c6-8814-491b-9e7c-b98108c323d1) - + current temperature changed The name of the autocreated EventType (852e7708-db1d-42d1-96e4-19c13598262c) - - + + current temperature + The name of the ParamType of the autocreated EventType (852e7708-db1d-42d1-96e4-19c13598262c) of DeviceClass wallThermostate + + + + + set auto mode The name of the ActionType 162b4b3d-9923-4f2c-a755-b50c8a06a6f0 of deviceClass wallThermostate ---------- @@ -423,8 +375,8 @@ The name of the ActionType 162b4b3d-9923-4f2c-a755-b50c8a06a6f0 of deviceClass r - - + + set manual mode The name of the ActionType 8e604437-9f5b-4c17-b5b0-e2db6007af5b of deviceClass wallThermostate ---------- @@ -432,8 +384,8 @@ The name of the ActionType 8e604437-9f5b-4c17-b5b0-e2db6007af5b of deviceClass r - - + + set eco mode The name of the ActionType 27a981e8-ec23-4ba8-921e-33b911a7dd89 of deviceClass wallThermostate ---------- @@ -441,97 +393,145 @@ The name of the ActionType 27a981e8-ec23-4ba8-921e-33b911a7dd89 of deviceClass r - + display current temperature The name of the ActionType 184fb112-7a03-4560-8634-0257c969c26e of deviceClass wallThermostate - + display The name of the paramType (894dbb8e-73b5-4e89-8b93-d7afda239dcb) of wallThermostate - + Max! Radiator Thermostat The name of the DeviceClass (f80d9481-4827-45ee-a013-b97b22412d92) - + comfort temperature changed The name of the autocreated EventType (850380ee-a787-43e7-adb8-768a21a6e64d) - + error occured changed The name of the autocreated EventType (9880247b-cf9a-453c-b0c3-d910eba8a253) - - linkStatusOk - The name of the ParamType of StateType (aff38be8-7ea6-4fd8-b0fa-e987ab05c719) of DeviceClass radiatorThermostate + + valve position + The name of the ParamType of the autocreated EventType (72956000-0203-4c32-a6b6-3bb7e46c03ca) of DeviceClass radiatorThermostate - + pannel locked changed The name of the autocreated EventType (979df197-09a1-46f9-9217-9d323b1062bd) - + offset temperature changed The name of the autocreated EventType (576da571-9a65-478f-96bf-19256c8b9ece) - + + offset temperature + The name of the ParamType of the autocreated EventType (576da571-9a65-478f-96bf-19256c8b9ece) of DeviceClass radiatorThermostate + + + + window open duration changed The name of the autocreated EventType (81c6c74a-b0cd-4daa-9eb9-f1cd68f328af) - + + window open duration + The name of the ParamType of the autocreated EventType (81c6c74a-b0cd-4daa-9eb9-f1cd68f328af) of DeviceClass radiatorThermostate + + + + boost value changed The name of the autocreated EventType (7c41fa64-b1a1-48d2-9d03-67aa16cd83ad) - + + boost valve + The name of the ParamType of the autocreated EventType (7c41fa64-b1a1-48d2-9d03-67aa16cd83ad) of DeviceClass radiatorThermostate + + + + boost duration changed The name of the autocreated EventType (e75c1398-9ad7-466c-b3b9-b03bbb686a30) - + + boost duration + The name of the ParamType of the autocreated EventType (e75c1398-9ad7-466c-b3b9-b03bbb686a30) of DeviceClass radiatorThermostate + + + + discalc weekday changed The name of the autocreated EventType (bd6f5947-d4b4-444b-81c8-77eec46957e4) - + + discalc weekday + The name of the ParamType of the autocreated EventType (bd6f5947-d4b4-444b-81c8-77eec46957e4) of DeviceClass radiatorThermostate + + + + discalc time changed The name of the autocreated EventType (e78235ee-affc-41e3-a463-9f0512b4a6c3) - + + discalc time + The name of the ParamType of the autocreated EventType (e78235ee-affc-41e3-a463-9f0512b4a6c3) of DeviceClass radiatorThermostate + + + + valve maximum setting changed The name of the autocreated EventType (e367fa3a-b30f-49bd-af3f-cff92360ad32) - + + valve maximum setting + The name of the ParamType of the autocreated EventType (e367fa3a-b30f-49bd-af3f-cff92360ad32) of DeviceClass radiatorThermostate + + + + valve offset changed The name of the autocreated EventType (ffaff87b-b741-4db8-9875-3380af4f1885) - + + valve offset + The name of the ParamType of the autocreated EventType (ffaff87b-b741-4db8-9875-3380af4f1885) of DeviceClass radiatorThermostate + + + + valve position changed The name of the autocreated EventType (72956000-0203-4c32-a6b6-3bb7e46c03ca) diff --git a/eq-3/translations/f324c43c-9680-48d8-852a-93b2227139b9-en_US.ts b/eq-3/translations/f324c43c-9680-48d8-852a-93b2227139b9-en_US.ts index f242ebb0..4ecc1611 100644 --- a/eq-3/translations/f324c43c-9680-48d8-852a-93b2227139b9-en_US.ts +++ b/eq-3/translations/f324c43c-9680-48d8-852a-93b2227139b9-en_US.ts @@ -4,39 +4,36 @@ EQ3 - - EQ3 - The name of the plugin EQ3 (f324c43c-9680-48d8-852a-93b2227139b9) - - - - + + eQ-3 - The name of the vendor (2cac0645-855e-44fa-837e-1cab0ae4304c) + The name of the plugin EQ3 (f324c43c-9680-48d8-852a-93b2227139b9) +---------- +The name of the vendor (2cac0645-855e-44fa-837e-1cab0ae4304c) - + Max! Cube LAN Gateway The name of the DeviceClass (1e892268-8bd7-442c-a001-bd4e2e6b2949) - + host address The name of the paramType (b30c14db-5b2a-4366-87e3-13d0d38b1905) of cube - + port The name of the paramType (a4c92442-dc47-463f-8e24-15b5b593adec) of cube - - - + + + serial number The name of the paramType (67dc1a45-7369-422a-b677-881271f29d6c) of cube ---------- @@ -46,215 +43,44 @@ The name of the paramType (67dc1a45-7369-422a-b677-881271f29d6c) of radiatorTher - + firmware version The name of the paramType (8d629061-8d4b-49f1-ab47-b82fdde3036c) of cube - + connected changed The name of the autocreated EventType (d0a9a369-cf8c-47c4-a12e-f2d076bf12fd) - - connection - The name of the ParamType of StateType (d0a9a369-cf8c-47c4-a12e-f2d076bf12fd) of DeviceClass cube + + connected + The name of the ParamType of the autocreated EventType (d0a9a369-cf8c-47c4-a12e-f2d076bf12fd) of DeviceClass cube - - portalEnabled - The name of the ParamType of StateType (2c2367da-c229-40ed-9d47-a6e73cd6dc3b) of DeviceClass cube - - - - - - comfortTemp - The name of the ParamType of StateType (850380ee-a787-43e7-adb8-768a21a6e64d) of DeviceClass wallThermostate ----------- -The name of the ParamType of StateType (850380ee-a787-43e7-adb8-768a21a6e64d) of DeviceClass radiatorThermostate - - - - - ecoTemp - The name of the ParamType of StateType (24dfd20d-bc8d-48e4-8162-b20ae0465c41) of DeviceClass wallThermostate - - - - - - maxSetpointTemp - The name of the ParamType of StateType (a8536ddf-a6e4-41c2-89c1-e7102608f5f6) of DeviceClass wallThermostate ----------- -The name of the ParamType of StateType (a8536ddf-a6e4-41c2-89c1-e7102608f5f6) of DeviceClass radiatorThermostate - - - - - - minSetpointTemp - The name of the ParamType of StateType (ceb0ad05-37ad-4b79-a4d9-540c34a7e3e4) of DeviceClass wallThermostate ----------- -The name of the ParamType of StateType (ceb0ad05-37ad-4b79-a4d9-540c34a7e3e4) of DeviceClass radiatorThermostate - - - - - - errorOccurred - The name of the ParamType of StateType (9880247b-cf9a-453c-b0c3-d910eba8a253) of DeviceClass wallThermostate ----------- -The name of the ParamType of StateType (9880247b-cf9a-453c-b0c3-d910eba8a253) of DeviceClass radiatorThermostate - - - - - - batteryLow - The name of the ParamType of StateType (53b89f32-8894-4290-92a0-6a470c6b69ab) of DeviceClass wallThermostate ----------- -The name of the ParamType of StateType (53b89f32-8894-4290-92a0-6a470c6b69ab) of DeviceClass radiatorThermostate - - - - - linkStatusOK - The name of the ParamType of StateType (aff38be8-7ea6-4fd8-b0fa-e987ab05c719) of DeviceClass wallThermostate - - - - - - panelLocked - The name of the ParamType of StateType (979df197-09a1-46f9-9217-9d323b1062bd) of DeviceClass wallThermostate ----------- -The name of the ParamType of StateType (979df197-09a1-46f9-9217-9d323b1062bd) of DeviceClass radiatorThermostate - - - - - - gatewayKnown - The name of the ParamType of StateType (1d6bd962-5c31-47ad-80a4-dda87bff98f5) of DeviceClass wallThermostate ----------- -The name of the ParamType of StateType (1d6bd962-5c31-47ad-80a4-dda87bff98f5) of DeviceClass radiatorThermostate - - - - - - dtsActive - The name of the ParamType of StateType (1b402ba6-a8ae-45b1-8acf-2b0a89f71889) of DeviceClass wallThermostate ----------- -The name of the ParamType of StateType (1b402ba6-a8ae-45b1-8acf-2b0a89f71889) of DeviceClass radiatorThermostate - - - - - - deviceMode - The name of the ParamType of StateType (639360f0-bb65-43e6-b227-50ae0ac39d6c) of DeviceClass wallThermostate ----------- -The name of the ParamType of StateType (639360f0-bb65-43e6-b227-50ae0ac39d6c) of DeviceClass radiatorThermostate - - - - - - deviceModeString - The name of the ParamType of StateType (ff5194e3-5641-4ac2-92c7-48c431b4a2eb) of DeviceClass wallThermostate ----------- -The name of the ParamType of StateType (ff5194e3-5641-4ac2-92c7-48c431b4a2eb) of DeviceClass radiatorThermostate - - - - - - desiredTemperature - The name of the ParamType of StateType (579aa8c6-8814-491b-9e7c-b98108c323d1) of DeviceClass wallThermostate ----------- -The name of the ParamType of StateType (579aa8c6-8814-491b-9e7c-b98108c323d1) of DeviceClass radiatorThermostate - - - - - currentTemperature - The name of the ParamType of StateType (852e7708-db1d-42d1-96e4-19c13598262c) of DeviceClass wallThermostate - - - - - offsetTemp - The name of the ParamType of StateType (576da571-9a65-478f-96bf-19256c8b9ece) of DeviceClass radiatorThermostate - - - - - windowOpenDuration - The name of the ParamType of StateType (81c6c74a-b0cd-4daa-9eb9-f1cd68f328af) of DeviceClass radiatorThermostate - - - - - boostValveValue - The name of the ParamType of StateType (7c41fa64-b1a1-48d2-9d03-67aa16cd83ad) of DeviceClass radiatorThermostate - - - - - boostDuration - The name of the ParamType of StateType (e75c1398-9ad7-466c-b3b9-b03bbb686a30) of DeviceClass radiatorThermostate - - - - - discalcWeekDay - The name of the ParamType of StateType (bd6f5947-d4b4-444b-81c8-77eec46957e4) of DeviceClass radiatorThermostate - - - - - discalcTime - The name of the ParamType of StateType (e78235ee-affc-41e3-a463-9f0512b4a6c3) of DeviceClass radiatorThermostate - - - - - valveMaximumSettings - The name of the ParamType of StateType (e367fa3a-b30f-49bd-af3f-cff92360ad32) of DeviceClass radiatorThermostate - - - - - valveOffset - The name of the ParamType of StateType (ffaff87b-b741-4db8-9875-3380af4f1885) of DeviceClass radiatorThermostate - - - - - valvePosition - The name of the ParamType of StateType (72956000-0203-4c32-a6b6-3bb7e46c03ca) of DeviceClass radiatorThermostate - - - - + portal enabled changed The name of the autocreated EventType (2c2367da-c229-40ed-9d47-a6e73cd6dc3b) - + + portal enabled + The name of the ParamType of the autocreated EventType (2c2367da-c229-40ed-9d47-a6e73cd6dc3b) of DeviceClass cube + + + + Max! Wall Thermostat The name of the DeviceClass (ffbfec5d-06e8-4082-b62b-92cc5c3e8c4e) - - + + name The name of the paramType (8d32b228-8618-483f-bcc3-2d62868d6912) of wallThermostate ---------- @@ -262,8 +88,8 @@ The name of the paramType (8d32b228-8618-483f-bcc3-2d62868d6912) of radiatorTher - - + + parent cube The name of the paramType (801be701-ea53-4cb2-a933-823f330e7837) of wallThermostate ---------- @@ -271,8 +97,8 @@ The name of the paramType (801be701-ea53-4cb2-a933-823f330e7837) of radiatorTher - - + + rf address The name of the paramType (6ba358c1-0c31-4ea4-93fd-544f030582a7) of wallThermostate ---------- @@ -280,8 +106,8 @@ The name of the paramType (6ba358c1-0c31-4ea4-93fd-544f030582a7) of radiatorTher - - + + room id The name of the paramType (e3bb28dc-5311-4325-805a-e1e3a1495016) of wallThermostate ---------- @@ -289,8 +115,8 @@ The name of the paramType (e3bb28dc-5311-4325-805a-e1e3a1495016) of radiatorTher - - + + room name The name of the paramType (14ea2e10-4545-47ff-8955-8172913f1039) of wallThermostate ---------- @@ -298,124 +124,250 @@ The name of the paramType (14ea2e10-4545-47ff-8955-8172913f1039) of radiatorTher - + confort temperature changed The name of the autocreated EventType (850380ee-a787-43e7-adb8-768a21a6e64d) - + + + comfort temperature + The name of the ParamType of the autocreated EventType (850380ee-a787-43e7-adb8-768a21a6e64d) of DeviceClass wallThermostate +---------- +The name of the ParamType of the autocreated EventType (850380ee-a787-43e7-adb8-768a21a6e64d) of DeviceClass radiatorThermostate + + + + eco temperature changed The name of the autocreated EventType (24dfd20d-bc8d-48e4-8162-b20ae0465c41) - - + + eco temperature + The name of the ParamType of the autocreated EventType (24dfd20d-bc8d-48e4-8162-b20ae0465c41) of DeviceClass wallThermostate + + + + + max setpoint changed The name of the autocreated EventType (a8536ddf-a6e4-41c2-89c1-e7102608f5f6) - - + + + max setpoint + The name of the ParamType of the autocreated EventType (a8536ddf-a6e4-41c2-89c1-e7102608f5f6) of DeviceClass wallThermostate +---------- +The name of the ParamType of the autocreated EventType (a8536ddf-a6e4-41c2-89c1-e7102608f5f6) of DeviceClass radiatorThermostate + + + + + min setpoint changed The name of the autocreated EventType (ceb0ad05-37ad-4b79-a4d9-540c34a7e3e4) - - error occured - The name of the autocreated EventType (9880247b-cf9a-453c-b0c3-d910eba8a253) + + + min setpoint + The name of the ParamType of the autocreated EventType (ceb0ad05-37ad-4b79-a4d9-540c34a7e3e4) of DeviceClass wallThermostate +---------- +The name of the ParamType of the autocreated EventType (ceb0ad05-37ad-4b79-a4d9-540c34a7e3e4) of DeviceClass radiatorThermostate - - + + + error occured + The name of the autocreated EventType (9880247b-cf9a-453c-b0c3-d910eba8a253) +---------- +The name of the ParamType of the autocreated EventType (9880247b-cf9a-453c-b0c3-d910eba8a253) of DeviceClass radiatorThermostate + + + + + error occurred + The name of the ParamType of the autocreated EventType (9880247b-cf9a-453c-b0c3-d910eba8a253) of DeviceClass wallThermostate + + + + + initialized changed The name of the autocreated EventType (a9e29f03-063e-4686-8aac-2f6d8f8a4937) - - + + initialized - The name of the ParamType of StateType (a9e29f03-063e-4686-8aac-2f6d8f8a4937) of DeviceClass wallThermostate + The name of the ParamType of the autocreated EventType (a9e29f03-063e-4686-8aac-2f6d8f8a4937) of DeviceClass wallThermostate ---------- -The name of the ParamType of StateType (a9e29f03-063e-4686-8aac-2f6d8f8a4937) of DeviceClass radiatorThermostate +The name of the ParamType of the autocreated EventType (a9e29f03-063e-4686-8aac-2f6d8f8a4937) of DeviceClass radiatorThermostate - - + + battery low changed The name of the autocreated EventType (53b89f32-8894-4290-92a0-6a470c6b69ab) - - + + + battery low + The name of the ParamType of the autocreated EventType (53b89f32-8894-4290-92a0-6a470c6b69ab) of DeviceClass wallThermostate +---------- +The name of the ParamType of the autocreated EventType (53b89f32-8894-4290-92a0-6a470c6b69ab) of DeviceClass radiatorThermostate + + + + + link status changed The name of the autocreated EventType (aff38be8-7ea6-4fd8-b0fa-e987ab05c719) - + + + link status ok + The name of the ParamType of the autocreated EventType (aff38be8-7ea6-4fd8-b0fa-e987ab05c719) of DeviceClass wallThermostate +---------- +The name of the ParamType of the autocreated EventType (aff38be8-7ea6-4fd8-b0fa-e987ab05c719) of DeviceClass radiatorThermostate + + + + panel locked changed The name of the autocreated EventType (979df197-09a1-46f9-9217-9d323b1062bd) - - + + + panel locked + The name of the ParamType of the autocreated EventType (979df197-09a1-46f9-9217-9d323b1062bd) of DeviceClass wallThermostate +---------- +The name of the ParamType of the autocreated EventType (979df197-09a1-46f9-9217-9d323b1062bd) of DeviceClass radiatorThermostate + + + + + gateway known changed The name of the autocreated EventType (1d6bd962-5c31-47ad-80a4-dda87bff98f5) - - + + + gateway known + The name of the ParamType of the autocreated EventType (1d6bd962-5c31-47ad-80a4-dda87bff98f5) of DeviceClass wallThermostate +---------- +The name of the ParamType of the autocreated EventType (1d6bd962-5c31-47ad-80a4-dda87bff98f5) of DeviceClass radiatorThermostate + + + + + dts active changed The name of the autocreated EventType (1b402ba6-a8ae-45b1-8acf-2b0a89f71889) - - + + + dts active + The name of the ParamType of the autocreated EventType (1b402ba6-a8ae-45b1-8acf-2b0a89f71889) of DeviceClass wallThermostate +---------- +The name of the ParamType of the autocreated EventType (1b402ba6-a8ae-45b1-8acf-2b0a89f71889) of DeviceClass radiatorThermostate + + + + + device mode changed The name of the autocreated EventType (639360f0-bb65-43e6-b227-50ae0ac39d6c) - - + + + device mode + The name of the ParamType of the autocreated EventType (639360f0-bb65-43e6-b227-50ae0ac39d6c) of DeviceClass wallThermostate +---------- +The name of the ParamType of the autocreated EventType (639360f0-bb65-43e6-b227-50ae0ac39d6c) of DeviceClass radiatorThermostate + + + + + device mode string changed The name of the autocreated EventType (ff5194e3-5641-4ac2-92c7-48c431b4a2eb) - - + + + device mode string + The name of the ParamType of the autocreated EventType (ff5194e3-5641-4ac2-92c7-48c431b4a2eb) of DeviceClass wallThermostate +---------- +The name of the ParamType of the autocreated EventType (ff5194e3-5641-4ac2-92c7-48c431b4a2eb) of DeviceClass radiatorThermostate + + + + + desired temperature changed The name of the autocreated EventType (579aa8c6-8814-491b-9e7c-b98108c323d1) - - + + + + + desired temperature + The name of the ParamType of the autocreated EventType (579aa8c6-8814-491b-9e7c-b98108c323d1) of DeviceClass wallThermostate +---------- +The name of the autocreated ParamType of the writable StateType (579aa8c6-8814-491b-9e7c-b98108c323d1) of DeviceClass wallThermostate +---------- +The name of the ParamType of the autocreated EventType (579aa8c6-8814-491b-9e7c-b98108c323d1) of DeviceClass radiatorThermostate +---------- +The name of the autocreated ParamType of the writable StateType (579aa8c6-8814-491b-9e7c-b98108c323d1) of DeviceClass radiatorThermostate + + + + + Set desired temperature The name of the autocreated ActionType (579aa8c6-8814-491b-9e7c-b98108c323d1) - + current temperature changed The name of the autocreated EventType (852e7708-db1d-42d1-96e4-19c13598262c) - - + + current temperature + The name of the ParamType of the autocreated EventType (852e7708-db1d-42d1-96e4-19c13598262c) of DeviceClass wallThermostate + + + + + set auto mode The name of the ActionType 162b4b3d-9923-4f2c-a755-b50c8a06a6f0 of deviceClass wallThermostate ---------- @@ -423,8 +375,8 @@ The name of the ActionType 162b4b3d-9923-4f2c-a755-b50c8a06a6f0 of deviceClass r - - + + set manual mode The name of the ActionType 8e604437-9f5b-4c17-b5b0-e2db6007af5b of deviceClass wallThermostate ---------- @@ -432,8 +384,8 @@ The name of the ActionType 8e604437-9f5b-4c17-b5b0-e2db6007af5b of deviceClass r - - + + set eco mode The name of the ActionType 27a981e8-ec23-4ba8-921e-33b911a7dd89 of deviceClass wallThermostate ---------- @@ -441,97 +393,145 @@ The name of the ActionType 27a981e8-ec23-4ba8-921e-33b911a7dd89 of deviceClass r - + display current temperature The name of the ActionType 184fb112-7a03-4560-8634-0257c969c26e of deviceClass wallThermostate - + display The name of the paramType (894dbb8e-73b5-4e89-8b93-d7afda239dcb) of wallThermostate - + Max! Radiator Thermostat The name of the DeviceClass (f80d9481-4827-45ee-a013-b97b22412d92) - + comfort temperature changed The name of the autocreated EventType (850380ee-a787-43e7-adb8-768a21a6e64d) - + error occured changed The name of the autocreated EventType (9880247b-cf9a-453c-b0c3-d910eba8a253) - - linkStatusOk - The name of the ParamType of StateType (aff38be8-7ea6-4fd8-b0fa-e987ab05c719) of DeviceClass radiatorThermostate + + valve position + The name of the ParamType of the autocreated EventType (72956000-0203-4c32-a6b6-3bb7e46c03ca) of DeviceClass radiatorThermostate - + pannel locked changed The name of the autocreated EventType (979df197-09a1-46f9-9217-9d323b1062bd) - + offset temperature changed The name of the autocreated EventType (576da571-9a65-478f-96bf-19256c8b9ece) - + + offset temperature + The name of the ParamType of the autocreated EventType (576da571-9a65-478f-96bf-19256c8b9ece) of DeviceClass radiatorThermostate + + + + window open duration changed The name of the autocreated EventType (81c6c74a-b0cd-4daa-9eb9-f1cd68f328af) - + + window open duration + The name of the ParamType of the autocreated EventType (81c6c74a-b0cd-4daa-9eb9-f1cd68f328af) of DeviceClass radiatorThermostate + + + + boost value changed The name of the autocreated EventType (7c41fa64-b1a1-48d2-9d03-67aa16cd83ad) - + + boost valve + The name of the ParamType of the autocreated EventType (7c41fa64-b1a1-48d2-9d03-67aa16cd83ad) of DeviceClass radiatorThermostate + + + + boost duration changed The name of the autocreated EventType (e75c1398-9ad7-466c-b3b9-b03bbb686a30) - + + boost duration + The name of the ParamType of the autocreated EventType (e75c1398-9ad7-466c-b3b9-b03bbb686a30) of DeviceClass radiatorThermostate + + + + discalc weekday changed The name of the autocreated EventType (bd6f5947-d4b4-444b-81c8-77eec46957e4) - + + discalc weekday + The name of the ParamType of the autocreated EventType (bd6f5947-d4b4-444b-81c8-77eec46957e4) of DeviceClass radiatorThermostate + + + + discalc time changed The name of the autocreated EventType (e78235ee-affc-41e3-a463-9f0512b4a6c3) - + + discalc time + The name of the ParamType of the autocreated EventType (e78235ee-affc-41e3-a463-9f0512b4a6c3) of DeviceClass radiatorThermostate + + + + valve maximum setting changed The name of the autocreated EventType (e367fa3a-b30f-49bd-af3f-cff92360ad32) - + + valve maximum setting + The name of the ParamType of the autocreated EventType (e367fa3a-b30f-49bd-af3f-cff92360ad32) of DeviceClass radiatorThermostate + + + + valve offset changed The name of the autocreated EventType (ffaff87b-b741-4db8-9875-3380af4f1885) - + + valve offset + The name of the ParamType of the autocreated EventType (ffaff87b-b741-4db8-9875-3380af4f1885) of DeviceClass radiatorThermostate + + + + valve position changed The name of the autocreated EventType (72956000-0203-4c32-a6b6-3bb7e46c03ca) diff --git a/eq-3/wallthermostat.cpp b/eq-3/wallthermostat.cpp index 5ba790f2..218e92bb 100644 --- a/eq-3/wallthermostat.cpp +++ b/eq-3/wallthermostat.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -78,14 +78,14 @@ void WallThermostat::setInformationValid(const bool &informationValid) m_informationValid = informationValid; } -bool WallThermostat::errorOccured() const +bool WallThermostat::errorOccurred() const { - return m_errorOccured; + return m_errorOccurred; } -void WallThermostat::setErrorOccured(const bool &errorOccured) +void WallThermostat::setErrorOccurred(const bool &errorOccurred) { - m_errorOccured = errorOccured; + m_errorOccurred = errorOccurred; } bool WallThermostat::isAnswereToCommand() const diff --git a/eq-3/wallthermostat.h b/eq-3/wallthermostat.h index 84ef4fb4..f73bf2ef 100644 --- a/eq-3/wallthermostat.h +++ b/eq-3/wallthermostat.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -47,8 +47,8 @@ public: bool informationValid() const; void setInformationValid(const bool &informationValid); - bool errorOccured() const; - void setErrorOccured(const bool &errorOccured); + bool errorOccurred() const; + void setErrorOccurred(const bool &errorOccurred); bool isAnswereToCommand() const; void setIsAnswereToCommand(const bool &isAnswereToCommand); @@ -92,7 +92,7 @@ private: double m_minSetPointTemp; bool m_informationValid; - bool m_errorOccured; + bool m_errorOccurred; bool m_isAnswerToCommand; bool m_initialized; bool m_batteryLow; diff --git a/genericelements/deviceplugingenericelements.cpp b/genericelements/deviceplugingenericelements.cpp index 4a0feaf6..59bf0744 100644 --- a/genericelements/deviceplugingenericelements.cpp +++ b/genericelements/deviceplugingenericelements.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -26,7 +26,7 @@ \brief Common elements to test the rule engine. \ingroup plugins - \ingroup guh-tests + \ingroup nymea-tests The generic elements plugin allows you create virtual buttons, which can be connected with a rule. This gives you the possibility to execute multiple \l{Action}{Actions} with one signal. Without a rule this generic elements are diff --git a/genericelements/deviceplugingenericelements.h b/genericelements/deviceplugingenericelements.h index 520e0edc..0d82d4ba 100644 --- a/genericelements/deviceplugingenericelements.h +++ b/genericelements/deviceplugingenericelements.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -29,7 +29,7 @@ class DevicePluginGenericElements : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "deviceplugingenericelements.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "deviceplugingenericelements.json") Q_INTERFACES(DevicePlugin) public: diff --git a/genericelements/deviceplugingenericelements.json b/genericelements/deviceplugingenericelements.json index 9d638484..d7b86fba 100644 --- a/genericelements/deviceplugingenericelements.json +++ b/genericelements/deviceplugingenericelements.json @@ -5,7 +5,7 @@ "vendors": [ { "name": "guh", - "displayName": "guh", + "displayName": "guh GmbH", "id": "2062d64d-3232-433c-88bc-0d33c0ba2ba6", "deviceClasses": [ { diff --git a/genericelements/genericelements.pro b/genericelements/genericelements.pro index ed91a3cf..15e685e4 100644 --- a/genericelements/genericelements.pro +++ b/genericelements/genericelements.pro @@ -1,6 +1,6 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_deviceplugingenericelements) +TARGET = $$qtLibraryTarget(nymea_deviceplugingenericelements) SOURCES += \ deviceplugingenericelements.cpp diff --git a/genericelements/translations/6e22161e-39b7-4416-8623-39e730721efb-de_DE.ts b/genericelements/translations/6e22161e-39b7-4416-8623-39e730721efb-de_DE.ts index 09c310a8..eeddd105 100644 --- a/genericelements/translations/6e22161e-39b7-4416-8623-39e730721efb-de_DE.ts +++ b/genericelements/translations/6e22161e-39b7-4416-8623-39e730721efb-de_DE.ts @@ -4,85 +4,88 @@ GenericElements - - GenericElements + + Generic Elements The name of the plugin GenericElements (6e22161e-39b7-4416-8623-39e730721efb) - - guh + + guh GmbH The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) - + Toggle Button The name of the DeviceClass (c0f511f9-70f5-499b-bd70-2c0e9ddd68c4) - + state changed The name of the autocreated EventType (b5e90567-54aa-49bd-a78a-3c19fb38aaf5) - + + state - The name of the ParamType of StateType (b5e90567-54aa-49bd-a78a-3c19fb38aaf5) of DeviceClass toggleButton + The name of the ParamType of the autocreated EventType (b5e90567-54aa-49bd-a78a-3c19fb38aaf5) of DeviceClass toggleButton +---------- +The name of the autocreated ParamType of the writable StateType (b5e90567-54aa-49bd-a78a-3c19fb38aaf5) of DeviceClass toggleButton - + Set state The name of the autocreated ActionType (b5e90567-54aa-49bd-a78a-3c19fb38aaf5) - + Button The name of the DeviceClass (820b2f2d-0d92-48c8-8fd4-f94ce8fc4103) - + press The name of the ActionType 01f38af1-b2ab-4ec3-844e-ef52f0f229a9 of deviceClass button - + button pressed The name of the EventType effdbc2d-e467-4b0b-80a9-9dda251bfa5c of deviceClass button - + ON/OFF Button The name of the DeviceClass (430d188c-476d-4825-a9bd-86dfa3094b56) - + press ON The name of the ActionType 892596d2-0863-4807-97da-469b9f7003f2 of deviceClass onOffButton - + press OFF The name of the ActionType a8d64050-0b58-4ccf-b052-77ce2b7368ad of deviceClass onOffButton - + ON pressed The name of the EventType 4eeba6a2-e4c7-4a2e-8360-2797d98114e6 of deviceClass onOffButton - + OFF pressed The name of the EventType b636c5f3-2eb0-4682-96d4-88a4aa9d2c12 of deviceClass onOffButton diff --git a/genericelements/translations/6e22161e-39b7-4416-8623-39e730721efb-en_US.ts b/genericelements/translations/6e22161e-39b7-4416-8623-39e730721efb-en_US.ts index 85e8c0be..ee656a19 100644 --- a/genericelements/translations/6e22161e-39b7-4416-8623-39e730721efb-en_US.ts +++ b/genericelements/translations/6e22161e-39b7-4416-8623-39e730721efb-en_US.ts @@ -4,85 +4,88 @@ GenericElements - - GenericElements + + Generic Elements The name of the plugin GenericElements (6e22161e-39b7-4416-8623-39e730721efb) - - guh + + guh GmbH The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) - + Toggle Button The name of the DeviceClass (c0f511f9-70f5-499b-bd70-2c0e9ddd68c4) - + state changed The name of the autocreated EventType (b5e90567-54aa-49bd-a78a-3c19fb38aaf5) - + + state - The name of the ParamType of StateType (b5e90567-54aa-49bd-a78a-3c19fb38aaf5) of DeviceClass toggleButton + The name of the ParamType of the autocreated EventType (b5e90567-54aa-49bd-a78a-3c19fb38aaf5) of DeviceClass toggleButton +---------- +The name of the autocreated ParamType of the writable StateType (b5e90567-54aa-49bd-a78a-3c19fb38aaf5) of DeviceClass toggleButton - + Set state The name of the autocreated ActionType (b5e90567-54aa-49bd-a78a-3c19fb38aaf5) - + Button The name of the DeviceClass (820b2f2d-0d92-48c8-8fd4-f94ce8fc4103) - + press The name of the ActionType 01f38af1-b2ab-4ec3-844e-ef52f0f229a9 of deviceClass button - + button pressed The name of the EventType effdbc2d-e467-4b0b-80a9-9dda251bfa5c of deviceClass button - + ON/OFF Button The name of the DeviceClass (430d188c-476d-4825-a9bd-86dfa3094b56) - + press ON The name of the ActionType 892596d2-0863-4807-97da-469b9f7003f2 of deviceClass onOffButton - + press OFF The name of the ActionType a8d64050-0b58-4ccf-b052-77ce2b7368ad of deviceClass onOffButton - + ON pressed The name of the EventType 4eeba6a2-e4c7-4a2e-8360-2797d98114e6 of deviceClass onOffButton - + OFF pressed The name of the EventType b636c5f3-2eb0-4682-96d4-88a4aa9d2c12 of deviceClass onOffButton diff --git a/gpio/deviceplugingpio.cpp b/gpio/deviceplugingpio.cpp index ac9f86c8..441ebc77 100644 --- a/gpio/deviceplugingpio.cpp +++ b/gpio/deviceplugingpio.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2016 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -26,7 +26,7 @@ \brief Plugin to control gpios on different boards. \ingroup plugins - \ingroup guh-plugins-maker + \ingroup nymea-plugins-maker \chapter Raspberry Pi 2 @@ -68,14 +68,14 @@ DeviceManager::DeviceSetupStatus DevicePluginGpio::setupDevice(Device *device) } // GPIO Switch - if (device->deviceClassId() == gpioSwitchRpiDeviceClassId || device->deviceClassId() == gpioSwitchBbbDeviceClassId) { + if (device->deviceClassId() == gpioOutputRpiDeviceClassId || device->deviceClassId() == gpioOutputBbbDeviceClassId) { // Create and configure gpio int gpioId = -1; - if (device->deviceClassId() == gpioSwitchRpiDeviceClassId) - gpioId = device->paramValue(gpioSwitchRpiGpioParamTypeId).toInt(); + if (device->deviceClassId() == gpioOutputRpiDeviceClassId) + gpioId = device->paramValue(gpioOutputRpiGpioParamTypeId).toInt(); - if (device->deviceClassId() == gpioSwitchBbbDeviceClassId) - gpioId = device->paramValue(gpioSwitchBbbGpioParamTypeId).toInt(); + if (device->deviceClassId() == gpioOutputBbbDeviceClassId) + gpioId = device->paramValue(gpioOutputBbbGpioParamTypeId).toInt(); Gpio *gpio = new Gpio(gpioId, this); @@ -96,23 +96,23 @@ DeviceManager::DeviceSetupStatus DevicePluginGpio::setupDevice(Device *device) m_gpioDevices.insert(gpio, device); - if (device->deviceClassId() == gpioSwitchRpiDeviceClassId) + if (device->deviceClassId() == gpioOutputRpiDeviceClassId) m_raspberryPiGpios.insert(gpio->gpioNumber(), gpio); - if (device->deviceClassId() == gpioSwitchBbbDeviceClassId) + if (device->deviceClassId() == gpioOutputBbbDeviceClassId) m_beagleboneBlackGpios.insert(gpio->gpioNumber(), gpio); return DeviceManager::DeviceSetupStatusSuccess; } - if (device->deviceClassId() == gpioButtonRpiDeviceClassId || device->deviceClassId() == gpioButtonBbbDeviceClassId) { + if (device->deviceClassId() == gpioInputRpiDeviceClassId || device->deviceClassId() == gpioInputBbbDeviceClassId) { int gpioId = -1; - if (device->deviceClassId() == gpioButtonRpiDeviceClassId) - gpioId = device->paramValue(gpioButtonRpiGpioParamTypeId).toInt(); + if (device->deviceClassId() == gpioInputRpiDeviceClassId) + gpioId = device->paramValue(gpioInputRpiGpioParamTypeId).toInt(); - if (device->deviceClassId() == gpioButtonBbbDeviceClassId) - gpioId = device->paramValue(gpioButtonBbbGpioParamTypeId).toInt(); + if (device->deviceClassId() == gpioInputBbbDeviceClassId) + gpioId = device->paramValue(gpioInputBbbGpioParamTypeId).toInt(); GpioMonitor *monior = new GpioMonitor(gpioId, this); @@ -125,10 +125,10 @@ DeviceManager::DeviceSetupStatus DevicePluginGpio::setupDevice(Device *device) m_monitorDevices.insert(monior, device); - if (device->deviceClassId() == gpioSwitchRpiDeviceClassId) + if (device->deviceClassId() == gpioOutputRpiDeviceClassId) m_raspberryPiGpioMoniors.insert(monior->gpio()->gpioNumber(), monior); - if (device->deviceClassId() == gpioSwitchBbbDeviceClassId) + if (device->deviceClassId() == gpioOutputBbbDeviceClassId) m_beagleboneBlackGpioMoniors.insert(monior->gpio()->gpioNumber(), monior); return DeviceManager::DeviceSetupStatusSuccess; @@ -174,14 +174,14 @@ DeviceManager::DeviceError DevicePluginGpio::discoverDevices(const DeviceClassId DeviceDescriptor descriptor(deviceClassId, QString("GPIO %1").arg(gpioDescriptor.gpio()), description); ParamList parameters; - if (deviceClass.id() == gpioSwitchRpiDeviceClassId) { - parameters.append(Param(gpioSwitchRpiGpioParamTypeId, gpioDescriptor.gpio())); - parameters.append(Param(gpioSwitchRpiPinParamTypeId, gpioDescriptor.pin())); - parameters.append(Param(gpioSwitchRpiDescriptionParamTypeId, gpioDescriptor.description())); - } else if (deviceClass.id() == gpioButtonRpiDeviceClassId) { - parameters.append(Param(gpioButtonRpiGpioParamTypeId, gpioDescriptor.gpio())); - parameters.append(Param(gpioButtonRpiPinParamTypeId, gpioDescriptor.pin())); - parameters.append(Param(gpioButtonRpiDescriptionParamTypeId, gpioDescriptor.description())); + if (deviceClass.id() == gpioOutputRpiDeviceClassId) { + parameters.append(Param(gpioOutputRpiGpioParamTypeId, gpioDescriptor.gpio())); + parameters.append(Param(gpioOutputRpiPinParamTypeId, gpioDescriptor.pin())); + parameters.append(Param(gpioOutputRpiDescriptionParamTypeId, gpioDescriptor.description())); + } else if (deviceClass.id() == gpioInputRpiDeviceClassId) { + parameters.append(Param(gpioInputRpiGpioParamTypeId, gpioDescriptor.gpio())); + parameters.append(Param(gpioInputRpiPinParamTypeId, gpioDescriptor.pin())); + parameters.append(Param(gpioInputRpiDescriptionParamTypeId, gpioDescriptor.description())); } descriptor.setParams(parameters); @@ -217,14 +217,14 @@ DeviceManager::DeviceError DevicePluginGpio::discoverDevices(const DeviceClassId DeviceDescriptor descriptor(deviceClassId, QString("GPIO %1").arg(gpioDescriptor.gpio()), description); ParamList parameters; - if (deviceClass.id() == gpioSwitchBbbDeviceClassId) { - parameters.append(Param(gpioSwitchBbbGpioParamTypeId, gpioDescriptor.gpio())); - parameters.append(Param(gpioSwitchBbbPinParamTypeId, gpioDescriptor.pin())); - parameters.append(Param(gpioSwitchBbbDescriptionParamTypeId, gpioDescriptor.description())); - } else if (deviceClass.id() == gpioButtonBbbDeviceClassId) { - parameters.append(Param(gpioButtonBbbGpioParamTypeId, gpioDescriptor.gpio())); - parameters.append(Param(gpioButtonBbbPinParamTypeId, gpioDescriptor.pin())); - parameters.append(Param(gpioButtonBbbDescriptionParamTypeId, gpioDescriptor.description())); + if (deviceClass.id() == gpioOutputBbbDeviceClassId) { + parameters.append(Param(gpioOutputBbbGpioParamTypeId, gpioDescriptor.gpio())); + parameters.append(Param(gpioOutputBbbPinParamTypeId, gpioDescriptor.pin())); + parameters.append(Param(gpioOutputBbbDescriptionParamTypeId, gpioDescriptor.description())); + } else if (deviceClass.id() == gpioInputBbbDeviceClassId) { + parameters.append(Param(gpioInputBbbGpioParamTypeId, gpioDescriptor.gpio())); + parameters.append(Param(gpioInputBbbPinParamTypeId, gpioDescriptor.pin())); + parameters.append(Param(gpioInputBbbDescriptionParamTypeId, gpioDescriptor.description())); } descriptor.setParams(parameters); @@ -282,10 +282,10 @@ DeviceManager::DeviceError DevicePluginGpio::executeAction(Device *device, const // Find the gpio in the corresponding hash if (deviceClass.vendorId() == raspberryPiVendorId) - gpio = m_raspberryPiGpios.value(device->paramValue(gpioSwitchRpiGpioParamTypeId).toInt()); + gpio = m_raspberryPiGpios.value(device->paramValue(gpioOutputRpiGpioParamTypeId).toInt()); if (deviceClass.vendorId() == beagleboneBlackVendorId) - gpio = m_beagleboneBlackGpios.value(device->paramValue(gpioSwitchBbbGpioParamTypeId).toInt()); + gpio = m_beagleboneBlackGpios.value(device->paramValue(gpioOutputBbbGpioParamTypeId).toInt()); // Check if gpio was found if (!gpio) { @@ -295,9 +295,9 @@ DeviceManager::DeviceError DevicePluginGpio::executeAction(Device *device, const // GPIO Switch power action if (deviceClass.vendorId() == raspberryPiVendorId) { - if (action.actionTypeId() == gpioSwitchRpiPowerValueActionTypeId) { + if (action.actionTypeId() == gpioOutputRpiPowerValueActionTypeId) { bool success = false; - if (action.param(gpioSwitchRpiPowerValueStateParamTypeId).value().toBool()) { + if (action.param(gpioOutputRpiPowerValueActionParamTypeId).value().toBool()) { success = gpio->setValue(Gpio::ValueHigh); } else { success = gpio->setValue(Gpio::ValueLow); @@ -309,14 +309,14 @@ DeviceManager::DeviceError DevicePluginGpio::executeAction(Device *device, const } // Set the current state - device->setStateValue(gpioSwitchRpiPowerValueStateTypeId, action.param(gpioSwitchRpiPowerValueStateParamTypeId).value()); + device->setStateValue(gpioOutputRpiPowerValueStateTypeId, action.param(gpioOutputRpiPowerValueActionParamTypeId).value()); return DeviceManager::DeviceErrorNoError; } } else if (deviceClass.vendorId() == beagleboneBlackVendorId) { - if (action.actionTypeId() == gpioSwitchBbbPowerValueActionTypeId) { + if (action.actionTypeId() == gpioOutputBbbPowerValueActionTypeId) { bool success = false; - if (action.param(gpioSwitchBbbPowerValueStateParamTypeId).value().toBool()) { + if (action.param(gpioOutputBbbPowerValueActionParamTypeId).value().toBool()) { success = gpio->setValue(Gpio::ValueHigh); } else { success = gpio->setValue(Gpio::ValueLow); @@ -328,7 +328,7 @@ DeviceManager::DeviceError DevicePluginGpio::executeAction(Device *device, const } // Set the current state - device->setStateValue(gpioSwitchBbbPowerValueStateTypeId, action.param(gpioSwitchBbbPowerValueStateParamTypeId).value()); + device->setStateValue(gpioOutputBbbPowerValueStateTypeId, action.param(gpioOutputBbbPowerValueActionParamTypeId).value()); return DeviceManager::DeviceErrorNoError; } @@ -339,29 +339,29 @@ DeviceManager::DeviceError DevicePluginGpio::executeAction(Device *device, const void DevicePluginGpio::postSetupDevice(Device *device) { - if (device->deviceClassId() == gpioSwitchRpiDeviceClassId || device->deviceClassId() == gpioSwitchBbbDeviceClassId) { + if (device->deviceClassId() == gpioOutputRpiDeviceClassId || device->deviceClassId() == gpioOutputBbbDeviceClassId) { Gpio *gpio = m_gpioDevices.key(device); if (!gpio) return; gpio->setValue(Gpio::ValueLow); - if (device->deviceClassId() == gpioSwitchRpiDeviceClassId) { - device->setStateValue(gpioSwitchRpiPowerValueStateTypeId, false); + if (device->deviceClassId() == gpioOutputRpiDeviceClassId) { + device->setStateValue(gpioOutputRpiPowerValueStateTypeId, false); } - if (device->deviceClassId() == gpioSwitchBbbDeviceClassId) { - device->setStateValue(gpioSwitchBbbPowerValueStateTypeId, false); + if (device->deviceClassId() == gpioOutputBbbDeviceClassId) { + device->setStateValue(gpioOutputBbbPowerValueStateTypeId, false); } } - if (device->deviceClassId() == gpioButtonRpiDeviceClassId || device->deviceClassId() == gpioButtonBbbDeviceClassId) { + if (device->deviceClassId() == gpioInputRpiDeviceClassId || device->deviceClassId() == gpioInputBbbDeviceClassId) { GpioMonitor *monitor = m_monitorDevices.key(device); if (!monitor) return; - if (device->deviceClassId() == gpioButtonRpiDeviceClassId) { - device->setStateValue(gpioButtonRpiPressedStateTypeId, monitor->value()); - } else if (device->deviceClassId() == gpioButtonBbbDeviceClassId) { - device->setStateValue(gpioButtonBbbPressedStateTypeId, monitor->value()); + if (device->deviceClassId() == gpioInputRpiDeviceClassId) { + device->setStateValue(gpioInputRpiPressedStateTypeId, monitor->value()); + } else if (device->deviceClassId() == gpioInputBbbDeviceClassId) { + device->setStateValue(gpioInputBbbPressedStateTypeId, monitor->value()); } } } @@ -481,10 +481,10 @@ void DevicePluginGpio::onGpioValueChanged(const bool &value) if (!device) return; - if (device->deviceClassId() == gpioButtonRpiDeviceClassId) { - device->setStateValue(gpioButtonRpiPressedStateTypeId, value); - } else if (device->deviceClassId() == gpioButtonBbbDeviceClassId) { - device->setStateValue(gpioButtonBbbPressedStateTypeId, value); + if (device->deviceClassId() == gpioInputRpiDeviceClassId) { + device->setStateValue(gpioInputRpiPressedStateTypeId, value); + } else if (device->deviceClassId() == gpioInputBbbDeviceClassId) { + device->setStateValue(gpioInputBbbPressedStateTypeId, value); } } diff --git a/gpio/deviceplugingpio.h b/gpio/deviceplugingpio.h index f95d2e83..413f1f42 100644 --- a/gpio/deviceplugingpio.h +++ b/gpio/deviceplugingpio.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2016 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -33,7 +33,7 @@ class DevicePluginGpio : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "deviceplugingpio.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "deviceplugingpio.json") Q_INTERFACES(DevicePlugin) public: diff --git a/gpio/deviceplugingpio.json b/gpio/deviceplugingpio.json index 03b7b588..8969b76e 100644 --- a/gpio/deviceplugingpio.json +++ b/gpio/deviceplugingpio.json @@ -4,19 +4,16 @@ "id": "127ead55-996a-44ac-ba82-fc3c634e018a", "vendors": [ { - "displayName": "Raspberry Pi 2", + "displayName": "Raspberry Pi 2/3", "name": "raspberryPi", "id": "f0d00b66-bbd8-4a07-8591-ea48a61b229e", "deviceClasses": [ { "id": "3885c520-e202-4435-88f6-3c35c362b2e6", - "displayName": "GPIO Switch", - "name": "gpioSwitchRpi", + "displayName": "GPIO Output", + "name": "gpioOutputRpi", "deviceIcon": "Switch", - "basicTags": [ - "Device", - "Actuator" - ], + "basicTags": ["Device", "Actuator"], "createMethods": ["discovery"], "paramTypes": [ { @@ -56,13 +53,10 @@ }, { "id": "6aff228b-0410-4ef9-9593-51e8639aacea", - "displayName": "GPIO Button", - "name": "gpioButtonRpi", + "displayName": "GPIO Input", + "name": "gpioInputRpi", "deviceIcon": "Power", - "basicTags": [ - "Device", - "Sensor" - ], + "basicTags": ["Device", "Sensor"], "createMethods": ["discovery"], "paramTypes": [ { @@ -107,13 +101,10 @@ "deviceClasses": [ { "id": "75d54a59-f9b0-4bc4-a86c-6b1fc47e0663", - "displayName": "GPIO Switch", - "name": "gpioSwitchBbb", + "displayName": "GPIO Output", + "name": "gpioOutputBbb", "deviceIcon": "Switch", - "basicTags": [ - "Device", - "Actuator" - ], + "basicTags": ["Device", "Actuator"], "createMethods": ["discovery"], "paramTypes": [ { @@ -153,13 +144,10 @@ }, { "id": "ffd2aa29-55cc-4824-ba95-c311784f7824", - "displayName": "GPIO Button", - "name": "gpioButtonBbb", + "displayName": "GPIO Input", + "name": "gpioInputBbb", "deviceIcon": "Power", - "basicTags": [ - "Device", - "Sensor" - ], + "basicTags": ["Device", "Sensor"], "createMethods": ["discovery"], "paramTypes": [ { diff --git a/gpio/gpio.pro b/gpio/gpio.pro index 0556e7ce..70861f43 100644 --- a/gpio/gpio.pro +++ b/gpio/gpio.pro @@ -1,6 +1,6 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_deviceplugingpio) +TARGET = $$qtLibraryTarget(nymea_deviceplugingpio) SOURCES += \ deviceplugingpio.cpp \ diff --git a/gpio/gpiodescriptor.cpp b/gpio/gpiodescriptor.cpp index 6e77c3b8..bf9930d0 100644 --- a/gpio/gpiodescriptor.cpp +++ b/gpio/gpiodescriptor.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2016 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/gpio/gpiodescriptor.h b/gpio/gpiodescriptor.h index 26fdf60f..6fbb9930 100644 --- a/gpio/gpiodescriptor.h +++ b/gpio/gpiodescriptor.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2016 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/gpio/translations/127ead55-996a-44ac-ba82-fc3c634e018a-de_DE.ts b/gpio/translations/127ead55-996a-44ac-ba82-fc3c634e018a-de_DE.ts index 2f2fe861..a3f7e8fd 100644 --- a/gpio/translations/127ead55-996a-44ac-ba82-fc3c634e018a-de_DE.ts +++ b/gpio/translations/127ead55-996a-44ac-ba82-fc3c634e018a-de_DE.ts @@ -4,121 +4,127 @@ GpioController - - GpioController + + Gpio Controller The name of the plugin GpioController (127ead55-996a-44ac-ba82-fc3c634e018a) - - Raspberry Pi 2 + + Raspberry Pi 2/3 The name of the vendor (f0d00b66-bbd8-4a07-8591-ea48a61b229e) - - - GPIO Switch + + + GPIO Output The name of the DeviceClass (3885c520-e202-4435-88f6-3c35c362b2e6) ---------- The name of the DeviceClass (75d54a59-f9b0-4bc4-a86c-6b1fc47e0663) - - - - + + + + GPIO - The name of the paramType (9eda783f-6d9f-4d39-986d-d2cbfff5a7dd) of gpioSwitchRpi + The name of the paramType (9eda783f-6d9f-4d39-986d-d2cbfff5a7dd) of gpioOutputRpi ---------- -The name of the paramType (9eda783f-6d9f-4d39-986d-d2cbfff5a7dd) of gpioButtonRpi +The name of the paramType (9eda783f-6d9f-4d39-986d-d2cbfff5a7dd) of gpioInputRpi ---------- -The name of the paramType (9eda783f-6d9f-4d39-986d-d2cbfff5a7dd) of gpioSwitchBbb +The name of the paramType (9eda783f-6d9f-4d39-986d-d2cbfff5a7dd) of gpioOutputBbb ---------- -The name of the paramType (9eda783f-6d9f-4d39-986d-d2cbfff5a7dd) of gpioButtonBbb +The name of the paramType (9eda783f-6d9f-4d39-986d-d2cbfff5a7dd) of gpioInputBbb - - - - + + + + Pin number - The name of the paramType (2204d278-7bc7-407f-ac82-ce3ae1d5779c) of gpioSwitchRpi + The name of the paramType (2204d278-7bc7-407f-ac82-ce3ae1d5779c) of gpioOutputRpi ---------- -The name of the paramType (2204d278-7bc7-407f-ac82-ce3ae1d5779c) of gpioButtonRpi +The name of the paramType (2204d278-7bc7-407f-ac82-ce3ae1d5779c) of gpioInputRpi ---------- -The name of the paramType (2204d278-7bc7-407f-ac82-ce3ae1d5779c) of gpioSwitchBbb +The name of the paramType (2204d278-7bc7-407f-ac82-ce3ae1d5779c) of gpioOutputBbb ---------- -The name of the paramType (2204d278-7bc7-407f-ac82-ce3ae1d5779c) of gpioButtonBbb +The name of the paramType (2204d278-7bc7-407f-ac82-ce3ae1d5779c) of gpioInputBbb - - - - + + + + Description - The name of the paramType (504798eb-1faa-4703-a57a-2778e4bf9a67) of gpioSwitchRpi + The name of the paramType (504798eb-1faa-4703-a57a-2778e4bf9a67) of gpioOutputRpi ---------- -The name of the paramType (504798eb-1faa-4703-a57a-2778e4bf9a67) of gpioButtonRpi +The name of the paramType (504798eb-1faa-4703-a57a-2778e4bf9a67) of gpioInputRpi ---------- -The name of the paramType (504798eb-1faa-4703-a57a-2778e4bf9a67) of gpioSwitchBbb +The name of the paramType (504798eb-1faa-4703-a57a-2778e4bf9a67) of gpioOutputBbb ---------- -The name of the paramType (504798eb-1faa-4703-a57a-2778e4bf9a67) of gpioButtonBbb +The name of the paramType (504798eb-1faa-4703-a57a-2778e4bf9a67) of gpioInputBbb - - + + Power changed The name of the autocreated EventType (06843766-358e-44b0-8d52-2b46ef98459a) - - - powerValue - The name of the ParamType of StateType (06843766-358e-44b0-8d52-2b46ef98459a) of DeviceClass gpioSwitchRpi + + + + + Power + The name of the ParamType of the autocreated EventType (06843766-358e-44b0-8d52-2b46ef98459a) of DeviceClass gpioOutputRpi ---------- -The name of the ParamType of StateType (06843766-358e-44b0-8d52-2b46ef98459a) of DeviceClass gpioSwitchBbb - - - - - - pressed - The name of the ParamType of StateType (57f1b7cc-26c8-434b-ba04-d3077dc886c8) of DeviceClass gpioButtonRpi +The name of the autocreated ParamType of the writable StateType (06843766-358e-44b0-8d52-2b46ef98459a) of DeviceClass gpioOutputRpi ---------- -The name of the ParamType of StateType (57f1b7cc-26c8-434b-ba04-d3077dc886c8) of DeviceClass gpioButtonBbb +The name of the ParamType of the autocreated EventType (06843766-358e-44b0-8d52-2b46ef98459a) of DeviceClass gpioOutputBbb +---------- +The name of the autocreated ParamType of the writable StateType (06843766-358e-44b0-8d52-2b46ef98459a) of DeviceClass gpioOutputBbb - - - Set power - The name of the autocreated ActionType (06843766-358e-44b0-8d52-2b46ef98459a) - - - - - - GPIO Button + + + GPIO Input The name of the DeviceClass (6aff228b-0410-4ef9-9593-51e8639aacea) ---------- The name of the DeviceClass (ffd2aa29-55cc-4824-ba95-c311784f7824) - - + + + Set power + The name of the autocreated ActionType (06843766-358e-44b0-8d52-2b46ef98459a) + + + + + Pressed changed The name of the autocreated EventType (57f1b7cc-26c8-434b-ba04-d3077dc886c8) - + + + Pressed + The name of the ParamType of the autocreated EventType (57f1b7cc-26c8-434b-ba04-d3077dc886c8) of DeviceClass gpioInputRpi +---------- +The name of the ParamType of the autocreated EventType (57f1b7cc-26c8-434b-ba04-d3077dc886c8) of DeviceClass gpioInputBbb + + + + Beaglebone Black The name of the vendor (7835d14b-b455-49bd-9f31-72c6e8c3033d) diff --git a/gpio/translations/127ead55-996a-44ac-ba82-fc3c634e018a-en_US.ts b/gpio/translations/127ead55-996a-44ac-ba82-fc3c634e018a-en_US.ts index 84a8ad15..a69516ed 100644 --- a/gpio/translations/127ead55-996a-44ac-ba82-fc3c634e018a-en_US.ts +++ b/gpio/translations/127ead55-996a-44ac-ba82-fc3c634e018a-en_US.ts @@ -4,121 +4,127 @@ GpioController - - GpioController + + Gpio Controller The name of the plugin GpioController (127ead55-996a-44ac-ba82-fc3c634e018a) - - Raspberry Pi 2 + + Raspberry Pi 2/3 The name of the vendor (f0d00b66-bbd8-4a07-8591-ea48a61b229e) - - - GPIO Switch + + + GPIO Output The name of the DeviceClass (3885c520-e202-4435-88f6-3c35c362b2e6) ---------- The name of the DeviceClass (75d54a59-f9b0-4bc4-a86c-6b1fc47e0663) - - - - + + + + GPIO - The name of the paramType (9eda783f-6d9f-4d39-986d-d2cbfff5a7dd) of gpioSwitchRpi + The name of the paramType (9eda783f-6d9f-4d39-986d-d2cbfff5a7dd) of gpioOutputRpi ---------- -The name of the paramType (9eda783f-6d9f-4d39-986d-d2cbfff5a7dd) of gpioButtonRpi +The name of the paramType (9eda783f-6d9f-4d39-986d-d2cbfff5a7dd) of gpioInputRpi ---------- -The name of the paramType (9eda783f-6d9f-4d39-986d-d2cbfff5a7dd) of gpioSwitchBbb +The name of the paramType (9eda783f-6d9f-4d39-986d-d2cbfff5a7dd) of gpioOutputBbb ---------- -The name of the paramType (9eda783f-6d9f-4d39-986d-d2cbfff5a7dd) of gpioButtonBbb +The name of the paramType (9eda783f-6d9f-4d39-986d-d2cbfff5a7dd) of gpioInputBbb - - - - + + + + Pin number - The name of the paramType (2204d278-7bc7-407f-ac82-ce3ae1d5779c) of gpioSwitchRpi + The name of the paramType (2204d278-7bc7-407f-ac82-ce3ae1d5779c) of gpioOutputRpi ---------- -The name of the paramType (2204d278-7bc7-407f-ac82-ce3ae1d5779c) of gpioButtonRpi +The name of the paramType (2204d278-7bc7-407f-ac82-ce3ae1d5779c) of gpioInputRpi ---------- -The name of the paramType (2204d278-7bc7-407f-ac82-ce3ae1d5779c) of gpioSwitchBbb +The name of the paramType (2204d278-7bc7-407f-ac82-ce3ae1d5779c) of gpioOutputBbb ---------- -The name of the paramType (2204d278-7bc7-407f-ac82-ce3ae1d5779c) of gpioButtonBbb +The name of the paramType (2204d278-7bc7-407f-ac82-ce3ae1d5779c) of gpioInputBbb - - - - + + + + Description - The name of the paramType (504798eb-1faa-4703-a57a-2778e4bf9a67) of gpioSwitchRpi + The name of the paramType (504798eb-1faa-4703-a57a-2778e4bf9a67) of gpioOutputRpi ---------- -The name of the paramType (504798eb-1faa-4703-a57a-2778e4bf9a67) of gpioButtonRpi +The name of the paramType (504798eb-1faa-4703-a57a-2778e4bf9a67) of gpioInputRpi ---------- -The name of the paramType (504798eb-1faa-4703-a57a-2778e4bf9a67) of gpioSwitchBbb +The name of the paramType (504798eb-1faa-4703-a57a-2778e4bf9a67) of gpioOutputBbb ---------- -The name of the paramType (504798eb-1faa-4703-a57a-2778e4bf9a67) of gpioButtonBbb +The name of the paramType (504798eb-1faa-4703-a57a-2778e4bf9a67) of gpioInputBbb - - + + Power changed The name of the autocreated EventType (06843766-358e-44b0-8d52-2b46ef98459a) - - - powerValue - The name of the ParamType of StateType (06843766-358e-44b0-8d52-2b46ef98459a) of DeviceClass gpioSwitchRpi + + + + + Power + The name of the ParamType of the autocreated EventType (06843766-358e-44b0-8d52-2b46ef98459a) of DeviceClass gpioOutputRpi ---------- -The name of the ParamType of StateType (06843766-358e-44b0-8d52-2b46ef98459a) of DeviceClass gpioSwitchBbb - - - - - - pressed - The name of the ParamType of StateType (57f1b7cc-26c8-434b-ba04-d3077dc886c8) of DeviceClass gpioButtonRpi +The name of the autocreated ParamType of the writable StateType (06843766-358e-44b0-8d52-2b46ef98459a) of DeviceClass gpioOutputRpi ---------- -The name of the ParamType of StateType (57f1b7cc-26c8-434b-ba04-d3077dc886c8) of DeviceClass gpioButtonBbb +The name of the ParamType of the autocreated EventType (06843766-358e-44b0-8d52-2b46ef98459a) of DeviceClass gpioOutputBbb +---------- +The name of the autocreated ParamType of the writable StateType (06843766-358e-44b0-8d52-2b46ef98459a) of DeviceClass gpioOutputBbb - - - Set power - The name of the autocreated ActionType (06843766-358e-44b0-8d52-2b46ef98459a) - - - - - - GPIO Button + + + GPIO Input The name of the DeviceClass (6aff228b-0410-4ef9-9593-51e8639aacea) ---------- The name of the DeviceClass (ffd2aa29-55cc-4824-ba95-c311784f7824) - - + + + Set power + The name of the autocreated ActionType (06843766-358e-44b0-8d52-2b46ef98459a) + + + + + Pressed changed The name of the autocreated EventType (57f1b7cc-26c8-434b-ba04-d3077dc886c8) - + + + Pressed + The name of the ParamType of the autocreated EventType (57f1b7cc-26c8-434b-ba04-d3077dc886c8) of DeviceClass gpioInputRpi +---------- +The name of the ParamType of the autocreated EventType (57f1b7cc-26c8-434b-ba04-d3077dc886c8) of DeviceClass gpioInputBbb + + + + Beaglebone Black The name of the vendor (7835d14b-b455-49bd-9f31-72c6e8c3033d) diff --git a/httpcommander/devicepluginhttpcommander.cpp b/httpcommander/devicepluginhttpcommander.cpp new file mode 100644 index 00000000..cd5327a9 --- /dev/null +++ b/httpcommander/devicepluginhttpcommander.cpp @@ -0,0 +1,255 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2017 Bernhard Trinnes * + * Copyright (C) 2018 Simon Stürz * + * * + * This file is part of nymea. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Lesser General Public * + * License as published by the Free Software Foundation; either * + * version 2.1 of the License, or (at your option) any later version. * + * * + * This library 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 library; If not, see * + * . * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#include "devicepluginhttpcommander.h" +#include "network/networkaccessmanager.h" +#include "plugininfo.h" + + +DevicePluginHttpCommander::DevicePluginHttpCommander() +{ +} + +DevicePluginHttpCommander::~DevicePluginHttpCommander() +{ + hardwareManager()->pluginTimerManager()->unregisterTimer(m_pluginTimer); +} + +void DevicePluginHttpCommander::init() +{ + m_pluginTimer = hardwareManager()->pluginTimerManager()->registerTimer(10); + connect(m_pluginTimer, &PluginTimer::timeout, this, &DevicePluginHttpCommander::onPluginTimer); +} + +DeviceManager::DeviceSetupStatus DevicePluginHttpCommander::setupDevice(Device *device) +{ + qDebug(dcHttpCommander()) << "Setup device" << device->name() << device->params(); + + // Get + if (device->deviceClassId() == httpGetCommanderDeviceClassId) { + QUrl url = device->paramValue(httpGetCommanderUrlParamTypeId).toUrl(); + if (!url.isValid()) { + qDebug(dcHttpCommander()) << "Given URL is not valid"; + return DeviceManager::DeviceSetupStatusFailure; + } + + return DeviceManager::DeviceSetupStatusSuccess; + } + + // Put + if (device->deviceClassId() == httpPutCommanderDeviceClassId) { + QUrl url = device->paramValue(httpPutCommanderUrlParamTypeId).toUrl(); + if (!url.isValid()) { + qDebug(dcHttpCommander()) << "Given URL is not valid"; + return DeviceManager::DeviceSetupStatusFailure; + } + + return DeviceManager::DeviceSetupStatusSuccess; + } + + // Post + if (device->deviceClassId() == httpPostCommanderDeviceClassId) { + QUrl url = device->paramValue(httpPostCommanderUrlParamTypeId).toUrl(); + if (!url.isValid()) { + qDebug(dcHttpCommander()) << "Given URL is not valid"; + return DeviceManager::DeviceSetupStatusFailure; + } + + return DeviceManager::DeviceSetupStatusSuccess; + } + + return DeviceManager::DeviceSetupStatusFailure; +} + + +void DevicePluginHttpCommander::postSetupDevice(Device *device) +{ + if (device->deviceClassId() == httpGetCommanderDeviceClassId) { + makeGetCall(device); + } + + if (device->deviceClassId() == httpPostCommanderDeviceClassId) { + //TODO find a way to check it the URL is reachable + device->setStateValue(httpPostCommanderConnectedStateTypeId, true); + } + + if (device->deviceClassId() == httpPutCommanderDeviceClassId) { + //TODO find a way to check it the URL is reachable + device->setStateValue(httpPutCommanderConnectedStateTypeId, true); + } +} + + +DeviceManager::DeviceError DevicePluginHttpCommander::executeAction(Device *device, const Action &action) +{ + if (device->deviceClassId() == httpPostCommanderDeviceClassId) { + + if (action.actionTypeId() == httpPostCommanderPostActionTypeId) { + QUrl url = device->paramValue(httpPostCommanderUrlParamTypeId).toUrl(); + url.setPort(device->paramValue(httpPostCommanderPortParamTypeId).toInt()); + QByteArray payload = action.param(httpPostCommanderDataParamTypeId).value().toByteArray(); + + QNetworkReply *reply = hardwareManager()->networkManager()->post(QNetworkRequest(url), payload); + connect(reply, &QNetworkReply::finished, this, &DevicePluginHttpCommander::onPostRequestFinished); + + m_httpRequests.insert(reply, device); + + return DeviceManager::DeviceErrorNoError; + } + return DeviceManager::DeviceErrorActionTypeNotFound; + + } + + if (device->deviceClassId() == httpPutCommanderDeviceClassId) { + + // check if this is the "press" action + if (action.actionTypeId() == httpPutCommanderPutActionTypeId) { + + QUrl url = device->paramValue(httpPutCommanderUrlParamTypeId).toUrl(); + url.setPort(device->paramValue(httpPutCommanderPortParamTypeId).toInt()); + QByteArray payload = action.param(httpPutCommanderDataParamTypeId).value().toByteArray(); + QNetworkReply *reply = hardwareManager()->networkManager()->put(QNetworkRequest(url), payload); + connect(reply, &QNetworkReply::finished, this, &DevicePluginHttpCommander::onPutRequestFinished); + + m_httpRequests.insert(reply, device); + + return DeviceManager::DeviceErrorNoError; + } + } + return DeviceManager::DeviceErrorDeviceClassNotFound; +} + +void DevicePluginHttpCommander::makeGetCall(Device *device) +{ + QUrl url = device->paramValue(httpGetCommanderUrlParamTypeId).toUrl(); + url.setPort(device->paramValue(httpGetCommanderPortParamTypeId).toInt()); + QNetworkRequest request; + request.setUrl(url); + request.setRawHeader("User-Agent", "guhIO 1.0"); + + QNetworkReply *reply = hardwareManager()->networkManager()->get(request); + connect(reply, &QNetworkReply::finished, this, &DevicePluginHttpCommander::onGetRequestFinished); + + m_httpRequests.insert(reply, device); +} + +void DevicePluginHttpCommander::onPluginTimer() +{ + foreach (Device *device, myDevices()) { + if (device->deviceClassId() == httpGetCommanderDeviceClassId) { + makeGetCall(device); + } + } +} + +void DevicePluginHttpCommander::onGetRequestFinished() +{ + QNetworkReply *reply = static_cast(sender()); + qDebug(dcHttpCommander()) << "GET reply finished"; + QByteArray data = reply->readAll(); + int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); + + if (!m_httpRequests.contains(reply)) { + reply->deleteLater(); + return; + } + + Device *device = m_httpRequests.take(reply); + device->setStateValue(httpGetCommanderResponseStateTypeId, data); + + // Check HTTP status code + if (status != 200 || reply->error() != QNetworkReply::NoError) { + qCWarning(dcHttpCommander()) << "Request error:" << status << reply->errorString(); + device->setStateValue(httpGetCommanderConnectedStateTypeId, false); + reply->deleteLater(); + return; + } + + device->setStateValue(httpGetCommanderConnectedStateTypeId, true); + reply->deleteLater(); +} + +void DevicePluginHttpCommander::onPostRequestFinished() +{ + QNetworkReply *reply = static_cast(sender()); + qDebug(dcHttpCommander()) << "POST reply finished"; + QByteArray data = reply->readAll(); + int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); + + if (!m_httpRequests.contains(reply)) { + reply->deleteLater(); + return; + } + + Device *device = m_httpRequests.take(reply); + device->setStateValue(httpPostCommanderResponseStateTypeId, data); + + // Check HTTP status code + if (status != 200 || reply->error() != QNetworkReply::NoError) { + qCWarning(dcHttpCommander()) << "Request error:" << status << reply->errorString(); + device->setStateValue(httpPostCommanderConnectedStateTypeId, false); + reply->deleteLater(); + return; + } + + device->setStateValue(httpPostCommanderConnectedStateTypeId, true); + reply->deleteLater(); +} + +void DevicePluginHttpCommander::onPutRequestFinished() +{ + QNetworkReply *reply = static_cast(sender()); + qDebug(dcHttpCommander()) << "PUT reply finished"; + QByteArray data = reply->readAll(); + int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); + + if (!m_httpRequests.contains(reply)) { + reply->deleteLater(); + return; + } + + Device *device = m_httpRequests.take(reply); + device->setStateValue(httpPutCommanderResponseStateTypeId, data); + + // Check HTTP status code + if (status != 200 || reply->error() != QNetworkReply::NoError) { + qCWarning(dcHttpCommander()) << "Request error:" << status << reply->errorString(); + device->setStateValue(httpPutCommanderConnectedStateTypeId, false); + reply->deleteLater(); + return; + } + + device->setStateValue(httpPutCommanderConnectedStateTypeId, true); + reply->deleteLater(); +} + + +void DevicePluginHttpCommander::deviceRemoved(Device *device) +{ + if (m_httpRequests.values().contains(device)) { + QNetworkReply *reply = m_httpRequests.key(device); + m_httpRequests.remove(reply); + // Note: will be deleted once finished + } +} + diff --git a/httpcommander/devicepluginhttpcommander.h b/httpcommander/devicepluginhttpcommander.h new file mode 100644 index 00000000..26023ed9 --- /dev/null +++ b/httpcommander/devicepluginhttpcommander.h @@ -0,0 +1,64 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2017 Bernhard Trinnes * + * Copyright (C) 2018 Simon Stürz * + * * + * This file is part of nymea. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Lesser General Public * + * License as published by the Free Software Foundation; either * + * version 2.1 of the License, or (at your option) any later version. * + * * + * This library 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 library; If not, see * + * . * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#ifndef DEVICEPLUGINHTTPCOMMANDER_H +#define DEVICEPLUGINHTTPCOMMANDER_H + +#include "plugin/deviceplugin.h" +#include "devicemanager.h" +#include "plugintimer.h" + +#include + +class DevicePluginHttpCommander : public DevicePlugin +{ + Q_OBJECT + + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginhttpcommander.json") + Q_INTERFACES(DevicePlugin) + +public: + explicit DevicePluginHttpCommander(); + ~DevicePluginHttpCommander(); + + void init() override; + DeviceManager::DeviceSetupStatus setupDevice(Device *device) override; + void postSetupDevice(Device *device) override; + void deviceRemoved(Device *device) override; + DeviceManager::DeviceError executeAction(Device *device, const Action &action) override; + +private: + PluginTimer *m_pluginTimer = nullptr; + QHash m_httpRequests; + + void makeGetCall(Device *device); + +private slots: + void onPluginTimer(); + + void onGetRequestFinished(); + void onPostRequestFinished(); + void onPutRequestFinished(); +}; + +#endif // DEVICEPLUGINHTTPCOMMANDER_H diff --git a/httpcommander/devicepluginhttpcommander.json b/httpcommander/devicepluginhttpcommander.json new file mode 100644 index 00000000..121f70d3 --- /dev/null +++ b/httpcommander/devicepluginhttpcommander.json @@ -0,0 +1,185 @@ +{ + "name": "HttpCommander", + "displayName": "Http Commander", + "id": "4e62670c-6268-4487-8dff-cccca498731a", + "vendors": [ + { + "name": "httpCommander", + "displayName": "HTTP commander", + "id": "45d7c941-7690-43c9-92fc-fab36e1cebd0", + "deviceClasses": [ + { + "id": "b101abdf-86fd-4d2e-a657-ee76044235bd", + "name": "httpPostCommander", + "displayName": "HTTP post commander", + "deviceIcon": "Network", + "createMethods": ["user"], + "basicTags": [ + "Service" + ], + "interfaces": ["connectable"], + "paramTypes": [ + { + "id": "020f672e-cc9a-4b74-92dd-a92a93ab1d23", + "name": "url", + "displayName": "Address", + "type": "QString", + "inputType": "None", + "defaultValue": "https://nymea.io" + }, + { + "id": "37830ea8-2249-46e6-aaca-12164928a81a", + "name": "port", + "displayName": "Port", + "type": "int", + "defaultValue": "443" + } + ], + "stateTypes": [ + { + "id": "8daac0e7-4c2f-4cdf-b528-02cfe04c6b39", + "name": "connected", + "displayName": "Reachable", + "displayNameEvent": "Reachability changed", + "type": "bool", + "defaultValue": false + }, + { + "id": "69f32ec8-114d-43f4-9241-1f6a57261f32", + "name": "response", + "displayName": "response", + "displayNameEvent": "Response received", + "type": "QString", + "defaultValue": "" + } + ], + "actionTypes": [ + { + "id": "5a97ca56-b334-411b-adba-116496ffe83d", + "name": "post", + "displayName": "Post data", + "paramTypes": [ + { + "id": "363119a3-c02c-4ed5-a915-11706198f3eb", + "name": "data", + "displayName": "Data", + "type": "QString", + "defaultValue": "" + } + ] + } + ] + }, + { + "id": "05bf65f5-ff13-43e3-b6ae-77019e79d8a1", + "name": "httpPutCommander", + "displayName": "HTTP put commander", + "deviceIcon": "Network", + "createMethods": ["user"], + "interfaces": ["connectable"], + "basicTags": [ + "Service" + ], + "paramTypes": [ + { + "id": "1a3fcb23-931b-4ba1-b134-c49b656c76f7", + "name": "url", + "displayName": "Address", + "type": "QString", + "inputType": "None", + "defaultValue": "https://nymea.io" + }, + { + "id": "db994349-1105-4ce5-b6fe-6fd38fbc436a", + "name": "port", + "displayName": "Port", + "type": "int", + "defaultValue": "443" + } + ], + "stateTypes": [ + { + "id": "d102ff86-b773-48e3-a7a5-e138cb541f49", + "name": "connected", + "displayName": "Reachable", + "displayNameEvent": "Reachability changed", + "type": "bool", + "defaultValue": false + }, + { + "id": "69f32ec8-114d-43f4-9241-1f6a57261f32", + "name": "response", + "displayName": "Response", + "displayNameEvent": "Response received", + "type": "QString", + "defaultValue": "" + } + ], + "actionTypes": [ + { + "id": "a9f165dc-cdf1-48f0-b4b6-7c24373cb77c", + "name": "put", + "displayName": "put", + "paramTypes": [ + { + "id": "7742d445-8fc1-4b20-87f2-1bb35929fce1", + "name": "data", + "displayName": "Data", + "type": "QString", + "defaultValue": "" + } + ] + } + ] + }, + { + "id": "8f3f6dde-9db3-4237-800b-bb7f804098c9", + "name": "httpGetCommander", + "displayName": "HTTP get", + "deviceIcon": "Network", + "createMethods": ["user"], + "basicTags": [ + "Service" + ], + "interfaces": ["connectable"], + "paramTypes": [ + { + "id": "477b544b-b631-4526-a4ef-c712ff5f955d", + "name": "url", + "displayName": "URL or IPv4 Address", + "type": "QString", + "inputType": "None", + "defaultValue": "https://nymea.io" + }, + { + "id": "bee8b151-815a-4159-9d8a-42b76e99b42c", + "name": "port", + "displayName": "Port", + "type": "int", + "defaultValue": "443" + } + ], + "stateTypes":[ + { + "id": "0d63f815-efd1-488a-9bfa-e9f6bda540d2", + "name": "connected", + "displayName": "Reachable", + "displayNameEvent": "Reachability changed", + "type": "bool", + "defaultValue": false + }, + { + "id": "d81f0644-b94e-48ed-ae48-1b8ff6cebc0c", + "name": "response", + "displayName": "Response", + "type": "QString", + "defaultValue": "", + "displayNameEvent": "Response data received" + } + ] + } + ] + } + ] +} + diff --git a/httpcommander/httpcommander.pro b/httpcommander/httpcommander.pro new file mode 100644 index 00000000..53cb8f3f --- /dev/null +++ b/httpcommander/httpcommander.pro @@ -0,0 +1,13 @@ +include(../plugins.pri) + +QT += network + +TARGET = $$qtLibraryTarget(nymea_devicepluginhttpcommander) + +SOURCES += \ + devicepluginhttpcommander.cpp \ + +HEADERS += \ + devicepluginhttpcommander.h \ + + diff --git a/httpcommander/translations/4e62670c-6268-4487-8dff-cccca498731a-en_US.ts b/httpcommander/translations/4e62670c-6268-4487-8dff-cccca498731a-en_US.ts new file mode 100644 index 00000000..5356877c --- /dev/null +++ b/httpcommander/translations/4e62670c-6268-4487-8dff-cccca498731a-en_US.ts @@ -0,0 +1,110 @@ + + + + + HttpCommander + + HTTP commander + The name of the vendor (45d7c941-7690-43c9-92fc-fab36e1cebd0) + + + + HTTP post commander + The name of the DeviceClass (b101abdf-86fd-4d2e-a657-ee76044235bd) + + + + Address + The name of the paramType (020f672e-cc9a-4b74-92dd-a92a93ab1d23) of httpPostCommander +---------- +The name of the paramType (1a3fcb23-931b-4ba1-b134-c49b656c76f7) of httpPutCommander + + + + Port + The name of the paramType (37830ea8-2249-46e6-aaca-12164928a81a) of httpPostCommander +---------- +The name of the paramType (db994349-1105-4ce5-b6fe-6fd38fbc436a) of httpPutCommander +---------- +The name of the paramType (bee8b151-815a-4159-9d8a-42b76e99b42c) of httpGetCommander + + + + Reachability changed + The name of the autocreated EventType (8daac0e7-4c2f-4cdf-b528-02cfe04c6b39) +---------- +The name of the autocreated EventType (d102ff86-b773-48e3-a7a5-e138cb541f49) +---------- +The name of the autocreated EventType (0d63f815-efd1-488a-9bfa-e9f6bda540d2) + + + + Response received + The name of the autocreated EventType (69f32ec8-114d-43f4-9241-1f6a57261f32) + + + + response + The name of the ParamType of the autocreated EventType (69f32ec8-114d-43f4-9241-1f6a57261f32) of DeviceClass httpPostCommander + + + + Post data + The name of the ActionType 5a97ca56-b334-411b-adba-116496ffe83d of deviceClass httpPostCommander + + + + Data + The name of the paramType (363119a3-c02c-4ed5-a915-11706198f3eb) of httpPostCommander +---------- +The name of the paramType (7742d445-8fc1-4b20-87f2-1bb35929fce1) of httpPutCommander + + + + HTTP put commander + The name of the DeviceClass (05bf65f5-ff13-43e3-b6ae-77019e79d8a1) + + + + put + The name of the ActionType a9f165dc-cdf1-48f0-b4b6-7c24373cb77c of deviceClass httpPutCommander + + + + HTTP get + The name of the DeviceClass (8f3f6dde-9db3-4237-800b-bb7f804098c9) + + + + URL or IPv4 Address + The name of the paramType (477b544b-b631-4526-a4ef-c712ff5f955d) of httpGetCommander + + + + Response data received + The name of the autocreated EventType (d81f0644-b94e-48ed-ae48-1b8ff6cebc0c) + + + + Http Commander + The name of the plugin HttpCommander (4e62670c-6268-4487-8dff-cccca498731a) + + + + Reachable + The name of the ParamType of the autocreated EventType (8daac0e7-4c2f-4cdf-b528-02cfe04c6b39) of DeviceClass httpPostCommander +---------- +The name of the ParamType of the autocreated EventType (d102ff86-b773-48e3-a7a5-e138cb541f49) of DeviceClass httpPutCommander +---------- +The name of the ParamType of the autocreated EventType (0d63f815-efd1-488a-9bfa-e9f6bda540d2) of DeviceClass httpGetCommander + + + + Response + The name of the ParamType of the autocreated EventType (69f32ec8-114d-43f4-9241-1f6a57261f32) of DeviceClass httpPutCommander +---------- +The name of the ParamType of the autocreated EventType (d81f0644-b94e-48ed-ae48-1b8ff6cebc0c) of DeviceClass httpGetCommander + + + + diff --git a/intertechno/devicepluginintertechno.cpp b/intertechno/devicepluginintertechno.cpp index 74fce34c..dd76536a 100644 --- a/intertechno/devicepluginintertechno.cpp +++ b/intertechno/devicepluginintertechno.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -26,9 +26,9 @@ \brief Plugin for InterTechno 433 MHz devices. \ingroup plugins - \ingroup guh-plugins + \ingroup nymea-plugins - This plugin allows to controll RF 433 MHz actors an receive remote signals from + This plugin allows to control RF 433 MHz actors an receive remote signals from \l{http://www.intertechno.at}{Intertechno} devices. \chapter Plugin properties diff --git a/intertechno/devicepluginintertechno.h b/intertechno/devicepluginintertechno.h index d13a31cb..53f6d193 100644 --- a/intertechno/devicepluginintertechno.h +++ b/intertechno/devicepluginintertechno.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -29,7 +29,7 @@ class DevicePluginIntertechno : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "devicepluginintertechno.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginintertechno.json") Q_INTERFACES(DevicePlugin) public: diff --git a/intertechno/intertechno.pro b/intertechno/intertechno.pro index 5ce9fbdb..ea43070c 100644 --- a/intertechno/intertechno.pro +++ b/intertechno/intertechno.pro @@ -1,6 +1,6 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_devicepluginintertechno) +TARGET = $$qtLibraryTarget(nymea_devicepluginintertechno) SOURCES += \ devicepluginintertechno.cpp diff --git a/keba/devicepluginkeba.cpp b/keba/devicepluginkeba.cpp new file mode 100644 index 00000000..f1073c15 --- /dev/null +++ b/keba/devicepluginkeba.cpp @@ -0,0 +1,243 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2016-2018 Simon Stuerz * + * Copyright (C) 2016 Christian Stachowitz * + * * + * This file is part of nymea. * + * * + * Nymea 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. * + * * + * Nymea 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 nymea. If not, see . * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#include "devicepluginkeba.h" + +#include +#include +#include +#include +#include "plugininfo.h" +#include + +DevicePluginKeba::DevicePluginKeba() +{ + +} + +DevicePluginKeba::~DevicePluginKeba() +{ + hardwareManager()->pluginTimerManager()->unregisterTimer(m_pluginTimer); +} + +void DevicePluginKeba::init() +{ + m_pluginTimer = hardwareManager()->pluginTimerManager()->registerTimer(60); + connect(m_pluginTimer, &PluginTimer::timeout, this, &DevicePluginKeba::updateData); +} + +DeviceManager::DeviceSetupStatus DevicePluginKeba::setupDevice(Device *device) +{ + qCDebug(dcKebaKeContact()) << "Setting up a new device:" << device->name() << device->params(); + + if(m_kebaDevices.isEmpty()) { + m_kebaSocket = new QUdpSocket(this); + if (!m_kebaSocket->bind(QHostAddress::AnyIPv4, 7090)) { + qCWarning(dcKebaKeContact()) << "Cannot bind to port" << 7090; + delete m_kebaSocket; + return DeviceManager::DeviceSetupStatusFailure; + } + connect(m_kebaSocket, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams())); + qCDebug(dcKebaKeContact()) << "Create keba socket"; + } + + QHostAddress address = QHostAddress(device->paramValue(wallboxIpParamTypeId).toString()); + + //Check if the IP is empty + if (address.isNull()) { + delete m_kebaSocket; + return DeviceManager::DeviceSetupStatusFailure; + } + + // check if IP is already added to another keba device + if(m_kebaDevices.keys().contains(address)){ + return DeviceManager::DeviceSetupStatusFailure; + } + + m_kebaDevices.insert(address, device); + return DeviceManager::DeviceSetupStatusSuccess; +} + +void DevicePluginKeba::postSetupDevice(Device *device) +{ + qCDebug(dcKebaKeContact()) << "Post setup" << device->name(); + QByteArray datagram; + datagram.append("report 2"); + m_kebaSocket->writeDatagram(datagram.data(), datagram.size(), QHostAddress(device->paramValue(wallboxIpParamTypeId).toString()), 7090); +} + +void DevicePluginKeba::deviceRemoved(Device *device) +{ + // Remove devices + QHostAddress address = m_kebaDevices.key(device); + m_kebaDevices.remove(address); + + if(m_kebaDevices.isEmpty()){ + m_kebaSocket->close(); + m_kebaSocket->deleteLater(); + qCDebug(dcKebaKeContact()) << "clear socket"; + } +} + +void DevicePluginKeba::updateData() +{ + foreach (QHostAddress address, m_kebaDevices.keys()) { + QByteArray datagram; + datagram.append("report 2"); + qCDebug(dcKebaKeContact()) << "datagram : " << datagram; + m_kebaSocket->writeDatagram(datagram.data(),datagram.size(), address , 7090); + //set reachable false until successful reply from device + m_kebaDevices.value(address)->setStateValue(wallboxReachableStateTypeId,false); + } +} + +DeviceManager::DeviceError DevicePluginKeba::executeAction(Device *device, const Action &action) +{ + qCDebug(dcKebaKeContact()) << "Execute action" << device->name() << action.actionTypeId().toString(); + + if (device->deviceClassId() == wallboxDeviceClassId) { + + // Print information that we are executing now the update action + qCDebug(dcKebaKeContact()) << "Execute update action" << action.id(); + + if(action.actionTypeId() == wallboxMaxCurrentActionTypeId){ + // Print information that we are executing now the update action + qCDebug(dcKebaKeContact()) << "Update max current to : " << action.param(wallboxMaxCurrentActionParamTypeId).value().toString(); + QByteArray datagram; + datagram.append("curr " + QVariant(action.param(wallboxMaxCurrentActionParamTypeId).value().toInt()*1000).toString()); + qCDebug(dcKebaKeContact()) << "Datagram : " << datagram; + m_kebaSocket->writeDatagram(datagram.data(),datagram.size(), QHostAddress(device->paramValue(wallboxIpParamTypeId).toString()) , 7090); + } + else if(action.actionTypeId() == wallboxOutEnableActionTypeId){ + // Print information that we are executing now the update action + qCDebug(dcKebaKeContact()) << "output enable : " << action.param(wallboxOutEnableActionParamTypeId).value().toString(); + QByteArray datagram; + if(action.param(wallboxOutEnableActionParamTypeId).value().toBool()){ + datagram.append("ena 1"); + } + else{ + datagram.append("ena 0"); + } + qCDebug(dcKebaKeContact()) << "Datagram : " << datagram; + m_kebaSocket->writeDatagram(datagram.data(),datagram.size(), QHostAddress(device->paramValue(wallboxIpParamTypeId).toString()) , 7090); + } + + return DeviceManager::DeviceErrorNoError; + } + + return DeviceManager::DeviceErrorDeviceClassNotFound; +} + +void DevicePluginKeba::readPendingDatagrams() +{ + QUdpSocket *socket= qobject_cast(sender()); + + QByteArray datagram; + QHostAddress sender; + quint16 senderPort; + + while (socket->hasPendingDatagrams()) { + datagram.resize(socket->pendingDatagramSize()); + socket->readDatagram(datagram.data(), datagram.size(), &sender, &senderPort); + + qCDebug(dcKebaKeContact()) << " got command from" << sender.toString() << senderPort; + } + + if(!m_kebaDevices.keys().contains(sender)){ + qCDebug(dcKebaKeContact()) << " unknown sender:" << sender.toString() << senderPort; + return; + } + + // Convert the rawdata to a json document + QJsonParseError error; + QJsonDocument jsonDoc = QJsonDocument::fromJson(datagram, &error); + if (error.error != QJsonParseError::NoError) { + qCWarning(dcKebaKeContact()) << "Failed to parse JSON data" << datagram << ":" << error.errorString(); + return; + } + + // print the fetched data in json format to stdout + //qCDebug(dcKebaKeContact()) << qUtf8Printable(jsonDoc.toJson()); + + QVariantMap data = jsonDoc.toVariant().toMap(); + + qCDebug(dcKebaKeContact()) << "IP" << sender << "device: " << m_kebaDevices.value(sender); + + if(data.contains("ID")){ + // check if ID matches report 2 or report 3 + if(data.value("ID").toString() == "2"){ + //set reachable + m_kebaDevices.value(sender)->setStateValue(wallboxReachableStateTypeId,true); + //activity state + if(data.value("State").toString() == "0"){ + m_kebaDevices.value(sender)->setStateValue(wallboxActivityStateTypeId,"starting"); + } + else if(data.value("State").toString() == "1"){ + m_kebaDevices.value(sender)->setStateValue(wallboxActivityStateTypeId,"not ready for charging"); + } + else if(data.value("State").toString() == "2"){ + m_kebaDevices.value(sender)->setStateValue(wallboxActivityStateTypeId,"ready for charging"); + } + else if(data.value("State").toString() == "3"){ + m_kebaDevices.value(sender)->setStateValue(wallboxActivityStateTypeId,"charging"); + } + else if(data.value("State").toString() == "4"){ + m_kebaDevices.value(sender)->setStateValue(wallboxActivityStateTypeId,"error"); + } + else if(data.value("State").toString() == "5"){ + m_kebaDevices.value(sender)->setStateValue(wallboxActivityStateTypeId,"authorization rejected"); + } + // plug state + if(data.value("Plug").toString() == "0"){ + m_kebaDevices.value(sender)->setStateValue(wallboxPlugStateStateTypeId,"unplugged"); + } + else if(data.value("Plug").toString() == "1"){ + m_kebaDevices.value(sender)->setStateValue(wallboxPlugStateStateTypeId,"plugged on charging station"); + } + else if(data.value("Plug").toString() == "3"){ + m_kebaDevices.value(sender)->setStateValue(wallboxPlugStateStateTypeId,"locked plug on charging station"); + } + else if(data.value("Plug").toString() == "5"){ + m_kebaDevices.value(sender)->setStateValue(wallboxPlugStateStateTypeId,"plugged on charging station and vehicle"); + } + else if(data.value("Plug").toString() == "7"){ + m_kebaDevices.value(sender)->setStateValue(wallboxPlugStateStateTypeId,"locked plug on charging station and vehicle"); + } + //maximum current setting + m_kebaDevices.value(sender)->setStateValue(wallboxMaxCurrentStateTypeId,data.value("Curr user").toInt()/1000); + //output setting + m_kebaDevices.value(sender)->setStateValue(wallboxOutEnableStateTypeId,data.value("Enable user").toBool()); + + //request next report + QByteArray datagram; + datagram.append("report 3"); + qCDebug(dcKebaKeContact()) << "datagram : " << datagram; + socket->writeDatagram(datagram.data(),datagram.size(), QHostAddress(m_kebaDevices.value(sender)->paramValue(wallboxIpParamTypeId).toString()) , 7090); + } + else if(data.value("ID").toString() == "3"){ + //power of current charging session + m_kebaDevices.value(sender)->setStateValue(wallboxPowerStateTypeId,data.value("E pres").toInt() / 1000); + //current phase 1 + m_kebaDevices.value(sender)->setStateValue(wallboxCurrentStateTypeId,data.value("I1").toInt() * 1000); + } + } + +} diff --git a/keba/devicepluginkeba.h b/keba/devicepluginkeba.h new file mode 100644 index 00000000..d95076b8 --- /dev/null +++ b/keba/devicepluginkeba.h @@ -0,0 +1,63 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2016-2018 Simon Stuerz * + * Copyright (C) 2016 Christian Stachowitz * + * * + * This file is part of nymea. * + * * + * Nymea 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. * + * * + * Nymea 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 nymea. If not, see . * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#ifndef DEVICEPLUGINKEBA_H +#define DEVICEPLUGINKEBA_H + +#include "plugin/deviceplugin.h" +#include "devicemanager.h" +#include "plugintimer.h" + +#include +#include +#include + +class DevicePluginKeba : public DevicePlugin +{ + Q_OBJECT + + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginkeba.json") + Q_INTERFACES(DevicePlugin) + +public: + explicit DevicePluginKeba(); + ~DevicePluginKeba(); + + void init() override; + DeviceManager::DeviceSetupStatus setupDevice(Device *device) override; + + void postSetupDevice(Device* device) override; + void deviceRemoved(Device* device) override; + + DeviceManager::DeviceError executeAction(Device *device, const Action &action) override; + void updateData(); + +private: + PluginTimer *m_pluginTimer = nullptr; + QHash m_kebaDevices; + QUdpSocket *m_kebaSocket; + +private slots: + void readPendingDatagrams(); + +}; + +#endif // DEVICEPLUGINKEBA_H diff --git a/keba/devicepluginkeba.json b/keba/devicepluginkeba.json new file mode 100644 index 00000000..1eebfcae --- /dev/null +++ b/keba/devicepluginkeba.json @@ -0,0 +1,103 @@ +{ + "displayName": "Keba KeContact", + "name": "KebaKeContact", + "id": "9142b09f-30a9-43d0-9ede-2f8debe075ac", + "vendors": [ + { + "id": "f7cda40b-829a-4675-abaa-485697430f5f", + "displayName": "Keba", + "name": "keba", + "deviceClasses": [ + { + "id": "900dacec-cae7-4a37-95ba-501846368ea2", + "name": "wallbox", + "displayName": "Keba KeContact P30", + "deviceIcon": "Energy", + "createMethods": ["user"], + "interfaces": [], + "criticalStateTypeId": "b1a574a6-46b6-44ea-a0bb-9b4de3198967", + "basicTags": [ + "Energy" + ], + "paramTypes":[ + { + "id": "730cd3d3-5f0e-4028-a8c2-ced7574f13f3", + "name": "ip", + "displayName": "IP Address", + "type": "QString", + "inputType": "IPv4Address", + "defaultValue":"0.0.0.0" + } + ], + "stateTypes": [ + { + "id": "539e5602-6dd9-465d-9705-3bb59bcf8982", + "name": "activity", + "displayName": "Activity", + "displayNameEvent": "Activity changed", + "type": "QString", + "defaultValue": "-" + }, + { + "id": "3b4d29f3-3101-47ad-90fd-269b6348783b", + "name": "plugState", + "displayName": "Plug State", + "displayNameEvent": "Plug State changed", + "type": "QString", + "defaultValue": "-" + }, + { + "id": "a29c1748-fe97-4830-a56e-e1cc4e618385", + "name": "current", + "displayName": "Current", + "displayNameEvent": "Current changed", + "type": "int", + "unit": "Ampere", + "defaultValue": 0 + }, + { + "id": "593656f0-babf-4308-8767-68f34e10fb15", + "name": "maxCurrent", + "displayName": "maximal Current", + "displayNameEvent": "Maximal Current changed", + "displayNameAction": "Set maximal current", + "type": "int", + "unit": "Ampere", + "defaultValue": 6, + "minValue": 6, + "maxValue": 63, + "writable": true + }, + { + "id": "e8f069ca-7fa7-4568-8d4c-165f6d048720", + "name": "power", + "displayName": "Power", + "displayNameEvent": "Power changed", + "type": "int", + "unit": "KiloWattHour", + "defaultValue": 0 + }, + { + "id": "0cd5396a-bc41-4c8f-b037-db10991a76c7", + "name": "outEnable", + "displayName": "Output", + "displayNameEvent": "Output Enable changed", + "displayNameAction": "Set Output", + "type": "bool", + "defaultValue": false, + "writable": true + }, + { + "id": "b1a574a6-46b6-44ea-a0bb-9b4de3198967", + "name": "reachable", + "displayName": "reachable", + "displayNameEvent": "Device Reachable changed", + "type": "bool", + "defaultValue": false + } + ] + } + ] + } + ] +} diff --git a/keba/keba.pro b/keba/keba.pro new file mode 100644 index 00000000..8fefbf42 --- /dev/null +++ b/keba/keba.pro @@ -0,0 +1,11 @@ +include(../plugins.pri) + +QT += network + +TARGET = $$qtLibraryTarget(nymea_devicepluginkeba) + +SOURCES += \ + devicepluginkeba.cpp \ + +HEADERS += \ + devicepluginkeba.h \ diff --git a/keba/translations/9142b09f-30a9-43d0-9ede-2f8debe075ac-en_US.ts b/keba/translations/9142b09f-30a9-43d0-9ede-2f8debe075ac-en_US.ts new file mode 100644 index 00000000..f48f635f --- /dev/null +++ b/keba/translations/9142b09f-30a9-43d0-9ede-2f8debe075ac-en_US.ts @@ -0,0 +1,133 @@ + + + + + KebaKeContact + + + Keba KeContact + The name of the plugin KebaKeContact (9142b09f-30a9-43d0-9ede-2f8debe075ac) + + + + + Keba + The name of the vendor (f7cda40b-829a-4675-abaa-485697430f5f) + + + + + Keba KeContact P30 + The name of the DeviceClass (900dacec-cae7-4a37-95ba-501846368ea2) + + + + + IP Address + The name of the paramType (730cd3d3-5f0e-4028-a8c2-ced7574f13f3) of wallbox + + + + + Activity changed + The name of the autocreated EventType (539e5602-6dd9-465d-9705-3bb59bcf8982) + + + + + Activity + The name of the ParamType of the autocreated EventType (539e5602-6dd9-465d-9705-3bb59bcf8982) of DeviceClass wallbox + + + + + Plug State + The name of the ParamType of the autocreated EventType (3b4d29f3-3101-47ad-90fd-269b6348783b) of DeviceClass wallbox + + + + + Current + The name of the ParamType of the autocreated EventType (a29c1748-fe97-4830-a56e-e1cc4e618385) of DeviceClass wallbox + + + + + + maximal Current + The name of the ParamType of the autocreated EventType (593656f0-babf-4308-8767-68f34e10fb15) of DeviceClass wallbox +---------- +The name of the autocreated ParamType of the writable StateType (593656f0-babf-4308-8767-68f34e10fb15) of DeviceClass wallbox + + + + + Power + The name of the ParamType of the autocreated EventType (e8f069ca-7fa7-4568-8d4c-165f6d048720) of DeviceClass wallbox + + + + + + Output + The name of the ParamType of the autocreated EventType (0cd5396a-bc41-4c8f-b037-db10991a76c7) of DeviceClass wallbox +---------- +The name of the autocreated ParamType of the writable StateType (0cd5396a-bc41-4c8f-b037-db10991a76c7) of DeviceClass wallbox + + + + + Plug State changed + The name of the autocreated EventType (3b4d29f3-3101-47ad-90fd-269b6348783b) + + + + + Current changed + The name of the autocreated EventType (a29c1748-fe97-4830-a56e-e1cc4e618385) + + + + + Maximal Current changed + The name of the autocreated EventType (593656f0-babf-4308-8767-68f34e10fb15) + + + + + Set maximal current + The name of the autocreated ActionType (593656f0-babf-4308-8767-68f34e10fb15) + + + + + Power changed + The name of the autocreated EventType (e8f069ca-7fa7-4568-8d4c-165f6d048720) + + + + + Output Enable changed + The name of the autocreated EventType (0cd5396a-bc41-4c8f-b037-db10991a76c7) + + + + + Set Output + The name of the autocreated ActionType (0cd5396a-bc41-4c8f-b037-db10991a76c7) + + + + + Device Reachable changed + The name of the autocreated EventType (b1a574a6-46b6-44ea-a0bb-9b4de3198967) + + + + + reachable + The name of the ParamType of the autocreated EventType (b1a574a6-46b6-44ea-a0bb-9b4de3198967) of DeviceClass wallbox + + + + diff --git a/kodi/devicepluginkodi.cpp b/kodi/devicepluginkodi.cpp index 8f581aa4..5f525369 100644 --- a/kodi/devicepluginkodi.cpp +++ b/kodi/devicepluginkodi.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -26,10 +26,10 @@ \brief Plugin for the Kodi media center. \ingroup plugins - \ingroup guh-plugins + \ingroup nymea-plugins This plugin allows you to controll the media center \l{http://kodi.tv/}{Kodi}. If you want to discover - and control Kodi with guh, you need to activate the remote access and the UPnP service. + and control Kodi with nymea, you need to activate the remote access and the UPnP service. \chapter "Activate UPnP" In order to discover Kodi in the network, you need to activate the UPnP serive in the Kodi settings: @@ -46,7 +46,7 @@ \chapter Activate "Remote Control" - In order to control Kodi over the network with guh, you need to activate the remote control permissions: + In order to control Kodi over the network with nymea, you need to activate the remote control permissions: \section2 Settings \unicode{0x2192} Services \unicode{0x2192} Remote Control Activate all options. @@ -69,18 +69,18 @@ DevicePluginKodi::DevicePluginKodi() { // Q_INIT_RESOURCE(images); -// QFile file(":/images/guh-logo.png"); +// QFile file(":/images/nymea-logo.png"); // if (!file.open(QIODevice::ReadOnly)) { // qCWarning(dcKodi) << "could not open" << file.fileName(); // return; // } -// QByteArray guhLogoByteArray = file.readAll(); -// if (guhLogoByteArray.isEmpty()) { +// QByteArray nymeaLogoByteArray = file.readAll(); +// if (nymeaLogoByteArray.isEmpty()) { // qCWarning(dcKodi) << "could not read" << file.fileName(); // return; // } - // m_logo = guhLogoByteArray; + // m_logo = nymeaLogoByteArray; } DevicePluginKodi::~DevicePluginKodi() @@ -148,10 +148,10 @@ DeviceManager::DeviceError DevicePluginKodi::executeAction(Device *device, const kodi->showNotification(action.param(kodiMessageParamTypeId).value().toString(), 8000, action.param(kodiTypeParamTypeId).value().toString(), action.id()); return DeviceManager::DeviceErrorAsync; } else if (action.actionTypeId() == kodiVolumeActionTypeId) { - kodi->setVolume(action.param(kodiVolumeStateParamTypeId).value().toInt(), action.id()); + kodi->setVolume(action.param(kodiVolumeActionParamTypeId).value().toInt(), action.id()); return DeviceManager::DeviceErrorAsync; } else if (action.actionTypeId() == kodiMuteActionTypeId) { - kodi->setMuted(action.param(kodiMuteStateParamTypeId).value().toBool(), action.id()); + kodi->setMuted(action.param(kodiMuteActionParamTypeId).value().toBool(), action.id()); return DeviceManager::DeviceErrorAsync; } else if (action.actionTypeId() == kodiPressButtonActionTypeId) { kodi->pressButton(action.param(kodiButtonParamTypeId).value().toString(), action.id()); @@ -217,7 +217,7 @@ void DevicePluginKodi::onUpnpDiscoveryFinished() foreach (const UpnpDeviceDescriptor &upnpDescriptor, reply->deviceDescriptors()) { if (upnpDescriptor.modelName().contains("Kodi")) { - // check if we allready found the kodi on this ip + // check if we already found the kodi on this ip bool alreadyAdded = false; foreach (const DeviceDescriptor dDescriptor, deviceDescriptors) { if (dDescriptor.params().paramValue(kodiIpParamTypeId).toString() == upnpDescriptor.hostAddress().toString()) { diff --git a/kodi/devicepluginkodi.h b/kodi/devicepluginkodi.h index fe5b4c55..cc16db0f 100644 --- a/kodi/devicepluginkodi.h +++ b/kodi/devicepluginkodi.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -34,7 +34,7 @@ class DevicePluginKodi : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "devicepluginkodi.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginkodi.json") Q_INTERFACES(DevicePlugin) public: diff --git a/kodi/images.qrc b/kodi/images.qrc index 9bd2ce57..e14f5d87 100644 --- a/kodi/images.qrc +++ b/kodi/images.qrc @@ -1,5 +1,5 @@ - images/guh-logo.png + images/nymea-logo.png diff --git a/kodi/images/guh-logo.png b/kodi/images/nymea-logo.png similarity index 100% rename from kodi/images/guh-logo.png rename to kodi/images/nymea-logo.png diff --git a/kodi/images/guh-logo.svg b/kodi/images/nymea-logo.svg similarity index 100% rename from kodi/images/guh-logo.svg rename to kodi/images/nymea-logo.svg diff --git a/kodi/kodi.cpp b/kodi/kodi.cpp index 4bb23266..187594c8 100644 --- a/kodi/kodi.cpp +++ b/kodi/kodi.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -87,7 +87,7 @@ int Kodi::volume() const void Kodi::showNotification(const QString &message, const int &displayTime, const QString ¬ificationType, const ActionId &actionId) { QVariantMap params; - params.insert("title", "guh notification"); + params.insert("title", "nymea notification"); params.insert("message", message); params.insert("displaytime", displayTime); params.insert("image", notificationType); diff --git a/kodi/kodi.h b/kodi/kodi.h index 9259dcdd..96792334 100644 --- a/kodi/kodi.h +++ b/kodi/kodi.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/kodi/kodi.pro b/kodi/kodi.pro index 32924116..75dd2657 100644 --- a/kodi/kodi.pro +++ b/kodi/kodi.pro @@ -1,6 +1,8 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_devicepluginkodi) +QT += network + +TARGET = $$qtLibraryTarget(nymea_devicepluginkodi) SOURCES += \ devicepluginkodi.cpp \ diff --git a/kodi/kodiconnection.cpp b/kodi/kodiconnection.cpp index 0db62b9e..d1994b2f 100644 --- a/kodi/kodiconnection.cpp +++ b/kodi/kodiconnection.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/kodi/kodiconnection.h b/kodi/kodiconnection.h index 9b643bf6..3ab0769e 100644 --- a/kodi/kodiconnection.h +++ b/kodi/kodiconnection.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/kodi/kodijsonhandler.cpp b/kodi/kodijsonhandler.cpp index a498f084..74e7080d 100644 --- a/kodi/kodijsonhandler.cpp +++ b/kodi/kodijsonhandler.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/kodi/kodijsonhandler.h b/kodi/kodijsonhandler.h index 7897f36f..1bde5cd5 100644 --- a/kodi/kodijsonhandler.h +++ b/kodi/kodijsonhandler.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/kodi/kodireply.cpp b/kodi/kodireply.cpp index f4f86e9c..2f6c9f91 100644 --- a/kodi/kodireply.cpp +++ b/kodi/kodireply.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/kodi/kodireply.h b/kodi/kodireply.h index 59cc4d9b..1a921325 100644 --- a/kodi/kodireply.h +++ b/kodi/kodireply.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/kodi/translations/e7186890-99fa-4c5b-8247-09c6d450d490-de_DE.ts b/kodi/translations/e7186890-99fa-4c5b-8247-09c6d450d490-de_DE.ts index 3e341911..f6d2717b 100644 --- a/kodi/translations/e7186890-99fa-4c5b-8247-09c6d450d490-de_DE.ts +++ b/kodi/translations/e7186890-99fa-4c5b-8247-09c6d450d490-de_DE.ts @@ -4,9 +4,9 @@ Kodi - + Kodi The name of the plugin Kodi (e7186890-99fa-4c5b-8247-09c6d450d490) ---------- @@ -16,171 +16,180 @@ The name of the DeviceClass (d09953e3-c5bd-415b-973b-0d0bf2be3f69) - + name The name of the paramType (a704beb1-b0b0-46fc-91fc-3aac01e1a364) of kodi - + ip The name of the paramType (1a897065-57c6-49b3-bac9-1e5db27859e5) of kodi - + port The name of the paramType (660fb4d7-9479-4c9d-a900-ce221d2b8ae4) of kodi - + connected changed The name of the autocreated EventType (09dfbd40-c97c-4a20-9ecd-f80e389a4864) - + connected - The name of the ParamType of StateType (09dfbd40-c97c-4a20-9ecd-f80e389a4864) of DeviceClass kodi + The name of the ParamType of the autocreated EventType (09dfbd40-c97c-4a20-9ecd-f80e389a4864) of DeviceClass kodi - + mute changed The name of the autocreated EventType (bc98cdb0-4d0e-48ca-afc7-922e49bb7813) - + + mute - The name of the ParamType of StateType (bc98cdb0-4d0e-48ca-afc7-922e49bb7813) of DeviceClass kodi + The name of the ParamType of the autocreated EventType (bc98cdb0-4d0e-48ca-afc7-922e49bb7813) of DeviceClass kodi +---------- +The name of the autocreated ParamType of the writable StateType (bc98cdb0-4d0e-48ca-afc7-922e49bb7813) of DeviceClass kodi - + Set mute The name of the autocreated ActionType (bc98cdb0-4d0e-48ca-afc7-922e49bb7813) - + volume changed The name of the autocreated EventType (9dfe5d78-4c3f-497c-bab1-bb9fdf7e93a9) - + + volume - The name of the ParamType of StateType (9dfe5d78-4c3f-497c-bab1-bb9fdf7e93a9) of DeviceClass kodi + The name of the ParamType of the autocreated EventType (9dfe5d78-4c3f-497c-bab1-bb9fdf7e93a9) of DeviceClass kodi +---------- +The name of the autocreated ParamType of the writable StateType (9dfe5d78-4c3f-497c-bab1-bb9fdf7e93a9) of DeviceClass kodi - + Set volume The name of the autocreated ActionType (9dfe5d78-4c3f-497c-bab1-bb9fdf7e93a9) - + playback status changed The name of the autocreated EventType (2dd512b7-40c2-488e-8d4f-6519edaa6f74) - - playbackStatus - The name of the ParamType of StateType (2dd512b7-40c2-488e-8d4f-6519edaa6f74) of DeviceClass kodi + + + playback status + The name of the ParamType of the autocreated EventType (2dd512b7-40c2-488e-8d4f-6519edaa6f74) of DeviceClass kodi +---------- +The name of the autocreated ParamType of the writable StateType (2dd512b7-40c2-488e-8d4f-6519edaa6f74) of DeviceClass kodi - + set playback status The name of the autocreated ActionType (2dd512b7-40c2-488e-8d4f-6519edaa6f74) - + skip back The name of the ActionType a180807d-1265-4831-9d86-a421767418dd of deviceClass kodi - + rewind The name of the ActionType 7e70b47b-7e79-4521-be34-04a3c427e5b1 of deviceClass kodi - + stop The name of the ActionType ae3cbe03-ee3e-410e-abbd-efabc2402198 of deviceClass kodi - + play The name of the ActionType 4d2ee668-a2e3-4795-8b96-0c800b703b46 of deviceClass kodi - + pause The name of the ActionType 3cf341cb-fe63-40bc-a450-9678d18e91e3 of deviceClass kodi - + fastForward The name of the ActionType 6985250e-1188-4e44-b9dd-93303b5738a1 of deviceClass kodi - + skipNext The name of the ActionType 85d7126a-b123-4a28-aeb4-d84bcfb4d14f of deviceClass kodi - + show notification The name of the ActionType dc0aa3b5-4eae-4e58-a4ac-d4c124da53f1 of deviceClass kodi - + message The name of the paramType (798f720a-cc4f-40e7-91d7-2ef5957ca7ad) of kodi - + type The name of the paramType (86df6a45-ee8a-4e1f-94e2-4081e14eb557) of kodi - + press button The name of the ActionType 28060803-aa85-44a4-9dec-ee669dfb629f of deviceClass kodi - + button The name of the paramType (93861dac-0c24-4a3b-903d-d1be44eae611) of kodi - + system The name of the ActionType 8d51cd64-ecef-44f8-85b0-697bef252ce5 of deviceClass kodi - - + + command The name of the paramType (8f3413fb-018e-40d6-903c-c8a915a6f498) of kodi ---------- @@ -190,31 +199,31 @@ The name of the paramType (ba89d098-56d7-40a2-b499-c02499c1ec0c) of kodi - + video library The name of the ActionType 59f7ad10-16eb-40b7-a88b-c8393ae8e413 of deviceClass kodi - + audio library The name of the ActionType 3d5120eb-1007-46c3-b76e-d9d4b105b9f2 of deviceClass kodi - + player play The name of the EventType 2535a1eb-7643-4874-98f6-b027fdff6311 of deviceClass kodi - + player pause The name of the EventType 99498b1c-e9c0-480a-9e91-662ee79ba976 of deviceClass kodi - + player stop The name of the EventType a02ce255-3abb-435d-a92e-7f99c952ecb2 of deviceClass kodi diff --git a/kodi/translations/e7186890-99fa-4c5b-8247-09c6d450d490-en_US.ts b/kodi/translations/e7186890-99fa-4c5b-8247-09c6d450d490-en_US.ts index 93122350..4fd2d960 100644 --- a/kodi/translations/e7186890-99fa-4c5b-8247-09c6d450d490-en_US.ts +++ b/kodi/translations/e7186890-99fa-4c5b-8247-09c6d450d490-en_US.ts @@ -4,9 +4,9 @@ Kodi - + Kodi The name of the plugin Kodi (e7186890-99fa-4c5b-8247-09c6d450d490) ---------- @@ -16,171 +16,180 @@ The name of the DeviceClass (d09953e3-c5bd-415b-973b-0d0bf2be3f69) - + name The name of the paramType (a704beb1-b0b0-46fc-91fc-3aac01e1a364) of kodi - + ip The name of the paramType (1a897065-57c6-49b3-bac9-1e5db27859e5) of kodi - + port The name of the paramType (660fb4d7-9479-4c9d-a900-ce221d2b8ae4) of kodi - + connected changed The name of the autocreated EventType (09dfbd40-c97c-4a20-9ecd-f80e389a4864) - + connected - The name of the ParamType of StateType (09dfbd40-c97c-4a20-9ecd-f80e389a4864) of DeviceClass kodi + The name of the ParamType of the autocreated EventType (09dfbd40-c97c-4a20-9ecd-f80e389a4864) of DeviceClass kodi - + mute changed The name of the autocreated EventType (bc98cdb0-4d0e-48ca-afc7-922e49bb7813) - + + mute - The name of the ParamType of StateType (bc98cdb0-4d0e-48ca-afc7-922e49bb7813) of DeviceClass kodi + The name of the ParamType of the autocreated EventType (bc98cdb0-4d0e-48ca-afc7-922e49bb7813) of DeviceClass kodi +---------- +The name of the autocreated ParamType of the writable StateType (bc98cdb0-4d0e-48ca-afc7-922e49bb7813) of DeviceClass kodi - + Set mute The name of the autocreated ActionType (bc98cdb0-4d0e-48ca-afc7-922e49bb7813) - + volume changed The name of the autocreated EventType (9dfe5d78-4c3f-497c-bab1-bb9fdf7e93a9) - + + volume - The name of the ParamType of StateType (9dfe5d78-4c3f-497c-bab1-bb9fdf7e93a9) of DeviceClass kodi + The name of the ParamType of the autocreated EventType (9dfe5d78-4c3f-497c-bab1-bb9fdf7e93a9) of DeviceClass kodi +---------- +The name of the autocreated ParamType of the writable StateType (9dfe5d78-4c3f-497c-bab1-bb9fdf7e93a9) of DeviceClass kodi - + Set volume The name of the autocreated ActionType (9dfe5d78-4c3f-497c-bab1-bb9fdf7e93a9) - + playback status changed The name of the autocreated EventType (2dd512b7-40c2-488e-8d4f-6519edaa6f74) - - playbackStatus - The name of the ParamType of StateType (2dd512b7-40c2-488e-8d4f-6519edaa6f74) of DeviceClass kodi + + + playback status + The name of the ParamType of the autocreated EventType (2dd512b7-40c2-488e-8d4f-6519edaa6f74) of DeviceClass kodi +---------- +The name of the autocreated ParamType of the writable StateType (2dd512b7-40c2-488e-8d4f-6519edaa6f74) of DeviceClass kodi - + set playback status The name of the autocreated ActionType (2dd512b7-40c2-488e-8d4f-6519edaa6f74) - + skip back The name of the ActionType a180807d-1265-4831-9d86-a421767418dd of deviceClass kodi - + rewind The name of the ActionType 7e70b47b-7e79-4521-be34-04a3c427e5b1 of deviceClass kodi - + stop The name of the ActionType ae3cbe03-ee3e-410e-abbd-efabc2402198 of deviceClass kodi - + play The name of the ActionType 4d2ee668-a2e3-4795-8b96-0c800b703b46 of deviceClass kodi - + pause The name of the ActionType 3cf341cb-fe63-40bc-a450-9678d18e91e3 of deviceClass kodi - + fastForward The name of the ActionType 6985250e-1188-4e44-b9dd-93303b5738a1 of deviceClass kodi - + skipNext The name of the ActionType 85d7126a-b123-4a28-aeb4-d84bcfb4d14f of deviceClass kodi - + show notification The name of the ActionType dc0aa3b5-4eae-4e58-a4ac-d4c124da53f1 of deviceClass kodi - + message The name of the paramType (798f720a-cc4f-40e7-91d7-2ef5957ca7ad) of kodi - + type The name of the paramType (86df6a45-ee8a-4e1f-94e2-4081e14eb557) of kodi - + press button The name of the ActionType 28060803-aa85-44a4-9dec-ee669dfb629f of deviceClass kodi - + button The name of the paramType (93861dac-0c24-4a3b-903d-d1be44eae611) of kodi - + system The name of the ActionType 8d51cd64-ecef-44f8-85b0-697bef252ce5 of deviceClass kodi - - + + command The name of the paramType (8f3413fb-018e-40d6-903c-c8a915a6f498) of kodi ---------- @@ -190,31 +199,31 @@ The name of the paramType (ba89d098-56d7-40a2-b499-c02499c1ec0c) of kodi - + video library The name of the ActionType 59f7ad10-16eb-40b7-a88b-c8393ae8e413 of deviceClass kodi - + audio library The name of the ActionType 3d5120eb-1007-46c3-b76e-d9d4b105b9f2 of deviceClass kodi - + player play The name of the EventType 2535a1eb-7643-4874-98f6-b027fdff6311 of deviceClass kodi - + player pause The name of the EventType 99498b1c-e9c0-480a-9e91-662ee79ba976 of deviceClass kodi - + player stop The name of the EventType a02ce255-3abb-435d-a92e-7f99c952ecb2 of deviceClass kodi diff --git a/leynew/devicepluginleynew.cpp b/leynew/devicepluginleynew.cpp index 58e76afc..f0658a9f 100644 --- a/leynew/devicepluginleynew.cpp +++ b/leynew/devicepluginleynew.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -26,7 +26,7 @@ \brief Plugin for the Leynew RF 433 MHz led controller. \ingroup plugins - \ingroup guh-plugins + \ingroup nymea-plugins This plugin allows to controll RF 433 MHz actors an receive remote signals from \l{http://www.leynew.com/en/}{Leynew} devices. diff --git a/leynew/devicepluginleynew.h b/leynew/devicepluginleynew.h index b492bd5c..a516c138 100644 --- a/leynew/devicepluginleynew.h +++ b/leynew/devicepluginleynew.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -29,7 +29,7 @@ class DevicePluginLeynew : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "devicepluginleynew.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginleynew.json") Q_INTERFACES(DevicePlugin) public: diff --git a/leynew/leynew.pro b/leynew/leynew.pro index 8e796032..a4e20542 100644 --- a/leynew/leynew.pro +++ b/leynew/leynew.pro @@ -1,6 +1,6 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_devicepluginleynew) +TARGET = $$qtLibraryTarget(nymea_devicepluginleynew) SOURCES += \ devicepluginleynew.cpp diff --git a/lgsmarttv/devicepluginlgsmarttv.cpp b/lgsmarttv/devicepluginlgsmarttv.cpp index da5dd5d4..64be07b4 100644 --- a/lgsmarttv/devicepluginlgsmarttv.cpp +++ b/lgsmarttv/devicepluginlgsmarttv.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -26,7 +26,7 @@ \brief Plugin for LG smart TVs. \ingroup plugins - \ingroup guh-plugins + \ingroup nymea-plugins This plugin allows to interact with \l{http://www.lg.com/us/experience-tvs/smart-tv}{LG Smart Tv's} with the \l{http://developer.lgappstv.com/TV_HELP/index.jsp?topic=%2Flge.tvsdk.references.book%2Fhtml%2FUDAP%2FUDAP%2FLG+UDAP+2+0+Protocol+Specifications.htm}{LG UDAP 2.0 Protocol Specifications}. diff --git a/lgsmarttv/devicepluginlgsmarttv.h b/lgsmarttv/devicepluginlgsmarttv.h index 44800c5c..1031704c 100644 --- a/lgsmarttv/devicepluginlgsmarttv.h +++ b/lgsmarttv/devicepluginlgsmarttv.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -32,7 +32,7 @@ class DevicePluginLgSmartTv : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "devicepluginlgsmarttv.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginlgsmarttv.json") Q_INTERFACES(DevicePlugin) public: diff --git a/lgsmarttv/lgsmarttv.pro b/lgsmarttv/lgsmarttv.pro index 1fb2ea89..575ad2d0 100644 --- a/lgsmarttv/lgsmarttv.pro +++ b/lgsmarttv/lgsmarttv.pro @@ -1,6 +1,6 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_devicepluginlgsmarttv) +TARGET = $$qtLibraryTarget(nymea_devicepluginlgsmarttv) QT+= network xml diff --git a/lgsmarttv/translations/4ef7a68b-9da0-4c62-b9ac-f478dc6f9f52-de_DE.ts b/lgsmarttv/translations/4ef7a68b-9da0-4c62-b9ac-f478dc6f9f52-de_DE.ts index a24930a8..618e92ba 100644 --- a/lgsmarttv/translations/4ef7a68b-9da0-4c62-b9ac-f478dc6f9f52-de_DE.ts +++ b/lgsmarttv/translations/4ef7a68b-9da0-4c62-b9ac-f478dc6f9f52-de_DE.ts @@ -4,9 +4,12 @@ LgSmartTv + LG Smart Tv - The name of the DeviceClass (1d41b5a8-74ff-4a12-b365-c7bbe610848f) + The name of the plugin LgSmartTv (4ef7a68b-9da0-4c62-b9ac-f478dc6f9f52) +---------- +The name of the DeviceClass (1d41b5a8-74ff-4a12-b365-c7bbe610848f) @@ -66,7 +69,7 @@ reachable - The name of the ParamType of StateType (b056c36b-df87-4177-8d5d-1e7c1e8cdc7a) of DeviceClass lgSmartTv + The name of the ParamType of the autocreated EventType (b056c36b-df87-4177-8d5d-1e7c1e8cdc7a) of DeviceClass lgSmartTv @@ -75,12 +78,24 @@ The name of the autocreated EventType (8ad3d77f-d340-495d-8c2a-5569a80e9d36) + + + 3D mode + The name of the ParamType of the autocreated EventType (8ad3d77f-d340-495d-8c2a-5569a80e9d36) of DeviceClass lgSmartTv + + volume changed The name of the autocreated EventType (07d39a6e-7eab-42d0-851d-9f3bcd3bbb57) + + + volume + The name of the ParamType of the autocreated EventType (07d39a6e-7eab-42d0-851d-9f3bcd3bbb57) of DeviceClass lgSmartTv + + mute changed @@ -88,9 +103,12 @@ + mute - The name of the ActionType 1aa9d7f0-0f66-4b90-bb72-f6b7b2118221 of deviceClass lgSmartTv + The name of the ParamType of the autocreated EventType (a6ac9061-3de7-403a-a646-790ca5d73764) of DeviceClass lgSmartTv +---------- +The name of the ActionType 1aa9d7f0-0f66-4b90-bb72-f6b7b2118221 of deviceClass lgSmartTv @@ -99,30 +117,60 @@ The name of the autocreated EventType (84c86670-77c7-4fc6-9e23-abca066e76aa) + + + tv channel type + The name of the ParamType of the autocreated EventType (84c86670-77c7-4fc6-9e23-abca066e76aa) of DeviceClass lgSmartTv + + channel name changed The name of the autocreated EventType (265dc5f7-3f4d-4002-a6fe-2a53986bcf1d) + + + channel name + The name of the ParamType of the autocreated EventType (265dc5f7-3f4d-4002-a6fe-2a53986bcf1d) of DeviceClass lgSmartTv + + channel number changed The name of the autocreated EventType (881629a3-4ce2-42ba-8ce6-10d90c383799) + + + channel number + The name of the ParamType of the autocreated EventType (881629a3-4ce2-42ba-8ce6-10d90c383799) of DeviceClass lgSmartTv + + program changed The name of the autocreated EventType (3f53e52e-1ad7-40e7-8080-76908e720cac) + + + program + The name of the ParamType of the autocreated EventType (3f53e52e-1ad7-40e7-8080-76908e720cac) of DeviceClass lgSmartTv + + input source index changed The name of the autocreated EventType (e895017a-139f-410c-bfb2-4d008104e164) + + + input source index + The name of the ParamType of the autocreated EventType (e895017a-139f-410c-bfb2-4d008104e164) of DeviceClass lgSmartTv + + input source changed @@ -130,9 +178,12 @@ + input source - The name of the ActionType 9a6e5111-95d3-49ac-8056-249e704b1509 of deviceClass lgSmartTv + The name of the ParamType of the autocreated EventType (58b734ec-2269-4c57-99e1-e1eeee401053) of DeviceClass lgSmartTv +---------- +The name of the ActionType 9a6e5111-95d3-49ac-8056-249e704b1509 of deviceClass lgSmartTv @@ -141,66 +192,6 @@ The name of the ActionType ac5d7dcd-dfe8-4a94-9ab9-21b3f804b39e of deviceClass lgSmartTv - - - LgSmartTv - The name of the plugin LgSmartTv (4ef7a68b-9da0-4c62-b9ac-f478dc6f9f52) - - - - - tv3DMode - The name of the ParamType of StateType (8ad3d77f-d340-495d-8c2a-5569a80e9d36) of DeviceClass lgSmartTv - - - - - tvVolumeLevel - The name of the ParamType of StateType (07d39a6e-7eab-42d0-851d-9f3bcd3bbb57) of DeviceClass lgSmartTv - - - - - tvMute - The name of the ParamType of StateType (a6ac9061-3de7-403a-a646-790ca5d73764) of DeviceClass lgSmartTv - - - - - tvChannelType - The name of the ParamType of StateType (84c86670-77c7-4fc6-9e23-abca066e76aa) of DeviceClass lgSmartTv - - - - - tvChannelName - The name of the ParamType of StateType (265dc5f7-3f4d-4002-a6fe-2a53986bcf1d) of DeviceClass lgSmartTv - - - - - tvChannelNumber - The name of the ParamType of StateType (881629a3-4ce2-42ba-8ce6-10d90c383799) of DeviceClass lgSmartTv - - - - - tvProgramName - The name of the ParamType of StateType (3f53e52e-1ad7-40e7-8080-76908e720cac) of DeviceClass lgSmartTv - - - - - tvInputSourceIndex - The name of the ParamType of StateType (e895017a-139f-410c-bfb2-4d008104e164) of DeviceClass lgSmartTv - - - - - tvInputSourceLabelName - The name of the ParamType of StateType (58b734ec-2269-4c57-99e1-e1eeee401053) of DeviceClass lgSmartTv - - volume down diff --git a/lgsmarttv/translations/4ef7a68b-9da0-4c62-b9ac-f478dc6f9f52-en_US.ts b/lgsmarttv/translations/4ef7a68b-9da0-4c62-b9ac-f478dc6f9f52-en_US.ts index a1cab5e4..b6d31e76 100644 --- a/lgsmarttv/translations/4ef7a68b-9da0-4c62-b9ac-f478dc6f9f52-en_US.ts +++ b/lgsmarttv/translations/4ef7a68b-9da0-4c62-b9ac-f478dc6f9f52-en_US.ts @@ -4,9 +4,12 @@ LgSmartTv + LG Smart Tv - The name of the DeviceClass (1d41b5a8-74ff-4a12-b365-c7bbe610848f) + The name of the plugin LgSmartTv (4ef7a68b-9da0-4c62-b9ac-f478dc6f9f52) +---------- +The name of the DeviceClass (1d41b5a8-74ff-4a12-b365-c7bbe610848f) @@ -66,7 +69,7 @@ reachable - The name of the ParamType of StateType (b056c36b-df87-4177-8d5d-1e7c1e8cdc7a) of DeviceClass lgSmartTv + The name of the ParamType of the autocreated EventType (b056c36b-df87-4177-8d5d-1e7c1e8cdc7a) of DeviceClass lgSmartTv @@ -75,12 +78,24 @@ The name of the autocreated EventType (8ad3d77f-d340-495d-8c2a-5569a80e9d36) + + + 3D mode + The name of the ParamType of the autocreated EventType (8ad3d77f-d340-495d-8c2a-5569a80e9d36) of DeviceClass lgSmartTv + + volume changed The name of the autocreated EventType (07d39a6e-7eab-42d0-851d-9f3bcd3bbb57) + + + volume + The name of the ParamType of the autocreated EventType (07d39a6e-7eab-42d0-851d-9f3bcd3bbb57) of DeviceClass lgSmartTv + + mute changed @@ -88,9 +103,12 @@ + mute - The name of the ActionType 1aa9d7f0-0f66-4b90-bb72-f6b7b2118221 of deviceClass lgSmartTv + The name of the ParamType of the autocreated EventType (a6ac9061-3de7-403a-a646-790ca5d73764) of DeviceClass lgSmartTv +---------- +The name of the ActionType 1aa9d7f0-0f66-4b90-bb72-f6b7b2118221 of deviceClass lgSmartTv @@ -99,30 +117,60 @@ The name of the autocreated EventType (84c86670-77c7-4fc6-9e23-abca066e76aa) + + + tv channel type + The name of the ParamType of the autocreated EventType (84c86670-77c7-4fc6-9e23-abca066e76aa) of DeviceClass lgSmartTv + + channel name changed The name of the autocreated EventType (265dc5f7-3f4d-4002-a6fe-2a53986bcf1d) + + + channel name + The name of the ParamType of the autocreated EventType (265dc5f7-3f4d-4002-a6fe-2a53986bcf1d) of DeviceClass lgSmartTv + + channel number changed The name of the autocreated EventType (881629a3-4ce2-42ba-8ce6-10d90c383799) + + + channel number + The name of the ParamType of the autocreated EventType (881629a3-4ce2-42ba-8ce6-10d90c383799) of DeviceClass lgSmartTv + + program changed The name of the autocreated EventType (3f53e52e-1ad7-40e7-8080-76908e720cac) + + + program + The name of the ParamType of the autocreated EventType (3f53e52e-1ad7-40e7-8080-76908e720cac) of DeviceClass lgSmartTv + + input source index changed The name of the autocreated EventType (e895017a-139f-410c-bfb2-4d008104e164) + + + input source index + The name of the ParamType of the autocreated EventType (e895017a-139f-410c-bfb2-4d008104e164) of DeviceClass lgSmartTv + + input source changed @@ -130,9 +178,12 @@ + input source - The name of the ActionType 9a6e5111-95d3-49ac-8056-249e704b1509 of deviceClass lgSmartTv + The name of the ParamType of the autocreated EventType (58b734ec-2269-4c57-99e1-e1eeee401053) of DeviceClass lgSmartTv +---------- +The name of the ActionType 9a6e5111-95d3-49ac-8056-249e704b1509 of deviceClass lgSmartTv @@ -141,66 +192,6 @@ The name of the ActionType ac5d7dcd-dfe8-4a94-9ab9-21b3f804b39e of deviceClass lgSmartTv - - - LgSmartTv - The name of the plugin LgSmartTv (4ef7a68b-9da0-4c62-b9ac-f478dc6f9f52) - - - - - tv3DMode - The name of the ParamType of StateType (8ad3d77f-d340-495d-8c2a-5569a80e9d36) of DeviceClass lgSmartTv - - - - - tvVolumeLevel - The name of the ParamType of StateType (07d39a6e-7eab-42d0-851d-9f3bcd3bbb57) of DeviceClass lgSmartTv - - - - - tvMute - The name of the ParamType of StateType (a6ac9061-3de7-403a-a646-790ca5d73764) of DeviceClass lgSmartTv - - - - - tvChannelType - The name of the ParamType of StateType (84c86670-77c7-4fc6-9e23-abca066e76aa) of DeviceClass lgSmartTv - - - - - tvChannelName - The name of the ParamType of StateType (265dc5f7-3f4d-4002-a6fe-2a53986bcf1d) of DeviceClass lgSmartTv - - - - - tvChannelNumber - The name of the ParamType of StateType (881629a3-4ce2-42ba-8ce6-10d90c383799) of DeviceClass lgSmartTv - - - - - tvProgramName - The name of the ParamType of StateType (3f53e52e-1ad7-40e7-8080-76908e720cac) of DeviceClass lgSmartTv - - - - - tvInputSourceIndex - The name of the ParamType of StateType (e895017a-139f-410c-bfb2-4d008104e164) of DeviceClass lgSmartTv - - - - - tvInputSourceLabelName - The name of the ParamType of StateType (58b734ec-2269-4c57-99e1-e1eeee401053) of DeviceClass lgSmartTv - - volume down diff --git a/lgsmarttv/tvdevice.cpp b/lgsmarttv/tvdevice.cpp index e0ec1fa0..e86e6b3c 100644 --- a/lgsmarttv/tvdevice.cpp +++ b/lgsmarttv/tvdevice.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -169,7 +169,7 @@ QPair TvDevice::createPairingRequest(const QHostAdd QNetworkRequest request; request.setUrl(QUrl(urlString)); request.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("text/xml; charset=utf-8")); - request.setHeader(QNetworkRequest::UserAgentHeader,QVariant("UDAP/2.0 guh")); + request.setHeader(QNetworkRequest::UserAgentHeader,QVariant("UDAP/2.0 nymea")); QByteArray data = "hello" + key.toUtf8() + "8080"; return QPair(request, data); @@ -180,7 +180,7 @@ QPair TvDevice::createEndPairingRequest(const QUrl QNetworkRequest request; request.setUrl(url); request.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("text/xml; charset=utf-8")); - request.setHeader(QNetworkRequest::UserAgentHeader,QVariant("UDAP/2.0 guh")); + request.setHeader(QNetworkRequest::UserAgentHeader,QVariant("UDAP/2.0 nymea")); request.setRawHeader("Connection", "Close"); QByteArray data = "byebye8080"; @@ -193,7 +193,7 @@ QPair TvDevice::createEndPairingRequest(const QHost QNetworkRequest request; request.setUrl(QUrl(urlString)); request.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("text/xml; charset=utf-8")); - request.setHeader(QNetworkRequest::UserAgentHeader,QVariant("UDAP/2.0 guh")); + request.setHeader(QNetworkRequest::UserAgentHeader,QVariant("UDAP/2.0 nymea")); request.setRawHeader("Connection", "Close"); QByteArray data = "byebye8080"; @@ -228,7 +228,7 @@ QPair TvDevice::createPressButtonRequest(const TvDe QNetworkRequest request; request.setUrl(QUrl(urlString)); request.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("text/xml; charset=utf-8")); - request.setHeader(QNetworkRequest::UserAgentHeader,QVariant("UDAP/2.0 guh")); + request.setHeader(QNetworkRequest::UserAgentHeader,QVariant("UDAP/2.0 nymea")); QByteArray data; data.append("HandleKeyInput"); diff --git a/lgsmarttv/tvdevice.h b/lgsmarttv/tvdevice.h index 694db662..d7ee038f 100644 --- a/lgsmarttv/tvdevice.h +++ b/lgsmarttv/tvdevice.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/lgsmarttv/tveventhandler.cpp b/lgsmarttv/tveventhandler.cpp index c93fd432..69515a98 100644 --- a/lgsmarttv/tveventhandler.cpp +++ b/lgsmarttv/tveventhandler.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -69,7 +69,7 @@ void TvEventHandler::readClient() textStream.setAutoDetectUnicode(true); textStream << "HTTP/1.0 200 OK\r\n" "Content-Type: text/html; charset=\"utf-8\"\r\n" - "User-Agent: UDAP/2.0 guh\r\n" + "User-Agent: UDAP/2.0 nymea\r\n" << "Date: " << QDateTime::currentDateTime().toString() << "\n"; emit eventOccured(data); diff --git a/lgsmarttv/tveventhandler.h b/lgsmarttv/tveventhandler.h index 4b11ebb4..c40c8f0b 100644 --- a/lgsmarttv/tveventhandler.h +++ b/lgsmarttv/tveventhandler.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/lircd/devicepluginlircd.cpp b/lircd/devicepluginlircd.cpp index 323e4329..4c30f4ff 100644 --- a/lircd/devicepluginlircd.cpp +++ b/lircd/devicepluginlircd.cpp @@ -3,7 +3,7 @@ * Copyright (C) 2015 Simon Stürz * * Copyright (C) 2014 Michael Zanetti * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -27,11 +27,11 @@ \brief Plugin for the LIRC infrared daemon. \ingroup plugins - \ingroup guh-plugins-maker + \ingroup nymea-plugins-maker This plugin allows to interact with \l{http://www.lirc.org/}{LIRC} daemon and controll commonly used remote controls. - If lircd (LIRC daemon) is configured on your system, guh will connect to the lirc daemon and all configured remote - controls of lircd will appear in guh. + If lircd (LIRC daemon) is configured on your system, nymea will connect to the lirc daemon and all configured remote + controls of lircd will appear in nymea. \chapter Plugin properties Following JSON file contains the definition and the description of all available \l{DeviceClass}{DeviceClasses} diff --git a/mailnotification/devicepluginmailnotification.cpp b/mailnotification/devicepluginmailnotification.cpp index 7a8877f1..48bf5ccf 100644 --- a/mailnotification/devicepluginmailnotification.cpp +++ b/mailnotification/devicepluginmailnotification.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -23,15 +23,15 @@ /*! \page mailnotification.html \title Mail Notification - \brief Plugin which allows to get mail notification from guh. + \brief Plugin which allows to get mail notification from nymea. \ingroup plugins - \ingroup guh-plugins + \ingroup nymea-plugins The mail notification plugin allows you to send a mail notification from a mail account by performing an \l{Action}. - ATTENTION: The password currently will be saved as plain text in the guh settings file. + ATTENTION: The password currently will be saved as plain text in the nymea settings file. This will be changed soon... \chapter Supported services @@ -47,7 +47,7 @@ from your yahoo account. \section2 Custom Mail - With the Custom Mail Notification you can set up a custom SMTP connection. The supported authentification + With the Custom Mail Notification you can set up a custom SMTP connection. The supported authentication methods are ["PLAIN", "LOGIN"], the supported encryption methods are ["NONE", "SSL", "TLS"]. \chapter Plugin properties diff --git a/mailnotification/devicepluginmailnotification.h b/mailnotification/devicepluginmailnotification.h index ea173d41..de3147e9 100644 --- a/mailnotification/devicepluginmailnotification.h +++ b/mailnotification/devicepluginmailnotification.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -30,7 +30,7 @@ class DevicePluginMailNotification : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "devicepluginmailnotification.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginmailnotification.json") Q_INTERFACES(DevicePlugin) public: diff --git a/mailnotification/devicepluginmailnotification.json b/mailnotification/devicepluginmailnotification.json index e3468f3b..e5ada3ba 100644 --- a/mailnotification/devicepluginmailnotification.json +++ b/mailnotification/devicepluginmailnotification.json @@ -5,7 +5,7 @@ "vendors": [ { "name": "guh", - "displayName": "guh", + "displayName": "guh GmbH", "id": "2062d64d-3232-433c-88bc-0d33c0ba2ba6", "deviceClasses": [ { diff --git a/mailnotification/mailnotification.pro b/mailnotification/mailnotification.pro index 3e778bda..eeab88c2 100644 --- a/mailnotification/mailnotification.pro +++ b/mailnotification/mailnotification.pro @@ -1,6 +1,6 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_devicepluginmailnotification) +TARGET = $$qtLibraryTarget(nymea_devicepluginmailnotification) QT+= network diff --git a/mailnotification/smtpclient.cpp b/mailnotification/smtpclient.cpp index a1dced40..e6e9764f 100644 --- a/mailnotification/smtpclient.cpp +++ b/mailnotification/smtpclient.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -230,7 +230,7 @@ bool SmtpClient::sendMail(const QString &subject, const QString &body, const Act m_message = "To: " + m_rcpt + "\n"; m_message.append("From: " + m_sender + "\n"); - m_message.append("Subject: [guh notification] | " + subject + "\n"); + m_message.append("Subject: [nymea notification] | " + subject + "\n"); m_message.append(body); m_message.replace( QString::fromLatin1( "\n" ), QString::fromLatin1( "\r\n" ) ); m_message.replace( QString::fromLatin1( "\r\n.\r\n" ), QString::fromLatin1( "\r\n..\r\n" ) ); diff --git a/mailnotification/smtpclient.h b/mailnotification/smtpclient.h index 0f13bac8..6f7e5ee1 100644 --- a/mailnotification/smtpclient.h +++ b/mailnotification/smtpclient.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/mailnotification/translations/1ae35df1-1b51-4c93-94fa-3febc77e0318-de_DE.ts b/mailnotification/translations/1ae35df1-1b51-4c93-94fa-3febc77e0318-de_DE.ts index 829f2d2e..98efd650 100644 --- a/mailnotification/translations/1ae35df1-1b51-4c93-94fa-3febc77e0318-de_DE.ts +++ b/mailnotification/translations/1ae35df1-1b51-4c93-94fa-3febc77e0318-de_DE.ts @@ -4,10 +4,10 @@ MailNotification - - guh - The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) - guh + + Mail notification + The name of the plugin MailNotification (1ae35df1-1b51-4c93-94fa-3febc77e0318) + @@ -130,9 +130,9 @@ The name of the ActionType 054613b0-3666-4dad-9252-e0ebca187edc of deviceClass y Sende Mail - - MailNotification - The name of the plugin MailNotification (1ae35df1-1b51-4c93-94fa-3febc77e0318) + + guh GmbH + The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) diff --git a/mailnotification/translations/1ae35df1-1b51-4c93-94fa-3febc77e0318-en_US.ts b/mailnotification/translations/1ae35df1-1b51-4c93-94fa-3febc77e0318-en_US.ts index 5a4f9161..b345acfe 100644 --- a/mailnotification/translations/1ae35df1-1b51-4c93-94fa-3febc77e0318-en_US.ts +++ b/mailnotification/translations/1ae35df1-1b51-4c93-94fa-3febc77e0318-en_US.ts @@ -4,9 +4,9 @@ MailNotification - - guh - The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) + + Mail notification + The name of the plugin MailNotification (1ae35df1-1b51-4c93-94fa-3febc77e0318) @@ -130,9 +130,9 @@ The name of the ActionType 054613b0-3666-4dad-9252-e0ebca187edc of deviceClass y - - MailNotification - The name of the plugin MailNotification (1ae35df1-1b51-4c93-94fa-3febc77e0318) + + guh GmbH + The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) diff --git a/multisensor/devicepluginmultisensor.cpp b/multisensor/devicepluginmultisensor.cpp index fd343149..78842353 100644 --- a/multisensor/devicepluginmultisensor.cpp +++ b/multisensor/devicepluginmultisensor.cpp @@ -1,9 +1,9 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 2015 Simon Stuerz * + * Copyright (C) 2015-2018 Simon Stuerz * * Copyright (C) 2016 nicc * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -27,7 +27,7 @@ \brief Plugin for TI SensorTag. \ingroup plugins - \ingroup guh-plugins + \ingroup nymea-plugins This plugin allows finding and controlling the Bluetooth Low Energy SensorTag from Texas Instruments. @@ -52,17 +52,22 @@ DevicePluginMultiSensor::DevicePluginMultiSensor() } +DevicePluginMultiSensor::~DevicePluginMultiSensor() +{ + hardwareManager()->pluginTimerManager()->unregisterTimer(m_reconnectTimer); +} + void DevicePluginMultiSensor::init() { - m_measureTimer = hardwareManager()->pluginTimerManager()->registerTimer(60); - connect(m_measureTimer, &PluginTimer::timeout, this, &DevicePluginMultiSensor::onPluginTimer); + m_reconnectTimer = hardwareManager()->pluginTimerManager()->registerTimer(10); + connect(m_reconnectTimer, &PluginTimer::timeout, this, &DevicePluginMultiSensor::onPluginTimer); } DeviceManager::DeviceError DevicePluginMultiSensor::discoverDevices(const DeviceClassId &deviceClassId, const ParamList ¶ms) { Q_UNUSED(params) - if (deviceClassId != sensortagDeviceClassId) + if (deviceClassId != sensorTagDeviceClassId) return DeviceManager::DeviceErrorDeviceClassNotFound; if (!hardwareManager()->bluetoothLowEnergyManager()->available()) @@ -80,26 +85,41 @@ DeviceManager::DeviceSetupStatus DevicePluginMultiSensor::setupDevice(Device *de { qCDebug(dcMultiSensor) << "Setting up Multi Sensor" << device->name() << device->params(); - if (device->deviceClassId() == sensortagDeviceClassId) { + if (device->deviceClassId() == sensorTagDeviceClassId) { - QBluetoothAddress address = QBluetoothAddress(device->paramValue(sensortagMacParamTypeId).toString()); - QString name = device->paramValue(sensortagNameParamTypeId).toString(); + QBluetoothAddress address = QBluetoothAddress(device->paramValue(sensorTagMacParamTypeId).toString()); + QString name = device->paramValue(sensorTagNameParamTypeId).toString(); QBluetoothDeviceInfo deviceInfo = QBluetoothDeviceInfo(address, name, 0); BluetoothLowEnergyDevice *bluetoothDevice = hardwareManager()->bluetoothLowEnergyManager()->registerDevice(deviceInfo, QLowEnergyController::PublicAddress); SensorTag *sensor = new SensorTag(device, bluetoothDevice, this); - connect(sensor, &SensorTag::leftKeyPressed, this, &DevicePluginMultiSensor::onSensorLeftButtonPressed); - connect(sensor, &SensorTag::rightKeyPressed, this, &DevicePluginMultiSensor::onSensorRightButtonPressed); - m_sensors.insert(device, sensor); - sensor->bluetoothDevice()->connectDevice(); return DeviceManager::DeviceSetupStatusSuccess; } return DeviceManager::DeviceSetupStatusFailure; } +void DevicePluginMultiSensor::postSetupDevice(Device *device) +{ + // Try to connect right after setup + SensorTag *sensor = m_sensors.value(device); + + // Configure sensor with state configurations + sensor->setTemperatureSensorEnabled(device->stateValue(sensorTagTemperatureSensorEnabledStateTypeId).toBool()); + sensor->setHumiditySensorEnabled(device->stateValue(sensorTagHumiditySensorEnabledStateTypeId).toBool()); + sensor->setPressureSensorEnabled(device->stateValue(sensorTagPressureSensorEnabledStateTypeId).toBool()); + sensor->setOpticalSensorEnabled(device->stateValue(sensorTagOpticalSensorEnabledStateTypeId).toBool()); + sensor->setAccelerometerEnabled(device->stateValue(sensorTagAccelerometerEnabledStateTypeId).toBool()); + sensor->setGyroscopeEnabled(device->stateValue(sensorTagGyroscopeEnabledStateTypeId).toBool()); + sensor->setMagnetometerEnabled(device->stateValue(sensorTagMagnetometerEnabledStateTypeId).toBool()); + sensor->setMeasurementPeriod(device->stateValue(sensorTagMeasurementPeriodStateTypeId).toInt()); + sensor->setMeasurementPeriodMovement(device->stateValue(sensorTagMeasurementPeriodMovementStateTypeId).toInt()); + + // Connect to the sensor + sensor->bluetoothDevice()->connectDevice(); +} void DevicePluginMultiSensor::deviceRemoved(Device *device) { @@ -112,10 +132,80 @@ void DevicePluginMultiSensor::deviceRemoved(Device *device) sensor->deleteLater(); } +DeviceManager::DeviceError DevicePluginMultiSensor::executeAction(Device *device, const Action &action) +{ + SensorTag *sensor = m_sensors.value(device); + if (action.actionTypeId() == sensorTagBuzzerActionTypeId) { + sensor->setBuzzerPower(action.param(sensorTagBuzzerActionParamTypeId).value().toBool()); + return DeviceManager::DeviceErrorNoError; + } else if (action.actionTypeId() == sensorTagGreenLedActionTypeId) { + sensor->setGreenLedPower(action.param(sensorTagGreenLedActionParamTypeId).value().toBool()); + return DeviceManager::DeviceErrorNoError; + } else if (action.actionTypeId() == sensorTagRedLedActionTypeId) { + sensor->setRedLedPower(action.param(sensorTagRedLedActionParamTypeId).value().toBool()); + return DeviceManager::DeviceErrorNoError; + } else if (action.actionTypeId() == sensorTagBuzzerImpulseActionTypeId) { + sensor->buzzerImpulse(); + return DeviceManager::DeviceErrorNoError; + } else if (action.actionTypeId() == sensorTagTemperatureSensorEnabledActionTypeId) { + bool enabled = action.param(sensorTagTemperatureSensorEnabledActionParamTypeId).value().toBool(); + device->setStateValue(sensorTagTemperatureSensorEnabledStateTypeId, enabled); + sensor->setTemperatureSensorEnabled(enabled); + return DeviceManager::DeviceErrorNoError; + } else if (action.actionTypeId() == sensorTagHumiditySensorEnabledActionTypeId) { + bool enabled = action.param(sensorTagHumiditySensorEnabledActionParamTypeId).value().toBool(); + device->setStateValue(sensorTagHumiditySensorEnabledStateTypeId, enabled); + sensor->setHumiditySensorEnabled(enabled); + return DeviceManager::DeviceErrorNoError; + } else if (action.actionTypeId() == sensorTagPressureSensorEnabledActionTypeId) { + bool enabled = action.param(sensorTagPressureSensorEnabledActionParamTypeId).value().toBool(); + device->setStateValue(sensorTagPressureSensorEnabledStateTypeId, enabled); + sensor->setPressureSensorEnabled(enabled); + return DeviceManager::DeviceErrorNoError; + } else if (action.actionTypeId() == sensorTagOpticalSensorEnabledActionTypeId) { + bool enabled = action.param(sensorTagOpticalSensorEnabledActionParamTypeId).value().toBool(); + device->setStateValue(sensorTagOpticalSensorEnabledStateTypeId, enabled); + sensor->setOpticalSensorEnabled(enabled); + return DeviceManager::DeviceErrorNoError; + } else if (action.actionTypeId() == sensorTagAccelerometerEnabledActionTypeId) { + bool enabled = action.param(sensorTagAccelerometerEnabledActionParamTypeId).value().toBool(); + device->setStateValue(sensorTagAccelerometerEnabledStateTypeId, enabled); + sensor->setAccelerometerEnabled(enabled); + return DeviceManager::DeviceErrorNoError; + } else if (action.actionTypeId() == sensorTagGyroscopeEnabledActionTypeId) { + bool enabled = action.param(sensorTagGyroscopeEnabledActionParamTypeId).value().toBool(); + device->setStateValue(sensorTagGyroscopeEnabledStateTypeId, enabled); + sensor->setGyroscopeEnabled(enabled); + return DeviceManager::DeviceErrorNoError; + } else if (action.actionTypeId() == sensorTagMagnetometerEnabledActionTypeId) { + bool enabled = action.param(sensorTagMagnetometerEnabledActionParamTypeId).value().toBool(); + device->setStateValue(sensorTagMagnetometerEnabledStateTypeId, enabled); + sensor->setMagnetometerEnabled(enabled); + return DeviceManager::DeviceErrorNoError; + } else if (action.actionTypeId() == sensorTagMeasurementPeriodActionTypeId) { + int period = action.param(sensorTagMeasurementPeriodActionParamTypeId).value().toInt(); + device->setStateValue(sensorTagMeasurementPeriodStateTypeId, period); + sensor->setMeasurementPeriod(period); + return DeviceManager::DeviceErrorNoError; + } else if (action.actionTypeId() == sensorTagMeasurementPeriodMovementActionTypeId) { + int period = action.param(sensorTagMeasurementPeriodMovementActionParamTypeId).value().toInt(); + device->setStateValue(sensorTagMeasurementPeriodMovementStateTypeId, period); + sensor->setMeasurementPeriodMovement(period); + return DeviceManager::DeviceErrorNoError; + } else if (action.actionTypeId() == sensorTagMovementSensitivityActionTypeId) { + int sensitivity = action.param(sensorTagMovementSensitivityActionParamTypeId).value().toInt(); + device->setStateValue(sensorTagMovementSensitivityStateTypeId, sensitivity); + sensor->setMovementSensitivity(sensitivity); + return DeviceManager::DeviceErrorNoError; + } + + return DeviceManager::DeviceErrorActionTypeNotFound; +} + bool DevicePluginMultiSensor::verifyExistingDevices(const QBluetoothDeviceInfo &deviceInfo) { foreach (Device *device, m_sensors.keys()) { - if (device->paramValue(sensortagMacParamTypeId).toString() == deviceInfo.address().toString()) + if (device->paramValue(sensorTagMacParamTypeId).toString() == deviceInfo.address().toString()) return true; } @@ -124,30 +214,20 @@ bool DevicePluginMultiSensor::verifyExistingDevices(const QBluetoothDeviceInfo & void DevicePluginMultiSensor::onPluginTimer() { - foreach (SensorTag *sensor, m_sensors) { - sensor->measure(); + foreach (SensorTag *sensor, m_sensors.values()) { + if (!sensor->bluetoothDevice()->connected()) { + sensor->bluetoothDevice()->connectDevice(); + } } } -void DevicePluginMultiSensor::onSensorLeftButtonPressed() -{ - SensorTag *sensor = static_cast(sender()); - emit emitEvent(Event(sensortagLeftKeyEventTypeId, sensor->device()->id())); -} - -void DevicePluginMultiSensor::onSensorRightButtonPressed() -{ - SensorTag *sensor = static_cast(sender()); - emit emitEvent(Event(sensortagRightKeyEventTypeId, sensor->device()->id())); -} - void DevicePluginMultiSensor::onBluetoothDiscoveryFinished() { BluetoothDiscoveryReply *reply = static_cast(sender()); if (reply->error() != BluetoothDiscoveryReply::BluetoothDiscoveryReplyErrorNoError) { qCWarning(dcMultiSensor()) << "Bluetooth discovery error:" << reply->error(); reply->deleteLater(); - emit devicesDiscovered(sensortagDeviceClassId, QList()); + emit devicesDiscovered(sensorTagDeviceClassId, QList()); return; } @@ -155,10 +235,10 @@ void DevicePluginMultiSensor::onBluetoothDiscoveryFinished() foreach (const QBluetoothDeviceInfo &deviceInfo, reply->discoveredDevices()) { if (deviceInfo.name().contains("SensorTag")) { if (!verifyExistingDevices(deviceInfo)) { - DeviceDescriptor descriptor(sensortagDeviceClassId, "Sensor Tag", deviceInfo.address().toString()); + DeviceDescriptor descriptor(sensorTagDeviceClassId, "Sensor Tag", deviceInfo.address().toString()); ParamList params; - params.append(Param(sensortagNameParamTypeId, deviceInfo.name())); - params.append(Param(sensortagMacParamTypeId, deviceInfo.address().toString())); + params.append(Param(sensorTagNameParamTypeId, deviceInfo.name())); + params.append(Param(sensorTagMacParamTypeId, deviceInfo.address().toString())); descriptor.setParams(params); deviceDescriptors.append(descriptor); } @@ -166,5 +246,5 @@ void DevicePluginMultiSensor::onBluetoothDiscoveryFinished() } reply->deleteLater(); - emit devicesDiscovered(sensortagDeviceClassId, deviceDescriptors); + emit devicesDiscovered(sensorTagDeviceClassId, deviceDescriptors); } diff --git a/multisensor/devicepluginmultisensor.h b/multisensor/devicepluginmultisensor.h index 6fd6d471..16d15402 100644 --- a/multisensor/devicepluginmultisensor.h +++ b/multisensor/devicepluginmultisensor.h @@ -1,9 +1,8 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 2015 Simon Stuerz * - * Copyright (C) 2016 nicc * + * Copyright (C) 2015-2018 Simon Stuerz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -36,30 +35,31 @@ class DevicePluginMultiSensor : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "devicepluginmultisensor.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginmultisensor.json") Q_INTERFACES(DevicePlugin) public: explicit DevicePluginMultiSensor(); + ~DevicePluginMultiSensor(); void init() override; DeviceManager::DeviceError discoverDevices(const DeviceClassId &deviceClassId, const ParamList ¶ms) override; DeviceManager::DeviceSetupStatus setupDevice(Device *device) override; + void postSetupDevice(Device *device) override; void deviceRemoved(Device *device) override; + DeviceManager::DeviceError executeAction(Device *device, const Action &action) override; + private: - PluginTimer *m_measureTimer = nullptr; + PluginTimer *m_reconnectTimer = nullptr; QHash m_sensors; bool verifyExistingDevices(const QBluetoothDeviceInfo &deviceInfo); private slots: void onPluginTimer(); - - void onSensorLeftButtonPressed(); - void onSensorRightButtonPressed(); - void onBluetoothDiscoveryFinished(); + }; #endif // DEVICEPLUGINMULTISENSOR_H diff --git a/multisensor/devicepluginmultisensor.json b/multisensor/devicepluginmultisensor.json index 93711f0f..e387337a 100644 --- a/multisensor/devicepluginmultisensor.json +++ b/multisensor/devicepluginmultisensor.json @@ -1,5 +1,5 @@ { - "displayName": "MultiSensor", + "displayName": "Multi Sensor", "name": "MultiSensor", "id": "23bf0d8d-df7d-4bee-80ee-f015c5a7f52e", "vendors": [ @@ -9,12 +9,12 @@ "displayName": "Texas Instruments", "deviceClasses": [ { - "displayName": "Sensor Tag", - "name": "sensortag", "id": "158a06b6-b27f-4951-957e-6f1e3b44f604", + "name": "sensorTag", + "displayName": "Sensor Tag (CC2650)", "createMethods": ["discovery"], "deviceIcon": "Thermometer", - "criticalStateTypeId": "a9629b11-0f34-47f0-a0f0-f758a6aec2b4", + "interfaces": ["temperaturesensor", "humiditysensor", "connectable"], "basicTags": [ "Device", "Sensor" @@ -23,14 +23,14 @@ { "id": "bdb9d684-2f98-45f5-889c-f184c1e73dc7", "name": "name", - "displayName": "name", + "displayName": "Name", "type": "QString", "inputType": "TextLine" }, { "id": "d51ed68e-c84a-4136-a5b5-be2f95fd5a0f", "name": "mac", - "displayName": "mac address", + "displayName": "MAC address", "type": "QString", "inputType": "MacAddress" } @@ -39,29 +39,12 @@ { "id": "a9629b11-0f34-47f0-a0f0-f758a6aec2b4", "name": "connected", - "displayName": "connected", - "displayNameEvent": "connected changed", + "displayName": "Connected", + "displayNameEvent": "Connected changed", "type": "bool", + "cached": false, "defaultValue": false }, - { - "id": "c664e9ec-a045-49ba-add1-1642ceba7c4f", - "name": "IRtemperature", - "displayName": "IR temperature", - "displayNameEvent": "IR temperature changed", - "type": "double", - "unit": "DegreeCelsius", - "defaultValue": 0 - }, - { - "id": "e83a50ff-96c9-4b6d-889f-f4238353e794", - "name": "humidity", - "displayName": "humidity", - "displayNameEvent": "humidity changed", - "type": "double", - "unit": "Percentage", - "defaultValue": 0 - }, { "id": "8359ada9-df1c-4e60-bb87-9e21d05ee2e2", "name": "temperature", @@ -71,34 +54,226 @@ "unit": "DegreeCelsius", "defaultValue": 0 }, + { + "id": "c664e9ec-a045-49ba-add1-1642ceba7c4f", + "name": "objectTemperature", + "displayName": "Object temperature", + "displayNameEvent": "Object temperature changed", + "type": "double", + "unit": "DegreeCelsius", + "defaultValue": 0 + }, + { + "id": "e83a50ff-96c9-4b6d-889f-f4238353e794", + "name": "humidity", + "displayName": "Humidity", + "displayNameEvent": "Humidity changed", + "type": "double", + "minValue": 0, + "maxValue": 100, + "unit": "Percentage", + "defaultValue": 0 + }, { "id": "645633ad-77d4-45b2-8be8-d6ca7a12eb7a", "name": "pressure", - "displayName": "pressure", - "displayNameEvent": "pressure changed", + "displayName": "Barometric pressure", + "displayNameEvent": "Barometric pressure changed", "type": "double", "unit": "HectoPascal", "defaultValue": 0 }, { - "id": "4be5ca26-0565-419d-b18b-2a5a385d2a3d", - "name": "moving", - "displayName": "moving", - "displayNameEvent": "moving changed", - "type": "bool", - "defaultValue": false - } - ], - "eventTypes": [ - { - "id": "61478490-bed0-4fed-9d58-f13c35b4f220", - "name": "leftKey", - "displayName": "left key pressed" + "id": "6635dce4-2d8d-4608-a836-768c3014f356", + "name": "lightIntensity", + "displayName": "Light intensity", + "displayNameEvent": "Light intensity changed", + "type": "double", + "unit": "Lux", + "defaultValue": 0 }, { - "id": "b7e927db-af28-4fdc-8eb7-edb02258ff5a", - "name": "rightKey", - "displayName": "right key pressed" + "id": "4be5ca26-0565-419d-b18b-2a5a385d2a3d", + "name": "moving", + "displayName": "Moving", + "displayNameEvent": "Moving changed", + "type": "bool", + "cached": false, + "defaultValue": false + }, + { + "id": "758d9b39-7390-40f5-8e19-d8b0f4a0a0c6", + "name": "magnetDetected", + "displayName": "Magnet detected", + "displayNameEvent": "Magnet detected changed", + "type": "bool", + "cached": false, + "defaultValue": false + }, + { + "id": "8995e49e-ca2d-4dd9-a22f-de6c566c2115", + "name": "leftButtonPressed", + "displayName": "Left button pressed", + "displayNameEvent": "Left button pressed changed", + "type": "bool", + "cached": false, + "defaultValue": false + }, + { + "id": "ef8eedc5-6a45-4dfb-bb55-ada1a931b20b", + "name": "rightButtonPressed", + "displayName": "Right button pressed", + "displayNameEvent": "Right button pressed changed", + "type": "bool", + "cached": false, + "defaultValue": false + }, + { + "id": "8d692132-f950-486f-b3dd-fe1ebc574e1d", + "name": "greenLed", + "displayName": "Green LED", + "displayNameEvent": "Green LED power changed", + "displayNameAction": "Set green LED power", + "type": "bool", + "cached": false, + "defaultValue": false, + "writable": true + }, + { + "id": "bb585725-6393-42de-aea2-ea4f525ad348", + "name": "redLed", + "displayName": "Red LED", + "displayNameEvent": "Red LED power changed", + "displayNameAction": "Set red LED power", + "type": "bool", + "cached": false, + "defaultValue": false, + "writable": true + }, + { + "id": "d522c536-4427-4c53-9980-7820b2649aad", + "name": "buzzer", + "displayName": "Buzzer", + "displayNameEvent": "Buzzer power changed", + "displayNameAction": "Set buzzer power", + "type": "bool", + "cached": false, + "defaultValue": false, + "writable": true + }, + { + "id": "6f0e40a2-0f97-4c1e-8229-757e3c18b345", + "name": "temperatureSensorEnabled", + "displayName": "Temperature sensor enabled", + "displayNameEvent": "Temperature sensor enabled changed", + "displayNameAction": "Set temperature sensor enabled", + "type": "bool", + "defaultValue": true, + "writable": true + }, + { + "id": "29881172-626a-42d5-83b8-3e2e5ca533be", + "name": "humiditySensorEnabled", + "displayName": "Humidity sensor enabled", + "displayNameEvent": "Humidity sensor enabled changed", + "displayNameAction": "Set humidity sensor enabled", + "type": "bool", + "defaultValue": true, + "writable": true + }, + { + "id": "50e5e282-9707-4b31-bb3f-a6ca30a7e1ff", + "name": "pressureSensorEnabled", + "displayName": "Pressure sensor enabled", + "displayNameEvent": "Pressure sensor enabled changed", + "displayNameAction": "Set pressure sensor enabled", + "type": "bool", + "defaultValue": true, + "writable": true + }, + { + "id": "1460a6d6-9fb4-4385-b27b-ee4b7594e454", + "name": "opticalSensorEnabled", + "displayName": "Optical sensor enabled", + "displayNameEvent": "Optical sensor enabled changed", + "displayNameAction": "Set optical sensor enabled", + "type": "bool", + "defaultValue": true, + "writable": true + }, + { + "id": "5786c91a-d94d-461a-8d22-f978dd1438ab", + "name": "accelerometerEnabled", + "displayName": "Accelerometer enabled", + "displayNameEvent": "Accelerometer enabled changed", + "displayNameAction": "Set accelerometer enabled", + "type": "bool", + "defaultValue": true, + "writable": true + }, + { + "id": "94517544-cb97-4816-8993-cb4cf2651a1e", + "name": "gyroscopeEnabled", + "displayName": "Gyroscope enabled", + "displayNameEvent": "Gyroscope enabled changed", + "displayNameAction": "Set gyroscope enabled", + "type": "bool", + "defaultValue": true, + "writable": true + }, + { + "id": "96aae111-b1c1-48a1-9b1f-b56efa546d0d", + "name": "magnetometerEnabled", + "displayName": "Magnetometer enabled", + "displayNameEvent": "Magnetometer enabled changed", + "displayNameAction": "Set magnetometer enabled", + "type": "bool", + "defaultValue": true, + "writable": true + }, + { + "id": "c5308565-5dc9-409e-ae99-577c212c7a92", + "name": "measurementPeriod", + "displayName": "Measurement period for enviromental sensors", + "displayNameEvent": "Measurement period for enviromental sensors changed", + "displayNameAction": "Set measurement period for enviromental sensors", + "type": "int", + "minValue": 10, + "maxValue": 2500, + "defaultValue": 2000, + "writable": true + }, + { + "id": "5237c89c-c21d-4d78-ac99-8be661b40da7", + "name": "measurementPeriodMovement", + "displayName": "Measurement period movement sensor", + "displayNameEvent": "Measurement period movement sensor changed", + "displayNameAction": "Set measurement period movement sensor", + "type": "int", + "minValue": 10, + "maxValue": 2500, + "defaultValue": 300, + "writable": true + }, + { + "id": "a3298d16-eea6-4474-9061-90466e92d476", + "name": "movementSensitivity", + "displayName": "Movement sensitivity", + "displayNameEvent": "Movement sensitivity changed", + "displayNameAction": "Set movement sensitivity", + "type": "int", + "unit": "Percentage", + "minValue": 0, + "maxValue": 100, + "defaultValue": 40, + "writable": true + } + ], + "actionTypes": [ + { + "id": "a048ab2e-4f17-4467-a166-a7572156c07e", + "name": "buzzerImpulse", + "displayName": "Buzzer impulse" } ] } diff --git a/multisensor/multisensor.plot b/multisensor/multisensor.plot new file mode 100644 index 00000000..3bcf24b4 --- /dev/null +++ b/multisensor/multisensor.plot @@ -0,0 +1,15 @@ +# Autocreated plot script for system disk usage +set term png small size 2000,1000 +set output "multisensor.png" +set title "Multisensor filter" +set xlabel "Time" +set ylabel "Value" +set xdata time +set timefmt "%s" +set xtics format "%H:%M:%S" +set yrange [0:*] +set grid + +plot "/tmp/multisensor.log" using 1:2 with lines title "Original value", \ + "/tmp/multisensor.log" using 1:3 with lines title "Filtered value" + diff --git a/multisensor/multisensor.pro b/multisensor/multisensor.pro index e7949ff5..d6f0795f 100644 --- a/multisensor/multisensor.pro +++ b/multisensor/multisensor.pro @@ -1,13 +1,19 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_devicepluginmultisensor) +QT += bluetooth + +TARGET = $$qtLibraryTarget(nymea_devicepluginmultisensor) SOURCES += \ devicepluginmultisensor.cpp \ #sensortag-old.cpp \ - sensortag.cpp + sensortag.cpp \ + sensorfilter.cpp \ + sensordataprocessor.cpp HEADERS += \ devicepluginmultisensor.h \ #sensortag-old.h \ - sensortag.h + sensortag.h \ + sensorfilter.h \ + sensordataprocessor.h diff --git a/multisensor/sensordataprocessor.cpp b/multisensor/sensordataprocessor.cpp new file mode 100644 index 00000000..24aa0a61 --- /dev/null +++ b/multisensor/sensordataprocessor.cpp @@ -0,0 +1,329 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2015-2018 Simon Stuerz * + * * + * This file is part of nymea. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Lesser General Public * + * License as published by the Free Software Foundation; either * + * version 2.1 of the License, or (at your option) any later version. * + * * + * This library 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 library; If not, see * + * . * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#include "sensordataprocessor.h" +#include "extern-plugininfo.h" +#include "math.h" + +#include +#include +#include +#include + +SensorDataProcessor::SensorDataProcessor(Device *device, QObject *parent) : + QObject(parent), + m_device(device) +{ + // Create data filters + m_temperatureFilter = new SensorFilter(SensorFilter::TypeLowPass, this); + m_temperatureFilter->setLowPassAlpha(0.1); + m_temperatureFilter->setFilterWindowSize(30); + + m_objectTemperatureFilter = new SensorFilter(SensorFilter::TypeLowPass, this); + m_objectTemperatureFilter->setLowPassAlpha(0.4); + m_objectTemperatureFilter->setFilterWindowSize(20); + + m_humidityFilter = new SensorFilter(SensorFilter::TypeLowPass, this); + m_humidityFilter->setLowPassAlpha(0.1); + m_humidityFilter->setFilterWindowSize(30); + + m_pressureFilter = new SensorFilter(SensorFilter::TypeLowPass, this); + m_pressureFilter->setLowPassAlpha(0.1); + m_pressureFilter->setFilterWindowSize(30); + + m_opticalFilter = new SensorFilter(SensorFilter::TypeLowPass, this); + m_opticalFilter->setLowPassAlpha(0.01); + m_opticalFilter->setFilterWindowSize(10); + + m_accelerometerFilter = new SensorFilter(SensorFilter::TypeLowPass, this); + m_accelerometerFilter->setLowPassAlpha(0.6); + m_accelerometerFilter->setFilterWindowSize(40); + + // Check if the data should be logged + if (m_filterDebug) { + m_logFile = new QFile("/tmp/multisensor.log", this); + if (!m_logFile->open(QIODevice::Append | QIODevice::Text)) { + qCWarning(dcMultiSensor()) << "Could not open log file" << m_logFile->fileName(); + delete m_logFile; + m_logFile = nullptr; + } + } +} + +SensorDataProcessor::~SensorDataProcessor() +{ + if (m_logFile) { + m_logFile->close(); + } +} + +void SensorDataProcessor::setAccelerometerRange(int accelerometerRange) +{ + m_accelerometerRange = accelerometerRange; +} + +void SensorDataProcessor::setMovementSensitivity(int movementSensitivity) +{ + m_movementSensitivity = movementSensitivity; +} + +double SensorDataProcessor::roundValue(float value) +{ + int tmpValue = static_cast(value * 10); + return static_cast(tmpValue) / 10.0; +} + +bool SensorDataProcessor::testBitUint8(quint8 value, int bitPosition) +{ + return (((value)>> (bitPosition)) & 1); +} + +void SensorDataProcessor::processTemperatureData(const QByteArray &data) +{ + Q_ASSERT(data.count() == 4); + + quint16 rawObjectTemperature = 0; + quint16 rawAmbientTemperature = 0; + + QByteArray payload(data); + QDataStream stream(&payload, QIODevice::ReadOnly); + stream.setByteOrder(QDataStream::LittleEndian); + stream >> rawObjectTemperature >> rawAmbientTemperature ; + + double scaleFactor = 0.03125; + double objectTemperature = static_cast(rawObjectTemperature) / 4 * scaleFactor; + double ambientTemperature = static_cast(rawAmbientTemperature) / 4 * scaleFactor; + + //qCDebug(dcMultiSensor()) << "Temperature value" << data.toHex(); + //qCDebug(dcMultiSensor()) << "Object temperature" << roundValue(objectTemperature) << "°C"; + //qCDebug(dcMultiSensor()) << "Ambient temperature" << roundValue(ambientTemperature) << "°C"; + + double objectTemperatureFiltered = m_objectTemperatureFilter->filterValue(objectTemperature); + double ambientTemperatureFiltered = m_temperatureFilter->filterValue(ambientTemperature); + + if (m_objectTemperatureFilter->isReady()) { + m_device->setStateValue(sensorTagObjectTemperatureStateTypeId, roundValue(objectTemperatureFiltered)); + } + + // Note: only change the state once the filter has collected enough data + if (m_temperatureFilter->isReady()) { + m_device->setStateValue(sensorTagTemperatureStateTypeId, roundValue(ambientTemperatureFiltered)); + } + +} + +void SensorDataProcessor::processKeyData(const QByteArray &data) +{ + Q_ASSERT(data.count() == 1); + quint8 flags = static_cast(data.at(0)); + setLeftButtonPressed(testBitUint8(flags, 0)); + setRightButtonPressed(testBitUint8(flags, 1)); + setMagnetDetected(testBitUint8(flags, 2)); +} + +void SensorDataProcessor::processHumidityData(const QByteArray &data) +{ + Q_ASSERT(data.count() == 4); + quint16 rawHumidityTemperature = 0; + quint16 rawHumidity = 0; + + QByteArray payload(data); + QDataStream stream(&payload, QIODevice::ReadOnly); + stream.setByteOrder(QDataStream::LittleEndian); + stream >> rawHumidityTemperature >> rawHumidity ; + + // Note: we don't need the temperature measurement from the humidity sensor + //double humidityTemperature = (rawHumidityTemperature / 65536.0 * 165.0) - 40; + double humidity = rawHumidity / 65536.0 * 100.0; + double humidityFiltered = m_humidityFilter->filterValue(humidity); + + if (m_humidityFilter->isReady()) { + m_device->setStateValue(sensorTagHumidityStateTypeId, roundValue(humidityFiltered)); + } +} + +void SensorDataProcessor::processPressureData(const QByteArray &data) +{ + Q_ASSERT(data.count() == 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)); + + QByteArray pressureData(data.right(3)); + quint32 rawPressure = static_cast(pressureData.at(2)); + rawPressure <<= 8; + rawPressure |= static_cast(pressureData.at(1)); + rawPressure <<= 8; + rawPressure |= static_cast(pressureData.at(0)); + + // Note: we don't need the temperature measurement from the barometic pressure sensor + //qCDebug(dcMultiSensor()) << "Pressure temperature:" << roundValue(rawTemperature / 100.0) << "°C"; + //qCDebug(dcMultiSensor()) << "Pressure:" << roundValue(rawPressure / 100.0) << "mBar"; + + double pressureFiltered = m_pressureFilter->filterValue(rawPressure / 100.0); + if (m_pressureFilter->isReady()) { + m_device->setStateValue(sensorTagPressureStateTypeId, roundValue(pressureFiltered)); + } +} + +void SensorDataProcessor::processOpticalData(const QByteArray &data) +{ + Q_ASSERT(data.count() == 2); + + quint16 rawOptical = 0; + QByteArray payload(data); + QDataStream stream(&payload, QIODevice::ReadOnly); + stream.setByteOrder(QDataStream::LittleEndian); + stream >> rawOptical; + + quint16 lumm = rawOptical & 0x0FFF; + quint16 lume = (rawOptical & 0xF000) >> 12; + + double lux = lumm * (0.01 * pow(2,lume)); + + //qCDebug(dcMultiSensor()) << "Lux:" << lux; + + double luxFiltered = m_opticalFilter->filterValue(lux); + if (m_opticalFilter->isReady()) { + m_device->setStateValue(sensorTagLightIntensityStateTypeId, qRound(luxFiltered)); + } + + logSensorValue(lux, qRound(luxFiltered)); +} + +void SensorDataProcessor::processMovementData(const QByteArray &data) +{ + //qCDebug(dcMultiSensor()) << "--> Movement value" << data.toHex(); + + QByteArray payload(data); + QDataStream stream(&payload, QIODevice::ReadOnly); + stream.setByteOrder(QDataStream::LittleEndian); + + qint16 gyroXRaw = 0; qint16 gyroYRaw = 0; qint16 gyroZRaw = 0; + stream >> gyroXRaw >> gyroYRaw >> gyroZRaw; + + qint16 accXRaw = 0; qint16 accYRaw = 0; qint16 accZRaw = 0; + stream >> accXRaw >> accYRaw >> accZRaw; + + qint16 magXRaw = 0; qint16 magYRaw = 0; qint16 magZRaw = 0; + stream >> magXRaw >> magYRaw >> magZRaw; + + + // Calculate rotation [deg/s], Range +- 250 + double gyroX = static_cast(gyroXRaw) / (65536 / 500); + double gyroY = static_cast(gyroYRaw) / (65536 / 500); + double gyroZ = static_cast(gyroZRaw) / (65536 / 500); + + // Calculate acceleration [G], Range +- m_accelerometerRange + double accX = static_cast(accXRaw) / (32768 / static_cast(m_accelerometerRange)); + double accY = static_cast(accYRaw) / (32768 / static_cast(m_accelerometerRange)); + double accZ = static_cast(accZRaw) / (32768 / static_cast(m_accelerometerRange)); + + // Calculate magnetism [uT], Range +- 4900 + double magX = static_cast(magXRaw); + double magY = static_cast(magYRaw); + double magZ = static_cast(magZRaw); + + + //qCDebug(dcMultiSensor()) << "Accelerometer x:" << accX << " y:" << accY << " z:" << accZ; + //qCDebug(dcMultiSensor()) << "Gyroscope x:" << gyroX << " y:" << gyroY << " z:" << gyroZ; + //qCDebug(dcMultiSensor()) << "Magnetometer x:" << magX << " y:" << magY << " z:" << magZ; + + QVector3D accelerometerVector(accX, accY, accZ); + QVector3D gyroscopeVector(gyroX, gyroY, gyroZ); + QVector3D magnetometerVector(magX, magY, magZ); + + Q_UNUSED(gyroscopeVector) + Q_UNUSED(magnetometerVector) + + double filteredVectorLength = m_accelerometerFilter->filterValue(accelerometerVector.length()); + + // Initialize the accelerometer value if no data known yet + if (m_lastAccelerometerVectorLenght == -99999) { + m_lastAccelerometerVectorLenght = filteredVectorLength; + return; + } + + double delta = qAbs(qAbs(m_lastAccelerometerVectorLenght) - qAbs(filteredVectorLength)); + bool motionDetected = (delta >= m_movementSensitivity); + m_device->setStateValue(sensorTagMovingStateTypeId, motionDetected); + m_lastAccelerometerVectorLenght = filteredVectorLength; +} + +void SensorDataProcessor::reset() +{ + m_lastAccelerometerVectorLenght = -99999; + + // Reset data filters + m_temperatureFilter->reset(); + m_objectTemperatureFilter->reset(); + m_humidityFilter->reset(); + m_pressureFilter->reset(); + m_opticalFilter->reset(); + m_accelerometerFilter->reset(); +} + +void SensorDataProcessor::setLeftButtonPressed(bool pressed) +{ + if (m_leftButtonPressed == pressed) + return; + + qCDebug(dcMultiSensor()) << "Left button" << (pressed ? "pressed" : "released"); + m_leftButtonPressed = pressed; + m_device->setStateValue(sensorTagLeftButtonPressedStateTypeId, m_leftButtonPressed); +} + +void SensorDataProcessor::setRightButtonPressed(bool pressed) +{ + if (m_rightButtonPressed == pressed) + return; + + qCDebug(dcMultiSensor()) << "Right button" << (pressed ? "pressed" : "released"); + m_rightButtonPressed = pressed; + m_device->setStateValue(sensorTagRightButtonPressedStateTypeId, m_rightButtonPressed); +} + +void SensorDataProcessor::setMagnetDetected(bool detected) +{ + if (m_magnetDetected == detected) + return; + + qCDebug(dcMultiSensor()) << "Magnet detector" << (detected ? "active" : "inactive"); + m_magnetDetected = detected; + m_device->setStateValue(sensorTagMagnetDetectedStateTypeId, m_magnetDetected); +} + +void SensorDataProcessor::logSensorValue(double originalValue, double filteredValue) +{ + if (!m_filterDebug || !m_logFile) + return; + + QString logLine = QString("%1 %2 %3\n").arg(QDateTime::currentDateTime().toTime_t()).arg(originalValue).arg(filteredValue); + + QTextStream logStream(m_logFile); + logStream.setCodec("UTF-8"); + logStream << logLine; +} diff --git a/multisensor/sensordataprocessor.h b/multisensor/sensordataprocessor.h new file mode 100644 index 00000000..2a923f12 --- /dev/null +++ b/multisensor/sensordataprocessor.h @@ -0,0 +1,93 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2015-2018 Simon Stuerz * + * * + * This file is part of nymea. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Lesser General Public * + * License as published by the Free Software Foundation; either * + * version 2.1 of the License, or (at your option) any later version. * + * * + * This library 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 library; If not, see * + * . * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#ifndef SENSORDATAPROCESSOR_H +#define SENSORDATAPROCESSOR_H + +#include +#include + +#include "plugin/device.h" +#include "extern-plugininfo.h" + +#include "sensorfilter.h" + +class SensorDataProcessor : public QObject +{ + Q_OBJECT +public: + explicit SensorDataProcessor(Device *device, QObject *parent = nullptr); + ~SensorDataProcessor(); + + void setAccelerometerRange(int accelerometerRange); + void setMovementSensitivity(int movementSensitivity); + + static double roundValue(float value); + static bool testBitUint8(quint8 value, int bitPosition); + + void processTemperatureData(const QByteArray &data); + void processKeyData(const QByteArray &data); + void processHumidityData(const QByteArray &data); + void processPressureData(const QByteArray &data); + void processOpticalData(const QByteArray &data); + void processMovementData(const QByteArray &data); + + void reset(); + +private: + Device *m_device = nullptr; + double m_lastAccelerometerVectorLenght = -99999; + + int m_accelerometerRange = 16; + double m_movementSensitivity = 0.5; + + bool m_leftButtonPressed = false; + bool m_rightButtonPressed = false; + bool m_magnetDetected = false; + + // Log sensor data for debugging filters + // Note: set this to true for enable sensor filter logging + bool m_filterDebug = true; + QFile *m_logFile = nullptr; + + SensorFilter *m_temperatureFilter = nullptr; + SensorFilter *m_objectTemperatureFilter = nullptr; + SensorFilter *m_humidityFilter = nullptr; + SensorFilter *m_pressureFilter = nullptr; + SensorFilter *m_opticalFilter = nullptr; + SensorFilter *m_accelerometerFilter = nullptr; + + // Set methods + void setLeftButtonPressed(bool pressed); + void setRightButtonPressed(bool pressed); + void setMagnetDetected(bool detected); + + void logSensorValue(double originalValue, double filteredValue); + + +signals: + +private slots: + +}; + +#endif // SENSORDATAPROCESSOR_H diff --git a/multisensor/sensorfilter.cpp b/multisensor/sensorfilter.cpp new file mode 100644 index 00000000..972591c2 --- /dev/null +++ b/multisensor/sensorfilter.cpp @@ -0,0 +1,178 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2015-2018 Simon Stuerz * + * * + * This file is part of nymea. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Lesser General Public * + * License as published by the Free Software Foundation; either * + * version 2.1 of the License, or (at your option) any later version. * + * * + * This library 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 library; If not, see * + * . * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#include "sensorfilter.h" + +#include + +SensorFilter::SensorFilter(Type filterType, QObject *parent) : + QObject(parent), + m_filterType(filterType) +{ + +} + +double SensorFilter::filterValue(double value) +{ + double resultValue = value; + switch (m_filterType) { + case TypeLowPass: + resultValue = lowPassFilterValue(value); + break; + case TypeHighPass: + resultValue = highPassFilterValue(value); + break; + case TypeAverage: + resultValue = averageFilterValue(value); + break; + default: + break; + } + + return resultValue; +} + +bool SensorFilter::isReady() const +{ + // Note: filter is ready once 10% of window filled + return m_inputData.size() >= m_filterWindowSize * 0.1; +} + +void SensorFilter::reset() +{ + m_averageSum = 0; + m_inputData.clear(); +} + +SensorFilter::Type SensorFilter::filterType() const +{ + return m_filterType; +} + +QVector SensorFilter::inputData() const +{ + return m_inputData; +} + +QVector SensorFilter::outputData() const +{ + return m_outputData; +} + +uint SensorFilter::windowSize() const +{ + return m_filterWindowSize; +} + +void SensorFilter::setFilterWindowSize(uint windowSize) +{ + Q_ASSERT_X(windowSize > 0, "value out of range", "The filter window size must be bigger than 0"); + m_filterWindowSize = windowSize; +} + +double SensorFilter::lowPassAlpha() const +{ + return m_lowPassAlpha; +} + +void SensorFilter::setLowPassAlpha(double alpha) +{ + Q_ASSERT_X(alpha > 0 && alpha <= 1, "value out of range", "The alpha low pass filter value must be [ 0 < alpha <= 1 ]"); + m_lowPassAlpha = alpha; +} + +double SensorFilter::highPassAlpha() const +{ + return m_highPassAlpha; +} + +void SensorFilter::setHighPassAlpha(double alpha) +{ + Q_ASSERT_X(alpha > 0 && alpha <= 1, "value out of range", "The alpha high pass filter value must be [ 0 < alpha <= 1 ]"); + m_highPassAlpha = alpha; +} + +void SensorFilter::addInputValue(double value) +{ + m_inputData.append(value); + if (m_inputData.size() > m_filterWindowSize) { + m_inputData.removeFirst(); + } +} + +double SensorFilter::lowPassFilterValue(double value) +{ + addInputValue(value); + + // Check if we have enough data for filtering + if (m_inputData.size() < 2) { + return value; + } + + QVector outputData; + outputData.append(m_inputData.at(0)); + for (int i = 1; i < m_inputData.size(); i++) { + // y[i] := y[i-1] + α * (x[i] - y[i-1]) + outputData.append(outputData.at(i - 1) + m_lowPassAlpha * (m_inputData.at(i) - outputData.at(i - 1))); + } + + m_outputData = outputData; + + return m_outputData.last(); +} + +double SensorFilter::highPassFilterValue(double value) +{ + addInputValue(value); + + // Check if we have enough data for filtering + if (m_inputData.size() < 2) { + return value; + } + + QVector outputData; + outputData.append(m_inputData.at(0)); + for (int i = 1; i < m_inputData.size(); i++) { + // y[i] := α * y[i-1] + α * (x[i] - x[i-1]) + outputData.append(m_highPassAlpha * outputData.at(i - 1) + m_highPassAlpha * (m_inputData.at(i) - m_inputData.at(i - 1))); + } + + m_outputData = outputData; + return m_outputData.last(); +} + +double SensorFilter::averageFilterValue(double value) +{ + if (m_inputData.isEmpty()) { + addInputValue(value); + m_averageSum = value; + return value; + } + + if (m_inputData.size() >= m_filterWindowSize) { + m_averageSum -= m_inputData.takeFirst(); + } + + addInputValue(value); + m_averageSum += value; + return m_averageSum / m_inputData.size(); +} diff --git a/multisensor/sensorfilter.h b/multisensor/sensorfilter.h new file mode 100644 index 00000000..3d9dc91e --- /dev/null +++ b/multisensor/sensorfilter.h @@ -0,0 +1,81 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2015-2018 Simon Stuerz * + * * + * This file is part of nymea. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Lesser General Public * + * License as published by the Free Software Foundation; either * + * version 2.1 of the License, or (at your option) any later version. * + * * + * This library 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 library; If not, see * + * . * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#ifndef SENSORFILTER_H +#define SENSORFILTER_H + +#include +#include + +class SensorFilter : public QObject +{ + Q_OBJECT +public: + enum Type { + TypeLowPass, + TypeHighPass, + TypeAverage + }; + Q_ENUM(Type) + + explicit SensorFilter(Type filterType, QObject *parent = nullptr); + + double filterValue(double value); + + bool isReady() const; + void reset(); + + Type filterType() const; + + QVector inputData() const; + QVector outputData() const; + + // Filter configuration + uint windowSize() const; + void setFilterWindowSize(uint windowSize = 20); + + double lowPassAlpha() const; + void setLowPassAlpha(double alpha = 0.2); + + double highPassAlpha() const; + void setHighPassAlpha(double alpha = 0.2); + +private: + Type m_filterType = TypeLowPass; + int m_filterWindowSize = 20; + double m_lowPassAlpha = 0.2; + double m_highPassAlpha = 0.2; + + double m_averageSum = 0; + + QVector m_inputData; + QVector m_outputData; + + void addInputValue(double value); + + // Filter methods + double lowPassFilterValue(double value); + double highPassFilterValue(double value); + double averageFilterValue(double value); +}; + +#endif // SENSORFILTER_H diff --git a/multisensor/sensortag.cpp b/multisensor/sensortag.cpp index 6d261e7b..de00c9d7 100644 --- a/multisensor/sensortag.cpp +++ b/multisensor/sensortag.cpp @@ -1,10 +1,38 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2015-2018 Simon Stuerz * + * * + * This file is part of guh. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Lesser General Public * + * License as published by the Free Software Foundation; either * + * version 2.1 of the License, or (at your option) any later version. * + * * + * This library 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 library; If not, see * + * . * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + #include "sensortag.h" #include "extern-plugininfo.h" +#include "math.h" + +#include +#include +#include SensorTag::SensorTag(Device *device, BluetoothLowEnergyDevice *bluetoothDevice, QObject *parent) : QObject(parent), m_device(device), - m_bluetoothDevice(bluetoothDevice) + m_bluetoothDevice(bluetoothDevice), + m_dataProcessor(new SensorDataProcessor(m_device, this)) { connect(m_bluetoothDevice, &BluetoothLowEnergyDevice::connectedChanged, this, &SensorTag::onConnectedChanged); connect(m_bluetoothDevice, &BluetoothLowEnergyDevice::servicesDiscoveryFinished, this, &SensorTag::onServiceDiscoveryFinished); @@ -20,111 +48,404 @@ BluetoothLowEnergyDevice *SensorTag::bluetoothDevice() return m_bluetoothDevice; } -void SensorTag::updateInfraredValue(const QByteArray &value) +void SensorTag::setTemperatureSensorEnabled(bool enabled) { - qCDebug(dcMultiSensor()) << "Infrared value" << value; + qCDebug(dcMultiSensor()) << "Temperature sensor" << (enabled ? "enabled" : "disabled"); + + if (m_temperatureEnabled == enabled) + return; + + m_temperatureEnabled = enabled; + setTemperatureSensorPower(m_temperatureEnabled); } -void SensorTag::updateButtonValue(const QByteArray &value) +void SensorTag::setHumiditySensorEnabled(bool enabled) { - const quint8 *data = reinterpret_cast(value.constData()); - if (*data & 1) - emit leftKeyPressed(); - if (*data & 2) - emit rightKeyPressed(); + qCDebug(dcMultiSensor()) << "Humidity sensor" << (enabled ? "enabled" : "disabled"); + + if (m_humidityEnabled == enabled) + return; + + m_humidityEnabled = enabled; + setHumiditySensorPower(m_humidityEnabled); } -void SensorTag::updateHumidityValue(const QByteArray &value) +void SensorTag::setPressureSensorEnabled(bool enabled) { - qCDebug(dcMultiSensor()) << "Humidity value" << value; + qCDebug(dcMultiSensor()) << "Pressure sensor" << (enabled ? "enabled" : "disabled"); + + if (m_pressureEnabled == enabled) + return; + + m_pressureEnabled = enabled; + setPressureSensorPower(m_pressureEnabled); } -void SensorTag::updatePressureValue(const QByteArray &value) +void SensorTag::setOpticalSensorEnabled(bool enabled) { - qCDebug(dcMultiSensor()) << "Pressure value" << value; + qCDebug(dcMultiSensor()) << "Optical sensor" << (enabled ? "enabled" : "disabled"); + + if (m_opticalEnabled == enabled) + return; + + m_opticalEnabled = enabled; + setOpticalSensorPower(m_opticalEnabled); } +void SensorTag::setAccelerometerEnabled(bool enabled) +{ + qCDebug(dcMultiSensor()) << "Accelerometer" << (enabled ? "enabled" : "disabled"); + + if (m_accelerometerEnabled == enabled) + return; + + m_accelerometerEnabled = enabled; + configureMovement(); +} + +void SensorTag::setAccelerometerRange(const SensorTag::SensorAccelerometerRange &range) +{ + qCDebug(dcMultiSensor()) << "Accelerometer" << range; + + if (m_accelerometerRange == range) + return; + + m_accelerometerRange = range; + configureMovement(); +} + +void SensorTag::setGyroscopeEnabled(bool enabled) +{ + qCDebug(dcMultiSensor()) << "Gyroscope" << (enabled ? "enabled" : "disabled"); + + if (m_gyroscopeEnabled == enabled) + return; + + m_gyroscopeEnabled = enabled; + configureMovement(); +} + +void SensorTag::setMagnetometerEnabled(bool enabled) +{ + qCDebug(dcMultiSensor()) << "Magnetometer" << (enabled ? "enabled" : "disabled"); + + if (m_magnetometerEnabled == enabled) + return; + + m_magnetometerEnabled = enabled; + configureMovement(); +} + +void SensorTag::setMeasurementPeriod(int period) +{ + qCDebug(dcMultiSensor()) << "Set sensor measurement period to" << period << "ms"; + + if (period % 10 != 0) { + int adjustedValue = qRound(static_cast(period) / 10.0) * 10; + qCWarning(dcMultiSensor()) << "Measurement period of sensors" << period << "must be a multiple of 10ms. Adjusting it to" << adjustedValue; + period = adjustedValue; + } + + m_temperaturePeriod = period; + if (m_temperatureService && m_temperaturePeriodCharacteristic.isValid()) + configurePeriod(m_temperatureService, m_temperaturePeriodCharacteristic, m_temperaturePeriod); + + m_humidityPeriod = period; + if (m_humidityService && m_humidityPeriodCharacteristic.isValid()) + configurePeriod(m_humidityService, m_humidityPeriodCharacteristic, m_humidityPeriod); + + m_pressurePeriod = period; + if (m_pressureService && m_pressurePeriodCharacteristic.isValid()) + configurePeriod(m_pressureService, m_pressurePeriodCharacteristic, m_pressurePeriod); + + m_opticalPeriod = period; + if (m_opticalService && m_opticalPeriodCharacteristic.isValid()) + configurePeriod(m_opticalService, m_opticalPeriodCharacteristic, m_opticalPeriod); + +} + +void SensorTag::setMeasurementPeriodMovement(int period) +{ + qCDebug(dcMultiSensor()) << "Set movement sensor measurement period to" << period << "ms"; + + if (period % 10 != 0) { + int adjustedValue = qRound(static_cast(period) / 10.0) * 10; + qCWarning(dcMultiSensor()) << "Measurement period of movement sensor" << period << "must be a multiple of 10ms. Adjusting it to" << adjustedValue; + period = adjustedValue; + } + + m_movementPeriod = period; + if (m_movementService && m_movementPeriodCharacteristic.isValid()) + configurePeriod(m_movementService, m_movementPeriodCharacteristic, m_movementPeriod); + +} + +void SensorTag::setMovementSensitivity(int percentage) +{ + m_movementSensitivity = static_cast(percentage) / 100.0; +} + +void SensorTag::setGreenLedPower(bool power) +{ + m_greenLedEnabled = power; + qCDebug(dcMultiSensor()) << "Green LED" << (power ? "enabled" : "disabled"); + configureIo(); + m_device->setStateValue(sensorTagGreenLedStateTypeId, m_greenLedEnabled); +} + +void SensorTag::setRedLedPower(bool power) +{ + m_redLedEnabled = power; + qCDebug(dcMultiSensor()) << "Red LED" << (power ? "enabled" : "disabled"); + configureIo(); + m_device->setStateValue(sensorTagRedLedStateTypeId, m_redLedEnabled); +} + +void SensorTag::setBuzzerPower(bool power) +{ + m_buzzerEnabled = power; + qCDebug(dcMultiSensor()) << "Buzzer" << (power ? "enabled" : "disabled"); + configureIo(); + m_device->setStateValue(sensorTagBuzzerStateTypeId, m_buzzerEnabled); +} + +void SensorTag::buzzerImpulse() +{ + qCDebug(dcMultiSensor()) << "Buzzer impulse"; + setBuzzerPower(true); + QTimer::singleShot(1000, this, &SensorTag::onBuzzerImpulseTimeout); +} + +void SensorTag::configurePeriod(QLowEnergyService *serice, const QLowEnergyCharacteristic &characteristic, int measurementPeriod) +{ + Q_ASSERT(measurementPeriod % 10 == 0); + QByteArray payload; + QDataStream stream(&payload, QIODevice::WriteOnly); + stream << static_cast(measurementPeriod / 10); + + qCDebug(dcMultiSensor()) << "Configure period to" << measurementPeriod << payload.toHex(); + serice->writeCharacteristic(characteristic, payload); +} + +void SensorTag::configureMovement() +{ + if (!m_movementService || !m_movementConfigurationCharacteristic.isValid()) + return; + + quint16 configuration = 0; + if (m_gyroscopeEnabled) { + configuration |= (1 << 0); // enable x-axis + configuration |= (1 << 1); // enable y-axis + configuration |= (1 << 2); // enable z-axis + } + + if (m_accelerometerEnabled) { + configuration |= (1 << 3); // enable x-axis + configuration |= (1 << 4); // enable y-axis + configuration |= (1 << 5); // enable z-axis + } + + if (m_magnetometerEnabled) { + configuration |= (1 << 6); // enable all axis + } + + // Always enable wake on movement in order to save energy + configuration |= (1 << 8); // enable + + // Accelerometer range 2 Bit ( 0 = 2G, 1 = 4G, 2 = 8G, 3 = 16G) + switch (m_accelerometerRange) { + case SensorAccelerometerRange2G: + // Bit 9 = 0 + // Bit 10 = 0 + break; + case SensorAccelerometerRange4G: + configuration |= (1 << 11); + // Bit 12 = 0 + break; + case SensorAccelerometerRange8G: + // Bit 13 = 0 + configuration |= (1 << 14); + break; + case SensorAccelerometerRange16G: + configuration |= (1 << 15); + configuration |= (1 << 16); + break; + default: + break; + } + + QByteArray data; + QDataStream stream(&data, QIODevice::WriteOnly); + stream.setByteOrder(QDataStream::LittleEndian); + stream << configuration; + + qCDebug(dcMultiSensor()) << "Configure movement sensor" << data.toHex(); + m_movementService->writeCharacteristic(m_movementConfigurationCharacteristic, data); +} + +void SensorTag::configureSensorMode(const SensorTag::SensorMode &mode) +{ + if (!m_ioService || !m_ioDataCharacteristic.isValid()) + return; + + qCDebug(dcMultiSensor()) << "Setting" << mode; + QByteArray data; + QDataStream stream(&data, QIODevice::WriteOnly); + stream.setByteOrder(QDataStream::LittleEndian); + stream << static_cast(mode); + + m_ioService->writeCharacteristic(m_ioConfigurationCharacteristic, data); +} + +void SensorTag::configureIo() +{ + if (!m_ioService || !m_ioDataCharacteristic.isValid()) + return; + + // Write value to IO + quint8 configuration = 0; + if (m_redLedEnabled) + configuration |= (1 << 0); // Red LED + + if (m_greenLedEnabled) + configuration |= (1 << 1); // Green LED + + if (m_buzzerEnabled) + configuration |= (1 << 2); // Buzzer + + QByteArray payload; + QDataStream stream(&payload, QIODevice::WriteOnly); + stream << configuration; + + m_ioService->writeCharacteristic(m_ioDataCharacteristic, payload); +} + +void SensorTag::setTemperatureSensorPower(bool power) +{ + if (!m_temperatureService || !m_temperatureConfigurationCharacteristic.isValid()) + return; + + QByteArray payload = (power ? QByteArray::fromHex("01") : QByteArray::fromHex("00")); + m_temperatureService->writeCharacteristic(m_temperatureConfigurationCharacteristic, payload); +} + +void SensorTag::setHumiditySensorPower(bool power) +{ + if (!m_humidityService || !m_humidityConfigurationCharacteristic.isValid()) + return; + + QByteArray payload = (power ? QByteArray::fromHex("01") : QByteArray::fromHex("00")); + m_humidityService->writeCharacteristic(m_humidityConfigurationCharacteristic, payload); +} + +void SensorTag::setPressureSensorPower(bool power) +{ + if (!m_pressureService || !m_pressureConfigurationCharacteristic.isValid()) + return; + + QByteArray payload = (power ? QByteArray::fromHex("01") : QByteArray::fromHex("00")); + m_pressureService->writeCharacteristic(m_pressureConfigurationCharacteristic, payload); +} + +void SensorTag::setOpticalSensorPower(bool power) +{ + if (!m_opticalService || !m_opticalConfigurationCharacteristic.isValid()) + return; + + QByteArray payload = (power ? QByteArray::fromHex("01") : QByteArray::fromHex("00")); + m_opticalService->writeCharacteristic(m_opticalConfigurationCharacteristic, payload); +} + + void SensorTag::onConnectedChanged(const bool &connected) { qCDebug(dcMultiSensor()) << "Sensor" << m_bluetoothDevice->name() << m_bluetoothDevice->address().toString() << (connected ? "connected" : "disconnected"); - m_device->setStateValue(sensortagConnectedStateTypeId, connected); + m_device->setStateValue(sensorTagConnectedStateTypeId, connected); if (!connected) { // Clean up services - m_infraredService->deleteLater(); - m_buttonService->deleteLater(); + m_temperatureService->deleteLater(); m_humidityService->deleteLater(); m_pressureService->deleteLater(); + m_opticalService->deleteLater(); + m_keyService->deleteLater(); + m_movementService->deleteLater(); + m_ioService->deleteLater(); - m_infraredService = nullptr; - m_buttonService = nullptr; + m_temperatureService = nullptr; m_humidityService = nullptr; m_pressureService = nullptr; - } + m_opticalService = nullptr; + m_keyService = nullptr; + m_movementService = nullptr; + m_ioService = nullptr; + m_dataProcessor->reset(); + } } void SensorTag::onServiceDiscoveryFinished() { - if (!m_bluetoothDevice->serviceUuids().contains(infraredServiceUuid)) { - qCWarning(dcMultiSensor()) << "Could not find infrared service"; - return; + foreach (const QBluetoothUuid serviceUuid, m_bluetoothDevice->serviceUuids()) { + qCDebug(dcMultiSensor()) << "-->" << serviceUuid; } - if (!m_bluetoothDevice->serviceUuids().contains(accelerometerServiceUuid)) { - qCWarning(dcMultiSensor()) << "Could not find accelereometer service"; + if (!m_bluetoothDevice->serviceUuids().contains(temperatureServiceUuid)) { + qCWarning(dcMultiSensor()) << "Could not find temperature service"; + m_bluetoothDevice->disconnectDevice(); return; } if (!m_bluetoothDevice->serviceUuids().contains(humidityServiceUuid)) { qCWarning(dcMultiSensor()) << "Could not find humidity service"; - return; - } - - if (!m_bluetoothDevice->serviceUuids().contains(magnetometerServiceUuid)) { - qCWarning(dcMultiSensor()) << "Could not find magnetometer service"; + m_bluetoothDevice->disconnectDevice(); return; } if (!m_bluetoothDevice->serviceUuids().contains(pressureServiceUuid)) { qCWarning(dcMultiSensor()) << "Could not find pressure service"; + m_bluetoothDevice->disconnectDevice(); return; } - if (!m_bluetoothDevice->serviceUuids().contains(gyroscopeServiceUuid)) { - qCWarning(dcMultiSensor()) << "Could not find magnetometer service"; + if (!m_bluetoothDevice->serviceUuids().contains(opticalServiceUuid)) { + qCWarning(dcMultiSensor()) << "Could not find optical service"; + m_bluetoothDevice->disconnectDevice(); + return; + } + + if (!m_bluetoothDevice->serviceUuids().contains(keyServiceUuid)) { + qCWarning(dcMultiSensor()) << "Could not find key service"; + m_bluetoothDevice->disconnectDevice(); + return; + } + + if (!m_bluetoothDevice->serviceUuids().contains(movementServiceUuid)) { + qCWarning(dcMultiSensor()) << "Could not find movement service"; + m_bluetoothDevice->disconnectDevice(); + return; + } + + if (!m_bluetoothDevice->serviceUuids().contains(ioServiceUuid)) { + qCWarning(dcMultiSensor()) << "Could not find IO service"; + m_bluetoothDevice->disconnectDevice(); return; } // IR Temperature - if (!m_infraredService) { - m_infraredService = m_bluetoothDevice->controller()->createServiceObject(infraredServiceUuid, this); - if (!m_infraredService) { - qCWarning(dcMultiSensor()) << "Could not create infrared service."; + if (!m_temperatureService) { + m_temperatureService = m_bluetoothDevice->controller()->createServiceObject(temperatureServiceUuid, this); + if (!m_temperatureService) { + qCWarning(dcMultiSensor()) << "Could not create temperature service."; + m_bluetoothDevice->disconnectDevice(); return; } - connect(m_infraredService, &QLowEnergyService::stateChanged, this, &SensorTag::onInfraredServiceStateChanged); - connect(m_infraredService, &QLowEnergyService::characteristicChanged, this, &SensorTag::onInfraredServiceCharacteristicChanged); + connect(m_temperatureService, &QLowEnergyService::stateChanged, this, &SensorTag::onTemperatureServiceStateChanged); + connect(m_temperatureService, &QLowEnergyService::characteristicChanged, this, &SensorTag::onTemperatureServiceCharacteristicChanged); - if (m_infraredService->state() == QLowEnergyService::DiscoveryRequired) { - m_infraredService->discoverDetails(); - } - } - - // Buttons - if (!m_buttonService) { - m_buttonService = m_bluetoothDevice->controller()->createServiceObject(buttonServiceUuid, this); - if (!m_buttonService) { - qCWarning(dcMultiSensor()) << "Could not create button service."; - return; - } - - connect(m_buttonService, &QLowEnergyService::stateChanged, this, &SensorTag::onButtonServiceStateChanged); - connect(m_buttonService, &QLowEnergyService::characteristicChanged, this, &SensorTag::onButtonServiceCharacteristicChanged); - - if (m_buttonService->state() == QLowEnergyService::DiscoveryRequired) { - m_buttonService->discoverDetails(); + if (m_temperatureService->state() == QLowEnergyService::DiscoveryRequired) { + m_temperatureService->discoverDetails(); } } @@ -133,6 +454,7 @@ void SensorTag::onServiceDiscoveryFinished() m_humidityService = m_bluetoothDevice->controller()->createServiceObject(humidityServiceUuid, this); if (!m_humidityService) { qCWarning(dcMultiSensor()) << "Could not create humidity service."; + m_bluetoothDevice->disconnectDevice(); return; } @@ -148,6 +470,7 @@ void SensorTag::onServiceDiscoveryFinished() m_pressureService = m_bluetoothDevice->controller()->createServiceObject(pressureServiceUuid, this); if (!m_pressureService) { qCWarning(dcMultiSensor()) << "Could not create pressure service."; + m_bluetoothDevice->disconnectDevice(); return; } @@ -157,84 +480,136 @@ void SensorTag::onServiceDiscoveryFinished() m_pressureService->discoverDetails(); } } + + + // Optical + if (!m_opticalService) { + m_opticalService = m_bluetoothDevice->controller()->createServiceObject(opticalServiceUuid, this); + if (!m_opticalService) { + qCWarning(dcMultiSensor()) << "Could not create optical service."; + m_bluetoothDevice->disconnectDevice(); + return; + } + + connect(m_opticalService, &QLowEnergyService::stateChanged, this, &SensorTag::onOpticalServiceStateChanged); + connect(m_opticalService, &QLowEnergyService::characteristicChanged, this, &SensorTag::onOpticalServiceCharacteristicChanged); + + if (m_opticalService->state() == QLowEnergyService::DiscoveryRequired) { + m_opticalService->discoverDetails(); + } + } + + // Key + if (!m_keyService) { + m_keyService = m_bluetoothDevice->controller()->createServiceObject(keyServiceUuid, this); + if (!m_keyService) { + qCWarning(dcMultiSensor()) << "Could not create key service."; + m_bluetoothDevice->disconnectDevice(); + return; + } + + connect(m_keyService, &QLowEnergyService::stateChanged, this, &SensorTag::onKeyServiceStateChanged); + connect(m_keyService, &QLowEnergyService::characteristicChanged, this, &SensorTag::onKeyServiceCharacteristicChanged); + + if (m_keyService->state() == QLowEnergyService::DiscoveryRequired) { + m_keyService->discoverDetails(); + } + } + + // Movement + if (!m_movementService) { + m_movementService = m_bluetoothDevice->controller()->createServiceObject(movementServiceUuid, this); + if (!m_movementService) { + qCWarning(dcMultiSensor()) << "Could not create movement service."; + m_bluetoothDevice->disconnectDevice(); + return; + } + + connect(m_movementService, &QLowEnergyService::stateChanged, this, &SensorTag::onMovementServiceStateChanged); + connect(m_movementService, &QLowEnergyService::characteristicChanged, this, &SensorTag::onMovementServiceCharacteristicChanged); + + if (m_movementService->state() == QLowEnergyService::DiscoveryRequired) { + m_movementService->discoverDetails(); + } + } + + // IO + if (!m_ioService) { + m_ioService = m_bluetoothDevice->controller()->createServiceObject(ioServiceUuid, this); + if (!m_ioService) { + qCWarning(dcMultiSensor()) << "Could not create IO service."; + m_bluetoothDevice->disconnectDevice(); + return; + } + + connect(m_ioService, &QLowEnergyService::stateChanged, this, &SensorTag::onIoServiceStateChanged); + connect(m_ioService, &QLowEnergyService::characteristicChanged, this, &SensorTag::onIoServiceCharacteristicChanged); + + if (m_ioService->state() == QLowEnergyService::DiscoveryRequired) { + m_ioService->discoverDetails(); + } + } } -void SensorTag::onInfraredServiceStateChanged(const QLowEnergyService::ServiceState &state) +void SensorTag::onBuzzerImpulseTimeout() +{ + setBuzzerPower(false); +} + +void SensorTag::onTemperatureServiceStateChanged(const QLowEnergyService::ServiceState &state) { // Only continue if discovered if (state != QLowEnergyService::ServiceDiscovered) return; - qCDebug(dcMultiSensor()) << "Infrared sensor service discovered."; + qCDebug(dcMultiSensor()) << "Temperature sensor service discovered."; - foreach (const QLowEnergyCharacteristic &characteristic, m_infraredService->characteristics()) { + foreach (const QLowEnergyCharacteristic &characteristic, m_temperatureService->characteristics()) { qCDebug(dcMultiSensor()) << " -->" << characteristic.name() << characteristic.uuid().toString() << characteristic.value(); - foreach (const QLowEnergyDescriptor &desciptor, characteristic.descriptors()) { - qCDebug(dcMultiSensor()) << " -->" << desciptor.name() << desciptor.uuid().toString() << desciptor.value(); + foreach (const QLowEnergyDescriptor &descriptor, characteristic.descriptors()) { + qCDebug(dcMultiSensor()) << " -->" << descriptor.name() << descriptor.uuid().toString() << descriptor.value(); } } // Data characteristic - m_infraredDataCharacteristic = m_infraredService->characteristic(QBluetoothUuid(QUuid("f000aa01-0451-4000-b000-000000000000"))); - if (!m_infraredDataCharacteristic.isValid()) { - qCWarning(dcMultiSensor()) << "Invalid infrared data characteristic."; + m_temperatureDataCharacteristic = m_temperatureService->characteristic(QBluetoothUuid(QUuid("f000aa01-0451-4000-b000-000000000000"))); + if (!m_temperatureDataCharacteristic.isValid()) { + qCWarning(dcMultiSensor()) << "Invalid temperature data characteristic."; + m_bluetoothDevice->disconnectDevice(); + return; } // Enable notifications - QLowEnergyDescriptor notificationDescriptor = m_infraredDataCharacteristic.descriptor(QBluetoothUuid::ClientCharacteristicConfiguration); - m_infraredService->writeDescriptor(notificationDescriptor, QByteArray::fromHex("0100")); + QLowEnergyDescriptor notificationDescriptor = m_temperatureDataCharacteristic.descriptor(QBluetoothUuid::ClientCharacteristicConfiguration); + m_temperatureService->writeDescriptor(notificationDescriptor, QByteArray::fromHex("0100")); // Config characteristic - m_infraredConfigCharacteristic = m_infraredService->characteristic(QBluetoothUuid(QUuid("f000aa02-0451-4000-b000-000000000000"))); - if (!m_infraredConfigCharacteristic.isValid()) { - qCWarning(dcMultiSensor()) << "Invalid infrared configuration characteristic."; - } - - // Enable measuring - m_infraredService->writeCharacteristic(m_infraredConfigCharacteristic, QByteArray::fromHex("01")); -} - -void SensorTag::onInfraredServiceCharacteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &value) -{ - if (characteristic == m_infraredDataCharacteristic) { - updateInfraredValue(value); - - // FIXME: Disable measuring - // m_infraredService->writeCharacteristic(m_infraredConfigCharacteristic, QByteArray::fromHex("00")); - } -} - -void SensorTag::onButtonServiceStateChanged(const QLowEnergyService::ServiceState &state) -{ - // Only continue if discovered - if (state != QLowEnergyService::ServiceDiscovered) + m_temperatureConfigurationCharacteristic = m_temperatureService->characteristic(temperatureConfigurationCharacteristicUuid); + if (!m_temperatureConfigurationCharacteristic.isValid()) { + qCWarning(dcMultiSensor()) << "Invalid temperature configuration characteristic."; + m_bluetoothDevice->disconnectDevice(); return; - - qCDebug(dcMultiSensor()) << "Button sensor service discovered."; - - foreach (const QLowEnergyCharacteristic &characteristic, m_buttonService->characteristics()) { - qCDebug(dcMultiSensor()) << " -->" << characteristic.name() << characteristic.uuid().toString() << characteristic.value(); - foreach (const QLowEnergyDescriptor &desciptor, characteristic.descriptors()) { - qCDebug(dcMultiSensor()) << " -->" << desciptor.name() << desciptor.uuid().toString() << desciptor.value(); - } } - // Data characteristic - m_buttonCharacteristic = m_buttonService->characteristic(QBluetoothUuid(QUuid("0000ffe1-0000-1000-8000-00805f9b34fb"))); - if (!m_buttonCharacteristic.isValid()) { - qCWarning(dcMultiSensor()) << "Invalid button data characteristic."; + // Period characteristic + m_temperaturePeriodCharacteristic = m_temperatureService->characteristic(temperaturePeriodCharacteristicUuid); + if (!m_temperaturePeriodCharacteristic.isValid()) { + qCWarning(dcMultiSensor()) << "Invalid temperature period characteristic."; + m_bluetoothDevice->disconnectDevice(); + return; } - // Enable notifications - QLowEnergyDescriptor notificationDescriptor = m_buttonCharacteristic.descriptor(QBluetoothUuid::ClientCharacteristicConfiguration); - m_buttonService->writeDescriptor(notificationDescriptor, QByteArray::fromHex("0100")); + configurePeriod(m_temperatureService, m_temperaturePeriodCharacteristic, m_temperaturePeriod); + + // Enable/disable measuring + setTemperatureSensorPower(m_temperatureEnabled); } -void SensorTag::onButtonServiceCharacteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &value) +void SensorTag::onTemperatureServiceCharacteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &value) { - if (characteristic == m_buttonCharacteristic) { - updateButtonValue(value); + if (characteristic == m_temperatureDataCharacteristic) { + m_dataProcessor->processTemperatureData(value); } } @@ -248,15 +623,17 @@ void SensorTag::onHumidityServiceStateChanged(const QLowEnergyService::ServiceSt foreach (const QLowEnergyCharacteristic &characteristic, m_humidityService->characteristics()) { qCDebug(dcMultiSensor()) << " -->" << characteristic.name() << characteristic.uuid().toString() << characteristic.value(); - foreach (const QLowEnergyDescriptor &desciptor, characteristic.descriptors()) { - qCDebug(dcMultiSensor()) << " -->" << desciptor.name() << desciptor.uuid().toString() << desciptor.value(); + foreach (const QLowEnergyDescriptor &descriptor, characteristic.descriptors()) { + qCDebug(dcMultiSensor()) << " -->" << descriptor.name() << descriptor.uuid().toString() << descriptor.value(); } } // Data characteristic - m_humidityDataCharacteristic = m_humidityService->characteristic(QBluetoothUuid(QUuid("f000aa21-0451-4000-b000-000000000000"))); + m_humidityDataCharacteristic = m_humidityService->characteristic(humidityDataCharacteristicUuid); if (!m_humidityDataCharacteristic.isValid()) { qCWarning(dcMultiSensor()) << "Invalid humidity data characteristic."; + m_bluetoothDevice->disconnectDevice(); + return; } // Enable notifications @@ -264,21 +641,31 @@ void SensorTag::onHumidityServiceStateChanged(const QLowEnergyService::ServiceSt m_humidityService->writeDescriptor(notificationDescriptor, QByteArray::fromHex("0100")); // Config characteristic - m_humidityConfigCharacteristic = m_humidityService->characteristic(QBluetoothUuid(QUuid("f000aa22-0451-4000-b000-000000000000"))); - if (!m_humidityConfigCharacteristic.isValid()) { + m_humidityConfigurationCharacteristic = m_humidityService->characteristic(humidityConfigurationCharacteristicUuid); + if (!m_humidityConfigurationCharacteristic.isValid()) { qCWarning(dcMultiSensor()) << "Invalid humidity configuration characteristic."; + m_bluetoothDevice->disconnectDevice(); + return; } + // Period characteristic + m_humidityPeriodCharacteristic = m_humidityService->characteristic(humidityPeriodCharacteristicUuid); + if (!m_humidityPeriodCharacteristic.isValid()) { + qCWarning(dcMultiSensor()) << "Invalid humidity period characteristic."; + m_bluetoothDevice->disconnectDevice(); + return; + } + + configurePeriod(m_humidityService, m_humidityPeriodCharacteristic, m_humidityPeriod); + // Enable measuring - m_humidityService->writeCharacteristic(m_humidityConfigCharacteristic, QByteArray::fromHex("01")); + m_humidityService->writeCharacteristic(m_humidityConfigurationCharacteristic, QByteArray::fromHex("01")); } void SensorTag::onHumidityServiceCharacteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &value) { if (characteristic == m_humidityDataCharacteristic) { - updateHumidityValue(value); - // FIXME: Disable measuring - // m_humidityService->writeCharacteristic(m_humidityConfigCharacteristic, QByteArray::fromHex("00")); + m_dataProcessor->processHumidityData(value); } } @@ -292,15 +679,17 @@ void SensorTag::onPressureServiceStateChanged(const QLowEnergyService::ServiceSt foreach (const QLowEnergyCharacteristic &characteristic, m_pressureService->characteristics()) { qCDebug(dcMultiSensor()) << " -->" << characteristic.name() << characteristic.uuid().toString() << characteristic.value(); - foreach (const QLowEnergyDescriptor &desciptor, characteristic.descriptors()) { - qCDebug(dcMultiSensor()) << " -->" << desciptor.name() << desciptor.uuid().toString() << desciptor.value(); + foreach (const QLowEnergyDescriptor &descriptor, characteristic.descriptors()) { + qCDebug(dcMultiSensor()) << " -->" << descriptor.name() << descriptor.uuid().toString() << descriptor.value(); } } // Data characteristic - m_pressureDataCharacteristic = m_pressureService->characteristic(QBluetoothUuid(QUuid("f000aa41-0451-4000-b000-000000000000"))); + m_pressureDataCharacteristic = m_pressureService->characteristic(pressureDataCharacteristicUuid); if (!m_pressureDataCharacteristic.isValid()) { qCWarning(dcMultiSensor()) << "Invalid pressure data characteristic."; + m_bluetoothDevice->disconnectDevice(); + return; } // Enable notifications @@ -308,36 +697,216 @@ void SensorTag::onPressureServiceStateChanged(const QLowEnergyService::ServiceSt m_pressureService->writeDescriptor(notificationDescriptor, QByteArray::fromHex("0100")); // Config characteristic - m_pressureConfigCharacteristic = m_pressureService->characteristic(QBluetoothUuid(QUuid("f000aa42-0451-4000-b000-000000000000"))); - if (!m_pressureConfigCharacteristic.isValid()) { + m_pressureConfigurationCharacteristic = m_pressureService->characteristic(pressureConfigurationCharacteristicUuid); + if (!m_pressureConfigurationCharacteristic.isValid()) { qCWarning(dcMultiSensor()) << "Invalid pressure configuration characteristic."; + m_bluetoothDevice->disconnectDevice(); + return; } + // Period characteristic + m_pressurePeriodCharacteristic = m_pressureService->characteristic(pressurePeriodCharacteristicUuid); + if (!m_pressurePeriodCharacteristic.isValid()) { + qCWarning(dcMultiSensor()) << "Invalid pressure period characteristic."; + m_bluetoothDevice->disconnectDevice(); + return; + } + + configurePeriod(m_pressureService, m_pressurePeriodCharacteristic, m_pressurePeriod); + // Enable measuring - m_pressureService->writeCharacteristic(m_pressureConfigCharacteristic, QByteArray::fromHex("01")); + m_pressureService->writeCharacteristic(m_pressureConfigurationCharacteristic, QByteArray::fromHex("01")); } void SensorTag::onPressureServiceCharacteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &value) { if (characteristic == m_pressureDataCharacteristic) { - updatePressureValue(value); - // FIXME: Disable measuring - // m_pressureService->writeCharacteristic(m_pressureConfigCharacteristic, QByteArray::fromHex("00")); + m_dataProcessor->processPressureData(value); } } -void SensorTag::measure() +void SensorTag::onOpticalServiceStateChanged(const QLowEnergyService::ServiceState &state) { - if (!m_bluetoothDevice->connected()) + // Only continue if discovered + if (state != QLowEnergyService::ServiceDiscovered) return; - // TODO: measure using plugintimer to save energy + qCDebug(dcMultiSensor()) << "Optical sensor service discovered."; -// qCDebug(dcMultiSensor()) << "Measure data" << m_bluetoothDevice->name() << m_bluetoothDevice->address().toString(); + foreach (const QLowEnergyCharacteristic &characteristic, m_pressureService->characteristics()) { + qCDebug(dcMultiSensor()) << " -->" << characteristic.name() << characteristic.uuid().toString() << characteristic.value(); + foreach (const QLowEnergyDescriptor &descriptor, characteristic.descriptors()) { + qCDebug(dcMultiSensor()) << " -->" << descriptor.name() << descriptor.uuid().toString() << descriptor.value(); + } + } -// m_infraredService->writeCharacteristic(m_infraredConfigCharacteristic, QByteArray::fromHex("01")); -// m_humidityService->writeCharacteristic(m_humidityConfigCharacteristic, QByteArray::fromHex("01")); -// m_pressureService->writeCharacteristic(m_pressureConfigCharacteristic, QByteArray::fromHex("01")); + // Data characteristic + m_opticalDataCharacteristic = m_opticalService->characteristic(opticalDataCharacteristicUuid); + if (!m_opticalDataCharacteristic.isValid()) { + qCWarning(dcMultiSensor()) << "Invalid optical data characteristic."; + m_bluetoothDevice->disconnectDevice(); + return; + } + // Enable notifications + QLowEnergyDescriptor notificationDescriptor = m_opticalDataCharacteristic.descriptor(QBluetoothUuid::ClientCharacteristicConfiguration); + m_opticalService->writeDescriptor(notificationDescriptor, QByteArray::fromHex("0100")); + + // Config characteristic + m_opticalConfigurationCharacteristic = m_opticalService->characteristic(opticalConfigurationCharacteristicUuid); + if (!m_opticalConfigurationCharacteristic.isValid()) { + qCWarning(dcMultiSensor()) << "Invalid optical configuration characteristic."; + m_bluetoothDevice->disconnectDevice(); + } + + // Period characteristic + m_opticalPeriodCharacteristic = m_opticalService->characteristic(opticalPeriodCharacteristicUuid); + if (!m_opticalPeriodCharacteristic.isValid()) { + qCWarning(dcMultiSensor()) << "Invalid optical period characteristic."; + m_bluetoothDevice->disconnectDevice(); + } + + // Set measurement period + configurePeriod(m_opticalService, m_opticalPeriodCharacteristic, m_opticalPeriod); + + // Enable measuring + m_opticalService->writeCharacteristic(m_opticalConfigurationCharacteristic, QByteArray::fromHex("01")); } +void SensorTag::onOpticalServiceCharacteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &value) +{ + if (characteristic == m_opticalDataCharacteristic) { + m_dataProcessor->processOpticalData(value); + } +} + +void SensorTag::onKeyServiceStateChanged(const QLowEnergyService::ServiceState &state) +{ + // Only continue if discovered + if (state != QLowEnergyService::ServiceDiscovered) + return; + + qCDebug(dcMultiSensor()) << "Key service discovered."; + foreach (const QLowEnergyCharacteristic &characteristic, m_keyService->characteristics()) { + qCDebug(dcMultiSensor()) << " -->" << characteristic.name() << characteristic.uuid().toString() << characteristic.value(); + foreach (const QLowEnergyDescriptor &descriptor, characteristic.descriptors()) { + qCDebug(dcMultiSensor()) << " -->" << descriptor.name() << descriptor.uuid().toString() << descriptor.value(); + } + } + + // Data characteristic + m_keyDataCharacteristic = m_keyService->characteristic(keyDataCharacteristicUuid); + if (!m_keyDataCharacteristic.isValid()) { + qCWarning(dcMultiSensor()) << "Invalid button data characteristic."; + m_bluetoothDevice->disconnectDevice(); + } + + // Enable notifications + QLowEnergyDescriptor notificationDescriptor = m_keyDataCharacteristic.descriptor(QBluetoothUuid::ClientCharacteristicConfiguration); + m_keyService->writeDescriptor(notificationDescriptor, QByteArray::fromHex("0100")); +} + +void SensorTag::onKeyServiceCharacteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &value) +{ + if (characteristic == m_keyDataCharacteristic) { + m_dataProcessor->processKeyData(value); + } +} + +void SensorTag::onMovementServiceStateChanged(const QLowEnergyService::ServiceState &state) +{ + // Only continue if discovered + if (state != QLowEnergyService::ServiceDiscovered) + return; + + qCDebug(dcMultiSensor()) << "Movement sensor service discovered."; + + foreach (const QLowEnergyCharacteristic &characteristic, m_pressureService->characteristics()) { + qCDebug(dcMultiSensor()) << " -->" << characteristic.name() << characteristic.uuid().toString() << characteristic.value(); + foreach (const QLowEnergyDescriptor &descriptor, characteristic.descriptors()) { + qCDebug(dcMultiSensor()) << " -->" << descriptor.name() << descriptor.uuid().toString() << descriptor.value(); + } + } + + // Data characteristic + m_movementDataCharacteristic = m_movementService->characteristic(movementDataCharacteristicUuid); + if (!m_movementDataCharacteristic.isValid()) { + qCWarning(dcMultiSensor()) << "Invalid movement data characteristic."; + m_bluetoothDevice->disconnectDevice(); + } + + // Enable notifications + QLowEnergyDescriptor notificationDescriptor = m_movementDataCharacteristic.descriptor(QBluetoothUuid::ClientCharacteristicConfiguration); + m_movementService->writeDescriptor(notificationDescriptor, QByteArray::fromHex("0100")); + + // Config characteristic + m_movementConfigurationCharacteristic = m_movementService->characteristic(movementConfigurationCharacteristicUuid); + if (!m_movementConfigurationCharacteristic.isValid()) { + qCWarning(dcMultiSensor()) << "Invalid movement configuration characteristic."; + m_bluetoothDevice->disconnectDevice(); + } + + // Period characteristic + m_movementPeriodCharacteristic = m_movementService->characteristic(movementPeriodCharacteristicUuid); + if (!m_movementPeriodCharacteristic.isValid()) { + qCWarning(dcMultiSensor()) << "Invalid movement period characteristic."; + m_bluetoothDevice->disconnectDevice(); + } + + // Set measurement period + configurePeriod(m_movementService, m_movementPeriodCharacteristic, m_movementPeriod); + configureMovement(); + + // Enable measuring + m_movementService->writeCharacteristic(m_movementConfigurationCharacteristic, QByteArray::fromHex("01")); +} + +void SensorTag::onMovementServiceCharacteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &value) +{ + if (characteristic == m_movementDataCharacteristic) { + m_dataProcessor->processMovementData(value); + } +} + +void SensorTag::onIoServiceStateChanged(const QLowEnergyService::ServiceState &state) +{ + // Only continue if discovered + if (state != QLowEnergyService::ServiceDiscovered) + return; + + qCDebug(dcMultiSensor()) << "IO service discovered."; + + foreach (const QLowEnergyCharacteristic &characteristic, m_pressureService->characteristics()) { + qCDebug(dcMultiSensor()) << " -->" << characteristic.name() << characteristic.uuid().toString() << characteristic.value(); + foreach (const QLowEnergyDescriptor &descriptor, characteristic.descriptors()) { + qCDebug(dcMultiSensor()) << " -->" << descriptor.name() << descriptor.uuid().toString() << descriptor.value(); + } + } + + // Data characteristic + m_ioDataCharacteristic = m_ioService->characteristic(ioDataCharacteristicUuid); + if (!m_ioDataCharacteristic.isValid()) { + qCWarning(dcMultiSensor()) << "Invalid IO data characteristic."; + m_bluetoothDevice->disconnectDevice(); + } + + // Enable notifications + QLowEnergyDescriptor notificationDescriptor = m_ioDataCharacteristic.descriptor(QBluetoothUuid::ClientCharacteristicConfiguration); + m_ioService->writeDescriptor(notificationDescriptor, QByteArray::fromHex("0100")); + + // Config characteristic + m_ioConfigurationCharacteristic = m_ioService->characteristic(ioConfigurationCharacteristicUuid); + if (!m_ioConfigurationCharacteristic.isValid()) { + qCWarning(dcMultiSensor()) << "Invalid IO configuration characteristic."; + m_bluetoothDevice->disconnectDevice(); + } + + configureIo(); + configureSensorMode(SensorModeRemote); + configureIo(); +} + +void SensorTag::onIoServiceCharacteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &value) +{ + qCDebug(dcMultiSensor()) << characteristic.uuid().toString() << value.toHex(); +} diff --git a/multisensor/sensortag.h b/multisensor/sensortag.h index d1a18833..57037337 100644 --- a/multisensor/sensortag.h +++ b/multisensor/sensortag.h @@ -1,3 +1,25 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2015-2018 Simon Stuerz * + * * + * This file is part of guh. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Lesser General Public * + * License as published by the Free Software Foundation; either * + * version 2.1 of the License, or (at your option) any later version. * + * * + * This library 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 library; If not, see * + * . * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + #ifndef SENSORTAG_H #define SENSORTAG_H @@ -5,72 +27,178 @@ #include "plugin/device.h" #include "extern-plugininfo.h" +#include "sensordataprocessor.h" + #include "hardware/bluetoothlowenergy/bluetoothlowenergydevice.h" -static QBluetoothUuid infraredServiceUuid = QBluetoothUuid(QUuid("f000aa00-0451-4000-b000-000000000000")); -static QBluetoothUuid accelerometerServiceUuid = QBluetoothUuid(QUuid("f000aa10-0451-4000-b000-000000000000")); -static QBluetoothUuid humidityServiceUuid = QBluetoothUuid(QUuid("f000aa20-0451-4000-b000-000000000000")); -static QBluetoothUuid magnetometerServiceUuid = QBluetoothUuid(QUuid("f000aa30-0451-4000-b000-000000000000")); -static QBluetoothUuid pressureServiceUuid = QBluetoothUuid(QUuid("f000aa40-0451-4000-b000-000000000000")); -static QBluetoothUuid gyroscopeServiceUuid = QBluetoothUuid(QUuid("f000aa50-0451-4000-b000-000000000000")); -static QBluetoothUuid testServiceUuid = QBluetoothUuid(QUuid("f000aa60-0451-4000-b000-000000000000")); -static QBluetoothUuid otaServiceUuid = QBluetoothUuid(QUuid("f000aac0-0451-4000-b000-000000000000")); -static QBluetoothUuid buttonServiceUuid = QBluetoothUuid(QUuid("0000ffe0-0000-1000-8000-00805f9b34fb")); +// http://processors.wiki.ti.com/index.php/CC2650_SensorTag_User's_Guide + +static QBluetoothUuid temperatureServiceUuid = QBluetoothUuid(QUuid("f000aa00-0451-4000-b000-000000000000")); +static QBluetoothUuid temperatureDataCharacteristicUuid = QBluetoothUuid(QUuid("f000aa01-0451-4000-b000-000000000000")); +static QBluetoothUuid temperatureConfigurationCharacteristicUuid = QBluetoothUuid(QUuid("f000aa02-0451-4000-b000-000000000000")); +static QBluetoothUuid temperaturePeriodCharacteristicUuid = QBluetoothUuid(QUuid("f000aa03-0451-4000-b000-000000000000")); + +static QBluetoothUuid humidityServiceUuid = QBluetoothUuid(QUuid("f000aa20-0451-4000-b000-000000000000")); +static QBluetoothUuid humidityDataCharacteristicUuid = QBluetoothUuid(QUuid("f000aa21-0451-4000-b000-000000000000")); +static QBluetoothUuid humidityConfigurationCharacteristicUuid = QBluetoothUuid(QUuid("f000aa22-0451-4000-b000-000000000000")); +static QBluetoothUuid humidityPeriodCharacteristicUuid = QBluetoothUuid(QUuid("f000aa23-0451-4000-b000-000000000000")); + +static QBluetoothUuid pressureServiceUuid = QBluetoothUuid(QUuid("f000aa40-0451-4000-b000-000000000000")); +static QBluetoothUuid pressureDataCharacteristicUuid = QBluetoothUuid(QUuid("f000aa41-0451-4000-b000-000000000000")); +static QBluetoothUuid pressureConfigurationCharacteristicUuid = QBluetoothUuid(QUuid("f000aa42-0451-4000-b000-000000000000")); +static QBluetoothUuid pressurePeriodCharacteristicUuid = QBluetoothUuid(QUuid("f000aa44-0451-4000-b000-000000000000")); + +static QBluetoothUuid opticalServiceUuid = QBluetoothUuid(QUuid("f000aa70-0451-4000-b000-000000000000")); +static QBluetoothUuid opticalDataCharacteristicUuid = QBluetoothUuid(QUuid("f000aa71-0451-4000-b000-000000000000")); +static QBluetoothUuid opticalConfigurationCharacteristicUuid = QBluetoothUuid(QUuid("f000aa72-0451-4000-b000-000000000000")); +static QBluetoothUuid opticalPeriodCharacteristicUuid = QBluetoothUuid(QUuid("f000aa73-0451-4000-b000-000000000000")); + +static QBluetoothUuid keyServiceUuid = QBluetoothUuid(QUuid("0000ffe0-0000-1000-8000-00805f9b34fb")); +static QBluetoothUuid keyDataCharacteristicUuid = QBluetoothUuid(QUuid("0000ffe1-0000-1000-8000-00805f9b34fb")); + +static QBluetoothUuid ioServiceUuid = QBluetoothUuid(QUuid("f000aa64-0451-4000-b000-000000000000")); +static QBluetoothUuid ioDataCharacteristicUuid = QBluetoothUuid(QUuid("f000aa65-0451-4000-b000-000000000000")); +static QBluetoothUuid ioConfigurationCharacteristicUuid = QBluetoothUuid(QUuid("f000aa66-0451-4000-b000-000000000000")); + +static QBluetoothUuid movementServiceUuid = QBluetoothUuid(QUuid("f000aa80-0451-4000-b000-000000000000")); +static QBluetoothUuid movementDataCharacteristicUuid = QBluetoothUuid(QUuid("f000aa81-0451-4000-b000-000000000000")); +static QBluetoothUuid movementConfigurationCharacteristicUuid = QBluetoothUuid(QUuid("f000aa82-0451-4000-b000-000000000000")); +static QBluetoothUuid movementPeriodCharacteristicUuid = QBluetoothUuid(QUuid("f000aa83-0451-4000-b000-000000000000")); -// Currently unused services class SensorTag : public QObject { Q_OBJECT public: + enum SensorAccelerometerRange { + SensorAccelerometerRange2G = 2, + SensorAccelerometerRange4G = 4, + SensorAccelerometerRange8G = 8, + SensorAccelerometerRange16G = 16 + }; + Q_ENUM(SensorAccelerometerRange) + + enum SensorMode { + SensorModeLocal = 0, + SensorModeRemote = 1, + SensorModeTest = 2 + }; + Q_ENUM(SensorMode) + explicit SensorTag(Device *device, BluetoothLowEnergyDevice *bluetoothDevice, QObject *parent = nullptr); Device *device(); BluetoothLowEnergyDevice *bluetoothDevice(); + // Configurations + void setTemperatureSensorEnabled(bool enabled); + void setHumiditySensorEnabled(bool enabled); + void setPressureSensorEnabled(bool enabled); + void setOpticalSensorEnabled(bool enabled); + void setAccelerometerEnabled(bool enabled); + void setGyroscopeEnabled(bool enabled); + void setMagnetometerEnabled(bool enabled); + + void setAccelerometerRange(const SensorAccelerometerRange &range); + void setMeasurementPeriod(int period); + void setMeasurementPeriodMovement(int period); + void setMovementSensitivity(int percentage); + + // Actions + void setGreenLedPower(bool power); + void setRedLedPower(bool power); + void setBuzzerPower(bool power); + void buzzerImpulse(); + private: Device *m_device; BluetoothLowEnergyDevice *m_bluetoothDevice; // Services - QLowEnergyService *m_infraredService = nullptr; - QLowEnergyService *m_buttonService = nullptr; + QLowEnergyService *m_temperatureService = nullptr; QLowEnergyService *m_humidityService = nullptr; QLowEnergyService *m_pressureService = nullptr; - QLowEnergyService *m_accelerometerService = nullptr; - QLowEnergyService *m_magnetometerService = nullptr; - QLowEnergyService *m_gyroscopeService = nullptr; + QLowEnergyService *m_opticalService = nullptr; + QLowEnergyService *m_keyService = nullptr; + QLowEnergyService *m_movementService = nullptr; + QLowEnergyService *m_ioService = nullptr; // Characteristics - QLowEnergyCharacteristic m_infraredDataCharacteristic; - QLowEnergyCharacteristic m_infraredConfigCharacteristic; - QLowEnergyCharacteristic m_buttonCharacteristic; + QLowEnergyCharacteristic m_temperatureDataCharacteristic; + QLowEnergyCharacteristic m_temperatureConfigurationCharacteristic; + QLowEnergyCharacteristic m_temperaturePeriodCharacteristic; + QLowEnergyCharacteristic m_humidityDataCharacteristic; - QLowEnergyCharacteristic m_humidityConfigCharacteristic; + QLowEnergyCharacteristic m_humidityConfigurationCharacteristic; + QLowEnergyCharacteristic m_humidityPeriodCharacteristic; + QLowEnergyCharacteristic m_pressureDataCharacteristic; - QLowEnergyCharacteristic m_pressureConfigCharacteristic; + QLowEnergyCharacteristic m_pressureConfigurationCharacteristic; + QLowEnergyCharacteristic m_pressurePeriodCharacteristic; + QLowEnergyCharacteristic m_opticalDataCharacteristic; + QLowEnergyCharacteristic m_opticalConfigurationCharacteristic; + QLowEnergyCharacteristic m_opticalPeriodCharacteristic; - void updateInfraredValue(const QByteArray &value); - void updateButtonValue(const QByteArray &value); - void updateHumidityValue(const QByteArray &value); - void updatePressureValue(const QByteArray &value); + QLowEnergyCharacteristic m_keyDataCharacteristic; + + QLowEnergyCharacteristic m_movementDataCharacteristic; + QLowEnergyCharacteristic m_movementConfigurationCharacteristic; + QLowEnergyCharacteristic m_movementPeriodCharacteristic; + + QLowEnergyCharacteristic m_ioDataCharacteristic; + QLowEnergyCharacteristic m_ioConfigurationCharacteristic; + + // Measure periods + int m_temperaturePeriod = 2500; + int m_humidityPeriod = 2500; + int m_pressurePeriod = 2500; + int m_opticalPeriod = 2500; + int m_movementPeriod = 500; + double m_movementSensitivity = 0.5; + SensorAccelerometerRange m_accelerometerRange = SensorAccelerometerRange16G; + + // States + bool m_greenLedEnabled = false; + bool m_redLedEnabled = false; + bool m_buzzerEnabled = false; + + // Plugin configs + bool m_temperatureEnabled = true; + bool m_humidityEnabled = true; + bool m_pressureEnabled = true; + bool m_opticalEnabled = true; + bool m_accelerometerEnabled = true; + bool m_gyroscopeEnabled = false; + bool m_magnetometerEnabled = false; + + SensorDataProcessor *m_dataProcessor = nullptr; + + // Configuration methods + void configurePeriod(QLowEnergyService *serice, const QLowEnergyCharacteristic &characteristic, int measurementPeriod); + void configureMovement(); + void configureSensorMode(const SensorMode &mode); + void configureIo(); + + void setTemperatureSensorPower(bool power); + void setHumiditySensorPower(bool power); + void setPressureSensorPower(bool power); + void setOpticalSensorPower(bool power); signals: - void leftKeyPressed(); - void rightKeyPressed(); + void leftButtonPressedChanged(bool pressed); + void rightButtonPressedChanged(bool pressed); + void magnetDetectedChanged(bool detected); private slots: void onConnectedChanged(const bool &connected); void onServiceDiscoveryFinished(); - // Infrared sensor service - void onInfraredServiceStateChanged(const QLowEnergyService::ServiceState &state); - void onInfraredServiceCharacteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &value); + void onBuzzerImpulseTimeout(); - // Button service - void onButtonServiceStateChanged(const QLowEnergyService::ServiceState &state); - void onButtonServiceCharacteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &value); + // Temperature sensor service + void onTemperatureServiceStateChanged(const QLowEnergyService::ServiceState &state); + void onTemperatureServiceCharacteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &value); // Humidity sensor service void onHumidityServiceStateChanged(const QLowEnergyService::ServiceState &state); @@ -80,10 +208,21 @@ private slots: void onPressureServiceStateChanged(const QLowEnergyService::ServiceState &state); void onPressureServiceCharacteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &value); + // Optical sensor service + void onOpticalServiceStateChanged(const QLowEnergyService::ServiceState &state); + void onOpticalServiceCharacteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &value); -public slots: - void measure(); + // Button service + void onKeyServiceStateChanged(const QLowEnergyService::ServiceState &state); + void onKeyServiceCharacteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &value); + // Movement service + void onMovementServiceStateChanged(const QLowEnergyService::ServiceState &state); + void onMovementServiceCharacteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &value); + + // IO service + void onIoServiceStateChanged(const QLowEnergyService::ServiceState &state); + void onIoServiceCharacteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &value); }; #endif // SENSORTAG_H diff --git a/multisensor/translations/23bf0d8d-df7d-4bee-80ee-f015c5a7f52e-de_DE.ts b/multisensor/translations/23bf0d8d-df7d-4bee-80ee-f015c5a7f52e-de_DE.ts index a4bb190d..23df9526 100644 --- a/multisensor/translations/23bf0d8d-df7d-4bee-80ee-f015c5a7f52e-de_DE.ts +++ b/multisensor/translations/23bf0d8d-df7d-4bee-80ee-f015c5a7f52e-de_DE.ts @@ -4,117 +4,432 @@ MultiSensor - - MultiSensor - The name of the plugin MultiSensor (23bf0d8d-df7d-4bee-80ee-f015c5a7f52e) - - - - + Texas Instruments The name of the vendor (2edf543e-dc2c-4693-bb0c-e76c0d305fad) - - Sensor Tag - The name of the DeviceClass (158a06b6-b27f-4951-957e-6f1e3b44f604) - - - - - name - The name of the paramType (bdb9d684-2f98-45f5-889c-f184c1e73dc7) of sensortag - - - - - mac address - The name of the paramType (d51ed68e-c84a-4136-a5b5-be2f95fd5a0f) of sensortag - - - - - connected changed - The name of the autocreated EventType (a9629b11-0f34-47f0-a0f0-f758a6aec2b4) - - - - - connected - The name of the ParamType of StateType (a9629b11-0f34-47f0-a0f0-f758a6aec2b4) of DeviceClass sensortag - - - - - IR temperature changed - The name of the autocreated EventType (c664e9ec-a045-49ba-add1-1642ceba7c4f) - - - - - IRtemperature - The name of the ParamType of StateType (c664e9ec-a045-49ba-add1-1642ceba7c4f) of DeviceClass sensortag - - - - - humidity changed - The name of the autocreated EventType (e83a50ff-96c9-4b6d-889f-f4238353e794) - - - - - humidity - The name of the ParamType of StateType (e83a50ff-96c9-4b6d-889f-f4238353e794) of DeviceClass sensortag - - - - + temperature changed The name of the autocreated EventType (8359ada9-df1c-4e60-bb87-9e21d05ee2e2) - - temperature - The name of the ParamType of StateType (8359ada9-df1c-4e60-bb87-9e21d05ee2e2) of DeviceClass sensortag + + Sensor Tag (CC2650) + The name of the DeviceClass (158a06b6-b27f-4951-957e-6f1e3b44f604) - - pressure changed + + Multi Sensor + The name of the plugin MultiSensor (23bf0d8d-df7d-4bee-80ee-f015c5a7f52e) + + + + + Name + The name of the paramType (bdb9d684-2f98-45f5-889c-f184c1e73dc7) of sensorTag + + + + + MAC address + The name of the paramType (d51ed68e-c84a-4136-a5b5-be2f95fd5a0f) of sensorTag + + + + + Connected changed + The name of the autocreated EventType (a9629b11-0f34-47f0-a0f0-f758a6aec2b4) + + + + + Connected + The name of the ParamType of the autocreated EventType (a9629b11-0f34-47f0-a0f0-f758a6aec2b4) of DeviceClass sensorTag + + + + + temperature + The name of the ParamType of the autocreated EventType (8359ada9-df1c-4e60-bb87-9e21d05ee2e2) of DeviceClass sensorTag + + + + + Object temperature changed + The name of the autocreated EventType (c664e9ec-a045-49ba-add1-1642ceba7c4f) + + + + + Object temperature + The name of the ParamType of the autocreated EventType (c664e9ec-a045-49ba-add1-1642ceba7c4f) of DeviceClass sensorTag + + + + + Light intensity + The name of the ParamType of the autocreated EventType (6635dce4-2d8d-4608-a836-768c3014f356) of DeviceClass sensorTag + + + + + Magnet detected + The name of the ParamType of the autocreated EventType (758d9b39-7390-40f5-8e19-d8b0f4a0a0c6) of DeviceClass sensorTag + + + + + Left button pressed + The name of the ParamType of the autocreated EventType (8995e49e-ca2d-4dd9-a22f-de6c566c2115) of DeviceClass sensorTag + + + + + Right button pressed + The name of the ParamType of the autocreated EventType (ef8eedc5-6a45-4dfb-bb55-ada1a931b20b) of DeviceClass sensorTag + + + + + + Green LED + The name of the ParamType of the autocreated EventType (8d692132-f950-486f-b3dd-fe1ebc574e1d) of DeviceClass sensorTag +---------- +The name of the autocreated ParamType of the writable StateType (8d692132-f950-486f-b3dd-fe1ebc574e1d) of DeviceClass sensorTag + + + + + + Red LED + The name of the ParamType of the autocreated EventType (bb585725-6393-42de-aea2-ea4f525ad348) of DeviceClass sensorTag +---------- +The name of the autocreated ParamType of the writable StateType (bb585725-6393-42de-aea2-ea4f525ad348) of DeviceClass sensorTag + + + + + + Buzzer + The name of the ParamType of the autocreated EventType (d522c536-4427-4c53-9980-7820b2649aad) of DeviceClass sensorTag +---------- +The name of the autocreated ParamType of the writable StateType (d522c536-4427-4c53-9980-7820b2649aad) of DeviceClass sensorTag + + + + + + Temperature sensor enabled + The name of the ParamType of the autocreated EventType (6f0e40a2-0f97-4c1e-8229-757e3c18b345) of DeviceClass sensorTag +---------- +The name of the autocreated ParamType of the writable StateType (6f0e40a2-0f97-4c1e-8229-757e3c18b345) of DeviceClass sensorTag + + + + + + Humidity sensor enabled + The name of the ParamType of the autocreated EventType (29881172-626a-42d5-83b8-3e2e5ca533be) of DeviceClass sensorTag +---------- +The name of the autocreated ParamType of the writable StateType (29881172-626a-42d5-83b8-3e2e5ca533be) of DeviceClass sensorTag + + + + + + Pressure sensor enabled + The name of the ParamType of the autocreated EventType (50e5e282-9707-4b31-bb3f-a6ca30a7e1ff) of DeviceClass sensorTag +---------- +The name of the autocreated ParamType of the writable StateType (50e5e282-9707-4b31-bb3f-a6ca30a7e1ff) of DeviceClass sensorTag + + + + + + Optical sensor enabled + The name of the ParamType of the autocreated EventType (1460a6d6-9fb4-4385-b27b-ee4b7594e454) of DeviceClass sensorTag +---------- +The name of the autocreated ParamType of the writable StateType (1460a6d6-9fb4-4385-b27b-ee4b7594e454) of DeviceClass sensorTag + + + + + + Accelerometer enabled + The name of the ParamType of the autocreated EventType (5786c91a-d94d-461a-8d22-f978dd1438ab) of DeviceClass sensorTag +---------- +The name of the autocreated ParamType of the writable StateType (5786c91a-d94d-461a-8d22-f978dd1438ab) of DeviceClass sensorTag + + + + + + Gyroscope enabled + The name of the ParamType of the autocreated EventType (94517544-cb97-4816-8993-cb4cf2651a1e) of DeviceClass sensorTag +---------- +The name of the autocreated ParamType of the writable StateType (94517544-cb97-4816-8993-cb4cf2651a1e) of DeviceClass sensorTag + + + + + + Magnetometer enabled + The name of the ParamType of the autocreated EventType (96aae111-b1c1-48a1-9b1f-b56efa546d0d) of DeviceClass sensorTag +---------- +The name of the autocreated ParamType of the writable StateType (96aae111-b1c1-48a1-9b1f-b56efa546d0d) of DeviceClass sensorTag + + + + + + Measurement period for enviromental sensors + The name of the ParamType of the autocreated EventType (c5308565-5dc9-409e-ae99-577c212c7a92) of DeviceClass sensorTag +---------- +The name of the autocreated ParamType of the writable StateType (c5308565-5dc9-409e-ae99-577c212c7a92) of DeviceClass sensorTag + + + + + + Measurement period movement sensor + The name of the ParamType of the autocreated EventType (5237c89c-c21d-4d78-ac99-8be661b40da7) of DeviceClass sensorTag +---------- +The name of the autocreated ParamType of the writable StateType (5237c89c-c21d-4d78-ac99-8be661b40da7) of DeviceClass sensorTag + + + + + + Movement sensitivity + The name of the ParamType of the autocreated EventType (a3298d16-eea6-4474-9061-90466e92d476) of DeviceClass sensorTag +---------- +The name of the autocreated ParamType of the writable StateType (a3298d16-eea6-4474-9061-90466e92d476) of DeviceClass sensorTag + + + + + Humidity changed + The name of the autocreated EventType (e83a50ff-96c9-4b6d-889f-f4238353e794) + + + + + Humidity + The name of the ParamType of the autocreated EventType (e83a50ff-96c9-4b6d-889f-f4238353e794) of DeviceClass sensorTag + + + + + Barometric pressure changed The name of the autocreated EventType (645633ad-77d4-45b2-8be8-d6ca7a12eb7a) - - pressure - The name of the ParamType of StateType (645633ad-77d4-45b2-8be8-d6ca7a12eb7a) of DeviceClass sensortag + + Barometric pressure + The name of the ParamType of the autocreated EventType (645633ad-77d4-45b2-8be8-d6ca7a12eb7a) of DeviceClass sensorTag - - moving changed + + Light intensity changed + The name of the autocreated EventType (6635dce4-2d8d-4608-a836-768c3014f356) + + + + + Moving changed The name of the autocreated EventType (4be5ca26-0565-419d-b18b-2a5a385d2a3d) - - moving - The name of the ParamType of StateType (4be5ca26-0565-419d-b18b-2a5a385d2a3d) of DeviceClass sensortag + + Moving + The name of the ParamType of the autocreated EventType (4be5ca26-0565-419d-b18b-2a5a385d2a3d) of DeviceClass sensorTag - - left key pressed - The name of the EventType 61478490-bed0-4fed-9d58-f13c35b4f220 of deviceClass sensortag + + Magnet detected changed + The name of the autocreated EventType (758d9b39-7390-40f5-8e19-d8b0f4a0a0c6) - - right key pressed - The name of the EventType b7e927db-af28-4fdc-8eb7-edb02258ff5a of deviceClass sensortag + + Left button pressed changed + The name of the autocreated EventType (8995e49e-ca2d-4dd9-a22f-de6c566c2115) + + + + + Right button pressed changed + The name of the autocreated EventType (ef8eedc5-6a45-4dfb-bb55-ada1a931b20b) + + + + + Green LED power changed + The name of the autocreated EventType (8d692132-f950-486f-b3dd-fe1ebc574e1d) + + + + + Set green LED power + The name of the autocreated ActionType (8d692132-f950-486f-b3dd-fe1ebc574e1d) + + + + + Red LED power changed + The name of the autocreated EventType (bb585725-6393-42de-aea2-ea4f525ad348) + + + + + Set red LED power + The name of the autocreated ActionType (bb585725-6393-42de-aea2-ea4f525ad348) + + + + + Buzzer power changed + The name of the autocreated EventType (d522c536-4427-4c53-9980-7820b2649aad) + + + + + Set buzzer power + The name of the autocreated ActionType (d522c536-4427-4c53-9980-7820b2649aad) + + + + + Temperature sensor enabled changed + The name of the autocreated EventType (6f0e40a2-0f97-4c1e-8229-757e3c18b345) + + + + + Set temperature sensor enabled + The name of the autocreated ActionType (6f0e40a2-0f97-4c1e-8229-757e3c18b345) + + + + + Humidity sensor enabled changed + The name of the autocreated EventType (29881172-626a-42d5-83b8-3e2e5ca533be) + + + + + Set humidity sensor enabled + The name of the autocreated ActionType (29881172-626a-42d5-83b8-3e2e5ca533be) + + + + + Pressure sensor enabled changed + The name of the autocreated EventType (50e5e282-9707-4b31-bb3f-a6ca30a7e1ff) + + + + + Set pressure sensor enabled + The name of the autocreated ActionType (50e5e282-9707-4b31-bb3f-a6ca30a7e1ff) + + + + + Optical sensor enabled changed + The name of the autocreated EventType (1460a6d6-9fb4-4385-b27b-ee4b7594e454) + + + + + Set optical sensor enabled + The name of the autocreated ActionType (1460a6d6-9fb4-4385-b27b-ee4b7594e454) + + + + + Accelerometer enabled changed + The name of the autocreated EventType (5786c91a-d94d-461a-8d22-f978dd1438ab) + + + + + Set accelerometer enabled + The name of the autocreated ActionType (5786c91a-d94d-461a-8d22-f978dd1438ab) + + + + + Gyroscope enabled changed + The name of the autocreated EventType (94517544-cb97-4816-8993-cb4cf2651a1e) + + + + + Set gyroscope enabled + The name of the autocreated ActionType (94517544-cb97-4816-8993-cb4cf2651a1e) + + + + + Magnetometer enabled changed + The name of the autocreated EventType (96aae111-b1c1-48a1-9b1f-b56efa546d0d) + + + + + Set magnetometer enabled + The name of the autocreated ActionType (96aae111-b1c1-48a1-9b1f-b56efa546d0d) + + + + + Measurement period for enviromental sensors changed + The name of the autocreated EventType (c5308565-5dc9-409e-ae99-577c212c7a92) + + + + + Set measurement period for enviromental sensors + The name of the autocreated ActionType (c5308565-5dc9-409e-ae99-577c212c7a92) + + + + + Measurement period movement sensor changed + The name of the autocreated EventType (5237c89c-c21d-4d78-ac99-8be661b40da7) + + + + + Set measurement period movement sensor + The name of the autocreated ActionType (5237c89c-c21d-4d78-ac99-8be661b40da7) + + + + + Movement sensitivity changed + The name of the autocreated EventType (a3298d16-eea6-4474-9061-90466e92d476) + + + + + Set movement sensitivity + The name of the autocreated ActionType (a3298d16-eea6-4474-9061-90466e92d476) + + + + + Buzzer impulse + The name of the ActionType a048ab2e-4f17-4467-a166-a7572156c07e of deviceClass sensorTag diff --git a/multisensor/translations/23bf0d8d-df7d-4bee-80ee-f015c5a7f52e-en_US.ts b/multisensor/translations/23bf0d8d-df7d-4bee-80ee-f015c5a7f52e-en_US.ts index d09662b7..9b155e2d 100644 --- a/multisensor/translations/23bf0d8d-df7d-4bee-80ee-f015c5a7f52e-en_US.ts +++ b/multisensor/translations/23bf0d8d-df7d-4bee-80ee-f015c5a7f52e-en_US.ts @@ -4,117 +4,432 @@ MultiSensor - - MultiSensor - The name of the plugin MultiSensor (23bf0d8d-df7d-4bee-80ee-f015c5a7f52e) - - - - + Texas Instruments The name of the vendor (2edf543e-dc2c-4693-bb0c-e76c0d305fad) - - Sensor Tag - The name of the DeviceClass (158a06b6-b27f-4951-957e-6f1e3b44f604) - - - - - name - The name of the paramType (bdb9d684-2f98-45f5-889c-f184c1e73dc7) of sensortag - - - - - mac address - The name of the paramType (d51ed68e-c84a-4136-a5b5-be2f95fd5a0f) of sensortag - - - - - connected changed - The name of the autocreated EventType (a9629b11-0f34-47f0-a0f0-f758a6aec2b4) - - - - - connected - The name of the ParamType of StateType (a9629b11-0f34-47f0-a0f0-f758a6aec2b4) of DeviceClass sensortag - - - - - IR temperature changed - The name of the autocreated EventType (c664e9ec-a045-49ba-add1-1642ceba7c4f) - - - - - IRtemperature - The name of the ParamType of StateType (c664e9ec-a045-49ba-add1-1642ceba7c4f) of DeviceClass sensortag - - - - - humidity changed - The name of the autocreated EventType (e83a50ff-96c9-4b6d-889f-f4238353e794) - - - - - humidity - The name of the ParamType of StateType (e83a50ff-96c9-4b6d-889f-f4238353e794) of DeviceClass sensortag - - - - + temperature changed The name of the autocreated EventType (8359ada9-df1c-4e60-bb87-9e21d05ee2e2) - - temperature - The name of the ParamType of StateType (8359ada9-df1c-4e60-bb87-9e21d05ee2e2) of DeviceClass sensortag + + Sensor Tag (CC2650) + The name of the DeviceClass (158a06b6-b27f-4951-957e-6f1e3b44f604) - - pressure changed + + Multi Sensor + The name of the plugin MultiSensor (23bf0d8d-df7d-4bee-80ee-f015c5a7f52e) + + + + + Name + The name of the paramType (bdb9d684-2f98-45f5-889c-f184c1e73dc7) of sensorTag + + + + + MAC address + The name of the paramType (d51ed68e-c84a-4136-a5b5-be2f95fd5a0f) of sensorTag + + + + + Connected changed + The name of the autocreated EventType (a9629b11-0f34-47f0-a0f0-f758a6aec2b4) + + + + + Connected + The name of the ParamType of the autocreated EventType (a9629b11-0f34-47f0-a0f0-f758a6aec2b4) of DeviceClass sensorTag + + + + + temperature + The name of the ParamType of the autocreated EventType (8359ada9-df1c-4e60-bb87-9e21d05ee2e2) of DeviceClass sensorTag + + + + + Object temperature changed + The name of the autocreated EventType (c664e9ec-a045-49ba-add1-1642ceba7c4f) + + + + + Object temperature + The name of the ParamType of the autocreated EventType (c664e9ec-a045-49ba-add1-1642ceba7c4f) of DeviceClass sensorTag + + + + + Light intensity + The name of the ParamType of the autocreated EventType (6635dce4-2d8d-4608-a836-768c3014f356) of DeviceClass sensorTag + + + + + Magnet detected + The name of the ParamType of the autocreated EventType (758d9b39-7390-40f5-8e19-d8b0f4a0a0c6) of DeviceClass sensorTag + + + + + Left button pressed + The name of the ParamType of the autocreated EventType (8995e49e-ca2d-4dd9-a22f-de6c566c2115) of DeviceClass sensorTag + + + + + Right button pressed + The name of the ParamType of the autocreated EventType (ef8eedc5-6a45-4dfb-bb55-ada1a931b20b) of DeviceClass sensorTag + + + + + + Green LED + The name of the ParamType of the autocreated EventType (8d692132-f950-486f-b3dd-fe1ebc574e1d) of DeviceClass sensorTag +---------- +The name of the autocreated ParamType of the writable StateType (8d692132-f950-486f-b3dd-fe1ebc574e1d) of DeviceClass sensorTag + + + + + + Red LED + The name of the ParamType of the autocreated EventType (bb585725-6393-42de-aea2-ea4f525ad348) of DeviceClass sensorTag +---------- +The name of the autocreated ParamType of the writable StateType (bb585725-6393-42de-aea2-ea4f525ad348) of DeviceClass sensorTag + + + + + + Buzzer + The name of the ParamType of the autocreated EventType (d522c536-4427-4c53-9980-7820b2649aad) of DeviceClass sensorTag +---------- +The name of the autocreated ParamType of the writable StateType (d522c536-4427-4c53-9980-7820b2649aad) of DeviceClass sensorTag + + + + + + Temperature sensor enabled + The name of the ParamType of the autocreated EventType (6f0e40a2-0f97-4c1e-8229-757e3c18b345) of DeviceClass sensorTag +---------- +The name of the autocreated ParamType of the writable StateType (6f0e40a2-0f97-4c1e-8229-757e3c18b345) of DeviceClass sensorTag + + + + + + Humidity sensor enabled + The name of the ParamType of the autocreated EventType (29881172-626a-42d5-83b8-3e2e5ca533be) of DeviceClass sensorTag +---------- +The name of the autocreated ParamType of the writable StateType (29881172-626a-42d5-83b8-3e2e5ca533be) of DeviceClass sensorTag + + + + + + Pressure sensor enabled + The name of the ParamType of the autocreated EventType (50e5e282-9707-4b31-bb3f-a6ca30a7e1ff) of DeviceClass sensorTag +---------- +The name of the autocreated ParamType of the writable StateType (50e5e282-9707-4b31-bb3f-a6ca30a7e1ff) of DeviceClass sensorTag + + + + + + Optical sensor enabled + The name of the ParamType of the autocreated EventType (1460a6d6-9fb4-4385-b27b-ee4b7594e454) of DeviceClass sensorTag +---------- +The name of the autocreated ParamType of the writable StateType (1460a6d6-9fb4-4385-b27b-ee4b7594e454) of DeviceClass sensorTag + + + + + + Accelerometer enabled + The name of the ParamType of the autocreated EventType (5786c91a-d94d-461a-8d22-f978dd1438ab) of DeviceClass sensorTag +---------- +The name of the autocreated ParamType of the writable StateType (5786c91a-d94d-461a-8d22-f978dd1438ab) of DeviceClass sensorTag + + + + + + Gyroscope enabled + The name of the ParamType of the autocreated EventType (94517544-cb97-4816-8993-cb4cf2651a1e) of DeviceClass sensorTag +---------- +The name of the autocreated ParamType of the writable StateType (94517544-cb97-4816-8993-cb4cf2651a1e) of DeviceClass sensorTag + + + + + + Magnetometer enabled + The name of the ParamType of the autocreated EventType (96aae111-b1c1-48a1-9b1f-b56efa546d0d) of DeviceClass sensorTag +---------- +The name of the autocreated ParamType of the writable StateType (96aae111-b1c1-48a1-9b1f-b56efa546d0d) of DeviceClass sensorTag + + + + + + Measurement period for enviromental sensors + The name of the ParamType of the autocreated EventType (c5308565-5dc9-409e-ae99-577c212c7a92) of DeviceClass sensorTag +---------- +The name of the autocreated ParamType of the writable StateType (c5308565-5dc9-409e-ae99-577c212c7a92) of DeviceClass sensorTag + + + + + + Measurement period movement sensor + The name of the ParamType of the autocreated EventType (5237c89c-c21d-4d78-ac99-8be661b40da7) of DeviceClass sensorTag +---------- +The name of the autocreated ParamType of the writable StateType (5237c89c-c21d-4d78-ac99-8be661b40da7) of DeviceClass sensorTag + + + + + + Movement sensitivity + The name of the ParamType of the autocreated EventType (a3298d16-eea6-4474-9061-90466e92d476) of DeviceClass sensorTag +---------- +The name of the autocreated ParamType of the writable StateType (a3298d16-eea6-4474-9061-90466e92d476) of DeviceClass sensorTag + + + + + Humidity changed + The name of the autocreated EventType (e83a50ff-96c9-4b6d-889f-f4238353e794) + + + + + Humidity + The name of the ParamType of the autocreated EventType (e83a50ff-96c9-4b6d-889f-f4238353e794) of DeviceClass sensorTag + + + + + Barometric pressure changed The name of the autocreated EventType (645633ad-77d4-45b2-8be8-d6ca7a12eb7a) - - pressure - The name of the ParamType of StateType (645633ad-77d4-45b2-8be8-d6ca7a12eb7a) of DeviceClass sensortag + + Barometric pressure + The name of the ParamType of the autocreated EventType (645633ad-77d4-45b2-8be8-d6ca7a12eb7a) of DeviceClass sensorTag - - moving changed + + Light intensity changed + The name of the autocreated EventType (6635dce4-2d8d-4608-a836-768c3014f356) + + + + + Moving changed The name of the autocreated EventType (4be5ca26-0565-419d-b18b-2a5a385d2a3d) - - moving - The name of the ParamType of StateType (4be5ca26-0565-419d-b18b-2a5a385d2a3d) of DeviceClass sensortag + + Moving + The name of the ParamType of the autocreated EventType (4be5ca26-0565-419d-b18b-2a5a385d2a3d) of DeviceClass sensorTag - - left key pressed - The name of the EventType 61478490-bed0-4fed-9d58-f13c35b4f220 of deviceClass sensortag + + Magnet detected changed + The name of the autocreated EventType (758d9b39-7390-40f5-8e19-d8b0f4a0a0c6) - - right key pressed - The name of the EventType b7e927db-af28-4fdc-8eb7-edb02258ff5a of deviceClass sensortag + + Left button pressed changed + The name of the autocreated EventType (8995e49e-ca2d-4dd9-a22f-de6c566c2115) + + + + + Right button pressed changed + The name of the autocreated EventType (ef8eedc5-6a45-4dfb-bb55-ada1a931b20b) + + + + + Green LED power changed + The name of the autocreated EventType (8d692132-f950-486f-b3dd-fe1ebc574e1d) + + + + + Set green LED power + The name of the autocreated ActionType (8d692132-f950-486f-b3dd-fe1ebc574e1d) + + + + + Red LED power changed + The name of the autocreated EventType (bb585725-6393-42de-aea2-ea4f525ad348) + + + + + Set red LED power + The name of the autocreated ActionType (bb585725-6393-42de-aea2-ea4f525ad348) + + + + + Buzzer power changed + The name of the autocreated EventType (d522c536-4427-4c53-9980-7820b2649aad) + + + + + Set buzzer power + The name of the autocreated ActionType (d522c536-4427-4c53-9980-7820b2649aad) + + + + + Temperature sensor enabled changed + The name of the autocreated EventType (6f0e40a2-0f97-4c1e-8229-757e3c18b345) + + + + + Set temperature sensor enabled + The name of the autocreated ActionType (6f0e40a2-0f97-4c1e-8229-757e3c18b345) + + + + + Humidity sensor enabled changed + The name of the autocreated EventType (29881172-626a-42d5-83b8-3e2e5ca533be) + + + + + Set humidity sensor enabled + The name of the autocreated ActionType (29881172-626a-42d5-83b8-3e2e5ca533be) + + + + + Pressure sensor enabled changed + The name of the autocreated EventType (50e5e282-9707-4b31-bb3f-a6ca30a7e1ff) + + + + + Set pressure sensor enabled + The name of the autocreated ActionType (50e5e282-9707-4b31-bb3f-a6ca30a7e1ff) + + + + + Optical sensor enabled changed + The name of the autocreated EventType (1460a6d6-9fb4-4385-b27b-ee4b7594e454) + + + + + Set optical sensor enabled + The name of the autocreated ActionType (1460a6d6-9fb4-4385-b27b-ee4b7594e454) + + + + + Accelerometer enabled changed + The name of the autocreated EventType (5786c91a-d94d-461a-8d22-f978dd1438ab) + + + + + Set accelerometer enabled + The name of the autocreated ActionType (5786c91a-d94d-461a-8d22-f978dd1438ab) + + + + + Gyroscope enabled changed + The name of the autocreated EventType (94517544-cb97-4816-8993-cb4cf2651a1e) + + + + + Set gyroscope enabled + The name of the autocreated ActionType (94517544-cb97-4816-8993-cb4cf2651a1e) + + + + + Magnetometer enabled changed + The name of the autocreated EventType (96aae111-b1c1-48a1-9b1f-b56efa546d0d) + + + + + Set magnetometer enabled + The name of the autocreated ActionType (96aae111-b1c1-48a1-9b1f-b56efa546d0d) + + + + + Measurement period for enviromental sensors changed + The name of the autocreated EventType (c5308565-5dc9-409e-ae99-577c212c7a92) + + + + + Set measurement period for enviromental sensors + The name of the autocreated ActionType (c5308565-5dc9-409e-ae99-577c212c7a92) + + + + + Measurement period movement sensor changed + The name of the autocreated EventType (5237c89c-c21d-4d78-ac99-8be661b40da7) + + + + + Set measurement period movement sensor + The name of the autocreated ActionType (5237c89c-c21d-4d78-ac99-8be661b40da7) + + + + + Movement sensitivity changed + The name of the autocreated EventType (a3298d16-eea6-4474-9061-90466e92d476) + + + + + Set movement sensitivity + The name of the autocreated ActionType (a3298d16-eea6-4474-9061-90466e92d476) + + + + + Buzzer impulse + The name of the ActionType a048ab2e-4f17-4467-a166-a7572156c07e of deviceClass sensorTag diff --git a/netatmo/devicepluginnetatmo.cpp b/netatmo/devicepluginnetatmo.cpp index 761eb97b..632c050b 100644 --- a/netatmo/devicepluginnetatmo.cpp +++ b/netatmo/devicepluginnetatmo.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -26,7 +26,7 @@ \brief Plugin for the Netatmo weather stations. \ingroup plugins - \ingroup guh-plugins + \ingroup nymea-plugins This plugin allows to receive data from you netatmo weather station. @@ -86,9 +86,8 @@ DeviceManager::DeviceSetupStatus DevicePluginNetatmo::setupDevice(Device *device qCDebug(dcNetatmo) << "Setup netatmo indoor base station" << device->params(); NetatmoBaseStation *indoor = new NetatmoBaseStation(device->paramValue(indoorNameParamTypeId).toString(), device->paramValue(indoorMacParamTypeId).toString(), - device->paramValue(indoorConnectionParamTypeId).toString(), this); + this); - device->setParentId(DeviceId(indoor->connectionId())); m_indoorDevices.insert(indoor, device); connect(indoor, SIGNAL(statesChanged()), this, SLOT(onIndoorStatesChanged())); @@ -97,10 +96,9 @@ DeviceManager::DeviceSetupStatus DevicePluginNetatmo::setupDevice(Device *device qCDebug(dcNetatmo) << "Setup netatmo outdoor module" << device->params(); NetatmoOutdoorModule *outdoor = new NetatmoOutdoorModule(device->paramValue(outdoorNameParamTypeId).toString(), device->paramValue(outdoorMacParamTypeId).toString(), - device->paramValue(outdoorConnectionParamTypeId).toString(), - device->paramValue(outdoorBaseStationParamTypeId).toString(),this); + device->paramValue(outdoorBaseStationParamTypeId).toString(), + this); - device->setParentId(DeviceId(outdoor->connectionId())); m_outdoorDevices.insert(outdoor, device); connect(outdoor, SIGNAL(statesChanged()), this, SLOT(onOutdoorStatesChanged())); @@ -163,11 +161,10 @@ void DevicePluginNetatmo::processRefreshData(const QVariantMap &data, const QStr Device *indoorDevice = findIndoorDevice(deviceMap.value("_id").toString()); // check if we have to create the device (auto) if (!indoorDevice) { - DeviceDescriptor descriptor(indoorDeviceClassId, "Indoor Station", deviceMap.value("station_name").toString()); + DeviceDescriptor descriptor(indoorDeviceClassId, "Indoor Station", deviceMap.value("station_name").toString(), connectionId); ParamList params; params.append(Param(indoorNameParamTypeId, deviceMap.value("station_name").toString())); params.append(Param(indoorMacParamTypeId, deviceMap.value("_id").toString())); - params.append(Param(indoorConnectionParamTypeId, connectionId)); descriptor.setParams(params); emit autoDevicesAppeared(indoorDeviceClassId, QList() << descriptor); } else { @@ -190,11 +187,10 @@ void DevicePluginNetatmo::processRefreshData(const QVariantMap &data, const QStr Device *outdoorDevice = findOutdoorDevice(moduleMap.value("_id").toString()); // check if we have to create the device (auto) if (!outdoorDevice) { - DeviceDescriptor descriptor(outdoorDeviceClassId, "Outdoor Module", moduleMap.value("module_name").toString()); + DeviceDescriptor descriptor(outdoorDeviceClassId, "Outdoor Module", moduleMap.value("module_name").toString(), connectionId); ParamList params; params.append(Param(outdoorNameParamTypeId, moduleMap.value("module_name").toString())); params.append(Param(outdoorMacParamTypeId, moduleMap.value("_id").toString())); - params.append(Param(outdoorConnectionParamTypeId, connectionId)); params.append(Param(outdoorBaseStationParamTypeId, moduleMap.value("main_device").toString())); descriptor.setParams(params); emit autoDevicesAppeared(outdoorDeviceClassId, QList() << descriptor); diff --git a/netatmo/devicepluginnetatmo.h b/netatmo/devicepluginnetatmo.h index 26cb42dd..e7236071 100644 --- a/netatmo/devicepluginnetatmo.h +++ b/netatmo/devicepluginnetatmo.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -35,7 +35,7 @@ class DevicePluginNetatmo : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "devicepluginnetatmo.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginnetatmo.json") Q_INTERFACES(DevicePlugin) public: diff --git a/netatmo/devicepluginnetatmo.json b/netatmo/devicepluginnetatmo.json index a2a37210..cb2a1a08 100644 --- a/netatmo/devicepluginnetatmo.json +++ b/netatmo/devicepluginnetatmo.json @@ -12,7 +12,7 @@ "id": "728d5a67-27a3-400e-b83c-2765f5196f69", "name": "connection", "displayName": "Netatmo Connection", - "critcalStateTypeId": "2f79bc1d-27ed-480a-b583-728363c83ea6", + "criticalStateTypeId": "2f79bc1d-27ed-480a-b583-728363c83ea6", "deviceIcon": "Network", "interfaces": ["gateway"], "basicTags": [ @@ -75,14 +75,6 @@ "type": "QString", "inputType": "TextLine", "readOnly": true - }, - { - "id": "c15e5dea-10f2-4c96-afab-649872f43d5c", - "name": "connection", - "displayName": "connection", - "type": "QString", - "inputType": "TextLine", - "readOnly": true } ], "stateTypes": [ @@ -206,14 +198,6 @@ "inputType": "TextLine", "readOnly": true }, - { - "id": "c15e5dea-10f2-4c96-afab-649872f43d5c", - "name": "connection", - "displayName": "connection", - "type": "QString", - "inputType": "TextLine", - "readOnly": true - }, { "id": "d7a0ec46-760c-4fdc-9753-fe10c86fe1b9", "name": "baseStation", diff --git a/netatmo/netatmo.pro b/netatmo/netatmo.pro index 73f4765a..4ee7979b 100644 --- a/netatmo/netatmo.pro +++ b/netatmo/netatmo.pro @@ -1,6 +1,8 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_devicepluginnetatmo) +QT += network + +TARGET = $$qtLibraryTarget(nymea_devicepluginnetatmo) SOURCES += \ devicepluginnetatmo.cpp \ diff --git a/netatmo/netatmobasestation.cpp b/netatmo/netatmobasestation.cpp index ef787333..802336b1 100644 --- a/netatmo/netatmobasestation.cpp +++ b/netatmo/netatmobasestation.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -24,11 +24,10 @@ #include -NetatmoBaseStation::NetatmoBaseStation(const QString &name, const QString &macAddress, const QString &connectionId, QObject *parent) : +NetatmoBaseStation::NetatmoBaseStation(const QString &name, const QString &macAddress, QObject *parent) : QObject(parent), m_name(name), - m_macAddress(macAddress), - m_connectionId(connectionId) + m_macAddress(macAddress) { } @@ -42,11 +41,6 @@ QString NetatmoBaseStation::macAddress() const return m_macAddress; } -QString NetatmoBaseStation::connectionId() const -{ - return m_connectionId; -} - int NetatmoBaseStation::lastUpdate() const { return m_lastUpdate; diff --git a/netatmo/netatmobasestation.h b/netatmo/netatmobasestation.h index 1d921bba..6c970bdc 100644 --- a/netatmo/netatmobasestation.h +++ b/netatmo/netatmobasestation.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -30,7 +30,7 @@ class NetatmoBaseStation : public QObject { Q_OBJECT public: - explicit NetatmoBaseStation(const QString &name, const QString &macAddress, const QString &connectionId, QObject *parent = 0); + explicit NetatmoBaseStation(const QString &name, const QString &macAddress, QObject *parent = 0); // Params QString name() const; @@ -54,7 +54,6 @@ private: // Params QString m_name; QString m_macAddress; - QString m_connectionId; // States int m_lastUpdate; diff --git a/netatmo/netatmooutdoormodule.cpp b/netatmo/netatmooutdoormodule.cpp index 485baac5..839ce08d 100644 --- a/netatmo/netatmooutdoormodule.cpp +++ b/netatmo/netatmooutdoormodule.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -24,11 +24,10 @@ #include -NetatmoOutdoorModule::NetatmoOutdoorModule(const QString &name, const QString &macAddress, const QString &connectionId, const QString &baseStation, QObject *parent) : +NetatmoOutdoorModule::NetatmoOutdoorModule(const QString &name, const QString &macAddress, const QString &baseStation, QObject *parent) : QObject(parent), m_name(name), m_macAddress(macAddress), - m_connectionId(connectionId), m_baseStation(baseStation) { } @@ -43,11 +42,6 @@ QString NetatmoOutdoorModule::macAddress() const return m_macAddress; } -QString NetatmoOutdoorModule::connectionId() const -{ - return m_connectionId; -} - QString NetatmoOutdoorModule::baseStation() const { return m_baseStation; diff --git a/netatmo/netatmooutdoormodule.h b/netatmo/netatmooutdoormodule.h index bfba6b4b..7fa6c2df 100644 --- a/netatmo/netatmooutdoormodule.h +++ b/netatmo/netatmooutdoormodule.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -29,12 +29,11 @@ class NetatmoOutdoorModule : public QObject { Q_OBJECT public: - explicit NetatmoOutdoorModule(const QString &name, const QString &macAddress, const QString &connectionId, const QString &baseStation, QObject *parent = 0); + explicit NetatmoOutdoorModule(const QString &name, const QString &macAddress, const QString &baseStation, QObject *parent = 0); // Params QString name() const; QString macAddress() const; - QString connectionId() const; QString baseStation() const; // States @@ -52,7 +51,6 @@ private: // Params QString m_name; QString m_macAddress; - QString m_connectionId; QString m_baseStation; // States diff --git a/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-de_DE.ts b/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-de_DE.ts index 7b427229..26a5e110 100644 --- a/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-de_DE.ts +++ b/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-de_DE.ts @@ -4,8 +4,8 @@ Netatmo - - + + Netatmo The name of the plugin Netatmo (69d14951-0c02-4877-bcef-dffdf48b7ccb) ---------- @@ -13,14 +13,14 @@ The name of the vendor (4b46b4ed-5ec9-4aa4-afc3-92d3f80e6351) Netatmo - + Netatmo Connection The name of the DeviceClass (728d5a67-27a3-400e-b83c-2765f5196f69) Netatmo Verbindung - - + + name The name of the paramType (a97d256c-e159-4aa0-bc71-6bd7cd0688b3) of indoor ---------- @@ -28,38 +28,38 @@ The name of the paramType (a97d256c-e159-4aa0-bc71-6bd7cd0688b3) of outdoorName - + username The name of the paramType (763c2c10-dee5-41c8-9f7e-ded741945e73) of connection Benutzername - + password The name of the paramType (c0d892d6-f359-4782-9d7d-8f74a3b53e3e) of connection Passwort - + available changed The name of the autocreated EventType (2f79bc1d-27ed-480a-b583-728363c83ea6) Verfügbarkeit geändert - + available - The name of the ParamType of StateType (2f79bc1d-27ed-480a-b583-728363c83ea6) of DeviceClass connection + The name of the ParamType of the autocreated EventType (2f79bc1d-27ed-480a-b583-728363c83ea6) of DeviceClass connection Verfügbar - + Indoor Station The name of the DeviceClass (1c809049-04f2-4710-99f5-6ed379a2934f) Innenstation - - + + mac address The name of the paramType (157d470a-e579-4d0e-b879-6b5bfa8e34ae) of indoor ---------- @@ -67,176 +67,167 @@ The name of the paramType (157d470a-e579-4d0e-b879-6b5bfa8e34ae) of outdoorMAC Adresse - - - connection - The name of the paramType (c15e5dea-10f2-4c96-afab-649872f43d5c) of indoor ----------- -The name of the paramType (c15e5dea-10f2-4c96-afab-649872f43d5c) of outdoor - Verbindung - - - - + + last update changed The name of the autocreated EventType (50da9f6b-c350-401c-a72e-2e4036f3975d) Letztes Update geändert - - + + + last update + The name of the ParamType of the autocreated EventType (50da9f6b-c350-401c-a72e-2e4036f3975d) of DeviceClass indoor +---------- +The name of the ParamType of the autocreated EventType (50da9f6b-c350-401c-a72e-2e4036f3975d) of DeviceClass outdoor + + + + + temperature changed The name of the autocreated EventType (3cb25538-e463-40ae-92f9-8f34f0c06b92) Temperatur geändert - - + + temperature - The name of the ParamType of StateType (3cb25538-e463-40ae-92f9-8f34f0c06b92) of DeviceClass indoor + The name of the ParamType of the autocreated EventType (3cb25538-e463-40ae-92f9-8f34f0c06b92) of DeviceClass indoor ---------- -The name of the ParamType of StateType (3cb25538-e463-40ae-92f9-8f34f0c06b92) of DeviceClass outdoor +The name of the ParamType of the autocreated EventType (3cb25538-e463-40ae-92f9-8f34f0c06b92) of DeviceClass outdoor Temperatur - - + + temperature minimum changed The name of the autocreated EventType (ae8bb713-8805-4efd-89a1-bca44a1f1690) Temperatur Minimum geändert - - + + + temperature minimum + The name of the ParamType of the autocreated EventType (ae8bb713-8805-4efd-89a1-bca44a1f1690) of DeviceClass indoor +---------- +The name of the ParamType of the autocreated EventType (ae8bb713-8805-4efd-89a1-bca44a1f1690) of DeviceClass outdoor + + + + + temperature maximum changed The name of the autocreated EventType (dd30507e-037b-4c74-bcca-e04b94c7c5fe) Temperatur Maximum geändert - - - updateTime - The name of the ParamType of StateType (50da9f6b-c350-401c-a72e-2e4036f3975d) of DeviceClass indoor + + + temperature maximum + The name of the ParamType of the autocreated EventType (dd30507e-037b-4c74-bcca-e04b94c7c5fe) of DeviceClass indoor ---------- -The name of the ParamType of StateType (50da9f6b-c350-401c-a72e-2e4036f3975d) of DeviceClass outdoor +The name of the ParamType of the autocreated EventType (dd30507e-037b-4c74-bcca-e04b94c7c5fe) of DeviceClass outdoor - - - temperatureMin - The name of the ParamType of StateType (ae8bb713-8805-4efd-89a1-bca44a1f1690) of DeviceClass indoor ----------- -The name of the ParamType of StateType (ae8bb713-8805-4efd-89a1-bca44a1f1690) of DeviceClass outdoor + + wifi signal strength + The name of the ParamType of the autocreated EventType (6ea906d4-5740-454d-a730-6fdb9fa0d624) of DeviceClass indoor - - - temperatureMax - The name of the ParamType of StateType (dd30507e-037b-4c74-bcca-e04b94c7c5fe) of DeviceClass indoor ----------- -The name of the ParamType of StateType (dd30507e-037b-4c74-bcca-e04b94c7c5fe) of DeviceClass outdoor - - - - - + + humidity changed The name of the autocreated EventType (e2db5f01-196a-48d1-8874-6b8cbfe0d8c9) Luftfeuchtigkeit geändert - - + + humidity - The name of the ParamType of StateType (e2db5f01-196a-48d1-8874-6b8cbfe0d8c9) of DeviceClass indoor + The name of the ParamType of the autocreated EventType (e2db5f01-196a-48d1-8874-6b8cbfe0d8c9) of DeviceClass indoor ---------- -The name of the ParamType of StateType (e2db5f01-196a-48d1-8874-6b8cbfe0d8c9) of DeviceClass outdoor +The name of the ParamType of the autocreated EventType (e2db5f01-196a-48d1-8874-6b8cbfe0d8c9) of DeviceClass outdoor Luftfeuchtigkeit - + pressure changed The name of the autocreated EventType (03b0a7b7-987d-4d3b-b3f0-21d9f92ad326) Luftdruck geändert - + pressure - The name of the ParamType of StateType (03b0a7b7-987d-4d3b-b3f0-21d9f92ad326) of DeviceClass indoor + The name of the ParamType of the autocreated EventType (03b0a7b7-987d-4d3b-b3f0-21d9f92ad326) of DeviceClass indoor Luftdruck - + noise changed The name of the autocreated EventType (906cea9d-1daf-4e9c-90b9-e40f43052a34) Geräuschpegel geändert - + noise - The name of the ParamType of StateType (906cea9d-1daf-4e9c-90b9-e40f43052a34) of DeviceClass indoor + The name of the ParamType of the autocreated EventType (906cea9d-1daf-4e9c-90b9-e40f43052a34) of DeviceClass indoor Geräuschpegel - + co2 changed The name of the autocreated EventType (e5710bd1-79fa-4bd4-9052-8416aae909b9) CO2 Wert geändert - + co2 - The name of the ParamType of StateType (e5710bd1-79fa-4bd4-9052-8416aae909b9) of DeviceClass indoor + The name of the ParamType of the autocreated EventType (e5710bd1-79fa-4bd4-9052-8416aae909b9) of DeviceClass indoor CO2 Wert - + wifi signal strength changed The name of the autocreated EventType (6ea906d4-5740-454d-a730-6fdb9fa0d624) Wifi Signalstärke geändert - - wifiStrength - The name of the ParamType of StateType (6ea906d4-5740-454d-a730-6fdb9fa0d624) of DeviceClass indoor - - - - - signalStrength - The name of the ParamType of StateType (0faa3d08-9004-46fb-a5aa-a59b75e454cc) of DeviceClass outdoor - - - - + Outdoor Station The name of the DeviceClass (6cc01d62-7317-4ec4-8ac4-a4cab762c179) Außenstation - + base station The name of the paramType (d7a0ec46-760c-4fdc-9753-fe10c86fe1b9) of outdoor Basisstation - + signal strength changed The name of the autocreated EventType (0faa3d08-9004-46fb-a5aa-a59b75e454cc) Signalstärke geändert - + + signal strength + The name of the ParamType of the autocreated EventType (0faa3d08-9004-46fb-a5aa-a59b75e454cc) of DeviceClass outdoor + + + + battery changed The name of the autocreated EventType (15d8fae1-ba47-42e1-994d-530e8017c965) Batteriestatus geändert - + battery - The name of the ParamType of StateType (15d8fae1-ba47-42e1-994d-530e8017c965) of DeviceClass outdoor + The name of the ParamType of the autocreated EventType (15d8fae1-ba47-42e1-994d-530e8017c965) of DeviceClass outdoor Batterie diff --git a/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-en_US.ts b/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-en_US.ts index 94334896..09368acb 100644 --- a/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-en_US.ts +++ b/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-en_US.ts @@ -4,8 +4,8 @@ Netatmo - - + + Netatmo The name of the plugin Netatmo (69d14951-0c02-4877-bcef-dffdf48b7ccb) ---------- @@ -13,14 +13,14 @@ The name of the vendor (4b46b4ed-5ec9-4aa4-afc3-92d3f80e6351) - + Netatmo Connection The name of the DeviceClass (728d5a67-27a3-400e-b83c-2765f5196f69) - - + + name The name of the paramType (a97d256c-e159-4aa0-bc71-6bd7cd0688b3) of indoor ---------- @@ -28,38 +28,38 @@ The name of the paramType (a97d256c-e159-4aa0-bc71-6bd7cd0688b3) of outdoor - + username The name of the paramType (763c2c10-dee5-41c8-9f7e-ded741945e73) of connection - + password The name of the paramType (c0d892d6-f359-4782-9d7d-8f74a3b53e3e) of connection - + available changed The name of the autocreated EventType (2f79bc1d-27ed-480a-b583-728363c83ea6) - + available - The name of the ParamType of StateType (2f79bc1d-27ed-480a-b583-728363c83ea6) of DeviceClass connection + The name of the ParamType of the autocreated EventType (2f79bc1d-27ed-480a-b583-728363c83ea6) of DeviceClass connection - + Indoor Station The name of the DeviceClass (1c809049-04f2-4710-99f5-6ed379a2934f) - - + + mac address The name of the paramType (157d470a-e579-4d0e-b879-6b5bfa8e34ae) of indoor ---------- @@ -67,176 +67,167 @@ The name of the paramType (157d470a-e579-4d0e-b879-6b5bfa8e34ae) of outdoor - - - connection - The name of the paramType (c15e5dea-10f2-4c96-afab-649872f43d5c) of indoor ----------- -The name of the paramType (c15e5dea-10f2-4c96-afab-649872f43d5c) of outdoor - - - - - + + last update changed The name of the autocreated EventType (50da9f6b-c350-401c-a72e-2e4036f3975d) - - + + + last update + The name of the ParamType of the autocreated EventType (50da9f6b-c350-401c-a72e-2e4036f3975d) of DeviceClass indoor +---------- +The name of the ParamType of the autocreated EventType (50da9f6b-c350-401c-a72e-2e4036f3975d) of DeviceClass outdoor + + + + + temperature changed The name of the autocreated EventType (3cb25538-e463-40ae-92f9-8f34f0c06b92) - - + + temperature - The name of the ParamType of StateType (3cb25538-e463-40ae-92f9-8f34f0c06b92) of DeviceClass indoor + The name of the ParamType of the autocreated EventType (3cb25538-e463-40ae-92f9-8f34f0c06b92) of DeviceClass indoor ---------- -The name of the ParamType of StateType (3cb25538-e463-40ae-92f9-8f34f0c06b92) of DeviceClass outdoor +The name of the ParamType of the autocreated EventType (3cb25538-e463-40ae-92f9-8f34f0c06b92) of DeviceClass outdoor - - + + temperature minimum changed The name of the autocreated EventType (ae8bb713-8805-4efd-89a1-bca44a1f1690) - - + + + temperature minimum + The name of the ParamType of the autocreated EventType (ae8bb713-8805-4efd-89a1-bca44a1f1690) of DeviceClass indoor +---------- +The name of the ParamType of the autocreated EventType (ae8bb713-8805-4efd-89a1-bca44a1f1690) of DeviceClass outdoor + + + + + temperature maximum changed The name of the autocreated EventType (dd30507e-037b-4c74-bcca-e04b94c7c5fe) - - - updateTime - The name of the ParamType of StateType (50da9f6b-c350-401c-a72e-2e4036f3975d) of DeviceClass indoor + + + temperature maximum + The name of the ParamType of the autocreated EventType (dd30507e-037b-4c74-bcca-e04b94c7c5fe) of DeviceClass indoor ---------- -The name of the ParamType of StateType (50da9f6b-c350-401c-a72e-2e4036f3975d) of DeviceClass outdoor +The name of the ParamType of the autocreated EventType (dd30507e-037b-4c74-bcca-e04b94c7c5fe) of DeviceClass outdoor - - - temperatureMin - The name of the ParamType of StateType (ae8bb713-8805-4efd-89a1-bca44a1f1690) of DeviceClass indoor ----------- -The name of the ParamType of StateType (ae8bb713-8805-4efd-89a1-bca44a1f1690) of DeviceClass outdoor + + wifi signal strength + The name of the ParamType of the autocreated EventType (6ea906d4-5740-454d-a730-6fdb9fa0d624) of DeviceClass indoor - - - temperatureMax - The name of the ParamType of StateType (dd30507e-037b-4c74-bcca-e04b94c7c5fe) of DeviceClass indoor ----------- -The name of the ParamType of StateType (dd30507e-037b-4c74-bcca-e04b94c7c5fe) of DeviceClass outdoor - - - - - + + humidity changed The name of the autocreated EventType (e2db5f01-196a-48d1-8874-6b8cbfe0d8c9) - - + + humidity - The name of the ParamType of StateType (e2db5f01-196a-48d1-8874-6b8cbfe0d8c9) of DeviceClass indoor + The name of the ParamType of the autocreated EventType (e2db5f01-196a-48d1-8874-6b8cbfe0d8c9) of DeviceClass indoor ---------- -The name of the ParamType of StateType (e2db5f01-196a-48d1-8874-6b8cbfe0d8c9) of DeviceClass outdoor +The name of the ParamType of the autocreated EventType (e2db5f01-196a-48d1-8874-6b8cbfe0d8c9) of DeviceClass outdoor - + pressure changed The name of the autocreated EventType (03b0a7b7-987d-4d3b-b3f0-21d9f92ad326) - + pressure - The name of the ParamType of StateType (03b0a7b7-987d-4d3b-b3f0-21d9f92ad326) of DeviceClass indoor + The name of the ParamType of the autocreated EventType (03b0a7b7-987d-4d3b-b3f0-21d9f92ad326) of DeviceClass indoor - + noise changed The name of the autocreated EventType (906cea9d-1daf-4e9c-90b9-e40f43052a34) - + noise - The name of the ParamType of StateType (906cea9d-1daf-4e9c-90b9-e40f43052a34) of DeviceClass indoor + The name of the ParamType of the autocreated EventType (906cea9d-1daf-4e9c-90b9-e40f43052a34) of DeviceClass indoor - + co2 changed The name of the autocreated EventType (e5710bd1-79fa-4bd4-9052-8416aae909b9) - + co2 - The name of the ParamType of StateType (e5710bd1-79fa-4bd4-9052-8416aae909b9) of DeviceClass indoor + The name of the ParamType of the autocreated EventType (e5710bd1-79fa-4bd4-9052-8416aae909b9) of DeviceClass indoor - + wifi signal strength changed The name of the autocreated EventType (6ea906d4-5740-454d-a730-6fdb9fa0d624) - - wifiStrength - The name of the ParamType of StateType (6ea906d4-5740-454d-a730-6fdb9fa0d624) of DeviceClass indoor - - - - - signalStrength - The name of the ParamType of StateType (0faa3d08-9004-46fb-a5aa-a59b75e454cc) of DeviceClass outdoor - - - - + Outdoor Station The name of the DeviceClass (6cc01d62-7317-4ec4-8ac4-a4cab762c179) - + base station The name of the paramType (d7a0ec46-760c-4fdc-9753-fe10c86fe1b9) of outdoor - + signal strength changed The name of the autocreated EventType (0faa3d08-9004-46fb-a5aa-a59b75e454cc) - + + signal strength + The name of the ParamType of the autocreated EventType (0faa3d08-9004-46fb-a5aa-a59b75e454cc) of DeviceClass outdoor + + + + battery changed The name of the autocreated EventType (15d8fae1-ba47-42e1-994d-530e8017c965) - + battery - The name of the ParamType of StateType (15d8fae1-ba47-42e1-994d-530e8017c965) of DeviceClass outdoor + The name of the ParamType of the autocreated EventType (15d8fae1-ba47-42e1-994d-530e8017c965) of DeviceClass outdoor diff --git a/networkdetector/devicemonitor.cpp b/networkdetector/devicemonitor.cpp index 3680b7fc..648abd28 100644 --- a/networkdetector/devicemonitor.cpp +++ b/networkdetector/devicemonitor.cpp @@ -14,6 +14,7 @@ DeviceMonitor::DeviceMonitor(const QString &macAddress, const QString &ipAddress connect(m_arpLookupProcess, SIGNAL(finished(int)), this, SLOT(arpLookupFinished(int))); m_pingProcess = new QProcess(this); + m_pingProcess->setReadChannelMode(QProcess::MergedChannels); connect(m_pingProcess, SIGNAL(finished(int)), this, SLOT(pingFinished(int))); } @@ -29,11 +30,12 @@ void DeviceMonitor::update() void DeviceMonitor::lookupArpCache() { - m_arpLookupProcess->start("ip", {"-s", "neighbor", "list"}); + m_arpLookupProcess->start("ip", {"-4", "-s", "neighbor", "list"}); } void DeviceMonitor::ping() { +// qCDebug(dcNetworkDetector()) << "Running:" << "ping" << "-c" << "1" << m_host->address(); m_pingProcess->start("ping", {"-c", "1", m_host->address()}); } @@ -66,14 +68,14 @@ void DeviceMonitor::arpLookupFinished(int exitCode) } } else { // ARP claims the device to be stale... try to ping it. - qCDebug(dcNetworkDetector()) << "Device" << m_host->macAddress() << "found in ARP cache but is marked as" << parts.last() << ". Trying to ping it..."; + qCDebug(dcNetworkDetector()) << "Device" << m_host->macAddress() << "found in ARP cache but is marked as" << parts.last() << ". Trying to ping it on" << m_host->address(); ping(); } break; } } if (!found) { - qCDebug(dcNetworkDetector()) << "Device" << m_host->macAddress() << "not found in ARP cache. Trying to ping it..."; + qCDebug(dcNetworkDetector()) << "Device" << m_host->macAddress() << "not found in ARP cache. Trying to ping it on" << m_host->address(); ping(); } diff --git a/networkdetector/devicepluginnetworkdetector.cpp b/networkdetector/devicepluginnetworkdetector.cpp index 77e65202..c27a8d4d 100644 --- a/networkdetector/devicepluginnetworkdetector.cpp +++ b/networkdetector/devicepluginnetworkdetector.cpp @@ -3,7 +3,7 @@ * Copyright (C) 2016 Simon Stürz * * Copyright (C) 2016 Michael Zanetti * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -27,12 +27,12 @@ \brief Plugin to monitor devices in the local network. \ingroup plugins - \ingroup guh-plugins + \ingroup nymea-plugins This plugin allows to find and monitor network devices in your local network by using the hostname of the devices. - \underline{NOTE}: the application \c nmap has to be installed and guh has to run as root. + \underline{NOTE}: the application \c nmap has to be installed and nymea has to run as root. \chapter Plugin properties Following JSON file contains the definition and the description of all available \l{DeviceClass}{DeviceClasses} @@ -141,9 +141,9 @@ void DevicePluginNetworkDetector::deviceReachableChanged(bool reachable) { DeviceMonitor *monitor = static_cast(sender()); Device *device = m_monitors.value(monitor); - if (device->stateValue(networkDeviceInRangeStateTypeId).toBool() != reachable) { + if (device->stateValue(networkDeviceConnectedStateTypeId).toBool() != reachable) { qCDebug(dcNetworkDetector()) << "Device" << device->paramValue(networkDeviceMacAddressParamTypeId).toString() << "reachable changed" << reachable; - device->setStateValue(networkDeviceInRangeStateTypeId, reachable); + device->setStateValue(networkDeviceConnectedStateTypeId, reachable); } } diff --git a/networkdetector/devicepluginnetworkdetector.h b/networkdetector/devicepluginnetworkdetector.h index 705f935f..4c861d80 100644 --- a/networkdetector/devicepluginnetworkdetector.h +++ b/networkdetector/devicepluginnetworkdetector.h @@ -3,7 +3,7 @@ * Copyright (C) 2016 Simon Stürz * * Copyright (C) 2016 Michael Zanetti * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -38,7 +38,7 @@ class DevicePluginNetworkDetector : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "devicepluginnetworkdetector.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginnetworkdetector.json") Q_INTERFACES(DevicePlugin) public: diff --git a/networkdetector/devicepluginnetworkdetector.json b/networkdetector/devicepluginnetworkdetector.json index 171ded1f..49175dfd 100644 --- a/networkdetector/devicepluginnetworkdetector.json +++ b/networkdetector/devicepluginnetworkdetector.json @@ -5,7 +5,7 @@ "vendors": [ { "name": "guh", - "displayName": "guh", + "displayName": "guh GmbH", "id": "2062d64d-3232-433c-88bc-0d33c0ba2ba6", "deviceClasses": [ { @@ -17,6 +17,7 @@ "Device", "Sensor" ], + "interfaces": ["connectable"], "primaryStateTypeId": "cb43e1b5-4f61-4538-bfa2-c33055c542cf", "createMethods": ["user", "discovery"], "paramTypes": [ @@ -38,11 +39,12 @@ "stateTypes": [ { "id": "cb43e1b5-4f61-4538-bfa2-c33055c542cf", - "name": "inRange", + "name": "connected", "displayName": "Device in network", "displayNameEvent": "Device in network changed", "type": "bool", - "defaultValue": false + "defaultValue": false, + "cached": false } ] } diff --git a/networkdetector/host.cpp b/networkdetector/host.cpp index 7a1047c2..d7d78e52 100644 --- a/networkdetector/host.cpp +++ b/networkdetector/host.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2016 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/networkdetector/host.h b/networkdetector/host.h index 85ffaceb..6ceefaac 100644 --- a/networkdetector/host.h +++ b/networkdetector/host.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2016 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/networkdetector/networkdetector.pro b/networkdetector/networkdetector.pro index e1ef5d8e..7e1b989d 100644 --- a/networkdetector/networkdetector.pro +++ b/networkdetector/networkdetector.pro @@ -1,6 +1,8 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_devicepluginnetworkdetector) +QT += network + +TARGET = $$qtLibraryTarget(nymea_devicepluginnetworkdetector) SOURCES += \ devicepluginnetworkdetector.cpp \ diff --git a/networkdetector/translations/8e0f791e-b273-4267-8605-b7c2f55a68ab-de_DE.ts b/networkdetector/translations/8e0f791e-b273-4267-8605-b7c2f55a68ab-de_DE.ts index 3181607c..f1ed65c3 100644 --- a/networkdetector/translations/8e0f791e-b273-4267-8605-b7c2f55a68ab-de_DE.ts +++ b/networkdetector/translations/8e0f791e-b273-4267-8605-b7c2f55a68ab-de_DE.ts @@ -5,13 +5,13 @@ NetworkDetector - NetworkDetector + Network Detector The name of the plugin NetworkDetector (8e0f791e-b273-4267-8605-b7c2f55a68ab) - guh + guh GmbH The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) @@ -41,8 +41,8 @@ - inRange - The name of the ParamType of StateType (cb43e1b5-4f61-4538-bfa2-c33055c542cf) of DeviceClass networkDevice + Device in network + The name of the ParamType of the autocreated EventType (cb43e1b5-4f61-4538-bfa2-c33055c542cf) of DeviceClass networkDevice diff --git a/networkdetector/translations/8e0f791e-b273-4267-8605-b7c2f55a68ab-en_US.ts b/networkdetector/translations/8e0f791e-b273-4267-8605-b7c2f55a68ab-en_US.ts index 4ba06b80..ffae3f60 100644 --- a/networkdetector/translations/8e0f791e-b273-4267-8605-b7c2f55a68ab-en_US.ts +++ b/networkdetector/translations/8e0f791e-b273-4267-8605-b7c2f55a68ab-en_US.ts @@ -5,13 +5,13 @@ NetworkDetector - NetworkDetector + Network Detector The name of the plugin NetworkDetector (8e0f791e-b273-4267-8605-b7c2f55a68ab) - guh + guh GmbH The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) @@ -41,8 +41,8 @@ - inRange - The name of the ParamType of StateType (cb43e1b5-4f61-4538-bfa2-c33055c542cf) of DeviceClass networkDevice + Device in network + The name of the ParamType of the autocreated EventType (cb43e1b5-4f61-4538-bfa2-c33055c542cf) of DeviceClass networkDevice diff --git a/guh-plugins.pro b/nymea-plugins.pro similarity index 96% rename from guh-plugins.pro rename to nymea-plugins.pro index febe0e95..31347c4d 100644 --- a/guh-plugins.pro +++ b/nymea-plugins.pro @@ -19,6 +19,7 @@ PLUGIN_DIRS = \ leynew \ udpcommander \ tcpcommander \ + httpcommander \ kodi \ elgato \ senic \ @@ -36,6 +37,8 @@ PLUGIN_DIRS = \ gpio \ snapd \ simulation \ + keba \ + remotessh \ CONFIG+=all @@ -45,7 +48,7 @@ message("Qt version:" $$[QT_VERSION]) 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; +for (entry, PLUGIN_DIRS):plugininfo.commands += make -C $${entry} plugininfo.h; QMAKE_EXTRA_TARGETS += plugininfo # Translations: diff --git a/openweathermap/devicepluginopenweathermap.cpp b/openweathermap/devicepluginopenweathermap.cpp index 46a38f81..699a047b 100644 --- a/openweathermap/devicepluginopenweathermap.cpp +++ b/openweathermap/devicepluginopenweathermap.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -26,7 +26,7 @@ \brief Plugin for the Open Weather Map online weather service. \ingroup plugins - \ingroup guh-plugins + \ingroup nymea-plugins This plugin allows to get the current weather data from \l{http://www.openweathermap.org}{OpenWeatherMap}. The weather data will be refreshed every 15 minutes automatically, but can also refreshed manually. diff --git a/openweathermap/devicepluginopenweathermap.h b/openweathermap/devicepluginopenweathermap.h index ac96b0d9..ab7103db 100644 --- a/openweathermap/devicepluginopenweathermap.h +++ b/openweathermap/devicepluginopenweathermap.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -34,7 +34,7 @@ class DevicePluginOpenweathermap : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "devicepluginopenweathermap.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginopenweathermap.json") Q_INTERFACES(DevicePlugin) public: diff --git a/openweathermap/openweathermap.pro b/openweathermap/openweathermap.pro index 2bfee45a..f99d03f9 100644 --- a/openweathermap/openweathermap.pro +++ b/openweathermap/openweathermap.pro @@ -1,6 +1,6 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_devicepluginopenweathermap) +TARGET = $$qtLibraryTarget(nymea_devicepluginopenweathermap) QT+= network diff --git a/openweathermap/translations/bc6af567-2338-41d5-aac1-462dec6e4783-de_DE.ts b/openweathermap/translations/bc6af567-2338-41d5-aac1-462dec6e4783-de_DE.ts index 70869297..0273f04b 100644 --- a/openweathermap/translations/bc6af567-2338-41d5-aac1-462dec6e4783-de_DE.ts +++ b/openweathermap/translations/bc6af567-2338-41d5-aac1-462dec6e4783-de_DE.ts @@ -42,48 +42,18 @@ The name of the vendor (bf1e96f0-9650-4e7c-a56c-916d54d18e7a) The name of the paramType (f370b076-a783-4b46-85b2-6f4a9dba55d8) of openweathermap Ort + + + weather condition + The name of the ParamType of the autocreated EventType (f16891f3-1174-44f6-a940-cffc8b64bdc1) of DeviceClass openweathermap + + last update changed The name of the autocreated EventType (36b2f09b-7d77-4fbc-a68f-23d735dda0b1) Zuletzt aktualisiert geändert - - - updateTime - The name of the ParamType of StateType (36b2f09b-7d77-4fbc-a68f-23d735dda0b1) of DeviceClass openweathermap - - - - - temperatureMin - The name of the ParamType of StateType (14ec2781-cb04-4bbf-b097-7d01ef982630) of DeviceClass openweathermap - - - - - temperatureMax - The name of the ParamType of StateType (fefe5563-452f-4833-b5cf-49c3cc67c772) of DeviceClass openweathermap - - - - - windSpeed - The name of the ParamType of StateType (2bf63430-e9e2-4fbf-88e6-6f1b4770f287) of DeviceClass openweathermap - - - - - windDirection - The name of the ParamType of StateType (589e2ea5-65b2-4afd-9b72-e3708a589a12) of DeviceClass openweathermap - - - - - weatherDescription - The name of the ParamType of StateType (f9539108-0e0e-4736-a306-6408f8e20a26) of DeviceClass openweathermap - - temperature changed @@ -97,15 +67,15 @@ The name of the vendor (bf1e96f0-9650-4e7c-a56c-916d54d18e7a) - - weatherCondition - The name of the ParamType of StateType (f16891f3-1174-44f6-a940-cffc8b64bdc1) of DeviceClass openweathermap + + last update + The name of the ParamType of the autocreated EventType (36b2f09b-7d77-4fbc-a68f-23d735dda0b1) of DeviceClass openweathermap temperature - The name of the ParamType of StateType (6013402f-b5b1-46b3-8490-f0c20d62fe61) of DeviceClass openweathermap + The name of the ParamType of the autocreated EventType (6013402f-b5b1-46b3-8490-f0c20d62fe61) of DeviceClass openweathermap Temperatur @@ -114,12 +84,24 @@ The name of the vendor (bf1e96f0-9650-4e7c-a56c-916d54d18e7a) The name of the autocreated EventType (14ec2781-cb04-4bbf-b097-7d01ef982630) Temperatur Minimum geändert + + + temperature minimum + The name of the ParamType of the autocreated EventType (14ec2781-cb04-4bbf-b097-7d01ef982630) of DeviceClass openweathermap + + temperature maximum changed The name of the autocreated EventType (fefe5563-452f-4833-b5cf-49c3cc67c772) Temperatur Maximum geändert + + + temperature maximum + The name of the ParamType of the autocreated EventType (fefe5563-452f-4833-b5cf-49c3cc67c772) of DeviceClass openweathermap + + humidity changed @@ -129,7 +111,7 @@ The name of the vendor (bf1e96f0-9650-4e7c-a56c-916d54d18e7a) humidity - The name of the ParamType of StateType (6f32ec73-3240-4630-ada9-1c10b8e98123) of DeviceClass openweathermap + The name of the ParamType of the autocreated EventType (6f32ec73-3240-4630-ada9-1c10b8e98123) of DeviceClass openweathermap Luftfeuchtigkeit @@ -141,7 +123,7 @@ The name of the vendor (bf1e96f0-9650-4e7c-a56c-916d54d18e7a) pressure - The name of the ParamType of StateType (4a42eea9-00eb-440b-915e-dbe42180f83b) of DeviceClass openweathermap + The name of the ParamType of the autocreated EventType (4a42eea9-00eb-440b-915e-dbe42180f83b) of DeviceClass openweathermap Luftdruck @@ -150,12 +132,24 @@ The name of the vendor (bf1e96f0-9650-4e7c-a56c-916d54d18e7a) The name of the autocreated EventType (2bf63430-e9e2-4fbf-88e6-6f1b4770f287) Windgeschwindigkeit geändert + + + wind speed + The name of the ParamType of the autocreated EventType (2bf63430-e9e2-4fbf-88e6-6f1b4770f287) of DeviceClass openweathermap + + wind direction changed The name of the autocreated EventType (589e2ea5-65b2-4afd-9b72-e3708a589a12) Windrichtung geändert + + + wind direction + The name of the ParamType of the autocreated EventType (589e2ea5-65b2-4afd-9b72-e3708a589a12) of DeviceClass openweathermap + + cloudiness changed @@ -165,7 +159,7 @@ The name of the vendor (bf1e96f0-9650-4e7c-a56c-916d54d18e7a) cloudiness - The name of the ParamType of StateType (798553bc-45c7-42eb-9105-430bddb5d9b7) of DeviceClass openweathermap + The name of the ParamType of the autocreated EventType (798553bc-45c7-42eb-9105-430bddb5d9b7) of DeviceClass openweathermap Bewölungsgrad @@ -177,7 +171,7 @@ The name of the vendor (bf1e96f0-9650-4e7c-a56c-916d54d18e7a) visibility - The name of the ParamType of StateType (1e10d129-cb88-48b0-9244-e3e7e7b175d9) of DeviceClass openweathermap + The name of the ParamType of the autocreated EventType (1e10d129-cb88-48b0-9244-e3e7e7b175d9) of DeviceClass openweathermap Fernsicht @@ -186,6 +180,12 @@ The name of the vendor (bf1e96f0-9650-4e7c-a56c-916d54d18e7a) The name of the autocreated EventType (f9539108-0e0e-4736-a306-6408f8e20a26) Wetter Beschreibung geändert + + + weather description + The name of the ParamType of the autocreated EventType (f9539108-0e0e-4736-a306-6408f8e20a26) of DeviceClass openweathermap + + sunset changed @@ -195,7 +195,7 @@ The name of the vendor (bf1e96f0-9650-4e7c-a56c-916d54d18e7a) sunset - The name of the ParamType of StateType (af155e94-9492-44e1-8608-7d0ee8b5d50d) of DeviceClass openweathermap + The name of the ParamType of the autocreated EventType (af155e94-9492-44e1-8608-7d0ee8b5d50d) of DeviceClass openweathermap Sonnenuntergang @@ -207,7 +207,7 @@ The name of the vendor (bf1e96f0-9650-4e7c-a56c-916d54d18e7a) sunrise - The name of the ParamType of StateType (a1dddc3d-549f-4f20-b78b-be850548f286) of DeviceClass openweathermap + The name of the ParamType of the autocreated EventType (a1dddc3d-549f-4f20-b78b-be850548f286) of DeviceClass openweathermap Sonnenaufgang diff --git a/openweathermap/translations/bc6af567-2338-41d5-aac1-462dec6e4783-en_US.ts b/openweathermap/translations/bc6af567-2338-41d5-aac1-462dec6e4783-en_US.ts index 7d5e51b9..5de88061 100644 --- a/openweathermap/translations/bc6af567-2338-41d5-aac1-462dec6e4783-en_US.ts +++ b/openweathermap/translations/bc6af567-2338-41d5-aac1-462dec6e4783-en_US.ts @@ -42,48 +42,18 @@ The name of the vendor (bf1e96f0-9650-4e7c-a56c-916d54d18e7a) The name of the paramType (f370b076-a783-4b46-85b2-6f4a9dba55d8) of openweathermap + + + weather condition + The name of the ParamType of the autocreated EventType (f16891f3-1174-44f6-a940-cffc8b64bdc1) of DeviceClass openweathermap + + last update changed The name of the autocreated EventType (36b2f09b-7d77-4fbc-a68f-23d735dda0b1) - - - updateTime - The name of the ParamType of StateType (36b2f09b-7d77-4fbc-a68f-23d735dda0b1) of DeviceClass openweathermap - - - - - temperatureMin - The name of the ParamType of StateType (14ec2781-cb04-4bbf-b097-7d01ef982630) of DeviceClass openweathermap - - - - - temperatureMax - The name of the ParamType of StateType (fefe5563-452f-4833-b5cf-49c3cc67c772) of DeviceClass openweathermap - - - - - windSpeed - The name of the ParamType of StateType (2bf63430-e9e2-4fbf-88e6-6f1b4770f287) of DeviceClass openweathermap - - - - - windDirection - The name of the ParamType of StateType (589e2ea5-65b2-4afd-9b72-e3708a589a12) of DeviceClass openweathermap - - - - - weatherDescription - The name of the ParamType of StateType (f9539108-0e0e-4736-a306-6408f8e20a26) of DeviceClass openweathermap - - temperature changed @@ -97,15 +67,15 @@ The name of the vendor (bf1e96f0-9650-4e7c-a56c-916d54d18e7a) - - weatherCondition - The name of the ParamType of StateType (f16891f3-1174-44f6-a940-cffc8b64bdc1) of DeviceClass openweathermap + + last update + The name of the ParamType of the autocreated EventType (36b2f09b-7d77-4fbc-a68f-23d735dda0b1) of DeviceClass openweathermap temperature - The name of the ParamType of StateType (6013402f-b5b1-46b3-8490-f0c20d62fe61) of DeviceClass openweathermap + The name of the ParamType of the autocreated EventType (6013402f-b5b1-46b3-8490-f0c20d62fe61) of DeviceClass openweathermap @@ -114,12 +84,24 @@ The name of the vendor (bf1e96f0-9650-4e7c-a56c-916d54d18e7a) The name of the autocreated EventType (14ec2781-cb04-4bbf-b097-7d01ef982630) + + + temperature minimum + The name of the ParamType of the autocreated EventType (14ec2781-cb04-4bbf-b097-7d01ef982630) of DeviceClass openweathermap + + temperature maximum changed The name of the autocreated EventType (fefe5563-452f-4833-b5cf-49c3cc67c772) + + + temperature maximum + The name of the ParamType of the autocreated EventType (fefe5563-452f-4833-b5cf-49c3cc67c772) of DeviceClass openweathermap + + humidity changed @@ -129,7 +111,7 @@ The name of the vendor (bf1e96f0-9650-4e7c-a56c-916d54d18e7a) humidity - The name of the ParamType of StateType (6f32ec73-3240-4630-ada9-1c10b8e98123) of DeviceClass openweathermap + The name of the ParamType of the autocreated EventType (6f32ec73-3240-4630-ada9-1c10b8e98123) of DeviceClass openweathermap @@ -141,7 +123,7 @@ The name of the vendor (bf1e96f0-9650-4e7c-a56c-916d54d18e7a) pressure - The name of the ParamType of StateType (4a42eea9-00eb-440b-915e-dbe42180f83b) of DeviceClass openweathermap + The name of the ParamType of the autocreated EventType (4a42eea9-00eb-440b-915e-dbe42180f83b) of DeviceClass openweathermap @@ -150,12 +132,24 @@ The name of the vendor (bf1e96f0-9650-4e7c-a56c-916d54d18e7a) The name of the autocreated EventType (2bf63430-e9e2-4fbf-88e6-6f1b4770f287) + + + wind speed + The name of the ParamType of the autocreated EventType (2bf63430-e9e2-4fbf-88e6-6f1b4770f287) of DeviceClass openweathermap + + wind direction changed The name of the autocreated EventType (589e2ea5-65b2-4afd-9b72-e3708a589a12) + + + wind direction + The name of the ParamType of the autocreated EventType (589e2ea5-65b2-4afd-9b72-e3708a589a12) of DeviceClass openweathermap + + cloudiness changed @@ -165,7 +159,7 @@ The name of the vendor (bf1e96f0-9650-4e7c-a56c-916d54d18e7a) cloudiness - The name of the ParamType of StateType (798553bc-45c7-42eb-9105-430bddb5d9b7) of DeviceClass openweathermap + The name of the ParamType of the autocreated EventType (798553bc-45c7-42eb-9105-430bddb5d9b7) of DeviceClass openweathermap @@ -177,7 +171,7 @@ The name of the vendor (bf1e96f0-9650-4e7c-a56c-916d54d18e7a) visibility - The name of the ParamType of StateType (1e10d129-cb88-48b0-9244-e3e7e7b175d9) of DeviceClass openweathermap + The name of the ParamType of the autocreated EventType (1e10d129-cb88-48b0-9244-e3e7e7b175d9) of DeviceClass openweathermap @@ -186,6 +180,12 @@ The name of the vendor (bf1e96f0-9650-4e7c-a56c-916d54d18e7a) The name of the autocreated EventType (f9539108-0e0e-4736-a306-6408f8e20a26) + + + weather description + The name of the ParamType of the autocreated EventType (f9539108-0e0e-4736-a306-6408f8e20a26) of DeviceClass openweathermap + + sunset changed @@ -195,7 +195,7 @@ The name of the vendor (bf1e96f0-9650-4e7c-a56c-916d54d18e7a) sunset - The name of the ParamType of StateType (af155e94-9492-44e1-8608-7d0ee8b5d50d) of DeviceClass openweathermap + The name of the ParamType of the autocreated EventType (af155e94-9492-44e1-8608-7d0ee8b5d50d) of DeviceClass openweathermap @@ -207,7 +207,7 @@ The name of the vendor (bf1e96f0-9650-4e7c-a56c-916d54d18e7a) sunrise - The name of the ParamType of StateType (a1dddc3d-549f-4f20-b78b-be850548f286) of DeviceClass openweathermap + The name of the ParamType of the autocreated EventType (a1dddc3d-549f-4f20-b78b-be850548f286) of DeviceClass openweathermap diff --git a/orderbutton/devicepluginorderbutton.cpp b/orderbutton/devicepluginorderbutton.cpp index 25c50f70..622c3ef9 100644 --- a/orderbutton/devicepluginorderbutton.cpp +++ b/orderbutton/devicepluginorderbutton.cpp @@ -3,7 +3,7 @@ * Copyright (C) 2015 Simon Stürz * * Copyright (C) 2016 Bernhard Trinnes * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -27,7 +27,7 @@ \brief Demonstration of an orderbutton based on 6LoWPAN networking. \ingroup plugins - \ingroup guh-plugins-merkur + \ingroup nymea-plugins-merkur \chapter Plugin properties @@ -147,7 +147,7 @@ DeviceManager::DeviceError DevicePluginOrderButton::executeAction(Device *device return DeviceManager::DeviceErrorAsync; } else if(action.actionTypeId() == orderbuttonLedActionTypeId) { - bool led = action.param(orderbuttonLedStateParamTypeId).value().toBool(); + bool led = action.param(orderbuttonLedActionParamTypeId).value().toBool(); QUrl url; url.setScheme("coap"); @@ -466,7 +466,7 @@ void DevicePluginOrderButton::coapReplyFinished(CoapReply *reply) } // Update the state here, so we don't have to wait for the notification - device->setStateValue(orderbuttonLedStateTypeId, action.param(orderbuttonLedStateParamTypeId).value().toBool()); + device->setStateValue(orderbuttonLedStateTypeId, action.param(orderbuttonLedActionParamTypeId).value().toBool()); // Tell the user about the action execution result emit actionExecutionFinished(action.id(), DeviceManager::DeviceErrorNoError); diff --git a/orderbutton/devicepluginorderbutton.h b/orderbutton/devicepluginorderbutton.h index fe18fd0e..3ae9a3ca 100644 --- a/orderbutton/devicepluginorderbutton.h +++ b/orderbutton/devicepluginorderbutton.h @@ -3,7 +3,7 @@ * Copyright (C) 2015 Simon Stürz * * Copyright (C) 2015 Bernhard Trinnes * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -35,7 +35,7 @@ class DevicePluginOrderButton : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "devicepluginorderbutton.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginorderbutton.json") Q_INTERFACES(DevicePlugin) public: diff --git a/orderbutton/devicepluginorderbutton.json b/orderbutton/devicepluginorderbutton.json index 6e9ba234..657cf545 100644 --- a/orderbutton/devicepluginorderbutton.json +++ b/orderbutton/devicepluginorderbutton.json @@ -14,7 +14,7 @@ ], "vendors": [ { - "displayName": "guh", + "displayName": "guh GmbH", "name": "guh", "id": "2062d64d-3232-433c-88bc-0d33c0ba2ba6", "deviceClasses": [ diff --git a/orderbutton/orderbutton.pro b/orderbutton/orderbutton.pro index 2c41e23b..28cd0b4a 100644 --- a/orderbutton/orderbutton.pro +++ b/orderbutton/orderbutton.pro @@ -1,6 +1,8 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_devicepluginorderbutton) +QT += network + +TARGET = $$qtLibraryTarget(nymea_devicepluginorderbutton) SOURCES += \ devicepluginorderbutton.cpp diff --git a/orderbutton/translations/939a6557-649d-43de-990b-3484f972ad86-de_DE.ts b/orderbutton/translations/939a6557-649d-43de-990b-3484f972ad86-de_DE.ts index 9d21c868..abc62d15 100644 --- a/orderbutton/translations/939a6557-649d-43de-990b-3484f972ad86-de_DE.ts +++ b/orderbutton/translations/939a6557-649d-43de-990b-3484f972ad86-de_DE.ts @@ -4,97 +4,100 @@ orderButton - - orderButton - The name of the plugin orderButton (939a6557-649d-43de-990b-3484f972ad86) - - - - + RPL address The name of the paramType (e917e779-e01c-4095-9d62-ab46fc2deecc) of orderButton - - guh + + guh GmbH The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) - + OrderButton The name of the DeviceClass (af4df281-2b3b-490f-8352-2b99ff23fc15) - + host The name of the paramType (53a00a7b-e168-4917-86b5-d4329a0a720c) of orderbutton - + battery voltage changed The name of the autocreated EventType (a4d83813-10f3-4830-be2e-60d4815906c4) - - battery - The name of the ParamType of StateType (a4d83813-10f3-4830-be2e-60d4815906c4) of DeviceClass orderbutton + + Order Button + The name of the plugin orderButton (939a6557-649d-43de-990b-3484f972ad86) - + + battery voltage + The name of the ParamType of the autocreated EventType (a4d83813-10f3-4830-be2e-60d4815906c4) of DeviceClass orderbutton + + + + count changed The name of the autocreated EventType (2df871fc-1888-4b04-8f02-f17b26642534) - + count - The name of the ParamType of StateType (2df871fc-1888-4b04-8f02-f17b26642534) of DeviceClass orderbutton + The name of the ParamType of the autocreated EventType (2df871fc-1888-4b04-8f02-f17b26642534) of DeviceClass orderbutton - + reachable changed The name of the autocreated EventType (783e74ee-ffd6-4dd7-ade5-3a961452cf15) - + reachable - The name of the ParamType of StateType (783e74ee-ffd6-4dd7-ade5-3a961452cf15) of DeviceClass orderbutton + The name of the ParamType of the autocreated EventType (783e74ee-ffd6-4dd7-ade5-3a961452cf15) of DeviceClass orderbutton - + led changed The name of the autocreated EventType (b184ccc8-e7d9-4e94-8683-07f81484bbda) - + + led - The name of the ParamType of StateType (b184ccc8-e7d9-4e94-8683-07f81484bbda) of DeviceClass orderbutton + The name of the ParamType of the autocreated EventType (b184ccc8-e7d9-4e94-8683-07f81484bbda) of DeviceClass orderbutton +---------- +The name of the autocreated ParamType of the writable StateType (b184ccc8-e7d9-4e94-8683-07f81484bbda) of DeviceClass orderbutton - + Set led The name of the autocreated ActionType (b184ccc8-e7d9-4e94-8683-07f81484bbda) - + reset The name of the ActionType b8e5da6c-501c-493e-8b0f-8ef09efb9057 of deviceClass orderbutton - + button The name of the EventType 2077a9ad-7f4b-4dd4-ae1c-7ecbe0a92dc0 of deviceClass orderbutton diff --git a/orderbutton/translations/939a6557-649d-43de-990b-3484f972ad86-en_US.ts b/orderbutton/translations/939a6557-649d-43de-990b-3484f972ad86-en_US.ts index beeabf88..022ae55b 100644 --- a/orderbutton/translations/939a6557-649d-43de-990b-3484f972ad86-en_US.ts +++ b/orderbutton/translations/939a6557-649d-43de-990b-3484f972ad86-en_US.ts @@ -4,97 +4,100 @@ orderButton - - orderButton - The name of the plugin orderButton (939a6557-649d-43de-990b-3484f972ad86) - - - - + RPL address The name of the paramType (e917e779-e01c-4095-9d62-ab46fc2deecc) of orderButton - - guh + + guh GmbH The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) - + OrderButton The name of the DeviceClass (af4df281-2b3b-490f-8352-2b99ff23fc15) - + host The name of the paramType (53a00a7b-e168-4917-86b5-d4329a0a720c) of orderbutton - + battery voltage changed The name of the autocreated EventType (a4d83813-10f3-4830-be2e-60d4815906c4) - - battery - The name of the ParamType of StateType (a4d83813-10f3-4830-be2e-60d4815906c4) of DeviceClass orderbutton + + Order Button + The name of the plugin orderButton (939a6557-649d-43de-990b-3484f972ad86) - + + battery voltage + The name of the ParamType of the autocreated EventType (a4d83813-10f3-4830-be2e-60d4815906c4) of DeviceClass orderbutton + + + + count changed The name of the autocreated EventType (2df871fc-1888-4b04-8f02-f17b26642534) - + count - The name of the ParamType of StateType (2df871fc-1888-4b04-8f02-f17b26642534) of DeviceClass orderbutton + The name of the ParamType of the autocreated EventType (2df871fc-1888-4b04-8f02-f17b26642534) of DeviceClass orderbutton - + reachable changed The name of the autocreated EventType (783e74ee-ffd6-4dd7-ade5-3a961452cf15) - + reachable - The name of the ParamType of StateType (783e74ee-ffd6-4dd7-ade5-3a961452cf15) of DeviceClass orderbutton + The name of the ParamType of the autocreated EventType (783e74ee-ffd6-4dd7-ade5-3a961452cf15) of DeviceClass orderbutton - + led changed The name of the autocreated EventType (b184ccc8-e7d9-4e94-8683-07f81484bbda) - + + led - The name of the ParamType of StateType (b184ccc8-e7d9-4e94-8683-07f81484bbda) of DeviceClass orderbutton + The name of the ParamType of the autocreated EventType (b184ccc8-e7d9-4e94-8683-07f81484bbda) of DeviceClass orderbutton +---------- +The name of the autocreated ParamType of the writable StateType (b184ccc8-e7d9-4e94-8683-07f81484bbda) of DeviceClass orderbutton - + Set led The name of the autocreated ActionType (b184ccc8-e7d9-4e94-8683-07f81484bbda) - + reset The name of the ActionType b8e5da6c-501c-493e-8b0f-8ef09efb9057 of deviceClass orderbutton - + button The name of the EventType 2077a9ad-7f4b-4dd4-ae1c-7ecbe0a92dc0 of deviceClass orderbutton diff --git a/osdomotics/devicepluginosdomotics.cpp b/osdomotics/devicepluginosdomotics.cpp index f6e45091..9bdb0460 100644 --- a/osdomotics/devicepluginosdomotics.cpp +++ b/osdomotics/devicepluginosdomotics.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -26,9 +26,9 @@ \brief Plugin for the OSDomotics Merkur board based on the OSDomotics tutorials. \ingroup plugins - \ingroup guh-plugins-merkur + \ingroup nymea-plugins-merkur - This plugin allows you to connect guh to a 6LoWPAN network by adding a Mercury Board from OSDomotics + This plugin allows you to connect nymea to a 6LoWPAN network by adding a Mercury Board from OSDomotics as a RPL router to your devices \l{http://osdwiki.open-entry.com/doku.php/de:tutorials:contiki:merkur_board_rpl_usb_router}{OSDomotics Tutorial- RPL Router}. All nodes in the 6LoWPAN network of the added RPL router will appear automatically in the system. @@ -161,7 +161,7 @@ void DevicePluginOsdomotics::parseNodes(Device *device, const QByteArray &data) QHostAddress nodeAddress(QString(data.mid(index, delta - index))); - // check if we allready have found this node + // check if we already have found this node foreach (Device *device, myDevices()) { if (device->paramValue(merkurNodeHostParamTypeId).toString() == nodeAddress.toString()) { return; diff --git a/osdomotics/devicepluginosdomotics.h b/osdomotics/devicepluginosdomotics.h index d12ccacc..d68eafe6 100644 --- a/osdomotics/devicepluginosdomotics.h +++ b/osdomotics/devicepluginosdomotics.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -35,7 +35,7 @@ class DevicePluginOsdomotics : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "devicepluginosdomotics.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginosdomotics.json") Q_INTERFACES(DevicePlugin) public: diff --git a/osdomotics/osdomotics.pro b/osdomotics/osdomotics.pro index 7b73f3e3..9f261723 100644 --- a/osdomotics/osdomotics.pro +++ b/osdomotics/osdomotics.pro @@ -1,6 +1,8 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_devicepluginosdomotics) +QT += network + +TARGET = $$qtLibraryTarget(nymea_devicepluginosdomotics) SOURCES += \ devicepluginosdomotics.cpp diff --git a/osdomotics/translations/78927596-e266-4a23-8634-7311b2c5fe32-de_DE.ts b/osdomotics/translations/78927596-e266-4a23-8634-7311b2c5fe32-de_DE.ts index 3a504d72..cac33217 100644 --- a/osdomotics/translations/78927596-e266-4a23-8634-7311b2c5fe32-de_DE.ts +++ b/osdomotics/translations/78927596-e266-4a23-8634-7311b2c5fe32-de_DE.ts @@ -5,14 +5,11 @@ Osdomotics - Osdomotics - The name of the plugin Osdomotics (78927596-e266-4a23-8634-7311b2c5fe32) - - - OSDomotics - The name of the vendor (e2912117-3b2f-4888-950e-6d259b699102) + The name of the plugin Osdomotics (78927596-e266-4a23-8634-7311b2c5fe32) +---------- +The name of the vendor (e2912117-3b2f-4888-950e-6d259b699102) @@ -59,8 +56,8 @@ The name of the paramType (f46b08c7-06e7-4c51-bb28-57e07d19275d) of merkurNode - battery - The name of the ParamType of StateType (06cf4e66-f102-4a8e-ae76-fac250a07753) of DeviceClass merkurNode + battery voltage + The name of the ParamType of the autocreated EventType (06cf4e66-f102-4a8e-ae76-fac250a07753) of DeviceClass merkurNode diff --git a/osdomotics/translations/78927596-e266-4a23-8634-7311b2c5fe32-en_US.ts b/osdomotics/translations/78927596-e266-4a23-8634-7311b2c5fe32-en_US.ts index 5854a6d9..00aca60c 100644 --- a/osdomotics/translations/78927596-e266-4a23-8634-7311b2c5fe32-en_US.ts +++ b/osdomotics/translations/78927596-e266-4a23-8634-7311b2c5fe32-en_US.ts @@ -5,14 +5,11 @@ Osdomotics - Osdomotics - The name of the plugin Osdomotics (78927596-e266-4a23-8634-7311b2c5fe32) - - - OSDomotics - The name of the vendor (e2912117-3b2f-4888-950e-6d259b699102) + The name of the plugin Osdomotics (78927596-e266-4a23-8634-7311b2c5fe32) +---------- +The name of the vendor (e2912117-3b2f-4888-950e-6d259b699102) @@ -59,8 +56,8 @@ The name of the paramType (f46b08c7-06e7-4c51-bb28-57e07d19275d) of merkurNode - battery - The name of the ParamType of StateType (06cf4e66-f102-4a8e-ae76-fac250a07753) of DeviceClass merkurNode + battery voltage + The name of the ParamType of the autocreated EventType (06cf4e66-f102-4a8e-ae76-fac250a07753) of DeviceClass merkurNode diff --git a/philipshue/devicepluginphilipshue.cpp b/philipshue/devicepluginphilipshue.cpp index 3d698a7a..5832061e 100644 --- a/philipshue/devicepluginphilipshue.cpp +++ b/philipshue/devicepluginphilipshue.cpp @@ -2,8 +2,9 @@ * * * Copyright (C) 2014 Michael Zanetti * * Copyright (C) 2015 Simon Stürz * + * Copyright (C) 2018 Michael Zanetti * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -27,10 +28,10 @@ \brief Plugin for the Philips Hue lighting system. \ingroup plugins - \ingroup guh-plugins + \ingroup nymea-plugins This plugin allows to interact with the \l{http://www2.meethue.com/}{Philips hue} bridge. Each light bulp connected to the bridge - will appear automatically in the system, once the bridge is added to guh. + will appear automatically in the system, once the bridge is added to nymea. \chapter Plugin properties Following JSON file contains the definition and the description of all available \l{DeviceClass}{DeviceClasses} @@ -62,13 +63,38 @@ DevicePluginPhilipsHue::DevicePluginPhilipsHue() DevicePluginPhilipsHue::~DevicePluginPhilipsHue() { - hardwareManager()->pluginTimerManager()->unregisterTimer(m_pluginTimer); + hardwareManager()->pluginTimerManager()->unregisterTimer(m_pluginTimer1Sec); + hardwareManager()->pluginTimerManager()->unregisterTimer(m_pluginTimer5Sec); + hardwareManager()->pluginTimerManager()->unregisterTimer(m_pluginTimer15Sec); } void DevicePluginPhilipsHue::init() { - m_pluginTimer = hardwareManager()->pluginTimerManager()->registerTimer(5); - connect(m_pluginTimer, &PluginTimer::timeout, this, &DevicePluginPhilipsHue::onPluginTimer); + m_pluginTimer1Sec = hardwareManager()->pluginTimerManager()->registerTimer(1); + connect(m_pluginTimer1Sec, &PluginTimer::timeout, this, [this]() { + // refresh sensors every second + if (m_remotes.isEmpty()) { + return; + } + foreach (HueBridge *bridge, m_bridges.keys()) { + refreshSensors(bridge); + } + }); + m_pluginTimer5Sec = hardwareManager()->pluginTimerManager()->registerTimer(5); + connect(m_pluginTimer5Sec, &PluginTimer::timeout, this, [this]() { + // refresh lights every 5 seconds + foreach (HueBridge *bridge, m_bridges.keys()) { + refreshLights(bridge); + } + }); + m_pluginTimer15Sec = hardwareManager()->pluginTimerManager()->registerTimer(15); + connect(m_pluginTimer15Sec, &PluginTimer::timeout, this, [this]() { + // refresh bridges every 15 seconds + foreach (Device *device, m_bridges.values()) { + refreshBridge(device); + } + }); + } DeviceManager::DeviceError DevicePluginPhilipsHue::discoverDevices(const DeviceClassId &deviceClassId, const ParamList ¶ms) @@ -114,8 +140,9 @@ DeviceManager::DeviceSetupStatus DevicePluginPhilipsHue::setupDevice(Device *dev bridge->setName(device->paramValue(hueBridgeBridgeNameParamTypeId).toString()); bridge->setMacAddress(device->paramValue(hueBridgeBridgeMacParamTypeId).toString()); bridge->setZigbeeChannel(device->paramValue(hueBridgeBridgeZigbeeChannelParamTypeId).toInt()); - m_bridges.insert(bridge, device); + + discoverBridgeDevices(bridge); return DeviceManager::DeviceSetupStatusSuccess; } @@ -123,16 +150,15 @@ DeviceManager::DeviceSetupStatus DevicePluginPhilipsHue::setupDevice(Device *dev if (device->deviceClassId() == hueLightDeviceClassId) { qCDebug(dcPhilipsHue) << "Setup Hue color light" << device->params(); + HueBridge *bridge = m_bridges.key(myDevices().findById(device->parentId())); HueLight *hueLight = new HueLight(this); + hueLight->setHostAddress(bridge->hostAddress()); + hueLight->setApiKey(bridge->apiKey()); hueLight->setId(device->paramValue(hueLightLightIdParamTypeId).toInt()); - hueLight->setHostAddress(QHostAddress(device->paramValue(hueLightHostParamTypeId).toString())); hueLight->setName(device->paramValue(hueLightNameParamTypeId).toString()); - hueLight->setApiKey(device->paramValue(hueLightApiKeyParamTypeId).toString()); hueLight->setModelId(device->paramValue(hueLightModelIdParamTypeId).toString()); hueLight->setUuid(device->paramValue(hueLightUuidParamTypeId).toString()); hueLight->setType(device->paramValue(hueLightTypeParamTypeId).toString()); - hueLight->setBridgeId(DeviceId(device->paramValue(hueLightBridgeParamTypeId).toString())); - device->setParentId(hueLight->bridgeId()); connect(hueLight, &HueLight::stateChanged, this, &DevicePluginPhilipsHue::lightStateChanged); m_lights.insert(hueLight, device); @@ -149,16 +175,15 @@ DeviceManager::DeviceSetupStatus DevicePluginPhilipsHue::setupDevice(Device *dev if (device->deviceClassId() == hueWhiteLightDeviceClassId) { qCDebug(dcPhilipsHue) << "Setup Hue white light" << device->params(); + HueBridge *bridge = m_bridges.key(myDevices().findById(device->parentId())); HueLight *hueLight = new HueLight(this); + hueLight->setHostAddress(bridge->hostAddress()); + hueLight->setApiKey(bridge->apiKey()); hueLight->setId(device->paramValue(hueWhiteLightLightIdParamTypeId).toInt()); - hueLight->setHostAddress(QHostAddress(device->paramValue(hueWhiteLightHostParamTypeId).toString())); hueLight->setName(device->paramValue(hueWhiteLightNameParamTypeId).toString()); - hueLight->setApiKey(device->paramValue(hueWhiteLightApiKeyParamTypeId).toString()); hueLight->setModelId(device->paramValue(hueWhiteLightModelIdParamTypeId).toString()); hueLight->setUuid(device->paramValue(hueWhiteLightUuidParamTypeId).toString()); hueLight->setType(device->paramValue(hueWhiteLightTypeParamTypeId).toString()); - hueLight->setBridgeId(DeviceId(device->paramValue(hueWhiteLightBridgeParamTypeId).toString())); - device->setParentId(hueLight->bridgeId()); connect(hueLight, &HueLight::stateChanged, this, &DevicePluginPhilipsHue::lightStateChanged); @@ -173,18 +198,17 @@ DeviceManager::DeviceSetupStatus DevicePluginPhilipsHue::setupDevice(Device *dev // hue remote if (device->deviceClassId() == hueRemoteDeviceClassId) { - qCDebug(dcPhilipsHue) << "Setup Hue remote" << device->params(); + qCDebug(dcPhilipsHue) << "Setup Hue remote" << device->params() << device->deviceClassId(); + HueBridge *bridge = m_bridges.key(myDevices().findById(device->parentId())); HueRemote *hueRemote = new HueRemote(this); + hueRemote->setHostAddress(bridge->hostAddress()); + hueRemote->setApiKey(bridge->apiKey()); hueRemote->setId(device->paramValue(hueRemoteSensorIdParamTypeId).toInt()); - hueRemote->setHostAddress(QHostAddress(device->paramValue(hueRemoteHostParamTypeId).toString())); hueRemote->setName(device->paramValue(hueRemoteNameParamTypeId).toString()); - hueRemote->setApiKey(device->paramValue(hueRemoteApiKeyParamTypeId).toString()); hueRemote->setModelId(device->paramValue(hueRemoteModelIdParamTypeId).toString()); hueRemote->setType(device->paramValue(hueRemoteTypeParamTypeId).toString()); hueRemote->setUuid(device->paramValue(hueRemoteUuidParamTypeId).toString()); - hueRemote->setBridgeId(DeviceId(device->paramValue(hueRemoteBridgeParamTypeId).toString())); - device->setParentId(hueRemote->bridgeId()); device->setName(hueRemote->name()); @@ -195,6 +219,22 @@ DeviceManager::DeviceSetupStatus DevicePluginPhilipsHue::setupDevice(Device *dev return DeviceManager::DeviceSetupStatusSuccess; } + // hue tap + if (device->deviceClassId() == hueTapDeviceClassId) { + HueRemote *hueTap = new HueRemote(this); + hueTap->setName(device->name()); + hueTap->setId(device->paramValue(hueTapSensorIdParamTypeId).toInt()); + hueTap->setModelId(device->paramValue(hueTapModelIdParamTypeId).toString()); + + connect(hueTap, &HueRemote::stateChanged, this, &DevicePluginPhilipsHue::remoteStateChanged); + connect(hueTap, &HueRemote::buttonPressed, this, &DevicePluginPhilipsHue::onRemoteButtonEvent); + + m_remotes.insert(hueTap, device); + return DeviceManager::DeviceSetupStatusSuccess; + } + + qCWarning(dcPhilipsHue()) << "Unhandled setupDevice call" << device->deviceClassId(); + return DeviceManager::DeviceSetupStatusFailure; } @@ -212,7 +252,7 @@ void DevicePluginPhilipsHue::deviceRemoved(Device *device) light->deleteLater(); } - if (device->deviceClassId() == hueRemoteDeviceClassId) { + if (device->deviceClassId() == hueRemoteDeviceClassId || device->deviceClassId() == hueTapDeviceClassId) { HueRemote *remote = m_remotes.key(device); m_remotes.remove(remote); remote->deleteLater(); @@ -231,7 +271,7 @@ DeviceManager::DeviceSetupStatus DevicePluginPhilipsHue::confirmPairing(const Pa pairingInfo->setHost(QHostAddress(params.paramValue(hueBridgeBridgeHostParamTypeId).toString())); QVariantMap deviceTypeParam; - deviceTypeParam.insert("devicetype", "guh"); + deviceTypeParam.insert("devicetype", "nymea"); QJsonDocument jsonDoc = QJsonDocument::fromVariant(deviceTypeParam); @@ -366,7 +406,7 @@ void DevicePluginPhilipsHue::networkManagerReplyReady() // check HTTP status code if (status != 200 || reply->error() != QNetworkReply::NoError) { - if (device->stateValue(hueRemoteConnectedStateTypeId).toBool()) { + if (device->stateValue(hueRemoteConnectedStateTypeId).toBool() || device->stateValue(hueTapConnectedStateTypeId).toBool()) { qCWarning(dcPhilipsHue) << "Refresh Hue sensors request error:" << status << reply->errorString(); bridgeReachableChanged(device, false); } @@ -399,6 +439,8 @@ void DevicePluginPhilipsHue::networkManagerReplyReady() return; } processSetNameResponse(device, reply->readAll()); + } else { + qCWarning(dcPhilipsHue()) << "Unhandled bridge reply" << reply->readAll(); } reply->deleteLater(); } @@ -417,25 +459,25 @@ DeviceManager::DeviceError DevicePluginPhilipsHue::executeAction(Device *device, } if (action.actionTypeId() == hueLightPowerActionTypeId) { - QPair request = light->createSetPowerRequest(action.param(hueLightPowerStateParamTypeId).value().toBool()); + QPair request = light->createSetPowerRequest(action.param(hueLightPowerActionParamTypeId).value().toBool()); QNetworkReply *reply = hardwareManager()->networkManager()->put(request.first, request.second); connect(reply, &QNetworkReply::finished, this, &DevicePluginPhilipsHue::networkManagerReplyReady); m_asyncActions.insert(reply, QPair(device, action.id())); return DeviceManager::DeviceErrorAsync; } else if (action.actionTypeId() == hueLightColorActionTypeId) { - QPair request = light->createSetColorRequest(action.param(hueLightColorStateParamTypeId).value().value()); + QPair request = light->createSetColorRequest(action.param(hueLightColorActionParamTypeId).value().value()); QNetworkReply *reply = hardwareManager()->networkManager()->put(request.first, request.second); connect(reply, &QNetworkReply::finished, this, &DevicePluginPhilipsHue::networkManagerReplyReady); m_asyncActions.insert(reply,QPair(device, action.id())); return DeviceManager::DeviceErrorAsync; } else if (action.actionTypeId() == hueLightBrightnessActionTypeId) { - QPair request = light->createSetBrightnessRequest(percentageToBrightness(action.param(hueLightBrightnessStateParamTypeId).value().toInt())); + QPair request = light->createSetBrightnessRequest(percentageToBrightness(action.param(hueLightBrightnessActionParamTypeId).value().toInt())); QNetworkReply *reply = hardwareManager()->networkManager()->put(request.first, request.second); connect(reply, &QNetworkReply::finished, this, &DevicePluginPhilipsHue::networkManagerReplyReady); m_asyncActions.insert(reply, QPair(device, action.id())); return DeviceManager::DeviceErrorAsync; } else if (action.actionTypeId() == hueLightHueEffectActionTypeId) { - QPair request = light->createSetEffectRequest(action.param(hueLightHueEffectStateParamTypeId).value().toString()); + QPair request = light->createSetEffectRequest(action.param(hueLightHueEffectActionParamTypeId).value().toString()); QNetworkReply *reply = hardwareManager()->networkManager()->put(request.first, request.second); connect(reply, &QNetworkReply::finished, this, &DevicePluginPhilipsHue::networkManagerReplyReady); m_asyncActions.insert(reply, QPair(device, action.id())); @@ -447,7 +489,7 @@ DeviceManager::DeviceError DevicePluginPhilipsHue::executeAction(Device *device, m_asyncActions.insert(reply, QPair(device, action.id())); return DeviceManager::DeviceErrorAsync; } else if (action.actionTypeId() == hueLightColorTemperatureActionTypeId) { - QPair request = light->createSetTemperatureRequest(action.param(hueLightColorTemperatureStateParamTypeId).value().toInt()); + QPair request = light->createSetTemperatureRequest(action.param(hueLightColorTemperatureActionParamTypeId).value().toInt()); QNetworkReply *reply = hardwareManager()->networkManager()->put(request.first, request.second); connect(reply, &QNetworkReply::finished, this, &DevicePluginPhilipsHue::networkManagerReplyReady); m_asyncActions.insert(reply, QPair(device, action.id())); @@ -466,13 +508,13 @@ DeviceManager::DeviceError DevicePluginPhilipsHue::executeAction(Device *device, } if (action.actionTypeId() == hueWhiteLightPowerActionTypeId) { - QPair request = light->createSetPowerRequest(action.param(hueWhiteLightPowerStateParamTypeId).value().toBool()); + QPair request = light->createSetPowerRequest(action.param(hueWhiteLightPowerActionParamTypeId).value().toBool()); QNetworkReply *reply = hardwareManager()->networkManager()->put(request.first, request.second); connect(reply, &QNetworkReply::finished, this, &DevicePluginPhilipsHue::networkManagerReplyReady); m_asyncActions.insert(reply, QPair(device, action.id())); return DeviceManager::DeviceErrorAsync; } else if (action.actionTypeId() == hueWhiteLightBrightnessActionTypeId) { - QPair request = light->createSetBrightnessRequest(percentageToBrightness(action.param(hueWhiteLightBrightnessStateParamTypeId).value().toInt())); + QPair request = light->createSetBrightnessRequest(percentageToBrightness(action.param(hueWhiteLightBrightnessActionParamTypeId).value().toInt())); QNetworkReply *reply = hardwareManager()->networkManager()->put(request.first, request.second); connect(reply, &QNetworkReply::finished, this, &DevicePluginPhilipsHue::networkManagerReplyReady); m_asyncActions.insert(reply, QPair(device, action.id())); @@ -548,17 +590,27 @@ void DevicePluginPhilipsHue::remoteStateChanged() qCWarning(dcPhilipsHue) << "Could not find device for remote" << remote->name(); return; } - - device->setStateValue(hueRemoteConnectedStateTypeId, remote->reachable()); - device->setStateValue(hueRemoteBatteryStateTypeId, remote->battery()); + if (device->deviceClassId() == hueTapDeviceClassId) { + device->setStateValue(hueTapConnectedStateTypeId, remote->reachable()); + } else { + device->setStateValue(hueRemoteConnectedStateTypeId, remote->reachable()); + device->setStateValue(hueRemoteBatteryLevelStateTypeId, remote->battery()); + device->setStateValue(hueRemoteBatteryCriticalStateTypeId, remote->battery() < 5); + } } void DevicePluginPhilipsHue::onRemoteButtonEvent(const int &buttonCode) { HueRemote *remote = static_cast(sender()); + Device *device = m_remotes.value(remote); - Param param(hueRemoteButtonNameParamTypeId); EventTypeId id; + Param param; + if (device->deviceClassId() == hueRemoteDeviceClassId) { + param = Param(hueRemoteButtonNameParamTypeId); + } else if (device->deviceClassId() == hueTapDeviceClassId) { + param = Param(hueTapButtonNameParamTypeId); + } // TODO: Legacy events should be removed eventually switch (buttonCode) { @@ -602,19 +654,28 @@ void DevicePluginPhilipsHue::onRemoteButtonEvent(const int &buttonCode) param.setValue("OFF"); id = hueRemoteLongPressedEventTypeId; break; + case HueRemote::TapButton1Pressed: + param.setValue("•"); + id = hueTapPressedEventTypeId; + break; + case HueRemote::TapButton2Pressed: + param.setValue("••"); + id = hueTapPressedEventTypeId; + break; + case HueRemote::TapButton3Pressed: + param.setValue("•••"); + id = hueTapPressedEventTypeId; + break; + case HueRemote::TapButton4Pressed: + param.setValue("•••••"); + id = hueTapPressedEventTypeId; + break; default: break; } emitEvent(Event(id, m_remotes.value(remote)->id(), ParamList() << param)); } -void DevicePluginPhilipsHue::onPluginTimer() -{ - foreach (Device *device, m_bridges.values()) { - refreshBridge(device); - } -} - void DevicePluginPhilipsHue::onUpnpDiscoveryFinished() { qCDebug(dcPhilipsHue()) << "Upnp discovery finished"; @@ -817,12 +878,9 @@ void DevicePluginPhilipsHue::processBridgeLightDiscoveryResponse(Device *device, // check if this is a white light if (model == "LWB004" || model == "LWB006" || model == "LWB007") { - DeviceDescriptor descriptor(hueWhiteLightDeviceClassId, "Philips Hue White Light", lightMap.value("name").toString()); + DeviceDescriptor descriptor(hueWhiteLightDeviceClassId, "Philips Hue White Light", lightMap.value("name").toString(), device->id()); ParamList params; params.append(Param(hueWhiteLightNameParamTypeId, lightMap.value("name").toString())); - params.append(Param(hueWhiteLightApiKeyParamTypeId, device->paramValue(hueBridgeBridgeApiKeyParamTypeId).toString())); - params.append(Param(hueWhiteLightBridgeParamTypeId, device->id().toString())); - params.append(Param(hueWhiteLightHostParamTypeId, device->paramValue(hueBridgeBridgeHostParamTypeId).toString())); params.append(Param(hueWhiteLightModelIdParamTypeId, model)); params.append(Param(hueWhiteLightTypeParamTypeId, lightMap.value("type").toString())); params.append(Param(hueWhiteLightUuidParamTypeId, uuid)); @@ -833,12 +891,9 @@ void DevicePluginPhilipsHue::processBridgeLightDiscoveryResponse(Device *device, qCDebug(dcPhilipsHue) << "Found new white light" << lightMap.value("name").toString() << model; } else { - DeviceDescriptor descriptor(hueLightDeviceClassId, "Philips Hue Light", lightMap.value("name").toString()); + DeviceDescriptor descriptor(hueLightDeviceClassId, "Philips Hue Light", lightMap.value("name").toString(), device->id()); ParamList params; params.append(Param(hueLightNameParamTypeId, lightMap.value("name").toString())); - params.append(Param(hueLightApiKeyParamTypeId, device->paramValue(hueBridgeBridgeApiKeyParamTypeId).toString())); - params.append(Param(hueLightBridgeParamTypeId, device->id().toString())); - params.append(Param(hueLightHostParamTypeId, device->paramValue(hueBridgeBridgeHostParamTypeId).toString())); params.append(Param(hueLightModelIdParamTypeId, model)); params.append(Param(hueLightTypeParamTypeId, lightMap.value("type").toString())); params.append(Param(hueLightUuidParamTypeId, uuid)); @@ -878,7 +933,6 @@ void DevicePluginPhilipsHue::processBridgeSensorDiscoveryResponse(Device *device } // create sensors if not already added - QList sensorDescriptors; QVariantMap sensorsMap = jsonDoc.toVariant().toMap(); foreach (QString sensorId, sensorsMap.keys()) { QVariantMap sensorMap = sensorsMap.value(sensorId).toMap(); @@ -889,27 +943,30 @@ void DevicePluginPhilipsHue::processBridgeSensorDiscoveryResponse(Device *device if (sensorAlreadyAdded(uuid)) continue; - // check if this is a white light if (model == "RWL021" || model == "RWL020") { - DeviceDescriptor descriptor(hueRemoteDeviceClassId, "Philips Hue Remote", sensorMap.value("name").toString()); + DeviceDescriptor descriptor(hueRemoteDeviceClassId, "Philips Hue Remote", sensorMap.value("name").toString(), device->id()); ParamList params; params.append(Param(hueRemoteNameParamTypeId, sensorMap.value("name").toString())); - params.append(Param(hueRemoteApiKeyParamTypeId, device->paramValue(hueBridgeBridgeApiKeyParamTypeId).toString())); - params.append(Param(hueRemoteBridgeParamTypeId, device->id().toString())); - params.append(Param(hueRemoteHostParamTypeId, device->paramValue(hueBridgeBridgeHostParamTypeId).toString())); params.append(Param(hueRemoteModelIdParamTypeId, model)); params.append(Param(hueRemoteTypeParamTypeId, sensorMap.value("type").toString())); params.append(Param(hueRemoteUuidParamTypeId, uuid)); params.append(Param(hueRemoteSensorIdParamTypeId, sensorId)); descriptor.setParams(params); - sensorDescriptors.append(descriptor); + emit autoDevicesAppeared(hueRemoteDeviceClassId, {descriptor}); qCDebug(dcPhilipsHue) << "Found new remote" << sensorMap.value("name").toString() << model; + } else if (model == "ZGPSWITCH") { + DeviceDescriptor descriptor(hueTapDeviceClassId, "Hue Tap", sensorMap.value("name").toString(), device->id()); + ParamList params; + params.append(Param(hueTapUuidParamTypeId, uuid)); + params.append(Param(hueTapModelIdParamTypeId, model)); + params.append(Param(hueTapSensorIdParamTypeId, sensorId)); + descriptor.setParams(params); + emit autoDevicesAppeared(hueTapDeviceClassId, {descriptor}); + qCDebug(dcPhilipsHue()) << "Found hue tap:" << sensorMap << hueTapDeviceClassId; + } else { + qCDebug(dcPhilipsHue()) << "Found unknown sensor:" << model; } } - - if (!sensorDescriptors.isEmpty()) - emit autoDevicesAppeared(hueRemoteDeviceClassId, sensorDescriptors); - } void DevicePluginPhilipsHue::processLightRefreshResponse(Device *device, const QByteArray &data) @@ -978,10 +1035,6 @@ void DevicePluginPhilipsHue::processBridgeRefreshResponse(Device *device, const default: break; } - - // do lights/sensor update right after successfull bridge update - HueBridge *bridge = m_bridges.key(device); - refreshLights(bridge); } void DevicePluginPhilipsHue::processLightsRefreshResponse(Device *device, const QByteArray &data) @@ -1011,14 +1064,11 @@ void DevicePluginPhilipsHue::processLightsRefreshResponse(Device *device, const QVariantMap lightMap = lightsMap.value(lightId).toMap(); // get the light of this bridge foreach (HueLight *light, m_lights.keys()) { - if (light->id() == lightId.toInt() && light->bridgeId() == device->id()) { + if (light->id() == lightId.toInt() && m_lights.value(light)->parentId() == device->id()) { light->updateStates(lightMap.value("state").toMap()); } } } - - if (!m_remotes.isEmpty()) - refreshSensors(m_bridges.key(device)); } void DevicePluginPhilipsHue::processSensorsRefreshResponse(Device *device, const QByteArray &data) @@ -1043,8 +1093,8 @@ void DevicePluginPhilipsHue::processSensorsRefreshResponse(Device *device, const foreach (const QString &sensorId, sensorsMap.keys()) { QVariantMap sensorMap = sensorsMap.value(sensorId).toMap(); foreach (HueRemote *remote, m_remotes.keys()) { - if (remote->id() == sensorId.toInt() && remote->bridgeId() == device->id()) { - //qCDebug(dcPhilipsHue) << "update remote" << remote->id() << remote->name(); + if (remote->id() == sensorId.toInt() && m_remotes.value(remote)->parentId() == device->id()) { + qCDebug(dcPhilipsHue) << "update remote" << remote->id() << remote->name(); remote->updateStates(sensorMap.value("state").toMap(), sensorMap.value("config").toMap()); } } @@ -1211,7 +1261,7 @@ void DevicePluginPhilipsHue::bridgeReachableChanged(Device *device, const bool & device->setStateValue(hueBridgeConnectedStateTypeId, false); foreach (HueLight *light, m_lights.keys()) { - if (light->bridgeId() == device->id()) { + if (m_lights.value(light)->parentId() == device->id()) { light->setReachable(false); if (m_lights.value(light)->deviceClassId() == hueLightDeviceClassId) { m_lights.value(light)->setStateValue(hueLightConnectedStateTypeId, false); @@ -1222,9 +1272,13 @@ void DevicePluginPhilipsHue::bridgeReachableChanged(Device *device, const bool & } foreach (HueRemote *remote, m_remotes.keys()) { - if (remote->bridgeId() == device->id()) { + if (m_remotes.value(remote)->parentId() == device->id()) { remote->setReachable(false); - m_remotes.value(remote)->setStateValue(hueRemoteConnectedStateTypeId, false); + if (m_remotes.value(remote)->deviceClassId() == hueRemoteDeviceClassId) { + m_remotes.value(remote)->setStateValue(hueRemoteConnectedStateTypeId, false); + } else if (m_remotes.value(remote)->deviceClassId() == hueTapDeviceClassId) { + m_remotes.value(remote)->setStateValue(hueTapConnectedStateTypeId, false); + } } } } @@ -1268,6 +1322,11 @@ bool DevicePluginPhilipsHue::sensorAlreadyAdded(const QString &uuid) return true; } } + if (device->deviceClassId() == hueTapDeviceClassId) { + if (device->paramValue(hueTapUuidParamTypeId).toString() == uuid) { + return true; + } + } } return false; } diff --git a/philipshue/devicepluginphilipshue.h b/philipshue/devicepluginphilipshue.h index f754141f..3641a691 100644 --- a/philipshue/devicepluginphilipshue.h +++ b/philipshue/devicepluginphilipshue.h @@ -3,7 +3,7 @@ * Copyright (C) 2014 Michael Zanetti * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -39,7 +39,7 @@ class DevicePluginPhilipsHue: public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "devicepluginphilipshue.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginphilipshue.json") Q_INTERFACES(DevicePlugin) public: @@ -59,14 +59,15 @@ private slots: void lightStateChanged(); void remoteStateChanged(); void onRemoteButtonEvent(const int &buttonCode); - void onPluginTimer(); private slots: void onUpnpDiscoveryFinished(); void networkManagerReplyReady(); private: - PluginTimer *m_pluginTimer = nullptr; + PluginTimer *m_pluginTimer1Sec = nullptr; + PluginTimer *m_pluginTimer5Sec = nullptr; + PluginTimer *m_pluginTimer15Sec = nullptr; QHash m_pairingRequests; QHash m_informationRequests; diff --git a/philipshue/devicepluginphilipshue.json b/philipshue/devicepluginphilipshue.json index 69d5165e..e553ab38 100644 --- a/philipshue/devicepluginphilipshue.json +++ b/philipshue/devicepluginphilipshue.json @@ -162,13 +162,6 @@ "type" : "QString", "inputType": "TextLine" }, - { - "id": "33b01ab8-3811-4a06-ab3c-0a0ef2faa3ef", - "name": "bridge", - "displayName": "bridge", - "type" : "QString", - "readOnly": true - }, { "id": "095a463b-f59e-46b1-989a-a71f9cbe3e30", "name": "modelId", @@ -190,22 +183,6 @@ "type" : "QString", "readOnly": true }, - { - "id": "99458d90-d171-4600-ba08-4818a4aaed68", - "name": "apiKey", - "displayName": "api key", - "type" : "QString", - "inputType": "TextLine", - "readOnly": true - }, - { - "id": "56d14f2f-1b20-4004-a333-87ac09fa54d2", - "name": "host", - "displayName": "host address", - "type" : "QString", - "inputType": "IPv4Address", - "readOnly": true - }, { "id": "491dc012-ccf2-4d3a-9f18-add98f7374af", "name": "lightId", @@ -336,13 +313,6 @@ "type" : "QString", "inputType": "TextLine" }, - { - "id": "33b01ab8-3811-4a06-ab3c-0a0ef2faa3ef", - "name": "bridge", - "displayName": "bridge", - "type" : "QString", - "readOnly": true - }, { "id": "095a463b-f59e-46b1-989a-a71f9cbe3e30", "name": "modelId", @@ -364,22 +334,6 @@ "type" : "QString", "readOnly": true }, - { - "id": "99458d90-d171-4600-ba08-4818a4aaed68", - "name": "apiKey", - "displayName": "api key", - "type" : "QString", - "inputType": "TextLine", - "readOnly": true - }, - { - "id": "56d14f2f-1b20-4004-a333-87ac09fa54d2", - "name": "host", - "displayName": "host address", - "type" : "QString", - "inputType": "IPv4Address", - "readOnly": true - }, { "id": "491dc012-ccf2-4d3a-9f18-add98f7374af", "name": "lightId", @@ -464,13 +418,6 @@ "type" : "QString", "inputType": "TextLine" }, - { - "id": "33b01ab8-3811-4a06-ab3c-0a0ef2faa3ef", - "name": "bridge", - "displayName": "bridge", - "type" : "QString", - "readOnly": true - }, { "id": "095a463b-f59e-46b1-989a-a71f9cbe3e30", "name": "modelId", @@ -492,22 +439,6 @@ "type" : "QString", "readOnly": true }, - { - "id": "99458d90-d171-4600-ba08-4818a4aaed68", - "name": "apiKey", - "displayName": "api key", - "type" : "QString", - "inputType": "TextLine", - "readOnly": true - }, - { - "id": "56d14f2f-1b20-4004-a333-87ac09fa54d2", - "name": "host", - "displayName": "host address", - "type" : "QString", - "inputType": "IPv4Address", - "readOnly": true - }, { "id": "2ddb571b-149f-4f08-a76a-78b7d3aa27e0", "name": "sensorId", @@ -527,15 +458,22 @@ }, { "id": "683e493a-9796-4d5e-b0e3-61cb178d5819", - "name": "battery", + "name": "batteryLevel", "displayName": "battery", "displayNameEvent": "battery changed", - "displayNameAction": "Set battery", "type": "int", "unit": "Percentage", "defaultValue": 0, "minValue": 0, "maxValue": 100 + }, + { + "id": "f8516899-6312-4110-bb97-70ffa81dc530", + "name": "batteryCritical", + "displayName": "battery critical", + "displayNameEvent": "battery critical changed", + "type": "bool", + "defaultValue": false } ], "eventTypes": [ @@ -589,7 +527,7 @@ "name": "buttonName", "displayName": "Button name", "type": "QString", - "possibleValues": ["ON", "OFF", "DIM UP", "DIM DOWN"] + "allowedValues": ["ON", "OFF", "DIM UP", "DIM DOWN"] } ] }, @@ -603,7 +541,78 @@ "name": "buttonName", "displayName": "Button name", "type": "QString", - "possibleValues": ["ON", "OFF", "DIM UP", "DIM DOWN"] + "allowedValues": ["ON", "OFF", "DIM UP", "DIM DOWN"] + } + ] + } + ] + }, + { + "id": "2b8c1fb8-67ee-42e9-947b-16e0a09f0d4e", + "name": "hueTap", + "displayName": "Hue Tap", + "deviceIcon": "Switch", + "interfaces": ["simplemultibutton", "connectable"], + "createMethods": ["auto"], + "paramTypes": [ + { + "id": "3d450f00-b521-4a2c-985f-046fad5122cb", + "name": "name", + "displayName": "name", + "type" : "QString", + "inputType": "TextLine" + }, + { + "id": "62d92175-db3a-4da2-a72b-f58f34cb6911", + "name": "modelId", + "displayName": "model id", + "type" : "QString", + "readOnly": true + }, + { + "id": "eace85b9-5369-466f-89eb-46c4de718305", + "name": "type", + "displayName": "type", + "type" : "QString", + "readOnly": true + }, + { + "id": "25cf4167-6c28-4497-9fa9-3d02faf4f3ed", + "name": "uuid", + "displayName": "uuid", + "type" : "QString", + "readOnly": true + }, + { + "id": "5eca2b24-8986-4487-bc12-50e91d023d97", + "name": "sensorId", + "displayName": "sensor id", + "type" : "int", + "readOnly": true + } + ], + "stateTypes": [ + { + "id": "5e21b032-1230-4e93-8543-0c4773da17d3", + "name": "connected", + "displayName": "reachable", + "displayNameEvent": "reachable changed", + "defaultValue": false, + "type": "bool" + } + ], + "eventTypes": [ + { + "id": "c45dd703-7cbd-48f7-88dc-31045cc3d39c", + "name": "pressed", + "displayName": "Button pressed", + "paramTypes": [ + { + "id": "8ed643c0-1b8a-4709-8abf-717cf213f4a4", + "name": "buttonName", + "displayName": "Button name", + "type": "QString", + "allowedValues": ["•", "••", "•••", "••••"] } ] } diff --git a/philipshue/huebridge.cpp b/philipshue/huebridge.cpp index 53e6d35d..97b1f32f 100644 --- a/philipshue/huebridge.cpp +++ b/philipshue/huebridge.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/philipshue/huebridge.h b/philipshue/huebridge.h index 7a91fd50..3d3df7ae 100644 --- a/philipshue/huebridge.h +++ b/philipshue/huebridge.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/philipshue/huedevice.cpp b/philipshue/huedevice.cpp index cb35a8ae..a0503579 100644 --- a/philipshue/huedevice.cpp +++ b/philipshue/huedevice.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -48,16 +48,6 @@ void HueDevice::setName(const QString &name) m_name = name; } -DeviceId HueDevice::bridgeId() const -{ - return m_bridgeId; -} - -void HueDevice::setBridgeId(const DeviceId &bridgeId) -{ - m_bridgeId = bridgeId; -} - QHostAddress HueDevice::hostAddress() const { return m_hostAddress; diff --git a/philipshue/huedevice.h b/philipshue/huedevice.h index 83dc54bc..94811667 100644 --- a/philipshue/huedevice.h +++ b/philipshue/huedevice.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -29,8 +29,6 @@ #include #include -#include "typeutils.h" - class HueDevice : public QObject { Q_OBJECT @@ -43,9 +41,6 @@ public: QString name() const; void setName(const QString &name); - DeviceId bridgeId() const; - void setBridgeId(const DeviceId &bridgeId); - QHostAddress hostAddress() const; void setHostAddress(const QHostAddress hostAddress); @@ -74,7 +69,6 @@ private: QString m_apiKey; QString m_modelId; QString m_uuid; - DeviceId m_bridgeId; QString m_type; QString m_softwareVersion; diff --git a/philipshue/huelight.cpp b/philipshue/huelight.cpp index 9d0d87e4..7e1a2270 100644 --- a/philipshue/huelight.cpp +++ b/philipshue/huelight.cpp @@ -3,7 +3,7 @@ * Copyright (C) 2014 Michael Zanetti * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/philipshue/huelight.h b/philipshue/huelight.h index da9503ef..1971d237 100644 --- a/philipshue/huelight.h +++ b/philipshue/huelight.h @@ -3,7 +3,7 @@ * Copyright (C) 2014 Michael Zanetti * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/philipshue/hueremote.cpp b/philipshue/hueremote.cpp index 6873e521..4ff69d69 100644 --- a/philipshue/hueremote.cpp +++ b/philipshue/hueremote.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -40,7 +40,13 @@ void HueRemote::setBattery(const int &battery) void HueRemote::updateStates(const QVariantMap &statesMap, const QVariantMap &configMap) { - setReachable(configMap.value("reachable", false).toBool()); + if (configMap.contains("reachable")) { + setReachable(configMap.value("reachable", false).toBool()); + } else { + // Hue Tap doesn't have a reachable property as it's a ultra low power device. Let's mark it reachable by default as we only + // get this response if the bridge is reachable. + setReachable(true); + } setBattery(configMap.value("battery", 0).toInt()); emit stateChanged(); diff --git a/philipshue/hueremote.h b/philipshue/hueremote.h index 5bcae2f3..0ffb6ade 100644 --- a/philipshue/hueremote.h +++ b/philipshue/hueremote.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -44,7 +44,11 @@ public: DimDownLongPressed = 3001, DimDownPressed = 3002, OffLongPressed = 4001, - OffPressed = 4002 + OffPressed = 4002, + TapButton1Pressed = 34, + TapButton2Pressed = 16, + TapButton3Pressed = 17, + TapButton4Pressed = 18 }; explicit HueRemote(QObject *parent = 0); diff --git a/philipshue/pairinginfo.cpp b/philipshue/pairinginfo.cpp index 2a7602e6..24dd9ac7 100644 --- a/philipshue/pairinginfo.cpp +++ b/philipshue/pairinginfo.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/philipshue/pairinginfo.h b/philipshue/pairinginfo.h index 86bf1364..17931120 100644 --- a/philipshue/pairinginfo.h +++ b/philipshue/pairinginfo.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/philipshue/philipshue.pro b/philipshue/philipshue.pro index 895096a4..aa095613 100644 --- a/philipshue/philipshue.pro +++ b/philipshue/philipshue.pro @@ -1,6 +1,6 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_devicepluginphilipshue) +TARGET = $$qtLibraryTarget(nymea_devicepluginphilipshue) QT += network diff --git a/philipshue/translations/5f2e634b-b7f3-48ee-976a-b5ae22aa5c55-de_DE.ts b/philipshue/translations/5f2e634b-b7f3-48ee-976a-b5ae22aa5c55-de_DE.ts index 02565e24..8eeeae9b 100644 --- a/philipshue/translations/5f2e634b-b7f3-48ee-976a-b5ae22aa5c55-de_DE.ts +++ b/philipshue/translations/5f2e634b-b7f3-48ee-976a-b5ae22aa5c55-de_DE.ts @@ -4,28 +4,29 @@ PhilipsHue - + Philips The name of the vendor (0ae1e001-2aa6-47ed-b8c0-334c3728a68f) Philips - + Please press the button on the Hue Bridge within 30 seconds before you continue The pairing info of deviceClass hueBridge Bitte drücken sie den Knopf auf der Hue Bridge innerhalb von 30 Sekunden bevor sie fortfahren - + Hue gateway The name of the DeviceClass (642aa4c7-19aa-45ed-ba06-aa1ae6c9edf7) Hue Gateway - - - - + + + + + name The name of the paramType (275b76f2-0174-4f26-b3ec-5f108baf8bdd) of hueBridge ---------- @@ -33,182 +34,154 @@ The name of the paramType (0d71522c-08c0-4a66-bb5e-e31eb2dd41e5) of hueLight ---------- The name of the paramType (0d71522c-08c0-4a66-bb5e-e31eb2dd41e5) of hueWhiteLight ---------- -The name of the paramType (0d71522c-08c0-4a66-bb5e-e31eb2dd41e5) of hueRemote +The name of the paramType (0d71522c-08c0-4a66-bb5e-e31eb2dd41e5) of hueRemote +---------- +The name of the paramType (3d450f00-b521-4a2c-985f-046fad5122cb) of hueTap Name - - - - + api key - The name of the paramType (8bf5776a-d5a6-4600-8b27-481f0d803a8f) of hueBridge ----------- -The name of the paramType (99458d90-d171-4600-ba08-4818a4aaed68) of hueLight ----------- -The name of the paramType (99458d90-d171-4600-ba08-4818a4aaed68) of hueWhiteLight ----------- -The name of the paramType (99458d90-d171-4600-ba08-4818a4aaed68) of hueRemote + The name of the paramType (8bf5776a-d5a6-4600-8b27-481f0d803a8f) of hueBridge API Schlüssel - - - - + host address - The name of the paramType (1845975b-1184-4440-bc0d-73d53a9f683c) of hueBridge ----------- -The name of the paramType (56d14f2f-1b20-4004-a333-87ac09fa54d2) of hueLight ----------- -The name of the paramType (56d14f2f-1b20-4004-a333-87ac09fa54d2) of hueWhiteLight ----------- -The name of the paramType (56d14f2f-1b20-4004-a333-87ac09fa54d2) of hueRemote + The name of the paramType (1845975b-1184-4440-bc0d-73d53a9f683c) of hueBridge Adresse - + mac address The name of the paramType (2c67203d-a308-45ec-9a08-fc4183c06ff8) of hueBridge MAC Adresse - + id The name of the paramType (a496feb0-3b7b-46cb-a63a-e063447d6b1d) of hueBridge ID - + + software version - The name of the paramType (ea228c4d-975c-4b43-9445-7c9a907c29d6) of hueBridge + The name of the paramType (ea228c4d-975c-4b43-9445-7c9a907c29d6) of hueBridge +---------- +The name of the ParamType of the autocreated EventType (4c707b18-6604-4e6d-b6bc-4e27769c2adc) of DeviceClass hueBridge Software Version - + zigbee channel The name of the paramType (53170394-956c-4511-b3a8-2c8a502ef1ed) of hueBridge Zigbee Kanal - - - - + + + + + reachable changed The name of the autocreated EventType (15794d26-fde8-4a61-8f83-d7830534975f) ---------- -The name of the autocreated EventType (19bb8d10-1b28-4ba3-99b7-a634138dcfde) +The name of the autocreated EventType (19bb8d10-1b28-4ba3-99b7-a634138dcfde) +---------- +The name of the autocreated EventType (5e21b032-1230-4e93-8543-0c4773da17d3) Erreichbarkeit geändert - - - - - connected - The name of the ParamType of StateType (15794d26-fde8-4a61-8f83-d7830534975f) of DeviceClass hueBridge ----------- -The name of the ParamType of StateType (19bb8d10-1b28-4ba3-99b7-a634138dcfde) of DeviceClass hueLight ----------- -The name of the ParamType of StateType (19bb8d10-1b28-4ba3-99b7-a634138dcfde) of DeviceClass hueWhiteLight ----------- -The name of the ParamType of StateType (19bb8d10-1b28-4ba3-99b7-a634138dcfde) of DeviceClass hueRemote - - - - + api version changed The name of the autocreated EventType (7a230e89-c4ce-4276-90e0-6a9ddb890603) API Version geändert - + software version changed The name of the autocreated EventType (4c707b18-6604-4e6d-b6bc-4e27769c2adc) Software Version geändert - + update status changed The name of the autocreated EventType (16a126f3-0cef-4931-bb2b-9e1b49bec7fc) Update Status geändert - + search devices The name of the ActionType cca3f171-6318-44e7-a2ac-d841857c1c24 of deviceClass hueBridge Suche Geräte - + check updates The name of the ActionType 07a85e91-d064-4bce-b017-13fd0c320c0b of deviceClass hueBridge Suche Updates - + Upgrade bridge The name of the ActionType 6dfbc7c0-7372-42f6-82ba-e777cb32dc4c of deviceClass hueBridge Bridge updaten - + Hue Light The name of the DeviceClass (0edba26c-96ab-44fb-a6a2-c0574d19630e) Hue Licht - - - - bridge - The name of the paramType (33b01ab8-3811-4a06-ab3c-0a0ef2faa3ef) of hueLight ----------- -The name of the paramType (33b01ab8-3811-4a06-ab3c-0a0ef2faa3ef) of hueWhiteLight ----------- -The name of the paramType (33b01ab8-3811-4a06-ab3c-0a0ef2faa3ef) of hueRemote - Bridge - - - - - + + + + model id The name of the paramType (095a463b-f59e-46b1-989a-a71f9cbe3e30) of hueLight ---------- The name of the paramType (095a463b-f59e-46b1-989a-a71f9cbe3e30) of hueWhiteLight ---------- -The name of the paramType (095a463b-f59e-46b1-989a-a71f9cbe3e30) of hueRemote +The name of the paramType (095a463b-f59e-46b1-989a-a71f9cbe3e30) of hueRemote +---------- +The name of the paramType (62d92175-db3a-4da2-a72b-f58f34cb6911) of hueTap Model ID - - - + + + + type The name of the paramType (3f3467ef-4483-4eb9-bcae-84e628322f84) of hueLight ---------- The name of the paramType (3f3467ef-4483-4eb9-bcae-84e628322f84) of hueWhiteLight ---------- -The name of the paramType (3f3467ef-4483-4eb9-bcae-84e628322f84) of hueRemote +The name of the paramType (3f3467ef-4483-4eb9-bcae-84e628322f84) of hueRemote +---------- +The name of the paramType (eace85b9-5369-466f-89eb-46c4de718305) of hueTap Typ - - - + + + + uuid The name of the paramType (1a5129ca-006c-446c-9f2e-79b065de715f) of hueLight ---------- The name of the paramType (1a5129ca-006c-446c-9f2e-79b065de715f) of hueWhiteLight ---------- -The name of the paramType (1a5129ca-006c-446c-9f2e-79b065de715f) of hueRemote +The name of the paramType (1a5129ca-006c-446c-9f2e-79b065de715f) of hueRemote +---------- +The name of the paramType (25cf4167-6c28-4497-9fa9-3d02faf4f3ed) of hueTap UUID - - + + light id The name of the paramType (491dc012-ccf2-4d3a-9f18-add98f7374af) of hueLight ---------- @@ -216,149 +189,200 @@ The name of the paramType (491dc012-ccf2-4d3a-9f18-add98f7374af) of hueWhiteLigh Licht ID - - + + power changed The name of the autocreated EventType (90aaffe5-6a76-47d2-a14a-550f60390245) Eingeschaltet geändert - - + + + + power - The name of the ParamType of StateType (90aaffe5-6a76-47d2-a14a-550f60390245) of DeviceClass hueLight + The name of the ParamType of the autocreated EventType (90aaffe5-6a76-47d2-a14a-550f60390245) of DeviceClass hueLight ---------- -The name of the ParamType of StateType (90aaffe5-6a76-47d2-a14a-550f60390245) of DeviceClass hueWhiteLight +The name of the autocreated ParamType of the writable StateType (90aaffe5-6a76-47d2-a14a-550f60390245) of DeviceClass hueLight +---------- +The name of the ParamType of the autocreated EventType (90aaffe5-6a76-47d2-a14a-550f60390245) of DeviceClass hueWhiteLight +---------- +The name of the autocreated ParamType of the writable StateType (90aaffe5-6a76-47d2-a14a-550f60390245) of DeviceClass hueWhiteLight - - + + Set power The name of the autocreated ActionType (90aaffe5-6a76-47d2-a14a-550f60390245) Einschalten - + color temperature changed The name of the autocreated EventType (c0f4206f-f219-4f06-93c4-4ca515a56f79) Lichtfarben Temperatur geändert - - colorTemperature - The name of the ParamType of StateType (c0f4206f-f219-4f06-93c4-4ca515a56f79) of DeviceClass hueLight - - - - + Set color temperature The name of the autocreated ActionType (c0f4206f-f219-4f06-93c4-4ca515a56f79) Setze Lichtfarben Temperatur - + color changed The name of the autocreated EventType (d25423e7-b924-4b20-80b6-77eecc65d089) Farbe geändert - + + color - The name of the ParamType of StateType (d25423e7-b924-4b20-80b6-77eecc65d089) of DeviceClass hueLight + The name of the ParamType of the autocreated EventType (d25423e7-b924-4b20-80b6-77eecc65d089) of DeviceClass hueLight +---------- +The name of the autocreated ParamType of the writable StateType (d25423e7-b924-4b20-80b6-77eecc65d089) of DeviceClass hueLight - + Set color The name of the autocreated ActionType (d25423e7-b924-4b20-80b6-77eecc65d089) Setze Farbe - - + + brightness changed The name of the autocreated EventType (90e91f64-a208-468c-a5a2-7f47e08859e2) Helligkeit geändert - - + + + + brightness - The name of the ParamType of StateType (90e91f64-a208-468c-a5a2-7f47e08859e2) of DeviceClass hueLight + The name of the ParamType of the autocreated EventType (90e91f64-a208-468c-a5a2-7f47e08859e2) of DeviceClass hueLight ---------- -The name of the ParamType of StateType (90e91f64-a208-468c-a5a2-7f47e08859e2) of DeviceClass hueWhiteLight +The name of the autocreated ParamType of the writable StateType (90e91f64-a208-468c-a5a2-7f47e08859e2) of DeviceClass hueLight +---------- +The name of the ParamType of the autocreated EventType (90e91f64-a208-468c-a5a2-7f47e08859e2) of DeviceClass hueWhiteLight +---------- +The name of the autocreated ParamType of the writable StateType (90e91f64-a208-468c-a5a2-7f47e08859e2) of DeviceClass hueWhiteLight - + Set brigtness The name of the autocreated ActionType (90e91f64-a208-468c-a5a2-7f47e08859e2) Setze Helligkeit - + effect changed The name of the autocreated EventType (0b7cdd8d-4db8-4183-abe2-f3c01d1c9afc) Licht Effekt geändert - + + battery critical changed + The name of the autocreated EventType (f8516899-6312-4110-bb97-70ffa81dc530) + + + + + Button pressed - The name of the EventType 8da28cf1-2457-451e-953e-2685f8daeda8 of deviceClass hueRemote + The name of the EventType 8da28cf1-2457-451e-953e-2685f8daeda8 of deviceClass hueRemote +---------- +The name of the EventType c45dd703-7cbd-48f7-88dc-31045cc3d39c of deviceClass hueTap - + + Button name - The name of the paramType (e4e3eb3a-a7c4-49e3-9344-0b3f213e0b42) of hueRemote + The name of the paramType (e4e3eb3a-a7c4-49e3-9344-0b3f213e0b42) of hueRemote +---------- +The name of the paramType (8ed643c0-1b8a-4709-8abf-717cf213f4a4) of hueTap - + Button longpressed The name of the EventType 2c64561b-2381-4769-8e21-0e206c84bbcc of deviceClass hueRemote - - PhilipsHue + + Hue Tap + The name of the DeviceClass (2b8c1fb8-67ee-42e9-947b-16e0a09f0d4e) + + + + + Philips Hue The name of the plugin PhilipsHue (5f2e634b-b7f3-48ee-976a-b5ae22aa5c55) - - - apiVersion - The name of the ParamType of StateType (7a230e89-c4ce-4276-90e0-6a9ddb890603) of DeviceClass hueBridge - - - softwareVersion - The name of the ParamType of StateType (4c707b18-6604-4e6d-b6bc-4e27769c2adc) of DeviceClass hueBridge + + + + + reachable + The name of the ParamType of the autocreated EventType (15794d26-fde8-4a61-8f83-d7830534975f) of DeviceClass hueBridge +---------- +The name of the ParamType of the autocreated EventType (19bb8d10-1b28-4ba3-99b7-a634138dcfde) of DeviceClass hueLight +---------- +The name of the ParamType of the autocreated EventType (19bb8d10-1b28-4ba3-99b7-a634138dcfde) of DeviceClass hueWhiteLight +---------- +The name of the ParamType of the autocreated EventType (19bb8d10-1b28-4ba3-99b7-a634138dcfde) of DeviceClass hueRemote +---------- +The name of the ParamType of the autocreated EventType (5e21b032-1230-4e93-8543-0c4773da17d3) of DeviceClass hueTap - updateStatus - The name of the ParamType of StateType (16a126f3-0cef-4931-bb2b-9e1b49bec7fc) of DeviceClass hueBridge + api version + The name of the ParamType of the autocreated EventType (7a230e89-c4ce-4276-90e0-6a9ddb890603) of DeviceClass hueBridge - - hueEffect - The name of the ParamType of StateType (0b7cdd8d-4db8-4183-abe2-f3c01d1c9afc) of DeviceClass hueLight + + update status + The name of the ParamType of the autocreated EventType (16a126f3-0cef-4931-bb2b-9e1b49bec7fc) of DeviceClass hueBridge - + + + color temperature + The name of the ParamType of the autocreated EventType (c0f4206f-f219-4f06-93c4-4ca515a56f79) of DeviceClass hueLight +---------- +The name of the autocreated ParamType of the writable StateType (c0f4206f-f219-4f06-93c4-4ca515a56f79) of DeviceClass hueLight + + + + + + effect + The name of the ParamType of the autocreated EventType (0b7cdd8d-4db8-4183-abe2-f3c01d1c9afc) of DeviceClass hueLight +---------- +The name of the autocreated ParamType of the writable StateType (0b7cdd8d-4db8-4183-abe2-f3c01d1c9afc) of DeviceClass hueLight + + + + Set effect The name of the autocreated ActionType (0b7cdd8d-4db8-4183-abe2-f3c01d1c9afc) Setze Licht Effekt - - + + flash The name of the ActionType d25dcfbc-d28c-4905-80e3-300ffb1248f5 of deviceClass hueLight ---------- @@ -366,8 +390,8 @@ The name of the ActionType d25dcfbc-d28c-4905-80e3-300ffb1248f5 of deviceClass h Aufleuchten - - + + alert The name of the paramType (8ace6f8c-b2c7-4d0d-a407-52a54ad0ab05) of hueLight ---------- @@ -375,85 +399,94 @@ The name of the paramType (8ace6f8c-b2c7-4d0d-a407-52a54ad0ab05) of hueWhiteLigh Alarm - + Hue White Light The name of the DeviceClass (4fa568ef-7a3a-422b-b0c0-206d37cb4eed) Hue Weißlicht - + Set brightness The name of the autocreated ActionType (90e91f64-a208-468c-a5a2-7f47e08859e2) - + Hue Remote The name of the DeviceClass (bb482d39-67ef-46dc-88e9-7b181d642b28) Hue Fernbedienung - + + sensor id - The name of the paramType (2ddb571b-149f-4f08-a76a-78b7d3aa27e0) of hueRemote + The name of the paramType (2ddb571b-149f-4f08-a76a-78b7d3aa27e0) of hueRemote +---------- +The name of the paramType (5eca2b24-8986-4487-bc12-50e91d023d97) of hueTap Sensor ID - + battery changed The name of the autocreated EventType (683e493a-9796-4d5e-b0e3-61cb178d5819) Batterie geändert - + battery - The name of the ParamType of StateType (683e493a-9796-4d5e-b0e3-61cb178d5819) of DeviceClass hueRemote - Batterie + The name of the ParamType of the autocreated EventType (683e493a-9796-4d5e-b0e3-61cb178d5819) of DeviceClass hueRemote + - + + battery critical + The name of the ParamType of the autocreated EventType (f8516899-6312-4110-bb97-70ffa81dc530) of DeviceClass hueRemote + + + + on pressed The name of the EventType de769db0-4c31-46cf-9760-dbc6f9209c26 of deviceClass hueRemote Wenn gedrückt - + on long pressed The name of the EventType 6c5e596b-7c15-40bb-af9d-c778a6b0f30e of deviceClass hueRemote Wenn lange gedrückt - + dim up pressed The name of the EventType 8e3d6a62-6a19-4e9a-a25b-e1da2e56ede9 of deviceClass hueRemote Hochdimmen - + dim up long pressed The name of the EventType 53d3c9af-3e25-4116-b22b-38d897bc20aa of deviceClass hueRemote Runterdimmen - + dim down pressed The name of the EventType efd8b972-9a37-43f2-b9bc-f9dfe144a96d of deviceClass hueRemote Runter dimmen gedrückt - + dim down long pressed The name of the EventType 1986d4c6-4c9f-4e43-ba70-0ff06c6f177b of deviceClass hueRemote Runter dimmen lange gedrückt - + off pressed The name of the EventType 7c2a58f1-137c-4bf3-8f9e-453dff020487 of deviceClass hueRemote Aus gedrückt - + off long pressed The name of the EventType d69306eb-ea52-4841-9e26-89c69e9cf6fc of deviceClass hueRemote Aus lange gedrückt diff --git a/philipshue/translations/5f2e634b-b7f3-48ee-976a-b5ae22aa5c55-en_US.ts b/philipshue/translations/5f2e634b-b7f3-48ee-976a-b5ae22aa5c55-en_US.ts index 21cb3bb4..65291eee 100644 --- a/philipshue/translations/5f2e634b-b7f3-48ee-976a-b5ae22aa5c55-en_US.ts +++ b/philipshue/translations/5f2e634b-b7f3-48ee-976a-b5ae22aa5c55-en_US.ts @@ -4,28 +4,29 @@ PhilipsHue - + Philips The name of the vendor (0ae1e001-2aa6-47ed-b8c0-334c3728a68f) - + Please press the button on the Hue Bridge within 30 seconds before you continue The pairing info of deviceClass hueBridge - + Hue gateway The name of the DeviceClass (642aa4c7-19aa-45ed-ba06-aa1ae6c9edf7) - - - - + + + + + name The name of the paramType (275b76f2-0174-4f26-b3ec-5f108baf8bdd) of hueBridge ---------- @@ -33,182 +34,154 @@ The name of the paramType (0d71522c-08c0-4a66-bb5e-e31eb2dd41e5) of hueLight ---------- The name of the paramType (0d71522c-08c0-4a66-bb5e-e31eb2dd41e5) of hueWhiteLight ---------- -The name of the paramType (0d71522c-08c0-4a66-bb5e-e31eb2dd41e5) of hueRemote +The name of the paramType (0d71522c-08c0-4a66-bb5e-e31eb2dd41e5) of hueRemote +---------- +The name of the paramType (3d450f00-b521-4a2c-985f-046fad5122cb) of hueTap - - - - + api key - The name of the paramType (8bf5776a-d5a6-4600-8b27-481f0d803a8f) of hueBridge ----------- -The name of the paramType (99458d90-d171-4600-ba08-4818a4aaed68) of hueLight ----------- -The name of the paramType (99458d90-d171-4600-ba08-4818a4aaed68) of hueWhiteLight ----------- -The name of the paramType (99458d90-d171-4600-ba08-4818a4aaed68) of hueRemote + The name of the paramType (8bf5776a-d5a6-4600-8b27-481f0d803a8f) of hueBridge - - - - + host address - The name of the paramType (1845975b-1184-4440-bc0d-73d53a9f683c) of hueBridge ----------- -The name of the paramType (56d14f2f-1b20-4004-a333-87ac09fa54d2) of hueLight ----------- -The name of the paramType (56d14f2f-1b20-4004-a333-87ac09fa54d2) of hueWhiteLight ----------- -The name of the paramType (56d14f2f-1b20-4004-a333-87ac09fa54d2) of hueRemote + The name of the paramType (1845975b-1184-4440-bc0d-73d53a9f683c) of hueBridge - + mac address The name of the paramType (2c67203d-a308-45ec-9a08-fc4183c06ff8) of hueBridge - + id The name of the paramType (a496feb0-3b7b-46cb-a63a-e063447d6b1d) of hueBridge - + + software version - The name of the paramType (ea228c4d-975c-4b43-9445-7c9a907c29d6) of hueBridge + The name of the paramType (ea228c4d-975c-4b43-9445-7c9a907c29d6) of hueBridge +---------- +The name of the ParamType of the autocreated EventType (4c707b18-6604-4e6d-b6bc-4e27769c2adc) of DeviceClass hueBridge - + zigbee channel The name of the paramType (53170394-956c-4511-b3a8-2c8a502ef1ed) of hueBridge - - - - + + + + + reachable changed The name of the autocreated EventType (15794d26-fde8-4a61-8f83-d7830534975f) ---------- -The name of the autocreated EventType (19bb8d10-1b28-4ba3-99b7-a634138dcfde) +The name of the autocreated EventType (19bb8d10-1b28-4ba3-99b7-a634138dcfde) +---------- +The name of the autocreated EventType (5e21b032-1230-4e93-8543-0c4773da17d3) - - - - - connected - The name of the ParamType of StateType (15794d26-fde8-4a61-8f83-d7830534975f) of DeviceClass hueBridge ----------- -The name of the ParamType of StateType (19bb8d10-1b28-4ba3-99b7-a634138dcfde) of DeviceClass hueLight ----------- -The name of the ParamType of StateType (19bb8d10-1b28-4ba3-99b7-a634138dcfde) of DeviceClass hueWhiteLight ----------- -The name of the ParamType of StateType (19bb8d10-1b28-4ba3-99b7-a634138dcfde) of DeviceClass hueRemote - - - - + api version changed The name of the autocreated EventType (7a230e89-c4ce-4276-90e0-6a9ddb890603) - + software version changed The name of the autocreated EventType (4c707b18-6604-4e6d-b6bc-4e27769c2adc) - + update status changed The name of the autocreated EventType (16a126f3-0cef-4931-bb2b-9e1b49bec7fc) - + search devices The name of the ActionType cca3f171-6318-44e7-a2ac-d841857c1c24 of deviceClass hueBridge - + check updates The name of the ActionType 07a85e91-d064-4bce-b017-13fd0c320c0b of deviceClass hueBridge - + Upgrade bridge The name of the ActionType 6dfbc7c0-7372-42f6-82ba-e777cb32dc4c of deviceClass hueBridge - + Hue Light The name of the DeviceClass (0edba26c-96ab-44fb-a6a2-c0574d19630e) - - - - bridge - The name of the paramType (33b01ab8-3811-4a06-ab3c-0a0ef2faa3ef) of hueLight ----------- -The name of the paramType (33b01ab8-3811-4a06-ab3c-0a0ef2faa3ef) of hueWhiteLight ----------- -The name of the paramType (33b01ab8-3811-4a06-ab3c-0a0ef2faa3ef) of hueRemote - - - - - - + + + + model id The name of the paramType (095a463b-f59e-46b1-989a-a71f9cbe3e30) of hueLight ---------- The name of the paramType (095a463b-f59e-46b1-989a-a71f9cbe3e30) of hueWhiteLight ---------- -The name of the paramType (095a463b-f59e-46b1-989a-a71f9cbe3e30) of hueRemote +The name of the paramType (095a463b-f59e-46b1-989a-a71f9cbe3e30) of hueRemote +---------- +The name of the paramType (62d92175-db3a-4da2-a72b-f58f34cb6911) of hueTap - - - + + + + type The name of the paramType (3f3467ef-4483-4eb9-bcae-84e628322f84) of hueLight ---------- The name of the paramType (3f3467ef-4483-4eb9-bcae-84e628322f84) of hueWhiteLight ---------- -The name of the paramType (3f3467ef-4483-4eb9-bcae-84e628322f84) of hueRemote +The name of the paramType (3f3467ef-4483-4eb9-bcae-84e628322f84) of hueRemote +---------- +The name of the paramType (eace85b9-5369-466f-89eb-46c4de718305) of hueTap - - - + + + + uuid The name of the paramType (1a5129ca-006c-446c-9f2e-79b065de715f) of hueLight ---------- The name of the paramType (1a5129ca-006c-446c-9f2e-79b065de715f) of hueWhiteLight ---------- -The name of the paramType (1a5129ca-006c-446c-9f2e-79b065de715f) of hueRemote +The name of the paramType (1a5129ca-006c-446c-9f2e-79b065de715f) of hueRemote +---------- +The name of the paramType (25cf4167-6c28-4497-9fa9-3d02faf4f3ed) of hueTap - - + + light id The name of the paramType (491dc012-ccf2-4d3a-9f18-add98f7374af) of hueLight ---------- @@ -216,149 +189,200 @@ The name of the paramType (491dc012-ccf2-4d3a-9f18-add98f7374af) of hueWhiteLigh - - + + power changed The name of the autocreated EventType (90aaffe5-6a76-47d2-a14a-550f60390245) - - + + + + power - The name of the ParamType of StateType (90aaffe5-6a76-47d2-a14a-550f60390245) of DeviceClass hueLight + The name of the ParamType of the autocreated EventType (90aaffe5-6a76-47d2-a14a-550f60390245) of DeviceClass hueLight ---------- -The name of the ParamType of StateType (90aaffe5-6a76-47d2-a14a-550f60390245) of DeviceClass hueWhiteLight +The name of the autocreated ParamType of the writable StateType (90aaffe5-6a76-47d2-a14a-550f60390245) of DeviceClass hueLight +---------- +The name of the ParamType of the autocreated EventType (90aaffe5-6a76-47d2-a14a-550f60390245) of DeviceClass hueWhiteLight +---------- +The name of the autocreated ParamType of the writable StateType (90aaffe5-6a76-47d2-a14a-550f60390245) of DeviceClass hueWhiteLight - - + + Set power The name of the autocreated ActionType (90aaffe5-6a76-47d2-a14a-550f60390245) - + color temperature changed The name of the autocreated EventType (c0f4206f-f219-4f06-93c4-4ca515a56f79) - - colorTemperature - The name of the ParamType of StateType (c0f4206f-f219-4f06-93c4-4ca515a56f79) of DeviceClass hueLight - - - - + Set color temperature The name of the autocreated ActionType (c0f4206f-f219-4f06-93c4-4ca515a56f79) - + color changed The name of the autocreated EventType (d25423e7-b924-4b20-80b6-77eecc65d089) - + + color - The name of the ParamType of StateType (d25423e7-b924-4b20-80b6-77eecc65d089) of DeviceClass hueLight + The name of the ParamType of the autocreated EventType (d25423e7-b924-4b20-80b6-77eecc65d089) of DeviceClass hueLight +---------- +The name of the autocreated ParamType of the writable StateType (d25423e7-b924-4b20-80b6-77eecc65d089) of DeviceClass hueLight - + Set color The name of the autocreated ActionType (d25423e7-b924-4b20-80b6-77eecc65d089) - - + + brightness changed The name of the autocreated EventType (90e91f64-a208-468c-a5a2-7f47e08859e2) - - + + + + brightness - The name of the ParamType of StateType (90e91f64-a208-468c-a5a2-7f47e08859e2) of DeviceClass hueLight + The name of the ParamType of the autocreated EventType (90e91f64-a208-468c-a5a2-7f47e08859e2) of DeviceClass hueLight ---------- -The name of the ParamType of StateType (90e91f64-a208-468c-a5a2-7f47e08859e2) of DeviceClass hueWhiteLight +The name of the autocreated ParamType of the writable StateType (90e91f64-a208-468c-a5a2-7f47e08859e2) of DeviceClass hueLight +---------- +The name of the ParamType of the autocreated EventType (90e91f64-a208-468c-a5a2-7f47e08859e2) of DeviceClass hueWhiteLight +---------- +The name of the autocreated ParamType of the writable StateType (90e91f64-a208-468c-a5a2-7f47e08859e2) of DeviceClass hueWhiteLight - + Set brigtness The name of the autocreated ActionType (90e91f64-a208-468c-a5a2-7f47e08859e2) - + effect changed The name of the autocreated EventType (0b7cdd8d-4db8-4183-abe2-f3c01d1c9afc) - + + battery critical changed + The name of the autocreated EventType (f8516899-6312-4110-bb97-70ffa81dc530) + + + + + Button pressed - The name of the EventType 8da28cf1-2457-451e-953e-2685f8daeda8 of deviceClass hueRemote + The name of the EventType 8da28cf1-2457-451e-953e-2685f8daeda8 of deviceClass hueRemote +---------- +The name of the EventType c45dd703-7cbd-48f7-88dc-31045cc3d39c of deviceClass hueTap - + + Button name - The name of the paramType (e4e3eb3a-a7c4-49e3-9344-0b3f213e0b42) of hueRemote + The name of the paramType (e4e3eb3a-a7c4-49e3-9344-0b3f213e0b42) of hueRemote +---------- +The name of the paramType (8ed643c0-1b8a-4709-8abf-717cf213f4a4) of hueTap - + Button longpressed The name of the EventType 2c64561b-2381-4769-8e21-0e206c84bbcc of deviceClass hueRemote - - PhilipsHue + + Hue Tap + The name of the DeviceClass (2b8c1fb8-67ee-42e9-947b-16e0a09f0d4e) + + + + + Philips Hue The name of the plugin PhilipsHue (5f2e634b-b7f3-48ee-976a-b5ae22aa5c55) - - - apiVersion - The name of the ParamType of StateType (7a230e89-c4ce-4276-90e0-6a9ddb890603) of DeviceClass hueBridge - - - softwareVersion - The name of the ParamType of StateType (4c707b18-6604-4e6d-b6bc-4e27769c2adc) of DeviceClass hueBridge + + + + + reachable + The name of the ParamType of the autocreated EventType (15794d26-fde8-4a61-8f83-d7830534975f) of DeviceClass hueBridge +---------- +The name of the ParamType of the autocreated EventType (19bb8d10-1b28-4ba3-99b7-a634138dcfde) of DeviceClass hueLight +---------- +The name of the ParamType of the autocreated EventType (19bb8d10-1b28-4ba3-99b7-a634138dcfde) of DeviceClass hueWhiteLight +---------- +The name of the ParamType of the autocreated EventType (19bb8d10-1b28-4ba3-99b7-a634138dcfde) of DeviceClass hueRemote +---------- +The name of the ParamType of the autocreated EventType (5e21b032-1230-4e93-8543-0c4773da17d3) of DeviceClass hueTap - updateStatus - The name of the ParamType of StateType (16a126f3-0cef-4931-bb2b-9e1b49bec7fc) of DeviceClass hueBridge + api version + The name of the ParamType of the autocreated EventType (7a230e89-c4ce-4276-90e0-6a9ddb890603) of DeviceClass hueBridge - - hueEffect - The name of the ParamType of StateType (0b7cdd8d-4db8-4183-abe2-f3c01d1c9afc) of DeviceClass hueLight + + update status + The name of the ParamType of the autocreated EventType (16a126f3-0cef-4931-bb2b-9e1b49bec7fc) of DeviceClass hueBridge - + + + color temperature + The name of the ParamType of the autocreated EventType (c0f4206f-f219-4f06-93c4-4ca515a56f79) of DeviceClass hueLight +---------- +The name of the autocreated ParamType of the writable StateType (c0f4206f-f219-4f06-93c4-4ca515a56f79) of DeviceClass hueLight + + + + + + effect + The name of the ParamType of the autocreated EventType (0b7cdd8d-4db8-4183-abe2-f3c01d1c9afc) of DeviceClass hueLight +---------- +The name of the autocreated ParamType of the writable StateType (0b7cdd8d-4db8-4183-abe2-f3c01d1c9afc) of DeviceClass hueLight + + + + Set effect The name of the autocreated ActionType (0b7cdd8d-4db8-4183-abe2-f3c01d1c9afc) - - + + flash The name of the ActionType d25dcfbc-d28c-4905-80e3-300ffb1248f5 of deviceClass hueLight ---------- @@ -366,8 +390,8 @@ The name of the ActionType d25dcfbc-d28c-4905-80e3-300ffb1248f5 of deviceClass h - - + + alert The name of the paramType (8ace6f8c-b2c7-4d0d-a407-52a54ad0ab05) of hueLight ---------- @@ -375,85 +399,94 @@ The name of the paramType (8ace6f8c-b2c7-4d0d-a407-52a54ad0ab05) of hueWhiteLigh - + Hue White Light The name of the DeviceClass (4fa568ef-7a3a-422b-b0c0-206d37cb4eed) - + Set brightness The name of the autocreated ActionType (90e91f64-a208-468c-a5a2-7f47e08859e2) - + Hue Remote The name of the DeviceClass (bb482d39-67ef-46dc-88e9-7b181d642b28) - + + sensor id - The name of the paramType (2ddb571b-149f-4f08-a76a-78b7d3aa27e0) of hueRemote + The name of the paramType (2ddb571b-149f-4f08-a76a-78b7d3aa27e0) of hueRemote +---------- +The name of the paramType (5eca2b24-8986-4487-bc12-50e91d023d97) of hueTap - + battery changed The name of the autocreated EventType (683e493a-9796-4d5e-b0e3-61cb178d5819) - + battery - The name of the ParamType of StateType (683e493a-9796-4d5e-b0e3-61cb178d5819) of DeviceClass hueRemote + The name of the ParamType of the autocreated EventType (683e493a-9796-4d5e-b0e3-61cb178d5819) of DeviceClass hueRemote - + + battery critical + The name of the ParamType of the autocreated EventType (f8516899-6312-4110-bb97-70ffa81dc530) of DeviceClass hueRemote + + + + on pressed The name of the EventType de769db0-4c31-46cf-9760-dbc6f9209c26 of deviceClass hueRemote - + on long pressed The name of the EventType 6c5e596b-7c15-40bb-af9d-c778a6b0f30e of deviceClass hueRemote - + dim up pressed The name of the EventType 8e3d6a62-6a19-4e9a-a25b-e1da2e56ede9 of deviceClass hueRemote - + dim up long pressed The name of the EventType 53d3c9af-3e25-4116-b22b-38d897bc20aa of deviceClass hueRemote - + dim down pressed The name of the EventType efd8b972-9a37-43f2-b9bc-f9dfe144a96d of deviceClass hueRemote - + dim down long pressed The name of the EventType 1986d4c6-4c9f-4e43-ba70-0ff06c6f177b of deviceClass hueRemote - + off pressed The name of the EventType 7c2a58f1-137c-4bf3-8f9e-453dff020487 of deviceClass hueRemote - + off long pressed The name of the EventType d69306eb-ea52-4841-9e26-89c69e9cf6fc of deviceClass hueRemote diff --git a/plantcare/devicepluginplantcare.cpp b/plantcare/devicepluginplantcare.cpp index f15c4aa2..20f09481 100644 --- a/plantcare/devicepluginplantcare.cpp +++ b/plantcare/devicepluginplantcare.cpp @@ -3,7 +3,7 @@ * Copyright (C) 2015 Simon Stürz * * Copyright (C) 2016 Bernhard Trinnes * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -24,12 +24,12 @@ /*! \page plantcare.html \title Plantcare - \brief Plugin for the guh Plantcare example based on 6LoWPAN networking. + \brief Plugin for the nymea Plantcare example based on 6LoWPAN networking. \ingroup plugins - \ingroup guh-plugins-merkur + \ingroup nymea-plugins-merkur - This allows to controll the guh plantcare demo for 6LoWPAN networks. + This allows to control the nymea plantcare demo for 6LoWPAN networks. \chapter Plugin properties Following JSON file contains the definition and the description of all available \l{DeviceClass}{DeviceClasses} @@ -102,7 +102,7 @@ DeviceManager::DeviceError DevicePluginPlantCare::discoverDevices(const DeviceCl Q_UNUSED(params) // Perform a HTTP GET on the RPL router address - QHostAddress address(configuration().paramValue(PlantCareRplParamTypeId).toString()); + QHostAddress address(configuration().paramValue(plantCareRplParamTypeId).toString()); qCDebug(dcPlantCare) << "Scan for new nodes on RPL" << address.toString(); QUrl url; @@ -148,7 +148,7 @@ DeviceManager::DeviceError DevicePluginPlantCare::executeAction(Device *device, return DeviceManager::DeviceErrorAsync; } else if(action.actionTypeId() == plantCareLedPowerActionTypeId) { - int power = action.param(plantCareLedPowerStateParamTypeId).value().toInt(); + int power = action.param(plantCareLedPowerActionParamTypeId).value().toInt(); QUrl url; url.setScheme("coap"); @@ -170,7 +170,7 @@ DeviceManager::DeviceError DevicePluginPlantCare::executeAction(Device *device, return DeviceManager::DeviceErrorAsync; } else if(action.actionTypeId() == plantCareWaterPumpActionTypeId) { - bool pump = action.param(plantCareWaterPumpStateParamTypeId).value().toBool(); + bool pump = action.param(plantCareWaterPumpActionParamTypeId).value().toBool(); QUrl url; url.setScheme("coap"); @@ -517,7 +517,7 @@ void DevicePluginPlantCare::coapReplyFinished(CoapReply *reply) } // Update the state here, so we don't have to wait for the notification - device->setStateValue(plantCareLedPowerStateTypeId, action.param(plantCareLedPowerStateParamTypeId).value().toBool()); + device->setStateValue(plantCareLedPowerStateTypeId, action.param(plantCareLedPowerActionParamTypeId).value().toBool()); // Tell the user about the action execution result emit actionExecutionFinished(action.id(), DeviceManager::DeviceErrorNoError); @@ -543,7 +543,7 @@ void DevicePluginPlantCare::coapReplyFinished(CoapReply *reply) } // Update the state here, so we don't have to wait for the notification - device->setStateValue(plantCareWaterPumpStateTypeId, action.param(plantCareWaterPumpStateParamTypeId).value().toBool()); + device->setStateValue(plantCareWaterPumpStateTypeId, action.param(plantCareWaterPumpActionParamTypeId).value().toBool()); // Tell the user about the action execution result emit actionExecutionFinished(action.id(), DeviceManager::DeviceErrorNoError); diff --git a/plantcare/devicepluginplantcare.h b/plantcare/devicepluginplantcare.h index 2d42b8bb..6df6736e 100644 --- a/plantcare/devicepluginplantcare.h +++ b/plantcare/devicepluginplantcare.h @@ -3,7 +3,7 @@ * Copyright (C) 2015 Simon Stürz * * Copyright (C) 2015 Bernhard Trinnes * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -35,7 +35,7 @@ class DevicePluginPlantCare : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "devicepluginplantcare.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginplantcare.json") Q_INTERFACES(DevicePlugin) public: diff --git a/plantcare/devicepluginplantcare.json b/plantcare/devicepluginplantcare.json index 3c65f2b0..fea5eee9 100644 --- a/plantcare/devicepluginplantcare.json +++ b/plantcare/devicepluginplantcare.json @@ -14,7 +14,7 @@ ], "vendors": [ { - "displayName": "guh", + "displayName": "guh GmbH", "name": "guh", "id": "2062d64d-3232-433c-88bc-0d33c0ba2ba6", "deviceClasses": [ diff --git a/plantcare/plantcare.pro b/plantcare/plantcare.pro index ba9aeebb..7aaaa55e 100644 --- a/plantcare/plantcare.pro +++ b/plantcare/plantcare.pro @@ -1,6 +1,8 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_devicepluginplantcare) +QT += network + +TARGET = $$qtLibraryTarget(nymea_devicepluginplantcare) SOURCES += \ devicepluginplantcare.cpp diff --git a/plantcare/translations/80ea115f-2a9f-49b3-9575-9e36d137c8d6-de_DE.ts b/plantcare/translations/80ea115f-2a9f-49b3-9575-9e36d137c8d6-de_DE.ts index 8935f175..6f4d8596 100644 --- a/plantcare/translations/80ea115f-2a9f-49b3-9575-9e36d137c8d6-de_DE.ts +++ b/plantcare/translations/80ea115f-2a9f-49b3-9575-9e36d137c8d6-de_DE.ts @@ -4,121 +4,124 @@ PlantCare - + + Plant Care - The name of the DeviceClass (3245db46-5c6f-42d6-9001-753150763385) + The name of the plugin PlantCare (80ea115f-2a9f-49b3-9575-9e36d137c8d6) +---------- +The name of the DeviceClass (3245db46-5c6f-42d6-9001-753150763385) - + RPL address - The name of the paramType (138e19bd-a8db-472a-b3a4-f6497ef2e50c) of PlantCare + The name of the paramType (138e19bd-a8db-472a-b3a4-f6497ef2e50c) of plantCare - - PlantCare - The name of the plugin PlantCare (80ea115f-2a9f-49b3-9575-9e36d137c8d6) - - - - - guh - The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) - - - - + host The name of the paramType (7ab5f794-459f-45f5-855e-40a76f494e20) of plantCare - + battery voltage changed The name of the autocreated EventType (2b4b5123-14b7-4aa1-9c83-27cef333395d) - - battery - The name of the ParamType of StateType (2b4b5123-14b7-4aa1-9c83-27cef333395d) of DeviceClass plantCare - - - - - water - The name of the ParamType of StateType (26deeba1-487a-4dee-940a-a3bd48344f33) of DeviceClass plantCare - - - - - ledPower - The name of the ParamType of StateType (819aca98-25e5-4733-81e0-5921478b3e89) of DeviceClass plantCare - - - - - waterPump - The name of the ParamType of StateType (6c65ae32-18ce-400f-afd6-47fb5b805ccd) of DeviceClass plantCare - - - - + moisture changed The name of the autocreated EventType (8a7efda1-b6b7-41c8-ad07-4d892a532d1c) - - moisture - The name of the ParamType of StateType (8a7efda1-b6b7-41c8-ad07-4d892a532d1c) of DeviceClass plantCare + + guh GmbH + The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) - + + battery voltage + The name of the ParamType of the autocreated EventType (2b4b5123-14b7-4aa1-9c83-27cef333395d) of DeviceClass plantCare + + + + + moisture + The name of the ParamType of the autocreated EventType (8a7efda1-b6b7-41c8-ad07-4d892a532d1c) of DeviceClass plantCare + + + + water empty changed The name of the autocreated EventType (26deeba1-487a-4dee-940a-a3bd48344f33) - + + water empty + The name of the ParamType of the autocreated EventType (26deeba1-487a-4dee-940a-a3bd48344f33) of DeviceClass plantCare + + + + led power changed The name of the autocreated EventType (819aca98-25e5-4733-81e0-5921478b3e89) - + + + led power + The name of the ParamType of the autocreated EventType (819aca98-25e5-4733-81e0-5921478b3e89) of DeviceClass plantCare +---------- +The name of the autocreated ParamType of the writable StateType (819aca98-25e5-4733-81e0-5921478b3e89) of DeviceClass plantCare + + + + Set reachable The name of the autocreated ActionType (819aca98-25e5-4733-81e0-5921478b3e89) - + water pump power changed The name of the autocreated EventType (6c65ae32-18ce-400f-afd6-47fb5b805ccd) - + + + water pump power + The name of the ParamType of the autocreated EventType (6c65ae32-18ce-400f-afd6-47fb5b805ccd) of DeviceClass plantCare +---------- +The name of the autocreated ParamType of the writable StateType (6c65ae32-18ce-400f-afd6-47fb5b805ccd) of DeviceClass plantCare + + + + Set water pump power The name of the autocreated ActionType (6c65ae32-18ce-400f-afd6-47fb5b805ccd) - + reachable changed The name of the autocreated EventType (8384e07b-8b91-492a-b6c8-e72b325ba0b4) - + reachable - The name of the ParamType of StateType (8384e07b-8b91-492a-b6c8-e72b325ba0b4) of DeviceClass plantCare + The name of the ParamType of the autocreated EventType (8384e07b-8b91-492a-b6c8-e72b325ba0b4) of DeviceClass plantCare - + toggle led The name of the ActionType 9afbcc80-1c97-4c18-bc08-5209d6297f2e of deviceClass plantCare diff --git a/plantcare/translations/80ea115f-2a9f-49b3-9575-9e36d137c8d6-en_US.ts b/plantcare/translations/80ea115f-2a9f-49b3-9575-9e36d137c8d6-en_US.ts index 713f0a34..04fa1e0a 100644 --- a/plantcare/translations/80ea115f-2a9f-49b3-9575-9e36d137c8d6-en_US.ts +++ b/plantcare/translations/80ea115f-2a9f-49b3-9575-9e36d137c8d6-en_US.ts @@ -4,121 +4,124 @@ PlantCare - + + Plant Care - The name of the DeviceClass (3245db46-5c6f-42d6-9001-753150763385) + The name of the plugin PlantCare (80ea115f-2a9f-49b3-9575-9e36d137c8d6) +---------- +The name of the DeviceClass (3245db46-5c6f-42d6-9001-753150763385) - + RPL address - The name of the paramType (138e19bd-a8db-472a-b3a4-f6497ef2e50c) of PlantCare + The name of the paramType (138e19bd-a8db-472a-b3a4-f6497ef2e50c) of plantCare - - PlantCare - The name of the plugin PlantCare (80ea115f-2a9f-49b3-9575-9e36d137c8d6) - - - - - guh - The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) - - - - + host The name of the paramType (7ab5f794-459f-45f5-855e-40a76f494e20) of plantCare - + battery voltage changed The name of the autocreated EventType (2b4b5123-14b7-4aa1-9c83-27cef333395d) - - battery - The name of the ParamType of StateType (2b4b5123-14b7-4aa1-9c83-27cef333395d) of DeviceClass plantCare - - - - - water - The name of the ParamType of StateType (26deeba1-487a-4dee-940a-a3bd48344f33) of DeviceClass plantCare - - - - - ledPower - The name of the ParamType of StateType (819aca98-25e5-4733-81e0-5921478b3e89) of DeviceClass plantCare - - - - - waterPump - The name of the ParamType of StateType (6c65ae32-18ce-400f-afd6-47fb5b805ccd) of DeviceClass plantCare - - - - + moisture changed The name of the autocreated EventType (8a7efda1-b6b7-41c8-ad07-4d892a532d1c) - - moisture - The name of the ParamType of StateType (8a7efda1-b6b7-41c8-ad07-4d892a532d1c) of DeviceClass plantCare + + guh GmbH + The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) - + + battery voltage + The name of the ParamType of the autocreated EventType (2b4b5123-14b7-4aa1-9c83-27cef333395d) of DeviceClass plantCare + + + + + moisture + The name of the ParamType of the autocreated EventType (8a7efda1-b6b7-41c8-ad07-4d892a532d1c) of DeviceClass plantCare + + + + water empty changed The name of the autocreated EventType (26deeba1-487a-4dee-940a-a3bd48344f33) - + + water empty + The name of the ParamType of the autocreated EventType (26deeba1-487a-4dee-940a-a3bd48344f33) of DeviceClass plantCare + + + + led power changed The name of the autocreated EventType (819aca98-25e5-4733-81e0-5921478b3e89) - + + + led power + The name of the ParamType of the autocreated EventType (819aca98-25e5-4733-81e0-5921478b3e89) of DeviceClass plantCare +---------- +The name of the autocreated ParamType of the writable StateType (819aca98-25e5-4733-81e0-5921478b3e89) of DeviceClass plantCare + + + + Set reachable The name of the autocreated ActionType (819aca98-25e5-4733-81e0-5921478b3e89) - + water pump power changed The name of the autocreated EventType (6c65ae32-18ce-400f-afd6-47fb5b805ccd) - + + + water pump power + The name of the ParamType of the autocreated EventType (6c65ae32-18ce-400f-afd6-47fb5b805ccd) of DeviceClass plantCare +---------- +The name of the autocreated ParamType of the writable StateType (6c65ae32-18ce-400f-afd6-47fb5b805ccd) of DeviceClass plantCare + + + + Set water pump power The name of the autocreated ActionType (6c65ae32-18ce-400f-afd6-47fb5b805ccd) - + reachable changed The name of the autocreated EventType (8384e07b-8b91-492a-b6c8-e72b325ba0b4) - + reachable - The name of the ParamType of StateType (8384e07b-8b91-492a-b6c8-e72b325ba0b4) of DeviceClass plantCare + The name of the ParamType of the autocreated EventType (8384e07b-8b91-492a-b6c8-e72b325ba0b4) of DeviceClass plantCare - + toggle led The name of the ActionType 9afbcc80-1c97-4c18-bc08-5209d6297f2e of deviceClass plantCare diff --git a/plugins.pri b/plugins.pri index 61c98c97..bd7c6f6b 100644 --- a/plugins.pri +++ b/plugins.pri @@ -1,45 +1,56 @@ TEMPLATE = lib CONFIG += plugin -QT += network bluetooth dbus - QMAKE_CXXFLAGS += -Werror -std=c++11 -g QMAKE_LFLAGS += -std=c++11 -INCLUDEPATH += /usr/include/guh -LIBS += -lguh -HEADERS += $${OUT_PWD}/plugininfo.h +INCLUDEPATH += /usr/include/nymea +LIBS += -lnymea +HEADERS += $${OUT_PWD}/plugininfo.h \ + $${OUT_PWD}/extern-plugininfo.h - -PLUGIN_PATH=/usr/lib/$$system('dpkg-architecture -q DEB_HOST_MULTIARCH')/guh/plugins/ +PLUGIN_PATH=/usr/lib/$$system('dpkg-architecture -q DEB_HOST_MULTIARCH')/nymea/plugins/ # Check if this is a snap build snappy{ - INCLUDEPATH+=$$(SNAPCRAFT_STAGE)/usr/include/guh + INCLUDEPATH+=$$(SNAPCRAFT_STAGE)/usr/include/nymea } # Make the device plugin json file visible in the Qt Creator OTHER_FILES+=$$PWD/$${TARGET}/deviceplugin"$$TARGET".json + +# NOTE: if the code includes "plugininfo.h", it would fail if we only give it a compiler for $$OUT_PWD/plugininfo.h +# Let's add a dummy target with the plugininfo.h file without any path to allow the developer to just include it like that. + # Create plugininfo file -plugininfo.commands = guh-generateplugininfo --filetype i --jsonfile $$PWD/$${TARGET}/deviceplugin"$$TARGET".json --output plugininfo.h --builddir $$OUT_PWD; \ - guh-generateplugininfo --filetype e --jsonfile $$PWD/$${TARGET}/deviceplugin"$$TARGET".json --output extern-plugininfo.h --builddir $$OUT_PWD; +plugininfo.target = $$OUT_PWD/plugininfo.h +plugininfo_dummy.target = plugininfo.h plugininfo.depends = FORCE -QMAKE_EXTRA_TARGETS += plugininfo -PRE_TARGETDEPS += plugininfo +plugininfo.commands = nymea-generateplugininfo --filetype i --jsonfile $$PWD/$${TARGET}/deviceplugin"$$TARGET".json --output plugininfo.h --builddir $$OUT_PWD +plugininfo_dummy.commands = $$plugininfo.commands +QMAKE_EXTRA_TARGETS += plugininfo plugininfo_dummy + +# Create extern-plugininfo file +extern_plugininfo.target = $$OUT_PWD/extern-plugininfo.h +extern_plugininfo_dummy.target = extern-plugininfo.h +extern_plugininfo.depends = FORCE +extern_plugininfo.commands = nymea-generateplugininfo --filetype e --jsonfile $$PWD/$${TARGET}/deviceplugin"$$TARGET".json --output extern-plugininfo.h --builddir $$OUT_PWD +extern_plugininfo_dummy.commands = $$extern_plugininfo.commands +QMAKE_EXTRA_TARGETS += extern_plugininfo extern_plugininfo_dummy # Install translation files TRANSLATIONS *= $$files($${PWD}/$${TARGET}/translations/*ts, true) lupdate.depends = FORCE -lupdate.depends += plugininfo +lupdate.depends += plugininfo.h lupdate.commands = lupdate -recursive -no-obsolete $$PWD/"$$TARGET"/"$$TARGET".pro; QMAKE_EXTRA_TARGETS += lupdate -translations.path = /usr/share/guh/translations +translations.path = /usr/share/nymea/translations translations.files = $$[QT_SOURCE_TREE]/translations/*.qm +TRANSLATIONS += $$files($$[QT_SOURCE_TREE]/translations/*.ts, true) # Install plugin target.path = $$PLUGIN_PATH -target.depends += plugininfo INSTALLS += target translations diff --git a/pushbullet/devicepluginpushbullet.cpp b/pushbullet/devicepluginpushbullet.cpp index 41adbe6b..4eeef069 100644 --- a/pushbullet/devicepluginpushbullet.cpp +++ b/pushbullet/devicepluginpushbullet.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2016 Alexander Lampret * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/pushbullet/devicepluginpushbullet.h b/pushbullet/devicepluginpushbullet.h index 59658add..262fbc33 100644 --- a/pushbullet/devicepluginpushbullet.h +++ b/pushbullet/devicepluginpushbullet.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2016 Alexander Lampret * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -34,7 +34,7 @@ class DevicePluginPushbullet: public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "devicepluginpushbullet.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginpushbullet.json") Q_INTERFACES(DevicePlugin) public: diff --git a/pushbullet/pushbullet.pro b/pushbullet/pushbullet.pro index 3da24b11..609659c3 100644 --- a/pushbullet/pushbullet.pro +++ b/pushbullet/pushbullet.pro @@ -1,6 +1,6 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_devicepluginpushbullet) +TARGET = $$qtLibraryTarget(nymea_devicepluginpushbullet) QT += network diff --git a/remotessh/devicepluginremotessh.cpp b/remotessh/devicepluginremotessh.cpp new file mode 100644 index 00000000..f7bcd370 --- /dev/null +++ b/remotessh/devicepluginremotessh.cpp @@ -0,0 +1,205 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2017 Bernhard Trinnes * + * Copyright (C) 2018 Simon Stürz * + * * + * This file is part of nymea. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Lesser General Public * + * License as published by the Free Software Foundation; either * + * version 2.1 of the License, or (at your option) any later version. * + * * + * This library 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 library; If not, see * + * . * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#include "devicepluginremotessh.h" +#include "plugininfo.h" + +#include +#include + +DevicePluginRemoteSsh::DevicePluginRemoteSsh() +{ + +} + +void DevicePluginRemoteSsh::init() +{ + m_pluginTimer = hardwareManager()->pluginTimerManager()->registerTimer(10); + connect(m_pluginTimer, &PluginTimer::timeout, this, &DevicePluginRemoteSsh::onPluginTimeout); +} + +DeviceManager::DeviceSetupStatus DevicePluginRemoteSsh::setupDevice(Device *device) +{ + qCDebug(dcRemoteSsh()) << "Setup" << device->name() << device->params(); + + if (device->deviceClassId() == reverseSshDeviceClassId) { + m_identityFilePath = QString("%1/.ssh/id_rsa_guh").arg(QDir::homePath()); + return DeviceManager::DeviceSetupStatusSuccess; + } + return DeviceManager::DeviceSetupStatusFailure; +} + +DeviceManager::DeviceError DevicePluginRemoteSsh::executeAction(Device *device, const Action &action) +{ + if (device->deviceClassId() == reverseSshDeviceClassId ) { + + if (action.actionTypeId() == reverseSshConnectedActionTypeId) { + + if (action.param(reverseSshConnectedActionParamTypeId).value().toBool() == true) { + QProcess *process = startReverseSSHProcess(device); + m_reverseSSHProcess.insert(process, device); + m_startingProcess.insert(process, action.id()); + return DeviceManager::DeviceErrorAsync; + } else { + QProcess *process = m_reverseSSHProcess.key(device); + + // Check if the application is running... + if (!process) + return DeviceManager::DeviceErrorNoError; + + if (process->state() == QProcess::NotRunning) + return DeviceManager::DeviceErrorNoError; + + process->kill(); + m_killingProcess.insert(process, action.id()); + return DeviceManager::DeviceErrorAsync; + } + return DeviceManager::DeviceErrorNoError; + } + return DeviceManager::DeviceErrorActionTypeNotFound; + } + return DeviceManager::DeviceErrorDeviceClassNotFound; +} + + +void DevicePluginRemoteSsh::deviceRemoved(Device *device) +{ + if (device->deviceClassId() == reverseSshDeviceClassId) { + QProcess *process = m_reverseSSHProcess.key(device); + if (!process) + return; + + m_reverseSSHProcess.remove(process); + if (process->state() != QProcess::NotRunning) { + process->kill(); + } + process->deleteLater(); + } +} + +void DevicePluginRemoteSsh::processReadyRead() +{ + QByteArray data = static_cast(sender())->readAll(); + qCWarning(dcRemoteSsh()) << "process read" << data; +} + + +QProcess * DevicePluginRemoteSsh::startReverseSSHProcess(Device *device) +{ + qCDebug(dcRemoteSsh()) << "Start reverse SSH"; + QProcess *process = new QProcess(this); + process->setProcessChannelMode(QProcess::MergedChannels); + + connect(process, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(processFinished(int,QProcess::ExitStatus))); + connect(process, &QProcess::stateChanged, this, &DevicePluginRemoteSsh::processStateChanged); + connect(process, &QProcess::readyRead, this, &DevicePluginRemoteSsh::processReadyRead); + + QStringList arguments; + int localPort = device->paramValue(reverseSshLocalPortParamTypeId).toInt(); + int remotePort = device->paramValue(reverseSshRemotePortParamTypeId).toInt(); + QString user = device->paramValue(reverseSshUserParamTypeId).toString(); + QString password = device->paramValue(reverseSshPasswordParamTypeId).toString(); + QString address = device->paramValue(reverseSshAddressParamTypeId).toString(); + + arguments << "-p" << password; + arguments << "ssh" << "-o StrictHostKeyChecking=no" << "-oUserKnownHostsFile=/dev/null"; + arguments << "-TN" << "-R" << QString("%1:localhost:%2").arg(remotePort).arg(localPort) << QString("%1@%2").arg(user, address); + process->start(QStringLiteral("sshpass"), arguments); + qCDebug(dcRemoteSsh()) << "Command:" << process->program() << process->arguments(); + return process; +} + +void DevicePluginRemoteSsh::onPluginTimeout() +{ + foreach(QProcess *process, m_reverseSSHProcess.keys()) { + if (process->state() == QProcess::NotRunning) + qCDebug(dcRemoteSsh()) << "SSH Process not running"; + } +} + + +void DevicePluginRemoteSsh::processFinished(int exitCode, QProcess::ExitStatus exitStatus) +{ + Q_UNUSED(exitCode); + QProcess *process = static_cast(sender()); + + if(exitStatus != QProcess::NormalExit || exitCode != 0) { + qCWarning(dcRemoteSsh()) << "Error:" << process->readAllStandardError(); + } + + if (m_reverseSSHProcess.contains(process)) { + qCDebug(dcRemoteSsh()) << "SSH process finished"; + Device *device = m_reverseSSHProcess.value(process); + device->setStateValue(reverseSshConnectedStateTypeId, false); + m_reverseSSHProcess.remove(process); + + } else if (m_sshKeyGenProcess.contains(process)) { + qCDebug(dcRemoteSsh()) << "SSH Key generation process finished" << process->readAll(); + Device *device = m_sshKeyGenProcess.value(process); + QFile file(QString(m_identityFilePath + ".pub")); + if(!file.open(QIODevice::ReadOnly)) + qCWarning(dcRemoteSsh()) << "error" << file.errorString(); + + QTextStream in(&file); + QString sshKey = in.readLine(); + device->setStateValue(reverseSshSshKeyStateTypeId, sshKey); + process->kill(); + m_sshKeyGenProcess.remove(process); + file.close(); + } +} + + +void DevicePluginRemoteSsh::processStateChanged(QProcess::ProcessState state) +{ + QProcess *process = static_cast(sender()); + Device *device = m_reverseSSHProcess.value(process); + + switch (state) { + case QProcess::Running: + device->setStateValue(reverseSshConnectedStateTypeId, true); + if (m_startingProcess.contains(process)) { + emit actionExecutionFinished(m_startingProcess.value(process), DeviceManager::DeviceErrorNoError); + m_startingProcess.remove(process); + } + break; + + case QProcess::NotRunning: + if (device) + device->setStateValue(reverseSshConnectedStateTypeId, false); + + if (m_startingProcess.contains(process)) { + emit actionExecutionFinished(m_startingProcess.value(process), DeviceManager::DeviceErrorInvalidParameter); + m_startingProcess.remove(process); + } + + if (m_killingProcess.contains(process)) { + emit actionExecutionFinished(m_killingProcess.value(process), DeviceManager::DeviceErrorNoError); + m_reverseSSHProcess.remove(process); + m_killingProcess.remove(process); + } + break; + default: + break; + } +} diff --git a/remotessh/devicepluginremotessh.h b/remotessh/devicepluginremotessh.h new file mode 100644 index 00000000..87f646a8 --- /dev/null +++ b/remotessh/devicepluginremotessh.h @@ -0,0 +1,68 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2017 Bernhard Trinnes * + * Copyright (C) 2018 Simon Stürz * + * * + * This file is part of nymea. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Lesser General Public * + * License as published by the Free Software Foundation; either * + * version 2.1 of the License, or (at your option) any later version. * + * * + * This library 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 library; If not, see * + * . * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#ifndef DEVICEPLUGINREMOTESSH_H +#define DEVICEPLUGINREMOTESSH_H + +#include "plugintimer.h" +#include "plugin/deviceplugin.h" + +#include + +class DevicePluginRemoteSsh : public DevicePlugin +{ + Q_OBJECT + + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginremotessh.json") + Q_INTERFACES(DevicePlugin) + +public: + explicit DevicePluginRemoteSsh(); + + void init() override; + DeviceManager::DeviceSetupStatus setupDevice(Device *device) override; + void deviceRemoved(Device *device) override; + DeviceManager::DeviceError executeAction(Device *device, const Action &action) override; + +private: + QHash m_reverseSSHProcess; + QHash m_sshKeyGenProcess; + + QHash m_startingProcess; + QHash m_killingProcess; + + PluginTimer *m_pluginTimer = nullptr; + + bool m_aboutToQuit = false; + QString m_identityFilePath; + + QProcess *startReverseSSHProcess(Device *device); + +private slots: + void onPluginTimeout(); + void processReadyRead(); + void processStateChanged(QProcess::ProcessState state); + void processFinished(int exitCode, QProcess::ExitStatus exitStatus); +}; + +#endif // DEVICEPLUGINREMOTESSH_H diff --git a/remotessh/devicepluginremotessh.json b/remotessh/devicepluginremotessh.json new file mode 100644 index 00000000..a20bb652 --- /dev/null +++ b/remotessh/devicepluginremotessh.json @@ -0,0 +1,94 @@ +{ + "id": "cd75d899-3f53-43fa-9ee8-f6b36646a27d", + "name": "RemoteSsh", + "displayName": "Remote SSH", + "vendors": [ + { + "id": "e87ad7b1-1705-46b1-a962-282126646b4d", + "name": "remoteAccess", + "displayName": "Remote Access", + "deviceClasses": [ + { + "id": "a4f12741-4f30-40ca-a319-7f15e9c0c43a", + "name": "reverseSsh", + "displayName": "Reverse SSH", + "deviceIcon": "Network", + "createMethods": ["user"], + "basicTags": ["Service"], + "interfaces": ["connectable"], + "paramTypes": [ + { + "id": "92747d75-d18a-4915-bd48-0edd5cc5f19a", + "name": "address", + "displayName": "Address", + "type": "QString", + "inputType": "IPv4Address", + "defaultValue": "127.0.0.1" + }, + { + "id": "7f7aa198-c719-415e-b31c-7a676b9d8e01", + "name": "localPort", + "displayName": "Local Port", + "type": "int", + "defaultValue": 22 + }, + { + "id": "988aec42-1026-4aef-85d1-329ee1a34208", + "name": "remotePort", + "displayName": "Remote Port", + "type": "int", + "defaultValue": 2022 + }, + { + "id": "c675f7ea-f94a-46e9-bf0f-92682182d6dd", + "name": "user", + "displayName": "User Name", + "type": "QString", + "inputType": "TextLine", + "defaultValue": "Enter your user" + }, + { + "id": "d8cc7177-bf35-4394-ab7b-881184bd8c8b", + "name": "password", + "displayName": "Password", + "type": "QString", + "inputType": "TextLine", + "defaultValue": "Enter your password" + } + ], + "stateTypes":[ + { + "id": "19f079f0-1654-44c3-ab10-e7d7f9742e09", + "name": "reachable", + "displayName": "Server Reachable", + "displayNameEvent": "reachable status changed", + "type": "bool", + "defaultValue": true + }, + { + "id": "1ae425b2-d642-42ca-be41-4d06dff5c5cd", + "name": "connected", + "displayName": "Connected", + "type": "bool", + "defaultValue": false, + "displayNameEvent": "Connected changed", + "displayNameAction": "Connect to Server", + "writable": true + }, + { + "id": "d8bb619e-6602-4c89-8654-85e111520561", + "name": "sshKey", + "displayName": "SSH public key", + "displayNameEvent": "SSH key changed", + "type": "QString", + "defaultValue": "-" + } + ] + } + ] + } + ] +} + + + diff --git a/remotessh/remotessh.pro b/remotessh/remotessh.pro new file mode 100644 index 00000000..390f2eea --- /dev/null +++ b/remotessh/remotessh.pro @@ -0,0 +1,10 @@ +include(../plugins.pri) + +TARGET = $$qtLibraryTarget(nymea_devicepluginremotessh) + +SOURCES += \ + devicepluginremotessh.cpp \ + +HEADERS += \ + devicepluginremotessh.h \ + diff --git a/remotessh/translations/cd75d899-3f53-43fa-9ee8-f6b36646a27d-en_US.ts b/remotessh/translations/cd75d899-3f53-43fa-9ee8-f6b36646a27d-en_US.ts new file mode 100644 index 00000000..b92a12b9 --- /dev/null +++ b/remotessh/translations/cd75d899-3f53-43fa-9ee8-f6b36646a27d-en_US.ts @@ -0,0 +1,84 @@ + + + + + RemoteSsh + + Remote Access + The name of the vendor (e87ad7b1-1705-46b1-a962-282126646b4d) + + + + Reverse SSH + The name of the DeviceClass (a4f12741-4f30-40ca-a319-7f15e9c0c43a) + + + + Address + The name of the paramType (92747d75-d18a-4915-bd48-0edd5cc5f19a) of reverseSsh + + + + Local Port + The name of the paramType (7f7aa198-c719-415e-b31c-7a676b9d8e01) of reverseSsh + + + + Remote Port + The name of the paramType (988aec42-1026-4aef-85d1-329ee1a34208) of reverseSsh + + + + User Name + The name of the paramType (c675f7ea-f94a-46e9-bf0f-92682182d6dd) of reverseSsh + + + + Password + The name of the paramType (d8cc7177-bf35-4394-ab7b-881184bd8c8b) of reverseSsh + + + + reachable status changed + The name of the autocreated EventType (19f079f0-1654-44c3-ab10-e7d7f9742e09) + + + + Connected changed + The name of the autocreated EventType (1ae425b2-d642-42ca-be41-4d06dff5c5cd) + + + + Connect to Server + The name of the autocreated ActionType (1ae425b2-d642-42ca-be41-4d06dff5c5cd) + + + + SSH key changed + The name of the autocreated EventType (d8bb619e-6602-4c89-8654-85e111520561) + + + + Remote SSH + The name of the plugin RemoteSsh (cd75d899-3f53-43fa-9ee8-f6b36646a27d) + + + + Server Reachable + The name of the ParamType of the autocreated EventType (19f079f0-1654-44c3-ab10-e7d7f9742e09) of DeviceClass reverseSsh + + + + Connected + The name of the ParamType of the autocreated EventType (1ae425b2-d642-42ca-be41-4d06dff5c5cd) of DeviceClass reverseSsh +---------- +The name of the autocreated ParamType of the writable StateType (1ae425b2-d642-42ca-be41-4d06dff5c5cd) of DeviceClass reverseSsh + + + + SSH public key + The name of the ParamType of the autocreated EventType (d8bb619e-6602-4c89-8654-85e111520561) of DeviceClass reverseSsh + + + + diff --git a/senic/devicepluginsenic.cpp b/senic/devicepluginsenic.cpp index f5bebf37..e06c0aaf 100644 --- a/senic/devicepluginsenic.cpp +++ b/senic/devicepluginsenic.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2016-2018 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -26,7 +26,7 @@ \brief Plugin for Senic Nuimo. \ingroup plugins - \ingroup guh-plugins + \ingroup nymea-plugins \chapter Plugin properties Following JSON file contains the definition and the description of all available \l{DeviceClass}{DeviceClasses} diff --git a/senic/devicepluginsenic.h b/senic/devicepluginsenic.h index 493faf53..78ae69e7 100644 --- a/senic/devicepluginsenic.h +++ b/senic/devicepluginsenic.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2016-2018 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -33,7 +33,7 @@ class DevicePluginSenic : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "devicepluginsenic.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginsenic.json") Q_INTERFACES(DevicePlugin) public: diff --git a/senic/nuimo.cpp b/senic/nuimo.cpp index beabdb38..a5e87745 100644 --- a/senic/nuimo.cpp +++ b/senic/nuimo.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2016-2018 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -213,8 +213,8 @@ void Nuimo::printService(QLowEnergyService *service) { foreach (const QLowEnergyCharacteristic &characteristic, service->characteristics()) { qCDebug(dcSenic()) << " -->" << characteristic.name() << characteristic.uuid().toString() << characteristic.value(); - foreach (const QLowEnergyDescriptor &desciptor, characteristic.descriptors()) { - qCDebug(dcSenic()) << " -->" << desciptor.name() << desciptor.uuid().toString() << desciptor.value(); + foreach (const QLowEnergyDescriptor &descriptor, characteristic.descriptors()) { + qCDebug(dcSenic()) << " -->" << descriptor.name() << descriptor.uuid().toString() << descriptor.value(); } } } diff --git a/senic/nuimo.h b/senic/nuimo.h index e2858257..fa2f6135 100644 --- a/senic/nuimo.h +++ b/senic/nuimo.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2016-2018 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/senic/senic.pro b/senic/senic.pro index 21e679f3..0a67b16b 100644 --- a/senic/senic.pro +++ b/senic/senic.pro @@ -1,6 +1,8 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_devicepluginsenic) +QT += bluetooth + +TARGET = $$qtLibraryTarget(nymea_devicepluginsenic) SOURCES += \ devicepluginsenic.cpp \ diff --git a/senic/translations/413e9d77-335f-4ecf-abbc-8f2a8a399c39-de_DE.ts b/senic/translations/413e9d77-335f-4ecf-abbc-8f2a8a399c39-de_DE.ts index e5ea2c5f..721b5456 100644 --- a/senic/translations/413e9d77-335f-4ecf-abbc-8f2a8a399c39-de_DE.ts +++ b/senic/translations/413e9d77-335f-4ecf-abbc-8f2a8a399c39-de_DE.ts @@ -30,36 +30,12 @@ The name of the vendor (8e6cae9c-706b-49e5-ae86-da52a20dd336) The name of the paramType (71553f6a-2ed4-4896-bb7b-52e7dca948b2) of nuimo - - - connected - The name of the ParamType of StateType (5286976a-f5dc-4662-872a-438ac5d491cb) of DeviceClass nuimo - - Hardware revision changed The name of the autocreated EventType (5c400da4-a14e-4e0a-be9f-c82ffe7e1972) - - - hardwareRevision - The name of the ParamType of StateType (5c400da4-a14e-4e0a-be9f-c82ffe7e1972) of DeviceClass nuimo - - - - - firmwareRevision - The name of the ParamType of StateType (edcf76c6-9fed-4c26-9853-c284cf887adb) of DeviceClass nuimo - - - - - softwareRevision - The name of the ParamType of StateType (be42cbd3-12e9-44ec-8f9d-141e10d9573a) of DeviceClass nuimo - - battery changed @@ -69,7 +45,7 @@ The name of the vendor (8e6cae9c-706b-49e5-ae86-da52a20dd336) battery - The name of the ParamType of StateType (b5ee2465-7fa1-450b-8073-f115537d3409) of DeviceClass nuimo + The name of the ParamType of the autocreated EventType (b5ee2465-7fa1-450b-8073-f115537d3409) of DeviceClass nuimo @@ -81,7 +57,7 @@ The name of the vendor (8e6cae9c-706b-49e5-ae86-da52a20dd336) rotation - The name of the ParamType of StateType (69a5f495-5452-434b-8fb8-b73d992c5446) of DeviceClass nuimo + The name of the ParamType of the autocreated EventType (69a5f495-5452-434b-8fb8-b73d992c5446) of DeviceClass nuimo @@ -90,18 +66,42 @@ The name of the vendor (8e6cae9c-706b-49e5-ae86-da52a20dd336) The name of the autocreated EventType (5286976a-f5dc-4662-872a-438ac5d491cb) + + + Connected + The name of the ParamType of the autocreated EventType (5286976a-f5dc-4662-872a-438ac5d491cb) of DeviceClass nuimo + + + + + Hardware revision + The name of the ParamType of the autocreated EventType (5c400da4-a14e-4e0a-be9f-c82ffe7e1972) of DeviceClass nuimo + + Firmware revision changed The name of the autocreated EventType (edcf76c6-9fed-4c26-9853-c284cf887adb) + + + Firmware revision + The name of the ParamType of the autocreated EventType (edcf76c6-9fed-4c26-9853-c284cf887adb) of DeviceClass nuimo + + Software revision changed The name of the autocreated EventType (be42cbd3-12e9-44ec-8f9d-141e10d9573a) + + + Software revision + The name of the ParamType of the autocreated EventType (be42cbd3-12e9-44ec-8f9d-141e10d9573a) of DeviceClass nuimo + + Show logo diff --git a/senic/translations/413e9d77-335f-4ecf-abbc-8f2a8a399c39-en_US.ts b/senic/translations/413e9d77-335f-4ecf-abbc-8f2a8a399c39-en_US.ts index fd628f9a..a82f1b94 100644 --- a/senic/translations/413e9d77-335f-4ecf-abbc-8f2a8a399c39-en_US.ts +++ b/senic/translations/413e9d77-335f-4ecf-abbc-8f2a8a399c39-en_US.ts @@ -30,36 +30,12 @@ The name of the vendor (8e6cae9c-706b-49e5-ae86-da52a20dd336) The name of the paramType (71553f6a-2ed4-4896-bb7b-52e7dca948b2) of nuimo - - - connected - The name of the ParamType of StateType (5286976a-f5dc-4662-872a-438ac5d491cb) of DeviceClass nuimo - - Hardware revision changed The name of the autocreated EventType (5c400da4-a14e-4e0a-be9f-c82ffe7e1972) - - - hardwareRevision - The name of the ParamType of StateType (5c400da4-a14e-4e0a-be9f-c82ffe7e1972) of DeviceClass nuimo - - - - - firmwareRevision - The name of the ParamType of StateType (edcf76c6-9fed-4c26-9853-c284cf887adb) of DeviceClass nuimo - - - - - softwareRevision - The name of the ParamType of StateType (be42cbd3-12e9-44ec-8f9d-141e10d9573a) of DeviceClass nuimo - - battery changed @@ -69,7 +45,7 @@ The name of the vendor (8e6cae9c-706b-49e5-ae86-da52a20dd336) battery - The name of the ParamType of StateType (b5ee2465-7fa1-450b-8073-f115537d3409) of DeviceClass nuimo + The name of the ParamType of the autocreated EventType (b5ee2465-7fa1-450b-8073-f115537d3409) of DeviceClass nuimo @@ -81,7 +57,7 @@ The name of the vendor (8e6cae9c-706b-49e5-ae86-da52a20dd336) rotation - The name of the ParamType of StateType (69a5f495-5452-434b-8fb8-b73d992c5446) of DeviceClass nuimo + The name of the ParamType of the autocreated EventType (69a5f495-5452-434b-8fb8-b73d992c5446) of DeviceClass nuimo @@ -90,18 +66,42 @@ The name of the vendor (8e6cae9c-706b-49e5-ae86-da52a20dd336) The name of the autocreated EventType (5286976a-f5dc-4662-872a-438ac5d491cb) + + + Connected + The name of the ParamType of the autocreated EventType (5286976a-f5dc-4662-872a-438ac5d491cb) of DeviceClass nuimo + + + + + Hardware revision + The name of the ParamType of the autocreated EventType (5c400da4-a14e-4e0a-be9f-c82ffe7e1972) of DeviceClass nuimo + + Firmware revision changed The name of the autocreated EventType (edcf76c6-9fed-4c26-9853-c284cf887adb) + + + Firmware revision + The name of the ParamType of the autocreated EventType (edcf76c6-9fed-4c26-9853-c284cf887adb) of DeviceClass nuimo + + Software revision changed The name of the autocreated EventType (be42cbd3-12e9-44ec-8f9d-141e10d9573a) + + + Software revision + The name of the ParamType of the autocreated EventType (be42cbd3-12e9-44ec-8f9d-141e10d9573a) of DeviceClass nuimo + + Show logo diff --git a/simulation/devicepluginsimulation.cpp b/simulation/devicepluginsimulation.cpp index ed38b7e8..2b9a008e 100644 --- a/simulation/devicepluginsimulation.cpp +++ b/simulation/devicepluginsimulation.cpp @@ -3,57 +3,69 @@ * Copyright (C) 2017 Bernhard Trinnes * * Copyright (C) 2018 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * - * Guh is free software: you can redistribute it and/or modify * + * nymea 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, * + * nymea 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 . * + * along with nymea. If not, see . * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "devicepluginsimulation.h" #include "plugininfo.h" +#include +#include DevicePluginSimulation::DevicePluginSimulation() { } +DevicePluginSimulation::~DevicePluginSimulation() +{ + hardwareManager()->pluginTimerManager()->unregisterTimer(m_pluginTimer20Seconds); + hardwareManager()->pluginTimerManager()->unregisterTimer(m_pluginTimer5Min); +} + void DevicePluginSimulation::init() { - m_pluginTimer = hardwareManager()->pluginTimerManager()->registerTimer(10); - connect(m_pluginTimer, &PluginTimer::timeout, this, &DevicePluginSimulation::onPluginTimer); + // Seed the random generator with current time + qsrand(QDateTime::currentMSecsSinceEpoch() / 1000); + + // Change some values every 20 seconds + m_pluginTimer20Seconds = hardwareManager()->pluginTimerManager()->registerTimer(20); + connect(m_pluginTimer20Seconds, &PluginTimer::timeout, this, &DevicePluginSimulation::onPluginTimer20Seconds); + + // Change some values every 5 min + m_pluginTimer5Min = hardwareManager()->pluginTimerManager()->registerTimer(300); + connect(m_pluginTimer5Min, &PluginTimer::timeout, this, &DevicePluginSimulation::onPluginTimer5Minutes); } DeviceManager::DeviceSetupStatus DevicePluginSimulation::setupDevice(Device *device) { - Q_UNUSED(device) - qCDebug(dcSimulation) << device->params(); - + qCDebug(dcSimulation()) << "Set up device" << device->name(); return DeviceManager::DeviceSetupStatusSuccess; } - DeviceManager::DeviceError DevicePluginSimulation::executeAction(Device *device, const Action &action) { - // Check the DeviceClassId for "Simple Button" if (device->deviceClassId() == simpleButtonDeviceClassId ) { // check if this is the "press" action if (action.actionTypeId() == simpleButtonTriggerActionTypeId) { - // Emit the "button pressed" event + qCDebug(dcSimulation()) << "Emit button pressed event for" << device->name(); Event event(simpleButtonPressedEventTypeId, device->id()); emit emitEvent(event); @@ -69,11 +81,10 @@ DeviceManager::DeviceError DevicePluginSimulation::executeAction(Device *device, if (action.actionTypeId() == alternativeButtonPowerActionTypeId) { // get the param value - Param powerParam = action.param(alternativeButtonPowerStateParamTypeId); + Param powerParam = action.param(alternativeButtonPowerActionParamTypeId); bool power = powerParam.value().toBool(); - qCDebug(dcSimulation) << "ActionTypeId :" << action.actionTypeId().toString(); - qCDebug(dcSimulation) << "StateTypeId :" << alternativeButtonPowerStateTypeId.toString(); + qCDebug(dcSimulation()) << "Set power" << power << "for button" << device->name(); // Set the "power" state device->setStateValue(alternativeButtonPowerStateTypeId, power); @@ -89,19 +100,20 @@ DeviceManager::DeviceError DevicePluginSimulation::executeAction(Device *device, if (action.actionTypeId() == heatingPowerActionTypeId) { // get the param value - Param powerParam = action.param(heatingPowerStateParamTypeId); + Param powerParam = action.param(heatingPowerActionParamTypeId); bool power = powerParam.value().toBool(); - // Set the "power" state + qCDebug(dcSimulation()) << "Set power" << power << "for heating device" << device->name(); device->setStateValue(heatingPowerStateTypeId, power); return DeviceManager::DeviceErrorNoError; } else if (action.actionTypeId() == heatingTargetTemperatureActionTypeId) { // get the param value - Param temperatureParam = action.param(heatingTargetTemperatureStateParamTypeId); + Param temperatureParam = action.param(heatingTargetTemperatureActionParamTypeId); int temperature = temperatureParam.value().toInt(); - // Set the "temperature" state + qCDebug(dcSimulation()) << "Set target temperature" << temperature << "for heating device" << device->name(); + device->setStateValue(heatingTargetTemperatureStateTypeId, temperature); return DeviceManager::DeviceErrorNoError; } @@ -112,17 +124,19 @@ DeviceManager::DeviceError DevicePluginSimulation::executeAction(Device *device, if (action.actionTypeId() == evChargerPowerActionTypeId){ // get the param value - Param powerParam = action.param(evChargerPowerStateParamTypeId); + Param powerParam = action.param(evChargerPowerActionParamTypeId); bool power = powerParam.value().toBool(); - // Set the "power" state + + qCDebug(dcSimulation()) << "Set power" << power << "for heating device" << device->name(); + device->setStateValue(evChargerPowerStateTypeId, power); return DeviceManager::DeviceErrorNoError; } else if(action.actionTypeId() == evChargerCurrentActionTypeId){ // get the param value - Param currentParam = action.param(evChargerCurrentStateParamTypeId); + Param currentParam = action.param(evChargerCurrentActionParamTypeId); int current = currentParam.value().toInt(); - // Set the "current" state + qCDebug(dcSimulation()) << "Set current" << current << "for EV Charger device" << device->name(); device->setStateValue(evChargerCurrentStateTypeId, current); return DeviceManager::DeviceErrorNoError; } @@ -133,9 +147,10 @@ DeviceManager::DeviceError DevicePluginSimulation::executeAction(Device *device, if(action.actionTypeId() == socketPowerActionTypeId){ // get the param value - Param powerParam = action.param(socketPowerStateParamTypeId); + Param powerParam = action.param(socketPowerActionParamTypeId); bool power = powerParam.value().toBool(); // Set the "power" state + qCDebug(dcSimulation()) << "Set power" << power << "for socket device" << device->name(); device->setStateValue(socketPowerStateTypeId, power); return DeviceManager::DeviceErrorNoError; } @@ -145,22 +160,26 @@ DeviceManager::DeviceError DevicePluginSimulation::executeAction(Device *device, if(device->deviceClassId() == colorBulbDeviceClassId){ if(action.actionTypeId() == colorBulbBrightnessActionTypeId){ - int brightness = action.param(colorBulbBrightnessStateParamTypeId).value().toInt(); + int brightness = action.param(colorBulbBrightnessActionParamTypeId).value().toInt(); + qCDebug(dcSimulation()) << "Set brightness" << brightness << "for color bulb device" << device->name(); device->setStateValue(colorBulbBrightnessStateTypeId, brightness); return DeviceManager::DeviceErrorNoError; } else if (action.actionTypeId() == colorBulbColorTemperatureActionTypeId){ - int temperature = action.param(colorBulbColorTemperatureStateParamTypeId).value().toInt(); + int temperature = action.param(colorBulbColorTemperatureActionParamTypeId).value().toInt(); + qCDebug(dcSimulation()) << "Set color temperature" << temperature << "for color bulb device" << device->name(); device->setStateValue(colorBulbColorTemperatureStateTypeId, temperature); return DeviceManager::DeviceErrorNoError; } else if (action.actionTypeId() == colorBulbColorActionTypeId) { - QVariant color = action.param(colorBulbColorStateParamTypeId).value(); + QColor color = action.param(colorBulbColorActionParamTypeId).value().value(); + qCDebug(dcSimulation()) << "Set color" << color << "for color bulb device" << device->name(); device->setStateValue(colorBulbColorStateTypeId, color); return DeviceManager::DeviceErrorNoError; } else if (action.actionTypeId() == colorBulbPowerActionTypeId) { - bool power = action.param(colorBulbPowerStateParamTypeId).value().toBool(); + bool power = action.param(colorBulbPowerActionParamTypeId).value().toBool(); + qCDebug(dcSimulation()) << "Set power" << power << "for color bulb device" << device->name(); device->setStateValue(colorBulbPowerStateTypeId, power); return DeviceManager::DeviceErrorNoError; } @@ -171,15 +190,18 @@ DeviceManager::DeviceError DevicePluginSimulation::executeAction(Device *device, if (device->deviceClassId() == heatingRodDeviceClassId) { if (action.actionTypeId() == heatingRodPowerActionTypeId) { - bool power = action.param(heatingRodPowerStateParamTypeId).value().toBool(); + bool power = action.param(heatingRodPowerActionParamTypeId).value().toBool(); + qCDebug(dcSimulation()) << "Set power" << power << "for heating rod device" << device->name(); device->setStateValue(heatingRodPowerStateTypeId, power); return DeviceManager::DeviceErrorNoError; } else if (action.actionTypeId() == heatingRodWaterTemperatureActionTypeId) { - int temperature = action.param(heatingRodWaterTemperatureStateParamTypeId).value().toInt(); + int temperature = action.param(heatingRodWaterTemperatureActionParamTypeId).value().toInt(); + qCDebug(dcSimulation()) << "Set water temperature" << temperature << "for heating rod device" << device->name(); device->setStateValue(heatingRodWaterTemperatureStateTypeId, temperature); return DeviceManager::DeviceErrorNoError; } else if (action.actionTypeId() == heatingRodMaxPowerActionTypeId) { - double maxPower = action.param(heatingRodMaxPowerStateParamTypeId).value().toDouble(); + double maxPower = action.param(heatingRodMaxPowerActionParamTypeId).value().toDouble(); + qCDebug(dcSimulation()) << "Set max power" << maxPower << "for heating rod device" << device->name(); device->setStateValue(heatingRodMaxPowerStateTypeId, maxPower); return DeviceManager::DeviceErrorNoError; } @@ -189,9 +211,19 @@ DeviceManager::DeviceError DevicePluginSimulation::executeAction(Device *device, if (device->deviceClassId() == batteryDeviceClassId) { if (action.actionTypeId() == batteryMaxChargingActionTypeId) { - int maxCharging = action.param(batteryMaxChargingStateParamTypeId).value().toInt(); + int maxCharging = action.param(batteryMaxChargingActionParamTypeId).value().toInt(); device->setStateValue(batteryMaxChargingStateTypeId, maxCharging); - device->setStateValue(batteryChargingStateTypeId, ((double)maxCharging-10)/1000); + qCDebug(dcSimulation()) << "Set max charging power" << maxCharging << "for battery device" << device->name(); + device->setStateValue(batteryChargingStateTypeId, maxCharging); + return DeviceManager::DeviceErrorNoError; + } + return DeviceManager::DeviceErrorActionTypeNotFound; + } + + if (device->deviceClassId() == waterValveDeviceClassId) { + if (action.actionTypeId() == waterValvePowerActionTypeId) { + bool power = action.param(waterValvePowerActionParamTypeId).value().toBool(); + device->setStateValue(waterValvePowerStateTypeId, power); return DeviceManager::DeviceErrorNoError; } return DeviceManager::DeviceErrorActionTypeNotFound; @@ -200,34 +232,74 @@ DeviceManager::DeviceError DevicePluginSimulation::executeAction(Device *device, return DeviceManager::DeviceErrorDeviceClassNotFound; } -int DevicePluginSimulation::getRandomNumber(const int Min, const int Max) +int DevicePluginSimulation::generateRandomIntValue(int min, int max) { - return ((qrand() % ((Max + 1) - Min)) + Min); + int value = ((qrand() % ((max + 1) - min)) + min); + // qCDebug(dcSimulation()) << "Generateed random int value: [" << min << ", " << max << "] -->" << value; + return value; } -void DevicePluginSimulation::onPluginTimer() +double DevicePluginSimulation::generateRandomDoubleValue(double min, double max) +{ + double value = generateRandomIntValue(static_cast(min * 10), static_cast(max * 10)) / 10.0; + // qCDebug(dcSimulation()) << "Generated random double value: [" << min << ", " << max << "] -->" << value; + return value; +} + +bool DevicePluginSimulation::generateRandomBoolValue() +{ + bool value = static_cast(generateRandomIntValue(0, 1)); + // qCDebug(dcSimulation()) << "Generated random bool value:" << value; + return value; +} + +void DevicePluginSimulation::onPluginTimer20Seconds() { foreach (Device *device, myDevices()) { if (device->deviceClassId() == temperatureSensorDeviceClassId) { - //generate Random Number - double temperature = ((double)getRandomNumber(200, 230)/10.0); - device->setStateValue(temperatureSensorTemperatureStateTypeId, temperature); - device->setStateValue(temperatureSensorHumidityStateTypeId, getRandomNumber(40, 60)); - device->setStateValue(temperatureSensorBatteryLevelStateTypeId, getRandomNumber(10, 100)); - device->setStateValue(temperatureSensorBatteryCriticalStateTypeId, device->stateValue(temperatureSensorBatteryLevelStateTypeId).toDouble() <= 30); + // Temperature sensor + device->setStateValue(temperatureSensorTemperatureStateTypeId, generateRandomDoubleValue(18, 23)); + device->setStateValue(temperatureSensorHumidityStateTypeId, generateRandomIntValue(40, 55)); + device->setStateValue(temperatureSensorBatteryLevelStateTypeId, generateRandomIntValue(25, 40)); + device->setStateValue(temperatureSensorBatteryCriticalStateTypeId, device->stateValue(temperatureSensorBatteryLevelStateTypeId).toInt() <= 30); device->setStateValue(temperatureSensorConnectedStateTypeId, true); - - } else if(device->deviceClassId() == motionDetectorDeviceClassId){ - bool active = true; - if(getRandomNumber(0, 60)){ - active = false; - } - device->setStateValue(motionDetectorActiveStateTypeId, active); - device->setStateValue(motionDetectorBatteryLevelStateTypeId, getRandomNumber(10, 100)); - device->setStateValue(motionDetectorBatteryCriticalStateTypeId, device->stateValue(motionDetectorBatteryLevelStateTypeId).toDouble() <= 30); + } else if (device->deviceClassId() == motionDetectorDeviceClassId) { + // Motion detector + device->setStateValue(motionDetectorActiveStateTypeId, generateRandomBoolValue()); + device->setStateValue(motionDetectorBatteryLevelStateTypeId, generateRandomIntValue(25, 40)); + device->setStateValue(motionDetectorBatteryCriticalStateTypeId, device->stateValue(motionDetectorBatteryLevelStateTypeId).toInt() <= 30); device->setStateValue(motionDetectorConnectedStateTypeId, true); - } else if(device->deviceClassId() == evChargerDeviceClassId){ - + } else if (device->deviceClassId() == gardenSensorDeviceClassId) { + // Garden sensor + device->setStateValue(gardenSensorTemperatureStateTypeId, generateRandomDoubleValue(20, 23)); + device->setStateValue(gardenSensorSoilMoistureStateTypeId, generateRandomIntValue(40, 60)); + device->setStateValue(gardenSensorIlluminanceStateTypeId, generateRandomIntValue(20, 80)); + device->setStateValue(gardenSensorBatteryLevelStateTypeId, generateRandomIntValue(25, 90)); + device->setStateValue(gardenSensorBatteryCriticalStateTypeId, device->stateValue(gardenSensorBatteryLevelStateTypeId).toDouble() <= 30); + device->setStateValue(gardenSensorConnectedStateTypeId, true); + } else if(device->deviceClassId() == netatmoIndoorDeviceClassId) { + // Netatmo + device->setStateValue(netatmoIndoorUpdateTimeStateTypeId, QDateTime::currentDateTime().toTime_t()); + device->setStateValue(netatmoIndoorHumidityStateTypeId, generateRandomIntValue(35, 45)); + device->setStateValue(netatmoIndoorTemperatureStateTypeId, generateRandomIntValue(20, 25)); + device->setStateValue(netatmoIndoorPressureStateTypeId, generateRandomIntValue(1003, 1008)); + device->setStateValue(netatmoIndoorNoiseStateTypeId, generateRandomIntValue(40, 80)); + device->setStateValue(netatmoIndoorWifiStrengthStateTypeId, generateRandomIntValue(85, 95)); + } + } +} + +void DevicePluginSimulation::onPluginTimer5Minutes() +{ + foreach (Device *device, myDevices()) { + if(device->deviceClassId() == netatmoIndoorDeviceClassId) { + // Note: should change between > 1000 co2 < 1000 for showcase, please do not change this behaviour + int currentValue = device->stateValue(netatmoIndoorCo2StateTypeId).toInt(); + if (currentValue < 1000) { + device->setStateValue(netatmoIndoorCo2StateTypeId, generateRandomIntValue(1001, 1010)); + } else { + device->setStateValue(netatmoIndoorCo2StateTypeId, generateRandomIntValue(950, 999)); + } } } } diff --git a/simulation/devicepluginsimulation.h b/simulation/devicepluginsimulation.h index 271f76d1..be01afec 100644 --- a/simulation/devicepluginsimulation.h +++ b/simulation/devicepluginsimulation.h @@ -3,19 +3,19 @@ * Copyright (C) 2017 Bernhard Trinnes * * Copyright (C) 2018 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * - * Guh is free software: you can redistribute it and/or modify * + * nymea 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, * + * nymea 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 . * + * along with nymea. If not, see . * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ @@ -30,24 +30,29 @@ class DevicePluginSimulation : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "devicepluginsimulation.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginsimulation.json") Q_INTERFACES(DevicePlugin) public: explicit DevicePluginSimulation(); + ~DevicePluginSimulation(); void init() override; DeviceManager::DeviceSetupStatus setupDevice(Device *device) override; DeviceManager::DeviceError executeAction(Device *device, const Action &action) override; private: - PluginTimer *m_pluginTimer = nullptr; + PluginTimer *m_pluginTimer20Seconds = nullptr; + PluginTimer *m_pluginTimer5Min = nullptr; - int getRandomNumber(const int min, const int max); + int generateRandomIntValue(int min, int max); + double generateRandomDoubleValue(double min, double max); + bool generateRandomBoolValue(); private slots: - void onPluginTimer(); + void onPluginTimer20Seconds(); + void onPluginTimer5Minutes(); }; diff --git a/simulation/devicepluginsimulation.json b/simulation/devicepluginsimulation.json index 290d963e..b8895a1c 100644 --- a/simulation/devicepluginsimulation.json +++ b/simulation/devicepluginsimulation.json @@ -7,7 +7,6 @@ "name": "simulation", "displayName": "Simulation", "id": "fd2ae067-2c3d-4332-9c4b-ee0af653bcaf", - "interfaces": ["simplebutton"], "deviceClasses": [ { "id": "73bb670b-e7a3-40da-bd6f-3260f017ec80", @@ -54,7 +53,6 @@ "displayNameEvent": "Power changed", "displayNameAction": "Set power", "defaultValue": false, - "index" : 0, "writable": true } ] @@ -284,20 +282,17 @@ { "id": "1786029d-f3a6-4b47-978a-ac1a581aac0f", "name": "open", - "displayName": "Open", - "type": "bool" + "displayName": "Open" }, { "id": "2786029d-f3a6-4b47-978a-ac1a581aac0f", "name": "stop", - "displayName": "Stop", - "type": "bool" + "displayName": "Stop" }, { "id": "3786029d-f3a6-4b47-978a-ac1a581aac0f", "name": "close", - "displayName": "Close", - "type": "bool" + "displayName": "Close" } ] }, @@ -328,20 +323,17 @@ { "id": "17860291-f3a6-4b47-978a-ac1a581aac0f", "name": "open", - "displayName": "Open", - "type": "bool" + "displayName": "Open" }, { "id": "27860292-f3a6-4b47-978a-ac1a581aac0f", "name": "stop", - "displayName": "stop", - "type": "bool" + "displayName": "stop" }, { "id": "37860293-f3a6-4b47-978a-ac1a581aac0f", "name": "close", - "displayName": "close", - "type": "bool" + "displayName": "close" } ] }, @@ -564,7 +556,7 @@ "type": "int", "unit": "Watt", "defaultValue": 700, - "minValue": 0, + "minValue": 200, "maxValue": 2000, "writable": true }, @@ -643,6 +635,182 @@ "defaultValue": false } ] + }, + { + "id": "7f1696e3-3145-421e-9a42-5bd3b2fd0e2c", + "name": "netatmoIndoor", + "displayName": "Netatmo Indoor Station", + "deviceIcon": "Thermometer", + "basicTags": [ + "Device", + "Weather", + "Sensor" + ], + "createMethods": ["user"], + "paramTypes": [ ], + "stateTypes": [ + { + "id": "29a95a72-f897-4027-99a8-ab1aee1ebe2b", + "name": "updateTime", + "displayName": "Last update", + "displayNameEvent": "Last update changed", + "unit": "UnixTime", + "type": "int", + "ruleRelevant": false, + "eventRuleRelevant": false, + "defaultValue": 0 + }, + { + "id": "b5244e65-0811-4dc2-afd2-6bf3092d44c7", + "name": "temperature", + "displayName": "Temperature", + "displayNameEvent": "Temperature changed", + "unit": "DegreeCelsius", + "graphRelevant": true, + "type": "double", + "defaultValue": 22.7 + }, + { + "id": "b2225720-dfdc-40f8-a24a-20247e69e575", + "name": "humidity", + "displayName": "Humidity", + "displayNameEvent": "Humidity changed", + "graphRelevant": true, + "unit": "Percentage", + "type": "int", + "defaultValue": 37 + }, + { + "id": "b13fa34e-b63d-4fa4-a786-e82776ee9cbe", + "name": "pressure", + "displayName": "Pressure", + "displayNameEvent": "Pressure changed", + "unit": "MilliBar", + "graphRelevant": true, + "type": "int", + "defaultValue": 1006 + }, + { + "id": "b16ea43e-75ef-4bee-ade6-839682ec3068", + "name": "noise", + "displayName": "Noise", + "displayNameEvent": "Noise changed", + "graphRelevant": true, + "unit": "Dezibel", + "type": "int", + "defaultValue": 68 + }, + { + "id": "c5ebe5c0-b030-4eb6-a3f8-3a400061d09c", + "name": "co2", + "displayName": "CO2", + "displayNameEvent": "CO2 changed", + "graphRelevant": true, + "unit": "PartsPerMillion", + "type": "int", + "defaultValue": 350 + }, + { + "id": "3b8fb712-ff4c-4c0f-83bc-2edac54fede7", + "name": "wifiStrength", + "displayName": "Wifi signal strength", + "displayNameEvent": "Wifi signal strength changed", + "ruleRelevant": false, + "eventRuleRelevant": false, + "unit": "Percentage", + "type": "int", + "defaultValue": 87 + } + ] + }, + { + "id": "b759f558-b484-45b6-9132-218d135c27d6", + "name": "gardenSensor", + "displayName": "Garden sensor", + "createMethods": ["user"], + "deviceIcon": "Thermometer", + "interfaces": ["temperaturesensor", "battery", "connectable"], + "basicTags": ["Device", "Sensor" ], + "paramTypes": [ ], + "stateTypes": [ + { + "id": "63eb7cdd-d16e-4baf-820b-7ad9f0a2b2a8", + "name": "soilMoisture", + "displayName": "Soil moisture", + "displayNameEvent": "Soil moisture changed", + "type": "double", + "minValue": 0, + "maxValue": 100, + "unit": "Percentage", + "defaultValue": 0 + }, + { + "id": "169d7a2a-d1c9-4578-bb30-fc7d25690e59", + "name": "temperature", + "displayName": "Temperature", + "displayNameEvent": "Temperature changed", + "type": "double", + "unit": "DegreeCelsius", + "defaultValue": 0 + }, + { + "id": "9781f0a5-3478-4291-ab51-9daa1ba0e44e", + "name": "illuminance", + "displayName": "Illuminance", + "displayNameEvent": "Illuminance changed", + "type": "double", + "unit": "Lux", + "defaultValue": 20 + }, + { + "id": "45c0de32-b519-47d7-9f82-e5f09d1542d4", + "name": "batteryLevel", + "displayName": "Battery", + "displayNameEvent": "Battery level changed", + "type": "int", + "minValue": 0, + "maxValue": 100, + "unit": "Percentage", + "defaultValue": 0 + }, + { + "id": "295b9a17-a4b1-4cc9-8ebb-2309b72c75f6", + "name": "batteryCritical", + "displayName": "Battery critical", + "displayNameEvent": "Battery critical changed", + "type": "bool", + "defaultValue": false + }, + { + "id": "e66aba37-2647-4b6b-8740-d59eb98d846c", + "name": "connected", + "displayName": "Connected", + "displayNameEvent": "Connected changed", + "type": "bool", + "defaultValue": true + } + ] + }, + { + "id": "8fc2e79b-1770-4b18-bf01-78ed15893a81", + "name": "waterValve", + "displayName": "Water valve", + "createMethods": ["user"], + "deviceIcon": "None", + "basicTags": ["Device", "Actuator"], + "paramTypes": [ ], + "stateTypes": [ + { + "id": "b7ff029d-f3a6-4b47-978a-ac1a581aac0f", + "name": "power", + "displayName": "Power", + "displayNameEvent": "Power changed", + "displayNameAction": "Set power", + "type": "bool", + "defaultValue": false, + "writable": true + } + ] } ] } diff --git a/simulation/simulation.pro b/simulation/simulation.pro index 84b8b21f..7a579118 100644 --- a/simulation/simulation.pro +++ b/simulation/simulation.pro @@ -1,6 +1,6 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_devicepluginsimulation) +TARGET = $$qtLibraryTarget(nymea_devicepluginsimulation) SOURCES += \ devicepluginsimulation.cpp \ diff --git a/simulation/translations/b7368429-e312-4c82-9eab-e1cd996e43d6-en_US.ts b/simulation/translations/b7368429-e312-4c82-9eab-e1cd996e43d6-en_US.ts new file mode 100644 index 00000000..01d002dd --- /dev/null +++ b/simulation/translations/b7368429-e312-4c82-9eab-e1cd996e43d6-en_US.ts @@ -0,0 +1,592 @@ + + + + + Simulation + + Simulation + The name of the plugin Simulation (b7368429-e312-4c82-9eab-e1cd996e43d6) +---------- +The name of the vendor (fd2ae067-2c3d-4332-9c4b-ee0af653bcaf) + + + + Simple Button + The name of the DeviceClass (73bb670b-e7a3-40da-bd6f-3260f017ec80) + + + + Press the button + The name of the ActionType 64c4ced5-9a1a-4858-81dd-1b5c94dba495 of deviceClass simpleButton + + + + Button pressed + The name of the EventType f9652210-9aed-4f38-8c19-2fd54f703fbe of deviceClass simpleButton + + + + Power Button + The name of the DeviceClass (910b2f58-70dc-4da3-89ae-9e7393290ccb) + + + + Power changed + The name of the autocreated EventType (fa63c0b9-10e5-4280-9cc2-243bf27c05ad) +---------- +The name of the autocreated EventType (e1910c53-a6bc-434b-9caa-0d08e214c122) +---------- +The name of the autocreated EventType (b786029d-f3a6-4b47-978a-ac1a581aac0f) +---------- +The name of the autocreated EventType (9faaffe5-6a76-47d2-a14a-550f60390245) +---------- +The name of the autocreated EventType (b7ff029d-f3a6-4b47-978a-ac1a581aac0f) + + + + Set power + The name of the autocreated ActionType (fa63c0b9-10e5-4280-9cc2-243bf27c05ad) +---------- +The name of the autocreated ActionType (e1910c53-a6bc-434b-9caa-0d08e214c122) +---------- +The name of the autocreated ActionType (b786029d-f3a6-4b47-978a-ac1a581aac0f) +---------- +The name of the autocreated ActionType (9faaffe5-6a76-47d2-a14a-550f60390245) +---------- +The name of the autocreated ActionType (b7ff029d-f3a6-4b47-978a-ac1a581aac0f) + + + + Temperature sensor + The name of the DeviceClass (77c6ccff-84e8-4983-b69e-5e1a3f4723f2) + + + + Temperature changed + The name of the autocreated EventType (169d7a2a-d1c9-4578-bb30-fc7d25690e59) +---------- +The name of the autocreated EventType (b5244e65-0811-4dc2-afd2-6bf3092d44c7) + + + + Humidity changed + The name of the autocreated EventType (10c735fd-7b81-484a-a148-76ea0da840f0) +---------- +The name of the autocreated EventType (b2225720-dfdc-40f8-a24a-20247e69e575) + + + + Battery level changed + The name of the autocreated EventType (45c0de32-b519-47d7-9f82-e5f09d1542d4) +---------- +The name of the autocreated EventType (4d66c81e-6293-4997-9685-8b44d7e5c1bd) +---------- +The name of the autocreated EventType (30fd9fd9-1a6b-4698-93ac-6b2a1ba18500) + + + + Battery critical changed + The name of the autocreated EventType (295b9a17-a4b1-4cc9-8ebb-2309b72c75f6) +---------- +The name of the autocreated EventType (1c621a6f-86fe-4351-bf9e-03c3deaef6ad) +---------- +The name of the autocreated EventType (4857f2b4-0840-4c7e-82ff-bd881ae32cf9) + + + + Connected changed + The name of the autocreated EventType (e66aba37-2647-4b6b-8740-d59eb98d846c) +---------- +The name of the autocreated EventType (b481b6e7-77c1-40b0-859a-286876b05959) + + + + Motion Detector + The name of the DeviceClass (990fc2ba-260a-4648-9a93-e803e219da4f) + + + + Motion detected + The name of the autocreated EventType (5ab00bfc-7345-44a2-90d4-852c810e59ec) + + + + Heating + The name of the DeviceClass (62e302f4-b92a-4b55-bd18-a1e0cc56362a) + + + + Active status changed + The name of the autocreated EventType (47a16375-1027-42cc-82d3-56cbfdb1193c) + + + + target temperature changed + The name of the autocreated EventType (8256a670-85c5-4043-9133-05518812848c) + + + + change target temperature + The name of the autocreated ActionType (8256a670-85c5-4043-9133-05518812848c) + + + + EV Charging Station + The name of the DeviceClass (1fa40afa-6a07-4a97-918b-76e3944ea0fb) + + + + Current changed + The name of the autocreated EventType (87600986-da37-4032-af37-015995910368) + + + + Set current + The name of the autocreated ActionType (87600986-da37-4032-af37-015995910368) + + + + charging status changed + The name of the autocreated EventType (9d3f56e1-bb73-4efd-814c-50477c609c17) + + + + Garage Door + The name of the DeviceClass (cfb44bcf-b4b9-4bef-89f7-3a55baf35668) + + + + Garage door status changed + The name of the autocreated EventType (f786029d-f3a6-4b47-978a-ac1a581aac0f) + + + + Open + The name of the ActionType 1786029d-f3a6-4b47-978a-ac1a581aac0f of deviceClass garageDoor +---------- +The name of the ActionType 17860291-f3a6-4b47-978a-ac1a581aac0f of deviceClass rollerShutter + + + + Stop + The name of the ActionType 2786029d-f3a6-4b47-978a-ac1a581aac0f of deviceClass garageDoor + + + + Close + The name of the ActionType 3786029d-f3a6-4b47-978a-ac1a581aac0f of deviceClass garageDoor + + + + Roller Shutter + The name of the DeviceClass (1039b7ee-5351-400b-a477-5b8fc1447138) + + + + Shutter status changed + The name of the autocreated EventType (1386029d-f3a6-4b47-978a-ac1a581aac0f) + + + + stop + The name of the ActionType 27860292-f3a6-4b47-978a-ac1a581aac0f of deviceClass rollerShutter + + + + close + The name of the ActionType 37860293-f3a6-4b47-978a-ac1a581aac0f of deviceClass rollerShutter + + + + Color Bulb + The name of the DeviceClass (1039b7ee-5121-400b-a477-5b8fc14471ff) + + + + Color temperature changed + The name of the autocreated EventType (cff4206f-f219-4f06-93c4-4ca515a56f79) + + + + Set color temperature + The name of the autocreated ActionType (cff4206f-f219-4f06-93c4-4ca515a56f79) + + + + Color changed + The name of the autocreated EventType (df5423f1-b924-4b20-80b6-77eecc65d089) + + + + Set color + The name of the autocreated ActionType (df5423f1-b924-4b20-80b6-77eecc65d089) + + + + Brightness changed + The name of the autocreated EventType (90e91f11-a208-468c-a5a2-7f47e08229e2) + + + + Set brigtness + The name of the autocreated ActionType (90e91f11-a208-468c-a5a2-7f47e08229e2) + + + + Socket + The name of the DeviceClass (1039b7ee-5351-400b-a477-5b8fc14471ff) + + + + Finger Print Sensor + The name of the DeviceClass (45906fb3-9bf5-4331-9b69-0a0407b8511e) + + + + Access granted + The name of the EventType 1d2dde79-7121-4f8c-b7c1-904ced66a79e of deviceClass fingerPrintSensor + + + + Access denied + The name of the EventType 992b7742-af0c-447c-bd94-9ec70b872268 of deviceClass fingerPrintSensor + + + + Smart Meter + The name of the DeviceClass (c242f229-d3f4-4d3d-854c-817b52aa18ab) + + + + Reachable changed + The name of the autocreated EventType (e66aba37-2647-4b6b-8740-d59eb98d846c) + + + + Power consumption changed + The name of the autocreated EventType (d57f4d9c-759e-40eb-999e-a1acbc8df2b1) + + + + Today's energy production changed + The name of the autocreated EventType (5ac91819-c855-441c-a734-ee5cc0514822) + + + + Battery + The name of the ParamType of the autocreated EventType (45c0de32-b519-47d7-9f82-e5f09d1542d4) of DeviceClass temperatureSensor +---------- +The name of the ParamType of the autocreated EventType (4d66c81e-6293-4997-9685-8b44d7e5c1bd) of DeviceClass motionDetector +---------- +The name of the DeviceClass (280c481e-757a-4af7-b1d3-dc9cfc1d46a5) +---------- +The name of the ParamType of the autocreated EventType (45c0de32-b519-47d7-9f82-e5f09d1542d4) of DeviceClass gardenSensor + + + + Charging amount changed + The name of the autocreated EventType (c977e60a-e820-4647-addb-cf0b39732ffb) + + + + charging + The name of the ParamType of the autocreated EventType (9d3f56e1-bb73-4efd-814c-50477c609c17) of DeviceClass evCharger + + + + Max charging power changed + The name of the autocreated EventType (bdf328a6-eebc-4b67-8165-551bc21e9be6) + + + + Set max charging power + The name of the autocreated ActionType (bdf328a6-eebc-4b67-8165-551bc21e9be6) + + + + Heating Rod + The name of the DeviceClass (b2565887-443a-45ae-a2e7-67fb1b1003d8) + + + + Power + The name of the ParamType of the autocreated EventType (fa63c0b9-10e5-4280-9cc2-243bf27c05ad) of DeviceClass alternativeButton +---------- +The name of the autocreated ParamType of the writable StateType (fa63c0b9-10e5-4280-9cc2-243bf27c05ad) of DeviceClass alternativeButton +---------- +The name of the ParamType of the autocreated EventType (e1910c53-a6bc-434b-9caa-0d08e214c122) of DeviceClass heating +---------- +The name of the autocreated ParamType of the writable StateType (e1910c53-a6bc-434b-9caa-0d08e214c122) of DeviceClass heating +---------- +The name of the ParamType of the autocreated EventType (b786029d-f3a6-4b47-978a-ac1a581aac0f) of DeviceClass evCharger +---------- +The name of the autocreated ParamType of the writable StateType (b786029d-f3a6-4b47-978a-ac1a581aac0f) of DeviceClass evCharger +---------- +The name of the ParamType of the autocreated EventType (9faaffe5-6a76-47d2-a14a-550f60390245) of DeviceClass colorBulb +---------- +The name of the autocreated ParamType of the writable StateType (9faaffe5-6a76-47d2-a14a-550f60390245) of DeviceClass colorBulb +---------- +The name of the ParamType of the autocreated EventType (b7ff029d-f3a6-4b47-978a-ac1a581aac0f) of DeviceClass socket +---------- +The name of the autocreated ParamType of the writable StateType (b7ff029d-f3a6-4b47-978a-ac1a581aac0f) of DeviceClass socket +---------- +The name of the ParamType of the autocreated EventType (e1910c53-a6bc-434b-9caa-0d08e214c122) of DeviceClass heatingRod +---------- +The name of the autocreated ActionType (e1910c53-a6bc-434b-9caa-0d08e214c122) +---------- +The name of the autocreated ParamType of the writable StateType (e1910c53-a6bc-434b-9caa-0d08e214c122) of DeviceClass heatingRod +---------- +The name of the ParamType of the autocreated EventType (b7ff029d-f3a6-4b47-978a-ac1a581aac0f) of DeviceClass waterValve +---------- +The name of the autocreated ParamType of the writable StateType (b7ff029d-f3a6-4b47-978a-ac1a581aac0f) of DeviceClass waterValve + + + + Max power changed + The name of the autocreated EventType (2ab2a0fa-ea66-426c-ba22-d23b42c80883) + + + + Set max power + The name of the autocreated ActionType (2ab2a0fa-ea66-426c-ba22-d23b42c80883) + + + + Target water temperature changed + The name of the autocreated EventType (49388b11-8076-4698-8091-5c5f5762fd08) + + + + Set target water temperature + The name of the autocreated ActionType (49388b11-8076-4698-8091-5c5f5762fd08) + + + + Netatmo Indoor Station + The name of the DeviceClass (7f1696e3-3145-421e-9a42-5bd3b2fd0e2c) + + + + Last update changed + The name of the autocreated EventType (29a95a72-f897-4027-99a8-ab1aee1ebe2b) + + + + Pressure changed + The name of the autocreated EventType (b13fa34e-b63d-4fa4-a786-e82776ee9cbe) + + + + Noise changed + The name of the autocreated EventType (b16ea43e-75ef-4bee-ade6-839682ec3068) + + + + CO2 changed + The name of the autocreated EventType (c5ebe5c0-b030-4eb6-a3f8-3a400061d09c) + + + + Wifi signal strength changed + The name of the autocreated EventType (3b8fb712-ff4c-4c0f-83bc-2edac54fede7) + + + + Garden sensor + The name of the DeviceClass (b759f558-b484-45b6-9132-218d135c27d6) + + + + Soil moisture changed + The name of the autocreated EventType (63eb7cdd-d16e-4baf-820b-7ad9f0a2b2a8) + + + + Water valve + The name of the DeviceClass (8fc2e79b-1770-4b18-bf01-78ed15893a81) + + + + Illuminance changed + The name of the autocreated EventType (9781f0a5-3478-4291-ab51-9daa1ba0e44e) + + + + Temperature + The name of the ParamType of the autocreated EventType (169d7a2a-d1c9-4578-bb30-fc7d25690e59) of DeviceClass temperatureSensor +---------- +The name of the ParamType of the autocreated EventType (b5244e65-0811-4dc2-afd2-6bf3092d44c7) of DeviceClass netatmoIndoor +---------- +The name of the ParamType of the autocreated EventType (169d7a2a-d1c9-4578-bb30-fc7d25690e59) of DeviceClass gardenSensor + + + + Humidity + The name of the ParamType of the autocreated EventType (10c735fd-7b81-484a-a148-76ea0da840f0) of DeviceClass temperatureSensor +---------- +The name of the ParamType of the autocreated EventType (b2225720-dfdc-40f8-a24a-20247e69e575) of DeviceClass netatmoIndoor + + + + Battery critical + The name of the ParamType of the autocreated EventType (295b9a17-a4b1-4cc9-8ebb-2309b72c75f6) of DeviceClass temperatureSensor +---------- +The name of the ParamType of the autocreated EventType (1c621a6f-86fe-4351-bf9e-03c3deaef6ad) of DeviceClass motionDetector +---------- +The name of the ParamType of the autocreated EventType (4857f2b4-0840-4c7e-82ff-bd881ae32cf9) of DeviceClass battery +---------- +The name of the ParamType of the autocreated EventType (295b9a17-a4b1-4cc9-8ebb-2309b72c75f6) of DeviceClass gardenSensor + + + + Connected + The name of the ParamType of the autocreated EventType (e66aba37-2647-4b6b-8740-d59eb98d846c) of DeviceClass temperatureSensor +---------- +The name of the ParamType of the autocreated EventType (b481b6e7-77c1-40b0-859a-286876b05959) of DeviceClass motionDetector +---------- +The name of the ParamType of the autocreated EventType (e66aba37-2647-4b6b-8740-d59eb98d846c) of DeviceClass fingerPrintSensor +---------- +The name of the ParamType of the autocreated EventType (e66aba37-2647-4b6b-8740-d59eb98d846c) of DeviceClass gardenSensor + + + + Active + The name of the ParamType of the autocreated EventType (5ab00bfc-7345-44a2-90d4-852c810e59ec) of DeviceClass motionDetector +---------- +The name of the ParamType of the autocreated EventType (47a16375-1027-42cc-82d3-56cbfdb1193c) of DeviceClass heating +---------- +The name of the ParamType of the autocreated EventType (47a16375-1027-42cc-82d3-56cbfdb1193c) of DeviceClass heatingRod + + + + Target temperature + The name of the ParamType of the autocreated EventType (8256a670-85c5-4043-9133-05518812848c) of DeviceClass heating +---------- +The name of the autocreated ParamType of the writable StateType (8256a670-85c5-4043-9133-05518812848c) of DeviceClass heating + + + + Current + The name of the ParamType of the autocreated EventType (87600986-da37-4032-af37-015995910368) of DeviceClass evCharger +---------- +The name of the autocreated ParamType of the writable StateType (87600986-da37-4032-af37-015995910368) of DeviceClass evCharger + + + + Garage door + The name of the ParamType of the autocreated EventType (f786029d-f3a6-4b47-978a-ac1a581aac0f) of DeviceClass garageDoor + + + + Status + The name of the ParamType of the autocreated EventType (1386029d-f3a6-4b47-978a-ac1a581aac0f) of DeviceClass rollerShutter + + + + Color temperature + The name of the ParamType of the autocreated EventType (cff4206f-f219-4f06-93c4-4ca515a56f79) of DeviceClass colorBulb +---------- +The name of the autocreated ParamType of the writable StateType (cff4206f-f219-4f06-93c4-4ca515a56f79) of DeviceClass colorBulb + + + + Color + The name of the ParamType of the autocreated EventType (df5423f1-b924-4b20-80b6-77eecc65d089) of DeviceClass colorBulb +---------- +The name of the autocreated ParamType of the writable StateType (df5423f1-b924-4b20-80b6-77eecc65d089) of DeviceClass colorBulb + + + + Brightness + The name of the ParamType of the autocreated EventType (90e91f11-a208-468c-a5a2-7f47e08229e2) of DeviceClass colorBulb +---------- +The name of the autocreated ParamType of the writable StateType (90e91f11-a208-468c-a5a2-7f47e08229e2) of DeviceClass colorBulb + + + + Reachable + The name of the ParamType of the autocreated EventType (e66aba37-2647-4b6b-8740-d59eb98d846c) of DeviceClass smartMeter +---------- +The name of the ParamType of the autocreated EventType (e66aba37-2647-4b6b-8740-d59eb98d846c) of DeviceClass battery +---------- +The name of the ParamType of the autocreated EventType (e66aba37-2647-4b6b-8740-d59eb98d846c) of DeviceClass heatingRod + + + + Power consumtion + The name of the ParamType of the autocreated EventType (d57f4d9c-759e-40eb-999e-a1acbc8df2b1) of DeviceClass smartMeter + + + + Today's energy production + The name of the ParamType of the autocreated EventType (5ac91819-c855-441c-a734-ee5cc0514822) of DeviceClass smartMeter + + + + Battery level + The name of the ParamType of the autocreated EventType (30fd9fd9-1a6b-4698-93ac-6b2a1ba18500) of DeviceClass battery + + + + Charging + The name of the ParamType of the autocreated EventType (c977e60a-e820-4647-addb-cf0b39732ffb) of DeviceClass battery + + + + Max charging power + The name of the ParamType of the autocreated EventType (bdf328a6-eebc-4b67-8165-551bc21e9be6) of DeviceClass battery +---------- +The name of the autocreated ParamType of the writable StateType (bdf328a6-eebc-4b67-8165-551bc21e9be6) of DeviceClass battery + + + + Max power + The name of the ParamType of the autocreated EventType (2ab2a0fa-ea66-426c-ba22-d23b42c80883) of DeviceClass heatingRod +---------- +The name of the autocreated ParamType of the writable StateType (2ab2a0fa-ea66-426c-ba22-d23b42c80883) of DeviceClass heatingRod + + + + Target water temperature + The name of the ParamType of the autocreated EventType (49388b11-8076-4698-8091-5c5f5762fd08) of DeviceClass heatingRod +---------- +The name of the autocreated ParamType of the writable StateType (49388b11-8076-4698-8091-5c5f5762fd08) of DeviceClass heatingRod + + + + Last update + The name of the ParamType of the autocreated EventType (29a95a72-f897-4027-99a8-ab1aee1ebe2b) of DeviceClass netatmoIndoor + + + + Pressure + The name of the ParamType of the autocreated EventType (b13fa34e-b63d-4fa4-a786-e82776ee9cbe) of DeviceClass netatmoIndoor + + + + Noise + The name of the ParamType of the autocreated EventType (b16ea43e-75ef-4bee-ade6-839682ec3068) of DeviceClass netatmoIndoor + + + + CO2 + The name of the ParamType of the autocreated EventType (c5ebe5c0-b030-4eb6-a3f8-3a400061d09c) of DeviceClass netatmoIndoor + + + + Wifi signal strength + The name of the ParamType of the autocreated EventType (3b8fb712-ff4c-4c0f-83bc-2edac54fede7) of DeviceClass netatmoIndoor + + + + Soil moisture + The name of the ParamType of the autocreated EventType (63eb7cdd-d16e-4baf-820b-7ad9f0a2b2a8) of DeviceClass gardenSensor + + + + Illuminance + The name of the ParamType of the autocreated EventType (9781f0a5-3478-4291-ab51-9daa1ba0e44e) of DeviceClass gardenSensor + + + + diff --git a/simulation/translations/de_DE.ts b/simulation/translations/de_DE.ts deleted file mode 100644 index 1552582e..00000000 --- a/simulation/translations/de_DE.ts +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/simulation/translations/en_US.ts b/simulation/translations/en_US.ts deleted file mode 100644 index 6401616d..00000000 --- a/simulation/translations/en_US.ts +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/snapd/devicepluginsnapd.cpp b/snapd/devicepluginsnapd.cpp index 91bb6d50..02264432 100644 --- a/snapd/devicepluginsnapd.cpp +++ b/snapd/devicepluginsnapd.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2017-2018 Simon Stürz setPreferedRefreshTime(configValue(SnapdRefreshScheduleParamTypeId).toInt()); + m_snapdControl->setPreferredRefreshTime(configValue(snapdRefreshScheduleParamTypeId).toInt()); connect(m_snapdControl, &SnapdControl::snapListUpdated, this, &DevicePluginSnapd::onSnapListUpdated); } else if (device->deviceClassId() == snapDeviceClassId) { @@ -163,7 +163,7 @@ DeviceManager::DeviceError DevicePluginSnapd::executeAction(Device *device, cons if (action.actionTypeId() == snapChannelActionTypeId) { QString snapName = device->paramValue(snapNameParamTypeId).toString(); - m_snapdControl->changeSnapChannel(snapName, action.param(snapChannelStateParamTypeId).value().toString()); + m_snapdControl->changeSnapChannel(snapName, action.param(snapChannelActionParamTypeId).value().toString()); return DeviceManager::DeviceErrorNoError; } else if (action.actionTypeId() == snapRevertActionTypeId) { QString snapName = device->paramValue(snapNameParamTypeId).toString(); @@ -182,7 +182,7 @@ void DevicePluginSnapd::onPluginConfigurationChanged(const ParamTypeId ¶mTyp qCDebug(dcSnapd()) << "Plugin configuration changed"; // Check advanced mode - if (paramTypeId == SnapdAdvancedModeParamTypeId) { + if (paramTypeId == snapdAdvancedModeParamTypeId) { qCDebug(dcSnapd()) << "Advanced mode" << (value.toBool() ? "enabled." : "disabled."); m_advancedMode = value.toBool(); @@ -202,13 +202,13 @@ void DevicePluginSnapd::onPluginConfigurationChanged(const ParamTypeId ¶mTyp } // Check refresh schedule - if (paramTypeId == SnapdRefreshScheduleParamTypeId) { + if (paramTypeId == snapdRefreshScheduleParamTypeId) { if (!m_snapdControl) return; m_refreshTime = value.toInt(); qCDebug(dcSnapd()) << "Refresh schedule start time" << QTime(m_refreshTime, 0, 0).toString("hh:mm"); - m_snapdControl->setPreferedRefreshTime(m_refreshTime); + m_snapdControl->setPreferredRefreshTime(m_refreshTime); } } diff --git a/snapd/devicepluginsnapd.h b/snapd/devicepluginsnapd.h index c08d3899..22e01043 100644 --- a/snapd/devicepluginsnapd.h +++ b/snapd/devicepluginsnapd.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2017-2018 Simon Stürz " << m_preferedRefreshSchedule; + qCDebug(dcSnapd()) << "Configure refresh schedule from" << m_currentRefreshSchedule << "-->" << m_preferredRefreshSchedule; SnapdReply *reply = m_snapConnection->put(QString("/v2/snaps/core/conf"), QJsonDocument::fromVariant(configuration).toJson(QJsonDocument::Compact), this); connect(reply, &SnapdReply::finished, this, &SnapdControl::onConfigureRefreshScheduleFinished); @@ -191,7 +191,7 @@ void SnapdControl::onLoadSystemInfoFinished() reply->deleteLater(); // Check if the refresh schedule should be updated - if (m_currentRefreshSchedule != m_preferedRefreshSchedule) { + if (m_currentRefreshSchedule != m_preferredRefreshSchedule) { configureRefreshSchedule(); } } @@ -391,7 +391,7 @@ void SnapdControl::update() return; } - // Note: this makes sure the state is realy connected (including connection initialisation stuff) + // Note: this makes sure the state is really connected (including connection initialisation stuff) if (!m_snapConnection->isConnected()) return; @@ -453,13 +453,13 @@ void SnapdControl::checkForUpdates() connect(reply, &SnapdReply::finished, this, &SnapdControl::onCheckForUpdatesFinished); } -void SnapdControl::setPreferedRefreshTime(int startTime) +void SnapdControl::setPreferredRefreshTime(int startTime) { // Schedule the refresh between startTime and startTime + 59 minutes QTime start(startTime, 0, 0); QTime end = start.addSecs(3540); - m_preferedRefreshSchedule = QString("%1-%2").arg(start.toString("h:mm")).arg(end.toString("h:mm")); - qCDebug(dcSnapd()) << "Set prefered refresh schedule to " << m_preferedRefreshSchedule; + m_preferredRefreshSchedule = QString("%1-%2").arg(start.toString("h:mm")).arg(end.toString("h:mm")); + qCDebug(dcSnapd()) << "Set preferred refresh schedule to " << m_preferredRefreshSchedule; } void SnapdControl::snapRevert(const QString &snapName) diff --git a/snapd/snapdcontrol.h b/snapd/snapdcontrol.h index 719a5544..a9439a73 100644 --- a/snapd/snapdcontrol.h +++ b/snapd/snapdcontrol.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2017-2018 Simon Stürz Snapd - + Snapd The name of the plugin Snapd (b82bce59-59bf-48b3-b781-54a6f45800f3) Snapd - + Advanced mode - The name of the paramType (017fe4c5-fc41-41fe-8e67-08fdaccb89ea) of Snapd + The name of the paramType (017fe4c5-fc41-41fe-8e67-08fdaccb89ea) of snapd Fortgeschrittener Modus - + + Automatic daily refresh schedule + The name of the paramType (d2e697d1-9a68-4666-bf40-8d70fa694eec) of snapd + + + + Canonical The name of the vendor (60582ddf-32ea-4fcd-a6f2-f3beaaf21517) Canonical - - snapdAvailable - The name of the ParamType of StateType (6b662b3e-fd12-4f24-be77-aec066f16d8c) of DeviceClass snapdControl - - - - + System update available changed The name of the autocreated EventType (a6b1d24b-d523-4516-9bce-5b467e5e09b2) Systemupdate Verfügbarkeit geändert - - updateAvailable - The name of the ParamType of StateType (a6b1d24b-d523-4516-9bce-5b467e5e09b2) of DeviceClass snapdControl - - - - - updateRunning - The name of the ParamType of StateType (01ca7a22-5607-4c5e-a465-a2ae7e8b529c) of DeviceClass snapdControl - - - - - lastUpdateTime - The name of the ParamType of StateType (c671545a-6bde-4c08-8e37-0d256841a3a5) of DeviceClass snapdControl - - - - - nextUpdateTime - The name of the ParamType of StateType (122c2423-a1d9-400f-80f8-b1f798975914) of DeviceClass snapdControl - - - - - status - The name of the ParamType of StateType (4987aca3-3916-4cb3-938f-df6c99d04dbf) of DeviceClass snapdControl - - - - - channel - The name of the ParamType of StateType (7be2b61e-3f59-4b92-b2bb-50d027bb92ff) of DeviceClass snap - - - - - version - The name of the ParamType of StateType (532a95f3-db29-427e-bb32-d5a22029e586) of DeviceClass snap - - - - - revision - The name of the ParamType of StateType (f26a6404-e011-11e7-9224-2350048461eb) of DeviceClass snap - - - - + Last automatic system update time changed The name of the autocreated EventType (c671545a-6bde-4c08-8e37-0d256841a3a5) Letztes automatisches Systemupdate geändert - + + Last automatic system update + The name of the ParamType of the autocreated EventType (c671545a-6bde-4c08-8e37-0d256841a3a5) of DeviceClass snapdControl + + + + Next automatic system update time changed The name of the autocreated EventType (122c2423-a1d9-400f-80f8-b1f798975914) Nächstes automatisches Systemupdate geändert - + + Next automatic system update + The name of the ParamType of the autocreated EventType (122c2423-a1d9-400f-80f8-b1f798975914) of DeviceClass snapdControl + + + + + Status + The name of the ParamType of the autocreated EventType (4987aca3-3916-4cb3-938f-df6c99d04dbf) of DeviceClass snapdControl + + + + ID The name of the paramType (9afb98fb-f717-4f4c-8009-1a6514054c5f) of snap ID - + Summary The name of the paramType (12b9a65f-970b-49b5-b1d0-1625fc6d8758) of snap Zusammenfassung - + Description The name of the paramType (fe24c61b-e154-4259-b7ca-6f0602e9d1c3) of snap Beschreibung - + Developer The name of the paramType (76ead9c5-0a18-40a2-b31d-f6bb6dfea0a5) of snap Entwickler - + + + Channel + The name of the ParamType of the autocreated EventType (7be2b61e-3f59-4b92-b2bb-50d027bb92ff) of DeviceClass snap +---------- +The name of the autocreated ParamType of the writable StateType (7be2b61e-3f59-4b92-b2bb-50d027bb92ff) of DeviceClass snap + + + + Set channel The name of the autocreated ActionType (7be2b61e-3f59-4b92-b2bb-50d027bb92ff) Setze Kanal - + Version changed The name of the autocreated EventType (532a95f3-db29-427e-bb32-d5a22029e586) Version geändert - + + Version + The name of the ParamType of the autocreated EventType (532a95f3-db29-427e-bb32-d5a22029e586) of DeviceClass snap + + + + Revision changed The name of the autocreated EventType (f26a6404-e011-11e7-9224-2350048461eb) Revision geändert - + + Revision + The name of the ParamType of the autocreated EventType (f26a6404-e011-11e7-9224-2350048461eb) of DeviceClass snap + + + + Rollback to previous version The name of the ActionType e061dee6-62fc-45cc-9c9f-403c2be52939 of deviceClass snap Zurücksetzen auf vorhergehende Version - + Start update The name of the ActionType 45626b75-f09d-4dd1-b6c4-ee33201b47b0 of deviceClass snapdControl Starte Systemupdate - + Update manager The name of the DeviceClass (d90cda58-4d8c-4b7f-a982-38e56a95b72a) Update Manager - + Update manager available changed The name of the autocreated EventType (6b662b3e-fd12-4f24-be77-aec066f16d8c) Update Manager Verfügbarkeit geändert - + + Update manager available + The name of the ParamType of the autocreated EventType (6b662b3e-fd12-4f24-be77-aec066f16d8c) of DeviceClass snapdControl + + + + + System update available + The name of the ParamType of the autocreated EventType (a6b1d24b-d523-4516-9bce-5b467e5e09b2) of DeviceClass snapdControl + + + + + System update running + The name of the ParamType of the autocreated EventType (01ca7a22-5607-4c5e-a465-a2ae7e8b529c) of DeviceClass snapdControl + + + + Snap The name of the DeviceClass (ff0840d7-fcfc-4403-9d9f-301610d5a437) Snap - + System update running changed The name of the autocreated EventType (01ca7a22-5607-4c5e-a465-a2ae7e8b529c) Systemupdate aktiv geändert - + Status changed The name of the autocreated EventType (4987aca3-3916-4cb3-938f-df6c99d04dbf) Status geändert - + Name The name of the paramType (4f38614d-8be0-48dc-a24d-cee9ff1f2a89) of snap Name - + Channel changed The name of the autocreated EventType (7be2b61e-3f59-4b92-b2bb-50d027bb92ff) Kanal geändert - + Check for updates The name of the ActionType 4738f2c9-666e-45b9-91d3-7bcbf722b669 of deviceClass snapdControl Nach Aktualisierungen suchen diff --git a/snapd/translations/b82bce59-59bf-48b3-b781-54a6f45800f3-en_US.ts b/snapd/translations/b82bce59-59bf-48b3-b781-54a6f45800f3-en_US.ts index ec22ad61..f386b650 100644 --- a/snapd/translations/b82bce59-59bf-48b3-b781-54a6f45800f3-en_US.ts +++ b/snapd/translations/b82bce59-59bf-48b3-b781-54a6f45800f3-en_US.ts @@ -4,193 +4,202 @@ Snapd - + Snapd The name of the plugin Snapd (b82bce59-59bf-48b3-b781-54a6f45800f3) - + Advanced mode - The name of the paramType (017fe4c5-fc41-41fe-8e67-08fdaccb89ea) of Snapd + The name of the paramType (017fe4c5-fc41-41fe-8e67-08fdaccb89ea) of snapd - + + Automatic daily refresh schedule + The name of the paramType (d2e697d1-9a68-4666-bf40-8d70fa694eec) of snapd + + + + Canonical The name of the vendor (60582ddf-32ea-4fcd-a6f2-f3beaaf21517) - - snapdAvailable - The name of the ParamType of StateType (6b662b3e-fd12-4f24-be77-aec066f16d8c) of DeviceClass snapdControl - - - - + System update available changed The name of the autocreated EventType (a6b1d24b-d523-4516-9bce-5b467e5e09b2) - - updateAvailable - The name of the ParamType of StateType (a6b1d24b-d523-4516-9bce-5b467e5e09b2) of DeviceClass snapdControl - - - - - updateRunning - The name of the ParamType of StateType (01ca7a22-5607-4c5e-a465-a2ae7e8b529c) of DeviceClass snapdControl - - - - - lastUpdateTime - The name of the ParamType of StateType (c671545a-6bde-4c08-8e37-0d256841a3a5) of DeviceClass snapdControl - - - - - nextUpdateTime - The name of the ParamType of StateType (122c2423-a1d9-400f-80f8-b1f798975914) of DeviceClass snapdControl - - - - - status - The name of the ParamType of StateType (4987aca3-3916-4cb3-938f-df6c99d04dbf) of DeviceClass snapdControl - - - - - channel - The name of the ParamType of StateType (7be2b61e-3f59-4b92-b2bb-50d027bb92ff) of DeviceClass snap - - - - - version - The name of the ParamType of StateType (532a95f3-db29-427e-bb32-d5a22029e586) of DeviceClass snap - - - - - revision - The name of the ParamType of StateType (f26a6404-e011-11e7-9224-2350048461eb) of DeviceClass snap - - - - + Last automatic system update time changed The name of the autocreated EventType (c671545a-6bde-4c08-8e37-0d256841a3a5) - + + Last automatic system update + The name of the ParamType of the autocreated EventType (c671545a-6bde-4c08-8e37-0d256841a3a5) of DeviceClass snapdControl + + + + Next automatic system update time changed The name of the autocreated EventType (122c2423-a1d9-400f-80f8-b1f798975914) - + + Next automatic system update + The name of the ParamType of the autocreated EventType (122c2423-a1d9-400f-80f8-b1f798975914) of DeviceClass snapdControl + + + + + Status + The name of the ParamType of the autocreated EventType (4987aca3-3916-4cb3-938f-df6c99d04dbf) of DeviceClass snapdControl + + + + ID The name of the paramType (9afb98fb-f717-4f4c-8009-1a6514054c5f) of snap - + Summary The name of the paramType (12b9a65f-970b-49b5-b1d0-1625fc6d8758) of snap - + Description The name of the paramType (fe24c61b-e154-4259-b7ca-6f0602e9d1c3) of snap - + Developer The name of the paramType (76ead9c5-0a18-40a2-b31d-f6bb6dfea0a5) of snap - + + + Channel + The name of the ParamType of the autocreated EventType (7be2b61e-3f59-4b92-b2bb-50d027bb92ff) of DeviceClass snap +---------- +The name of the autocreated ParamType of the writable StateType (7be2b61e-3f59-4b92-b2bb-50d027bb92ff) of DeviceClass snap + + + + Set channel The name of the autocreated ActionType (7be2b61e-3f59-4b92-b2bb-50d027bb92ff) - + Version changed The name of the autocreated EventType (532a95f3-db29-427e-bb32-d5a22029e586) - + + Version + The name of the ParamType of the autocreated EventType (532a95f3-db29-427e-bb32-d5a22029e586) of DeviceClass snap + + + + Revision changed The name of the autocreated EventType (f26a6404-e011-11e7-9224-2350048461eb) - + + Revision + The name of the ParamType of the autocreated EventType (f26a6404-e011-11e7-9224-2350048461eb) of DeviceClass snap + + + + Rollback to previous version The name of the ActionType e061dee6-62fc-45cc-9c9f-403c2be52939 of deviceClass snap - + Start update The name of the ActionType 45626b75-f09d-4dd1-b6c4-ee33201b47b0 of deviceClass snapdControl - + Update manager The name of the DeviceClass (d90cda58-4d8c-4b7f-a982-38e56a95b72a) - + Update manager available changed The name of the autocreated EventType (6b662b3e-fd12-4f24-be77-aec066f16d8c) - + + Update manager available + The name of the ParamType of the autocreated EventType (6b662b3e-fd12-4f24-be77-aec066f16d8c) of DeviceClass snapdControl + + + + + System update available + The name of the ParamType of the autocreated EventType (a6b1d24b-d523-4516-9bce-5b467e5e09b2) of DeviceClass snapdControl + + + + + System update running + The name of the ParamType of the autocreated EventType (01ca7a22-5607-4c5e-a465-a2ae7e8b529c) of DeviceClass snapdControl + + + + Snap The name of the DeviceClass (ff0840d7-fcfc-4403-9d9f-301610d5a437) - + System update running changed The name of the autocreated EventType (01ca7a22-5607-4c5e-a465-a2ae7e8b529c) - + Status changed The name of the autocreated EventType (4987aca3-3916-4cb3-938f-df6c99d04dbf) - + Name The name of the paramType (4f38614d-8be0-48dc-a24d-cee9ff1f2a89) of snap - + Channel changed The name of the autocreated EventType (7be2b61e-3f59-4b92-b2bb-50d027bb92ff) - + Check for updates The name of the ActionType 4738f2c9-666e-45b9-91d3-7bcbf722b669 of deviceClass snapdControl diff --git a/tcpcommander/deviceplugintcpcommander.cpp b/tcpcommander/deviceplugintcpcommander.cpp index bc3f2042..52bfef1c 100644 --- a/tcpcommander/deviceplugintcpcommander.cpp +++ b/tcpcommander/deviceplugintcpcommander.cpp @@ -2,19 +2,19 @@ * * * Copyright (C) 2017 Bernhard Trinnes * * * - * This file is part of guh. * + * This file is part of nymea. * * * - * Guh is free software: you can redistribute it and/or modify * + * nymea 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, * + * nymea 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 . * + * along with nymea. If not, see . * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ @@ -143,7 +143,7 @@ void DevicePluginTcpCommander::onTcpServerConnected() } connect(tcpServer, &TcpServer::textMessageReceived, this, &DevicePluginTcpCommander::onTcpServerTextMessageReceived); - //send signal device Setup was successfull + //send signal device Setup was successful } @@ -167,7 +167,7 @@ void DevicePluginTcpCommander::onTcpServerTextMessageReceived(QByteArray data) device->setStateValue(tcpInputDataReceivedStateTypeId, data); if (device->paramValue(tcpInputComparisionParamTypeId).toString() == "Is exactly") { - qDebug(dcTCPCommander()) << "is exacly"; + qDebug(dcTCPCommander()) << "is exactly"; if (data == device->paramValue(tcpInputInputDataParamTypeId)) { qDebug(dcTCPCommander()) << "comparison successful"; emitEvent(Event(tcpInputCommandReceivedEventTypeId, device->id())); diff --git a/tcpcommander/deviceplugintcpcommander.h b/tcpcommander/deviceplugintcpcommander.h index d2f00ab4..5fa9ca40 100644 --- a/tcpcommander/deviceplugintcpcommander.h +++ b/tcpcommander/deviceplugintcpcommander.h @@ -2,19 +2,19 @@ * * * Copyright (C) 2017 Bernhard Trinnes * * * - * This file is part of guh. * + * This file is part of nymea. * * * - * Guh is free software: you can redistribute it and/or modify * + * nymea 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, * + * nymea 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 . * + * along with nymea. If not, see . * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ @@ -29,7 +29,7 @@ class DevicePluginTcpCommander : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "deviceplugintcpcommander.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "deviceplugintcpcommander.json") Q_INTERFACES(DevicePlugin) public: diff --git a/tcpcommander/deviceplugintcpcommander.json b/tcpcommander/deviceplugintcpcommander.json index 1121351e..9269823a 100644 --- a/tcpcommander/deviceplugintcpcommander.json +++ b/tcpcommander/deviceplugintcpcommander.json @@ -26,16 +26,14 @@ "displayName": "IPv4 Address", "type": "QString", "inputType": "IPv4Address", - "defaultValue": "127.0.0.1", - "index" : 0 + "defaultValue": "127.0.0.1" }, { "id": "bee8b151-815a-4159-9d8a-42b76e99b42c", "name": "port", "displayName": "Port", "type": "int", - "defaultValue": "22", - "index" : 1 + "defaultValue": "22" } ], "stateTypes":[ @@ -45,8 +43,7 @@ "displayName": "connected", "type": "bool", "defaultValue": false, - "displayNameEvent": "connection status changed", - "index" : 0 + "displayNameEvent": "connection status changed" } ], "actionTypes": [ @@ -54,14 +51,12 @@ "id": "6bc52462-b192-46a4-a6df-92cc5a479c89", "name": "outputData", "displayName": "Send Data", - "index": 0, "paramTypes": [ { "id": "6604c852-6b24-4707-b8e5-1ddd8032efcc", "name": "outputDataArea", "displayName": "Data", "type": "QString", - "index": 0, "inputType": "TextArea" } ] @@ -84,8 +79,7 @@ "name": "port", "displayName": "Port", "type": "int", - "defaultValue": "22", - "index" : 0 + "defaultValue": "22" }, { "id": "d99f55c7-0e14-45ee-b0f0-33f2d1d2e674", @@ -99,8 +93,7 @@ "Starts with", "Ends with" ], - "defaultValue": "Exactly", - "index" : 1 + "defaultValue": "Exactly" }, { "id": "23051bdf-3f50-41fa-abde-bc4fe0bcc4fc", @@ -108,8 +101,7 @@ "displayName": "Command", "type": "QString", "inputType": "TextArea", - "defaultValue": "", - "index" : 2 + "defaultValue": "" } ], "stateTypes": [ @@ -119,26 +111,22 @@ "displayName": "connected", "type": "bool", "defaultValue": false, - "displayNameEvent": "connection status changed", - "index" : 0 + "displayNameEvent": "connection status changed" }, { "id": "b98fdacc-59d7-41c4-b790-1fdca50dfb22", "name": "dataReceived", "displayName": "Data Received", "type": "QString", - "inputType": "TextArea", "defaultValue": "", - "displayNameEvent": "Data received", - "index" : 1 + "displayNameEvent": "Data received" } ], "eventTypes": [ { "id": "6d7c6df6-cb61-4d9e-b0d7-37c43911ca4b", "name": "commandReceived", - "displayName": "Command Received", - "index": 0 + "displayName": "Command Received" } ] } diff --git a/tcpcommander/tcpcommander.pro b/tcpcommander/tcpcommander.pro index c72b3825..2a37d360 100644 --- a/tcpcommander/tcpcommander.pro +++ b/tcpcommander/tcpcommander.pro @@ -1,6 +1,8 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_deviceplugintcpcommander) +QT += network + +TARGET = $$qtLibraryTarget(nymea_deviceplugintcpcommander) SOURCES += \ deviceplugintcpcommander.cpp \ diff --git a/tcpcommander/tcpserver.cpp b/tcpcommander/tcpserver.cpp index 0004ba50..20399ec3 100644 --- a/tcpcommander/tcpserver.cpp +++ b/tcpcommander/tcpserver.cpp @@ -2,19 +2,19 @@ * * * Copyright (C) 2017 Bernhard Trinnes * * * - * This file is part of guh. * + * This file is part of nymea. * * * - * Guh is free software: you can redistribute it and/or modify * + * nymea 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, * + * nymea 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 . * + * along with nymea. If not, see . * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ diff --git a/tcpcommander/tcpserver.h b/tcpcommander/tcpserver.h index e5fc78b8..9d8a3af5 100644 --- a/tcpcommander/tcpserver.h +++ b/tcpcommander/tcpserver.h @@ -2,19 +2,19 @@ * * * Copyright (C) 2017 Bernhard Trinnes * * * - * This file is part of guh. * + * This file is part of nymea. * * * - * Guh is free software: you can redistribute it and/or modify * + * nymea 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, * + * nymea 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 . * + * along with nymea. If not, see . * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ diff --git a/tcpcommander/translations/741b7b0a-0c9c-4c93-be99-0d0bcf5a4643-de_DE.ts b/tcpcommander/translations/741b7b0a-0c9c-4c93-be99-0d0bcf5a4643-de_DE.ts index a312b3e5..0dd4a694 100644 --- a/tcpcommander/translations/741b7b0a-0c9c-4c93-be99-0d0bcf5a4643-de_DE.ts +++ b/tcpcommander/translations/741b7b0a-0c9c-4c93-be99-0d0bcf5a4643-de_DE.ts @@ -5,7 +5,7 @@ TCPCommander - TCPCommander + tcp commander The name of the plugin TCPCommander (741b7b0a-0c9c-4c93-be99-0d0bcf5a4643) @@ -47,9 +47,9 @@ The name of the paramType (bee8b151-815a-4159-9d8a-42b76e99b42c) of tcpInput connected - The name of the ParamType of StateType (725b541a-9e0c-4634-81eb-e415c0b8f025) of DeviceClass tcpOutput + The name of the ParamType of the autocreated EventType (725b541a-9e0c-4634-81eb-e415c0b8f025) of DeviceClass tcpOutput ---------- -The name of the ParamType of StateType (725b541a-9e0c-4634-81eb-e415c0b8f025) of DeviceClass tcpInput +The name of the ParamType of the autocreated EventType (725b541a-9e0c-4634-81eb-e415c0b8f025) of DeviceClass tcpInput @@ -90,8 +90,8 @@ The name of the ParamType of StateType (725b541a-9e0c-4634-81eb-e415c0b8f025) of - dataReceived - The name of the ParamType of StateType (b98fdacc-59d7-41c4-b790-1fdca50dfb22) of DeviceClass tcpInput + Data Received + The name of the ParamType of the autocreated EventType (b98fdacc-59d7-41c4-b790-1fdca50dfb22) of DeviceClass tcpInput diff --git a/tcpcommander/translations/741b7b0a-0c9c-4c93-be99-0d0bcf5a4643-en_US.ts b/tcpcommander/translations/741b7b0a-0c9c-4c93-be99-0d0bcf5a4643-en_US.ts index e1f621c5..0b463175 100644 --- a/tcpcommander/translations/741b7b0a-0c9c-4c93-be99-0d0bcf5a4643-en_US.ts +++ b/tcpcommander/translations/741b7b0a-0c9c-4c93-be99-0d0bcf5a4643-en_US.ts @@ -5,7 +5,7 @@ TCPCommander - TCPCommander + tcp commander The name of the plugin TCPCommander (741b7b0a-0c9c-4c93-be99-0d0bcf5a4643) @@ -47,9 +47,9 @@ The name of the paramType (bee8b151-815a-4159-9d8a-42b76e99b42c) of tcpInput connected - The name of the ParamType of StateType (725b541a-9e0c-4634-81eb-e415c0b8f025) of DeviceClass tcpOutput + The name of the ParamType of the autocreated EventType (725b541a-9e0c-4634-81eb-e415c0b8f025) of DeviceClass tcpOutput ---------- -The name of the ParamType of StateType (725b541a-9e0c-4634-81eb-e415c0b8f025) of DeviceClass tcpInput +The name of the ParamType of the autocreated EventType (725b541a-9e0c-4634-81eb-e415c0b8f025) of DeviceClass tcpInput @@ -90,8 +90,8 @@ The name of the ParamType of StateType (725b541a-9e0c-4634-81eb-e415c0b8f025) of - dataReceived - The name of the ParamType of StateType (b98fdacc-59d7-41c4-b790-1fdca50dfb22) of DeviceClass tcpInput + Data Received + The name of the ParamType of the autocreated EventType (b98fdacc-59d7-41c4-b790-1fdca50dfb22) of DeviceClass tcpInput diff --git a/udpcommander/devicepluginudpcommander.cpp b/udpcommander/devicepluginudpcommander.cpp index 8eddefac..51f97f65 100644 --- a/udpcommander/devicepluginudpcommander.cpp +++ b/udpcommander/devicepluginudpcommander.cpp @@ -1,8 +1,9 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 2015 Simon Stürz * + * Copyright (C) 2015-2018 Simon Stürz * + * Copyright (C) 2017 Bernhard Trinnes * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -26,28 +27,28 @@ \brief Plugin for catching UDP commands from the network. \ingroup plugins - \ingroup guh-plugins-maker + \ingroup nymea-plugins-maker This plugin allows to receive UDP packages over a certain UDP port and generates an \l{Event} if the message content matches the \l{Param} command. - \note This plugin is ment to be combined with a \l{guhserver::Rule}. + \note This plugin is ment to be combined with a \l{nymeaserver::Rule}. \section3 Example - If you create an UDP Commander on port 2323 and with the command \c{"Light 1 ON"}, following command will trigger an \l{Event} in guh - and allows you to connect this \l{Event} with a \l{guhserver::Rule}. + If you create an UDP Commander on port 2323 and with the command \c{"Light 1 ON"}, following command will trigger an \l{Event} in nymea + and allows you to connect this \l{Event} with a \l{nymeaserver::Rule}. - \note In this example guh is running on \c localhost + \note In this example nymea is running on \c localhost \code $ echo "Light 1 ON" | nc -u localhost 2323 OK \endcode - This allows you to execute \l{Action}{Actions} in your home automation system when a certain UDP message will be sent to guh. + This allows you to execute \l{Action}{Actions} in your home automation system when a certain UDP message will be sent to nymea. - If the command will be recognized from guh, the sender will receive as answere a \c{"OK"} string. + If the command will be recognized from nymea, the sender will receive as answere a \c{"OK"} string. \chapter Plugin properties Following JSON file contains the definition and the description of all available \l{DeviceClass}{DeviceClasses} @@ -69,41 +70,72 @@ DevicePluginUdpCommander::DevicePluginUdpCommander() DeviceManager::DeviceSetupStatus DevicePluginUdpCommander::setupDevice(Device *device) { - // check port - bool portOk = false; - int port = device->paramValue(commanderPortParamTypeId).toInt(&portOk); - if (!portOk || port <= 0 || port > 65535) { - qCWarning(dcUdpCommander) << device->name() << ": invalid port:" << device->paramValue(commanderPortParamTypeId).toString() << "."; - return DeviceManager::DeviceSetupStatusFailure; + qCDebug(dcUdpCommander()) << "Setup device" << device->name() << device->params(); + + if (device->deviceClassId() == udpReceiverDeviceClassId) { + QUdpSocket *udpSocket = new QUdpSocket(this); + int port = device->paramValue(udpReceiverPortParamTypeId).toInt(); + if (!udpSocket->bind(QHostAddress::Any, port, QUdpSocket::ShareAddress)) { + qCWarning(dcUdpCommander()) << device->name() << "cannot bind to port" << port; + delete udpSocket; + return DeviceManager::DeviceSetupStatusFailure; + } + + connect(udpSocket, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams())); + m_receiverList.insert(udpSocket, device); + + return DeviceManager::DeviceSetupStatusSuccess; + } else if (device->deviceClassId() == udpCommanderDeviceClassId) { + QUdpSocket *udpSocket = new QUdpSocket(this); + m_commanderList.insert(udpSocket, device); + return DeviceManager::DeviceSetupStatusSuccess; } - QUdpSocket *udpSocket = new QUdpSocket(this); + return DeviceManager::DeviceSetupStatusFailure; +} - if (!udpSocket->bind(QHostAddress::Any, port)) { - qCWarning(dcUdpCommander) << device->name() << "can't bind to port" << port << "."; - delete udpSocket; - return DeviceManager::DeviceSetupStatusFailure; + +DeviceManager::DeviceError DevicePluginUdpCommander::executeAction(Device *device, const Action &action) { + + if (device->deviceClassId() == udpCommanderDeviceClassId) { + if (action.actionTypeId() == udpCommanderOutputDataActionTypeId) { + QUdpSocket *udpSocket = m_commanderList.key(device); + int port = device->paramValue(udpCommanderPortParamTypeId).toInt(); + QHostAddress address = QHostAddress(device->paramValue(udpCommanderAddressParamTypeId).toString()); + QByteArray data = action.param(udpCommanderDataParamTypeId).value().toByteArray(); + qDebug(dcUdpCommander()) << "Send UDP datagram:" << data << "address:" << address.toIPv4Address() << "port:" << port; + udpSocket->writeDatagram(data, address, port); + + return DeviceManager::DeviceErrorNoError; + } + return DeviceManager::DeviceErrorActionTypeNotFound; } - - connect(udpSocket, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams())); - m_commanderList.insert(udpSocket, device); - - return DeviceManager::DeviceSetupStatusSuccess; + return DeviceManager::DeviceErrorDeviceClassNotFound; } void DevicePluginUdpCommander::deviceRemoved(Device *device) { - QUdpSocket *socket = m_commanderList.key(device); - m_commanderList.remove(socket); + if (device->deviceClassId() == udpReceiverDeviceClassId) { + QUdpSocket *socket = m_receiverList.key(device); + m_receiverList.remove(socket); + socket->close(); + socket->deleteLater(); - socket->close(); - socket->deleteLater(); + } else if (device->deviceClassId() == udpCommanderDeviceClassId) { + QUdpSocket *socket = m_commanderList.key(device); + m_commanderList.remove(socket); + socket->close(); + socket->deleteLater(); + } } void DevicePluginUdpCommander::readPendingDatagrams() { - QUdpSocket *socket= qobject_cast(sender()); - Device *device = m_commanderList.value(socket); + QUdpSocket *socket= static_cast(sender()); + Device *device = m_receiverList.value(socket); + + if (!device) + return; QByteArray datagram; QHostAddress sender; @@ -114,10 +146,14 @@ void DevicePluginUdpCommander::readPendingDatagrams() socket->readDatagram(datagram.data(), datagram.size(), &sender, &senderPort); } - if (datagram == device->paramValue(commanderCommandParamTypeId).toByteArray() || - datagram == device->paramValue(commanderCommandParamTypeId).toByteArray() + "\n") { - qCDebug(dcUdpCommander) << device->name() << " got command from" << sender.toString() << senderPort; - emit emitEvent(Event(commanderCommandReceivedEventTypeId, device->id())); + device->setStateValue(udpReceiverInputDataStateTypeId, datagram); + + if (datagram == device->paramValue(udpReceiverCommandParamTypeId).toByteArray() || + datagram == device->paramValue(udpReceiverCommandParamTypeId).toByteArray() + "\n") { + qCDebug(dcUdpCommander()) << device->name() << "got command from" << sender.toString() << senderPort; + emit emitEvent(Event(udpReceiverCommandReceivedEventTypeId, device->id())); + + // Send response for verification socket->writeDatagram("OK\n", sender, senderPort); } } diff --git a/udpcommander/devicepluginudpcommander.h b/udpcommander/devicepluginudpcommander.h index 86e6721b..f5c9f9e3 100644 --- a/udpcommander/devicepluginudpcommander.h +++ b/udpcommander/devicepluginudpcommander.h @@ -1,8 +1,9 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright (C) 2015 Simon Stürz * + * Copyright (C) 2015-2018 Simon Stürz * + * Copyright (C) 2017 Bernhard Trinnes * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -32,7 +33,7 @@ class DevicePluginUdpCommander : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "devicepluginudpcommander.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginudpcommander.json") Q_INTERFACES(DevicePlugin) public: @@ -41,7 +42,10 @@ public: DeviceManager::DeviceSetupStatus setupDevice(Device *device) override; void deviceRemoved(Device *device) override; + DeviceManager::DeviceError executeAction(Device *device, const Action &action) override; + private: + QHash m_receiverList; QHash m_commanderList; private slots: diff --git a/udpcommander/devicepluginudpcommander.json b/udpcommander/devicepluginudpcommander.json index e4ec49fe..c9d2a0a5 100644 --- a/udpcommander/devicepluginudpcommander.json +++ b/udpcommander/devicepluginudpcommander.json @@ -5,39 +5,91 @@ "vendors": [ { "name": "guh", - "displayName": "guh", + "displayName": "guh GmbH", "id": "2062d64d-3232-433c-88bc-0d33c0ba2ba6", "deviceClasses": [ { "id": "6ecd5a8d-595a-4520-85e3-dcc9679edf66", - "displayName": "UDP Commander", - "name": "commander", + "displayName": "UDP Receiver", + "name": "udpReceiver", "deviceIcon": "Network", - "basicTags": [ - "Service", - "Sensor" - ], + "basicTags": ["Service", "Sensor"], "createMethods": ["user"], "paramTypes": [ { "id": "1843adcb-e377-44d1-8d70-ab4f9eeb32ec", "name": "port", - "displayName": "port", - "type": "int" + "displayName": "Port", + "type": "int", + "minValue": 0, + "maxValue": 65535, + "defaultValue": 4242 }, { "id": "d0f29961-1624-4b91-a0e8-9b1cc86c44c7", "name": "command", - "displayName": "command", + "displayName": "Command", "type": "QString", - "inputType": "TextLine" + "defaultValue": "Hello" + } + ], + "stateTypes":[ + { + "id": "065a1a0a-d324-4ae6-a461-bef8143e8795", + "name": "inputData", + "displayName": "Received data", + "displayNameEvent": "Received data changed", + "type": "QString", + "defaultValue": "" } ], "eventTypes": [ { "id": "5fecbba3-ffbb-456b-872c-a2f571c681cb", "name": "commandReceived", - "displayName": "command received" + "displayName": "Command received" + } + ] + }, + { + "id": "31b00639-8904-4522-84ed-54c46a54c63c", + "name": "udpCommander", + "displayName": "UDP Commander", + "deviceIcon": "Network", + "basicTags": ["Service", "Sensor"], + "createMethods": ["user"], + "paramTypes": [ + { + "id": "eb204dfe-11f8-413f-8b68-8bffef3f9a7f", + "name": "port", + "displayName": "Port", + "type": "int", + "minValue": 0, + "maxValue": 65535, + "defaultValue": 4242 + }, + { + "id": "ea1be9fc-9a9b-44ba-a28d-e021aef4f046", + "name": "address", + "displayName": "Address", + "type": "QString", + "inputType": "IPv4Address", + "defaultValue": "127.0.0.1" + } + ], + "actionTypes": [ + { + "id": "6bc52462-b192-46a4-a6df-92cc5a479c89", + "name": "outputData", + "displayName": "Send data", + "paramTypes": [ + { + "id": "6604c852-6b24-4707-b8e5-1ddd8032efcc", + "name": "data", + "displayName": "Data", + "type": "QString" + } + ] } ] } diff --git a/udpcommander/translations/24a8474c-1d86-499e-a76e-9cbfbf48dd72-de_DE.ts b/udpcommander/translations/24a8474c-1d86-499e-a76e-9cbfbf48dd72-de_DE.ts index 7421c349..207e3732 100644 --- a/udpcommander/translations/24a8474c-1d86-499e-a76e-9cbfbf48dd72-de_DE.ts +++ b/udpcommander/translations/24a8474c-1d86-499e-a76e-9cbfbf48dd72-de_DE.ts @@ -4,39 +4,75 @@ UdpCommander - + + UDP Commander - The name of the DeviceClass (6ecd5a8d-595a-4520-85e3-dcc9679edf66) + The name of the plugin UdpCommander (24a8474c-1d86-499e-a76e-9cbfbf48dd72) +---------- +The name of the DeviceClass (31b00639-8904-4522-84ed-54c46a54c63c) - - guh + + guh GmbH The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) - - UdpCommander - The name of the plugin UdpCommander (24a8474c-1d86-499e-a76e-9cbfbf48dd72) + + UDP Receiver + The name of the DeviceClass (6ecd5a8d-595a-4520-85e3-dcc9679edf66) - - port - The name of the paramType (1843adcb-e377-44d1-8d70-ab4f9eeb32ec) of commander + + + Port + The name of the paramType (1843adcb-e377-44d1-8d70-ab4f9eeb32ec) of udpReceiver +---------- +The name of the paramType (eb204dfe-11f8-413f-8b68-8bffef3f9a7f) of udpCommander - - command - The name of the paramType (d0f29961-1624-4b91-a0e8-9b1cc86c44c7) of commander + + Command + The name of the paramType (d0f29961-1624-4b91-a0e8-9b1cc86c44c7) of udpReceiver - - command received - The name of the EventType 5fecbba3-ffbb-456b-872c-a2f571c681cb of deviceClass commander + + Received data changed + The name of the autocreated EventType (065a1a0a-d324-4ae6-a461-bef8143e8795) + + + + + Received data + The name of the ParamType of the autocreated EventType (065a1a0a-d324-4ae6-a461-bef8143e8795) of DeviceClass udpReceiver + + + + + Command received + The name of the EventType 5fecbba3-ffbb-456b-872c-a2f571c681cb of deviceClass udpReceiver + + + + + Address + The name of the paramType (ea1be9fc-9a9b-44ba-a28d-e021aef4f046) of udpCommander + + + + + Send data + The name of the ActionType 6bc52462-b192-46a4-a6df-92cc5a479c89 of deviceClass udpCommander + + + + + Data + The name of the paramType (6604c852-6b24-4707-b8e5-1ddd8032efcc) of udpCommander diff --git a/udpcommander/translations/24a8474c-1d86-499e-a76e-9cbfbf48dd72-en_US.ts b/udpcommander/translations/24a8474c-1d86-499e-a76e-9cbfbf48dd72-en_US.ts index 2e81ef0c..fb0f1893 100644 --- a/udpcommander/translations/24a8474c-1d86-499e-a76e-9cbfbf48dd72-en_US.ts +++ b/udpcommander/translations/24a8474c-1d86-499e-a76e-9cbfbf48dd72-en_US.ts @@ -4,39 +4,75 @@ UdpCommander - + + UDP Commander - The name of the DeviceClass (6ecd5a8d-595a-4520-85e3-dcc9679edf66) + The name of the plugin UdpCommander (24a8474c-1d86-499e-a76e-9cbfbf48dd72) +---------- +The name of the DeviceClass (31b00639-8904-4522-84ed-54c46a54c63c) - - guh + + guh GmbH The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) - - UdpCommander - The name of the plugin UdpCommander (24a8474c-1d86-499e-a76e-9cbfbf48dd72) + + UDP Receiver + The name of the DeviceClass (6ecd5a8d-595a-4520-85e3-dcc9679edf66) - - port - The name of the paramType (1843adcb-e377-44d1-8d70-ab4f9eeb32ec) of commander + + + Port + The name of the paramType (1843adcb-e377-44d1-8d70-ab4f9eeb32ec) of udpReceiver +---------- +The name of the paramType (eb204dfe-11f8-413f-8b68-8bffef3f9a7f) of udpCommander - - command - The name of the paramType (d0f29961-1624-4b91-a0e8-9b1cc86c44c7) of commander + + Command + The name of the paramType (d0f29961-1624-4b91-a0e8-9b1cc86c44c7) of udpReceiver - - command received - The name of the EventType 5fecbba3-ffbb-456b-872c-a2f571c681cb of deviceClass commander + + Received data changed + The name of the autocreated EventType (065a1a0a-d324-4ae6-a461-bef8143e8795) + + + + + Received data + The name of the ParamType of the autocreated EventType (065a1a0a-d324-4ae6-a461-bef8143e8795) of DeviceClass udpReceiver + + + + + Command received + The name of the EventType 5fecbba3-ffbb-456b-872c-a2f571c681cb of deviceClass udpReceiver + + + + + Address + The name of the paramType (ea1be9fc-9a9b-44ba-a28d-e021aef4f046) of udpCommander + + + + + Send data + The name of the ActionType 6bc52462-b192-46a4-a6df-92cc5a479c89 of deviceClass udpCommander + + + + + Data + The name of the paramType (6604c852-6b24-4707-b8e5-1ddd8032efcc) of udpCommander diff --git a/udpcommander/udpcommander.pro b/udpcommander/udpcommander.pro index 82d2d26a..37eaa209 100644 --- a/udpcommander/udpcommander.pro +++ b/udpcommander/udpcommander.pro @@ -1,6 +1,8 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_devicepluginudpcommander) +QT += network + +TARGET = $$qtLibraryTarget(nymea_devicepluginudpcommander) SOURCES += \ devicepluginudpcommander.cpp diff --git a/unitec/devicepluginunitec.cpp b/unitec/devicepluginunitec.cpp index bdda754f..109c4ffc 100644 --- a/unitec/devicepluginunitec.cpp +++ b/unitec/devicepluginunitec.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -26,15 +26,15 @@ \brief Plugin for Unitech RF 433 MHz devices. \ingroup plugins - \ingroup guh-plugins + \ingroup nymea-plugins This plugin allows to controll RF 433 MHz actors an receive remote signals from \l{http://www.unitec-elektro.de}{Unitec} devices. The unitec socket units have a learn function. If you plug in the switch, a red light will start to blink. This means - the socket is in the learning mode. Now you can add a Unitec switch (48111) to guh with your desired Channel (A,B,C or D). + the socket is in the learning mode. Now you can add a Unitec switch (48111) to nymea with your desired Channel (A,B,C or D). In order to pair the socket you just have to press the power ON, and the switch has to be in the pairing mode. - If the pairing was successfull, the switch will turn on. If the switches will be removed from the socket or there will + If the pairing was successful, the switch will turn on. If the switches will be removed from the socket or there will be a power breakdown, the switch has to be re-paired. The device can not remember the teached channel. \chapter Plugin properties diff --git a/unitec/devicepluginunitec.h b/unitec/devicepluginunitec.h index aaa0b638..be650f90 100644 --- a/unitec/devicepluginunitec.h +++ b/unitec/devicepluginunitec.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -29,7 +29,7 @@ class DevicePluginUnitec : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "devicepluginunitec.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginunitec.json") Q_INTERFACES(DevicePlugin) public: diff --git a/unitec/unitec.pro b/unitec/unitec.pro index 94aeb35a..fca27818 100644 --- a/unitec/unitec.pro +++ b/unitec/unitec.pro @@ -1,6 +1,6 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_devicepluginunitec) +TARGET = $$qtLibraryTarget(nymea_devicepluginunitec) SOURCES += \ devicepluginunitec.cpp diff --git a/usbwde/devicepluginusbwde.cpp b/usbwde/devicepluginusbwde.cpp index 35971ce5..ae910db5 100644 --- a/usbwde/devicepluginusbwde.cpp +++ b/usbwde/devicepluginusbwde.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2016 Alexander Lampret * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * diff --git a/usbwde/devicepluginusbwde.h b/usbwde/devicepluginusbwde.h index 5168f311..0fb45794 100644 --- a/usbwde/devicepluginusbwde.h +++ b/usbwde/devicepluginusbwde.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2016 Alexander Lampret * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -33,7 +33,7 @@ class DevicePluginUsbWde : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "devicepluginusbwde.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginusbwde.json") Q_INTERFACES(DevicePlugin) public: diff --git a/usbwde/devicepluginusbwde.json b/usbwde/devicepluginusbwde.json index d0444d54..9df221c4 100644 --- a/usbwde/devicepluginusbwde.json +++ b/usbwde/devicepluginusbwde.json @@ -65,8 +65,7 @@ "name": "channel", "displayName": "channel", "type": "int", - "readonly": true, - "inputType": "None" + "readOnly": true } ], "stateTypes": [ @@ -121,8 +120,7 @@ "name": "channel", "displayName": "channel", "type": "int", - "readonly": true, - "inputType": "None" + "readOnly": true } ], "stateTypes": [ diff --git a/usbwde/translations/b01bc368-d674-41ef-a368-6b6a76c96365-de_DE.ts b/usbwde/translations/b01bc368-d674-41ef-a368-6b6a76c96365-de_DE.ts index eb5195f3..8b64dee1 100644 --- a/usbwde/translations/b01bc368-d674-41ef-a368-6b6a76c96365-de_DE.ts +++ b/usbwde/translations/b01bc368-d674-41ef-a368-6b6a76c96365-de_DE.ts @@ -4,9 +4,12 @@ UsbWde + USB WDE - The name of the DeviceClass (20e1b650-41d1-41b7-891f-1e68130d1403) + The name of the plugin UsbWde (b01bc368-d674-41ef-a368-6b6a76c96365) +---------- +The name of the DeviceClass (20e1b650-41d1-41b7-891f-1e68130d1403) @@ -15,12 +18,6 @@ The name of the vendor (55500c7c-9b09-4462-8d71-e5b4b42f6940) - - - UsbWde - The name of the plugin UsbWde (b01bc368-d674-41ef-a368-6b6a76c96365) - - @@ -70,28 +67,10 @@ The name of the paramType (fc611e60-d975-4d1f-9977-19d2b90c3838) of windRainSens - lastUpdate - The name of the ParamType of StateType (046e5ffe-7d75-4a8a-ac0a-9310814a800e) of DeviceClass temperatureSensor + last update + The name of the ParamType of the autocreated EventType (046e5ffe-7d75-4a8a-ac0a-9310814a800e) of DeviceClass temperatureSensor ---------- -The name of the ParamType of StateType (046e5ffe-7d75-4a8a-ac0a-9310814a800e) of DeviceClass windRainSensor - - - - - windStrength - The name of the ParamType of StateType (8e058c13-b5bf-4558-b24e-e3197ba7a9de) of DeviceClass windRainSensor - - - - - rainStrength - The name of the ParamType of StateType (a6116ea9-1db9-4071-9daf-ae79aab62375) of DeviceClass windRainSensor - - - - - isRain - The name of the ParamType of StateType (a9660178-926b-4f86-9593-67678b337039) of DeviceClass windRainSensor +The name of the ParamType of the autocreated EventType (046e5ffe-7d75-4a8a-ac0a-9310814a800e) of DeviceClass windRainSensor @@ -105,9 +84,9 @@ The name of the ParamType of StateType (046e5ffe-7d75-4a8a-ac0a-9310814a800e) of temperature - The name of the ParamType of StateType (0023a9c1-0d84-499d-88c4-c06b6d793e27) of DeviceClass temperatureSensor + The name of the ParamType of the autocreated EventType (0023a9c1-0d84-499d-88c4-c06b6d793e27) of DeviceClass temperatureSensor ---------- -The name of the ParamType of StateType (0023a9c1-0d84-499d-88c4-c06b6d793e27) of DeviceClass windRainSensor +The name of the ParamType of the autocreated EventType (0023a9c1-0d84-499d-88c4-c06b6d793e27) of DeviceClass windRainSensor @@ -121,9 +100,9 @@ The name of the ParamType of StateType (0023a9c1-0d84-499d-88c4-c06b6d793e27) of humidity - The name of the ParamType of StateType (452400e8-89ac-4419-94a8-d6eeb97f694d) of DeviceClass temperatureSensor + The name of the ParamType of the autocreated EventType (452400e8-89ac-4419-94a8-d6eeb97f694d) of DeviceClass temperatureSensor ---------- -The name of the ParamType of StateType (452400e8-89ac-4419-94a8-d6eeb97f694d) of DeviceClass windRainSensor +The name of the ParamType of the autocreated EventType (452400e8-89ac-4419-94a8-d6eeb97f694d) of DeviceClass windRainSensor @@ -138,17 +117,35 @@ The name of the ParamType of StateType (452400e8-89ac-4419-94a8-d6eeb97f694d) of The name of the autocreated EventType (8e058c13-b5bf-4558-b24e-e3197ba7a9de) + + + wind strength + The name of the ParamType of the autocreated EventType (8e058c13-b5bf-4558-b24e-e3197ba7a9de) of DeviceClass windRainSensor + + rain strength changed The name of the autocreated EventType (a6116ea9-1db9-4071-9daf-ae79aab62375) + + + rain strength + The name of the ParamType of the autocreated EventType (a6116ea9-1db9-4071-9daf-ae79aab62375) of DeviceClass windRainSensor + + is raining changed The name of the autocreated EventType (a9660178-926b-4f86-9593-67678b337039) + + + is raining + The name of the ParamType of the autocreated EventType (a9660178-926b-4f86-9593-67678b337039) of DeviceClass windRainSensor + + diff --git a/usbwde/translations/b01bc368-d674-41ef-a368-6b6a76c96365-en_US.ts b/usbwde/translations/b01bc368-d674-41ef-a368-6b6a76c96365-en_US.ts index b830835d..a31b4d2c 100644 --- a/usbwde/translations/b01bc368-d674-41ef-a368-6b6a76c96365-en_US.ts +++ b/usbwde/translations/b01bc368-d674-41ef-a368-6b6a76c96365-en_US.ts @@ -4,9 +4,12 @@ UsbWde + USB WDE - The name of the DeviceClass (20e1b650-41d1-41b7-891f-1e68130d1403) + The name of the plugin UsbWde (b01bc368-d674-41ef-a368-6b6a76c96365) +---------- +The name of the DeviceClass (20e1b650-41d1-41b7-891f-1e68130d1403) @@ -15,12 +18,6 @@ The name of the vendor (55500c7c-9b09-4462-8d71-e5b4b42f6940) - - - UsbWde - The name of the plugin UsbWde (b01bc368-d674-41ef-a368-6b6a76c96365) - - @@ -70,28 +67,10 @@ The name of the paramType (fc611e60-d975-4d1f-9977-19d2b90c3838) of windRainSens - lastUpdate - The name of the ParamType of StateType (046e5ffe-7d75-4a8a-ac0a-9310814a800e) of DeviceClass temperatureSensor + last update + The name of the ParamType of the autocreated EventType (046e5ffe-7d75-4a8a-ac0a-9310814a800e) of DeviceClass temperatureSensor ---------- -The name of the ParamType of StateType (046e5ffe-7d75-4a8a-ac0a-9310814a800e) of DeviceClass windRainSensor - - - - - windStrength - The name of the ParamType of StateType (8e058c13-b5bf-4558-b24e-e3197ba7a9de) of DeviceClass windRainSensor - - - - - rainStrength - The name of the ParamType of StateType (a6116ea9-1db9-4071-9daf-ae79aab62375) of DeviceClass windRainSensor - - - - - isRain - The name of the ParamType of StateType (a9660178-926b-4f86-9593-67678b337039) of DeviceClass windRainSensor +The name of the ParamType of the autocreated EventType (046e5ffe-7d75-4a8a-ac0a-9310814a800e) of DeviceClass windRainSensor @@ -105,9 +84,9 @@ The name of the ParamType of StateType (046e5ffe-7d75-4a8a-ac0a-9310814a800e) of temperature - The name of the ParamType of StateType (0023a9c1-0d84-499d-88c4-c06b6d793e27) of DeviceClass temperatureSensor + The name of the ParamType of the autocreated EventType (0023a9c1-0d84-499d-88c4-c06b6d793e27) of DeviceClass temperatureSensor ---------- -The name of the ParamType of StateType (0023a9c1-0d84-499d-88c4-c06b6d793e27) of DeviceClass windRainSensor +The name of the ParamType of the autocreated EventType (0023a9c1-0d84-499d-88c4-c06b6d793e27) of DeviceClass windRainSensor @@ -121,9 +100,9 @@ The name of the ParamType of StateType (0023a9c1-0d84-499d-88c4-c06b6d793e27) of humidity - The name of the ParamType of StateType (452400e8-89ac-4419-94a8-d6eeb97f694d) of DeviceClass temperatureSensor + The name of the ParamType of the autocreated EventType (452400e8-89ac-4419-94a8-d6eeb97f694d) of DeviceClass temperatureSensor ---------- -The name of the ParamType of StateType (452400e8-89ac-4419-94a8-d6eeb97f694d) of DeviceClass windRainSensor +The name of the ParamType of the autocreated EventType (452400e8-89ac-4419-94a8-d6eeb97f694d) of DeviceClass windRainSensor @@ -138,17 +117,35 @@ The name of the ParamType of StateType (452400e8-89ac-4419-94a8-d6eeb97f694d) of The name of the autocreated EventType (8e058c13-b5bf-4558-b24e-e3197ba7a9de) + + + wind strength + The name of the ParamType of the autocreated EventType (8e058c13-b5bf-4558-b24e-e3197ba7a9de) of DeviceClass windRainSensor + + rain strength changed The name of the autocreated EventType (a6116ea9-1db9-4071-9daf-ae79aab62375) + + + rain strength + The name of the ParamType of the autocreated EventType (a6116ea9-1db9-4071-9daf-ae79aab62375) of DeviceClass windRainSensor + + is raining changed The name of the autocreated EventType (a9660178-926b-4f86-9593-67678b337039) + + + is raining + The name of the ParamType of the autocreated EventType (a9660178-926b-4f86-9593-67678b337039) of DeviceClass windRainSensor + + diff --git a/usbwde/usbwde.pro b/usbwde/usbwde.pro index 4d37533d..db743b7a 100644 --- a/usbwde/usbwde.pro +++ b/usbwde/usbwde.pro @@ -2,7 +2,7 @@ include(../plugins.pri) QT += serialport -TARGET = $$qtLibraryTarget(guh_devicepluginusbwde) +TARGET = $$qtLibraryTarget(nymea_devicepluginusbwde) SOURCES += \ devicepluginusbwde.cpp diff --git a/wakeonlan/devicepluginwakeonlan.cpp b/wakeonlan/devicepluginwakeonlan.cpp index cb3b09a7..8c151319 100644 --- a/wakeonlan/devicepluginwakeonlan.cpp +++ b/wakeonlan/devicepluginwakeonlan.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -26,7 +26,7 @@ \brief Plugin for wake up devices in the LAN (wol). \ingroup plugins - \ingroup guh-plugins + \ingroup nymea-plugins Wake-on-LAN (WOL) is an Ethernet computer networking standard that allows a computer to be turned on or awakened by a network message. This plugin allows you to send a diff --git a/wakeonlan/devicepluginwakeonlan.h b/wakeonlan/devicepluginwakeonlan.h index 9eb27ee6..fe69ab64 100644 --- a/wakeonlan/devicepluginwakeonlan.h +++ b/wakeonlan/devicepluginwakeonlan.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -31,7 +31,7 @@ class DevicePluginWakeOnLan : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "devicepluginwakeonlan.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginwakeonlan.json") Q_INTERFACES(DevicePlugin) public: diff --git a/wakeonlan/devicepluginwakeonlan.json b/wakeonlan/devicepluginwakeonlan.json index 1ab8cceb..b8e2e717 100644 --- a/wakeonlan/devicepluginwakeonlan.json +++ b/wakeonlan/devicepluginwakeonlan.json @@ -5,7 +5,7 @@ "vendors": [ { "name": "guh", - "displayName": "guh", + "displayName": "guh GmbH", "id": "2062d64d-3232-433c-88bc-0d33c0ba2ba6", "deviceClasses": [ { diff --git a/wakeonlan/translations/b5a87848-de56-451e-84a6-edd26ad4958f-de_DE.ts b/wakeonlan/translations/b5a87848-de56-451e-84a6-edd26ad4958f-de_DE.ts index 2e4b8bbb..8b79a5a9 100644 --- a/wakeonlan/translations/b5a87848-de56-451e-84a6-edd26ad4958f-de_DE.ts +++ b/wakeonlan/translations/b5a87848-de56-451e-84a6-edd26ad4958f-de_DE.ts @@ -5,15 +5,15 @@ WakeOnLan - WakeOnLan + Wake on Lan The name of the plugin WakeOnLan (b5a87848-de56-451e-84a6-edd26ad4958f) - guh + guh GmbH The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) - guh + diff --git a/wakeonlan/translations/b5a87848-de56-451e-84a6-edd26ad4958f-en_US.ts b/wakeonlan/translations/b5a87848-de56-451e-84a6-edd26ad4958f-en_US.ts index ba37ed7f..2087bf05 100644 --- a/wakeonlan/translations/b5a87848-de56-451e-84a6-edd26ad4958f-en_US.ts +++ b/wakeonlan/translations/b5a87848-de56-451e-84a6-edd26ad4958f-en_US.ts @@ -5,13 +5,13 @@ WakeOnLan - WakeOnLan + Wake on Lan The name of the plugin WakeOnLan (b5a87848-de56-451e-84a6-edd26ad4958f) - guh + guh GmbH The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) diff --git a/wakeonlan/wakeonlan.pro b/wakeonlan/wakeonlan.pro index 9f1bedcf..e16564e3 100644 --- a/wakeonlan/wakeonlan.pro +++ b/wakeonlan/wakeonlan.pro @@ -1,6 +1,6 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_devicepluginwakeonlan) +TARGET = $$qtLibraryTarget(nymea_devicepluginwakeonlan) QT += network diff --git a/wemo/devicepluginwemo.cpp b/wemo/devicepluginwemo.cpp index d7343fb4..a4fbaf5a 100644 --- a/wemo/devicepluginwemo.cpp +++ b/wemo/devicepluginwemo.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -26,9 +26,9 @@ \brief Plugin for Belkin WeMo sockets. \ingroup plugins - \ingroup guh-plugins + \ingroup nymea-plugins - This plugin allows to find and controll devices from WeMo, the + This plugin allows to find and control devices from WeMo, the \l{http://www.belkin.com/de/PRODUKTE/home-automation/c/wemo-home-automation/}{Belkin} home automation system. @@ -105,8 +105,8 @@ DeviceManager::DeviceError DevicePluginWemo::executeAction(Device *device, const if (action.actionTypeId() == wemoSwitchPowerActionTypeId) { // Check if wemo device is reachable if (device->stateValue(wemoSwitchReachableStateTypeId).toBool()) { - // setPower returns false, if the curent powerState is allready the new powerState - if (setPower(device, action.param(wemoSwitchPowerStateParamTypeId).value().toBool(), action.id())) { + // setPower returns false, if the curent powerState is already the new powerState + if (setPower(device, action.param(wemoSwitchPowerActionParamTypeId).value().toBool(), action.id())) { return DeviceManager::DeviceErrorAsync; } else { return DeviceManager::DeviceErrorNoError; @@ -145,7 +145,7 @@ void DevicePluginWemo::refresh(Device *device) QNetworkRequest request; request.setUrl(QUrl("http://" + device->paramValue(wemoSwitchHostParamTypeId).toString() + ":" + device->paramValue(wemoSwitchPortParamTypeId).toString() + "/upnp/control/basicevent1")); request.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("text/xml; charset=\"utf-8\"")); - request.setHeader(QNetworkRequest::UserAgentHeader,QVariant("guh")); + request.setHeader(QNetworkRequest::UserAgentHeader,QVariant("nymea")); request.setRawHeader("SOAPACTION", "\"urn:Belkin:service:basicevent:1#GetBinaryState\""); QNetworkReply *reply = hardwareManager()->networkManager()->post(request, getBinarayStateMessage); @@ -165,7 +165,7 @@ bool DevicePluginWemo::setPower(Device *device, const bool &power, const ActionI QNetworkRequest request; request.setUrl(QUrl("http://" + device->paramValue(wemoSwitchHostParamTypeId).toString() + ":" + device->paramValue(wemoSwitchPortParamTypeId).toString() + "/upnp/control/basicevent1")); request.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("text/xml; charset=\"utf-8\"")); - request.setHeader(QNetworkRequest::UserAgentHeader,QVariant("guh")); + request.setHeader(QNetworkRequest::UserAgentHeader,QVariant("nymea")); request.setRawHeader("SOAPACTION", "\"urn:Belkin:service:basicevent:1#SetBinaryState\""); QNetworkReply *reply = hardwareManager()->networkManager()->post(request, setPowerMessage); diff --git a/wemo/devicepluginwemo.h b/wemo/devicepluginwemo.h index 1f1861d9..0eb91b8b 100644 --- a/wemo/devicepluginwemo.h +++ b/wemo/devicepluginwemo.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2015 Simon Stürz * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -32,7 +32,7 @@ class DevicePluginWemo : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "devicepluginwemo.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginwemo.json") Q_INTERFACES(DevicePlugin) public: diff --git a/wemo/translations/2e3b5ce0-ecf1-43de-98f0-07df4068a583-de_DE.ts b/wemo/translations/2e3b5ce0-ecf1-43de-98f0-07df4068a583-de_DE.ts index 0ef9b113..bf99052d 100644 --- a/wemo/translations/2e3b5ce0-ecf1-43de-98f0-07df4068a583-de_DE.ts +++ b/wemo/translations/2e3b5ce0-ecf1-43de-98f0-07df4068a583-de_DE.ts @@ -4,75 +4,78 @@ Wemo - + Wemo The name of the plugin Wemo (2e3b5ce0-ecf1-43de-98f0-07df4068a583) - + Belkin The name of the vendor (b241f7f5-8153-4a72-b260-f62beadc2d19) - + WeMo Switch The name of the DeviceClass (69d97d3b-a8e6-42f3-afc0-ca8a53eb7cce) - + name The name of the paramType (50d2236d-b73a-4d7b-ac8a-34c6566e6543) of wemoSwitch - + host address The name of the paramType (84ed399c-edb0-40da-8e2f-86eefc5790eb) of wemoSwitch - + port The name of the paramType (2d30eb6b-08cf-4d34-aeb5-fb441bb2291a) of wemoSwitch - + serial number The name of the paramType (93e1a45a-b8b9-48a7-869e-ad07550a1951) of wemoSwitch - + power changed The name of the autocreated EventType (7166c4f6-f68c-4188-8f7c-2205d72a5a6d) - + + power - The name of the ParamType of StateType (7166c4f6-f68c-4188-8f7c-2205d72a5a6d) of DeviceClass wemoSwitch + The name of the ParamType of the autocreated EventType (7166c4f6-f68c-4188-8f7c-2205d72a5a6d) of DeviceClass wemoSwitch +---------- +The name of the autocreated ParamType of the writable StateType (7166c4f6-f68c-4188-8f7c-2205d72a5a6d) of DeviceClass wemoSwitch - + Set power The name of the autocreated ActionType (7166c4f6-f68c-4188-8f7c-2205d72a5a6d) - + reachable changed The name of the autocreated EventType (ec2f5b49-585c-4455-a233-b7aa4c608dbc) - + reachable - The name of the ParamType of StateType (ec2f5b49-585c-4455-a233-b7aa4c608dbc) of DeviceClass wemoSwitch + The name of the ParamType of the autocreated EventType (ec2f5b49-585c-4455-a233-b7aa4c608dbc) of DeviceClass wemoSwitch diff --git a/wemo/translations/2e3b5ce0-ecf1-43de-98f0-07df4068a583-en_US.ts b/wemo/translations/2e3b5ce0-ecf1-43de-98f0-07df4068a583-en_US.ts index 7e3eedb4..f0372279 100644 --- a/wemo/translations/2e3b5ce0-ecf1-43de-98f0-07df4068a583-en_US.ts +++ b/wemo/translations/2e3b5ce0-ecf1-43de-98f0-07df4068a583-en_US.ts @@ -4,75 +4,78 @@ Wemo - + Wemo The name of the plugin Wemo (2e3b5ce0-ecf1-43de-98f0-07df4068a583) - + Belkin The name of the vendor (b241f7f5-8153-4a72-b260-f62beadc2d19) - + WeMo Switch The name of the DeviceClass (69d97d3b-a8e6-42f3-afc0-ca8a53eb7cce) - + name The name of the paramType (50d2236d-b73a-4d7b-ac8a-34c6566e6543) of wemoSwitch - + host address The name of the paramType (84ed399c-edb0-40da-8e2f-86eefc5790eb) of wemoSwitch - + port The name of the paramType (2d30eb6b-08cf-4d34-aeb5-fb441bb2291a) of wemoSwitch - + serial number The name of the paramType (93e1a45a-b8b9-48a7-869e-ad07550a1951) of wemoSwitch - + power changed The name of the autocreated EventType (7166c4f6-f68c-4188-8f7c-2205d72a5a6d) - + + power - The name of the ParamType of StateType (7166c4f6-f68c-4188-8f7c-2205d72a5a6d) of DeviceClass wemoSwitch + The name of the ParamType of the autocreated EventType (7166c4f6-f68c-4188-8f7c-2205d72a5a6d) of DeviceClass wemoSwitch +---------- +The name of the autocreated ParamType of the writable StateType (7166c4f6-f68c-4188-8f7c-2205d72a5a6d) of DeviceClass wemoSwitch - + Set power The name of the autocreated ActionType (7166c4f6-f68c-4188-8f7c-2205d72a5a6d) - + reachable changed The name of the autocreated EventType (ec2f5b49-585c-4455-a233-b7aa4c608dbc) - + reachable - The name of the ParamType of StateType (ec2f5b49-585c-4455-a233-b7aa4c608dbc) of DeviceClass wemoSwitch + The name of the ParamType of the autocreated EventType (ec2f5b49-585c-4455-a233-b7aa4c608dbc) of DeviceClass wemoSwitch diff --git a/wemo/wemo.pro b/wemo/wemo.pro index eeb361ac..cc51324a 100644 --- a/wemo/wemo.pro +++ b/wemo/wemo.pro @@ -1,6 +1,6 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_devicepluginwemo) +TARGET = $$qtLibraryTarget(nymea_devicepluginwemo) QT+= network diff --git a/ws2812/devicepluginws2812.cpp b/ws2812/devicepluginws2812.cpp index 180545e7..6974281a 100644 --- a/ws2812/devicepluginws2812.cpp +++ b/ws2812/devicepluginws2812.cpp @@ -3,7 +3,7 @@ * Copyright (C) 2015 Simon Stürz * * Copyright (C) 2016 Bernhard Trinnes * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -24,10 +24,10 @@ /*! \page ws2812.html \title ws2812 - \brief Plugin to controll ws2812 LEDs based on 6LoWPAN networking. + \brief Plugin to control ws2812 LEDs based on 6LoWPAN networking. \ingroup plugins - \ingroup guh-plugins-merkur + \ingroup nymea-plugins-merkur The plugin for the \l{http://cdn.sparkfun.com/datasheets/Components/LED/WS2812.pdf}{ws2812} led module. This plugin allows to control a ws2812 module over a 6LoWPAN network. @@ -101,7 +101,7 @@ DeviceManager::DeviceError DevicePluginWs2812::discoverDevices(const DeviceClass Q_UNUSED(params) // Perform a HTTP GET on the RPL router address - QHostAddress address(configuration().paramValue(Ws2812RplParamTypeId).toString()); + QHostAddress address(configuration().paramValue(ws2812RplParamTypeId).toString()); qCDebug(dcWs2812) << "Scan for new nodes on RPL" << address.toString(); QUrl url; @@ -140,7 +140,7 @@ DeviceManager::DeviceError DevicePluginWs2812::executeAction(Device *device, con url.setHost(device->paramValue(ws2812HostParamTypeId).toString()); url.setPath("/a/color"); - QColor newColor = action.param(ws2812EffectModeStateParamTypeId).value().value().toRgb(); + QColor newColor = action.param(ws2812EffectModeActionParamTypeId).value().value().toRgb(); QByteArray message = "color=" + newColor.name().remove("#").toUtf8(); qCDebug(dcWs2812) << "Sending" << url.toString() << message; @@ -164,7 +164,7 @@ DeviceManager::DeviceError DevicePluginWs2812::executeAction(Device *device, con url.setHost(device->paramValue(ws2812HostParamTypeId).toString()); url.setPath("/a/speed"); - int speed = action.param(ws2812SpeedStateParamTypeId).value().toInt(); + int speed = action.param(ws2812SpeedActionParamTypeId).value().toInt(); qCDebug(dcWs2812) << "Set Speed:" << speed; @@ -190,7 +190,7 @@ DeviceManager::DeviceError DevicePluginWs2812::executeAction(Device *device, con url.setPath("/a/brightness"); - int brightness = action.param(ws2812BrightnessStateParamTypeId).value().toInt(); + int brightness = action.param(ws2812BrightnessActionParamTypeId).value().toInt(); qCDebug(dcWs2812) << "Set brightness:" << brightness; @@ -220,7 +220,7 @@ DeviceManager::DeviceError DevicePluginWs2812::executeAction(Device *device, con //QColor newColor = QColor::fromHsv(color.hue(), color.saturation(), 100 * light->brightness() / 255.0); //QByteArray message = "color=" + newColor.toRgb().name().remove("#").toUtf8(); - int max = action.param(ws2812MaxPixStateParamTypeId).value().toInt(); + int max = action.param(ws2812MaxPixActionParamTypeId).value().toInt(); qCDebug(dcWs2812) << "Max Pix" << max; @@ -246,7 +246,7 @@ DeviceManager::DeviceError DevicePluginWs2812::executeAction(Device *device, con int effectmode = 0; - QString effectModeString = action.param(ws2812EffectModeStateParamTypeId).value().toString(); + QString effectModeString = action.param(ws2812EffectModeActionParamTypeId).value().toString(); QUrl url; @@ -311,11 +311,11 @@ DeviceManager::DeviceError DevicePluginWs2812::executeAction(Device *device, con */ if(action.actionTypeId() == ws2812Tcolor1ActionTypeId) { - tColor1 = action.param(ws2812Tcolor1StateParamTypeId).value().value().toRgb(); + tColor1 = action.param(ws2812Tcolor1ActionParamTypeId).value().value().toRgb(); } else if(action.actionTypeId() == ws2812Tcolor2ActionTypeId){ - tColor2 = action.param(ws2812Tcolor2StateParamTypeId).value().value().toRgb(); + tColor2 = action.param(ws2812Tcolor2ActionParamTypeId).value().value().toRgb(); } else if(action.actionTypeId() == ws2812Tcolor3ActionTypeId){ - tColor3 = action.param(ws2812Tcolor3StateParamTypeId).value().value().toRgb(); + tColor3 = action.param(ws2812Tcolor3ActionParamTypeId).value().value().toRgb(); } QByteArray message = "color=" + tColor1.name().remove("#").toUtf8() + tColor2.name().remove("#").toUtf8() + tColor3.name().remove("#").toUtf8(); @@ -704,7 +704,7 @@ void DevicePluginWs2812::coapReplyFinished(CoapReply *reply) emit actionExecutionFinished(action.id(), DeviceManager::DeviceErrorHardwareFailure); return; } - QString tcolor = action.param(ws2812EffectColorStateParamTypeId).value().toByteArray(); + QString tcolor = action.param(ws2812EffectColorActionParamTypeId).value().toByteArray(); // Update the state here, so we don't have to wait for the notification device->setStateValue(ws2812Tcolor1StateTypeId, tcolor.left(6)); @@ -736,7 +736,7 @@ void DevicePluginWs2812::coapReplyFinished(CoapReply *reply) } // Update the state here, so we don't have to wait for the notification - device->setStateValue(ws2812EffectColorStateTypeId, action.param(ws2812EffectColorStateParamTypeId).value().toInt()); + device->setStateValue(ws2812EffectColorStateTypeId, action.param(ws2812EffectColorActionParamTypeId).value().toInt()); // Tell the user about the action execution result emit actionExecutionFinished(action.id(), DeviceManager::DeviceErrorNoError); @@ -762,7 +762,7 @@ void DevicePluginWs2812::coapReplyFinished(CoapReply *reply) } // Update the state here, so we don't have to wait for the notification - device->setStateValue(ws2812BrightnessStateTypeId, action.param(ws2812BrightnessStateParamTypeId).value().toInt()); + device->setStateValue(ws2812BrightnessStateTypeId, action.param(ws2812BrightnessActionParamTypeId).value().toInt()); // Tell the user about the action execution result emit actionExecutionFinished(action.id(), DeviceManager::DeviceErrorNoError); @@ -788,7 +788,7 @@ void DevicePluginWs2812::coapReplyFinished(CoapReply *reply) } // Update the state here, so we don't have to wait for the notification - device->setStateValue(ws2812SpeedStateTypeId, action.param(ws2812SpeedStateParamTypeId).value().toInt()); + device->setStateValue(ws2812SpeedStateTypeId, action.param(ws2812SpeedActionParamTypeId).value().toInt()); // Tell the user about the action execution result emit actionExecutionFinished(action.id(), DeviceManager::DeviceErrorNoError); @@ -814,7 +814,7 @@ void DevicePluginWs2812::coapReplyFinished(CoapReply *reply) } // Update the state here, so we don't have to wait for the notification - device->setStateValue(ws2812MaxPixStateTypeId, action.param(ws2812MaxPixStateParamTypeId).value().toInt()); + device->setStateValue(ws2812MaxPixStateTypeId, action.param(ws2812MaxPixActionParamTypeId).value().toInt()); // Tell the user about the action execution result emit actionExecutionFinished(action.id(), DeviceManager::DeviceErrorNoError); diff --git a/ws2812/devicepluginws2812.h b/ws2812/devicepluginws2812.h index eda5499c..016a0c6e 100644 --- a/ws2812/devicepluginws2812.h +++ b/ws2812/devicepluginws2812.h @@ -3,7 +3,7 @@ * Copyright (C) 2015 Simon Stürz * * Copyright (C) 2015 Bernhard Trinnes * * * - * This file is part of guh. * + * This file is part of nymea. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -36,7 +36,7 @@ class DevicePluginWs2812 : public DevicePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "devicepluginws2812.json") + Q_PLUGIN_METADATA(IID "io.nymea.DevicePlugin" FILE "devicepluginws2812.json") Q_INTERFACES(DevicePlugin) public: diff --git a/ws2812/devicepluginws2812.json b/ws2812/devicepluginws2812.json index b8d4db61..fd0731e9 100644 --- a/ws2812/devicepluginws2812.json +++ b/ws2812/devicepluginws2812.json @@ -14,7 +14,7 @@ ], "vendors": [ { - "displayName": "guh", + "displayName": "guh GmbH", "name": "guh", "id": "2062d64d-3232-433c-88bc-0d33c0ba2ba6", "deviceClasses": [ diff --git a/ws2812/translations/60b68c75-3261-4bf1-8912-798d2d3bbd3b-de_DE.ts b/ws2812/translations/60b68c75-3261-4bf1-8912-798d2d3bbd3b-de_DE.ts index 3d634be7..5ac5930c 100644 --- a/ws2812/translations/60b68c75-3261-4bf1-8912-798d2d3bbd3b-de_DE.ts +++ b/ws2812/translations/60b68c75-3261-4bf1-8912-798d2d3bbd3b-de_DE.ts @@ -4,199 +4,220 @@ Ws2812 - + + WS2812 - The name of the DeviceClass (3142db46-5c6f-42d6-9001-753150763385) + The name of the plugin Ws2812 (60b68c75-3261-4bf1-8912-798d2d3bbd3b) +---------- +The name of the DeviceClass (3142db46-5c6f-42d6-9001-753150763385) - + RPL address - The name of the paramType (0a2898cb-ca36-4c6e-8418-993c1d9df434) of Ws2812 + The name of the paramType (0a2898cb-ca36-4c6e-8418-993c1d9df434) of ws2812 - - Ws2812 - The name of the plugin Ws2812 (60b68c75-3261-4bf1-8912-798d2d3bbd3b) - - - - - guh - The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) - - - - + host The name of the paramType (ccf1f6b1-54c4-46c1-b978-6abcf3fad882) of ws2812 - + battery voltage changed The name of the autocreated EventType (c9f6042f-1193-4075-94b1-37b29641ec24) - - battery - The name of the ParamType of StateType (c9f6042f-1193-4075-94b1-37b29641ec24) of DeviceClass ws2812 - - - - - effectColor - The name of the ParamType of StateType (8a73c60a-1da9-4228-8dba-2ffccc6531a6) of DeviceClass ws2812 - - - - - maxPix - The name of the ParamType of StateType (ac372b72-c2ae-4f0f-9fca-bd7cf654603a) of DeviceClass ws2812 - - - - - effectMode - The name of the ParamType of StateType (f4fe5d31-1edb-4944-9ddb-c89e7da8bee7) of DeviceClass ws2812 - - - - - tcolor1 - The name of the ParamType of StateType (8fe2e42a-7b9d-4c76-ae77-355759c81350) of DeviceClass ws2812 - - - - - tcolor2 - The name of the ParamType of StateType (dd4ad65b-007a-4eae-8ce0-b76d6cbf093e) of DeviceClass ws2812 - - - - - tcolor3 - The name of the ParamType of StateType (97c83be0-7ba7-4758-b52b-d997a80bfbe5) of DeviceClass ws2812 - - - - + reachable changed The name of the autocreated EventType (08091cde-983d-42f7-bdd7-d89c312ccbed) - - reachable - The name of the ParamType of StateType (08091cde-983d-42f7-bdd7-d89c312ccbed) of DeviceClass ws2812 + + guh GmbH + The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) - + + battery voltage + The name of the ParamType of the autocreated EventType (c9f6042f-1193-4075-94b1-37b29641ec24) of DeviceClass ws2812 + + + + + reachable + The name of the ParamType of the autocreated EventType (08091cde-983d-42f7-bdd7-d89c312ccbed) of DeviceClass ws2812 + + + + color changed The name of the autocreated EventType (8a73c60a-1da9-4228-8dba-2ffccc6531a6) - + + + color + The name of the ParamType of the autocreated EventType (8a73c60a-1da9-4228-8dba-2ffccc6531a6) of DeviceClass ws2812 +---------- +The name of the autocreated ParamType of the writable StateType (8a73c60a-1da9-4228-8dba-2ffccc6531a6) of DeviceClass ws2812 + + + + set color The name of the autocreated ActionType (8a73c60a-1da9-4228-8dba-2ffccc6531a6) - + brightness changed The name of the autocreated EventType (01da8dbc-1ac8-4d18-bc17-fc4b4c591693) - + + brightness - The name of the ParamType of StateType (01da8dbc-1ac8-4d18-bc17-fc4b4c591693) of DeviceClass ws2812 + The name of the ParamType of the autocreated EventType (01da8dbc-1ac8-4d18-bc17-fc4b4c591693) of DeviceClass ws2812 +---------- +The name of the autocreated ParamType of the writable StateType (01da8dbc-1ac8-4d18-bc17-fc4b4c591693) of DeviceClass ws2812 - + set brightness The name of the autocreated ActionType (01da8dbc-1ac8-4d18-bc17-fc4b4c591693) - + leds changed The name of the autocreated EventType (ac372b72-c2ae-4f0f-9fca-bd7cf654603a) - + + + leds + The name of the ParamType of the autocreated EventType (ac372b72-c2ae-4f0f-9fca-bd7cf654603a) of DeviceClass ws2812 +---------- +The name of the autocreated ParamType of the writable StateType (ac372b72-c2ae-4f0f-9fca-bd7cf654603a) of DeviceClass ws2812 + + + + set leds The name of the autocreated ActionType (ac372b72-c2ae-4f0f-9fca-bd7cf654603a) - + speed changed The name of the autocreated EventType (e53ae524-ca10-49c5-b530-e414779ecc1d) - + + speed - The name of the ParamType of StateType (e53ae524-ca10-49c5-b530-e414779ecc1d) of DeviceClass ws2812 + The name of the ParamType of the autocreated EventType (e53ae524-ca10-49c5-b530-e414779ecc1d) of DeviceClass ws2812 +---------- +The name of the autocreated ParamType of the writable StateType (e53ae524-ca10-49c5-b530-e414779ecc1d) of DeviceClass ws2812 - + set speed The name of the autocreated ActionType (e53ae524-ca10-49c5-b530-e414779ecc1d) - + effect mode changed The name of the autocreated EventType (f4fe5d31-1edb-4944-9ddb-c89e7da8bee7) - + + + effect mode + The name of the ParamType of the autocreated EventType (f4fe5d31-1edb-4944-9ddb-c89e7da8bee7) of DeviceClass ws2812 +---------- +The name of the autocreated ParamType of the writable StateType (f4fe5d31-1edb-4944-9ddb-c89e7da8bee7) of DeviceClass ws2812 + + + + set effect mode The name of the autocreated ActionType (f4fe5d31-1edb-4944-9ddb-c89e7da8bee7) - + tricolore color 1 changed The name of the autocreated EventType (8fe2e42a-7b9d-4c76-ae77-355759c81350) - + + + tricolore color 1 + The name of the ParamType of the autocreated EventType (8fe2e42a-7b9d-4c76-ae77-355759c81350) of DeviceClass ws2812 +---------- +The name of the autocreated ParamType of the writable StateType (8fe2e42a-7b9d-4c76-ae77-355759c81350) of DeviceClass ws2812 + + + + set tricolore color 1 The name of the autocreated ActionType (8fe2e42a-7b9d-4c76-ae77-355759c81350) - + tricolore color 2 changed The name of the autocreated EventType (dd4ad65b-007a-4eae-8ce0-b76d6cbf093e) - + + + tricolore color 2 + The name of the ParamType of the autocreated EventType (dd4ad65b-007a-4eae-8ce0-b76d6cbf093e) of DeviceClass ws2812 +---------- +The name of the autocreated ParamType of the writable StateType (dd4ad65b-007a-4eae-8ce0-b76d6cbf093e) of DeviceClass ws2812 + + + + set tricolore color 2 The name of the autocreated ActionType (dd4ad65b-007a-4eae-8ce0-b76d6cbf093e) - + tricolore color 3 changed The name of the autocreated EventType (97c83be0-7ba7-4758-b52b-d997a80bfbe5) - + + + tricolore color 3 + The name of the ParamType of the autocreated EventType (97c83be0-7ba7-4758-b52b-d997a80bfbe5) of DeviceClass ws2812 +---------- +The name of the autocreated ParamType of the writable StateType (97c83be0-7ba7-4758-b52b-d997a80bfbe5) of DeviceClass ws2812 + + + + set tricolore color 3 The name of the autocreated ActionType (97c83be0-7ba7-4758-b52b-d997a80bfbe5) diff --git a/ws2812/translations/60b68c75-3261-4bf1-8912-798d2d3bbd3b-en_US.ts b/ws2812/translations/60b68c75-3261-4bf1-8912-798d2d3bbd3b-en_US.ts index de7deed4..0969672e 100644 --- a/ws2812/translations/60b68c75-3261-4bf1-8912-798d2d3bbd3b-en_US.ts +++ b/ws2812/translations/60b68c75-3261-4bf1-8912-798d2d3bbd3b-en_US.ts @@ -4,199 +4,220 @@ Ws2812 - + + WS2812 - The name of the DeviceClass (3142db46-5c6f-42d6-9001-753150763385) + The name of the plugin Ws2812 (60b68c75-3261-4bf1-8912-798d2d3bbd3b) +---------- +The name of the DeviceClass (3142db46-5c6f-42d6-9001-753150763385) - + RPL address - The name of the paramType (0a2898cb-ca36-4c6e-8418-993c1d9df434) of Ws2812 + The name of the paramType (0a2898cb-ca36-4c6e-8418-993c1d9df434) of ws2812 - - Ws2812 - The name of the plugin Ws2812 (60b68c75-3261-4bf1-8912-798d2d3bbd3b) - - - - - guh - The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) - - - - + host The name of the paramType (ccf1f6b1-54c4-46c1-b978-6abcf3fad882) of ws2812 - + battery voltage changed The name of the autocreated EventType (c9f6042f-1193-4075-94b1-37b29641ec24) - - battery - The name of the ParamType of StateType (c9f6042f-1193-4075-94b1-37b29641ec24) of DeviceClass ws2812 - - - - - effectColor - The name of the ParamType of StateType (8a73c60a-1da9-4228-8dba-2ffccc6531a6) of DeviceClass ws2812 - - - - - maxPix - The name of the ParamType of StateType (ac372b72-c2ae-4f0f-9fca-bd7cf654603a) of DeviceClass ws2812 - - - - - effectMode - The name of the ParamType of StateType (f4fe5d31-1edb-4944-9ddb-c89e7da8bee7) of DeviceClass ws2812 - - - - - tcolor1 - The name of the ParamType of StateType (8fe2e42a-7b9d-4c76-ae77-355759c81350) of DeviceClass ws2812 - - - - - tcolor2 - The name of the ParamType of StateType (dd4ad65b-007a-4eae-8ce0-b76d6cbf093e) of DeviceClass ws2812 - - - - - tcolor3 - The name of the ParamType of StateType (97c83be0-7ba7-4758-b52b-d997a80bfbe5) of DeviceClass ws2812 - - - - + reachable changed The name of the autocreated EventType (08091cde-983d-42f7-bdd7-d89c312ccbed) - - reachable - The name of the ParamType of StateType (08091cde-983d-42f7-bdd7-d89c312ccbed) of DeviceClass ws2812 + + guh GmbH + The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) - + + battery voltage + The name of the ParamType of the autocreated EventType (c9f6042f-1193-4075-94b1-37b29641ec24) of DeviceClass ws2812 + + + + + reachable + The name of the ParamType of the autocreated EventType (08091cde-983d-42f7-bdd7-d89c312ccbed) of DeviceClass ws2812 + + + + color changed The name of the autocreated EventType (8a73c60a-1da9-4228-8dba-2ffccc6531a6) - + + + color + The name of the ParamType of the autocreated EventType (8a73c60a-1da9-4228-8dba-2ffccc6531a6) of DeviceClass ws2812 +---------- +The name of the autocreated ParamType of the writable StateType (8a73c60a-1da9-4228-8dba-2ffccc6531a6) of DeviceClass ws2812 + + + + set color The name of the autocreated ActionType (8a73c60a-1da9-4228-8dba-2ffccc6531a6) - + brightness changed The name of the autocreated EventType (01da8dbc-1ac8-4d18-bc17-fc4b4c591693) - + + brightness - The name of the ParamType of StateType (01da8dbc-1ac8-4d18-bc17-fc4b4c591693) of DeviceClass ws2812 + The name of the ParamType of the autocreated EventType (01da8dbc-1ac8-4d18-bc17-fc4b4c591693) of DeviceClass ws2812 +---------- +The name of the autocreated ParamType of the writable StateType (01da8dbc-1ac8-4d18-bc17-fc4b4c591693) of DeviceClass ws2812 - + set brightness The name of the autocreated ActionType (01da8dbc-1ac8-4d18-bc17-fc4b4c591693) - + leds changed The name of the autocreated EventType (ac372b72-c2ae-4f0f-9fca-bd7cf654603a) - + + + leds + The name of the ParamType of the autocreated EventType (ac372b72-c2ae-4f0f-9fca-bd7cf654603a) of DeviceClass ws2812 +---------- +The name of the autocreated ParamType of the writable StateType (ac372b72-c2ae-4f0f-9fca-bd7cf654603a) of DeviceClass ws2812 + + + + set leds The name of the autocreated ActionType (ac372b72-c2ae-4f0f-9fca-bd7cf654603a) - + speed changed The name of the autocreated EventType (e53ae524-ca10-49c5-b530-e414779ecc1d) - + + speed - The name of the ParamType of StateType (e53ae524-ca10-49c5-b530-e414779ecc1d) of DeviceClass ws2812 + The name of the ParamType of the autocreated EventType (e53ae524-ca10-49c5-b530-e414779ecc1d) of DeviceClass ws2812 +---------- +The name of the autocreated ParamType of the writable StateType (e53ae524-ca10-49c5-b530-e414779ecc1d) of DeviceClass ws2812 - + set speed The name of the autocreated ActionType (e53ae524-ca10-49c5-b530-e414779ecc1d) - + effect mode changed The name of the autocreated EventType (f4fe5d31-1edb-4944-9ddb-c89e7da8bee7) - + + + effect mode + The name of the ParamType of the autocreated EventType (f4fe5d31-1edb-4944-9ddb-c89e7da8bee7) of DeviceClass ws2812 +---------- +The name of the autocreated ParamType of the writable StateType (f4fe5d31-1edb-4944-9ddb-c89e7da8bee7) of DeviceClass ws2812 + + + + set effect mode The name of the autocreated ActionType (f4fe5d31-1edb-4944-9ddb-c89e7da8bee7) - + tricolore color 1 changed The name of the autocreated EventType (8fe2e42a-7b9d-4c76-ae77-355759c81350) - + + + tricolore color 1 + The name of the ParamType of the autocreated EventType (8fe2e42a-7b9d-4c76-ae77-355759c81350) of DeviceClass ws2812 +---------- +The name of the autocreated ParamType of the writable StateType (8fe2e42a-7b9d-4c76-ae77-355759c81350) of DeviceClass ws2812 + + + + set tricolore color 1 The name of the autocreated ActionType (8fe2e42a-7b9d-4c76-ae77-355759c81350) - + tricolore color 2 changed The name of the autocreated EventType (dd4ad65b-007a-4eae-8ce0-b76d6cbf093e) - + + + tricolore color 2 + The name of the ParamType of the autocreated EventType (dd4ad65b-007a-4eae-8ce0-b76d6cbf093e) of DeviceClass ws2812 +---------- +The name of the autocreated ParamType of the writable StateType (dd4ad65b-007a-4eae-8ce0-b76d6cbf093e) of DeviceClass ws2812 + + + + set tricolore color 2 The name of the autocreated ActionType (dd4ad65b-007a-4eae-8ce0-b76d6cbf093e) - + tricolore color 3 changed The name of the autocreated EventType (97c83be0-7ba7-4758-b52b-d997a80bfbe5) - + + + tricolore color 3 + The name of the ParamType of the autocreated EventType (97c83be0-7ba7-4758-b52b-d997a80bfbe5) of DeviceClass ws2812 +---------- +The name of the autocreated ParamType of the writable StateType (97c83be0-7ba7-4758-b52b-d997a80bfbe5) of DeviceClass ws2812 + + + + set tricolore color 3 The name of the autocreated ActionType (97c83be0-7ba7-4758-b52b-d997a80bfbe5) diff --git a/ws2812/ws2812.pro b/ws2812/ws2812.pro index 4f14ed88..24056ad0 100644 --- a/ws2812/ws2812.pro +++ b/ws2812/ws2812.pro @@ -1,6 +1,8 @@ include(../plugins.pri) -TARGET = $$qtLibraryTarget(guh_devicepluginws2812) +QT += network + +TARGET = $$qtLibraryTarget(nymea_devicepluginws2812) SOURCES += \ devicepluginws2812.cpp