updated translation files

pull/1/head
bernhard.trinnes 2020-07-04 12:16:12 +02:00
parent 5dab9ff079
commit f3a6c961b4
5 changed files with 735 additions and 334 deletions

View File

@ -45,31 +45,44 @@ void IntegrationPluginGenericThings::setupThing(ThingSetupInfo *info)
info->finish(Thing::ThingErrorNoError);
Thing *thing = info->thing();
if (thing->thingClassId() == extendedBlindThingClassId) {
int closingTime = thing->paramValue(extendedBlindThingClosingTimeParamTypeId).toInt();
uint closingTime = thing->paramValue(extendedBlindThingClosingTimeParamTypeId).toUInt();
if (closingTime <= 0) {
return info->finish(Thing::ThingErrorSetupFailed, tr("Invalid closing time"));
}
QTimer* timer = new QTimer(this);
timer->setInterval(closingTime/100); // closing timer / 100 to update on every percent
timer->setInterval(closingTime/100.00); // closing timer / 100 to update on every percent
m_extendedBlindPercentageTimer.insert(thing, timer);
connect(timer, &QTimer::timeout, this, [thing, this] {
int currentPercentage = thing->stateValue(extendedBlindPercentageStateTypeId).toInt();
uint currentPercentage = thing->stateValue(extendedBlindPercentageStateTypeId).toUInt();
if (thing->stateValue(extendedBlindStatusStateTypeId).toString() == "Closing") {
thing->setStateValue(extendedBlindPercentageStateTypeId, currentPercentage++);
if (currentPercentage == 100) {
setBlindState(BlindStateStopped, thing);
qCDebug(dcGenericThings()) << "Extended blind is closed, stopping timer";
} else if (currentPercentage > 100) {
currentPercentage = 100;
setBlindState(BlindStateStopped, thing);
qCWarning(dcGenericThings()) << "Extended blind overshoot 100 percent";
} else {
currentPercentage++;
thing->setStateValue(extendedBlindPercentageStateTypeId, currentPercentage);
}
} else if (thing->stateValue(extendedBlindStatusStateTypeId).toString() == "Opening") {
thing->setStateValue(extendedBlindPercentageStateTypeId, currentPercentage--);
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)) {
int targetPercentage = m_extendedBlindTargetPercentage.value(thing);
uint targetPercentage = m_extendedBlindTargetPercentage.value(thing);
if (targetPercentage == currentPercentage) {
qCDebug(dcGenericThings()) << "Extended blind has reached target percentage, stopping timer";
setBlindState(BlindStateStopped, thing);
@ -77,37 +90,92 @@ void IntegrationPluginGenericThings::setupThing(ThingSetupInfo *info)
}
});
} else if (info->thing()->thingClassId() == venetianBlindThingClassId) {
int closingTime = thing->paramValue(venetianBlindThingClosingTimeParamTypeId).toInt();
uint closingTime = thing->paramValue(venetianBlindThingClosingTimeParamTypeId).toUInt();
uint angleTime = thing->paramValue(venetianBlindThingAngleTimeParamTypeId).toUInt();
if (closingTime <=0 || closingTime < angleTime || angleTime <= 0) {
return info->finish(Thing::ThingErrorSetupFailed, tr("Invalid closing or angle time"));
}
QTimer* timer = new QTimer(this);
timer->setInterval(closingTime/100); // closing timer / 100 to update on every percent
timer->setInterval(closingTime/100.00); // closing timer / 100 to update on every percent
m_extendedBlindPercentageTimer.insert(thing, timer);
connect(timer, &QTimer::timeout, this, [thing, this] {
int currentPercentage = thing->stateValue(venetianBlindPercentageStateTypeId).toInt();
uint currentPercentage = thing->stateValue(venetianBlindPercentageStateTypeId).toUInt();
if (thing->stateValue(venetianBlindStatusStateTypeId).toString() == "Closing") {
thing->setStateValue(venetianBlindPercentageStateTypeId, currentPercentage++);
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") {
thing->setStateValue(venetianBlindPercentageStateTypeId, currentPercentage--);
currentPercentage--;
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)) {
int targetPercentage = m_extendedBlindTargetPercentage.value(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(angleTimer, &QTimer::timeout, this, [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(venetianBlindPercentageStateTypeId, 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(venetianBlindPercentageStateTypeId, 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);
}
}
});
}
}
@ -122,20 +190,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) {
@ -145,8 +210,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) {
@ -156,29 +220,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);
} 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) {
@ -188,8 +249,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) {
@ -199,9 +259,9 @@ 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 (action.actionTypeId() == extendedBlindOpenActionTypeId) {
@ -279,20 +339,17 @@ void IntegrationPluginGenericThings::executeAction(ThingActionInfo *info)
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) {
@ -302,8 +359,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) {
@ -313,43 +369,53 @@ 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);
} 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);
} 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);
} 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);
} 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());
}
} 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());
}
} 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());
}
} else if (thing->thingClassId() == temperatureSensorThingClassId) {
if (action.actionTypeId() == temperatureSensorInputActionTypeId) {
@ -363,6 +429,8 @@ 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());
}
} else if (thing->thingClassId() == humiditySensorThingClassId) {
if (action.actionTypeId() == humiditySensorInputActionTypeId) {
@ -376,6 +444,8 @@ 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());
}
} else if (thing->thingClassId() == moistureSensorThingClassId) {
if (action.actionTypeId() == moistureSensorInputActionTypeId) {
@ -389,6 +459,8 @@ 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, "setupThing", QString("Unhandled thingClassId: %1").arg(thing->thingClassId().toString()).toUtf8());
@ -417,7 +489,6 @@ double IntegrationPluginGenericThings::mapDoubleValue(double value, double fromM
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_extendedBlindPercentageTimer.value(thing)->stop();
m_extendedBlindTargetPercentage.remove(thing);
if (thing->thingClassId() == extendedBlindThingClassId) {
@ -427,120 +498,114 @@ void IntegrationPluginGenericThings::setBlindState(IntegrationPluginGenericThing
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::setBlindMovingState(Action action, Thing *thing)
{
if (thing->thingClassId() == extendedBlindThingClassId) {
int percentage = thing->stateValue(extendedBlindPercentageStateTypeId).toInt();
if (action.actionTypeId() == extendedBlindOpenActionTypeId) {
if (percentage != 100) {
setBlindState(BlindStateOpening, thing);
} else {
// Blind already open
setBlindState(BlindStateStopped, thing);
}
} else if (action.actionTypeId() == extendedBlindStopActionTypeId) {
setBlindState(BlindStateStopped, thing);
thing->setStateValue(extendedBlindMovingStateTypeId, false);
} else if (action.actionTypeId() == extendedBlindCloseActionTypeId) {
if (percentage != 0) {
setBlindState(BlindStateClosing, thing);
} else {
// Blind already closed
setBlindState(BlindStateStopped, thing);
thing->setStateValue(extendedBlindMovingStateTypeId, false);
}
}
} else if (thing->thingClassId() == venetianBlindThingClassId) {
}
}
void IntegrationPluginGenericThings::moveBlindToPercentage(Action action, Thing *thing)
{
if (thing->thingClassId() == extendedBlindThingClassId) {
int targetPercentage = action.param(extendedBlindPercentageActionPercentageParamTypeId).value().toBool();
int currentPercentage = thing->stateValue(extendedBlindPercentageStateTypeId).toInt();
uint targetPercentage = action.param(extendedBlindPercentageActionPercentageParamTypeId).value().toUInt();
uint currentPercentage = thing->stateValue(extendedBlindPercentageStateTypeId).toUInt();
// 100% indicates the device is fully closed
if (targetPercentage == currentPercentage) {
//Nothing to do
qCDebug(dcGenericThings()) << "Extended blind is already at given percentage" << targetPercentage;
} else if (targetPercentage > currentPercentage) {
setBlindState(BlindStateClosing, thing);
m_extendedBlindTargetPercentage.insert(thing, targetPercentage);
m_extendedBlindPercentageTimer.value(thing)->start();
} else if (targetPercentage < currentPercentage) {
setBlindState(BlindStateOpening, thing);
m_extendedBlindTargetPercentage.insert(thing, targetPercentage);
m_extendedBlindPercentageTimer.value(thing)->start();
} else {
setBlindState(BlindStateStopped, thing);
}
} else if (thing->thingClassId() == venetianBlindThingClassId) {
int targetPercentage = action.param(venetianBlindPercentageActionPercentageParamTypeId).value().toBool();
int currentPercentage = thing->stateValue(venetianBlindPercentageStateTypeId).toInt();
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) {
//Nothing to do
qCDebug(dcGenericThings()) << "Extended blind is already at given percentage" << targetPercentage;
} else if (targetPercentage > currentPercentage) {
setBlindState(BlindStateClosing, thing);
m_extendedBlindTargetPercentage.insert(thing, targetPercentage);
m_extendedBlindPercentageTimer.value(thing)->start();
} else if (targetPercentage < currentPercentage) {
setBlindState(BlindStateOpening, thing);
m_extendedBlindTargetPercentage.insert(thing, targetPercentage);
m_extendedBlindPercentageTimer.value(thing)->start();
} else {
setBlindState(BlindStateStopped, thing);
}
} else {
qCDebug(dcGenericThings()) << "Move to percentage doesn't support this thingClass";
}
}
void IntegrationPluginGenericThings::moveBlindToAngle(Action action, Thing *thing)
{
Q_UNUSED(action)
Q_UNUSED(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

@ -52,7 +52,8 @@ private:
QHash<Thing *, QTimer *> m_extendedBlindPercentageTimer;
QHash<Thing *, QTimer *> m_venetianBlindAngleTimer;
QHash<Thing *, int> m_extendedBlindTargetPercentage;
QHash<Thing *, uint> m_extendedBlindTargetPercentage;
QHash<Thing *, int> m_venetianBlindTargetAngle;
enum BlindState {
BlindStateOpening,
@ -60,7 +61,6 @@ private:
BlindStateStopped
};
void setBlindState(BlindState state, Thing *thing);
void setBlindMovingState(Action action, Thing *thing);
void moveBlindToPercentage(Action action, Thing *thing);
void moveBlindToAngle(Action action, Thing *thing);
};

View File

@ -199,6 +199,7 @@
"minValue": 0,
"maxValue": 100,
"defaultValue": 0,
"unit": "Percentage",
"writable": true
}
],
@ -296,6 +297,7 @@
"minValue": 0,
"maxValue": 100,
"defaultValue": 0,
"unit": "Percentage",
"writable": true
},
{
@ -306,8 +308,8 @@
"displayNameAction": "Set angle",
"type": "int",
"unit": "Degree",
"minValue": "any",
"maxValue": "any",
"minValue": -90,
"maxValue": 90,
"defaultValue": 0,
"writable": true
}

View File

@ -3,14 +3,46 @@
<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 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>
<translation>Schließen</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Closing output</source>
@ -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,117 +75,200 @@ 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 type="unfinished"></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 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>
<translation>Generische &quot;Things&quot;</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Generic awning</source>
<extracomment>The name of the ThingClass ({9e69585f-90ba-44e4-ad90-5b4bffbe345a})</extracomment>
<translation>Generische Markise</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Generic blind</source>
<extracomment>The name of the ThingClass ({17ee3657-6ad8-4ae2-8959-3cf66cec8d13})</extracomment>
<translation>Generischer Sichtschutz</translation>
<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>
<translation>Generische Heizung</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Generic humidity sensor</source>
<extracomment>The name of the ThingClass ({d295bc64-773c-42a9-83e2-80db5fa0d1ce})</extracomment>
<translation>Generischer Feuchtigkeitssensor</translation>
<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>
<translation>Generisches Licht</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Generic power socket</source>
<extracomment>The name of the ThingClass ({4e7261af-a27b-4446-8346-914ea59f7547})</extracomment>
<translation>Generische Steckdose</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Generic power switch</source>
<extracomment>The name of the ThingClass ({57daa147-dd6f-4673-a757-d8f01a2054c7})</extracomment>
<translation>Generischer Ein-/Ausschalter</translation>
<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>
<translation>Generischer Erdfeuchtigkeitssensor</translation>
<translation type="unfinished"></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 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})
----------
The name of the StateType ({925225d9-2965-444a-9c42-63c2873700fb}) of ThingClass humiditySensor</extracomment>
<translation>Luftfeuchtigkeit</translation>
<translation type="unfinished"></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>
<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>
<translation>Maximale Luftfeuchtigkeit</translation>
<translation type="unfinished"></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>
<translation type="unfinished"></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>
<translation type="unfinished"></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>
<translation type="unfinished"></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>
<translation type="unfinished"></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>
<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>
<translation>Geöffnet</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Opening output</source>
@ -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})
@ -162,20 +301,52 @@ The name of the ParamType (ThingClass: awning, ActionType: openingOutput, ID: {4
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>
<translation type="unfinished"></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>Öffnender Ausgang geändert</translation>
<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})
----------
@ -204,7 +375,7 @@ The name of the ParamType (ThingClass: socket, ActionType: power, ID: {018038d7-
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>
<translation type="unfinished"></translation>
</message>
<message>
<source>Power changed</source>
@ -213,156 +384,35 @@ The name of the StateType ({018038d7-1d02-4b17-8fe3-babca044b087}) of ThingClass
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>
<translation type="unfinished"></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>
<translation type="unfinished"></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>
<translation type="unfinished"></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>
<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>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>
</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>Eingangswert</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>Eingangswert geändert</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set input value</source>
@ -371,16 +421,133 @@ The name of the EventType ({fed37466-1264-4ac1-84fd-aff3a1f7ff04}) of ThingClass
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>Setze Eingangswert</translation>
<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})
<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 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
----------
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 type="unfinished"></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 type="unfinished"></translation>
</message>
<message>
<source>Soil moisture changed</source>
<extracomment>The name of the EventType ({7a62e1d2-92f2-424c-876c-870478a4b2bd}) of ThingClass moistureSensor</extracomment>
<translation type="unfinished"></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 type="unfinished"></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 type="unfinished"></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 type="unfinished"></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 type="unfinished"></translation>
</message>
<message>
<source>Temperature changed</source>
<extracomment>The name of the EventType ({d0b6c4be-339e-4b0f-a234-0611b7565395}) of ThingClass temperatureSensor</extracomment>
<translation type="unfinished"></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 type="unfinished"></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 type="unfinished"></translation>
</message>
<message>
<source>Venetian blind</source>
<extracomment>The name of the ThingClass ({e6b96ced-8d50-45da-91c8-792d364d2795})</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>
</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>