Merge PR #255: New Plugin: Generic Things
This commit is contained in:
commit
7de11b0067
5
debian/changelog
vendored
5
debian/changelog
vendored
@ -1,3 +1,8 @@
|
|||||||
|
nymea-plugins (0.21.0) UNRELEASED; urgency=medium
|
||||||
|
|
||||||
|
|
||||||
|
-- Michael Zanetti <michael.zanetti@guh.io> Thu, 09 Apr 2020 18:20:40 +0200
|
||||||
|
|
||||||
nymea-plugins (0.20.0) xenial; urgency=medium
|
nymea-plugins (0.20.0) xenial; urgency=medium
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
18
debian/control
vendored
18
debian/control
vendored
@ -357,19 +357,18 @@ Description: nymea.io plugin for genericelements
|
|||||||
This package will install the nymea.io plugin for genericelements
|
This package will install the nymea.io plugin for genericelements
|
||||||
|
|
||||||
|
|
||||||
Package: nymea-plugin-genericinterfaces
|
Package: nymea-plugin-genericthings
|
||||||
Architecture: any
|
Architecture: any
|
||||||
Depends: ${shlibs:Depends},
|
Depends: ${shlibs:Depends},
|
||||||
${misc:Depends},
|
${misc:Depends},
|
||||||
nymea-plugins-translations,
|
nymea-plugins-translations,
|
||||||
Description: nymea.io plugin for generic interfaces
|
Replaces: nymea-plugin-genericinterfaces
|
||||||
The nymea daemon is a plugin based IoT (Internet of Things) server. The
|
Conflicts: nymea-plugin-genericinterfaces
|
||||||
server works like a translator for devices, things and services and
|
Description: nymea.io plugin for generic things
|
||||||
allows them to interact.
|
Use the generic things plugin to create visually appealing thing setups
|
||||||
With the powerful rule engine you are able to connect any device available
|
containing lights, shutter, sensors etc which are connected to GPIOs.
|
||||||
in the system and create individual scenes and behaviors for your environment.
|
|
||||||
.
|
.
|
||||||
This package will install the nymea.io plugin for generic interfaces
|
This package will install the nymea.io plugin for genericthings
|
||||||
|
|
||||||
|
|
||||||
Package: nymea-plugin-gpio
|
Package: nymea-plugin-gpio
|
||||||
@ -1031,6 +1030,7 @@ Depends: nymea-plugin-anel,
|
|||||||
nymea-plugin-doorbird,
|
nymea-plugin-doorbird,
|
||||||
nymea-plugin-eq-3,
|
nymea-plugin-eq-3,
|
||||||
nymea-plugin-flowercare,
|
nymea-plugin-flowercare,
|
||||||
|
nymea-plugin-genericthings,
|
||||||
nymea-plugin-kodi,
|
nymea-plugin-kodi,
|
||||||
nymea-plugin-lgsmarttv,
|
nymea-plugin-lgsmarttv,
|
||||||
nymea-plugin-mailnotification,
|
nymea-plugin-mailnotification,
|
||||||
@ -1074,8 +1074,6 @@ Depends: nymea-plugin-boblight,
|
|||||||
nymea-plugin-udpcommander,
|
nymea-plugin-udpcommander,
|
||||||
nymea-plugin-tcpcommander,
|
nymea-plugin-tcpcommander,
|
||||||
nymea-plugin-httpcommander,
|
nymea-plugin-httpcommander,
|
||||||
nymea-plugin-genericelements,
|
|
||||||
nymea-plugin-genericinterfaces,
|
|
||||||
nymea-plugin-avahimonitor,
|
nymea-plugin-avahimonitor,
|
||||||
nymea-plugin-anel,
|
nymea-plugin-anel,
|
||||||
nymea-plugin-gpio,
|
nymea-plugin-gpio,
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_integrationplugingenericinterfaces.so
|
usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_integrationplugingenericthings.so
|
||||||
@ -269,7 +269,7 @@ void IntegrationPluginDenon::executeAction(ThingActionInfo *info)
|
|||||||
Thing *thing = info->thing();
|
Thing *thing = info->thing();
|
||||||
Action action = info->action();
|
Action action = info->action();
|
||||||
|
|
||||||
qCDebug(dcDenon) << "Execute action" << thing->id() << action.id() << action.params();
|
qCDebug(dcDenon) << "Execute action" << thing->id() << action.params();
|
||||||
if (thing->thingClassId() == AVRX1000ThingClassId) {
|
if (thing->thingClassId() == AVRX1000ThingClassId) {
|
||||||
AvrConnection *avrConnection = m_avrConnections.value(thing->id());
|
AvrConnection *avrConnection = m_avrConnections.value(thing->id());
|
||||||
|
|
||||||
@ -287,7 +287,7 @@ void IntegrationPluginDenon::executeAction(ThingActionInfo *info)
|
|||||||
|
|
||||||
} else if (action.actionTypeId() == AVRX1000ChannelActionTypeId) {
|
} else if (action.actionTypeId() == AVRX1000ChannelActionTypeId) {
|
||||||
|
|
||||||
qCDebug(dcDenon) << "Execute update action" << action.id();
|
qCDebug(dcDenon) << "Execute update action";
|
||||||
QByteArray channel = action.param(AVRX1000ChannelActionChannelParamTypeId).value().toByteArray();
|
QByteArray channel = action.param(AVRX1000ChannelActionChannelParamTypeId).value().toByteArray();
|
||||||
avrConnection->setChannel(channel);
|
avrConnection->setChannel(channel);
|
||||||
return info->finish(Thing::ThingErrorNoError);
|
return info->finish(Thing::ThingErrorNoError);
|
||||||
|
|||||||
@ -101,7 +101,7 @@ void IntegrationPluginDweetio::executeAction(ThingActionInfo *info)
|
|||||||
{
|
{
|
||||||
Thing *thing = info->thing();
|
Thing *thing = info->thing();
|
||||||
Action action = info->action();
|
Action action = info->action();
|
||||||
qCDebug(dcDweetio) << "Execute action" << thing->id() << action.id() << action.params();
|
qCDebug(dcDweetio) << "Execute action" << thing->id() << action.params();
|
||||||
|
|
||||||
if (thing->thingClassId() == postThingClassId) {
|
if (thing->thingClassId() == postThingClassId) {
|
||||||
|
|
||||||
|
|||||||
@ -143,13 +143,12 @@ void IntegrationPluginEQ3::setupThing(ThingSetupInfo *info)
|
|||||||
MaxCube *cube = new MaxCube(this,thing->paramValue(cubeThingSerialParamTypeId).toString(),QHostAddress(thing->paramValue(cubeThingHostParamTypeId).toString()),thing->paramValue(cubeThingPortParamTypeId).toInt());
|
MaxCube *cube = new MaxCube(this,thing->paramValue(cubeThingSerialParamTypeId).toString(),QHostAddress(thing->paramValue(cubeThingHostParamTypeId).toString()),thing->paramValue(cubeThingPortParamTypeId).toInt());
|
||||||
m_cubes.insert(cube,thing);
|
m_cubes.insert(cube,thing);
|
||||||
|
|
||||||
connect(cube,SIGNAL(cubeConnectionStatusChanged(bool)),this,SLOT(cubeConnectionStatusChanged(bool)));
|
connect(cube, &MaxCube::cubeConnectionStatusChanged, this, &IntegrationPluginEQ3::cubeConnectionStatusChanged);
|
||||||
connect(cube,SIGNAL(commandActionFinished(bool,ActionId)),this,SLOT(commandActionFinished(bool,ActionId)));
|
connect(cube, &MaxCube::cubeConfigReady, this, &IntegrationPluginEQ3::updateCubeConfig);
|
||||||
connect(cube,SIGNAL(cubeConfigReady()),this,SLOT(updateCubeConfig()));
|
connect(cube, &MaxCube::wallThermostatFound, this, &IntegrationPluginEQ3::wallThermostatFound);
|
||||||
connect(cube,SIGNAL(wallThermostatFound()),this,SLOT(wallThermostatFound()));
|
connect(cube, &MaxCube::wallThermostatDataUpdated, this, &IntegrationPluginEQ3::wallThermostatDataUpdated);
|
||||||
connect(cube,SIGNAL(wallThermostatDataUpdated()),this,SLOT(wallThermostatDataUpdated()));
|
connect(cube, &MaxCube::radiatorThermostatFound, this, &IntegrationPluginEQ3::radiatorThermostatFound);
|
||||||
connect(cube,SIGNAL(radiatorThermostatFound()),this,SLOT(radiatorThermostatFound()));
|
connect(cube, &MaxCube::radiatorThermostatDataUpdated, this, &IntegrationPluginEQ3::radiatorThermostatDataUpdated);
|
||||||
connect(cube,SIGNAL(radiatorThermostatDataUpdated()),this,SLOT(radiatorThermostatDataUpdated()));
|
|
||||||
|
|
||||||
cube->connectToCube();
|
cube->connectToCube();
|
||||||
connect(cube, &MaxCube::cubeConnectionStatusChanged, info, [info](bool connected){
|
connect(cube, &MaxCube::cubeConnectionStatusChanged, info, [info](bool connected){
|
||||||
@ -278,23 +277,30 @@ void IntegrationPluginEQ3::executeAction(ThingActionInfo *info)
|
|||||||
|
|
||||||
// FIXME: The MaxCube class needs a reworkto queue commands instead of overwriting each other's actionId
|
// FIXME: The MaxCube class needs a reworkto queue commands instead of overwriting each other's actionId
|
||||||
|
|
||||||
|
int id = -1;
|
||||||
if (action.actionTypeId() == wallThermostatTargetTemperatureActionTypeId){
|
if (action.actionTypeId() == wallThermostatTargetTemperatureActionTypeId){
|
||||||
cube->setDeviceSetpointTemp(rfAddress, roomId, action.param(wallThermostatTargetTemperatureActionTargetTemperatureParamTypeId).value().toDouble(), action.id());
|
id = cube->setDeviceSetpointTemp(rfAddress, roomId, action.param(wallThermostatTargetTemperatureActionTargetTemperatureParamTypeId).value().toDouble());
|
||||||
} else if (action.actionTypeId() == wallThermostatPowerActionTypeId) {
|
} else if (action.actionTypeId() == wallThermostatPowerActionTypeId) {
|
||||||
cube->setDeviceSetpointTemp(rfAddress, roomId, action.param(wallThermostatPowerActionPowerParamTypeId).value().toBool() ? thing->stateValue(wallThermostatComfortTemperatureStateTypeId).toDouble() : 4.5, action.id());
|
id = cube->setDeviceSetpointTemp(rfAddress, roomId, action.param(wallThermostatPowerActionPowerParamTypeId).value().toBool() ? thing->stateValue(wallThermostatComfortTemperatureStateTypeId).toDouble() : 4.5);
|
||||||
} else if (action.actionTypeId() == wallThermostatSetAutoModeActionTypeId){
|
} else if (action.actionTypeId() == wallThermostatSetAutoModeActionTypeId){
|
||||||
cube->setDeviceAutoMode(rfAddress, roomId, action.id());
|
id = cube->setDeviceAutoMode(rfAddress, roomId);
|
||||||
} else if (action.actionTypeId() == wallThermostatSetManualModeActionTypeId){
|
} else if (action.actionTypeId() == wallThermostatSetManualModeActionTypeId){
|
||||||
cube->setDeviceManuelMode(rfAddress, roomId, action.id());
|
id = cube->setDeviceManuelMode(rfAddress, roomId);
|
||||||
} else if (action.actionTypeId() == wallThermostatSetEcoModeActionTypeId){
|
} else if (action.actionTypeId() == wallThermostatSetEcoModeActionTypeId){
|
||||||
cube->setDeviceEcoMode(rfAddress, roomId, action.id());
|
id = cube->setDeviceEcoMode(rfAddress, roomId);
|
||||||
} else if (action.actionTypeId() == wallThermostatDisplayCurrentTempActionTypeId){
|
} else if (action.actionTypeId() == wallThermostatDisplayCurrentTempActionTypeId){
|
||||||
cube->displayCurrentTemperature(rfAddress, roomId, action.param(wallThermostatDisplayCurrentTempActionDisplayParamTypeId).value().toBool(), action.id());
|
id = cube->displayCurrentTemperature(rfAddress, roomId, action.param(wallThermostatDisplayCurrentTempActionDisplayParamTypeId).value().toBool());
|
||||||
|
}
|
||||||
|
if (id == -1) {
|
||||||
|
info->finish(Thing::ThingErrorHardwareFailure);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Connect this info object to the next coming commandActionFinished
|
// Connect this info object to the next coming commandActionFinished
|
||||||
connect(cube, &MaxCube::commandActionFinished, info, [info](bool success, const ActionId &){
|
connect(cube, &MaxCube::commandActionFinished, info, [info, id](bool success, int replyId){
|
||||||
info->finish(success ? Thing::ThingErrorNoError : Thing::ThingErrorHardwareFailure);
|
if (replyId == id) {
|
||||||
|
info->finish(success ? Thing::ThingErrorNoError : Thing::ThingErrorHardwareFailure);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -305,21 +311,28 @@ void IntegrationPluginEQ3::executeAction(ThingActionInfo *info)
|
|||||||
QByteArray rfAddress = thing->paramValue(radiatorThermostatThingRfParamTypeId).toByteArray();
|
QByteArray rfAddress = thing->paramValue(radiatorThermostatThingRfParamTypeId).toByteArray();
|
||||||
int roomId = thing->paramValue(radiatorThermostatThingRoomParamTypeId).toInt();
|
int roomId = thing->paramValue(radiatorThermostatThingRoomParamTypeId).toInt();
|
||||||
|
|
||||||
|
int id = -1;
|
||||||
if (action.actionTypeId() == radiatorThermostatTargetTemperatureActionTypeId){
|
if (action.actionTypeId() == radiatorThermostatTargetTemperatureActionTypeId){
|
||||||
cube->setDeviceSetpointTemp(rfAddress, roomId, action.param(radiatorThermostatTargetTemperatureActionTargetTemperatureParamTypeId).value().toDouble(), action.id());
|
id = cube->setDeviceSetpointTemp(rfAddress, roomId, action.param(radiatorThermostatTargetTemperatureActionTargetTemperatureParamTypeId).value().toDouble());
|
||||||
} else if (action.actionTypeId() == radiatorThermostatPowerActionTypeId) {
|
} else if (action.actionTypeId() == radiatorThermostatPowerActionTypeId) {
|
||||||
cube->setDeviceSetpointTemp(rfAddress, roomId, action.param(radiatorThermostatPowerActionPowerParamTypeId).value().toBool() ? thing->stateValue(radiatorThermostatComfortTempStateTypeId).toDouble() : 4.5, action.id());
|
id = cube->setDeviceSetpointTemp(rfAddress, roomId, action.param(radiatorThermostatPowerActionPowerParamTypeId).value().toBool() ? thing->stateValue(radiatorThermostatComfortTempStateTypeId).toDouble() : 4.5);
|
||||||
} else if (action.actionTypeId() == radiatorThermostatSetAutoModeActionTypeId){
|
} else if (action.actionTypeId() == radiatorThermostatSetAutoModeActionTypeId){
|
||||||
cube->setDeviceAutoMode(rfAddress, roomId, action.id());
|
id = cube->setDeviceAutoMode(rfAddress, roomId);
|
||||||
} else if (action.actionTypeId() == radiatorThermostatSetManualModeActionTypeId){
|
} else if (action.actionTypeId() == radiatorThermostatSetManualModeActionTypeId){
|
||||||
cube->setDeviceManuelMode(rfAddress, roomId, action.id());
|
id = cube->setDeviceManuelMode(rfAddress, roomId);
|
||||||
} else if (action.actionTypeId() == radiatorThermostatSetEcoModeActionTypeId){
|
} else if (action.actionTypeId() == radiatorThermostatSetEcoModeActionTypeId){
|
||||||
cube->setDeviceEcoMode(rfAddress, roomId, action.id());
|
id = cube->setDeviceEcoMode(rfAddress, roomId);
|
||||||
|
}
|
||||||
|
if (id == -1) {
|
||||||
|
info->finish(Thing::ThingErrorHardwareFailure);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Connect this info object to the next coming commandActionFinished
|
// Connect this info object to the next coming commandActionFinished
|
||||||
connect(cube, &MaxCube::commandActionFinished, info, [info](bool success, const ActionId &){
|
connect(cube, &MaxCube::commandActionFinished, info, [info, id](bool success, int replyId){
|
||||||
info->finish(success ? Thing::ThingErrorNoError : Thing::ThingErrorHardwareFailure);
|
if (replyId == id) {
|
||||||
|
info->finish(success ? Thing::ThingErrorNoError : Thing::ThingErrorHardwareFailure);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|||||||
@ -539,7 +539,11 @@ void MaxCube::decodeCommandMessage(QByteArray data)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
bool succeeded = !(bool)list.at(2).toInt(0,10);
|
bool succeeded = !(bool)list.at(2).toInt(0,10);
|
||||||
emit commandActionFinished(succeeded,m_actionId);
|
|
||||||
|
emit commandActionFinished(succeeded, m_pendingCommand.commandId);
|
||||||
|
|
||||||
|
m_pendingCommand.commandId = -1;
|
||||||
|
processCommandQueue();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MaxCube::parseWeeklyProgram(QByteArray data)
|
void MaxCube::parseWeeklyProgram(QByteArray data)
|
||||||
@ -688,6 +692,12 @@ int MaxCube::deviceTypeFromRFAddress(QByteArray rfAddress)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
quint8 MaxCube::generateCommandId()
|
||||||
|
{
|
||||||
|
static quint8 cmd = 0;
|
||||||
|
return cmd++;
|
||||||
|
}
|
||||||
|
|
||||||
void MaxCube::connectionStateChanged(const QAbstractSocket::SocketState &socketState)
|
void MaxCube::connectionStateChanged(const QAbstractSocket::SocketState &socketState)
|
||||||
{
|
{
|
||||||
switch (socketState) {
|
switch (socketState) {
|
||||||
@ -770,6 +780,21 @@ void MaxCube::processCubeData(const QByteArray &data)
|
|||||||
qCWarning(dcEQ3) << " -> unknown message!!!!!!! from cube:" << data;
|
qCWarning(dcEQ3) << " -> unknown message!!!!!!! from cube:" << data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MaxCube::processCommandQueue()
|
||||||
|
{
|
||||||
|
if (m_commandQueue.isEmpty()) {
|
||||||
|
return; // Queue empty
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_pendingCommand.commandId == -1) {
|
||||||
|
return; // Busy...
|
||||||
|
}
|
||||||
|
|
||||||
|
m_pendingCommand = m_commandQueue.takeFirst();
|
||||||
|
|
||||||
|
write(m_pendingCommand.data);
|
||||||
|
}
|
||||||
|
|
||||||
void MaxCube::enablePairingMode()
|
void MaxCube::enablePairingMode()
|
||||||
{
|
{
|
||||||
qCDebug(dcEQ3) << "-------> enable pairing mode! press the boost button for min. 3 seconds";
|
qCDebug(dcEQ3) << "-------> enable pairing mode! press the boost button for min. 3 seconds";
|
||||||
@ -796,12 +821,10 @@ void MaxCube::customRequest(QByteArray data)
|
|||||||
write(data + "\r\n");
|
write(data + "\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void MaxCube::setDeviceSetpointTemp(QByteArray rfAddress, int roomId, double temperature, ActionId actionId)
|
int MaxCube::setDeviceSetpointTemp(QByteArray rfAddress, int roomId, double temperature)
|
||||||
{
|
{
|
||||||
m_actionId = actionId;
|
|
||||||
if(!isConnected() || !isInitialized()){
|
if(!isConnected() || !isInitialized()){
|
||||||
emit commandActionFinished(false,m_actionId);
|
return -1;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray data = "000440000000";
|
QByteArray data = "000440000000";
|
||||||
@ -829,15 +852,20 @@ void MaxCube::setDeviceSetpointTemp(QByteArray rfAddress, int roomId, double tem
|
|||||||
|
|
||||||
qCDebug(dcEQ3) << "sending command " << temperatureData << data;
|
qCDebug(dcEQ3) << "sending command " << temperatureData << data;
|
||||||
|
|
||||||
write("s:" + QByteArray::fromHex(data).toBase64() + "\r\n");
|
Command command;
|
||||||
|
command.commandId = generateCommandId();
|
||||||
|
command.data = "s:" + QByteArray::fromHex(data).toBase64() + "\r\n";
|
||||||
|
m_commandQueue.append(command);
|
||||||
|
|
||||||
|
processCommandQueue();
|
||||||
|
|
||||||
|
return command.commandId;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MaxCube::setDeviceAutoMode(QByteArray rfAddress, int roomId, ActionId actionId)
|
int MaxCube::setDeviceAutoMode(QByteArray rfAddress, int roomId)
|
||||||
{
|
{
|
||||||
m_actionId = actionId;
|
|
||||||
if(!isConnected() || !isInitialized()){
|
if(!isConnected() || !isInitialized()){
|
||||||
emit commandActionFinished(false,m_actionId);
|
return -1;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray data = "000440000000";
|
QByteArray data = "000440000000";
|
||||||
@ -853,15 +881,18 @@ void MaxCube::setDeviceAutoMode(QByteArray rfAddress, int roomId, ActionId actio
|
|||||||
|
|
||||||
qCDebug(dcEQ3) << "sending command " << temperatureData << data;
|
qCDebug(dcEQ3) << "sending command " << temperatureData << data;
|
||||||
|
|
||||||
write("s:" + QByteArray::fromHex(data).toBase64() + "\r\n");
|
Command command;
|
||||||
|
command.commandId = generateCommandId();
|
||||||
|
command.data = "s:" + QByteArray::fromHex(data).toBase64() + "\r\n";
|
||||||
|
m_commandQueue.append(command);
|
||||||
|
processCommandQueue();
|
||||||
|
return command.commandId;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MaxCube::setDeviceManuelMode(QByteArray rfAddress, int roomId, ActionId actionId)
|
int MaxCube::setDeviceManuelMode(QByteArray rfAddress, int roomId)
|
||||||
{
|
{
|
||||||
m_actionId = actionId;
|
|
||||||
if(!isConnected() || !isInitialized()){
|
if(!isConnected() || !isInitialized()){
|
||||||
emit commandActionFinished(false,m_actionId);
|
return -1;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray data = "000440000000";
|
QByteArray data = "000440000000";
|
||||||
@ -871,15 +902,18 @@ void MaxCube::setDeviceManuelMode(QByteArray rfAddress, int roomId, ActionId act
|
|||||||
data.append(fillBin(QByteArray::number(roomId,16),2));
|
data.append(fillBin(QByteArray::number(roomId,16),2));
|
||||||
data.append("62");
|
data.append("62");
|
||||||
|
|
||||||
write("s:" + QByteArray::fromHex(data).toBase64() + "\r\n");
|
Command command;
|
||||||
|
command.commandId = generateCommandId();
|
||||||
|
command.data = "s:" + QByteArray::fromHex(data).toBase64() + "\r\n";
|
||||||
|
m_commandQueue.append(command);
|
||||||
|
processCommandQueue();
|
||||||
|
return command.commandId;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MaxCube::setDeviceEcoMode(QByteArray rfAddress, int roomId, ActionId actionId)
|
int MaxCube::setDeviceEcoMode(QByteArray rfAddress, int roomId)
|
||||||
{
|
{
|
||||||
m_actionId = actionId;
|
|
||||||
if(!isConnected() || !isInitialized()){
|
if(!isConnected() || !isInitialized()){
|
||||||
emit commandActionFinished(false,m_actionId);
|
return -1;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray data = "000440000000";
|
QByteArray data = "000440000000";
|
||||||
@ -889,16 +923,19 @@ void MaxCube::setDeviceEcoMode(QByteArray rfAddress, int roomId, ActionId action
|
|||||||
data.append(fillBin(QByteArray::number(roomId,16),2));
|
data.append(fillBin(QByteArray::number(roomId,16),2));
|
||||||
data.append("6b");
|
data.append("6b");
|
||||||
|
|
||||||
write("s:" + QByteArray::fromHex(data).toBase64() + "\r\n");
|
Command command;
|
||||||
|
command.commandId = generateCommandId();
|
||||||
|
command.data = "s:" + QByteArray::fromHex(data).toBase64() + "\r\n";
|
||||||
|
m_commandQueue.append(command);
|
||||||
|
processCommandQueue();
|
||||||
|
return command.commandId;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MaxCube::displayCurrentTemperature(QByteArray rfAddress, int roomId, bool display, ActionId actionId)
|
int MaxCube::displayCurrentTemperature(QByteArray rfAddress, int roomId, bool display)
|
||||||
{
|
{
|
||||||
Q_UNUSED(roomId)
|
Q_UNUSED(roomId)
|
||||||
m_actionId = actionId;
|
|
||||||
if(!isConnected() || !isInitialized()){
|
if(!isConnected() || !isInitialized()){
|
||||||
emit commandActionFinished(false,m_actionId);
|
return -1;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray data = "000082000000";
|
QByteArray data = "000082000000";
|
||||||
@ -910,6 +947,11 @@ void MaxCube::displayCurrentTemperature(QByteArray rfAddress, int roomId, bool d
|
|||||||
data.append("0000");
|
data.append("0000");
|
||||||
}
|
}
|
||||||
|
|
||||||
write("s:" + QByteArray::fromHex(data).toBase64() + "\r\n");
|
Command command;
|
||||||
|
command.commandId = generateCommandId();
|
||||||
|
command.data = "s:" + QByteArray::fromHex(data).toBase64() + "\r\n";
|
||||||
|
m_commandQueue.append(command);
|
||||||
|
processCommandQueue();
|
||||||
|
return command.commandId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -91,6 +91,42 @@ public:
|
|||||||
bool isConnected();
|
bool isConnected();
|
||||||
bool isInitialized();
|
bool isInitialized();
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void enablePairingMode();
|
||||||
|
void disablePairingMode();
|
||||||
|
void refresh();
|
||||||
|
void customRequest(QByteArray data);
|
||||||
|
|
||||||
|
// for actions
|
||||||
|
int setDeviceSetpointTemp(QByteArray rfAddress, int roomId, double temperature);
|
||||||
|
int setDeviceAutoMode(QByteArray rfAddress, int roomId);
|
||||||
|
int setDeviceManuelMode(QByteArray rfAddress, int roomId);
|
||||||
|
int setDeviceEcoMode(QByteArray rfAddress, int roomId);
|
||||||
|
int displayCurrentTemperature(QByteArray rfAddress, int roomId, bool display);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void cubeDataAvailable(const QByteArray &data);
|
||||||
|
void cubeACK();
|
||||||
|
void cubeConnectionStatusChanged(bool connected);
|
||||||
|
|
||||||
|
// when things are parsed
|
||||||
|
void cubeConfigReady();
|
||||||
|
void wallThermostatFound();
|
||||||
|
void radiatorThermostatFound();
|
||||||
|
|
||||||
|
void wallThermostatDataUpdated();
|
||||||
|
void radiatorThermostatDataUpdated();
|
||||||
|
|
||||||
|
void commandActionFinished(bool succeeded, int commandId);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void connectionStateChanged(const QAbstractSocket::SocketState &socketState);
|
||||||
|
void error(QAbstractSocket::SocketError error);
|
||||||
|
void readData();
|
||||||
|
void processCubeData(const QByteArray &data);
|
||||||
|
|
||||||
|
void processCommandQueue();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// cube data
|
// cube data
|
||||||
QString m_serialNumber;
|
QString m_serialNumber;
|
||||||
@ -123,42 +159,15 @@ private:
|
|||||||
QList<QByteArray> splitMessage(QByteArray data);
|
QList<QByteArray> splitMessage(QByteArray data);
|
||||||
int deviceTypeFromRFAddress(QByteArray rfAddress);
|
int deviceTypeFromRFAddress(QByteArray rfAddress);
|
||||||
|
|
||||||
ActionId m_actionId;
|
struct Command {
|
||||||
|
qint16 commandId;
|
||||||
|
QByteArray data;
|
||||||
|
};
|
||||||
|
|
||||||
signals:
|
Command m_pendingCommand;
|
||||||
void cubeDataAvailable(const QByteArray &data);
|
|
||||||
void cubeACK();
|
|
||||||
void cubeConnectionStatusChanged(bool connected);
|
|
||||||
|
|
||||||
// when things are parsed
|
quint8 generateCommandId();
|
||||||
void cubeConfigReady();
|
QList<Command> m_commandQueue;
|
||||||
void wallThermostatFound();
|
|
||||||
void radiatorThermostatFound();
|
|
||||||
|
|
||||||
void wallThermostatDataUpdated();
|
|
||||||
void radiatorThermostatDataUpdated();
|
|
||||||
|
|
||||||
void commandActionFinished(bool succeeded, const ActionId &actionId);
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void connectionStateChanged(const QAbstractSocket::SocketState &socketState);
|
|
||||||
void error(QAbstractSocket::SocketError error);
|
|
||||||
void readData();
|
|
||||||
void processCubeData(const QByteArray &data);
|
|
||||||
|
|
||||||
|
|
||||||
public slots:
|
|
||||||
void enablePairingMode();
|
|
||||||
void disablePairingMode();
|
|
||||||
void refresh();
|
|
||||||
void customRequest(QByteArray data);
|
|
||||||
|
|
||||||
// for actions
|
|
||||||
void setDeviceSetpointTemp(QByteArray rfAddress, int roomId, double temperature, ActionId actionId);
|
|
||||||
void setDeviceAutoMode(QByteArray rfAddress, int roomId, ActionId actionId);
|
|
||||||
void setDeviceManuelMode(QByteArray rfAddress, int roomId, ActionId actionId);
|
|
||||||
void setDeviceEcoMode(QByteArray rfAddress, int roomId, ActionId actionId);
|
|
||||||
void displayCurrentTemperature(QByteArray rfAddress, int roomId, bool display, ActionId actionId);
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -1,12 +0,0 @@
|
|||||||
include(../plugins.pri)
|
|
||||||
|
|
||||||
TARGET = $$qtLibraryTarget(nymea_integrationplugingenericinterfaces)
|
|
||||||
|
|
||||||
SOURCES += \
|
|
||||||
integrationplugingenericinterfaces.cpp
|
|
||||||
|
|
||||||
HEADERS += \
|
|
||||||
integrationplugingenericinterfaces.h
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -1,162 +0,0 @@
|
|||||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
||||||
*
|
|
||||||
* 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
|
|
||||||
* reproduction, publication, editing and translation, are reserved. The use of
|
|
||||||
* this project is subject to the terms of a license agreement to be concluded
|
|
||||||
* with nymea GmbH in accordance with the terms of use of nymea GmbH, available
|
|
||||||
* under https://nymea.io/license
|
|
||||||
*
|
|
||||||
* GNU Lesser General Public License Usage
|
|
||||||
* Alternatively, this project may be redistributed and/or modified under the
|
|
||||||
* terms of the GNU Lesser General Public License as published by the Free
|
|
||||||
* Software Foundation; version 3. This project is distributed in the hope that
|
|
||||||
* it will be useful, but WITHOUT ANY WARRANTY; without even the implied
|
|
||||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public License
|
|
||||||
* along with this project. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* For any further details and any questions please contact us under
|
|
||||||
* contact@nymea.io or see our FAQ/Licensing Information on
|
|
||||||
* https://nymea.io/license/faq
|
|
||||||
*
|
|
||||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\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 "integrationplugingenericinterfaces.h"
|
|
||||||
#include "plugininfo.h"
|
|
||||||
|
|
||||||
#include <QDebug>
|
|
||||||
|
|
||||||
IntegrationPluginGenericInterfaces::IntegrationPluginGenericInterfaces()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void IntegrationPluginGenericInterfaces::setupThing(ThingSetupInfo *info)
|
|
||||||
{
|
|
||||||
info->finish(Thing::ThingErrorNoError);
|
|
||||||
}
|
|
||||||
|
|
||||||
void IntegrationPluginGenericInterfaces::executeAction(ThingActionInfo *info)
|
|
||||||
{
|
|
||||||
Thing *thing = info->thing();
|
|
||||||
Action action = info->action();
|
|
||||||
|
|
||||||
if (thing->thingClassId() == awningThingClassId) {
|
|
||||||
if (action.actionTypeId() == awningOpenActionTypeId) {
|
|
||||||
thing->setStateValue(awningStatusStateTypeId, "Opening");
|
|
||||||
thing->setStateValue(awningClosingOutputStateTypeId, false);
|
|
||||||
thing->setStateValue(awningOpeningOutputStateTypeId, true);
|
|
||||||
return info->finish(Thing::ThingErrorNoError);
|
|
||||||
}
|
|
||||||
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) {
|
|
||||||
thing->setStateValue(awningStatusStateTypeId, "Closing");
|
|
||||||
thing->setStateValue(awningOpeningOutputStateTypeId, false);
|
|
||||||
thing->setStateValue(awningClosingOutputStateTypeId, true);
|
|
||||||
return info->finish(Thing::ThingErrorNoError);
|
|
||||||
}
|
|
||||||
return info->finish(Thing::ThingErrorActionTypeNotFound);
|
|
||||||
}
|
|
||||||
|
|
||||||
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) {
|
|
||||||
thing->setStateValue(blindStatusStateTypeId, "Stopped");
|
|
||||||
thing->setStateValue(blindOpeningOutputStateTypeId, false);
|
|
||||||
thing->setStateValue(blindClosingOutputStateTypeId, false);
|
|
||||||
return info->finish(Thing::ThingErrorNoError);
|
|
||||||
}
|
|
||||||
if (action.actionTypeId() == blindCloseActionTypeId) {
|
|
||||||
thing->setStateValue(blindStatusStateTypeId, "Closing");
|
|
||||||
thing->setStateValue(blindOpeningOutputStateTypeId, false);
|
|
||||||
thing->setStateValue(blindClosingOutputStateTypeId, true);
|
|
||||||
return info->finish(Thing::ThingErrorNoError);
|
|
||||||
}
|
|
||||||
return info->finish(Thing::ThingErrorActionTypeNotFound);
|
|
||||||
}
|
|
||||||
|
|
||||||
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) {
|
|
||||||
thing->setStateValue(shutterStatusStateTypeId, "Stopped");
|
|
||||||
thing->setStateValue(shutterOpeningOutputStateTypeId, false);
|
|
||||||
thing->setStateValue(shutterClosingOutputStateTypeId, false);
|
|
||||||
return info->finish(Thing::ThingErrorNoError);
|
|
||||||
}
|
|
||||||
if (action.actionTypeId() == shutterCloseActionTypeId) {
|
|
||||||
thing->setStateValue(shutterStatusStateTypeId, "Closing");
|
|
||||||
thing->setStateValue(shutterOpeningOutputStateTypeId, false);
|
|
||||||
thing->setStateValue(shutterClosingOutputStateTypeId, true);
|
|
||||||
return info->finish(Thing::ThingErrorNoError);
|
|
||||||
}
|
|
||||||
return info->finish(Thing::ThingErrorActionTypeNotFound);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (thing->thingClassId() == socketThingClassId) {
|
|
||||||
if (action.actionTypeId() == socketPowerActionTypeId) {
|
|
||||||
thing->setStateValue(socketPowerStateTypeId, action.param(socketPowerActionPowerParamTypeId).value());
|
|
||||||
return info->finish(Thing::ThingErrorNoError);
|
|
||||||
}
|
|
||||||
return info->finish(Thing::ThingErrorActionTypeNotFound);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (thing->thingClassId() == lightThingClassId) {
|
|
||||||
if (action.actionTypeId() == lightPowerActionTypeId) {
|
|
||||||
thing->setStateValue(lightPowerStateTypeId, action.param(lightPowerActionPowerParamTypeId).value());
|
|
||||||
return info->finish(Thing::ThingErrorNoError);
|
|
||||||
}
|
|
||||||
return info->finish(Thing::ThingErrorActionTypeNotFound);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (thing->thingClassId() == heatingThingClassId) {
|
|
||||||
if (action.actionTypeId() == heatingPowerActionTypeId) {
|
|
||||||
thing->setStateValue(heatingPowerStateTypeId, action.param(heatingPowerActionPowerParamTypeId).value());
|
|
||||||
return info->finish(Thing::ThingErrorNoError);
|
|
||||||
}
|
|
||||||
return info->finish(Thing::ThingErrorActionTypeNotFound);
|
|
||||||
}
|
|
||||||
return info->finish(Thing::ThingErrorThingClassNotFound);
|
|
||||||
}
|
|
||||||
@ -1,236 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "GenericInterfaces",
|
|
||||||
"displayName": "Generic Interfaces",
|
|
||||||
"id": "b3188696-2585-4806-bf98-30ab576ce5c8",
|
|
||||||
"vendors": [
|
|
||||||
{
|
|
||||||
"name": "nymea",
|
|
||||||
"displayName": "nymea",
|
|
||||||
"id": "2062d64d-3232-433c-88bc-0d33c0ba2ba6",
|
|
||||||
"thingClasses": [
|
|
||||||
{
|
|
||||||
"id": "9e69585f-90ba-44e4-ad90-5b4bffbe345a",
|
|
||||||
"name": "awning",
|
|
||||||
"displayName": "Awning interface",
|
|
||||||
"createMethods": ["user"],
|
|
||||||
"interfaces": ["awning"],
|
|
||||||
"stateTypes": [
|
|
||||||
{
|
|
||||||
"id": "4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4",
|
|
||||||
"name": "openingOutput",
|
|
||||||
"displayName": "Opening output",
|
|
||||||
"displayNameEvent": "Opening output changed",
|
|
||||||
"type": "bool",
|
|
||||||
"defaultValue": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "59bfd575-709f-4e43-9726-de26e6d4ca8b",
|
|
||||||
"name": "closingOutput",
|
|
||||||
"displayName": "Closing output",
|
|
||||||
"displayNameEvent": "Closing output changed",
|
|
||||||
"type": "bool",
|
|
||||||
"defaultValue": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "ff6f2565-2a2e-4d34-b10f-d3f73b676399",
|
|
||||||
"name": "status",
|
|
||||||
"displayName": "Status",
|
|
||||||
"displayNameEvent": "Status changed",
|
|
||||||
"type": "QString",
|
|
||||||
"possibleValues": [
|
|
||||||
"Opening",
|
|
||||||
"Stopped",
|
|
||||||
"Closing"
|
|
||||||
],
|
|
||||||
"defaultValue": "Stopped"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"actionTypes": [
|
|
||||||
{
|
|
||||||
"id": "979e9c51-5a93-4635-85e3-01874306b229",
|
|
||||||
"name": "open",
|
|
||||||
"displayName": "Open"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "555cafe4-bd12-42c6-bab1-8cd59af6468e",
|
|
||||||
"name": "stop",
|
|
||||||
"displayName": "Stop"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "53b5ba77-9a34-4cd6-ad24-fb01fc465f98",
|
|
||||||
"name": "close",
|
|
||||||
"displayName": "Close"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "17ee3657-6ad8-4ae2-8959-3cf66cec8d13",
|
|
||||||
"name": "blind",
|
|
||||||
"displayName": "Blind interface",
|
|
||||||
"createMethods": ["user"],
|
|
||||||
"interfaces": ["blind"],
|
|
||||||
"stateTypes": [
|
|
||||||
{
|
|
||||||
"id": "b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b",
|
|
||||||
"name": "openingOutput",
|
|
||||||
"displayName": "Opening output",
|
|
||||||
"displayNameEvent": "Opening output changed",
|
|
||||||
"type": "bool",
|
|
||||||
"defaultValue": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "9b673430-572d-4a9c-85d3-dafadbe541cd",
|
|
||||||
"name": "closingOutput",
|
|
||||||
"displayName": "Closing output",
|
|
||||||
"displayNameEvent": "Closing output changed",
|
|
||||||
"type": "bool",
|
|
||||||
"defaultValue": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "5fdec1e0-51f6-48b9-b743-ba572504b2c1",
|
|
||||||
"name": "status",
|
|
||||||
"displayName": "Status",
|
|
||||||
"displayNameEvent": "Status changed",
|
|
||||||
"type": "QString",
|
|
||||||
"possibleValues": [
|
|
||||||
"Opening",
|
|
||||||
"Stopped",
|
|
||||||
"Closing"
|
|
||||||
],
|
|
||||||
"defaultValue": "Stopped"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"actionTypes": [
|
|
||||||
{
|
|
||||||
"id": "120dc265-dbbb-4f19-9d31-c372c23479c0",
|
|
||||||
"name": "open",
|
|
||||||
"displayName": "Open"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "1a924c9a-5dcb-4b1c-8fd6-ab101098e007",
|
|
||||||
"name": "stop",
|
|
||||||
"displayName": "Stop"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "86e9cf21-7487-47c4-b4be-4a940d7235fb",
|
|
||||||
"name": "close",
|
|
||||||
"displayName": "Close"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "7917c2e7-d7d2-4c47-a38d-41f7dd7693d9",
|
|
||||||
"name": "shutter",
|
|
||||||
"displayName": "Shutter interface",
|
|
||||||
"createMethods": ["user"],
|
|
||||||
"interfaces": ["shutter"],
|
|
||||||
"stateTypes": [
|
|
||||||
{
|
|
||||||
"id": "cc547728-b309-4695-b355-49748ef2521c",
|
|
||||||
"name": "openingOutput",
|
|
||||||
"displayName": "Opening output",
|
|
||||||
"displayNameEvent": "Opening output changed",
|
|
||||||
"type": "bool",
|
|
||||||
"defaultValue": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "1c35df0e-4c41-455f-893a-0145377952a0",
|
|
||||||
"name": "closingOutput",
|
|
||||||
"displayName": "Closing output",
|
|
||||||
"displayNameEvent": "Closing output changed",
|
|
||||||
"type": "bool",
|
|
||||||
"defaultValue": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "6d6e72dc-4d2b-4ec1-82c2-54405a682711",
|
|
||||||
"name": "status",
|
|
||||||
"displayName": "Status",
|
|
||||||
"displayNameEvent": "Status changed",
|
|
||||||
"type": "QString",
|
|
||||||
"possibleValues": [
|
|
||||||
"Opening",
|
|
||||||
"Stopped",
|
|
||||||
"Closing"
|
|
||||||
],
|
|
||||||
"defaultValue": "Stopped"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"actionTypes": [
|
|
||||||
{
|
|
||||||
"id": "9deb662d-2378-4345-a898-8742d41e43c1",
|
|
||||||
"name": "open",
|
|
||||||
"displayName": "Open"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "db5f3332-1f4e-4f9e-84d2-93c5d7de315c",
|
|
||||||
"name": "stop",
|
|
||||||
"displayName": "Stop"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "cf5303f1-67c7-4cef-b11c-eb9de6fc8a87",
|
|
||||||
"name": "close",
|
|
||||||
"displayName": "Close"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "4e7261af-a27b-4446-8346-914ea59f7547",
|
|
||||||
"name": "socket",
|
|
||||||
"displayName": "Socket interface",
|
|
||||||
"createMethods": ["user"],
|
|
||||||
"interfaces": ["powersocket"],
|
|
||||||
"stateTypes": [
|
|
||||||
{
|
|
||||||
"id": "018038d7-1d02-4b17-8fe3-babca044b087",
|
|
||||||
"name": "power",
|
|
||||||
"displayName": "Power",
|
|
||||||
"displayNameEvent": "Power changed",
|
|
||||||
"displayNameAction": "Set power",
|
|
||||||
"type": "bool",
|
|
||||||
"defaultValue": false,
|
|
||||||
"writable": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "c50d3216-f307-4f9f-8190-4391510c385c",
|
|
||||||
"name": "light",
|
|
||||||
"displayName": "Light interface",
|
|
||||||
"createMethods": ["user"],
|
|
||||||
"interfaces": ["light"],
|
|
||||||
"stateTypes": [
|
|
||||||
{
|
|
||||||
"id": "8b6e4a67-6522-408b-b676-8d2f09ed2d54",
|
|
||||||
"name": "power",
|
|
||||||
"displayName": "Power",
|
|
||||||
"displayNameEvent": "Power changed",
|
|
||||||
"displayNameAction": "Set power",
|
|
||||||
"type": "bool",
|
|
||||||
"defaultValue": false,
|
|
||||||
"writable": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "392854c4-3d14-4cf8-96cd-d933526bd197",
|
|
||||||
"name": "heating",
|
|
||||||
"displayName": "Heating interface",
|
|
||||||
"createMethods": ["user"],
|
|
||||||
"interfaces": ["heating"],
|
|
||||||
"stateTypes": [
|
|
||||||
{
|
|
||||||
"id": "409b635e-a754-4b5c-b3f0-d1c5a0fb3f03",
|
|
||||||
"name": "power",
|
|
||||||
"displayName": "Power",
|
|
||||||
"displayNameEvent": "Power changed",
|
|
||||||
"displayNameAction": "Set power",
|
|
||||||
"type": "bool",
|
|
||||||
"defaultValue": false,
|
|
||||||
"writable": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -1,185 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!DOCTYPE TS>
|
|
||||||
<TS version="2.1">
|
|
||||||
<context>
|
|
||||||
<name>GenericInterfaces</name>
|
|
||||||
<message>
|
|
||||||
<source>Awning interface</source>
|
|
||||||
<extracomment>The name of the ThingClass ({9e69585f-90ba-44e4-ad90-5b4bffbe345a})</extracomment>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Blind interface</source>
|
|
||||||
<extracomment>The name of the ThingClass ({17ee3657-6ad8-4ae2-8959-3cf66cec8d13})</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 ({86e9cf21-7487-47c4-b4be-4a940d7235fb}) of ThingClass blind
|
|
||||||
----------
|
|
||||||
The name of the ActionType ({53b5ba77-9a34-4cd6-ad24-fb01fc465f98}) of ThingClass awning</extracomment>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Closing output</source>
|
|
||||||
<extracomment>The name of the ParamType (ThingClass: shutter, EventType: closingOutput, ID: {1c35df0e-4c41-455f-893a-0145377952a0})
|
|
||||||
----------
|
|
||||||
The name of the StateType ({1c35df0e-4c41-455f-893a-0145377952a0}) of ThingClass shutter
|
|
||||||
----------
|
|
||||||
The name of the ParamType (ThingClass: blind, EventType: closingOutput, ID: {9b673430-572d-4a9c-85d3-dafadbe541cd})
|
|
||||||
----------
|
|
||||||
The name of the StateType ({9b673430-572d-4a9c-85d3-dafadbe541cd}) of ThingClass blind
|
|
||||||
----------
|
|
||||||
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 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 ({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>Generic Interfaces</source>
|
|
||||||
<extracomment>The name of the plugin GenericInterfaces ({b3188696-2585-4806-bf98-30ab576ce5c8})</extracomment>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Heating interface</source>
|
|
||||||
<extracomment>The name of the ThingClass ({392854c4-3d14-4cf8-96cd-d933526bd197})</extracomment>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Light interface</source>
|
|
||||||
<extracomment>The name of the ThingClass ({c50d3216-f307-4f9f-8190-4391510c385c})</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 ({120dc265-dbbb-4f19-9d31-c372c23479c0}) of ThingClass blind
|
|
||||||
----------
|
|
||||||
The name of the ActionType ({979e9c51-5a93-4635-85e3-01874306b229}) of ThingClass awning</extracomment>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Opening output</source>
|
|
||||||
<extracomment>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, 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, EventType: openingOutput, ID: {4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4})
|
|
||||||
----------
|
|
||||||
The name of the StateType ({4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4}) of ThingClass awning</extracomment>
|
|
||||||
<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 ({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>Power</source>
|
|
||||||
<extracomment>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 type="unfinished"></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 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>Shutter interface</source>
|
|
||||||
<extracomment>The name of the ThingClass ({7917c2e7-d7d2-4c47-a38d-41f7dd7693d9})</extracomment>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Socket interface</source>
|
|
||||||
<extracomment>The name of the ThingClass ({4e7261af-a27b-4446-8346-914ea59f7547})</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: 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 ({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 ({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>nymea</source>
|
|
||||||
<extracomment>The name of the vendor ({2062d64d-3232-433c-88bc-0d33c0ba2ba6})</extracomment>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
|
||||||
</TS>
|
|
||||||
39
genericthings/README.md
Normal file
39
genericthings/README.md
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# Generic things
|
||||||
|
|
||||||
|
This plugin allows to create virtual generic things in nymea. Such things don't have any
|
||||||
|
functionality on their own, but allow to create a visually appealing experience when
|
||||||
|
using general purpose input and outputs, such as GPIOs.
|
||||||
|
|
||||||
|
## Set-up
|
||||||
|
|
||||||
|
First, set up a thing with generic inputs or outputs. For instance from the GPIO plugin.
|
||||||
|
When done, set up the desired generic thing and use the things settings to connect
|
||||||
|
the inputs and/or outputs accordingly.
|
||||||
|
|
||||||
|
### Example: A light switch on a digital output GPIO
|
||||||
|
|
||||||
|
First, set up the GPIO to control the light. Please refer to the documentation of the
|
||||||
|
according plugin for this. Once the lights can be controlled by nymea using the raw
|
||||||
|
GPIO toggle, set up a generic light from this plugin and go to the settings of the
|
||||||
|
newly added generic light. In there, you'll find a section for Input/Output connections
|
||||||
|
which can be used to connect the power state of this generic light to the GPIO that
|
||||||
|
actually controls the light. The light can now be used like any other ready-made light
|
||||||
|
device in nymea.
|
||||||
|
|
||||||
|
### Example: A soil moisture sensor on an analog input GPIO
|
||||||
|
|
||||||
|
First, set up the GPIO to receive the analog GPIO values from the sensor. Normally
|
||||||
|
such an analog input GPIO will dispatch values from 0V to e.g. 3.3V, depending on the
|
||||||
|
hardware. An input value of 0V normally refers to a soil moisture value of 0%, while
|
||||||
|
an input value of 3.3V would refer to the maximum, that is 100% soil moisture. Once
|
||||||
|
those input values are received in nymea, set up a generic soil moisture thing and
|
||||||
|
go to its settings. In there you'll find the Input/Output connections section which
|
||||||
|
allows to map this generic soil moisture sensure to the according GPIO input. Once
|
||||||
|
this connection has been made, the generic soil moisture thing will represent the
|
||||||
|
input from the GPIO in a nice sensor view.
|
||||||
|
Some sensors might not support the full range from 0% to 100% and might output
|
||||||
|
a value of 0V on a minimum soil moisture of e.g. 10% or might only be able to
|
||||||
|
measure the soil moisture up to, say, 90%. Normally the sensor hardware would give
|
||||||
|
that information in the data sheet or user guide. If this is the case, the appropriate
|
||||||
|
input range can also be defined in the generic moisture sensor page.
|
||||||
|
|
||||||
12
genericthings/genericthings.pro
Normal file
12
genericthings/genericthings.pro
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
include(../plugins.pri)
|
||||||
|
|
||||||
|
TARGET = $$qtLibraryTarget(nymea_integrationplugingenericthings)
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
integrationplugingenericthings.cpp
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
integrationplugingenericthings.h
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
307
genericthings/integrationplugingenericthings.cpp
Normal file
307
genericthings/integrationplugingenericthings.cpp
Normal file
@ -0,0 +1,307 @@
|
|||||||
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
* reproduction, publication, editing and translation, are reserved. The use of
|
||||||
|
* this project is subject to the terms of a license agreement to be concluded
|
||||||
|
* with nymea GmbH in accordance with the terms of use of nymea GmbH, available
|
||||||
|
* under https://nymea.io/license
|
||||||
|
*
|
||||||
|
* GNU Lesser General Public License Usage
|
||||||
|
* Alternatively, this project may be redistributed and/or modified under the
|
||||||
|
* terms of the GNU Lesser General Public License as published by the Free
|
||||||
|
* Software Foundation; version 3. This project is distributed in the hope that
|
||||||
|
* it will be useful, but WITHOUT ANY WARRANTY; without even the implied
|
||||||
|
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this project. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* For any further details and any questions please contact us under
|
||||||
|
* contact@nymea.io or see our FAQ/Licensing Information on
|
||||||
|
* https://nymea.io/license/faq
|
||||||
|
*
|
||||||
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\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"
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QtMath>
|
||||||
|
|
||||||
|
IntegrationPluginGenericThings::IntegrationPluginGenericThings()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void IntegrationPluginGenericThings::setupThing(ThingSetupInfo *info)
|
||||||
|
{
|
||||||
|
info->finish(Thing::ThingErrorNoError);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IntegrationPluginGenericThings::executeAction(ThingActionInfo *info)
|
||||||
|
{
|
||||||
|
Thing *thing = info->thing();
|
||||||
|
Action action = info->action();
|
||||||
|
|
||||||
|
if (thing->thingClassId() == awningThingClassId) {
|
||||||
|
if (action.actionTypeId() == awningOpenActionTypeId) {
|
||||||
|
thing->setStateValue(awningStatusStateTypeId, "Opening");
|
||||||
|
thing->setStateValue(awningClosingOutputStateTypeId, false);
|
||||||
|
thing->setStateValue(awningOpeningOutputStateTypeId, true);
|
||||||
|
return info->finish(Thing::ThingErrorNoError);
|
||||||
|
}
|
||||||
|
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) {
|
||||||
|
thing->setStateValue(awningStatusStateTypeId, "Closing");
|
||||||
|
thing->setStateValue(awningOpeningOutputStateTypeId, false);
|
||||||
|
thing->setStateValue(awningClosingOutputStateTypeId, true);
|
||||||
|
return info->finish(Thing::ThingErrorNoError);
|
||||||
|
}
|
||||||
|
if (action.actionTypeId() == awningOpeningOutputActionTypeId) {
|
||||||
|
bool on = action.param(awningOpeningOutputActionOpeningOutputParamTypeId).value().toBool();
|
||||||
|
thing->setStateValue(awningOpeningOutputStateTypeId, on);
|
||||||
|
if (on) {
|
||||||
|
thing->setStateValue(awningStatusStateTypeId, "Opening");
|
||||||
|
thing->setStateValue(awningClosingOutputStateTypeId, false);
|
||||||
|
} else {
|
||||||
|
thing->setStateValue(awningStatusStateTypeId, "Stopped");
|
||||||
|
}
|
||||||
|
info->finish(Thing::ThingErrorNoError);
|
||||||
|
}
|
||||||
|
if (action.actionTypeId() == awningClosingOutputActionTypeId) {
|
||||||
|
bool on = action.param(awningClosingOutputActionClosingOutputParamTypeId).value().toBool();
|
||||||
|
thing->setStateValue(awningClosingOutputStateTypeId, on);
|
||||||
|
if (on) {
|
||||||
|
thing->setStateValue(awningStatusStateTypeId, "Closing");
|
||||||
|
thing->setStateValue(awningOpeningOutputStateTypeId, false);
|
||||||
|
} else {
|
||||||
|
thing->setStateValue(awningStatusStateTypeId, "Stopped");
|
||||||
|
}
|
||||||
|
info->finish(Thing::ThingErrorNoError);
|
||||||
|
}
|
||||||
|
return info->finish(Thing::ThingErrorActionTypeNotFound);
|
||||||
|
}
|
||||||
|
|
||||||
|
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) {
|
||||||
|
thing->setStateValue(blindStatusStateTypeId, "Stopped");
|
||||||
|
thing->setStateValue(blindOpeningOutputStateTypeId, false);
|
||||||
|
thing->setStateValue(blindClosingOutputStateTypeId, false);
|
||||||
|
return info->finish(Thing::ThingErrorNoError);
|
||||||
|
}
|
||||||
|
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) {
|
||||||
|
bool on = action.param(blindOpeningOutputActionOpeningOutputParamTypeId).value().toBool();
|
||||||
|
thing->setStateValue(blindOpeningOutputStateTypeId, on);
|
||||||
|
if (on) {
|
||||||
|
thing->setStateValue(blindStatusStateTypeId, "Opening");
|
||||||
|
thing->setStateValue(blindClosingOutputStateTypeId, false);
|
||||||
|
} else {
|
||||||
|
thing->setStateValue(blindStatusStateTypeId, "Stopped");
|
||||||
|
}
|
||||||
|
info->finish(Thing::ThingErrorNoError);
|
||||||
|
}
|
||||||
|
if (action.actionTypeId() == blindClosingOutputActionTypeId) {
|
||||||
|
bool on = action.param(blindClosingOutputActionClosingOutputParamTypeId).value().toBool();
|
||||||
|
thing->setStateValue(blindClosingOutputStateTypeId, on);
|
||||||
|
if (on) {
|
||||||
|
thing->setStateValue(blindStatusStateTypeId, "Closing");
|
||||||
|
thing->setStateValue(blindOpeningOutputStateTypeId, false);
|
||||||
|
} else {
|
||||||
|
thing->setStateValue(blindStatusStateTypeId, "Stopped");
|
||||||
|
}
|
||||||
|
info->finish(Thing::ThingErrorNoError);
|
||||||
|
}
|
||||||
|
return info->finish(Thing::ThingErrorActionTypeNotFound);
|
||||||
|
}
|
||||||
|
|
||||||
|
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) {
|
||||||
|
thing->setStateValue(shutterStatusStateTypeId, "Stopped");
|
||||||
|
thing->setStateValue(shutterOpeningOutputStateTypeId, false);
|
||||||
|
thing->setStateValue(shutterClosingOutputStateTypeId, false);
|
||||||
|
return info->finish(Thing::ThingErrorNoError);
|
||||||
|
}
|
||||||
|
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) {
|
||||||
|
bool on = action.param(shutterOpeningOutputActionOpeningOutputParamTypeId).value().toBool();
|
||||||
|
thing->setStateValue(shutterOpeningOutputStateTypeId, on);
|
||||||
|
if (on) {
|
||||||
|
thing->setStateValue(shutterStatusStateTypeId, "Opening");
|
||||||
|
thing->setStateValue(shutterClosingOutputStateTypeId, false);
|
||||||
|
} else {
|
||||||
|
thing->setStateValue(shutterStatusStateTypeId, "Stopped");
|
||||||
|
}
|
||||||
|
info->finish(Thing::ThingErrorNoError);
|
||||||
|
}
|
||||||
|
if (action.actionTypeId() == shutterClosingOutputActionTypeId) {
|
||||||
|
bool on = action.param(shutterClosingOutputActionClosingOutputParamTypeId).value().toBool();
|
||||||
|
thing->setStateValue(shutterClosingOutputStateTypeId, on);
|
||||||
|
if (on) {
|
||||||
|
thing->setStateValue(shutterStatusStateTypeId, "Closing");
|
||||||
|
thing->setStateValue(shutterOpeningOutputStateTypeId, false);
|
||||||
|
} else {
|
||||||
|
thing->setStateValue(shutterStatusStateTypeId, "Stopped");
|
||||||
|
}
|
||||||
|
info->finish(Thing::ThingErrorNoError);
|
||||||
|
}
|
||||||
|
return info->finish(Thing::ThingErrorActionTypeNotFound);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (thing->thingClassId() == socketThingClassId) {
|
||||||
|
if (action.actionTypeId() == socketPowerActionTypeId) {
|
||||||
|
thing->setStateValue(socketPowerStateTypeId, action.param(socketPowerActionPowerParamTypeId).value());
|
||||||
|
return info->finish(Thing::ThingErrorNoError);
|
||||||
|
}
|
||||||
|
return info->finish(Thing::ThingErrorActionTypeNotFound);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (thing->thingClassId() == lightThingClassId) {
|
||||||
|
if (action.actionTypeId() == lightPowerActionTypeId) {
|
||||||
|
thing->setStateValue(lightPowerStateTypeId, action.param(lightPowerActionPowerParamTypeId).value());
|
||||||
|
return info->finish(Thing::ThingErrorNoError);
|
||||||
|
}
|
||||||
|
return info->finish(Thing::ThingErrorActionTypeNotFound);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (thing->thingClassId() == heatingThingClassId) {
|
||||||
|
if (action.actionTypeId() == heatingPowerActionTypeId) {
|
||||||
|
thing->setStateValue(heatingPowerStateTypeId, action.param(heatingPowerActionPowerParamTypeId).value());
|
||||||
|
return info->finish(Thing::ThingErrorNoError);
|
||||||
|
}
|
||||||
|
return info->finish(Thing::ThingErrorActionTypeNotFound);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (thing->thingClassId() == powerSwitchThingClassId) {
|
||||||
|
if (action.actionTypeId() == powerSwitchPowerActionTypeId) {
|
||||||
|
thing->setStateValue(powerSwitchPowerStateTypeId, action.param(powerSwitchPowerActionPowerParamTypeId).value());
|
||||||
|
info->finish(Thing::ThingErrorNoError);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (thing->thingClassId() == irrigationThingClassId) {
|
||||||
|
if (action.actionTypeId() == irrigationPowerActionTypeId) {
|
||||||
|
thing->setStateValue(irrigationPowerStateTypeId, action.param(irrigationPowerActionPowerParamTypeId).value());
|
||||||
|
info->finish(Thing::ThingErrorNoError);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (thing->thingClassId() == ventilationThingClassId) {
|
||||||
|
if (action.actionTypeId() == ventilationPowerActionTypeId) {
|
||||||
|
thing->setStateValue(ventilationPowerStateTypeId, action.param(ventilationPowerActionPowerParamTypeId).value());
|
||||||
|
info->finish(Thing::ThingErrorNoError);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (thing->thingClassId() == temperatureSensorThingClassId) {
|
||||||
|
if (action.actionTypeId() == temperatureSensorInputActionTypeId) {
|
||||||
|
double value = info->action().param(temperatureSensorInputActionInputParamTypeId).value().toDouble();
|
||||||
|
thing->setStateValue(temperatureSensorInputStateTypeId, value);
|
||||||
|
double min = info->thing()->setting(temperatureSensorSettingsMinTempParamTypeId).toDouble();
|
||||||
|
double max = info->thing()->setting(temperatureSensorSettingsMaxTempParamTypeId).toDouble();
|
||||||
|
double newValue = mapDoubleValue(value, 0, 1, min, max);
|
||||||
|
double roundingFactor = qPow(10, info->thing()->setting(temperatureSensorSettingsAccuracyParamTypeId).toInt());
|
||||||
|
newValue = qRound(newValue * roundingFactor) / roundingFactor;
|
||||||
|
thing->setStateValue(temperatureSensorTemperatureStateTypeId, newValue);
|
||||||
|
info->finish(Thing::ThingErrorNoError);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (thing->thingClassId() == humiditySensorThingClassId) {
|
||||||
|
if (action.actionTypeId() == humiditySensorInputActionTypeId) {
|
||||||
|
double value = info->action().param(humiditySensorInputActionInputParamTypeId).value().toDouble();
|
||||||
|
thing->setStateValue(humiditySensorInputStateTypeId, value);
|
||||||
|
double min = info->thing()->setting(humiditySensorSettingsMinHumidityParamTypeId).toDouble();
|
||||||
|
double max = info->thing()->setting(humiditySensorSettingsMaxHumidityParamTypeId).toDouble();
|
||||||
|
double newValue = mapDoubleValue(value, 0, 100, min, max);
|
||||||
|
double roundingFactor = qPow(10, info->thing()->setting(humiditySensorSettingsAccuracyParamTypeId).toInt());
|
||||||
|
newValue = qRound(newValue * roundingFactor) / roundingFactor;
|
||||||
|
thing->setStateValue(humiditySensorHumidityStateTypeId, newValue);
|
||||||
|
info->finish(Thing::ThingErrorNoError);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (thing->thingClassId() == moistureSensorThingClassId) {
|
||||||
|
if (action.actionTypeId() == moistureSensorInputActionTypeId) {
|
||||||
|
double value = info->action().param(moistureSensorInputActionInputParamTypeId).value().toDouble();
|
||||||
|
thing->setStateValue(moistureSensorInputStateTypeId, value);
|
||||||
|
double min = info->thing()->setting(moistureSensorSettingsMinMoistureParamTypeId).toDouble();
|
||||||
|
double max = info->thing()->setting(moistureSensorSettingsMaxMoistureParamTypeId).toDouble();
|
||||||
|
double newValue = mapDoubleValue(value, 0, 100, min, max);
|
||||||
|
double roundingFactor = qPow(10, info->thing()->setting(moistureSensorSettingsAccuracyParamTypeId).toInt());
|
||||||
|
newValue = qRound(newValue * roundingFactor) / roundingFactor;
|
||||||
|
thing->setStateValue(moistureSensorMoistureStateTypeId, newValue);
|
||||||
|
info->finish(Thing::ThingErrorNoError);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return info->finish(Thing::ThingErrorThingClassNotFound);
|
||||||
|
}
|
||||||
|
|
||||||
|
double IntegrationPluginGenericThings::mapDoubleValue(double value, double fromMin, double fromMax, double toMin, double toMax)
|
||||||
|
{
|
||||||
|
double percent = (value - fromMin) / (fromMax - fromMin);
|
||||||
|
double toValue = toMin + (toMax - toMin) * percent;
|
||||||
|
return toValue;
|
||||||
|
}
|
||||||
@ -28,22 +28,25 @@
|
|||||||
*
|
*
|
||||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
#ifndef INTEGRATIONPLUGINGENERICINTERFACES_H
|
#ifndef INTEGRATIONPLUGINGENERICTHINGS_H
|
||||||
#define INTEGRATIONPLUGINGENERICINTERFACES_H
|
#define INTEGRATIONPLUGINGENERICTHINGS_H
|
||||||
|
|
||||||
#include "integrations/integrationplugin.h"
|
#include "integrations/integrationplugin.h"
|
||||||
|
|
||||||
class IntegrationPluginGenericInterfaces : public IntegrationPlugin
|
class IntegrationPluginGenericThings: public IntegrationPlugin
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
Q_PLUGIN_METADATA(IID "io.nymea.IntegrationPlugin" FILE "integrationplugingenericinterfaces.json")
|
Q_PLUGIN_METADATA(IID "io.nymea.IntegrationPlugin" FILE "integrationplugingenericthings.json")
|
||||||
Q_INTERFACES(IntegrationPlugin)
|
Q_INTERFACES(IntegrationPlugin)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit IntegrationPluginGenericInterfaces();
|
explicit IntegrationPluginGenericThings();
|
||||||
void setupThing(ThingSetupInfo *info) override;
|
void setupThing(ThingSetupInfo *info) override;
|
||||||
void executeAction(ThingActionInfo *info) override;
|
void executeAction(ThingActionInfo *info) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
double mapDoubleValue(double value, double fromMin, double fromMax, double toMin, double toMax);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // INTEGRATIONPLUGINGENERICINTERFACES_H
|
#endif // INTEGRATIONPLUGINGENERICTHINGS_H
|
||||||
495
genericthings/integrationplugingenericthings.json
Normal file
495
genericthings/integrationplugingenericthings.json
Normal file
@ -0,0 +1,495 @@
|
|||||||
|
{
|
||||||
|
"name": "GenericThings",
|
||||||
|
"displayName": "Generic Things",
|
||||||
|
"id": "b3188696-2585-4806-bf98-30ab576ce5c8",
|
||||||
|
"vendors": [
|
||||||
|
{
|
||||||
|
"name": "nymea",
|
||||||
|
"displayName": "nymea",
|
||||||
|
"id": "2062d64d-3232-433c-88bc-0d33c0ba2ba6",
|
||||||
|
"thingClasses": [
|
||||||
|
{
|
||||||
|
"id": "9e69585f-90ba-44e4-ad90-5b4bffbe345a",
|
||||||
|
"name": "awning",
|
||||||
|
"displayName": "Generic awning",
|
||||||
|
"createMethods": ["user"],
|
||||||
|
"interfaces": ["awning"],
|
||||||
|
"stateTypes": [
|
||||||
|
{
|
||||||
|
"id": "4bb951a4-ea23-4cf0-9269-41d2c4eaf5a4",
|
||||||
|
"name": "openingOutput",
|
||||||
|
"displayName": "Opening output",
|
||||||
|
"displayNameEvent": "Opening output changed",
|
||||||
|
"displayNameAction": "Set opening output",
|
||||||
|
"type": "bool",
|
||||||
|
"defaultValue": false,
|
||||||
|
"ioType": "digitalInput",
|
||||||
|
"writable": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "59bfd575-709f-4e43-9726-de26e6d4ca8b",
|
||||||
|
"name": "closingOutput",
|
||||||
|
"displayName": "Closing output",
|
||||||
|
"displayNameEvent": "Closing output changed",
|
||||||
|
"displayNameAction": "Set closing output",
|
||||||
|
"type": "bool",
|
||||||
|
"defaultValue": false,
|
||||||
|
"ioType": "digitalInput",
|
||||||
|
"writable": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ff6f2565-2a2e-4d34-b10f-d3f73b676399",
|
||||||
|
"name": "status",
|
||||||
|
"displayName": "Status",
|
||||||
|
"displayNameEvent": "Status changed",
|
||||||
|
"type": "QString",
|
||||||
|
"possibleValues": [
|
||||||
|
"Opening",
|
||||||
|
"Stopped",
|
||||||
|
"Closing"
|
||||||
|
],
|
||||||
|
"defaultValue": "Stopped"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"actionTypes": [
|
||||||
|
{
|
||||||
|
"id": "979e9c51-5a93-4635-85e3-01874306b229",
|
||||||
|
"name": "open",
|
||||||
|
"displayName": "Open"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "555cafe4-bd12-42c6-bab1-8cd59af6468e",
|
||||||
|
"name": "stop",
|
||||||
|
"displayName": "Stop"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "53b5ba77-9a34-4cd6-ad24-fb01fc465f98",
|
||||||
|
"name": "close",
|
||||||
|
"displayName": "Close"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "17ee3657-6ad8-4ae2-8959-3cf66cec8d13",
|
||||||
|
"name": "blind",
|
||||||
|
"displayName": "Generic blind",
|
||||||
|
"createMethods": ["user"],
|
||||||
|
"interfaces": ["blind"],
|
||||||
|
"stateTypes": [
|
||||||
|
{
|
||||||
|
"id": "b2dbf25c-27e5-4f7e-a57d-2ef6d087fa2b",
|
||||||
|
"name": "openingOutput",
|
||||||
|
"displayName": "Opening output",
|
||||||
|
"displayNameEvent": "Opening output changed",
|
||||||
|
"displayNameAction": "Set opening output",
|
||||||
|
"type": "bool",
|
||||||
|
"defaultValue": false,
|
||||||
|
"ioType": "digitalInput",
|
||||||
|
"writable": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "9b673430-572d-4a9c-85d3-dafadbe541cd",
|
||||||
|
"name": "closingOutput",
|
||||||
|
"displayName": "Closing output",
|
||||||
|
"displayNameEvent": "Closing output changed",
|
||||||
|
"displayNameAction": "Set closing output",
|
||||||
|
"type": "bool",
|
||||||
|
"defaultValue": false,
|
||||||
|
"ioType": "digitalInput",
|
||||||
|
"writable": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "5fdec1e0-51f6-48b9-b743-ba572504b2c1",
|
||||||
|
"name": "status",
|
||||||
|
"displayName": "Status",
|
||||||
|
"displayNameEvent": "Status changed",
|
||||||
|
"type": "QString",
|
||||||
|
"possibleValues": [
|
||||||
|
"Opening",
|
||||||
|
"Stopped",
|
||||||
|
"Closing"
|
||||||
|
],
|
||||||
|
"defaultValue": "Stopped"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"actionTypes": [
|
||||||
|
{
|
||||||
|
"id": "120dc265-dbbb-4f19-9d31-c372c23479c0",
|
||||||
|
"name": "open",
|
||||||
|
"displayName": "Open"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "1a924c9a-5dcb-4b1c-8fd6-ab101098e007",
|
||||||
|
"name": "stop",
|
||||||
|
"displayName": "Stop"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "86e9cf21-7487-47c4-b4be-4a940d7235fb",
|
||||||
|
"name": "close",
|
||||||
|
"displayName": "Close"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "7917c2e7-d7d2-4c47-a38d-41f7dd7693d9",
|
||||||
|
"name": "shutter",
|
||||||
|
"displayName": "Generic shutter",
|
||||||
|
"createMethods": ["user"],
|
||||||
|
"interfaces": ["shutter"],
|
||||||
|
"stateTypes": [
|
||||||
|
{
|
||||||
|
"id": "cc547728-b309-4695-b355-49748ef2521c",
|
||||||
|
"name": "openingOutput",
|
||||||
|
"displayName": "Opening output",
|
||||||
|
"displayNameEvent": "Opening output changed",
|
||||||
|
"displayNameAction": "Set opening output",
|
||||||
|
"type": "bool",
|
||||||
|
"defaultValue": false,
|
||||||
|
"ioType": "digitalInput",
|
||||||
|
"writable": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "1c35df0e-4c41-455f-893a-0145377952a0",
|
||||||
|
"name": "closingOutput",
|
||||||
|
"displayName": "Closing output",
|
||||||
|
"displayNameEvent": "Closing output changed",
|
||||||
|
"displayNameAction": "Set closing output",
|
||||||
|
"type": "bool",
|
||||||
|
"defaultValue": false,
|
||||||
|
"ioType": "digitalInput",
|
||||||
|
"writable": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "6d6e72dc-4d2b-4ec1-82c2-54405a682711",
|
||||||
|
"name": "status",
|
||||||
|
"displayName": "Status",
|
||||||
|
"displayNameEvent": "Status changed",
|
||||||
|
"type": "QString",
|
||||||
|
"possibleValues": [
|
||||||
|
"Opening",
|
||||||
|
"Stopped",
|
||||||
|
"Closing"
|
||||||
|
],
|
||||||
|
"defaultValue": "Stopped"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"actionTypes": [
|
||||||
|
{
|
||||||
|
"id": "9deb662d-2378-4345-a898-8742d41e43c1",
|
||||||
|
"name": "open",
|
||||||
|
"displayName": "Open"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "db5f3332-1f4e-4f9e-84d2-93c5d7de315c",
|
||||||
|
"name": "stop",
|
||||||
|
"displayName": "Stop"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "cf5303f1-67c7-4cef-b11c-eb9de6fc8a87",
|
||||||
|
"name": "close",
|
||||||
|
"displayName": "Close"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "4e7261af-a27b-4446-8346-914ea59f7547",
|
||||||
|
"name": "socket",
|
||||||
|
"displayName": "Generic power socket",
|
||||||
|
"createMethods": ["user"],
|
||||||
|
"interfaces": ["powersocket"],
|
||||||
|
"stateTypes": [
|
||||||
|
{
|
||||||
|
"id": "018038d7-1d02-4b17-8fe3-babca044b087",
|
||||||
|
"name": "power",
|
||||||
|
"displayName": "Power",
|
||||||
|
"displayNameEvent": "Power changed",
|
||||||
|
"displayNameAction": "Set power",
|
||||||
|
"type": "bool",
|
||||||
|
"defaultValue": false,
|
||||||
|
"writable": true,
|
||||||
|
"ioType": "digitalInput"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "c50d3216-f307-4f9f-8190-4391510c385c",
|
||||||
|
"name": "light",
|
||||||
|
"displayName": "Generic light",
|
||||||
|
"createMethods": ["user"],
|
||||||
|
"interfaces": ["light"],
|
||||||
|
"stateTypes": [
|
||||||
|
{
|
||||||
|
"id": "8b6e4a67-6522-408b-b676-8d2f09ed2d54",
|
||||||
|
"name": "power",
|
||||||
|
"displayName": "Power",
|
||||||
|
"displayNameEvent": "Power changed",
|
||||||
|
"displayNameAction": "Set power",
|
||||||
|
"type": "bool",
|
||||||
|
"defaultValue": false,
|
||||||
|
"writable": true,
|
||||||
|
"ioType": "digitalInput"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "392854c4-3d14-4cf8-96cd-d933526bd197",
|
||||||
|
"name": "heating",
|
||||||
|
"displayName": "Generic heating",
|
||||||
|
"createMethods": ["user"],
|
||||||
|
"interfaces": ["heating"],
|
||||||
|
"stateTypes": [
|
||||||
|
{
|
||||||
|
"id": "409b635e-a754-4b5c-b3f0-d1c5a0fb3f03",
|
||||||
|
"name": "power",
|
||||||
|
"displayName": "Power",
|
||||||
|
"displayNameEvent": "Power changed",
|
||||||
|
"displayNameAction": "Set power",
|
||||||
|
"type": "bool",
|
||||||
|
"defaultValue": false,
|
||||||
|
"writable": true,
|
||||||
|
"ioType": "digitalInput"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "57daa147-dd6f-4673-a757-d8f01a2054c7",
|
||||||
|
"name": "powerSwitch",
|
||||||
|
"displayName": "Generic power switch",
|
||||||
|
"createMethods": ["user"],
|
||||||
|
"interfaces": ["power"],
|
||||||
|
"stateTypes": [
|
||||||
|
{
|
||||||
|
"id": "08087af6-6a3b-4e4a-ac6d-56f23ce63edf",
|
||||||
|
"name": "power",
|
||||||
|
"displayName": "Power",
|
||||||
|
"displayNameEvent": "Powered on/off",
|
||||||
|
"displayNameAction": "Power on/off",
|
||||||
|
"type": "bool",
|
||||||
|
"defaultValue": false,
|
||||||
|
"writable": true,
|
||||||
|
"ioType": "digitalInput"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "d013b980-20d5-4791-9c4f-b411c39241d7",
|
||||||
|
"name": "irrigation",
|
||||||
|
"displayName": "Generic irrigation",
|
||||||
|
"createMethods": ["user"],
|
||||||
|
"interfaces": ["irrigation"],
|
||||||
|
"stateTypes": [
|
||||||
|
{
|
||||||
|
"id": "0212a287-c5ae-4644-8803-adfdd8caeb9a",
|
||||||
|
"name": "power",
|
||||||
|
"displayName": "Power",
|
||||||
|
"displayNameEvent": "Turned on or off",
|
||||||
|
"displayNameAction": "Turn on or off",
|
||||||
|
"type": "bool",
|
||||||
|
"defaultValue": false,
|
||||||
|
"writable": true,
|
||||||
|
"ioType": "digitalInput"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "24af8dd3-ddf0-47f0-bf09-70fdfd8dceab",
|
||||||
|
"name": "ventilation",
|
||||||
|
"displayName": "Generic ventilation",
|
||||||
|
"createMethods": ["user"],
|
||||||
|
"interfaces": ["ventilation"],
|
||||||
|
"stateTypes": [
|
||||||
|
{
|
||||||
|
"id": "846711b7-ea5a-4c66-a267-001c60406509",
|
||||||
|
"name": "power",
|
||||||
|
"displayName": "Power",
|
||||||
|
"displayNameEvent": "Turned on or off",
|
||||||
|
"displayNameAction": "Turn on or off",
|
||||||
|
"type": "bool",
|
||||||
|
"defaultValue": false,
|
||||||
|
"writable": true,
|
||||||
|
"ioType": "digitalInput"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "cf3d65db-6f68-457b-968c-cfb66cbd5311",
|
||||||
|
"name": "temperatureSensor",
|
||||||
|
"displayName": "Generic temperature sensor",
|
||||||
|
"createMethods": ["user"],
|
||||||
|
"interfaces": ["temperaturesensor"],
|
||||||
|
"settingsTypes": [
|
||||||
|
{
|
||||||
|
"id": "c86ae5d3-9335-4b6e-8231-bf3ed6670dff",
|
||||||
|
"name": "minTemp",
|
||||||
|
"displayName": "Minimum temperature",
|
||||||
|
"type": "double",
|
||||||
|
"defaultValue": -20,
|
||||||
|
"unit": "DegreeCelsius"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "8b5947ab-127f-4995-853b-eeeb628811e3",
|
||||||
|
"name": "maxTemp",
|
||||||
|
"displayName": "Maximum temperature",
|
||||||
|
"type": "double",
|
||||||
|
"defaultValue": 50,
|
||||||
|
"unit": "DegreeCelsius"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "3b543c3a-1fc0-45b5-8c07-600a6045f82e",
|
||||||
|
"name": "accuracy",
|
||||||
|
"displayName": "Accuracy (decimal places)",
|
||||||
|
"type": "uint",
|
||||||
|
"minValue": 0,
|
||||||
|
"maxValue": 5,
|
||||||
|
"defaultValue": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateTypes": [
|
||||||
|
{
|
||||||
|
"id": "d0b6c4be-339e-4b0f-a234-0611b7565395",
|
||||||
|
"name": "temperature",
|
||||||
|
"displayName": "Temperature",
|
||||||
|
"displayNameEvent": "Temperature changed",
|
||||||
|
"type": "double",
|
||||||
|
"unit": "DegreeCelsius",
|
||||||
|
"defaultValue": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "fed37466-1264-4ac1-84fd-aff3a1f7ff04",
|
||||||
|
"name": "input",
|
||||||
|
"displayName": "Input value",
|
||||||
|
"displayNameEvent": "Input value changed",
|
||||||
|
"displayNameAction": "Set input value",
|
||||||
|
"type": "double",
|
||||||
|
"defaultValue": 0,
|
||||||
|
"minValue": 0,
|
||||||
|
"maxValue": 1,
|
||||||
|
"writable": true,
|
||||||
|
"ioType": "analogOutput"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "d295bc64-773c-42a9-83e2-80db5fa0d1ce",
|
||||||
|
"name": "humiditySensor",
|
||||||
|
"displayName": "Generic humidity sensor",
|
||||||
|
"createMethods": ["user"],
|
||||||
|
"interfaces": ["humiditysensor"],
|
||||||
|
"settingsTypes": [
|
||||||
|
{
|
||||||
|
"id": "0218ffa9-3d49-4b25-a59f-c8831f190432",
|
||||||
|
"name": "minHumidity",
|
||||||
|
"displayName": "Minimum humidity",
|
||||||
|
"type": "double",
|
||||||
|
"defaultValue": 0,
|
||||||
|
"unit": "Percentage"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "10afc387-68d1-47ea-a816-0d1acad47b3c",
|
||||||
|
"name": "maxHumidity",
|
||||||
|
"displayName": "Maximum humidity",
|
||||||
|
"type": "double",
|
||||||
|
"defaultValue": 100,
|
||||||
|
"unit": "Percentage"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "38064841-6121-4862-a639-08fb0b778511",
|
||||||
|
"name": "accuracy",
|
||||||
|
"displayName": "Accuracy (decimal places)",
|
||||||
|
"type": "uint",
|
||||||
|
"minValue": 0,
|
||||||
|
"maxValue": 5,
|
||||||
|
"defaultValue": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateTypes": [
|
||||||
|
{
|
||||||
|
"id": "925225d9-2965-444a-9c42-63c2873700fb",
|
||||||
|
"name": "humidity",
|
||||||
|
"displayName": "Humidity",
|
||||||
|
"displayNameEvent": "Humidity changed",
|
||||||
|
"type": "double",
|
||||||
|
"unit": "Percentage",
|
||||||
|
"defaultValue": 0,
|
||||||
|
"minValue": 0,
|
||||||
|
"maxValue": 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "a8223e65-e704-4f84-9bbe-d8fc42597047",
|
||||||
|
"name": "input",
|
||||||
|
"displayName": "Input value",
|
||||||
|
"displayNameEvent": "Input value changed",
|
||||||
|
"displayNameAction": "Set input value",
|
||||||
|
"type": "double",
|
||||||
|
"defaultValue": 0,
|
||||||
|
"minValue": 0,
|
||||||
|
"maxValue": 100,
|
||||||
|
"writable": true,
|
||||||
|
"ioType": "analogOutput"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "33e610cf-ff30-481b-9f0b-d6857bcd41a5",
|
||||||
|
"name": "moistureSensor",
|
||||||
|
"displayName": "Generic soil moisture sensor",
|
||||||
|
"createMethods": ["user"],
|
||||||
|
"interfaces": ["moisturesensor"],
|
||||||
|
"settingsTypes": [
|
||||||
|
{
|
||||||
|
"id": "32153786-f1ae-4aa4-a84c-b9054102eb92",
|
||||||
|
"name": "minMoisture",
|
||||||
|
"displayName": "Minimum moisture",
|
||||||
|
"type": "double",
|
||||||
|
"defaultValue": 0,
|
||||||
|
"unit": "Percentage"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "3426817d-065e-4cfc-aa21-bb434de684d6",
|
||||||
|
"name": "maxMoisture",
|
||||||
|
"displayName": "Maximum moisture",
|
||||||
|
"type": "double",
|
||||||
|
"defaultValue": 100,
|
||||||
|
"unit": "Percentage"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "3c967a68-9951-4c9a-b019-79b913e762b6",
|
||||||
|
"name": "accuracy",
|
||||||
|
"displayName": "Accuracy (decimal places)",
|
||||||
|
"type": "uint",
|
||||||
|
"minValue": 0,
|
||||||
|
"maxValue": 5,
|
||||||
|
"defaultValue": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateTypes": [
|
||||||
|
{
|
||||||
|
"id": "7a62e1d2-92f2-424c-876c-870478a4b2bd",
|
||||||
|
"name": "moisture",
|
||||||
|
"displayName": "Soil moisture",
|
||||||
|
"displayNameEvent": "Soil moisture changed",
|
||||||
|
"type": "double",
|
||||||
|
"unit": "Percentage",
|
||||||
|
"minValue": 0,
|
||||||
|
"maxValue": 100,
|
||||||
|
"defaultValue": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ce64a425-d990-4fc1-966b-be6de445792b",
|
||||||
|
"name": "input",
|
||||||
|
"displayName": "Input value",
|
||||||
|
"displayNameEvent": "Input value changed",
|
||||||
|
"displayNameAction": "Set input value",
|
||||||
|
"type": "double",
|
||||||
|
"defaultValue": 0,
|
||||||
|
"minValue": 0,
|
||||||
|
"maxValue": 100,
|
||||||
|
"writable": true,
|
||||||
|
"ioType": "analogOutput"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -0,0 +1,386 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE TS>
|
||||||
|
<TS version="2.1" language="de">
|
||||||
|
<context>
|
||||||
|
<name>GenericThings</name>
|
||||||
|
<message>
|
||||||
|
<source>Close</source>
|
||||||
|
<extracomment>The name of the ActionType ({cf5303f1-67c7-4cef-b11c-eb9de6fc8a87}) of ThingClass shutter
|
||||||
|
----------
|
||||||
|
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>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Closing output</source>
|
||||||
|
<extracomment>The name of the ParamType (ThingClass: shutter, ActionType: closingOutput, ID: {1c35df0e-4c41-455f-893a-0145377952a0})
|
||||||
|
----------
|
||||||
|
The name of the ParamType (ThingClass: shutter, EventType: closingOutput, ID: {1c35df0e-4c41-455f-893a-0145377952a0})
|
||||||
|
----------
|
||||||
|
The name of the StateType ({1c35df0e-4c41-455f-893a-0145377952a0}) of ThingClass shutter
|
||||||
|
----------
|
||||||
|
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})
|
||||||
|
----------
|
||||||
|
The name of the StateType ({9b673430-572d-4a9c-85d3-dafadbe541cd}) of ThingClass blind
|
||||||
|
----------
|
||||||
|
The name of the ParamType (ThingClass: awning, ActionType: closingOutput, ID: {59bfd575-709f-4e43-9726-de26e6d4ca8b})
|
||||||
|
----------
|
||||||
|
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>
|
||||||
|
</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 ({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>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Generic Things</source>
|
||||||
|
<extracomment>The name of the plugin GenericThings ({b3188696-2585-4806-bf98-30ab576ce5c8})</extracomment>
|
||||||
|
<translation>Generische "Things"</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Generic awning</source>
|
||||||
|
<extracomment>The name of the ThingClass ({9e69585f-90ba-44e4-ad90-5b4bffbe345a})</extracomment>
|
||||||
|
<translation>Generische Markise</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Generic blind</source>
|
||||||
|
<extracomment>The name of the ThingClass ({17ee3657-6ad8-4ae2-8959-3cf66cec8d13})</extracomment>
|
||||||
|
<translation>Generischer Sichtschutz</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Generic heating</source>
|
||||||
|
<extracomment>The name of the ThingClass ({392854c4-3d14-4cf8-96cd-d933526bd197})</extracomment>
|
||||||
|
<translation>Generische Heizung</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Generic humidity sensor</source>
|
||||||
|
<extracomment>The name of the ThingClass ({d295bc64-773c-42a9-83e2-80db5fa0d1ce})</extracomment>
|
||||||
|
<translation>Generischer Feuchtigkeitssensor</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Generic light</source>
|
||||||
|
<extracomment>The name of the ThingClass ({c50d3216-f307-4f9f-8190-4391510c385c})</extracomment>
|
||||||
|
<translation>Generisches Licht</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Generic power socket</source>
|
||||||
|
<extracomment>The name of the ThingClass ({4e7261af-a27b-4446-8346-914ea59f7547})</extracomment>
|
||||||
|
<translation>Generische Steckdose</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>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Generic soil moisture sensor</source>
|
||||||
|
<extracomment>The name of the ThingClass ({33e610cf-ff30-481b-9f0b-d6857bcd41a5})</extracomment>
|
||||||
|
<translation>Generischer Erdfeuchtigkeitssensor</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Generic temperature sensor</source>
|
||||||
|
<extracomment>The name of the ThingClass ({cf3d65db-6f68-457b-968c-cfb66cbd5311})</extracomment>
|
||||||
|
<translation>Generischer Temperatursensor</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>
|
||||||
|
</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>
|
||||||
|
</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>
|
||||||
|
</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>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})
|
||||||
|
----------
|
||||||
|
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 (Nachkommastellen)</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
</TS>
|
||||||
@ -0,0 +1,386 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE TS>
|
||||||
|
<TS version="2.1">
|
||||||
|
<context>
|
||||||
|
<name>GenericThings</name>
|
||||||
|
<message>
|
||||||
|
<source>Close</source>
|
||||||
|
<extracomment>The name of the ActionType ({cf5303f1-67c7-4cef-b11c-eb9de6fc8a87}) of ThingClass shutter
|
||||||
|
----------
|
||||||
|
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 type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Closing output</source>
|
||||||
|
<extracomment>The name of the ParamType (ThingClass: shutter, ActionType: closingOutput, ID: {1c35df0e-4c41-455f-893a-0145377952a0})
|
||||||
|
----------
|
||||||
|
The name of the ParamType (ThingClass: shutter, EventType: closingOutput, ID: {1c35df0e-4c41-455f-893a-0145377952a0})
|
||||||
|
----------
|
||||||
|
The name of the StateType ({1c35df0e-4c41-455f-893a-0145377952a0}) of ThingClass shutter
|
||||||
|
----------
|
||||||
|
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})
|
||||||
|
----------
|
||||||
|
The name of the StateType ({9b673430-572d-4a9c-85d3-dafadbe541cd}) of ThingClass blind
|
||||||
|
----------
|
||||||
|
The name of the ParamType (ThingClass: awning, ActionType: closingOutput, ID: {59bfd575-709f-4e43-9726-de26e6d4ca8b})
|
||||||
|
----------
|
||||||
|
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 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 ({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>Generic Things</source>
|
||||||
|
<extracomment>The name of the plugin GenericThings ({b3188696-2585-4806-bf98-30ab576ce5c8})</extracomment>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Generic awning</source>
|
||||||
|
<extracomment>The name of the ThingClass ({9e69585f-90ba-44e4-ad90-5b4bffbe345a})</extracomment>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Generic blind</source>
|
||||||
|
<extracomment>The name of the ThingClass ({17ee3657-6ad8-4ae2-8959-3cf66cec8d13})</extracomment>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Generic heating</source>
|
||||||
|
<extracomment>The name of the ThingClass ({392854c4-3d14-4cf8-96cd-d933526bd197})</extracomment>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Generic humidity sensor</source>
|
||||||
|
<extracomment>The name of the ThingClass ({d295bc64-773c-42a9-83e2-80db5fa0d1ce})</extracomment>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Generic light</source>
|
||||||
|
<extracomment>The name of the ThingClass ({c50d3216-f307-4f9f-8190-4391510c385c})</extracomment>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Generic power socket</source>
|
||||||
|
<extracomment>The name of the ThingClass ({4e7261af-a27b-4446-8346-914ea59f7547})</extracomment>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Generic power switch</source>
|
||||||
|
<extracomment>The name of the ThingClass ({57daa147-dd6f-4673-a757-d8f01a2054c7})</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 type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Generic temperature sensor</source>
|
||||||
|
<extracomment>The name of the ThingClass ({cf3d65db-6f68-457b-968c-cfb66cbd5311})</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 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 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 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 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 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 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 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 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 ({120dc265-dbbb-4f19-9d31-c372c23479c0}) of ThingClass blind
|
||||||
|
----------
|
||||||
|
The name of the ActionType ({979e9c51-5a93-4635-85e3-01874306b229}) of ThingClass awning</extracomment>
|
||||||
|
<translation type="unfinished"></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 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 ({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>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 type="unfinished"></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 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 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 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: 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 ({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 ({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>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>
|
||||||
|
<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>
|
||||||
|
<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>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>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
</TS>
|
||||||
@ -150,9 +150,9 @@ void IntegrationPluginLeynew::executeAction(ThingActionInfo *info)
|
|||||||
// =======================================
|
// =======================================
|
||||||
// send data to hardware resource
|
// send data to hardware resource
|
||||||
if(hardwareManager()->radio433()->sendData(delay, rawData, repetitions)){
|
if(hardwareManager()->radio433()->sendData(delay, rawData, repetitions)){
|
||||||
qCDebug(dcLeynew) << "Transmitted" << pluginName() << thing->name() << action.id();
|
qCDebug(dcLeynew) << "Transmitted" << pluginName() << thing->name();
|
||||||
}else{
|
}else{
|
||||||
qCWarning(dcLeynew) << "Could not transmitt" << pluginName() << thing->name() << action.id();
|
qCWarning(dcLeynew) << "Could not transmitt" << pluginName() << thing->name();
|
||||||
return info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Error sending data."));
|
return info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Error sending data."));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -120,7 +120,6 @@ signals:
|
|||||||
void availableChanged(bool available);
|
void availableChanged(bool available);
|
||||||
void authenticationProcessFinished(const PairingTransactionId &pairingId, bool success);
|
void authenticationProcessFinished(const PairingTransactionId &pairingId, bool success);
|
||||||
void stateChanged(NukiUtils::LockState lockState);
|
void stateChanged(NukiUtils::LockState lockState);
|
||||||
void actionFinished(const ActionId &action, bool success);
|
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
// Bluetooth thing
|
// Bluetooth thing
|
||||||
|
|||||||
@ -22,7 +22,7 @@ PLUGIN_DIRS = \
|
|||||||
eq-3 \
|
eq-3 \
|
||||||
flowercare \
|
flowercare \
|
||||||
genericelements \
|
genericelements \
|
||||||
genericinterfaces \
|
genericthings \
|
||||||
gpio \
|
gpio \
|
||||||
httpcommander \
|
httpcommander \
|
||||||
intertechno \
|
intertechno \
|
||||||
|
|||||||
@ -108,8 +108,6 @@ private:
|
|||||||
QHash<QNetworkReply *, Thing *> m_bridgeSensorsDiscoveryRequests;
|
QHash<QNetworkReply *, Thing *> m_bridgeSensorsDiscoveryRequests;
|
||||||
QHash<QNetworkReply *, Thing *> m_bridgeSearchDevicesRequests;
|
QHash<QNetworkReply *, Thing *> m_bridgeSearchDevicesRequests;
|
||||||
|
|
||||||
QHash<QNetworkReply *, QPair<Thing *, ActionId> > m_asyncActions;
|
|
||||||
|
|
||||||
QHash<HueBridge *, Thing *> m_bridges;
|
QHash<HueBridge *, Thing *> m_bridges;
|
||||||
QHash<HueLight *, Thing *> m_lights;
|
QHash<HueLight *, Thing *> m_lights;
|
||||||
QHash<HueRemote *, Thing *> m_remotes;
|
QHash<HueRemote *, Thing *> m_remotes;
|
||||||
@ -135,7 +133,6 @@ private:
|
|||||||
void processLightsRefreshResponse(Thing *thing, const QByteArray &data);
|
void processLightsRefreshResponse(Thing *thing, const QByteArray &data);
|
||||||
void processSensorsRefreshResponse(Thing *thing, const QByteArray &data);
|
void processSensorsRefreshResponse(Thing *thing, const QByteArray &data);
|
||||||
void processSetNameResponse(Thing *thing, const QByteArray &data);
|
void processSetNameResponse(Thing *thing, const QByteArray &data);
|
||||||
void processActionResponse(Thing *thing, const ActionId actionId, const QByteArray &data);
|
|
||||||
|
|
||||||
void bridgeReachableChanged(Thing *thing, const bool &reachable);
|
void bridgeReachableChanged(Thing *thing, const bool &reachable);
|
||||||
|
|
||||||
|
|||||||
@ -58,7 +58,6 @@ private:
|
|||||||
QHash<QNetworkReply *, Thing *> m_refreshReplies;
|
QHash<QNetworkReply *, Thing *> m_refreshReplies;
|
||||||
|
|
||||||
void refresh(Thing* thing);
|
void refresh(Thing* thing);
|
||||||
bool setPower(Thing *thing, const bool &power, const ActionId &actionId);
|
|
||||||
|
|
||||||
void processRefreshData(const QByteArray &data, Thing *thing);
|
void processRefreshData(const QByteArray &data, Thing *thing);
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user