Merge PR #284: Generic Things: Add venetian blind

pull/1/head
Jenkins nymea 2020-07-21 10:22:11 +02:00
commit bbb7490b2b
6 changed files with 1284 additions and 412 deletions

View File

@ -1,7 +1,5 @@
include(../plugins.pri)
TARGET = $$qtLibraryTarget(nymea_integrationplugingenericthings)
SOURCES += \
integrationplugingenericthings.cpp

View File

@ -1,8 +1,9 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
*
* Copyright 2013 - 2020, nymea GmbH
* Contact: contact@nymea.io
*
* This file is part of nymea.
* This project including source code and documentation is protected by
* copyright law, and remains the property of nymea GmbH. All rights, including
@ -28,28 +29,6 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*!
\page genericinterfaces.html
\title Generic interfaces
\brief Common interfaces to test the rule engine.
\ingroup plugins
\ingroup nymea-tests
The generic interfaces plugin allows you create virtual buttons, which can be connected with a rule. This gives you
the possibility to execute multiple \l{Action}{Actions} with one signal. Without a rule this generic interfaces are
useless.
\chapter Plugin properties
Following JSON file contains the definition and the description of all available \l{ThingClass}{DeviceClasses}
and \l{Vendor}{Vendors} of this \l{DevicePlugin}.
For more details how to read this JSON file please check out the documentation for \l{The plugin JSON File}.
\quotefile plugins/deviceplugins/genericinterfaces/deviceplugingenericinterfaces.json
*/
#include "integrationplugingenericthings.h"
#include "plugininfo.h"
@ -61,9 +40,156 @@ IntegrationPluginGenericThings::IntegrationPluginGenericThings()
}
void IntegrationPluginGenericThings::init()
{
}
void IntegrationPluginGenericThings::setupThing(ThingSetupInfo *info)
{
info->finish(Thing::ThingErrorNoError);
Thing *thing = info->thing();
if (thing->thingClassId() == extendedBlindThingClassId) {
uint closingTime = thing->setting(extendedBlindSettingsClosingTimeParamTypeId).toUInt();
if (closingTime == 0) {
return info->finish(Thing::ThingErrorSetupFailed, tr("Invalid closing time"));
}
QTimer* timer = new QTimer(this);
timer->setInterval(closingTime/100.00); // closing timer / 100 to update on every percent
m_extendedBlindPercentageTimer.insert(thing, timer);
connect(thing, &Thing::settingChanged, thing, [timer] (const ParamTypeId &paramTypeId, const QVariant &value) {
if (paramTypeId == extendedBlindSettingsClosingTimeParamTypeId) {
timer->setInterval(value.toUInt()/100.00);
}
});
connect(timer, &QTimer::timeout, this, [thing, this] {
uint currentPercentage = thing->stateValue(extendedBlindPercentageStateTypeId).toUInt();
if (thing->stateValue(extendedBlindStatusStateTypeId).toString() == "Closing") {
if (currentPercentage == 100) {
setBlindState(BlindStateStopped, thing);
qCDebug(dcGenericThings()) << "Extended blind is closed, stopping timer";
} else {
currentPercentage++;
thing->setStateValue(extendedBlindPercentageStateTypeId, currentPercentage);
}
} else if (thing->stateValue(extendedBlindStatusStateTypeId).toString() == "Opening") {
if (currentPercentage == 0) {
setBlindState(BlindStateStopped, thing);
qCDebug(dcGenericThings()) << "Extended blind is opened, stopping timer";
} else {
currentPercentage--;
thing->setStateValue(extendedBlindPercentageStateTypeId, currentPercentage);
}
} else {
setBlindState(BlindStateStopped, thing);
}
if (m_extendedBlindPercentageTimer.contains(thing)) {
uint targetPercentage = m_extendedBlindTargetPercentage.value(thing);
if (targetPercentage == currentPercentage) {
qCDebug(dcGenericThings()) << "Extended blind has reached target percentage, stopping timer";
setBlindState(BlindStateStopped, thing);
}
}
});
} else if (info->thing()->thingClassId() == venetianBlindThingClassId) {
uint closingTime = thing->setting(venetianBlindSettingsClosingTimeParamTypeId).toUInt();
uint angleTime = thing->setting(venetianBlindSettingsAngleTimeParamTypeId).toUInt();
if (closingTime < angleTime) {
return info->finish(Thing::ThingErrorSetupFailed, tr("Invalid closing or angle time"));
}
QTimer* closingTimer = new QTimer(this);
closingTimer->setInterval(closingTime/100.00); // closing timer / 100 to update on every percent
m_extendedBlindPercentageTimer.insert(thing, closingTimer);
connect(closingTimer, &QTimer::timeout, thing, [thing, this] {
uint currentPercentage = thing->stateValue(venetianBlindPercentageStateTypeId).toUInt();
if (thing->stateValue(venetianBlindStatusStateTypeId).toString() == "Closing") {
if (currentPercentage == 100) {
setBlindState(BlindStateStopped, thing);
qCDebug(dcGenericThings()) << "Venetian blind is closed, stopping timer";
} else if (currentPercentage > 100) {
currentPercentage = 100;
setBlindState(BlindStateStopped, thing);
qCWarning(dcGenericThings()) << "Venetian blind overshoot 100 percent";
} else {
currentPercentage++;
thing->setStateValue(venetianBlindPercentageStateTypeId, currentPercentage);
}
} else if (thing->stateValue(venetianBlindStatusStateTypeId).toString() == "Opening") {
if (currentPercentage == 0) {
setBlindState(BlindStateStopped, thing);
qCDebug(dcGenericThings()) << "Venetian blind is opened, stopping timer";
} else {
currentPercentage--;
thing->setStateValue(venetianBlindPercentageStateTypeId, currentPercentage);
}
} else {
setBlindState(BlindStateStopped, thing);
}
if (m_extendedBlindPercentageTimer.contains(thing)) {
uint targetPercentage = m_extendedBlindTargetPercentage.value(thing);
if (targetPercentage == currentPercentage) {
qCDebug(dcGenericThings()) << "Venetian blind has reached target percentage, stopping timer";
setBlindState(BlindStateStopped, thing);
}
}
});
QTimer* angleTimer = new QTimer(this);
angleTimer->setInterval(angleTime/180.00); // -90 to 90 degree -> 180 degree total
m_venetianBlindAngleTimer.insert(thing, angleTimer);
connect(thing, &Thing::settingChanged, thing, [closingTimer, angleTimer] (const ParamTypeId &paramTypeId, const QVariant &value) {
if (paramTypeId == venetianBlindSettingsClosingTimeParamTypeId) {
closingTimer->setInterval(value.toUInt()/100.00);
} else if (paramTypeId == venetianBlindSettingsAngleTimeParamTypeId) {
angleTimer->setInterval(value.toUInt()/180.00);
}
});
connect(angleTimer, &QTimer::timeout, thing, [thing, this] {
int currentAngle = thing->stateValue(venetianBlindAngleStateTypeId).toInt();
if (thing->stateValue(venetianBlindStatusStateTypeId).toString() == "Closing") {
if (currentAngle < 90) {
currentAngle++;
} else if (currentAngle == 90) {
m_venetianBlindAngleTimer.value(thing)->stop();
} else if (currentAngle > 90) {
currentAngle = 90;
m_venetianBlindAngleTimer.value(thing)->stop();
qCWarning(dcGenericThings()) << "Venetian blind overshoot angle boundaries";
}
thing->setStateValue(venetianBlindAngleStateTypeId, currentAngle);
} else if (thing->stateValue(venetianBlindStatusStateTypeId).toString() == "Opening") {
if (currentAngle > -90) {
currentAngle--;
} else if (currentAngle == -90) {
m_venetianBlindAngleTimer.value(thing)->stop();
} else if (currentAngle < -90) {
currentAngle = -90;
m_venetianBlindAngleTimer.value(thing)->stop();
qCWarning(dcGenericThings()) << "Venetian blind overshoot angle boundaries";
}
thing->setStateValue(venetianBlindAngleStateTypeId, currentAngle);
}
if (m_venetianBlindTargetAngle.contains(thing)) {
int targetAngle = m_venetianBlindTargetAngle.value(thing);
if (targetAngle == currentAngle) {
qCDebug(dcGenericThings()) << "Venetian blind has reached target angle, stopping timer";
setBlindState(BlindStateStopped, thing);
}
}
});
}
}
void IntegrationPluginGenericThings::executeAction(ThingActionInfo *info)
@ -77,20 +203,17 @@ void IntegrationPluginGenericThings::executeAction(ThingActionInfo *info)
thing->setStateValue(awningClosingOutputStateTypeId, false);
thing->setStateValue(awningOpeningOutputStateTypeId, true);
return info->finish(Thing::ThingErrorNoError);
}
if (action.actionTypeId() == awningStopActionTypeId) {
} else if (action.actionTypeId() == awningStopActionTypeId) {
thing->setStateValue(awningStatusStateTypeId, "Stopped");
thing->setStateValue(awningOpeningOutputStateTypeId, false);
thing->setStateValue(awningClosingOutputStateTypeId, false);
return info->finish(Thing::ThingErrorNoError);
}
if (action.actionTypeId() == awningCloseActionTypeId) {
} else if (action.actionTypeId() == awningCloseActionTypeId) {
thing->setStateValue(awningStatusStateTypeId, "Closing");
thing->setStateValue(awningOpeningOutputStateTypeId, false);
thing->setStateValue(awningClosingOutputStateTypeId, true);
return info->finish(Thing::ThingErrorNoError);
}
if (action.actionTypeId() == awningOpeningOutputActionTypeId) {
} else if (action.actionTypeId() == awningOpeningOutputActionTypeId) {
bool on = action.param(awningOpeningOutputActionOpeningOutputParamTypeId).value().toBool();
thing->setStateValue(awningOpeningOutputStateTypeId, on);
if (on) {
@ -100,8 +223,7 @@ void IntegrationPluginGenericThings::executeAction(ThingActionInfo *info)
thing->setStateValue(awningStatusStateTypeId, "Stopped");
}
info->finish(Thing::ThingErrorNoError);
}
if (action.actionTypeId() == awningClosingOutputActionTypeId) {
} else if (action.actionTypeId() == awningClosingOutputActionTypeId) {
bool on = action.param(awningClosingOutputActionClosingOutputParamTypeId).value().toBool();
thing->setStateValue(awningClosingOutputStateTypeId, on);
if (on) {
@ -111,30 +233,26 @@ void IntegrationPluginGenericThings::executeAction(ThingActionInfo *info)
thing->setStateValue(awningStatusStateTypeId, "Stopped");
}
info->finish(Thing::ThingErrorNoError);
} else {
Q_ASSERT_X(false, "executeAction", QString("Unhandled actionTypeId: %1").arg(action.actionTypeId().toString()).toUtf8());
}
return info->finish(Thing::ThingErrorActionTypeNotFound);
}
if (thing->thingClassId() == blindThingClassId ) {
} else if (thing->thingClassId() == blindThingClassId ) {
if (action.actionTypeId() == blindOpenActionTypeId) {
thing->setStateValue(blindStatusStateTypeId, "Opening");
thing->setStateValue(blindClosingOutputStateTypeId, false);
thing->setStateValue(blindOpeningOutputStateTypeId, true);
return info->finish(Thing::ThingErrorNoError);
}
if (action.actionTypeId() == blindStopActionTypeId) {
} else if (action.actionTypeId() == blindStopActionTypeId) {
thing->setStateValue(blindStatusStateTypeId, "Stopped");
thing->setStateValue(blindOpeningOutputStateTypeId, false);
thing->setStateValue(blindClosingOutputStateTypeId, false);
return info->finish(Thing::ThingErrorNoError);
}
if (action.actionTypeId() == blindCloseActionTypeId) {
} else if (action.actionTypeId() == blindCloseActionTypeId) {
thing->setStateValue(blindStatusStateTypeId, "Closing");
thing->setStateValue(blindOpeningOutputStateTypeId, false);
thing->setStateValue(blindClosingOutputStateTypeId, true);
return info->finish(Thing::ThingErrorNoError);
}
if (action.actionTypeId() == blindOpeningOutputActionTypeId) {
} else if (action.actionTypeId() == blindOpeningOutputActionTypeId) {
bool on = action.param(blindOpeningOutputActionOpeningOutputParamTypeId).value().toBool();
thing->setStateValue(blindOpeningOutputStateTypeId, on);
if (on) {
@ -144,8 +262,7 @@ void IntegrationPluginGenericThings::executeAction(ThingActionInfo *info)
thing->setStateValue(blindStatusStateTypeId, "Stopped");
}
info->finish(Thing::ThingErrorNoError);
}
if (action.actionTypeId() == blindClosingOutputActionTypeId) {
} else if (action.actionTypeId() == blindClosingOutputActionTypeId) {
bool on = action.param(blindClosingOutputActionClosingOutputParamTypeId).value().toBool();
thing->setStateValue(blindClosingOutputStateTypeId, on);
if (on) {
@ -155,30 +272,97 @@ void IntegrationPluginGenericThings::executeAction(ThingActionInfo *info)
thing->setStateValue(blindStatusStateTypeId, "Stopped");
}
info->finish(Thing::ThingErrorNoError);
} else {
Q_ASSERT_X(false, "executeAction", QString("Unhandled actionTypeId: %1").arg(action.actionTypeId().toString()).toUtf8());
}
return info->finish(Thing::ThingErrorActionTypeNotFound);
}
} else if (thing->thingClassId() == extendedBlindThingClassId) {
if (thing->thingClassId() == shutterThingClassId) {
if (action.actionTypeId() == extendedBlindOpenActionTypeId) {
setBlindState(BlindStateOpening, thing);
return info->finish(Thing::ThingErrorNoError);
} else if (action.actionTypeId() == extendedBlindStopActionTypeId) {
setBlindState(BlindStateStopped, thing);
return info->finish(Thing::ThingErrorNoError);
} else if (action.actionTypeId() == extendedBlindCloseActionTypeId) {
setBlindState(BlindStateClosing, thing);
return info->finish(Thing::ThingErrorNoError);
} else if (action.actionTypeId() == extendedBlindOpeningOutputActionTypeId) {
bool on = action.param(extendedBlindOpeningOutputActionOpeningOutputParamTypeId).value().toBool();
thing->setStateValue(extendedBlindOpeningOutputStateTypeId, on);
if (on) {
setBlindState(BlindStateOpening, thing);
} else {
setBlindState(BlindStateStopped, thing);
}
info->finish(Thing::ThingErrorNoError);
} else if (action.actionTypeId() == extendedBlindClosingOutputActionTypeId) {
bool on = action.param(extendedBlindClosingOutputActionClosingOutputParamTypeId).value().toBool();
thing->setStateValue(extendedBlindClosingOutputStateTypeId, on);
if (on) {
setBlindState(BlindStateClosing, thing);
} else {
setBlindState(BlindStateStopped, thing);
}
info->finish(Thing::ThingErrorNoError);
} else if (action.actionTypeId() == extendedBlindPercentageActionTypeId) {
moveBlindToPercentage(action, thing);
} else {
Q_ASSERT_X(false, "executeAction", QString("Unhandled actionTypeId: %1").arg(action.actionTypeId().toString()).toUtf8());
}
} else if (thing->thingClassId() == venetianBlindThingClassId) {
if (action.actionTypeId() == venetianBlindOpenActionTypeId) {
setBlindState(BlindStateOpening, thing);
return info->finish(Thing::ThingErrorNoError);
} else if (action.actionTypeId() == venetianBlindStopActionTypeId) {
setBlindState(BlindStateStopped, thing);
return info->finish(Thing::ThingErrorNoError);
} else if (action.actionTypeId() == venetianBlindCloseActionTypeId) {
setBlindState(BlindStateClosing, thing);
return info->finish(Thing::ThingErrorNoError);
} else if (action.actionTypeId() == venetianBlindOpeningOutputActionTypeId) {
bool on = action.param(venetianBlindOpeningOutputActionOpeningOutputParamTypeId).value().toBool();
thing->setStateValue(venetianBlindOpeningOutputStateTypeId, on);
if (on) {
setBlindState(BlindStateOpening, thing);
} else {
setBlindState(BlindStateStopped, thing);
}
info->finish(Thing::ThingErrorNoError);
} else if (action.actionTypeId() == venetianBlindClosingOutputActionTypeId) {
bool on = action.param(venetianBlindClosingOutputActionClosingOutputParamTypeId).value().toBool();
thing->setStateValue(venetianBlindClosingOutputStateTypeId, on);
if (on) {
setBlindState(BlindStateClosing, thing);
} else {
setBlindState(BlindStateStopped, thing);
}
info->finish(Thing::ThingErrorNoError);
} else if (action.actionTypeId() == venetianBlindPercentageActionTypeId) {
moveBlindToPercentage(action, thing);
info->finish(Thing::ThingErrorNoError);
} else if (action.actionTypeId() == venetianBlindAngleActionTypeId) {
moveBlindToAngle(action, thing);
info->finish(Thing::ThingErrorNoError);
} else {
Q_ASSERT_X(false, "executeAction", QString("Unhandled actionTypeId: %1").arg(action.actionTypeId().toString()).toUtf8());
}
} else if (thing->thingClassId() == shutterThingClassId) {
if (action.actionTypeId() == shutterOpenActionTypeId) {
thing->setStateValue(shutterStatusStateTypeId, "Opening");
thing->setStateValue(shutterClosingOutputStateTypeId, false);
thing->setStateValue(shutterOpeningOutputStateTypeId, true);
return info->finish(Thing::ThingErrorNoError);
}
if (action.actionTypeId() == shutterStopActionTypeId) {
} else if (action.actionTypeId() == shutterStopActionTypeId) {
thing->setStateValue(shutterStatusStateTypeId, "Stopped");
thing->setStateValue(shutterOpeningOutputStateTypeId, false);
thing->setStateValue(shutterClosingOutputStateTypeId, false);
return info->finish(Thing::ThingErrorNoError);
}
if (action.actionTypeId() == shutterCloseActionTypeId) {
} else if (action.actionTypeId() == shutterCloseActionTypeId) {
thing->setStateValue(shutterStatusStateTypeId, "Closing");
thing->setStateValue(shutterOpeningOutputStateTypeId, false);
thing->setStateValue(shutterClosingOutputStateTypeId, true);
return info->finish(Thing::ThingErrorNoError);
}
if (action.actionTypeId() == shutterOpeningOutputActionTypeId) {
} else if (action.actionTypeId() == shutterOpeningOutputActionTypeId) {
bool on = action.param(shutterOpeningOutputActionOpeningOutputParamTypeId).value().toBool();
thing->setStateValue(shutterOpeningOutputStateTypeId, on);
if (on) {
@ -188,8 +372,7 @@ void IntegrationPluginGenericThings::executeAction(ThingActionInfo *info)
thing->setStateValue(shutterStatusStateTypeId, "Stopped");
}
info->finish(Thing::ThingErrorNoError);
}
if (action.actionTypeId() == shutterClosingOutputActionTypeId) {
} else if (action.actionTypeId() == shutterClosingOutputActionTypeId) {
bool on = action.param(shutterClosingOutputActionClosingOutputParamTypeId).value().toBool();
thing->setStateValue(shutterClosingOutputStateTypeId, on);
if (on) {
@ -199,59 +382,55 @@ void IntegrationPluginGenericThings::executeAction(ThingActionInfo *info)
thing->setStateValue(shutterStatusStateTypeId, "Stopped");
}
info->finish(Thing::ThingErrorNoError);
} else {
Q_ASSERT_X(false, "executeAction", QString("Unhandled actionTypeId: %1").arg(action.actionTypeId().toString()).toUtf8());
}
return info->finish(Thing::ThingErrorActionTypeNotFound);
}
if (thing->thingClassId() == socketThingClassId) {
} else if (thing->thingClassId() == socketThingClassId) {
if (action.actionTypeId() == socketPowerActionTypeId) {
thing->setStateValue(socketPowerStateTypeId, action.param(socketPowerActionPowerParamTypeId).value());
return info->finish(Thing::ThingErrorNoError);
} else {
Q_ASSERT_X(false, "executeAction", QString("Unhandled actionTypeId: %1").arg(action.actionTypeId().toString()).toUtf8());
}
return info->finish(Thing::ThingErrorActionTypeNotFound);
}
if (thing->thingClassId() == lightThingClassId) {
} else if (thing->thingClassId() == lightThingClassId) {
if (action.actionTypeId() == lightPowerActionTypeId) {
thing->setStateValue(lightPowerStateTypeId, action.param(lightPowerActionPowerParamTypeId).value());
return info->finish(Thing::ThingErrorNoError);
} else {
Q_ASSERT_X(false, "executeAction", QString("Unhandled actionTypeId: %1").arg(action.actionTypeId().toString()).toUtf8());
}
return info->finish(Thing::ThingErrorActionTypeNotFound);
}
if (thing->thingClassId() == heatingThingClassId) {
} else if (thing->thingClassId() == heatingThingClassId) {
if (action.actionTypeId() == heatingPowerActionTypeId) {
thing->setStateValue(heatingPowerStateTypeId, action.param(heatingPowerActionPowerParamTypeId).value());
return info->finish(Thing::ThingErrorNoError);
} else {
Q_ASSERT_X(false, "executeAction", QString("Unhandled actionTypeId: %1").arg(action.actionTypeId().toString()).toUtf8());
}
return info->finish(Thing::ThingErrorActionTypeNotFound);
}
if (thing->thingClassId() == powerSwitchThingClassId) {
} else if (thing->thingClassId() == powerSwitchThingClassId) {
if (action.actionTypeId() == powerSwitchPowerActionTypeId) {
thing->setStateValue(powerSwitchPowerStateTypeId, action.param(powerSwitchPowerActionPowerParamTypeId).value());
info->finish(Thing::ThingErrorNoError);
return;
} else {
Q_ASSERT_X(false, "executeAction", QString("Unhandled actionTypeId: %1").arg(action.actionTypeId().toString()).toUtf8());
}
}
if (thing->thingClassId() == irrigationThingClassId) {
} else if (thing->thingClassId() == irrigationThingClassId) {
if (action.actionTypeId() == irrigationPowerActionTypeId) {
thing->setStateValue(irrigationPowerStateTypeId, action.param(irrigationPowerActionPowerParamTypeId).value());
info->finish(Thing::ThingErrorNoError);
return;
} else {
Q_ASSERT_X(false, "executeAction", QString("Unhandled actionTypeId: %1").arg(action.actionTypeId().toString()).toUtf8());
}
}
if (thing->thingClassId() == ventilationThingClassId) {
} else if (thing->thingClassId() == ventilationThingClassId) {
if (action.actionTypeId() == ventilationPowerActionTypeId) {
thing->setStateValue(ventilationPowerStateTypeId, action.param(ventilationPowerActionPowerParamTypeId).value());
info->finish(Thing::ThingErrorNoError);
return;
} else {
Q_ASSERT_X(false, "executeAction", QString("Unhandled actionTypeId: %1").arg(action.actionTypeId().toString()).toUtf8());
}
}
if (thing->thingClassId() == temperatureSensorThingClassId) {
} else if (thing->thingClassId() == temperatureSensorThingClassId) {
if (action.actionTypeId() == temperatureSensorInputActionTypeId) {
double value = info->action().param(temperatureSensorInputActionInputParamTypeId).value().toDouble();
thing->setStateValue(temperatureSensorInputStateTypeId, value);
@ -263,10 +442,10 @@ void IntegrationPluginGenericThings::executeAction(ThingActionInfo *info)
thing->setStateValue(temperatureSensorTemperatureStateTypeId, newValue);
info->finish(Thing::ThingErrorNoError);
return;
} else {
Q_ASSERT_X(false, "executeAction", QString("Unhandled actionTypeId: %1").arg(action.actionTypeId().toString()).toUtf8());
}
}
if (thing->thingClassId() == humiditySensorThingClassId) {
} else if (thing->thingClassId() == humiditySensorThingClassId) {
if (action.actionTypeId() == humiditySensorInputActionTypeId) {
double value = info->action().param(humiditySensorInputActionInputParamTypeId).value().toDouble();
thing->setStateValue(humiditySensorInputStateTypeId, value);
@ -278,10 +457,10 @@ void IntegrationPluginGenericThings::executeAction(ThingActionInfo *info)
thing->setStateValue(humiditySensorHumidityStateTypeId, newValue);
info->finish(Thing::ThingErrorNoError);
return;
} else {
Q_ASSERT_X(false, "executeAction", QString("Unhandled actionTypeId: %1").arg(action.actionTypeId().toString()).toUtf8());
}
}
if (thing->thingClassId() == moistureSensorThingClassId) {
} else if (thing->thingClassId() == moistureSensorThingClassId) {
if (action.actionTypeId() == moistureSensorInputActionTypeId) {
double value = info->action().param(moistureSensorInputActionInputParamTypeId).value().toDouble();
thing->setStateValue(moistureSensorInputStateTypeId, value);
@ -293,10 +472,25 @@ void IntegrationPluginGenericThings::executeAction(ThingActionInfo *info)
thing->setStateValue(moistureSensorMoistureStateTypeId, newValue);
info->finish(Thing::ThingErrorNoError);
return;
} else {
Q_ASSERT_X(false, "executeAction", QString("Unhandled actionTypeId: %1").arg(action.actionTypeId().toString()).toUtf8());
}
} else {
Q_ASSERT_X(false, "executeAction", QString("Unhandled thingClassId: %1").arg(thing->thingClassId().toString()).toUtf8());
}
}
return info->finish(Thing::ThingErrorThingClassNotFound);
void IntegrationPluginGenericThings::thingRemoved(Thing *thing)
{
if (thing->thingClassId() == extendedBlindThingClassId) {
m_extendedBlindPercentageTimer.take(thing)->deleteLater();
m_extendedBlindTargetPercentage.remove(thing);
} else if (thing->thingClassId() == venetianBlindThingClassId) {
m_extendedBlindPercentageTimer.take(thing)->deleteLater();
m_extendedBlindTargetPercentage.remove(thing);
m_venetianBlindAngleTimer.take(thing)->deleteLater();
m_venetianBlindTargetAngle.remove(thing);
}
}
double IntegrationPluginGenericThings::mapDoubleValue(double value, double fromMin, double fromMax, double toMin, double toMax)
@ -305,3 +499,127 @@ double IntegrationPluginGenericThings::mapDoubleValue(double value, double fromM
double toValue = toMin + (toMax - toMin) * percent;
return toValue;
}
void IntegrationPluginGenericThings::setBlindState(IntegrationPluginGenericThings::BlindState state, Thing *thing)
{
//If an ongoing "to percentage" actions is beeing executed, it is now overruled by another action
m_extendedBlindTargetPercentage.remove(thing);
if (thing->thingClassId() == extendedBlindThingClassId) {
switch (state) {
case BlindStateOpening:
thing->setStateValue(extendedBlindStatusStateTypeId, "Opening");
thing->setStateValue(extendedBlindClosingOutputStateTypeId, false);
thing->setStateValue(extendedBlindOpeningOutputStateTypeId, true);
thing->setStateValue(extendedBlindMovingStateTypeId, true);
m_extendedBlindPercentageTimer.value(thing)->start();
break;
case BlindStateClosing:
thing->setStateValue(extendedBlindStatusStateTypeId, "Closing");
thing->setStateValue(extendedBlindClosingOutputStateTypeId, true);
thing->setStateValue(extendedBlindOpeningOutputStateTypeId, false);
thing->setStateValue(extendedBlindMovingStateTypeId, true);
m_extendedBlindPercentageTimer.value(thing)->start();
break;
case BlindStateStopped:
thing->setStateValue(extendedBlindStatusStateTypeId, "Stopped");
thing->setStateValue(extendedBlindClosingOutputStateTypeId, false);
thing->setStateValue(extendedBlindOpeningOutputStateTypeId, false);
thing->setStateValue(extendedBlindMovingStateTypeId, false);
m_extendedBlindPercentageTimer.value(thing)->stop();
break;
}
} else if (thing->thingClassId() == venetianBlindThingClassId) {
m_venetianBlindTargetAngle.remove(thing);
switch (state) {
case BlindStateOpening:
thing->setStateValue(venetianBlindStatusStateTypeId, "Opening");
thing->setStateValue(venetianBlindClosingOutputStateTypeId, false);
thing->setStateValue(venetianBlindOpeningOutputStateTypeId, true);
thing->setStateValue(venetianBlindMovingStateTypeId, true);
m_extendedBlindPercentageTimer.value(thing)->start();
m_venetianBlindAngleTimer.value(thing)->start();
break;
case BlindStateClosing:
thing->setStateValue(venetianBlindStatusStateTypeId, "Closing");
thing->setStateValue(venetianBlindClosingOutputStateTypeId, true);
thing->setStateValue(venetianBlindOpeningOutputStateTypeId, false);
thing->setStateValue(venetianBlindMovingStateTypeId, true);
m_extendedBlindPercentageTimer.value(thing)->start();
m_venetianBlindAngleTimer.value(thing)->start();
break;
case BlindStateStopped:
thing->setStateValue(venetianBlindStatusStateTypeId, "Stopped");
thing->setStateValue(venetianBlindClosingOutputStateTypeId, false);
thing->setStateValue(venetianBlindOpeningOutputStateTypeId, false);
thing->setStateValue(venetianBlindMovingStateTypeId, false);
m_extendedBlindPercentageTimer.value(thing)->stop();
m_venetianBlindAngleTimer.value(thing)->stop();
break;
}
}
}
void IntegrationPluginGenericThings::moveBlindToPercentage(Action action, Thing *thing)
{
if (thing->thingClassId() == extendedBlindThingClassId) {
uint targetPercentage = action.param(extendedBlindPercentageActionPercentageParamTypeId).value().toUInt();
uint currentPercentage = thing->stateValue(extendedBlindPercentageStateTypeId).toUInt();
// 100% indicates the device is fully closed
if (targetPercentage == currentPercentage) {
qCDebug(dcGenericThings()) << "Extended blind is already at given percentage" << targetPercentage;
} else if (targetPercentage > currentPercentage) {
setBlindState(BlindStateClosing, thing);
m_extendedBlindTargetPercentage.insert(thing, targetPercentage);
} else if (targetPercentage < currentPercentage) {
setBlindState(BlindStateOpening, thing);
m_extendedBlindTargetPercentage.insert(thing, targetPercentage);
} else {
setBlindState(BlindStateStopped, thing);
}
} else if (thing->thingClassId() == venetianBlindThingClassId) {
uint targetPercentage = action.param(venetianBlindPercentageActionPercentageParamTypeId).value().toUInt();
uint currentPercentage = thing->stateValue(venetianBlindPercentageStateTypeId).toUInt();
qCDebug(dcGenericThings()) << "Moving venetian blind to percentage" << targetPercentage << "Current percentage:" << currentPercentage;
// 100% indicates the device is fully closed
if (targetPercentage == currentPercentage) {
qCDebug(dcGenericThings()) << "Extended blind is already at given percentage" << targetPercentage;
} else if (targetPercentage > currentPercentage) {
setBlindState(BlindStateClosing, thing);
m_extendedBlindTargetPercentage.insert(thing, targetPercentage);
} else if (targetPercentage < currentPercentage) {
setBlindState(BlindStateOpening, thing);
m_extendedBlindTargetPercentage.insert(thing, targetPercentage);
} else {
setBlindState(BlindStateStopped, thing);
}
} else {
qCDebug(dcGenericThings()) << "Move to percentage doesn't support this thingClass";
}
}
void IntegrationPluginGenericThings::moveBlindToAngle(Action action, Thing *thing)
{
if (thing->thingClassId() == venetianBlindThingClassId) {
if (action.actionTypeId() == venetianBlindAngleActionTypeId) {
//NOTE moving percentage affects the angle but the angle doesnt affect the percentage
// opening -> -90
// closing -> +90
int targetAngle = action.param(venetianBlindAngleActionAngleParamTypeId).value().toInt();
int currentAngle = thing->stateValue(venetianBlindAngleStateTypeId).toInt();
if (targetAngle == currentAngle) {
qCDebug(dcGenericThings()) << "Venetian blind is already at given angle" << targetAngle;
} else if (targetAngle > currentAngle) {
setBlindState(BlindStateClosing, thing);
m_venetianBlindTargetAngle.insert(thing, targetAngle);
} else if (targetAngle < currentAngle) {
setBlindState(BlindStateOpening, thing);
m_venetianBlindTargetAngle.insert(thing, targetAngle);
} else {
setBlindState(BlindStateStopped, thing);
}
}
} else {
qCDebug(dcGenericThings()) << "Move to angle doesn't support this thingClass";
}
}

