From 7f0f2d1d092de7614c82e7ac963068ad2cd1e41d Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Mon, 16 Sep 2019 16:01:16 +0200 Subject: [PATCH 01/14] Rework devicemanager and plugin api --- libnymea-core/cloud/cloudnotifications.cpp | 36 +- libnymea-core/cloud/cloudnotifications.h | 6 +- .../devices/devicemanagerimplementation.cpp | 915 +++++++++--------- .../devices/devicemanagerimplementation.h | 55 +- libnymea-core/jsonrpc/actionhandler.cpp | 100 +- libnymea-core/jsonrpc/actionhandler.h | 7 - libnymea-core/jsonrpc/devicehandler.cpp | 348 +++---- libnymea-core/jsonrpc/devicehandler.h | 21 - libnymea-core/nymeacore.cpp | 147 +-- libnymea-core/nymeacore.h | 20 +- .../servers/rest/deviceclassesresource.cpp | 46 +- .../servers/rest/deviceclassesresource.h | 3 - .../servers/rest/devicesresource.cpp | 298 +++--- libnymea-core/servers/rest/devicesresource.h | 8 - libnymea/devices/browseractioninfo.cpp | 58 ++ libnymea/devices/browseractioninfo.h | 57 ++ libnymea/devices/browseresult.cpp | 79 ++ libnymea/devices/browseresult.h | 65 ++ libnymea/devices/browseritemactioninfo.cpp | 58 ++ libnymea/devices/browseritemactioninfo.h | 58 ++ libnymea/devices/browseritemresult.cpp | 75 ++ libnymea/devices/browseritemresult.h | 64 ++ libnymea/devices/device.cpp | 2 +- libnymea/devices/device.h | 33 +- libnymea/devices/deviceactioninfo.cpp | 75 ++ libnymea/devices/deviceactioninfo.h | 67 ++ libnymea/devices/devicedescriptor.h | 9 + libnymea/devices/devicediscoveryinfo.cpp | 90 ++ libnymea/devices/devicediscoveryinfo.h | 74 ++ libnymea/devices/devicemanager.h | 37 +- libnymea/devices/devicepairinginfo.cpp | 73 +- libnymea/devices/devicepairinginfo.h | 46 +- libnymea/devices/deviceplugin.cpp | 116 ++- libnymea/devices/deviceplugin.h | 38 +- libnymea/devices/devicesetupinfo.cpp | 71 ++ libnymea/devices/devicesetupinfo.h | 62 ++ libnymea/devices/pluginmetadata.cpp | 9 +- libnymea/libnymea.pro | 30 +- libnymea/types/deviceclass.h | 4 +- plugins/mock/devicepluginmock.cpp | 911 ++++++++++------- plugins/mock/devicepluginmock.h | 34 +- plugins/mock/devicepluginmock.json | 23 +- plugins/mock/extern-plugininfo.h | 3 + plugins/mock/plugininfo.h | 18 +- tests/auto/devices/testdevices.cpp | 78 +- tests/auto/logging/testlogging.cpp | 1 + .../testrestdeviceclasses.cpp | 6 + tests/auto/restdevices/testrestdevices.cpp | 8 +- tests/auto/rules/testrules.cpp | 38 +- tests/auto/timemanager/testtimemanager.cpp | 16 +- tests/testlib/nymeatestbase.cpp | 57 +- tests/testlib/nymeatestbase.h | 2 + .../plugininfocompiler.cpp | 4 - 53 files changed, 2786 insertions(+), 1773 deletions(-) create mode 100644 libnymea/devices/browseractioninfo.cpp create mode 100644 libnymea/devices/browseractioninfo.h create mode 100644 libnymea/devices/browseresult.cpp create mode 100644 libnymea/devices/browseresult.h create mode 100644 libnymea/devices/browseritemactioninfo.cpp create mode 100644 libnymea/devices/browseritemactioninfo.h create mode 100644 libnymea/devices/browseritemresult.cpp create mode 100644 libnymea/devices/browseritemresult.h create mode 100644 libnymea/devices/deviceactioninfo.cpp create mode 100644 libnymea/devices/deviceactioninfo.h create mode 100644 libnymea/devices/devicediscoveryinfo.cpp create mode 100644 libnymea/devices/devicediscoveryinfo.h create mode 100644 libnymea/devices/devicesetupinfo.cpp create mode 100644 libnymea/devices/devicesetupinfo.h diff --git a/libnymea-core/cloud/cloudnotifications.cpp b/libnymea-core/cloud/cloudnotifications.cpp index 7c3aba25..4148adbf 100644 --- a/libnymea-core/cloud/cloudnotifications.cpp +++ b/libnymea-core/cloud/cloudnotifications.cpp @@ -20,6 +20,8 @@ #include "cloudnotifications.h" #include "loggingcategories.h" +#include "devices/devicesetupinfo.h" +#include "devices/deviceactioninfo.h" #include #include @@ -136,31 +138,31 @@ PluginMetadata CloudNotifications::metaData() const return PluginMetadata(QJsonObject::fromVariantMap(pluginMetaData), true); } -Device::DeviceSetupStatus CloudNotifications::setupDevice(Device *device) +void CloudNotifications::setupDevice(DeviceSetupInfo *info) { + Device *device = info->device(); device->setStateValue(connectedStateTypeId, m_awsConnector->isConnected()); qCDebug(dcCloud) << "Cloud Notifications Device setup:" << device->name() << "Connected:" << m_awsConnector->isConnected(); - connect(m_awsConnector, &AWSConnector::connected, device, [device]() { + connect(m_awsConnector, &AWSConnector::connected, info->device(), [device]() { device->setStateValue(connectedStateTypeId, true); }); connect(m_awsConnector, &AWSConnector::disconnected, device, [device]() { device->setStateValue(connectedStateTypeId, false); }); - return Device::DeviceSetupStatusSuccess; + info->finish(Device::DeviceErrorNoError); } void CloudNotifications::startMonitoringAutoDevices() { } -Device::DeviceError CloudNotifications::executeAction(Device *device, const Action &action) +void CloudNotifications::executeAction(DeviceActionInfo *info) { - qCDebug(dcCloud()) << "executeAction" << device << action.id() << action.params(); - QString userId = device->paramValue(cloudNotificationsDeviceClassUserParamId).toString(); - QString endpointId = device->paramValue(cloudNotificationsDeviceClassEndpointParamId).toString(); - int id = m_awsConnector->sendPushNotification(userId, endpointId, action.param(notifyActionParamTitleId).value().toString(), action.param(notifyActionParamBodyId).value().toString()); - m_pendingPushNotifications.insert(id, action.id()); - return Device::DeviceErrorAsync; + qCDebug(dcCloud()) << "executeAction" << info->device() << info->action().id() << info->action().params(); + QString userId = info->device()->paramValue(cloudNotificationsDeviceClassUserParamId).toString(); + QString endpointId = info->device()->paramValue(cloudNotificationsDeviceClassEndpointParamId).toString(); + int id = m_awsConnector->sendPushNotification(userId, endpointId, info->action().param(notifyActionParamTitleId).value().toString(), info->action().param(notifyActionParamBodyId).value().toString()); + m_pendingPushNotifications.insert(id, info); } void CloudNotifications::pushNotificationEndpointsUpdated(const QList &endpoints) @@ -184,7 +186,7 @@ void CloudNotifications::pushNotificationEndpointsUpdated(const QListid()); } - QList devicesToAdd; + DeviceDescriptors devicesToAdd; foreach (const AWSConnector::PushNotificationsEndpoint &ep, endpoints) { bool found = false; qCDebug(dcCloud) << "Checking endoint:" << ep.endpointId; @@ -208,7 +210,7 @@ void CloudNotifications::pushNotificationEndpointsUpdated(const QListfinish(status == 200 ? Device::DeviceErrorNoError : Device::DeviceErrorHardwareNotAvailable); } diff --git a/libnymea-core/cloud/cloudnotifications.h b/libnymea-core/cloud/cloudnotifications.h index f22631ee..798fbace 100644 --- a/libnymea-core/cloud/cloudnotifications.h +++ b/libnymea-core/cloud/cloudnotifications.h @@ -36,9 +36,9 @@ public: PluginMetadata metaData() const; - Device::DeviceSetupStatus setupDevice(Device *device) override; + void setupDevice(DeviceSetupInfo *info) override; void startMonitoringAutoDevices() override; - Device::DeviceError executeAction(Device *device, const Action &action) override; + void executeAction(DeviceActionInfo *info) override; private slots: void pushNotificationEndpointsUpdated(const QList &endpoints); @@ -47,7 +47,7 @@ private slots: private: AWSConnector *m_awsConnector = nullptr; - QHash m_pendingPushNotifications; + QHash m_pendingPushNotifications; }; #endif // CLOUDNOTIFICATIONS_H diff --git a/libnymea-core/devices/devicemanagerimplementation.cpp b/libnymea-core/devices/devicemanagerimplementation.cpp index 60ccba01..2c47d778 100644 --- a/libnymea-core/devices/devicemanagerimplementation.cpp +++ b/libnymea-core/devices/devicemanagerimplementation.cpp @@ -71,12 +71,6 @@ \l{Device::DeviceError}{DeviceError} that occurred. */ -/*! \fn void DeviceManager::devicesDiscovered(const DeviceClassId &deviceClassId, const QList &devices); - This signal is emitted when the discovery of a \a deviceClassId is finished. The \a devices parameter describes the - list of \l{DeviceDescriptor}{DeviceDescriptors} of all discovered \l{Device}{Devices}. - \sa discoverDevices() -*/ - /*! \fn void DeviceManager::actionExecutionFinished(const ActionId &actionId, DeviceError status); The DeviceManager will emit a this signal when the \l{Action} with the given \a actionId is finished. The \a status of the \l{Action} execution will be described as \l{Device::DeviceError}{DeviceError}. @@ -101,9 +95,16 @@ #include "typeutils.h" #include "nymeasettings.h" +#include "devices/devicediscoveryinfo.h" #include "devices/devicepairinginfo.h" +#include "devices/devicesetupinfo.h" +#include "devices/deviceactioninfo.h" #include "devices/deviceplugin.h" #include "devices/deviceutils.h" +#include "devices/browseresult.h" +#include "devices/browseritemresult.h" +#include "devices/browseractioninfo.h" +#include "devices/browseritemactioninfo.h" //#include "unistd.h" @@ -220,6 +221,11 @@ DevicePlugins DeviceManagerImplementation::plugins() const return m_devicePlugins.values(); } +DevicePlugin *DeviceManagerImplementation::plugin(const PluginId &pluginId) const +{ + return m_devicePlugins.value(pluginId); +} + /*! Returns a certain \l{DeviceError} and sets the configuration of the plugin with the given \a pluginId * and the given \a pluginConfig. */ Device::DeviceError DeviceManagerImplementation::setPluginConfig(const PluginId &pluginId, const ParamList &pluginConfig) @@ -286,32 +292,49 @@ DeviceClasses DeviceManagerImplementation::supportedDevices(const VendorId &vend } /*! Returns a certain \l{DeviceError} and starts the discovering process of the \l{Device} with the given \a deviceClassId * and the given \a params.*/ -Device::DeviceError DeviceManagerImplementation::discoverDevices(const DeviceClassId &deviceClassId, const ParamList ¶ms) +DeviceDiscoveryInfo* DeviceManagerImplementation::discoverDevices(const DeviceClassId &deviceClassId, const ParamList ¶ms) { - qCDebug(dcDeviceManager) << "discover devices" << params; - // Create a copy of the parameter list because we might modify it (fillig in default values etc) - ParamList effectiveParams = params; DeviceClass deviceClass = findDeviceClass(deviceClassId); if (!deviceClass.isValid()) { - return Device::DeviceErrorDeviceClassNotFound; + qCWarning(dcDeviceManager) << "Device discovery failed. Invalid device class id:" << deviceClassId.toString(); + DeviceDiscoveryInfo *discoveryInfo = new DeviceDiscoveryInfo(deviceClassId, params, this); + discoveryInfo->finish(Device::DeviceErrorDeviceClassNotFound); + return discoveryInfo; } if (!deviceClass.createMethods().testFlag(DeviceClass::CreateMethodDiscovery)) { - return Device::DeviceErrorCreationMethodNotSupported; - } - Device::DeviceError result = DeviceUtils::verifyParams(deviceClass.discoveryParamTypes(), effectiveParams); - if (result != Device::DeviceErrorNoError) { - return result; + qCWarning(dcDeviceManager) << "Device discovery failed. Device class" << deviceClass.name() << "cannot be discovered."; + DeviceDiscoveryInfo *discoveryInfo = new DeviceDiscoveryInfo(deviceClassId, params, this); + discoveryInfo->finish(Device::DeviceErrorCreationMethodNotSupported); + return discoveryInfo; } DevicePlugin *plugin = m_devicePlugins.value(deviceClass.pluginId()); if (!plugin) { - return Device::DeviceErrorPluginNotFound; + qCWarning(dcDeviceManager) << "Device discovery failed. Plugin not found for device class" << deviceClass.name(); + DeviceDiscoveryInfo *discoveryInfo = new DeviceDiscoveryInfo(deviceClassId, params, this); + discoveryInfo->finish(Device::DeviceErrorPluginNotFound); + return discoveryInfo; } - m_discoveringPlugins.append(plugin); - Device::DeviceError ret = plugin->discoverDevices(deviceClassId, effectiveParams); - if (ret != Device::DeviceErrorAsync) { - m_discoveringPlugins.removeOne(plugin); + + // Create a copy of the parameter list because we might modify it (fillig in default values etc) + ParamList effectiveParams = params; + Device::DeviceError result = DeviceUtils::verifyParams(deviceClass.discoveryParamTypes(), effectiveParams); + if (result != Device::DeviceErrorNoError) { + qCWarning(dcDeviceManager) << "Device discovery failed. Parameter verification failed."; + DeviceDiscoveryInfo *discoveryInfo = new DeviceDiscoveryInfo(deviceClassId, params, this); + discoveryInfo->finish(result); + return discoveryInfo; } - return ret; + + DeviceDiscoveryInfo *discoveryInfo = new DeviceDiscoveryInfo(deviceClassId, effectiveParams, this); + connect(discoveryInfo, &DeviceDiscoveryInfo::finished, this, [this, discoveryInfo](){ + foreach (const DeviceDescriptor &descriptor, discoveryInfo->deviceDescriptors()) { + m_discoveredDevices[descriptor.deviceClassId()].insert(descriptor.id(), descriptor); + } + }); + + qCDebug(dcDeviceManager) << "Device discovery for" << deviceClass.name() << "started..."; + plugin->discoverDevices(discoveryInfo); + return discoveryInfo; } /*! Add a new configured device for the given \l{DeviceClass}, the given parameters, \a name and \a id. @@ -319,16 +342,9 @@ Device::DeviceError DeviceManagerImplementation::discoverDevices(const DeviceCla * Optionally you can supply an id yourself if you must keep track of the added device. If you don't supply it, a new one will * be generated. Only devices with \l{DeviceClass}{CreateMethodUser} can be created using this method. * Returns \l{DeviceError} to inform about the result. */ -Device::DeviceError DeviceManagerImplementation::addConfiguredDevice(const DeviceClassId &deviceClassId, const QString &name, const ParamList ¶ms, const DeviceId id) +DeviceSetupInfo* DeviceManagerImplementation::addConfiguredDevice(const DeviceClassId &deviceClassId, const QString &name, const ParamList ¶ms, const DeviceId id) { - DeviceClass deviceClass = findDeviceClass(deviceClassId); - if (!deviceClass.isValid()) { - return Device::DeviceErrorDeviceClassNotFound; - } - if (deviceClass.createMethods().testFlag(DeviceClass::CreateMethodUser)) { - return addConfiguredDeviceInternal(deviceClassId, name, params, id); - } - return Device::DeviceErrorCreationMethodNotSupported; + return addConfiguredDeviceInternal(deviceClassId, name, params, id); } /*! Add a new configured device for the given \l{DeviceClass} the given DeviceDescriptorId and \a deviceId. Only devices with \l{DeviceClass}{CreateMethodDiscovery} @@ -337,19 +353,25 @@ Device::DeviceError DeviceManagerImplementation::addConfiguredDevice(const Devic * are used but can be overridden here. * * Returns \l{DeviceError} to inform about the result. */ -Device::DeviceError DeviceManagerImplementation::addConfiguredDevice(const DeviceClassId &deviceClassId, const QString &name, const DeviceDescriptorId &deviceDescriptorId, const ParamList ¶ms, const DeviceId &deviceId) +DeviceSetupInfo *DeviceManagerImplementation::addConfiguredDevice(const DeviceClassId &deviceClassId, const QString &name, const DeviceDescriptorId &deviceDescriptorId, const ParamList ¶ms, const DeviceId &deviceId) { DeviceClass deviceClass = findDeviceClass(deviceClassId); if (!deviceClass.isValid()) { - return Device::DeviceErrorDeviceClassNotFound; + DeviceSetupInfo *info = new DeviceSetupInfo(nullptr, this); + info->finish(Device::DeviceErrorDeviceClassNotFound); + return info; } if (!deviceClass.createMethods().testFlag(DeviceClass::CreateMethodDiscovery)) { - return Device::DeviceErrorCreationMethodNotSupported; + DeviceSetupInfo *info = new DeviceSetupInfo(nullptr, this); + info->finish(Device::DeviceErrorCreationMethodNotSupported); + return info; } - DeviceDescriptor descriptor = m_discoveredDevices.take(deviceDescriptorId); + DeviceDescriptor descriptor = m_discoveredDevices.value(deviceClassId).value(deviceDescriptorId); if (!descriptor.isValid()) { - return Device::DeviceErrorDeviceDescriptorNotFound; + DeviceSetupInfo *info = new DeviceSetupInfo(nullptr, this); + info->finish(Device::DeviceErrorDeviceDescriptorNotFound); + return info; } // Merge params from discovered descriptor and additional overrides provided on API call. User provided params have higher priority than discovery params. @@ -371,25 +393,31 @@ Device::DeviceError DeviceManagerImplementation::addConfiguredDevice(const Devic * from a discovery or if the user set them. If it came from discovery not writable parameters (readOnly) will be changed too. * * Returns \l{DeviceError} to inform about the result. */ -Device::DeviceError DeviceManagerImplementation::reconfigureDevice(const DeviceId &deviceId, const ParamList ¶ms, bool fromDiscoveryOrAuto) +DeviceSetupInfo* DeviceManagerImplementation::reconfigureDevice(const DeviceId &deviceId, const ParamList ¶ms, bool fromDiscoveryOrAuto) { Device *device = findConfiguredDevice(deviceId); if (!device) { qCWarning(dcDeviceManager()) << "Cannot reconfigure device. Device with id" << deviceId.toString() << "not found."; - return Device::DeviceErrorDeviceNotFound; + DeviceSetupInfo *info = new DeviceSetupInfo(nullptr, this); + info->finish(Device::DeviceErrorDeviceNotFound); + return info; } ParamList effectiveParams = params; DeviceClass deviceClass = findDeviceClass(device->deviceClassId()); if (deviceClass.id().isNull()) { qCWarning(dcDeviceManager()) << "Cannot reconfigure device. DeviceClass for device" << device->name() << deviceId.toString() << "not found."; - return Device::DeviceErrorDeviceClassNotFound; + DeviceSetupInfo *info = new DeviceSetupInfo(nullptr, this); + info->finish(Device::DeviceErrorDeviceClassNotFound); + return info; } DevicePlugin *plugin = m_devicePlugins.value(deviceClass.pluginId()); if (!plugin) { qCWarning(dcDeviceManager()) << "Cannot reconfigure device. Plugin for DeviceClass" << deviceClass.displayName() << deviceClass.id().toString() << "not found."; - return Device::DeviceErrorPluginNotFound; + DeviceSetupInfo *info = new DeviceSetupInfo(nullptr, this); + info->finish(Device::DeviceErrorPluginNotFound); + return info; } // if the params are discovered and not set by the user @@ -400,7 +428,9 @@ Device::DeviceError DeviceManagerImplementation::reconfigureDevice(const DeviceI if (paramType.id() == param.paramTypeId()) { if (paramType.readOnly()) { qCWarning(dcDeviceManager()) << "Cannot reconfigure device. Read-only parameters set by user."; - return Device::DeviceErrorParameterNotWritable; + DeviceSetupInfo *info = new DeviceSetupInfo(nullptr, this); + info->finish(Device::DeviceErrorParameterNotWritable); + return info; } } } @@ -410,7 +440,9 @@ Device::DeviceError DeviceManagerImplementation::reconfigureDevice(const DeviceI Device::DeviceError result = DeviceUtils::verifyParams(deviceClass.paramTypes(), effectiveParams, false); if (result != Device::DeviceErrorNoError) { qCWarning(dcDeviceManager()) << "Cannot reconfigure device. Params failed validation."; - return result; + DeviceSetupInfo *info = new DeviceSetupInfo(nullptr, this); + info->finish(result); + return info; } // first remove the device in the plugin @@ -425,25 +457,26 @@ Device::DeviceError DeviceManagerImplementation::reconfigureDevice(const DeviceI } // try to setup the device with the new params - Device::DeviceSetupStatus status = plugin->setupDevice(device); - switch (status) { - case Device::DeviceSetupStatusFailure: - qCWarning(dcDeviceManager) << "Device reconfiguration failed. Not saving changes of device parameters. Device setup incomplete."; - return Device::DeviceErrorSetupFailed; - case Device::DeviceSetupStatusAsync: - m_asyncDeviceReconfiguration.append(device); - return Device::DeviceErrorAsync; - case Device::DeviceSetupStatusSuccess: - qCDebug(dcDeviceManager) << "Device reconfiguration succeeded."; - break; - } + DeviceSetupInfo *info = new DeviceSetupInfo(device, this); + plugin->setupDevice(info); + connect(info, &DeviceSetupInfo::finished, this, [this, info](){ - storeConfiguredDevices(); - postSetupDevice(device); - device->setupCompleted(); - emit deviceChanged(device); + if (info->status() != Device::DeviceErrorNoError) { + qCWarning(dcDeviceManager()) << "Device reconfiguration failed for" << info->device()->name() << info->device()->id().toString() << info->status() << info->displayMessage(); + // TODO: recover old params.?? + return; + } - return Device::DeviceErrorNoError; + storeConfiguredDevices(); + + postSetupDevice(info->device()); + info->device()->setupCompleted(); + + emit deviceChanged(info->device()); + + }); + + return info; } /*! Edit the \l{Param}{Params} of a configured device to the \l{Param}{Params} of the DeviceDescriptor with the @@ -453,24 +486,32 @@ Device::DeviceError DeviceManagerImplementation::reconfigureDevice(const DeviceI * This method allows to rediscover a device and update it's \l{Param}{Params}. * * Returns \l{DeviceError} to inform about the result. */ -Device::DeviceError DeviceManagerImplementation::reconfigureDevice(const DeviceId &deviceId, const DeviceDescriptorId &deviceDescriptorId) +DeviceSetupInfo *DeviceManagerImplementation::reconfigureDevice(const DeviceId &deviceId, const DeviceDescriptorId &deviceDescriptorId) { Device *device = findConfiguredDevice(deviceId); if (!device) { - return Device::DeviceErrorDeviceNotFound; + DeviceSetupInfo *info = new DeviceSetupInfo(nullptr, this); + info->finish(Device::DeviceErrorDeviceNotFound); + return info; } DeviceClass deviceClass = findDeviceClass(device->deviceClassId()); if (!deviceClass.isValid()) { - return Device::DeviceErrorDeviceClassNotFound; + DeviceSetupInfo *info = new DeviceSetupInfo(nullptr, this); + info->finish(Device::DeviceErrorDeviceClassNotFound); + return info; } if (!deviceClass.createMethods().testFlag(DeviceClass::CreateMethodDiscovery)) { - return Device::DeviceErrorCreationMethodNotSupported; + DeviceSetupInfo *info = new DeviceSetupInfo(nullptr, this); + info->finish(Device::DeviceErrorCreationMethodNotSupported); + return info; } - DeviceDescriptor descriptor = m_discoveredDevices.take(deviceDescriptorId); + DeviceDescriptor descriptor = m_discoveredDevices.value(deviceClass.id()).value(deviceDescriptorId); if (!descriptor.isValid()) { - return Device::DeviceErrorDeviceDescriptorNotFound; + DeviceSetupInfo *info = new DeviceSetupInfo(nullptr, this); + info->finish(Device::DeviceErrorDeviceDescriptorNotFound); + return info; } return reconfigureDevice(deviceId, descriptor.params(), true); @@ -513,142 +554,189 @@ Device::DeviceError DeviceManagerImplementation::setDeviceSettings(const DeviceI /*! Initiates a pairing with a \l{DeviceClass}{Device} with the given \a pairingTransactionId, \a deviceClassId, \a name and \a params. * Returns \l{Device::DeviceError}{DeviceError} to inform about the result. */ -Device::DeviceError DeviceManagerImplementation::pairDevice(const PairingTransactionId &pairingTransactionId, const DeviceClassId &deviceClassId, const QString &name, const ParamList ¶ms) +DevicePairingInfo* DeviceManagerImplementation::pairDevice(const DeviceClassId &deviceClassId, const QString &name, const ParamList ¶ms) { - DeviceClass deviceClass = findDeviceClass(deviceClassId); - if (deviceClass.id().isNull()) { - qCWarning(dcDeviceManager) << "Cannot find a device class with id" << deviceClassId; - return Device::DeviceErrorDeviceClassNotFound; - } - - Q_UNUSED(pairingTransactionId) - Q_UNUSED(params) - Q_UNUSED(name) - switch (deviceClass.setupMethod()) { - case DeviceClass::SetupMethodJustAdd: - qCWarning(dcDeviceManager) << "Cannot setup this device this way. No need to pair this device."; - return Device::DeviceErrorSetupMethodNotSupported; - case DeviceClass::SetupMethodDisplayPin: - qCWarning(dcDeviceManager) << "SetupMethodDisplayPin not implemented yet for this CreateMethod"; - return Device::DeviceErrorSetupFailed; - case DeviceClass::SetupMethodEnterPin: - qCWarning(dcDeviceManager) << "SetupMethodEnterPin not implemented yet for this CreateMethod"; - return Device::DeviceErrorSetupFailed; - case DeviceClass::SetupMethodPushButton: - qCWarning(dcDeviceManager) << "SetupMethodPushButton not implemented yet for this CreateMethod"; - return Device::DeviceErrorSetupFailed; - } - - return Device::DeviceErrorNoError; + PairingTransactionId transactionId = PairingTransactionId::createPairingTransactionId(); + DevicePairingInfo *info = new DevicePairingInfo(transactionId, deviceClassId, DeviceId(), name, params, DeviceId(), this); + pairDeviceInternal(info); + return info; } /*! Initiates a pairing with a \l{DeviceClass}{Device} with the given \a pairingTransactionId, \a deviceClassId, \a name and \a deviceDescriptorId. * Returns \l{Device::DeviceError}{DeviceError} to inform about the result. */ -Device::DeviceError DeviceManagerImplementation::pairDevice(const PairingTransactionId &pairingTransactionId, const DeviceClassId &deviceClassId, const QString &name, const DeviceDescriptorId &deviceDescriptorId) +DevicePairingInfo* DeviceManagerImplementation::pairDevice(const DeviceClassId &deviceClassId, const QString &name, const DeviceDescriptorId &deviceDescriptorId) { + PairingTransactionId pairingTransactionId = PairingTransactionId::createPairingTransactionId(); DeviceClass deviceClass = findDeviceClass(deviceClassId); if (deviceClass.id().isNull()) { qCWarning(dcDeviceManager) << "Cannot find a device class with id" << deviceClassId; - return Device::DeviceErrorDeviceClassNotFound; + DevicePairingInfo *info = new DevicePairingInfo(pairingTransactionId, deviceClassId, DeviceId(), name, ParamList(), DeviceId(), this); + info->finish(Device::DeviceErrorDeviceClassNotFound); + return info; } - if (deviceClass.setupMethod() == DeviceClass::SetupMethodJustAdd) { - qCWarning(dcDeviceManager) << "Cannot setup this device this way. No need to pair this device."; - return Device::DeviceErrorCreationMethodNotSupported; - } - - if (!m_discoveredDevices.contains(deviceDescriptorId)) { + DeviceDescriptor deviceDescriptor = m_discoveredDevices.value(deviceClassId).value(deviceDescriptorId); + if (!deviceDescriptor.isValid()) { qCWarning(dcDeviceManager) << "Cannot find a DeviceDescriptor with ID" << deviceClassId.toString(); - return Device::DeviceErrorDeviceDescriptorNotFound; + DevicePairingInfo *info = new DevicePairingInfo(pairingTransactionId, deviceClassId, DeviceId(), name, ParamList(), DeviceId(), this); + info->finish(Device::DeviceErrorDeviceDescriptorNotFound); + return info; } - m_pairingsDiscovery.insert(pairingTransactionId, DevicePairingInfo(deviceClassId, name, deviceDescriptorId)); - - if (deviceClass.setupMethod() == DeviceClass::SetupMethodDisplayPin) { - DeviceDescriptor deviceDescriptor = m_discoveredDevices.value(deviceDescriptorId); - - DevicePlugin *plugin = m_devicePlugins.value(m_supportedDevices.value(deviceClassId).pluginId()); - if (!plugin) { - qCWarning(dcDeviceManager()) << "Can't find a plugin for this device class"; - return Device::DeviceErrorPluginNotFound; - } - - return plugin->displayPin(pairingTransactionId, deviceDescriptor); - } - - return Device::DeviceErrorNoError; + DevicePairingInfo *info = new DevicePairingInfo(pairingTransactionId, deviceClassId, deviceDescriptor.deviceId(), name, deviceDescriptor.params(), deviceDescriptor.parentDeviceId(), this); + pairDeviceInternal(info); + return info; } /*! Confirms the pairing of a \l{Device} with the given \a pairingTransactionId and \a secret. * Returns \l{Device::DeviceError}{DeviceError} to inform about the result. */ -Device::DeviceError DeviceManagerImplementation::confirmPairing(const PairingTransactionId &pairingTransactionId, const QString &secret) +DevicePairingInfo *DeviceManagerImplementation::confirmPairing(const PairingTransactionId &pairingTransactionId, const QString &username, const QString &secret) { - if (m_pairingsJustAdd.contains(pairingTransactionId)) { - qCWarning(dcDeviceManager) << "This SetupMethod is not implemented yet"; - m_pairingsJustAdd.remove(pairingTransactionId); - return Device::DeviceErrorSetupFailed; + if (!m_pendingPairings.contains(pairingTransactionId)) { + qCWarning(dcDeviceManager()) << "No pairing transaction with id" << pairingTransactionId.toString(); + DevicePairingInfo *info = new DevicePairingInfo(pairingTransactionId, DeviceClassId(), DeviceId(), QString(), ParamList(), DeviceId(), this); + info->finish(Device::DeviceErrorPairingTransactionIdNotFound); + return info; } - if (m_pairingsDiscovery.contains(pairingTransactionId)) { - DevicePairingInfo pairingInfo = m_pairingsDiscovery.value(pairingTransactionId); - DeviceClassId deviceClassId = pairingInfo.deviceClassId(); - DeviceDescriptor deviceDescriptor = m_discoveredDevices.value(pairingInfo.deviceDescriptorId()); + PairingContext context = m_pendingPairings.take(pairingTransactionId); + DeviceClassId deviceClassId = context.deviceClassId; - DevicePlugin *plugin = m_devicePlugins.value(m_supportedDevices.value(deviceClassId).pluginId()); - - if (!plugin) { - qCWarning(dcDeviceManager) << "Can't find a plugin for this device class"; - return Device::DeviceErrorPluginNotFound; - } - - Device::DeviceSetupStatus status = plugin->confirmPairing(pairingTransactionId, deviceClassId, deviceDescriptor.params(), secret); - switch (status) { - case Device::DeviceSetupStatusSuccess: - m_pairingsDiscovery.remove(pairingTransactionId); - // TODO: setup the device if the pairing status can be fetched directly - return Device::DeviceErrorNoError; - case Device::DeviceSetupStatusFailure: - m_pairingsDiscovery.remove(pairingTransactionId); - return Device::DeviceErrorSetupFailed; - case Device::DeviceSetupStatusAsync: - return Device::DeviceErrorAsync; - } + DevicePlugin *plugin = m_devicePlugins.value(m_supportedDevices.value(deviceClassId).pluginId()); + if (!plugin) { + qCWarning(dcDeviceManager) << "Can't find a plugin for this device class"; + DevicePairingInfo *info = new DevicePairingInfo(pairingTransactionId, deviceClassId, context.deviceId, context.deviceName, context.params, context.parentDeviceId, this); + info->finish(Device::DeviceErrorPluginNotFound); + return info; } - return Device::DeviceErrorPairingTransactionIdNotFound; + // If we already have a deviceId, we're reconfiguring an existing device, else we're adding a new one. + bool addNewDevice = false; + DeviceId deviceId = context.deviceId; + if (deviceId.isNull()) { + deviceId = DeviceId::createDeviceId(); + addNewDevice = true; + } + + // We're using two different info objects here, one to hand over to the plugin for the pairing, the other we give out + // to the user. After the internal one has finished, we'll start a setupDevice job and finish the external pairingInfo only after + // both, the internal pairing and the setup have completed. + DevicePairingInfo *internalInfo = new DevicePairingInfo(pairingTransactionId, deviceClassId, deviceId, context.deviceName, context.params, context.parentDeviceId, this); + DevicePairingInfo *externalInfo = new DevicePairingInfo(pairingTransactionId, deviceClassId, deviceId, context.deviceName, context.params, context.parentDeviceId, this); + plugin->confirmPairing(internalInfo, username, secret); + + connect(internalInfo, &DevicePairingInfo::finished, this, [this, internalInfo, externalInfo, plugin, addNewDevice](){ + + // Internal pairing failed, so fail the exernal one too. + if (internalInfo->status() != Device::DeviceErrorNoError) { + qCWarning(dcDeviceManager()) << "ConfirmPairing failed for" << internalInfo->deviceName() << internalInfo->deviceClassId(); + externalInfo->finish(internalInfo->status(), internalInfo->displayMessage()); + return; + } + + // Internal pairing succeeded, set up the device. + if (!addNewDevice && !m_configuredDevices.contains(internalInfo->deviceId())) { + qCWarning(dcDeviceManager) << "The device to be reconfigured has disappeared!"; + externalInfo->finish(Device::DeviceErrorDeviceNotFound); + return; + } + + DeviceClass deviceClass = m_supportedDevices.value(internalInfo->deviceClassId()); + Device *device = nullptr; + + if (addNewDevice) { + device = new Device(plugin, deviceClass, internalInfo->deviceId(), this); + if (internalInfo->deviceName().isEmpty()) { + device->setName(deviceClass.name()); + } else { + device->setName(internalInfo->deviceName()); + } + } else { + device = m_configuredDevices.value(internalInfo->deviceId()); + device->setSetupComplete(false); + qCDebug(dcDeviceManager()) << "Reconfiguring device" << device; + } + + device->setParams(internalInfo->params()); + ParamList settings; + // Use verifyParams to populate it with defaults + DeviceUtils::verifyParams(deviceClass.settingsTypes(), settings); + device->setSettings(settings); + + DeviceSetupInfo *info = setupDevice(device); + connect(info, &DeviceSetupInfo::finished, device, [this, info, externalInfo, addNewDevice](){ + + externalInfo->finish(info->status(), info->displayMessage()); + + if (info->status() != Device::DeviceErrorNoError) { + qCWarning(dcDeviceManager()) << "Failed to set up device" << info->device()->name() << info->status() << info->displayMessage(); + info->device()->deleteLater(); + + if (!addNewDevice) { + // TODO: restore parameters? + } + + return; + } + + info->device()->setupCompleted(); + + if (addNewDevice) { + qCDebug(dcDeviceManager()) << "Device added:" << info->device(); + m_configuredDevices.insert(info->device()->id(), info->device()); + emit deviceAdded(info->device()); + } else { + emit deviceChanged(info->device()); + } + + storeConfiguredDevices(); + postSetupDevice(info->device()); + }); + + }); + + return externalInfo; } /*! This method will only be used from the DeviceManagerImplementation in order to add a \l{Device} with the given \a deviceClassId, \a name, \a params and \ id. * Returns \l{DeviceError} to inform about the result. */ -Device::DeviceError DeviceManagerImplementation::addConfiguredDeviceInternal(const DeviceClassId &deviceClassId, const QString &name, const ParamList ¶ms, const DeviceId id, const DeviceId &parentDeviceId) +DeviceSetupInfo* DeviceManagerImplementation::addConfiguredDeviceInternal(const DeviceClassId &deviceClassId, const QString &name, const ParamList ¶ms, const DeviceId &deviceId, const DeviceId &parentDeviceId) { DeviceClass deviceClass = findDeviceClass(deviceClassId); if (deviceClass.id().isNull()) { - return Device::DeviceErrorDeviceClassNotFound; + DeviceSetupInfo *info = new DeviceSetupInfo(nullptr, this); + info->finish(Device::DeviceErrorDeviceClassNotFound); + return info; } if (deviceClass.setupMethod() != DeviceClass::SetupMethodJustAdd) { - return Device::DeviceErrorCreationMethodNotSupported; + DeviceSetupInfo *info = new DeviceSetupInfo(nullptr, this); + info->finish(Device::DeviceErrorCreationMethodNotSupported); + return info; } - foreach(Device *device, m_configuredDevices) { - if (device->id() == id) { - return Device::DeviceErrorDuplicateUuid; - } + if (m_configuredDevices.contains(deviceId)) { + DeviceSetupInfo *info = new DeviceSetupInfo(nullptr, this); + info->finish(Device::DeviceErrorDuplicateUuid); + return info; } DevicePlugin *plugin = m_devicePlugins.value(deviceClass.pluginId()); if (!plugin) { - return Device::DeviceErrorPluginNotFound; + DeviceSetupInfo *info = new DeviceSetupInfo(nullptr, this); + info->finish(Device::DeviceErrorPluginNotFound); + return info; } ParamList effectiveParams = params; Device::DeviceError paramsResult = DeviceUtils::verifyParams(deviceClass.paramTypes(), effectiveParams); if (paramsResult != Device::DeviceErrorNoError) { - return paramsResult; + DeviceSetupInfo *info = new DeviceSetupInfo(nullptr, this); + info->finish(paramsResult); + return info; } - Device *device = new Device(plugin, deviceClass, id, this); + Device *device = new Device(plugin, deviceClass, deviceId, this); device->setParentId(parentDeviceId); if (name.isEmpty()) { device->setName(deviceClass.name()); @@ -659,29 +747,28 @@ Device::DeviceError DeviceManagerImplementation::addConfiguredDeviceInternal(con ParamList settings; DeviceUtils::verifyParams(deviceClass.settingsTypes(), settings); - qCDebug(dcDeviceManager()) << "Adding device settings" << settings; + qCDebug(dcDeviceManager()) << "Adding device settings" << settings << deviceId; device->setSettings(settings); - Device::DeviceSetupStatus status = setupDevice(device); - switch (status) { - case Device::DeviceSetupStatusFailure: - qCWarning(dcDeviceManager) << "Device setup failed. Not adding device to system."; - delete device; - return Device::DeviceErrorSetupFailed; - case Device::DeviceSetupStatusAsync: - return Device::DeviceErrorAsync; - case Device::DeviceSetupStatusSuccess: + DeviceSetupInfo *info = setupDevice(device); + connect(info, &DeviceSetupInfo::finished, this, [this, info](){ + if (info->status() != Device::DeviceErrorNoError) { + qCWarning(dcDeviceManager) << "Device setup failed. Not adding device to system."; + info->device()->deleteLater(); + return; + } + + info->device()->setupCompleted(); + qCDebug(dcDeviceManager) << "Device setup complete."; - break; - } + m_configuredDevices.insert(info->device()->id(), info->device()); + storeConfiguredDevices(); + postSetupDevice(info->device()); - m_configuredDevices.insert(device->id(), device); - storeConfiguredDevices(); - postSetupDevice(device); + emit deviceAdded(info->device()); + }); - emit deviceAdded(device); - - return Device::DeviceErrorNoError; + return info; } /*! Removes a \l{Device} with the given \a deviceId from the list of configured \l{Device}{Devices}. @@ -711,80 +798,98 @@ Device::DeviceError DeviceManagerImplementation::removeConfiguredDevice(const De return Device::DeviceErrorNoError; } -Device::BrowseResult DeviceManagerImplementation::browseDevice(const DeviceId &deviceId, const QString &itemId, const QLocale &locale) +BrowseResult *DeviceManagerImplementation::browseDevice(const DeviceId &deviceId, const QString &itemId, const QLocale &locale) { - Device::BrowseResult result; - Device *device = m_configuredDevices.value(deviceId); + + BrowseResult *result = new BrowseResult(device, itemId, locale, this); + if (!device) { qCWarning(dcDeviceManager()) << "Cannot browse device. No such device:" << deviceId.toString(); - result.status = Device::DeviceErrorDeviceNotFound; + result->finish(Device::DeviceErrorDeviceNotFound); return result; } if (!device->deviceClass().browsable()) { qCWarning(dcDeviceManager()) << "Cannot browse device. DeviceClass" << device->deviceClass().name() << "is not browsable."; - result.status = Device::DeviceErrorUnsupportedFeature; + result->finish(Device::DeviceErrorUnsupportedFeature); return result; } - result = device->plugin()->browseDevice(device, result, itemId, locale); + device->plugin()->browseDevice(result); + connect(result, &BrowseResult::finished, this, [result](){ + if (result->status() != Device::DeviceErrorNoError) { + qCWarning(dcDeviceManager()) << "Browse device failed:" << result->status(); + } + }); return result; } -Device::BrowserItemResult DeviceManagerImplementation::browserItemDetails(const DeviceId &deviceId, const QString &itemId, const QLocale &locale) +BrowserItemResult *DeviceManagerImplementation::browserItemDetails(const DeviceId &deviceId, const QString &itemId, const QLocale &locale) { - Device::BrowserItemResult result; - Device *device = m_configuredDevices.value(deviceId); + + BrowserItemResult *result = new BrowserItemResult(device, itemId, locale, this); + if (!device) { qCWarning(dcDeviceManager()) << "Cannot browse device. No such device:" << deviceId.toString(); - result.status = Device::DeviceErrorDeviceNotFound; + result->finish(Device::DeviceErrorDeviceNotFound); return result; } if (!device->deviceClass().browsable()) { qCWarning(dcDeviceManager()) << "Cannot browse device. DeviceClass" << device->deviceClass().name() << "is not browsable."; - result.status = Device::DeviceErrorUnsupportedFeature; + result->finish(Device::DeviceErrorUnsupportedFeature); return result; } - result = device->plugin()->browserItem(device, result, itemId, locale); - if (result.status == Device::DeviceErrorAsync) { - // Error or Async - return result; - } - if (result.status != Device::DeviceErrorNoError) { - qCWarning(dcDeviceManager()) << "Browse device failed:" << result.status; - return result; - } + device->plugin()->browserItem(result); + connect(result, &BrowserItemResult::finished, this, [result](){ + if (result->status() != Device::DeviceErrorNoError) { + qCWarning(dcDeviceManager()) << "Browse device failed:" << result->status(); + } + }); return result; } -Device::DeviceError DeviceManagerImplementation::executeBrowserItem(const BrowserAction &browserAction) +BrowserActionInfo* DeviceManagerImplementation::executeBrowserItem(const BrowserAction &browserAction) { Device *device = m_configuredDevices.value(browserAction.deviceId()); + + BrowserActionInfo *info = new BrowserActionInfo(device, browserAction, this); + if (!device) { - return Device::DeviceErrorDeviceNotFound; + info->finish(Device::DeviceErrorDeviceNotFound); + return info; } + if (!device->deviceClass().browsable()) { - return Device::DeviceErrorUnsupportedFeature; + info->finish(Device::DeviceErrorUnsupportedFeature); + return info; } - return device->plugin()->executeBrowserItem(device, browserAction); + device->plugin()->executeBrowserItem(info); + return info; } -Device::DeviceError DeviceManagerImplementation::executeBrowserItemAction(const BrowserItemAction &browserItemAction) +BrowserItemActionInfo* DeviceManagerImplementation::executeBrowserItemAction(const BrowserItemAction &browserItemAction) { Device *device = m_configuredDevices.value(browserItemAction.deviceId()); + + BrowserItemActionInfo *info = new BrowserItemActionInfo(device, browserItemAction, this); + if (!device) { - return Device::DeviceErrorDeviceNotFound; + info->finish(Device::DeviceErrorDeviceNotFound); + return info; } + if (!device->deviceClass().browsable()) { - return Device::DeviceErrorUnsupportedFeature; + info->finish(Device::DeviceErrorUnsupportedFeature); + return info; } // TODO: check browserItemAction.params with deviceClass - return device->plugin()->executeBrowserItemAction(device, browserItemAction); + device->plugin()->executeBrowserItemAction(info); + return info; } QString DeviceManagerImplementation::translate(const PluginId &pluginId, const QString &string, const QLocale &locale) @@ -861,36 +966,45 @@ DeviceClass DeviceManagerImplementation::findDeviceClass(const DeviceClassId &de /*! Execute the given \l{Action}. * This will find the \l{Device} \a action refers to the \l{Action}{deviceId()} and * its \l{DevicePlugin}. Then will dispatch the execution to the \l{DevicePlugin}.*/ -Device::DeviceError DeviceManagerImplementation::executeAction(const Action &action) +DeviceActionInfo *DeviceManagerImplementation::executeAction(const Action &action) { Action finalAction = action; - foreach (Device *device, m_configuredDevices) { - if (action.deviceId() == device->id()) { - // found device - - // Make sure this device has an action type with this id - DeviceClass deviceClass = findDeviceClass(device->deviceClassId()); - bool found = false; - foreach (const ActionType &actionType, deviceClass.actionTypes()) { - if (actionType.id() == action.actionTypeId()) { - ParamList finalParams = action.params(); - Device::DeviceError paramCheck = DeviceUtils::verifyParams(actionType.paramTypes(), finalParams); - if (paramCheck != Device::DeviceErrorNoError) { - return paramCheck; - } - finalAction.setParams(finalParams); - found = true; - continue; - } - } - if (!found) { - return Device::DeviceErrorActionTypeNotFound; - } - - return m_devicePlugins.value(device->pluginId())->executeAction(device, finalAction); - } + Device *device = m_configuredDevices.value(action.deviceId()); + if (!device) { + DeviceActionInfo *info = new DeviceActionInfo(nullptr, action, this); + info->finish(Device::DeviceErrorDeviceNotFound); + return info; } - return Device::DeviceErrorDeviceNotFound; + + // Make sure this device has an action type with this id + DeviceClass deviceClass = findDeviceClass(device->deviceClassId()); + ActionType actionType = deviceClass.actionTypes().findById(action.actionTypeId()); + if (actionType.id().isNull()) { + DeviceActionInfo *info = new DeviceActionInfo(device, action, this); + info->finish(Device::DeviceErrorActionTypeNotFound); + return info; + } + + ParamList finalParams = action.params(); + Device::DeviceError paramCheck = DeviceUtils::verifyParams(actionType.paramTypes(), finalParams); + if (paramCheck != Device::DeviceErrorNoError) { + DeviceActionInfo *info = new DeviceActionInfo(device, action, this); + info->finish(paramCheck); + return info; + } + finalAction.setParams(finalParams); + + DeviceActionInfo *info = new DeviceActionInfo(device, finalAction, this); + + DevicePlugin *plugin = m_devicePlugins.value(device->pluginId()); + if (!plugin) { + info->finish(Device::DeviceErrorPluginNotFound); + return info; + } + + plugin->executeAction(info); + + return info; } /*! Centralized time tick for the NymeaTimer resource. Ticks every second. */ @@ -1047,21 +1161,11 @@ void DeviceManagerImplementation::loadPlugin(DevicePlugin *pluginIface, const Pl m_devicePlugins.insert(pluginIface->pluginId(), pluginIface); - connect(pluginIface, &DevicePlugin::emitEvent, this, &DeviceManagerImplementation::onEventTriggered); - connect(pluginIface, &DevicePlugin::devicesDiscovered, this, &DeviceManagerImplementation::slotDevicesDiscovered, Qt::QueuedConnection); - connect(pluginIface, &DevicePlugin::deviceSetupFinished, this, &DeviceManagerImplementation::slotDeviceSetupFinished); - connect(pluginIface, &DevicePlugin::actionExecutionFinished, this, &DeviceManagerImplementation::actionExecutionFinished); - connect(pluginIface, &DevicePlugin::pairingFinished, this, &DeviceManagerImplementation::slotPairingFinished); - connect(pluginIface, &DevicePlugin::autoDevicesAppeared, this, &DeviceManagerImplementation::onAutoDevicesAppeared); - connect(pluginIface, &DevicePlugin::autoDeviceDisappeared, this, &DeviceManagerImplementation::onAutoDeviceDisappeared); - connect(pluginIface, &DevicePlugin::browseRequestFinished, this, &DeviceManagerImplementation::browseRequestFinished); - connect(pluginIface, &DevicePlugin::browserItemRequestFinished, this, &DeviceManagerImplementation::browserItemRequestFinished); - connect(pluginIface, &DevicePlugin::browserItemExecutionFinished, this, &DeviceManagerImplementation::browserItemExecutionFinished); - connect(pluginIface, &DevicePlugin::browserItemActionExecutionFinished, this, &DeviceManagerImplementation::browserItemActionExecutionFinished); - + connect(pluginIface, &DevicePlugin::emitEvent, this, &DeviceManagerImplementation::onEventTriggered, Qt::QueuedConnection); + connect(pluginIface, &DevicePlugin::autoDevicesAppeared, this, &DeviceManagerImplementation::onAutoDevicesAppeared, Qt::QueuedConnection); + connect(pluginIface, &DevicePlugin::autoDeviceDisappeared, this, &DeviceManagerImplementation::onAutoDeviceDisappeared, Qt::QueuedConnection); } - void DeviceManagerImplementation::loadConfiguredDevices() { NymeaSettings settings(NymeaSettings::SettingsRoleDevices); @@ -1172,11 +1276,21 @@ void DeviceManagerImplementation::loadConfiguredDevices() } Q_ASSERT(device != nullptr); - Device::DeviceSetupStatus status = setupDevice(device); - if (status == Device::DeviceSetupStatusSuccess) - postSetupDevice(device); - } + DeviceSetupInfo *info = setupDevice(device); + // Set receiving object to "device" because at startup we load it in any case, knowing that it worked at + // some point. However, it'll be marked as non-working until the setup succeeds so the user might delete + // it in the meantime... In that case we don't want to call postsetup on it. + connect(info, &DeviceSetupInfo::finished, device, [this, info](){ + if (info->status() != Device::DeviceErrorNoError) { + qCWarning(dcDeviceManager()) << "Error setting up device" << info->device()->name() << info->device()->id().toString() << info->status() << info->displayMessage(); + return; + } + + info->device()->setupCompleted(); + postSetupDevice(info->device()); + }); + } } void DeviceManagerImplementation::storeConfiguredDevices() @@ -1225,212 +1339,21 @@ void DeviceManagerImplementation::startMonitoringAutoDevices() } } -void DeviceManagerImplementation::slotDevicesDiscovered(const DeviceClassId &deviceClassId, const QList deviceDescriptors) +void DeviceManagerImplementation::onAutoDevicesAppeared(const DeviceDescriptors &deviceDescriptors) { - DevicePlugin *plugin = static_cast(sender()); - if (!m_discoveringPlugins.contains(plugin)) { - qWarning(dcDeviceManager()) << "Received a devicesDiscovered signal from" << plugin->pluginName() << "but did not expect it. Ignoring."; - return; - } - m_discoveringPlugins.removeOne(plugin); - - foreach (const DeviceDescriptor &descriptor, deviceDescriptors) { - m_discoveredDevices.insert(descriptor.id(), descriptor); - } - emit devicesDiscovered(deviceClassId, deviceDescriptors); -} - -void DeviceManagerImplementation::slotDeviceSetupFinished(Device *device, Device::DeviceSetupStatus status) -{ - Q_ASSERT_X(device, "DeviceManager", "Device must be a valid pointer."); - if (!device) { - qCWarning(dcDeviceManager) << "Received deviceSetupFinished for an invalid device... ignoring..."; - return; - } - - if (device->setupComplete()) { - qCWarning(dcDeviceManager) << "Received a deviceSetupFinished event, but this Device has been set up before... ignoring..."; - return; - } - - Q_ASSERT_X(status != Device::DeviceSetupStatusAsync, "DeviceManager", "Bad plugin implementation. You should not emit deviceSetupFinished with status DeviceSetupStatusAsync."); - if (status == Device::DeviceSetupStatusAsync) { - qCWarning(dcDeviceManager) << "Bad plugin implementation. Received a deviceSetupFinished event with status Async... ignoring..."; - return; - } - - if (status == Device::DeviceSetupStatusFailure) { - if (m_configuredDevices.contains(device->id())) { - if (m_asyncDeviceReconfiguration.contains(device)) { - m_asyncDeviceReconfiguration.removeAll(device); - qCWarning(dcDeviceManager) << QString("Error in device setup after reconfiguration. Device %1 (%2) will not be functional.").arg(device->name()).arg(device->id().toString()); - - storeConfiguredDevices(); - - // TODO: recover old params.?? - - emit deviceChanged(device); - emit deviceReconfigurationFinished(device, Device::DeviceErrorSetupFailed); - } - qCWarning(dcDeviceManager) << QString("Error in device setup. Device %1 (%2) will not be functional.").arg(device->name()).arg(device->id().toString()); - emit deviceSetupFinished(device, Device::DeviceErrorSetupFailed); - return; - } else { - qCWarning(dcDeviceManager) << QString("Error in device setup. Device %1 (%2) will not be added to the configured devices.").arg(device->name()).arg(device->id().toString()); - emit deviceSetupFinished(device, Device::DeviceErrorSetupFailed); - return; - } - } - - // A device might be in here already if loaded from storedDevices. If it's not in the configuredDevices, - // lets add it now. - if (!m_configuredDevices.contains(device->id())) { - m_configuredDevices.insert(device->id(), device); - emit deviceAdded(device); - storeConfiguredDevices(); - } - - // if this is a async device edit result - if (m_asyncDeviceReconfiguration.contains(device)) { - m_asyncDeviceReconfiguration.removeAll(device); - storeConfiguredDevices(); - device->setupCompleted(); - emit deviceChanged(device); - emit deviceReconfigurationFinished(device, Device::DeviceErrorNoError); - return; - } - - connect(device, &Device::stateValueChanged, this, &DeviceManagerImplementation::slotDeviceStateValueChanged); - connect(device, &Device::settingChanged, this, &DeviceManagerImplementation::slotDeviceSettingChanged); - - device->setupCompleted(); - emit deviceSetupFinished(device, Device::DeviceErrorNoError); -} - -void DeviceManagerImplementation::slotPairingFinished(const PairingTransactionId &pairingTransactionId, Device::DeviceSetupStatus status) -{ - if (!m_pairingsJustAdd.contains(pairingTransactionId) && !m_pairingsDiscovery.contains(pairingTransactionId)) { - DevicePlugin *plugin = dynamic_cast(sender()); - if (plugin) { - qCWarning(dcDeviceManager) << "Received a pairing finished without waiting for it from plugin:" << plugin->metaObject()->className(); - } else { - qCWarning(dcDeviceManager) << "Received a pairing finished without waiting for it."; - } - return; - } - - DeviceClassId deviceClassId; - ParamList params; - QString deviceName; - - DeviceId deviceId; - - // Do this before checking status to make sure we clean up our hashes properly - if (m_pairingsJustAdd.contains(pairingTransactionId)) { - DevicePairingInfo pairingInfo = m_pairingsJustAdd.take(pairingTransactionId); - - deviceClassId = pairingInfo.deviceClassId(); - params = pairingInfo.params(); - deviceName = pairingInfo.deviceName(); - } - - if (m_pairingsDiscovery.contains(pairingTransactionId)) { - DevicePairingInfo pairingInfo = m_pairingsDiscovery.take(pairingTransactionId); - DeviceDescriptor descriptor = m_discoveredDevices.take(pairingInfo.deviceDescriptorId()); - - deviceClassId = pairingInfo.deviceClassId(); - deviceName = pairingInfo.deviceName(); - params = descriptor.params(); - deviceId = descriptor.deviceId(); - } - - if (status != Device::DeviceSetupStatusSuccess) { - emit pairingFinished(pairingTransactionId, Device::DeviceErrorSetupFailed); - return; - } - - DeviceClass deviceClass = findDeviceClass(deviceClassId); - DevicePlugin *plugin = m_devicePlugins.value(deviceClass.pluginId()); - if (!plugin) { - qCWarning(dcDeviceManager) << "Cannot find a plugin for this device class!"; - emit pairingFinished(pairingTransactionId, Device::DeviceErrorPluginNotFound, deviceClass.pluginId().toString()); - return; - } - - // If we already have a deviceId, we're reconfiguring an existing device - bool addNewDevice = deviceId.isNull(); - - if (!addNewDevice && !m_configuredDevices.contains(deviceId)) { - qCWarning(dcDeviceManager) << "The device to be reconfigured has disappeared!"; - emit pairingFinished(pairingTransactionId, Device::DeviceErrorDeviceNotFound, deviceId); - return; - } - - // Ok... pairing went fine... Let consumers know about it and inform them about the ongoing setup with a deviceId. - Device *device = nullptr; - - if (addNewDevice) { - deviceId = DeviceId::createDeviceId(); - qCDebug(dcDeviceManager()) << "Creating new device with ID" << deviceId; - device = new Device(plugin, deviceClass, deviceId, this); - if (deviceName.isEmpty()) { - device->setName(deviceClass.name()); - } else { - device->setName(deviceName); - } - } else { - device = m_configuredDevices.value(deviceId); - qCDebug(dcDeviceManager()) << "Reconfiguring device" << device; - } - emit pairingFinished(pairingTransactionId, Device::DeviceErrorNoError, deviceId); - - device->setParams(params); - ParamList settings; - // Use verifyParams to populate it with defaults - DeviceUtils::verifyParams(deviceClass.settingsTypes(), settings); - device->setSettings(settings); - - Device::DeviceSetupStatus setupStatus = setupDevice(device); - switch (setupStatus) { - case Device::DeviceSetupStatusFailure: - qCWarning(dcDeviceManager) << "Device setup failed. Not adding device to system."; - emit deviceSetupFinished(device, Device::DeviceErrorSetupFailed); - delete device; - break; - case Device::DeviceSetupStatusAsync: - return; - case Device::DeviceSetupStatusSuccess: - qCDebug(dcDeviceManager) << "Paired Device setup complete."; - break; - } - - if (addNewDevice) { - qCDebug(dcDeviceManager()) << "Device added:" << device; - m_configuredDevices.insert(device->id(), device); - emit deviceAdded(device); - } else { - emit deviceChanged(device); - } - - storeConfiguredDevices(); - emit deviceSetupFinished(device, Device::DeviceErrorNoError); - postSetupDevice(device); -} - -void DeviceManagerImplementation::onAutoDevicesAppeared(const DeviceClassId &deviceClassId, const QList &deviceDescriptors) -{ - DeviceClass deviceClass = findDeviceClass(deviceClassId); - if (!deviceClass.isValid()) { - qCWarning(dcDeviceManager()) << "Ignoring auto device appeared for an unknown DeviceClass" << deviceClassId; - return; - } - - DevicePlugin *plugin = m_devicePlugins.value(deviceClass.pluginId()); - if (!plugin) { - return; - } - foreach (const DeviceDescriptor &deviceDescriptor, deviceDescriptors) { + + DeviceClass deviceClass = findDeviceClass(deviceDescriptor.deviceClassId()); + if (!deviceClass.isValid()) { + qCWarning(dcDeviceManager()) << "Ignoring auto device appeared for an unknown DeviceClass" << deviceDescriptor.deviceClassId(); + return; + } + + DevicePlugin *plugin = m_devicePlugins.value(deviceClass.pluginId()); + if (!plugin) { + return; + } + if (!deviceDescriptor.parentDeviceId().isNull() && !m_configuredDevices.contains(deviceDescriptor.parentDeviceId())) { qCWarning(dcDeviceManager()) << "Invalid parent device id. Not adding device to the system."; continue; @@ -1459,24 +1382,25 @@ void DeviceManagerImplementation::onAutoDevicesAppeared(const DeviceClassId &dev device->setSettings(settings); device->setParentId(deviceDescriptor.parentDeviceId()); - Device::DeviceSetupStatus setupStatus = setupDevice(device); - switch (setupStatus) { - case Device::DeviceSetupStatusFailure: - qCWarning(dcDeviceManager) << "Device setup failed. Not adding device to system."; - emit deviceSetupFinished(device, Device::DeviceErrorSetupFailed); - delete device; - break; - case Device::DeviceSetupStatusAsync: - break; - case Device::DeviceSetupStatusSuccess: - qCDebug(dcDeviceManager) << "Auto Device setup complete."; - m_configuredDevices.insert(device->id(), device); + qCDebug(dcDeviceManager()) << "Setting up auto device:" << device->name() << device->id().toString(); + + DeviceSetupInfo *info = setupDevice(device); + connect(info, &DeviceSetupInfo::finished, device, [this, info](){ + + if (info->status() != Device::DeviceErrorNoError) { + qCWarning(dcDeviceManager) << "Device setup failed. Not adding auto device to system."; + info->device()->deleteLater(); + return; + } + + info->device()->setupCompleted(); + m_configuredDevices.insert(info->device()->id(), info->device()); storeConfiguredDevices(); - emit deviceSetupFinished(device, Device::DeviceErrorNoError); - emit deviceAdded(device); - postSetupDevice(device); - break; - } + + emit deviceAdded(info->device()); + + postSetupDevice(info->device()); + }); } } @@ -1566,14 +1490,59 @@ void DeviceManagerImplementation::slotDeviceSettingChanged(const ParamTypeId &pa emit deviceSettingChanged(device->id(), paramTypeId, value); } -Device::DeviceSetupStatus DeviceManagerImplementation::setupDevice(Device *device) +void DeviceManagerImplementation::pairDeviceInternal(DevicePairingInfo *info) +{ + DeviceClass deviceClass = m_supportedDevices.value(info->deviceClassId()); + if (deviceClass.id().isNull()) { + qCWarning(dcDeviceManager) << "Cannot find a device class with id" << info->deviceClassId(); + info->finish(Device::DeviceErrorDeviceClassNotFound); + return; + } + + if (deviceClass.setupMethod() == DeviceClass::SetupMethodJustAdd) { + qCWarning(dcDeviceManager) << "Cannot setup this device this way. No need to pair this device."; + info->finish(Device::DeviceErrorSetupMethodNotSupported); + return; + } + + DevicePlugin *plugin = m_devicePlugins.value(deviceClass.pluginId()); + if (!plugin) { + qCWarning(dcDeviceManager) << "Cannot pair device class" << deviceClass.name() << "because no plugin for it is loaded."; + info->finish(Device::DeviceErrorPluginNotFound); + return; + } + + plugin->startPairing(info); + + connect(info, &DevicePairingInfo::finished, this, [this, info, deviceClass](){ + if (info->status() != Device::DeviceErrorNoError) { + qCWarning(dcDeviceManager()) << "PairDevice failed for" << deviceClass << info->status() << info->displayMessage(); + return; + } + + qCDebug(dcDeviceManager()) << "Pairing started for" << deviceClass << "using transaction id" << info->transactionId(); + PairingContext context; + context.deviceId = info->deviceId(); + context.deviceClassId = info->deviceClassId(); + context.deviceName = info->deviceName(); + context.params = info->params(); + context.parentDeviceId = info->parentDeviceId(); + m_pendingPairings.insert(info->transactionId(), context); + + // TODO: Add a timer to clean up stuff if confirmPairing is never called. + }); +} + +DeviceSetupInfo* DeviceManagerImplementation::setupDevice(Device *device) { DeviceClass deviceClass = findDeviceClass(device->deviceClassId()); DevicePlugin *plugin = m_devicePlugins.value(deviceClass.pluginId()); if (!plugin) { qCWarning(dcDeviceManager) << "Can't find a plugin for this device" << device->id(); - return Device::DeviceSetupStatusFailure; + DeviceSetupInfo *info = new DeviceSetupInfo(nullptr, this); + info->finish(Device::DeviceErrorPluginNotFound); + return info; } QList states; @@ -1584,16 +1553,14 @@ Device::DeviceSetupStatus DeviceManagerImplementation::setupDevice(Device *devic device->setStates(states); loadDeviceStates(device); - Device::DeviceSetupStatus status = plugin->setupDevice(device); - if (status != Device::DeviceSetupStatusSuccess) { - return status; - } - connect(device, &Device::stateValueChanged, this, &DeviceManagerImplementation::slotDeviceStateValueChanged); connect(device, &Device::settingChanged, this, &DeviceManagerImplementation::slotDeviceSettingChanged); - device->setupCompleted(); - return status; + + DeviceSetupInfo *info = new DeviceSetupInfo(device, this); + plugin->setupDevice(info); + + return info; } void DeviceManagerImplementation::postSetupDevice(Device *device) diff --git a/libnymea-core/devices/devicemanagerimplementation.h b/libnymea-core/devices/devicemanagerimplementation.h index cac8c173..2efedaf0 100644 --- a/libnymea-core/devices/devicemanagerimplementation.h +++ b/libnymea-core/devices/devicemanagerimplementation.h @@ -60,13 +60,14 @@ class DeviceManagerImplementation: public DeviceManager public: explicit DeviceManagerImplementation(HardwareManager *hardwareManager, const QLocale &locale, QObject *parent = nullptr); - ~DeviceManagerImplementation(); + ~DeviceManagerImplementation() override; static QStringList pluginSearchDirs(); static QList pluginsMetadata(); void registerStaticPlugin(DevicePlugin* plugin, const PluginMetadata &metaData); DevicePlugins plugins() const override; + DevicePlugin *plugin(const PluginId &pluginId) const override; Device::DeviceError setPluginConfig(const PluginId &pluginId, const ParamList &pluginConfig) override; Vendors supportedVendors() const override; @@ -80,29 +81,29 @@ public: Devices findChildDevices(const DeviceId &id) const override; DeviceClass findDeviceClass(const DeviceClassId &deviceClassId) const override; - Device::DeviceError discoverDevices(const DeviceClassId &deviceClassId, const ParamList ¶ms) override; + DeviceDiscoveryInfo* discoverDevices(const DeviceClassId &deviceClassId, const ParamList ¶ms) override; - Device::DeviceError addConfiguredDevice(const DeviceClassId &deviceClassId, const QString &name, const ParamList ¶ms, const DeviceId id = DeviceId::createDeviceId()) override; - Device::DeviceError addConfiguredDevice(const DeviceClassId &deviceClassId, const QString &name, const DeviceDescriptorId &deviceDescriptorId, const ParamList ¶ms = ParamList(), const DeviceId &deviceId = DeviceId::createDeviceId()) override; + DeviceSetupInfo* addConfiguredDevice(const DeviceClassId &deviceClassId, const QString &name, const ParamList ¶ms, const DeviceId id = DeviceId::createDeviceId()) override; + DeviceSetupInfo* addConfiguredDevice(const DeviceClassId &deviceClassId, const QString &name, const DeviceDescriptorId &deviceDescriptorId, const ParamList ¶ms = ParamList(), const DeviceId &deviceId = DeviceId::createDeviceId()) override; - Device::DeviceError reconfigureDevice(const DeviceId &deviceId, const ParamList ¶ms, bool fromDiscoveryOrAuto = false) override; - Device::DeviceError reconfigureDevice(const DeviceId &deviceId, const DeviceDescriptorId &deviceDescriptorId) override; + DeviceSetupInfo* reconfigureDevice(const DeviceId &deviceId, const ParamList ¶ms, bool fromDiscoveryOrAuto = false) override; + DeviceSetupInfo* reconfigureDevice(const DeviceId &deviceId, const DeviceDescriptorId &deviceDescriptorId) override; Device::DeviceError editDevice(const DeviceId &deviceId, const QString &name) override; Device::DeviceError setDeviceSettings(const DeviceId &deviceId, const ParamList &settings) override; - Device::DeviceError pairDevice(const PairingTransactionId &pairingTransactionId, const DeviceClassId &deviceClassId, const QString &name, const ParamList ¶ms) override; - Device::DeviceError pairDevice(const PairingTransactionId &pairingTransactionId, const DeviceClassId &deviceClassId, const QString &name, const DeviceDescriptorId &deviceDescriptorId) override; - Device::DeviceError confirmPairing(const PairingTransactionId &pairingTransactionId, const QString &secret = QString()) override; + DevicePairingInfo* pairDevice(const DeviceClassId &deviceClassId, const QString &name, const ParamList ¶ms) override; + DevicePairingInfo* pairDevice(const DeviceClassId &deviceClassId, const QString &name, const DeviceDescriptorId &deviceDescriptorId) override; + DevicePairingInfo* confirmPairing(const PairingTransactionId &pairingTransactionId, const QString &username, const QString &secret) override; Device::DeviceError removeConfiguredDevice(const DeviceId &deviceId) override; - Device::DeviceError executeAction(const Action &action) override; + DeviceActionInfo* executeAction(const Action &action) override; - Device::BrowseResult browseDevice(const DeviceId &deviceId, const QString &itemId, const QLocale &locale) override; - Device::BrowserItemResult browserItemDetails(const DeviceId &deviceId, const QString &itemId, const QLocale &locale) override; - Device::DeviceError executeBrowserItem(const BrowserAction &browserAction) override; - Device::DeviceError executeBrowserItemAction(const BrowserItemAction &browserItemAction) override; + BrowseResult* browseDevice(const DeviceId &deviceId, const QString &itemId, const QLocale &locale) override; + BrowserItemResult* browserItemDetails(const DeviceId &deviceId, const QString &itemId, const QLocale &locale) override; + BrowserActionInfo *executeBrowserItem(const BrowserAction &browserAction) override; + BrowserItemActionInfo *executeBrowserItemAction(const BrowserItemAction &browserItemAction) override; QString translate(const PluginId &pluginId, const QString &string, const QLocale &locale) override; @@ -118,10 +119,7 @@ private slots: void loadConfiguredDevices(); void storeConfiguredDevices(); void startMonitoringAutoDevices(); - void slotDevicesDiscovered(const DeviceClassId &deviceClassId, const QList deviceDescriptors); - void slotDeviceSetupFinished(Device *device, Device::DeviceSetupStatus status); - void slotPairingFinished(const PairingTransactionId &pairingTransactionId, Device::DeviceSetupStatus status); - void onAutoDevicesAppeared(const DeviceClassId &deviceClassId, const QList &deviceDescriptors); + void onAutoDevicesAppeared(const DeviceDescriptors &deviceDescriptors); void onAutoDeviceDisappeared(const DeviceId &deviceId); void onLoaded(); void cleanupDeviceStateCache(); @@ -132,8 +130,9 @@ private slots: void slotDeviceSettingChanged(const ParamTypeId ¶mTypeId, const QVariant &value); private: - Device::DeviceError addConfiguredDeviceInternal(const DeviceClassId &deviceClassId, const QString &name, const ParamList ¶ms, const DeviceId id = DeviceId::createDeviceId(), const DeviceId &parentDeviceId = DeviceId()); - Device::DeviceSetupStatus setupDevice(Device *device); + void pairDeviceInternal(DevicePairingInfo *info); + DeviceSetupInfo *addConfiguredDeviceInternal(const DeviceClassId &deviceClassId, const QString &name, const ParamList ¶ms, const DeviceId &deviceId = DeviceId::createDeviceId(), const DeviceId &parentDeviceId = DeviceId()); + DeviceSetupInfo *setupDevice(Device *device); void postSetupDevice(Device *device); void storeDeviceStates(Device *device); void loadDeviceStates(Device *device); @@ -148,15 +147,19 @@ private: QHash > m_vendorDeviceMap; QHash m_supportedDevices; QHash m_configuredDevices; - QHash m_discoveredDevices; + QHash > m_discoveredDevices; QHash m_devicePlugins; - QHash m_pairingsJustAdd; - QHash m_pairingsDiscovery; - - QList m_asyncDeviceReconfiguration; - QList m_discoveringPlugins; + class PairingContext { + public: + DeviceId deviceId; + DeviceClassId deviceClassId; + DeviceId parentDeviceId; + ParamList params; + QString deviceName; + }; + QHash m_pendingPairings; }; #endif // DEVICEMANAGERIMPLEMENTATION_H diff --git a/libnymea-core/jsonrpc/actionhandler.cpp b/libnymea-core/jsonrpc/actionhandler.cpp index 0055bea3..5a56f3b3 100644 --- a/libnymea-core/jsonrpc/actionhandler.cpp +++ b/libnymea-core/jsonrpc/actionhandler.cpp @@ -36,6 +36,9 @@ #include "nymeacore.h" #include "devices/devicemanager.h" +#include "devices/deviceactioninfo.h" +#include "devices/browseractioninfo.h" +#include "devices/browseritemactioninfo.h" #include "types/action.h" #include "loggingcategories.h" @@ -52,6 +55,7 @@ ActionHandler::ActionHandler(QObject *parent) : setDescription("ExecuteAction", "Execute a single action."); setParams("ExecuteAction", JsonTypes::actionDescription()); returns.insert("deviceError", JsonTypes::deviceErrorRef()); + returns.insert("o:displayMessage", JsonTypes::basicTypeToString(JsonTypes::String)); setReturns("ExecuteAction", returns); params.clear(); returns.clear(); @@ -80,9 +84,6 @@ ActionHandler::ActionHandler(QObject *parent) : returns.insert("deviceError", JsonTypes::deviceErrorRef()); setReturns("ExecuteBrowserItemAction", returns); - connect(NymeaCore::instance(), &NymeaCore::actionExecuted, this, &ActionHandler::actionExecuted); - connect(NymeaCore::instance(), &NymeaCore::browserItemExecuted, this, &ActionHandler::browserItemExecuted); - connect(NymeaCore::instance(), &NymeaCore::browserItemActionExecuted, this, &ActionHandler::browserItemActionExecuted); } /*! Returns the name of the \l{ActionHandler}. In this case \b Actions.*/ @@ -96,20 +97,24 @@ JsonReply* ActionHandler::ExecuteAction(const QVariantMap ¶ms) DeviceId deviceId(params.value("deviceId").toString()); ActionTypeId actionTypeId(params.value("actionTypeId").toString()); ParamList actionParams = JsonTypes::unpackParams(params.value("params").toList()); + QLocale locale = params.value("locale").toLocale(); Action action(actionTypeId, deviceId); action.setParams(actionParams); - Device::DeviceError status = NymeaCore::instance()->executeAction(action); - if (status == Device::DeviceErrorAsync) { - JsonReply *reply = createAsyncReply("ExecuteAction"); - ActionId id = action.id(); - connect(reply, &JsonReply::finished, [this, id](){ m_asyncActionExecutions.remove(id); }); - m_asyncActionExecutions.insert(id, reply); - return reply; - } + JsonReply *jsonReply = createAsyncReply("ExecuteAction"); - return createReply(statusToReply(status)); + DeviceActionInfo *info = NymeaCore::instance()->executeAction(action); + connect(info, &DeviceActionInfo::finished, jsonReply, [this, info, jsonReply, locale](){ + QVariantMap data = statusToReply(info->status()); + if (!info->displayMessage().isEmpty()) { + data.insert("displayMessage", info->translatedDisplayMessage(locale)); + } + jsonReply->setData(data); + jsonReply->finished(); + }); + + return jsonReply; } JsonReply *ActionHandler::GetActionType(const QVariantMap ¶ms) const @@ -128,31 +133,21 @@ JsonReply *ActionHandler::GetActionType(const QVariantMap ¶ms) const return createReply(statusToReply(Device::DeviceErrorActionTypeNotFound)); } -void ActionHandler::actionExecuted(const ActionId &id, Device::DeviceError status) -{ - if (!m_asyncActionExecutions.contains(id)) { - return; // Not the action we are waiting for. - } - - JsonReply *reply = m_asyncActionExecutions.take(id); - reply->setData(statusToReply(status)); - reply->finished(); -} - JsonReply *ActionHandler::ExecuteBrowserItem(const QVariantMap ¶ms) { DeviceId deviceId = DeviceId(params.value("deviceId").toString()); QString itemId = params.value("itemId").toString(); BrowserAction action(deviceId, itemId); - Device::DeviceError status = NymeaCore::instance()->executeBrowserItem(action); - if (status == Device::DeviceErrorAsync) { - JsonReply *reply = createAsyncReply("ExecuteBrowserItem"); - ActionId id = action.id(); - connect(reply, &JsonReply::finished, [this, id](){ m_asyncActionExecutions.remove(id); }); - m_asyncActionExecutions.insert(id, reply); - return reply; - } - return createReply(statusToReply(status)); + + JsonReply *jsonReply = createAsyncReply("ExecuteBrowserItem"); + + BrowserActionInfo *info = NymeaCore::instance()->executeBrowserItem(action); + connect(info, &BrowserActionInfo::finished, jsonReply, [this, info, jsonReply](){ + jsonReply->setData(statusToReply(info->status())); + jsonReply->finished(); + }); + + return jsonReply; } JsonReply *ActionHandler::ExecuteBrowserItemAction(const QVariantMap ¶ms) @@ -162,39 +157,16 @@ JsonReply *ActionHandler::ExecuteBrowserItemAction(const QVariantMap ¶ms) ActionTypeId actionTypeId = ActionTypeId(params.value("actionTypeId").toString()); ParamList paramList = JsonTypes::unpackParams(params.value("params").toList()); BrowserItemAction browserItemAction(deviceId, itemId, actionTypeId, paramList); - Device::DeviceError status = NymeaCore::instance()->executeBrowserItemAction(browserItemAction); - if (status == Device::DeviceErrorAsync) { - JsonReply *reply = createAsyncReply("ExecuteBrowserItemAction"); - ActionId id = browserItemAction.id(); - connect(reply, &JsonReply::finished, [this, id](){ m_asyncActionExecutions.remove(id); }); - m_asyncActionExecutions.insert(id, reply); - return reply; - } - return createReply(statusToReply(status)); + JsonReply *jsonReply = createAsyncReply("ExecuteBrowserItemAction"); + + BrowserItemActionInfo *info = NymeaCore::instance()->executeBrowserItemAction(browserItemAction); + connect(info, &BrowserItemActionInfo::finished, jsonReply, [this, info, jsonReply](){ + jsonReply->setData(statusToReply(info->status())); + jsonReply->finished(); + }); + + return jsonReply; } -void ActionHandler::browserItemExecuted(const ActionId &id, Device::DeviceError status) -{ - if (!m_asyncActionExecutions.contains(id)) { - return; // Not the action we are waiting for. - } - - JsonReply *reply = m_asyncActionExecutions.take(id); - reply->setData(statusToReply(status)); - reply->finished(); -} - -void ActionHandler::browserItemActionExecuted(const ActionId &id, Device::DeviceError status) -{ - if (!m_asyncActionExecutions.contains(id)) { - return; // Not the action we are waiting for. - } - - JsonReply *reply = m_asyncActionExecutions.take(id); - reply->setData(statusToReply(status)); - reply->finished(); -} - - } diff --git a/libnymea-core/jsonrpc/actionhandler.h b/libnymea-core/jsonrpc/actionhandler.h index 06cdf23f..da081871 100644 --- a/libnymea-core/jsonrpc/actionhandler.h +++ b/libnymea-core/jsonrpc/actionhandler.h @@ -41,13 +41,6 @@ public: Q_INVOKABLE JsonReply *ExecuteBrowserItem(const QVariantMap ¶ms); Q_INVOKABLE JsonReply *ExecuteBrowserItemAction(const QVariantMap ¶ms); -private slots: - void actionExecuted(const ActionId &id, Device::DeviceError status); - void browserItemExecuted(const ActionId &id, Device::DeviceError status); - void browserItemActionExecuted(const ActionId &id, Device::DeviceError status); - -private: - QHash m_asyncActionExecutions; }; } diff --git a/libnymea-core/jsonrpc/devicehandler.cpp b/libnymea-core/jsonrpc/devicehandler.cpp index 4371bb56..45c6145f 100644 --- a/libnymea-core/jsonrpc/devicehandler.cpp +++ b/libnymea-core/jsonrpc/devicehandler.cpp @@ -61,6 +61,11 @@ #include "loggingcategories.h" #include "types/deviceclass.h" #include "devices/translator.h" +#include "devices/devicediscoveryinfo.h" +#include "devices/devicepairinginfo.h" +#include "devices/devicesetupinfo.h" +#include "devices/browseresult.h" +#include "devices/browseritemresult.h" #include @@ -133,6 +138,7 @@ DeviceHandler::DeviceHandler(QObject *parent) : setParams("AddConfiguredDevice", params); returns.insert("deviceError", JsonTypes::deviceErrorRef()); returns.insert("o:deviceId", JsonTypes::basicTypeToString(JsonTypes::Uuid)); + returns.insert("o:displayMessage", JsonTypes::basicTypeToString(JsonTypes::String)); setReturns("AddConfiguredDevice", returns); returns.clear(); // Reused params from above! @@ -147,17 +153,22 @@ DeviceHandler::DeviceHandler(QObject *parent) : ); setParams("PairDevice", params); returns.insert("deviceError", JsonTypes::deviceErrorRef()); + returns.insert("o:setupMethod", JsonTypes::setupMethodRef()); returns.insert("o:pairingTransactionId", JsonTypes::basicTypeToString(JsonTypes::Uuid)); returns.insert("o:displayMessage", JsonTypes::basicTypeToString(JsonTypes::String)); - returns.insert("o:setupMethod", JsonTypes::setupMethodRef()); + returns.insert("o:oAuthUrl", JsonTypes::basicTypeToString(JsonTypes::String)); setReturns("PairDevice", returns); params.clear(); returns.clear(); - setDescription("ConfirmPairing", "Confirm an ongoing pairing. In case of SetupMethodEnterPin also provide the pin in the params."); + setDescription("ConfirmPairing", "Confirm an ongoing pairing. For SetupMethodUserAndPassword, provide the username in the \"username\" field " + "and the password in the \"secret\" field. For SetupMethodEnterPin and provide the PIN in the \"secret\" " + "field. For SetupMethodOAuth, return the entire unmodified callback URL containing the code parameter back in the secret field."); params.insert("pairingTransactionId", JsonTypes::basicTypeToString(JsonTypes::Uuid)); + params.insert("o:username", JsonTypes::basicTypeToString(JsonTypes::String)); params.insert("o:secret", JsonTypes::basicTypeToString(JsonTypes::String)); setParams("ConfirmPairing", params); returns.insert("deviceError", JsonTypes::deviceErrorRef()); + returns.insert("o:displayMessage", JsonTypes::basicTypeToString(JsonTypes::String)); returns.insert("o:deviceId", JsonTypes::basicTypeToString(JsonTypes::Uuid)); setReturns("ConfirmPairing", returns); @@ -182,6 +193,7 @@ DeviceHandler::DeviceHandler(QObject *parent) : params.insert("o:discoveryParams", discoveryParams); setParams("GetDiscoveredDevices", params); returns.insert("deviceError", JsonTypes::deviceErrorRef()); + returns.insert("o:displayMessage", JsonTypes::basicTypeToString(JsonTypes::String)); QVariantList deviceDescriptors; deviceDescriptors.append(JsonTypes::deviceDescriptorRef()); returns.insert("o:deviceDescriptors", deviceDescriptors); @@ -200,6 +212,7 @@ DeviceHandler::DeviceHandler(QObject *parent) : params.insert("o:deviceParams", newDeviceParams); setParams("ReconfigureDevice", params); returns.insert("deviceError", JsonTypes::deviceErrorRef()); + returns.insert("o:displayMessage", JsonTypes::basicTypeToString(JsonTypes::String)); setReturns("ReconfigureDevice", returns); params.clear(); returns.clear(); @@ -343,12 +356,6 @@ DeviceHandler::DeviceHandler(QObject *parent) : connect(NymeaCore::instance(), &NymeaCore::deviceAdded, this, &DeviceHandler::deviceAddedNotification); connect(NymeaCore::instance(), &NymeaCore::deviceChanged, this, &DeviceHandler::deviceChangedNotification); connect(NymeaCore::instance(), &NymeaCore::deviceSettingChanged, this, &DeviceHandler::deviceSettingChangedNotification); - connect(NymeaCore::instance(), &NymeaCore::devicesDiscovered, this, &DeviceHandler::devicesDiscovered, Qt::QueuedConnection); - connect(NymeaCore::instance(), &NymeaCore::deviceSetupFinished, this, &DeviceHandler::deviceSetupFinished); - connect(NymeaCore::instance(), &NymeaCore::deviceReconfigurationFinished, this, &DeviceHandler::deviceReconfigurationFinished); - connect(NymeaCore::instance(), &NymeaCore::pairingFinished, this, &DeviceHandler::pairingFinished); - connect(NymeaCore::instance()->deviceManager(), &DeviceManager::browseRequestFinished, this, &DeviceHandler::browseRequestFinished); - connect(NymeaCore::instance()->deviceManager(), &DeviceManager::browserItemRequestFinished, this, &DeviceHandler::browserItemRequestFinished); } /*! Returns the name of the \l{DeviceHandler}. In this case \b Devices.*/ @@ -375,21 +382,33 @@ JsonReply* DeviceHandler::GetSupportedDevices(const QVariantMap ¶ms) const JsonReply *DeviceHandler::GetDiscoveredDevices(const QVariantMap ¶ms) const { + QLocale locale = params.value("locale").toLocale(); + QVariantMap returns; DeviceClassId deviceClassId = DeviceClassId(params.value("deviceClassId").toString()); ParamList discoveryParams = JsonTypes::unpackParams(params.value("discoveryParams").toList()); - Device::DeviceError status = NymeaCore::instance()->deviceManager()->discoverDevices(deviceClassId, discoveryParams); - if (status == Device::DeviceErrorAsync ) { - JsonReply *reply = createAsyncReply("GetDiscoveredDevices"); - connect(reply, &JsonReply::finished, this, [this, deviceClassId](){ m_discoverRequests.remove(deviceClassId); }); - m_discoverRequests.insert(deviceClassId, reply); - return reply; - } - returns.insert("deviceError", JsonTypes::deviceErrorToString(status)); - return createReply(returns); + JsonReply *reply = createAsyncReply("GetDiscoveredDevices"); + DeviceDiscoveryInfo *info = NymeaCore::instance()->deviceManager()->discoverDevices(deviceClassId, discoveryParams); + connect(info, &DeviceDiscoveryInfo::finished, reply, [reply, info, locale](){ + QVariantMap returns; + returns.insert("deviceError", JsonTypes::deviceErrorToString(info->status())); + + if (info->status() == Device::DeviceErrorNoError) { + returns.insert("deviceDescriptors", JsonTypes::packDeviceDescriptors(info->deviceDescriptors())); + } + + if (!info->displayMessage().isEmpty()) { + returns.insert("displayMessage", info->translatedDisplayMessage(locale)); + } + + reply->setData(returns); + reply->finished(); + + }); + return reply; } JsonReply* DeviceHandler::GetPlugins(const QVariantMap ¶ms) const @@ -437,28 +456,32 @@ JsonReply* DeviceHandler::AddConfiguredDevice(const QVariantMap ¶ms) ParamList deviceParams = JsonTypes::unpackParams(params.value("deviceParams").toList()); DeviceDescriptorId deviceDescriptorId(params.value("deviceDescriptorId").toString()); DeviceId newDeviceId = DeviceId::createDeviceId(); - Device::DeviceError status; + QLocale locale = params.value("locale").toLocale(); + + JsonReply *jsonReply = createAsyncReply("AddConfiguredDevice"); + + DeviceSetupInfo *info; if (deviceDescriptorId.isNull()) { - status = NymeaCore::instance()->deviceManager()->addConfiguredDevice(deviceClass, deviceName, deviceParams, newDeviceId); + info = NymeaCore::instance()->deviceManager()->addConfiguredDevice(deviceClass, deviceName, deviceParams, newDeviceId); } else { - status = NymeaCore::instance()->deviceManager()->addConfiguredDevice(deviceClass, deviceName, deviceDescriptorId, deviceParams, newDeviceId); + info = NymeaCore::instance()->deviceManager()->addConfiguredDevice(deviceClass, deviceName, deviceDescriptorId, deviceParams, newDeviceId); } - QVariantMap returns; - switch (status) { - case Device::DeviceErrorAsync: { - JsonReply *asyncReply = createAsyncReply("AddConfiguredDevice"); - connect(asyncReply, &JsonReply::finished, [this, newDeviceId](){ m_asynDeviceAdditions.remove(newDeviceId); }); - m_asynDeviceAdditions.insert(newDeviceId, asyncReply); - return asyncReply; - } - case Device::DeviceErrorNoError: - returns.insert("deviceId", newDeviceId); - returns.insert("deviceError", JsonTypes::deviceErrorToString(status)); - break; - default: - returns.insert("deviceError", JsonTypes::deviceErrorToString(status)); - } - return createReply(returns); + connect(info, &DeviceSetupInfo::finished, jsonReply, [info, jsonReply, locale](){ + QVariantMap returns; + returns.insert("deviceError", JsonTypes::deviceErrorToString(info->status())); + + if (!info->displayMessage().isEmpty()) { + returns.insert("displayMessage", info->translatedDisplayMessage(locale)); + } + + if(info->status() == Device::DeviceErrorNoError) { + returns.insert("deviceId", info->device()->id()); + } + jsonReply->setData(returns); + jsonReply->finished(); + + }); + return jsonReply; } JsonReply *DeviceHandler::PairDevice(const QVariantMap ¶ms) @@ -466,44 +489,68 @@ JsonReply *DeviceHandler::PairDevice(const QVariantMap ¶ms) DeviceClassId deviceClassId(params.value("deviceClassId").toString()); QString deviceName = params.value("name").toString(); DeviceClass deviceClass = NymeaCore::instance()->deviceManager()->findDeviceClass(deviceClassId); + QLocale locale = params.value("locale").toLocale(); - Device::DeviceError status; - PairingTransactionId pairingTransactionId = PairingTransactionId::createPairingTransactionId(); + DevicePairingInfo *info; if (params.contains("deviceDescriptorId")) { DeviceDescriptorId deviceDescriptorId(params.value("deviceDescriptorId").toString()); - status = NymeaCore::instance()->deviceManager()->pairDevice(pairingTransactionId, deviceClassId, deviceName, deviceDescriptorId); + info = NymeaCore::instance()->deviceManager()->pairDevice(deviceClassId, deviceName, deviceDescriptorId); } else { ParamList deviceParams = JsonTypes::unpackParams(params.value("deviceParams").toList()); - status = NymeaCore::instance()->deviceManager()->pairDevice(pairingTransactionId, deviceClassId, deviceName, deviceParams); + info = NymeaCore::instance()->deviceManager()->pairDevice(deviceClassId, deviceName, deviceParams); } - QVariantMap returns; - returns.insert("deviceError", JsonTypes::deviceErrorToString(status)); - if (status == Device::DeviceErrorNoError) { - returns.insert("displayMessage", NymeaCore::instance()->deviceManager()->translate(deviceClass.pluginId(), deviceClass.pairingInfo(), params.value("locale").toLocale())); - returns.insert("pairingTransactionId", pairingTransactionId.toString()); - returns.insert("setupMethod", JsonTypes::setupMethod().at(deviceClass.setupMethod())); - } - return createReply(returns); + JsonReply *jsonReply = createAsyncReply("PairDevice"); + + connect(info, &DevicePairingInfo::finished, jsonReply, [jsonReply, info, locale, deviceClass](){ + QVariantMap returns; + returns.insert("deviceError", JsonTypes::deviceErrorToString(info->status())); + returns.insert("pairingTransactionId", info->transactionId().toString()); + + if (info->status() == Device::DeviceErrorNoError) { + returns.insert("setupMethod", JsonTypes::setupMethodToString(deviceClass.setupMethod())); + } + + if (!info->displayMessage().isEmpty()) { + returns.insert("displayMessage", info->translatedDisplayMessage(locale)); + } + + if (!info->oAuthUrl().isEmpty()) { + returns.insert("oAuthUrl", info->oAuthUrl()); + } + + jsonReply->setData(returns); + jsonReply->finished(); + }); + + return jsonReply; } JsonReply *DeviceHandler::ConfirmPairing(const QVariantMap ¶ms) { PairingTransactionId pairingTransactionId = PairingTransactionId(params.value("pairingTransactionId").toString()); QString secret = params.value("secret").toString(); - Device::DeviceError status = NymeaCore::instance()->deviceManager()->confirmPairing(pairingTransactionId, secret); + QString username = params.value("username").toString(); + QLocale locale = params.value("locale").toLocale(); - JsonReply *reply = nullptr; - if (status == Device::DeviceErrorAsync) { - reply = createAsyncReply("ConfirmPairing"); - connect(reply, &JsonReply::finished, [this, pairingTransactionId](){ m_asyncPairingRequests.remove(pairingTransactionId); }); - m_asyncPairingRequests.insert(pairingTransactionId, reply); - return reply; - } - QVariantMap returns; - returns.insert("deviceError", JsonTypes::deviceErrorToString(status)); - reply = createReply(returns); - return reply; + JsonReply *jsonReply = createAsyncReply("ConfirmPairing"); + + DevicePairingInfo *info = NymeaCore::instance()->deviceManager()->confirmPairing(pairingTransactionId, username, secret); + connect(info, &DevicePairingInfo::finished, jsonReply, [info, jsonReply, locale](){ + + QVariantMap returns; + returns.insert("deviceError", JsonTypes::deviceErrorToString(info->status())); + if (!info->displayMessage().isEmpty()) { + returns.insert("displayMessage", info->translatedDisplayMessage(locale)); + } + if (info->status() == Device::DeviceErrorNoError) { + returns.insert("deviceId", info->deviceId().toString()); + } + jsonReply->setData(returns); + jsonReply->finished(); + }); + + return jsonReply; } JsonReply* DeviceHandler::GetConfiguredDevices(const QVariantMap ¶ms) const @@ -529,28 +576,30 @@ JsonReply* DeviceHandler::GetConfiguredDevices(const QVariantMap ¶ms) const JsonReply *DeviceHandler::ReconfigureDevice(const QVariantMap ¶ms) { - Q_UNUSED(params); DeviceId deviceId = DeviceId(params.value("deviceId").toString()); ParamList deviceParams = JsonTypes::unpackParams(params.value("deviceParams").toList()); - - Device::DeviceError status; DeviceDescriptorId deviceDescriptorId(params.value("deviceDescriptorId").toString()); + QLocale locale = params.value("locale").toLocale(); + + JsonReply *jsonReply = createAsyncReply("ReconfigureDevice"); + + DeviceSetupInfo *info; if (deviceDescriptorId.isNull()) { - status = NymeaCore::instance()->deviceManager()->reconfigureDevice(deviceId, deviceParams); + info = NymeaCore::instance()->deviceManager()->reconfigureDevice(deviceId, deviceParams); } else { - status = NymeaCore::instance()->deviceManager()->reconfigureDevice(deviceId, deviceDescriptorId); + info = NymeaCore::instance()->deviceManager()->reconfigureDevice(deviceId, deviceDescriptorId); } - if (status == Device::DeviceErrorAsync) { - JsonReply *asyncReply = createAsyncReply("ReconfigureDevice"); - connect(asyncReply, &JsonReply::finished, [this, deviceId](){ m_asynDeviceEditAdditions.remove(deviceId); }); - m_asynDeviceEditAdditions.insert(deviceId, asyncReply); - return asyncReply; - } + connect(info, &DeviceSetupInfo::finished, jsonReply, [info, jsonReply, locale](){ - QVariantMap returns; - returns.insert("deviceError", JsonTypes::deviceErrorToString(status)); - return createReply(returns); + QVariantMap returns; + returns.insert("deviceError", JsonTypes::deviceErrorToString(info->status())); + returns.insert("displayMessage", info->translatedDisplayMessage(locale)); + jsonReply->setData(returns); + jsonReply->finished(); + }); + + return jsonReply; } JsonReply *DeviceHandler::EditDevice(const QVariantMap ¶ms) @@ -687,24 +736,22 @@ JsonReply *DeviceHandler::GetStateValues(const QVariantMap ¶ms) const JsonReply *DeviceHandler::BrowseDevice(const QVariantMap ¶ms) const { - QVariantMap returns; DeviceId deviceId = DeviceId(params.value("deviceId").toString()); QString itemId = params.value("itemId").toString(); - Device::BrowseResult result = NymeaCore::instance()->deviceManager()->browseDevice(deviceId, itemId, params.value("locale").toLocale()); + JsonReply *jsonReply = createAsyncReply("BrowseDevice"); - if (result.status == Device::DeviceErrorAsync ) { - JsonReply *reply = createAsyncReply("BrowseDevice"); - m_asyncBrowseRequests.insert(result.id(), reply); - connect(reply, &JsonReply::finished, this, [this, result](){ - m_asyncBrowseRequests.remove(result.id()); - }); - return reply; - } + BrowseResult *result = NymeaCore::instance()->deviceManager()->browseDevice(deviceId, itemId, params.value("locale").toLocale()); + connect(result, &BrowseResult::finished, jsonReply, [jsonReply, result](){ - returns.insert("deviceError", JsonTypes::deviceErrorToString(result.status)); - returns.insert("items", JsonTypes::packBrowserItems(result.items)); - return createReply(returns); + QVariantMap returns; + returns.insert("deviceError", JsonTypes::deviceErrorToString(result->status())); + returns.insert("items", JsonTypes::packBrowserItems(result->items())); + jsonReply->setData(returns); + jsonReply->finished(); + }); + + return jsonReply; } JsonReply *DeviceHandler::GetBrowserItem(const QVariantMap ¶ms) const @@ -713,22 +760,20 @@ JsonReply *DeviceHandler::GetBrowserItem(const QVariantMap ¶ms) const DeviceId deviceId = DeviceId(params.value("deviceId").toString()); QString itemId = params.value("itemId").toString(); - Device::BrowserItemResult result = NymeaCore::instance()->deviceManager()->browserItemDetails(deviceId, itemId, params.value("locale").toLocale()); + JsonReply *jsonReply = createAsyncReply("GetBrowserItem"); - if (result.status == Device::DeviceErrorAsync ) { - JsonReply *reply = createAsyncReply("GetBrowserItem"); - m_asyncBrowseDetailsRequests.insert(result.id(), reply); - connect(reply, &JsonReply::finished, this, [this, result](){ - m_asyncBrowseDetailsRequests.remove(result.id()); - }); - return reply; - } + BrowserItemResult *result = NymeaCore::instance()->deviceManager()->browserItemDetails(deviceId, itemId, params.value("locale").toLocale()); + connect(result, &BrowserItemResult::finished, jsonReply, [jsonReply, result](){ + QVariantMap params; + if (result->status() == Device::DeviceErrorNoError) { + params.insert("item", JsonTypes::packBrowserItem(result->item())); + } + params.insert("deviceError", JsonTypes::deviceErrorToString(result->status())); + jsonReply->setData(params); + jsonReply->finished(); + }); - returns.insert("deviceError", JsonTypes::deviceErrorToString(result.status)); - if (result.status == Device::DeviceErrorNoError) { - returns.insert("item", JsonTypes::packBrowserItem(result.item)); - } - return createReply(returns); + return jsonReply; } void DeviceHandler::pluginConfigChanged(const PluginId &id, const ParamList &config) @@ -786,105 +831,4 @@ void DeviceHandler::deviceSettingChangedNotification(const DeviceId deviceId, co emit DeviceSettingChanged(params); } -void DeviceHandler::devicesDiscovered(const DeviceClassId &deviceClassId, const QList deviceDescriptors) -{ - if (!m_discoverRequests.contains(deviceClassId)) { - return; // We didn't start this discovery... Ignore it. - } - - JsonReply *reply = nullptr; - reply = m_discoverRequests.take(deviceClassId); - if (!reply) - return; - - QVariantMap returns; - returns.insert("deviceDescriptors", JsonTypes::packDeviceDescriptors(deviceDescriptors)); - returns.insert("deviceError", JsonTypes::deviceErrorToString(Device::DeviceErrorNoError)); - - reply->setData(returns); - reply->finished(); -} - -void DeviceHandler::deviceSetupFinished(Device *device, Device::DeviceError status) -{ - qCDebug(dcJsonRpc) << "Got a device setup finished" << device->name() << device->id(); - if (!m_asynDeviceAdditions.contains(device->id())) { - return; // Not the device we're waiting for... - } - - JsonReply *reply = m_asynDeviceAdditions.take(device->id()); - - QVariantMap returns; - returns.insert("deviceError", JsonTypes::deviceErrorToString(status)); - - if(status == Device::DeviceErrorNoError) { - returns.insert("deviceId", device->id()); - } - reply->setData(returns); - reply->finished(); -} - -void DeviceHandler::deviceReconfigurationFinished(Device *device, Device::DeviceError status) -{ - qCDebug(dcJsonRpc) << "Got async device reconfiguration finished"; - if (!m_asynDeviceEditAdditions.contains(device->id())) { - return; - } - JsonReply *reply = m_asynDeviceEditAdditions.take(device->id()); - - QVariantMap returns; - returns.insert("deviceError", JsonTypes::deviceErrorToString(status)); - reply->setData(returns); - reply->finished(); -} - -void DeviceHandler::pairingFinished(const PairingTransactionId &pairingTransactionId, Device::DeviceError status, const DeviceId &deviceId) -{ - qCDebug(dcJsonRpc) << "Got pairing finished"; - JsonReply *reply = m_asyncPairingRequests.take(pairingTransactionId); - if (!reply) { - return; - } - - if (status != Device::DeviceErrorNoError) { - QVariantMap returns; - returns.insert("deviceError", JsonTypes::deviceErrorToString(status)); - reply->setData(returns); - reply->finished(); - return; - } - m_asynDeviceAdditions.insert(deviceId, reply); -} - -void DeviceHandler::browseRequestFinished(const Device::BrowseResult &result) -{ - if (!m_asyncBrowseRequests.contains(result.id())) { - qCWarning(dcJsonRpc()) << "No pending JsonRpc reply. Did it time out?"; - return; - } - - JsonReply *reply = m_asyncBrowseRequests.take(result.id()); - QVariantMap params; - params.insert("items", JsonTypes::packBrowserItems(result.items)); - params.insert("deviceError", JsonTypes::deviceErrorToString(result.status)); - reply->setData(params); - reply->finished(); -} - -void DeviceHandler::browserItemRequestFinished(const Device::BrowserItemResult &result) -{ - if (!m_asyncBrowseDetailsRequests.contains(result.id())) { - qCWarning(dcJsonRpc()) << "No pending JsonRpc reply for result" << result.id() << ". Did it time out?"; - return; - } - JsonReply *reply = m_asyncBrowseDetailsRequests.take(result.id()); - QVariantMap params; - if (result.status == Device::DeviceErrorNoError) { - params.insert("item", JsonTypes::packBrowserItem(result.item)); - } - params.insert("deviceError", JsonTypes::deviceErrorToString(result.status)); - reply->setData(params); - reply->finished(); -} - } diff --git a/libnymea-core/jsonrpc/devicehandler.h b/libnymea-core/jsonrpc/devicehandler.h index a2a26fbf..a73d22ed 100644 --- a/libnymea-core/jsonrpc/devicehandler.h +++ b/libnymea-core/jsonrpc/devicehandler.h @@ -80,27 +80,6 @@ private slots: void deviceChangedNotification(Device *device); void deviceSettingChangedNotification(const DeviceId deviceId, const ParamTypeId ¶mTypeId, const QVariant &value); - - void devicesDiscovered(const DeviceClassId &deviceClassId, const QList deviceDescriptors); - - void deviceSetupFinished(Device *device, Device::DeviceError status); - - void deviceReconfigurationFinished(Device *device, Device::DeviceError status); - - void pairingFinished(const PairingTransactionId &pairingTransactionId, Device::DeviceError status, const DeviceId &deviceId); - - void browseRequestFinished(const Device::BrowseResult &result); - - void browserItemRequestFinished(const Device::BrowserItemResult &result); - -private: - // A cache for async replies - mutable QHash m_discoverRequests; - mutable QHash m_asynDeviceAdditions; - mutable QHash m_asynDeviceEditAdditions; - mutable QHash m_asyncPairingRequests; - mutable QHash m_asyncBrowseRequests; - mutable QHash m_asyncBrowseDetailsRequests; }; } diff --git a/libnymea-core/nymeacore.cpp b/libnymea-core/nymeacore.cpp index b5686a1b..a2120758 100644 --- a/libnymea-core/nymeacore.cpp +++ b/libnymea-core/nymeacore.cpp @@ -55,22 +55,6 @@ The \a status of the \l{Action} execution will be described as \l{Device::DeviceError}{DeviceError}. */ -/*! \fn void nymeaserver::NymeaCore::devicesDiscovered(const DeviceClassId &deviceClassId, const QList deviceDescriptors); - This signal is emitted when the discovery of a \a deviceClassId is finished. The \a deviceDescriptors parameter describes the - list of \l{DeviceDescriptor}{DeviceDescriptors} of all discovered \l{Device}{Devices}. - \sa DeviceManager::discoverDevices() -*/ - -/*! \fn void nymeaserver::NymeaCore::deviceSetupFinished(Device *device, Device::DeviceError status); - This signal is emitted when the setup of a \a device is finished. The \a status parameter describes the - \l{Device::DeviceError}{DeviceError} that occurred. -*/ - -/*! \fn void nymeaserver::NymeaCore::deviceReconfigurationFinished(Device *device, Device::DeviceError status); - This signal is emitted when the edit request of a \a device is finished. The \a status of the edit request will be - described as \l{Device::DeviceError}{DeviceError}. -*/ - /*! \fn void nymeaserver::NymeaCore::pairingFinished(const PairingTransactionId &pairingTransactionId, Device::DeviceError status, const DeviceId &deviceId); The DeviceManager will emit a this Signal when the pairing of a \l{Device} with the \a deviceId and \a pairingTransactionId is finished. The \a status of the pairing will be described as \l{Device::DeviceError}{DeviceError}. @@ -116,6 +100,9 @@ #include "devices/devicemanagerimplementation.h" #include "devices/device.h" +#include "devices/deviceactioninfo.h" +#include "devices/browseractioninfo.h" +#include "devices/browseritemactioninfo.h" #include "cloud/cloudnotifications.h" #include "cloud/cloudtransport.h" @@ -200,13 +187,6 @@ void NymeaCore::init() { connect(m_deviceManager, &DeviceManagerImplementation::deviceSettingChanged, this, &NymeaCore::deviceSettingChanged); connect(m_deviceManager, &DeviceManagerImplementation::deviceRemoved, this, &NymeaCore::deviceRemoved); connect(m_deviceManager, &DeviceManagerImplementation::deviceDisappeared, this, &NymeaCore::onDeviceDisappeared); - connect(m_deviceManager, &DeviceManagerImplementation::actionExecutionFinished, this, &NymeaCore::actionExecutionFinished); - connect(m_deviceManager, &DeviceManagerImplementation::browserItemExecutionFinished, this, &NymeaCore::browserItemExecutionFinished); - connect(m_deviceManager, &DeviceManagerImplementation::browserItemActionExecutionFinished, this, &NymeaCore::browserItemActionExecutionFinished); - connect(m_deviceManager, &DeviceManagerImplementation::devicesDiscovered, this, &NymeaCore::devicesDiscovered); - connect(m_deviceManager, &DeviceManagerImplementation::deviceSetupFinished, this, &NymeaCore::deviceSetupFinished); - connect(m_deviceManager, &DeviceManagerImplementation::deviceReconfigurationFinished, this, &NymeaCore::deviceReconfigurationFinished); - connect(m_deviceManager, &DeviceManagerImplementation::pairingFinished, this, &NymeaCore::pairingFinished); connect(m_deviceManager, &DeviceManagerImplementation::loaded, this, &NymeaCore::deviceManagerLoaded); connect(m_ruleEngine, &RuleEngine::ruleAdded, this, &NymeaCore::ruleAdded); @@ -436,43 +416,36 @@ Device::DeviceError NymeaCore::removeConfiguredDevice(const DeviceId &deviceId, /*! Calls the metheod DeviceManager::executeAction(\a action). * \sa DeviceManager::executeAction(), */ -Device::DeviceError NymeaCore::executeAction(const Action &action) +DeviceActionInfo* NymeaCore::executeAction(const Action &action) { - Device::DeviceError ret = m_deviceManager->executeAction(action); - if (ret == Device::DeviceErrorNoError) { - m_logger->logAction(action); - } else if (ret == Device::DeviceErrorAsync) { - m_pendingActions.insert(action.id(), action); - } else { - m_logger->logAction(action, Logging::LoggingLevelAlert, ret); - } - return ret; + DeviceActionInfo *info = m_deviceManager->executeAction(action); + connect(info, &DeviceActionInfo::finished, this, [this, info](){ + if (info->status() == Device::DeviceErrorNoError) { + m_logger->logAction(info->action()); + } else { + m_logger->logAction(info->action(), Logging::LoggingLevelAlert, info->status()); + } + }); + + return info; } -Device::DeviceError NymeaCore::executeBrowserItem(const BrowserAction &browserAction) +BrowserActionInfo* NymeaCore::executeBrowserItem(const BrowserAction &browserAction) { - Device::DeviceError ret = m_deviceManager->executeBrowserItem(browserAction); - if (ret == Device::DeviceErrorNoError) { - m_logger->logBrowserAction(browserAction); - } else if (ret == Device::DeviceErrorAsync) { - m_pendingBrowserActions.insert(browserAction.id(), browserAction); - } else { - m_logger->logBrowserAction(browserAction, Logging::LoggingLevelAlert, ret); - } - return ret; + BrowserActionInfo *info = m_deviceManager->executeBrowserItem(browserAction); + connect(info, &BrowserActionInfo::finished, info->device(), [this, info](){ + m_logger->logBrowserAction(info->browserAction(), info->status() == Device::DeviceErrorNoError ? Logging::LoggingLevelInfo : Logging::LoggingLevelAlert, info->status()); + }); + return info; } -Device::DeviceError NymeaCore::executeBrowserItemAction(const BrowserItemAction &browserItemAction) +BrowserItemActionInfo *NymeaCore::executeBrowserItemAction(const BrowserItemAction &browserItemAction) { - Device::DeviceError ret = m_deviceManager->executeBrowserItemAction(browserItemAction); - if (ret == Device::DeviceErrorNoError) { - m_logger->logBrowserItemAction(browserItemAction); - } else if (ret == Device::DeviceErrorAsync) { - m_pendingBrowserItemActions.insert(browserItemAction.id(), browserItemAction); - } else { - m_logger->logBrowserItemAction(browserItemAction, Logging::LoggingLevelAlert, ret); - } - return ret; + BrowserItemActionInfo *info = m_deviceManager->executeBrowserItemAction(browserItemAction); + connect(info, &BrowserItemActionInfo::finished, info->device(), [this, info](){ + m_logger->logBrowserItemAction(info->browserItemAction(), info->status() == Device::DeviceErrorNoError ? Logging::LoggingLevelInfo : Logging::LoggingLevelAlert, info->status()); + }); + return info; } /*! Execute the given \a ruleActions. */ @@ -575,44 +548,21 @@ void NymeaCore::executeRuleActions(const QList ruleActions) foreach (const Action &action, actions) { qCDebug(dcRuleEngine) << "Executing action" << action.actionTypeId() << action.params(); - Device::DeviceError status = executeAction(action); - switch(status) { - case Device::DeviceErrorNoError: - break; - case Device::DeviceErrorSetupFailed: - qCWarning(dcRuleEngine) << "Error executing action. Device setup failed."; - break; - case Device::DeviceErrorAsync: - qCDebug(dcRuleEngine) << "Executing asynchronous action."; - break; - case Device::DeviceErrorInvalidParameter: - qCWarning(dcRuleEngine) << "Error executing action. Invalid action parameter."; - break; - default: - qCWarning(dcRuleEngine) << "Error executing action:" << status; - } - - // if (status != Device::DeviceErrorAsync) - // m_logger->logAction(action, status == Device::DeviceErrorNoError ? Logging::LoggingLevelInfo : Logging::LoggingLevelAlert, status); + DeviceActionInfo *info = executeAction(action); + connect(info, &DeviceActionInfo::finished, this, [info](){ + if (info->status() != Device::DeviceErrorNoError) { + qCWarning(dcRuleEngine) << "Error executing action:" << info->status() << info->displayMessage(); + } + }); } foreach (const BrowserAction &browserAction, browserActions) { - Device::DeviceError status = executeBrowserItem(browserAction); - switch(status) { - case Device::DeviceErrorNoError: - break; - case Device::DeviceErrorSetupFailed: - qCWarning(dcRuleEngine) << "Error executing action. Device setup failed."; - break; - case Device::DeviceErrorAsync: - qCDebug(dcRuleEngine) << "Executing asynchronous action."; - break; - case Device::DeviceErrorInvalidParameter: - qCWarning(dcRuleEngine) << "Error executing action. Invalid action parameter."; - break; - default: - qCWarning(dcRuleEngine) << "Error executing action:" << status; - } + BrowserActionInfo *info = executeBrowserItem(browserAction); + connect(info, &BrowserActionInfo::finished, this, [info](){ + if (info->status() != Device::DeviceErrorNoError) { + qCWarning(dcRuleEngine) << "Error executing browser action:" << info->status(); + } + }); } } @@ -850,27 +800,6 @@ RestServer *NymeaCore::restServer() const return m_serverManager->restServer(); } -void NymeaCore::actionExecutionFinished(const ActionId &id, Device::DeviceError status) -{ - emit actionExecuted(id, status); - Action action = m_pendingActions.take(id); - m_logger->logAction(action, status == Device::DeviceErrorNoError ? Logging::LoggingLevelInfo : Logging::LoggingLevelAlert, status); -} - -void NymeaCore::browserItemExecutionFinished(const ActionId &id, Device::DeviceError status) -{ - emit browserItemExecuted(id, status); - BrowserAction action = m_pendingBrowserActions.take(id); - m_logger->logBrowserAction(action, status == Device::DeviceErrorNoError ? Logging::LoggingLevelInfo : Logging::LoggingLevelAlert, status); -} - -void NymeaCore::browserItemActionExecutionFinished(const ActionId &id, Device::DeviceError status) -{ - emit browserItemActionExecuted(id, status); - BrowserItemAction action = m_pendingBrowserItemActions.take(id); - m_logger->logBrowserItemAction(action, status == Device::DeviceErrorNoError ? Logging::LoggingLevelInfo : Logging::LoggingLevelAlert, status); -} - void NymeaCore::onDeviceDisappeared(const DeviceId &deviceId) { Device *device = m_deviceManager->findConfiguredDevice(deviceId); diff --git a/libnymea-core/nymeacore.h b/libnymea-core/nymeacore.h index 8b10dee2..52946ed9 100644 --- a/libnymea-core/nymeacore.h +++ b/libnymea-core/nymeacore.h @@ -71,9 +71,9 @@ public: QPair >removeConfiguredDevice(const DeviceId &deviceId, const QHash &removePolicyList); Device::DeviceError removeConfiguredDevice(const DeviceId &deviceId, const RuleEngine::RemovePolicy &removePolicy); - Device::DeviceError executeAction(const Action &action); - Device::DeviceError executeBrowserItem(const BrowserAction &browserAction); - Device::DeviceError executeBrowserItemAction(const BrowserItemAction &browserItemAction); + DeviceActionInfo *executeAction(const Action &action); + BrowserActionInfo* executeBrowserItem(const BrowserAction &browserAction); + BrowserItemActionInfo* executeBrowserItemAction(const BrowserItemAction &browserItemAction); void executeRuleActions(const QList ruleActions); @@ -107,14 +107,6 @@ signals: void deviceAdded(Device *device); void deviceChanged(Device *device); void deviceSettingChanged(const DeviceId deviceId, const ParamTypeId &settingParamTypeId, const QVariant &value); - void actionExecuted(const ActionId &id, Device::DeviceError status); - void browserItemExecuted(const ActionId &id, Device::DeviceError status); - void browserItemActionExecuted(const ActionId &id, Device::DeviceError status); - - void devicesDiscovered(const DeviceClassId &deviceClassId, const QList deviceDescriptors); - void deviceSetupFinished(Device *device, Device::DeviceError status); - void deviceReconfigurationFinished(Device *device, Device::DeviceError status); - void pairingFinished(const PairingTransactionId &pairingTransactionId, Device::DeviceError status, const DeviceId &deviceId); void ruleRemoved(const RuleId &ruleId); void ruleAdded(const Rule &rule); @@ -142,17 +134,11 @@ private: UserManager *m_userManager; System *m_system; - QHash m_pendingActions; - QHash m_pendingBrowserActions; - QHash m_pendingBrowserItemActions; QList m_executingRules; private slots: void gotEvent(const Event &event); void onDateTimeChanged(const QDateTime &dateTime); - void actionExecutionFinished(const ActionId &id, Device::DeviceError status); - void browserItemExecutionFinished(const ActionId &id, Device::DeviceError status); - void browserItemActionExecutionFinished(const ActionId &id, Device::DeviceError status); void onDeviceDisappeared(const DeviceId &deviceId); void deviceManagerLoaded(); diff --git a/libnymea-core/servers/rest/deviceclassesresource.cpp b/libnymea-core/servers/rest/deviceclassesresource.cpp index 2c110f04..63e8cf5c 100644 --- a/libnymea-core/servers/rest/deviceclassesresource.cpp +++ b/libnymea-core/servers/rest/deviceclassesresource.cpp @@ -38,6 +38,7 @@ #include "deviceclassesresource.h" #include "servers/httprequest.h" #include "nymeacore.h" +#include "devices/devicediscoveryinfo.h" #include @@ -47,7 +48,6 @@ namespace nymeaserver { DeviceClassesResource::DeviceClassesResource(QObject *parent) : RestResource(parent) { - connect(NymeaCore::instance(), &NymeaCore::devicesDiscovered, this, &DeviceClassesResource::devicesDiscovered, Qt::QueuedConnection); } /*! Returns the name of the \l{RestResource}. In this case \b deviceclasses. @@ -265,36 +265,24 @@ HttpReply *DeviceClassesResource::getDiscoverdDevices(const ParamList &discovery qCDebug(dcRest) << "Discover devices for DeviceClass" << m_deviceClass.id(); qCDebug(dcRest) << discoveryParams; - Device::DeviceError status = NymeaCore::instance()->deviceManager()->discoverDevices(m_deviceClass.id(), discoveryParams); + DeviceDiscoveryInfo *info = NymeaCore::instance()->deviceManager()->discoverDevices(m_deviceClass.id(), discoveryParams); + HttpReply *reply = createAsyncReply(); + connect(info, &DeviceDiscoveryInfo::finished, reply, [info, reply](){ + reply->setHeader(HttpReply::ContentTypeHeader, "application/json; charset=\"utf-8\";"); + QVariantMap response; + if (info->status() != Device::DeviceErrorNoError) { + reply->setHttpStatusCode(HttpReply::InternalServerError); + response.insert("error", JsonTypes::deviceErrorToString(info->status())); + reply->setPayload(QJsonDocument::fromVariant(response).toJson()); + } else { + reply->setHttpStatusCode(HttpReply::Ok); + reply->setPayload(QJsonDocument::fromVariant(JsonTypes::packDeviceDescriptors(info->deviceDescriptors())).toJson()); + } + reply->finished(); + }); - if (status == Device::DeviceErrorAsync) { - HttpReply *reply = createAsyncReply(); - m_discoverRequests.insert(m_deviceClass.id(), reply); - return reply; - } - if (status != Device::DeviceErrorNoError) - return createDeviceErrorReply(HttpReply::InternalServerError, status); - - return createSuccessReply(); -} - -void DeviceClassesResource::devicesDiscovered(const DeviceClassId &deviceClassId, const QList deviceDescriptors) -{ - if (!m_discoverRequests.contains(deviceClassId)) - return; // Not the discovery we are waiting for. - - qCDebug(dcRest) << "Discovery finished. Found" << deviceDescriptors.count() << "devices."; - - if (m_discoverRequests.value(deviceClassId).isNull()) { - qCWarning(dcRest) << "Async reply for discovery does not exist any more (timeout)."; - return; - } - - HttpReply *reply = m_discoverRequests.take(deviceClassId); - reply->setHeader(HttpReply::ContentTypeHeader, "application/json; charset=\"utf-8\";"); - reply->setPayload(QJsonDocument::fromVariant(JsonTypes::packDeviceDescriptors(deviceDescriptors)).toJson()); - reply->finished(); + return reply; } HttpReply *DeviceClassesResource::getDeviceClasses(const VendorId &vendorId) diff --git a/libnymea-core/servers/rest/deviceclassesresource.h b/libnymea-core/servers/rest/deviceclassesresource.h index 0ae4f8a3..d5397155 100644 --- a/libnymea-core/servers/rest/deviceclassesresource.h +++ b/libnymea-core/servers/rest/deviceclassesresource.h @@ -67,9 +67,6 @@ private: HttpReply *getDiscoverdDevices(const ParamList &discoveryParams); -private slots: - void devicesDiscovered(const DeviceClassId &deviceClassId, const QList deviceDescriptors); - }; } diff --git a/libnymea-core/servers/rest/devicesresource.cpp b/libnymea-core/servers/rest/devicesresource.cpp index bf54585d..f74e5864 100644 --- a/libnymea-core/servers/rest/devicesresource.cpp +++ b/libnymea-core/servers/rest/devicesresource.cpp @@ -41,6 +41,9 @@ #include "servers/httprequest.h" #include "jsonrpc/jsontypes.h" #include "nymeacore.h" +#include "devices/devicesetupinfo.h" +#include "devices/devicepairinginfo.h" +#include "devices/deviceactioninfo.h" #include @@ -50,10 +53,6 @@ namespace nymeaserver { DevicesResource::DevicesResource(QObject *parent) : RestResource(parent) { - connect(NymeaCore::instance(), &NymeaCore::actionExecuted, this, &DevicesResource::actionExecuted); - connect(NymeaCore::instance(), &NymeaCore::deviceSetupFinished, this, &DevicesResource::deviceSetupFinished); - connect(NymeaCore::instance(), &NymeaCore::deviceReconfigurationFinished, this, &DevicesResource::deviceReconfigurationFinished); - connect(NymeaCore::instance(), &NymeaCore::pairingFinished, this, &DevicesResource::pairingFinished); } /*! Returns the name of the \l{RestResource}. In this case \b devices. @@ -337,17 +336,30 @@ HttpReply *DevicesResource::executeAction(Device *device, const ActionTypeId &ac Action action(actionTypeId, device->id()); action.setParams(actionParams); - Device::DeviceError status = NymeaCore::instance()->executeAction(action); - if (status == Device::DeviceErrorAsync) { - HttpReply *reply = createAsyncReply(); - m_asyncActionExecutions.insert(action.id(), reply); - return reply; - } + HttpReply *httpReply = createAsyncReply(); - if (status != Device::DeviceErrorNoError) - return createDeviceErrorReply(HttpReply::InternalServerError, status); + DeviceActionInfo *info = NymeaCore::instance()->executeAction(action); + connect(info, &DeviceActionInfo::finished, this, [info, httpReply](){ + QVariantMap response; + response.insert("error", JsonTypes::deviceErrorToString(info->status())); - return createDeviceErrorReply(HttpReply::Ok, status); + httpReply->setHeader(HttpReply::ContentTypeHeader, "application/json; charset=\"utf-8\";"); + if (info->status() == Device::DeviceErrorNoError) { + qCDebug(dcRest) << "Action execution finished successfully"; + httpReply->setHttpStatusCode(HttpReply::Ok); + httpReply->setPayload(QJsonDocument::fromVariant(response).toJson()); + } else { + qCDebug(dcRest) << "Action execution finished with error" << info->status(); + QVariantMap response; + response.insert("error", JsonTypes::deviceErrorToString(info->status())); + httpReply->setHttpStatusCode(HttpReply::InternalServerError); + httpReply->setPayload(QJsonDocument::fromVariant(response).toJson()); + } + + httpReply->finished(); + }); + + return httpReply; } HttpReply *DevicesResource::addConfiguredDevice(const QByteArray &payload) const @@ -367,29 +379,35 @@ HttpReply *DevicesResource::addConfiguredDevice(const QByteArray &payload) const ParamList deviceParams = JsonTypes::unpackParams(params.value("deviceParams").toList()); DeviceDescriptorId deviceDescriptorId(params.value("deviceDescriptorId").toString()); - Device::DeviceError status; + HttpReply *httpReply = createAsyncReply(); + + DeviceSetupInfo *info; if (deviceDescriptorId.isNull()) { qCDebug(dcRest) << "Adding device" << deviceName << "with" << deviceParams; - status = NymeaCore::instance()->deviceManager()->addConfiguredDevice(deviceClassId, deviceName, deviceParams, newDeviceId); + info = NymeaCore::instance()->deviceManager()->addConfiguredDevice(deviceClassId, deviceName, deviceParams, newDeviceId); } else { qCDebug(dcRest) << "Adding discovered device" << deviceName << "with DeviceDescriptorId" << deviceDescriptorId.toString(); - status = NymeaCore::instance()->deviceManager()->addConfiguredDevice(deviceClassId, deviceName, deviceDescriptorId, deviceParams, newDeviceId); - } - if (status == Device::DeviceErrorAsync) { - HttpReply *reply = createAsyncReply(); - qCDebug(dcRest) << "Device setup async reply"; - m_asyncDeviceAdditions.insert(newDeviceId, reply); - return reply; + info = NymeaCore::instance()->deviceManager()->addConfiguredDevice(deviceClassId, deviceName, deviceDescriptorId, deviceParams, newDeviceId); } - if (status != Device::DeviceErrorNoError) - return createDeviceErrorReply(HttpReply::InternalServerError, status); + connect(info, &DeviceSetupInfo::finished, httpReply, [info, httpReply](){ + httpReply->setHeader(HttpReply::ContentTypeHeader, "application/json; charset=\"utf-8\";"); + if (info->status() != Device::DeviceErrorNoError) { + qCDebug(dcRest) << "Device setup finished with error" << info->status(); + QVariantMap response; + response.insert("error", JsonTypes::deviceErrorToString(info->status())); + httpReply->setHttpStatusCode(HttpReply::InternalServerError); + httpReply->setPayload(QJsonDocument::fromVariant(response).toJson()); + } else { + httpReply->setHttpStatusCode(HttpReply::Ok); + QVariant result = JsonTypes::packDevice(info->device()); + httpReply->setPayload(QJsonDocument::fromVariant(result).toJson()); + } + qCDebug(dcRest) << "Device setup finished successfully"; + httpReply->finished(); + }); - QVariant result = JsonTypes::packDevice(NymeaCore::instance()->deviceManager()->findConfiguredDevice(newDeviceId)); - HttpReply *reply = createSuccessReply(); - reply->setHeader(HttpReply::ContentTypeHeader, "application/json; charset=\"utf-8\";"); - reply->setPayload(QJsonDocument::fromVariant(result).toJson()); - return reply; + return httpReply; } HttpReply *DevicesResource::editDevice(const QByteArray &payload) const @@ -428,27 +446,38 @@ HttpReply *DevicesResource::pairDevice(const QByteArray &payload) const qCDebug(dcRest) << "Pair device" << deviceName << "with deviceClassId" << deviceClassId.toString(); - Device::DeviceError status; - PairingTransactionId pairingTransactionId = PairingTransactionId::createPairingTransactionId(); + HttpReply *httpReply = createAsyncReply(); + + DevicePairingInfo *info; if (params.contains("deviceDescriptorId")) { DeviceDescriptorId deviceDescriptorId(params.value("deviceDescriptorId").toString()); - status = NymeaCore::instance()->deviceManager()->pairDevice(pairingTransactionId, deviceClassId, deviceName, deviceDescriptorId); + info = NymeaCore::instance()->deviceManager()->pairDevice(deviceClassId, deviceName, deviceDescriptorId); } else { ParamList deviceParams = JsonTypes::unpackParams(params.value("deviceParams").toList()); - status = NymeaCore::instance()->deviceManager()->pairDevice(pairingTransactionId, deviceClassId, deviceName, deviceParams); + info = NymeaCore::instance()->deviceManager()->pairDevice(deviceClassId, deviceName, deviceParams); } - if (status != Device::DeviceErrorNoError) - return createDeviceErrorReply(HttpReply::BadRequest, status); + connect(info, &DevicePairingInfo::finished, httpReply, [info, httpReply](){ + httpReply->setHeader(HttpReply::ContentTypeHeader, "application/json; charset=\"utf-8\";"); + if (info->status() != Device::DeviceErrorNoError) { + qCDebug(dcRest) << "Device setup finished with error" << info->status(); + QVariantMap response; + response.insert("error", JsonTypes::deviceErrorToString(info->status())); + httpReply->setHttpStatusCode(HttpReply::InternalServerError); + httpReply->setPayload(QJsonDocument::fromVariant(response).toJson()); + } else { + httpReply->setHttpStatusCode(HttpReply::Ok); + QVariantMap returns; + returns.insert("error", JsonTypes::deviceErrorToString(info->status())); + returns.insert("pairingTransactionId", info->transactionId().toString()); + returns.insert("displayMessage", info->displayMessage()); + httpReply->setPayload(QJsonDocument::fromVariant(returns).toJson()); + } + qCDebug(dcRest) << "Device pairing initiated successfully"; + httpReply->finished(); + }); - QVariantMap returns; - returns.insert("displayMessage", NymeaCore::instance()->deviceManager()->translate(deviceClass.pluginId(), deviceClass.pairingInfo(), NymeaCore::instance()->configuration()->locale())); - returns.insert("pairingTransactionId", pairingTransactionId.toString()); - returns.insert("setupMethod", JsonTypes::setupMethod().at(deviceClass.setupMethod())); - HttpReply *reply = createSuccessReply(); - reply->setHeader(HttpReply::ContentTypeHeader, "application/json; charset=\"utf-8\";"); - reply->setPayload(QJsonDocument::fromVariant(returns).toJson()); - return reply; + return httpReply; } HttpReply *DevicesResource::confirmPairDevice(const QByteArray &payload) const @@ -460,20 +489,29 @@ HttpReply *DevicesResource::confirmPairDevice(const QByteArray &payload) const QVariantMap params = verification.second.toMap(); PairingTransactionId pairingTransactionId = PairingTransactionId(params.value("pairingTransactionId").toString()); + QString username = params.value("username").toString(); QString secret = params.value("secret").toString(); - Device::DeviceError status = NymeaCore::instance()->deviceManager()->confirmPairing(pairingTransactionId, secret); - if (status == Device::DeviceErrorAsync) { - HttpReply *reply = createAsyncReply(); - qCDebug(dcRest) << "Confirm pairing async reply"; - m_asyncPairingRequests.insert(pairingTransactionId, reply); - return reply; - } + HttpReply *httpReply = createAsyncReply(); - if (status != Device::DeviceErrorNoError) - return createDeviceErrorReply(HttpReply::InternalServerError, status); + DevicePairingInfo *info = NymeaCore::instance()->deviceManager()->confirmPairing(pairingTransactionId, username, secret); + connect(info, &DevicePairingInfo::finished, httpReply, [info, httpReply](){ + qCDebug(dcRest()) << "Confirm pairing finished:" << info->status(); + QVariantMap response; + response.insert("error", JsonTypes::deviceErrorToString(info->status())); + if (info->status() != Device::DeviceErrorNoError) { + qCDebug(dcRest) << "Pairing device finished with error."; + httpReply->setHttpStatusCode(HttpReply::InternalServerError); + } else { + httpReply->setHttpStatusCode(HttpReply::Ok); + response.insert("id", info->deviceId().toString()); + } + httpReply->setHeader(HttpReply::ContentTypeHeader, "application/json; charset=\"utf-8\";"); + httpReply->setPayload(QJsonDocument::fromVariant(response).toJson()); + httpReply->finished(); + }); - return createDeviceErrorReply(HttpReply::Ok, Device::DeviceErrorNoError); + return httpReply; } HttpReply *DevicesResource::reconfigureDevice(Device *device, const QByteArray &payload) const @@ -486,145 +524,35 @@ HttpReply *DevicesResource::reconfigureDevice(Device *device, const QByteArray & QVariantMap params = verification.second.toMap(); ParamList deviceParams = JsonTypes::unpackParams(params.value("deviceParams").toList()); - Device::DeviceError status; + HttpReply *httpReply = createAsyncReply(); + + DeviceSetupInfo *info; DeviceDescriptorId deviceDescriptorId(params.value("deviceDescriptorId").toString()); if (deviceDescriptorId.isNull()) { qCDebug(dcRest) << "Reconfigure device with params:" << deviceParams; - status = NymeaCore::instance()->deviceManager()->reconfigureDevice(device->id(), deviceParams); + info = NymeaCore::instance()->deviceManager()->reconfigureDevice(device->id(), deviceParams); } else { qCDebug(dcRest) << "Reconfigure device using the new discovered device with descriptorId:" << deviceDescriptorId.toString(); - status = NymeaCore::instance()->deviceManager()->reconfigureDevice(device->id(), deviceDescriptorId); + info = NymeaCore::instance()->deviceManager()->reconfigureDevice(device->id(), deviceDescriptorId); } - if (status == Device::DeviceErrorAsync) { - HttpReply *reply = createAsyncReply(); - qCDebug(dcRest) << "Device reconfiguration async reply"; - m_asyncReconfigureDevice.insert(device, reply); - return reply; - } + connect(info, &DeviceSetupInfo::finished, httpReply, [httpReply, info](){ + httpReply->setHeader(HttpReply::ContentTypeHeader, "application/json; charset=\"utf-8\";"); + if (info->status() != Device::DeviceErrorNoError) { + qCDebug(dcRest) << "Device reconfiguration finished with error" << info->status(); + QVariantMap response; + response.insert("error", JsonTypes::deviceErrorToString(info->status())); + httpReply->setHttpStatusCode(HttpReply::InternalServerError); + httpReply->setPayload(QJsonDocument::fromVariant(response).toJson()); + } else { + qCDebug(dcRest) << "Device reconfiguration finished successfully"; + httpReply->setHttpStatusCode(HttpReply::Ok); + QVariant result = JsonTypes::packDevice(info->device()); + httpReply->setPayload(QJsonDocument::fromVariant(result).toJson()); + } + httpReply->finished(); + }); - if (status != Device::DeviceErrorNoError) - return createDeviceErrorReply(HttpReply::InternalServerError, status); - - return createDeviceErrorReply(HttpReply::Ok, Device::DeviceErrorNoError); + return httpReply; } - -void DevicesResource::actionExecuted(const ActionId &actionId, Device::DeviceError status) -{ - if (!m_asyncActionExecutions.contains(actionId)) - return; // Not the action we are waiting for. - - QVariantMap response; - response.insert("error", JsonTypes::deviceErrorToString(status)); - - if (m_asyncActionExecutions.value(actionId).isNull()) { - qCWarning(dcRest) << "Async reply for execute action does not exist any more (timeout)."; - return; - } - - HttpReply *reply = m_asyncActionExecutions.take(actionId); - reply->setHeader(HttpReply::ContentTypeHeader, "application/json; charset=\"utf-8\";"); - if (status == Device::DeviceErrorNoError) { - qCDebug(dcRest) << "Action execution finished successfully"; - reply->setHttpStatusCode(HttpReply::Ok); - reply->setPayload(QJsonDocument::fromVariant(response).toJson()); - } else { - qCDebug(dcRest) << "Action execution finished with error" << status; - QVariantMap response; - response.insert("error", JsonTypes::deviceErrorToString(status)); - reply->setHttpStatusCode(HttpReply::InternalServerError); - reply->setPayload(QJsonDocument::fromVariant(response).toJson()); - } - - reply->finished(); -} - -void DevicesResource::deviceSetupFinished(Device *device, Device::DeviceError status) -{ - if (!m_asyncDeviceAdditions.contains(device->id())) - return; // Not the device we are waiting for. - - QVariantMap response; - response.insert("error", JsonTypes::deviceErrorToString(status)); - - if (m_asyncDeviceAdditions.value(device->id()).isNull()) { - qCWarning(dcRest) << "Async reply for device setup does not exist any more (timeout)."; - return; - } - - HttpReply *reply = m_asyncDeviceAdditions.take(device->id()); - reply->setHeader(HttpReply::ContentTypeHeader, "application/json; charset=\"utf-8\";"); - if (status == Device::DeviceErrorNoError) { - qCDebug(dcRest) << "Device setup finished successfully"; - reply->setHttpStatusCode(HttpReply::Ok); - reply->setPayload(QJsonDocument::fromVariant(response).toJson()); - } else { - qCDebug(dcRest) << "Device setup finished with error" << status; - reply->setHttpStatusCode(HttpReply::InternalServerError); - reply->setPayload(QJsonDocument::fromVariant(response).toJson()); - } - - QVariant result = JsonTypes::packDevice(device); - reply->setHeader(HttpReply::ContentTypeHeader, "application/json; charset=\"utf-8\";"); - reply->setPayload(QJsonDocument::fromVariant(result).toJson()); - reply->finished(); -} - -void DevicesResource::deviceReconfigurationFinished(Device *device, Device::DeviceError status) -{ - if (!m_asyncReconfigureDevice.contains(device)) - return; // Not the device we are waiting for. - - QVariantMap response; - response.insert("error", JsonTypes::deviceErrorToString(status)); - - if (m_asyncReconfigureDevice.value(device).isNull()) { - qCWarning(dcRest) << "Async reply for device reconfiguration does not exist any more (timeout)."; - return; - } - - HttpReply *reply = m_asyncReconfigureDevice.take(device); - reply->setHeader(HttpReply::ContentTypeHeader, "application/json; charset=\"utf-8\";"); - if (status == Device::DeviceErrorNoError) { - qCDebug(dcRest) << "Device reconfiguration finished successfully"; - reply->setHttpStatusCode(HttpReply::Ok); - reply->setPayload(QJsonDocument::fromVariant(response).toJson()); - } else { - qCDebug(dcRest) << "Device reconfiguration finished with error" << status; - reply->setHttpStatusCode(HttpReply::InternalServerError); - reply->setPayload(QJsonDocument::fromVariant(response).toJson()); - } - - reply->finished(); -} - -void DevicesResource::pairingFinished(const PairingTransactionId &pairingTransactionId, Device::DeviceError status, const DeviceId &deviceId) -{ - if (!m_asyncPairingRequests.contains(pairingTransactionId)) - return; // Not the device pairing we are waiting for. - - QVariantMap response; - response.insert("error", JsonTypes::deviceErrorToString(status)); - - if (m_asyncPairingRequests.value(pairingTransactionId).isNull()) { - qCWarning(dcRest) << "Async reply for device pairing does not exist any more."; - return; - } - - HttpReply *reply = m_asyncPairingRequests.take(pairingTransactionId); - if (status != Device::DeviceErrorNoError) { - qCDebug(dcRest) << "Pairing device finished with error."; - reply->setHeader(HttpReply::ContentTypeHeader, "application/json; charset=\"utf-8\";"); - reply->setHttpStatusCode(HttpReply::InternalServerError); - reply->setPayload(QJsonDocument::fromVariant(response).toJson()); - reply->finished(); - return; - } - - qCDebug(dcRest) << "Pairing device finished successfully"; - - // Add device to async device addtions - m_asyncDeviceAdditions.insert(deviceId, reply); -} - } diff --git a/libnymea-core/servers/rest/devicesresource.h b/libnymea-core/servers/rest/devicesresource.h index aeee5850..a7eb9b52 100644 --- a/libnymea-core/servers/rest/devicesresource.h +++ b/libnymea-core/servers/rest/devicesresource.h @@ -45,9 +45,6 @@ public: private: mutable QHash > m_asyncActionExecutions; - mutable QHash > m_asyncDeviceAdditions; - mutable QHash > m_asyncReconfigureDevice; - mutable QHash > m_asyncPairingRequests; Device *m_device; @@ -77,11 +74,6 @@ private: // Put methods HttpReply *reconfigureDevice(Device *device, const QByteArray &payload) const; -private slots: - void actionExecuted(const ActionId &actionId, Device::DeviceError status); - void deviceSetupFinished(Device *device, Device::DeviceError status); - void deviceReconfigurationFinished(Device *device, Device::DeviceError status); - void pairingFinished(const PairingTransactionId &pairingTransactionId, Device::DeviceError status, const DeviceId &deviceId); }; } diff --git a/libnymea/devices/browseractioninfo.cpp b/libnymea/devices/browseractioninfo.cpp new file mode 100644 index 00000000..d4867dec --- /dev/null +++ b/libnymea/devices/browseractioninfo.cpp @@ -0,0 +1,58 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2019 Michael Zanetti * + * * + * 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 "browseractioninfo.h" + +BrowserActionInfo::BrowserActionInfo(Device *device, const BrowserAction &browserAction, QObject *parent): + QObject (parent), + m_device(device), + m_browserAction(browserAction) +{ + connect(this, &BrowserActionInfo::finished, this, &BrowserActionInfo::deleteLater, Qt::QueuedConnection); +} + +Device *BrowserActionInfo::device() const +{ + return m_device; +} + +BrowserAction BrowserActionInfo::browserAction() const +{ + return m_browserAction; +} + +bool BrowserActionInfo::isFinished() const +{ + return m_finished; +} + +Device::DeviceError BrowserActionInfo::status() const +{ + return m_status; +} + +void BrowserActionInfo::finish(Device::DeviceError status) +{ + m_finished = true; + m_status = status; + staticMetaObject.invokeMethod(this, "finished", Qt::QueuedConnection); +} diff --git a/libnymea/devices/browseractioninfo.h b/libnymea/devices/browseractioninfo.h new file mode 100644 index 00000000..efa6f527 --- /dev/null +++ b/libnymea/devices/browseractioninfo.h @@ -0,0 +1,57 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2019 Michael Zanetti * + * * + * 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 BROWSERACTIONINFO_H +#define BROWSERACTIONINFO_H + +#include + +#include "device.h" +#include "types/browseraction.h" + +class BrowserActionInfo : public QObject +{ + Q_OBJECT +public: + explicit BrowserActionInfo(Device* device, const BrowserAction &browserAction, QObject *parent = nullptr); + + Device* device() const; + BrowserAction browserAction() const; + + bool isFinished() const; + Device::DeviceError status() const; + +signals: + void finished(); + +public slots: + void finish(Device::DeviceError status); + +private: + Device *m_device = nullptr; + BrowserAction m_browserAction; + + bool m_finished = false; + Device::DeviceError m_status = Device::DeviceErrorNoError; +}; + +#endif // BROWSERACTIONINFO_H diff --git a/libnymea/devices/browseresult.cpp b/libnymea/devices/browseresult.cpp new file mode 100644 index 00000000..b4fcce78 --- /dev/null +++ b/libnymea/devices/browseresult.cpp @@ -0,0 +1,79 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2019 Michael Zanetti * + * * + * 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 "browseresult.h" + +BrowseResult::BrowseResult(Device *device, const QString &itemId, const QLocale &locale, QObject *parent): + QObject(parent), + m_device(device), + m_itemId(itemId), + m_locale(locale) +{ + connect(this, &BrowseResult::finished, this, &BrowseResult::deleteLater, Qt::QueuedConnection); +} + +Device *BrowseResult::device() const +{ + return m_device; +} + +QString BrowseResult::itemId() const +{ + return m_itemId; +} + +QLocale BrowseResult::locale() const +{ + return m_locale; +} + +BrowserItems BrowseResult::items() const +{ + return m_items; +} + +bool BrowseResult::isFinished() const +{ + return m_finished; +} + +Device::DeviceError BrowseResult::status() const +{ + return m_status; +} + +void BrowseResult::addItem(const BrowserItem &item) +{ + m_items.append(item); +} + +void BrowseResult::addItems(const BrowserItems &items) +{ + m_items.append(items); +} + +void BrowseResult::finish(Device::DeviceError status) +{ + m_finished = true; + m_status = status; + staticMetaObject.invokeMethod(this, "finished", Qt::QueuedConnection); +} diff --git a/libnymea/devices/browseresult.h b/libnymea/devices/browseresult.h new file mode 100644 index 00000000..4e0a6610 --- /dev/null +++ b/libnymea/devices/browseresult.h @@ -0,0 +1,65 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2019 Michael Zanetti * + * * + * 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 BROWSERESULT_H +#define BROWSERESULT_H + +#include + +#include "device.h" + +class BrowseResult : public QObject +{ + Q_OBJECT +public: + explicit BrowseResult(Device *device, const QString &itemId, const QLocale &locale, QObject *parent = nullptr); + + Device* device() const; + QString itemId() const; + QLocale locale() const; + + BrowserItems items() const; + + bool isFinished() const; + Device::DeviceError status() const; + +public slots: + void addItem(const BrowserItem &item); + void addItems(const BrowserItems &items); + + void finish(Device::DeviceError status); + +signals: + void finished(); + +private: + Device *m_device = nullptr; + QString m_itemId; + QLocale m_locale; + + BrowserItems m_items; + + bool m_finished = false; + Device::DeviceError m_status = Device::DeviceErrorNoError; +}; + +#endif // BROWSERESULT_H diff --git a/libnymea/devices/browseritemactioninfo.cpp b/libnymea/devices/browseritemactioninfo.cpp new file mode 100644 index 00000000..599b5c39 --- /dev/null +++ b/libnymea/devices/browseritemactioninfo.cpp @@ -0,0 +1,58 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2019 Michael Zanetti * + * * + * 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 "browseritemactioninfo.h" + +BrowserItemActionInfo::BrowserItemActionInfo(Device *device, const BrowserItemAction &browserItemAction, QObject *parent): + QObject(parent), + m_device(device), + m_browserItemAction(browserItemAction) +{ + connect(this, &BrowserItemActionInfo::finished, this, &BrowserItemActionInfo::deleteLater, Qt::QueuedConnection); +} + +Device *BrowserItemActionInfo::device() const +{ + return m_device; +} + +BrowserItemAction BrowserItemActionInfo::browserItemAction() const +{ + return m_browserItemAction; +} + +bool BrowserItemActionInfo::isFinished() const +{ + return m_finished; +} + +Device::DeviceError BrowserItemActionInfo::status() const +{ + return m_status; +} + +void BrowserItemActionInfo::finish(Device::DeviceError status) +{ + m_finished = true; + m_status = status; + staticMetaObject.invokeMethod(this, "finished", Qt::QueuedConnection); +} diff --git a/libnymea/devices/browseritemactioninfo.h b/libnymea/devices/browseritemactioninfo.h new file mode 100644 index 00000000..76f6f4b2 --- /dev/null +++ b/libnymea/devices/browseritemactioninfo.h @@ -0,0 +1,58 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2019 Michael Zanetti * + * * + * 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 BROWSERITEMACTIONINFO_H +#define BROWSERITEMACTIONINFO_H + +#include + +#include "device.h" +#include "types/browseritemaction.h" + +class BrowserItemActionInfo : public QObject +{ + Q_OBJECT +public: + explicit BrowserItemActionInfo(Device *device, const BrowserItemAction &browserItemAction, QObject *parent = nullptr); + + Device *device() const; + BrowserItemAction browserItemAction() const; + + bool isFinished() const; + + Device::DeviceError status() const; + +signals: + void finished(); + +public slots: + void finish(Device::DeviceError status); + +private: + Device *m_device = nullptr; + BrowserItemAction m_browserItemAction; + + bool m_finished = false; + Device::DeviceError m_status = Device::DeviceErrorNoError; +}; + +#endif // BROWSERITEMACTIONINFO_H diff --git a/libnymea/devices/browseritemresult.cpp b/libnymea/devices/browseritemresult.cpp new file mode 100644 index 00000000..1d3a0a6d --- /dev/null +++ b/libnymea/devices/browseritemresult.cpp @@ -0,0 +1,75 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2019 Michael Zanetti * + * * + * 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 "browseritemresult.h" + +BrowserItemResult::BrowserItemResult(Device *device, const QString &itemId, const QLocale &locale, QObject *parent): + QObject(parent), + m_device(device), + m_itemId(itemId), + m_locale(locale) +{ + connect(this, &BrowserItemResult::finished, this, &BrowserItemResult::deleteLater, Qt::QueuedConnection); +} + +Device *BrowserItemResult::device() const +{ + return m_device; +} + +QString BrowserItemResult::itemId() const +{ + return m_itemId; +} + +QLocale BrowserItemResult::locale() const +{ + return m_locale; +} + +BrowserItem BrowserItemResult::item() const +{ + return m_item; +} + +bool BrowserItemResult::isFinished() const +{ + return m_finished; +} + +Device::DeviceError BrowserItemResult::status() const +{ + return m_status; +} + +void BrowserItemResult::finish(const BrowserItem &item) +{ + m_item = item; + finish(Device::DeviceErrorNoError); +} + +void BrowserItemResult::finish(Device::DeviceError status) +{ + m_finished = true; + m_status = status; + staticMetaObject.invokeMethod(this, "finished", Qt::QueuedConnection); +} diff --git a/libnymea/devices/browseritemresult.h b/libnymea/devices/browseritemresult.h new file mode 100644 index 00000000..426eb205 --- /dev/null +++ b/libnymea/devices/browseritemresult.h @@ -0,0 +1,64 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2019 Michael Zanetti * + * * + * 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 BROWSERITEMRESULT_H +#define BROWSERITEMRESULT_H + +#include + +#include "device.h" + +class BrowserItemResult : public QObject +{ + Q_OBJECT + +public: + explicit BrowserItemResult(Device *device, const QString &itemId, const QLocale &locale, QObject *parent = nullptr); + + Device* device() const; + QString itemId() const; + QLocale locale() const; + + BrowserItem item() const; + + bool isFinished() const; + Device::DeviceError status() const; + +public slots: + void finish(const BrowserItem &item); + void finish(Device::DeviceError status); + +signals: + void finished(); + +private: + Device *m_device = nullptr; + QString m_itemId; + QLocale m_locale; + + BrowserItem m_item; + + bool m_finished = false; + Device::DeviceError m_status = Device::DeviceErrorNoError; +}; + +#endif // BROWSERITEMRESULT_H diff --git a/libnymea/devices/device.cpp b/libnymea/devices/device.cpp index 85350867..5ed27594 100644 --- a/libnymea/devices/device.cpp +++ b/libnymea/devices/device.cpp @@ -371,7 +371,7 @@ bool Device::autoCreated() const return m_autoCreated; } -void Device::setSetupComplete(const bool &complete) +void Device::setSetupComplete(bool complete) { m_setupComplete = complete; } diff --git a/libnymea/devices/device.h b/libnymea/devices/device.h index 97dd3f37..067bd1d9 100644 --- a/libnymea/devices/device.h +++ b/libnymea/devices/device.h @@ -64,8 +64,7 @@ public: DeviceErrorSetupMethodNotSupported, DeviceErrorHardwareNotAvailable, DeviceErrorHardwareFailure, - DeviceErrorAuthentificationFailure, - DeviceErrorAsync, + DeviceErrorAuthenticationFailure, DeviceErrorDeviceInUse, DeviceErrorDeviceInRule, DeviceErrorDeviceIsChild, @@ -77,33 +76,6 @@ public: }; Q_ENUM(DeviceError) - enum DeviceSetupStatus { - DeviceSetupStatusSuccess, - DeviceSetupStatusFailure, - DeviceSetupStatusAsync - }; - Q_ENUM(DeviceSetupStatus) - - class BrowseResult { - public: - BrowseResult(): m_id(QUuid::createUuid()) {} - Device::DeviceError status = Device::DeviceErrorNoError; - BrowserItems items; - QUuid id() const { return m_id; } - private: - QUuid m_id; - }; - - class BrowserItemResult { - public: - BrowserItemResult(): m_id(QUuid::createUuid()) {} - Device::DeviceError status = Device::DeviceErrorNoError; - BrowserItem item; - QUuid id() const { return m_id; } - private: - QUuid m_id; - }; - DeviceId id() const; DeviceClassId deviceClassId() const; PluginId pluginId() const; @@ -153,7 +125,7 @@ private: Device(DevicePlugin *plugin, const DeviceClass &deviceClass, QObject *parent = nullptr); void setupCompleted(); - void setSetupComplete(const bool &complete); + void setSetupComplete(bool complete); private: DeviceClass m_deviceClass; @@ -184,6 +156,5 @@ public: }; Q_DECLARE_METATYPE(Device::DeviceError) -Q_DECLARE_METATYPE(Device::DeviceSetupStatus) #endif diff --git a/libnymea/devices/deviceactioninfo.cpp b/libnymea/devices/deviceactioninfo.cpp new file mode 100644 index 00000000..1c44f370 --- /dev/null +++ b/libnymea/devices/deviceactioninfo.cpp @@ -0,0 +1,75 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2019 Michael Zanetti * + * * + * 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 "deviceactioninfo.h" + +#include "devicemanager.h" + +DeviceActionInfo::DeviceActionInfo(Device *device, const Action &action, DeviceManager *parent): + QObject(parent), + m_device(device), + m_action(action), + m_deviceManager(parent) +{ + connect(this, &DeviceActionInfo::finished, this, &DeviceActionInfo::deleteLater, Qt::QueuedConnection); +} + +Device *DeviceActionInfo::device() const +{ + return m_device; +} + +Action DeviceActionInfo::action() const +{ + return m_action; +} + +bool DeviceActionInfo::isFinished() const +{ + return m_finished; +} + +Device::DeviceError DeviceActionInfo::status() const +{ + return m_status; +} + +QString DeviceActionInfo::displayMessage() const +{ + return m_displayMessage; +} + +QString DeviceActionInfo::translatedDisplayMessage(const QLocale &locale) +{ + if (!m_deviceManager) { + return m_displayMessage; + } + return m_deviceManager->translate(m_device->pluginId(), m_displayMessage.toUtf8(), locale); +} + +void DeviceActionInfo::finish(Device::DeviceError status, const QString &displayMessage) +{ + m_finished = true; + m_status = status; + m_displayMessage = displayMessage; + staticQtMetaObject.invokeMethod(this, "finished", Qt::QueuedConnection); +} diff --git a/libnymea/devices/deviceactioninfo.h b/libnymea/devices/deviceactioninfo.h new file mode 100644 index 00000000..a5e4ed98 --- /dev/null +++ b/libnymea/devices/deviceactioninfo.h @@ -0,0 +1,67 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2019 Michael Zanetti * + * * + * 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 DEVICEACTIONINFO_H +#define DEVICEACTIONINFO_H + +#include + +#include "device.h" +#include "typeutils.h" +#include "types/action.h" + +class DeviceManager; + +class DeviceActionInfo : public QObject +{ + Q_OBJECT +public: + explicit DeviceActionInfo(Device *device, const Action &action, DeviceManager *parent); + + Device* device() const; + Action action() const; + + bool isFinished() const; + + Device::DeviceError status() const; + + QString displayMessage() const; + QString translatedDisplayMessage(const QLocale &locale); + +signals: + void finished(); + +public slots: + void finish(Device::DeviceError status, const QString &displayMessage = QString()); + +private: + Device *m_device = nullptr; + Action m_action; + + bool m_finished = false; + Device::DeviceError m_status = Device::DeviceErrorNoError; + QString m_displayMessage; + + DeviceManager *m_deviceManager = nullptr; +}; + +#endif // DEVICEACTIONINFO_H diff --git a/libnymea/devices/devicedescriptor.h b/libnymea/devices/devicedescriptor.h index 3661ed65..6952cc65 100644 --- a/libnymea/devices/devicedescriptor.h +++ b/libnymea/devices/devicedescriptor.h @@ -67,6 +67,15 @@ private: ParamList m_params; }; +class DeviceDescriptors: public QList +{ +public: + DeviceDescriptors() {} + inline DeviceDescriptors(std::initializer_list args): QList(args) {} + DeviceDescriptors(const QList &other): QList(other) {} +}; + Q_DECLARE_METATYPE(DeviceDescriptor) +Q_DECLARE_METATYPE(DeviceDescriptors) #endif // DEVICEDESCRIPTION_H diff --git a/libnymea/devices/devicediscoveryinfo.cpp b/libnymea/devices/devicediscoveryinfo.cpp new file mode 100644 index 00000000..355b4b63 --- /dev/null +++ b/libnymea/devices/devicediscoveryinfo.cpp @@ -0,0 +1,90 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2019 Michael Zanetti * + * * + * 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 "devicediscoveryinfo.h" +#include "devicemanager.h" + +DeviceDiscoveryInfo::DeviceDiscoveryInfo(const DeviceClassId &deviceClassId, const ParamList ¶ms, DeviceManager *deviceManager): + QObject(deviceManager), + m_deviceClassId(deviceClassId), + m_params(params), + m_deviceManager(deviceManager) +{ + connect(this, &DeviceDiscoveryInfo::finished, this, &DeviceDiscoveryInfo::deleteLater, Qt::QueuedConnection); +} + +DeviceClassId DeviceDiscoveryInfo::deviceClassId() const +{ + return m_deviceClassId; +} + +ParamList DeviceDiscoveryInfo::params() const +{ + return m_params; +} + +bool DeviceDiscoveryInfo::isFinished() const +{ + return m_finished; +} + +Device::DeviceError DeviceDiscoveryInfo::status() const +{ + return m_status; +} + +void DeviceDiscoveryInfo::addDeviceDescriptor(const DeviceDescriptor &deviceDescriptor) +{ + m_deviceDescriptors.append(deviceDescriptor); +} + +void DeviceDiscoveryInfo::addDeviceDescriptors(const DeviceDescriptors &deviceDescriptors) +{ + m_deviceDescriptors.append(deviceDescriptors); +} + +DeviceDescriptors DeviceDiscoveryInfo::deviceDescriptors() const +{ + return m_deviceDescriptors; +} + +QString DeviceDiscoveryInfo::displayMessage() const +{ + return m_displayMessage; +} + +QString DeviceDiscoveryInfo::translatedDisplayMessage(const QLocale &locale) +{ + if (!m_deviceManager) { + return m_displayMessage; + } + DeviceClass deviceClass = m_deviceManager->findDeviceClass(m_deviceClassId); + return m_deviceManager->translate(deviceClass.pluginId(), m_displayMessage.toUtf8(), locale); +} + +void DeviceDiscoveryInfo::finish(Device::DeviceError status, const QString &displayMessage) +{ + m_finished = true; + m_status = status; + m_displayMessage = displayMessage; + staticMetaObject.invokeMethod(this, "finished", Qt::QueuedConnection); +} diff --git a/libnymea/devices/devicediscoveryinfo.h b/libnymea/devices/devicediscoveryinfo.h new file mode 100644 index 00000000..32e75676 --- /dev/null +++ b/libnymea/devices/devicediscoveryinfo.h @@ -0,0 +1,74 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2019 Michael Zanetti * + * * + * 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 DEVICEDISCOVERYINFO_H +#define DEVICEDISCOVERYINFO_H + +#include + +#include "types/deviceclass.h" +#include "types/param.h" +#include "device.h" +#include "devicedescriptor.h" + +class DeviceManager; + +class LIBNYMEA_EXPORT DeviceDiscoveryInfo : public QObject +{ + Q_OBJECT +public: + explicit DeviceDiscoveryInfo(const DeviceClassId &deviceClassId, const ParamList ¶ms, DeviceManager *deviceManager); + + DeviceClassId deviceClassId() const; + ParamList params() const; + + bool isFinished() const; + + Device::DeviceError status() const; + + void addDeviceDescriptor(const DeviceDescriptor &deviceDescriptor); + void addDeviceDescriptors(const DeviceDescriptors &deviceDescriptors); + + DeviceDescriptors deviceDescriptors() const; + + QString displayMessage() const; + QString translatedDisplayMessage(const QLocale &locale); + +public slots: + void finish(Device::DeviceError status, const QString &displayMessage = QString()); + +signals: + void finished(); + +private: + DeviceClassId m_deviceClassId; + ParamList m_params; + + bool m_finished = false; + Device::DeviceError m_status; + QString m_displayMessage; + DeviceDescriptors m_deviceDescriptors; + + DeviceManager *m_deviceManager = nullptr; +}; + +#endif // DEVICEDISCOVERYINFO_H diff --git a/libnymea/devices/devicemanager.h b/libnymea/devices/devicemanager.h index 893e03a6..575c9145 100644 --- a/libnymea/devices/devicemanager.h +++ b/libnymea/devices/devicemanager.h @@ -41,6 +41,7 @@ public: virtual ~DeviceManager() = default; virtual DevicePlugins plugins() const = 0; + virtual DevicePlugin* plugin(const PluginId &pluginId) const = 0; virtual Device::DeviceError setPluginConfig(const PluginId &pluginId, const ParamList &pluginConfig) = 0; virtual Vendors supportedVendors() const = 0; @@ -55,29 +56,29 @@ public: virtual Devices findConfiguredDevices(const QString &interface) const = 0; virtual Devices findChildDevices(const DeviceId &id) const = 0; - virtual Device::DeviceError discoverDevices(const DeviceClassId &deviceClassId, const ParamList ¶ms) = 0; + virtual DeviceDiscoveryInfo* discoverDevices(const DeviceClassId &deviceClassId, const ParamList ¶ms) = 0; - virtual Device::DeviceError addConfiguredDevice(const DeviceClassId &deviceClassId, const QString &name, const ParamList ¶ms, const DeviceId id = DeviceId::createDeviceId()) = 0; - virtual Device::DeviceError addConfiguredDevice(const DeviceClassId &deviceClassId, const QString &name, const DeviceDescriptorId &deviceDescriptorId, const ParamList ¶ms = ParamList(), const DeviceId &deviceId = DeviceId::createDeviceId()) = 0; + virtual DeviceSetupInfo* addConfiguredDevice(const DeviceClassId &deviceClassId, const QString &name, const ParamList ¶ms, const DeviceId id = DeviceId::createDeviceId()) = 0; + virtual DeviceSetupInfo* addConfiguredDevice(const DeviceClassId &deviceClassId, const QString &name, const DeviceDescriptorId &deviceDescriptorId, const ParamList ¶ms = ParamList(), const DeviceId &deviceId = DeviceId::createDeviceId()) = 0; - virtual Device::DeviceError reconfigureDevice(const DeviceId &deviceId, const ParamList ¶ms, bool fromDiscoveryOrAuto = false) = 0; - virtual Device::DeviceError reconfigureDevice(const DeviceId &deviceId, const DeviceDescriptorId &deviceDescriptorId) = 0; + virtual DeviceSetupInfo* reconfigureDevice(const DeviceId &deviceId, const ParamList ¶ms, bool fromDiscoveryOrAuto = false) = 0; + virtual DeviceSetupInfo* reconfigureDevice(const DeviceId &deviceId, const DeviceDescriptorId &deviceDescriptorId) = 0; virtual Device::DeviceError editDevice(const DeviceId &deviceId, const QString &name) = 0; virtual Device::DeviceError setDeviceSettings(const DeviceId &deviceId, const ParamList &settings) = 0; - virtual Device::DeviceError pairDevice(const PairingTransactionId &pairingTransactionId, const DeviceClassId &deviceClassId, const QString &name, const ParamList ¶ms) = 0; - virtual Device::DeviceError pairDevice(const PairingTransactionId &pairingTransactionId, const DeviceClassId &deviceClassId, const QString &name, const DeviceDescriptorId &deviceDescriptorId) = 0; - virtual Device::DeviceError confirmPairing(const PairingTransactionId &pairingTransactionId, const QString &secret = QString()) = 0; + virtual DevicePairingInfo* pairDevice(const DeviceClassId &deviceClassId, const QString &name, const ParamList ¶ms) = 0; + virtual DevicePairingInfo* pairDevice(const DeviceClassId &deviceClassId, const QString &name, const DeviceDescriptorId &deviceDescriptorId) = 0; + virtual DevicePairingInfo* confirmPairing(const PairingTransactionId &pairingTransactionId, const QString &username = QString(), const QString &secret = QString()) = 0; virtual Device::DeviceError removeConfiguredDevice(const DeviceId &deviceId) = 0; - virtual Device::DeviceError executeAction(const Action &action) = 0; + virtual DeviceActionInfo* executeAction(const Action &action) = 0; - virtual Device::BrowseResult browseDevice(const DeviceId &deviceId, const QString &itemId, const QLocale &locale) = 0; - virtual Device::BrowserItemResult browserItemDetails(const DeviceId &deviceId, const QString &itemId, const QLocale &locale) = 0; - virtual Device::DeviceError executeBrowserItem(const BrowserAction &browserAction) = 0; - virtual Device::DeviceError executeBrowserItemAction(const BrowserItemAction &browserItemAction) = 0; + virtual BrowseResult* browseDevice(const DeviceId &deviceId, const QString &itemId, const QLocale &locale) = 0; + virtual BrowserItemResult* browserItemDetails(const DeviceId &deviceId, const QString &itemId, const QLocale &locale) = 0; + virtual BrowserActionInfo* executeBrowserItem(const BrowserAction &browserAction) = 0; + virtual BrowserItemActionInfo* executeBrowserItemAction(const BrowserItemAction &browserItemAction) = 0; virtual QString translate(const PluginId &pluginId, const QString &string, const QLocale &locale) = 0; @@ -90,16 +91,6 @@ signals: void deviceAdded(Device *device); void deviceChanged(Device *device); void deviceSettingChanged(const DeviceId deviceId, const ParamTypeId &settingParamTypeId, const QVariant &value); - void devicesDiscovered(const DeviceClassId &deviceClassId, const QList &devices); - void deviceSetupFinished(Device *device, Device::DeviceError status); - void deviceReconfigurationFinished(Device *device, Device::DeviceError status); - void pairingFinished(const PairingTransactionId &pairingTransactionId, Device::DeviceError status, const DeviceId &deviceId = DeviceId()); - void actionExecutionFinished(const ActionId &actionId, Device::DeviceError status); - void browseRequestFinished(const Device::BrowseResult &result); - void browserItemRequestFinished(const Device::BrowserItemResult &result); - void browserItemExecutionFinished(const ActionId &actionId, Device::DeviceError status); - void browserItemActionExecutionFinished(const ActionId &actionId, Device::DeviceError status); - }; #endif // DEVICEMANAGER_H diff --git a/libnymea/devices/devicepairinginfo.cpp b/libnymea/devices/devicepairinginfo.cpp index d9144910..4d00e8af 100644 --- a/libnymea/devices/devicepairinginfo.cpp +++ b/libnymea/devices/devicepairinginfo.cpp @@ -21,26 +21,23 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "devicepairinginfo.h" +#include "devicemanager.h" -DevicePairingInfo::DevicePairingInfo() +DevicePairingInfo::DevicePairingInfo(const PairingTransactionId &pairingTransactionId, const DeviceClassId &deviceClassId, const DeviceId &deviceId, const QString &deviceName, const ParamList ¶ms, const DeviceId &parentDeviceId, DeviceManager *parent): + QObject(parent), + m_transactionId(pairingTransactionId), + m_deviceClassId(deviceClassId), + m_deviceId(deviceId), + m_deviceName(deviceName), + m_params(params), + m_parentDeviceId(parentDeviceId) { - + connect(this, &DevicePairingInfo::finished, this, &DevicePairingInfo::deleteLater, Qt::QueuedConnection); } -DevicePairingInfo::DevicePairingInfo(const DeviceClassId &deviceClassId, const QString &deviceName, const ParamList ¶ms) : - m_deviceClassId(deviceClassId), - m_deviceName(deviceName), - m_params(params) +PairingTransactionId DevicePairingInfo::transactionId() const { - -} - -DevicePairingInfo::DevicePairingInfo(const DeviceClassId &deviceClassId, const QString &deviceName, const DeviceDescriptorId &deviceDescriptorId) : - m_deviceClassId(deviceClassId), - m_deviceName(deviceName), - m_deviceDescriptorId(deviceDescriptorId) -{ - + return m_transactionId; } DeviceClassId DevicePairingInfo::deviceClassId() const @@ -48,6 +45,11 @@ DeviceClassId DevicePairingInfo::deviceClassId() const return m_deviceClassId; } +DeviceId DevicePairingInfo::deviceId() const +{ + return m_deviceId; +} + QString DevicePairingInfo::deviceName() const { return m_deviceName; @@ -58,8 +60,45 @@ ParamList DevicePairingInfo::params() const return m_params; } -DeviceDescriptorId DevicePairingInfo::deviceDescriptorId() const +DeviceId DevicePairingInfo::parentDeviceId() const { - return m_deviceDescriptorId; + return m_parentDeviceId; +} + +QUrl DevicePairingInfo::oAuthUrl() const +{ + return m_oAuthUrl; +} + +void DevicePairingInfo::setOAuthUrl(const QUrl &oAuthUrl) +{ + m_oAuthUrl = oAuthUrl; +} + +Device::DeviceError DevicePairingInfo::status() const +{ + return m_status; +} + +QString DevicePairingInfo::displayMessage() const +{ + return m_displayMessage; +} + +QString DevicePairingInfo::translatedDisplayMessage(const QLocale &locale) const +{ + if (!m_deviceManager) { + return m_displayMessage; + } + DeviceClass deviceClass = m_deviceManager->findDeviceClass(m_deviceClassId); + return m_deviceManager->translate(deviceClass.pluginId(), m_displayMessage.toUtf8(), locale); +} + +void DevicePairingInfo::finish(Device::DeviceError status, const QString &displayMessage) +{ + m_finished = true; + m_status = status; + m_displayMessage = displayMessage; + staticMetaObject.invokeMethod(this, "finished", Qt::QueuedConnection); } diff --git a/libnymea/devices/devicepairinginfo.h b/libnymea/devices/devicepairinginfo.h index e3325f9d..da0da6ac 100644 --- a/libnymea/devices/devicepairinginfo.h +++ b/libnymea/devices/devicepairinginfo.h @@ -23,30 +23,54 @@ #ifndef DEVICEPAIRINGINFO_H #define DEVICEPAIRINGINFO_H -#include "libnymea.h" -#include "typeutils.h" -#include "types/param.h" +#include +#include -class LIBNYMEA_EXPORT DevicePairingInfo +#include "device.h" + +class DeviceManager; + +class LIBNYMEA_EXPORT DevicePairingInfo: public QObject { + Q_OBJECT public: - DevicePairingInfo(); - DevicePairingInfo(const DeviceClassId &deviceClassId, const QString &deviceName, const ParamList ¶ms); - DevicePairingInfo(const DeviceClassId &deviceClassId, const QString &deviceName, const DeviceDescriptorId &deviceDescriptorId); + DevicePairingInfo(const PairingTransactionId &pairingTransactionId, const DeviceClassId &deviceClassId, const DeviceId &deviceId, const QString &deviceName, const ParamList ¶ms, const DeviceId &parentDeviceId, DeviceManager *parent); + + PairingTransactionId transactionId() const; DeviceClassId deviceClassId() const; - + DeviceId deviceId() const; QString deviceName() const; - ParamList params() const; + DeviceId parentDeviceId() const; - DeviceDescriptorId deviceDescriptorId() const; + QUrl oAuthUrl() const; + void setOAuthUrl(const QUrl &oAuthUrl); + + Device::DeviceError status() const; + QString displayMessage() const; + QString translatedDisplayMessage(const QLocale &locale) const; + +public slots: + void finish(Device::DeviceError status, const QString &displayMessage = QString()); + +signals: + void finished(); private: + PairingTransactionId m_transactionId; DeviceClassId m_deviceClassId; + DeviceId m_deviceId; QString m_deviceName; ParamList m_params; - DeviceDescriptorId m_deviceDescriptorId; + DeviceId m_parentDeviceId; + + QUrl m_oAuthUrl; + + bool m_finished = false; + Device::DeviceError m_status = Device::DeviceErrorNoError; + QString m_displayMessage; + DeviceManager *m_deviceManager = nullptr; }; #endif // DEVICEPAIRINGINFO_H diff --git a/libnymea/devices/deviceplugin.cpp b/libnymea/devices/deviceplugin.cpp index 5acecb7d..7871c159 100644 --- a/libnymea/devices/deviceplugin.cpp +++ b/libnymea/devices/deviceplugin.cpp @@ -89,6 +89,14 @@ #include "devicemanager.h" #include "deviceutils.h" #include "loggingcategories.h" +#include "devicediscoveryinfo.h" +#include "devicesetupinfo.h" +#include "devicepairinginfo.h" +#include "deviceactioninfo.h" +#include "browseresult.h" +#include "browseritemresult.h" +#include "browseractioninfo.h" +#include "browseritemactioninfo.h" #include "nymeasettings.h" @@ -167,11 +175,9 @@ void DevicePlugin::startMonitoringAutoDevices() if the discovery has been started successfully. Return an appropriate error otherwise. Once devices are discovered, emit devicesDiscovered(). */ -Device::DeviceError DevicePlugin::discoverDevices(const DeviceClassId &deviceClassId, const ParamList ¶ms) +void DevicePlugin::discoverDevices(DeviceDiscoveryInfo *info) { - Q_UNUSED(deviceClassId) - Q_UNUSED(params) - return Device::DeviceErrorCreationMethodNotSupported; + info->finish(Device::DeviceErrorUnsupportedFeature); } /*! This will be called when a new device is created. The plugin has the chance to do some setup. @@ -181,10 +187,9 @@ Device::DeviceError DevicePlugin::discoverDevices(const DeviceClassId &deviceCla return \l{DeviceManager}{DeviceSetupStatusAsync}. In that case the \l{DeviceManager} will wait for you to emit \l{DevicePlugin}{deviceSetupFinished} to report the status. */ -Device::DeviceSetupStatus DevicePlugin::setupDevice(Device *device) +void DevicePlugin::setupDevice(DeviceSetupInfo *info) { - Q_UNUSED(device) - return Device::DeviceSetupStatusSuccess; + info->finish(Device::DeviceErrorUnsupportedFeature); } /*! This will be called when a new \a device was added successfully and the device setup is finished.*/ @@ -202,32 +207,55 @@ void DevicePlugin::deviceRemoved(Device *device) Q_UNUSED(device) } -/*! This method will be called for \l{Device}{Devices} with the \l{DeviceClass::SetupMethodDisplayPin} right after the paring request - with the given \a pairingTransactionId for the given \a deviceDescriptor. +/*! This method will be called to initiate a pairing. The plugin can do a initialisation for an upcoming pairing process. + Depending on the setupMethod of a device class, different actions may be required here. + SetupMethodDisplayPin should trigger the device to display a pin that will be entered in the client. + SetupMethodOAuth should generate the OAuthUrl which will be opened on the client to allow the user logging in and obtain + the OAuth code. + SetupMethodEnterPin, SetupMethodPushButton and SetupMethodUserAndPassword will typically not require to do anything here. + It is not required to reimplement this method for those setup methods, however, a Plugin reimplementing it should call + \l{DevicePairingInfo::finish}{finish()} on the \l{DevicePairingInfo} object and can provide an optional displayMessage which + might be presented to the user. Those strings need to be wrapped in QT_TR_NOOP() in order to be translatable for the client's + locale. */ -Device::DeviceError DevicePlugin::displayPin(const PairingTransactionId &pairingTransactionId, const DeviceDescriptor &deviceDescriptor) +void DevicePlugin::startPairing(DevicePairingInfo *info) { - Q_UNUSED(pairingTransactionId) - Q_UNUSED(deviceDescriptor) - - qCWarning(dcDeviceManager) << "Plugin does not implement the display pin setup method."; - - return Device::DeviceErrorNoError; + DeviceClass deviceClass = m_metaData.deviceClasses().findById(info->deviceClassId()); + if (!deviceClass.isValid()) { + info->finish(Device::DeviceErrorDeviceClassNotFound); + return; + } + switch (deviceClass.setupMethod()) { + case DeviceClass::SetupMethodJustAdd: + info->finish(Device::DeviceErrorSetupMethodNotSupported); + return; + case DeviceClass::SetupMethodEnterPin: + case DeviceClass::SetupMethodPushButton: + case DeviceClass::SetupMethodUserAndPassword: + info->finish(Device::DeviceErrorNoError); + return; + case DeviceClass::SetupMethodDisplayPin: + case DeviceClass::SetupMethodOAuth: + // Those need to be handled by the plugin or it'll fail anyways. + qCWarning(dcDevice()) << "StartPairing called but Plugin does not reimplement it."; + info->finish(Device::DeviceErrorUnsupportedFeature); + } } -/*! Confirms the pairing of a \a deviceClassId with the given \a pairingTransactionId and \a params. - Returns \l{Device::DeviceError}{DeviceError} to inform about the result. The optional paramerter - \a secret contains for example the pin for \l{Device}{Devices} with the setup method \l{DeviceClass::SetupMethodDisplayPin}. +/*! Confirms the pairing of the given \a info. \a username and \a secret are filled in depending on the setupmethod of the device class. + \a username will be used for SetupMethodUserAndPassword. \a secret will be used for SetupMethodUserAndPassword, SetupMethodDisplayPin + and SetupMethodOAuth. + Once the pairing is completed, the plugin implementation should call the info's finish() method reporting about the status of + the pairing operation. The optional displayMessage needs to be wrapped in QT_TR_NOOP in order to be translatable to the client's + locale. */ -Device::DeviceSetupStatus DevicePlugin::confirmPairing(const PairingTransactionId &pairingTransactionId, const DeviceClassId &deviceClassId, const ParamList ¶ms, const QString &secret = QString()) +void DevicePlugin::confirmPairing(DevicePairingInfo *info, const QString &username, const QString &secret) { - Q_UNUSED(pairingTransactionId) - Q_UNUSED(deviceClassId) - Q_UNUSED(params) + Q_UNUSED(username) Q_UNUSED(secret) qCWarning(dcDeviceManager) << "Plugin does not implement pairing."; - return Device::DeviceSetupStatusFailure; + info->finish(Device::DeviceErrorUnsupportedFeature); } /*! This will be called to actually execute actions on the hardware. The \{Device} and @@ -241,11 +269,9 @@ Device::DeviceSetupStatus DevicePlugin::confirmPairing(const PairingTransactionI \sa actionExecutionFinished() */ -Device::DeviceError DevicePlugin::executeAction(Device *device, const Action &action) +void DevicePlugin::executeAction(DeviceActionInfo *info) { - Q_UNUSED(device) - Q_UNUSED(action) - return Device::DeviceErrorNoError; + info->finish(Device::DeviceErrorUnsupportedFeature); } /*! Implement this if your devices support browsing (set "browsable" to true in the metadata). @@ -260,14 +286,10 @@ Device::DeviceError DevicePlugin::executeAction(Device *device, const Action &ac * status to Device::DeviceErrorAsync if this operation requires async behavior and emit * \l{browseRequestFinished} when done. */ -Device::BrowseResult DevicePlugin::browseDevice(Device *device, Device::BrowseResult result, const QString &itemId, const QLocale &locale) +void DevicePlugin::browseDevice(BrowseResult *result) { - Q_UNUSED(device) - Q_UNUSED(itemId) - Q_UNUSED(locale) - - result.status = Device::DeviceErrorUnsupportedFeature; - return result; + qCWarning(dcDevice()) << "Device claims" << result->device()->deviceClass().name() << "to be browsable but plugin does not reimplement browseDevice!"; + result->finish(Device::DeviceErrorUnsupportedFeature); } /*! Implement this if your devices support browsing (set "browsable" to true in the metadata). @@ -277,25 +299,20 @@ Device::BrowseResult DevicePlugin::browseDevice(Device *device, Device::BrowseRe * status to Device::DeviceErrorAsync if this operation requires async behavior and emit * \l{browserItemRequestFinished} when done. */ -Device::BrowserItemResult DevicePlugin::browserItem(Device *device, Device::BrowserItemResult result, const QString &itemId, const QLocale &locale) +void DevicePlugin::browserItem(BrowserItemResult *result) { - Q_UNUSED(device) - Q_UNUSED(itemId) - Q_UNUSED(locale) - - result.status = Device::DeviceErrorUnsupportedFeature; - return result; + qCWarning(dcDevice()) << "Device claims" << result->device()->deviceClass().name() << "to be browsable but plugin does not reimplement browserItem!"; + result->finish(Device::DeviceErrorUnsupportedFeature); } /*! Implement this if your devices support browsing and execute the itemId defined in \a browserAction. * Return Device::DeviceErrorAsync if this operation requires async behavior and emit * \l{browserItemExecutionFinished} when done. */ -Device::DeviceError DevicePlugin::executeBrowserItem(Device *device, const BrowserAction &browserAction) +void DevicePlugin::executeBrowserItem(BrowserActionInfo *info) { - Q_UNUSED(device) - Q_UNUSED(browserAction) - return Device::DeviceErrorUnsupportedFeature; + qCWarning(dcDevice()) << "Device claims" << info->device()->deviceClass().name() << "to be browsable but plugin does not reimplement browserItem!"; + info->finish(Device::DeviceErrorUnsupportedFeature); } /*! Implement this if your devices support browsing and execute the item's action for the itemId defined @@ -303,11 +320,10 @@ Device::DeviceError DevicePlugin::executeBrowserItem(Device *device, const Brows * Return Device::DeviceErrorAsync if this operation requires async behavior and emit * \l{browserItemActionExecutionFinished} when done. */ -Device::DeviceError DevicePlugin::executeBrowserItemAction(Device *device, const BrowserItemAction &browserItemAction) +void DevicePlugin::executeBrowserItemAction(BrowserItemActionInfo *info) { - Q_UNUSED(device) - Q_UNUSED(browserItemAction) - return Device::DeviceErrorUnsupportedFeature; + qCWarning(dcDevice()) << "Device claims" << info->device()->deviceClass().name() << "to be browsable but plugin does not reimplement browserItemAction!"; + info->finish(Device::DeviceErrorUnsupportedFeature); } /*! Returns the configuration description of this DevicePlugin as a list of \l{ParamType}{ParamTypes}. */ diff --git a/libnymea/devices/deviceplugin.h b/libnymea/devices/deviceplugin.h index 89e74682..5d51f6f0 100644 --- a/libnymea/devices/deviceplugin.h +++ b/libnymea/devices/deviceplugin.h @@ -42,11 +42,19 @@ #include "hardwaremanager.h" +#include "devicediscoveryinfo.h" +#include "devicepairinginfo.h" +#include "devicesetupinfo.h" +#include "deviceactioninfo.h" +#include "browseresult.h" +#include "browseritemresult.h" +#include "browseractioninfo.h" +#include "browseritemactioninfo.h" + #include #include #include -class Device; class DeviceManager; class LIBNYMEA_EXPORT DevicePlugin: public QObject @@ -69,21 +77,21 @@ public: DeviceClasses supportedDevices() const; virtual void startMonitoringAutoDevices(); - virtual Device::DeviceError discoverDevices(const DeviceClassId &deviceClassId, const ParamList ¶ms); + virtual void discoverDevices(DeviceDiscoveryInfo *info); - virtual Device::DeviceSetupStatus setupDevice(Device *device); + virtual void setupDevice(DeviceSetupInfo *info); virtual void postSetupDevice(Device *device); virtual void deviceRemoved(Device *device); - virtual Device::DeviceError displayPin(const PairingTransactionId &pairingTransactionId, const DeviceDescriptor &deviceDescriptor); - virtual Device::DeviceSetupStatus confirmPairing(const PairingTransactionId &pairingTransactionId, const DeviceClassId &deviceClassId, const ParamList ¶ms, const QString &secret); + virtual void startPairing(DevicePairingInfo *info); + virtual void confirmPairing(DevicePairingInfo *info, const QString &username, const QString &secret); - virtual Device::DeviceError executeAction(Device *device, const Action &action); + virtual void executeAction(DeviceActionInfo *info); - virtual Device::BrowseResult browseDevice(Device *device, Device::BrowseResult result, const QString &itemId, const QLocale &locale); - virtual Device::BrowserItemResult browserItem(Device *device, Device::BrowserItemResult result, const QString &itemId, const QLocale &locale); - virtual Device::DeviceError executeBrowserItem(Device *device, const BrowserAction &browserAction); - virtual Device::DeviceError executeBrowserItemAction(Device *device, const BrowserItemAction &browserItemAction); + virtual void browseDevice(BrowseResult *result); + virtual void browserItem(BrowserItemResult *result); + virtual void executeBrowserItem(BrowserActionInfo *info); + virtual void executeBrowserItemAction(BrowserItemActionInfo *info); // Configuration ParamTypes configurationDescription() const; @@ -96,17 +104,9 @@ public: signals: void emitEvent(const Event &event); - void devicesDiscovered(const DeviceClassId &deviceClassId, const QList &deviceDescriptors); - void deviceSetupFinished(Device *device, Device::DeviceSetupStatus status); - void pairingFinished(const PairingTransactionId &pairingTransactionId, Device::DeviceSetupStatus status); - void actionExecutionFinished(const ActionId &id, Device::DeviceError status); void configValueChanged(const ParamTypeId ¶mTypeId, const QVariant &value); - void autoDevicesAppeared(const DeviceClassId &deviceClassId, const QList &deviceDescriptors); + void autoDevicesAppeared(const DeviceDescriptors &deviceDescriptors); void autoDeviceDisappeared(const DeviceId &deviceId); - void browseRequestFinished(const Device::BrowseResult &result); - void browserItemRequestFinished(const Device::BrowserItemResult &result); - void browserItemExecutionFinished(const ActionId &actionid, Device::DeviceError status); - void browserItemActionExecutionFinished(const ActionId &actionid, Device::DeviceError status); protected: Devices myDevices() const; diff --git a/libnymea/devices/devicesetupinfo.cpp b/libnymea/devices/devicesetupinfo.cpp new file mode 100644 index 00000000..08628919 --- /dev/null +++ b/libnymea/devices/devicesetupinfo.cpp @@ -0,0 +1,71 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2019 Michael Zanetti * + * * + * 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 "devicesetupinfo.h" + +#include "deviceplugin.h" +#include "devicemanager.h" + +DeviceSetupInfo::DeviceSetupInfo(Device *device, DeviceManager *deviceManager): + QObject(deviceManager), + m_device(device), + m_deviecManager(deviceManager) +{ + connect(this, &DeviceSetupInfo::finished, this, &DeviceSetupInfo::deleteLater, Qt::QueuedConnection); +} + +Device *DeviceSetupInfo::device() const +{ + return m_device; +} + +bool DeviceSetupInfo::isFinished() const +{ + return m_finished; +} + +Device::DeviceError DeviceSetupInfo::status() const +{ + return m_status; +} + +QString DeviceSetupInfo::displayMessage() const +{ + return m_displayMessage; +} + +QString DeviceSetupInfo::translatedDisplayMessage(const QLocale &locale) +{ + if (!m_deviecManager || !m_device) { + return m_displayMessage; + } + + return m_deviecManager->translate(m_device->pluginId(), m_displayMessage.toUtf8(), locale); +} + +void DeviceSetupInfo::finish(Device::DeviceError status, const QString &displayMessage) +{ + m_finished = true; + m_status = status; + m_displayMessage = displayMessage; + staticMetaObject.invokeMethod(this, "finished", Qt::QueuedConnection); +} diff --git a/libnymea/devices/devicesetupinfo.h b/libnymea/devices/devicesetupinfo.h new file mode 100644 index 00000000..dead8017 --- /dev/null +++ b/libnymea/devices/devicesetupinfo.h @@ -0,0 +1,62 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2019 Michael Zanetti * + * * + * 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 DEVICESETUPINFO_H +#define DEVICESETUPINFO_H + +#include "device.h" + +#include + +class DeviceManager; + +class LIBNYMEA_EXPORT DeviceSetupInfo : public QObject +{ + Q_OBJECT +public: + explicit DeviceSetupInfo(Device *device, DeviceManager *deviceManager); + + Device *device() const; + + bool isFinished() const; + + Device::DeviceError status() const; + QString displayMessage() const; + QString translatedDisplayMessage(const QLocale &locale); + +public slots: + void finish(Device::DeviceError status, const QString &displayMessage = QString()); + +signals: + void finished(); + +private: + Device *m_device = nullptr; + + bool m_finished = false; + Device::DeviceError m_status = Device::DeviceErrorNoError; + QString m_displayMessage; + + DeviceManager *m_deviecManager = nullptr; +}; + +#endif // DEVICESETUPINFO_H diff --git a/libnymea/devices/pluginmetadata.cpp b/libnymea/devices/pluginmetadata.cpp index 44cadafe..b3733006 100644 --- a/libnymea/devices/pluginmetadata.cpp +++ b/libnymea/devices/pluginmetadata.cpp @@ -162,7 +162,7 @@ void PluginMetadata::parse(const QJsonObject &jsonObject) QJsonObject deviceClassObject = deviceClassJson.toObject(); /*! Returns a list of all valid JSON properties a DeviceClass JSON definition can have. */ QStringList deviceClassProperties = QStringList() << "id" << "name" << "displayName" << "createMethods" << "setupMethod" - << "interfaces" << "browsable" << "pairingInfo" << "discoveryParamTypes" << "discoveryParamTypes" + << "interfaces" << "browsable" << "discoveryParamTypes" << "discoveryParamTypes" << "paramTypes" << "settingsTypes" << "stateTypes" << "actionTypes" << "eventTypes" << "browserItemActionTypes"; QStringList mandatoryDeviceClassProperties = QStringList() << "id" << "name" << "displayName"; @@ -251,6 +251,10 @@ void PluginMetadata::parse(const QJsonObject &jsonObject) setupMethod = DeviceClass::SetupMethodEnterPin; } else if (setupMethodString.toLower() == "justadd") { setupMethod = DeviceClass::SetupMethodJustAdd; + } else if (setupMethodString.toLower() == "userandpassword") { + setupMethod = DeviceClass::SetupMethodUserAndPassword; + } else if (setupMethodString.toLower() == "oauth") { + setupMethod = DeviceClass::SetupMethodOAuth; } else { qCWarning(dcPluginMetadata()) << "Unknown setupMethod" << setupMethod << "in deviceClass" << deviceClass.name() << "."; hasError = true; @@ -258,9 +262,6 @@ void PluginMetadata::parse(const QJsonObject &jsonObject) } deviceClass.setSetupMethod(setupMethod); - // Read pairing info - deviceClass.setPairingInfo(deviceClassObject.value("pairingInfo").toString()); - ActionTypes actionTypes; StateTypes stateTypes; EventTypes eventTypes; diff --git a/libnymea/libnymea.pro b/libnymea/libnymea.pro index 50fc6130..4e849b60 100644 --- a/libnymea/libnymea.pro +++ b/libnymea/libnymea.pro @@ -10,9 +10,20 @@ DEFINES += LIBNYMEA_LIBRARY QMAKE_LFLAGS += -fPIC HEADERS += \ + devices/browseractioninfo.h \ + devices/browseritemactioninfo.h \ + devices/browseritemresult.h \ devices/devicemanager.h \ devices/deviceutils.h \ devices/pluginmetadata.h \ + devices/device.h \ + devices/deviceplugin.h \ + devices/devicedescriptor.h \ + devices/devicediscoveryinfo.h \ + devices/devicesetupinfo.h \ + devices/devicepairinginfo.h \ + devices/deviceactioninfo.h \ + devices/browseresult.h \ libnymea.h \ platform/package.h \ platform/repository.h \ @@ -23,10 +34,6 @@ HEADERS += \ typeutils.h \ loggingcategories.h \ nymeasettings.h \ - devices/device.h \ - devices/deviceplugin.h \ - devices/devicedescriptor.h \ - devices/devicepairinginfo.h \ hardware/gpio.h \ hardware/gpiomonitor.h \ hardware/pwm.h \ @@ -77,17 +84,24 @@ HEADERS += \ platform/platformzeroconfcontroller.h \ SOURCES += \ + devices/browseractioninfo.cpp \ + devices/browseritemactioninfo.cpp \ + devices/browseritemresult.cpp \ devices/devicemanager.cpp \ devices/deviceutils.cpp \ devices/pluginmetadata.cpp \ + devices/device.cpp \ + devices/deviceplugin.cpp \ + devices/devicedescriptor.cpp \ + devices/devicediscoveryinfo.cpp \ + devices/devicesetupinfo.cpp \ + devices/devicepairinginfo.cpp \ + devices/deviceactioninfo.cpp \ + devices/browseresult.cpp \ loggingcategories.cpp \ nymeasettings.cpp \ platform/package.cpp \ platform/repository.cpp \ - devices/device.cpp \ - devices/deviceplugin.cpp \ - devices/devicedescriptor.cpp \ - devices/devicepairinginfo.cpp \ hardware/gpio.cpp \ hardware/gpiomonitor.cpp \ hardware/pwm.cpp \ diff --git a/libnymea/types/deviceclass.h b/libnymea/types/deviceclass.h index d01846d6..abf1644e 100644 --- a/libnymea/types/deviceclass.h +++ b/libnymea/types/deviceclass.h @@ -52,7 +52,9 @@ public: SetupMethodJustAdd, SetupMethodDisplayPin, SetupMethodEnterPin, - SetupMethodPushButton + SetupMethodPushButton, + SetupMethodUserAndPassword, + SetupMethodOAuth }; Q_ENUM(SetupMethod) diff --git a/plugins/mock/devicepluginmock.cpp b/plugins/mock/devicepluginmock.cpp index a96482f9..a82d0ff2 100644 --- a/plugins/mock/devicepluginmock.cpp +++ b/plugins/mock/devicepluginmock.cpp @@ -42,12 +42,26 @@ #include "httpdaemon.h" #include "devices/device.h" +#include "devices/devicediscoveryinfo.h" +#include "devices/devicepairinginfo.h" +#include "devices/devicesetupinfo.h" +#include "devices/deviceactioninfo.h" +#include "devices/browseresult.h" +#include "devices/browseritemresult.h" +#include "devices/browseractioninfo.h" +#include "devices/browseritemactioninfo.h" #include "plugininfo.h" +#include "network/networkaccessmanager.h" + #include #include #include #include +#include +#include +#include +#include DevicePluginMock::DevicePluginMock() { @@ -58,104 +72,164 @@ DevicePluginMock::~DevicePluginMock() { } -Device::DeviceError DevicePluginMock::discoverDevices(const DeviceClassId &deviceClassId, const ParamList ¶ms) +void DevicePluginMock::discoverDevices(DeviceDiscoveryInfo *info) { - if (deviceClassId == mockDeviceClassId) { - qCDebug(dcMockDevice) << "starting mock discovery:" << params; - m_discoveredDeviceCount = params.paramValue(mockDiscoveryResultCountParamTypeId).toInt(); - QTimer::singleShot(1000, this, SLOT(emitDevicesDiscovered())); - return Device::DeviceErrorAsync; - } else if (deviceClassId == mockPushButtonDeviceClassId) { - qCDebug(dcMockDevice) << "starting mock push button discovery:" << params; - m_discoveredDeviceCount = params.paramValue(mockPushButtonDiscoveryResultCountParamTypeId).toInt(); - QTimer::singleShot(1000, this, SLOT(emitPushButtonDevicesDiscovered())); - return Device::DeviceErrorAsync; - } else if (deviceClassId == mockDisplayPinDeviceClassId) { - qCDebug(dcMockDevice) << "starting mock display pin discovery:" << params; - m_discoveredDeviceCount = params.paramValue(mockDisplayPinDiscoveryResultCountParamTypeId).toInt(); - QTimer::singleShot(1000, this, SLOT(emitDisplayPinDevicesDiscovered())); - return Device::DeviceErrorAsync; - } else if (deviceClassId == mockParentDeviceClassId) { - qCDebug(dcMockDevice()) << "Starting discovery for mock device parent"; - QTimer::singleShot(1000, this, [this](){ - DeviceDescriptor descriptor(mockParentDeviceClassId, "Mock Parent (Discovered)"); - emit devicesDiscovered(mockParentDeviceClassId, {descriptor}); - + if (info->deviceClassId() == mockDeviceClassId) { + qCDebug(dcMockDevice) << "starting mock discovery:" << info->params(); + m_discoveredDeviceCount = info->params().paramValue(mockDiscoveryResultCountParamTypeId).toInt(); + QTimer::singleShot(1000, info, [this, info](){ + generateDiscoveredDevices(info); }); - return Device::DeviceErrorAsync; - } else if (deviceClassId == mockChildDeviceClassId) { - QTimer::singleShot(1000, this, [this](){ - QList descriptors; + return; + } + + if (info->deviceClassId() == mockPushButtonDeviceClassId) { + qCDebug(dcMockDevice) << "starting mock push button discovery:" << info->params(); + m_discoveredDeviceCount = info->params().paramValue(mockPushButtonDiscoveryResultCountParamTypeId).toInt(); + QTimer::singleShot(1000, info, [this, info]() { + generateDiscoveredPushButtonDevices(info); + }); + return; + } + + if (info->deviceClassId() == mockDisplayPinDeviceClassId) { + qCDebug(dcMockDevice) << "starting mock display pin discovery:" << info->params(); + m_discoveredDeviceCount = info->params().paramValue(mockDisplayPinDiscoveryResultCountParamTypeId).toInt(); + QTimer::singleShot(1000, info, [this, info]() { + generateDiscoveredDisplayPinDevices(info); + }); + return; + } + + if (info->deviceClassId() == mockParentDeviceClassId) { + qCDebug(dcMockDevice()) << "Starting discovery for mock device parent"; + QTimer::singleShot(1000, info, [info](){ + DeviceDescriptor descriptor(mockParentDeviceClassId, "Mock Parent (Discovered)"); + info->addDeviceDescriptor(descriptor); + info->finish(Device::DeviceErrorNoError); + }); + return; + } + + if (info->deviceClassId() == mockChildDeviceClassId) { + QTimer::singleShot(1000, info, [this, info](){ if (!myDevices().filterByDeviceClassId(mockParentDeviceClassId).isEmpty()) { Device *parent = myDevices().filterByDeviceClassId(mockParentDeviceClassId).first(); DeviceDescriptor descriptor(mockChildDeviceClassId, "Mock Child (Discovered)", QString(), parent->id()); - descriptors.append(descriptor); + info->addDeviceDescriptor(descriptor); } - emit devicesDiscovered(mockChildDeviceClassId, descriptors); + info->finish(Device::DeviceErrorNoError); }); - return Device::DeviceErrorAsync; + return; } - qCWarning(dcMockDevice()) << "Cannot discover for deviceClassId" << deviceClassId; - return Device::DeviceErrorDeviceClassNotFound; + qCWarning(dcMockDevice()) << "Cannot discover for deviceClassId" << info->deviceClassId(); + info->finish(Device::DeviceErrorDeviceNotFound); } -Device::DeviceSetupStatus DevicePluginMock::setupDevice(Device *device) +void DevicePluginMock::setupDevice(DeviceSetupInfo *info) { - if (device->deviceClassId() == mockDeviceClassId || device->deviceClassId() == mockDeviceAutoDeviceClassId) { + if (info->device()->deviceClassId() == mockDeviceClassId || info->device()->deviceClassId() == mockDeviceAutoDeviceClassId) { bool async = false; bool broken = false; - if (device->deviceClassId() == mockDeviceClassId) { - async = device->paramValue(mockDeviceAsyncParamTypeId).toBool(); - broken = device->paramValue(mockDeviceBrokenParamTypeId).toBool(); + if (info->device()->deviceClassId() == mockDeviceClassId) { + async = info->device()->paramValue(mockDeviceAsyncParamTypeId).toBool(); + broken = info->device()->paramValue(mockDeviceBrokenParamTypeId).toBool(); } else { - async = device->paramValue(mockDeviceAutoDeviceAsyncParamTypeId).toBool(); - broken = device->paramValue(mockDeviceAutoDeviceBrokenParamTypeId).toBool(); + async = info->device()->paramValue(mockDeviceAutoDeviceAsyncParamTypeId).toBool(); + broken = info->device()->paramValue(mockDeviceAutoDeviceBrokenParamTypeId).toBool(); } - if (broken) { + if (!async && broken) { qCWarning(dcMockDevice) << "This device is intentionally broken."; - return Device::DeviceSetupStatusFailure; + info->finish(Device::DeviceErrorSetupFailed, QT_TR_NOOP("This mock device is intentionally broken.")); + return; } - HttpDaemon *daemon = new HttpDaemon(device, this); - m_daemons.insert(device, daemon); + if (!broken) { + HttpDaemon *daemon = new HttpDaemon(info->device(), this); + m_daemons.insert(info->device(), daemon); - if (!daemon->isListening()) { - qCWarning(dcMockDevice) << "HTTP port opening failed:" << device->paramValue(mockDeviceHttpportParamTypeId).toInt(); - return Device::DeviceSetupStatusFailure; + if (!daemon->isListening()) { + qCWarning(dcMockDevice) << "HTTP port opening failed:" << info->device()->paramValue(mockDeviceHttpportParamTypeId).toInt(); + info->finish(Device::DeviceErrorHardwareNotAvailable, QT_TR_NOOP("Failed to open HTTP port. Port in use?")); + return; + } + + connect(daemon, &HttpDaemon::triggerEvent, this, &DevicePluginMock::triggerEvent); + connect(daemon, &HttpDaemon::setState, this, &DevicePluginMock::setState); + // Keep this queued or it might happen that the HttpDaemon is deleted before it is able to reply to the caller + connect(daemon, &HttpDaemon::disappear, this, &DevicePluginMock::onDisappear, Qt::QueuedConnection); + connect(daemon, &HttpDaemon::reconfigureAutodevice, this, &DevicePluginMock::onReconfigureAutoDevice, Qt::QueuedConnection); } - connect(daemon, &HttpDaemon::triggerEvent, this, &DevicePluginMock::triggerEvent); - connect(daemon, &HttpDaemon::setState, this, &DevicePluginMock::setState); - // Keep this queued or it might happen that the HttpDaemon is deleted before it is able to reply to the caller - connect(daemon, &HttpDaemon::disappear, this, &DevicePluginMock::onDisappear, Qt::QueuedConnection); - connect(daemon, &HttpDaemon::reconfigureAutodevice, this, &DevicePluginMock::onReconfigureAutoDevice, Qt::QueuedConnection); if (async) { - m_asyncSetupDevices.append(device); - QTimer::singleShot(1000, this, SLOT(emitDeviceSetupFinished())); - return Device::DeviceSetupStatusAsync; + Device *device = info->device(); + QTimer::singleShot(1000, device, [info](){ + qCDebug(dcMockDevice) << "Finishing device setup for mock device" << info->device()->name(); + if (info->device()->paramValue(mockDeviceBrokenParamTypeId).toBool()) { + info->finish(Device::DeviceErrorSetupFailed, QT_TR_NOOP("This mock device is intentionally broken.")); + } else { + info->finish(Device::DeviceErrorNoError); + } + }); + return; } - return Device::DeviceSetupStatusSuccess; - } else if (device->deviceClassId() == mockPushButtonDeviceClassId) { - qCDebug(dcMockDevice) << "Setup PushButton mock device" << device->params(); - return Device::DeviceSetupStatusSuccess; - } else if (device->deviceClassId() == mockDisplayPinDeviceClassId) { - qCDebug(dcMockDevice) << "Setup DisplayPin mock device" << device->params(); - return Device::DeviceSetupStatusSuccess; - } else if (device->deviceClassId() == mockParentDeviceClassId) { - qCDebug(dcMockDevice) << "Setup Parent mock device" << device->params(); - return Device::DeviceSetupStatusSuccess; - } else if (device->deviceClassId() == mockChildDeviceClassId) { - qCDebug(dcMockDevice) << "Setup Child mock device" << device->params(); - return Device::DeviceSetupStatusSuccess; - } else if (device->deviceClassId() == mockInputTypeDeviceClassId) { - qCDebug(dcMockDevice) << "Setup InputType mock device" << device->params(); - return Device::DeviceSetupStatusSuccess; + info->finish(Device::DeviceErrorNoError); + return; } - return Device::DeviceSetupStatusFailure; + if (info->device()->deviceClassId() == mockPushButtonDeviceClassId) { + qCDebug(dcMockDevice) << "Setup PushButton mock device" << info->device()->params(); + info->finish(Device::DeviceErrorNoError); + return; + } + + if (info->device()->deviceClassId() == mockDisplayPinDeviceClassId) { + qCDebug(dcMockDevice) << "Setup DisplayPin mock device" << info->device()->params(); + info->finish(Device::DeviceErrorNoError); + return; + } + + if (info->device()->deviceClassId() == mockParentDeviceClassId) { + qCDebug(dcMockDevice) << "Setup Parent mock device" << info->device()->params(); + info->finish(Device::DeviceErrorNoError); + return; + } + + if (info->device()->deviceClassId() == mockChildDeviceClassId) { + qCDebug(dcMockDevice) << "Setup Child mock device" << info->device()->params(); + info->finish(Device::DeviceErrorNoError); + return; + } + + if (info->device()->deviceClassId() == mockInputTypeDeviceClassId) { + qCDebug(dcMockDevice) << "Setup InputType mock device" << info->device()->params(); + info->finish(Device::DeviceErrorNoError); + return; + } + + if (info->device()->deviceClassId() == mockUserAndPassDeviceClassId) { + qCDebug(dcMockDevice()) << "Setup User and password mock device"; + info->finish(Device::DeviceErrorNoError); + return; + } + + if (info->device()->deviceClassId() == mockOAuthGoogleDeviceClassId) { + qCDebug(dcMockDevice()) << "Google OAuth setup complete"; + info->finish(Device::DeviceErrorNoError); + return; + } + + if (info->device()->deviceClassId() == mockOAuthSonosDeviceClassId) { + qCDebug(dcMockDevice()) << "Sonos OAuth setup complete"; + info->finish(Device::DeviceErrorNoError); + return; + } + + qCWarning(dcMockDevice()) << "Unhandled device class" << info->device()->deviceClass(); + info->finish(Device::DeviceErrorDeviceClassNotFound); } void DevicePluginMock::postSetupDevice(Device *device) @@ -167,7 +241,9 @@ void DevicePluginMock::postSetupDevice(Device *device) return; } } - onChildDeviceDiscovered(device->id()); + + DeviceDescriptor mockDescriptor(mockChildDeviceClassId, "Child Mock Device (Auto created)", "Child Mock Device (Auto created)", device->id()); + emit autoDevicesAppeared(DeviceDescriptors() << mockDescriptor); } } @@ -196,295 +272,491 @@ void DevicePluginMock::startMonitoringAutoDevices() QList deviceDescriptorList; deviceDescriptorList.append(mockDescriptor); - emit autoDevicesAppeared(mockDeviceAutoDeviceClassId, deviceDescriptorList); + emit autoDevicesAppeared(deviceDescriptorList); } -Device::DeviceSetupStatus DevicePluginMock::confirmPairing(const PairingTransactionId &pairingTransactionId, const DeviceClassId &deviceClassId, const ParamList ¶ms, const QString &secret) +void DevicePluginMock::startPairing(DevicePairingInfo *info) { - Q_UNUSED(params) - Q_UNUSED(secret) + if (info->deviceClassId() == mockPushButtonDeviceClassId) { + qCDebug(dcMockDevice) << QString(tr("Push button. Pressing the button in 3 seconds.")); + info->finish(Device::DeviceErrorNoError, QT_TR_NOOP("Wait 3 second before you continue, the push button will be pressed automatically.")); + return; + } + if (info->deviceClassId() == mockDisplayPinDeviceClassId) { + qCDebug(dcMockDevice) << QString(tr("Display pin!! The pin is 243681")); + info->finish(Device::DeviceErrorNoError, QT_TR_NOOP("Please enter the secret which normaly will be displayed on the device. For the mockdevice the pin is 243681.")); + return; + } + + if (info->deviceClassId() == mockUserAndPassDeviceClassId) { + qCDebug(dcMockDevice) << QString(tr("User and password. Login is \"user\" and \"password\".")); + info->finish(Device::DeviceErrorNoError, QT_TR_NOOP("Please enter login credentials for the mock device (\"user\" and \"password\").")); + return; + } + + if (info->deviceClassId() == mockOAuthSonosDeviceClassId) { + QString clientId = "b15cbf8c-a39c-47aa-bd93-635a96e9696c"; + QString clientSecret = "c086ba71-e562-430b-a52f-867c6482fd11"; + + QUrl url("https://api.sonos.com/login/v3/oauth"); + QUrlQuery queryParams; + queryParams.addQueryItem("client_id", clientId); + queryParams.addQueryItem("redirect_uri", "https://127.0.0.1:8888"); + queryParams.addQueryItem("response_type", "code"); + queryParams.addQueryItem("scope", "playback-control-all"); + queryParams.addQueryItem("state", "ya-ya"); + url.setQuery(queryParams); + + qCDebug(dcMockDevice()) << "Sonos url:" << url; + + info->setOAuthUrl(url); + info->finish(Device::DeviceErrorNoError); + return; + } + + if (info->deviceClassId() == mockOAuthGoogleDeviceClassId) { + QString clientId= "937667874529-pr6s5ciu6sfnnqmt2sppvb6rokbkjjta.apps.googleusercontent.com"; + QString clientSecret = "1ByBRmNqaK08VC54eEVcnGf1"; + + QUrl url("https://accounts.google.com/o/oauth2/v2/auth"); + QUrlQuery queryParams; + queryParams.addQueryItem("client_id", clientId); + queryParams.addQueryItem("redirect_uri", "https://127.0.0.1:8888"); + queryParams.addQueryItem("response_type", "code"); + queryParams.addQueryItem("scope", "profile email"); + queryParams.addQueryItem("state", "ya-ya"); + url.setQuery(queryParams); + + info->setOAuthUrl(url); + info->finish(Device::DeviceErrorNoError); + return; + } + + info->finish(Device::DeviceErrorCreationMethodNotSupported); +} + +void DevicePluginMock::confirmPairing(DevicePairingInfo *info, const QString &username, const QString &secret) +{ qCDebug(dcMockDevice) << "Confirm pairing"; - if (deviceClassId == mockPushButtonDeviceClassId) { + if (info->deviceClassId() == mockPushButtonDeviceClassId) { if (!m_pushbuttonPressed) { qCDebug(dcMockDevice) << "PushButton not pressed yet!"; - return Device::DeviceSetupStatusFailure; + info->finish(Device::DeviceErrorAuthenticationFailure, QT_TR_NOOP("The push button has not been pressed.")); + return; } - m_pairingId = pairingTransactionId; - QTimer::singleShot(1000, this, SLOT(onPushButtonPairingFinished())); - return Device::DeviceSetupStatusAsync; - } else if (deviceClassId == mockDisplayPinDeviceClassId) { + QTimer::singleShot(1000, this, [info](){ + info->finish(Device::DeviceErrorNoError); + }); + return; + } + + if (info->deviceClassId() == mockDisplayPinDeviceClassId) { if (secret != "243681") { qCWarning(dcMockDevice) << "Invalid pin:" << secret; - return Device::DeviceSetupStatusFailure; + info->finish(Device::DeviceErrorAuthenticationFailure, QT_TR_NOOP("Invalid PIN!")); + return; } - m_pairingId = pairingTransactionId; - QTimer::singleShot(500, this, SLOT(onDisplayPinPairingFinished())); - return Device::DeviceSetupStatusAsync; + QTimer::singleShot(500, this, [info](){ + qCDebug(dcMockDevice()) << "Pairing finished."; + info->finish(Device::DeviceErrorNoError); + }); + return; } + if (info->deviceClassId() == mockUserAndPassDeviceClassId) { + qCDebug(dcMockDevice()) << "Credentials received:" << username << secret; + if (username == "user" && secret == "password") { + info->finish(Device::DeviceErrorNoError); + return; + } else { + info->finish(Device::DeviceErrorAuthenticationFailure, QT_TR_NOOP("Wrong username or password")); + return; + } + } + + + if (info->deviceClassId() == mockOAuthSonosDeviceClassId) { + qCDebug(dcMockDevice()) << "Secret is" << secret; + QUrl url(secret); + QUrlQuery query(url); + qCDebug(dcMockDevice()) << "Acess code is:" << query.queryItemValue("code"); + + QString accessCode = query.queryItemValue("code"); + + // Obtaining access token + url = QUrl("https://api.sonos.com/login/v3/oauth/access"); + query.clear(); + query.addQueryItem("grant_type", "authorization_code"); + query.addQueryItem("code", accessCode); + query.addQueryItem("redirect_uri", "https%3A%2F%2F127.0.0.1%3A8888"); + url.setQuery(query); + + QNetworkRequest request(url); + request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded;charset=utf-8"); + + QByteArray clientId = "b15cbf8c-a39c-47aa-bd93-635a96e9696c"; + QByteArray clientSecret = "c086ba71-e562-430b-a52f-867c6482fd11"; + + QByteArray auth = QByteArray(clientId + ':' + clientSecret).toBase64(QByteArray::Base64Encoding | QByteArray::KeepTrailingEquals); + request.setRawHeader("Authorization", QString("Basic %1").arg(QString(auth)).toUtf8()); + + QNetworkReply *reply = hardwareManager()->networkManager()->post(request, QByteArray()); + connect(reply, &QNetworkReply::finished, this, [this, reply, info](){ + reply->deleteLater(); + + QJsonDocument jsonDoc = QJsonDocument::fromJson(reply->readAll()); + qCDebug(dcMockDevice()) << "Sonos accessToken reply:" << this << reply->error() << reply->errorString() << jsonDoc.toJson(); + qCDebug(dcMockDevice()) << "Access token:" << jsonDoc.toVariant().toMap().value("access_token").toString(); + qCDebug(dcMockDevice()) << "expires at" << QDateTime::currentDateTime().addSecs(jsonDoc.toVariant().toMap().value("expires_in").toInt()).toString(); + qCDebug(dcMockDevice()) << "Refresh token:" << jsonDoc.toVariant().toMap().value("refresh_token").toString(); + info->finish(Device::DeviceErrorNoError); + }); + + return; + } + + + if (info->deviceClassId() == mockOAuthGoogleDeviceClassId) { + qCDebug(dcMockDevice()) << "Secret is" << secret; + QUrl url(secret); + QUrlQuery query(url); + qCDebug(dcMockDevice()) << "Acess code is:" << query.queryItemValue("code"); + + QString accessCode = query.queryItemValue("code"); + + // Obtaining access token + QString clientId = "937667874529-pr6s5ciu6sfnnqmt2sppvb6rokbkjjta.apps.googleusercontent.com"; + QString clientSecret = "1ByBRmNqaK08VC54eEVcnGf1"; + + url = QUrl("https://www.googleapis.com/oauth2/v4/token"); + query.clear(); + query.addQueryItem("code", accessCode); + query.addQueryItem("client_id", clientId); + query.addQueryItem("client_secret", clientSecret); + query.addQueryItem("grant_type", "authorization_code"); + query.addQueryItem("redirect_uri", "https%3A%2F%2F127.0.0.1%3A8888"); +// query.addQueryItem("code_verifier", codeVerifier); + url.setQuery(query); + + QNetworkRequest request(url); + + QNetworkReply *reply = hardwareManager()->networkManager()->post(request, QByteArray()); + connect(reply, &QNetworkReply::finished, this, [this, reply, info](){ + reply->deleteLater(); + + QJsonDocument jsonDoc = QJsonDocument::fromJson(reply->readAll()); + qCDebug(dcMockDevice()) << "Sonos accessToken reply:" << this << reply->error() << reply->errorString() << jsonDoc.toJson(); + qCDebug(dcMockDevice()) << "Access token:" << jsonDoc.toVariant().toMap().value("access_token").toString(); + qCDebug(dcMockDevice()) << "expires at" << QDateTime::currentDateTime().addSecs(jsonDoc.toVariant().toMap().value("expires_in").toInt()).toString(); + qCDebug(dcMockDevice()) << "Refresh token:" << jsonDoc.toVariant().toMap().value("refresh_token").toString(); + qCDebug(dcMockDevice()) << "ID token:" << jsonDoc.toVariant().toMap().value("id_token").toString(); + info->finish(Device::DeviceErrorNoError); + }); + return; + } + + qCWarning(dcMockDevice) << "Invalid deviceclassId -> no pairing possible with this device"; - return Device::DeviceSetupStatusFailure; + info->finish(Device::DeviceErrorDeviceClassNotFound); } -Device::DeviceError DevicePluginMock::displayPin(const PairingTransactionId &pairingTransactionId, const DeviceDescriptor &deviceDescriptor) +void DevicePluginMock::browseDevice(BrowseResult *result) { - Q_UNUSED(pairingTransactionId) - Q_UNUSED(deviceDescriptor) + qCDebug(dcMockDevice()) << "Browse device called" << result->device(); + if (result->device()->deviceClassId() == mockDeviceClassId) { + if (result->device()->paramValue(mockDeviceAsyncParamTypeId).toBool()) { - qCDebug(dcMockDevice) << QString(tr("Display pin!! The pin is 243681")); - - return Device::DeviceErrorNoError; -} - -Device::BrowseResult DevicePluginMock::browseDevice(Device *device, Device::BrowseResult result, const QString &itemId, const QLocale &locale) -{ - Q_UNUSED(locale) - qCDebug(dcMockDevice()) << "Browse device called" << device; - if (device->deviceClassId() == mockDeviceClassId) { - if (device->paramValue(mockDeviceAsyncParamTypeId).toBool()) { - result.status = Device::DeviceErrorAsync; - QTimer::singleShot(1000, device, [this, device, result, itemId]() mutable { - if (device->paramValue(mockDeviceBrokenParamTypeId).toBool()) { - result.status = Device::DeviceErrorHardwareFailure; - } else { - VirtualFsNode *node = m_virtualFs->findNode(itemId); - if (!node) { - result.status = Device::DeviceErrorItemNotFound; - emit browseRequestFinished(result); - return; - } - foreach (VirtualFsNode *child, node->childs) { - result.items.append(child->item); - } - result.status = Device::DeviceErrorNoError; + QTimer::singleShot(1000, result, [this, result]() { + if (result->device()->paramValue(mockDeviceBrokenParamTypeId).toBool()) { + result->finish(Device::DeviceErrorHardwareFailure); + return; + } + + VirtualFsNode *node = m_virtualFs->findNode(result->itemId()); + if (!node) { + result->finish(Device::DeviceErrorItemNotFound); + return; + } + + foreach (VirtualFsNode *child, node->childs) { + result->addItem(child->item); + } + + result->finish(Device::DeviceErrorNoError); + }); + + return; + } + + if (result->device()->paramValue(mockDeviceBrokenParamTypeId).toBool()) { + result->finish(Device::DeviceErrorHardwareFailure); + return; + } + + VirtualFsNode *node = m_virtualFs->findNode(result->itemId()); + if (!node) { + result->finish(Device::DeviceErrorItemNotFound); + return; + } + + foreach (VirtualFsNode *child, node->childs) { + result->addItem(child->item); + } + result->finish(Device::DeviceErrorNoError); + return; + } + result->finish(Device::DeviceErrorInvalidParameter); +} + +void DevicePluginMock::browserItem(BrowserItemResult *result) +{ + VirtualFsNode *node = m_virtualFs->findNode(result->itemId()); + if (!node) { + result->finish(Device::DeviceErrorItemNotFound); + return; + } + result->finish(node->item); +} + +void DevicePluginMock::executeAction(DeviceActionInfo *info) +{ + if (info->device()->deviceClassId() == mockDeviceClassId) { + if (info->action().actionTypeId() == mockAsyncActionTypeId || info->action().actionTypeId() == mockAsyncFailingActionTypeId) { + QTimer::singleShot(1000, info->device(), [this, info](){ + if (info->action().actionTypeId() == mockAsyncActionTypeId) { + m_daemons.value(info->device())->actionExecuted(info->action().actionTypeId()); + info->finish(Device::DeviceErrorNoError); + } else if (info->action().actionTypeId() == mockAsyncFailingActionTypeId) { + info->finish(Device::DeviceErrorSetupFailed, QT_TR_NOOP("This mock action is intentionally broken.")); + } + + }); + return; + } + + if (info->action().actionTypeId() == mockFailingActionTypeId) { + info->finish(Device::DeviceErrorSetupFailed, QT_TR_NOOP("This mock action is intentionally broken.")); + return; + } + + if (info->action().actionTypeId() == mockPowerActionTypeId) { + qCDebug(dcMockDevice()) << "Setting power to" << info->action().param(mockPowerActionPowerParamTypeId).value().toBool(); + info->device()->setStateValue(mockPowerStateTypeId, info->action().param(mockPowerActionPowerParamTypeId).value().toBool()); + } + m_daemons.value(info->device())->actionExecuted(info->action().actionTypeId()); + info->finish(Device::DeviceErrorNoError); + return; + } + + if (info->device()->deviceClassId() == mockDeviceAutoDeviceClassId) { + if (info->action().actionTypeId() == mockDeviceAutoMockActionAsyncActionTypeId || info->action().actionTypeId() == mockDeviceAutoMockActionAsyncBrokenActionTypeId) { + QTimer::singleShot(1000, info->device(), [info](){ + if (info->action().actionTypeId() == mockDeviceAutoMockActionAsyncBrokenActionTypeId) { + info->finish(Device::DeviceErrorSetupFailed, QT_TR_NOOP("This mock action is intentionally broken.")); + } else { + info->finish(Device::DeviceErrorNoError); } - emit browseRequestFinished(result); }); } - else if (device->paramValue(mockDeviceBrokenParamTypeId).toBool()) { - result.status = Device::DeviceErrorHardwareFailure; - } else { - VirtualFsNode *node = m_virtualFs->findNode(itemId); - if (!node) { - result.status = Device::DeviceErrorItemNotFound; - return result; - } - foreach (VirtualFsNode *child, node->childs) { - result.items.append(child->item); - } - result.status = Device::DeviceErrorNoError; - } - } - return result; -} -Device::BrowserItemResult DevicePluginMock::browserItem(Device *device, Device::BrowserItemResult result, const QString &itemId, const QLocale &locale) -{ - Q_UNUSED(device) - Q_UNUSED(locale) - VirtualFsNode *node = m_virtualFs->findNode(itemId); - if (!node) { - result.status = Device::DeviceErrorItemNotFound; - return result; - } - result.item = node->item; - result.status = Device::DeviceErrorNoError; - return result; -} - -Device::DeviceError DevicePluginMock::executeAction(Device *device, const Action &action) -{ - if (!myDevices().contains(device)) - return Device::DeviceErrorDeviceNotFound; - - if (device->deviceClassId() == mockDeviceClassId) { - if (action.actionTypeId() == mockAsyncActionTypeId || action.actionTypeId() == mockAsyncFailingActionTypeId) { - m_asyncActions.append(qMakePair(action, device)); - QTimer::singleShot(1000, this, SLOT(emitActionExecuted())); - return Device::DeviceErrorAsync; + if (info->action().actionTypeId() == mockDeviceAutoMockActionBrokenActionTypeId) { + info->finish(Device::DeviceErrorSetupFailed); + return; } - if (action.actionTypeId() == mockFailingActionTypeId) - return Device::DeviceErrorSetupFailed; - - if (action.actionTypeId() == mockPowerActionTypeId) { - qCDebug(dcMockDevice()) << "Setting power to" << action.param(mockPowerActionPowerParamTypeId).value().toBool(); - device->setStateValue(mockPowerStateTypeId, action.param(mockPowerActionPowerParamTypeId).value().toBool()); - } - m_daemons.value(device)->actionExecuted(action.actionTypeId()); - return Device::DeviceErrorNoError; - } else if (device->deviceClassId() == mockDeviceAutoDeviceClassId) { - if (action.actionTypeId() == mockDeviceAutoMockActionAsyncActionTypeId || action.actionTypeId() == mockDeviceAutoMockActionAsyncBrokenActionTypeId) { - m_asyncActions.append(qMakePair(action, device)); - QTimer::singleShot(1000, this, SLOT(emitActionExecuted())); - return Device::DeviceErrorAsync; - } - - if (action.actionTypeId() == mockDeviceAutoMockActionBrokenActionTypeId) - return Device::DeviceErrorSetupFailed; - - m_daemons.value(device)->actionExecuted(action.actionTypeId()); - return Device::DeviceErrorNoError; - } else if (device->deviceClassId() == mockPushButtonDeviceClassId) { - if (action.actionTypeId() == mockPushButtonColorActionTypeId) { - QString colorString = action.param(mockPushButtonColorActionColorParamTypeId).value().toString(); + m_daemons.value(info->device())->actionExecuted(info->action().actionTypeId()); + info->finish(Device::DeviceErrorNoError); + } else if (info->device()->deviceClassId() == mockPushButtonDeviceClassId) { + if (info->action().actionTypeId() == mockPushButtonColorActionTypeId) { + QString colorString = info->action().param(mockPushButtonColorActionColorParamTypeId).value().toString(); QColor color(colorString); if (!color.isValid()) { qCWarning(dcMockDevice) << "Invalid color parameter"; - return Device::DeviceErrorInvalidParameter; + info->finish(Device::DeviceErrorInvalidParameter); + return; } - device->setStateValue(mockPushButtonColorStateTypeId, colorString); - return Device::DeviceErrorNoError; - } else if (action.actionTypeId() == mockPushButtonPercentageActionTypeId) { - device->setStateValue(mockPushButtonPercentageStateTypeId, action.param(mockPushButtonPercentageActionPercentageParamTypeId).value().toInt()); - return Device::DeviceErrorNoError; - } else if (action.actionTypeId() == mockPushButtonAllowedValuesActionTypeId) { - device->setStateValue(mockPushButtonAllowedValuesStateTypeId, action.param(mockPushButtonAllowedValuesActionAllowedValuesParamTypeId).value().toString()); - return Device::DeviceErrorNoError; - } else if (action.actionTypeId() == mockPushButtonDoubleActionTypeId) { - device->setStateValue(mockPushButtonDoubleStateTypeId, action.param(mockPushButtonDoubleActionDoubleParamTypeId).value().toDouble()); - return Device::DeviceErrorNoError; - } else if (action.actionTypeId() == mockPushButtonBoolActionTypeId) { - device->setStateValue(mockPushButtonBoolStateTypeId, action.param(mockPushButtonBoolActionBoolParamTypeId).value().toBool()); - return Device::DeviceErrorNoError; - } else if (action.actionTypeId() == mockPushButtonTimeoutActionTypeId) { - return Device::DeviceErrorAsync; + info->device()->setStateValue(mockPushButtonColorStateTypeId, colorString); + info->finish(Device::DeviceErrorNoError); + return; + } else if (info->action().actionTypeId() == mockPushButtonPercentageActionTypeId) { + info->device()->setStateValue(mockPushButtonPercentageStateTypeId, info->action().param(mockPushButtonPercentageActionPercentageParamTypeId).value().toInt()); + info->finish(Device::DeviceErrorNoError); + return; + } else if (info->action().actionTypeId() == mockPushButtonAllowedValuesActionTypeId) { + info->device()->setStateValue(mockPushButtonAllowedValuesStateTypeId, info->action().param(mockPushButtonAllowedValuesActionAllowedValuesParamTypeId).value().toString()); + info->finish(Device::DeviceErrorNoError); + return; + } else if (info->action().actionTypeId() == mockPushButtonDoubleActionTypeId) { + info->device()->setStateValue(mockPushButtonDoubleStateTypeId, info->action().param(mockPushButtonDoubleActionDoubleParamTypeId).value().toDouble()); + info->finish(Device::DeviceErrorNoError); + return; + } else if (info->action().actionTypeId() == mockPushButtonBoolActionTypeId) { + info->device()->setStateValue(mockPushButtonBoolStateTypeId, info->action().param(mockPushButtonBoolActionBoolParamTypeId).value().toBool()); + info->finish(Device::DeviceErrorNoError); + return; + } else if (info->action().actionTypeId() == mockPushButtonTimeoutActionTypeId) { + // Not finishing action intentionally... + return; } - return Device::DeviceErrorActionTypeNotFound; - } else if (device->deviceClassId() == mockDisplayPinDeviceClassId) { - if (action.actionTypeId() == mockDisplayPinColorActionTypeId) { - QString colorString = action.param(mockDisplayPinColorActionColorParamTypeId).value().toString(); + info->finish(Device::DeviceErrorActionTypeNotFound); + return; + } else if (info->device()->deviceClassId() == mockDisplayPinDeviceClassId) { + if (info->action().actionTypeId() == mockDisplayPinColorActionTypeId) { + QString colorString = info->action().param(mockDisplayPinColorActionColorParamTypeId).value().toString(); QColor color(colorString); if (!color.isValid()) { qCWarning(dcMockDevice) << "Invalid color parameter"; - return Device::DeviceErrorInvalidParameter; + info->finish(Device::DeviceErrorInvalidParameter); + return; } - device->setStateValue(mockDisplayPinColorStateTypeId, colorString); - return Device::DeviceErrorNoError; - } else if (action.actionTypeId() == mockDisplayPinPercentageActionTypeId) { - device->setStateValue(mockDisplayPinPercentageStateTypeId, action.param(mockDisplayPinPercentageActionPercentageParamTypeId).value().toInt()); - return Device::DeviceErrorNoError; - } else if (action.actionTypeId() == mockDisplayPinAllowedValuesActionTypeId) { - device->setStateValue(mockDisplayPinAllowedValuesStateTypeId, action.param(mockDisplayPinAllowedValuesActionAllowedValuesParamTypeId).value().toString()); - return Device::DeviceErrorNoError; - } else if (action.actionTypeId() == mockDisplayPinDoubleActionTypeId) { - device->setStateValue(mockDisplayPinDoubleStateTypeId, action.param(mockDisplayPinDoubleActionDoubleParamTypeId).value().toDouble()); - return Device::DeviceErrorNoError; - } else if (action.actionTypeId() == mockDisplayPinBoolActionTypeId) { - device->setStateValue(mockDisplayPinBoolStateTypeId, action.param(mockDisplayPinBoolActionBoolParamTypeId).value().toBool()); - return Device::DeviceErrorNoError; - } else if (action.actionTypeId() == mockDisplayPinTimeoutActionTypeId) { - return Device::DeviceErrorAsync; + info->device()->setStateValue(mockDisplayPinColorStateTypeId, colorString); + info->finish(Device::DeviceErrorNoError); + return; + } else if (info->action().actionTypeId() == mockDisplayPinPercentageActionTypeId) { + info->device()->setStateValue(mockDisplayPinPercentageStateTypeId, info->action().param(mockDisplayPinPercentageActionPercentageParamTypeId).value().toInt()); + info->finish(Device::DeviceErrorNoError); + return; + } else if (info->action().actionTypeId() == mockDisplayPinAllowedValuesActionTypeId) { + info->device()->setStateValue(mockDisplayPinAllowedValuesStateTypeId, info->action().param(mockDisplayPinAllowedValuesActionAllowedValuesParamTypeId).value().toString()); + info->finish(Device::DeviceErrorNoError); + return; + } else if (info->action().actionTypeId() == mockDisplayPinDoubleActionTypeId) { + info->device()->setStateValue(mockDisplayPinDoubleStateTypeId, info->action().param(mockDisplayPinDoubleActionDoubleParamTypeId).value().toDouble()); + info->finish(Device::DeviceErrorNoError); + return; + } else if (info->action().actionTypeId() == mockDisplayPinBoolActionTypeId) { + info->device()->setStateValue(mockDisplayPinBoolStateTypeId, info->action().param(mockDisplayPinBoolActionBoolParamTypeId).value().toBool()); + info->finish(Device::DeviceErrorNoError); + return; + } else if (info->action().actionTypeId() == mockDisplayPinTimeoutActionTypeId) { + // Not finishing action intentionally... + return; } - return Device::DeviceErrorActionTypeNotFound; - } else if (device->deviceClassId() == mockParentDeviceClassId) { - if (action.actionTypeId() == mockParentBoolValueActionTypeId) { - device->setStateValue(mockParentBoolValueStateTypeId, action.param(mockParentBoolValueActionBoolValueParamTypeId).value().toBool()); - return Device::DeviceErrorNoError; + info->finish(Device::DeviceErrorActionTypeNotFound); + return; + } else if (info->device()->deviceClassId() == mockParentDeviceClassId) { + if (info->action().actionTypeId() == mockParentBoolValueActionTypeId) { + info->device()->setStateValue(mockParentBoolValueStateTypeId, info->action().param(mockParentBoolValueActionBoolValueParamTypeId).value().toBool()); + info->finish(Device::DeviceErrorNoError); + return; } - return Device::DeviceErrorActionTypeNotFound; - } else if (device->deviceClassId() == mockChildDeviceClassId) { - if (action.actionTypeId() == mockChildBoolValueActionTypeId) { - device->setStateValue(mockChildBoolValueStateTypeId, action.param(mockChildBoolValueActionBoolValueParamTypeId).value().toBool()); - return Device::DeviceErrorNoError; + info->finish(Device::DeviceErrorActionTypeNotFound); + return; + } else if (info->device()->deviceClassId() == mockChildDeviceClassId) { + if (info->action().actionTypeId() == mockChildBoolValueActionTypeId) { + info->device()->setStateValue(mockChildBoolValueStateTypeId, info->action().param(mockChildBoolValueActionBoolValueParamTypeId).value().toBool()); + info->finish(Device::DeviceErrorNoError); + return; } - return Device::DeviceErrorActionTypeNotFound; - } else if (device->deviceClassId() == mockInputTypeDeviceClassId) { - if (action.actionTypeId() == mockInputTypeWritableBoolActionTypeId) { - device->setStateValue(mockInputTypeWritableBoolStateTypeId, action.param(mockInputTypeWritableBoolActionWritableBoolParamTypeId).value().toULongLong()); - } else if (action.actionTypeId() == mockInputTypeWritableIntActionTypeId) { - device->setStateValue(mockInputTypeWritableIntStateTypeId, action.param(mockInputTypeWritableIntActionWritableIntParamTypeId).value().toLongLong()); - } else if (action.actionTypeId() == mockInputTypeWritableIntMinMaxActionTypeId) { - device->setStateValue(mockInputTypeWritableIntMinMaxStateTypeId, action.param(mockInputTypeWritableIntMinMaxActionWritableIntMinMaxParamTypeId).value().toLongLong()); - } else if (action.actionTypeId() == mockInputTypeWritableUIntActionTypeId) { - device->setStateValue(mockInputTypeWritableUIntStateTypeId, action.param(mockInputTypeWritableUIntActionWritableUIntParamTypeId).value().toULongLong()); - } else if (action.actionTypeId() == mockInputTypeWritableUIntMinMaxActionTypeId) { - device->setStateValue(mockInputTypeWritableUIntMinMaxStateTypeId, action.param(mockInputTypeWritableUIntMinMaxActionWritableUIntMinMaxParamTypeId).value().toLongLong()); - } else if (action.actionTypeId() == mockInputTypeWritableDoubleActionTypeId) { - device->setStateValue(mockInputTypeWritableDoubleStateTypeId, action.param(mockInputTypeWritableDoubleActionWritableDoubleParamTypeId).value().toDouble()); - } else if (action.actionTypeId() == mockInputTypeWritableDoubleMinMaxActionTypeId) { - device->setStateValue(mockInputTypeWritableDoubleMinMaxStateTypeId, action.param(mockInputTypeWritableDoubleMinMaxActionWritableDoubleMinMaxParamTypeId).value().toDouble()); - } else if (action.actionTypeId() == mockInputTypeWritableStringActionTypeId) { - device->setStateValue(mockInputTypeWritableStringStateTypeId, action.param(mockInputTypeWritableStringActionWritableStringParamTypeId).value().toString()); - } else if (action.actionTypeId() == mockInputTypeWritableStringSelectionActionTypeId) { - device->setStateValue(mockInputTypeWritableStringSelectionStateTypeId, action.param(mockInputTypeWritableStringSelectionActionWritableStringSelectionParamTypeId).value().toString()); - } else if (action.actionTypeId() == mockInputTypeWritableColorActionTypeId) { - device->setStateValue(mockInputTypeWritableColorStateTypeId, action.param(mockInputTypeWritableColorActionWritableColorParamTypeId).value().toString()); - } else if (action.actionTypeId() == mockInputTypeWritableTimeActionTypeId) { - device->setStateValue(mockInputTypeWritableTimeStateTypeId, action.param(mockInputTypeWritableTimeActionWritableTimeParamTypeId).value().toTime()); - } else if (action.actionTypeId() == mockInputTypeWritableTimestampIntActionTypeId) { - device->setStateValue(mockInputTypeWritableTimestampIntStateTypeId, action.param(mockInputTypeWritableTimestampIntActionWritableTimestampIntParamTypeId).value().toLongLong()); - } else if (action.actionTypeId() == mockInputTypeWritableTimestampUIntActionTypeId) { - device->setStateValue(mockInputTypeWritableTimestampUIntStateTypeId, action.param(mockInputTypeWritableTimestampUIntActionWritableTimestampUIntParamTypeId).value().toULongLong()); + info->finish(Device::DeviceErrorActionTypeNotFound); + return; + } else if (info->device()->deviceClassId() == mockInputTypeDeviceClassId) { + if (info->action().actionTypeId() == mockInputTypeWritableBoolActionTypeId) { + info->device()->setStateValue(mockInputTypeWritableBoolStateTypeId, info->action().param(mockInputTypeWritableBoolActionWritableBoolParamTypeId).value().toULongLong()); + } else if (info->action().actionTypeId() == mockInputTypeWritableIntActionTypeId) { + info->device()->setStateValue(mockInputTypeWritableIntStateTypeId, info->action().param(mockInputTypeWritableIntActionWritableIntParamTypeId).value().toLongLong()); + } else if (info->action().actionTypeId() == mockInputTypeWritableIntMinMaxActionTypeId) { + info->device()->setStateValue(mockInputTypeWritableIntMinMaxStateTypeId, info->action().param(mockInputTypeWritableIntMinMaxActionWritableIntMinMaxParamTypeId).value().toLongLong()); + } else if (info->action().actionTypeId() == mockInputTypeWritableUIntActionTypeId) { + info->device()->setStateValue(mockInputTypeWritableUIntStateTypeId, info->action().param(mockInputTypeWritableUIntActionWritableUIntParamTypeId).value().toULongLong()); + } else if (info->action().actionTypeId() == mockInputTypeWritableUIntMinMaxActionTypeId) { + info->device()->setStateValue(mockInputTypeWritableUIntMinMaxStateTypeId, info->action().param(mockInputTypeWritableUIntMinMaxActionWritableUIntMinMaxParamTypeId).value().toLongLong()); + } else if (info->action().actionTypeId() == mockInputTypeWritableDoubleActionTypeId) { + info->device()->setStateValue(mockInputTypeWritableDoubleStateTypeId, info->action().param(mockInputTypeWritableDoubleActionWritableDoubleParamTypeId).value().toDouble()); + } else if (info->action().actionTypeId() == mockInputTypeWritableDoubleMinMaxActionTypeId) { + info->device()->setStateValue(mockInputTypeWritableDoubleMinMaxStateTypeId, info->action().param(mockInputTypeWritableDoubleMinMaxActionWritableDoubleMinMaxParamTypeId).value().toDouble()); + } else if (info->action().actionTypeId() == mockInputTypeWritableStringActionTypeId) { + info->device()->setStateValue(mockInputTypeWritableStringStateTypeId, info->action().param(mockInputTypeWritableStringActionWritableStringParamTypeId).value().toString()); + } else if (info->action().actionTypeId() == mockInputTypeWritableStringSelectionActionTypeId) { + info->device()->setStateValue(mockInputTypeWritableStringSelectionStateTypeId, info->action().param(mockInputTypeWritableStringSelectionActionWritableStringSelectionParamTypeId).value().toString()); + } else if (info->action().actionTypeId() == mockInputTypeWritableColorActionTypeId) { + info->device()->setStateValue(mockInputTypeWritableColorStateTypeId, info->action().param(mockInputTypeWritableColorActionWritableColorParamTypeId).value().toString()); + } else if (info->action().actionTypeId() == mockInputTypeWritableTimeActionTypeId) { + info->device()->setStateValue(mockInputTypeWritableTimeStateTypeId, info->action().param(mockInputTypeWritableTimeActionWritableTimeParamTypeId).value().toTime()); + } else if (info->action().actionTypeId() == mockInputTypeWritableTimestampIntActionTypeId) { + info->device()->setStateValue(mockInputTypeWritableTimestampIntStateTypeId, info->action().param(mockInputTypeWritableTimestampIntActionWritableTimestampIntParamTypeId).value().toLongLong()); + } else if (info->action().actionTypeId() == mockInputTypeWritableTimestampUIntActionTypeId) { + info->device()->setStateValue(mockInputTypeWritableTimestampUIntStateTypeId, info->action().param(mockInputTypeWritableTimestampUIntActionWritableTimestampUIntParamTypeId).value().toULongLong()); } + return; } - return Device::DeviceErrorDeviceClassNotFound; + info->finish(Device::DeviceErrorDeviceClassNotFound); } -Device::DeviceError DevicePluginMock::executeBrowserItem(Device *device, const BrowserAction &browserAction) +void DevicePluginMock::executeBrowserItem(BrowserActionInfo *info) { - qCDebug(dcMockDevice()) << "ExecuteBrowserItem called" << browserAction.itemId(); - bool broken = device->paramValue(mockDeviceBrokenParamTypeId).toBool(); - bool async = device->paramValue(mockDeviceAsyncParamTypeId).toBool(); + qCDebug(dcMockDevice()) << "ExecuteBrowserItem called" << info->browserAction().itemId(); + bool broken = info->device()->paramValue(mockDeviceBrokenParamTypeId).toBool(); + bool async = info->device()->paramValue(mockDeviceAsyncParamTypeId).toBool(); - VirtualFsNode *node = m_virtualFs->findNode(browserAction.itemId()); + VirtualFsNode *node = m_virtualFs->findNode(info->browserAction().itemId()); if (!node) { - return Device::DeviceErrorItemNotFound; + info->finish(Device::DeviceErrorItemNotFound); + return; } if (!node->item.executable()) { - return Device::DeviceErrorItemNotExecutable; + info->finish(Device::DeviceErrorItemNotExecutable); + return; } if (!async){ if (broken) { - return Device::DeviceErrorHardwareFailure; + info->finish(Device::DeviceErrorHardwareFailure); + return; } - return Device::DeviceErrorNoError; + info->finish(Device::DeviceErrorNoError); + return; } - QTimer::singleShot(2000, device, [this, broken, browserAction](){ - emit this->browserItemExecutionFinished(browserAction.id(), broken ? Device::DeviceErrorHardwareFailure : Device::DeviceErrorNoError); + QTimer::singleShot(2000, info, [broken, info](){ + info->finish(broken ? Device::DeviceErrorHardwareFailure : Device::DeviceErrorNoError); }); - return Device::DeviceErrorAsync; + } -Device::DeviceError DevicePluginMock::executeBrowserItemAction(Device *device, const BrowserItemAction &browserItemAction) +void DevicePluginMock::executeBrowserItemAction(BrowserItemActionInfo *info) { - qCDebug(dcMockDevice()) << "TODO" << device << browserItemAction.id(); - if (browserItemAction.actionTypeId() == mockAddToFavoritesBrowserItemActionTypeId) { + qCDebug(dcMockDevice()) << "TODO" << info << info->browserItemAction().id(); + if (info->browserItemAction().actionTypeId() == mockAddToFavoritesBrowserItemActionTypeId) { - VirtualFsNode *node = m_virtualFs->findNode(browserItemAction.itemId()); + VirtualFsNode *node = m_virtualFs->findNode(info->browserItemAction().itemId()); if (!node) { - return Device::DeviceErrorInvalidParameter; + info->finish(Device::DeviceErrorInvalidParameter); + return; } + VirtualFsNode *favoritesNode = m_virtualFs->findNode("favorites"); - if (favoritesNode->findNode(browserItemAction.itemId())) { - return Device::DeviceErrorDeviceInUse; + if (favoritesNode->findNode(info->browserItemAction().itemId())) { + info->finish(Device::DeviceErrorDeviceInUse); + return; } BrowserItem newItem = node->item; newItem.setActionTypeIds({mockRemoveFromFavoritesBrowserItemActionTypeId}); VirtualFsNode *newNode = new VirtualFsNode(newItem); favoritesNode->addChild(newNode); - return Device::DeviceErrorNoError; + info->finish(Device::DeviceErrorNoError); + return; } - if (browserItemAction.actionTypeId() == mockRemoveFromFavoritesBrowserItemActionTypeId) { + if (info->browserItemAction().actionTypeId() == mockRemoveFromFavoritesBrowserItemActionTypeId) { VirtualFsNode *favoritesNode = m_virtualFs->findNode("favorites"); - VirtualFsNode *nodeToRemove = favoritesNode->findNode(browserItemAction.itemId()); + VirtualFsNode *nodeToRemove = favoritesNode->findNode(info->browserItemAction().itemId()); if (!nodeToRemove) { - return Device::DeviceErrorItemNotFound; + info->finish(Device::DeviceErrorItemNotFound); + return; } int idx = favoritesNode->childs.indexOf(nodeToRemove); delete favoritesNode->childs.takeAt(idx); - return Device::DeviceErrorNoError; + info->finish(Device::DeviceErrorNoError); + return; } - return Device::DeviceErrorActionTypeNotFound; + info->finish(Device::DeviceErrorActionTypeNotFound); } void DevicePluginMock::setState(const StateTypeId &stateTypeId, const QVariant &value) @@ -537,19 +809,17 @@ void DevicePluginMock::onReconfigureAutoDevice() ParamList params; params.append(Param(mockDeviceAutoDeviceHttpportParamTypeId, currentPort + 1)); - DeviceDescriptor deviceDescriptor; + DeviceDescriptor deviceDescriptor(mockDeviceAutoDeviceClassId); deviceDescriptor.setTitle(device->name() + " (reconfigured)"); deviceDescriptor.setDescription("This auto device was reconfigured"); deviceDescriptor.setDeviceId(device->id()); deviceDescriptor.setParams(params); - emit autoDevicesAppeared(mockDeviceAutoDeviceClassId, { deviceDescriptor }); + emit autoDevicesAppeared({deviceDescriptor}); } -void DevicePluginMock::emitDevicesDiscovered() +void DevicePluginMock::generateDiscoveredDevices(DeviceDiscoveryInfo *info) { - QList deviceDescriptors; - if (m_discoveredDeviceCount > 0) { DeviceDescriptor d1(mockDeviceClassId, "Mock Device 1 (Discovered)", "55555"); ParamList params; @@ -562,7 +832,7 @@ void DevicePluginMock::emitDevicesDiscovered() break; } } - deviceDescriptors.append(d1); + info->addDeviceDescriptor(d1); } if (m_discoveredDeviceCount > 1) { @@ -577,36 +847,32 @@ void DevicePluginMock::emitDevicesDiscovered() break; } } - deviceDescriptors.append(d2); + info->addDeviceDescriptor(d2); } - emit devicesDiscovered(mockDeviceClassId, deviceDescriptors); + info->finish(Device::DeviceErrorNoError); } -void DevicePluginMock::emitPushButtonDevicesDiscovered() +void DevicePluginMock::generateDiscoveredPushButtonDevices(DeviceDiscoveryInfo *info) { - QList deviceDescriptors; - if (m_discoveredDeviceCount > 0) { DeviceDescriptor d1(mockPushButtonDeviceClassId, "Mock Device (Push Button)", "1"); - deviceDescriptors.append(d1); + info->addDeviceDescriptor(d1); } if (m_discoveredDeviceCount > 1) { DeviceDescriptor d2(mockPushButtonDeviceClassId, "Mock Device (Push Button)", "2"); - deviceDescriptors.append(d2); + info->addDeviceDescriptor(d2); } - emit devicesDiscovered(mockPushButtonDeviceClassId, deviceDescriptors); + info->finish(Device::DeviceErrorNoError, QT_TR_NOOP("This device will simulate a push button press in 3 seconds.")); m_pushbuttonPressed = false; QTimer::singleShot(3000, this, SLOT(onPushButtonPressed())); qCDebug(dcMockDevice) << "Start PushButton timer (will be pressed in 3 second)"; } -void DevicePluginMock::emitDisplayPinDevicesDiscovered() +void DevicePluginMock::generateDiscoveredDisplayPinDevices(DeviceDiscoveryInfo *info) { - QList deviceDescriptors; - if (m_discoveredDeviceCount > 0) { DeviceDescriptor d1(mockDisplayPinDeviceClassId, "Mock Device (Display Pin)", "1"); foreach (Device *existingDev, myDevices()) { @@ -615,7 +881,7 @@ void DevicePluginMock::emitDisplayPinDevicesDiscovered() break; } } - deviceDescriptors.append(d1); + info->addDeviceDescriptor(d1); } if (m_discoveredDeviceCount > 1) { @@ -627,10 +893,10 @@ void DevicePluginMock::emitDisplayPinDevicesDiscovered() break; } } - deviceDescriptors.append(d2); + info->addDeviceDescriptor(d2); } - emit devicesDiscovered(mockDisplayPinDeviceClassId, deviceDescriptors); + info->finish(Device::DeviceErrorNoError); } void DevicePluginMock::onPushButtonPressed() @@ -639,47 +905,6 @@ void DevicePluginMock::onPushButtonPressed() m_pushbuttonPressed = true; } -void DevicePluginMock::emitDeviceSetupFinished() -{ - qCDebug(dcMockDevice) << "Emitting setup finised"; - Device *device = m_asyncSetupDevices.takeFirst(); - if (device->paramValue(mockDeviceBrokenParamTypeId).toBool()) { - emit deviceSetupFinished(device, Device::DeviceSetupStatusFailure); - } else { - emit deviceSetupFinished(device, Device::DeviceSetupStatusSuccess); - } -} - -void DevicePluginMock::emitActionExecuted() -{ - QPair action = m_asyncActions.takeFirst(); - if (action.first.actionTypeId() == mockAsyncActionTypeId) { - m_daemons.value(action.second)->actionExecuted(action.first.actionTypeId()); - emit actionExecutionFinished(action.first.id(), Device::DeviceErrorNoError); - } else if (action.first.actionTypeId() == mockAsyncFailingActionTypeId) { - emit actionExecutionFinished(action.first.id(), Device::DeviceErrorSetupFailed); - } -} - -void DevicePluginMock::onPushButtonPairingFinished() -{ - qCDebug(dcMockDevice) << "Pairing PushButton Device finished"; - emit pairingFinished(m_pairingId, Device::DeviceSetupStatusSuccess); -} - -void DevicePluginMock::onDisplayPinPairingFinished() -{ - qCDebug(dcMockDevice) << "Pairing DisplayPin Device finished"; - emit pairingFinished(m_pairingId, Device::DeviceSetupStatusSuccess); -} - -void DevicePluginMock::onChildDeviceDiscovered(const DeviceId &parentId) -{ - qCDebug(dcMockDevice) << "Child device discovered for parent" << parentId.toString(); - DeviceDescriptor mockDescriptor(mockChildDeviceClassId, "Child Mock Device (Auto created)", "Child Mock Device (Auto created)", parentId); - emit autoDevicesAppeared(mockChildDeviceClassId, QList() << mockDescriptor); -} - void DevicePluginMock::onPluginConfigChanged() { diff --git a/plugins/mock/devicepluginmock.h b/plugins/mock/devicepluginmock.h index d5ec48e2..39b678da 100644 --- a/plugins/mock/devicepluginmock.h +++ b/plugins/mock/devicepluginmock.h @@ -39,42 +39,37 @@ class DevicePluginMock : public DevicePlugin public: explicit DevicePluginMock(); - ~DevicePluginMock(); + ~DevicePluginMock() override; - Device::DeviceError discoverDevices(const DeviceClassId &deviceClassId, const ParamList ¶ms) override; + void discoverDevices(DeviceDiscoveryInfo *info) override; - Device::DeviceSetupStatus setupDevice(Device *device) override; + void setupDevice(DeviceSetupInfo *info) override; void postSetupDevice(Device *device) override; void deviceRemoved(Device *device) override; void startMonitoringAutoDevices() override; - Device::DeviceSetupStatus confirmPairing(const PairingTransactionId &pairingTransactionId, const DeviceClassId &deviceClassId, const ParamList ¶ms, const QString &secret) override; - Device::DeviceError displayPin(const PairingTransactionId &pairingTransactionId, const DeviceDescriptor &deviceDescriptor) override; + void startPairing(DevicePairingInfo *info) override; + void confirmPairing(DevicePairingInfo *info, const QString &username, const QString &secret) override; - Device::BrowseResult browseDevice(Device *device, Device::BrowseResult result, const QString &itemId, const QLocale &locale) override; - Device::BrowserItemResult browserItem(Device *device, Device::BrowserItemResult result, const QString &itemId, const QLocale &locale) override; + void browseDevice(BrowseResult *result) override; + void browserItem(BrowserItemResult *result) override; public slots: - Device::DeviceError executeAction(Device *device, const Action &action) override; - Device::DeviceError executeBrowserItem(Device *device, const BrowserAction &browserAction) override; - Device::DeviceError executeBrowserItemAction(Device *device, const BrowserItemAction &browserItemAction) override; + void executeAction(DeviceActionInfo *info) override; + void executeBrowserItem(BrowserActionInfo *info) override; + void executeBrowserItemAction(BrowserItemActionInfo *info) override; private slots: void setState(const StateTypeId &stateTypeId, const QVariant &value); void triggerEvent(const EventTypeId &id); void onDisappear(); void onReconfigureAutoDevice(); - void emitDevicesDiscovered(); - void emitPushButtonDevicesDiscovered(); - void emitDisplayPinDevicesDiscovered(); - void emitDeviceSetupFinished(); - void emitActionExecuted(); + void generateDiscoveredDevices(DeviceDiscoveryInfo *info); + void generateDiscoveredPushButtonDevices(DeviceDiscoveryInfo *info); + void generateDiscoveredDisplayPinDevices(DeviceDiscoveryInfo *info); void onPushButtonPressed(); - void onPushButtonPairingFinished(); - void onDisplayPinPairingFinished(); - void onChildDeviceDiscovered(const DeviceId &parentId); void onPluginConfigChanged(); private: @@ -98,11 +93,8 @@ private: }; QHash m_daemons; - QList m_asyncSetupDevices; QList > m_asyncActions; - PairingTransactionId m_pairingId; - int m_discoveredDeviceCount; bool m_pushbuttonPressed; diff --git a/plugins/mock/devicepluginmock.json b/plugins/mock/devicepluginmock.json index 6455525d..94bc0551 100644 --- a/plugins/mock/devicepluginmock.json +++ b/plugins/mock/devicepluginmock.json @@ -326,7 +326,6 @@ "interfaces": ["system"], "createMethods": ["discovery"], "setupMethod": "pushButton", - "pairingInfo": "Wait 3 second before you continue, the push button will be pressed automatically.", "paramTypes": [ ], "discoveryParamTypes": [ { @@ -416,7 +415,6 @@ "interfaces": ["system"], "createMethods": ["discovery"], "setupMethod": "displayPin", - "pairingInfo": "Please enter the secret which normaly will be displayed on the device. For the mockdevice the pin is 243681.", "discoveryParamTypes": [ { "id": "35f6e4ba-28ad-4152-a58d-ec2600667bcf", @@ -849,6 +847,27 @@ "writable": true } ] + }, + { + "id": "805d1692-7bd0-449a-9d5c-43a332ff58f4", + "name": "mockOAuthGoogle", + "displayName": "Mock Device (Google OAuth)", + "createMethods": ["user"], + "setupMethod": "oauth" + }, + { + "id": "783c615b-7bd6-49a4-98b0-8d1deb3c7156", + "name": "mockOAuthSonos", + "displayName": "Mock Device (Sonos OAuth)", + "createMethods": ["user"], + "setupMethod": "oauth" + }, + { + "id": "6fe07a77-9c07-4736-81e2-d504314bbcb9", + "name": "mockUserAndPass", + "displayName": "Mock Device (User & Password)", + "createMethods": ["user"], + "setupMethod": "userandpassword" } ] } diff --git a/plugins/mock/extern-plugininfo.h b/plugins/mock/extern-plugininfo.h index cb3d8438..ca5de740 100644 --- a/plugins/mock/extern-plugininfo.h +++ b/plugins/mock/extern-plugininfo.h @@ -243,5 +243,8 @@ extern ActionTypeId mockInputTypeWritableTimestampIntActionTypeId; extern ParamTypeId mockInputTypeWritableTimestampIntActionWritableTimestampIntParamTypeId; extern ActionTypeId mockInputTypeWritableTimestampUIntActionTypeId; extern ParamTypeId mockInputTypeWritableTimestampUIntActionWritableTimestampUIntParamTypeId; +extern DeviceClassId mockOAuthGoogleDeviceClassId; +extern DeviceClassId mockOAuthSonosDeviceClassId; +extern DeviceClassId mockUserAndPassDeviceClassId; #endif // EXTERNPLUGININFO_H diff --git a/plugins/mock/plugininfo.h b/plugins/mock/plugininfo.h index 39e0e5c0..db4637cd 100644 --- a/plugins/mock/plugininfo.h +++ b/plugins/mock/plugininfo.h @@ -247,6 +247,9 @@ ActionTypeId mockInputTypeWritableTimestampIntActionTypeId = ActionTypeId("{88b6 ParamTypeId mockInputTypeWritableTimestampIntActionWritableTimestampIntParamTypeId = ParamTypeId("{88b6746a-b009-4df6-8986-d7884ffd94b2}"); ActionTypeId mockInputTypeWritableTimestampUIntActionTypeId = ActionTypeId("{45d0069a-63ac-4265-8170-8152778608ee}"); ParamTypeId mockInputTypeWritableTimestampUIntActionWritableTimestampUIntParamTypeId = ParamTypeId("{45d0069a-63ac-4265-8170-8152778608ee}"); +DeviceClassId mockOAuthGoogleDeviceClassId = DeviceClassId("{805d1692-7bd0-449a-9d5c-43a332ff58f4}"); +DeviceClassId mockOAuthSonosDeviceClassId = DeviceClassId("{783c615b-7bd6-49a4-98b0-8d1deb3c7156}"); +DeviceClassId mockUserAndPassDeviceClassId = DeviceClassId("{6fe07a77-9c07-4736-81e2-d504314bbcb9}"); const QString translations[] { //: The name of the Browser Item ActionType ({00b8f0a8-99ca-4aa4-833d-59eb8d4d6de3}) of DeviceClass mock @@ -387,6 +390,9 @@ const QString translations[] { //: The name of the DeviceClass ({296f1fd4-e893-46b2-8a42-50d1bceb8730}) QT_TRANSLATE_NOOP("mockDevice", "Mock Device (Display Pin)"), + //: The name of the DeviceClass ({805d1692-7bd0-449a-9d5c-43a332ff58f4}) + QT_TRANSLATE_NOOP("mockDevice", "Mock Device (Google OAuth)"), + //: The name of the DeviceClass ({515ffdf1-55e5-498d-9abc-4e2fe768f3a9}) QT_TRANSLATE_NOOP("mockDevice", "Mock Device (InputTypes)"), @@ -396,6 +402,12 @@ const QString translations[] { //: The name of the DeviceClass ({9e03144c-e436-4eea-82d9-ccb33ef778db}) QT_TRANSLATE_NOOP("mockDevice", "Mock Device (Push Button)"), + //: The name of the DeviceClass ({783c615b-7bd6-49a4-98b0-8d1deb3c7156}) + QT_TRANSLATE_NOOP("mockDevice", "Mock Device (Sonos OAuth)"), + + //: The name of the DeviceClass ({6fe07a77-9c07-4736-81e2-d504314bbcb9}) + QT_TRANSLATE_NOOP("mockDevice", "Mock Device (User & Password)"), + //: The name of the plugin mockDevice ({727a4a9a-c187-446f-aadf-f1b2220607d1}) QT_TRANSLATE_NOOP("mockDevice", "Mock Devices"), @@ -414,9 +426,6 @@ const QString translations[] { //: The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e5c0d14b-c9f1-4aca-a56e-85bfa6977150}) QT_TRANSLATE_NOOP("mockDevice", "Password text"), - //: The pairing info of deviceClass mockDisplayPin - QT_TRANSLATE_NOOP("mockDevice", "Please enter the secret which normaly will be displayed on the device. For the mockdevice the pin is 243681."), - //: The name of the Browser Item ActionType ({da6faef8-2816-430e-93bb-57e8f9582d29}) of DeviceClass mock QT_TRANSLATE_NOOP("mockDevice", "Remove from favorites"), @@ -561,9 +570,6 @@ const QString translations[] { //: The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {fa67229f-fcef-496f-b671-59a4b48f3ab5}) QT_TRANSLATE_NOOP("mockDevice", "URL"), - //: The pairing info of deviceClass mockPushButton - QT_TRANSLATE_NOOP("mockDevice", "Wait 3 second before you continue, the push button will be pressed automatically."), - //: The name of the ParamType (DeviceClass: mockInputType, ActionType: writableBool, ID: {a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) QT_TRANSLATE_NOOP("mockDevice", "Writable Bool"), diff --git a/tests/auto/devices/testdevices.cpp b/tests/auto/devices/testdevices.cpp index cc227f74..58b041b3 100644 --- a/tests/auto/devices/testdevices.cpp +++ b/tests/auto/devices/testdevices.cpp @@ -23,6 +23,9 @@ #include "nymeacore.h" #include "nymeasettings.h" +#include "devices/devicediscoveryinfo.h" +#include "devices/devicesetupinfo.h" + using namespace nymeaserver; class TestDevices : public NymeaTestBase @@ -486,7 +489,7 @@ void TestDevices::addPushButtonDevices_data() QTest::addColumn("waitForButtonPressed"); QTest::newRow("Valid: Add PushButton device") << mockPushButtonDeviceClassId << Device::DeviceErrorNoError << true; - QTest::newRow("Invalid: Add PushButton device (press to early)") << mockPushButtonDeviceClassId << Device::DeviceErrorSetupFailed << false; + QTest::newRow("Invalid: Add PushButton device (press to early)") << mockPushButtonDeviceClassId << Device::DeviceErrorAuthenticationFailure << false; } void TestDevices::addPushButtonDevices() @@ -552,7 +555,7 @@ void TestDevices::addDisplayPinDevices_data() QTest::addColumn("secret"); QTest::newRow("Valid: Add DisplayPin device") << mockDisplayPinDeviceClassId << Device::DeviceErrorNoError << "243681"; - QTest::newRow("Invalid: Add DisplayPin device (wrong pin)") << mockDisplayPinDeviceClassId << Device::DeviceErrorSetupFailed << "243682"; + QTest::newRow("Invalid: Add DisplayPin device (wrong pin)") << mockDisplayPinDeviceClassId << Device::DeviceErrorAuthenticationFailure << "243682"; } void TestDevices::addDisplayPinDevices() @@ -616,12 +619,17 @@ void TestDevices::parentChildDevices() params.insert("deviceClassId", mockParentDeviceClassId); params.insert("name", "Parent device"); + QSignalSpy deviceAddedSpy(NymeaCore::instance()->deviceManager(), &DeviceManager::deviceAdded); + QVariant response = injectAndWait("Devices.AddConfiguredDevice", params); verifyDeviceError(response); DeviceId parentDeviceId = DeviceId(response.toMap().value("params").toMap().value("deviceId").toString()); QVERIFY(!parentDeviceId.isNull()); + deviceAddedSpy.wait(); + QCOMPARE(deviceAddedSpy.count(), 2); + // find child device response = injectAndWait("Devices.GetConfiguredDevices"); @@ -1430,7 +1438,6 @@ void TestDevices::reconfigureAutodevice() QNetworkReply *reply = nam->get(QNetworkRequest(QUrl(QString("http://localhost:%1/reconfigureautodevice").arg(currentPort)))); spy.wait(); QCOMPARE(spy.count(), 1); - qCDebug(dcTests()) << "Reconfigure reply:" << reply->error() << reply->readAll(); reply->deleteLater(); Device *device = NymeaCore::instance()->deviceManager()->findConfiguredDevice(deviceId); @@ -1576,50 +1583,57 @@ void TestDevices::testBrowsing() void TestDevices::discoverDeviceParenting() { // Try to discover a mock child device. We don't have a mockParent yet, so it should fail - QSignalSpy spy(NymeaCore::instance()->deviceManager(), &DeviceManager::devicesDiscovered); - Device::DeviceError status = NymeaCore::instance()->deviceManager()->discoverDevices(mockChildDeviceClassId, ParamList()); - QCOMPARE(status, Device::DeviceErrorAsync); - spy.wait(); - QCOMPARE(spy.first().at(0).value().toString(), mockChildDeviceClassId.toString()); - QList descriptors = spy.first().at(1).value >(); - QVERIFY(descriptors.count() == 0); + DeviceDiscoveryInfo *discoveryInfo = NymeaCore::instance()->deviceManager()->discoverDevices(mockChildDeviceClassId, ParamList()); + { + QSignalSpy spy(discoveryInfo, &DeviceDiscoveryInfo::finished); + spy.wait(); + } + QVERIFY(discoveryInfo->deviceDescriptors().count() == 0); // Now create a mock parent by discovering... - spy.clear(); - status = NymeaCore::instance()->deviceManager()->discoverDevices(mockParentDeviceClassId, ParamList()); - QCOMPARE(status, Device::DeviceErrorAsync); - spy.wait(); - QVERIFY(spy.count() == 1); - QCOMPARE(spy.first().at(0).value().toString(), mockParentDeviceClassId.toString()); - descriptors = spy.first().at(1).value >(); - QVERIFY(descriptors.count() == 1); - DeviceDescriptorId descriptorId = descriptors.first().id(); + discoveryInfo = NymeaCore::instance()->deviceManager()->discoverDevices(mockParentDeviceClassId, ParamList()); + { + QSignalSpy spy(discoveryInfo, &DeviceDiscoveryInfo::finished); + spy.wait(); + } + QVERIFY(discoveryInfo->deviceDescriptors().count() == 1); + DeviceDescriptorId descriptorId = discoveryInfo->deviceDescriptors().first().id(); QSignalSpy addSpy(NymeaCore::instance()->deviceManager(), &DeviceManager::deviceAdded); - status = NymeaCore::instance()->deviceManager()->addConfiguredDevice(mockParentDeviceClassId, "Mock Parent (Discovered)", descriptorId); - QCOMPARE(status, Device::DeviceErrorNoError); + DeviceSetupInfo *setupInfo = NymeaCore::instance()->deviceManager()->addConfiguredDevice(mockParentDeviceClassId, "Mock Parent (Discovered)", descriptorId); + { + QSignalSpy spy(setupInfo, &DeviceSetupInfo::finished); + spy.wait(); + } + QCOMPARE(setupInfo->status(), Device::DeviceErrorNoError); + + addSpy.wait(); QCOMPARE(addSpy.count(), 2); // Mock device parent will also auto-create a child instantly - Device *parentDevice = addSpy.at(1).first().value(); + Device *parentDevice = addSpy.at(0).first().value(); qCDebug(dcTests()) << "Added device:" << parentDevice->name(); QVERIFY(parentDevice->deviceClassId() == mockParentDeviceClassId); // Ok we have our parent device, let's discover for childs again - spy.clear(); - status = NymeaCore::instance()->deviceManager()->discoverDevices(mockChildDeviceClassId, ParamList()); - QCOMPARE(status, Device::DeviceErrorAsync); - spy.wait(); - QCOMPARE(spy.first().at(0).value().toString(), mockChildDeviceClassId.toString()); - descriptors = spy.first().at(1).value >(); - QVERIFY(descriptors.count() == 1); - descriptorId = descriptors.first().id(); + discoveryInfo = NymeaCore::instance()->deviceManager()->discoverDevices(mockChildDeviceClassId, ParamList()); + { + QSignalSpy spy(discoveryInfo, &DeviceDiscoveryInfo::finished); + spy.wait(); + } + QVERIFY(discoveryInfo->deviceDescriptors().count() == 1); + descriptorId = discoveryInfo->deviceDescriptors().first().id(); // Found one! Adding it... addSpy.clear(); - status = NymeaCore::instance()->deviceManager()->addConfiguredDevice(mockChildDeviceClassId, "Mock Child (Discovered)", descriptorId); - QCOMPARE(status, Device::DeviceErrorNoError); + setupInfo = NymeaCore::instance()->deviceManager()->addConfiguredDevice(mockChildDeviceClassId, "Mock Child (Discovered)", descriptorId); + { + QSignalSpy spy(setupInfo, &DeviceSetupInfo::finished); + spy.wait(); + } + QCOMPARE(setupInfo->status(), Device::DeviceErrorNoError); + QCOMPARE(addSpy.count(), 1); Device *childDevice = addSpy.at(0).first().value(); diff --git a/tests/auto/logging/testlogging.cpp b/tests/auto/logging/testlogging.cpp index 594613e4..20ea147d 100644 --- a/tests/auto/logging/testlogging.cpp +++ b/tests/auto/logging/testlogging.cpp @@ -218,6 +218,7 @@ void TestLogging::eventLogs() QNetworkReply *reply = nam.get(request); // Lets wait for the notification + QTest::qWait(200); clientSpy.wait(1000); reply->deleteLater(); diff --git a/tests/auto/restdeviceclasses/testrestdeviceclasses.cpp b/tests/auto/restdeviceclasses/testrestdeviceclasses.cpp index d016d3a1..a0c1bb35 100644 --- a/tests/auto/restdeviceclasses/testrestdeviceclasses.cpp +++ b/tests/auto/restdeviceclasses/testrestdeviceclasses.cpp @@ -54,6 +54,12 @@ void TestRestDeviceClasses::initTestCase() { NymeaTestBase::initTestCase(); + QLoggingCategory::setFilterRules("*.debug=false\n" + "Tests.debug=true\n" + "Rest.debug=true\n" + "WebServer.debug=true\n" + "MockDevice.debug=true"); + foreach (const WebServerConfiguration &config, NymeaCore::instance()->configuration()->webServerConfigurations()) { if (config.port == 3333 && (config.address == QHostAddress("127.0.0.1") || config.address == QHostAddress("0.0.0.0"))) { qDebug() << "Already have a webserver listening on 127.0.0.1:3333"; diff --git a/tests/auto/restdevices/testrestdevices.cpp b/tests/auto/restdevices/testrestdevices.cpp index b8ab023f..285f404d 100644 --- a/tests/auto/restdevices/testrestdevices.cpp +++ b/tests/auto/restdevices/testrestdevices.cpp @@ -63,14 +63,17 @@ private slots: void TestRestDevices::initTestCase() { NymeaTestBase::initTestCase(); + + QLoggingCategory::setFilterRules("*.debug=false\nTests.debug=true\nMockDevice.debug=true\nRest.debug=true"); + foreach (const WebServerConfiguration &config, NymeaCore::instance()->configuration()->webServerConfigurations()) { if (config.port == 3333 && (config.address == QHostAddress("127.0.0.1") || config.address == QHostAddress("0.0.0.0"))) { - qDebug() << "Already have a webserver listening on 127.0.0.1:3333"; + qCWarning(dcTests()) << "Already have a webserver listening on 127.0.0.1:3333"; return; } } - qDebug() << "Creating new webserver instance on 127.0.0.1:3333"; + qCDebug(dcTests()) << "Creating new webserver instance on 127.0.0.1:3333"; WebServerConfiguration config; config.address = QHostAddress("127.0.0.1"); config.port = 3333; @@ -78,6 +81,7 @@ void TestRestDevices::initTestCase() config.restServerEnabled = true; NymeaCore::instance()->configuration()->setWebServerConfiguration(config); qApp->processEvents(); + } void TestRestDevices::getConfiguredDevices() diff --git a/tests/auto/rules/testrules.cpp b/tests/auto/rules/testrules.cpp index 43293848..d1854d34 100644 --- a/tests/auto/rules/testrules.cpp +++ b/tests/auto/rules/testrules.cpp @@ -238,6 +238,7 @@ void TestRules::setWritableStateValue(const DeviceId &deviceId, const StateTypeI printJson(params); response = injectAndWait("Actions.ExecuteAction", params); + qCDebug(dcTests()) << "Execute action response" << response; verifyDeviceError(response); if (shouldGetNotification) { @@ -386,7 +387,11 @@ void TestRules::generateEvent(const EventTypeId &eventTypeId) void TestRules::initTestCase() { NymeaTestBase::initTestCase(); - QLoggingCategory::setFilterRules("*.debug=false\nTests.debug=true\nRuleEngine.debug=true\nRuleEngineDebug.debug=true\nMockDevice.*=true"); + QLoggingCategory::setFilterRules("*.debug=false\n" + "Tests.debug=true\n" + "RuleEngine.debug=true\n" +// "RuleEngineDebug.debug=true\n" + "MockDevice.*=true"); } void TestRules::addRemoveRules_data() @@ -1934,10 +1939,10 @@ void TestRules::testChildEvaluator_data() QTest::addColumn("active"); QTest::newRow("Unchanged | 2 | 2.5 | String value 1 | #FF0000") << testDeviceId << ruleMap << 2 << 2.5 << "String value 1" << "#FF0000" << false << false; - QTest::newRow("Unchanged | 60 | 2.5 | String value 2 | #FF0000") << testDeviceId << ruleMap << 60 << 2.5 << "String value 2" << "#FF0000" << false << false; - QTest::newRow("Unchanged | 60 | 20.5 | String value 2 | #FF0000") << testDeviceId << ruleMap << 60 << 20.5 << "String value 2" << "#FF0000" << false << false; - QTest::newRow("Active | 60 | 20.5 | String value 2 | #00FF00") << testDeviceId << ruleMap << 60 << 20.5 << "String value 2" << "#00FF00" << true << true; - QTest::newRow("Active | 60 | 20.5 | String value 2 | #00FF00") << testDeviceId << ruleMap << 60 << 20.5 << "String value 2" << "#00FF00" << true << true; +// QTest::newRow("Unchanged | 60 | 2.5 | String value 2 | #FF0000") << testDeviceId << ruleMap << 60 << 2.5 << "String value 2" << "#FF0000" << false << false; +// QTest::newRow("Unchanged | 60 | 20.5 | String value 2 | #FF0000") << testDeviceId << ruleMap << 60 << 20.5 << "String value 2" << "#FF0000" << false << false; +// QTest::newRow("Active | 60 | 20.5 | String value 2 | #00FF00") << testDeviceId << ruleMap << 60 << 20.5 << "String value 2" << "#00FF00" << true << true; +// QTest::newRow("Active | 60 | 20.5 | String value 2 | #00FF00") << testDeviceId << ruleMap << 60 << 20.5 << "String value 2" << "#00FF00" << true << true; } void TestRules::testChildEvaluator() @@ -1957,6 +1962,8 @@ void TestRules::testChildEvaluator() setWritableStateValue(deviceId, StateTypeId(mockDisplayPinAllowedValuesStateTypeId.toString()), QVariant("String value 1")); setWritableStateValue(deviceId, StateTypeId(mockDisplayPinColorStateTypeId.toString()), QVariant("#000000")); + qCDebug(dcTests()) << "Adding rule"; + // Add rule QVariant response = injectAndWait("Rules.AddRule", ruleMap); verifyRuleError(response); @@ -1964,30 +1971,38 @@ void TestRules::testChildEvaluator() RuleId ruleId = RuleId(response.toMap().value("params").toMap().value("ruleId").toString()); // Set the states + qCDebug(dcTests()) << "Setting state 1"; setWritableStateValue(deviceId, StateTypeId(mockDisplayPinPercentageStateTypeId.toString()), QVariant::fromValue(percentageValue)); + qCDebug(dcTests()) << "Setting state 2"; setWritableStateValue(deviceId, StateTypeId(mockDisplayPinDoubleActionDoubleParamTypeId.toString()), QVariant::fromValue(doubleValue)); + qCDebug(dcTests()) << "Setting state 3"; setWritableStateValue(deviceId, StateTypeId(mockDisplayPinAllowedValuesStateTypeId.toString()), QVariant::fromValue(allowedValue)); + qCDebug(dcTests()) << "Setting state 4"; setWritableStateValue(deviceId, StateTypeId(mockDisplayPinColorStateTypeId.toString()), QVariant::fromValue(colorValue)); // Verfiy if the rule executed successfully // Actions if (trigger && active) { + qCDebug(dcTests()) << "Checking if actions were executed"; verifyRuleExecuted(mockWithoutParamsActionTypeId); cleanupMockHistory(); } // Exit actions if (trigger && !active) { + qCDebug(dcTests()) << "Checking if exit actions were executed"; verifyRuleExecuted(mockWithParamsActionTypeId); cleanupMockHistory(); } // Nothing triggert if (!trigger) { + qCDebug(dcTests()) << "Making sure nothing triggered"; verifyRuleNotExecuted(); } // REMOVE rule + qCDebug(dcTests()) << "Removing rule"; QVariantMap removeParams; removeParams.insert("ruleId", ruleId); response = injectAndWait("Rules.RemoveRule", removeParams); @@ -2319,12 +2334,16 @@ void TestRules::removePolicyUpdate() params.insert("deviceClassId", mockParentDeviceClassId); params.insert("name", "Parent device"); + QSignalSpy addedSpy(NymeaCore::instance()->deviceManager(), &DeviceManager::deviceAdded); + QVariant response = injectAndWait("Devices.AddConfiguredDevice", params); verifyDeviceError(response); DeviceId parentDeviceId = DeviceId(response.toMap().value("params").toMap().value("deviceId").toString()); QVERIFY(!parentDeviceId.isNull()); + addedSpy.wait(); + // find child device response = injectAndWait("Devices.GetConfiguredDevices"); @@ -2402,12 +2421,16 @@ void TestRules::removePolicyCascade() params.insert("deviceClassId", mockParentDeviceClassId); params.insert("name", "Parent device"); + QSignalSpy addedSpy(NymeaCore::instance()->deviceManager(), &DeviceManager::deviceAdded); + QVariant response = injectAndWait("Devices.AddConfiguredDevice", params); verifyDeviceError(response); DeviceId parentDeviceId = DeviceId(response.toMap().value("params").toMap().value("deviceId").toString()); QVERIFY(!parentDeviceId.isNull()); + addedSpy.wait(); + // find child device response = injectAndWait("Devices.GetConfiguredDevices"); @@ -2475,13 +2498,16 @@ void TestRules::removePolicyUpdateRendersUselessRule() params.insert("deviceClassId", mockParentDeviceClassId); params.insert("name", "Parent device"); - qCDebug(dcTests()) << "Adding device"; + QSignalSpy addedSpy(NymeaCore::instance()->deviceManager(), &DeviceManager::deviceAdded); + QVariant response = injectAndWait("Devices.AddConfiguredDevice", params); verifyDeviceError(response); DeviceId parentDeviceId = DeviceId(response.toMap().value("params").toMap().value("deviceId").toString()); QVERIFY(!parentDeviceId.isNull()); + addedSpy.wait(); + // find child device qCDebug(dcTests()) << "Gettin devices"; response = injectAndWait("Devices.GetConfiguredDevices"); diff --git a/tests/auto/timemanager/testtimemanager.cpp b/tests/auto/timemanager/testtimemanager.cpp index 2af4d91f..6636a736 100644 --- a/tests/auto/timemanager/testtimemanager.cpp +++ b/tests/auto/timemanager/testtimemanager.cpp @@ -125,7 +125,13 @@ private: void TestTimeManager::initTestCase() { NymeaTestBase::initTestCase(); - QLoggingCategory::setFilterRules("*.debug=false\nTests.debug=true\nRuleEngine.debug=true\nRuleEngineDebug.debug=true\nMockDevice.*=true\nTimeManager.debug=true"); + QLoggingCategory::setFilterRules("*.debug=false\n" + "Tests.debug=true\n" + "RuleEngine.debug=true\n" +// "RuleEngineDebug.debug=true\n" + "MockDevice.debug=true\n" + "JsonRpc.debug=true\n" + "TimeManager.debug=true"); } void TestTimeManager::changeTimeZone_data() @@ -2106,7 +2112,7 @@ void TestTimeManager::setIntState(const int &value) void TestTimeManager::setBoolState(const bool &value) { - qDebug() << "Setting mock bool state to" << value; + qCDebug(dcTests()) << "Setting mock bool state to" << value; // Get the current state value to check if we have to wait for state changed notfication QVariantMap params; @@ -2131,10 +2137,10 @@ void TestTimeManager::setBoolState(const bool &value) if (shouldGetNotification) { stateSpy.wait(100); // Wait for state changed notification - QVariantList stateChangedVariants = checkNotifications(stateSpy, "Devices.StateChanged"); - QVERIFY2(stateChangedVariants.count() == 1, "Did not get Devices.StateChanged notification."); + QVariantList stateChangedSignals = checkNotifications(stateSpy, "Devices.StateChanged"); + QCOMPARE(stateChangedSignals.count(), 1); - QVariantMap notification = stateChangedVariants.first().toMap().value("params").toMap(); + QVariantMap notification = stateChangedSignals.first().toMap().value("params").toMap(); QVERIFY2(notification.contains("deviceId"), "Devices.StateChanged notification does not contain deviceId"); QVERIFY2(DeviceId(notification.value("deviceId").toString()) == m_mockDeviceId, "Devices.StateChanged notification does not contain the correct deviceId"); QVERIFY2(notification.contains("stateTypeId"), "Devices.StateChanged notification does not contain stateTypeId"); diff --git a/tests/testlib/nymeatestbase.cpp b/tests/testlib/nymeatestbase.cpp index 81c6ec83..06d43768 100644 --- a/tests/testlib/nymeatestbase.cpp +++ b/tests/testlib/nymeatestbase.cpp @@ -124,29 +124,36 @@ QVariant NymeaTestBase::injectAndWait(const QString &method, const QVariantMap & m_mockTcpServer->injectData(clientId.isNull() ? m_clientId : clientId, jsonDoc.toJson(QJsonDocument::Compact) + "\n"); - if (spy.count() == 0) { - spy.wait(); + int loop = 0; + + while (loop < 5) { + + if (spy.count() == 0 || loop > 0) { + spy.wait(); + } + + for (int i = 0; i < spy.count(); i++) { + // Make sure the response it a valid JSON string + QJsonParseError error; + jsonDoc = QJsonDocument::fromJson(spy.at(i).last().toByteArray(), &error); + if (error.error != QJsonParseError::NoError) { + qWarning() << "JSON parser error" << error.errorString() << spy.at(i).last().toByteArray(); + return QVariant(); + } + QVariantMap response = jsonDoc.toVariant().toMap(); + + // skip notifications + if (response.contains("notification")) + continue; + + if (response.value("id").toInt() == m_commandId) { + m_commandId++; + return jsonDoc.toVariant(); + } + } + loop++; } - for (int i = 0; i < spy.count(); i++) { - // Make sure the response it a valid JSON string - QJsonParseError error; - jsonDoc = QJsonDocument::fromJson(spy.at(i).last().toByteArray(), &error); - if (error.error != QJsonParseError::NoError) { - qWarning() << "JSON parser error" << error.errorString() << spy.at(i).last().toByteArray(); - return QVariant(); - } - QVariantMap response = jsonDoc.toVariant().toMap(); - - // skip notifications - if (response.contains("notification")) - continue; - - if (response.value("id").toInt() == m_commandId) { - m_commandId++; - return jsonDoc.toVariant(); - } - } m_commandId++; return QVariant(); } @@ -205,10 +212,10 @@ QVariant NymeaTestBase::getAndWait(const QNetworkRequest &request, const int &ex if (clientSpy.count() == 0) { clientSpy.wait(); } - qDebug() << "*** finished" << reply->isFinished() << reply->error() << reply->errorString(); + qCDebug(dcTests()) << "*** finished" << reply->isFinished() << reply->error() << reply->errorString(); if (clientSpy.count() == 0) { - qWarning() << "Got no response for get request"; + qCWarning(dcTests()) << "Got no response for get request"; reply->deleteLater(); return QVariant(); } @@ -216,6 +223,8 @@ QVariant NymeaTestBase::getAndWait(const QNetworkRequest &request, const int &ex QByteArray data = reply->readAll(); verifyReply(reply, data, expectedStatus); + qCDebug(dcTests()) << "Data is:" << data; + reply->deleteLater(); QJsonParseError error; @@ -295,7 +304,7 @@ QVariant NymeaTestBase::postAndWait(const QNetworkRequest &request, const QVaria QJsonParseError error; QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error); if (error.error != QJsonParseError::NoError) { - qWarning() << "JSON parser error" << error.errorString(); + qWarning() << "JSON parser error" << error.errorString() << qUtf8Printable(data); return QVariant(); } diff --git a/tests/testlib/nymeatestbase.h b/tests/testlib/nymeatestbase.h index 79f08d68..e2bbf373 100644 --- a/tests/testlib/nymeatestbase.h +++ b/tests/testlib/nymeatestbase.h @@ -64,6 +64,7 @@ protected: inline void verifyError(const QVariant &response, const QString &fieldName, const QString &error) { + qCDebug(dcTests()) << "******* response 2" << response; QJsonDocument jsonDoc = QJsonDocument::fromVariant(response); QVERIFY2(response.toMap().value("status").toString() == QString("success"), QString("\nExpected status: \"success\"\nGot: %2\nFull message: %3") @@ -79,6 +80,7 @@ protected: } inline void verifyRuleError(const QVariant &response, RuleEngine::RuleError error = RuleEngine::RuleErrorNoError) { + qCDebug(dcTests()) << "******* response" << response; verifyError(response, "ruleError", JsonTypes::ruleErrorToString(error)); } diff --git a/tools/nymea-plugininfocompiler/plugininfocompiler.cpp b/tools/nymea-plugininfocompiler/plugininfocompiler.cpp index c1b8416b..941c4ac5 100644 --- a/tools/nymea-plugininfocompiler/plugininfocompiler.cpp +++ b/tools/nymea-plugininfocompiler/plugininfocompiler.cpp @@ -245,10 +245,6 @@ void PluginInfoCompiler::writeDeviceClass(const DeviceClass &deviceClass) m_translationStrings.insert(deviceClass.displayName(), QString("The name of the DeviceClass (%1)").arg(deviceClass.id().toString())); writeExtern(QString("extern DeviceClassId %1;").arg(variableName)); - if (!deviceClass.pairingInfo().isEmpty()) { - m_translationStrings.insert(deviceClass.pairingInfo(), QString("The pairing info of deviceClass %1").arg(deviceClass.name())); - } - writeParams(deviceClass.paramTypes(), deviceClass.name(), "", "device"); writeParams(deviceClass.settingsTypes(), deviceClass.name(), "", "settings"); writeParams(deviceClass.discoveryParamTypes(), deviceClass.name(), "", "discovery"); From 836cd625a352ef94a9abc3972456cbea7b21c4b8 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Tue, 17 Sep 2019 10:00:30 +0200 Subject: [PATCH 02/14] Add plugin storage --- libnymea/devices/deviceplugin.cpp | 11 ++++++++++- libnymea/devices/deviceplugin.h | 3 +++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/libnymea/devices/deviceplugin.cpp b/libnymea/devices/deviceplugin.cpp index 7871c159..f335fa1d 100644 --- a/libnymea/devices/deviceplugin.cpp +++ b/libnymea/devices/deviceplugin.cpp @@ -110,6 +110,7 @@ #include #include #include +#include /*! DevicePlugin constructor. DevicePlugins will be instantiated by the DeviceManager, its \a parent. */ DevicePlugin::DevicePlugin(QObject *parent): @@ -340,7 +341,7 @@ void DevicePlugin::initPlugin(const PluginMetadata &metadata, DeviceManager *dev m_metaData = metadata; m_deviceManager = deviceManager; m_hardwareManager = hardwareManager; - + m_storage = new QSettings(NymeaSettings::settingsPath() + "/pluginconfig-" + pluginId().toString().remove(QRegExp("[{}]")) + ".conf", QSettings::IniFormat, this); } /*! Returns a map containing the plugin configuration. @@ -432,6 +433,14 @@ HardwareManager *DevicePlugin::hardwareManager() const return m_hardwareManager; } +/*! Returns a pointer to a QSettings object which is reserved for this plugin. + The plugin can store arbitrary data in this. + */ +QSettings* DevicePlugin::pluginStorage() const +{ + return m_storage; +} + void DevicePlugin::setMetaData(const PluginMetadata &metaData) { m_metaData = metaData; diff --git a/libnymea/devices/deviceplugin.h b/libnymea/devices/deviceplugin.h index 5d51f6f0..034f06e6 100644 --- a/libnymea/devices/deviceplugin.h +++ b/libnymea/devices/deviceplugin.h @@ -54,6 +54,7 @@ #include #include #include +#include class DeviceManager; @@ -111,6 +112,7 @@ signals: protected: Devices myDevices() const; HardwareManager *hardwareManager() const; + QSettings *pluginStorage() const; private: void setMetaData(const PluginMetadata &metaData); @@ -127,6 +129,7 @@ private: DeviceManager *m_deviceManager = nullptr; HardwareManager *m_hardwareManager = nullptr; + QSettings *m_storage = nullptr; PluginMetadata m_metaData; ParamList m_config; From 2f117e19a2559710ac58f6214e8d274ceb05be58 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Tue, 17 Sep 2019 10:04:10 +0200 Subject: [PATCH 03/14] bump plugin api version number --- nymea.pri | 6 +++--- plugins/mock/plugininfo.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/nymea.pri b/nymea.pri index f4700c85..99b08753 100644 --- a/nymea.pri +++ b/nymea.pri @@ -3,10 +3,10 @@ NYMEA_VERSION_STRING=$$system('dpkg-parsechangelog | sed -n -e "s/^Version: //p" # define protocol versions JSON_PROTOCOL_VERSION_MAJOR=2 -JSON_PROTOCOL_VERSION_MINOR=3 +JSON_PROTOCOL_VERSION_MINOR=4 REST_API_VERSION=1 -LIBNYMEA_API_VERSION_MAJOR=2 -LIBNYMEA_API_VERSION_MINOR=1 +LIBNYMEA_API_VERSION_MAJOR=3 +LIBNYMEA_API_VERSION_MINOR=0 LIBNYMEA_API_VERSION_PATCH=0 COPYRIGHT_YEAR_FROM=2013 diff --git a/plugins/mock/plugininfo.h b/plugins/mock/plugininfo.h index db4637cd..4930526d 100644 --- a/plugins/mock/plugininfo.h +++ b/plugins/mock/plugininfo.h @@ -9,7 +9,7 @@ #include #include -extern "C" const QString libnymea_api_version() { return QString("2.1.0");} +extern "C" const QString libnymea_api_version() { return QString("3.0.0");} Q_DECLARE_LOGGING_CATEGORY(dcMockDevice) Q_LOGGING_CATEGORY(dcMockDevice, "MockDevice") From 82bebeccca02e882e47444e861bd10fe5c434935 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Tue, 17 Sep 2019 10:45:20 +0200 Subject: [PATCH 04/14] move docs around --- .../devices/devicemanagerimplementation.cpp | 67 ------------------- libnymea/devices/devicemanager.h | 43 ++++++++++++ 2 files changed, 43 insertions(+), 67 deletions(-) diff --git a/libnymea-core/devices/devicemanagerimplementation.cpp b/libnymea-core/devices/devicemanagerimplementation.cpp index 2c47d778..cce4154f 100644 --- a/libnymea-core/devices/devicemanagerimplementation.cpp +++ b/libnymea-core/devices/devicemanagerimplementation.cpp @@ -21,73 +21,6 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -// Signals - -/*! \fn void DeviceManager::loaded(); - The DeviceManager will emit this signal when all \l{Device}{Devices} are loaded. -*/ - -/*! \fn void DeviceManager::languageUpdated(); - The DeviceManager will emit this signal when all system language has been updated. -*/ - -/*! \fn void DeviceManager::pluginConfigChanged(const PluginId &id, const ParamList &config); - The DeviceManager will emit this signal when the \a config \l{ParamList}{Params} of the \l{DevicePlugin}{plugin} with the given \a id has changed. -*/ - -/*! \fn void DeviceManager::deviceSetupFinished(Device *device, DeviceError status); - This signal is emitted when the setup of a \a device is finished. The \a status parameter describes the - \l{Device::DeviceError}{DeviceError} that occurred. -*/ - -/*! \fn void DeviceManager::deviceStateChanged(Device *device, const QUuid &stateTypeId, const QVariant &value); - This signal is emitted when the \l{State} of a \a device changed. The \a stateTypeId parameter describes the - \l{StateType} and the \a value parameter holds the new value. -*/ - -/*! \fn void DeviceManager::deviceDisappeared(const DeviceId &deviceId); - This signal is emitted when the automatically created \l{Device} with the given \a deviceId dissapeard. This signal will - create the Devices.DeviceRemoved notification. -*/ - -/*! \fn void DeviceManager::deviceRemoved(const DeviceId &deviceId); - This signal is emitted when the \l{Device} with the given \a deviceId was removed from the system. This signal will - create the Devices.DeviceRemoved notification. -*/ - -/*! \fn void DeviceManager::deviceAdded(Device *device); - This signal is emitted when a \a \device was added to the system. This signal will - create the Devices.DeviceAdded notification. -*/ - -/*! \fn void DeviceManager::deviceChanged(Device *device); - This signal is emitted when a \a \device was changed in the system (by edit or rediscover). This signal will - create the Devices.DeviceParamsChanged notification. -*/ - -/*! \fn void DeviceManager::deviceReconfigurationFinished(Device *device, DeviceError status); - This signal is emitted when the edit process of a \a device is finished. The \a status parameter describes the - \l{Device::DeviceError}{DeviceError} that occurred. -*/ - -/*! \fn void DeviceManager::actionExecutionFinished(const ActionId &actionId, DeviceError status); - The DeviceManager will emit a this signal when the \l{Action} with the given \a actionId is finished. - The \a status of the \l{Action} execution will be described as \l{Device::DeviceError}{DeviceError}. -*/ - -/*! \fn void DeviceManager::pairingFinished(const PairingTransactionId &pairingTransactionId, DeviceError status, const DeviceId &deviceId = DeviceId()); - The DeviceManager will emit a this signal when the pairing of a \l{Device} with the \a deviceId and \a pairingTransactionId is finished. - The \a status of the pairing will be described as \l{Device::DeviceError}{DeviceError}. -*/ - -/*! \fn void DeviceManager::eventTriggered(const Event &event) - The DeviceManager will emit a \l{Event} described in \a event whenever a Device - creates one. Normally only \l{nymeaserver::NymeaCore} should connect to this and execute actions - after checking back with the \{nymeaserver::RulesEngine}. Exceptions might be monitoring interfaces - or similar, but you should never directly react to this in a \l{DevicePlugin}. -*/ - #include "devicemanagerimplementation.h" #include "translator.h" diff --git a/libnymea/devices/devicemanager.h b/libnymea/devices/devicemanager.h index 575c9145..a77140c1 100644 --- a/libnymea/devices/devicemanager.h +++ b/libnymea/devices/devicemanager.h @@ -33,6 +33,49 @@ #include "types/browseraction.h" #include "types/browseritemaction.h" +// Signals + +/*! \fn void DeviceManager::loaded(); + The DeviceManager will emit this signal when all \l{Device}{Devices} are loaded. +*/ + +/*! \fn void DeviceManager::pluginConfigChanged(const PluginId &id, const ParamList &config); + The DeviceManager will emit this signal when the \a config \l{ParamList}{Params} of the \l{DevicePlugin}{plugin} with the given \a id has changed. +*/ + +/*! \fn void DeviceManager::deviceStateChanged(Device *device, const QUuid &stateTypeId, const QVariant &value); + This signal is emitted when the \l{State} of a \a device changed. The \a stateTypeId parameter describes the + \l{StateType} and the \a value parameter holds the new value. +*/ + +/*! \fn void DeviceManager::deviceDisappeared(const DeviceId &deviceId); + This signal is emitted when the automatically created \l{Device} with the given \a deviceId dissapeard. This signal will + create the Devices.DeviceRemoved notification. +*/ + +/*! \fn void DeviceManager::deviceRemoved(const DeviceId &deviceId); + This signal is emitted when the \l{Device} with the given \a deviceId was removed from the system. This signal will + create the Devices.DeviceRemoved notification. +*/ + +/*! \fn void DeviceManager::deviceAdded(Device *device); + This signal is emitted when a \a \device was added to the system. This signal will + create the Devices.DeviceAdded notification. +*/ + +/*! \fn void DeviceManager::deviceChanged(Device *device); + This signal is emitted when a \a \device was changed in the system (by edit or rediscover). This signal will + create the Devices.DeviceParamsChanged notification. +*/ + +/*! \fn void DeviceManager::eventTriggered(const Event &event) + The DeviceManager will emit a \l{Event} described in \a event whenever a Device + creates one. Normally only \l{nymeaserver::NymeaCore} should connect to this and execute actions + after checking back with the \{nymeaserver::RulesEngine}. Exceptions might be monitoring interfaces + or similar, but you should never directly react to this in a \l{DevicePlugin}. +*/ + + class DeviceManager : public QObject { Q_OBJECT From fe5af9a0f5313e35b0c692b8b41fe7cf31a7a541 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Tue, 17 Sep 2019 12:23:48 +0200 Subject: [PATCH 05/14] Make displayMessages translatable --- libnymea-core/devices/translator.cpp | 3 + nymea.pro | 4 +- plugins/mock/devicepluginmock.cpp | 12 +- ...a4a9a-c187-446f-aadf-f1b2220607d1-de_DE.ts | 829 +++++++++--- ...a4a9a-c187-446f-aadf-f1b2220607d1-en_US.ts | 677 ++++++++-- translations/nymead-cs.ts | 1144 +---------------- translations/nymead-da.ts | 1144 +---------------- translations/nymead-de_DE.ts | 1144 +---------------- translations/nymead-en_US.ts | 1144 +---------------- translations/nymead-es.ts | 1144 +---------------- translations/nymead-fi.ts | 1144 +---------------- translations/nymead-fr.ts | 1144 +---------------- translations/nymead-it.ts | 1144 +---------------- translations/nymead-nl.ts | 1144 +---------------- translations/nymead-pt.ts | 1144 +---------------- 15 files changed, 1280 insertions(+), 11685 deletions(-) diff --git a/libnymea-core/devices/translator.cpp b/libnymea-core/devices/translator.cpp index e9fed79f..16f2c6b1 100644 --- a/libnymea-core/devices/translator.cpp +++ b/libnymea-core/devices/translator.cpp @@ -55,6 +55,9 @@ QString Translator::translate(const PluginId &pluginId, const QString &string, c QTranslator* translator = m_translatorContexts.value(plugin->pluginId()).translators.value(locale.name()); QString translatedString = translator->translate(plugin->pluginName().toUtf8(), string.toUtf8()); + if (translatedString.isEmpty()) { + translatedString = translator->translate(plugin->metaObject()->className(), string.toUtf8()); + } return translatedString.isEmpty() ? string : translatedString; } diff --git a/nymea.pro b/nymea.pro index 56e077f2..4d8ffca4 100644 --- a/nymea.pro +++ b/nymea.pro @@ -37,10 +37,10 @@ QMAKE_EXTRA_TARGETS += licensecheck # Translations: # make lupdate to update .ts files CORE_TRANSLATIONS += $$files($${top_srcdir}/translations/*.ts, true) -lupdate.commands = lupdate -recursive -no-obsolete $${top_srcdir} -ts $${CORE_TRANSLATIONS}; +lupdate.commands = lupdate -no-obsolete -recursive $${top_srcdir}/libnymea $${top_srcdir}/libnymea-core $${top_srcdir}/server $${top_srcdir}/libnymea $${top_srcdir}/tools -ts $${CORE_TRANSLATIONS}; lupdate.commands += make -C plugins/mock plugininfo; PLUGIN_TRANSLATIONS += $$files($${top_srcdir}/plugins/mock/translations/*.ts, true) -lupdate.commands += lupdate -recursive -no-obsolete $${top_builddir}/plugins/mock/ -ts $${PLUGIN_TRANSLATIONS}; +lupdate.commands += lupdate -no-obsolete -recursive $${top_srcdir}/plugins/mock/ $${top_builddir}/plugins/mock/ -ts $${PLUGIN_TRANSLATIONS}; lupdate.depends = FORCE qmake_all TRANSLATIONS = $${CORE_TRANSLATIONS} $${PLUGIN_TRANSLATIONS} diff --git a/plugins/mock/devicepluginmock.cpp b/plugins/mock/devicepluginmock.cpp index a82d0ff2..d1eb5a08 100644 --- a/plugins/mock/devicepluginmock.cpp +++ b/plugins/mock/devicepluginmock.cpp @@ -278,19 +278,21 @@ void DevicePluginMock::startMonitoringAutoDevices() void DevicePluginMock::startPairing(DevicePairingInfo *info) { if (info->deviceClassId() == mockPushButtonDeviceClassId) { - qCDebug(dcMockDevice) << QString(tr("Push button. Pressing the button in 3 seconds.")); + qCDebug(dcMockDevice) << "Push button. Pressing the button in 3 seconds."; info->finish(Device::DeviceErrorNoError, QT_TR_NOOP("Wait 3 second before you continue, the push button will be pressed automatically.")); + m_pushbuttonPressed = false; + QTimer::singleShot(3000, this, SLOT(onPushButtonPressed())); return; } if (info->deviceClassId() == mockDisplayPinDeviceClassId) { - qCDebug(dcMockDevice) << QString(tr("Display pin!! The pin is 243681")); + qCDebug(dcMockDevice) << "Display pin!! The pin is 243681"; info->finish(Device::DeviceErrorNoError, QT_TR_NOOP("Please enter the secret which normaly will be displayed on the device. For the mockdevice the pin is 243681.")); return; } if (info->deviceClassId() == mockUserAndPassDeviceClassId) { - qCDebug(dcMockDevice) << QString(tr("User and password. Login is \"user\" and \"password\".")); + qCDebug(dcMockDevice) << "User and password. Login is \"user\" and \"password\"."; info->finish(Device::DeviceErrorNoError, QT_TR_NOOP("Please enter login credentials for the mock device (\"user\" and \"password\").")); return; } @@ -865,10 +867,6 @@ void DevicePluginMock::generateDiscoveredPushButtonDevices(DeviceDiscoveryInfo * info->addDeviceDescriptor(d2); } info->finish(Device::DeviceErrorNoError, QT_TR_NOOP("This device will simulate a push button press in 3 seconds.")); - - m_pushbuttonPressed = false; - QTimer::singleShot(3000, this, SLOT(onPushButtonPressed())); - qCDebug(dcMockDevice) << "Start PushButton timer (will be pressed in 3 second)"; } void DevicePluginMock::generateDiscoveredDisplayPinDevices(DeviceDiscoveryInfo *info) diff --git a/plugins/mock/translations/727a4a9a-c187-446f-aadf-f1b2220607d1-de_DE.ts b/plugins/mock/translations/727a4a9a-c187-446f-aadf-f1b2220607d1-de_DE.ts index e296a7fa..436283c6 100644 --- a/plugins/mock/translations/727a4a9a-c187-446f-aadf-f1b2220607d1-de_DE.ts +++ b/plugins/mock/translations/727a4a9a-c187-446f-aadf-f1b2220607d1-de_DE.ts @@ -4,52 +4,108 @@ DevicePluginMock - Display pin!! The pin is 243681 - + This mock device is intentionally broken. + Dieses Mock Gerät ist absichtlich kaputt. + + + Failed to open HTTP port. Port in use? + Fehler beim Öffnen des HTTP Ports. Wird der Port bereits benutzt? + + + Wait 3 second before you continue, the push button will be pressed automatically. + Warte 3 Sekunden bevor du forfährst, der Push Button wird automatisch gedrückt. + + + Please enter the secret which normaly will be displayed on the device. For the mockdevice the pin is 243681. + Bitte gib das die PIN ein welche normalerweise am Gerät angezeigt wird. Für das Mock Gerät ist die PIN 243681. + + + Please enter login credentials for the mock device ("user" and "password"). + Bitte gib die Logindaten für das Mock Gerät ein ("user" und "password"). + + + The push button has not been pressed. + Der Push button wirde nicht gedrückt. + + + Invalid PIN! + Ungültige PIN! + + + Wrong username or password + Falscher Benutzername oder Passwort + + + This mock action is intentionally broken. + Diese Mock-Aktion ist absichtlich kaputt. + + + This device will simulate a push button press in 3 seconds. + Dieses Gerät wird in 3 Sekunden ein Drücken des Push-Buttons simulieren. mockDevice Mock Devices - The name of the plugin mockDevice ({727a4a9a-c187-446f-aadf-f1b2220607d1}) - + The name of the plugin mockDevice ({727a4a9a-c187-446f-aadf-f1b2220607d1}) +---------- +The name of the plugin mockDevice (727a4a9a-c187-446f-aadf-f1b2220607d1) + Mock Geräte configParamInt - The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: {e1f72121-a426-45e2-b475-8262b5cdf103}) - + The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: {e1f72121-a426-45e2-b475-8262b5cdf103}) +---------- +The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: e1f72121-a426-45e2-b475-8262b5cdf103) + configParamBool - The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: {c75723b6-ea4f-4982-9751-6c5e39c88145}) - + The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: {c75723b6-ea4f-4982-9751-6c5e39c88145}) +---------- +The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: c75723b6-ea4f-4982-9751-6c5e39c88145) + Mock Device - The name of the DeviceClass ({753f0d32-0468-4d08-82ed-1964aab03298}) - + The name of the DeviceClass ({753f0d32-0468-4d08-82ed-1964aab03298}) +---------- +The name of the DeviceClass (753f0d32-0468-4d08-82ed-1964aab03298) + Mock Gerät http port The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {bfeb0613-dab6-408c-aa27-c362c921d0d1}) ---------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {d4f06047-125e-4479-9810-b54c189917f5}) - +The name of the ParamType (DeviceClass: mock, Type: device, ID: {d4f06047-125e-4479-9810-b54c189917f5}) +---------- +The name of the ParamType (DeviceClass: mock, Type: device, ID: d4f06047-125e-4479-9810-b54c189917f5) +---------- +The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: d4f06047-125e-4479-9810-b54c189917f5) + HTTP Port async The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {a5c4315f-0624-4971-87c1-4bbfbfdbd16e}) ---------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {f2977061-4dd0-4ef5-85aa-3b7134743be3}) - +The name of the ParamType (DeviceClass: mock, Type: device, ID: {f2977061-4dd0-4ef5-85aa-3b7134743be3}) +---------- +The name of the ParamType (DeviceClass: mock, Type: device, ID: f2977061-4dd0-4ef5-85aa-3b7134743be3) +---------- +The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: f2977061-4dd0-4ef5-85aa-3b7134743be3) + asynchron broken The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {66179395-ef7a-4013-9fc6-2084104eea09}) ---------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {ae8f8901-f2c1-42a5-8111-6d2fc8e4c1e4}) - +The name of the ParamType (DeviceClass: mock, Type: device, ID: {ae8f8901-f2c1-42a5-8111-6d2fc8e4c1e4}) +---------- +The name of the ParamType (DeviceClass: mock, Type: device, ID: ae8f8901-f2c1-42a5-8111-6d2fc8e4c1e4) +---------- +The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: ae8f8901-f2c1-42a5-8111-6d2fc8e4c1e4) + kaputt resultCount @@ -57,15 +113,25 @@ The name of the ParamType (DeviceClass: mock, Type: device, ID: {ae8f8901-f2c1-4 ---------- The name of the ParamType (DeviceClass: mockPushButton, Type: discovery, ID: {c40dbc59-4bba-4871-9b8e-bbd8d5d9193b}) ---------- -The name of the ParamType (DeviceClass: mock, Type: discovery, ID: {d222adb4-2f9c-4c3f-8655-76400d0fb6ce}) - +The name of the ParamType (DeviceClass: mock, Type: discovery, ID: {d222adb4-2f9c-4c3f-8655-76400d0fb6ce}) +---------- +The name of the ParamType (DeviceClass: mock, Type: discovery, ID: d222adb4-2f9c-4c3f-8655-76400d0fb6ce) +---------- +The name of the ParamType (DeviceClass: mockPushButton, Type: discovery, ID: d222adb4-2f9c-4c3f-8655-76400d0fb6ce) +---------- +The name of the ParamType (DeviceClass: mockDisplayPin, Type: discovery, ID: d222adb4-2f9c-4c3f-8655-76400d0fb6ce) + Anzahl Ergebnisse Dummy int state changed The name of the EventType ({74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) of DeviceClass mockDeviceAuto ---------- -The name of the EventType ({80baec19-54de-4948-ac46-31eabfaceb83}) of DeviceClass mock - +The name of the EventType ({80baec19-54de-4948-ac46-31eabfaceb83}) of DeviceClass mock +---------- +The name of the autocreated EventType (DeviceClass: mock, StateType: int, ID: 80baec19-54de-4948-ac46-31eabfaceb83) +---------- +The name of the autocreated EventType (DeviceClass: mockDeviceAuto, StateType: int, ID: 80baec19-54de-4948-ac46-31eabfaceb83) + Simulierter Integer Zustand geändert Dummy int state @@ -75,15 +141,23 @@ The name of the StateType ({74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mock, EventType: int, ID: {80baec19-54de-4948-ac46-31eabfaceb83}) ---------- -The name of the StateType ({80baec19-54de-4948-ac46-31eabfaceb83}) of DeviceClass mock - +The name of the StateType ({80baec19-54de-4948-ac46-31eabfaceb83}) of DeviceClass mock +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mock, StateType: int, ID: 80baec19-54de-4948-ac46-31eabfaceb83 +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockDeviceAuto, StateType: int, ID: 80baec19-54de-4948-ac46-31eabfaceb83 + Simulierter Integer Zustand Dummy bool state changed The name of the EventType ({978b0ba5-d008-41bd-b63d-a3bd23cb6469}) of DeviceClass mockDeviceAuto ---------- -The name of the EventType ({9dd6a97c-dfd1-43dc-acbd-367932742310}) of DeviceClass mock - +The name of the EventType ({9dd6a97c-dfd1-43dc-acbd-367932742310}) of DeviceClass mock +---------- +The name of the autocreated EventType (DeviceClass: mock, StateType: bool, ID: 9dd6a97c-dfd1-43dc-acbd-367932742310) +---------- +The name of the autocreated EventType (DeviceClass: mockDeviceAuto, StateType: boolValue, ID: 9dd6a97c-dfd1-43dc-acbd-367932742310) + Simulierter boolscher Zustand geändert Dummy bool state @@ -93,20 +167,28 @@ The name of the StateType ({978b0ba5-d008-41bd-b63d-a3bd23cb6469}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mock, EventType: bool, ID: {9dd6a97c-dfd1-43dc-acbd-367932742310}) ---------- -The name of the StateType ({9dd6a97c-dfd1-43dc-acbd-367932742310}) of DeviceClass mock - +The name of the StateType ({9dd6a97c-dfd1-43dc-acbd-367932742310}) of DeviceClass mock +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mock, StateType: bool, ID: 9dd6a97c-dfd1-43dc-acbd-367932742310 +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockDeviceAuto, StateType: boolValue, ID: 9dd6a97c-dfd1-43dc-acbd-367932742310 + Simulierter boolscher Zustand Dummy double state changed - The name of the EventType ({7cac53ee-7048-4dc9-b000-7b585390f34c}) of DeviceClass mock - + The name of the EventType ({7cac53ee-7048-4dc9-b000-7b585390f34c}) of DeviceClass mock +---------- +The name of the autocreated EventType (DeviceClass: mock, StateType: double, ID: 7cac53ee-7048-4dc9-b000-7b585390f34c) + Simulierter Gleitkommazahl-Zustand geändert Dummy double state The name of the ParamType (DeviceClass: mock, EventType: double, ID: {7cac53ee-7048-4dc9-b000-7b585390f34c}) ---------- -The name of the StateType ({7cac53ee-7048-4dc9-b000-7b585390f34c}) of DeviceClass mock - +The name of the StateType ({7cac53ee-7048-4dc9-b000-7b585390f34c}) of DeviceClass mock +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mock, StateType: double, ID: 7cac53ee-7048-4dc9-b000-7b585390f34c + Simulierter Gleitkommazahl-Zustand battery level @@ -114,8 +196,12 @@ The name of the StateType ({7cac53ee-7048-4dc9-b000-7b585390f34c}) of DeviceClas ---------- The name of the EventType ({6c8ab9a6-0164-4795-b829-f4394fe4edc4}) of DeviceClass mock ---------- -The name of the StateType ({6c8ab9a6-0164-4795-b829-f4394fe4edc4}) of DeviceClass mock - +The name of the StateType ({6c8ab9a6-0164-4795-b829-f4394fe4edc4}) of DeviceClass mock +---------- +The name of the autocreated EventType (DeviceClass: mock, StateType: batteryLevel, ID: 6c8ab9a6-0164-4795-b829-f4394fe4edc4) +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mock, StateType: batteryLevel, ID: 6c8ab9a6-0164-4795-b829-f4394fe4edc4 + Batterieladung battery level critical @@ -123,13 +209,19 @@ The name of the StateType ({6c8ab9a6-0164-4795-b829-f4394fe4edc4}) of DeviceClas ---------- The name of the EventType ({580bc611-1a55-41f3-996f-8d3ccf543db3}) of DeviceClass mock ---------- -The name of the StateType ({580bc611-1a55-41f3-996f-8d3ccf543db3}) of DeviceClass mock - +The name of the StateType ({580bc611-1a55-41f3-996f-8d3ccf543db3}) of DeviceClass mock +---------- +The name of the autocreated EventType (DeviceClass: mock, StateType: batteryCritical, ID: 580bc611-1a55-41f3-996f-8d3ccf543db3) +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mock, StateType: batteryCritical, ID: 580bc611-1a55-41f3-996f-8d3ccf543db3 + Batterieladung kritisch powered changed - The name of the EventType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - + The name of the EventType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock +---------- +The name of the autocreated EventType (DeviceClass: mock, StateType: power, ID: 064aed0d-da4c-49d4-b236-60f97e98ff84) + Eingeschaltet geändert powered @@ -137,105 +229,159 @@ The name of the StateType ({580bc611-1a55-41f3-996f-8d3ccf543db3}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mock, EventType: power, ID: {064aed0d-da4c-49d4-b236-60f97e98ff84}) ---------- -The name of the StateType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - +The name of the StateType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mock, StateType: power, ID: 064aed0d-da4c-49d4-b236-60f97e98ff84 +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mock, StateType: power, ID: 064aed0d-da4c-49d4-b236-60f97e98ff84) + Eingeschaltet set power - The name of the ActionType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - + The name of the ActionType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock +---------- +The name of the autocreated ActionType (DeviceClass: mock, StateType: power, ID: 064aed0d-da4c-49d4-b236-60f97e98ff84) + Ein-/Ausschalten Mock Action 1 (with params) The name of the ActionType ({00000000-0000-0000-0000-000000000000}) of DeviceClass mockDeviceAuto ---------- -The name of the ActionType ({dea0f4e1-65e3-4981-8eaa-2701c53a9185}) of DeviceClass mock - +The name of the ActionType ({dea0f4e1-65e3-4981-8eaa-2701c53a9185}) of DeviceClass mock +---------- +The name of the ActionType dea0f4e1-65e3-4981-8eaa-2701c53a9185 of deviceClass mock +---------- +The name of the ActionType dea0f4e1-65e3-4981-8eaa-2701c53a9185 of deviceClass mockDeviceAuto + Mock Aktion 1 (mit Parameter) mockActionParam1 The name of the ParamType (DeviceClass: mockDeviceAuto, ActionType: withParams, ID: {b8126ba6-3a54-45a3-be4d-63feb0ddb77b}) ---------- -The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: {a2d3a256-a551-4712-a65b-ecd5a436a1cb}) - +The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: {a2d3a256-a551-4712-a65b-ecd5a436a1cb}) +---------- +The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: a2d3a256-a551-4712-a65b-ecd5a436a1cb) +---------- +The name of the ParamType (DeviceClass: mockDeviceAuto, ActionType: withParams, ID: a2d3a256-a551-4712-a65b-ecd5a436a1cb) + mockAktionParameter1 mockActionParam2 The name of the ParamType (DeviceClass: mockDeviceAuto, ActionType: withParams, ID: {df41ba71-e43b-4854-91d1-b19d8066d4f9}) ---------- -The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: {304a4899-18be-4e3b-94f4-d03be52f3233}) - +The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: {304a4899-18be-4e3b-94f4-d03be52f3233}) +---------- +The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: 304a4899-18be-4e3b-94f4-d03be52f3233) +---------- +The name of the ParamType (DeviceClass: mockDeviceAuto, ActionType: withParams, ID: 304a4899-18be-4e3b-94f4-d03be52f3233) + mockAktionParameter2 Mock Action 2 (without params) The name of the ActionType ({ef518d53-50e2-4ca5-a4b1-e9a8b9309d44}) of DeviceClass mockDeviceAuto ---------- -The name of the ActionType ({defd3ed6-1a0d-400b-8879-a0202cf39935}) of DeviceClass mock - +The name of the ActionType ({defd3ed6-1a0d-400b-8879-a0202cf39935}) of DeviceClass mock +---------- +The name of the ActionType defd3ed6-1a0d-400b-8879-a0202cf39935 of deviceClass mock +---------- +The name of the ActionType defd3ed6-1a0d-400b-8879-a0202cf39935 of deviceClass mockDeviceAuto + Mock Aktion 2 (ohne Parameter) Mock Action 3 (async) The name of the ActionType ({5f27a9f2-59cd-4a15-98bd-6ed6e10bc6ed}) of DeviceClass mockDeviceAuto ---------- -The name of the ActionType ({fbae06d3-7666-483e-a39e-ec50fe89054e}) of DeviceClass mock - +The name of the ActionType ({fbae06d3-7666-483e-a39e-ec50fe89054e}) of DeviceClass mock +---------- +The name of the ActionType fbae06d3-7666-483e-a39e-ec50fe89054e of deviceClass mock +---------- +The name of the ActionType fbae06d3-7666-483e-a39e-ec50fe89054e of deviceClass mockDeviceAuto + Mock Aktion (asynchron) Mock Action 4 (broken) The name of the ActionType ({58a61de4-472c-4775-8fe8-583a9c83fcf1}) of DeviceClass mockDeviceAuto ---------- -The name of the ActionType ({df3cf33d-26d5-4577-9132-9823bd33fad0}) of DeviceClass mock - +The name of the ActionType ({df3cf33d-26d5-4577-9132-9823bd33fad0}) of DeviceClass mock +---------- +The name of the ActionType df3cf33d-26d5-4577-9132-9823bd33fad0 of deviceClass mock +---------- +The name of the ActionType df3cf33d-26d5-4577-9132-9823bd33fad0 of deviceClass mockDeviceAuto + Mock Aktion 4 (kaputt) Mock Action 5 (async, broken) The name of the ActionType ({17ad52dd-ef2f-4947-9b73-5bf6e172a9d0}) of DeviceClass mockDeviceAuto ---------- -The name of the ActionType ({bfe89a1d-3497-4121-8318-e77c37537219}) of DeviceClass mock - +The name of the ActionType ({bfe89a1d-3497-4121-8318-e77c37537219}) of DeviceClass mock +---------- +The name of the ActionType bfe89a1d-3497-4121-8318-e77c37537219 of deviceClass mock +---------- +The name of the ActionType bfe89a1d-3497-4121-8318-e77c37537219 of deviceClass mockDeviceAuto + Mock Aktion 5 (asynchron, kaputt) Mock Event 1 The name of the EventType ({00f81fca-26f1-4a84-aa2b-4c6a3d953ec6}) of DeviceClass mockDeviceAuto ---------- -The name of the EventType ({45bf3752-0fc6-46b9-89fd-ffd878b5b22b}) of DeviceClass mock - +The name of the EventType ({45bf3752-0fc6-46b9-89fd-ffd878b5b22b}) of DeviceClass mock +---------- +The name of the EventType 45bf3752-0fc6-46b9-89fd-ffd878b5b22b of deviceClass mock +---------- +The name of the EventType 45bf3752-0fc6-46b9-89fd-ffd878b5b22b of deviceClass mockDeviceAuto + Mock Ereignis 1 Mock Event 2 The name of the EventType ({6e27922d-aa9d-44d1-b9b4-9faf31b6bd97}) of DeviceClass mockDeviceAuto ---------- -The name of the EventType ({863d5920-b1cf-4eb9-88bd-8f7b8583b1cf}) of DeviceClass mock - +The name of the EventType ({863d5920-b1cf-4eb9-88bd-8f7b8583b1cf}) of DeviceClass mock +---------- +The name of the EventType 863d5920-b1cf-4eb9-88bd-8f7b8583b1cf of deviceClass mock +---------- +The name of the EventType 863d5920-b1cf-4eb9-88bd-8f7b8583b1cf of deviceClass mockDeviceAuto + Mock Ereignis 2 mockParamInt The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: event2, ID: {12ed5a15-96b4-4381-9d9c-a24875283d4f}) ---------- -The name of the ParamType (DeviceClass: mock, EventType: event2, ID: {0550e16d-60b9-4ba5-83f4-4d3cee656121}) - +The name of the ParamType (DeviceClass: mock, EventType: event2, ID: {0550e16d-60b9-4ba5-83f4-4d3cee656121}) +---------- +The name of the ParamType (DeviceClass: mock, EventType: mockEvent2, ID: 0550e16d-60b9-4ba5-83f4-4d3cee656121) +---------- +The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: event2, ID: 0550e16d-60b9-4ba5-83f4-4d3cee656121) + mockParameterGanzzahl Mock Device (Auto created) - The name of the DeviceClass ({ab4257b3-7548-47ee-9bd4-7dc3004fd197}) + The name of the DeviceClass ({ab4257b3-7548-47ee-9bd4-7dc3004fd197}) +---------- +The name of the DeviceClass (ab4257b3-7548-47ee-9bd4-7dc3004fd197) Mock Gerät (Automatisch erzeugt) Wait 3 second before you continue, the push button will be pressed automatically. The pairing info of deviceClass mockPushButton - + Warte 3 Sekunden bevor Du fortfährst, der Push-Button wird automatisch gedrückt. Mock Device (Push Button) - The name of the DeviceClass ({9e03144c-e436-4eea-82d9-ccb33ef778db}) - + The name of the DeviceClass ({9e03144c-e436-4eea-82d9-ccb33ef778db}) +---------- +The name of the DeviceClass (9e03144c-e436-4eea-82d9-ccb33ef778db) + Mock Gerät (Push-Button) color changed The name of the EventType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ---------- -The name of the EventType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - +The name of the EventType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton +---------- +The name of the autocreated EventType (DeviceClass: mockPushButton, StateType: color, ID: 20dc7c22-c50e-42db-837c-2bbced939f8e) +---------- +The name of the autocreated EventType (DeviceClass: mockDisplayPin, StateType: color, ID: 20dc7c22-c50e-42db-837c-2bbced939f8e) + Farbe geändert color @@ -249,22 +395,38 @@ The name of the ParamType (DeviceClass: mockPushButton, ActionType: color, ID: { ---------- The name of the ParamType (DeviceClass: mockPushButton, EventType: color, ID: {20dc7c22-c50e-42db-837c-2bbced939f8e}) ---------- -The name of the StateType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - +The name of the StateType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockPushButton, StateType: color, ID: 20dc7c22-c50e-42db-837c-2bbced939f8e +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockPushButton, StateType: color, ID: 20dc7c22-c50e-42db-837c-2bbced939f8e) +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockDisplayPin, StateType: color, ID: 20dc7c22-c50e-42db-837c-2bbced939f8e +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockDisplayPin, StateType: color, ID: 20dc7c22-c50e-42db-837c-2bbced939f8e) + Farbe Set color The name of the ActionType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ---------- -The name of the ActionType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - +The name of the ActionType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton +---------- +The name of the autocreated ActionType (DeviceClass: mockPushButton, StateType: color, ID: 20dc7c22-c50e-42db-837c-2bbced939f8e) +---------- +The name of the autocreated ActionType (DeviceClass: mockDisplayPin, StateType: color, ID: 20dc7c22-c50e-42db-837c-2bbced939f8e) + Setze Farbe percentage changed The name of the EventType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ---------- -The name of the EventType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - +The name of the EventType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton +---------- +The name of the autocreated EventType (DeviceClass: mockPushButton, StateType: percentage, ID: 72981c04-267a-4ba0-a59e-9921d2f3af9c) +---------- +The name of the autocreated EventType (DeviceClass: mockDisplayPin, StateType: percentage, ID: 72981c04-267a-4ba0-a59e-9921d2f3af9c) + Prozent geändert percentage @@ -278,22 +440,38 @@ The name of the ParamType (DeviceClass: mockPushButton, ActionType: percentage, ---------- The name of the ParamType (DeviceClass: mockPushButton, EventType: percentage, ID: {72981c04-267a-4ba0-a59e-9921d2f3af9c}) ---------- -The name of the StateType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - +The name of the StateType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockPushButton, StateType: percentage, ID: 72981c04-267a-4ba0-a59e-9921d2f3af9c +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockPushButton, StateType: percentage, ID: 72981c04-267a-4ba0-a59e-9921d2f3af9c) +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockDisplayPin, StateType: percentage, ID: 72981c04-267a-4ba0-a59e-9921d2f3af9c +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockDisplayPin, StateType: percentage, ID: 72981c04-267a-4ba0-a59e-9921d2f3af9c) + Prozent Set percentage The name of the ActionType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ---------- -The name of the ActionType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - +The name of the ActionType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton +---------- +The name of the autocreated ActionType (DeviceClass: mockPushButton, StateType: percentage, ID: 72981c04-267a-4ba0-a59e-9921d2f3af9c) +---------- +The name of the autocreated ActionType (DeviceClass: mockDisplayPin, StateType: percentage, ID: 72981c04-267a-4ba0-a59e-9921d2f3af9c) + Setze Prozent allowed values changed The name of the EventType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ---------- -The name of the EventType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - +The name of the EventType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton +---------- +The name of the autocreated EventType (DeviceClass: mockPushButton, StateType: allowedValues, ID: 05f63f9c-f61e-4dcf-ad55-3f13fde2765b) +---------- +The name of the autocreated EventType (DeviceClass: mockDisplayPin, StateType: allowedValues, ID: 05f63f9c-f61e-4dcf-ad55-3f13fde2765b) + Mögliche Werte geändert allowed values @@ -307,22 +485,38 @@ The name of the ParamType (DeviceClass: mockPushButton, ActionType: allowedValue ---------- The name of the ParamType (DeviceClass: mockPushButton, EventType: allowedValues, ID: {05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) ---------- -The name of the StateType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - +The name of the StateType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockPushButton, StateType: allowedValues, ID: 05f63f9c-f61e-4dcf-ad55-3f13fde2765b +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockPushButton, StateType: allowedValues, ID: 05f63f9c-f61e-4dcf-ad55-3f13fde2765b) +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockDisplayPin, StateType: allowedValues, ID: 05f63f9c-f61e-4dcf-ad55-3f13fde2765b +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockDisplayPin, StateType: allowedValues, ID: 05f63f9c-f61e-4dcf-ad55-3f13fde2765b) + Mögliche Werte Set allowed values The name of the ActionType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ---------- -The name of the ActionType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - +The name of the ActionType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton +---------- +The name of the autocreated ActionType (DeviceClass: mockPushButton, StateType: allowedValues, ID: 05f63f9c-f61e-4dcf-ad55-3f13fde2765b) +---------- +The name of the autocreated ActionType (DeviceClass: mockDisplayPin, StateType: allowedValues, ID: 05f63f9c-f61e-4dcf-ad55-3f13fde2765b) + Mögliche Werte setzen double value changed The name of the EventType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ---------- -The name of the EventType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - +The name of the EventType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton +---------- +The name of the autocreated EventType (DeviceClass: mockPushButton, StateType: double, ID: 53cd7c55-49b7-441b-b970-9048f20f0e2c) +---------- +The name of the autocreated EventType (DeviceClass: mockDisplayPin, StateType: double, ID: 53cd7c55-49b7-441b-b970-9048f20f0e2c) + Gleitkommazahl geändert double value @@ -336,15 +530,27 @@ The name of the ParamType (DeviceClass: mockPushButton, ActionType: double, ID: ---------- The name of the ParamType (DeviceClass: mockPushButton, EventType: double, ID: {53cd7c55-49b7-441b-b970-9048f20f0e2c}) ---------- -The name of the StateType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - +The name of the StateType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockPushButton, StateType: double, ID: 53cd7c55-49b7-441b-b970-9048f20f0e2c +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockPushButton, StateType: double, ID: 53cd7c55-49b7-441b-b970-9048f20f0e2c) +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockDisplayPin, StateType: double, ID: 53cd7c55-49b7-441b-b970-9048f20f0e2c +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockDisplayPin, StateType: double, ID: 53cd7c55-49b7-441b-b970-9048f20f0e2c) + Gleitkommazahl Set double value The name of the ActionType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ---------- -The name of the ActionType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - +The name of the ActionType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton +---------- +The name of the autocreated ActionType (DeviceClass: mockPushButton, StateType: double, ID: 53cd7c55-49b7-441b-b970-9048f20f0e2c) +---------- +The name of the autocreated ActionType (DeviceClass: mockDisplayPin, StateType: double, ID: 53cd7c55-49b7-441b-b970-9048f20f0e2c) + Setze Gleitkommazahl bool value changed @@ -354,8 +560,16 @@ The name of the EventType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClas ---------- The name of the EventType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ---------- -The name of the EventType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - +The name of the EventType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton +---------- +The name of the autocreated EventType (DeviceClass: mockPushButton, StateType: bool, ID: e680f7a4-b39e-46da-be41-fa3170fe3768) +---------- +The name of the autocreated EventType (DeviceClass: mockDisplayPin, StateType: bool, ID: e680f7a4-b39e-46da-be41-fa3170fe3768) +---------- +The name of the autocreated EventType (DeviceClass: mockParent, StateType: boolValue, ID: d24ede5f-4064-4898-bb84-cfb533b1fbc0) +---------- +The name of the autocreated EventType (DeviceClass: mockChild, StateType: boolValue, ID: d24ede5f-4064-4898-bb84-cfb533b1fbc0) + Boolscher Wert geändert bool value @@ -381,8 +595,24 @@ The name of the ParamType (DeviceClass: mockPushButton, ActionType: bool, ID: {e ---------- The name of the ParamType (DeviceClass: mockPushButton, EventType: bool, ID: {e680f7a4-b39e-46da-be41-fa3170fe3768}) ---------- -The name of the StateType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - +The name of the StateType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockPushButton, StateType: bool, ID: e680f7a4-b39e-46da-be41-fa3170fe3768 +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockPushButton, StateType: bool, ID: e680f7a4-b39e-46da-be41-fa3170fe3768) +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockDisplayPin, StateType: bool, ID: e680f7a4-b39e-46da-be41-fa3170fe3768 +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockDisplayPin, StateType: bool, ID: e680f7a4-b39e-46da-be41-fa3170fe3768) +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockParent, StateType: boolValue, ID: d24ede5f-4064-4898-bb84-cfb533b1fbc0 +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockParent, StateType: boolValue, ID: d24ede5f-4064-4898-bb84-cfb533b1fbc0) +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockChild, StateType: boolValue, ID: d24ede5f-4064-4898-bb84-cfb533b1fbc0 +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockChild, StateType: boolValue, ID: d24ede5f-4064-4898-bb84-cfb533b1fbc0) + Boolscher Wert Set bool value @@ -392,107 +622,153 @@ The name of the ActionType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceCla ---------- The name of the ActionType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ---------- -The name of the ActionType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - +The name of the ActionType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton +---------- +The name of the autocreated ActionType (DeviceClass: mockPushButton, StateType: bool, ID: e680f7a4-b39e-46da-be41-fa3170fe3768) +---------- +The name of the autocreated ActionType (DeviceClass: mockDisplayPin, StateType: bool, ID: e680f7a4-b39e-46da-be41-fa3170fe3768) +---------- +The name of the autocreated ActionType (DeviceClass: mockParent, StateType: boolValue, ID: d24ede5f-4064-4898-bb84-cfb533b1fbc0) +---------- +The name of the autocreated ActionType (DeviceClass: mockChild, StateType: boolValue, ID: d24ede5f-4064-4898-bb84-cfb533b1fbc0) + Setze boolschen Wert Timeout action The name of the ActionType ({854a0a4a-803f-4b7f-9dce-b07794f9011b}) of DeviceClass mockDisplayPin ---------- -The name of the ActionType ({54646e7c-bc54-4895-81a2-590d72d120f9}) of DeviceClass mockPushButton - +The name of the ActionType ({54646e7c-bc54-4895-81a2-590d72d120f9}) of DeviceClass mockPushButton +---------- +The name of the ActionType 54646e7c-bc54-4895-81a2-590d72d120f9 of deviceClass mockPushButton +---------- +The name of the ActionType 54646e7c-bc54-4895-81a2-590d72d120f9 of deviceClass mockDisplayPin + Timeout Aktion Please enter the secret which normaly will be displayed on the device. For the mockdevice the pin is 243681. The pairing info of deviceClass mockDisplayPin - + Bitte gib die PIN ein welche normalerweise am Gerät angezeigt wird. Für dieses Mock Gerät ist die PIN 243681. Mock Device (Display Pin) - The name of the DeviceClass ({296f1fd4-e893-46b2-8a42-50d1bceb8730}) - + The name of the DeviceClass ({296f1fd4-e893-46b2-8a42-50d1bceb8730}) +---------- +The name of the DeviceClass (296f1fd4-e893-46b2-8a42-50d1bceb8730) + Mock Gerät (PIN anzeigen) pin - The name of the ParamType (DeviceClass: mockDisplayPin, Type: device, ID: {da820e07-22dc-4173-9c07-2f49a4e265f9}) - + The name of the ParamType (DeviceClass: mockDisplayPin, Type: device, ID: {da820e07-22dc-4173-9c07-2f49a4e265f9}) +---------- +The name of the ParamType (DeviceClass: mockDisplayPin, Type: device, ID: da820e07-22dc-4173-9c07-2f49a4e265f9) + PIN Mock Device (Parent) - The name of the DeviceClass ({a71fbde9-9a38-4bf8-beab-c8aade2608ba}) - + The name of the DeviceClass ({a71fbde9-9a38-4bf8-beab-c8aade2608ba}) +---------- +The name of the DeviceClass (a71fbde9-9a38-4bf8-beab-c8aade2608ba) + Mock Gerät (Elternteil) Mock Device (Child) - The name of the DeviceClass ({40893c9f-bc47-40c1-8bf7-b390c7c1b4fc}) - + The name of the DeviceClass ({40893c9f-bc47-40c1-8bf7-b390c7c1b4fc}) +---------- +The name of the DeviceClass (40893c9f-bc47-40c1-8bf7-b390c7c1b4fc) + Mock Gerät (Kind) Mock Device (InputTypes) - The name of the DeviceClass ({515ffdf1-55e5-498d-9abc-4e2fe768f3a9}) - + The name of the DeviceClass ({515ffdf1-55e5-498d-9abc-4e2fe768f3a9}) +---------- +The name of the DeviceClass (515ffdf1-55e5-498d-9abc-4e2fe768f3a9) + Mock Gerät (Eingabetypen) Text line - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e6acf0c7-4b8e-4296-ac62-855d20deb816}) - + The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e6acf0c7-4b8e-4296-ac62-855d20deb816}) +---------- +The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: e6acf0c7-4b8e-4296-ac62-855d20deb816) + Textzeile Text area - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {716f0994-bc01-42b0-b64d-59236f7320d2}) - + The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {716f0994-bc01-42b0-b64d-59236f7320d2}) +---------- +The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: 716f0994-bc01-42b0-b64d-59236f7320d2) + Textfeld Password text - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e5c0d14b-c9f1-4aca-a56e-85bfa6977150}) - + The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e5c0d14b-c9f1-4aca-a56e-85bfa6977150}) +---------- +The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: e5c0d14b-c9f1-4aca-a56e-85bfa6977150) + Passwort Text Search text - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {22add8c9-ee4f-43ad-8931-58e999313ac3}) - + The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {22add8c9-ee4f-43ad-8931-58e999313ac3}) +---------- +The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: 22add8c9-ee4f-43ad-8931-58e999313ac3) + Suchtext Mail address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {a8494faf-3a0f-4cf3-84b7-4b39148a838d}) - + The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {a8494faf-3a0f-4cf3-84b7-4b39148a838d}) +---------- +The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: a8494faf-3a0f-4cf3-84b7-4b39148a838d) + E-Mail adresse IPv4 address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {9e5f86a0-4bb3-4892-bff8-3fc4032af6e2}) - + The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {9e5f86a0-4bb3-4892-bff8-3fc4032af6e2}) +---------- +The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: 9e5f86a0-4bb3-4892-bff8-3fc4032af6e2) + IPv4 Adresse IPv6 address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {43bf3832-dd48-4090-a836-656e8b60216e}) - + The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {43bf3832-dd48-4090-a836-656e8b60216e}) +---------- +The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: 43bf3832-dd48-4090-a836-656e8b60216e) + IPv6 Adresse URL - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {fa67229f-fcef-496f-b671-59a4b48f3ab5}) - + The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {fa67229f-fcef-496f-b671-59a4b48f3ab5}) +---------- +The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: fa67229f-fcef-496f-b671-59a4b48f3ab5) + URL Mac address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e93db587-7919-48f3-8c88-1651de63c765}) - + The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e93db587-7919-48f3-8c88-1651de63c765}) +---------- +The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: e93db587-7919-48f3-8c88-1651de63c765) + MAC Adresse Bool changed - The name of the EventType ({3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) of DeviceClass mockInputType - + The name of the EventType ({3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: bool, ID: 3bad3a09-5826-4ed7-a832-10e3e2ee2a7d) + Boolscher Wert geändert Bool The name of the ParamType (DeviceClass: mockInputType, EventType: bool, ID: {3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) ---------- -The name of the StateType ({3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) of DeviceClass mockInputType - +The name of the StateType ({3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: bool, ID: 3bad3a09-5826-4ed7-a832-10e3e2ee2a7d + Boolscher Wert Writable Bool changed - The name of the EventType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - + The name of the EventType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: writableBool, ID: a7c11774-f31f-4d64-99d1-e0ae5fb35a5c) + Schreibbarer Boolscher Wert geändert Writable Bool @@ -500,30 +776,42 @@ The name of the StateType ({3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mockInputType, EventType: writableBool, ID: {a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) ---------- -The name of the StateType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - +The name of the StateType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: writableBool, ID: a7c11774-f31f-4d64-99d1-e0ae5fb35a5c +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockInputType, StateType: writableBool, ID: a7c11774-f31f-4d64-99d1-e0ae5fb35a5c) + Schreibbarer boolscher Wert Set Writable Bool - The name of the ActionType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - + The name of the ActionType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType +---------- +The name of the autocreated ActionType (DeviceClass: mockInputType, StateType: writableBool, ID: a7c11774-f31f-4d64-99d1-e0ae5fb35a5c) + Setze schreibbaren boolschen Wert Int changed - The name of the EventType ({d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) of DeviceClass mockInputType - + The name of the EventType ({d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: int, ID: d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb) + Ganzzahl geändert Int The name of the ParamType (DeviceClass: mockInputType, EventType: int, ID: {d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) ---------- -The name of the StateType ({d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) of DeviceClass mockInputType - +The name of the StateType ({d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: int, ID: d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb + Ganzzahl Writable Int changed - The name of the EventType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - + The name of the EventType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: writableInt, ID: 857a8422-983c-47d6-a15f-d8450b3162f7) + Schreibbare Ganzzahl geändert Writable Int @@ -531,18 +819,26 @@ The name of the StateType ({d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mockInputType, EventType: writableInt, ID: {857a8422-983c-47d6-a15f-d8450b3162f7}) ---------- -The name of the StateType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - +The name of the StateType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: writableInt, ID: 857a8422-983c-47d6-a15f-d8450b3162f7 +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockInputType, StateType: writableInt, ID: 857a8422-983c-47d6-a15f-d8450b3162f7) + Schreibbare Ganzzahl Set Writable Int - The name of the ActionType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - + The name of the ActionType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType +---------- +The name of the autocreated ActionType (DeviceClass: mockInputType, StateType: writableInt, ID: 857a8422-983c-47d6-a15f-d8450b3162f7) + Setze schreibbare Ganzzahl Writable Int (min/max) changed - The name of the EventType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - + The name of the EventType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: writableIntMinMax, ID: 86a107bc-510a-4d38-bfeb-0a9c2b6d8d87) + Schreibbare Ganzzahl (min/max) geändert Writable Int (min/max) @@ -550,29 +846,41 @@ The name of the StateType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mockInputType, EventType: writableIntMinMax, ID: {86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) ---------- -The name of the StateType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - +The name of the StateType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: writableIntMinMax, ID: 86a107bc-510a-4d38-bfeb-0a9c2b6d8d87 +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockInputType, StateType: writableIntMinMax, ID: 86a107bc-510a-4d38-bfeb-0a9c2b6d8d87) + Schreibbare Ganzzahl (min/max) Set Writable Int (min/max) - The name of the ActionType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - + The name of the ActionType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType +---------- +The name of the autocreated ActionType (DeviceClass: mockInputType, StateType: writableIntMinMax, ID: 86a107bc-510a-4d38-bfeb-0a9c2b6d8d87) + Setze schreibbare Ganzzahl (min/max) UInt changed - The name of the EventType ({19e74fcc-bfd5-491f-8eb6-af128e8f1162}) of DeviceClass mockInputType + The name of the EventType ({19e74fcc-bfd5-491f-8eb6-af128e8f1162}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: uint, ID: 19e74fcc-bfd5-491f-8eb6-af128e8f1162) UInt The name of the ParamType (DeviceClass: mockInputType, EventType: uint, ID: {19e74fcc-bfd5-491f-8eb6-af128e8f1162}) ---------- -The name of the StateType ({19e74fcc-bfd5-491f-8eb6-af128e8f1162}) of DeviceClass mockInputType +The name of the StateType ({19e74fcc-bfd5-491f-8eb6-af128e8f1162}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: uint, ID: 19e74fcc-bfd5-491f-8eb6-af128e8f1162 Writable UInt changed - The name of the EventType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType + The name of the EventType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: writableUInt, ID: 563e9c4c-5198-400a-9f6c-358f4752af58) @@ -581,17 +889,25 @@ The name of the StateType ({19e74fcc-bfd5-491f-8eb6-af128e8f1162}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mockInputType, EventType: writableUInt, ID: {563e9c4c-5198-400a-9f6c-358f4752af58}) ---------- -The name of the StateType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType +The name of the StateType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: writableUInt, ID: 563e9c4c-5198-400a-9f6c-358f4752af58 +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockInputType, StateType: writableUInt, ID: 563e9c4c-5198-400a-9f6c-358f4752af58) Set Writable UInt - The name of the ActionType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType + The name of the ActionType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType +---------- +The name of the autocreated ActionType (DeviceClass: mockInputType, StateType: writableUInt, ID: 563e9c4c-5198-400a-9f6c-358f4752af58) Writable UInt (min/max) changed - The name of the EventType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType + The name of the EventType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: writableUIntMinMax, ID: 79238998-eaab-4d71-b406-5d78f1749751) @@ -600,29 +916,41 @@ The name of the StateType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mockInputType, EventType: writableUIntMinMax, ID: {79238998-eaab-4d71-b406-5d78f1749751}) ---------- -The name of the StateType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType +The name of the StateType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: writableUIntMinMax, ID: 79238998-eaab-4d71-b406-5d78f1749751 +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockInputType, StateType: writableUIntMinMax, ID: 79238998-eaab-4d71-b406-5d78f1749751) Set Writable UInt (min/max) - The name of the ActionType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType + The name of the ActionType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType +---------- +The name of the autocreated ActionType (DeviceClass: mockInputType, StateType: writableUIntMinMax, ID: 79238998-eaab-4d71-b406-5d78f1749751) Double changed - The name of the EventType ({f7d2063d-959e-46ac-8568-8b99722d3b22}) of DeviceClass mockInputType + The name of the EventType ({f7d2063d-959e-46ac-8568-8b99722d3b22}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: double, ID: f7d2063d-959e-46ac-8568-8b99722d3b22) Double The name of the ParamType (DeviceClass: mockInputType, EventType: double, ID: {f7d2063d-959e-46ac-8568-8b99722d3b22}) ---------- -The name of the StateType ({f7d2063d-959e-46ac-8568-8b99722d3b22}) of DeviceClass mockInputType +The name of the StateType ({f7d2063d-959e-46ac-8568-8b99722d3b22}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: double, ID: f7d2063d-959e-46ac-8568-8b99722d3b22 Writable Double changed - The name of the EventType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType + The name of the EventType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: writableDouble, ID: 8e2eb91b-d60b-4461-9a50-d7b8ad263170) @@ -631,17 +959,25 @@ The name of the StateType ({f7d2063d-959e-46ac-8568-8b99722d3b22}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mockInputType, EventType: writableDouble, ID: {8e2eb91b-d60b-4461-9a50-d7b8ad263170}) ---------- -The name of the StateType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType +The name of the StateType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: writableDouble, ID: 8e2eb91b-d60b-4461-9a50-d7b8ad263170 +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockInputType, StateType: writableDouble, ID: 8e2eb91b-d60b-4461-9a50-d7b8ad263170) Set Writable Double - The name of the ActionType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType + The name of the ActionType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType +---------- +The name of the autocreated ActionType (DeviceClass: mockInputType, StateType: writableDouble, ID: 8e2eb91b-d60b-4461-9a50-d7b8ad263170) Writable Double (min/max) changed - The name of the EventType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType + The name of the EventType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: writableDoubleMinMax, ID: 00d3425e-1da6-4748-8906-4555ceefb136) @@ -650,29 +986,41 @@ The name of the StateType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mockInputType, EventType: writableDoubleMinMax, ID: {00d3425e-1da6-4748-8906-4555ceefb136}) ---------- -The name of the StateType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType +The name of the StateType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: writableDoubleMinMax, ID: 00d3425e-1da6-4748-8906-4555ceefb136 +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockInputType, StateType: writableDoubleMinMax, ID: 00d3425e-1da6-4748-8906-4555ceefb136) Set Writable Double (min/max) - The name of the ActionType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType + The name of the ActionType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType +---------- +The name of the autocreated ActionType (DeviceClass: mockInputType, StateType: writableDoubleMinMax, ID: 00d3425e-1da6-4748-8906-4555ceefb136) String changed - The name of the EventType ({27f69ca9-a321-40ff-bfee-4b0272a671b4}) of DeviceClass mockInputType + The name of the EventType ({27f69ca9-a321-40ff-bfee-4b0272a671b4}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: string, ID: 27f69ca9-a321-40ff-bfee-4b0272a671b4) String The name of the ParamType (DeviceClass: mockInputType, EventType: string, ID: {27f69ca9-a321-40ff-bfee-4b0272a671b4}) ---------- -The name of the StateType ({27f69ca9-a321-40ff-bfee-4b0272a671b4}) of DeviceClass mockInputType +The name of the StateType ({27f69ca9-a321-40ff-bfee-4b0272a671b4}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: string, ID: 27f69ca9-a321-40ff-bfee-4b0272a671b4 Writable String changed - The name of the EventType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType + The name of the EventType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: writableString, ID: ef511043-bd1a-4a5f-984c-222b7da43f38) @@ -681,17 +1029,25 @@ The name of the StateType ({27f69ca9-a321-40ff-bfee-4b0272a671b4}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mockInputType, EventType: writableString, ID: {ef511043-bd1a-4a5f-984c-222b7da43f38}) ---------- -The name of the StateType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType +The name of the StateType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: writableString, ID: ef511043-bd1a-4a5f-984c-222b7da43f38 +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockInputType, StateType: writableString, ID: ef511043-bd1a-4a5f-984c-222b7da43f38) Set Writable String - The name of the ActionType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType + The name of the ActionType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType +---------- +The name of the autocreated ActionType (DeviceClass: mockInputType, StateType: writableString, ID: ef511043-bd1a-4a5f-984c-222b7da43f38) Writable String (selection) changed - The name of the EventType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType + The name of the EventType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: writableStringSelection, ID: 209d7afc-6fe9-4fe9-939b-e472ea0ad639) @@ -700,29 +1056,41 @@ The name of the StateType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mockInputType, EventType: writableStringSelection, ID: {209d7afc-6fe9-4fe9-939b-e472ea0ad639}) ---------- -The name of the StateType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType +The name of the StateType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: writableStringSelection, ID: 209d7afc-6fe9-4fe9-939b-e472ea0ad639 +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockInputType, StateType: writableStringSelection, ID: 209d7afc-6fe9-4fe9-939b-e472ea0ad639) Set Writable String (selection) - The name of the ActionType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType + The name of the ActionType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType +---------- +The name of the autocreated ActionType (DeviceClass: mockInputType, StateType: writableStringSelection, ID: 209d7afc-6fe9-4fe9-939b-e472ea0ad639) Color changed - The name of the EventType ({4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) of DeviceClass mockInputType + The name of the EventType ({4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: color, ID: 4507d5c6-b692-4bd6-87f2-00364bc0cb4d) Color The name of the ParamType (DeviceClass: mockInputType, EventType: color, ID: {4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) ---------- -The name of the StateType ({4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) of DeviceClass mockInputType +The name of the StateType ({4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: color, ID: 4507d5c6-b692-4bd6-87f2-00364bc0cb4d Writable Color changed - The name of the EventType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType + The name of the EventType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: writableColor, ID: 455f4f68-3cb0-4e8a-a707-62e4a2a8035c) @@ -731,29 +1099,41 @@ The name of the StateType ({4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mockInputType, EventType: writableColor, ID: {455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) ---------- -The name of the StateType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType +The name of the StateType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: writableColor, ID: 455f4f68-3cb0-4e8a-a707-62e4a2a8035c +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockInputType, StateType: writableColor, ID: 455f4f68-3cb0-4e8a-a707-62e4a2a8035c) Set Writable Color - The name of the ActionType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType + The name of the ActionType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType +---------- +The name of the autocreated ActionType (DeviceClass: mockInputType, StateType: writableColor, ID: 455f4f68-3cb0-4e8a-a707-62e4a2a8035c) Time changed - The name of the EventType ({8250c71e-59bc-41ab-b576-99fcfc34e8d1}) of DeviceClass mockInputType + The name of the EventType ({8250c71e-59bc-41ab-b576-99fcfc34e8d1}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: time, ID: 8250c71e-59bc-41ab-b576-99fcfc34e8d1) Time The name of the ParamType (DeviceClass: mockInputType, EventType: time, ID: {8250c71e-59bc-41ab-b576-99fcfc34e8d1}) ---------- -The name of the StateType ({8250c71e-59bc-41ab-b576-99fcfc34e8d1}) of DeviceClass mockInputType +The name of the StateType ({8250c71e-59bc-41ab-b576-99fcfc34e8d1}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: time, ID: 8250c71e-59bc-41ab-b576-99fcfc34e8d1 Writable Time changed - The name of the EventType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType + The name of the EventType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: writableTime, ID: d64c8b3f-ca7d-47f6-b271-867ffd80a4d4) @@ -762,29 +1142,41 @@ The name of the StateType ({8250c71e-59bc-41ab-b576-99fcfc34e8d1}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mockInputType, EventType: writableTime, ID: {d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) ---------- -The name of the StateType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType +The name of the StateType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: writableTime, ID: d64c8b3f-ca7d-47f6-b271-867ffd80a4d4 +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockInputType, StateType: writableTime, ID: d64c8b3f-ca7d-47f6-b271-867ffd80a4d4) Set Writable Time - The name of the ActionType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType + The name of the ActionType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType +---------- +The name of the autocreated ActionType (DeviceClass: mockInputType, StateType: writableTime, ID: d64c8b3f-ca7d-47f6-b271-867ffd80a4d4) Timestamp (Int) changed - The name of the EventType ({2c91b5ef-c2d1-4367-bc65-5a13abf69641}) of DeviceClass mockInputType + The name of the EventType ({2c91b5ef-c2d1-4367-bc65-5a13abf69641}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: timestampInt, ID: 2c91b5ef-c2d1-4367-bc65-5a13abf69641) Timestamp (Int) The name of the ParamType (DeviceClass: mockInputType, EventType: timestampInt, ID: {2c91b5ef-c2d1-4367-bc65-5a13abf69641}) ---------- -The name of the StateType ({2c91b5ef-c2d1-4367-bc65-5a13abf69641}) of DeviceClass mockInputType +The name of the StateType ({2c91b5ef-c2d1-4367-bc65-5a13abf69641}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: timestampInt, ID: 2c91b5ef-c2d1-4367-bc65-5a13abf69641 Writable Timestamp (Int) changed - The name of the EventType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType + The name of the EventType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: writableTimestampInt, ID: 88b6746a-b009-4df6-8986-d7884ffd94b2) @@ -793,29 +1185,41 @@ The name of the StateType ({2c91b5ef-c2d1-4367-bc65-5a13abf69641}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mockInputType, EventType: writableTimestampInt, ID: {88b6746a-b009-4df6-8986-d7884ffd94b2}) ---------- -The name of the StateType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType +The name of the StateType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: writableTimestampInt, ID: 88b6746a-b009-4df6-8986-d7884ffd94b2 +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockInputType, StateType: writableTimestampInt, ID: 88b6746a-b009-4df6-8986-d7884ffd94b2) Set Writable Timestamp (Int) - The name of the ActionType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType + The name of the ActionType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType +---------- +The name of the autocreated ActionType (DeviceClass: mockInputType, StateType: writableTimestampInt, ID: 88b6746a-b009-4df6-8986-d7884ffd94b2) Timestamp (UInt) changed - The name of the EventType ({6c9a96e8-0d48-4f42-8967-848358fd7f79}) of DeviceClass mockInputType + The name of the EventType ({6c9a96e8-0d48-4f42-8967-848358fd7f79}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: timestampUInt, ID: 6c9a96e8-0d48-4f42-8967-848358fd7f79) Timestamp (UInt) The name of the ParamType (DeviceClass: mockInputType, EventType: timestampUInt, ID: {6c9a96e8-0d48-4f42-8967-848358fd7f79}) ---------- -The name of the StateType ({6c9a96e8-0d48-4f42-8967-848358fd7f79}) of DeviceClass mockInputType +The name of the StateType ({6c9a96e8-0d48-4f42-8967-848358fd7f79}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: timestampUInt, ID: 6c9a96e8-0d48-4f42-8967-848358fd7f79 Writable Timestamp (UInt) changed - The name of the EventType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType + The name of the EventType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: writableTimestampUInt, ID: 45d0069a-63ac-4265-8170-8152778608ee) @@ -824,22 +1228,25 @@ The name of the StateType ({6c9a96e8-0d48-4f42-8967-848358fd7f79}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mockInputType, EventType: writableTimestampUInt, ID: {45d0069a-63ac-4265-8170-8152778608ee}) ---------- -The name of the StateType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType +The name of the StateType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: writableTimestampUInt, ID: 45d0069a-63ac-4265-8170-8152778608ee +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockInputType, StateType: writableTimestampUInt, ID: 45d0069a-63ac-4265-8170-8152778608ee) Set Writable Timestamp (UInt) - The name of the ActionType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType + The name of the ActionType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType +---------- +The name of the autocreated ActionType (DeviceClass: mockInputType, StateType: writableTimestampUInt, ID: 45d0069a-63ac-4265-8170-8152778608ee) nymea - The name of the vendor ({2062d64d-3232-433c-88bc-0d33c0ba2ba6}) - - - - Setting 1 - The name of the ParamType (DeviceClass: mock, Type: settings, ID: {367f7ba4-5039-47be-abd8-59cc8eaf4b9a}) + The name of the vendor ({2062d64d-3232-433c-88bc-0d33c0ba2ba6}) +---------- +The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) @@ -847,10 +1254,30 @@ The name of the StateType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClas The name of the Browser Item ActionType ({00b8f0a8-99ca-4aa4-833d-59eb8d4d6de3}) of DeviceClass mock + + Mock Device (Google OAuth) + The name of the DeviceClass ({805d1692-7bd0-449a-9d5c-43a332ff58f4}) + + + + Mock Device (Sonos OAuth) + The name of the DeviceClass ({783c615b-7bd6-49a4-98b0-8d1deb3c7156}) + + + + Mock Device (User & Password) + The name of the DeviceClass ({6fe07a77-9c07-4736-81e2-d504314bbcb9}) + + Remove from favorites The name of the Browser Item ActionType ({da6faef8-2816-430e-93bb-57e8f9582d29}) of DeviceClass mock + + Setting 1 + The name of the ParamType (DeviceClass: mock, Type: settings, ID: {367f7ba4-5039-47be-abd8-59cc8eaf4b9a}) + + diff --git a/plugins/mock/translations/727a4a9a-c187-446f-aadf-f1b2220607d1-en_US.ts b/plugins/mock/translations/727a4a9a-c187-446f-aadf-f1b2220607d1-en_US.ts index 98c36bd3..051aa98a 100644 --- a/plugins/mock/translations/727a4a9a-c187-446f-aadf-f1b2220607d1-en_US.ts +++ b/plugins/mock/translations/727a4a9a-c187-446f-aadf-f1b2220607d1-en_US.ts @@ -4,7 +4,43 @@ DevicePluginMock - Display pin!! The pin is 243681 + This mock device is intentionally broken. + + + + Failed to open HTTP port. Port in use? + + + + Wait 3 second before you continue, the push button will be pressed automatically. + + + + Please enter the secret which normaly will be displayed on the device. For the mockdevice the pin is 243681. + + + + Please enter login credentials for the mock device ("user" and "password"). + + + + The push button has not been pressed. + + + + Invalid PIN! + + + + Wrong username or password + + + + This mock action is intentionally broken. + + + + This device will simulate a push button press in 3 seconds. @@ -12,43 +48,63 @@ mockDevice Mock Devices - The name of the plugin mockDevice ({727a4a9a-c187-446f-aadf-f1b2220607d1}) + The name of the plugin mockDevice ({727a4a9a-c187-446f-aadf-f1b2220607d1}) +---------- +The name of the plugin mockDevice (727a4a9a-c187-446f-aadf-f1b2220607d1) configParamInt - The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: {e1f72121-a426-45e2-b475-8262b5cdf103}) + The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: {e1f72121-a426-45e2-b475-8262b5cdf103}) +---------- +The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: e1f72121-a426-45e2-b475-8262b5cdf103) configParamBool - The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: {c75723b6-ea4f-4982-9751-6c5e39c88145}) + The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: {c75723b6-ea4f-4982-9751-6c5e39c88145}) +---------- +The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: c75723b6-ea4f-4982-9751-6c5e39c88145) Mock Device - The name of the DeviceClass ({753f0d32-0468-4d08-82ed-1964aab03298}) + The name of the DeviceClass ({753f0d32-0468-4d08-82ed-1964aab03298}) +---------- +The name of the DeviceClass (753f0d32-0468-4d08-82ed-1964aab03298) http port The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {bfeb0613-dab6-408c-aa27-c362c921d0d1}) ---------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {d4f06047-125e-4479-9810-b54c189917f5}) +The name of the ParamType (DeviceClass: mock, Type: device, ID: {d4f06047-125e-4479-9810-b54c189917f5}) +---------- +The name of the ParamType (DeviceClass: mock, Type: device, ID: d4f06047-125e-4479-9810-b54c189917f5) +---------- +The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: d4f06047-125e-4479-9810-b54c189917f5) async The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {a5c4315f-0624-4971-87c1-4bbfbfdbd16e}) ---------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {f2977061-4dd0-4ef5-85aa-3b7134743be3}) +The name of the ParamType (DeviceClass: mock, Type: device, ID: {f2977061-4dd0-4ef5-85aa-3b7134743be3}) +---------- +The name of the ParamType (DeviceClass: mock, Type: device, ID: f2977061-4dd0-4ef5-85aa-3b7134743be3) +---------- +The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: f2977061-4dd0-4ef5-85aa-3b7134743be3) broken The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {66179395-ef7a-4013-9fc6-2084104eea09}) ---------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {ae8f8901-f2c1-42a5-8111-6d2fc8e4c1e4}) +The name of the ParamType (DeviceClass: mock, Type: device, ID: {ae8f8901-f2c1-42a5-8111-6d2fc8e4c1e4}) +---------- +The name of the ParamType (DeviceClass: mock, Type: device, ID: ae8f8901-f2c1-42a5-8111-6d2fc8e4c1e4) +---------- +The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: ae8f8901-f2c1-42a5-8111-6d2fc8e4c1e4) @@ -57,14 +113,24 @@ The name of the ParamType (DeviceClass: mock, Type: device, ID: {ae8f8901-f2c1-4 ---------- The name of the ParamType (DeviceClass: mockPushButton, Type: discovery, ID: {c40dbc59-4bba-4871-9b8e-bbd8d5d9193b}) ---------- -The name of the ParamType (DeviceClass: mock, Type: discovery, ID: {d222adb4-2f9c-4c3f-8655-76400d0fb6ce}) +The name of the ParamType (DeviceClass: mock, Type: discovery, ID: {d222adb4-2f9c-4c3f-8655-76400d0fb6ce}) +---------- +The name of the ParamType (DeviceClass: mock, Type: discovery, ID: d222adb4-2f9c-4c3f-8655-76400d0fb6ce) +---------- +The name of the ParamType (DeviceClass: mockPushButton, Type: discovery, ID: d222adb4-2f9c-4c3f-8655-76400d0fb6ce) +---------- +The name of the ParamType (DeviceClass: mockDisplayPin, Type: discovery, ID: d222adb4-2f9c-4c3f-8655-76400d0fb6ce) Dummy int state changed The name of the EventType ({74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) of DeviceClass mockDeviceAuto ---------- -The name of the EventType ({80baec19-54de-4948-ac46-31eabfaceb83}) of DeviceClass mock +The name of the EventType ({80baec19-54de-4948-ac46-31eabfaceb83}) of DeviceClass mock +---------- +The name of the autocreated EventType (DeviceClass: mock, StateType: int, ID: 80baec19-54de-4948-ac46-31eabfaceb83) +---------- +The name of the autocreated EventType (DeviceClass: mockDeviceAuto, StateType: int, ID: 80baec19-54de-4948-ac46-31eabfaceb83) @@ -75,14 +141,22 @@ The name of the StateType ({74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mock, EventType: int, ID: {80baec19-54de-4948-ac46-31eabfaceb83}) ---------- -The name of the StateType ({80baec19-54de-4948-ac46-31eabfaceb83}) of DeviceClass mock +The name of the StateType ({80baec19-54de-4948-ac46-31eabfaceb83}) of DeviceClass mock +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mock, StateType: int, ID: 80baec19-54de-4948-ac46-31eabfaceb83 +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockDeviceAuto, StateType: int, ID: 80baec19-54de-4948-ac46-31eabfaceb83 Dummy bool state changed The name of the EventType ({978b0ba5-d008-41bd-b63d-a3bd23cb6469}) of DeviceClass mockDeviceAuto ---------- -The name of the EventType ({9dd6a97c-dfd1-43dc-acbd-367932742310}) of DeviceClass mock +The name of the EventType ({9dd6a97c-dfd1-43dc-acbd-367932742310}) of DeviceClass mock +---------- +The name of the autocreated EventType (DeviceClass: mock, StateType: bool, ID: 9dd6a97c-dfd1-43dc-acbd-367932742310) +---------- +The name of the autocreated EventType (DeviceClass: mockDeviceAuto, StateType: boolValue, ID: 9dd6a97c-dfd1-43dc-acbd-367932742310) @@ -93,19 +167,27 @@ The name of the StateType ({978b0ba5-d008-41bd-b63d-a3bd23cb6469}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mock, EventType: bool, ID: {9dd6a97c-dfd1-43dc-acbd-367932742310}) ---------- -The name of the StateType ({9dd6a97c-dfd1-43dc-acbd-367932742310}) of DeviceClass mock +The name of the StateType ({9dd6a97c-dfd1-43dc-acbd-367932742310}) of DeviceClass mock +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mock, StateType: bool, ID: 9dd6a97c-dfd1-43dc-acbd-367932742310 +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockDeviceAuto, StateType: boolValue, ID: 9dd6a97c-dfd1-43dc-acbd-367932742310 Dummy double state changed - The name of the EventType ({7cac53ee-7048-4dc9-b000-7b585390f34c}) of DeviceClass mock + The name of the EventType ({7cac53ee-7048-4dc9-b000-7b585390f34c}) of DeviceClass mock +---------- +The name of the autocreated EventType (DeviceClass: mock, StateType: double, ID: 7cac53ee-7048-4dc9-b000-7b585390f34c) Dummy double state The name of the ParamType (DeviceClass: mock, EventType: double, ID: {7cac53ee-7048-4dc9-b000-7b585390f34c}) ---------- -The name of the StateType ({7cac53ee-7048-4dc9-b000-7b585390f34c}) of DeviceClass mock +The name of the StateType ({7cac53ee-7048-4dc9-b000-7b585390f34c}) of DeviceClass mock +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mock, StateType: double, ID: 7cac53ee-7048-4dc9-b000-7b585390f34c @@ -114,7 +196,11 @@ The name of the StateType ({7cac53ee-7048-4dc9-b000-7b585390f34c}) of DeviceClas ---------- The name of the EventType ({6c8ab9a6-0164-4795-b829-f4394fe4edc4}) of DeviceClass mock ---------- -The name of the StateType ({6c8ab9a6-0164-4795-b829-f4394fe4edc4}) of DeviceClass mock +The name of the StateType ({6c8ab9a6-0164-4795-b829-f4394fe4edc4}) of DeviceClass mock +---------- +The name of the autocreated EventType (DeviceClass: mock, StateType: batteryLevel, ID: 6c8ab9a6-0164-4795-b829-f4394fe4edc4) +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mock, StateType: batteryLevel, ID: 6c8ab9a6-0164-4795-b829-f4394fe4edc4 @@ -123,12 +209,18 @@ The name of the StateType ({6c8ab9a6-0164-4795-b829-f4394fe4edc4}) of DeviceClas ---------- The name of the EventType ({580bc611-1a55-41f3-996f-8d3ccf543db3}) of DeviceClass mock ---------- -The name of the StateType ({580bc611-1a55-41f3-996f-8d3ccf543db3}) of DeviceClass mock +The name of the StateType ({580bc611-1a55-41f3-996f-8d3ccf543db3}) of DeviceClass mock +---------- +The name of the autocreated EventType (DeviceClass: mock, StateType: batteryCritical, ID: 580bc611-1a55-41f3-996f-8d3ccf543db3) +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mock, StateType: batteryCritical, ID: 580bc611-1a55-41f3-996f-8d3ccf543db3 powered changed - The name of the EventType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock + The name of the EventType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock +---------- +The name of the autocreated EventType (DeviceClass: mock, StateType: power, ID: 064aed0d-da4c-49d4-b236-60f97e98ff84) @@ -137,87 +229,135 @@ The name of the StateType ({580bc611-1a55-41f3-996f-8d3ccf543db3}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mock, EventType: power, ID: {064aed0d-da4c-49d4-b236-60f97e98ff84}) ---------- -The name of the StateType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock +The name of the StateType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mock, StateType: power, ID: 064aed0d-da4c-49d4-b236-60f97e98ff84 +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mock, StateType: power, ID: 064aed0d-da4c-49d4-b236-60f97e98ff84) set power - The name of the ActionType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock + The name of the ActionType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock +---------- +The name of the autocreated ActionType (DeviceClass: mock, StateType: power, ID: 064aed0d-da4c-49d4-b236-60f97e98ff84) Mock Action 1 (with params) The name of the ActionType ({00000000-0000-0000-0000-000000000000}) of DeviceClass mockDeviceAuto ---------- -The name of the ActionType ({dea0f4e1-65e3-4981-8eaa-2701c53a9185}) of DeviceClass mock +The name of the ActionType ({dea0f4e1-65e3-4981-8eaa-2701c53a9185}) of DeviceClass mock +---------- +The name of the ActionType dea0f4e1-65e3-4981-8eaa-2701c53a9185 of deviceClass mock +---------- +The name of the ActionType dea0f4e1-65e3-4981-8eaa-2701c53a9185 of deviceClass mockDeviceAuto mockActionParam1 The name of the ParamType (DeviceClass: mockDeviceAuto, ActionType: withParams, ID: {b8126ba6-3a54-45a3-be4d-63feb0ddb77b}) ---------- -The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: {a2d3a256-a551-4712-a65b-ecd5a436a1cb}) +The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: {a2d3a256-a551-4712-a65b-ecd5a436a1cb}) +---------- +The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: a2d3a256-a551-4712-a65b-ecd5a436a1cb) +---------- +The name of the ParamType (DeviceClass: mockDeviceAuto, ActionType: withParams, ID: a2d3a256-a551-4712-a65b-ecd5a436a1cb) mockActionParam2 The name of the ParamType (DeviceClass: mockDeviceAuto, ActionType: withParams, ID: {df41ba71-e43b-4854-91d1-b19d8066d4f9}) ---------- -The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: {304a4899-18be-4e3b-94f4-d03be52f3233}) +The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: {304a4899-18be-4e3b-94f4-d03be52f3233}) +---------- +The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: 304a4899-18be-4e3b-94f4-d03be52f3233) +---------- +The name of the ParamType (DeviceClass: mockDeviceAuto, ActionType: withParams, ID: 304a4899-18be-4e3b-94f4-d03be52f3233) Mock Action 2 (without params) The name of the ActionType ({ef518d53-50e2-4ca5-a4b1-e9a8b9309d44}) of DeviceClass mockDeviceAuto ---------- -The name of the ActionType ({defd3ed6-1a0d-400b-8879-a0202cf39935}) of DeviceClass mock +The name of the ActionType ({defd3ed6-1a0d-400b-8879-a0202cf39935}) of DeviceClass mock +---------- +The name of the ActionType defd3ed6-1a0d-400b-8879-a0202cf39935 of deviceClass mock +---------- +The name of the ActionType defd3ed6-1a0d-400b-8879-a0202cf39935 of deviceClass mockDeviceAuto Mock Action 3 (async) The name of the ActionType ({5f27a9f2-59cd-4a15-98bd-6ed6e10bc6ed}) of DeviceClass mockDeviceAuto ---------- -The name of the ActionType ({fbae06d3-7666-483e-a39e-ec50fe89054e}) of DeviceClass mock +The name of the ActionType ({fbae06d3-7666-483e-a39e-ec50fe89054e}) of DeviceClass mock +---------- +The name of the ActionType fbae06d3-7666-483e-a39e-ec50fe89054e of deviceClass mock +---------- +The name of the ActionType fbae06d3-7666-483e-a39e-ec50fe89054e of deviceClass mockDeviceAuto Mock Action 4 (broken) The name of the ActionType ({58a61de4-472c-4775-8fe8-583a9c83fcf1}) of DeviceClass mockDeviceAuto ---------- -The name of the ActionType ({df3cf33d-26d5-4577-9132-9823bd33fad0}) of DeviceClass mock +The name of the ActionType ({df3cf33d-26d5-4577-9132-9823bd33fad0}) of DeviceClass mock +---------- +The name of the ActionType df3cf33d-26d5-4577-9132-9823bd33fad0 of deviceClass mock +---------- +The name of the ActionType df3cf33d-26d5-4577-9132-9823bd33fad0 of deviceClass mockDeviceAuto Mock Action 5 (async, broken) The name of the ActionType ({17ad52dd-ef2f-4947-9b73-5bf6e172a9d0}) of DeviceClass mockDeviceAuto ---------- -The name of the ActionType ({bfe89a1d-3497-4121-8318-e77c37537219}) of DeviceClass mock +The name of the ActionType ({bfe89a1d-3497-4121-8318-e77c37537219}) of DeviceClass mock +---------- +The name of the ActionType bfe89a1d-3497-4121-8318-e77c37537219 of deviceClass mock +---------- +The name of the ActionType bfe89a1d-3497-4121-8318-e77c37537219 of deviceClass mockDeviceAuto Mock Event 1 The name of the EventType ({00f81fca-26f1-4a84-aa2b-4c6a3d953ec6}) of DeviceClass mockDeviceAuto ---------- -The name of the EventType ({45bf3752-0fc6-46b9-89fd-ffd878b5b22b}) of DeviceClass mock +The name of the EventType ({45bf3752-0fc6-46b9-89fd-ffd878b5b22b}) of DeviceClass mock +---------- +The name of the EventType 45bf3752-0fc6-46b9-89fd-ffd878b5b22b of deviceClass mock +---------- +The name of the EventType 45bf3752-0fc6-46b9-89fd-ffd878b5b22b of deviceClass mockDeviceAuto Mock Event 2 The name of the EventType ({6e27922d-aa9d-44d1-b9b4-9faf31b6bd97}) of DeviceClass mockDeviceAuto ---------- -The name of the EventType ({863d5920-b1cf-4eb9-88bd-8f7b8583b1cf}) of DeviceClass mock +The name of the EventType ({863d5920-b1cf-4eb9-88bd-8f7b8583b1cf}) of DeviceClass mock +---------- +The name of the EventType 863d5920-b1cf-4eb9-88bd-8f7b8583b1cf of deviceClass mock +---------- +The name of the EventType 863d5920-b1cf-4eb9-88bd-8f7b8583b1cf of deviceClass mockDeviceAuto mockParamInt The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: event2, ID: {12ed5a15-96b4-4381-9d9c-a24875283d4f}) ---------- -The name of the ParamType (DeviceClass: mock, EventType: event2, ID: {0550e16d-60b9-4ba5-83f4-4d3cee656121}) +The name of the ParamType (DeviceClass: mock, EventType: event2, ID: {0550e16d-60b9-4ba5-83f4-4d3cee656121}) +---------- +The name of the ParamType (DeviceClass: mock, EventType: mockEvent2, ID: 0550e16d-60b9-4ba5-83f4-4d3cee656121) +---------- +The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: event2, ID: 0550e16d-60b9-4ba5-83f4-4d3cee656121) Mock Device (Auto created) - The name of the DeviceClass ({ab4257b3-7548-47ee-9bd4-7dc3004fd197}) + The name of the DeviceClass ({ab4257b3-7548-47ee-9bd4-7dc3004fd197}) +---------- +The name of the DeviceClass (ab4257b3-7548-47ee-9bd4-7dc3004fd197) @@ -227,14 +367,20 @@ The name of the ParamType (DeviceClass: mock, EventType: event2, ID: {0550e16d-6 Mock Device (Push Button) - The name of the DeviceClass ({9e03144c-e436-4eea-82d9-ccb33ef778db}) + The name of the DeviceClass ({9e03144c-e436-4eea-82d9-ccb33ef778db}) +---------- +The name of the DeviceClass (9e03144c-e436-4eea-82d9-ccb33ef778db) color changed The name of the EventType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ---------- -The name of the EventType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton +The name of the EventType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton +---------- +The name of the autocreated EventType (DeviceClass: mockPushButton, StateType: color, ID: 20dc7c22-c50e-42db-837c-2bbced939f8e) +---------- +The name of the autocreated EventType (DeviceClass: mockDisplayPin, StateType: color, ID: 20dc7c22-c50e-42db-837c-2bbced939f8e) @@ -249,21 +395,37 @@ The name of the ParamType (DeviceClass: mockPushButton, ActionType: color, ID: { ---------- The name of the ParamType (DeviceClass: mockPushButton, EventType: color, ID: {20dc7c22-c50e-42db-837c-2bbced939f8e}) ---------- -The name of the StateType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton +The name of the StateType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockPushButton, StateType: color, ID: 20dc7c22-c50e-42db-837c-2bbced939f8e +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockPushButton, StateType: color, ID: 20dc7c22-c50e-42db-837c-2bbced939f8e) +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockDisplayPin, StateType: color, ID: 20dc7c22-c50e-42db-837c-2bbced939f8e +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockDisplayPin, StateType: color, ID: 20dc7c22-c50e-42db-837c-2bbced939f8e) Set color The name of the ActionType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ---------- -The name of the ActionType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton +The name of the ActionType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton +---------- +The name of the autocreated ActionType (DeviceClass: mockPushButton, StateType: color, ID: 20dc7c22-c50e-42db-837c-2bbced939f8e) +---------- +The name of the autocreated ActionType (DeviceClass: mockDisplayPin, StateType: color, ID: 20dc7c22-c50e-42db-837c-2bbced939f8e) percentage changed The name of the EventType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ---------- -The name of the EventType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton +The name of the EventType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton +---------- +The name of the autocreated EventType (DeviceClass: mockPushButton, StateType: percentage, ID: 72981c04-267a-4ba0-a59e-9921d2f3af9c) +---------- +The name of the autocreated EventType (DeviceClass: mockDisplayPin, StateType: percentage, ID: 72981c04-267a-4ba0-a59e-9921d2f3af9c) @@ -278,21 +440,37 @@ The name of the ParamType (DeviceClass: mockPushButton, ActionType: percentage, ---------- The name of the ParamType (DeviceClass: mockPushButton, EventType: percentage, ID: {72981c04-267a-4ba0-a59e-9921d2f3af9c}) ---------- -The name of the StateType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton +The name of the StateType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockPushButton, StateType: percentage, ID: 72981c04-267a-4ba0-a59e-9921d2f3af9c +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockPushButton, StateType: percentage, ID: 72981c04-267a-4ba0-a59e-9921d2f3af9c) +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockDisplayPin, StateType: percentage, ID: 72981c04-267a-4ba0-a59e-9921d2f3af9c +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockDisplayPin, StateType: percentage, ID: 72981c04-267a-4ba0-a59e-9921d2f3af9c) Set percentage The name of the ActionType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ---------- -The name of the ActionType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton +The name of the ActionType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton +---------- +The name of the autocreated ActionType (DeviceClass: mockPushButton, StateType: percentage, ID: 72981c04-267a-4ba0-a59e-9921d2f3af9c) +---------- +The name of the autocreated ActionType (DeviceClass: mockDisplayPin, StateType: percentage, ID: 72981c04-267a-4ba0-a59e-9921d2f3af9c) allowed values changed The name of the EventType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ---------- -The name of the EventType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton +The name of the EventType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton +---------- +The name of the autocreated EventType (DeviceClass: mockPushButton, StateType: allowedValues, ID: 05f63f9c-f61e-4dcf-ad55-3f13fde2765b) +---------- +The name of the autocreated EventType (DeviceClass: mockDisplayPin, StateType: allowedValues, ID: 05f63f9c-f61e-4dcf-ad55-3f13fde2765b) @@ -307,21 +485,37 @@ The name of the ParamType (DeviceClass: mockPushButton, ActionType: allowedValue ---------- The name of the ParamType (DeviceClass: mockPushButton, EventType: allowedValues, ID: {05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) ---------- -The name of the StateType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton +The name of the StateType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockPushButton, StateType: allowedValues, ID: 05f63f9c-f61e-4dcf-ad55-3f13fde2765b +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockPushButton, StateType: allowedValues, ID: 05f63f9c-f61e-4dcf-ad55-3f13fde2765b) +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockDisplayPin, StateType: allowedValues, ID: 05f63f9c-f61e-4dcf-ad55-3f13fde2765b +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockDisplayPin, StateType: allowedValues, ID: 05f63f9c-f61e-4dcf-ad55-3f13fde2765b) Set allowed values The name of the ActionType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ---------- -The name of the ActionType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton +The name of the ActionType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton +---------- +The name of the autocreated ActionType (DeviceClass: mockPushButton, StateType: allowedValues, ID: 05f63f9c-f61e-4dcf-ad55-3f13fde2765b) +---------- +The name of the autocreated ActionType (DeviceClass: mockDisplayPin, StateType: allowedValues, ID: 05f63f9c-f61e-4dcf-ad55-3f13fde2765b) double value changed The name of the EventType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ---------- -The name of the EventType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton +The name of the EventType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton +---------- +The name of the autocreated EventType (DeviceClass: mockPushButton, StateType: double, ID: 53cd7c55-49b7-441b-b970-9048f20f0e2c) +---------- +The name of the autocreated EventType (DeviceClass: mockDisplayPin, StateType: double, ID: 53cd7c55-49b7-441b-b970-9048f20f0e2c) @@ -336,14 +530,26 @@ The name of the ParamType (DeviceClass: mockPushButton, ActionType: double, ID: ---------- The name of the ParamType (DeviceClass: mockPushButton, EventType: double, ID: {53cd7c55-49b7-441b-b970-9048f20f0e2c}) ---------- -The name of the StateType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton +The name of the StateType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockPushButton, StateType: double, ID: 53cd7c55-49b7-441b-b970-9048f20f0e2c +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockPushButton, StateType: double, ID: 53cd7c55-49b7-441b-b970-9048f20f0e2c) +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockDisplayPin, StateType: double, ID: 53cd7c55-49b7-441b-b970-9048f20f0e2c +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockDisplayPin, StateType: double, ID: 53cd7c55-49b7-441b-b970-9048f20f0e2c) Set double value The name of the ActionType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ---------- -The name of the ActionType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton +The name of the ActionType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton +---------- +The name of the autocreated ActionType (DeviceClass: mockPushButton, StateType: double, ID: 53cd7c55-49b7-441b-b970-9048f20f0e2c) +---------- +The name of the autocreated ActionType (DeviceClass: mockDisplayPin, StateType: double, ID: 53cd7c55-49b7-441b-b970-9048f20f0e2c) @@ -354,7 +560,15 @@ The name of the EventType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClas ---------- The name of the EventType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ---------- -The name of the EventType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton +The name of the EventType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton +---------- +The name of the autocreated EventType (DeviceClass: mockPushButton, StateType: bool, ID: e680f7a4-b39e-46da-be41-fa3170fe3768) +---------- +The name of the autocreated EventType (DeviceClass: mockDisplayPin, StateType: bool, ID: e680f7a4-b39e-46da-be41-fa3170fe3768) +---------- +The name of the autocreated EventType (DeviceClass: mockParent, StateType: boolValue, ID: d24ede5f-4064-4898-bb84-cfb533b1fbc0) +---------- +The name of the autocreated EventType (DeviceClass: mockChild, StateType: boolValue, ID: d24ede5f-4064-4898-bb84-cfb533b1fbc0) @@ -381,7 +595,23 @@ The name of the ParamType (DeviceClass: mockPushButton, ActionType: bool, ID: {e ---------- The name of the ParamType (DeviceClass: mockPushButton, EventType: bool, ID: {e680f7a4-b39e-46da-be41-fa3170fe3768}) ---------- -The name of the StateType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton +The name of the StateType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockPushButton, StateType: bool, ID: e680f7a4-b39e-46da-be41-fa3170fe3768 +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockPushButton, StateType: bool, ID: e680f7a4-b39e-46da-be41-fa3170fe3768) +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockDisplayPin, StateType: bool, ID: e680f7a4-b39e-46da-be41-fa3170fe3768 +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockDisplayPin, StateType: bool, ID: e680f7a4-b39e-46da-be41-fa3170fe3768) +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockParent, StateType: boolValue, ID: d24ede5f-4064-4898-bb84-cfb533b1fbc0 +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockParent, StateType: boolValue, ID: d24ede5f-4064-4898-bb84-cfb533b1fbc0) +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockChild, StateType: boolValue, ID: d24ede5f-4064-4898-bb84-cfb533b1fbc0 +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockChild, StateType: boolValue, ID: d24ede5f-4064-4898-bb84-cfb533b1fbc0) @@ -392,14 +622,26 @@ The name of the ActionType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceCla ---------- The name of the ActionType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ---------- -The name of the ActionType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton +The name of the ActionType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton +---------- +The name of the autocreated ActionType (DeviceClass: mockPushButton, StateType: bool, ID: e680f7a4-b39e-46da-be41-fa3170fe3768) +---------- +The name of the autocreated ActionType (DeviceClass: mockDisplayPin, StateType: bool, ID: e680f7a4-b39e-46da-be41-fa3170fe3768) +---------- +The name of the autocreated ActionType (DeviceClass: mockParent, StateType: boolValue, ID: d24ede5f-4064-4898-bb84-cfb533b1fbc0) +---------- +The name of the autocreated ActionType (DeviceClass: mockChild, StateType: boolValue, ID: d24ede5f-4064-4898-bb84-cfb533b1fbc0) Timeout action The name of the ActionType ({854a0a4a-803f-4b7f-9dce-b07794f9011b}) of DeviceClass mockDisplayPin ---------- -The name of the ActionType ({54646e7c-bc54-4895-81a2-590d72d120f9}) of DeviceClass mockPushButton +The name of the ActionType ({54646e7c-bc54-4895-81a2-590d72d120f9}) of DeviceClass mockPushButton +---------- +The name of the ActionType 54646e7c-bc54-4895-81a2-590d72d120f9 of deviceClass mockPushButton +---------- +The name of the ActionType 54646e7c-bc54-4895-81a2-590d72d120f9 of deviceClass mockDisplayPin @@ -409,89 +651,123 @@ The name of the ActionType ({54646e7c-bc54-4895-81a2-590d72d120f9}) of DeviceCla Mock Device (Display Pin) - The name of the DeviceClass ({296f1fd4-e893-46b2-8a42-50d1bceb8730}) + The name of the DeviceClass ({296f1fd4-e893-46b2-8a42-50d1bceb8730}) +---------- +The name of the DeviceClass (296f1fd4-e893-46b2-8a42-50d1bceb8730) pin - The name of the ParamType (DeviceClass: mockDisplayPin, Type: device, ID: {da820e07-22dc-4173-9c07-2f49a4e265f9}) + The name of the ParamType (DeviceClass: mockDisplayPin, Type: device, ID: {da820e07-22dc-4173-9c07-2f49a4e265f9}) +---------- +The name of the ParamType (DeviceClass: mockDisplayPin, Type: device, ID: da820e07-22dc-4173-9c07-2f49a4e265f9) Mock Device (Parent) - The name of the DeviceClass ({a71fbde9-9a38-4bf8-beab-c8aade2608ba}) + The name of the DeviceClass ({a71fbde9-9a38-4bf8-beab-c8aade2608ba}) +---------- +The name of the DeviceClass (a71fbde9-9a38-4bf8-beab-c8aade2608ba) Mock Device (Child) - The name of the DeviceClass ({40893c9f-bc47-40c1-8bf7-b390c7c1b4fc}) + The name of the DeviceClass ({40893c9f-bc47-40c1-8bf7-b390c7c1b4fc}) +---------- +The name of the DeviceClass (40893c9f-bc47-40c1-8bf7-b390c7c1b4fc) Mock Device (InputTypes) - The name of the DeviceClass ({515ffdf1-55e5-498d-9abc-4e2fe768f3a9}) + The name of the DeviceClass ({515ffdf1-55e5-498d-9abc-4e2fe768f3a9}) +---------- +The name of the DeviceClass (515ffdf1-55e5-498d-9abc-4e2fe768f3a9) Text line - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e6acf0c7-4b8e-4296-ac62-855d20deb816}) + The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e6acf0c7-4b8e-4296-ac62-855d20deb816}) +---------- +The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: e6acf0c7-4b8e-4296-ac62-855d20deb816) Text area - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {716f0994-bc01-42b0-b64d-59236f7320d2}) + The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {716f0994-bc01-42b0-b64d-59236f7320d2}) +---------- +The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: 716f0994-bc01-42b0-b64d-59236f7320d2) Password text - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e5c0d14b-c9f1-4aca-a56e-85bfa6977150}) + The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e5c0d14b-c9f1-4aca-a56e-85bfa6977150}) +---------- +The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: e5c0d14b-c9f1-4aca-a56e-85bfa6977150) Search text - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {22add8c9-ee4f-43ad-8931-58e999313ac3}) + The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {22add8c9-ee4f-43ad-8931-58e999313ac3}) +---------- +The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: 22add8c9-ee4f-43ad-8931-58e999313ac3) Mail address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {a8494faf-3a0f-4cf3-84b7-4b39148a838d}) + The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {a8494faf-3a0f-4cf3-84b7-4b39148a838d}) +---------- +The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: a8494faf-3a0f-4cf3-84b7-4b39148a838d) IPv4 address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {9e5f86a0-4bb3-4892-bff8-3fc4032af6e2}) + The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {9e5f86a0-4bb3-4892-bff8-3fc4032af6e2}) +---------- +The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: 9e5f86a0-4bb3-4892-bff8-3fc4032af6e2) IPv6 address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {43bf3832-dd48-4090-a836-656e8b60216e}) + The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {43bf3832-dd48-4090-a836-656e8b60216e}) +---------- +The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: 43bf3832-dd48-4090-a836-656e8b60216e) URL - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {fa67229f-fcef-496f-b671-59a4b48f3ab5}) + The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {fa67229f-fcef-496f-b671-59a4b48f3ab5}) +---------- +The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: fa67229f-fcef-496f-b671-59a4b48f3ab5) Mac address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e93db587-7919-48f3-8c88-1651de63c765}) + The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e93db587-7919-48f3-8c88-1651de63c765}) +---------- +The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: e93db587-7919-48f3-8c88-1651de63c765) Bool changed - The name of the EventType ({3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) of DeviceClass mockInputType + The name of the EventType ({3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: bool, ID: 3bad3a09-5826-4ed7-a832-10e3e2ee2a7d) Bool The name of the ParamType (DeviceClass: mockInputType, EventType: bool, ID: {3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) ---------- -The name of the StateType ({3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) of DeviceClass mockInputType +The name of the StateType ({3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: bool, ID: 3bad3a09-5826-4ed7-a832-10e3e2ee2a7d Writable Bool changed - The name of the EventType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType + The name of the EventType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: writableBool, ID: a7c11774-f31f-4d64-99d1-e0ae5fb35a5c) @@ -500,29 +776,41 @@ The name of the StateType ({3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mockInputType, EventType: writableBool, ID: {a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) ---------- -The name of the StateType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType +The name of the StateType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: writableBool, ID: a7c11774-f31f-4d64-99d1-e0ae5fb35a5c +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockInputType, StateType: writableBool, ID: a7c11774-f31f-4d64-99d1-e0ae5fb35a5c) Set Writable Bool - The name of the ActionType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType + The name of the ActionType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType +---------- +The name of the autocreated ActionType (DeviceClass: mockInputType, StateType: writableBool, ID: a7c11774-f31f-4d64-99d1-e0ae5fb35a5c) Int changed - The name of the EventType ({d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) of DeviceClass mockInputType + The name of the EventType ({d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: int, ID: d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb) Int The name of the ParamType (DeviceClass: mockInputType, EventType: int, ID: {d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) ---------- -The name of the StateType ({d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) of DeviceClass mockInputType +The name of the StateType ({d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: int, ID: d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb Writable Int changed - The name of the EventType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType + The name of the EventType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: writableInt, ID: 857a8422-983c-47d6-a15f-d8450b3162f7) @@ -531,17 +819,25 @@ The name of the StateType ({d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mockInputType, EventType: writableInt, ID: {857a8422-983c-47d6-a15f-d8450b3162f7}) ---------- -The name of the StateType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType +The name of the StateType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: writableInt, ID: 857a8422-983c-47d6-a15f-d8450b3162f7 +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockInputType, StateType: writableInt, ID: 857a8422-983c-47d6-a15f-d8450b3162f7) Set Writable Int - The name of the ActionType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType + The name of the ActionType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType +---------- +The name of the autocreated ActionType (DeviceClass: mockInputType, StateType: writableInt, ID: 857a8422-983c-47d6-a15f-d8450b3162f7) Writable Int (min/max) changed - The name of the EventType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType + The name of the EventType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: writableIntMinMax, ID: 86a107bc-510a-4d38-bfeb-0a9c2b6d8d87) @@ -550,29 +846,41 @@ The name of the StateType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mockInputType, EventType: writableIntMinMax, ID: {86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) ---------- -The name of the StateType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType +The name of the StateType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: writableIntMinMax, ID: 86a107bc-510a-4d38-bfeb-0a9c2b6d8d87 +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockInputType, StateType: writableIntMinMax, ID: 86a107bc-510a-4d38-bfeb-0a9c2b6d8d87) Set Writable Int (min/max) - The name of the ActionType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType + The name of the ActionType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType +---------- +The name of the autocreated ActionType (DeviceClass: mockInputType, StateType: writableIntMinMax, ID: 86a107bc-510a-4d38-bfeb-0a9c2b6d8d87) UInt changed - The name of the EventType ({19e74fcc-bfd5-491f-8eb6-af128e8f1162}) of DeviceClass mockInputType + The name of the EventType ({19e74fcc-bfd5-491f-8eb6-af128e8f1162}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: uint, ID: 19e74fcc-bfd5-491f-8eb6-af128e8f1162) UInt The name of the ParamType (DeviceClass: mockInputType, EventType: uint, ID: {19e74fcc-bfd5-491f-8eb6-af128e8f1162}) ---------- -The name of the StateType ({19e74fcc-bfd5-491f-8eb6-af128e8f1162}) of DeviceClass mockInputType +The name of the StateType ({19e74fcc-bfd5-491f-8eb6-af128e8f1162}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: uint, ID: 19e74fcc-bfd5-491f-8eb6-af128e8f1162 Writable UInt changed - The name of the EventType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType + The name of the EventType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: writableUInt, ID: 563e9c4c-5198-400a-9f6c-358f4752af58) @@ -581,17 +889,25 @@ The name of the StateType ({19e74fcc-bfd5-491f-8eb6-af128e8f1162}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mockInputType, EventType: writableUInt, ID: {563e9c4c-5198-400a-9f6c-358f4752af58}) ---------- -The name of the StateType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType +The name of the StateType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: writableUInt, ID: 563e9c4c-5198-400a-9f6c-358f4752af58 +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockInputType, StateType: writableUInt, ID: 563e9c4c-5198-400a-9f6c-358f4752af58) Set Writable UInt - The name of the ActionType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType + The name of the ActionType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType +---------- +The name of the autocreated ActionType (DeviceClass: mockInputType, StateType: writableUInt, ID: 563e9c4c-5198-400a-9f6c-358f4752af58) Writable UInt (min/max) changed - The name of the EventType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType + The name of the EventType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: writableUIntMinMax, ID: 79238998-eaab-4d71-b406-5d78f1749751) @@ -600,29 +916,41 @@ The name of the StateType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mockInputType, EventType: writableUIntMinMax, ID: {79238998-eaab-4d71-b406-5d78f1749751}) ---------- -The name of the StateType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType +The name of the StateType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: writableUIntMinMax, ID: 79238998-eaab-4d71-b406-5d78f1749751 +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockInputType, StateType: writableUIntMinMax, ID: 79238998-eaab-4d71-b406-5d78f1749751) Set Writable UInt (min/max) - The name of the ActionType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType + The name of the ActionType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType +---------- +The name of the autocreated ActionType (DeviceClass: mockInputType, StateType: writableUIntMinMax, ID: 79238998-eaab-4d71-b406-5d78f1749751) Double changed - The name of the EventType ({f7d2063d-959e-46ac-8568-8b99722d3b22}) of DeviceClass mockInputType + The name of the EventType ({f7d2063d-959e-46ac-8568-8b99722d3b22}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: double, ID: f7d2063d-959e-46ac-8568-8b99722d3b22) Double The name of the ParamType (DeviceClass: mockInputType, EventType: double, ID: {f7d2063d-959e-46ac-8568-8b99722d3b22}) ---------- -The name of the StateType ({f7d2063d-959e-46ac-8568-8b99722d3b22}) of DeviceClass mockInputType +The name of the StateType ({f7d2063d-959e-46ac-8568-8b99722d3b22}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: double, ID: f7d2063d-959e-46ac-8568-8b99722d3b22 Writable Double changed - The name of the EventType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType + The name of the EventType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: writableDouble, ID: 8e2eb91b-d60b-4461-9a50-d7b8ad263170) @@ -631,17 +959,25 @@ The name of the StateType ({f7d2063d-959e-46ac-8568-8b99722d3b22}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mockInputType, EventType: writableDouble, ID: {8e2eb91b-d60b-4461-9a50-d7b8ad263170}) ---------- -The name of the StateType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType +The name of the StateType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: writableDouble, ID: 8e2eb91b-d60b-4461-9a50-d7b8ad263170 +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockInputType, StateType: writableDouble, ID: 8e2eb91b-d60b-4461-9a50-d7b8ad263170) Set Writable Double - The name of the ActionType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType + The name of the ActionType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType +---------- +The name of the autocreated ActionType (DeviceClass: mockInputType, StateType: writableDouble, ID: 8e2eb91b-d60b-4461-9a50-d7b8ad263170) Writable Double (min/max) changed - The name of the EventType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType + The name of the EventType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: writableDoubleMinMax, ID: 00d3425e-1da6-4748-8906-4555ceefb136) @@ -650,29 +986,41 @@ The name of the StateType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mockInputType, EventType: writableDoubleMinMax, ID: {00d3425e-1da6-4748-8906-4555ceefb136}) ---------- -The name of the StateType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType +The name of the StateType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: writableDoubleMinMax, ID: 00d3425e-1da6-4748-8906-4555ceefb136 +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockInputType, StateType: writableDoubleMinMax, ID: 00d3425e-1da6-4748-8906-4555ceefb136) Set Writable Double (min/max) - The name of the ActionType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType + The name of the ActionType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType +---------- +The name of the autocreated ActionType (DeviceClass: mockInputType, StateType: writableDoubleMinMax, ID: 00d3425e-1da6-4748-8906-4555ceefb136) String changed - The name of the EventType ({27f69ca9-a321-40ff-bfee-4b0272a671b4}) of DeviceClass mockInputType + The name of the EventType ({27f69ca9-a321-40ff-bfee-4b0272a671b4}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: string, ID: 27f69ca9-a321-40ff-bfee-4b0272a671b4) String The name of the ParamType (DeviceClass: mockInputType, EventType: string, ID: {27f69ca9-a321-40ff-bfee-4b0272a671b4}) ---------- -The name of the StateType ({27f69ca9-a321-40ff-bfee-4b0272a671b4}) of DeviceClass mockInputType +The name of the StateType ({27f69ca9-a321-40ff-bfee-4b0272a671b4}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: string, ID: 27f69ca9-a321-40ff-bfee-4b0272a671b4 Writable String changed - The name of the EventType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType + The name of the EventType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: writableString, ID: ef511043-bd1a-4a5f-984c-222b7da43f38) @@ -681,17 +1029,25 @@ The name of the StateType ({27f69ca9-a321-40ff-bfee-4b0272a671b4}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mockInputType, EventType: writableString, ID: {ef511043-bd1a-4a5f-984c-222b7da43f38}) ---------- -The name of the StateType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType +The name of the StateType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: writableString, ID: ef511043-bd1a-4a5f-984c-222b7da43f38 +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockInputType, StateType: writableString, ID: ef511043-bd1a-4a5f-984c-222b7da43f38) Set Writable String - The name of the ActionType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType + The name of the ActionType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType +---------- +The name of the autocreated ActionType (DeviceClass: mockInputType, StateType: writableString, ID: ef511043-bd1a-4a5f-984c-222b7da43f38) Writable String (selection) changed - The name of the EventType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType + The name of the EventType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: writableStringSelection, ID: 209d7afc-6fe9-4fe9-939b-e472ea0ad639) @@ -700,29 +1056,41 @@ The name of the StateType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mockInputType, EventType: writableStringSelection, ID: {209d7afc-6fe9-4fe9-939b-e472ea0ad639}) ---------- -The name of the StateType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType +The name of the StateType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: writableStringSelection, ID: 209d7afc-6fe9-4fe9-939b-e472ea0ad639 +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockInputType, StateType: writableStringSelection, ID: 209d7afc-6fe9-4fe9-939b-e472ea0ad639) Set Writable String (selection) - The name of the ActionType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType + The name of the ActionType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType +---------- +The name of the autocreated ActionType (DeviceClass: mockInputType, StateType: writableStringSelection, ID: 209d7afc-6fe9-4fe9-939b-e472ea0ad639) Color changed - The name of the EventType ({4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) of DeviceClass mockInputType + The name of the EventType ({4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: color, ID: 4507d5c6-b692-4bd6-87f2-00364bc0cb4d) Color The name of the ParamType (DeviceClass: mockInputType, EventType: color, ID: {4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) ---------- -The name of the StateType ({4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) of DeviceClass mockInputType +The name of the StateType ({4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: color, ID: 4507d5c6-b692-4bd6-87f2-00364bc0cb4d Writable Color changed - The name of the EventType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType + The name of the EventType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: writableColor, ID: 455f4f68-3cb0-4e8a-a707-62e4a2a8035c) @@ -731,29 +1099,41 @@ The name of the StateType ({4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mockInputType, EventType: writableColor, ID: {455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) ---------- -The name of the StateType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType +The name of the StateType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: writableColor, ID: 455f4f68-3cb0-4e8a-a707-62e4a2a8035c +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockInputType, StateType: writableColor, ID: 455f4f68-3cb0-4e8a-a707-62e4a2a8035c) Set Writable Color - The name of the ActionType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType + The name of the ActionType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType +---------- +The name of the autocreated ActionType (DeviceClass: mockInputType, StateType: writableColor, ID: 455f4f68-3cb0-4e8a-a707-62e4a2a8035c) Time changed - The name of the EventType ({8250c71e-59bc-41ab-b576-99fcfc34e8d1}) of DeviceClass mockInputType + The name of the EventType ({8250c71e-59bc-41ab-b576-99fcfc34e8d1}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: time, ID: 8250c71e-59bc-41ab-b576-99fcfc34e8d1) Time The name of the ParamType (DeviceClass: mockInputType, EventType: time, ID: {8250c71e-59bc-41ab-b576-99fcfc34e8d1}) ---------- -The name of the StateType ({8250c71e-59bc-41ab-b576-99fcfc34e8d1}) of DeviceClass mockInputType +The name of the StateType ({8250c71e-59bc-41ab-b576-99fcfc34e8d1}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: time, ID: 8250c71e-59bc-41ab-b576-99fcfc34e8d1 Writable Time changed - The name of the EventType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType + The name of the EventType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: writableTime, ID: d64c8b3f-ca7d-47f6-b271-867ffd80a4d4) @@ -762,29 +1142,41 @@ The name of the StateType ({8250c71e-59bc-41ab-b576-99fcfc34e8d1}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mockInputType, EventType: writableTime, ID: {d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) ---------- -The name of the StateType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType +The name of the StateType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: writableTime, ID: d64c8b3f-ca7d-47f6-b271-867ffd80a4d4 +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockInputType, StateType: writableTime, ID: d64c8b3f-ca7d-47f6-b271-867ffd80a4d4) Set Writable Time - The name of the ActionType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType + The name of the ActionType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType +---------- +The name of the autocreated ActionType (DeviceClass: mockInputType, StateType: writableTime, ID: d64c8b3f-ca7d-47f6-b271-867ffd80a4d4) Timestamp (Int) changed - The name of the EventType ({2c91b5ef-c2d1-4367-bc65-5a13abf69641}) of DeviceClass mockInputType + The name of the EventType ({2c91b5ef-c2d1-4367-bc65-5a13abf69641}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: timestampInt, ID: 2c91b5ef-c2d1-4367-bc65-5a13abf69641) Timestamp (Int) The name of the ParamType (DeviceClass: mockInputType, EventType: timestampInt, ID: {2c91b5ef-c2d1-4367-bc65-5a13abf69641}) ---------- -The name of the StateType ({2c91b5ef-c2d1-4367-bc65-5a13abf69641}) of DeviceClass mockInputType +The name of the StateType ({2c91b5ef-c2d1-4367-bc65-5a13abf69641}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: timestampInt, ID: 2c91b5ef-c2d1-4367-bc65-5a13abf69641 Writable Timestamp (Int) changed - The name of the EventType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType + The name of the EventType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: writableTimestampInt, ID: 88b6746a-b009-4df6-8986-d7884ffd94b2) @@ -793,29 +1185,41 @@ The name of the StateType ({2c91b5ef-c2d1-4367-bc65-5a13abf69641}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mockInputType, EventType: writableTimestampInt, ID: {88b6746a-b009-4df6-8986-d7884ffd94b2}) ---------- -The name of the StateType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType +The name of the StateType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: writableTimestampInt, ID: 88b6746a-b009-4df6-8986-d7884ffd94b2 +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockInputType, StateType: writableTimestampInt, ID: 88b6746a-b009-4df6-8986-d7884ffd94b2) Set Writable Timestamp (Int) - The name of the ActionType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType + The name of the ActionType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType +---------- +The name of the autocreated ActionType (DeviceClass: mockInputType, StateType: writableTimestampInt, ID: 88b6746a-b009-4df6-8986-d7884ffd94b2) Timestamp (UInt) changed - The name of the EventType ({6c9a96e8-0d48-4f42-8967-848358fd7f79}) of DeviceClass mockInputType + The name of the EventType ({6c9a96e8-0d48-4f42-8967-848358fd7f79}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: timestampUInt, ID: 6c9a96e8-0d48-4f42-8967-848358fd7f79) Timestamp (UInt) The name of the ParamType (DeviceClass: mockInputType, EventType: timestampUInt, ID: {6c9a96e8-0d48-4f42-8967-848358fd7f79}) ---------- -The name of the StateType ({6c9a96e8-0d48-4f42-8967-848358fd7f79}) of DeviceClass mockInputType +The name of the StateType ({6c9a96e8-0d48-4f42-8967-848358fd7f79}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: timestampUInt, ID: 6c9a96e8-0d48-4f42-8967-848358fd7f79 Writable Timestamp (UInt) changed - The name of the EventType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType + The name of the EventType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType +---------- +The name of the autocreated EventType (DeviceClass: mockInputType, StateType: writableTimestampUInt, ID: 45d0069a-63ac-4265-8170-8152778608ee) @@ -824,22 +1228,25 @@ The name of the StateType ({6c9a96e8-0d48-4f42-8967-848358fd7f79}) of DeviceClas ---------- The name of the ParamType (DeviceClass: mockInputType, EventType: writableTimestampUInt, ID: {45d0069a-63ac-4265-8170-8152778608ee}) ---------- -The name of the StateType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType +The name of the StateType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType +---------- +The name of the ParamType for the autocreated EventType (DeviceClass: mockInputType, StateType: writableTimestampUInt, ID: 45d0069a-63ac-4265-8170-8152778608ee +---------- +The name of the ParamType for the autocreated ActionType (DeviceClass: mockInputType, StateType: writableTimestampUInt, ID: 45d0069a-63ac-4265-8170-8152778608ee) Set Writable Timestamp (UInt) - The name of the ActionType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType + The name of the ActionType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType +---------- +The name of the autocreated ActionType (DeviceClass: mockInputType, StateType: writableTimestampUInt, ID: 45d0069a-63ac-4265-8170-8152778608ee) nymea - The name of the vendor ({2062d64d-3232-433c-88bc-0d33c0ba2ba6}) - - - - Setting 1 - The name of the ParamType (DeviceClass: mock, Type: settings, ID: {367f7ba4-5039-47be-abd8-59cc8eaf4b9a}) + The name of the vendor ({2062d64d-3232-433c-88bc-0d33c0ba2ba6}) +---------- +The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) @@ -847,10 +1254,30 @@ The name of the StateType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClas The name of the Browser Item ActionType ({00b8f0a8-99ca-4aa4-833d-59eb8d4d6de3}) of DeviceClass mock + + Mock Device (Google OAuth) + The name of the DeviceClass ({805d1692-7bd0-449a-9d5c-43a332ff58f4}) + + + + Mock Device (Sonos OAuth) + The name of the DeviceClass ({783c615b-7bd6-49a4-98b0-8d1deb3c7156}) + + + + Mock Device (User & Password) + The name of the DeviceClass ({6fe07a77-9c07-4736-81e2-d504314bbcb9}) + + Remove from favorites The name of the Browser Item ActionType ({da6faef8-2816-430e-93bb-57e8f9582d29}) of DeviceClass mock + + Setting 1 + The name of the ParamType (DeviceClass: mock, Type: settings, ID: {367f7ba4-5039-47be-abd8-59cc8eaf4b9a}) + + diff --git a/translations/nymead-cs.ts b/translations/nymead-cs.ts index 95e691e3..425af755 100644 --- a/translations/nymead-cs.ts +++ b/translations/nymead-cs.ts @@ -4,1173 +4,47 @@ CloudNotifications - - + + Cloud Notifications Cloud notifikace - + User ID ID uživatele - + Device Zařízení - + Title Název - + Message text Text zprávy - + Send notification Poslat notifikaci - + connected připojeno - + Connected changed Připojeno změněno - - DevicePluginMock - - - Display pin!! The pin is 243681 - Zobrazit pin! Pin je 243681 - - - - SimpleButton - - - - Simple button - The name of the plugin SimpleButton (28c7b102-3ac8-41f6-8dc0-f4787222a186) ----------- -The name of the DeviceClass (c16ba02d-c982-4b45-8ca2-1945d94d8e66) - - - - - nymea - The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) - - - - - press - 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 - - - - - SimplePushButtonHandler - - - If specified, all D-Bus interfaces will be bound to the session bus instead of the system bus. - Pokud je specifikováno, všechna rozhraní D-bus budou napojena k sekční sběrnici místo k systémové sběrnici. - - - - mockDevice - - - Add to favorites - The name of the Browser Item ActionType ({00b8f0a8-99ca-4aa4-833d-59eb8d4d6de3}) of DeviceClass mock - - - - - - Bool - The name of the ParamType (DeviceClass: mockInputType, EventType: bool, ID: {3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) ----------- -The name of the StateType ({3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) of DeviceClass mockInputType - - - - - Bool changed - The name of the EventType ({3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) of DeviceClass mockInputType - - - - - - Color - The name of the ParamType (DeviceClass: mockInputType, EventType: color, ID: {4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) ----------- -The name of the StateType ({4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) of DeviceClass mockInputType - - - - - Color changed - The name of the EventType ({4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) of DeviceClass mockInputType - - - - - - Double - The name of the ParamType (DeviceClass: mockInputType, EventType: double, ID: {f7d2063d-959e-46ac-8568-8b99722d3b22}) ----------- -The name of the StateType ({f7d2063d-959e-46ac-8568-8b99722d3b22}) of DeviceClass mockInputType - - - - - Double changed - The name of the EventType ({f7d2063d-959e-46ac-8568-8b99722d3b22}) of DeviceClass mockInputType - - - - - - - - Dummy bool state - The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: boolValue, ID: {978b0ba5-d008-41bd-b63d-a3bd23cb6469}) ----------- -The name of the StateType ({978b0ba5-d008-41bd-b63d-a3bd23cb6469}) of DeviceClass mockDeviceAuto ----------- -The name of the ParamType (DeviceClass: mock, EventType: bool, ID: {9dd6a97c-dfd1-43dc-acbd-367932742310}) ----------- -The name of the StateType ({9dd6a97c-dfd1-43dc-acbd-367932742310}) of DeviceClass mock - - - - - - Dummy bool state changed - The name of the EventType ({978b0ba5-d008-41bd-b63d-a3bd23cb6469}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({9dd6a97c-dfd1-43dc-acbd-367932742310}) of DeviceClass mock - - - - - - Dummy double state - The name of the ParamType (DeviceClass: mock, EventType: double, ID: {7cac53ee-7048-4dc9-b000-7b585390f34c}) ----------- -The name of the StateType ({7cac53ee-7048-4dc9-b000-7b585390f34c}) of DeviceClass mock - - - - - Dummy double state changed - The name of the EventType ({7cac53ee-7048-4dc9-b000-7b585390f34c}) of DeviceClass mock - - - - - - - - Dummy int state - The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: int, ID: {74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) ----------- -The name of the StateType ({74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) of DeviceClass mockDeviceAuto ----------- -The name of the ParamType (DeviceClass: mock, EventType: int, ID: {80baec19-54de-4948-ac46-31eabfaceb83}) ----------- -The name of the StateType ({80baec19-54de-4948-ac46-31eabfaceb83}) of DeviceClass mock - - - - - - Dummy int state changed - The name of the EventType ({74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({80baec19-54de-4948-ac46-31eabfaceb83}) of DeviceClass mock - - - - - IPv4 address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {9e5f86a0-4bb3-4892-bff8-3fc4032af6e2}) - - - - - IPv6 address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {43bf3832-dd48-4090-a836-656e8b60216e}) - - - - - - Int - The name of the ParamType (DeviceClass: mockInputType, EventType: int, ID: {d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) ----------- -The name of the StateType ({d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) of DeviceClass mockInputType - - - - - Int changed - The name of the EventType ({d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) of DeviceClass mockInputType - - - - - Mac address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e93db587-7919-48f3-8c88-1651de63c765}) - - - - - Mail address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {a8494faf-3a0f-4cf3-84b7-4b39148a838d}) - - - - - - Mock Action 1 (with params) - The name of the ActionType ({00000000-0000-0000-0000-000000000000}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({dea0f4e1-65e3-4981-8eaa-2701c53a9185}) of DeviceClass mock - - - - - - Mock Action 2 (without params) - The name of the ActionType ({ef518d53-50e2-4ca5-a4b1-e9a8b9309d44}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({defd3ed6-1a0d-400b-8879-a0202cf39935}) of DeviceClass mock - - - - - - Mock Action 3 (async) - The name of the ActionType ({5f27a9f2-59cd-4a15-98bd-6ed6e10bc6ed}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({fbae06d3-7666-483e-a39e-ec50fe89054e}) of DeviceClass mock - - - - - - Mock Action 4 (broken) - The name of the ActionType ({58a61de4-472c-4775-8fe8-583a9c83fcf1}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({df3cf33d-26d5-4577-9132-9823bd33fad0}) of DeviceClass mock - - - - - - Mock Action 5 (async, broken) - The name of the ActionType ({17ad52dd-ef2f-4947-9b73-5bf6e172a9d0}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({bfe89a1d-3497-4121-8318-e77c37537219}) of DeviceClass mock - - - - - Mock Device - The name of the DeviceClass ({753f0d32-0468-4d08-82ed-1964aab03298}) - - - - - Mock Device (Auto created) - The name of the DeviceClass ({ab4257b3-7548-47ee-9bd4-7dc3004fd197}) - - - - - Mock Device (Child) - The name of the DeviceClass ({40893c9f-bc47-40c1-8bf7-b390c7c1b4fc}) - - - - - Mock Device (Display Pin) - The name of the DeviceClass ({296f1fd4-e893-46b2-8a42-50d1bceb8730}) - - - - - Mock Device (InputTypes) - The name of the DeviceClass ({515ffdf1-55e5-498d-9abc-4e2fe768f3a9}) - - - - - Mock Device (Parent) - The name of the DeviceClass ({a71fbde9-9a38-4bf8-beab-c8aade2608ba}) - - - - - Mock Device (Push Button) - The name of the DeviceClass ({9e03144c-e436-4eea-82d9-ccb33ef778db}) - - - - - Mock Devices - The name of the plugin mockDevice ({727a4a9a-c187-446f-aadf-f1b2220607d1}) - - - - - - Mock Event 1 - The name of the EventType ({00f81fca-26f1-4a84-aa2b-4c6a3d953ec6}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({45bf3752-0fc6-46b9-89fd-ffd878b5b22b}) of DeviceClass mock - - - - - - Mock Event 2 - The name of the EventType ({6e27922d-aa9d-44d1-b9b4-9faf31b6bd97}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({863d5920-b1cf-4eb9-88bd-8f7b8583b1cf}) of DeviceClass mock - - - - - Password text - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e5c0d14b-c9f1-4aca-a56e-85bfa6977150}) - - - - - Please enter the secret which normaly will be displayed on the device. For the mockdevice the pin is 243681. - The pairing info of deviceClass mockDisplayPin - - - - - Remove from favorites - The name of the Browser Item ActionType ({da6faef8-2816-430e-93bb-57e8f9582d29}) of DeviceClass mock - - - - - Search text - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {22add8c9-ee4f-43ad-8931-58e999313ac3}) - - - - - Set Writable Bool - The name of the ActionType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - - - - - Set Writable Color - The name of the ActionType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType - - - - - Set Writable Double - The name of the ActionType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType - - - - - Set Writable Double (min/max) - The name of the ActionType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType - - - - - Set Writable Int - The name of the ActionType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - - - - - Set Writable Int (min/max) - The name of the ActionType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - - - - - Set Writable String - The name of the ActionType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType - - - - - Set Writable String (selection) - The name of the ActionType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType - - - - - Set Writable Time - The name of the ActionType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType - - - - - Set Writable Timestamp (Int) - The name of the ActionType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType - - - - - Set Writable Timestamp (UInt) - The name of the ActionType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType - - - - - Set Writable UInt - The name of the ActionType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType - - - - - Set Writable UInt (min/max) - The name of the ActionType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType - - - - - - Set allowed values - The name of the ActionType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - - - - - - - - Set bool value - The name of the ActionType ({80ba1449-b485-47d4-a067-6bf306e2a568}) of DeviceClass mockChild ----------- -The name of the ActionType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClass mockParent ----------- -The name of the ActionType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - - - - - - Set color - The name of the ActionType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - - - - - - Set double value - The name of the ActionType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - - - - - - Set percentage - The name of the ActionType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - - - - - Setting 1 - The name of the ParamType (DeviceClass: mock, Type: settings, ID: {367f7ba4-5039-47be-abd8-59cc8eaf4b9a}) - - - - - - String - The name of the ParamType (DeviceClass: mockInputType, EventType: string, ID: {27f69ca9-a321-40ff-bfee-4b0272a671b4}) ----------- -The name of the StateType ({27f69ca9-a321-40ff-bfee-4b0272a671b4}) of DeviceClass mockInputType - - - - - String changed - The name of the EventType ({27f69ca9-a321-40ff-bfee-4b0272a671b4}) of DeviceClass mockInputType - - - - - Text area - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {716f0994-bc01-42b0-b64d-59236f7320d2}) - - - - - Text line - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e6acf0c7-4b8e-4296-ac62-855d20deb816}) - - - - - - Time - The name of the ParamType (DeviceClass: mockInputType, EventType: time, ID: {8250c71e-59bc-41ab-b576-99fcfc34e8d1}) ----------- -The name of the StateType ({8250c71e-59bc-41ab-b576-99fcfc34e8d1}) of DeviceClass mockInputType - - - - - Time changed - The name of the EventType ({8250c71e-59bc-41ab-b576-99fcfc34e8d1}) of DeviceClass mockInputType - - - - - - Timeout action - The name of the ActionType ({854a0a4a-803f-4b7f-9dce-b07794f9011b}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({54646e7c-bc54-4895-81a2-590d72d120f9}) of DeviceClass mockPushButton - - - - - - Timestamp (Int) - The name of the ParamType (DeviceClass: mockInputType, EventType: timestampInt, ID: {2c91b5ef-c2d1-4367-bc65-5a13abf69641}) ----------- -The name of the StateType ({2c91b5ef-c2d1-4367-bc65-5a13abf69641}) of DeviceClass mockInputType - - - - - Timestamp (Int) changed - The name of the EventType ({2c91b5ef-c2d1-4367-bc65-5a13abf69641}) of DeviceClass mockInputType - - - - - - Timestamp (UInt) - The name of the ParamType (DeviceClass: mockInputType, EventType: timestampUInt, ID: {6c9a96e8-0d48-4f42-8967-848358fd7f79}) ----------- -The name of the StateType ({6c9a96e8-0d48-4f42-8967-848358fd7f79}) of DeviceClass mockInputType - - - - - Timestamp (UInt) changed - The name of the EventType ({6c9a96e8-0d48-4f42-8967-848358fd7f79}) of DeviceClass mockInputType - - - - - - UInt - The name of the ParamType (DeviceClass: mockInputType, EventType: uint, ID: {19e74fcc-bfd5-491f-8eb6-af128e8f1162}) ----------- -The name of the StateType ({19e74fcc-bfd5-491f-8eb6-af128e8f1162}) of DeviceClass mockInputType - - - - - UInt changed - The name of the EventType ({19e74fcc-bfd5-491f-8eb6-af128e8f1162}) of DeviceClass mockInputType - - - - - URL - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {fa67229f-fcef-496f-b671-59a4b48f3ab5}) - - - - - Wait 3 second before you continue, the push button will be pressed automatically. - The pairing info of deviceClass mockPushButton - - - - - - - Writable Bool - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableBool, ID: {a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableBool, ID: {a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) ----------- -The name of the StateType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - - - - - Writable Bool changed - The name of the EventType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - - - - - - - Writable Color - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableColor, ID: {455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableColor, ID: {455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) ----------- -The name of the StateType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType - - - - - Writable Color changed - The name of the EventType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType - - - - - - - Writable Double - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableDouble, ID: {8e2eb91b-d60b-4461-9a50-d7b8ad263170}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableDouble, ID: {8e2eb91b-d60b-4461-9a50-d7b8ad263170}) ----------- -The name of the StateType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType - - - - - - - Writable Double (min/max) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableDoubleMinMax, ID: {00d3425e-1da6-4748-8906-4555ceefb136}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableDoubleMinMax, ID: {00d3425e-1da6-4748-8906-4555ceefb136}) ----------- -The name of the StateType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType - - - - - Writable Double (min/max) changed - The name of the EventType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType - - - - - Writable Double changed - The name of the EventType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType - - - - - - - Writable Int - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableInt, ID: {857a8422-983c-47d6-a15f-d8450b3162f7}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableInt, ID: {857a8422-983c-47d6-a15f-d8450b3162f7}) ----------- -The name of the StateType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - - - - - - - Writable Int (min/max) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableIntMinMax, ID: {86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableIntMinMax, ID: {86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) ----------- -The name of the StateType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - - - - - Writable Int (min/max) changed - The name of the EventType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - - - - - Writable Int changed - The name of the EventType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - - - - - - - Writable String - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableString, ID: {ef511043-bd1a-4a5f-984c-222b7da43f38}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableString, ID: {ef511043-bd1a-4a5f-984c-222b7da43f38}) ----------- -The name of the StateType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType - - - - - - - Writable String (selection) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableStringSelection, ID: {209d7afc-6fe9-4fe9-939b-e472ea0ad639}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableStringSelection, ID: {209d7afc-6fe9-4fe9-939b-e472ea0ad639}) ----------- -The name of the StateType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType - - - - - Writable String (selection) changed - The name of the EventType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType - - - - - Writable String changed - The name of the EventType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType - - - - - - - Writable Time - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableTime, ID: {d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableTime, ID: {d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) ----------- -The name of the StateType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType - - - - - Writable Time changed - The name of the EventType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType - - - - - - - Writable Timestamp (Int) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableTimestampInt, ID: {88b6746a-b009-4df6-8986-d7884ffd94b2}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableTimestampInt, ID: {88b6746a-b009-4df6-8986-d7884ffd94b2}) ----------- -The name of the StateType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType - - - - - Writable Timestamp (Int) changed - The name of the EventType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType - - - - - - - Writable Timestamp (UInt) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableTimestampUInt, ID: {45d0069a-63ac-4265-8170-8152778608ee}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableTimestampUInt, ID: {45d0069a-63ac-4265-8170-8152778608ee}) ----------- -The name of the StateType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType - - - - - Writable Timestamp (UInt) changed - The name of the EventType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType - - - - - - - Writable UInt - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableUInt, ID: {563e9c4c-5198-400a-9f6c-358f4752af58}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableUInt, ID: {563e9c4c-5198-400a-9f6c-358f4752af58}) ----------- -The name of the StateType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType - - - - - - - Writable UInt (min/max) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableUIntMinMax, ID: {79238998-eaab-4d71-b406-5d78f1749751}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableUIntMinMax, ID: {79238998-eaab-4d71-b406-5d78f1749751}) ----------- -The name of the StateType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType - - - - - Writable UInt (min/max) changed - The name of the EventType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType - - - - - Writable UInt changed - The name of the EventType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType - - - - - - - - - - allowed values - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: allowedValues, ID: {b463c5ae-4d55-402f-8480-a5cdb485c143}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: allowedValues, ID: {b463c5ae-4d55-402f-8480-a5cdb485c143}) ----------- -The name of the StateType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: allowedValues, ID: {05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: allowedValues, ID: {05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) ----------- -The name of the StateType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - - - - - - allowed values changed - The name of the EventType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - - - - - - async - The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {a5c4315f-0624-4971-87c1-4bbfbfdbd16e}) ----------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {f2977061-4dd0-4ef5-85aa-3b7134743be3}) - - - - - - - battery level - The name of the ParamType (DeviceClass: mock, EventType: batteryLevel, ID: {6c8ab9a6-0164-4795-b829-f4394fe4edc4}) ----------- -The name of the EventType ({6c8ab9a6-0164-4795-b829-f4394fe4edc4}) of DeviceClass mock ----------- -The name of the StateType ({6c8ab9a6-0164-4795-b829-f4394fe4edc4}) of DeviceClass mock - - - - - - - battery level critical - The name of the ParamType (DeviceClass: mock, EventType: batteryCritical, ID: {580bc611-1a55-41f3-996f-8d3ccf543db3}) ----------- -The name of the EventType ({580bc611-1a55-41f3-996f-8d3ccf543db3}) of DeviceClass mock ----------- -The name of the StateType ({580bc611-1a55-41f3-996f-8d3ccf543db3}) of DeviceClass mock - - - - - - - - - - - - - - - - bool value - The name of the ParamType (DeviceClass: mockChild, ActionType: boolValue, ID: {80ba1449-b485-47d4-a067-6bf306e2a568}) ----------- -The name of the ParamType (DeviceClass: mockChild, EventType: boolValue, ID: {80ba1449-b485-47d4-a067-6bf306e2a568}) ----------- -The name of the StateType ({80ba1449-b485-47d4-a067-6bf306e2a568}) of DeviceClass mockChild ----------- -The name of the ParamType (DeviceClass: mockParent, ActionType: boolValue, ID: {d24ede5f-4064-4898-bb84-cfb533b1fbc0}) ----------- -The name of the ParamType (DeviceClass: mockParent, EventType: boolValue, ID: {d24ede5f-4064-4898-bb84-cfb533b1fbc0}) ----------- -The name of the StateType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClass mockParent ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: bool, ID: {7ffe514f-7999-4998-8350-0e73e222a8c4}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: bool, ID: {7ffe514f-7999-4998-8350-0e73e222a8c4}) ----------- -The name of the StateType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: bool, ID: {e680f7a4-b39e-46da-be41-fa3170fe3768}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: bool, ID: {e680f7a4-b39e-46da-be41-fa3170fe3768}) ----------- -The name of the StateType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - - - - - - - - bool value changed - The name of the EventType ({80ba1449-b485-47d4-a067-6bf306e2a568}) of DeviceClass mockChild ----------- -The name of the EventType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClass mockParent ----------- -The name of the EventType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - - - - - - broken - The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {66179395-ef7a-4013-9fc6-2084104eea09}) ----------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {ae8f8901-f2c1-42a5-8111-6d2fc8e4c1e4}) - - - - - - - - - - color - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: color, ID: {3e161294-8a0d-4384-9676-6959e08cc2fa}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: color, ID: {3e161294-8a0d-4384-9676-6959e08cc2fa}) ----------- -The name of the StateType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: color, ID: {20dc7c22-c50e-42db-837c-2bbced939f8e}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: color, ID: {20dc7c22-c50e-42db-837c-2bbced939f8e}) ----------- -The name of the StateType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - - - - - - color changed - The name of the EventType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - - - - - configParamBool - The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: {c75723b6-ea4f-4982-9751-6c5e39c88145}) - - - - - configParamInt - The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: {e1f72121-a426-45e2-b475-8262b5cdf103}) - - - - - - - - - - double value - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: double, ID: {17635624-7c19-4bae-8429-2f7aa5d2f843}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: double, ID: {17635624-7c19-4bae-8429-2f7aa5d2f843}) ----------- -The name of the StateType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: double, ID: {53cd7c55-49b7-441b-b970-9048f20f0e2c}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: double, ID: {53cd7c55-49b7-441b-b970-9048f20f0e2c}) ----------- -The name of the StateType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - - - - - - double value changed - The name of the EventType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - - - - - - http port - The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {bfeb0613-dab6-408c-aa27-c362c921d0d1}) ----------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {d4f06047-125e-4479-9810-b54c189917f5}) - - - - - - mockActionParam1 - The name of the ParamType (DeviceClass: mockDeviceAuto, ActionType: withParams, ID: {b8126ba6-3a54-45a3-be4d-63feb0ddb77b}) ----------- -The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: {a2d3a256-a551-4712-a65b-ecd5a436a1cb}) - - - - - - mockActionParam2 - The name of the ParamType (DeviceClass: mockDeviceAuto, ActionType: withParams, ID: {df41ba71-e43b-4854-91d1-b19d8066d4f9}) ----------- -The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: {304a4899-18be-4e3b-94f4-d03be52f3233}) - - - - - - mockParamInt - The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: event2, ID: {12ed5a15-96b4-4381-9d9c-a24875283d4f}) ----------- -The name of the ParamType (DeviceClass: mock, EventType: event2, ID: {0550e16d-60b9-4ba5-83f4-4d3cee656121}) - - - - - nymea - The name of the vendor ({2062d64d-3232-433c-88bc-0d33c0ba2ba6}) - - - - - - - - - - percentage - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: percentage, ID: {527f0687-0b28-4c26-852c-25b8f83e4797}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: percentage, ID: {527f0687-0b28-4c26-852c-25b8f83e4797}) ----------- -The name of the StateType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: percentage, ID: {72981c04-267a-4ba0-a59e-9921d2f3af9c}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: percentage, ID: {72981c04-267a-4ba0-a59e-9921d2f3af9c}) ----------- -The name of the StateType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - - - - - - percentage changed - The name of the EventType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - - - - - pin - The name of the ParamType (DeviceClass: mockDisplayPin, Type: device, ID: {da820e07-22dc-4173-9c07-2f49a4e265f9}) - - - - - - - powered - The name of the ParamType (DeviceClass: mock, ActionType: power, ID: {064aed0d-da4c-49d4-b236-60f97e98ff84}) ----------- -The name of the ParamType (DeviceClass: mock, EventType: power, ID: {064aed0d-da4c-49d4-b236-60f97e98ff84}) ----------- -The name of the StateType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - - - - - powered changed - The name of the EventType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - - - - - - - resultCount - The name of the ParamType (DeviceClass: mockDisplayPin, Type: discovery, ID: {35f6e4ba-28ad-4152-a58d-ec2600667bcf}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, Type: discovery, ID: {c40dbc59-4bba-4871-9b8e-bbd8d5d9193b}) ----------- -The name of the ParamType (DeviceClass: mock, Type: discovery, ID: {d222adb4-2f9c-4c3f-8655-76400d0fb6ce}) - - - - - set power - The name of the ActionType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - - - nymea diff --git a/translations/nymead-da.ts b/translations/nymead-da.ts index 6df5b686..176cde95 100644 --- a/translations/nymead-da.ts +++ b/translations/nymead-da.ts @@ -4,1173 +4,47 @@ CloudNotifications - - + + Cloud Notifications Cloud-meddelelser - + User ID Bruger-id - + Device Enhed - + Title Titel - + Message text Meddelelsestekst - + Send notification Send meddelelse - + connected forbundet - + Connected changed Forbindelse ændret - - DevicePluginMock - - - Display pin!! The pin is 243681 - Vis pin!! Pin-koden er 243681 - - - - SimpleButton - - - - Simple button - The name of the plugin SimpleButton (28c7b102-3ac8-41f6-8dc0-f4787222a186) ----------- -The name of the DeviceClass (c16ba02d-c982-4b45-8ca2-1945d94d8e66) - - - - - nymea - The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) - - - - - press - 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 - - - - - SimplePushButtonHandler - - - If specified, all D-Bus interfaces will be bound to the session bus instead of the system bus. - Hvis det specificeret, vil alle D-Bus grænseflader være bundet til session-bussen i stedet for system-bussen. - - - - mockDevice - - - Add to favorites - The name of the Browser Item ActionType ({00b8f0a8-99ca-4aa4-833d-59eb8d4d6de3}) of DeviceClass mock - - - - - - Bool - The name of the ParamType (DeviceClass: mockInputType, EventType: bool, ID: {3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) ----------- -The name of the StateType ({3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) of DeviceClass mockInputType - - - - - Bool changed - The name of the EventType ({3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) of DeviceClass mockInputType - - - - - - Color - The name of the ParamType (DeviceClass: mockInputType, EventType: color, ID: {4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) ----------- -The name of the StateType ({4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) of DeviceClass mockInputType - - - - - Color changed - The name of the EventType ({4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) of DeviceClass mockInputType - - - - - - Double - The name of the ParamType (DeviceClass: mockInputType, EventType: double, ID: {f7d2063d-959e-46ac-8568-8b99722d3b22}) ----------- -The name of the StateType ({f7d2063d-959e-46ac-8568-8b99722d3b22}) of DeviceClass mockInputType - - - - - Double changed - The name of the EventType ({f7d2063d-959e-46ac-8568-8b99722d3b22}) of DeviceClass mockInputType - - - - - - - - Dummy bool state - The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: boolValue, ID: {978b0ba5-d008-41bd-b63d-a3bd23cb6469}) ----------- -The name of the StateType ({978b0ba5-d008-41bd-b63d-a3bd23cb6469}) of DeviceClass mockDeviceAuto ----------- -The name of the ParamType (DeviceClass: mock, EventType: bool, ID: {9dd6a97c-dfd1-43dc-acbd-367932742310}) ----------- -The name of the StateType ({9dd6a97c-dfd1-43dc-acbd-367932742310}) of DeviceClass mock - - - - - - Dummy bool state changed - The name of the EventType ({978b0ba5-d008-41bd-b63d-a3bd23cb6469}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({9dd6a97c-dfd1-43dc-acbd-367932742310}) of DeviceClass mock - - - - - - Dummy double state - The name of the ParamType (DeviceClass: mock, EventType: double, ID: {7cac53ee-7048-4dc9-b000-7b585390f34c}) ----------- -The name of the StateType ({7cac53ee-7048-4dc9-b000-7b585390f34c}) of DeviceClass mock - - - - - Dummy double state changed - The name of the EventType ({7cac53ee-7048-4dc9-b000-7b585390f34c}) of DeviceClass mock - - - - - - - - Dummy int state - The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: int, ID: {74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) ----------- -The name of the StateType ({74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) of DeviceClass mockDeviceAuto ----------- -The name of the ParamType (DeviceClass: mock, EventType: int, ID: {80baec19-54de-4948-ac46-31eabfaceb83}) ----------- -The name of the StateType ({80baec19-54de-4948-ac46-31eabfaceb83}) of DeviceClass mock - - - - - - Dummy int state changed - The name of the EventType ({74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({80baec19-54de-4948-ac46-31eabfaceb83}) of DeviceClass mock - - - - - IPv4 address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {9e5f86a0-4bb3-4892-bff8-3fc4032af6e2}) - - - - - IPv6 address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {43bf3832-dd48-4090-a836-656e8b60216e}) - - - - - - Int - The name of the ParamType (DeviceClass: mockInputType, EventType: int, ID: {d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) ----------- -The name of the StateType ({d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) of DeviceClass mockInputType - - - - - Int changed - The name of the EventType ({d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) of DeviceClass mockInputType - - - - - Mac address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e93db587-7919-48f3-8c88-1651de63c765}) - - - - - Mail address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {a8494faf-3a0f-4cf3-84b7-4b39148a838d}) - - - - - - Mock Action 1 (with params) - The name of the ActionType ({00000000-0000-0000-0000-000000000000}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({dea0f4e1-65e3-4981-8eaa-2701c53a9185}) of DeviceClass mock - - - - - - Mock Action 2 (without params) - The name of the ActionType ({ef518d53-50e2-4ca5-a4b1-e9a8b9309d44}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({defd3ed6-1a0d-400b-8879-a0202cf39935}) of DeviceClass mock - - - - - - Mock Action 3 (async) - The name of the ActionType ({5f27a9f2-59cd-4a15-98bd-6ed6e10bc6ed}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({fbae06d3-7666-483e-a39e-ec50fe89054e}) of DeviceClass mock - - - - - - Mock Action 4 (broken) - The name of the ActionType ({58a61de4-472c-4775-8fe8-583a9c83fcf1}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({df3cf33d-26d5-4577-9132-9823bd33fad0}) of DeviceClass mock - - - - - - Mock Action 5 (async, broken) - The name of the ActionType ({17ad52dd-ef2f-4947-9b73-5bf6e172a9d0}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({bfe89a1d-3497-4121-8318-e77c37537219}) of DeviceClass mock - - - - - Mock Device - The name of the DeviceClass ({753f0d32-0468-4d08-82ed-1964aab03298}) - - - - - Mock Device (Auto created) - The name of the DeviceClass ({ab4257b3-7548-47ee-9bd4-7dc3004fd197}) - - - - - Mock Device (Child) - The name of the DeviceClass ({40893c9f-bc47-40c1-8bf7-b390c7c1b4fc}) - - - - - Mock Device (Display Pin) - The name of the DeviceClass ({296f1fd4-e893-46b2-8a42-50d1bceb8730}) - - - - - Mock Device (InputTypes) - The name of the DeviceClass ({515ffdf1-55e5-498d-9abc-4e2fe768f3a9}) - - - - - Mock Device (Parent) - The name of the DeviceClass ({a71fbde9-9a38-4bf8-beab-c8aade2608ba}) - - - - - Mock Device (Push Button) - The name of the DeviceClass ({9e03144c-e436-4eea-82d9-ccb33ef778db}) - - - - - Mock Devices - The name of the plugin mockDevice ({727a4a9a-c187-446f-aadf-f1b2220607d1}) - - - - - - Mock Event 1 - The name of the EventType ({00f81fca-26f1-4a84-aa2b-4c6a3d953ec6}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({45bf3752-0fc6-46b9-89fd-ffd878b5b22b}) of DeviceClass mock - - - - - - Mock Event 2 - The name of the EventType ({6e27922d-aa9d-44d1-b9b4-9faf31b6bd97}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({863d5920-b1cf-4eb9-88bd-8f7b8583b1cf}) of DeviceClass mock - - - - - Password text - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e5c0d14b-c9f1-4aca-a56e-85bfa6977150}) - - - - - Please enter the secret which normaly will be displayed on the device. For the mockdevice the pin is 243681. - The pairing info of deviceClass mockDisplayPin - - - - - Remove from favorites - The name of the Browser Item ActionType ({da6faef8-2816-430e-93bb-57e8f9582d29}) of DeviceClass mock - - - - - Search text - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {22add8c9-ee4f-43ad-8931-58e999313ac3}) - - - - - Set Writable Bool - The name of the ActionType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - - - - - Set Writable Color - The name of the ActionType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType - - - - - Set Writable Double - The name of the ActionType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType - - - - - Set Writable Double (min/max) - The name of the ActionType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType - - - - - Set Writable Int - The name of the ActionType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - - - - - Set Writable Int (min/max) - The name of the ActionType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - - - - - Set Writable String - The name of the ActionType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType - - - - - Set Writable String (selection) - The name of the ActionType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType - - - - - Set Writable Time - The name of the ActionType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType - - - - - Set Writable Timestamp (Int) - The name of the ActionType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType - - - - - Set Writable Timestamp (UInt) - The name of the ActionType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType - - - - - Set Writable UInt - The name of the ActionType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType - - - - - Set Writable UInt (min/max) - The name of the ActionType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType - - - - - - Set allowed values - The name of the ActionType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - - - - - - - - Set bool value - The name of the ActionType ({80ba1449-b485-47d4-a067-6bf306e2a568}) of DeviceClass mockChild ----------- -The name of the ActionType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClass mockParent ----------- -The name of the ActionType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - - - - - - Set color - The name of the ActionType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - - - - - - Set double value - The name of the ActionType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - - - - - - Set percentage - The name of the ActionType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - - - - - Setting 1 - The name of the ParamType (DeviceClass: mock, Type: settings, ID: {367f7ba4-5039-47be-abd8-59cc8eaf4b9a}) - - - - - - String - The name of the ParamType (DeviceClass: mockInputType, EventType: string, ID: {27f69ca9-a321-40ff-bfee-4b0272a671b4}) ----------- -The name of the StateType ({27f69ca9-a321-40ff-bfee-4b0272a671b4}) of DeviceClass mockInputType - - - - - String changed - The name of the EventType ({27f69ca9-a321-40ff-bfee-4b0272a671b4}) of DeviceClass mockInputType - - - - - Text area - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {716f0994-bc01-42b0-b64d-59236f7320d2}) - - - - - Text line - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e6acf0c7-4b8e-4296-ac62-855d20deb816}) - - - - - - Time - The name of the ParamType (DeviceClass: mockInputType, EventType: time, ID: {8250c71e-59bc-41ab-b576-99fcfc34e8d1}) ----------- -The name of the StateType ({8250c71e-59bc-41ab-b576-99fcfc34e8d1}) of DeviceClass mockInputType - - - - - Time changed - The name of the EventType ({8250c71e-59bc-41ab-b576-99fcfc34e8d1}) of DeviceClass mockInputType - - - - - - Timeout action - The name of the ActionType ({854a0a4a-803f-4b7f-9dce-b07794f9011b}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({54646e7c-bc54-4895-81a2-590d72d120f9}) of DeviceClass mockPushButton - - - - - - Timestamp (Int) - The name of the ParamType (DeviceClass: mockInputType, EventType: timestampInt, ID: {2c91b5ef-c2d1-4367-bc65-5a13abf69641}) ----------- -The name of the StateType ({2c91b5ef-c2d1-4367-bc65-5a13abf69641}) of DeviceClass mockInputType - - - - - Timestamp (Int) changed - The name of the EventType ({2c91b5ef-c2d1-4367-bc65-5a13abf69641}) of DeviceClass mockInputType - - - - - - Timestamp (UInt) - The name of the ParamType (DeviceClass: mockInputType, EventType: timestampUInt, ID: {6c9a96e8-0d48-4f42-8967-848358fd7f79}) ----------- -The name of the StateType ({6c9a96e8-0d48-4f42-8967-848358fd7f79}) of DeviceClass mockInputType - - - - - Timestamp (UInt) changed - The name of the EventType ({6c9a96e8-0d48-4f42-8967-848358fd7f79}) of DeviceClass mockInputType - - - - - - UInt - The name of the ParamType (DeviceClass: mockInputType, EventType: uint, ID: {19e74fcc-bfd5-491f-8eb6-af128e8f1162}) ----------- -The name of the StateType ({19e74fcc-bfd5-491f-8eb6-af128e8f1162}) of DeviceClass mockInputType - - - - - UInt changed - The name of the EventType ({19e74fcc-bfd5-491f-8eb6-af128e8f1162}) of DeviceClass mockInputType - - - - - URL - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {fa67229f-fcef-496f-b671-59a4b48f3ab5}) - - - - - Wait 3 second before you continue, the push button will be pressed automatically. - The pairing info of deviceClass mockPushButton - - - - - - - Writable Bool - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableBool, ID: {a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableBool, ID: {a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) ----------- -The name of the StateType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - - - - - Writable Bool changed - The name of the EventType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - - - - - - - Writable Color - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableColor, ID: {455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableColor, ID: {455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) ----------- -The name of the StateType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType - - - - - Writable Color changed - The name of the EventType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType - - - - - - - Writable Double - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableDouble, ID: {8e2eb91b-d60b-4461-9a50-d7b8ad263170}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableDouble, ID: {8e2eb91b-d60b-4461-9a50-d7b8ad263170}) ----------- -The name of the StateType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType - - - - - - - Writable Double (min/max) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableDoubleMinMax, ID: {00d3425e-1da6-4748-8906-4555ceefb136}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableDoubleMinMax, ID: {00d3425e-1da6-4748-8906-4555ceefb136}) ----------- -The name of the StateType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType - - - - - Writable Double (min/max) changed - The name of the EventType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType - - - - - Writable Double changed - The name of the EventType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType - - - - - - - Writable Int - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableInt, ID: {857a8422-983c-47d6-a15f-d8450b3162f7}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableInt, ID: {857a8422-983c-47d6-a15f-d8450b3162f7}) ----------- -The name of the StateType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - - - - - - - Writable Int (min/max) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableIntMinMax, ID: {86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableIntMinMax, ID: {86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) ----------- -The name of the StateType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - - - - - Writable Int (min/max) changed - The name of the EventType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - - - - - Writable Int changed - The name of the EventType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - - - - - - - Writable String - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableString, ID: {ef511043-bd1a-4a5f-984c-222b7da43f38}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableString, ID: {ef511043-bd1a-4a5f-984c-222b7da43f38}) ----------- -The name of the StateType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType - - - - - - - Writable String (selection) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableStringSelection, ID: {209d7afc-6fe9-4fe9-939b-e472ea0ad639}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableStringSelection, ID: {209d7afc-6fe9-4fe9-939b-e472ea0ad639}) ----------- -The name of the StateType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType - - - - - Writable String (selection) changed - The name of the EventType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType - - - - - Writable String changed - The name of the EventType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType - - - - - - - Writable Time - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableTime, ID: {d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableTime, ID: {d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) ----------- -The name of the StateType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType - - - - - Writable Time changed - The name of the EventType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType - - - - - - - Writable Timestamp (Int) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableTimestampInt, ID: {88b6746a-b009-4df6-8986-d7884ffd94b2}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableTimestampInt, ID: {88b6746a-b009-4df6-8986-d7884ffd94b2}) ----------- -The name of the StateType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType - - - - - Writable Timestamp (Int) changed - The name of the EventType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType - - - - - - - Writable Timestamp (UInt) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableTimestampUInt, ID: {45d0069a-63ac-4265-8170-8152778608ee}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableTimestampUInt, ID: {45d0069a-63ac-4265-8170-8152778608ee}) ----------- -The name of the StateType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType - - - - - Writable Timestamp (UInt) changed - The name of the EventType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType - - - - - - - Writable UInt - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableUInt, ID: {563e9c4c-5198-400a-9f6c-358f4752af58}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableUInt, ID: {563e9c4c-5198-400a-9f6c-358f4752af58}) ----------- -The name of the StateType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType - - - - - - - Writable UInt (min/max) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableUIntMinMax, ID: {79238998-eaab-4d71-b406-5d78f1749751}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableUIntMinMax, ID: {79238998-eaab-4d71-b406-5d78f1749751}) ----------- -The name of the StateType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType - - - - - Writable UInt (min/max) changed - The name of the EventType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType - - - - - Writable UInt changed - The name of the EventType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType - - - - - - - - - - allowed values - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: allowedValues, ID: {b463c5ae-4d55-402f-8480-a5cdb485c143}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: allowedValues, ID: {b463c5ae-4d55-402f-8480-a5cdb485c143}) ----------- -The name of the StateType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: allowedValues, ID: {05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: allowedValues, ID: {05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) ----------- -The name of the StateType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - - - - - - allowed values changed - The name of the EventType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - - - - - - async - The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {a5c4315f-0624-4971-87c1-4bbfbfdbd16e}) ----------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {f2977061-4dd0-4ef5-85aa-3b7134743be3}) - - - - - - - battery level - The name of the ParamType (DeviceClass: mock, EventType: batteryLevel, ID: {6c8ab9a6-0164-4795-b829-f4394fe4edc4}) ----------- -The name of the EventType ({6c8ab9a6-0164-4795-b829-f4394fe4edc4}) of DeviceClass mock ----------- -The name of the StateType ({6c8ab9a6-0164-4795-b829-f4394fe4edc4}) of DeviceClass mock - - - - - - - battery level critical - The name of the ParamType (DeviceClass: mock, EventType: batteryCritical, ID: {580bc611-1a55-41f3-996f-8d3ccf543db3}) ----------- -The name of the EventType ({580bc611-1a55-41f3-996f-8d3ccf543db3}) of DeviceClass mock ----------- -The name of the StateType ({580bc611-1a55-41f3-996f-8d3ccf543db3}) of DeviceClass mock - - - - - - - - - - - - - - - - bool value - The name of the ParamType (DeviceClass: mockChild, ActionType: boolValue, ID: {80ba1449-b485-47d4-a067-6bf306e2a568}) ----------- -The name of the ParamType (DeviceClass: mockChild, EventType: boolValue, ID: {80ba1449-b485-47d4-a067-6bf306e2a568}) ----------- -The name of the StateType ({80ba1449-b485-47d4-a067-6bf306e2a568}) of DeviceClass mockChild ----------- -The name of the ParamType (DeviceClass: mockParent, ActionType: boolValue, ID: {d24ede5f-4064-4898-bb84-cfb533b1fbc0}) ----------- -The name of the ParamType (DeviceClass: mockParent, EventType: boolValue, ID: {d24ede5f-4064-4898-bb84-cfb533b1fbc0}) ----------- -The name of the StateType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClass mockParent ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: bool, ID: {7ffe514f-7999-4998-8350-0e73e222a8c4}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: bool, ID: {7ffe514f-7999-4998-8350-0e73e222a8c4}) ----------- -The name of the StateType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: bool, ID: {e680f7a4-b39e-46da-be41-fa3170fe3768}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: bool, ID: {e680f7a4-b39e-46da-be41-fa3170fe3768}) ----------- -The name of the StateType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - - - - - - - - bool value changed - The name of the EventType ({80ba1449-b485-47d4-a067-6bf306e2a568}) of DeviceClass mockChild ----------- -The name of the EventType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClass mockParent ----------- -The name of the EventType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - - - - - - broken - The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {66179395-ef7a-4013-9fc6-2084104eea09}) ----------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {ae8f8901-f2c1-42a5-8111-6d2fc8e4c1e4}) - - - - - - - - - - color - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: color, ID: {3e161294-8a0d-4384-9676-6959e08cc2fa}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: color, ID: {3e161294-8a0d-4384-9676-6959e08cc2fa}) ----------- -The name of the StateType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: color, ID: {20dc7c22-c50e-42db-837c-2bbced939f8e}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: color, ID: {20dc7c22-c50e-42db-837c-2bbced939f8e}) ----------- -The name of the StateType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - - - - - - color changed - The name of the EventType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - - - - - configParamBool - The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: {c75723b6-ea4f-4982-9751-6c5e39c88145}) - - - - - configParamInt - The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: {e1f72121-a426-45e2-b475-8262b5cdf103}) - - - - - - - - - - double value - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: double, ID: {17635624-7c19-4bae-8429-2f7aa5d2f843}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: double, ID: {17635624-7c19-4bae-8429-2f7aa5d2f843}) ----------- -The name of the StateType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: double, ID: {53cd7c55-49b7-441b-b970-9048f20f0e2c}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: double, ID: {53cd7c55-49b7-441b-b970-9048f20f0e2c}) ----------- -The name of the StateType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - - - - - - double value changed - The name of the EventType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - - - - - - http port - The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {bfeb0613-dab6-408c-aa27-c362c921d0d1}) ----------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {d4f06047-125e-4479-9810-b54c189917f5}) - - - - - - mockActionParam1 - The name of the ParamType (DeviceClass: mockDeviceAuto, ActionType: withParams, ID: {b8126ba6-3a54-45a3-be4d-63feb0ddb77b}) ----------- -The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: {a2d3a256-a551-4712-a65b-ecd5a436a1cb}) - - - - - - mockActionParam2 - The name of the ParamType (DeviceClass: mockDeviceAuto, ActionType: withParams, ID: {df41ba71-e43b-4854-91d1-b19d8066d4f9}) ----------- -The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: {304a4899-18be-4e3b-94f4-d03be52f3233}) - - - - - - mockParamInt - The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: event2, ID: {12ed5a15-96b4-4381-9d9c-a24875283d4f}) ----------- -The name of the ParamType (DeviceClass: mock, EventType: event2, ID: {0550e16d-60b9-4ba5-83f4-4d3cee656121}) - - - - - nymea - The name of the vendor ({2062d64d-3232-433c-88bc-0d33c0ba2ba6}) - - - - - - - - - - percentage - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: percentage, ID: {527f0687-0b28-4c26-852c-25b8f83e4797}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: percentage, ID: {527f0687-0b28-4c26-852c-25b8f83e4797}) ----------- -The name of the StateType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: percentage, ID: {72981c04-267a-4ba0-a59e-9921d2f3af9c}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: percentage, ID: {72981c04-267a-4ba0-a59e-9921d2f3af9c}) ----------- -The name of the StateType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - - - - - - percentage changed - The name of the EventType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - - - - - pin - The name of the ParamType (DeviceClass: mockDisplayPin, Type: device, ID: {da820e07-22dc-4173-9c07-2f49a4e265f9}) - - - - - - - powered - The name of the ParamType (DeviceClass: mock, ActionType: power, ID: {064aed0d-da4c-49d4-b236-60f97e98ff84}) ----------- -The name of the ParamType (DeviceClass: mock, EventType: power, ID: {064aed0d-da4c-49d4-b236-60f97e98ff84}) ----------- -The name of the StateType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - - - - - powered changed - The name of the EventType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - - - - - - - resultCount - The name of the ParamType (DeviceClass: mockDisplayPin, Type: discovery, ID: {35f6e4ba-28ad-4152-a58d-ec2600667bcf}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, Type: discovery, ID: {c40dbc59-4bba-4871-9b8e-bbd8d5d9193b}) ----------- -The name of the ParamType (DeviceClass: mock, Type: discovery, ID: {d222adb4-2f9c-4c3f-8655-76400d0fb6ce}) - - - - - set power - The name of the ActionType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - - - nymea diff --git a/translations/nymead-de_DE.ts b/translations/nymead-de_DE.ts index 0666d389..104d7253 100644 --- a/translations/nymead-de_DE.ts +++ b/translations/nymead-de_DE.ts @@ -4,1173 +4,47 @@ CloudNotifications - - + + Cloud Notifications Cloud Benachrichtigung - + User ID Benutzer ID - + Device Gerät - + Title Titel - + Message text Nachrichtentext - + Send notification Sende Benachrichtigung - + connected Verbunden - + Connected changed Verbunden geändert - - DevicePluginMock - - - Display pin!! The pin is 243681 - PIN anzeigen!! Der PIN ist 243681 - - - - SimpleButton - - - - Simple button - The name of the plugin SimpleButton (28c7b102-3ac8-41f6-8dc0-f4787222a186) ----------- -The name of the DeviceClass (c16ba02d-c982-4b45-8ca2-1945d94d8e66) - - - - - nymea - The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) - - - - - press - 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 - - - - - SimplePushButtonHandler - - - If specified, all D-Bus interfaces will be bound to the session bus instead of the system bus. - Falls angegeben, werden alle D-Bus Schnittstellen auf dem Sitzungs-Bus anstatt auf dem System-Bus zur Verfügung gestellt. - - - - mockDevice - - - Add to favorites - The name of the Browser Item ActionType ({00b8f0a8-99ca-4aa4-833d-59eb8d4d6de3}) of DeviceClass mock - - - - - - Bool - The name of the ParamType (DeviceClass: mockInputType, EventType: bool, ID: {3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) ----------- -The name of the StateType ({3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) of DeviceClass mockInputType - - - - - Bool changed - The name of the EventType ({3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) of DeviceClass mockInputType - - - - - - Color - The name of the ParamType (DeviceClass: mockInputType, EventType: color, ID: {4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) ----------- -The name of the StateType ({4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) of DeviceClass mockInputType - - - - - Color changed - The name of the EventType ({4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) of DeviceClass mockInputType - - - - - - Double - The name of the ParamType (DeviceClass: mockInputType, EventType: double, ID: {f7d2063d-959e-46ac-8568-8b99722d3b22}) ----------- -The name of the StateType ({f7d2063d-959e-46ac-8568-8b99722d3b22}) of DeviceClass mockInputType - - - - - Double changed - The name of the EventType ({f7d2063d-959e-46ac-8568-8b99722d3b22}) of DeviceClass mockInputType - - - - - - - - Dummy bool state - The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: boolValue, ID: {978b0ba5-d008-41bd-b63d-a3bd23cb6469}) ----------- -The name of the StateType ({978b0ba5-d008-41bd-b63d-a3bd23cb6469}) of DeviceClass mockDeviceAuto ----------- -The name of the ParamType (DeviceClass: mock, EventType: bool, ID: {9dd6a97c-dfd1-43dc-acbd-367932742310}) ----------- -The name of the StateType ({9dd6a97c-dfd1-43dc-acbd-367932742310}) of DeviceClass mock - - - - - - Dummy bool state changed - The name of the EventType ({978b0ba5-d008-41bd-b63d-a3bd23cb6469}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({9dd6a97c-dfd1-43dc-acbd-367932742310}) of DeviceClass mock - - - - - - Dummy double state - The name of the ParamType (DeviceClass: mock, EventType: double, ID: {7cac53ee-7048-4dc9-b000-7b585390f34c}) ----------- -The name of the StateType ({7cac53ee-7048-4dc9-b000-7b585390f34c}) of DeviceClass mock - - - - - Dummy double state changed - The name of the EventType ({7cac53ee-7048-4dc9-b000-7b585390f34c}) of DeviceClass mock - - - - - - - - Dummy int state - The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: int, ID: {74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) ----------- -The name of the StateType ({74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) of DeviceClass mockDeviceAuto ----------- -The name of the ParamType (DeviceClass: mock, EventType: int, ID: {80baec19-54de-4948-ac46-31eabfaceb83}) ----------- -The name of the StateType ({80baec19-54de-4948-ac46-31eabfaceb83}) of DeviceClass mock - - - - - - Dummy int state changed - The name of the EventType ({74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({80baec19-54de-4948-ac46-31eabfaceb83}) of DeviceClass mock - - - - - IPv4 address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {9e5f86a0-4bb3-4892-bff8-3fc4032af6e2}) - - - - - IPv6 address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {43bf3832-dd48-4090-a836-656e8b60216e}) - - - - - - Int - The name of the ParamType (DeviceClass: mockInputType, EventType: int, ID: {d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) ----------- -The name of the StateType ({d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) of DeviceClass mockInputType - - - - - Int changed - The name of the EventType ({d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) of DeviceClass mockInputType - - - - - Mac address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e93db587-7919-48f3-8c88-1651de63c765}) - - - - - Mail address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {a8494faf-3a0f-4cf3-84b7-4b39148a838d}) - - - - - - Mock Action 1 (with params) - The name of the ActionType ({00000000-0000-0000-0000-000000000000}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({dea0f4e1-65e3-4981-8eaa-2701c53a9185}) of DeviceClass mock - - - - - - Mock Action 2 (without params) - The name of the ActionType ({ef518d53-50e2-4ca5-a4b1-e9a8b9309d44}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({defd3ed6-1a0d-400b-8879-a0202cf39935}) of DeviceClass mock - - - - - - Mock Action 3 (async) - The name of the ActionType ({5f27a9f2-59cd-4a15-98bd-6ed6e10bc6ed}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({fbae06d3-7666-483e-a39e-ec50fe89054e}) of DeviceClass mock - - - - - - Mock Action 4 (broken) - The name of the ActionType ({58a61de4-472c-4775-8fe8-583a9c83fcf1}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({df3cf33d-26d5-4577-9132-9823bd33fad0}) of DeviceClass mock - - - - - - Mock Action 5 (async, broken) - The name of the ActionType ({17ad52dd-ef2f-4947-9b73-5bf6e172a9d0}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({bfe89a1d-3497-4121-8318-e77c37537219}) of DeviceClass mock - - - - - Mock Device - The name of the DeviceClass ({753f0d32-0468-4d08-82ed-1964aab03298}) - - - - - Mock Device (Auto created) - The name of the DeviceClass ({ab4257b3-7548-47ee-9bd4-7dc3004fd197}) - - - - - Mock Device (Child) - The name of the DeviceClass ({40893c9f-bc47-40c1-8bf7-b390c7c1b4fc}) - - - - - Mock Device (Display Pin) - The name of the DeviceClass ({296f1fd4-e893-46b2-8a42-50d1bceb8730}) - - - - - Mock Device (InputTypes) - The name of the DeviceClass ({515ffdf1-55e5-498d-9abc-4e2fe768f3a9}) - - - - - Mock Device (Parent) - The name of the DeviceClass ({a71fbde9-9a38-4bf8-beab-c8aade2608ba}) - - - - - Mock Device (Push Button) - The name of the DeviceClass ({9e03144c-e436-4eea-82d9-ccb33ef778db}) - - - - - Mock Devices - The name of the plugin mockDevice ({727a4a9a-c187-446f-aadf-f1b2220607d1}) - - - - - - Mock Event 1 - The name of the EventType ({00f81fca-26f1-4a84-aa2b-4c6a3d953ec6}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({45bf3752-0fc6-46b9-89fd-ffd878b5b22b}) of DeviceClass mock - - - - - - Mock Event 2 - The name of the EventType ({6e27922d-aa9d-44d1-b9b4-9faf31b6bd97}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({863d5920-b1cf-4eb9-88bd-8f7b8583b1cf}) of DeviceClass mock - - - - - Password text - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e5c0d14b-c9f1-4aca-a56e-85bfa6977150}) - - - - - Please enter the secret which normaly will be displayed on the device. For the mockdevice the pin is 243681. - The pairing info of deviceClass mockDisplayPin - - - - - Remove from favorites - The name of the Browser Item ActionType ({da6faef8-2816-430e-93bb-57e8f9582d29}) of DeviceClass mock - - - - - Search text - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {22add8c9-ee4f-43ad-8931-58e999313ac3}) - - - - - Set Writable Bool - The name of the ActionType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - - - - - Set Writable Color - The name of the ActionType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType - - - - - Set Writable Double - The name of the ActionType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType - - - - - Set Writable Double (min/max) - The name of the ActionType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType - - - - - Set Writable Int - The name of the ActionType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - - - - - Set Writable Int (min/max) - The name of the ActionType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - - - - - Set Writable String - The name of the ActionType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType - - - - - Set Writable String (selection) - The name of the ActionType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType - - - - - Set Writable Time - The name of the ActionType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType - - - - - Set Writable Timestamp (Int) - The name of the ActionType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType - - - - - Set Writable Timestamp (UInt) - The name of the ActionType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType - - - - - Set Writable UInt - The name of the ActionType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType - - - - - Set Writable UInt (min/max) - The name of the ActionType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType - - - - - - Set allowed values - The name of the ActionType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - - - - - - - - Set bool value - The name of the ActionType ({80ba1449-b485-47d4-a067-6bf306e2a568}) of DeviceClass mockChild ----------- -The name of the ActionType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClass mockParent ----------- -The name of the ActionType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - - - - - - Set color - The name of the ActionType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - - - - - - Set double value - The name of the ActionType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - - - - - - Set percentage - The name of the ActionType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - - - - - Setting 1 - The name of the ParamType (DeviceClass: mock, Type: settings, ID: {367f7ba4-5039-47be-abd8-59cc8eaf4b9a}) - - - - - - String - The name of the ParamType (DeviceClass: mockInputType, EventType: string, ID: {27f69ca9-a321-40ff-bfee-4b0272a671b4}) ----------- -The name of the StateType ({27f69ca9-a321-40ff-bfee-4b0272a671b4}) of DeviceClass mockInputType - - - - - String changed - The name of the EventType ({27f69ca9-a321-40ff-bfee-4b0272a671b4}) of DeviceClass mockInputType - - - - - Text area - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {716f0994-bc01-42b0-b64d-59236f7320d2}) - - - - - Text line - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e6acf0c7-4b8e-4296-ac62-855d20deb816}) - - - - - - Time - The name of the ParamType (DeviceClass: mockInputType, EventType: time, ID: {8250c71e-59bc-41ab-b576-99fcfc34e8d1}) ----------- -The name of the StateType ({8250c71e-59bc-41ab-b576-99fcfc34e8d1}) of DeviceClass mockInputType - - - - - Time changed - The name of the EventType ({8250c71e-59bc-41ab-b576-99fcfc34e8d1}) of DeviceClass mockInputType - - - - - - Timeout action - The name of the ActionType ({854a0a4a-803f-4b7f-9dce-b07794f9011b}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({54646e7c-bc54-4895-81a2-590d72d120f9}) of DeviceClass mockPushButton - - - - - - Timestamp (Int) - The name of the ParamType (DeviceClass: mockInputType, EventType: timestampInt, ID: {2c91b5ef-c2d1-4367-bc65-5a13abf69641}) ----------- -The name of the StateType ({2c91b5ef-c2d1-4367-bc65-5a13abf69641}) of DeviceClass mockInputType - - - - - Timestamp (Int) changed - The name of the EventType ({2c91b5ef-c2d1-4367-bc65-5a13abf69641}) of DeviceClass mockInputType - - - - - - Timestamp (UInt) - The name of the ParamType (DeviceClass: mockInputType, EventType: timestampUInt, ID: {6c9a96e8-0d48-4f42-8967-848358fd7f79}) ----------- -The name of the StateType ({6c9a96e8-0d48-4f42-8967-848358fd7f79}) of DeviceClass mockInputType - - - - - Timestamp (UInt) changed - The name of the EventType ({6c9a96e8-0d48-4f42-8967-848358fd7f79}) of DeviceClass mockInputType - - - - - - UInt - The name of the ParamType (DeviceClass: mockInputType, EventType: uint, ID: {19e74fcc-bfd5-491f-8eb6-af128e8f1162}) ----------- -The name of the StateType ({19e74fcc-bfd5-491f-8eb6-af128e8f1162}) of DeviceClass mockInputType - - - - - UInt changed - The name of the EventType ({19e74fcc-bfd5-491f-8eb6-af128e8f1162}) of DeviceClass mockInputType - - - - - URL - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {fa67229f-fcef-496f-b671-59a4b48f3ab5}) - - - - - Wait 3 second before you continue, the push button will be pressed automatically. - The pairing info of deviceClass mockPushButton - - - - - - - Writable Bool - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableBool, ID: {a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableBool, ID: {a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) ----------- -The name of the StateType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - - - - - Writable Bool changed - The name of the EventType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - - - - - - - Writable Color - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableColor, ID: {455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableColor, ID: {455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) ----------- -The name of the StateType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType - - - - - Writable Color changed - The name of the EventType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType - - - - - - - Writable Double - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableDouble, ID: {8e2eb91b-d60b-4461-9a50-d7b8ad263170}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableDouble, ID: {8e2eb91b-d60b-4461-9a50-d7b8ad263170}) ----------- -The name of the StateType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType - - - - - - - Writable Double (min/max) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableDoubleMinMax, ID: {00d3425e-1da6-4748-8906-4555ceefb136}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableDoubleMinMax, ID: {00d3425e-1da6-4748-8906-4555ceefb136}) ----------- -The name of the StateType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType - - - - - Writable Double (min/max) changed - The name of the EventType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType - - - - - Writable Double changed - The name of the EventType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType - - - - - - - Writable Int - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableInt, ID: {857a8422-983c-47d6-a15f-d8450b3162f7}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableInt, ID: {857a8422-983c-47d6-a15f-d8450b3162f7}) ----------- -The name of the StateType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - - - - - - - Writable Int (min/max) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableIntMinMax, ID: {86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableIntMinMax, ID: {86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) ----------- -The name of the StateType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - - - - - Writable Int (min/max) changed - The name of the EventType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - - - - - Writable Int changed - The name of the EventType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - - - - - - - Writable String - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableString, ID: {ef511043-bd1a-4a5f-984c-222b7da43f38}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableString, ID: {ef511043-bd1a-4a5f-984c-222b7da43f38}) ----------- -The name of the StateType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType - - - - - - - Writable String (selection) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableStringSelection, ID: {209d7afc-6fe9-4fe9-939b-e472ea0ad639}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableStringSelection, ID: {209d7afc-6fe9-4fe9-939b-e472ea0ad639}) ----------- -The name of the StateType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType - - - - - Writable String (selection) changed - The name of the EventType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType - - - - - Writable String changed - The name of the EventType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType - - - - - - - Writable Time - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableTime, ID: {d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableTime, ID: {d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) ----------- -The name of the StateType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType - - - - - Writable Time changed - The name of the EventType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType - - - - - - - Writable Timestamp (Int) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableTimestampInt, ID: {88b6746a-b009-4df6-8986-d7884ffd94b2}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableTimestampInt, ID: {88b6746a-b009-4df6-8986-d7884ffd94b2}) ----------- -The name of the StateType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType - - - - - Writable Timestamp (Int) changed - The name of the EventType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType - - - - - - - Writable Timestamp (UInt) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableTimestampUInt, ID: {45d0069a-63ac-4265-8170-8152778608ee}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableTimestampUInt, ID: {45d0069a-63ac-4265-8170-8152778608ee}) ----------- -The name of the StateType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType - - - - - Writable Timestamp (UInt) changed - The name of the EventType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType - - - - - - - Writable UInt - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableUInt, ID: {563e9c4c-5198-400a-9f6c-358f4752af58}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableUInt, ID: {563e9c4c-5198-400a-9f6c-358f4752af58}) ----------- -The name of the StateType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType - - - - - - - Writable UInt (min/max) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableUIntMinMax, ID: {79238998-eaab-4d71-b406-5d78f1749751}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableUIntMinMax, ID: {79238998-eaab-4d71-b406-5d78f1749751}) ----------- -The name of the StateType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType - - - - - Writable UInt (min/max) changed - The name of the EventType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType - - - - - Writable UInt changed - The name of the EventType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType - - - - - - - - - - allowed values - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: allowedValues, ID: {b463c5ae-4d55-402f-8480-a5cdb485c143}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: allowedValues, ID: {b463c5ae-4d55-402f-8480-a5cdb485c143}) ----------- -The name of the StateType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: allowedValues, ID: {05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: allowedValues, ID: {05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) ----------- -The name of the StateType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - - - - - - allowed values changed - The name of the EventType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - - - - - - async - The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {a5c4315f-0624-4971-87c1-4bbfbfdbd16e}) ----------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {f2977061-4dd0-4ef5-85aa-3b7134743be3}) - - - - - - - battery level - The name of the ParamType (DeviceClass: mock, EventType: batteryLevel, ID: {6c8ab9a6-0164-4795-b829-f4394fe4edc4}) ----------- -The name of the EventType ({6c8ab9a6-0164-4795-b829-f4394fe4edc4}) of DeviceClass mock ----------- -The name of the StateType ({6c8ab9a6-0164-4795-b829-f4394fe4edc4}) of DeviceClass mock - - - - - - - battery level critical - The name of the ParamType (DeviceClass: mock, EventType: batteryCritical, ID: {580bc611-1a55-41f3-996f-8d3ccf543db3}) ----------- -The name of the EventType ({580bc611-1a55-41f3-996f-8d3ccf543db3}) of DeviceClass mock ----------- -The name of the StateType ({580bc611-1a55-41f3-996f-8d3ccf543db3}) of DeviceClass mock - - - - - - - - - - - - - - - - bool value - The name of the ParamType (DeviceClass: mockChild, ActionType: boolValue, ID: {80ba1449-b485-47d4-a067-6bf306e2a568}) ----------- -The name of the ParamType (DeviceClass: mockChild, EventType: boolValue, ID: {80ba1449-b485-47d4-a067-6bf306e2a568}) ----------- -The name of the StateType ({80ba1449-b485-47d4-a067-6bf306e2a568}) of DeviceClass mockChild ----------- -The name of the ParamType (DeviceClass: mockParent, ActionType: boolValue, ID: {d24ede5f-4064-4898-bb84-cfb533b1fbc0}) ----------- -The name of the ParamType (DeviceClass: mockParent, EventType: boolValue, ID: {d24ede5f-4064-4898-bb84-cfb533b1fbc0}) ----------- -The name of the StateType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClass mockParent ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: bool, ID: {7ffe514f-7999-4998-8350-0e73e222a8c4}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: bool, ID: {7ffe514f-7999-4998-8350-0e73e222a8c4}) ----------- -The name of the StateType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: bool, ID: {e680f7a4-b39e-46da-be41-fa3170fe3768}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: bool, ID: {e680f7a4-b39e-46da-be41-fa3170fe3768}) ----------- -The name of the StateType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - - - - - - - - bool value changed - The name of the EventType ({80ba1449-b485-47d4-a067-6bf306e2a568}) of DeviceClass mockChild ----------- -The name of the EventType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClass mockParent ----------- -The name of the EventType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - - - - - - broken - The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {66179395-ef7a-4013-9fc6-2084104eea09}) ----------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {ae8f8901-f2c1-42a5-8111-6d2fc8e4c1e4}) - - - - - - - - - - color - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: color, ID: {3e161294-8a0d-4384-9676-6959e08cc2fa}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: color, ID: {3e161294-8a0d-4384-9676-6959e08cc2fa}) ----------- -The name of the StateType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: color, ID: {20dc7c22-c50e-42db-837c-2bbced939f8e}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: color, ID: {20dc7c22-c50e-42db-837c-2bbced939f8e}) ----------- -The name of the StateType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - - - - - - color changed - The name of the EventType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - - - - - configParamBool - The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: {c75723b6-ea4f-4982-9751-6c5e39c88145}) - - - - - configParamInt - The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: {e1f72121-a426-45e2-b475-8262b5cdf103}) - - - - - - - - - - double value - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: double, ID: {17635624-7c19-4bae-8429-2f7aa5d2f843}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: double, ID: {17635624-7c19-4bae-8429-2f7aa5d2f843}) ----------- -The name of the StateType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: double, ID: {53cd7c55-49b7-441b-b970-9048f20f0e2c}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: double, ID: {53cd7c55-49b7-441b-b970-9048f20f0e2c}) ----------- -The name of the StateType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - - - - - - double value changed - The name of the EventType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - - - - - - http port - The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {bfeb0613-dab6-408c-aa27-c362c921d0d1}) ----------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {d4f06047-125e-4479-9810-b54c189917f5}) - - - - - - mockActionParam1 - The name of the ParamType (DeviceClass: mockDeviceAuto, ActionType: withParams, ID: {b8126ba6-3a54-45a3-be4d-63feb0ddb77b}) ----------- -The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: {a2d3a256-a551-4712-a65b-ecd5a436a1cb}) - - - - - - mockActionParam2 - The name of the ParamType (DeviceClass: mockDeviceAuto, ActionType: withParams, ID: {df41ba71-e43b-4854-91d1-b19d8066d4f9}) ----------- -The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: {304a4899-18be-4e3b-94f4-d03be52f3233}) - - - - - - mockParamInt - The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: event2, ID: {12ed5a15-96b4-4381-9d9c-a24875283d4f}) ----------- -The name of the ParamType (DeviceClass: mock, EventType: event2, ID: {0550e16d-60b9-4ba5-83f4-4d3cee656121}) - - - - - nymea - The name of the vendor ({2062d64d-3232-433c-88bc-0d33c0ba2ba6}) - - - - - - - - - - percentage - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: percentage, ID: {527f0687-0b28-4c26-852c-25b8f83e4797}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: percentage, ID: {527f0687-0b28-4c26-852c-25b8f83e4797}) ----------- -The name of the StateType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: percentage, ID: {72981c04-267a-4ba0-a59e-9921d2f3af9c}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: percentage, ID: {72981c04-267a-4ba0-a59e-9921d2f3af9c}) ----------- -The name of the StateType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - - - - - - percentage changed - The name of the EventType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - - - - - pin - The name of the ParamType (DeviceClass: mockDisplayPin, Type: device, ID: {da820e07-22dc-4173-9c07-2f49a4e265f9}) - - - - - - - powered - The name of the ParamType (DeviceClass: mock, ActionType: power, ID: {064aed0d-da4c-49d4-b236-60f97e98ff84}) ----------- -The name of the ParamType (DeviceClass: mock, EventType: power, ID: {064aed0d-da4c-49d4-b236-60f97e98ff84}) ----------- -The name of the StateType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - - - - - powered changed - The name of the EventType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - - - - - - - resultCount - The name of the ParamType (DeviceClass: mockDisplayPin, Type: discovery, ID: {35f6e4ba-28ad-4152-a58d-ec2600667bcf}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, Type: discovery, ID: {c40dbc59-4bba-4871-9b8e-bbd8d5d9193b}) ----------- -The name of the ParamType (DeviceClass: mock, Type: discovery, ID: {d222adb4-2f9c-4c3f-8655-76400d0fb6ce}) - - - - - set power - The name of the ActionType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - - - nymea diff --git a/translations/nymead-en_US.ts b/translations/nymead-en_US.ts index f20e8402..1cd96c98 100644 --- a/translations/nymead-en_US.ts +++ b/translations/nymead-en_US.ts @@ -4,1173 +4,47 @@ CloudNotifications - - + + Cloud Notifications - + User ID - + Device - + Title - + Message text - + Send notification - + connected - + Connected changed - - DevicePluginMock - - - Display pin!! The pin is 243681 - - - - - SimpleButton - - - - Simple button - The name of the plugin SimpleButton (28c7b102-3ac8-41f6-8dc0-f4787222a186) ----------- -The name of the DeviceClass (c16ba02d-c982-4b45-8ca2-1945d94d8e66) - - - - - nymea - The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) - - - - - press - 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 - - - - - SimplePushButtonHandler - - - If specified, all D-Bus interfaces will be bound to the session bus instead of the system bus. - - - - - mockDevice - - - Add to favorites - The name of the Browser Item ActionType ({00b8f0a8-99ca-4aa4-833d-59eb8d4d6de3}) of DeviceClass mock - - - - - - Bool - The name of the ParamType (DeviceClass: mockInputType, EventType: bool, ID: {3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) ----------- -The name of the StateType ({3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) of DeviceClass mockInputType - - - - - Bool changed - The name of the EventType ({3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) of DeviceClass mockInputType - - - - - - Color - The name of the ParamType (DeviceClass: mockInputType, EventType: color, ID: {4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) ----------- -The name of the StateType ({4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) of DeviceClass mockInputType - - - - - Color changed - The name of the EventType ({4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) of DeviceClass mockInputType - - - - - - Double - The name of the ParamType (DeviceClass: mockInputType, EventType: double, ID: {f7d2063d-959e-46ac-8568-8b99722d3b22}) ----------- -The name of the StateType ({f7d2063d-959e-46ac-8568-8b99722d3b22}) of DeviceClass mockInputType - - - - - Double changed - The name of the EventType ({f7d2063d-959e-46ac-8568-8b99722d3b22}) of DeviceClass mockInputType - - - - - - - - Dummy bool state - The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: boolValue, ID: {978b0ba5-d008-41bd-b63d-a3bd23cb6469}) ----------- -The name of the StateType ({978b0ba5-d008-41bd-b63d-a3bd23cb6469}) of DeviceClass mockDeviceAuto ----------- -The name of the ParamType (DeviceClass: mock, EventType: bool, ID: {9dd6a97c-dfd1-43dc-acbd-367932742310}) ----------- -The name of the StateType ({9dd6a97c-dfd1-43dc-acbd-367932742310}) of DeviceClass mock - - - - - - Dummy bool state changed - The name of the EventType ({978b0ba5-d008-41bd-b63d-a3bd23cb6469}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({9dd6a97c-dfd1-43dc-acbd-367932742310}) of DeviceClass mock - - - - - - Dummy double state - The name of the ParamType (DeviceClass: mock, EventType: double, ID: {7cac53ee-7048-4dc9-b000-7b585390f34c}) ----------- -The name of the StateType ({7cac53ee-7048-4dc9-b000-7b585390f34c}) of DeviceClass mock - - - - - Dummy double state changed - The name of the EventType ({7cac53ee-7048-4dc9-b000-7b585390f34c}) of DeviceClass mock - - - - - - - - Dummy int state - The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: int, ID: {74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) ----------- -The name of the StateType ({74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) of DeviceClass mockDeviceAuto ----------- -The name of the ParamType (DeviceClass: mock, EventType: int, ID: {80baec19-54de-4948-ac46-31eabfaceb83}) ----------- -The name of the StateType ({80baec19-54de-4948-ac46-31eabfaceb83}) of DeviceClass mock - - - - - - Dummy int state changed - The name of the EventType ({74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({80baec19-54de-4948-ac46-31eabfaceb83}) of DeviceClass mock - - - - - IPv4 address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {9e5f86a0-4bb3-4892-bff8-3fc4032af6e2}) - - - - - IPv6 address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {43bf3832-dd48-4090-a836-656e8b60216e}) - - - - - - Int - The name of the ParamType (DeviceClass: mockInputType, EventType: int, ID: {d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) ----------- -The name of the StateType ({d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) of DeviceClass mockInputType - - - - - Int changed - The name of the EventType ({d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) of DeviceClass mockInputType - - - - - Mac address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e93db587-7919-48f3-8c88-1651de63c765}) - - - - - Mail address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {a8494faf-3a0f-4cf3-84b7-4b39148a838d}) - - - - - - Mock Action 1 (with params) - The name of the ActionType ({00000000-0000-0000-0000-000000000000}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({dea0f4e1-65e3-4981-8eaa-2701c53a9185}) of DeviceClass mock - - - - - - Mock Action 2 (without params) - The name of the ActionType ({ef518d53-50e2-4ca5-a4b1-e9a8b9309d44}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({defd3ed6-1a0d-400b-8879-a0202cf39935}) of DeviceClass mock - - - - - - Mock Action 3 (async) - The name of the ActionType ({5f27a9f2-59cd-4a15-98bd-6ed6e10bc6ed}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({fbae06d3-7666-483e-a39e-ec50fe89054e}) of DeviceClass mock - - - - - - Mock Action 4 (broken) - The name of the ActionType ({58a61de4-472c-4775-8fe8-583a9c83fcf1}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({df3cf33d-26d5-4577-9132-9823bd33fad0}) of DeviceClass mock - - - - - - Mock Action 5 (async, broken) - The name of the ActionType ({17ad52dd-ef2f-4947-9b73-5bf6e172a9d0}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({bfe89a1d-3497-4121-8318-e77c37537219}) of DeviceClass mock - - - - - Mock Device - The name of the DeviceClass ({753f0d32-0468-4d08-82ed-1964aab03298}) - - - - - Mock Device (Auto created) - The name of the DeviceClass ({ab4257b3-7548-47ee-9bd4-7dc3004fd197}) - - - - - Mock Device (Child) - The name of the DeviceClass ({40893c9f-bc47-40c1-8bf7-b390c7c1b4fc}) - - - - - Mock Device (Display Pin) - The name of the DeviceClass ({296f1fd4-e893-46b2-8a42-50d1bceb8730}) - - - - - Mock Device (InputTypes) - The name of the DeviceClass ({515ffdf1-55e5-498d-9abc-4e2fe768f3a9}) - - - - - Mock Device (Parent) - The name of the DeviceClass ({a71fbde9-9a38-4bf8-beab-c8aade2608ba}) - - - - - Mock Device (Push Button) - The name of the DeviceClass ({9e03144c-e436-4eea-82d9-ccb33ef778db}) - - - - - Mock Devices - The name of the plugin mockDevice ({727a4a9a-c187-446f-aadf-f1b2220607d1}) - - - - - - Mock Event 1 - The name of the EventType ({00f81fca-26f1-4a84-aa2b-4c6a3d953ec6}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({45bf3752-0fc6-46b9-89fd-ffd878b5b22b}) of DeviceClass mock - - - - - - Mock Event 2 - The name of the EventType ({6e27922d-aa9d-44d1-b9b4-9faf31b6bd97}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({863d5920-b1cf-4eb9-88bd-8f7b8583b1cf}) of DeviceClass mock - - - - - Password text - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e5c0d14b-c9f1-4aca-a56e-85bfa6977150}) - - - - - Please enter the secret which normaly will be displayed on the device. For the mockdevice the pin is 243681. - The pairing info of deviceClass mockDisplayPin - - - - - Remove from favorites - The name of the Browser Item ActionType ({da6faef8-2816-430e-93bb-57e8f9582d29}) of DeviceClass mock - - - - - Search text - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {22add8c9-ee4f-43ad-8931-58e999313ac3}) - - - - - Set Writable Bool - The name of the ActionType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - - - - - Set Writable Color - The name of the ActionType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType - - - - - Set Writable Double - The name of the ActionType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType - - - - - Set Writable Double (min/max) - The name of the ActionType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType - - - - - Set Writable Int - The name of the ActionType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - - - - - Set Writable Int (min/max) - The name of the ActionType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - - - - - Set Writable String - The name of the ActionType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType - - - - - Set Writable String (selection) - The name of the ActionType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType - - - - - Set Writable Time - The name of the ActionType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType - - - - - Set Writable Timestamp (Int) - The name of the ActionType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType - - - - - Set Writable Timestamp (UInt) - The name of the ActionType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType - - - - - Set Writable UInt - The name of the ActionType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType - - - - - Set Writable UInt (min/max) - The name of the ActionType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType - - - - - - Set allowed values - The name of the ActionType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - - - - - - - - Set bool value - The name of the ActionType ({80ba1449-b485-47d4-a067-6bf306e2a568}) of DeviceClass mockChild ----------- -The name of the ActionType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClass mockParent ----------- -The name of the ActionType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - - - - - - Set color - The name of the ActionType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - - - - - - Set double value - The name of the ActionType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - - - - - - Set percentage - The name of the ActionType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - - - - - Setting 1 - The name of the ParamType (DeviceClass: mock, Type: settings, ID: {367f7ba4-5039-47be-abd8-59cc8eaf4b9a}) - - - - - - String - The name of the ParamType (DeviceClass: mockInputType, EventType: string, ID: {27f69ca9-a321-40ff-bfee-4b0272a671b4}) ----------- -The name of the StateType ({27f69ca9-a321-40ff-bfee-4b0272a671b4}) of DeviceClass mockInputType - - - - - String changed - The name of the EventType ({27f69ca9-a321-40ff-bfee-4b0272a671b4}) of DeviceClass mockInputType - - - - - Text area - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {716f0994-bc01-42b0-b64d-59236f7320d2}) - - - - - Text line - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e6acf0c7-4b8e-4296-ac62-855d20deb816}) - - - - - - Time - The name of the ParamType (DeviceClass: mockInputType, EventType: time, ID: {8250c71e-59bc-41ab-b576-99fcfc34e8d1}) ----------- -The name of the StateType ({8250c71e-59bc-41ab-b576-99fcfc34e8d1}) of DeviceClass mockInputType - - - - - Time changed - The name of the EventType ({8250c71e-59bc-41ab-b576-99fcfc34e8d1}) of DeviceClass mockInputType - - - - - - Timeout action - The name of the ActionType ({854a0a4a-803f-4b7f-9dce-b07794f9011b}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({54646e7c-bc54-4895-81a2-590d72d120f9}) of DeviceClass mockPushButton - - - - - - Timestamp (Int) - The name of the ParamType (DeviceClass: mockInputType, EventType: timestampInt, ID: {2c91b5ef-c2d1-4367-bc65-5a13abf69641}) ----------- -The name of the StateType ({2c91b5ef-c2d1-4367-bc65-5a13abf69641}) of DeviceClass mockInputType - - - - - Timestamp (Int) changed - The name of the EventType ({2c91b5ef-c2d1-4367-bc65-5a13abf69641}) of DeviceClass mockInputType - - - - - - Timestamp (UInt) - The name of the ParamType (DeviceClass: mockInputType, EventType: timestampUInt, ID: {6c9a96e8-0d48-4f42-8967-848358fd7f79}) ----------- -The name of the StateType ({6c9a96e8-0d48-4f42-8967-848358fd7f79}) of DeviceClass mockInputType - - - - - Timestamp (UInt) changed - The name of the EventType ({6c9a96e8-0d48-4f42-8967-848358fd7f79}) of DeviceClass mockInputType - - - - - - UInt - The name of the ParamType (DeviceClass: mockInputType, EventType: uint, ID: {19e74fcc-bfd5-491f-8eb6-af128e8f1162}) ----------- -The name of the StateType ({19e74fcc-bfd5-491f-8eb6-af128e8f1162}) of DeviceClass mockInputType - - - - - UInt changed - The name of the EventType ({19e74fcc-bfd5-491f-8eb6-af128e8f1162}) of DeviceClass mockInputType - - - - - URL - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {fa67229f-fcef-496f-b671-59a4b48f3ab5}) - - - - - Wait 3 second before you continue, the push button will be pressed automatically. - The pairing info of deviceClass mockPushButton - - - - - - - Writable Bool - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableBool, ID: {a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableBool, ID: {a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) ----------- -The name of the StateType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - - - - - Writable Bool changed - The name of the EventType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - - - - - - - Writable Color - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableColor, ID: {455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableColor, ID: {455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) ----------- -The name of the StateType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType - - - - - Writable Color changed - The name of the EventType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType - - - - - - - Writable Double - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableDouble, ID: {8e2eb91b-d60b-4461-9a50-d7b8ad263170}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableDouble, ID: {8e2eb91b-d60b-4461-9a50-d7b8ad263170}) ----------- -The name of the StateType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType - - - - - - - Writable Double (min/max) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableDoubleMinMax, ID: {00d3425e-1da6-4748-8906-4555ceefb136}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableDoubleMinMax, ID: {00d3425e-1da6-4748-8906-4555ceefb136}) ----------- -The name of the StateType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType - - - - - Writable Double (min/max) changed - The name of the EventType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType - - - - - Writable Double changed - The name of the EventType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType - - - - - - - Writable Int - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableInt, ID: {857a8422-983c-47d6-a15f-d8450b3162f7}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableInt, ID: {857a8422-983c-47d6-a15f-d8450b3162f7}) ----------- -The name of the StateType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - - - - - - - Writable Int (min/max) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableIntMinMax, ID: {86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableIntMinMax, ID: {86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) ----------- -The name of the StateType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - - - - - Writable Int (min/max) changed - The name of the EventType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - - - - - Writable Int changed - The name of the EventType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - - - - - - - Writable String - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableString, ID: {ef511043-bd1a-4a5f-984c-222b7da43f38}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableString, ID: {ef511043-bd1a-4a5f-984c-222b7da43f38}) ----------- -The name of the StateType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType - - - - - - - Writable String (selection) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableStringSelection, ID: {209d7afc-6fe9-4fe9-939b-e472ea0ad639}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableStringSelection, ID: {209d7afc-6fe9-4fe9-939b-e472ea0ad639}) ----------- -The name of the StateType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType - - - - - Writable String (selection) changed - The name of the EventType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType - - - - - Writable String changed - The name of the EventType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType - - - - - - - Writable Time - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableTime, ID: {d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableTime, ID: {d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) ----------- -The name of the StateType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType - - - - - Writable Time changed - The name of the EventType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType - - - - - - - Writable Timestamp (Int) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableTimestampInt, ID: {88b6746a-b009-4df6-8986-d7884ffd94b2}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableTimestampInt, ID: {88b6746a-b009-4df6-8986-d7884ffd94b2}) ----------- -The name of the StateType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType - - - - - Writable Timestamp (Int) changed - The name of the EventType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType - - - - - - - Writable Timestamp (UInt) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableTimestampUInt, ID: {45d0069a-63ac-4265-8170-8152778608ee}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableTimestampUInt, ID: {45d0069a-63ac-4265-8170-8152778608ee}) ----------- -The name of the StateType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType - - - - - Writable Timestamp (UInt) changed - The name of the EventType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType - - - - - - - Writable UInt - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableUInt, ID: {563e9c4c-5198-400a-9f6c-358f4752af58}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableUInt, ID: {563e9c4c-5198-400a-9f6c-358f4752af58}) ----------- -The name of the StateType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType - - - - - - - Writable UInt (min/max) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableUIntMinMax, ID: {79238998-eaab-4d71-b406-5d78f1749751}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableUIntMinMax, ID: {79238998-eaab-4d71-b406-5d78f1749751}) ----------- -The name of the StateType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType - - - - - Writable UInt (min/max) changed - The name of the EventType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType - - - - - Writable UInt changed - The name of the EventType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType - - - - - - - - - - allowed values - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: allowedValues, ID: {b463c5ae-4d55-402f-8480-a5cdb485c143}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: allowedValues, ID: {b463c5ae-4d55-402f-8480-a5cdb485c143}) ----------- -The name of the StateType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: allowedValues, ID: {05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: allowedValues, ID: {05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) ----------- -The name of the StateType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - - - - - - allowed values changed - The name of the EventType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - - - - - - async - The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {a5c4315f-0624-4971-87c1-4bbfbfdbd16e}) ----------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {f2977061-4dd0-4ef5-85aa-3b7134743be3}) - - - - - - - battery level - The name of the ParamType (DeviceClass: mock, EventType: batteryLevel, ID: {6c8ab9a6-0164-4795-b829-f4394fe4edc4}) ----------- -The name of the EventType ({6c8ab9a6-0164-4795-b829-f4394fe4edc4}) of DeviceClass mock ----------- -The name of the StateType ({6c8ab9a6-0164-4795-b829-f4394fe4edc4}) of DeviceClass mock - - - - - - - battery level critical - The name of the ParamType (DeviceClass: mock, EventType: batteryCritical, ID: {580bc611-1a55-41f3-996f-8d3ccf543db3}) ----------- -The name of the EventType ({580bc611-1a55-41f3-996f-8d3ccf543db3}) of DeviceClass mock ----------- -The name of the StateType ({580bc611-1a55-41f3-996f-8d3ccf543db3}) of DeviceClass mock - - - - - - - - - - - - - - - - bool value - The name of the ParamType (DeviceClass: mockChild, ActionType: boolValue, ID: {80ba1449-b485-47d4-a067-6bf306e2a568}) ----------- -The name of the ParamType (DeviceClass: mockChild, EventType: boolValue, ID: {80ba1449-b485-47d4-a067-6bf306e2a568}) ----------- -The name of the StateType ({80ba1449-b485-47d4-a067-6bf306e2a568}) of DeviceClass mockChild ----------- -The name of the ParamType (DeviceClass: mockParent, ActionType: boolValue, ID: {d24ede5f-4064-4898-bb84-cfb533b1fbc0}) ----------- -The name of the ParamType (DeviceClass: mockParent, EventType: boolValue, ID: {d24ede5f-4064-4898-bb84-cfb533b1fbc0}) ----------- -The name of the StateType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClass mockParent ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: bool, ID: {7ffe514f-7999-4998-8350-0e73e222a8c4}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: bool, ID: {7ffe514f-7999-4998-8350-0e73e222a8c4}) ----------- -The name of the StateType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: bool, ID: {e680f7a4-b39e-46da-be41-fa3170fe3768}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: bool, ID: {e680f7a4-b39e-46da-be41-fa3170fe3768}) ----------- -The name of the StateType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - - - - - - - - bool value changed - The name of the EventType ({80ba1449-b485-47d4-a067-6bf306e2a568}) of DeviceClass mockChild ----------- -The name of the EventType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClass mockParent ----------- -The name of the EventType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - - - - - - broken - The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {66179395-ef7a-4013-9fc6-2084104eea09}) ----------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {ae8f8901-f2c1-42a5-8111-6d2fc8e4c1e4}) - - - - - - - - - - color - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: color, ID: {3e161294-8a0d-4384-9676-6959e08cc2fa}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: color, ID: {3e161294-8a0d-4384-9676-6959e08cc2fa}) ----------- -The name of the StateType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: color, ID: {20dc7c22-c50e-42db-837c-2bbced939f8e}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: color, ID: {20dc7c22-c50e-42db-837c-2bbced939f8e}) ----------- -The name of the StateType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - - - - - - color changed - The name of the EventType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - - - - - configParamBool - The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: {c75723b6-ea4f-4982-9751-6c5e39c88145}) - - - - - configParamInt - The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: {e1f72121-a426-45e2-b475-8262b5cdf103}) - - - - - - - - - - double value - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: double, ID: {17635624-7c19-4bae-8429-2f7aa5d2f843}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: double, ID: {17635624-7c19-4bae-8429-2f7aa5d2f843}) ----------- -The name of the StateType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: double, ID: {53cd7c55-49b7-441b-b970-9048f20f0e2c}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: double, ID: {53cd7c55-49b7-441b-b970-9048f20f0e2c}) ----------- -The name of the StateType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - - - - - - double value changed - The name of the EventType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - - - - - - http port - The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {bfeb0613-dab6-408c-aa27-c362c921d0d1}) ----------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {d4f06047-125e-4479-9810-b54c189917f5}) - - - - - - mockActionParam1 - The name of the ParamType (DeviceClass: mockDeviceAuto, ActionType: withParams, ID: {b8126ba6-3a54-45a3-be4d-63feb0ddb77b}) ----------- -The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: {a2d3a256-a551-4712-a65b-ecd5a436a1cb}) - - - - - - mockActionParam2 - The name of the ParamType (DeviceClass: mockDeviceAuto, ActionType: withParams, ID: {df41ba71-e43b-4854-91d1-b19d8066d4f9}) ----------- -The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: {304a4899-18be-4e3b-94f4-d03be52f3233}) - - - - - - mockParamInt - The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: event2, ID: {12ed5a15-96b4-4381-9d9c-a24875283d4f}) ----------- -The name of the ParamType (DeviceClass: mock, EventType: event2, ID: {0550e16d-60b9-4ba5-83f4-4d3cee656121}) - - - - - nymea - The name of the vendor ({2062d64d-3232-433c-88bc-0d33c0ba2ba6}) - - - - - - - - - - percentage - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: percentage, ID: {527f0687-0b28-4c26-852c-25b8f83e4797}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: percentage, ID: {527f0687-0b28-4c26-852c-25b8f83e4797}) ----------- -The name of the StateType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: percentage, ID: {72981c04-267a-4ba0-a59e-9921d2f3af9c}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: percentage, ID: {72981c04-267a-4ba0-a59e-9921d2f3af9c}) ----------- -The name of the StateType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - - - - - - percentage changed - The name of the EventType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - - - - - pin - The name of the ParamType (DeviceClass: mockDisplayPin, Type: device, ID: {da820e07-22dc-4173-9c07-2f49a4e265f9}) - - - - - - - powered - The name of the ParamType (DeviceClass: mock, ActionType: power, ID: {064aed0d-da4c-49d4-b236-60f97e98ff84}) ----------- -The name of the ParamType (DeviceClass: mock, EventType: power, ID: {064aed0d-da4c-49d4-b236-60f97e98ff84}) ----------- -The name of the StateType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - - - - - powered changed - The name of the EventType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - - - - - - - resultCount - The name of the ParamType (DeviceClass: mockDisplayPin, Type: discovery, ID: {35f6e4ba-28ad-4152-a58d-ec2600667bcf}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, Type: discovery, ID: {c40dbc59-4bba-4871-9b8e-bbd8d5d9193b}) ----------- -The name of the ParamType (DeviceClass: mock, Type: discovery, ID: {d222adb4-2f9c-4c3f-8655-76400d0fb6ce}) - - - - - set power - The name of the ActionType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - - - nymea diff --git a/translations/nymead-es.ts b/translations/nymead-es.ts index da943a61..c1d4b8ad 100644 --- a/translations/nymead-es.ts +++ b/translations/nymead-es.ts @@ -4,1173 +4,47 @@ CloudNotifications - - + + Cloud Notifications Notificaciones en la nube - + User ID Identificación de usuario - + Device Dispositivo - + Title Título - + Message text Texto de mensaje - + Send notification Enviar notificación - + connected conectado - + Connected changed Conexión modificada - - DevicePluginMock - - - Display pin!! The pin is 243681 - Mostrar pin El pin es 243681 - - - - SimpleButton - - - - Simple button - The name of the plugin SimpleButton (28c7b102-3ac8-41f6-8dc0-f4787222a186) ----------- -The name of the DeviceClass (c16ba02d-c982-4b45-8ca2-1945d94d8e66) - - - - - nymea - The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) - - - - - press - 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 - - - - - SimplePushButtonHandler - - - If specified, all D-Bus interfaces will be bound to the session bus instead of the system bus. - Si se ha especificado, todas las interfaces D-Bus estarán conectadas a la sesión en lugar de al bus de sistema. - - - - mockDevice - - - Add to favorites - The name of the Browser Item ActionType ({00b8f0a8-99ca-4aa4-833d-59eb8d4d6de3}) of DeviceClass mock - - - - - - Bool - The name of the ParamType (DeviceClass: mockInputType, EventType: bool, ID: {3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) ----------- -The name of the StateType ({3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) of DeviceClass mockInputType - - - - - Bool changed - The name of the EventType ({3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) of DeviceClass mockInputType - - - - - - Color - The name of the ParamType (DeviceClass: mockInputType, EventType: color, ID: {4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) ----------- -The name of the StateType ({4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) of DeviceClass mockInputType - - - - - Color changed - The name of the EventType ({4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) of DeviceClass mockInputType - - - - - - Double - The name of the ParamType (DeviceClass: mockInputType, EventType: double, ID: {f7d2063d-959e-46ac-8568-8b99722d3b22}) ----------- -The name of the StateType ({f7d2063d-959e-46ac-8568-8b99722d3b22}) of DeviceClass mockInputType - - - - - Double changed - The name of the EventType ({f7d2063d-959e-46ac-8568-8b99722d3b22}) of DeviceClass mockInputType - - - - - - - - Dummy bool state - The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: boolValue, ID: {978b0ba5-d008-41bd-b63d-a3bd23cb6469}) ----------- -The name of the StateType ({978b0ba5-d008-41bd-b63d-a3bd23cb6469}) of DeviceClass mockDeviceAuto ----------- -The name of the ParamType (DeviceClass: mock, EventType: bool, ID: {9dd6a97c-dfd1-43dc-acbd-367932742310}) ----------- -The name of the StateType ({9dd6a97c-dfd1-43dc-acbd-367932742310}) of DeviceClass mock - - - - - - Dummy bool state changed - The name of the EventType ({978b0ba5-d008-41bd-b63d-a3bd23cb6469}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({9dd6a97c-dfd1-43dc-acbd-367932742310}) of DeviceClass mock - - - - - - Dummy double state - The name of the ParamType (DeviceClass: mock, EventType: double, ID: {7cac53ee-7048-4dc9-b000-7b585390f34c}) ----------- -The name of the StateType ({7cac53ee-7048-4dc9-b000-7b585390f34c}) of DeviceClass mock - - - - - Dummy double state changed - The name of the EventType ({7cac53ee-7048-4dc9-b000-7b585390f34c}) of DeviceClass mock - - - - - - - - Dummy int state - The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: int, ID: {74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) ----------- -The name of the StateType ({74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) of DeviceClass mockDeviceAuto ----------- -The name of the ParamType (DeviceClass: mock, EventType: int, ID: {80baec19-54de-4948-ac46-31eabfaceb83}) ----------- -The name of the StateType ({80baec19-54de-4948-ac46-31eabfaceb83}) of DeviceClass mock - - - - - - Dummy int state changed - The name of the EventType ({74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({80baec19-54de-4948-ac46-31eabfaceb83}) of DeviceClass mock - - - - - IPv4 address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {9e5f86a0-4bb3-4892-bff8-3fc4032af6e2}) - - - - - IPv6 address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {43bf3832-dd48-4090-a836-656e8b60216e}) - - - - - - Int - The name of the ParamType (DeviceClass: mockInputType, EventType: int, ID: {d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) ----------- -The name of the StateType ({d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) of DeviceClass mockInputType - - - - - Int changed - The name of the EventType ({d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) of DeviceClass mockInputType - - - - - Mac address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e93db587-7919-48f3-8c88-1651de63c765}) - - - - - Mail address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {a8494faf-3a0f-4cf3-84b7-4b39148a838d}) - - - - - - Mock Action 1 (with params) - The name of the ActionType ({00000000-0000-0000-0000-000000000000}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({dea0f4e1-65e3-4981-8eaa-2701c53a9185}) of DeviceClass mock - - - - - - Mock Action 2 (without params) - The name of the ActionType ({ef518d53-50e2-4ca5-a4b1-e9a8b9309d44}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({defd3ed6-1a0d-400b-8879-a0202cf39935}) of DeviceClass mock - - - - - - Mock Action 3 (async) - The name of the ActionType ({5f27a9f2-59cd-4a15-98bd-6ed6e10bc6ed}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({fbae06d3-7666-483e-a39e-ec50fe89054e}) of DeviceClass mock - - - - - - Mock Action 4 (broken) - The name of the ActionType ({58a61de4-472c-4775-8fe8-583a9c83fcf1}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({df3cf33d-26d5-4577-9132-9823bd33fad0}) of DeviceClass mock - - - - - - Mock Action 5 (async, broken) - The name of the ActionType ({17ad52dd-ef2f-4947-9b73-5bf6e172a9d0}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({bfe89a1d-3497-4121-8318-e77c37537219}) of DeviceClass mock - - - - - Mock Device - The name of the DeviceClass ({753f0d32-0468-4d08-82ed-1964aab03298}) - - - - - Mock Device (Auto created) - The name of the DeviceClass ({ab4257b3-7548-47ee-9bd4-7dc3004fd197}) - - - - - Mock Device (Child) - The name of the DeviceClass ({40893c9f-bc47-40c1-8bf7-b390c7c1b4fc}) - - - - - Mock Device (Display Pin) - The name of the DeviceClass ({296f1fd4-e893-46b2-8a42-50d1bceb8730}) - - - - - Mock Device (InputTypes) - The name of the DeviceClass ({515ffdf1-55e5-498d-9abc-4e2fe768f3a9}) - - - - - Mock Device (Parent) - The name of the DeviceClass ({a71fbde9-9a38-4bf8-beab-c8aade2608ba}) - - - - - Mock Device (Push Button) - The name of the DeviceClass ({9e03144c-e436-4eea-82d9-ccb33ef778db}) - - - - - Mock Devices - The name of the plugin mockDevice ({727a4a9a-c187-446f-aadf-f1b2220607d1}) - - - - - - Mock Event 1 - The name of the EventType ({00f81fca-26f1-4a84-aa2b-4c6a3d953ec6}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({45bf3752-0fc6-46b9-89fd-ffd878b5b22b}) of DeviceClass mock - - - - - - Mock Event 2 - The name of the EventType ({6e27922d-aa9d-44d1-b9b4-9faf31b6bd97}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({863d5920-b1cf-4eb9-88bd-8f7b8583b1cf}) of DeviceClass mock - - - - - Password text - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e5c0d14b-c9f1-4aca-a56e-85bfa6977150}) - - - - - Please enter the secret which normaly will be displayed on the device. For the mockdevice the pin is 243681. - The pairing info of deviceClass mockDisplayPin - - - - - Remove from favorites - The name of the Browser Item ActionType ({da6faef8-2816-430e-93bb-57e8f9582d29}) of DeviceClass mock - - - - - Search text - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {22add8c9-ee4f-43ad-8931-58e999313ac3}) - - - - - Set Writable Bool - The name of the ActionType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - - - - - Set Writable Color - The name of the ActionType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType - - - - - Set Writable Double - The name of the ActionType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType - - - - - Set Writable Double (min/max) - The name of the ActionType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType - - - - - Set Writable Int - The name of the ActionType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - - - - - Set Writable Int (min/max) - The name of the ActionType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - - - - - Set Writable String - The name of the ActionType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType - - - - - Set Writable String (selection) - The name of the ActionType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType - - - - - Set Writable Time - The name of the ActionType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType - - - - - Set Writable Timestamp (Int) - The name of the ActionType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType - - - - - Set Writable Timestamp (UInt) - The name of the ActionType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType - - - - - Set Writable UInt - The name of the ActionType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType - - - - - Set Writable UInt (min/max) - The name of the ActionType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType - - - - - - Set allowed values - The name of the ActionType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - - - - - - - - Set bool value - The name of the ActionType ({80ba1449-b485-47d4-a067-6bf306e2a568}) of DeviceClass mockChild ----------- -The name of the ActionType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClass mockParent ----------- -The name of the ActionType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - - - - - - Set color - The name of the ActionType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - - - - - - Set double value - The name of the ActionType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - - - - - - Set percentage - The name of the ActionType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - - - - - Setting 1 - The name of the ParamType (DeviceClass: mock, Type: settings, ID: {367f7ba4-5039-47be-abd8-59cc8eaf4b9a}) - - - - - - String - The name of the ParamType (DeviceClass: mockInputType, EventType: string, ID: {27f69ca9-a321-40ff-bfee-4b0272a671b4}) ----------- -The name of the StateType ({27f69ca9-a321-40ff-bfee-4b0272a671b4}) of DeviceClass mockInputType - - - - - String changed - The name of the EventType ({27f69ca9-a321-40ff-bfee-4b0272a671b4}) of DeviceClass mockInputType - - - - - Text area - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {716f0994-bc01-42b0-b64d-59236f7320d2}) - - - - - Text line - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e6acf0c7-4b8e-4296-ac62-855d20deb816}) - - - - - - Time - The name of the ParamType (DeviceClass: mockInputType, EventType: time, ID: {8250c71e-59bc-41ab-b576-99fcfc34e8d1}) ----------- -The name of the StateType ({8250c71e-59bc-41ab-b576-99fcfc34e8d1}) of DeviceClass mockInputType - - - - - Time changed - The name of the EventType ({8250c71e-59bc-41ab-b576-99fcfc34e8d1}) of DeviceClass mockInputType - - - - - - Timeout action - The name of the ActionType ({854a0a4a-803f-4b7f-9dce-b07794f9011b}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({54646e7c-bc54-4895-81a2-590d72d120f9}) of DeviceClass mockPushButton - - - - - - Timestamp (Int) - The name of the ParamType (DeviceClass: mockInputType, EventType: timestampInt, ID: {2c91b5ef-c2d1-4367-bc65-5a13abf69641}) ----------- -The name of the StateType ({2c91b5ef-c2d1-4367-bc65-5a13abf69641}) of DeviceClass mockInputType - - - - - Timestamp (Int) changed - The name of the EventType ({2c91b5ef-c2d1-4367-bc65-5a13abf69641}) of DeviceClass mockInputType - - - - - - Timestamp (UInt) - The name of the ParamType (DeviceClass: mockInputType, EventType: timestampUInt, ID: {6c9a96e8-0d48-4f42-8967-848358fd7f79}) ----------- -The name of the StateType ({6c9a96e8-0d48-4f42-8967-848358fd7f79}) of DeviceClass mockInputType - - - - - Timestamp (UInt) changed - The name of the EventType ({6c9a96e8-0d48-4f42-8967-848358fd7f79}) of DeviceClass mockInputType - - - - - - UInt - The name of the ParamType (DeviceClass: mockInputType, EventType: uint, ID: {19e74fcc-bfd5-491f-8eb6-af128e8f1162}) ----------- -The name of the StateType ({19e74fcc-bfd5-491f-8eb6-af128e8f1162}) of DeviceClass mockInputType - - - - - UInt changed - The name of the EventType ({19e74fcc-bfd5-491f-8eb6-af128e8f1162}) of DeviceClass mockInputType - - - - - URL - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {fa67229f-fcef-496f-b671-59a4b48f3ab5}) - - - - - Wait 3 second before you continue, the push button will be pressed automatically. - The pairing info of deviceClass mockPushButton - - - - - - - Writable Bool - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableBool, ID: {a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableBool, ID: {a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) ----------- -The name of the StateType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - - - - - Writable Bool changed - The name of the EventType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - - - - - - - Writable Color - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableColor, ID: {455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableColor, ID: {455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) ----------- -The name of the StateType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType - - - - - Writable Color changed - The name of the EventType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType - - - - - - - Writable Double - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableDouble, ID: {8e2eb91b-d60b-4461-9a50-d7b8ad263170}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableDouble, ID: {8e2eb91b-d60b-4461-9a50-d7b8ad263170}) ----------- -The name of the StateType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType - - - - - - - Writable Double (min/max) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableDoubleMinMax, ID: {00d3425e-1da6-4748-8906-4555ceefb136}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableDoubleMinMax, ID: {00d3425e-1da6-4748-8906-4555ceefb136}) ----------- -The name of the StateType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType - - - - - Writable Double (min/max) changed - The name of the EventType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType - - - - - Writable Double changed - The name of the EventType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType - - - - - - - Writable Int - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableInt, ID: {857a8422-983c-47d6-a15f-d8450b3162f7}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableInt, ID: {857a8422-983c-47d6-a15f-d8450b3162f7}) ----------- -The name of the StateType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - - - - - - - Writable Int (min/max) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableIntMinMax, ID: {86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableIntMinMax, ID: {86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) ----------- -The name of the StateType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - - - - - Writable Int (min/max) changed - The name of the EventType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - - - - - Writable Int changed - The name of the EventType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - - - - - - - Writable String - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableString, ID: {ef511043-bd1a-4a5f-984c-222b7da43f38}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableString, ID: {ef511043-bd1a-4a5f-984c-222b7da43f38}) ----------- -The name of the StateType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType - - - - - - - Writable String (selection) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableStringSelection, ID: {209d7afc-6fe9-4fe9-939b-e472ea0ad639}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableStringSelection, ID: {209d7afc-6fe9-4fe9-939b-e472ea0ad639}) ----------- -The name of the StateType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType - - - - - Writable String (selection) changed - The name of the EventType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType - - - - - Writable String changed - The name of the EventType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType - - - - - - - Writable Time - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableTime, ID: {d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableTime, ID: {d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) ----------- -The name of the StateType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType - - - - - Writable Time changed - The name of the EventType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType - - - - - - - Writable Timestamp (Int) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableTimestampInt, ID: {88b6746a-b009-4df6-8986-d7884ffd94b2}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableTimestampInt, ID: {88b6746a-b009-4df6-8986-d7884ffd94b2}) ----------- -The name of the StateType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType - - - - - Writable Timestamp (Int) changed - The name of the EventType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType - - - - - - - Writable Timestamp (UInt) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableTimestampUInt, ID: {45d0069a-63ac-4265-8170-8152778608ee}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableTimestampUInt, ID: {45d0069a-63ac-4265-8170-8152778608ee}) ----------- -The name of the StateType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType - - - - - Writable Timestamp (UInt) changed - The name of the EventType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType - - - - - - - Writable UInt - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableUInt, ID: {563e9c4c-5198-400a-9f6c-358f4752af58}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableUInt, ID: {563e9c4c-5198-400a-9f6c-358f4752af58}) ----------- -The name of the StateType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType - - - - - - - Writable UInt (min/max) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableUIntMinMax, ID: {79238998-eaab-4d71-b406-5d78f1749751}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableUIntMinMax, ID: {79238998-eaab-4d71-b406-5d78f1749751}) ----------- -The name of the StateType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType - - - - - Writable UInt (min/max) changed - The name of the EventType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType - - - - - Writable UInt changed - The name of the EventType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType - - - - - - - - - - allowed values - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: allowedValues, ID: {b463c5ae-4d55-402f-8480-a5cdb485c143}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: allowedValues, ID: {b463c5ae-4d55-402f-8480-a5cdb485c143}) ----------- -The name of the StateType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: allowedValues, ID: {05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: allowedValues, ID: {05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) ----------- -The name of the StateType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - - - - - - allowed values changed - The name of the EventType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - - - - - - async - The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {a5c4315f-0624-4971-87c1-4bbfbfdbd16e}) ----------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {f2977061-4dd0-4ef5-85aa-3b7134743be3}) - - - - - - - battery level - The name of the ParamType (DeviceClass: mock, EventType: batteryLevel, ID: {6c8ab9a6-0164-4795-b829-f4394fe4edc4}) ----------- -The name of the EventType ({6c8ab9a6-0164-4795-b829-f4394fe4edc4}) of DeviceClass mock ----------- -The name of the StateType ({6c8ab9a6-0164-4795-b829-f4394fe4edc4}) of DeviceClass mock - - - - - - - battery level critical - The name of the ParamType (DeviceClass: mock, EventType: batteryCritical, ID: {580bc611-1a55-41f3-996f-8d3ccf543db3}) ----------- -The name of the EventType ({580bc611-1a55-41f3-996f-8d3ccf543db3}) of DeviceClass mock ----------- -The name of the StateType ({580bc611-1a55-41f3-996f-8d3ccf543db3}) of DeviceClass mock - - - - - - - - - - - - - - - - bool value - The name of the ParamType (DeviceClass: mockChild, ActionType: boolValue, ID: {80ba1449-b485-47d4-a067-6bf306e2a568}) ----------- -The name of the ParamType (DeviceClass: mockChild, EventType: boolValue, ID: {80ba1449-b485-47d4-a067-6bf306e2a568}) ----------- -The name of the StateType ({80ba1449-b485-47d4-a067-6bf306e2a568}) of DeviceClass mockChild ----------- -The name of the ParamType (DeviceClass: mockParent, ActionType: boolValue, ID: {d24ede5f-4064-4898-bb84-cfb533b1fbc0}) ----------- -The name of the ParamType (DeviceClass: mockParent, EventType: boolValue, ID: {d24ede5f-4064-4898-bb84-cfb533b1fbc0}) ----------- -The name of the StateType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClass mockParent ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: bool, ID: {7ffe514f-7999-4998-8350-0e73e222a8c4}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: bool, ID: {7ffe514f-7999-4998-8350-0e73e222a8c4}) ----------- -The name of the StateType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: bool, ID: {e680f7a4-b39e-46da-be41-fa3170fe3768}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: bool, ID: {e680f7a4-b39e-46da-be41-fa3170fe3768}) ----------- -The name of the StateType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - - - - - - - - bool value changed - The name of the EventType ({80ba1449-b485-47d4-a067-6bf306e2a568}) of DeviceClass mockChild ----------- -The name of the EventType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClass mockParent ----------- -The name of the EventType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - - - - - - broken - The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {66179395-ef7a-4013-9fc6-2084104eea09}) ----------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {ae8f8901-f2c1-42a5-8111-6d2fc8e4c1e4}) - - - - - - - - - - color - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: color, ID: {3e161294-8a0d-4384-9676-6959e08cc2fa}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: color, ID: {3e161294-8a0d-4384-9676-6959e08cc2fa}) ----------- -The name of the StateType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: color, ID: {20dc7c22-c50e-42db-837c-2bbced939f8e}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: color, ID: {20dc7c22-c50e-42db-837c-2bbced939f8e}) ----------- -The name of the StateType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - - - - - - color changed - The name of the EventType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - - - - - configParamBool - The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: {c75723b6-ea4f-4982-9751-6c5e39c88145}) - - - - - configParamInt - The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: {e1f72121-a426-45e2-b475-8262b5cdf103}) - - - - - - - - - - double value - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: double, ID: {17635624-7c19-4bae-8429-2f7aa5d2f843}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: double, ID: {17635624-7c19-4bae-8429-2f7aa5d2f843}) ----------- -The name of the StateType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: double, ID: {53cd7c55-49b7-441b-b970-9048f20f0e2c}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: double, ID: {53cd7c55-49b7-441b-b970-9048f20f0e2c}) ----------- -The name of the StateType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - - - - - - double value changed - The name of the EventType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - - - - - - http port - The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {bfeb0613-dab6-408c-aa27-c362c921d0d1}) ----------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {d4f06047-125e-4479-9810-b54c189917f5}) - - - - - - mockActionParam1 - The name of the ParamType (DeviceClass: mockDeviceAuto, ActionType: withParams, ID: {b8126ba6-3a54-45a3-be4d-63feb0ddb77b}) ----------- -The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: {a2d3a256-a551-4712-a65b-ecd5a436a1cb}) - - - - - - mockActionParam2 - The name of the ParamType (DeviceClass: mockDeviceAuto, ActionType: withParams, ID: {df41ba71-e43b-4854-91d1-b19d8066d4f9}) ----------- -The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: {304a4899-18be-4e3b-94f4-d03be52f3233}) - - - - - - mockParamInt - The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: event2, ID: {12ed5a15-96b4-4381-9d9c-a24875283d4f}) ----------- -The name of the ParamType (DeviceClass: mock, EventType: event2, ID: {0550e16d-60b9-4ba5-83f4-4d3cee656121}) - - - - - nymea - The name of the vendor ({2062d64d-3232-433c-88bc-0d33c0ba2ba6}) - - - - - - - - - - percentage - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: percentage, ID: {527f0687-0b28-4c26-852c-25b8f83e4797}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: percentage, ID: {527f0687-0b28-4c26-852c-25b8f83e4797}) ----------- -The name of the StateType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: percentage, ID: {72981c04-267a-4ba0-a59e-9921d2f3af9c}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: percentage, ID: {72981c04-267a-4ba0-a59e-9921d2f3af9c}) ----------- -The name of the StateType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - - - - - - percentage changed - The name of the EventType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - - - - - pin - The name of the ParamType (DeviceClass: mockDisplayPin, Type: device, ID: {da820e07-22dc-4173-9c07-2f49a4e265f9}) - - - - - - - powered - The name of the ParamType (DeviceClass: mock, ActionType: power, ID: {064aed0d-da4c-49d4-b236-60f97e98ff84}) ----------- -The name of the ParamType (DeviceClass: mock, EventType: power, ID: {064aed0d-da4c-49d4-b236-60f97e98ff84}) ----------- -The name of the StateType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - - - - - powered changed - The name of the EventType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - - - - - - - resultCount - The name of the ParamType (DeviceClass: mockDisplayPin, Type: discovery, ID: {35f6e4ba-28ad-4152-a58d-ec2600667bcf}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, Type: discovery, ID: {c40dbc59-4bba-4871-9b8e-bbd8d5d9193b}) ----------- -The name of the ParamType (DeviceClass: mock, Type: discovery, ID: {d222adb4-2f9c-4c3f-8655-76400d0fb6ce}) - - - - - set power - The name of the ActionType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - - - nymea diff --git a/translations/nymead-fi.ts b/translations/nymead-fi.ts index d7dcb785..dbe5a0e6 100644 --- a/translations/nymead-fi.ts +++ b/translations/nymead-fi.ts @@ -4,1173 +4,47 @@ CloudNotifications - - + + Cloud Notifications Pilvi-ilmoitukset - + User ID Käyttäjätunnus - + Device Laite - + Title Otsikko - + Message text Viestin teksti - + Send notification Lähetä ilmoitus - + connected yhdistetty - + Connected changed Yhdistetty muutettiin - - DevicePluginMock - - - Display pin!! The pin is 243681 - Näytä PIN!! PIN on 243681 - - - - SimpleButton - - - - Simple button - The name of the plugin SimpleButton (28c7b102-3ac8-41f6-8dc0-f4787222a186) ----------- -The name of the DeviceClass (c16ba02d-c982-4b45-8ca2-1945d94d8e66) - - - - - nymea - The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) - - - - - press - 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 - - - - - SimplePushButtonHandler - - - If specified, all D-Bus interfaces will be bound to the session bus instead of the system bus. - Jos määritetty, kaikki D-väylä-liittymät yhdistetään istuntoväylään järjestelmäväylän sijaan. - - - - mockDevice - - - Add to favorites - The name of the Browser Item ActionType ({00b8f0a8-99ca-4aa4-833d-59eb8d4d6de3}) of DeviceClass mock - - - - - - Bool - The name of the ParamType (DeviceClass: mockInputType, EventType: bool, ID: {3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) ----------- -The name of the StateType ({3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) of DeviceClass mockInputType - - - - - Bool changed - The name of the EventType ({3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) of DeviceClass mockInputType - - - - - - Color - The name of the ParamType (DeviceClass: mockInputType, EventType: color, ID: {4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) ----------- -The name of the StateType ({4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) of DeviceClass mockInputType - - - - - Color changed - The name of the EventType ({4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) of DeviceClass mockInputType - - - - - - Double - The name of the ParamType (DeviceClass: mockInputType, EventType: double, ID: {f7d2063d-959e-46ac-8568-8b99722d3b22}) ----------- -The name of the StateType ({f7d2063d-959e-46ac-8568-8b99722d3b22}) of DeviceClass mockInputType - - - - - Double changed - The name of the EventType ({f7d2063d-959e-46ac-8568-8b99722d3b22}) of DeviceClass mockInputType - - - - - - - - Dummy bool state - The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: boolValue, ID: {978b0ba5-d008-41bd-b63d-a3bd23cb6469}) ----------- -The name of the StateType ({978b0ba5-d008-41bd-b63d-a3bd23cb6469}) of DeviceClass mockDeviceAuto ----------- -The name of the ParamType (DeviceClass: mock, EventType: bool, ID: {9dd6a97c-dfd1-43dc-acbd-367932742310}) ----------- -The name of the StateType ({9dd6a97c-dfd1-43dc-acbd-367932742310}) of DeviceClass mock - - - - - - Dummy bool state changed - The name of the EventType ({978b0ba5-d008-41bd-b63d-a3bd23cb6469}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({9dd6a97c-dfd1-43dc-acbd-367932742310}) of DeviceClass mock - - - - - - Dummy double state - The name of the ParamType (DeviceClass: mock, EventType: double, ID: {7cac53ee-7048-4dc9-b000-7b585390f34c}) ----------- -The name of the StateType ({7cac53ee-7048-4dc9-b000-7b585390f34c}) of DeviceClass mock - - - - - Dummy double state changed - The name of the EventType ({7cac53ee-7048-4dc9-b000-7b585390f34c}) of DeviceClass mock - - - - - - - - Dummy int state - The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: int, ID: {74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) ----------- -The name of the StateType ({74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) of DeviceClass mockDeviceAuto ----------- -The name of the ParamType (DeviceClass: mock, EventType: int, ID: {80baec19-54de-4948-ac46-31eabfaceb83}) ----------- -The name of the StateType ({80baec19-54de-4948-ac46-31eabfaceb83}) of DeviceClass mock - - - - - - Dummy int state changed - The name of the EventType ({74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({80baec19-54de-4948-ac46-31eabfaceb83}) of DeviceClass mock - - - - - IPv4 address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {9e5f86a0-4bb3-4892-bff8-3fc4032af6e2}) - - - - - IPv6 address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {43bf3832-dd48-4090-a836-656e8b60216e}) - - - - - - Int - The name of the ParamType (DeviceClass: mockInputType, EventType: int, ID: {d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) ----------- -The name of the StateType ({d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) of DeviceClass mockInputType - - - - - Int changed - The name of the EventType ({d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) of DeviceClass mockInputType - - - - - Mac address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e93db587-7919-48f3-8c88-1651de63c765}) - - - - - Mail address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {a8494faf-3a0f-4cf3-84b7-4b39148a838d}) - - - - - - Mock Action 1 (with params) - The name of the ActionType ({00000000-0000-0000-0000-000000000000}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({dea0f4e1-65e3-4981-8eaa-2701c53a9185}) of DeviceClass mock - - - - - - Mock Action 2 (without params) - The name of the ActionType ({ef518d53-50e2-4ca5-a4b1-e9a8b9309d44}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({defd3ed6-1a0d-400b-8879-a0202cf39935}) of DeviceClass mock - - - - - - Mock Action 3 (async) - The name of the ActionType ({5f27a9f2-59cd-4a15-98bd-6ed6e10bc6ed}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({fbae06d3-7666-483e-a39e-ec50fe89054e}) of DeviceClass mock - - - - - - Mock Action 4 (broken) - The name of the ActionType ({58a61de4-472c-4775-8fe8-583a9c83fcf1}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({df3cf33d-26d5-4577-9132-9823bd33fad0}) of DeviceClass mock - - - - - - Mock Action 5 (async, broken) - The name of the ActionType ({17ad52dd-ef2f-4947-9b73-5bf6e172a9d0}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({bfe89a1d-3497-4121-8318-e77c37537219}) of DeviceClass mock - - - - - Mock Device - The name of the DeviceClass ({753f0d32-0468-4d08-82ed-1964aab03298}) - - - - - Mock Device (Auto created) - The name of the DeviceClass ({ab4257b3-7548-47ee-9bd4-7dc3004fd197}) - - - - - Mock Device (Child) - The name of the DeviceClass ({40893c9f-bc47-40c1-8bf7-b390c7c1b4fc}) - - - - - Mock Device (Display Pin) - The name of the DeviceClass ({296f1fd4-e893-46b2-8a42-50d1bceb8730}) - - - - - Mock Device (InputTypes) - The name of the DeviceClass ({515ffdf1-55e5-498d-9abc-4e2fe768f3a9}) - - - - - Mock Device (Parent) - The name of the DeviceClass ({a71fbde9-9a38-4bf8-beab-c8aade2608ba}) - - - - - Mock Device (Push Button) - The name of the DeviceClass ({9e03144c-e436-4eea-82d9-ccb33ef778db}) - - - - - Mock Devices - The name of the plugin mockDevice ({727a4a9a-c187-446f-aadf-f1b2220607d1}) - - - - - - Mock Event 1 - The name of the EventType ({00f81fca-26f1-4a84-aa2b-4c6a3d953ec6}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({45bf3752-0fc6-46b9-89fd-ffd878b5b22b}) of DeviceClass mock - - - - - - Mock Event 2 - The name of the EventType ({6e27922d-aa9d-44d1-b9b4-9faf31b6bd97}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({863d5920-b1cf-4eb9-88bd-8f7b8583b1cf}) of DeviceClass mock - - - - - Password text - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e5c0d14b-c9f1-4aca-a56e-85bfa6977150}) - - - - - Please enter the secret which normaly will be displayed on the device. For the mockdevice the pin is 243681. - The pairing info of deviceClass mockDisplayPin - - - - - Remove from favorites - The name of the Browser Item ActionType ({da6faef8-2816-430e-93bb-57e8f9582d29}) of DeviceClass mock - - - - - Search text - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {22add8c9-ee4f-43ad-8931-58e999313ac3}) - - - - - Set Writable Bool - The name of the ActionType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - - - - - Set Writable Color - The name of the ActionType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType - - - - - Set Writable Double - The name of the ActionType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType - - - - - Set Writable Double (min/max) - The name of the ActionType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType - - - - - Set Writable Int - The name of the ActionType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - - - - - Set Writable Int (min/max) - The name of the ActionType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - - - - - Set Writable String - The name of the ActionType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType - - - - - Set Writable String (selection) - The name of the ActionType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType - - - - - Set Writable Time - The name of the ActionType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType - - - - - Set Writable Timestamp (Int) - The name of the ActionType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType - - - - - Set Writable Timestamp (UInt) - The name of the ActionType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType - - - - - Set Writable UInt - The name of the ActionType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType - - - - - Set Writable UInt (min/max) - The name of the ActionType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType - - - - - - Set allowed values - The name of the ActionType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - - - - - - - - Set bool value - The name of the ActionType ({80ba1449-b485-47d4-a067-6bf306e2a568}) of DeviceClass mockChild ----------- -The name of the ActionType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClass mockParent ----------- -The name of the ActionType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - - - - - - Set color - The name of the ActionType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - - - - - - Set double value - The name of the ActionType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - - - - - - Set percentage - The name of the ActionType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - - - - - Setting 1 - The name of the ParamType (DeviceClass: mock, Type: settings, ID: {367f7ba4-5039-47be-abd8-59cc8eaf4b9a}) - - - - - - String - The name of the ParamType (DeviceClass: mockInputType, EventType: string, ID: {27f69ca9-a321-40ff-bfee-4b0272a671b4}) ----------- -The name of the StateType ({27f69ca9-a321-40ff-bfee-4b0272a671b4}) of DeviceClass mockInputType - - - - - String changed - The name of the EventType ({27f69ca9-a321-40ff-bfee-4b0272a671b4}) of DeviceClass mockInputType - - - - - Text area - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {716f0994-bc01-42b0-b64d-59236f7320d2}) - - - - - Text line - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e6acf0c7-4b8e-4296-ac62-855d20deb816}) - - - - - - Time - The name of the ParamType (DeviceClass: mockInputType, EventType: time, ID: {8250c71e-59bc-41ab-b576-99fcfc34e8d1}) ----------- -The name of the StateType ({8250c71e-59bc-41ab-b576-99fcfc34e8d1}) of DeviceClass mockInputType - - - - - Time changed - The name of the EventType ({8250c71e-59bc-41ab-b576-99fcfc34e8d1}) of DeviceClass mockInputType - - - - - - Timeout action - The name of the ActionType ({854a0a4a-803f-4b7f-9dce-b07794f9011b}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({54646e7c-bc54-4895-81a2-590d72d120f9}) of DeviceClass mockPushButton - - - - - - Timestamp (Int) - The name of the ParamType (DeviceClass: mockInputType, EventType: timestampInt, ID: {2c91b5ef-c2d1-4367-bc65-5a13abf69641}) ----------- -The name of the StateType ({2c91b5ef-c2d1-4367-bc65-5a13abf69641}) of DeviceClass mockInputType - - - - - Timestamp (Int) changed - The name of the EventType ({2c91b5ef-c2d1-4367-bc65-5a13abf69641}) of DeviceClass mockInputType - - - - - - Timestamp (UInt) - The name of the ParamType (DeviceClass: mockInputType, EventType: timestampUInt, ID: {6c9a96e8-0d48-4f42-8967-848358fd7f79}) ----------- -The name of the StateType ({6c9a96e8-0d48-4f42-8967-848358fd7f79}) of DeviceClass mockInputType - - - - - Timestamp (UInt) changed - The name of the EventType ({6c9a96e8-0d48-4f42-8967-848358fd7f79}) of DeviceClass mockInputType - - - - - - UInt - The name of the ParamType (DeviceClass: mockInputType, EventType: uint, ID: {19e74fcc-bfd5-491f-8eb6-af128e8f1162}) ----------- -The name of the StateType ({19e74fcc-bfd5-491f-8eb6-af128e8f1162}) of DeviceClass mockInputType - - - - - UInt changed - The name of the EventType ({19e74fcc-bfd5-491f-8eb6-af128e8f1162}) of DeviceClass mockInputType - - - - - URL - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {fa67229f-fcef-496f-b671-59a4b48f3ab5}) - - - - - Wait 3 second before you continue, the push button will be pressed automatically. - The pairing info of deviceClass mockPushButton - - - - - - - Writable Bool - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableBool, ID: {a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableBool, ID: {a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) ----------- -The name of the StateType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - - - - - Writable Bool changed - The name of the EventType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - - - - - - - Writable Color - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableColor, ID: {455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableColor, ID: {455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) ----------- -The name of the StateType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType - - - - - Writable Color changed - The name of the EventType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType - - - - - - - Writable Double - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableDouble, ID: {8e2eb91b-d60b-4461-9a50-d7b8ad263170}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableDouble, ID: {8e2eb91b-d60b-4461-9a50-d7b8ad263170}) ----------- -The name of the StateType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType - - - - - - - Writable Double (min/max) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableDoubleMinMax, ID: {00d3425e-1da6-4748-8906-4555ceefb136}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableDoubleMinMax, ID: {00d3425e-1da6-4748-8906-4555ceefb136}) ----------- -The name of the StateType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType - - - - - Writable Double (min/max) changed - The name of the EventType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType - - - - - Writable Double changed - The name of the EventType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType - - - - - - - Writable Int - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableInt, ID: {857a8422-983c-47d6-a15f-d8450b3162f7}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableInt, ID: {857a8422-983c-47d6-a15f-d8450b3162f7}) ----------- -The name of the StateType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - - - - - - - Writable Int (min/max) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableIntMinMax, ID: {86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableIntMinMax, ID: {86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) ----------- -The name of the StateType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - - - - - Writable Int (min/max) changed - The name of the EventType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - - - - - Writable Int changed - The name of the EventType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - - - - - - - Writable String - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableString, ID: {ef511043-bd1a-4a5f-984c-222b7da43f38}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableString, ID: {ef511043-bd1a-4a5f-984c-222b7da43f38}) ----------- -The name of the StateType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType - - - - - - - Writable String (selection) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableStringSelection, ID: {209d7afc-6fe9-4fe9-939b-e472ea0ad639}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableStringSelection, ID: {209d7afc-6fe9-4fe9-939b-e472ea0ad639}) ----------- -The name of the StateType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType - - - - - Writable String (selection) changed - The name of the EventType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType - - - - - Writable String changed - The name of the EventType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType - - - - - - - Writable Time - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableTime, ID: {d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableTime, ID: {d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) ----------- -The name of the StateType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType - - - - - Writable Time changed - The name of the EventType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType - - - - - - - Writable Timestamp (Int) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableTimestampInt, ID: {88b6746a-b009-4df6-8986-d7884ffd94b2}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableTimestampInt, ID: {88b6746a-b009-4df6-8986-d7884ffd94b2}) ----------- -The name of the StateType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType - - - - - Writable Timestamp (Int) changed - The name of the EventType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType - - - - - - - Writable Timestamp (UInt) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableTimestampUInt, ID: {45d0069a-63ac-4265-8170-8152778608ee}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableTimestampUInt, ID: {45d0069a-63ac-4265-8170-8152778608ee}) ----------- -The name of the StateType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType - - - - - Writable Timestamp (UInt) changed - The name of the EventType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType - - - - - - - Writable UInt - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableUInt, ID: {563e9c4c-5198-400a-9f6c-358f4752af58}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableUInt, ID: {563e9c4c-5198-400a-9f6c-358f4752af58}) ----------- -The name of the StateType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType - - - - - - - Writable UInt (min/max) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableUIntMinMax, ID: {79238998-eaab-4d71-b406-5d78f1749751}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableUIntMinMax, ID: {79238998-eaab-4d71-b406-5d78f1749751}) ----------- -The name of the StateType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType - - - - - Writable UInt (min/max) changed - The name of the EventType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType - - - - - Writable UInt changed - The name of the EventType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType - - - - - - - - - - allowed values - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: allowedValues, ID: {b463c5ae-4d55-402f-8480-a5cdb485c143}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: allowedValues, ID: {b463c5ae-4d55-402f-8480-a5cdb485c143}) ----------- -The name of the StateType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: allowedValues, ID: {05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: allowedValues, ID: {05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) ----------- -The name of the StateType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - - - - - - allowed values changed - The name of the EventType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - - - - - - async - The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {a5c4315f-0624-4971-87c1-4bbfbfdbd16e}) ----------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {f2977061-4dd0-4ef5-85aa-3b7134743be3}) - - - - - - - battery level - The name of the ParamType (DeviceClass: mock, EventType: batteryLevel, ID: {6c8ab9a6-0164-4795-b829-f4394fe4edc4}) ----------- -The name of the EventType ({6c8ab9a6-0164-4795-b829-f4394fe4edc4}) of DeviceClass mock ----------- -The name of the StateType ({6c8ab9a6-0164-4795-b829-f4394fe4edc4}) of DeviceClass mock - - - - - - - battery level critical - The name of the ParamType (DeviceClass: mock, EventType: batteryCritical, ID: {580bc611-1a55-41f3-996f-8d3ccf543db3}) ----------- -The name of the EventType ({580bc611-1a55-41f3-996f-8d3ccf543db3}) of DeviceClass mock ----------- -The name of the StateType ({580bc611-1a55-41f3-996f-8d3ccf543db3}) of DeviceClass mock - - - - - - - - - - - - - - - - bool value - The name of the ParamType (DeviceClass: mockChild, ActionType: boolValue, ID: {80ba1449-b485-47d4-a067-6bf306e2a568}) ----------- -The name of the ParamType (DeviceClass: mockChild, EventType: boolValue, ID: {80ba1449-b485-47d4-a067-6bf306e2a568}) ----------- -The name of the StateType ({80ba1449-b485-47d4-a067-6bf306e2a568}) of DeviceClass mockChild ----------- -The name of the ParamType (DeviceClass: mockParent, ActionType: boolValue, ID: {d24ede5f-4064-4898-bb84-cfb533b1fbc0}) ----------- -The name of the ParamType (DeviceClass: mockParent, EventType: boolValue, ID: {d24ede5f-4064-4898-bb84-cfb533b1fbc0}) ----------- -The name of the StateType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClass mockParent ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: bool, ID: {7ffe514f-7999-4998-8350-0e73e222a8c4}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: bool, ID: {7ffe514f-7999-4998-8350-0e73e222a8c4}) ----------- -The name of the StateType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: bool, ID: {e680f7a4-b39e-46da-be41-fa3170fe3768}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: bool, ID: {e680f7a4-b39e-46da-be41-fa3170fe3768}) ----------- -The name of the StateType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - - - - - - - - bool value changed - The name of the EventType ({80ba1449-b485-47d4-a067-6bf306e2a568}) of DeviceClass mockChild ----------- -The name of the EventType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClass mockParent ----------- -The name of the EventType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - - - - - - broken - The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {66179395-ef7a-4013-9fc6-2084104eea09}) ----------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {ae8f8901-f2c1-42a5-8111-6d2fc8e4c1e4}) - - - - - - - - - - color - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: color, ID: {3e161294-8a0d-4384-9676-6959e08cc2fa}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: color, ID: {3e161294-8a0d-4384-9676-6959e08cc2fa}) ----------- -The name of the StateType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: color, ID: {20dc7c22-c50e-42db-837c-2bbced939f8e}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: color, ID: {20dc7c22-c50e-42db-837c-2bbced939f8e}) ----------- -The name of the StateType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - - - - - - color changed - The name of the EventType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - - - - - configParamBool - The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: {c75723b6-ea4f-4982-9751-6c5e39c88145}) - - - - - configParamInt - The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: {e1f72121-a426-45e2-b475-8262b5cdf103}) - - - - - - - - - - double value - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: double, ID: {17635624-7c19-4bae-8429-2f7aa5d2f843}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: double, ID: {17635624-7c19-4bae-8429-2f7aa5d2f843}) ----------- -The name of the StateType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: double, ID: {53cd7c55-49b7-441b-b970-9048f20f0e2c}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: double, ID: {53cd7c55-49b7-441b-b970-9048f20f0e2c}) ----------- -The name of the StateType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - - - - - - double value changed - The name of the EventType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - - - - - - http port - The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {bfeb0613-dab6-408c-aa27-c362c921d0d1}) ----------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {d4f06047-125e-4479-9810-b54c189917f5}) - - - - - - mockActionParam1 - The name of the ParamType (DeviceClass: mockDeviceAuto, ActionType: withParams, ID: {b8126ba6-3a54-45a3-be4d-63feb0ddb77b}) ----------- -The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: {a2d3a256-a551-4712-a65b-ecd5a436a1cb}) - - - - - - mockActionParam2 - The name of the ParamType (DeviceClass: mockDeviceAuto, ActionType: withParams, ID: {df41ba71-e43b-4854-91d1-b19d8066d4f9}) ----------- -The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: {304a4899-18be-4e3b-94f4-d03be52f3233}) - - - - - - mockParamInt - The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: event2, ID: {12ed5a15-96b4-4381-9d9c-a24875283d4f}) ----------- -The name of the ParamType (DeviceClass: mock, EventType: event2, ID: {0550e16d-60b9-4ba5-83f4-4d3cee656121}) - - - - - nymea - The name of the vendor ({2062d64d-3232-433c-88bc-0d33c0ba2ba6}) - - - - - - - - - - percentage - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: percentage, ID: {527f0687-0b28-4c26-852c-25b8f83e4797}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: percentage, ID: {527f0687-0b28-4c26-852c-25b8f83e4797}) ----------- -The name of the StateType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: percentage, ID: {72981c04-267a-4ba0-a59e-9921d2f3af9c}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: percentage, ID: {72981c04-267a-4ba0-a59e-9921d2f3af9c}) ----------- -The name of the StateType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - - - - - - percentage changed - The name of the EventType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - - - - - pin - The name of the ParamType (DeviceClass: mockDisplayPin, Type: device, ID: {da820e07-22dc-4173-9c07-2f49a4e265f9}) - - - - - - - powered - The name of the ParamType (DeviceClass: mock, ActionType: power, ID: {064aed0d-da4c-49d4-b236-60f97e98ff84}) ----------- -The name of the ParamType (DeviceClass: mock, EventType: power, ID: {064aed0d-da4c-49d4-b236-60f97e98ff84}) ----------- -The name of the StateType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - - - - - powered changed - The name of the EventType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - - - - - - - resultCount - The name of the ParamType (DeviceClass: mockDisplayPin, Type: discovery, ID: {35f6e4ba-28ad-4152-a58d-ec2600667bcf}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, Type: discovery, ID: {c40dbc59-4bba-4871-9b8e-bbd8d5d9193b}) ----------- -The name of the ParamType (DeviceClass: mock, Type: discovery, ID: {d222adb4-2f9c-4c3f-8655-76400d0fb6ce}) - - - - - set power - The name of the ActionType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - - - nymea diff --git a/translations/nymead-fr.ts b/translations/nymead-fr.ts index b0cbe2f0..b7ed01c7 100644 --- a/translations/nymead-fr.ts +++ b/translations/nymead-fr.ts @@ -4,1173 +4,47 @@ CloudNotifications - - + + Cloud Notifications Notification de cloud - + User ID Utilisateur - + Device Paramètres de l'appareil - + Title Titre - + Message text Texte du message - + Send notification Notification d'envoi - + connected connecté - + Connected changed Connecté modifié - - DevicePluginMock - - - Display pin!! The pin is 243681 - Afficher le code Pin !! Le code pin est 243681 - - - - SimpleButton - - - - Simple button - The name of the plugin SimpleButton (28c7b102-3ac8-41f6-8dc0-f4787222a186) ----------- -The name of the DeviceClass (c16ba02d-c982-4b45-8ca2-1945d94d8e66) - - - - - nymea - The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) - - - - - press - 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 - - - - - SimplePushButtonHandler - - - If specified, all D-Bus interfaces will be bound to the session bus instead of the system bus. - Si spécifié, toutes les interfaces D-Bus seront liées au bus de session au lieu du bus système. - - - - mockDevice - - - Add to favorites - The name of the Browser Item ActionType ({00b8f0a8-99ca-4aa4-833d-59eb8d4d6de3}) of DeviceClass mock - - - - - - Bool - The name of the ParamType (DeviceClass: mockInputType, EventType: bool, ID: {3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) ----------- -The name of the StateType ({3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) of DeviceClass mockInputType - - - - - Bool changed - The name of the EventType ({3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) of DeviceClass mockInputType - - - - - - Color - The name of the ParamType (DeviceClass: mockInputType, EventType: color, ID: {4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) ----------- -The name of the StateType ({4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) of DeviceClass mockInputType - - - - - Color changed - The name of the EventType ({4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) of DeviceClass mockInputType - - - - - - Double - The name of the ParamType (DeviceClass: mockInputType, EventType: double, ID: {f7d2063d-959e-46ac-8568-8b99722d3b22}) ----------- -The name of the StateType ({f7d2063d-959e-46ac-8568-8b99722d3b22}) of DeviceClass mockInputType - - - - - Double changed - The name of the EventType ({f7d2063d-959e-46ac-8568-8b99722d3b22}) of DeviceClass mockInputType - - - - - - - - Dummy bool state - The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: boolValue, ID: {978b0ba5-d008-41bd-b63d-a3bd23cb6469}) ----------- -The name of the StateType ({978b0ba5-d008-41bd-b63d-a3bd23cb6469}) of DeviceClass mockDeviceAuto ----------- -The name of the ParamType (DeviceClass: mock, EventType: bool, ID: {9dd6a97c-dfd1-43dc-acbd-367932742310}) ----------- -The name of the StateType ({9dd6a97c-dfd1-43dc-acbd-367932742310}) of DeviceClass mock - - - - - - Dummy bool state changed - The name of the EventType ({978b0ba5-d008-41bd-b63d-a3bd23cb6469}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({9dd6a97c-dfd1-43dc-acbd-367932742310}) of DeviceClass mock - - - - - - Dummy double state - The name of the ParamType (DeviceClass: mock, EventType: double, ID: {7cac53ee-7048-4dc9-b000-7b585390f34c}) ----------- -The name of the StateType ({7cac53ee-7048-4dc9-b000-7b585390f34c}) of DeviceClass mock - - - - - Dummy double state changed - The name of the EventType ({7cac53ee-7048-4dc9-b000-7b585390f34c}) of DeviceClass mock - - - - - - - - Dummy int state - The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: int, ID: {74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) ----------- -The name of the StateType ({74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) of DeviceClass mockDeviceAuto ----------- -The name of the ParamType (DeviceClass: mock, EventType: int, ID: {80baec19-54de-4948-ac46-31eabfaceb83}) ----------- -The name of the StateType ({80baec19-54de-4948-ac46-31eabfaceb83}) of DeviceClass mock - - - - - - Dummy int state changed - The name of the EventType ({74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({80baec19-54de-4948-ac46-31eabfaceb83}) of DeviceClass mock - - - - - IPv4 address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {9e5f86a0-4bb3-4892-bff8-3fc4032af6e2}) - - - - - IPv6 address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {43bf3832-dd48-4090-a836-656e8b60216e}) - - - - - - Int - The name of the ParamType (DeviceClass: mockInputType, EventType: int, ID: {d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) ----------- -The name of the StateType ({d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) of DeviceClass mockInputType - - - - - Int changed - The name of the EventType ({d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) of DeviceClass mockInputType - - - - - Mac address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e93db587-7919-48f3-8c88-1651de63c765}) - - - - - Mail address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {a8494faf-3a0f-4cf3-84b7-4b39148a838d}) - - - - - - Mock Action 1 (with params) - The name of the ActionType ({00000000-0000-0000-0000-000000000000}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({dea0f4e1-65e3-4981-8eaa-2701c53a9185}) of DeviceClass mock - - - - - - Mock Action 2 (without params) - The name of the ActionType ({ef518d53-50e2-4ca5-a4b1-e9a8b9309d44}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({defd3ed6-1a0d-400b-8879-a0202cf39935}) of DeviceClass mock - - - - - - Mock Action 3 (async) - The name of the ActionType ({5f27a9f2-59cd-4a15-98bd-6ed6e10bc6ed}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({fbae06d3-7666-483e-a39e-ec50fe89054e}) of DeviceClass mock - - - - - - Mock Action 4 (broken) - The name of the ActionType ({58a61de4-472c-4775-8fe8-583a9c83fcf1}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({df3cf33d-26d5-4577-9132-9823bd33fad0}) of DeviceClass mock - - - - - - Mock Action 5 (async, broken) - The name of the ActionType ({17ad52dd-ef2f-4947-9b73-5bf6e172a9d0}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({bfe89a1d-3497-4121-8318-e77c37537219}) of DeviceClass mock - - - - - Mock Device - The name of the DeviceClass ({753f0d32-0468-4d08-82ed-1964aab03298}) - - - - - Mock Device (Auto created) - The name of the DeviceClass ({ab4257b3-7548-47ee-9bd4-7dc3004fd197}) - - - - - Mock Device (Child) - The name of the DeviceClass ({40893c9f-bc47-40c1-8bf7-b390c7c1b4fc}) - - - - - Mock Device (Display Pin) - The name of the DeviceClass ({296f1fd4-e893-46b2-8a42-50d1bceb8730}) - - - - - Mock Device (InputTypes) - The name of the DeviceClass ({515ffdf1-55e5-498d-9abc-4e2fe768f3a9}) - - - - - Mock Device (Parent) - The name of the DeviceClass ({a71fbde9-9a38-4bf8-beab-c8aade2608ba}) - - - - - Mock Device (Push Button) - The name of the DeviceClass ({9e03144c-e436-4eea-82d9-ccb33ef778db}) - - - - - Mock Devices - The name of the plugin mockDevice ({727a4a9a-c187-446f-aadf-f1b2220607d1}) - - - - - - Mock Event 1 - The name of the EventType ({00f81fca-26f1-4a84-aa2b-4c6a3d953ec6}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({45bf3752-0fc6-46b9-89fd-ffd878b5b22b}) of DeviceClass mock - - - - - - Mock Event 2 - The name of the EventType ({6e27922d-aa9d-44d1-b9b4-9faf31b6bd97}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({863d5920-b1cf-4eb9-88bd-8f7b8583b1cf}) of DeviceClass mock - - - - - Password text - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e5c0d14b-c9f1-4aca-a56e-85bfa6977150}) - - - - - Please enter the secret which normaly will be displayed on the device. For the mockdevice the pin is 243681. - The pairing info of deviceClass mockDisplayPin - - - - - Remove from favorites - The name of the Browser Item ActionType ({da6faef8-2816-430e-93bb-57e8f9582d29}) of DeviceClass mock - - - - - Search text - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {22add8c9-ee4f-43ad-8931-58e999313ac3}) - - - - - Set Writable Bool - The name of the ActionType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - - - - - Set Writable Color - The name of the ActionType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType - - - - - Set Writable Double - The name of the ActionType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType - - - - - Set Writable Double (min/max) - The name of the ActionType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType - - - - - Set Writable Int - The name of the ActionType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - - - - - Set Writable Int (min/max) - The name of the ActionType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - - - - - Set Writable String - The name of the ActionType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType - - - - - Set Writable String (selection) - The name of the ActionType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType - - - - - Set Writable Time - The name of the ActionType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType - - - - - Set Writable Timestamp (Int) - The name of the ActionType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType - - - - - Set Writable Timestamp (UInt) - The name of the ActionType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType - - - - - Set Writable UInt - The name of the ActionType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType - - - - - Set Writable UInt (min/max) - The name of the ActionType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType - - - - - - Set allowed values - The name of the ActionType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - - - - - - - - Set bool value - The name of the ActionType ({80ba1449-b485-47d4-a067-6bf306e2a568}) of DeviceClass mockChild ----------- -The name of the ActionType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClass mockParent ----------- -The name of the ActionType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - - - - - - Set color - The name of the ActionType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - - - - - - Set double value - The name of the ActionType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - - - - - - Set percentage - The name of the ActionType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - - - - - Setting 1 - The name of the ParamType (DeviceClass: mock, Type: settings, ID: {367f7ba4-5039-47be-abd8-59cc8eaf4b9a}) - - - - - - String - The name of the ParamType (DeviceClass: mockInputType, EventType: string, ID: {27f69ca9-a321-40ff-bfee-4b0272a671b4}) ----------- -The name of the StateType ({27f69ca9-a321-40ff-bfee-4b0272a671b4}) of DeviceClass mockInputType - - - - - String changed - The name of the EventType ({27f69ca9-a321-40ff-bfee-4b0272a671b4}) of DeviceClass mockInputType - - - - - Text area - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {716f0994-bc01-42b0-b64d-59236f7320d2}) - - - - - Text line - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e6acf0c7-4b8e-4296-ac62-855d20deb816}) - - - - - - Time - The name of the ParamType (DeviceClass: mockInputType, EventType: time, ID: {8250c71e-59bc-41ab-b576-99fcfc34e8d1}) ----------- -The name of the StateType ({8250c71e-59bc-41ab-b576-99fcfc34e8d1}) of DeviceClass mockInputType - - - - - Time changed - The name of the EventType ({8250c71e-59bc-41ab-b576-99fcfc34e8d1}) of DeviceClass mockInputType - - - - - - Timeout action - The name of the ActionType ({854a0a4a-803f-4b7f-9dce-b07794f9011b}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({54646e7c-bc54-4895-81a2-590d72d120f9}) of DeviceClass mockPushButton - - - - - - Timestamp (Int) - The name of the ParamType (DeviceClass: mockInputType, EventType: timestampInt, ID: {2c91b5ef-c2d1-4367-bc65-5a13abf69641}) ----------- -The name of the StateType ({2c91b5ef-c2d1-4367-bc65-5a13abf69641}) of DeviceClass mockInputType - - - - - Timestamp (Int) changed - The name of the EventType ({2c91b5ef-c2d1-4367-bc65-5a13abf69641}) of DeviceClass mockInputType - - - - - - Timestamp (UInt) - The name of the ParamType (DeviceClass: mockInputType, EventType: timestampUInt, ID: {6c9a96e8-0d48-4f42-8967-848358fd7f79}) ----------- -The name of the StateType ({6c9a96e8-0d48-4f42-8967-848358fd7f79}) of DeviceClass mockInputType - - - - - Timestamp (UInt) changed - The name of the EventType ({6c9a96e8-0d48-4f42-8967-848358fd7f79}) of DeviceClass mockInputType - - - - - - UInt - The name of the ParamType (DeviceClass: mockInputType, EventType: uint, ID: {19e74fcc-bfd5-491f-8eb6-af128e8f1162}) ----------- -The name of the StateType ({19e74fcc-bfd5-491f-8eb6-af128e8f1162}) of DeviceClass mockInputType - - - - - UInt changed - The name of the EventType ({19e74fcc-bfd5-491f-8eb6-af128e8f1162}) of DeviceClass mockInputType - - - - - URL - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {fa67229f-fcef-496f-b671-59a4b48f3ab5}) - - - - - Wait 3 second before you continue, the push button will be pressed automatically. - The pairing info of deviceClass mockPushButton - - - - - - - Writable Bool - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableBool, ID: {a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableBool, ID: {a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) ----------- -The name of the StateType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - - - - - Writable Bool changed - The name of the EventType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - - - - - - - Writable Color - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableColor, ID: {455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableColor, ID: {455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) ----------- -The name of the StateType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType - - - - - Writable Color changed - The name of the EventType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType - - - - - - - Writable Double - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableDouble, ID: {8e2eb91b-d60b-4461-9a50-d7b8ad263170}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableDouble, ID: {8e2eb91b-d60b-4461-9a50-d7b8ad263170}) ----------- -The name of the StateType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType - - - - - - - Writable Double (min/max) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableDoubleMinMax, ID: {00d3425e-1da6-4748-8906-4555ceefb136}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableDoubleMinMax, ID: {00d3425e-1da6-4748-8906-4555ceefb136}) ----------- -The name of the StateType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType - - - - - Writable Double (min/max) changed - The name of the EventType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType - - - - - Writable Double changed - The name of the EventType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType - - - - - - - Writable Int - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableInt, ID: {857a8422-983c-47d6-a15f-d8450b3162f7}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableInt, ID: {857a8422-983c-47d6-a15f-d8450b3162f7}) ----------- -The name of the StateType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - - - - - - - Writable Int (min/max) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableIntMinMax, ID: {86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableIntMinMax, ID: {86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) ----------- -The name of the StateType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - - - - - Writable Int (min/max) changed - The name of the EventType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - - - - - Writable Int changed - The name of the EventType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - - - - - - - Writable String - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableString, ID: {ef511043-bd1a-4a5f-984c-222b7da43f38}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableString, ID: {ef511043-bd1a-4a5f-984c-222b7da43f38}) ----------- -The name of the StateType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType - - - - - - - Writable String (selection) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableStringSelection, ID: {209d7afc-6fe9-4fe9-939b-e472ea0ad639}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableStringSelection, ID: {209d7afc-6fe9-4fe9-939b-e472ea0ad639}) ----------- -The name of the StateType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType - - - - - Writable String (selection) changed - The name of the EventType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType - - - - - Writable String changed - The name of the EventType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType - - - - - - - Writable Time - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableTime, ID: {d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableTime, ID: {d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) ----------- -The name of the StateType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType - - - - - Writable Time changed - The name of the EventType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType - - - - - - - Writable Timestamp (Int) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableTimestampInt, ID: {88b6746a-b009-4df6-8986-d7884ffd94b2}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableTimestampInt, ID: {88b6746a-b009-4df6-8986-d7884ffd94b2}) ----------- -The name of the StateType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType - - - - - Writable Timestamp (Int) changed - The name of the EventType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType - - - - - - - Writable Timestamp (UInt) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableTimestampUInt, ID: {45d0069a-63ac-4265-8170-8152778608ee}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableTimestampUInt, ID: {45d0069a-63ac-4265-8170-8152778608ee}) ----------- -The name of the StateType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType - - - - - Writable Timestamp (UInt) changed - The name of the EventType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType - - - - - - - Writable UInt - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableUInt, ID: {563e9c4c-5198-400a-9f6c-358f4752af58}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableUInt, ID: {563e9c4c-5198-400a-9f6c-358f4752af58}) ----------- -The name of the StateType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType - - - - - - - Writable UInt (min/max) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableUIntMinMax, ID: {79238998-eaab-4d71-b406-5d78f1749751}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableUIntMinMax, ID: {79238998-eaab-4d71-b406-5d78f1749751}) ----------- -The name of the StateType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType - - - - - Writable UInt (min/max) changed - The name of the EventType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType - - - - - Writable UInt changed - The name of the EventType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType - - - - - - - - - - allowed values - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: allowedValues, ID: {b463c5ae-4d55-402f-8480-a5cdb485c143}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: allowedValues, ID: {b463c5ae-4d55-402f-8480-a5cdb485c143}) ----------- -The name of the StateType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: allowedValues, ID: {05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: allowedValues, ID: {05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) ----------- -The name of the StateType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - - - - - - allowed values changed - The name of the EventType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - - - - - - async - The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {a5c4315f-0624-4971-87c1-4bbfbfdbd16e}) ----------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {f2977061-4dd0-4ef5-85aa-3b7134743be3}) - - - - - - - battery level - The name of the ParamType (DeviceClass: mock, EventType: batteryLevel, ID: {6c8ab9a6-0164-4795-b829-f4394fe4edc4}) ----------- -The name of the EventType ({6c8ab9a6-0164-4795-b829-f4394fe4edc4}) of DeviceClass mock ----------- -The name of the StateType ({6c8ab9a6-0164-4795-b829-f4394fe4edc4}) of DeviceClass mock - - - - - - - battery level critical - The name of the ParamType (DeviceClass: mock, EventType: batteryCritical, ID: {580bc611-1a55-41f3-996f-8d3ccf543db3}) ----------- -The name of the EventType ({580bc611-1a55-41f3-996f-8d3ccf543db3}) of DeviceClass mock ----------- -The name of the StateType ({580bc611-1a55-41f3-996f-8d3ccf543db3}) of DeviceClass mock - - - - - - - - - - - - - - - - bool value - The name of the ParamType (DeviceClass: mockChild, ActionType: boolValue, ID: {80ba1449-b485-47d4-a067-6bf306e2a568}) ----------- -The name of the ParamType (DeviceClass: mockChild, EventType: boolValue, ID: {80ba1449-b485-47d4-a067-6bf306e2a568}) ----------- -The name of the StateType ({80ba1449-b485-47d4-a067-6bf306e2a568}) of DeviceClass mockChild ----------- -The name of the ParamType (DeviceClass: mockParent, ActionType: boolValue, ID: {d24ede5f-4064-4898-bb84-cfb533b1fbc0}) ----------- -The name of the ParamType (DeviceClass: mockParent, EventType: boolValue, ID: {d24ede5f-4064-4898-bb84-cfb533b1fbc0}) ----------- -The name of the StateType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClass mockParent ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: bool, ID: {7ffe514f-7999-4998-8350-0e73e222a8c4}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: bool, ID: {7ffe514f-7999-4998-8350-0e73e222a8c4}) ----------- -The name of the StateType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: bool, ID: {e680f7a4-b39e-46da-be41-fa3170fe3768}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: bool, ID: {e680f7a4-b39e-46da-be41-fa3170fe3768}) ----------- -The name of the StateType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - - - - - - - - bool value changed - The name of the EventType ({80ba1449-b485-47d4-a067-6bf306e2a568}) of DeviceClass mockChild ----------- -The name of the EventType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClass mockParent ----------- -The name of the EventType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - - - - - - broken - The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {66179395-ef7a-4013-9fc6-2084104eea09}) ----------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {ae8f8901-f2c1-42a5-8111-6d2fc8e4c1e4}) - - - - - - - - - - color - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: color, ID: {3e161294-8a0d-4384-9676-6959e08cc2fa}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: color, ID: {3e161294-8a0d-4384-9676-6959e08cc2fa}) ----------- -The name of the StateType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: color, ID: {20dc7c22-c50e-42db-837c-2bbced939f8e}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: color, ID: {20dc7c22-c50e-42db-837c-2bbced939f8e}) ----------- -The name of the StateType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - - - - - - color changed - The name of the EventType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - - - - - configParamBool - The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: {c75723b6-ea4f-4982-9751-6c5e39c88145}) - - - - - configParamInt - The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: {e1f72121-a426-45e2-b475-8262b5cdf103}) - - - - - - - - - - double value - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: double, ID: {17635624-7c19-4bae-8429-2f7aa5d2f843}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: double, ID: {17635624-7c19-4bae-8429-2f7aa5d2f843}) ----------- -The name of the StateType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: double, ID: {53cd7c55-49b7-441b-b970-9048f20f0e2c}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: double, ID: {53cd7c55-49b7-441b-b970-9048f20f0e2c}) ----------- -The name of the StateType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - - - - - - double value changed - The name of the EventType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - - - - - - http port - The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {bfeb0613-dab6-408c-aa27-c362c921d0d1}) ----------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {d4f06047-125e-4479-9810-b54c189917f5}) - - - - - - mockActionParam1 - The name of the ParamType (DeviceClass: mockDeviceAuto, ActionType: withParams, ID: {b8126ba6-3a54-45a3-be4d-63feb0ddb77b}) ----------- -The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: {a2d3a256-a551-4712-a65b-ecd5a436a1cb}) - - - - - - mockActionParam2 - The name of the ParamType (DeviceClass: mockDeviceAuto, ActionType: withParams, ID: {df41ba71-e43b-4854-91d1-b19d8066d4f9}) ----------- -The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: {304a4899-18be-4e3b-94f4-d03be52f3233}) - - - - - - mockParamInt - The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: event2, ID: {12ed5a15-96b4-4381-9d9c-a24875283d4f}) ----------- -The name of the ParamType (DeviceClass: mock, EventType: event2, ID: {0550e16d-60b9-4ba5-83f4-4d3cee656121}) - - - - - nymea - The name of the vendor ({2062d64d-3232-433c-88bc-0d33c0ba2ba6}) - - - - - - - - - - percentage - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: percentage, ID: {527f0687-0b28-4c26-852c-25b8f83e4797}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: percentage, ID: {527f0687-0b28-4c26-852c-25b8f83e4797}) ----------- -The name of the StateType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: percentage, ID: {72981c04-267a-4ba0-a59e-9921d2f3af9c}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: percentage, ID: {72981c04-267a-4ba0-a59e-9921d2f3af9c}) ----------- -The name of the StateType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - - - - - - percentage changed - The name of the EventType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - - - - - pin - The name of the ParamType (DeviceClass: mockDisplayPin, Type: device, ID: {da820e07-22dc-4173-9c07-2f49a4e265f9}) - - - - - - - powered - The name of the ParamType (DeviceClass: mock, ActionType: power, ID: {064aed0d-da4c-49d4-b236-60f97e98ff84}) ----------- -The name of the ParamType (DeviceClass: mock, EventType: power, ID: {064aed0d-da4c-49d4-b236-60f97e98ff84}) ----------- -The name of the StateType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - - - - - powered changed - The name of the EventType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - - - - - - - resultCount - The name of the ParamType (DeviceClass: mockDisplayPin, Type: discovery, ID: {35f6e4ba-28ad-4152-a58d-ec2600667bcf}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, Type: discovery, ID: {c40dbc59-4bba-4871-9b8e-bbd8d5d9193b}) ----------- -The name of the ParamType (DeviceClass: mock, Type: discovery, ID: {d222adb4-2f9c-4c3f-8655-76400d0fb6ce}) - - - - - set power - The name of the ActionType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - - - nymea diff --git a/translations/nymead-it.ts b/translations/nymead-it.ts index c65eeaab..2010c095 100644 --- a/translations/nymead-it.ts +++ b/translations/nymead-it.ts @@ -4,1173 +4,47 @@ CloudNotifications - - + + Cloud Notifications Notifiche cloud - + User ID ID utente - + Device Dispositivo - + Title Titolo - + Message text Testo del messaggio - + Send notification Invia notifica - + connected connesso - + Connected changed Connesso modificato - - DevicePluginMock - - - Display pin!! The pin is 243681 - Visualizza pin!! Il pin è 243681 - - - - SimpleButton - - - - Simple button - The name of the plugin SimpleButton (28c7b102-3ac8-41f6-8dc0-f4787222a186) ----------- -The name of the DeviceClass (c16ba02d-c982-4b45-8ca2-1945d94d8e66) - - - - - nymea - The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) - - - - - press - 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 - - - - - SimplePushButtonHandler - - - If specified, all D-Bus interfaces will be bound to the session bus instead of the system bus. - Se specificato, tutte le interfacce bus D saranno associate al bus di sessione anziché al bus di sistema. - - - - mockDevice - - - Add to favorites - The name of the Browser Item ActionType ({00b8f0a8-99ca-4aa4-833d-59eb8d4d6de3}) of DeviceClass mock - - - - - - Bool - The name of the ParamType (DeviceClass: mockInputType, EventType: bool, ID: {3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) ----------- -The name of the StateType ({3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) of DeviceClass mockInputType - - - - - Bool changed - The name of the EventType ({3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) of DeviceClass mockInputType - - - - - - Color - The name of the ParamType (DeviceClass: mockInputType, EventType: color, ID: {4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) ----------- -The name of the StateType ({4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) of DeviceClass mockInputType - - - - - Color changed - The name of the EventType ({4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) of DeviceClass mockInputType - - - - - - Double - The name of the ParamType (DeviceClass: mockInputType, EventType: double, ID: {f7d2063d-959e-46ac-8568-8b99722d3b22}) ----------- -The name of the StateType ({f7d2063d-959e-46ac-8568-8b99722d3b22}) of DeviceClass mockInputType - - - - - Double changed - The name of the EventType ({f7d2063d-959e-46ac-8568-8b99722d3b22}) of DeviceClass mockInputType - - - - - - - - Dummy bool state - The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: boolValue, ID: {978b0ba5-d008-41bd-b63d-a3bd23cb6469}) ----------- -The name of the StateType ({978b0ba5-d008-41bd-b63d-a3bd23cb6469}) of DeviceClass mockDeviceAuto ----------- -The name of the ParamType (DeviceClass: mock, EventType: bool, ID: {9dd6a97c-dfd1-43dc-acbd-367932742310}) ----------- -The name of the StateType ({9dd6a97c-dfd1-43dc-acbd-367932742310}) of DeviceClass mock - - - - - - Dummy bool state changed - The name of the EventType ({978b0ba5-d008-41bd-b63d-a3bd23cb6469}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({9dd6a97c-dfd1-43dc-acbd-367932742310}) of DeviceClass mock - - - - - - Dummy double state - The name of the ParamType (DeviceClass: mock, EventType: double, ID: {7cac53ee-7048-4dc9-b000-7b585390f34c}) ----------- -The name of the StateType ({7cac53ee-7048-4dc9-b000-7b585390f34c}) of DeviceClass mock - - - - - Dummy double state changed - The name of the EventType ({7cac53ee-7048-4dc9-b000-7b585390f34c}) of DeviceClass mock - - - - - - - - Dummy int state - The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: int, ID: {74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) ----------- -The name of the StateType ({74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) of DeviceClass mockDeviceAuto ----------- -The name of the ParamType (DeviceClass: mock, EventType: int, ID: {80baec19-54de-4948-ac46-31eabfaceb83}) ----------- -The name of the StateType ({80baec19-54de-4948-ac46-31eabfaceb83}) of DeviceClass mock - - - - - - Dummy int state changed - The name of the EventType ({74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({80baec19-54de-4948-ac46-31eabfaceb83}) of DeviceClass mock - - - - - IPv4 address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {9e5f86a0-4bb3-4892-bff8-3fc4032af6e2}) - - - - - IPv6 address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {43bf3832-dd48-4090-a836-656e8b60216e}) - - - - - - Int - The name of the ParamType (DeviceClass: mockInputType, EventType: int, ID: {d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) ----------- -The name of the StateType ({d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) of DeviceClass mockInputType - - - - - Int changed - The name of the EventType ({d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) of DeviceClass mockInputType - - - - - Mac address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e93db587-7919-48f3-8c88-1651de63c765}) - - - - - Mail address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {a8494faf-3a0f-4cf3-84b7-4b39148a838d}) - - - - - - Mock Action 1 (with params) - The name of the ActionType ({00000000-0000-0000-0000-000000000000}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({dea0f4e1-65e3-4981-8eaa-2701c53a9185}) of DeviceClass mock - - - - - - Mock Action 2 (without params) - The name of the ActionType ({ef518d53-50e2-4ca5-a4b1-e9a8b9309d44}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({defd3ed6-1a0d-400b-8879-a0202cf39935}) of DeviceClass mock - - - - - - Mock Action 3 (async) - The name of the ActionType ({5f27a9f2-59cd-4a15-98bd-6ed6e10bc6ed}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({fbae06d3-7666-483e-a39e-ec50fe89054e}) of DeviceClass mock - - - - - - Mock Action 4 (broken) - The name of the ActionType ({58a61de4-472c-4775-8fe8-583a9c83fcf1}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({df3cf33d-26d5-4577-9132-9823bd33fad0}) of DeviceClass mock - - - - - - Mock Action 5 (async, broken) - The name of the ActionType ({17ad52dd-ef2f-4947-9b73-5bf6e172a9d0}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({bfe89a1d-3497-4121-8318-e77c37537219}) of DeviceClass mock - - - - - Mock Device - The name of the DeviceClass ({753f0d32-0468-4d08-82ed-1964aab03298}) - - - - - Mock Device (Auto created) - The name of the DeviceClass ({ab4257b3-7548-47ee-9bd4-7dc3004fd197}) - - - - - Mock Device (Child) - The name of the DeviceClass ({40893c9f-bc47-40c1-8bf7-b390c7c1b4fc}) - - - - - Mock Device (Display Pin) - The name of the DeviceClass ({296f1fd4-e893-46b2-8a42-50d1bceb8730}) - - - - - Mock Device (InputTypes) - The name of the DeviceClass ({515ffdf1-55e5-498d-9abc-4e2fe768f3a9}) - - - - - Mock Device (Parent) - The name of the DeviceClass ({a71fbde9-9a38-4bf8-beab-c8aade2608ba}) - - - - - Mock Device (Push Button) - The name of the DeviceClass ({9e03144c-e436-4eea-82d9-ccb33ef778db}) - - - - - Mock Devices - The name of the plugin mockDevice ({727a4a9a-c187-446f-aadf-f1b2220607d1}) - - - - - - Mock Event 1 - The name of the EventType ({00f81fca-26f1-4a84-aa2b-4c6a3d953ec6}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({45bf3752-0fc6-46b9-89fd-ffd878b5b22b}) of DeviceClass mock - - - - - - Mock Event 2 - The name of the EventType ({6e27922d-aa9d-44d1-b9b4-9faf31b6bd97}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({863d5920-b1cf-4eb9-88bd-8f7b8583b1cf}) of DeviceClass mock - - - - - Password text - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e5c0d14b-c9f1-4aca-a56e-85bfa6977150}) - - - - - Please enter the secret which normaly will be displayed on the device. For the mockdevice the pin is 243681. - The pairing info of deviceClass mockDisplayPin - - - - - Remove from favorites - The name of the Browser Item ActionType ({da6faef8-2816-430e-93bb-57e8f9582d29}) of DeviceClass mock - - - - - Search text - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {22add8c9-ee4f-43ad-8931-58e999313ac3}) - - - - - Set Writable Bool - The name of the ActionType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - - - - - Set Writable Color - The name of the ActionType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType - - - - - Set Writable Double - The name of the ActionType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType - - - - - Set Writable Double (min/max) - The name of the ActionType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType - - - - - Set Writable Int - The name of the ActionType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - - - - - Set Writable Int (min/max) - The name of the ActionType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - - - - - Set Writable String - The name of the ActionType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType - - - - - Set Writable String (selection) - The name of the ActionType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType - - - - - Set Writable Time - The name of the ActionType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType - - - - - Set Writable Timestamp (Int) - The name of the ActionType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType - - - - - Set Writable Timestamp (UInt) - The name of the ActionType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType - - - - - Set Writable UInt - The name of the ActionType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType - - - - - Set Writable UInt (min/max) - The name of the ActionType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType - - - - - - Set allowed values - The name of the ActionType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - - - - - - - - Set bool value - The name of the ActionType ({80ba1449-b485-47d4-a067-6bf306e2a568}) of DeviceClass mockChild ----------- -The name of the ActionType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClass mockParent ----------- -The name of the ActionType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - - - - - - Set color - The name of the ActionType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - - - - - - Set double value - The name of the ActionType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - - - - - - Set percentage - The name of the ActionType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - - - - - Setting 1 - The name of the ParamType (DeviceClass: mock, Type: settings, ID: {367f7ba4-5039-47be-abd8-59cc8eaf4b9a}) - - - - - - String - The name of the ParamType (DeviceClass: mockInputType, EventType: string, ID: {27f69ca9-a321-40ff-bfee-4b0272a671b4}) ----------- -The name of the StateType ({27f69ca9-a321-40ff-bfee-4b0272a671b4}) of DeviceClass mockInputType - - - - - String changed - The name of the EventType ({27f69ca9-a321-40ff-bfee-4b0272a671b4}) of DeviceClass mockInputType - - - - - Text area - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {716f0994-bc01-42b0-b64d-59236f7320d2}) - - - - - Text line - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e6acf0c7-4b8e-4296-ac62-855d20deb816}) - - - - - - Time - The name of the ParamType (DeviceClass: mockInputType, EventType: time, ID: {8250c71e-59bc-41ab-b576-99fcfc34e8d1}) ----------- -The name of the StateType ({8250c71e-59bc-41ab-b576-99fcfc34e8d1}) of DeviceClass mockInputType - - - - - Time changed - The name of the EventType ({8250c71e-59bc-41ab-b576-99fcfc34e8d1}) of DeviceClass mockInputType - - - - - - Timeout action - The name of the ActionType ({854a0a4a-803f-4b7f-9dce-b07794f9011b}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({54646e7c-bc54-4895-81a2-590d72d120f9}) of DeviceClass mockPushButton - - - - - - Timestamp (Int) - The name of the ParamType (DeviceClass: mockInputType, EventType: timestampInt, ID: {2c91b5ef-c2d1-4367-bc65-5a13abf69641}) ----------- -The name of the StateType ({2c91b5ef-c2d1-4367-bc65-5a13abf69641}) of DeviceClass mockInputType - - - - - Timestamp (Int) changed - The name of the EventType ({2c91b5ef-c2d1-4367-bc65-5a13abf69641}) of DeviceClass mockInputType - - - - - - Timestamp (UInt) - The name of the ParamType (DeviceClass: mockInputType, EventType: timestampUInt, ID: {6c9a96e8-0d48-4f42-8967-848358fd7f79}) ----------- -The name of the StateType ({6c9a96e8-0d48-4f42-8967-848358fd7f79}) of DeviceClass mockInputType - - - - - Timestamp (UInt) changed - The name of the EventType ({6c9a96e8-0d48-4f42-8967-848358fd7f79}) of DeviceClass mockInputType - - - - - - UInt - The name of the ParamType (DeviceClass: mockInputType, EventType: uint, ID: {19e74fcc-bfd5-491f-8eb6-af128e8f1162}) ----------- -The name of the StateType ({19e74fcc-bfd5-491f-8eb6-af128e8f1162}) of DeviceClass mockInputType - - - - - UInt changed - The name of the EventType ({19e74fcc-bfd5-491f-8eb6-af128e8f1162}) of DeviceClass mockInputType - - - - - URL - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {fa67229f-fcef-496f-b671-59a4b48f3ab5}) - - - - - Wait 3 second before you continue, the push button will be pressed automatically. - The pairing info of deviceClass mockPushButton - - - - - - - Writable Bool - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableBool, ID: {a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableBool, ID: {a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) ----------- -The name of the StateType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - - - - - Writable Bool changed - The name of the EventType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - - - - - - - Writable Color - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableColor, ID: {455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableColor, ID: {455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) ----------- -The name of the StateType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType - - - - - Writable Color changed - The name of the EventType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType - - - - - - - Writable Double - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableDouble, ID: {8e2eb91b-d60b-4461-9a50-d7b8ad263170}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableDouble, ID: {8e2eb91b-d60b-4461-9a50-d7b8ad263170}) ----------- -The name of the StateType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType - - - - - - - Writable Double (min/max) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableDoubleMinMax, ID: {00d3425e-1da6-4748-8906-4555ceefb136}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableDoubleMinMax, ID: {00d3425e-1da6-4748-8906-4555ceefb136}) ----------- -The name of the StateType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType - - - - - Writable Double (min/max) changed - The name of the EventType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType - - - - - Writable Double changed - The name of the EventType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType - - - - - - - Writable Int - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableInt, ID: {857a8422-983c-47d6-a15f-d8450b3162f7}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableInt, ID: {857a8422-983c-47d6-a15f-d8450b3162f7}) ----------- -The name of the StateType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - - - - - - - Writable Int (min/max) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableIntMinMax, ID: {86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableIntMinMax, ID: {86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) ----------- -The name of the StateType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - - - - - Writable Int (min/max) changed - The name of the EventType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - - - - - Writable Int changed - The name of the EventType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - - - - - - - Writable String - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableString, ID: {ef511043-bd1a-4a5f-984c-222b7da43f38}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableString, ID: {ef511043-bd1a-4a5f-984c-222b7da43f38}) ----------- -The name of the StateType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType - - - - - - - Writable String (selection) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableStringSelection, ID: {209d7afc-6fe9-4fe9-939b-e472ea0ad639}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableStringSelection, ID: {209d7afc-6fe9-4fe9-939b-e472ea0ad639}) ----------- -The name of the StateType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType - - - - - Writable String (selection) changed - The name of the EventType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType - - - - - Writable String changed - The name of the EventType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType - - - - - - - Writable Time - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableTime, ID: {d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableTime, ID: {d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) ----------- -The name of the StateType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType - - - - - Writable Time changed - The name of the EventType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType - - - - - - - Writable Timestamp (Int) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableTimestampInt, ID: {88b6746a-b009-4df6-8986-d7884ffd94b2}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableTimestampInt, ID: {88b6746a-b009-4df6-8986-d7884ffd94b2}) ----------- -The name of the StateType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType - - - - - Writable Timestamp (Int) changed - The name of the EventType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType - - - - - - - Writable Timestamp (UInt) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableTimestampUInt, ID: {45d0069a-63ac-4265-8170-8152778608ee}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableTimestampUInt, ID: {45d0069a-63ac-4265-8170-8152778608ee}) ----------- -The name of the StateType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType - - - - - Writable Timestamp (UInt) changed - The name of the EventType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType - - - - - - - Writable UInt - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableUInt, ID: {563e9c4c-5198-400a-9f6c-358f4752af58}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableUInt, ID: {563e9c4c-5198-400a-9f6c-358f4752af58}) ----------- -The name of the StateType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType - - - - - - - Writable UInt (min/max) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableUIntMinMax, ID: {79238998-eaab-4d71-b406-5d78f1749751}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableUIntMinMax, ID: {79238998-eaab-4d71-b406-5d78f1749751}) ----------- -The name of the StateType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType - - - - - Writable UInt (min/max) changed - The name of the EventType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType - - - - - Writable UInt changed - The name of the EventType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType - - - - - - - - - - allowed values - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: allowedValues, ID: {b463c5ae-4d55-402f-8480-a5cdb485c143}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: allowedValues, ID: {b463c5ae-4d55-402f-8480-a5cdb485c143}) ----------- -The name of the StateType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: allowedValues, ID: {05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: allowedValues, ID: {05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) ----------- -The name of the StateType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - - - - - - allowed values changed - The name of the EventType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - - - - - - async - The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {a5c4315f-0624-4971-87c1-4bbfbfdbd16e}) ----------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {f2977061-4dd0-4ef5-85aa-3b7134743be3}) - - - - - - - battery level - The name of the ParamType (DeviceClass: mock, EventType: batteryLevel, ID: {6c8ab9a6-0164-4795-b829-f4394fe4edc4}) ----------- -The name of the EventType ({6c8ab9a6-0164-4795-b829-f4394fe4edc4}) of DeviceClass mock ----------- -The name of the StateType ({6c8ab9a6-0164-4795-b829-f4394fe4edc4}) of DeviceClass mock - - - - - - - battery level critical - The name of the ParamType (DeviceClass: mock, EventType: batteryCritical, ID: {580bc611-1a55-41f3-996f-8d3ccf543db3}) ----------- -The name of the EventType ({580bc611-1a55-41f3-996f-8d3ccf543db3}) of DeviceClass mock ----------- -The name of the StateType ({580bc611-1a55-41f3-996f-8d3ccf543db3}) of DeviceClass mock - - - - - - - - - - - - - - - - bool value - The name of the ParamType (DeviceClass: mockChild, ActionType: boolValue, ID: {80ba1449-b485-47d4-a067-6bf306e2a568}) ----------- -The name of the ParamType (DeviceClass: mockChild, EventType: boolValue, ID: {80ba1449-b485-47d4-a067-6bf306e2a568}) ----------- -The name of the StateType ({80ba1449-b485-47d4-a067-6bf306e2a568}) of DeviceClass mockChild ----------- -The name of the ParamType (DeviceClass: mockParent, ActionType: boolValue, ID: {d24ede5f-4064-4898-bb84-cfb533b1fbc0}) ----------- -The name of the ParamType (DeviceClass: mockParent, EventType: boolValue, ID: {d24ede5f-4064-4898-bb84-cfb533b1fbc0}) ----------- -The name of the StateType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClass mockParent ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: bool, ID: {7ffe514f-7999-4998-8350-0e73e222a8c4}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: bool, ID: {7ffe514f-7999-4998-8350-0e73e222a8c4}) ----------- -The name of the StateType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: bool, ID: {e680f7a4-b39e-46da-be41-fa3170fe3768}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: bool, ID: {e680f7a4-b39e-46da-be41-fa3170fe3768}) ----------- -The name of the StateType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - - - - - - - - bool value changed - The name of the EventType ({80ba1449-b485-47d4-a067-6bf306e2a568}) of DeviceClass mockChild ----------- -The name of the EventType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClass mockParent ----------- -The name of the EventType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - - - - - - broken - The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {66179395-ef7a-4013-9fc6-2084104eea09}) ----------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {ae8f8901-f2c1-42a5-8111-6d2fc8e4c1e4}) - - - - - - - - - - color - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: color, ID: {3e161294-8a0d-4384-9676-6959e08cc2fa}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: color, ID: {3e161294-8a0d-4384-9676-6959e08cc2fa}) ----------- -The name of the StateType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: color, ID: {20dc7c22-c50e-42db-837c-2bbced939f8e}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: color, ID: {20dc7c22-c50e-42db-837c-2bbced939f8e}) ----------- -The name of the StateType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - - - - - - color changed - The name of the EventType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - - - - - configParamBool - The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: {c75723b6-ea4f-4982-9751-6c5e39c88145}) - - - - - configParamInt - The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: {e1f72121-a426-45e2-b475-8262b5cdf103}) - - - - - - - - - - double value - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: double, ID: {17635624-7c19-4bae-8429-2f7aa5d2f843}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: double, ID: {17635624-7c19-4bae-8429-2f7aa5d2f843}) ----------- -The name of the StateType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: double, ID: {53cd7c55-49b7-441b-b970-9048f20f0e2c}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: double, ID: {53cd7c55-49b7-441b-b970-9048f20f0e2c}) ----------- -The name of the StateType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - - - - - - double value changed - The name of the EventType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - - - - - - http port - The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {bfeb0613-dab6-408c-aa27-c362c921d0d1}) ----------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {d4f06047-125e-4479-9810-b54c189917f5}) - - - - - - mockActionParam1 - The name of the ParamType (DeviceClass: mockDeviceAuto, ActionType: withParams, ID: {b8126ba6-3a54-45a3-be4d-63feb0ddb77b}) ----------- -The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: {a2d3a256-a551-4712-a65b-ecd5a436a1cb}) - - - - - - mockActionParam2 - The name of the ParamType (DeviceClass: mockDeviceAuto, ActionType: withParams, ID: {df41ba71-e43b-4854-91d1-b19d8066d4f9}) ----------- -The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: {304a4899-18be-4e3b-94f4-d03be52f3233}) - - - - - - mockParamInt - The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: event2, ID: {12ed5a15-96b4-4381-9d9c-a24875283d4f}) ----------- -The name of the ParamType (DeviceClass: mock, EventType: event2, ID: {0550e16d-60b9-4ba5-83f4-4d3cee656121}) - - - - - nymea - The name of the vendor ({2062d64d-3232-433c-88bc-0d33c0ba2ba6}) - - - - - - - - - - percentage - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: percentage, ID: {527f0687-0b28-4c26-852c-25b8f83e4797}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: percentage, ID: {527f0687-0b28-4c26-852c-25b8f83e4797}) ----------- -The name of the StateType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: percentage, ID: {72981c04-267a-4ba0-a59e-9921d2f3af9c}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: percentage, ID: {72981c04-267a-4ba0-a59e-9921d2f3af9c}) ----------- -The name of the StateType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - - - - - - percentage changed - The name of the EventType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - - - - - pin - The name of the ParamType (DeviceClass: mockDisplayPin, Type: device, ID: {da820e07-22dc-4173-9c07-2f49a4e265f9}) - - - - - - - powered - The name of the ParamType (DeviceClass: mock, ActionType: power, ID: {064aed0d-da4c-49d4-b236-60f97e98ff84}) ----------- -The name of the ParamType (DeviceClass: mock, EventType: power, ID: {064aed0d-da4c-49d4-b236-60f97e98ff84}) ----------- -The name of the StateType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - - - - - powered changed - The name of the EventType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - - - - - - - resultCount - The name of the ParamType (DeviceClass: mockDisplayPin, Type: discovery, ID: {35f6e4ba-28ad-4152-a58d-ec2600667bcf}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, Type: discovery, ID: {c40dbc59-4bba-4871-9b8e-bbd8d5d9193b}) ----------- -The name of the ParamType (DeviceClass: mock, Type: discovery, ID: {d222adb4-2f9c-4c3f-8655-76400d0fb6ce}) - - - - - set power - The name of the ActionType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - - - nymea diff --git a/translations/nymead-nl.ts b/translations/nymead-nl.ts index 5f63bc63..4f528454 100644 --- a/translations/nymead-nl.ts +++ b/translations/nymead-nl.ts @@ -4,1173 +4,47 @@ CloudNotifications - - + + Cloud Notifications Cloud-berichten - + User ID Gebruikers-ID - + Device Apparaat - + Title Titel - + Message text Berichttekst - + Send notification Bericht versturen - + connected verbonden - + Connected changed Verbonden gewijzigd - - DevicePluginMock - - - Display pin!! The pin is 243681 - Pin weergeven!!! De pin is 24361 - - - - SimpleButton - - - - Simple button - The name of the plugin SimpleButton (28c7b102-3ac8-41f6-8dc0-f4787222a186) ----------- -The name of the DeviceClass (c16ba02d-c982-4b45-8ca2-1945d94d8e66) - - - - - nymea - The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) - - - - - press - 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 - - - - - SimplePushButtonHandler - - - If specified, all D-Bus interfaces will be bound to the session bus instead of the system bus. - Indien gespecificeerd, worden alle D-businterfaces gebonden aan de sessiebus, en niet aan de systeembus. - - - - mockDevice - - - Add to favorites - The name of the Browser Item ActionType ({00b8f0a8-99ca-4aa4-833d-59eb8d4d6de3}) of DeviceClass mock - - - - - - Bool - The name of the ParamType (DeviceClass: mockInputType, EventType: bool, ID: {3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) ----------- -The name of the StateType ({3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) of DeviceClass mockInputType - - - - - Bool changed - The name of the EventType ({3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) of DeviceClass mockInputType - - - - - - Color - The name of the ParamType (DeviceClass: mockInputType, EventType: color, ID: {4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) ----------- -The name of the StateType ({4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) of DeviceClass mockInputType - - - - - Color changed - The name of the EventType ({4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) of DeviceClass mockInputType - - - - - - Double - The name of the ParamType (DeviceClass: mockInputType, EventType: double, ID: {f7d2063d-959e-46ac-8568-8b99722d3b22}) ----------- -The name of the StateType ({f7d2063d-959e-46ac-8568-8b99722d3b22}) of DeviceClass mockInputType - - - - - Double changed - The name of the EventType ({f7d2063d-959e-46ac-8568-8b99722d3b22}) of DeviceClass mockInputType - - - - - - - - Dummy bool state - The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: boolValue, ID: {978b0ba5-d008-41bd-b63d-a3bd23cb6469}) ----------- -The name of the StateType ({978b0ba5-d008-41bd-b63d-a3bd23cb6469}) of DeviceClass mockDeviceAuto ----------- -The name of the ParamType (DeviceClass: mock, EventType: bool, ID: {9dd6a97c-dfd1-43dc-acbd-367932742310}) ----------- -The name of the StateType ({9dd6a97c-dfd1-43dc-acbd-367932742310}) of DeviceClass mock - - - - - - Dummy bool state changed - The name of the EventType ({978b0ba5-d008-41bd-b63d-a3bd23cb6469}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({9dd6a97c-dfd1-43dc-acbd-367932742310}) of DeviceClass mock - - - - - - Dummy double state - The name of the ParamType (DeviceClass: mock, EventType: double, ID: {7cac53ee-7048-4dc9-b000-7b585390f34c}) ----------- -The name of the StateType ({7cac53ee-7048-4dc9-b000-7b585390f34c}) of DeviceClass mock - - - - - Dummy double state changed - The name of the EventType ({7cac53ee-7048-4dc9-b000-7b585390f34c}) of DeviceClass mock - - - - - - - - Dummy int state - The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: int, ID: {74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) ----------- -The name of the StateType ({74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) of DeviceClass mockDeviceAuto ----------- -The name of the ParamType (DeviceClass: mock, EventType: int, ID: {80baec19-54de-4948-ac46-31eabfaceb83}) ----------- -The name of the StateType ({80baec19-54de-4948-ac46-31eabfaceb83}) of DeviceClass mock - - - - - - Dummy int state changed - The name of the EventType ({74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({80baec19-54de-4948-ac46-31eabfaceb83}) of DeviceClass mock - - - - - IPv4 address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {9e5f86a0-4bb3-4892-bff8-3fc4032af6e2}) - - - - - IPv6 address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {43bf3832-dd48-4090-a836-656e8b60216e}) - - - - - - Int - The name of the ParamType (DeviceClass: mockInputType, EventType: int, ID: {d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) ----------- -The name of the StateType ({d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) of DeviceClass mockInputType - - - - - Int changed - The name of the EventType ({d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) of DeviceClass mockInputType - - - - - Mac address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e93db587-7919-48f3-8c88-1651de63c765}) - - - - - Mail address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {a8494faf-3a0f-4cf3-84b7-4b39148a838d}) - - - - - - Mock Action 1 (with params) - The name of the ActionType ({00000000-0000-0000-0000-000000000000}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({dea0f4e1-65e3-4981-8eaa-2701c53a9185}) of DeviceClass mock - - - - - - Mock Action 2 (without params) - The name of the ActionType ({ef518d53-50e2-4ca5-a4b1-e9a8b9309d44}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({defd3ed6-1a0d-400b-8879-a0202cf39935}) of DeviceClass mock - - - - - - Mock Action 3 (async) - The name of the ActionType ({5f27a9f2-59cd-4a15-98bd-6ed6e10bc6ed}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({fbae06d3-7666-483e-a39e-ec50fe89054e}) of DeviceClass mock - - - - - - Mock Action 4 (broken) - The name of the ActionType ({58a61de4-472c-4775-8fe8-583a9c83fcf1}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({df3cf33d-26d5-4577-9132-9823bd33fad0}) of DeviceClass mock - - - - - - Mock Action 5 (async, broken) - The name of the ActionType ({17ad52dd-ef2f-4947-9b73-5bf6e172a9d0}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({bfe89a1d-3497-4121-8318-e77c37537219}) of DeviceClass mock - - - - - Mock Device - The name of the DeviceClass ({753f0d32-0468-4d08-82ed-1964aab03298}) - - - - - Mock Device (Auto created) - The name of the DeviceClass ({ab4257b3-7548-47ee-9bd4-7dc3004fd197}) - - - - - Mock Device (Child) - The name of the DeviceClass ({40893c9f-bc47-40c1-8bf7-b390c7c1b4fc}) - - - - - Mock Device (Display Pin) - The name of the DeviceClass ({296f1fd4-e893-46b2-8a42-50d1bceb8730}) - - - - - Mock Device (InputTypes) - The name of the DeviceClass ({515ffdf1-55e5-498d-9abc-4e2fe768f3a9}) - - - - - Mock Device (Parent) - The name of the DeviceClass ({a71fbde9-9a38-4bf8-beab-c8aade2608ba}) - - - - - Mock Device (Push Button) - The name of the DeviceClass ({9e03144c-e436-4eea-82d9-ccb33ef778db}) - - - - - Mock Devices - The name of the plugin mockDevice ({727a4a9a-c187-446f-aadf-f1b2220607d1}) - - - - - - Mock Event 1 - The name of the EventType ({00f81fca-26f1-4a84-aa2b-4c6a3d953ec6}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({45bf3752-0fc6-46b9-89fd-ffd878b5b22b}) of DeviceClass mock - - - - - - Mock Event 2 - The name of the EventType ({6e27922d-aa9d-44d1-b9b4-9faf31b6bd97}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({863d5920-b1cf-4eb9-88bd-8f7b8583b1cf}) of DeviceClass mock - - - - - Password text - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e5c0d14b-c9f1-4aca-a56e-85bfa6977150}) - - - - - Please enter the secret which normaly will be displayed on the device. For the mockdevice the pin is 243681. - The pairing info of deviceClass mockDisplayPin - - - - - Remove from favorites - The name of the Browser Item ActionType ({da6faef8-2816-430e-93bb-57e8f9582d29}) of DeviceClass mock - - - - - Search text - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {22add8c9-ee4f-43ad-8931-58e999313ac3}) - - - - - Set Writable Bool - The name of the ActionType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - - - - - Set Writable Color - The name of the ActionType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType - - - - - Set Writable Double - The name of the ActionType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType - - - - - Set Writable Double (min/max) - The name of the ActionType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType - - - - - Set Writable Int - The name of the ActionType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - - - - - Set Writable Int (min/max) - The name of the ActionType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - - - - - Set Writable String - The name of the ActionType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType - - - - - Set Writable String (selection) - The name of the ActionType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType - - - - - Set Writable Time - The name of the ActionType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType - - - - - Set Writable Timestamp (Int) - The name of the ActionType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType - - - - - Set Writable Timestamp (UInt) - The name of the ActionType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType - - - - - Set Writable UInt - The name of the ActionType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType - - - - - Set Writable UInt (min/max) - The name of the ActionType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType - - - - - - Set allowed values - The name of the ActionType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - - - - - - - - Set bool value - The name of the ActionType ({80ba1449-b485-47d4-a067-6bf306e2a568}) of DeviceClass mockChild ----------- -The name of the ActionType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClass mockParent ----------- -The name of the ActionType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - - - - - - Set color - The name of the ActionType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - - - - - - Set double value - The name of the ActionType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - - - - - - Set percentage - The name of the ActionType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - - - - - Setting 1 - The name of the ParamType (DeviceClass: mock, Type: settings, ID: {367f7ba4-5039-47be-abd8-59cc8eaf4b9a}) - - - - - - String - The name of the ParamType (DeviceClass: mockInputType, EventType: string, ID: {27f69ca9-a321-40ff-bfee-4b0272a671b4}) ----------- -The name of the StateType ({27f69ca9-a321-40ff-bfee-4b0272a671b4}) of DeviceClass mockInputType - - - - - String changed - The name of the EventType ({27f69ca9-a321-40ff-bfee-4b0272a671b4}) of DeviceClass mockInputType - - - - - Text area - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {716f0994-bc01-42b0-b64d-59236f7320d2}) - - - - - Text line - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e6acf0c7-4b8e-4296-ac62-855d20deb816}) - - - - - - Time - The name of the ParamType (DeviceClass: mockInputType, EventType: time, ID: {8250c71e-59bc-41ab-b576-99fcfc34e8d1}) ----------- -The name of the StateType ({8250c71e-59bc-41ab-b576-99fcfc34e8d1}) of DeviceClass mockInputType - - - - - Time changed - The name of the EventType ({8250c71e-59bc-41ab-b576-99fcfc34e8d1}) of DeviceClass mockInputType - - - - - - Timeout action - The name of the ActionType ({854a0a4a-803f-4b7f-9dce-b07794f9011b}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({54646e7c-bc54-4895-81a2-590d72d120f9}) of DeviceClass mockPushButton - - - - - - Timestamp (Int) - The name of the ParamType (DeviceClass: mockInputType, EventType: timestampInt, ID: {2c91b5ef-c2d1-4367-bc65-5a13abf69641}) ----------- -The name of the StateType ({2c91b5ef-c2d1-4367-bc65-5a13abf69641}) of DeviceClass mockInputType - - - - - Timestamp (Int) changed - The name of the EventType ({2c91b5ef-c2d1-4367-bc65-5a13abf69641}) of DeviceClass mockInputType - - - - - - Timestamp (UInt) - The name of the ParamType (DeviceClass: mockInputType, EventType: timestampUInt, ID: {6c9a96e8-0d48-4f42-8967-848358fd7f79}) ----------- -The name of the StateType ({6c9a96e8-0d48-4f42-8967-848358fd7f79}) of DeviceClass mockInputType - - - - - Timestamp (UInt) changed - The name of the EventType ({6c9a96e8-0d48-4f42-8967-848358fd7f79}) of DeviceClass mockInputType - - - - - - UInt - The name of the ParamType (DeviceClass: mockInputType, EventType: uint, ID: {19e74fcc-bfd5-491f-8eb6-af128e8f1162}) ----------- -The name of the StateType ({19e74fcc-bfd5-491f-8eb6-af128e8f1162}) of DeviceClass mockInputType - - - - - UInt changed - The name of the EventType ({19e74fcc-bfd5-491f-8eb6-af128e8f1162}) of DeviceClass mockInputType - - - - - URL - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {fa67229f-fcef-496f-b671-59a4b48f3ab5}) - - - - - Wait 3 second before you continue, the push button will be pressed automatically. - The pairing info of deviceClass mockPushButton - - - - - - - Writable Bool - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableBool, ID: {a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableBool, ID: {a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) ----------- -The name of the StateType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - - - - - Writable Bool changed - The name of the EventType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - - - - - - - Writable Color - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableColor, ID: {455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableColor, ID: {455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) ----------- -The name of the StateType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType - - - - - Writable Color changed - The name of the EventType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType - - - - - - - Writable Double - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableDouble, ID: {8e2eb91b-d60b-4461-9a50-d7b8ad263170}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableDouble, ID: {8e2eb91b-d60b-4461-9a50-d7b8ad263170}) ----------- -The name of the StateType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType - - - - - - - Writable Double (min/max) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableDoubleMinMax, ID: {00d3425e-1da6-4748-8906-4555ceefb136}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableDoubleMinMax, ID: {00d3425e-1da6-4748-8906-4555ceefb136}) ----------- -The name of the StateType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType - - - - - Writable Double (min/max) changed - The name of the EventType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType - - - - - Writable Double changed - The name of the EventType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType - - - - - - - Writable Int - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableInt, ID: {857a8422-983c-47d6-a15f-d8450b3162f7}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableInt, ID: {857a8422-983c-47d6-a15f-d8450b3162f7}) ----------- -The name of the StateType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - - - - - - - Writable Int (min/max) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableIntMinMax, ID: {86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableIntMinMax, ID: {86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) ----------- -The name of the StateType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - - - - - Writable Int (min/max) changed - The name of the EventType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - - - - - Writable Int changed - The name of the EventType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - - - - - - - Writable String - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableString, ID: {ef511043-bd1a-4a5f-984c-222b7da43f38}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableString, ID: {ef511043-bd1a-4a5f-984c-222b7da43f38}) ----------- -The name of the StateType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType - - - - - - - Writable String (selection) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableStringSelection, ID: {209d7afc-6fe9-4fe9-939b-e472ea0ad639}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableStringSelection, ID: {209d7afc-6fe9-4fe9-939b-e472ea0ad639}) ----------- -The name of the StateType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType - - - - - Writable String (selection) changed - The name of the EventType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType - - - - - Writable String changed - The name of the EventType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType - - - - - - - Writable Time - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableTime, ID: {d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableTime, ID: {d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) ----------- -The name of the StateType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType - - - - - Writable Time changed - The name of the EventType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType - - - - - - - Writable Timestamp (Int) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableTimestampInt, ID: {88b6746a-b009-4df6-8986-d7884ffd94b2}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableTimestampInt, ID: {88b6746a-b009-4df6-8986-d7884ffd94b2}) ----------- -The name of the StateType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType - - - - - Writable Timestamp (Int) changed - The name of the EventType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType - - - - - - - Writable Timestamp (UInt) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableTimestampUInt, ID: {45d0069a-63ac-4265-8170-8152778608ee}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableTimestampUInt, ID: {45d0069a-63ac-4265-8170-8152778608ee}) ----------- -The name of the StateType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType - - - - - Writable Timestamp (UInt) changed - The name of the EventType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType - - - - - - - Writable UInt - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableUInt, ID: {563e9c4c-5198-400a-9f6c-358f4752af58}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableUInt, ID: {563e9c4c-5198-400a-9f6c-358f4752af58}) ----------- -The name of the StateType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType - - - - - - - Writable UInt (min/max) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableUIntMinMax, ID: {79238998-eaab-4d71-b406-5d78f1749751}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableUIntMinMax, ID: {79238998-eaab-4d71-b406-5d78f1749751}) ----------- -The name of the StateType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType - - - - - Writable UInt (min/max) changed - The name of the EventType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType - - - - - Writable UInt changed - The name of the EventType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType - - - - - - - - - - allowed values - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: allowedValues, ID: {b463c5ae-4d55-402f-8480-a5cdb485c143}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: allowedValues, ID: {b463c5ae-4d55-402f-8480-a5cdb485c143}) ----------- -The name of the StateType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: allowedValues, ID: {05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: allowedValues, ID: {05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) ----------- -The name of the StateType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - - - - - - allowed values changed - The name of the EventType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - - - - - - async - The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {a5c4315f-0624-4971-87c1-4bbfbfdbd16e}) ----------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {f2977061-4dd0-4ef5-85aa-3b7134743be3}) - - - - - - - battery level - The name of the ParamType (DeviceClass: mock, EventType: batteryLevel, ID: {6c8ab9a6-0164-4795-b829-f4394fe4edc4}) ----------- -The name of the EventType ({6c8ab9a6-0164-4795-b829-f4394fe4edc4}) of DeviceClass mock ----------- -The name of the StateType ({6c8ab9a6-0164-4795-b829-f4394fe4edc4}) of DeviceClass mock - - - - - - - battery level critical - The name of the ParamType (DeviceClass: mock, EventType: batteryCritical, ID: {580bc611-1a55-41f3-996f-8d3ccf543db3}) ----------- -The name of the EventType ({580bc611-1a55-41f3-996f-8d3ccf543db3}) of DeviceClass mock ----------- -The name of the StateType ({580bc611-1a55-41f3-996f-8d3ccf543db3}) of DeviceClass mock - - - - - - - - - - - - - - - - bool value - The name of the ParamType (DeviceClass: mockChild, ActionType: boolValue, ID: {80ba1449-b485-47d4-a067-6bf306e2a568}) ----------- -The name of the ParamType (DeviceClass: mockChild, EventType: boolValue, ID: {80ba1449-b485-47d4-a067-6bf306e2a568}) ----------- -The name of the StateType ({80ba1449-b485-47d4-a067-6bf306e2a568}) of DeviceClass mockChild ----------- -The name of the ParamType (DeviceClass: mockParent, ActionType: boolValue, ID: {d24ede5f-4064-4898-bb84-cfb533b1fbc0}) ----------- -The name of the ParamType (DeviceClass: mockParent, EventType: boolValue, ID: {d24ede5f-4064-4898-bb84-cfb533b1fbc0}) ----------- -The name of the StateType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClass mockParent ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: bool, ID: {7ffe514f-7999-4998-8350-0e73e222a8c4}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: bool, ID: {7ffe514f-7999-4998-8350-0e73e222a8c4}) ----------- -The name of the StateType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: bool, ID: {e680f7a4-b39e-46da-be41-fa3170fe3768}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: bool, ID: {e680f7a4-b39e-46da-be41-fa3170fe3768}) ----------- -The name of the StateType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - - - - - - - - bool value changed - The name of the EventType ({80ba1449-b485-47d4-a067-6bf306e2a568}) of DeviceClass mockChild ----------- -The name of the EventType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClass mockParent ----------- -The name of the EventType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - - - - - - broken - The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {66179395-ef7a-4013-9fc6-2084104eea09}) ----------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {ae8f8901-f2c1-42a5-8111-6d2fc8e4c1e4}) - - - - - - - - - - color - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: color, ID: {3e161294-8a0d-4384-9676-6959e08cc2fa}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: color, ID: {3e161294-8a0d-4384-9676-6959e08cc2fa}) ----------- -The name of the StateType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: color, ID: {20dc7c22-c50e-42db-837c-2bbced939f8e}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: color, ID: {20dc7c22-c50e-42db-837c-2bbced939f8e}) ----------- -The name of the StateType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - - - - - - color changed - The name of the EventType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - - - - - configParamBool - The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: {c75723b6-ea4f-4982-9751-6c5e39c88145}) - - - - - configParamInt - The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: {e1f72121-a426-45e2-b475-8262b5cdf103}) - - - - - - - - - - double value - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: double, ID: {17635624-7c19-4bae-8429-2f7aa5d2f843}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: double, ID: {17635624-7c19-4bae-8429-2f7aa5d2f843}) ----------- -The name of the StateType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: double, ID: {53cd7c55-49b7-441b-b970-9048f20f0e2c}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: double, ID: {53cd7c55-49b7-441b-b970-9048f20f0e2c}) ----------- -The name of the StateType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - - - - - - double value changed - The name of the EventType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - - - - - - http port - The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {bfeb0613-dab6-408c-aa27-c362c921d0d1}) ----------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {d4f06047-125e-4479-9810-b54c189917f5}) - - - - - - mockActionParam1 - The name of the ParamType (DeviceClass: mockDeviceAuto, ActionType: withParams, ID: {b8126ba6-3a54-45a3-be4d-63feb0ddb77b}) ----------- -The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: {a2d3a256-a551-4712-a65b-ecd5a436a1cb}) - - - - - - mockActionParam2 - The name of the ParamType (DeviceClass: mockDeviceAuto, ActionType: withParams, ID: {df41ba71-e43b-4854-91d1-b19d8066d4f9}) ----------- -The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: {304a4899-18be-4e3b-94f4-d03be52f3233}) - - - - - - mockParamInt - The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: event2, ID: {12ed5a15-96b4-4381-9d9c-a24875283d4f}) ----------- -The name of the ParamType (DeviceClass: mock, EventType: event2, ID: {0550e16d-60b9-4ba5-83f4-4d3cee656121}) - - - - - nymea - The name of the vendor ({2062d64d-3232-433c-88bc-0d33c0ba2ba6}) - - - - - - - - - - percentage - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: percentage, ID: {527f0687-0b28-4c26-852c-25b8f83e4797}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: percentage, ID: {527f0687-0b28-4c26-852c-25b8f83e4797}) ----------- -The name of the StateType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: percentage, ID: {72981c04-267a-4ba0-a59e-9921d2f3af9c}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: percentage, ID: {72981c04-267a-4ba0-a59e-9921d2f3af9c}) ----------- -The name of the StateType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - - - - - - percentage changed - The name of the EventType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - - - - - pin - The name of the ParamType (DeviceClass: mockDisplayPin, Type: device, ID: {da820e07-22dc-4173-9c07-2f49a4e265f9}) - - - - - - - powered - The name of the ParamType (DeviceClass: mock, ActionType: power, ID: {064aed0d-da4c-49d4-b236-60f97e98ff84}) ----------- -The name of the ParamType (DeviceClass: mock, EventType: power, ID: {064aed0d-da4c-49d4-b236-60f97e98ff84}) ----------- -The name of the StateType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - - - - - powered changed - The name of the EventType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - - - - - - - resultCount - The name of the ParamType (DeviceClass: mockDisplayPin, Type: discovery, ID: {35f6e4ba-28ad-4152-a58d-ec2600667bcf}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, Type: discovery, ID: {c40dbc59-4bba-4871-9b8e-bbd8d5d9193b}) ----------- -The name of the ParamType (DeviceClass: mock, Type: discovery, ID: {d222adb4-2f9c-4c3f-8655-76400d0fb6ce}) - - - - - set power - The name of the ActionType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - - - nymea diff --git a/translations/nymead-pt.ts b/translations/nymead-pt.ts index 4f21869e..26c4c20b 100644 --- a/translations/nymead-pt.ts +++ b/translations/nymead-pt.ts @@ -4,1173 +4,47 @@ CloudNotifications - - + + Cloud Notifications Notificações de nuvem - + User ID ID de utilizador - + Device Dispositivo - + Title Título - + Message text Texto de mensagem - + Send notification Enviar notificação - + connected ligado - + Connected changed Ligado alterado - - DevicePluginMock - - - Display pin!! The pin is 243681 - Visor pin!! O pin é 243681 - - - - SimpleButton - - - - Simple button - The name of the plugin SimpleButton (28c7b102-3ac8-41f6-8dc0-f4787222a186) ----------- -The name of the DeviceClass (c16ba02d-c982-4b45-8ca2-1945d94d8e66) - - - - - nymea - The name of the vendor (2062d64d-3232-433c-88bc-0d33c0ba2ba6) - - - - - press - 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 - - - - - SimplePushButtonHandler - - - If specified, all D-Bus interfaces will be bound to the session bus instead of the system bus. - Se especificado, todas as interfaces do D-Bus serão ligadas ao barramento da sessão em vez do barramento do sistema. - - - - mockDevice - - - Add to favorites - The name of the Browser Item ActionType ({00b8f0a8-99ca-4aa4-833d-59eb8d4d6de3}) of DeviceClass mock - - - - - - Bool - The name of the ParamType (DeviceClass: mockInputType, EventType: bool, ID: {3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) ----------- -The name of the StateType ({3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) of DeviceClass mockInputType - - - - - Bool changed - The name of the EventType ({3bad3a09-5826-4ed7-a832-10e3e2ee2a7d}) of DeviceClass mockInputType - - - - - - Color - The name of the ParamType (DeviceClass: mockInputType, EventType: color, ID: {4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) ----------- -The name of the StateType ({4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) of DeviceClass mockInputType - - - - - Color changed - The name of the EventType ({4507d5c6-b692-4bd6-87f2-00364bc0cb4d}) of DeviceClass mockInputType - - - - - - Double - The name of the ParamType (DeviceClass: mockInputType, EventType: double, ID: {f7d2063d-959e-46ac-8568-8b99722d3b22}) ----------- -The name of the StateType ({f7d2063d-959e-46ac-8568-8b99722d3b22}) of DeviceClass mockInputType - - - - - Double changed - The name of the EventType ({f7d2063d-959e-46ac-8568-8b99722d3b22}) of DeviceClass mockInputType - - - - - - - - Dummy bool state - The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: boolValue, ID: {978b0ba5-d008-41bd-b63d-a3bd23cb6469}) ----------- -The name of the StateType ({978b0ba5-d008-41bd-b63d-a3bd23cb6469}) of DeviceClass mockDeviceAuto ----------- -The name of the ParamType (DeviceClass: mock, EventType: bool, ID: {9dd6a97c-dfd1-43dc-acbd-367932742310}) ----------- -The name of the StateType ({9dd6a97c-dfd1-43dc-acbd-367932742310}) of DeviceClass mock - - - - - - Dummy bool state changed - The name of the EventType ({978b0ba5-d008-41bd-b63d-a3bd23cb6469}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({9dd6a97c-dfd1-43dc-acbd-367932742310}) of DeviceClass mock - - - - - - Dummy double state - The name of the ParamType (DeviceClass: mock, EventType: double, ID: {7cac53ee-7048-4dc9-b000-7b585390f34c}) ----------- -The name of the StateType ({7cac53ee-7048-4dc9-b000-7b585390f34c}) of DeviceClass mock - - - - - Dummy double state changed - The name of the EventType ({7cac53ee-7048-4dc9-b000-7b585390f34c}) of DeviceClass mock - - - - - - - - Dummy int state - The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: int, ID: {74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) ----------- -The name of the StateType ({74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) of DeviceClass mockDeviceAuto ----------- -The name of the ParamType (DeviceClass: mock, EventType: int, ID: {80baec19-54de-4948-ac46-31eabfaceb83}) ----------- -The name of the StateType ({80baec19-54de-4948-ac46-31eabfaceb83}) of DeviceClass mock - - - - - - Dummy int state changed - The name of the EventType ({74b24296-ba0b-4fbd-87f3-1b09a8bc3e8c}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({80baec19-54de-4948-ac46-31eabfaceb83}) of DeviceClass mock - - - - - IPv4 address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {9e5f86a0-4bb3-4892-bff8-3fc4032af6e2}) - - - - - IPv6 address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {43bf3832-dd48-4090-a836-656e8b60216e}) - - - - - - Int - The name of the ParamType (DeviceClass: mockInputType, EventType: int, ID: {d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) ----------- -The name of the StateType ({d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) of DeviceClass mockInputType - - - - - Int changed - The name of the EventType ({d0fc56ae-5791-4e91-b76c-dadfbc7e7dbb}) of DeviceClass mockInputType - - - - - Mac address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e93db587-7919-48f3-8c88-1651de63c765}) - - - - - Mail address - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {a8494faf-3a0f-4cf3-84b7-4b39148a838d}) - - - - - - Mock Action 1 (with params) - The name of the ActionType ({00000000-0000-0000-0000-000000000000}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({dea0f4e1-65e3-4981-8eaa-2701c53a9185}) of DeviceClass mock - - - - - - Mock Action 2 (without params) - The name of the ActionType ({ef518d53-50e2-4ca5-a4b1-e9a8b9309d44}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({defd3ed6-1a0d-400b-8879-a0202cf39935}) of DeviceClass mock - - - - - - Mock Action 3 (async) - The name of the ActionType ({5f27a9f2-59cd-4a15-98bd-6ed6e10bc6ed}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({fbae06d3-7666-483e-a39e-ec50fe89054e}) of DeviceClass mock - - - - - - Mock Action 4 (broken) - The name of the ActionType ({58a61de4-472c-4775-8fe8-583a9c83fcf1}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({df3cf33d-26d5-4577-9132-9823bd33fad0}) of DeviceClass mock - - - - - - Mock Action 5 (async, broken) - The name of the ActionType ({17ad52dd-ef2f-4947-9b73-5bf6e172a9d0}) of DeviceClass mockDeviceAuto ----------- -The name of the ActionType ({bfe89a1d-3497-4121-8318-e77c37537219}) of DeviceClass mock - - - - - Mock Device - The name of the DeviceClass ({753f0d32-0468-4d08-82ed-1964aab03298}) - - - - - Mock Device (Auto created) - The name of the DeviceClass ({ab4257b3-7548-47ee-9bd4-7dc3004fd197}) - - - - - Mock Device (Child) - The name of the DeviceClass ({40893c9f-bc47-40c1-8bf7-b390c7c1b4fc}) - - - - - Mock Device (Display Pin) - The name of the DeviceClass ({296f1fd4-e893-46b2-8a42-50d1bceb8730}) - - - - - Mock Device (InputTypes) - The name of the DeviceClass ({515ffdf1-55e5-498d-9abc-4e2fe768f3a9}) - - - - - Mock Device (Parent) - The name of the DeviceClass ({a71fbde9-9a38-4bf8-beab-c8aade2608ba}) - - - - - Mock Device (Push Button) - The name of the DeviceClass ({9e03144c-e436-4eea-82d9-ccb33ef778db}) - - - - - Mock Devices - The name of the plugin mockDevice ({727a4a9a-c187-446f-aadf-f1b2220607d1}) - - - - - - Mock Event 1 - The name of the EventType ({00f81fca-26f1-4a84-aa2b-4c6a3d953ec6}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({45bf3752-0fc6-46b9-89fd-ffd878b5b22b}) of DeviceClass mock - - - - - - Mock Event 2 - The name of the EventType ({6e27922d-aa9d-44d1-b9b4-9faf31b6bd97}) of DeviceClass mockDeviceAuto ----------- -The name of the EventType ({863d5920-b1cf-4eb9-88bd-8f7b8583b1cf}) of DeviceClass mock - - - - - Password text - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e5c0d14b-c9f1-4aca-a56e-85bfa6977150}) - - - - - Please enter the secret which normaly will be displayed on the device. For the mockdevice the pin is 243681. - The pairing info of deviceClass mockDisplayPin - - - - - Remove from favorites - The name of the Browser Item ActionType ({da6faef8-2816-430e-93bb-57e8f9582d29}) of DeviceClass mock - - - - - Search text - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {22add8c9-ee4f-43ad-8931-58e999313ac3}) - - - - - Set Writable Bool - The name of the ActionType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - - - - - Set Writable Color - The name of the ActionType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType - - - - - Set Writable Double - The name of the ActionType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType - - - - - Set Writable Double (min/max) - The name of the ActionType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType - - - - - Set Writable Int - The name of the ActionType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - - - - - Set Writable Int (min/max) - The name of the ActionType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - - - - - Set Writable String - The name of the ActionType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType - - - - - Set Writable String (selection) - The name of the ActionType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType - - - - - Set Writable Time - The name of the ActionType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType - - - - - Set Writable Timestamp (Int) - The name of the ActionType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType - - - - - Set Writable Timestamp (UInt) - The name of the ActionType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType - - - - - Set Writable UInt - The name of the ActionType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType - - - - - Set Writable UInt (min/max) - The name of the ActionType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType - - - - - - Set allowed values - The name of the ActionType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - - - - - - - - Set bool value - The name of the ActionType ({80ba1449-b485-47d4-a067-6bf306e2a568}) of DeviceClass mockChild ----------- -The name of the ActionType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClass mockParent ----------- -The name of the ActionType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - - - - - - Set color - The name of the ActionType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - - - - - - Set double value - The name of the ActionType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - - - - - - Set percentage - The name of the ActionType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - - - - - Setting 1 - The name of the ParamType (DeviceClass: mock, Type: settings, ID: {367f7ba4-5039-47be-abd8-59cc8eaf4b9a}) - - - - - - String - The name of the ParamType (DeviceClass: mockInputType, EventType: string, ID: {27f69ca9-a321-40ff-bfee-4b0272a671b4}) ----------- -The name of the StateType ({27f69ca9-a321-40ff-bfee-4b0272a671b4}) of DeviceClass mockInputType - - - - - String changed - The name of the EventType ({27f69ca9-a321-40ff-bfee-4b0272a671b4}) of DeviceClass mockInputType - - - - - Text area - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {716f0994-bc01-42b0-b64d-59236f7320d2}) - - - - - Text line - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {e6acf0c7-4b8e-4296-ac62-855d20deb816}) - - - - - - Time - The name of the ParamType (DeviceClass: mockInputType, EventType: time, ID: {8250c71e-59bc-41ab-b576-99fcfc34e8d1}) ----------- -The name of the StateType ({8250c71e-59bc-41ab-b576-99fcfc34e8d1}) of DeviceClass mockInputType - - - - - Time changed - The name of the EventType ({8250c71e-59bc-41ab-b576-99fcfc34e8d1}) of DeviceClass mockInputType - - - - - - Timeout action - The name of the ActionType ({854a0a4a-803f-4b7f-9dce-b07794f9011b}) of DeviceClass mockDisplayPin ----------- -The name of the ActionType ({54646e7c-bc54-4895-81a2-590d72d120f9}) of DeviceClass mockPushButton - - - - - - Timestamp (Int) - The name of the ParamType (DeviceClass: mockInputType, EventType: timestampInt, ID: {2c91b5ef-c2d1-4367-bc65-5a13abf69641}) ----------- -The name of the StateType ({2c91b5ef-c2d1-4367-bc65-5a13abf69641}) of DeviceClass mockInputType - - - - - Timestamp (Int) changed - The name of the EventType ({2c91b5ef-c2d1-4367-bc65-5a13abf69641}) of DeviceClass mockInputType - - - - - - Timestamp (UInt) - The name of the ParamType (DeviceClass: mockInputType, EventType: timestampUInt, ID: {6c9a96e8-0d48-4f42-8967-848358fd7f79}) ----------- -The name of the StateType ({6c9a96e8-0d48-4f42-8967-848358fd7f79}) of DeviceClass mockInputType - - - - - Timestamp (UInt) changed - The name of the EventType ({6c9a96e8-0d48-4f42-8967-848358fd7f79}) of DeviceClass mockInputType - - - - - - UInt - The name of the ParamType (DeviceClass: mockInputType, EventType: uint, ID: {19e74fcc-bfd5-491f-8eb6-af128e8f1162}) ----------- -The name of the StateType ({19e74fcc-bfd5-491f-8eb6-af128e8f1162}) of DeviceClass mockInputType - - - - - UInt changed - The name of the EventType ({19e74fcc-bfd5-491f-8eb6-af128e8f1162}) of DeviceClass mockInputType - - - - - URL - The name of the ParamType (DeviceClass: mockInputType, Type: device, ID: {fa67229f-fcef-496f-b671-59a4b48f3ab5}) - - - - - Wait 3 second before you continue, the push button will be pressed automatically. - The pairing info of deviceClass mockPushButton - - - - - - - Writable Bool - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableBool, ID: {a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableBool, ID: {a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) ----------- -The name of the StateType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - - - - - Writable Bool changed - The name of the EventType ({a7c11774-f31f-4d64-99d1-e0ae5fb35a5c}) of DeviceClass mockInputType - - - - - - - Writable Color - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableColor, ID: {455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableColor, ID: {455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) ----------- -The name of the StateType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType - - - - - Writable Color changed - The name of the EventType ({455f4f68-3cb0-4e8a-a707-62e4a2a8035c}) of DeviceClass mockInputType - - - - - - - Writable Double - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableDouble, ID: {8e2eb91b-d60b-4461-9a50-d7b8ad263170}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableDouble, ID: {8e2eb91b-d60b-4461-9a50-d7b8ad263170}) ----------- -The name of the StateType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType - - - - - - - Writable Double (min/max) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableDoubleMinMax, ID: {00d3425e-1da6-4748-8906-4555ceefb136}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableDoubleMinMax, ID: {00d3425e-1da6-4748-8906-4555ceefb136}) ----------- -The name of the StateType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType - - - - - Writable Double (min/max) changed - The name of the EventType ({00d3425e-1da6-4748-8906-4555ceefb136}) of DeviceClass mockInputType - - - - - Writable Double changed - The name of the EventType ({8e2eb91b-d60b-4461-9a50-d7b8ad263170}) of DeviceClass mockInputType - - - - - - - Writable Int - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableInt, ID: {857a8422-983c-47d6-a15f-d8450b3162f7}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableInt, ID: {857a8422-983c-47d6-a15f-d8450b3162f7}) ----------- -The name of the StateType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - - - - - - - Writable Int (min/max) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableIntMinMax, ID: {86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableIntMinMax, ID: {86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) ----------- -The name of the StateType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - - - - - Writable Int (min/max) changed - The name of the EventType ({86a107bc-510a-4d38-bfeb-0a9c2b6d8d87}) of DeviceClass mockInputType - - - - - Writable Int changed - The name of the EventType ({857a8422-983c-47d6-a15f-d8450b3162f7}) of DeviceClass mockInputType - - - - - - - Writable String - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableString, ID: {ef511043-bd1a-4a5f-984c-222b7da43f38}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableString, ID: {ef511043-bd1a-4a5f-984c-222b7da43f38}) ----------- -The name of the StateType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType - - - - - - - Writable String (selection) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableStringSelection, ID: {209d7afc-6fe9-4fe9-939b-e472ea0ad639}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableStringSelection, ID: {209d7afc-6fe9-4fe9-939b-e472ea0ad639}) ----------- -The name of the StateType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType - - - - - Writable String (selection) changed - The name of the EventType ({209d7afc-6fe9-4fe9-939b-e472ea0ad639}) of DeviceClass mockInputType - - - - - Writable String changed - The name of the EventType ({ef511043-bd1a-4a5f-984c-222b7da43f38}) of DeviceClass mockInputType - - - - - - - Writable Time - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableTime, ID: {d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableTime, ID: {d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) ----------- -The name of the StateType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType - - - - - Writable Time changed - The name of the EventType ({d64c8b3f-ca7d-47f6-b271-867ffd80a4d4}) of DeviceClass mockInputType - - - - - - - Writable Timestamp (Int) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableTimestampInt, ID: {88b6746a-b009-4df6-8986-d7884ffd94b2}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableTimestampInt, ID: {88b6746a-b009-4df6-8986-d7884ffd94b2}) ----------- -The name of the StateType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType - - - - - Writable Timestamp (Int) changed - The name of the EventType ({88b6746a-b009-4df6-8986-d7884ffd94b2}) of DeviceClass mockInputType - - - - - - - Writable Timestamp (UInt) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableTimestampUInt, ID: {45d0069a-63ac-4265-8170-8152778608ee}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableTimestampUInt, ID: {45d0069a-63ac-4265-8170-8152778608ee}) ----------- -The name of the StateType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType - - - - - Writable Timestamp (UInt) changed - The name of the EventType ({45d0069a-63ac-4265-8170-8152778608ee}) of DeviceClass mockInputType - - - - - - - Writable UInt - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableUInt, ID: {563e9c4c-5198-400a-9f6c-358f4752af58}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableUInt, ID: {563e9c4c-5198-400a-9f6c-358f4752af58}) ----------- -The name of the StateType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType - - - - - - - Writable UInt (min/max) - The name of the ParamType (DeviceClass: mockInputType, ActionType: writableUIntMinMax, ID: {79238998-eaab-4d71-b406-5d78f1749751}) ----------- -The name of the ParamType (DeviceClass: mockInputType, EventType: writableUIntMinMax, ID: {79238998-eaab-4d71-b406-5d78f1749751}) ----------- -The name of the StateType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType - - - - - Writable UInt (min/max) changed - The name of the EventType ({79238998-eaab-4d71-b406-5d78f1749751}) of DeviceClass mockInputType - - - - - Writable UInt changed - The name of the EventType ({563e9c4c-5198-400a-9f6c-358f4752af58}) of DeviceClass mockInputType - - - - - - - - - - allowed values - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: allowedValues, ID: {b463c5ae-4d55-402f-8480-a5cdb485c143}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: allowedValues, ID: {b463c5ae-4d55-402f-8480-a5cdb485c143}) ----------- -The name of the StateType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: allowedValues, ID: {05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: allowedValues, ID: {05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) ----------- -The name of the StateType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - - - - - - allowed values changed - The name of the EventType ({b463c5ae-4d55-402f-8480-a5cdb485c143}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({05f63f9c-f61e-4dcf-ad55-3f13fde2765b}) of DeviceClass mockPushButton - - - - - - async - The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {a5c4315f-0624-4971-87c1-4bbfbfdbd16e}) ----------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {f2977061-4dd0-4ef5-85aa-3b7134743be3}) - - - - - - - battery level - The name of the ParamType (DeviceClass: mock, EventType: batteryLevel, ID: {6c8ab9a6-0164-4795-b829-f4394fe4edc4}) ----------- -The name of the EventType ({6c8ab9a6-0164-4795-b829-f4394fe4edc4}) of DeviceClass mock ----------- -The name of the StateType ({6c8ab9a6-0164-4795-b829-f4394fe4edc4}) of DeviceClass mock - - - - - - - battery level critical - The name of the ParamType (DeviceClass: mock, EventType: batteryCritical, ID: {580bc611-1a55-41f3-996f-8d3ccf543db3}) ----------- -The name of the EventType ({580bc611-1a55-41f3-996f-8d3ccf543db3}) of DeviceClass mock ----------- -The name of the StateType ({580bc611-1a55-41f3-996f-8d3ccf543db3}) of DeviceClass mock - - - - - - - - - - - - - - - - bool value - The name of the ParamType (DeviceClass: mockChild, ActionType: boolValue, ID: {80ba1449-b485-47d4-a067-6bf306e2a568}) ----------- -The name of the ParamType (DeviceClass: mockChild, EventType: boolValue, ID: {80ba1449-b485-47d4-a067-6bf306e2a568}) ----------- -The name of the StateType ({80ba1449-b485-47d4-a067-6bf306e2a568}) of DeviceClass mockChild ----------- -The name of the ParamType (DeviceClass: mockParent, ActionType: boolValue, ID: {d24ede5f-4064-4898-bb84-cfb533b1fbc0}) ----------- -The name of the ParamType (DeviceClass: mockParent, EventType: boolValue, ID: {d24ede5f-4064-4898-bb84-cfb533b1fbc0}) ----------- -The name of the StateType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClass mockParent ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: bool, ID: {7ffe514f-7999-4998-8350-0e73e222a8c4}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: bool, ID: {7ffe514f-7999-4998-8350-0e73e222a8c4}) ----------- -The name of the StateType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: bool, ID: {e680f7a4-b39e-46da-be41-fa3170fe3768}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: bool, ID: {e680f7a4-b39e-46da-be41-fa3170fe3768}) ----------- -The name of the StateType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - - - - - - - - bool value changed - The name of the EventType ({80ba1449-b485-47d4-a067-6bf306e2a568}) of DeviceClass mockChild ----------- -The name of the EventType ({d24ede5f-4064-4898-bb84-cfb533b1fbc0}) of DeviceClass mockParent ----------- -The name of the EventType ({7ffe514f-7999-4998-8350-0e73e222a8c4}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({e680f7a4-b39e-46da-be41-fa3170fe3768}) of DeviceClass mockPushButton - - - - - - broken - The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {66179395-ef7a-4013-9fc6-2084104eea09}) ----------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {ae8f8901-f2c1-42a5-8111-6d2fc8e4c1e4}) - - - - - - - - - - color - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: color, ID: {3e161294-8a0d-4384-9676-6959e08cc2fa}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: color, ID: {3e161294-8a0d-4384-9676-6959e08cc2fa}) ----------- -The name of the StateType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: color, ID: {20dc7c22-c50e-42db-837c-2bbced939f8e}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: color, ID: {20dc7c22-c50e-42db-837c-2bbced939f8e}) ----------- -The name of the StateType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - - - - - - color changed - The name of the EventType ({3e161294-8a0d-4384-9676-6959e08cc2fa}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({20dc7c22-c50e-42db-837c-2bbced939f8e}) of DeviceClass mockPushButton - - - - - configParamBool - The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: {c75723b6-ea4f-4982-9751-6c5e39c88145}) - - - - - configParamInt - The name of the ParamType (DeviceClass: mockDevice, Type: plugin, ID: {e1f72121-a426-45e2-b475-8262b5cdf103}) - - - - - - - - - - double value - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: double, ID: {17635624-7c19-4bae-8429-2f7aa5d2f843}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: double, ID: {17635624-7c19-4bae-8429-2f7aa5d2f843}) ----------- -The name of the StateType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: double, ID: {53cd7c55-49b7-441b-b970-9048f20f0e2c}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: double, ID: {53cd7c55-49b7-441b-b970-9048f20f0e2c}) ----------- -The name of the StateType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - - - - - - double value changed - The name of the EventType ({17635624-7c19-4bae-8429-2f7aa5d2f843}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({53cd7c55-49b7-441b-b970-9048f20f0e2c}) of DeviceClass mockPushButton - - - - - - http port - The name of the ParamType (DeviceClass: mockDeviceAuto, Type: device, ID: {bfeb0613-dab6-408c-aa27-c362c921d0d1}) ----------- -The name of the ParamType (DeviceClass: mock, Type: device, ID: {d4f06047-125e-4479-9810-b54c189917f5}) - - - - - - mockActionParam1 - The name of the ParamType (DeviceClass: mockDeviceAuto, ActionType: withParams, ID: {b8126ba6-3a54-45a3-be4d-63feb0ddb77b}) ----------- -The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: {a2d3a256-a551-4712-a65b-ecd5a436a1cb}) - - - - - - mockActionParam2 - The name of the ParamType (DeviceClass: mockDeviceAuto, ActionType: withParams, ID: {df41ba71-e43b-4854-91d1-b19d8066d4f9}) ----------- -The name of the ParamType (DeviceClass: mock, ActionType: withParams, ID: {304a4899-18be-4e3b-94f4-d03be52f3233}) - - - - - - mockParamInt - The name of the ParamType (DeviceClass: mockDeviceAuto, EventType: event2, ID: {12ed5a15-96b4-4381-9d9c-a24875283d4f}) ----------- -The name of the ParamType (DeviceClass: mock, EventType: event2, ID: {0550e16d-60b9-4ba5-83f4-4d3cee656121}) - - - - - nymea - The name of the vendor ({2062d64d-3232-433c-88bc-0d33c0ba2ba6}) - - - - - - - - - - percentage - The name of the ParamType (DeviceClass: mockDisplayPin, ActionType: percentage, ID: {527f0687-0b28-4c26-852c-25b8f83e4797}) ----------- -The name of the ParamType (DeviceClass: mockDisplayPin, EventType: percentage, ID: {527f0687-0b28-4c26-852c-25b8f83e4797}) ----------- -The name of the StateType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ----------- -The name of the ParamType (DeviceClass: mockPushButton, ActionType: percentage, ID: {72981c04-267a-4ba0-a59e-9921d2f3af9c}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, EventType: percentage, ID: {72981c04-267a-4ba0-a59e-9921d2f3af9c}) ----------- -The name of the StateType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - - - - - - percentage changed - The name of the EventType ({527f0687-0b28-4c26-852c-25b8f83e4797}) of DeviceClass mockDisplayPin ----------- -The name of the EventType ({72981c04-267a-4ba0-a59e-9921d2f3af9c}) of DeviceClass mockPushButton - - - - - pin - The name of the ParamType (DeviceClass: mockDisplayPin, Type: device, ID: {da820e07-22dc-4173-9c07-2f49a4e265f9}) - - - - - - - powered - The name of the ParamType (DeviceClass: mock, ActionType: power, ID: {064aed0d-da4c-49d4-b236-60f97e98ff84}) ----------- -The name of the ParamType (DeviceClass: mock, EventType: power, ID: {064aed0d-da4c-49d4-b236-60f97e98ff84}) ----------- -The name of the StateType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - - - - - powered changed - The name of the EventType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - - - - - - - resultCount - The name of the ParamType (DeviceClass: mockDisplayPin, Type: discovery, ID: {35f6e4ba-28ad-4152-a58d-ec2600667bcf}) ----------- -The name of the ParamType (DeviceClass: mockPushButton, Type: discovery, ID: {c40dbc59-4bba-4871-9b8e-bbd8d5d9193b}) ----------- -The name of the ParamType (DeviceClass: mock, Type: discovery, ID: {d222adb4-2f9c-4c3f-8655-76400d0fb6ce}) - - - - - set power - The name of the ActionType ({064aed0d-da4c-49d4-b236-60f97e98ff84}) of DeviceClass mock - - - nymea From e7a0d63570738275945aa398a66f2992b3bca653 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Tue, 24 Sep 2019 22:32:53 +0200 Subject: [PATCH 06/14] Bump versions --- debian/changelog | 4 ++++ debian/control | 2 +- nymea.pri | 4 ++-- tests/auto/api.json | 28 ++++++++++++++++++---------- 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/debian/changelog b/debian/changelog index 784e7948..cb28baa9 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,7 @@ +nymea (0.16.0) UNRELEASED; urgency=medium + + -- Michael Zanetti Fri, 20 Sep 2019 12:39:23 +0200 + nymea (0.15.1) xenial; urgency=medium [ Michael Zanetti ] diff --git a/debian/control b/debian/control index 71d9d022..d7806291 100644 --- a/debian/control +++ b/debian/control @@ -20,7 +20,7 @@ Build-Depends: debhelper (>= 9.0.0), libqt5sql5-sqlite, libqt5dbus5, libssl-dev, - libnymea-mqtt-dev, + libnymea-mqtt-dev (>= 0.1.2), dbus-test-runner, Package: nymea diff --git a/nymea.pri b/nymea.pri index 99b08753..9196a1fe 100644 --- a/nymea.pri +++ b/nymea.pri @@ -2,8 +2,8 @@ NYMEA_VERSION_STRING=$$system('dpkg-parsechangelog | sed -n -e "s/^Version: //p"') # define protocol versions -JSON_PROTOCOL_VERSION_MAJOR=2 -JSON_PROTOCOL_VERSION_MINOR=4 +JSON_PROTOCOL_VERSION_MAJOR=3 +JSON_PROTOCOL_VERSION_MINOR=0 REST_API_VERSION=1 LIBNYMEA_API_VERSION_MAJOR=3 LIBNYMEA_API_VERSION_MINOR=0 diff --git a/tests/auto/api.json b/tests/auto/api.json index 35343857..0a1a6309 100644 --- a/tests/auto/api.json +++ b/tests/auto/api.json @@ -1,4 +1,4 @@ -2.3 +3.0 { "methods": { "Actions.ExecuteAction": { @@ -11,7 +11,8 @@ ] }, "returns": { - "deviceError": "$ref:DeviceError" + "deviceError": "$ref:DeviceError", + "o:displayMessage": "String" } }, "Actions.ExecuteBrowserItem": { @@ -270,7 +271,8 @@ }, "returns": { "deviceError": "$ref:DeviceError", - "o:deviceId": "Uuid" + "o:deviceId": "Uuid", + "o:displayMessage": "String" } }, "Devices.BrowseDevice": { @@ -287,14 +289,16 @@ } }, "Devices.ConfirmPairing": { - "description": "Confirm an ongoing pairing. In case of SetupMethodEnterPin also provide the pin in the params.", + "description": "Confirm an ongoing pairing. For SetupMethodUserAndPassword, provide the username in the \"username\" field and the password in the \"secret\" field. For SetupMethodEnterPin and provide the PIN in the \"secret\" field. For SetupMethodOAuth, return the entire unmodified callback URL containing the code parameter back in the secret field.", "params": { "o:secret": "String", + "o:username": "String", "pairingTransactionId": "Uuid" }, "returns": { "deviceError": "$ref:DeviceError", - "o:deviceId": "Uuid" + "o:deviceId": "Uuid", + "o:displayMessage": "String" } }, "Devices.EditDevice": { @@ -352,7 +356,8 @@ "deviceError": "$ref:DeviceError", "o:deviceDescriptors": [ "$ref:DeviceDescriptor" - ] + ], + "o:displayMessage": "String" } }, "Devices.GetEventTypes": { @@ -459,6 +464,7 @@ "returns": { "deviceError": "$ref:DeviceError", "o:displayMessage": "String", + "o:oAuthUrl": "String", "o:pairingTransactionId": "Uuid", "o:setupMethod": "$ref:SetupMethod" } @@ -473,7 +479,8 @@ ] }, "returns": { - "deviceError": "$ref:DeviceError" + "deviceError": "$ref:DeviceError", + "o:displayMessage": "String" } }, "Devices.RemoveConfiguredDevice": { @@ -1523,8 +1530,7 @@ "DeviceErrorSetupMethodNotSupported", "DeviceErrorHardwareNotAvailable", "DeviceErrorHardwareFailure", - "DeviceErrorAuthentificationFailure", - "DeviceErrorAsync", + "DeviceErrorAuthenticationFailure", "DeviceErrorDeviceInUse", "DeviceErrorDeviceInRule", "DeviceErrorDeviceIsChild", @@ -1801,7 +1807,9 @@ "SetupMethodJustAdd", "SetupMethodDisplayPin", "SetupMethodEnterPin", - "SetupMethodPushButton" + "SetupMethodPushButton", + "SetupMethodUserAndPassword", + "SetupMethodOAuth" ], "State": { "deviceId": "Uuid", From 32f7f22a7d5a06988661bd94a86a1c9594e44dd8 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Wed, 25 Sep 2019 11:34:44 +0200 Subject: [PATCH 07/14] Add a timeout to api info objects --- .../devices/devicemanagerimplementation.cpp | 25 +++++++++++-------- libnymea/devices/browseractioninfo.cpp | 11 +++++++- libnymea/devices/browseractioninfo.h | 3 ++- libnymea/devices/browseresult.cpp | 11 +++++++- libnymea/devices/browseresult.h | 3 ++- libnymea/devices/browseritemactioninfo.cpp | 11 +++++++- libnymea/devices/browseritemactioninfo.h | 3 ++- libnymea/devices/browseritemresult.cpp | 11 +++++++- libnymea/devices/browseritemresult.h | 3 ++- libnymea/devices/device.h | 1 + libnymea/devices/deviceactioninfo.cpp | 11 +++++++- libnymea/devices/deviceactioninfo.h | 3 ++- libnymea/devices/devicediscoveryinfo.cpp | 11 +++++++- libnymea/devices/devicediscoveryinfo.h | 3 ++- libnymea/devices/devicepairinginfo.cpp | 11 +++++++- libnymea/devices/devicepairinginfo.h | 3 ++- libnymea/devices/devicesetupinfo.cpp | 11 +++++++- libnymea/devices/devicesetupinfo.h | 3 ++- tests/auto/api.json | 3 ++- 19 files changed, 114 insertions(+), 27 deletions(-) diff --git a/libnymea-core/devices/devicemanagerimplementation.cpp b/libnymea-core/devices/devicemanagerimplementation.cpp index cce4154f..edf4020c 100644 --- a/libnymea-core/devices/devicemanagerimplementation.cpp +++ b/libnymea-core/devices/devicemanagerimplementation.cpp @@ -258,8 +258,13 @@ DeviceDiscoveryInfo* DeviceManagerImplementation::discoverDevices(const DeviceCl return discoveryInfo; } - DeviceDiscoveryInfo *discoveryInfo = new DeviceDiscoveryInfo(deviceClassId, effectiveParams, this); + DeviceDiscoveryInfo *discoveryInfo = new DeviceDiscoveryInfo(deviceClassId, effectiveParams, this, 30000); connect(discoveryInfo, &DeviceDiscoveryInfo::finished, this, [this, discoveryInfo](){ + if (discoveryInfo->status() != Device::DeviceErrorNoError) { + qCWarning(dcDeviceManager()) << "Discovery failed:" << discoveryInfo->status() << discoveryInfo->displayMessage(); + return; + } + qCDebug(dcDeviceManager()) << "Discovery finished. Found devices:" << discoveryInfo->deviceDescriptors().count(); foreach (const DeviceDescriptor &descriptor, discoveryInfo->deviceDescriptors()) { m_discoveredDevices[descriptor.deviceClassId()].insert(descriptor.id(), descriptor); } @@ -390,7 +395,7 @@ DeviceSetupInfo* DeviceManagerImplementation::reconfigureDevice(const DeviceId & } // try to setup the device with the new params - DeviceSetupInfo *info = new DeviceSetupInfo(device, this); + DeviceSetupInfo *info = new DeviceSetupInfo(device, this, 30000); plugin->setupDevice(info); connect(info, &DeviceSetupInfo::finished, this, [this, info](){ @@ -490,7 +495,7 @@ Device::DeviceError DeviceManagerImplementation::setDeviceSettings(const DeviceI DevicePairingInfo* DeviceManagerImplementation::pairDevice(const DeviceClassId &deviceClassId, const QString &name, const ParamList ¶ms) { PairingTransactionId transactionId = PairingTransactionId::createPairingTransactionId(); - DevicePairingInfo *info = new DevicePairingInfo(transactionId, deviceClassId, DeviceId(), name, params, DeviceId(), this); + DevicePairingInfo *info = new DevicePairingInfo(transactionId, deviceClassId, DeviceId(), name, params, DeviceId(), this, 30000); pairDeviceInternal(info); return info; } @@ -516,7 +521,7 @@ DevicePairingInfo* DeviceManagerImplementation::pairDevice(const DeviceClassId & return info; } - DevicePairingInfo *info = new DevicePairingInfo(pairingTransactionId, deviceClassId, deviceDescriptor.deviceId(), name, deviceDescriptor.params(), deviceDescriptor.parentDeviceId(), this); + DevicePairingInfo *info = new DevicePairingInfo(pairingTransactionId, deviceClassId, deviceDescriptor.deviceId(), name, deviceDescriptor.params(), deviceDescriptor.parentDeviceId(), this, 30000); pairDeviceInternal(info); return info; } @@ -735,7 +740,7 @@ BrowseResult *DeviceManagerImplementation::browseDevice(const DeviceId &deviceId { Device *device = m_configuredDevices.value(deviceId); - BrowseResult *result = new BrowseResult(device, itemId, locale, this); + BrowseResult *result = new BrowseResult(device, itemId, locale, this, 30000); if (!device) { qCWarning(dcDeviceManager()) << "Cannot browse device. No such device:" << deviceId.toString(); @@ -762,7 +767,7 @@ BrowserItemResult *DeviceManagerImplementation::browserItemDetails(const DeviceI { Device *device = m_configuredDevices.value(deviceId); - BrowserItemResult *result = new BrowserItemResult(device, itemId, locale, this); + BrowserItemResult *result = new BrowserItemResult(device, itemId, locale, this, 30000); if (!device) { qCWarning(dcDeviceManager()) << "Cannot browse device. No such device:" << deviceId.toString(); @@ -789,7 +794,7 @@ BrowserActionInfo* DeviceManagerImplementation::executeBrowserItem(const Browser { Device *device = m_configuredDevices.value(browserAction.deviceId()); - BrowserActionInfo *info = new BrowserActionInfo(device, browserAction, this); + BrowserActionInfo *info = new BrowserActionInfo(device, browserAction, this, 30000); if (!device) { info->finish(Device::DeviceErrorDeviceNotFound); @@ -808,7 +813,7 @@ BrowserItemActionInfo* DeviceManagerImplementation::executeBrowserItemAction(con { Device *device = m_configuredDevices.value(browserItemAction.deviceId()); - BrowserItemActionInfo *info = new BrowserItemActionInfo(device, browserItemAction, this); + BrowserItemActionInfo *info = new BrowserItemActionInfo(device, browserItemAction, this, 30000); if (!device) { info->finish(Device::DeviceErrorDeviceNotFound); @@ -927,7 +932,7 @@ DeviceActionInfo *DeviceManagerImplementation::executeAction(const Action &actio } finalAction.setParams(finalParams); - DeviceActionInfo *info = new DeviceActionInfo(device, finalAction, this); + DeviceActionInfo *info = new DeviceActionInfo(device, finalAction, this, 30000); DevicePlugin *plugin = m_devicePlugins.value(device->pluginId()); if (!plugin) { @@ -1490,7 +1495,7 @@ DeviceSetupInfo* DeviceManagerImplementation::setupDevice(Device *device) connect(device, &Device::settingChanged, this, &DeviceManagerImplementation::slotDeviceSettingChanged); - DeviceSetupInfo *info = new DeviceSetupInfo(device, this); + DeviceSetupInfo *info = new DeviceSetupInfo(device, this, 30000); plugin->setupDevice(info); return info; diff --git a/libnymea/devices/browseractioninfo.cpp b/libnymea/devices/browseractioninfo.cpp index d4867dec..f0fc55bd 100644 --- a/libnymea/devices/browseractioninfo.cpp +++ b/libnymea/devices/browseractioninfo.cpp @@ -22,12 +22,21 @@ #include "browseractioninfo.h" -BrowserActionInfo::BrowserActionInfo(Device *device, const BrowserAction &browserAction, QObject *parent): +#include + +BrowserActionInfo::BrowserActionInfo(Device *device, const BrowserAction &browserAction, QObject *parent, quint32 timeout): QObject (parent), m_device(device), m_browserAction(browserAction) { connect(this, &BrowserActionInfo::finished, this, &BrowserActionInfo::deleteLater, Qt::QueuedConnection); + + if (timeout > 0) { + QTimer::singleShot(timeout, this, [this] { + emit aborted(); + finish(Device::DeviceErrorTimeout); + }); + } } Device *BrowserActionInfo::device() const diff --git a/libnymea/devices/browseractioninfo.h b/libnymea/devices/browseractioninfo.h index efa6f527..c8941829 100644 --- a/libnymea/devices/browseractioninfo.h +++ b/libnymea/devices/browseractioninfo.h @@ -32,7 +32,7 @@ class BrowserActionInfo : public QObject { Q_OBJECT public: - explicit BrowserActionInfo(Device* device, const BrowserAction &browserAction, QObject *parent = nullptr); + explicit BrowserActionInfo(Device* device, const BrowserAction &browserAction, QObject *parent, quint32 timeout = 0); Device* device() const; BrowserAction browserAction() const; @@ -42,6 +42,7 @@ public: signals: void finished(); + void aborted(); public slots: void finish(Device::DeviceError status); diff --git a/libnymea/devices/browseresult.cpp b/libnymea/devices/browseresult.cpp index b4fcce78..6af6a748 100644 --- a/libnymea/devices/browseresult.cpp +++ b/libnymea/devices/browseresult.cpp @@ -22,13 +22,22 @@ #include "browseresult.h" -BrowseResult::BrowseResult(Device *device, const QString &itemId, const QLocale &locale, QObject *parent): +#include + +BrowseResult::BrowseResult(Device *device, const QString &itemId, const QLocale &locale, QObject *parent, quint32 timeout): QObject(parent), m_device(device), m_itemId(itemId), m_locale(locale) { connect(this, &BrowseResult::finished, this, &BrowseResult::deleteLater, Qt::QueuedConnection); + + if (timeout > 0) { + QTimer::singleShot(timeout, this, [this] { + emit aborted(); + finish(Device::DeviceErrorTimeout); + }); + } } Device *BrowseResult::device() const diff --git a/libnymea/devices/browseresult.h b/libnymea/devices/browseresult.h index 4e0a6610..e2aa901b 100644 --- a/libnymea/devices/browseresult.h +++ b/libnymea/devices/browseresult.h @@ -31,7 +31,7 @@ class BrowseResult : public QObject { Q_OBJECT public: - explicit BrowseResult(Device *device, const QString &itemId, const QLocale &locale, QObject *parent = nullptr); + explicit BrowseResult(Device *device, const QString &itemId, const QLocale &locale, QObject *parent, quint32 timeout = 0); Device* device() const; QString itemId() const; @@ -50,6 +50,7 @@ public slots: signals: void finished(); + void aborted(); private: Device *m_device = nullptr; diff --git a/libnymea/devices/browseritemactioninfo.cpp b/libnymea/devices/browseritemactioninfo.cpp index 599b5c39..c7ad086f 100644 --- a/libnymea/devices/browseritemactioninfo.cpp +++ b/libnymea/devices/browseritemactioninfo.cpp @@ -22,12 +22,21 @@ #include "browseritemactioninfo.h" -BrowserItemActionInfo::BrowserItemActionInfo(Device *device, const BrowserItemAction &browserItemAction, QObject *parent): +#include + +BrowserItemActionInfo::BrowserItemActionInfo(Device *device, const BrowserItemAction &browserItemAction, QObject *parent, quint32 timeout): QObject(parent), m_device(device), m_browserItemAction(browserItemAction) { connect(this, &BrowserItemActionInfo::finished, this, &BrowserItemActionInfo::deleteLater, Qt::QueuedConnection); + + if (timeout > 0) { + QTimer::singleShot(timeout, this, [this] { + emit aborted(); + finish(Device::DeviceErrorTimeout); + }); + } } Device *BrowserItemActionInfo::device() const diff --git a/libnymea/devices/browseritemactioninfo.h b/libnymea/devices/browseritemactioninfo.h index 76f6f4b2..7e233104 100644 --- a/libnymea/devices/browseritemactioninfo.h +++ b/libnymea/devices/browseritemactioninfo.h @@ -32,7 +32,7 @@ class BrowserItemActionInfo : public QObject { Q_OBJECT public: - explicit BrowserItemActionInfo(Device *device, const BrowserItemAction &browserItemAction, QObject *parent = nullptr); + explicit BrowserItemActionInfo(Device *device, const BrowserItemAction &browserItemAction, QObject *parent, quint32 timeout = 0); Device *device() const; BrowserItemAction browserItemAction() const; @@ -43,6 +43,7 @@ public: signals: void finished(); + void aborted(); public slots: void finish(Device::DeviceError status); diff --git a/libnymea/devices/browseritemresult.cpp b/libnymea/devices/browseritemresult.cpp index 1d3a0a6d..94da66c8 100644 --- a/libnymea/devices/browseritemresult.cpp +++ b/libnymea/devices/browseritemresult.cpp @@ -22,13 +22,22 @@ #include "browseritemresult.h" -BrowserItemResult::BrowserItemResult(Device *device, const QString &itemId, const QLocale &locale, QObject *parent): +#include + +BrowserItemResult::BrowserItemResult(Device *device, const QString &itemId, const QLocale &locale, QObject *parent, quint32 timeout): QObject(parent), m_device(device), m_itemId(itemId), m_locale(locale) { connect(this, &BrowserItemResult::finished, this, &BrowserItemResult::deleteLater, Qt::QueuedConnection); + + if (timeout > 0) { + QTimer::singleShot(timeout, this, [this] { + emit aborted(); + finish(Device::DeviceErrorTimeout); + }); + } } Device *BrowserItemResult::device() const diff --git a/libnymea/devices/browseritemresult.h b/libnymea/devices/browseritemresult.h index 426eb205..d8df8a17 100644 --- a/libnymea/devices/browseritemresult.h +++ b/libnymea/devices/browseritemresult.h @@ -32,7 +32,7 @@ class BrowserItemResult : public QObject Q_OBJECT public: - explicit BrowserItemResult(Device *device, const QString &itemId, const QLocale &locale, QObject *parent = nullptr); + explicit BrowserItemResult(Device *device, const QString &itemId, const QLocale &locale, QObject *parent, quint32 timeout = 0); Device* device() const; QString itemId() const; @@ -49,6 +49,7 @@ public slots: signals: void finished(); + void aborted(); private: Device *m_device = nullptr; diff --git a/libnymea/devices/device.h b/libnymea/devices/device.h index 067bd1d9..acc937ab 100644 --- a/libnymea/devices/device.h +++ b/libnymea/devices/device.h @@ -73,6 +73,7 @@ public: DeviceErrorItemNotFound, DeviceErrorItemNotExecutable, DeviceErrorUnsupportedFeature, + DeviceErrorTimeout, }; Q_ENUM(DeviceError) diff --git a/libnymea/devices/deviceactioninfo.cpp b/libnymea/devices/deviceactioninfo.cpp index 1c44f370..2e17e394 100644 --- a/libnymea/devices/deviceactioninfo.cpp +++ b/libnymea/devices/deviceactioninfo.cpp @@ -24,13 +24,22 @@ #include "devicemanager.h" -DeviceActionInfo::DeviceActionInfo(Device *device, const Action &action, DeviceManager *parent): +#include + +DeviceActionInfo::DeviceActionInfo(Device *device, const Action &action, DeviceManager *parent, quint32 timeout): QObject(parent), m_device(device), m_action(action), m_deviceManager(parent) { connect(this, &DeviceActionInfo::finished, this, &DeviceActionInfo::deleteLater, Qt::QueuedConnection); + + if (timeout > 0) { + QTimer::singleShot(timeout, this, [this] { + emit aborted(); + finish(Device::DeviceErrorTimeout); + }); + } } Device *DeviceActionInfo::device() const diff --git a/libnymea/devices/deviceactioninfo.h b/libnymea/devices/deviceactioninfo.h index a5e4ed98..17da5acd 100644 --- a/libnymea/devices/deviceactioninfo.h +++ b/libnymea/devices/deviceactioninfo.h @@ -35,7 +35,7 @@ class DeviceActionInfo : public QObject { Q_OBJECT public: - explicit DeviceActionInfo(Device *device, const Action &action, DeviceManager *parent); + explicit DeviceActionInfo(Device *device, const Action &action, DeviceManager *parent, quint32 timeout = 0); Device* device() const; Action action() const; @@ -49,6 +49,7 @@ public: signals: void finished(); + void aborted(); public slots: void finish(Device::DeviceError status, const QString &displayMessage = QString()); diff --git a/libnymea/devices/devicediscoveryinfo.cpp b/libnymea/devices/devicediscoveryinfo.cpp index 355b4b63..5162c26d 100644 --- a/libnymea/devices/devicediscoveryinfo.cpp +++ b/libnymea/devices/devicediscoveryinfo.cpp @@ -23,13 +23,22 @@ #include "devicediscoveryinfo.h" #include "devicemanager.h" -DeviceDiscoveryInfo::DeviceDiscoveryInfo(const DeviceClassId &deviceClassId, const ParamList ¶ms, DeviceManager *deviceManager): +#include + +DeviceDiscoveryInfo::DeviceDiscoveryInfo(const DeviceClassId &deviceClassId, const ParamList ¶ms, DeviceManager *deviceManager, quint32 timeout): QObject(deviceManager), m_deviceClassId(deviceClassId), m_params(params), m_deviceManager(deviceManager) { connect(this, &DeviceDiscoveryInfo::finished, this, &DeviceDiscoveryInfo::deleteLater, Qt::QueuedConnection); + + if (timeout > 0) { + QTimer::singleShot(timeout, this, [this] { + emit aborted(); + finish(Device::DeviceErrorTimeout); + }); + } } DeviceClassId DeviceDiscoveryInfo::deviceClassId() const diff --git a/libnymea/devices/devicediscoveryinfo.h b/libnymea/devices/devicediscoveryinfo.h index 32e75676..28afe82c 100644 --- a/libnymea/devices/devicediscoveryinfo.h +++ b/libnymea/devices/devicediscoveryinfo.h @@ -36,7 +36,7 @@ class LIBNYMEA_EXPORT DeviceDiscoveryInfo : public QObject { Q_OBJECT public: - explicit DeviceDiscoveryInfo(const DeviceClassId &deviceClassId, const ParamList ¶ms, DeviceManager *deviceManager); + explicit DeviceDiscoveryInfo(const DeviceClassId &deviceClassId, const ParamList ¶ms, DeviceManager *deviceManager, quint32 timeout = 0); DeviceClassId deviceClassId() const; ParamList params() const; @@ -58,6 +58,7 @@ public slots: signals: void finished(); + void aborted(); private: DeviceClassId m_deviceClassId; diff --git a/libnymea/devices/devicepairinginfo.cpp b/libnymea/devices/devicepairinginfo.cpp index 4d00e8af..4c6ef855 100644 --- a/libnymea/devices/devicepairinginfo.cpp +++ b/libnymea/devices/devicepairinginfo.cpp @@ -23,7 +23,9 @@ #include "devicepairinginfo.h" #include "devicemanager.h" -DevicePairingInfo::DevicePairingInfo(const PairingTransactionId &pairingTransactionId, const DeviceClassId &deviceClassId, const DeviceId &deviceId, const QString &deviceName, const ParamList ¶ms, const DeviceId &parentDeviceId, DeviceManager *parent): +#include + +DevicePairingInfo::DevicePairingInfo(const PairingTransactionId &pairingTransactionId, const DeviceClassId &deviceClassId, const DeviceId &deviceId, const QString &deviceName, const ParamList ¶ms, const DeviceId &parentDeviceId, DeviceManager *parent, quint32 timeout): QObject(parent), m_transactionId(pairingTransactionId), m_deviceClassId(deviceClassId), @@ -33,6 +35,13 @@ DevicePairingInfo::DevicePairingInfo(const PairingTransactionId &pairingTransact m_parentDeviceId(parentDeviceId) { connect(this, &DevicePairingInfo::finished, this, &DevicePairingInfo::deleteLater, Qt::QueuedConnection); + + if (timeout > 0) { + QTimer::singleShot(timeout, this, [this] { + emit aborted(); + finish(Device::DeviceErrorTimeout); + }); + } } PairingTransactionId DevicePairingInfo::transactionId() const diff --git a/libnymea/devices/devicepairinginfo.h b/libnymea/devices/devicepairinginfo.h index da0da6ac..e97cc215 100644 --- a/libnymea/devices/devicepairinginfo.h +++ b/libnymea/devices/devicepairinginfo.h @@ -34,7 +34,7 @@ class LIBNYMEA_EXPORT DevicePairingInfo: public QObject { Q_OBJECT public: - DevicePairingInfo(const PairingTransactionId &pairingTransactionId, const DeviceClassId &deviceClassId, const DeviceId &deviceId, const QString &deviceName, const ParamList ¶ms, const DeviceId &parentDeviceId, DeviceManager *parent); + DevicePairingInfo(const PairingTransactionId &pairingTransactionId, const DeviceClassId &deviceClassId, const DeviceId &deviceId, const QString &deviceName, const ParamList ¶ms, const DeviceId &parentDeviceId, DeviceManager *parent, quint32 timeout = 0); PairingTransactionId transactionId() const; @@ -56,6 +56,7 @@ public slots: signals: void finished(); + void aborted(); private: PairingTransactionId m_transactionId; diff --git a/libnymea/devices/devicesetupinfo.cpp b/libnymea/devices/devicesetupinfo.cpp index 08628919..2334542a 100644 --- a/libnymea/devices/devicesetupinfo.cpp +++ b/libnymea/devices/devicesetupinfo.cpp @@ -25,12 +25,21 @@ #include "deviceplugin.h" #include "devicemanager.h" -DeviceSetupInfo::DeviceSetupInfo(Device *device, DeviceManager *deviceManager): +#include + +DeviceSetupInfo::DeviceSetupInfo(Device *device, DeviceManager *deviceManager, quint32 timeout): QObject(deviceManager), m_device(device), m_deviecManager(deviceManager) { connect(this, &DeviceSetupInfo::finished, this, &DeviceSetupInfo::deleteLater, Qt::QueuedConnection); + + if (timeout > 0) { + QTimer::singleShot(timeout, this, [this] { + emit aborted(); + finish(Device::DeviceErrorTimeout); + }); + } } Device *DeviceSetupInfo::device() const diff --git a/libnymea/devices/devicesetupinfo.h b/libnymea/devices/devicesetupinfo.h index dead8017..614b291b 100644 --- a/libnymea/devices/devicesetupinfo.h +++ b/libnymea/devices/devicesetupinfo.h @@ -33,7 +33,7 @@ class LIBNYMEA_EXPORT DeviceSetupInfo : public QObject { Q_OBJECT public: - explicit DeviceSetupInfo(Device *device, DeviceManager *deviceManager); + explicit DeviceSetupInfo(Device *device, DeviceManager *deviceManager, quint32 timeout = 0); Device *device() const; @@ -48,6 +48,7 @@ public slots: signals: void finished(); + void aborted(); private: Device *m_device = nullptr; diff --git a/tests/auto/api.json b/tests/auto/api.json index 0a1a6309..cbdd5df1 100644 --- a/tests/auto/api.json +++ b/tests/auto/api.json @@ -1538,7 +1538,8 @@ "DeviceErrorParameterNotWritable", "DeviceErrorItemNotFound", "DeviceErrorItemNotExecutable", - "DeviceErrorUnsupportedFeature" + "DeviceErrorUnsupportedFeature", + "DeviceErrorTimeout" ], "Event": { "deviceId": "Uuid", From fa0057b1975267696d0bfb0be4876afe554769af Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Wed, 25 Sep 2019 15:13:09 +0200 Subject: [PATCH 08/14] Make sure plugininfo.h is found for translation extraction --- libnymea/devices/plugin.pri | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libnymea/devices/plugin.pri b/libnymea/devices/plugin.pri index c3fa9e4c..b357de15 100644 --- a/libnymea/devices/plugin.pri +++ b/libnymea/devices/plugin.pri @@ -60,6 +60,9 @@ plugininfo_clean.commands = rm -fv $$OUT_PWD/plugininfo.h $$OUT_PWD/extern-plugi clean.depends = plugininfo_clean QMAKE_EXTRA_TARGETS += clean plugininfo_clean +# Make sure the plugininfo.h is found in HEADERS for extracting translations +HEADERS += $$OUT_PWD/plugininfo.h + # Install translation files TRANSLATIONS *= $$files($${_PRO_FILE_PWD_}/translations/*ts, true) lupdate.depends = FORCE From 14bc0eb73e84eeb78cea604e916c216af16af772 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Thu, 10 Oct 2019 13:07:22 +0200 Subject: [PATCH 09/14] fix pairing for oauth --- .../devices/devicemanagerimplementation.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/libnymea-core/devices/devicemanagerimplementation.cpp b/libnymea-core/devices/devicemanagerimplementation.cpp index edf4020c..22a9da0b 100644 --- a/libnymea-core/devices/devicemanagerimplementation.cpp +++ b/libnymea-core/devices/devicemanagerimplementation.cpp @@ -495,7 +495,9 @@ Device::DeviceError DeviceManagerImplementation::setDeviceSettings(const DeviceI DevicePairingInfo* DeviceManagerImplementation::pairDevice(const DeviceClassId &deviceClassId, const QString &name, const ParamList ¶ms) { PairingTransactionId transactionId = PairingTransactionId::createPairingTransactionId(); - DevicePairingInfo *info = new DevicePairingInfo(transactionId, deviceClassId, DeviceId(), name, params, DeviceId(), this, 30000); + // Create new device id + DeviceId newDeviceId = DeviceId::createDeviceId(); + DevicePairingInfo *info = new DevicePairingInfo(transactionId, deviceClassId, newDeviceId, name, params, DeviceId(), this, 30000); pairDeviceInternal(info); return info; } @@ -521,7 +523,12 @@ DevicePairingInfo* DeviceManagerImplementation::pairDevice(const DeviceClassId & return info; } - DevicePairingInfo *info = new DevicePairingInfo(pairingTransactionId, deviceClassId, deviceDescriptor.deviceId(), name, deviceDescriptor.params(), deviceDescriptor.parentDeviceId(), this, 30000); + DeviceId deviceId = deviceDescriptor.deviceId(); + // If it's a new device (not a reconfiguration), create a new DeviceId now. + if (deviceId.isNull()) { + deviceId = DeviceId::createDeviceId(); + } + DevicePairingInfo *info = new DevicePairingInfo(pairingTransactionId, deviceClassId, deviceId, name, deviceDescriptor.params(), deviceDescriptor.parentDeviceId(), this, 30000); pairDeviceInternal(info); return info; } @@ -548,13 +555,9 @@ DevicePairingInfo *DeviceManagerImplementation::confirmPairing(const PairingTran return info; } - // If we already have a deviceId, we're reconfiguring an existing device, else we're adding a new one. - bool addNewDevice = false; DeviceId deviceId = context.deviceId; - if (deviceId.isNull()) { - deviceId = DeviceId::createDeviceId(); - addNewDevice = true; - } + // If we already have a device for this ID, we're reconfiguring an existing device, else we're adding a new one. + bool addNewDevice = !m_configuredDevices.contains(context.deviceId); // We're using two different info objects here, one to hand over to the plugin for the pairing, the other we give out // to the user. After the internal one has finished, we'll start a setupDevice job and finish the external pairingInfo only after From 0c7a8103668c9527ce4abe32c9be0d603d54091a Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Thu, 10 Oct 2019 16:59:40 +0200 Subject: [PATCH 10/14] Use deviceClass.displayName to generate a device name if the user doesn't give one --- libnymea-core/devices/devicemanagerimplementation.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libnymea-core/devices/devicemanagerimplementation.cpp b/libnymea-core/devices/devicemanagerimplementation.cpp index 22a9da0b..eabbaaec 100644 --- a/libnymea-core/devices/devicemanagerimplementation.cpp +++ b/libnymea-core/devices/devicemanagerimplementation.cpp @@ -588,7 +588,7 @@ DevicePairingInfo *DeviceManagerImplementation::confirmPairing(const PairingTran if (addNewDevice) { device = new Device(plugin, deviceClass, internalInfo->deviceId(), this); if (internalInfo->deviceName().isEmpty()) { - device->setName(deviceClass.name()); + device->setName(deviceClass.displayName()); } else { device->setName(internalInfo->deviceName()); } From 40cbb9fe0a1cd3670f3eb245d3ab486566601f59 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Fri, 11 Oct 2019 12:36:23 +0200 Subject: [PATCH 11/14] Update docs --- libnymea/devices/deviceplugin.cpp | 192 +++++++++++++++++------------- 1 file changed, 107 insertions(+), 85 deletions(-) diff --git a/libnymea/devices/deviceplugin.cpp b/libnymea/devices/deviceplugin.cpp index f335fa1d..c0e00d16 100644 --- a/libnymea/devices/deviceplugin.cpp +++ b/libnymea/devices/deviceplugin.cpp @@ -31,50 +31,25 @@ */ -/*! \fn void DevicePlugin::devicesDiscovered(const DeviceClassId &deviceClassId, const QList &devices); - Emit this signal when the discovery of a \a deviceClassId of this DevicePlugin is finished. The \a devices parameter describes the - list of \l{DeviceDescriptor}{DeviceDescriptors} of all discovered \l{Device}{Devices}. - Note: During a discovery a plugin should always return the full result set. So even if a device is already known to the system and - a later discovery finds the device again, it should be included in the result set but the DeviceDescriptor's deviceId should be set - to the device ID. - \sa discoverDevices() -*/ - -/*! \fn void DevicePlugin::pairingFinished(const PairingTransactionId &pairingTransactionId, Device::DeviceSetupStatus status); - This signal is emitted when the pairing of a \a pairingTransactionId is finished. - The \a status of the will be described as \l{Device::DeviceError}{DeviceError}. - \sa confirmPairing() -*/ - -/*! \fn void DevicePlugin::deviceSetupFinished(Device *device, Device::DeviceSetupStatus status); - This signal is emitted when the setup of a \a device in this DevicePlugin is finished. The \a status parameter describes the - \l{Device::DeviceError}{DeviceError} that occurred. -*/ - /*! \fn void DevicePlugin::configValueChanged(const ParamTypeId ¶mTypeId, const QVariant &value); This signal is emitted when the \l{Param} with a certain \a paramTypeId of a \l{Device} configuration changed the \a value. */ -/*! \fn void DevicePlugin::actionExecutionFinished(const ActionId &id, Device::DeviceError status) - This signal is to be emitted when you previously have returned \l{DeviceManager}{DeviceErrorAsync} - in a call of executeAction(). The \a id refers to the executed \l{Action}. The \a status of the \l{Action} - execution will be described as \l{Device::DeviceError}{DeviceError}. -*/ - -/*! \fn void DevicePlugin::autoDevicesAppeared(const DeviceClassId &deviceClassId, const QList &deviceDescriptors) - This signal is emitted when a new \l{Device} of certain \a deviceClassId appeared. The description of the \l{Device}{Devices} - will be in \a deviceDescriptors. This signal can only emitted from devices with the \l{DeviceClass}{CreateMethodAuto}. +/*! \fn void DevicePlugin::autoDevicesAppeared(const DeviceDescriptors &deviceDescriptors) + A plugin emits this signal when new \l{Device} appeared. For instance a plugin connected to a bridge might detect + that new devices have been connected to the bridge. Emitting this signal will cause those devices to be added + to the nymea system and setupDevice will be called for them. */ /*! \fn void DevicePlugin::autoDeviceDisappeared(const DeviceId &id) - Emit this signal when a device with the given \a id and which was created by \l{DevicePlugin::autoDevicesAppeared} has been removed from the system. - Be careful with this, as this will completely remove the device from the system and with it all the associated rules. Only - emit this if you are sure that a device will never come back. This signal should not be emitted for child auto devices - when the parent who created them is removed. The system will automatically remove all child devices in such a case. + A plugin emits this signal when a device with the given \a id and which was created by \l{DevicePlugin::autoDevicesAppeared} + has been removed from the system. When emitting this signal, nymea will remove the device from the system and with it all the + associated rules and child devices. Because of this, this signal should only be emitted when it's certain that the given device + will never return to be available any more. */ /*! \fn void DevicePlugin::emitEvent(const Event &event) - To produce a new event in the system, create a new \l{Event} and emit it with \a event. + To produce a new event in the system, a plugin creates a new \l{Event} and emits this signal it with that \a event. Usually events are emitted in response to incoming data or other other events happening. Find a configured \l{Device} from the \l{DeviceManager} and get its \l{EventType}{EventTypes}, then create a \l{Event} complying to that \l{EventType} and emit it here. @@ -170,30 +145,40 @@ void DevicePlugin::startMonitoringAutoDevices() } -/*! Reimplement this if you support a DeviceClass with createMethod \l{DeviceManager}{CreateMethodDiscovery}. - This will be called to discover Devices for the given \a deviceClassId with the given \a params. This will always - be an async operation. Return \l{DeviceManager}{DeviceErrorAsync} or \l{DeviceManager}{DeviceErrorNoError} - if the discovery has been started successfully. Return an appropriate error otherwise. - Once devices are discovered, emit devicesDiscovered(). +/*! A plugin must reimplement this if it supports a DeviceClass with createMethod \l{DeviceManager}{CreateMethodDiscovery}. + When the nymea system needs to discover available devices, this will be called on the plugin. The plugin implementation + is set to discover devices for the \l{DeviceClassId} given in the \a info object. + When devices are discovered, they should be added to the info object by calling \l{DeviceDiscoveryInfo::addDeviceDescriptor}. + Once the discovery is complete a plugin must finish it by calling \l{DeviceDiscoveryInfo::finish} using \l{Device::DeviceErrorNoError} + in case of success, or a matching error code otherwise. An optional display message can be passed optionally which might be shown + to the user, indicating more details about the error. The displayMessage must be made translatable by wrapping it in a QT_TR_NOOP() + statement. + + A discovery might be cancelled by nymea. In which case the \l{DeviceDiscoveryInfo::aborted} signal will be emitted. + The info object must not be accessed after \l{DeviceDiscoveryInfo::destroyed} is emitted. */ void DevicePlugin::discoverDevices(DeviceDiscoveryInfo *info) { info->finish(Device::DeviceErrorUnsupportedFeature); } -/*! This will be called when a new device is created. The plugin has the chance to do some setup. - Return \l{DeviceManager}{DeviceSetupStatusFailure} if something bad happened during the setup in which case the \a device - will be disabled. Return \l{DeviceManager}{DeviceSetupStatusSuccess} if everything went well. If you can't tell yet and - need more time to set up the \a device (note: you should never block in this method) you can - return \l{DeviceManager}{DeviceSetupStatusAsync}. In that case the \l{DeviceManager} will wait for you to emit - \l{DevicePlugin}{deviceSetupFinished} to report the status. +/*! This will be called when a new device is created. The plugin can do a setup of the device by reimplementing this method. + The passed \a info object will contain the information about the new \l{Device}. When the setup is completed, a plugin + must finish it by calling \l{DeviceSetupInfo::finish} on the \a info object. In case of success, \{Device::DeviceErrorNoError} + must be used, or an appropriate \l{Device::DeviceError} in case of failure. An optional display message can be passed optionally which might be shown + to the user, indicating more details about the error. The displayMessage must be made translatable by wrapping it in a QT_TR_NOOP() + statement. + + A setup might be cancelled by nymea. In which case the \{DeviceSetupInfo::aborted} signal will be emitted. + The info object must not be accessed after \l{DeviceSetupInfo::destroyed} is emitted. */ void DevicePlugin::setupDevice(DeviceSetupInfo *info) { - info->finish(Device::DeviceErrorUnsupportedFeature); + info->finish(Device::DeviceErrorNoError); } -/*! This will be called when a new \a device was added successfully and the device setup is finished.*/ +/*! This will be called when a new \a device was added successfully and the device setup is finished. A plugin can optionally + trigger additional code to operate on the device by reimplementing this method.*/ void DevicePlugin::postSetupDevice(Device *device) { Q_UNUSED(device) @@ -214,7 +199,7 @@ void DevicePlugin::deviceRemoved(Device *device) SetupMethodOAuth should generate the OAuthUrl which will be opened on the client to allow the user logging in and obtain the OAuth code. SetupMethodEnterPin, SetupMethodPushButton and SetupMethodUserAndPassword will typically not require to do anything here. - It is not required to reimplement this method for those setup methods, however, a Plugin reimplementing it should call + It is not required to reimplement this method for those setup methods, however, a Plugin reimplementing it must call \l{DevicePairingInfo::finish}{finish()} on the \l{DevicePairingInfo} object and can provide an optional displayMessage which might be presented to the user. Those strings need to be wrapped in QT_TR_NOOP() in order to be translatable for the client's locale. @@ -259,33 +244,48 @@ void DevicePlugin::confirmPairing(DevicePairingInfo *info, const QString &userna info->finish(Device::DeviceErrorUnsupportedFeature); } -/*! This will be called to actually execute actions on the hardware. The \{Device} and - the \{Action} are contained in the \a device and \a action parameters. - Return the appropriate \l{Device::DeviceError}{DeviceError}. +/*! This will be called to execute actions on the device. The given \a info object contains + information about the target \l{Device} and the \l{Action} to be executed. - It is possible to execute actions asynchronously. You never should do anything blocking for - a long time (e.g. wait on a network reply from the internet) but instead return - Device::DeviceErrorAsync and continue processing in an async manner. Once - you have the reply ready, emit actionExecutionFinished() with the appropriate parameters. + When the execution is completed, a plugin must finish it by calling \l{DeviceActionInfo::finish} on the \a info + object. In case of success, \l{Device::DeviceErrorNoError} must be used, or an appropriate \l{Device::DeviceError} + in case of failure. An optional display message can be passed which might be shown + to the user, indicating more details about the error. The displayMessage must be made translatable by wrapping it in a QT_TR_NOOP() + statement. - \sa actionExecutionFinished() + An action execution might be cancelled by nymea. In which case the \l{DeviceActionInfo::aborted} signal will be emitted. + The info object must not be accessed after \l{DeviceActionInfo::destroyed} is emitted. */ void DevicePlugin::executeAction(DeviceActionInfo *info) { info->finish(Device::DeviceErrorUnsupportedFeature); } -/*! Implement this if your devices support browsing (set "browsable" to true in the metadata). - * When the system calls this method, fill the \a result object's items list with entries from the browser. - * If \a itemId is empty it means that the root node of the file system should be returned. Each item in - * the result set shall be uniquely identifiable using its \l{BrowserItem::id}{id} property. - * The system might call this method again, with an \a itemId returned in a previous query, provided - * that item's \l{BrowserItem::browsable} property is true. In this case all children of the given - * item shall be returned. All browser \l {BrowserItem::displayName} properties shall be localized - * using the given \a locale. - * When done, set the \l{BrowserResult::status}{result's status} field approprietly. Set the result's - * status to Device::DeviceErrorAsync if this operation requires async behavior and emit - * \l{browseRequestFinished} when done. +/*! A plugin must implement this if devices support browsing ("browsable" being true in the metadata JSON). + When the system calls this method, the \a result must be filled with entries from the browser using + \l{BrowseResult::addItems}. The \a info object will contain information about which device and which item/node + should be browsed. If the itemId is empty it means that the root node of the file system should be returned otherwise + all the children of the given item/node should be returned. + + + Each item in the result set shall be uniquely identifiable using its \l{BrowserItem::id}{id} property. + The system might call this method again, with an itemId returned in a previous query, provided + that item's \l{BrowserItem::browsable} property is true. In this case all children of the given + item shall be returned. All browser \l{BrowserItem::displayName} properties shall be localized + using the given locale in the \a info object. + + If a returned item's \l{BrowserItem::executable} property is set to true, the system might call \l{DevicePlugin::executeBrowserAction} + for this itemId. + + + An item might have additional actions which must be defined in the plugin metadata JSON as "browserItemActionTypes". Such actions + might be context actions to items in a browser. For instance, a file browser might add copy/cut/paste actions to an item. The + system might call \l{DevicePlugin::executeBrowserItemAction} on such items. + + When done, the browse result must be completed by calling \l{BrowserResult::finish} with \l{Device::DeviceErrorNoError} + in case of success or an appropriate \l{Device::DeviceError} otherwise. An optional display message can be passed which might be shown + to the user, indicating more details about the error. The displayMessage must be made translatable by wrapping it in a QT_TR_NOOP() + statement. */ void DevicePlugin::browseDevice(BrowseResult *result) { @@ -293,12 +293,21 @@ void DevicePlugin::browseDevice(BrowseResult *result) result->finish(Device::DeviceErrorUnsupportedFeature); } -/*! Implement this if your devices support browsing (set "browsable" to true in the metadata). - * When the system calls this method, fetch the item details required to create a BrowserItem - * for the item with the given \a id and append that one item to the \a result. - * When done, set the \l{BrowserResult::status}{result's status} field approprietly. Set the result's - * status to Device::DeviceErrorAsync if this operation requires async behavior and emit - * \l{browserItemRequestFinished} when done. +/*! A plugin must implement this if devices support browsing ("browsable" being true in the metadata JSON). + When the system calls this method, the \a result must be filled with a single item identified by the \l{DeviceItemResult::itemId} + using \l{BrowseResult::addItem}. The \a result object will contain information about which device and which item/node + should be browsed. If the itemId is empty it means that the root node of the file system should be returned. + + Each item in the result set shall be uniquely identifiable using its \l{BrowserItem::id}{id} property. The system might + call this method again, with an itemId returned in a previous query, provided that item's \l{BrowserItem::browsable} + property is true. In this case all children of the given item shall be returned. All browser \l{BrowserItem::displayName} properties shall be localized + using the given locale in the \a info object. + + + When done, the browse result must be completed by calling \l{BrowserItemResult::finish} with \l{Device::DeviceErrorNoError} + in case of success or an appropriate \l{Device::DeviceError} otherwise. An optional display message can be passed which might be shown + to the user, indicating more details about the error. The displayMessage must be made translatable by wrapping it in a QT_TR_NOOP() + statement. */ void DevicePlugin::browserItem(BrowserItemResult *result) { @@ -306,21 +315,37 @@ void DevicePlugin::browserItem(BrowserItemResult *result) result->finish(Device::DeviceErrorUnsupportedFeature); } -/*! Implement this if your devices support browsing and execute the itemId defined in \a browserAction. - * Return Device::DeviceErrorAsync if this operation requires async behavior and emit - * \l{browserItemExecutionFinished} when done. - */ +/*! This will be called to execute browser items on the device. For instance, a file browser might execute a file here. + The given \a info object contains information about the target \l{Device} and the \l{BrowserAction} to be executed. + + When the execution is completed, a plugin must finish it by calling \l{BrowserActionInfo::finish} on the \a info + object. In case of success, \{Device::DeviceErrorNoError} must be used, or an appropriate \l{Device::DeviceError} + in case of failure. An optional display message can be passed which might be shown + to the user, indicating more details about the error. The displayMessage must be made translatable by wrapping it in a QT_TR_NOOP() + statement. + + An action execution might be cancelled by nymea. In which case the \{BrowserActionInfo::aborted} signal will be emitted. + The info object must not be accessed after \l{BrowsereActionInfo::destroyed} is emitted. +*/ void DevicePlugin::executeBrowserItem(BrowserActionInfo *info) { qCWarning(dcDevice()) << "Device claims" << info->device()->deviceClass().name() << "to be browsable but plugin does not reimplement browserItem!"; info->finish(Device::DeviceErrorUnsupportedFeature); } -/*! Implement this if your devices support browsing and execute the item's action for the itemId defined - * in \a browserItemAction. - * Return Device::DeviceErrorAsync if this operation requires async behavior and emit - * \l{browserItemActionExecutionFinished} when done. - */ +/*! This will be called to execute browser item actions on the device. For instance a file browser might have + "browserItemActionTypes" defined in the JSON in order to support context options like copy/cut/paste. + The given \a info object contains information about the target \l{Device} and the \l{BrowserItemAction} to be executed. + + When the execution is completed, a plugin must finish it by calling \l{BrowserItemActionInfo::finish} on the \a info + object. In case of success, \l{Device::DeviceErrorNoError} must be used, or an appropriate \l{Device::DeviceError} + in case of failure. An optional display message can be passed which might be shown + to the user, indicating more details about the error. The displayMessage must be made translatable by wrapping it in a QT_TR_NOOP() + statement. + + An action execution might be cancelled by nymea. In which case the \{BrowserItemActionInfo::aborted} signal will be emitted. + The info object must not be accessed after \l{BrowserItemActionInfo::destroyed} is emitted. +*/ void DevicePlugin::executeBrowserItemAction(BrowserItemActionInfo *info) { qCWarning(dcDevice()) << "Device claims" << info->device()->deviceClass().name() << "to be browsable but plugin does not reimplement browserItemAction!"; @@ -333,9 +358,6 @@ ParamTypes DevicePlugin::configurationDescription() const return m_metaData.pluginSettings(); } -/*! This will be called when the DeviceManager initializes the plugin and set up the things behind the scenes. - When implementing a new plugin, use \l{DevicePlugin::init()} instead in order to do initialisation work. - The \l{DevicePlugin::init()} method will be called once the plugin configuration has been loaded. */ void DevicePlugin::initPlugin(const PluginMetadata &metadata, DeviceManager *deviceManager, HardwareManager *hardwareManager) { m_metaData = metadata; From e049c3b2f5d78cf8e763222142fd1bdba8b39d2d Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Thu, 17 Oct 2019 00:02:44 +0200 Subject: [PATCH 12/14] Don't execute actions on devices that didn't complete the setup --- libnymea-core/devices/devicemanagerimplementation.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/libnymea-core/devices/devicemanagerimplementation.cpp b/libnymea-core/devices/devicemanagerimplementation.cpp index eabbaaec..2c17cf59 100644 --- a/libnymea-core/devices/devicemanagerimplementation.cpp +++ b/libnymea-core/devices/devicemanagerimplementation.cpp @@ -912,15 +912,24 @@ DeviceActionInfo *DeviceManagerImplementation::executeAction(const Action &actio Action finalAction = action; Device *device = m_configuredDevices.value(action.deviceId()); if (!device) { + qCWarning(dcDeviceManager()) << "Cannot execute action. No such device:" << action.deviceId(); DeviceActionInfo *info = new DeviceActionInfo(nullptr, action, this); info->finish(Device::DeviceErrorDeviceNotFound); return info; } + if (!device->setupComplete()) { + qCWarning(dcDeviceManager()) << "Cannot execute action. Device" << device->name() << "hasn't completed setup."; + DeviceActionInfo *info = new DeviceActionInfo(nullptr, action, this); + info->finish(Device::DeviceErrorSetupFailed); + return info; + } + // Make sure this device has an action type with this id DeviceClass deviceClass = findDeviceClass(device->deviceClassId()); ActionType actionType = deviceClass.actionTypes().findById(action.actionTypeId()); if (actionType.id().isNull()) { + qCWarning(dcDeviceManager()) << "Cannot execute action. No such action type" << action.actionTypeId(); DeviceActionInfo *info = new DeviceActionInfo(device, action, this); info->finish(Device::DeviceErrorActionTypeNotFound); return info; @@ -929,6 +938,7 @@ DeviceActionInfo *DeviceManagerImplementation::executeAction(const Action &actio ParamList finalParams = action.params(); Device::DeviceError paramCheck = DeviceUtils::verifyParams(actionType.paramTypes(), finalParams); if (paramCheck != Device::DeviceErrorNoError) { + qCWarning(dcDeviceManager()) << "Cannot execute action. Parameter verification failed."; DeviceActionInfo *info = new DeviceActionInfo(device, action, this); info->finish(paramCheck); return info; @@ -939,6 +949,7 @@ DeviceActionInfo *DeviceManagerImplementation::executeAction(const Action &actio DevicePlugin *plugin = m_devicePlugins.value(device->pluginId()); if (!plugin) { + qCWarning(dcDeviceManager()) << "Cannot execute action. Plugin not found for device" << device->name(); info->finish(Device::DeviceErrorPluginNotFound); return info; } From 679e51b027ffafa412ddf1220ecb38bd188e2710 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Thu, 17 Oct 2019 12:21:16 +0200 Subject: [PATCH 13/14] Fix failing test --- .../devices/devicemanagerimplementation.cpp | 2 ++ plugins/mock/devicepluginmock.cpp | 2 ++ tests/auto/logging/testlogging.cpp | 21 +++++++++++++++++++ tests/testlib/nymeatestbase.h | 2 -- 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/libnymea-core/devices/devicemanagerimplementation.cpp b/libnymea-core/devices/devicemanagerimplementation.cpp index 2c17cf59..68a7dd1e 100644 --- a/libnymea-core/devices/devicemanagerimplementation.cpp +++ b/libnymea-core/devices/devicemanagerimplementation.cpp @@ -620,6 +620,7 @@ DevicePairingInfo *DeviceManagerImplementation::confirmPairing(const PairingTran return; } + qCDebug(dcDeviceManager()) << "Setup complete for device" << info->device(); info->device()->setupCompleted(); if (addNewDevice) { @@ -1239,6 +1240,7 @@ void DeviceManagerImplementation::loadConfiguredDevices() return; } + qCDebug(dcDeviceManager()) << "Setup complete for device" << info->device(); info->device()->setupCompleted(); postSetupDevice(info->device()); }); diff --git a/plugins/mock/devicepluginmock.cpp b/plugins/mock/devicepluginmock.cpp index d1eb5a08..98f67dbd 100644 --- a/plugins/mock/devicepluginmock.cpp +++ b/plugins/mock/devicepluginmock.cpp @@ -139,6 +139,7 @@ void DevicePluginMock::setupDevice(DeviceSetupInfo *info) async = info->device()->paramValue(mockDeviceAutoDeviceAsyncParamTypeId).toBool(); broken = info->device()->paramValue(mockDeviceAutoDeviceBrokenParamTypeId).toBool(); } + qCDebug(dcMockDevice()) << "SetupDevice for" << info->device()->name() << "Async:" << async << "Broken:" << broken; if (!async && broken) { qCWarning(dcMockDevice) << "This device is intentionally broken."; @@ -176,6 +177,7 @@ void DevicePluginMock::setupDevice(DeviceSetupInfo *info) }); return; } + qCDebug(dcMockDevice()) << "Setup complete" << info->device()->name(); info->finish(Device::DeviceErrorNoError); return; } diff --git a/tests/auto/logging/testlogging.cpp b/tests/auto/logging/testlogging.cpp index 20ea147d..033874a5 100644 --- a/tests/auto/logging/testlogging.cpp +++ b/tests/auto/logging/testlogging.cpp @@ -25,6 +25,8 @@ #include "logging/logvaluetool.h" #include "servers/mocktcpserver.h" +#include + using namespace nymeaserver; class TestLogging : public NymeaTestBase @@ -34,6 +36,8 @@ class TestLogging : public NymeaTestBase private: private slots: + void initTestCase(); + void initLogs(); void databaseSerializationTest_data(); @@ -62,6 +66,15 @@ private slots: void removeDevice(); }; +void TestLogging::initTestCase() +{ + NymeaTestBase::initTestCase(); + QLoggingCategory::setFilterRules("*.debug=false\n" + "Tests.debug=true\n" + "MockDevice.debug=true\n" + "DeviceManager.debug=true\n"); +} + void TestLogging::initLogs() { QVariant response = injectAndWait("Logging.GetLogEntries"); @@ -588,6 +601,14 @@ void TestLogging::testHouseKeeping() restartServer(); + // Wait for the mock device to complete the setup + do { + qApp->processEvents(); + params.clear(); + params.insert("deviceId", m_mockDeviceId); + response = injectAndWait("Devices.GetConfiguredDevices", params); + } while (!response.toMap().value("params").toMap().value("devices").toList().first().toMap().value("setupComplete").toBool()); + response = injectAndWait("Logging.GetLogEntries", params); QVERIFY2(response.toMap().value("params").toMap().value("logEntries").toList().count() == 0, "Device state change event still in log. Should've been cleaned by housekeeping."); } diff --git a/tests/testlib/nymeatestbase.h b/tests/testlib/nymeatestbase.h index e2bbf373..79f08d68 100644 --- a/tests/testlib/nymeatestbase.h +++ b/tests/testlib/nymeatestbase.h @@ -64,7 +64,6 @@ protected: inline void verifyError(const QVariant &response, const QString &fieldName, const QString &error) { - qCDebug(dcTests()) << "******* response 2" << response; QJsonDocument jsonDoc = QJsonDocument::fromVariant(response); QVERIFY2(response.toMap().value("status").toString() == QString("success"), QString("\nExpected status: \"success\"\nGot: %2\nFull message: %3") @@ -80,7 +79,6 @@ protected: } inline void verifyRuleError(const QVariant &response, RuleEngine::RuleError error = RuleEngine::RuleErrorNoError) { - qCDebug(dcTests()) << "******* response" << response; verifyError(response, "ruleError", JsonTypes::ruleErrorToString(error)); } From c8f3b851c9f53b7bdf85849a22acbd76f6caac57 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Fri, 18 Oct 2019 12:14:20 +0200 Subject: [PATCH 14/14] Fix comments from review --- libnymea/libnymea.pro | 12 ++++++------ plugins/mock/devicepluginmock.cpp | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/libnymea/libnymea.pro b/libnymea/libnymea.pro index 4e849b60..78bdbae1 100644 --- a/libnymea/libnymea.pro +++ b/libnymea/libnymea.pro @@ -10,9 +10,9 @@ DEFINES += LIBNYMEA_LIBRARY QMAKE_LFLAGS += -fPIC HEADERS += \ - devices/browseractioninfo.h \ - devices/browseritemactioninfo.h \ - devices/browseritemresult.h \ + devices/browseractioninfo.h \ + devices/browseritemactioninfo.h \ + devices/browseritemresult.h \ devices/devicemanager.h \ devices/deviceutils.h \ devices/pluginmetadata.h \ @@ -84,9 +84,9 @@ HEADERS += \ platform/platformzeroconfcontroller.h \ SOURCES += \ - devices/browseractioninfo.cpp \ - devices/browseritemactioninfo.cpp \ - devices/browseritemresult.cpp \ + devices/browseractioninfo.cpp \ + devices/browseritemactioninfo.cpp \ + devices/browseritemresult.cpp \ devices/devicemanager.cpp \ devices/deviceutils.cpp \ devices/pluginmetadata.cpp \ diff --git a/plugins/mock/devicepluginmock.cpp b/plugins/mock/devicepluginmock.cpp index 98f67dbd..7ce9ab32 100644 --- a/plugins/mock/devicepluginmock.cpp +++ b/plugins/mock/devicepluginmock.cpp @@ -395,7 +395,7 @@ void DevicePluginMock::confirmPairing(DevicePairingInfo *info, const QString &us query.clear(); query.addQueryItem("grant_type", "authorization_code"); query.addQueryItem("code", accessCode); - query.addQueryItem("redirect_uri", "https%3A%2F%2F127.0.0.1%3A8888"); + query.addQueryItem("redirect_uri", QByteArray("https://127.0.0.1:8888").toPercentEncoding()); url.setQuery(query); QNetworkRequest request(url); @@ -441,7 +441,7 @@ void DevicePluginMock::confirmPairing(DevicePairingInfo *info, const QString &us query.addQueryItem("client_id", clientId); query.addQueryItem("client_secret", clientSecret); query.addQueryItem("grant_type", "authorization_code"); - query.addQueryItem("redirect_uri", "https%3A%2F%2F127.0.0.1%3A8888"); + query.addQueryItem("redirect_uri", QByteArray("https://127.0.0.1:8888").toPercentEncoding()); // query.addQueryItem("code_verifier", codeVerifier); url.setQuery(query);