View File

@ -32,6 +32,7 @@
#define INTEGRATIONPLUGINGENERICTHINGS_H
#include "integrations/integrationplugin.h"
#include <QTimer>
class IntegrationPluginGenericThings: public IntegrationPlugin
{
@ -42,11 +43,27 @@ class IntegrationPluginGenericThings: public IntegrationPlugin
public:
explicit IntegrationPluginGenericThings();
void init() override;
void setupThing(ThingSetupInfo *info) override;
void executeAction(ThingActionInfo *info) override;
void thingRemoved(Thing *thing) override;
private:
double mapDoubleValue(double value, double fromMin, double fromMax, double toMin, double toMax);
QHash<Thing *, QTimer *> m_extendedBlindPercentageTimer;
QHash<Thing *, QTimer *> m_venetianBlindAngleTimer;
QHash<Thing *, uint> m_extendedBlindTargetPercentage;
QHash<Thing *, int> m_venetianBlindTargetAngle;
enum BlindState {
BlindStateOpening,
BlindStateClosing,
BlindStateStopped
};
void setBlindState(BlindState state, Thing *thing);
void moveBlindToPercentage(Action action, Thing *thing);
void moveBlindToAngle(Action action, Thing *thing);
};
#endif // INTEGRATIONPLUGINGENERICTHINGS_H

View File

@ -130,6 +130,211 @@
}
]
},
{
"id": "40aa9f3c-a23c-4f7f-8786-fcf3554f3e19",
"name": "extendedBlind",
"displayName": "Generic extended blind",
"createMethods": ["user"],
"interfaces": ["extendedblind"],
"settingsTypes": [
{
"id": "27a95b8d-7f97-441b-a3be-0646c517cb06",
"name": "closingTime",
"displayName": "Closing time [MilliSecond]",
"type": "uint",
"minValue": 1,
"defaultValue": 5000
}
],
"stateTypes": [
{
"id": "e559f077-e904-4bbc-8ec3-344b814d2eab",
"name": "openingOutput",
"displayName": "Opening output",
"displayNameEvent": "Opening output changed",
"displayNameAction": "Set opening output",
"type": "bool",
"defaultValue": false,
"ioType": "digitalInput",
"writable": true
},
{
"id": "1a4a5839-a30d-4239-a124-63bfdc74a8f6",
"name": "closingOutput",
"displayName": "Closing output",
"displayNameEvent": "Closing output changed",
"displayNameAction": "Set closing output",
"type": "bool",
"defaultValue": false,
"ioType": "digitalInput",
"writable": true
},
{
"id": "c2354d7e-198a-43ae-aa5f-c6710010c7e1",
"name": "status",
"displayName": "Status",
"displayNameEvent": "Status changed",
"type": "QString",
"possibleValues": [
"Opening",
"Stopped",
"Closing"
],
"defaultValue": "Stopped"
},
{
"id": "941d1e1f-8dd7-4493-812f-6cefefd88c2e",
"name": "moving",
"type": "bool",
"displayName": "Moving",
"displayNameEvent": "Moving changed",
"defaultValue": false
},
{
"id": "181df603-d45f-4d3d-a358-97aa3e4ac0bd",
"name": "percentage",
"displayName": "Percentage",
"displayNameEvent": "Percentage changed",
"displayNameAction": "Set percentage",
"type": "int",
"minValue": 0,
"maxValue": 100,
"defaultValue": 0,
"unit": "Percentage",
"writable": true
}
],
"actionTypes": [
{
"id": "5a7599fa-8351-4ed6-9b98-fa2f3be54304",
"name": "open",
"displayName": "Open"
},
{
"id": "ab67e4bf-c7b6-489b-9b49-3e0a1c7d33ca",
"name": "stop",
"displayName": "Stop"
},
{
"id": "97d6351d-7440-47f3-bdba-a31bb15368ac",
"name": "close",
"displayName": "Close"
}
]
},
{
"id": "e6b96ced-8d50-45da-91c8-792d364d2795",
"name": "venetianBlind",
"displayName": "Venetian blind",
"createMethods": ["user"],
"interfaces": ["venetianblind"],
"settingsTypes": [
{
"id": "4c0bf07d-aaab-4f67-af65-00ceaefbaa84",
"name": "closingTime",
"displayName": "Closing time [MilliSecond]",
"minValue": 1,
"type": "uint",
"defaultValue": 5000
},
{
"id": "6c8340bf-7fd3-43e3-a75b-dfa2f6426e11",
"name": "angleTime",
"displayName": "Angle end to end time [MilliSecond]",
"minValue": 1,
"type": "uint",
"defaultValue": 1000
}
],
"stateTypes": [
{
"id": "6041dacf-5303-4dc0-ba3c-7ecaa438f2dd",
"name": "openingOutput",
"displayName": "Opening output",
"displayNameEvent": "Opening output changed",
"displayNameAction": "Set opening output",
"type": "bool",
"defaultValue": false,
"ioType": "digitalInput",
"writable": true
},
{
"id": "84dd2fa1-85fe-47f3-9e32-e6083432d39c",
"name": "closingOutput",
"displayName": "Closing output",
"displayNameEvent": "Closing output changed",
"displayNameAction": "Set closing output",
"type": "bool",
"defaultValue": false,
"ioType": "digitalInput",
"writable": true
},
{
"id": "6fb7826e-b6d8-42f8-b712-719496046436",
"name": "status",
"displayName": "Status",
"displayNameEvent": "Status changed",
"type": "QString",
"possibleValues": [
"Opening",
"Stopped",
"Closing"
],
"defaultValue": "Stopped"
},
{
"id": "6234c07e-4200-4f2c-8cbd-bff24c38c243",
"name": "moving",
"type": "bool",
"displayName": "Moving",
"displayNameEvent": "Moving changed",
"defaultValue": false
},
{
"id": "33dc8019-336d-4d50-8d60-dff8508338ca",
"name": "percentage",
"displayName": "Percentage",
"displayNameEvent": "Percentage changed",
"displayNameAction": "Set percentage",
"type": "int",
"minValue": 0,
"maxValue": 100,
"defaultValue": 0,
"unit": "Percentage",
"writable": true
},
{
"id": "fcb700c4-5da8-4385-85b0-6616e807974e",
"name": "angle",
"displayName": "Angle",
"displayNameEvent": "Angle changed",
"displayNameAction": "Set angle",
"type": "int",
"unit": "Degree",
"minValue": -90,
"maxValue": 90,
"defaultValue": 0,
"writable": true
}
],
"actionTypes": [
{
"id": "3e728e50-3d45-4035-b215-1e604cf3159b",
"name": "open",
"displayName": "Open"
},
{
"id": "6e3eeb5d-d7ed-4175-9795-e76451e0a00b",
"name": "stop",
"displayName": "Stop"
},
{
"id": "1c71f050-f6cb-4929-9c9d-7c262f77c143",
"name": "close",
"displayName": "Close"
}
]
},
{
"id": "7917c2e7-d7d2-4c47-a38d-41f7dd7693d9",
"name": "shutter",

View File

@ -3,10 +3,42 @@
<TS version="2.1" language="de">
<context>
<name>GenericThings</name>
<message>
<source>Accuracy (decimal places)</source>
<extracomment>The name of the ParamType (ThingClass: moistureSensor, Type: settings, ID: {3c967a68-9951-4c9a-b019-79b913e762b6})
----------
The name of the ParamType (ThingClass: humiditySensor, Type: settings, ID: {38064841-6121-4862-a639-08fb0b778511})
----------
The name of the ParamType (ThingClass: temperatureSensor, Type: settings, ID: {3b543c3a-1fc0-45b5-8c07-600a6045f82e})</extracomment>
<translation>Genauigkeit</translation>
</message>
<message>
<source>Angle</source>
<extracomment>The name of the ParamType (ThingClass: venetianBlind, ActionType: angle, ID: {fcb700c4-5da8-4385-85b0-6616e807974e})
----------
The name of the ParamType (ThingClass: venetianBlind, EventType: angle, ID: {fcb700c4-5da8-4385-85b0-6616e807974e})
----------
The name of the StateType ({fcb700c4-5da8-4385-85b0-6616e807974e}) of ThingClass venetianBlind</extracomment>
<translation>Winkel</translation>
</message>
<message>
<source>Angle changed</source>
<extracomment>The name of the EventType ({fcb700c4-5da8-4385-85b0-6616e807974e}) of ThingClass venetianBlind</extracomment>
<translation>Winkel geändert</translation>
</message>
<message>
<source>Angle end to end time [MilliSecond]</source>
<extracomment>The name of the ParamType (ThingClass: venetianBlind, Type: thing, ID: {6c8340bf-7fd3-43e3-a75b-dfa2f6426e11})</extracomment>
<translation>End- zu Endwinkelzeit</translation>
</message>
<message>
<source>Close</source>
<extracomment>The name of the ActionType ({cf5303f1-67c7-4cef-b11c-eb9de6fc8a87}) of ThingClass shutter
----------
The name of the ActionType ({1c71f050-f6cb-4929-9c9d-7c262f77c143}) of ThingClass venetianBlind
----------
The name of the ActionType ({97d6351d-7440-47f3-bdba-a31bb15368ac}) of ThingClass extendedBlind
----------
The name of the ActionType ({86e9cf21-7487-47c4-b4be-4a940d7235fb}) of ThingClass blind
----------
The name of the ActionType ({53b5ba77-9a34-4cd6-ad24-fb01fc465f98}) of ThingClass awning</extracomment>
@ -20,6 +52,18 @@ The name of the ParamType (ThingClass: shutter, EventType: closingOutput, ID: {1
----------
The name of the StateType ({1c35df0e-4c41-455f-893a-0145377952a0}) of ThingClass shutter
----------
The name of the ParamType (ThingClass: venetianBlind, ActionType: closingOutput, ID: {84dd2fa1-85fe-47f3-9e32-e6083432d39c})
----------
The name of the ParamType (ThingClass: venetianBlind, EventType: closingOutput, ID: {84dd2fa1-85fe-47f3-9e32-e6083432d39c})
----------
The name of the StateType ({84dd2fa1-85fe-47f3-9e32-e6083432d39c}) of ThingClass venetianBlind
----------
The name of the ParamType (ThingClass: extendedBlind, ActionType: closingOutput, ID: {1a4a5839-a30d-4239-a124-63bfdc74a8f6})
----------
The name of the ParamType (ThingClass: extendedBlind, EventType: closingOutput, ID: {1a4a5839-a30d-4239-a124-63bfdc74a8f6})
----------
The name of the StateType ({1a4a5839-a30d-4239-a124-63bfdc74a8f6}) of ThingClass extendedBlind
----------
The name of the ParamType (ThingClass: blind, ActionType: closingOutput, ID: {9b673430-572d-4a9c-85d3-dafadbe541cd})
----------
The name of the ParamType (ThingClass: blind, EventType: closingOutput, ID: {9b673430-572d-4a9c-85d3-dafadbe541cd})
@ -31,21 +75,32 @@ The name of the ParamType (ThingClass: awning, ActionType: closingOutput, ID: {5
The name of the ParamType (ThingClass: awning, EventType: closingOutput, ID: {59bfd575-709f-4e43-9726-de26e6d4ca8b})
----------
The name of the StateType ({59bfd575-709f-4e43-9726-de26e6d4ca8b}) of ThingClass awning</extracomment>
<translation>Schließender Ausgang</translation>
<translation>Ausgang Schließen</translation>
</message>
<message>
<source>Closing output changed</source>
<extracomment>The name of the EventType ({1c35df0e-4c41-455f-893a-0145377952a0}) of ThingClass shutter
----------
The name of the EventType ({84dd2fa1-85fe-47f3-9e32-e6083432d39c}) of ThingClass venetianBlind
----------
The name of the EventType ({1a4a5839-a30d-4239-a124-63bfdc74a8f6}) of ThingClass extendedBlind
----------
The name of the EventType ({9b673430-572d-4a9c-85d3-dafadbe541cd}) of ThingClass blind
----------
The name of the EventType ({59bfd575-709f-4e43-9726-de26e6d4ca8b}) of ThingClass awning</extracomment>
<translation>Schließender Ausgang geändert</translation>
<translation>Ausgang Schließen geändert</translation>
</message>
<message>
<source>Closing time [MilliSecond]</source>
<extracomment>The name of the ParamType (ThingClass: venetianBlind, Type: thing, ID: {4c0bf07d-aaab-4f67-af65-00ceaefbaa84})
----------
The name of the ParamType (ThingClass: extendedBlind, Type: thing, ID: {27a95b8d-7f97-441b-a3be-0646c517cb06})</extracomment>
<translation>Schließdauer [Millisekunden]</translation>
</message>
<message>
<source>Generic Things</source>
<extracomment>The name of the plugin GenericThings ({b3188696-2585-4806-bf98-30ab576ce5c8})</extracomment>
<translation>Generische &quot;Things&quot;</translation>
<translation>Generische Dinge</translation>
</message>
<message>
<source>Generic awning</source>
@ -55,7 +110,12 @@ The name of the EventType ({59bfd575-709f-4e43-9726-de26e6d4ca8b}) of ThingClass
<message>
<source>Generic blind</source>
<extracomment>The name of the ThingClass ({17ee3657-6ad8-4ae2-8959-3cf66cec8d13})</extracomment>
<translation>Generischer Sichtschutz</translation>
<translation>Generische Beschattung</translation>
</message>
<message>
<source>Generic extended blind</source>
<extracomment>The name of the ThingClass ({40aa9f3c-a23c-4f7f-8786-fcf3554f3e19})</extracomment>
<translation>Generische erweiterte Beschattung</translation>
</message>
<message>
<source>Generic heating</source>
@ -65,7 +125,12 @@ The name of the EventType ({59bfd575-709f-4e43-9726-de26e6d4ca8b}) of ThingClass
<message>
<source>Generic humidity sensor</source>
<extracomment>The name of the ThingClass ({d295bc64-773c-42a9-83e2-80db5fa0d1ce})</extracomment>
<translation>Generischer Feuchtigkeitssensor</translation>
<translation>Generischer Luftfeuchtigkeitssensor</translation>
</message>
<message>
<source>Generic irrigation</source>
<extracomment>The name of the ThingClass ({d013b980-20d5-4791-9c4f-b411c39241d7})</extracomment>
<translation>Generische Bewässerung</translation>
</message>
<message>
<source>Generic light</source>
@ -80,259 +145,39 @@ The name of the EventType ({59bfd575-709f-4e43-9726-de26e6d4ca8b}) of ThingClass
<message>
<source>Generic power switch</source>
<extracomment>The name of the ThingClass ({57daa147-dd6f-4673-a757-d8f01a2054c7})</extracomment>
<translation>Generischer Ein-/Ausschalter</translation>
<translation>Generischer Schalter</translation>
</message>
<message>
<source>Generic shutter</source>
<extracomment>The name of the ThingClass ({7917c2e7-d7d2-4c47-a38d-41f7dd7693d9})</extracomment>
<translation>Gnerische Rollos</translation>
</message>
<message>
<source>Generic soil moisture sensor</source>
<extracomment>The name of the ThingClass ({33e610cf-ff30-481b-9f0b-d6857bcd41a5})</extracomment>
<translation>Generischer Erdfeuchtigkeitssensor</translation>
<translation>Gnerischer Erdbodenfeuchtesensor</translation>
</message>
<message>
<source>Generic temperature sensor</source>
<extracomment>The name of the ThingClass ({cf3d65db-6f68-457b-968c-cfb66cbd5311})</extracomment>
<translation>Generischer Temperatursensor</translation>
<translation>Gnerischer Temperaturesensor</translation>
</message>
<message>
<source>Generic ventilation</source>
<extracomment>The name of the ThingClass ({24af8dd3-ddf0-47f0-bf09-70fdfd8dceab})</extracomment>
<translation>Generische Lüftung</translation>
</message>
<message>
<source>Humidity</source>
<extracomment>The name of the ParamType (ThingClass: humiditySensor, EventType: humidity, ID: {925225d9-2965-444a-9c42-63c2873700fb})
----------
The name of the StateType ({925225d9-2965-444a-9c42-63c2873700fb}) of ThingClass humiditySensor</extracomment>
<translation>Luftfeuchtigkeit</translation>
<translation>Luftfeuchte</translation>
</message>
<message>
<source>Humidity changed</source>
<extracomment>The name of the EventType ({925225d9-2965-444a-9c42-63c2873700fb}) of ThingClass humiditySensor</extracomment>
<translation>Luftfeuchtigkeit geändert</translation>
</message>
<message>
<source>Maximum humidity</source>
<extracomment>The name of the ParamType (ThingClass: humiditySensor, Type: settings, ID: {10afc387-68d1-47ea-a816-0d1acad47b3c})</extracomment>
<translation>Maximale Luftfeuchtigkeit</translation>
</message>
<message>
<source>Maximum moisture</source>
<extracomment>The name of the ParamType (ThingClass: moistureSensor, Type: settings, ID: {3426817d-065e-4cfc-aa21-bb434de684d6})</extracomment>
<translation>Maximale Feuchtigkeit</translation>
</message>
<message>
<source>Maximum temperature</source>
<extracomment>The name of the ParamType (ThingClass: temperatureSensor, Type: settings, ID: {8b5947ab-127f-4995-853b-eeeb628811e3})</extracomment>
<translation>Maximale Temperatur</translation>
</message>
<message>
<source>Minimum humidity</source>
<extracomment>The name of the ParamType (ThingClass: humiditySensor, Type: settings, ID: {0218ffa9-3d49-4b25-a59f-c8831f190432})</extracomment>
<translation>Minimale Luftfeuchtigkeit</translation>
</message>
<message>
<source>Minimum moisture</source>
<extracomment>The name of the ParamType (ThingClass: moistureSensor, Type: settings, ID: {32153786-f1ae-4aa4-a84c-b9054102eb92})</extracomment>
<translation>Minimale Feuchtigkeit</translation>
</message>
<message>
<source>Minimum temperature</source>
<extracomment>The name of the ParamType (ThingClass: temperatureSensor, Type: settings, ID: {c86ae5d3-9335-4b6e-8231-bf3ed6670dff})</extracomment>
<translation>Maximale Temperatur</translation>
</message>
<message>
<source>Open</source>
<extracomment>The name of the ActionType ({9deb662d-2378-4345-a898-8742d41e43c1}) of ThingClass shutter
----------
The name of the ActionType ({120dc265-dbbb-4f19-9d31-c372c23479c0}) of ThingClass blind
----------
The name of the ActionType ({979e9c51-5a93-4635-85e3-01874306b229}) of ThingClass awning</extracomment>
<translation>Geöffnet</translation>
</message>
<message>
<source>Opening output</source>
<extracomment>The name of the ParamType (ThingClass: shutter, ActionType: openingOutput, ID: {cc547728-b309-4695-b355-49748ef2521c})
----------
The name of the ParamType (ThingClass: shutter, EventType: openingOutput, ID: {cc547728-b309-4695-b355-49748ef2521c})
----------
The name of the StateType ({cc547728-b309-4695-b355-49748ef2521c}) of ThingClass shutter
----------
The name of the ParamType (ThingClass: blind, ActionType: openingOutput, ID: {b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b})
----------
The name of the ParamType (ThingClass: blind, EventType: openingOutput, ID: {b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b})
----------
The name of the StateType ({b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b}) of ThingClass blind
----------
The name of the ParamType (ThingClass: awning, ActionType: openingOutput, ID: {4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4})
----------
The name of the ParamType (ThingClass: awning, EventType: openingOutput, ID: {4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4})
----------
The name of the StateType ({4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4}) of ThingClass awning</extracomment>
<translation>Öffnender Ausgang</translation>
</message>
<message>
<source>Opening output changed</source>
<extracomment>The name of the EventType ({cc547728-b309-4695-b355-49748ef2521c}) of ThingClass shutter
----------
The name of the EventType ({b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b}) of ThingClass blind
----------
The name of the EventType ({4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4}) of ThingClass awning</extracomment>
<translation>Öffnender Ausgang geändert</translation>
</message>
<message>
<source>Power</source>
<extracomment>The name of the ParamType (ThingClass: irrigation, ActionType: power, ID: {0212a287-c5ae-4644-8803-adfdd8caeb9a})
----------
The name of the ParamType (ThingClass: irrigation, EventType: power, ID: {0212a287-c5ae-4644-8803-adfdd8caeb9a})
----------
The name of the StateType ({0212a287-c5ae-4644-8803-adfdd8caeb9a}) of ThingClass irrigation
----------
The name of the ParamType (ThingClass: powerSwitch, ActionType: power, ID: {08087af6-6a3b-4e4a-ac6d-56f23ce63edf})
----------
The name of the ParamType (ThingClass: powerSwitch, EventType: power, ID: {08087af6-6a3b-4e4a-ac6d-56f23ce63edf})
----------
The name of the StateType ({08087af6-6a3b-4e4a-ac6d-56f23ce63edf}) of ThingClass powerSwitch
----------
The name of the ParamType (ThingClass: heating, ActionType: power, ID: {409b635e-a754-4b5c-b3f0-d1c5a0fb3f03})
----------
The name of the ParamType (ThingClass: heating, EventType: power, ID: {409b635e-a754-4b5c-b3f0-d1c5a0fb3f03})
----------
The name of the StateType ({409b635e-a754-4b5c-b3f0-d1c5a0fb3f03}) of ThingClass heating
----------
The name of the ParamType (ThingClass: light, ActionType: power, ID: {8b6e4a67-6522-408b-b676-8d2f09ed2d54})
----------
The name of the ParamType (ThingClass: light, EventType: power, ID: {8b6e4a67-6522-408b-b676-8d2f09ed2d54})
----------
The name of the StateType ({8b6e4a67-6522-408b-b676-8d2f09ed2d54}) of ThingClass light
----------
The name of the ParamType (ThingClass: socket, ActionType: power, ID: {018038d7-1d02-4b17-8fe3-babca044b087})
----------
The name of the ParamType (ThingClass: socket, EventType: power, ID: {018038d7-1d02-4b17-8fe3-babca044b087})
----------
The name of the StateType ({018038d7-1d02-4b17-8fe3-babca044b087}) of ThingClass socket</extracomment>
<translation>Einschalten</translation>
</message>
<message>
<source>Power changed</source>
<extracomment>The name of the EventType ({409b635e-a754-4b5c-b3f0-d1c5a0fb3f03}) of ThingClass heating
----------
The name of the EventType ({8b6e4a67-6522-408b-b676-8d2f09ed2d54}) of ThingClass light
----------
The name of the EventType ({018038d7-1d02-4b17-8fe3-babca044b087}) of ThingClass socket</extracomment>
<translation>Ein- oder ausgeschaltet</translation>
</message>
<message>
<source>Power on/off</source>
<extracomment>The name of the ActionType ({08087af6-6a3b-4e4a-ac6d-56f23ce63edf}) of ThingClass powerSwitch</extracomment>
<translation>Ein- oder ausschalten</translation>
</message>
<message>
<source>Powered on/off</source>
<extracomment>The name of the EventType ({08087af6-6a3b-4e4a-ac6d-56f23ce63edf}) of ThingClass powerSwitch</extracomment>
<translation>Ein- oder ausgeschaltet</translation>
</message>
<message>
<source>Set power</source>
<extracomment>The name of the ActionType ({409b635e-a754-4b5c-b3f0-d1c5a0fb3f03}) of ThingClass heating
----------
The name of the ActionType ({8b6e4a67-6522-408b-b676-8d2f09ed2d54}) of ThingClass light
----------
The name of the ActionType ({018038d7-1d02-4b17-8fe3-babca044b087}) of ThingClass socket</extracomment>
<translation>Ein- oder ausschalten</translation>
</message>
<message>
<source>Soil moisture</source>
<extracomment>The name of the ParamType (ThingClass: moistureSensor, EventType: moisture, ID: {7a62e1d2-92f2-424c-876c-870478a4b2bd})
----------
The name of the StateType ({7a62e1d2-92f2-424c-876c-870478a4b2bd}) of ThingClass moistureSensor</extracomment>
<translation>Feuchtigkeit</translation>
</message>
<message>
<source>Soil moisture changed</source>
<extracomment>The name of the EventType ({7a62e1d2-92f2-424c-876c-870478a4b2bd}) of ThingClass moistureSensor</extracomment>
<translation>Feuchtigkeit geändert</translation>
</message>
<message>
<source>Status</source>
<extracomment>The name of the ParamType (ThingClass: shutter, EventType: status, ID: {6d6e72dc-4d2b-4ec1-82c2-54405a682711})
----------
The name of the StateType ({6d6e72dc-4d2b-4ec1-82c2-54405a682711}) of ThingClass shutter
----------
The name of the ParamType (ThingClass: blind, EventType: status, ID: {5fdec1e0-51f6-48b9-b743-ba572504b2c1})
----------
The name of the StateType ({5fdec1e0-51f6-48b9-b743-ba572504b2c1}) of ThingClass blind
----------
The name of the ParamType (ThingClass: awning, EventType: status, ID: {ff6f2565-2a2e-4d34-b10f-d3f73b676399})
----------
The name of the StateType ({ff6f2565-2a2e-4d34-b10f-d3f73b676399}) of ThingClass awning</extracomment>
<translation>Zustand</translation>
</message>
<message>
<source>Status changed</source>
<extracomment>The name of the EventType ({6d6e72dc-4d2b-4ec1-82c2-54405a682711}) of ThingClass shutter
----------
The name of the EventType ({5fdec1e0-51f6-48b9-b743-ba572504b2c1}) of ThingClass blind
----------
The name of the EventType ({ff6f2565-2a2e-4d34-b10f-d3f73b676399}) of ThingClass awning</extracomment>
<translation>Zustand geändert</translation>
</message>
<message>
<source>Stop</source>
<extracomment>The name of the ActionType ({db5f3332-1f4e-4f9e-84d2-93c5d7de315c}) of ThingClass shutter
----------
The name of the ActionType ({1a924c9a-5dcb-4b1c-8fd6-ab101098e007}) of ThingClass blind
----------
The name of the ActionType ({555cafe4-bd12-42c6-bab1-8cd59af6468e}) of ThingClass awning</extracomment>
<translation>Stop</translation>
</message>
<message>
<source>Temperature</source>
<extracomment>The name of the ParamType (ThingClass: temperatureSensor, EventType: temperature, ID: {d0b6c4be-339e-4b0f-a234-0611b7565395})
----------
The name of the StateType ({d0b6c4be-339e-4b0f-a234-0611b7565395}) of ThingClass temperatureSensor</extracomment>
<translation>Temperatur</translation>
</message>
<message>
<source>Temperature changed</source>
<extracomment>The name of the EventType ({d0b6c4be-339e-4b0f-a234-0611b7565395}) of ThingClass temperatureSensor</extracomment>
<translation>Temperatur geändert</translation>
</message>
<message>
<source>nymea</source>
<extracomment>The name of the vendor ({2062d64d-3232-433c-88bc-0d33c0ba2ba6})</extracomment>
<translation>nymea</translation>
</message>
<message>
<source>Generic shutter</source>
<extracomment>The name of the ThingClass ({7917c2e7-d7d2-4c47-a38d-41f7dd7693d9})</extracomment>
<translation>Generischer Rolladen</translation>
</message>
<message>
<source>Generic irrigation</source>
<extracomment>The name of the ThingClass ({d013b980-20d5-4791-9c4f-b411c39241d7})</extracomment>
<translation>Generische Bewässerung</translation>
</message>
<message>
<source>Set closing output</source>
<extracomment>The name of the ActionType ({1c35df0e-4c41-455f-893a-0145377952a0}) of ThingClass shutter
----------
The name of the ActionType ({9b673430-572d-4a9c-85d3-dafadbe541cd}) of ThingClass blind
----------
The name of the ActionType ({59bfd575-709f-4e43-9726-de26e6d4ca8b}) of ThingClass awning</extracomment>
<translation>Setze schließenden Ausgang</translation>
</message>
<message>
<source>Set opening output</source>
<extracomment>The name of the ActionType ({cc547728-b309-4695-b355-49748ef2521c}) of ThingClass shutter
----------
The name of the ActionType ({b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b}) of ThingClass blind
----------
The name of the ActionType ({4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4}) of ThingClass awning</extracomment>
<translation>Setze öffnenden Ausgang</translation>
</message>
<message>
<source>Turn on or off</source>
<extracomment>The name of the ActionType ({0212a287-c5ae-4644-8803-adfdd8caeb9a}) of ThingClass irrigation</extracomment>
<translation>Ein- oder ausschalten</translation>
</message>
<message>
<source>Turned on or off</source>
<extracomment>The name of the EventType ({0212a287-c5ae-4644-8803-adfdd8caeb9a}) of ThingClass irrigation</extracomment>
<translation>Ein- oder ausgeschaltet</translation>
<translation>Luftfeuchte geändert</translation>
</message>
<message>
<source>Input value</source>
@ -364,6 +209,211 @@ The name of the EventType ({a8223e65-e704-4f84-9bbe-d8fc42597047}) of ThingClass
The name of the EventType ({fed37466-1264-4ac1-84fd-aff3a1f7ff04}) of ThingClass temperatureSensor</extracomment>
<translation>Eingangswert geändert</translation>
</message>
<message>
<source>Maximum humidity</source>
<extracomment>The name of the ParamType (ThingClass: humiditySensor, Type: settings, ID: {10afc387-68d1-47ea-a816-0d1acad47b3c})</extracomment>
<translation>Maximale Luftfeuchte</translation>
</message>
<message>
<source>Maximum moisture</source>
<extracomment>The name of the ParamType (ThingClass: moistureSensor, Type: settings, ID: {3426817d-065e-4cfc-aa21-bb434de684d6})</extracomment>
<translation>Maximale Erdbodenfeuchte</translation>
</message>
<message>
<source>Maximum temperature</source>
<extracomment>The name of the ParamType (ThingClass: temperatureSensor, Type: settings, ID: {8b5947ab-127f-4995-853b-eeeb628811e3})</extracomment>
<translation>Maximale Temperatur</translation>
</message>
<message>
<source>Minimum humidity</source>
<extracomment>The name of the ParamType (ThingClass: humiditySensor, Type: settings, ID: {0218ffa9-3d49-4b25-a59f-c8831f190432})</extracomment>
<translation>Minimale Luftfeuchtigkeit</translation>
</message>
<message>
<source>Minimum moisture</source>
<extracomment>The name of the ParamType (ThingClass: moistureSensor, Type: settings, ID: {32153786-f1ae-4aa4-a84c-b9054102eb92})</extracomment>
<translation>Minimale Erdbodenfeuchte</translation>
</message>
<message>
<source>Minimum temperature</source>
<extracomment>The name of the ParamType (ThingClass: temperatureSensor, Type: settings, ID: {c86ae5d3-9335-4b6e-8231-bf3ed6670dff})</extracomment>
<translation>Minimale Temperatur</translation>
</message>
<message>
<source>Moving</source>
<extracomment>The name of the ParamType (ThingClass: venetianBlind, EventType: moving, ID: {6234c07e-4200-4f2c-8cbd-bff24c38c243})
----------
The name of the StateType ({6234c07e-4200-4f2c-8cbd-bff24c38c243}) of ThingClass venetianBlind
----------
The name of the ParamType (ThingClass: extendedBlind, EventType: moving, ID: {941d1e1f-8dd7-4493-812f-6cefefd88c2e})
----------
The name of the StateType ({941d1e1f-8dd7-4493-812f-6cefefd88c2e}) of ThingClass extendedBlind</extracomment>
<translation>Bewegung</translation>
</message>
<message>
<source>Moving changed</source>
<extracomment>The name of the EventType ({6234c07e-4200-4f2c-8cbd-bff24c38c243}) of ThingClass venetianBlind
----------
The name of the EventType ({941d1e1f-8dd7-4493-812f-6cefefd88c2e}) of ThingClass extendedBlind</extracomment>
<translation>Bewegung geändert</translation>
</message>
<message>
<source>Open</source>
<extracomment>The name of the ActionType ({9deb662d-2378-4345-a898-8742d41e43c1}) of ThingClass shutter
----------
The name of the ActionType ({3e728e50-3d45-4035-b215-1e604cf3159b}) of ThingClass venetianBlind
----------
The name of the ActionType ({5a7599fa-8351-4ed6-9b98-fa2f3be54304}) of ThingClass extendedBlind
----------
The name of the ActionType ({120dc265-dbbb-4f19-9d31-c372c23479c0}) of ThingClass blind
----------
The name of the ActionType ({979e9c51-5a93-4635-85e3-01874306b229}) of ThingClass awning</extracomment>
<translation></translation>
</message>
<message>
<source>Opening output</source>
<extracomment>The name of the ParamType (ThingClass: shutter, ActionType: openingOutput, ID: {cc547728-b309-4695-b355-49748ef2521c})
----------
The name of the ParamType (ThingClass: shutter, EventType: openingOutput, ID: {cc547728-b309-4695-b355-49748ef2521c})
----------
The name of the StateType ({cc547728-b309-4695-b355-49748ef2521c}) of ThingClass shutter
----------
The name of the ParamType (ThingClass: venetianBlind, ActionType: openingOutput, ID: {6041dacf-5303-4dc0-ba3c-7ecaa438f2dd})
----------
The name of the ParamType (ThingClass: venetianBlind, EventType: openingOutput, ID: {6041dacf-5303-4dc0-ba3c-7ecaa438f2dd})
----------
The name of the StateType ({6041dacf-5303-4dc0-ba3c-7ecaa438f2dd}) of ThingClass venetianBlind
----------
The name of the ParamType (ThingClass: extendedBlind, ActionType: openingOutput, ID: {e559f077-e904-4bbc-8ec3-344b814d2eab})
----------
The name of the ParamType (ThingClass: extendedBlind, EventType: openingOutput, ID: {e559f077-e904-4bbc-8ec3-344b814d2eab})
----------
The name of the StateType ({e559f077-e904-4bbc-8ec3-344b814d2eab}) of ThingClass extendedBlind
----------
The name of the ParamType (ThingClass: blind, ActionType: openingOutput, ID: {b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b})
----------
The name of the ParamType (ThingClass: blind, EventType: openingOutput, ID: {b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b})
----------
The name of the StateType ({b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b}) of ThingClass blind
----------
The name of the ParamType (ThingClass: awning, ActionType: openingOutput, ID: {4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4})
----------
The name of the ParamType (ThingClass: awning, EventType: openingOutput, ID: {4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4})
----------
The name of the StateType ({4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4}) of ThingClass awning</extracomment>
<translation>Öffungsausgang geändert</translation>
</message>
<message>
<source>Opening output changed</source>
<extracomment>The name of the EventType ({cc547728-b309-4695-b355-49748ef2521c}) of ThingClass shutter
----------
The name of the EventType ({6041dacf-5303-4dc0-ba3c-7ecaa438f2dd}) of ThingClass venetianBlind
----------
The name of the EventType ({e559f077-e904-4bbc-8ec3-344b814d2eab}) of ThingClass extendedBlind
----------
The name of the EventType ({b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b}) of ThingClass blind
----------
The name of the EventType ({4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4}) of ThingClass awning</extracomment>
<translation>Öffnungsausgang geändert</translation>
</message>
<message>
<source>Percentage</source>
<extracomment>The name of the ParamType (ThingClass: venetianBlind, ActionType: percentage, ID: {33dc8019-336d-4d50-8d60-dff8508338ca})
----------
The name of the ParamType (ThingClass: venetianBlind, EventType: percentage, ID: {33dc8019-336d-4d50-8d60-dff8508338ca})
----------
The name of the StateType ({33dc8019-336d-4d50-8d60-dff8508338ca}) of ThingClass venetianBlind
----------
The name of the ParamType (ThingClass: extendedBlind, ActionType: percentage, ID: {181df603-d45f-4d3d-a358-97aa3e4ac0bd})
----------
The name of the ParamType (ThingClass: extendedBlind, EventType: percentage, ID: {181df603-d45f-4d3d-a358-97aa3e4ac0bd})
----------
The name of the StateType ({181df603-d45f-4d3d-a358-97aa3e4ac0bd}) of ThingClass extendedBlind</extracomment>
<translation>Prozent</translation>
</message>
<message>
<source>Percentage changed</source>
<extracomment>The name of the EventType ({33dc8019-336d-4d50-8d60-dff8508338ca}) of ThingClass venetianBlind
----------
The name of the EventType ({181df603-d45f-4d3d-a358-97aa3e4ac0bd}) of ThingClass extendedBlind</extracomment>
<translation>Prozent geändert</translation>
</message>
<message>
<source>Power</source>
<extracomment>The name of the ParamType (ThingClass: ventilation, ActionType: power, ID: {846711b7-ea5a-4c66-a267-001c60406509})
----------
The name of the ParamType (ThingClass: ventilation, EventType: power, ID: {846711b7-ea5a-4c66-a267-001c60406509})
----------
The name of the StateType ({846711b7-ea5a-4c66-a267-001c60406509}) of ThingClass ventilation
----------
The name of the ParamType (ThingClass: irrigation, ActionType: power, ID: {0212a287-c5ae-4644-8803-adfdd8caeb9a})
----------
The name of the ParamType (ThingClass: irrigation, EventType: power, ID: {0212a287-c5ae-4644-8803-adfdd8caeb9a})
----------
The name of the StateType ({0212a287-c5ae-4644-8803-adfdd8caeb9a}) of ThingClass irrigation
----------
The name of the ParamType (ThingClass: powerSwitch, ActionType: power, ID: {08087af6-6a3b-4e4a-ac6d-56f23ce63edf})
----------
The name of the ParamType (ThingClass: powerSwitch, EventType: power, ID: {08087af6-6a3b-4e4a-ac6d-56f23ce63edf})
----------
The name of the StateType ({08087af6-6a3b-4e4a-ac6d-56f23ce63edf}) of ThingClass powerSwitch
----------
The name of the ParamType (ThingClass: heating, ActionType: power, ID: {409b635e-a754-4b5c-b3f0-d1c5a0fb3f03})
----------
The name of the ParamType (ThingClass: heating, EventType: power, ID: {409b635e-a754-4b5c-b3f0-d1c5a0fb3f03})
----------
The name of the StateType ({409b635e-a754-4b5c-b3f0-d1c5a0fb3f03}) of ThingClass heating
----------
The name of the ParamType (ThingClass: light, ActionType: power, ID: {8b6e4a67-6522-408b-b676-8d2f09ed2d54})
----------
The name of the ParamType (ThingClass: light, EventType: power, ID: {8b6e4a67-6522-408b-b676-8d2f09ed2d54})
----------
The name of the StateType ({8b6e4a67-6522-408b-b676-8d2f09ed2d54}) of ThingClass light
----------
The name of the ParamType (ThingClass: socket, ActionType: power, ID: {018038d7-1d02-4b17-8fe3-babca044b087})
----------
The name of the ParamType (ThingClass: socket, EventType: power, ID: {018038d7-1d02-4b17-8fe3-babca044b087})
----------
The name of the StateType ({018038d7-1d02-4b17-8fe3-babca044b087}) of ThingClass socket</extracomment>
<translation>Eingeschalten</translation>
</message>
<message>
<source>Power changed</source>
<extracomment>The name of the EventType ({409b635e-a754-4b5c-b3f0-d1c5a0fb3f03}) of ThingClass heating
----------
The name of the EventType ({8b6e4a67-6522-408b-b676-8d2f09ed2d54}) of ThingClass light
----------
The name of the EventType ({018038d7-1d02-4b17-8fe3-babca044b087}) of ThingClass socket</extracomment>
<translation>Eingeschalten geändert</translation>
</message>
<message>
<source>Power on/off</source>
<extracomment>The name of the ActionType ({08087af6-6a3b-4e4a-ac6d-56f23ce63edf}) of ThingClass powerSwitch</extracomment>
<translation>Eingeschalten Ein/Aus</translation>
</message>
<message>
<source>Powered on/off</source>
<extracomment>The name of the EventType ({08087af6-6a3b-4e4a-ac6d-56f23ce63edf}) of ThingClass powerSwitch</extracomment>
<translation>Eingeschalten Ein/Aus</translation>
</message>
<message>
<source>Set angle</source>
<extracomment>The name of the ActionType ({fcb700c4-5da8-4385-85b0-6616e807974e}) of ThingClass venetianBlind</extracomment>
<translation>Setzte Winkel</translation>
</message>
<message>
<source>Set closing output</source>
<extracomment>The name of the ActionType ({1c35df0e-4c41-455f-893a-0145377952a0}) of ThingClass shutter
----------
The name of the ActionType ({84dd2fa1-85fe-47f3-9e32-e6083432d39c}) of ThingClass venetianBlind
----------
The name of the ActionType ({1a4a5839-a30d-4239-a124-63bfdc74a8f6}) of ThingClass extendedBlind
----------
The name of the ActionType ({9b673430-572d-4a9c-85d3-dafadbe541cd}) of ThingClass blind
----------
The name of the ActionType ({59bfd575-709f-4e43-9726-de26e6d4ca8b}) of ThingClass awning</extracomment>
<translation>Setze Schließausgang</translation>
</message>
<message>
<source>Set input value</source>
<extracomment>The name of the ActionType ({ce64a425-d990-4fc1-966b-be6de445792b}) of ThingClass moistureSensor
@ -374,13 +424,130 @@ The name of the ActionType ({fed37466-1264-4ac1-84fd-aff3a1f7ff04}) of ThingClas
<translation>Setze Eingangswert</translation>
</message>
<message>
<source>Accuracy (decimal places)</source>
<extracomment>The name of the ParamType (ThingClass: moistureSensor, Type: settings, ID: {3c967a68-9951-4c9a-b019-79b913e762b6})
<source>Set opening output</source>
<extracomment>The name of the ActionType ({cc547728-b309-4695-b355-49748ef2521c}) of ThingClass shutter
----------
The name of the ParamType (ThingClass: humiditySensor, Type: settings, ID: {38064841-6121-4862-a639-08fb0b778511})
The name of the ActionType ({6041dacf-5303-4dc0-ba3c-7ecaa438f2dd}) of ThingClass venetianBlind
----------
The name of the ParamType (ThingClass: temperatureSensor, Type: settings, ID: {3b543c3a-1fc0-45b5-8c07-600a6045f82e})</extracomment>
<translation>Genauigkeit (Nachkommastellen)</translation>
The name of the ActionType ({e559f077-e904-4bbc-8ec3-344b814d2eab}) of ThingClass extendedBlind
----------
The name of the ActionType ({b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b}) of ThingClass blind
----------
The name of the ActionType ({4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4}) of ThingClass awning</extracomment>
<translation>Setze Öffnungsausgang</translation>
</message>
<message>
<source>Set percentage</source>
<extracomment>The name of the ActionType ({33dc8019-336d-4d50-8d60-dff8508338ca}) of ThingClass venetianBlind
----------
The name of the ActionType ({181df603-d45f-4d3d-a358-97aa3e4ac0bd}) of ThingClass extendedBlind</extracomment>
<translation>Setze Prozent</translation>
</message>
<message>
<source>Set power</source>
<extracomment>The name of the ActionType ({409b635e-a754-4b5c-b3f0-d1c5a0fb3f03}) of ThingClass heating
----------
The name of the ActionType ({8b6e4a67-6522-408b-b676-8d2f09ed2d54}) of ThingClass light
----------
The name of the ActionType ({018038d7-1d02-4b17-8fe3-babca044b087}) of ThingClass socket</extracomment>
<translation>Setze Eingeschalten</translation>
</message>
<message>
<source>Soil moisture</source>
<extracomment>The name of the ParamType (ThingClass: moistureSensor, EventType: moisture, ID: {7a62e1d2-92f2-424c-876c-870478a4b2bd})
----------
The name of the StateType ({7a62e1d2-92f2-424c-876c-870478a4b2bd}) of ThingClass moistureSensor</extracomment>
<translation>Erdbodenfeuchte</translation>
</message>
<message>
<source>Soil moisture changed</source>
<extracomment>The name of the EventType ({7a62e1d2-92f2-424c-876c-870478a4b2bd}) of ThingClass moistureSensor</extracomment>
<translation>Erdbodenfeuchte geändert</translation>
</message>
<message>
<source>Status</source>
<extracomment>The name of the ParamType (ThingClass: shutter, EventType: status, ID: {6d6e72dc-4d2b-4ec1-82c2-54405a682711})
----------
The name of the StateType ({6d6e72dc-4d2b-4ec1-82c2-54405a682711}) of ThingClass shutter
----------
The name of the ParamType (ThingClass: venetianBlind, EventType: status, ID: {6fb7826e-b6d8-42f8-b712-719496046436})
----------
The name of the StateType ({6fb7826e-b6d8-42f8-b712-719496046436}) of ThingClass venetianBlind
----------
The name of the ParamType (ThingClass: extendedBlind, EventType: status, ID: {c2354d7e-198a-43ae-aa5f-c6710010c7e1})
----------
The name of the StateType ({c2354d7e-198a-43ae-aa5f-c6710010c7e1}) of ThingClass extendedBlind
----------
The name of the ParamType (ThingClass: blind, EventType: status, ID: {5fdec1e0-51f6-48b9-b743-ba572504b2c1})
----------
The name of the StateType ({5fdec1e0-51f6-48b9-b743-ba572504b2c1}) of ThingClass blind
----------
The name of the ParamType (ThingClass: awning, EventType: status, ID: {ff6f2565-2a2e-4d34-b10f-d3f73b676399})
----------
The name of the StateType ({ff6f2565-2a2e-4d34-b10f-d3f73b676399}) of ThingClass awning</extracomment>
<translation>Status</translation>
</message>
<message>
<source>Status changed</source>
<extracomment>The name of the EventType ({6d6e72dc-4d2b-4ec1-82c2-54405a682711}) of ThingClass shutter
----------
The name of the EventType ({6fb7826e-b6d8-42f8-b712-719496046436}) of ThingClass venetianBlind
----------
The name of the EventType ({c2354d7e-198a-43ae-aa5f-c6710010c7e1}) of ThingClass extendedBlind
----------
The name of the EventType ({5fdec1e0-51f6-48b9-b743-ba572504b2c1}) of ThingClass blind
----------
The name of the EventType ({ff6f2565-2a2e-4d34-b10f-d3f73b676399}) of ThingClass awning</extracomment>
<translation>Status geändert</translation>
</message>
<message>
<source>Stop</source>
<extracomment>The name of the ActionType ({db5f3332-1f4e-4f9e-84d2-93c5d7de315c}) of ThingClass shutter
----------
The name of the ActionType ({6e3eeb5d-d7ed-4175-9795-e76451e0a00b}) of ThingClass venetianBlind
----------
The name of the ActionType ({ab67e4bf-c7b6-489b-9b49-3e0a1c7d33ca}) of ThingClass extendedBlind
----------
The name of the ActionType ({1a924c9a-5dcb-4b1c-8fd6-ab101098e007}) of ThingClass blind
----------
The name of the ActionType ({555cafe4-bd12-42c6-bab1-8cd59af6468e}) of ThingClass awning</extracomment>
<translation>Stop</translation>
</message>
<message>
<source>Temperature</source>
<extracomment>The name of the ParamType (ThingClass: temperatureSensor, EventType: temperature, ID: {d0b6c4be-339e-4b0f-a234-0611b7565395})
----------
The name of the StateType ({d0b6c4be-339e-4b0f-a234-0611b7565395}) of ThingClass temperatureSensor</extracomment>
<translation>Temperatur</translation>
</message>
<message>
<source>Temperature changed</source>
<extracomment>The name of the EventType ({d0b6c4be-339e-4b0f-a234-0611b7565395}) of ThingClass temperatureSensor</extracomment>
<translation>Temperatur geändert</translation>
</message>
<message>
<source>Turn on or off</source>
<extracomment>The name of the ActionType ({846711b7-ea5a-4c66-a267-001c60406509}) of ThingClass ventilation
----------
The name of the ActionType ({0212a287-c5ae-4644-8803-adfdd8caeb9a}) of ThingClass irrigation</extracomment>
<translation>Schalte ein oder aus</translation>
</message>
<message>
<source>Turned on or off</source>
<extracomment>The name of the EventType ({846711b7-ea5a-4c66-a267-001c60406509}) of ThingClass ventilation
----------
The name of the EventType ({0212a287-c5ae-4644-8803-adfdd8caeb9a}) of ThingClass irrigation</extracomment>
<translation>Ein- oder Ausgeschalten</translation>
</message>
<message>
<source>Venetian blind</source>
<extracomment>The name of the ThingClass ({e6b96ced-8d50-45da-91c8-792d364d2795})</extracomment>
<translation>Jalousie</translation>
</message>
<message>
<source>nymea</source>
<extracomment>The name of the vendor ({2062d64d-3232-433c-88bc-0d33c0ba2ba6})</extracomment>
<translation>nymea</translation>
</message>
</context>
</TS>

View File

@ -3,10 +3,42 @@
<TS version="2.1">
<context>
<name>GenericThings</name>
<message>
<source>Accuracy (decimal places)</source>
<extracomment>The name of the ParamType (ThingClass: moistureSensor, Type: settings, ID: {3c967a68-9951-4c9a-b019-79b913e762b6})
----------
The name of the ParamType (ThingClass: humiditySensor, Type: settings, ID: {38064841-6121-4862-a639-08fb0b778511})
----------
The name of the ParamType (ThingClass: temperatureSensor, Type: settings, ID: {3b543c3a-1fc0-45b5-8c07-600a6045f82e})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Angle</source>
<extracomment>The name of the ParamType (ThingClass: venetianBlind, ActionType: angle, ID: {fcb700c4-5da8-4385-85b0-6616e807974e})
----------
The name of the ParamType (ThingClass: venetianBlind, EventType: angle, ID: {fcb700c4-5da8-4385-85b0-6616e807974e})
----------
The name of the StateType ({fcb700c4-5da8-4385-85b0-6616e807974e}) of ThingClass venetianBlind</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Angle changed</source>
<extracomment>The name of the EventType ({fcb700c4-5da8-4385-85b0-6616e807974e}) of ThingClass venetianBlind</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Angle end to end time [MilliSecond]</source>
<extracomment>The name of the ParamType (ThingClass: venetianBlind, Type: thing, ID: {6c8340bf-7fd3-43e3-a75b-dfa2f6426e11})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Close</source>
<extracomment>The name of the ActionType ({cf5303f1-67c7-4cef-b11c-eb9de6fc8a87}) of ThingClass shutter
----------
The name of the ActionType ({1c71f050-f6cb-4929-9c9d-7c262f77c143}) of ThingClass venetianBlind
----------
The name of the ActionType ({97d6351d-7440-47f3-bdba-a31bb15368ac}) of ThingClass extendedBlind
----------
The name of the ActionType ({86e9cf21-7487-47c4-b4be-4a940d7235fb}) of ThingClass blind
----------
The name of the ActionType ({53b5ba77-9a34-4cd6-ad24-fb01fc465f98}) of ThingClass awning</extracomment>
@ -20,6 +52,18 @@ The name of the ParamType (ThingClass: shutter, EventType: closingOutput, ID: {1
----------
The name of the StateType ({1c35df0e-4c41-455f-893a-0145377952a0}) of ThingClass shutter
----------
The name of the ParamType (ThingClass: venetianBlind, ActionType: closingOutput, ID: {84dd2fa1-85fe-47f3-9e32-e6083432d39c})
----------
The name of the ParamType (ThingClass: venetianBlind, EventType: closingOutput, ID: {84dd2fa1-85fe-47f3-9e32-e6083432d39c})
----------
The name of the StateType ({84dd2fa1-85fe-47f3-9e32-e6083432d39c}) of ThingClass venetianBlind
----------
The name of the ParamType (ThingClass: extendedBlind, ActionType: closingOutput, ID: {1a4a5839-a30d-4239-a124-63bfdc74a8f6})
----------
The name of the ParamType (ThingClass: extendedBlind, EventType: closingOutput, ID: {1a4a5839-a30d-4239-a124-63bfdc74a8f6})
----------
The name of the StateType ({1a4a5839-a30d-4239-a124-63bfdc74a8f6}) of ThingClass extendedBlind
----------
The name of the ParamType (ThingClass: blind, ActionType: closingOutput, ID: {9b673430-572d-4a9c-85d3-dafadbe541cd})
----------
The name of the ParamType (ThingClass: blind, EventType: closingOutput, ID: {9b673430-572d-4a9c-85d3-dafadbe541cd})
@ -37,11 +81,22 @@ The name of the StateType ({59bfd575-709f-4e43-9726-de26e6d4ca8b}) of ThingClass
<source>Closing output changed</source>
<extracomment>The name of the EventType ({1c35df0e-4c41-455f-893a-0145377952a0}) of ThingClass shutter
----------
The name of the EventType ({84dd2fa1-85fe-47f3-9e32-e6083432d39c}) of ThingClass venetianBlind
----------
The name of the EventType ({1a4a5839-a30d-4239-a124-63bfdc74a8f6}) of ThingClass extendedBlind
----------
The name of the EventType ({9b673430-572d-4a9c-85d3-dafadbe541cd}) of ThingClass blind
----------
The name of the EventType ({59bfd575-709f-4e43-9726-de26e6d4ca8b}) of ThingClass awning</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Closing time [MilliSecond]</source>
<extracomment>The name of the ParamType (ThingClass: venetianBlind, Type: thing, ID: {4c0bf07d-aaab-4f67-af65-00ceaefbaa84})
----------
The name of the ParamType (ThingClass: extendedBlind, Type: thing, ID: {27a95b8d-7f97-441b-a3be-0646c517cb06})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Generic Things</source>
<extracomment>The name of the plugin GenericThings ({b3188696-2585-4806-bf98-30ab576ce5c8})</extracomment>
@ -57,6 +112,11 @@ The name of the EventType ({59bfd575-709f-4e43-9726-de26e6d4ca8b}) of ThingClass
<extracomment>The name of the ThingClass ({17ee3657-6ad8-4ae2-8959-3cf66cec8d13})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Generic extended blind</source>
<extracomment>The name of the ThingClass ({40aa9f3c-a23c-4f7f-8786-fcf3554f3e19})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Generic heating</source>
<extracomment>The name of the ThingClass ({392854c4-3d14-4cf8-96cd-d933526bd197})</extracomment>
@ -67,6 +127,11 @@ The name of the EventType ({59bfd575-709f-4e43-9726-de26e6d4ca8b}) of ThingClass
<extracomment>The name of the ThingClass ({d295bc64-773c-42a9-83e2-80db5fa0d1ce})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Generic irrigation</source>
<extracomment>The name of the ThingClass ({d013b980-20d5-4791-9c4f-b411c39241d7})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Generic light</source>
<extracomment>The name of the ThingClass ({c50d3216-f307-4f9f-8190-4391510c385c})</extracomment>
@ -82,6 +147,11 @@ The name of the EventType ({59bfd575-709f-4e43-9726-de26e6d4ca8b}) of ThingClass
<extracomment>The name of the ThingClass ({57daa147-dd6f-4673-a757-d8f01a2054c7})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Generic shutter</source>
<extracomment>The name of the ThingClass ({7917c2e7-d7d2-4c47-a38d-41f7dd7693d9})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Generic soil moisture sensor</source>
<extracomment>The name of the ThingClass ({33e610cf-ff30-481b-9f0b-d6857bcd41a5})</extracomment>
@ -92,6 +162,11 @@ The name of the EventType ({59bfd575-709f-4e43-9726-de26e6d4ca8b}) of ThingClass
<extracomment>The name of the ThingClass ({cf3d65db-6f68-457b-968c-cfb66cbd5311})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Generic ventilation</source>
<extracomment>The name of the ThingClass ({24af8dd3-ddf0-47f0-bf09-70fdfd8dceab})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Humidity</source>
<extracomment>The name of the ParamType (ThingClass: humiditySensor, EventType: humidity, ID: {925225d9-2965-444a-9c42-63c2873700fb})
@ -104,6 +179,36 @@ The name of the StateType ({925225d9-2965-444a-9c42-63c2873700fb}) of ThingClass
<extracomment>The name of the EventType ({925225d9-2965-444a-9c42-63c2873700fb}) of ThingClass humiditySensor</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Input value</source>
<extracomment>The name of the ParamType (ThingClass: moistureSensor, ActionType: input, ID: {ce64a425-d990-4fc1-966b-be6de445792b})
----------
The name of the ParamType (ThingClass: moistureSensor, EventType: input, ID: {ce64a425-d990-4fc1-966b-be6de445792b})
----------
The name of the StateType ({ce64a425-d990-4fc1-966b-be6de445792b}) of ThingClass moistureSensor
----------
The name of the ParamType (ThingClass: humiditySensor, ActionType: input, ID: {a8223e65-e704-4f84-9bbe-d8fc42597047})
----------
The name of the ParamType (ThingClass: humiditySensor, EventType: input, ID: {a8223e65-e704-4f84-9bbe-d8fc42597047})
----------
The name of the StateType ({a8223e65-e704-4f84-9bbe-d8fc42597047}) of ThingClass humiditySensor
----------
The name of the ParamType (ThingClass: temperatureSensor, ActionType: input, ID: {fed37466-1264-4ac1-84fd-aff3a1f7ff04})
----------
The name of the ParamType (ThingClass: temperatureSensor, EventType: input, ID: {fed37466-1264-4ac1-84fd-aff3a1f7ff04})
----------
The name of the StateType ({fed37466-1264-4ac1-84fd-aff3a1f7ff04}) of ThingClass temperatureSensor</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Input value changed</source>
<extracomment>The name of the EventType ({ce64a425-d990-4fc1-966b-be6de445792b}) of ThingClass moistureSensor
----------
The name of the EventType ({a8223e65-e704-4f84-9bbe-d8fc42597047}) of ThingClass humiditySensor
----------
The name of the EventType ({fed37466-1264-4ac1-84fd-aff3a1f7ff04}) of ThingClass temperatureSensor</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Maximum humidity</source>
<extracomment>The name of the ParamType (ThingClass: humiditySensor, Type: settings, ID: {10afc387-68d1-47ea-a816-0d1acad47b3c})</extracomment>
@ -134,10 +239,32 @@ The name of the StateType ({925225d9-2965-444a-9c42-63c2873700fb}) of ThingClass
<extracomment>The name of the ParamType (ThingClass: temperatureSensor, Type: settings, ID: {c86ae5d3-9335-4b6e-8231-bf3ed6670dff})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Moving</source>
<extracomment>The name of the ParamType (ThingClass: venetianBlind, EventType: moving, ID: {6234c07e-4200-4f2c-8cbd-bff24c38c243})
----------
The name of the StateType ({6234c07e-4200-4f2c-8cbd-bff24c38c243}) of ThingClass venetianBlind
----------
The name of the ParamType (ThingClass: extendedBlind, EventType: moving, ID: {941d1e1f-8dd7-4493-812f-6cefefd88c2e})
----------
The name of the StateType ({941d1e1f-8dd7-4493-812f-6cefefd88c2e}) of ThingClass extendedBlind</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Moving changed</source>
<extracomment>The name of the EventType ({6234c07e-4200-4f2c-8cbd-bff24c38c243}) of ThingClass venetianBlind
----------
The name of the EventType ({941d1e1f-8dd7-4493-812f-6cefefd88c2e}) of ThingClass extendedBlind</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open</source>
<extracomment>The name of the ActionType ({9deb662d-2378-4345-a898-8742d41e43c1}) of ThingClass shutter
----------
The name of the ActionType ({3e728e50-3d45-4035-b215-1e604cf3159b}) of ThingClass venetianBlind
----------
The name of the ActionType ({5a7599fa-8351-4ed6-9b98-fa2f3be54304}) of ThingClass extendedBlind
----------
The name of the ActionType ({120dc265-dbbb-4f19-9d31-c372c23479c0}) of ThingClass blind
----------
The name of the ActionType ({979e9c51-5a93-4635-85e3-01874306b229}) of ThingClass awning</extracomment>
@ -151,6 +278,18 @@ The name of the ParamType (ThingClass: shutter, EventType: openingOutput, ID: {c
----------
The name of the StateType ({cc547728-b309-4695-b355-49748ef2521c}) of ThingClass shutter
----------
The name of the ParamType (ThingClass: venetianBlind, ActionType: openingOutput, ID: {6041dacf-5303-4dc0-ba3c-7ecaa438f2dd})
----------
The name of the ParamType (ThingClass: venetianBlind, EventType: openingOutput, ID: {6041dacf-5303-4dc0-ba3c-7ecaa438f2dd})
----------
The name of the StateType ({6041dacf-5303-4dc0-ba3c-7ecaa438f2dd}) of ThingClass venetianBlind
----------
The name of the ParamType (ThingClass: extendedBlind, ActionType: openingOutput, ID: {e559f077-e904-4bbc-8ec3-344b814d2eab})
----------
The name of the ParamType (ThingClass: extendedBlind, EventType: openingOutput, ID: {e559f077-e904-4bbc-8ec3-344b814d2eab})
----------
The name of the StateType ({e559f077-e904-4bbc-8ec3-344b814d2eab}) of ThingClass extendedBlind
----------
The name of the ParamType (ThingClass: blind, ActionType: openingOutput, ID: {b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b})
----------
The name of the ParamType (ThingClass: blind, EventType: openingOutput, ID: {b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b})
@ -168,14 +307,46 @@ The name of the StateType ({4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4}) of ThingClass
<source>Opening output changed</source>
<extracomment>The name of the EventType ({cc547728-b309-4695-b355-49748ef2521c}) of ThingClass shutter
----------
The name of the EventType ({6041dacf-5303-4dc0-ba3c-7ecaa438f2dd}) of ThingClass venetianBlind
----------
The name of the EventType ({e559f077-e904-4bbc-8ec3-344b814d2eab}) of ThingClass extendedBlind
----------
The name of the EventType ({b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b}) of ThingClass blind
----------
The name of the EventType ({4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4}) of ThingClass awning</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Percentage</source>
<extracomment>The name of the ParamType (ThingClass: venetianBlind, ActionType: percentage, ID: {33dc8019-336d-4d50-8d60-dff8508338ca})
----------
The name of the ParamType (ThingClass: venetianBlind, EventType: percentage, ID: {33dc8019-336d-4d50-8d60-dff8508338ca})
----------
The name of the StateType ({33dc8019-336d-4d50-8d60-dff8508338ca}) of ThingClass venetianBlind
----------
The name of the ParamType (ThingClass: extendedBlind, ActionType: percentage, ID: {181df603-d45f-4d3d-a358-97aa3e4ac0bd})
----------
The name of the ParamType (ThingClass: extendedBlind, EventType: percentage, ID: {181df603-d45f-4d3d-a358-97aa3e4ac0bd})
----------
The name of the StateType ({181df603-d45f-4d3d-a358-97aa3e4ac0bd}) of ThingClass extendedBlind</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Percentage changed</source>
<extracomment>The name of the EventType ({33dc8019-336d-4d50-8d60-dff8508338ca}) of ThingClass venetianBlind
----------
The name of the EventType ({181df603-d45f-4d3d-a358-97aa3e4ac0bd}) of ThingClass extendedBlind</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Power</source>
<extracomment>The name of the ParamType (ThingClass: irrigation, ActionType: power, ID: {0212a287-c5ae-4644-8803-adfdd8caeb9a})
<extracomment>The name of the ParamType (ThingClass: ventilation, ActionType: power, ID: {846711b7-ea5a-4c66-a267-001c60406509})
----------
The name of the ParamType (ThingClass: ventilation, EventType: power, ID: {846711b7-ea5a-4c66-a267-001c60406509})
----------
The name of the StateType ({846711b7-ea5a-4c66-a267-001c60406509}) of ThingClass ventilation
----------
The name of the ParamType (ThingClass: irrigation, ActionType: power, ID: {0212a287-c5ae-4644-8803-adfdd8caeb9a})
----------
The name of the ParamType (ThingClass: irrigation, EventType: power, ID: {0212a287-c5ae-4644-8803-adfdd8caeb9a})
----------
@ -225,6 +396,53 @@ The name of the EventType ({018038d7-1d02-4b17-8fe3-babca044b087}) of ThingClass
<extracomment>The name of the EventType ({08087af6-6a3b-4e4a-ac6d-56f23ce63edf}) of ThingClass powerSwitch</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set angle</source>
<extracomment>The name of the ActionType ({fcb700c4-5da8-4385-85b0-6616e807974e}) of ThingClass venetianBlind</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set closing output</source>
<extracomment>The name of the ActionType ({1c35df0e-4c41-455f-893a-0145377952a0}) of ThingClass shutter
----------
The name of the ActionType ({84dd2fa1-85fe-47f3-9e32-e6083432d39c}) of ThingClass venetianBlind
----------
The name of the ActionType ({1a4a5839-a30d-4239-a124-63bfdc74a8f6}) of ThingClass extendedBlind
----------
The name of the ActionType ({9b673430-572d-4a9c-85d3-dafadbe541cd}) of ThingClass blind
----------
The name of the ActionType ({59bfd575-709f-4e43-9726-de26e6d4ca8b}) of ThingClass awning</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set input value</source>
<extracomment>The name of the ActionType ({ce64a425-d990-4fc1-966b-be6de445792b}) of ThingClass moistureSensor
----------
The name of the ActionType ({a8223e65-e704-4f84-9bbe-d8fc42597047}) of ThingClass humiditySensor
----------
The name of the ActionType ({fed37466-1264-4ac1-84fd-aff3a1f7ff04}) of ThingClass temperatureSensor</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set opening output</source>
<extracomment>The name of the ActionType ({cc547728-b309-4695-b355-49748ef2521c}) of ThingClass shutter
----------
The name of the ActionType ({6041dacf-5303-4dc0-ba3c-7ecaa438f2dd}) of ThingClass venetianBlind
----------
The name of the ActionType ({e559f077-e904-4bbc-8ec3-344b814d2eab}) of ThingClass extendedBlind
----------
The name of the ActionType ({b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b}) of ThingClass blind
----------
The name of the ActionType ({4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4}) of ThingClass awning</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set percentage</source>
<extracomment>The name of the ActionType ({33dc8019-336d-4d50-8d60-dff8508338ca}) of ThingClass venetianBlind
----------
The name of the ActionType ({181df603-d45f-4d3d-a358-97aa3e4ac0bd}) of ThingClass extendedBlind</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set power</source>
<extracomment>The name of the ActionType ({409b635e-a754-4b5c-b3f0-d1c5a0fb3f03}) of ThingClass heating
@ -252,6 +470,14 @@ The name of the StateType ({7a62e1d2-92f2-424c-876c-870478a4b2bd}) of ThingClass
----------
The name of the StateType ({6d6e72dc-4d2b-4ec1-82c2-54405a682711}) of ThingClass shutter
----------
The name of the ParamType (ThingClass: venetianBlind, EventType: status, ID: {6fb7826e-b6d8-42f8-b712-719496046436})
----------
The name of the StateType ({6fb7826e-b6d8-42f8-b712-719496046436}) of ThingClass venetianBlind
----------
The name of the ParamType (ThingClass: extendedBlind, EventType: status, ID: {c2354d7e-198a-43ae-aa5f-c6710010c7e1})
----------
The name of the StateType ({c2354d7e-198a-43ae-aa5f-c6710010c7e1}) of ThingClass extendedBlind
----------
The name of the ParamType (ThingClass: blind, EventType: status, ID: {5fdec1e0-51f6-48b9-b743-ba572504b2c1})
----------
The name of the StateType ({5fdec1e0-51f6-48b9-b743-ba572504b2c1}) of ThingClass blind
@ -265,6 +491,10 @@ The name of the StateType ({ff6f2565-2a2e-4d34-b10f-d3f73b676399}) of ThingClass
<source>Status changed</source>
<extracomment>The name of the EventType ({6d6e72dc-4d2b-4ec1-82c2-54405a682711}) of ThingClass shutter
----------
The name of the EventType ({6fb7826e-b6d8-42f8-b712-719496046436}) of ThingClass venetianBlind
----------
The name of the EventType ({c2354d7e-198a-43ae-aa5f-c6710010c7e1}) of ThingClass extendedBlind
----------
The name of the EventType ({5fdec1e0-51f6-48b9-b743-ba572504b2c1}) of ThingClass blind
----------
The name of the EventType ({ff6f2565-2a2e-4d34-b10f-d3f73b676399}) of ThingClass awning</extracomment>
@ -274,6 +504,10 @@ The name of the EventType ({ff6f2565-2a2e-4d34-b10f-d3f73b676399}) of ThingClass
<source>Stop</source>
<extracomment>The name of the ActionType ({db5f3332-1f4e-4f9e-84d2-93c5d7de315c}) of ThingClass shutter
----------
The name of the ActionType ({6e3eeb5d-d7ed-4175-9795-e76451e0a00b}) of ThingClass venetianBlind
----------
The name of the ActionType ({ab67e4bf-c7b6-489b-9b49-3e0a1c7d33ca}) of ThingClass extendedBlind
----------
The name of the ActionType ({1a924c9a-5dcb-4b1c-8fd6-ab101098e007}) of ThingClass blind
----------
The name of the ActionType ({555cafe4-bd12-42c6-bab1-8cd59af6468e}) of ThingClass awning</extracomment>
@ -291,95 +525,28 @@ The name of the StateType ({d0b6c4be-339e-4b0f-a234-0611b7565395}) of ThingClass
<extracomment>The name of the EventType ({d0b6c4be-339e-4b0f-a234-0611b7565395}) of ThingClass temperatureSensor</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>nymea</source>
<extracomment>The name of the vendor ({2062d64d-3232-433c-88bc-0d33c0ba2ba6})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Generic shutter</source>
<extracomment>The name of the ThingClass ({7917c2e7-d7d2-4c47-a38d-41f7dd7693d9})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Generic irrigation</source>
<extracomment>The name of the ThingClass ({d013b980-20d5-4791-9c4f-b411c39241d7})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set closing output</source>
<extracomment>The name of the ActionType ({1c35df0e-4c41-455f-893a-0145377952a0}) of ThingClass shutter
----------
The name of the ActionType ({9b673430-572d-4a9c-85d3-dafadbe541cd}) of ThingClass blind
----------
The name of the ActionType ({59bfd575-709f-4e43-9726-de26e6d4ca8b}) of ThingClass awning</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set opening output</source>
<extracomment>The name of the ActionType ({cc547728-b309-4695-b355-49748ef2521c}) of ThingClass shutter
----------
The name of the ActionType ({b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b}) of ThingClass blind
----------
The name of the ActionType ({4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4}) of ThingClass awning</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turn on or off</source>
<extracomment>The name of the ActionType ({0212a287-c5ae-4644-8803-adfdd8caeb9a}) of ThingClass irrigation</extracomment>
<extracomment>The name of the ActionType ({846711b7-ea5a-4c66-a267-001c60406509}) of ThingClass ventilation
----------
The name of the ActionType ({0212a287-c5ae-4644-8803-adfdd8caeb9a}) of ThingClass irrigation</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Turned on or off</source>
<extracomment>The name of the EventType ({0212a287-c5ae-4644-8803-adfdd8caeb9a}) of ThingClass irrigation</extracomment>
<extracomment>The name of the EventType ({846711b7-ea5a-4c66-a267-001c60406509}) of ThingClass ventilation
----------
The name of the EventType ({0212a287-c5ae-4644-8803-adfdd8caeb9a}) of ThingClass irrigation</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Input value</source>
<extracomment>The name of the ParamType (ThingClass: moistureSensor, ActionType: input, ID: {ce64a425-d990-4fc1-966b-be6de445792b})
----------
The name of the ParamType (ThingClass: moistureSensor, EventType: input, ID: {ce64a425-d990-4fc1-966b-be6de445792b})
----------
The name of the StateType ({ce64a425-d990-4fc1-966b-be6de445792b}) of ThingClass moistureSensor
----------
The name of the ParamType (ThingClass: humiditySensor, ActionType: input, ID: {a8223e65-e704-4f84-9bbe-d8fc42597047})
----------
The name of the ParamType (ThingClass: humiditySensor, EventType: input, ID: {a8223e65-e704-4f84-9bbe-d8fc42597047})
----------
The name of the StateType ({a8223e65-e704-4f84-9bbe-d8fc42597047}) of ThingClass humiditySensor
----------
The name of the ParamType (ThingClass: temperatureSensor, ActionType: input, ID: {fed37466-1264-4ac1-84fd-aff3a1f7ff04})
----------
The name of the ParamType (ThingClass: temperatureSensor, EventType: input, ID: {fed37466-1264-4ac1-84fd-aff3a1f7ff04})
----------
The name of the StateType ({fed37466-1264-4ac1-84fd-aff3a1f7ff04}) of ThingClass temperatureSensor</extracomment>
<source>Venetian blind</source>
<extracomment>The name of the ThingClass ({e6b96ced-8d50-45da-91c8-792d364d2795})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Input value changed</source>
<extracomment>The name of the EventType ({ce64a425-d990-4fc1-966b-be6de445792b}) of ThingClass moistureSensor
----------
The name of the EventType ({a8223e65-e704-4f84-9bbe-d8fc42597047}) of ThingClass humiditySensor
----------
The name of the EventType ({fed37466-1264-4ac1-84fd-aff3a1f7ff04}) of ThingClass temperatureSensor</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set input value</source>
<extracomment>The name of the ActionType ({ce64a425-d990-4fc1-966b-be6de445792b}) of ThingClass moistureSensor
----------
The name of the ActionType ({a8223e65-e704-4f84-9bbe-d8fc42597047}) of ThingClass humiditySensor
----------
The name of the ActionType ({fed37466-1264-4ac1-84fd-aff3a1f7ff04}) of ThingClass temperatureSensor</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Accuracy (decimal places)</source>
<extracomment>The name of the ParamType (ThingClass: moistureSensor, Type: settings, ID: {3c967a68-9951-4c9a-b019-79b913e762b6})
----------
The name of the ParamType (ThingClass: humiditySensor, Type: settings, ID: {38064841-6121-4862-a639-08fb0b778511})
----------
The name of the ParamType (ThingClass: temperatureSensor, Type: settings, ID: {3b543c3a-1fc0-45b5-8c07-600a6045f82e})</extracomment>
<source>nymea</source>
<extracomment>The name of the vendor ({2062d64d-3232-433c-88bc-0d33c0ba2ba6})</extracomment>
<translation type="unfinished"></translation>
</message>
</context>