devices to things fixed

This commit is contained in:
Boernsman 2020-06-16 09:37:36 +02:00
parent 197c1e0019
commit 996c48f5be
3 changed files with 46 additions and 46 deletions

View File

@ -55,7 +55,7 @@ void IntegrationPluginDrexelUndWeiss::discoverThings(ThingDiscoveryInfo *info)
if (info->thingClassId() == modbusConnectionThingClassId) { if (info->thingClassId() == modbusConnectionThingClassId) {
Q_FOREACH(QSerialPortInfo port, QSerialPortInfo::availablePorts()) { Q_FOREACH(QSerialPortInfo port, QSerialPortInfo::availablePorts()) {
if (m_usedSerialPorts.contains(port.systemLocation())){ if (m_usedSerialPorts.contains(port.systemLocation())){
//device already in use //Thing already in use
qCDebug(dcDrexelUndWeiss()) << "Found serial port that is already used:" << port.portName(); qCDebug(dcDrexelUndWeiss()) << "Found serial port that is already used:" << port.portName();
} else { } else {
//Serial port is not yet used, create now a new one //Serial port is not yet used, create now a new one
@ -82,7 +82,7 @@ void IntegrationPluginDrexelUndWeiss::discoverThings(ThingDiscoveryInfo *info)
return; return;
} }
info->finish(Thing::ThingErrorDeviceClassNotFound); info->finish(Thing::ThingErrorThingClassNotFound);
return; return;
} }
@ -118,11 +118,11 @@ void IntegrationPluginDrexelUndWeiss::setupThing(ThingSetupInfo *info)
info->finish(Thing::ThingErrorNoError); info->finish(Thing::ThingErrorNoError);
return; return;
} }
info->finish(Thing::ThingErrorDeviceClassNotFound); info->finish(Thing::ThingErrorThingClassNotFound);
return; return;
} }
void IntegrationPluginDrexelUndWeiss::postSetupDevice(Thing *thing) void IntegrationPluginDrexelUndWeiss::postSetupThing(Thing *thing)
{ {
if (!m_refreshTimer) { if (!m_refreshTimer) {
// Refresh timer for TCP read // Refresh timer for TCP read
@ -132,8 +132,8 @@ void IntegrationPluginDrexelUndWeiss::postSetupDevice(Thing *thing)
} }
if (thing->thingClassId() == modbusConnectionThingClassId) { if (thing->thingClassId() == modbusConnectionThingClassId) {
// read Register 5000 and emit auto-device // read Register 5000 and emit auto-Thing
ModbusRTUMaster *modbus = m_modbusRTUMasters.value(device); ModbusRTUMaster *modbus = m_modbusRTUMasters.value(thing);
if (!modbus){ if (!modbus){
qCWarning(dcDrexelUndWeiss()) << "No modbus master available"; qCWarning(dcDrexelUndWeiss()) << "No modbus master available";
} }
@ -141,28 +141,28 @@ void IntegrationPluginDrexelUndWeiss::postSetupDevice(Thing *thing)
} }
if ((thing->thingClassId() == x2luThingClassId) || (thing->thingClassId() == x2wpThingClassId)) { if ((thing->thingClassId() == x2luThingClassId) || (thing->thingClassId() == x2wpThingClassId)) {
Device *parentDevice = myThings().findById(thing->parentId()); Thing *parentThing = myThings().findById(thing->parentId());
if (!parentDevice) { if (!parentThing) {
qWarning(dcDrexelUndWeiss()) << "Could not find the parent device"; qWarning(dcDrexelUndWeiss()) << "Could not find the parent Thing";
return; return;
} }
ModbusRTUMaster *modbus = m_modbusRTUMasters.value(parentDevice); ModbusRTUMaster *modbus = m_modbusRTUMasters.value(parentThing);
if (!modbus){ if (!modbus){
qCWarning(dcDrexelUndWeiss()) << "No modbus interface available"; qCWarning(dcDrexelUndWeiss()) << "No modbus interface available";
} }
updateStates(device); updateStates(thing);
// Update states // Update states
} }
} }
void IntegrationPluginDrexelUndWeiss::executeAction(DeviceActionInfo *info) void IntegrationPluginDrexelUndWeiss::executeAction(ThingActionInfo *info)
{ {
Thing *thing = info->device(); Thing *thing = info->thing();
Action action = info->action(); Action action = info->action();
if (thing->thingClassId() == modbusConnectionThingClassId) { if (thing->thingClassId() == modbusConnectionThingClassId) {
ModbusRTUMaster *modbus = m_modbusRTUMasters.value(device); ModbusRTUMaster *modbus = m_modbusRTUMasters.value(thing);
if (!modbus){ if (!modbus){
qCWarning(dcDrexelUndWeiss()) << "No modbus interface available"; qCWarning(dcDrexelUndWeiss()) << "No modbus interface available";
info->finish(Thing::ThingErrorHardwareFailure); info->finish(Thing::ThingErrorHardwareFailure);
@ -178,13 +178,13 @@ void IntegrationPluginDrexelUndWeiss::executeAction(DeviceActionInfo *info)
info->finish(Thing::ThingErrorActionTypeNotFound); info->finish(Thing::ThingErrorActionTypeNotFound);
} }
} else if (thing->thingClassId() == x2luThingClassId) { } else if (thing->thingClassId() == x2luThingClassId) {
Device *parentDevice = myThings().findById(thing->parentId()); Thing *parentThing = myThings().findById(thing->parentId());
if (!parentDevice) { if (!parentThing) {
qWarning(dcDrexelUndWeiss()) << "Could not find the parent device"; qWarning(dcDrexelUndWeiss()) << "Could not find the parent thing";
info->finish(Thing::ThingErrorHardwareFailure); info->finish(Thing::ThingErrorHardwareFailure);
return; return;
} }
ModbusRTUMaster *modbus = m_modbusRTUMasters.value(parentDevice); ModbusRTUMaster *modbus = m_modbusRTUMasters.value(parentThing);
int slave = thing->paramValue(x2luThingSlaveAddressParamTypeId).toInt(); int slave = thing->paramValue(x2luThingSlaveAddressParamTypeId).toInt();
if (!modbus){ if (!modbus){
qCWarning(dcDrexelUndWeiss()) << "No modbus interface available"; qCWarning(dcDrexelUndWeiss()) << "No modbus interface available";
@ -215,13 +215,13 @@ void IntegrationPluginDrexelUndWeiss::executeAction(DeviceActionInfo *info)
info->finish(Thing::ThingErrorActionTypeNotFound); info->finish(Thing::ThingErrorActionTypeNotFound);
} }
} else if (thing->thingClassId() == x2wpThingClassId) { } else if (thing->thingClassId() == x2wpThingClassId) {
Device *parentDevice = myThings().findById(thing->parentId()); Thing *parentThing = myThings().findById(thing->parentId());
if (!parentDevice) { if (!parentThing) {
qWarning(dcDrexelUndWeiss()) << "Could not find modbus interface"; qWarning(dcDrexelUndWeiss()) << "Could not find modbus interface";
info->finish(Thing::ThingErrorHardwareFailure); info->finish(Thing::ThingErrorHardwareFailure);
return; return;
} }
ModbusRTUMaster *modbus = m_modbusRTUMasters.value(parentDevice); ModbusRTUMaster *modbus = m_modbusRTUMasters.value(parentThing);
int slave = thing->paramValue(x2wpThingSlaveAddressParamTypeId).toInt(); int slave = thing->paramValue(x2wpThingSlaveAddressParamTypeId).toInt();
if (!modbus){ if (!modbus){
qCWarning(dcDrexelUndWeiss()) << "No modbus master available"; qCWarning(dcDrexelUndWeiss()) << "No modbus master available";
@ -243,16 +243,16 @@ void IntegrationPluginDrexelUndWeiss::executeAction(DeviceActionInfo *info)
info->finish(Thing::ThingErrorActionTypeNotFound); info->finish(Thing::ThingErrorActionTypeNotFound);
} }
} else { } else {
info->finish(Thing::ThingErrorDeviceClassNotFound); info->finish(Thing::ThingErrorThingClassNotFound);
} }
} }
void IntegrationPluginDrexelUndWeiss::deviceRemoved(Thing *thing) void IntegrationPluginDrexelUndWeiss::thingRemoved(Thing *thing)
{ {
if (thing->thingClassId() == modbusConnectionThingClassId) { if (thing->thingClassId() == modbusConnectionThingClassId) {
ModbusRTUMaster *modbus = m_modbusRTUMasters.take(device); ModbusRTUMaster *modbus = m_modbusRTUMasters.take(thing);
if (!modbus){ if (!modbus){
qCWarning(dcDrexelUndWeiss()) << "No modbus interface available"; qCWarning(dcDrexelUndWeiss()) << "No modbus interface available";
return; return;
@ -267,14 +267,14 @@ void IntegrationPluginDrexelUndWeiss::onRefreshTimer()
foreach (Thing *thing, myThings()) { foreach (Thing *thing, myThings()) {
if (thing->thingClassId() == modbusConnectionThingClassId) { if (thing->thingClassId() == modbusConnectionThingClassId) {
ModbusRTUMaster *modbus = m_modbusRTUMasters.value(device); ModbusRTUMaster *modbus = m_modbusRTUMasters.value(thing);
if (!modbus) { if (!modbus) {
qCWarning(dcDrexelUndWeiss()) << "No modbus master available"; qCWarning(dcDrexelUndWeiss()) << "No modbus master available";
return; return;
} }
} else if (thing->thingClassId() == x2luThingClassId || thing->thingClassId() == x2wpThingClassId){ } else if (thing->thingClassId() == x2luThingClassId || thing->thingClassId() == x2wpThingClassId){
updateStates(device); updateStates(thing);
} }
} }
} }
@ -282,7 +282,7 @@ void IntegrationPluginDrexelUndWeiss::onRefreshTimer()
void IntegrationPluginDrexelUndWeiss::updateStates(Thing *thing) void IntegrationPluginDrexelUndWeiss::updateStates(Thing *thing)
{ {
if (thing->thingClassId() == x2luThingClassId) { if (thing->thingClassId() == x2luThingClassId) {
Device *parent = myThings().findById(thing->parentId()); Thing *parent = myThings().findById(thing->parentId());
ModbusRTUMaster *modbus = m_modbusRTUMasters.value(parent); ModbusRTUMaster *modbus = m_modbusRTUMasters.value(parent);
int slave = thing->paramValue(x2luThingSlaveAddressParamTypeId).toInt(); int slave = thing->paramValue(x2luThingSlaveAddressParamTypeId).toInt();
@ -292,7 +292,7 @@ void IntegrationPluginDrexelUndWeiss::updateStates(Thing *thing)
} }
if (thing->thingClassId() == x2wpThingClassId) { if (thing->thingClassId() == x2wpThingClassId) {
Device *parent = myThings().findById(thing->parentId()); Thing *parent = myThings().findById(thing->parentId());
ModbusRTUMaster *modbus = m_modbusRTUMasters.value(parent); ModbusRTUMaster *modbus = m_modbusRTUMasters.value(parent);
int slave = thing->paramValue(x2wpThingSlaveAddressParamTypeId).toInt(); int slave = thing->paramValue(x2wpThingSlaveAddressParamTypeId).toInt();
@ -351,9 +351,9 @@ void IntegrationPluginDrexelUndWeiss::onReceivedHoldingRegister(int slaveAddress
ModbusRTUMaster *modbus = static_cast<ModbusRTUMaster *>(sender()); ModbusRTUMaster *modbus = static_cast<ModbusRTUMaster *>(sender());
if (m_modbusRTUMasters.values().contains(modbus) ){ if (m_modbusRTUMasters.values().contains(modbus) ){
Device *parentDevice = m_modbusRTUMasters.key(static_cast<ModbusRTUMaster *>(modbus)); Thing *parentThing = m_modbusRTUMasters.key(static_cast<ModbusRTUMaster *>(modbus));
foreach(Thing *thing, myThings().filterByParentDeviceId(parentthing->id())) { foreach(Thing *thing, myThings().filterByParentId(parentThing->id())) {
if (thing->thingClassId() == x2luThingClassId && thing->paramValue(x2luThingSlaveAddressParamTypeId) == slaveAddress) { if (thing->thingClassId() == x2luThingClassId && thing->paramValue(x2luThingSlaveAddressParamTypeId) == slaveAddress) {
switch (modbusRegister) { switch (modbusRegister) {
case ModbusRegisterX2::Waermepumpe: case ModbusRegisterX2::Waermepumpe:
@ -557,7 +557,7 @@ void IntegrationPluginDrexelUndWeiss::onReceivedHoldingRegister(int slaveAddress
case DeviceType::X2_WP: { case DeviceType::X2_WP: {
qDebug(dcDrexelUndWeiss()) << "Discovered X2 heat pump"; qDebug(dcDrexelUndWeiss()) << "Discovered X2 heat pump";
QList<ThingDescriptor> thingDescriptors; QList<ThingDescriptor> thingDescriptors;
ThingDescriptor descriptor(x2wpThingClassId, "X2 WP", "Drexel und Weiss", parentthing->id()); ThingDescriptor descriptor(x2wpThingClassId, "X2 WP", "Drexel und Weiss", parentThing->id());
ParamList params; ParamList params;
//modbus->readHoldingRegister(slaveAddress, ModbusRegisterX2::SoftwareVersion); //modbus->readHoldingRegister(slaveAddress, ModbusRegisterX2::SoftwareVersion);
@ -565,13 +565,13 @@ void IntegrationPluginDrexelUndWeiss::onReceivedHoldingRegister(int slaveAddress
params.append(Param(x2wpThingSlaveAddressParamTypeId, slaveAddress)); params.append(Param(x2wpThingSlaveAddressParamTypeId, slaveAddress));
descriptor.setParams(params); descriptor.setParams(params);
thingDescriptors.append(descriptor); thingDescriptors.append(descriptor);
emit autoDevicesAppeared(thingDescriptors); emit autoThingsAppeared(thingDescriptors);
break; break;
} }
case DeviceType::X2_LU: { case DeviceType::X2_LU: {
qDebug(dcDrexelUndWeiss()) << "Discovered X2 ventilation unit"; qDebug(dcDrexelUndWeiss()) << "Discovered X2 ventilation unit";
QList<ThingDescriptor> thingDescriptors; QList<ThingDescriptor> thingDescriptors;
ThingDescriptor descriptor(x2luThingClassId, "X2 LU", "Drexel und Weiss", parentthing->id()); ThingDescriptor descriptor(x2luThingClassId, "X2 LU", "Drexel und Weiss", parentThing->id());
ParamList params; ParamList params;
//modbus->readHoldingRegister(slaveAddress, ModbusRegisterX2::SoftwareVersion); //modbus->readHoldingRegister(slaveAddress, ModbusRegisterX2::SoftwareVersion);
@ -579,7 +579,7 @@ void IntegrationPluginDrexelUndWeiss::onReceivedHoldingRegister(int slaveAddress
params.append(Param(x2luThingSlaveAddressParamTypeId, slaveAddress)); params.append(Param(x2luThingSlaveAddressParamTypeId, slaveAddress));
descriptor.setParams(params); descriptor.setParams(params);
thingDescriptors.append(descriptor); thingDescriptors.append(descriptor);
emit autoDevicesAppeared(thingDescriptors); emit autoThingsAppeared(thingDescriptors);
break; break;
} }
case DeviceType::AerosilentBianco: case DeviceType::AerosilentBianco:
@ -587,7 +587,7 @@ void IntegrationPluginDrexelUndWeiss::onReceivedHoldingRegister(int slaveAddress
qDebug(dcDrexelUndWeiss()) << "Discovered Aerosilent Bianco"; qDebug(dcDrexelUndWeiss()) << "Discovered Aerosilent Bianco";
break; break;
default: default:
qDebug(dcDrexelUndWeiss()) << "Unkown Devicetype" << value; qDebug(dcDrexelUndWeiss()) << "Unkown Thingtype" << value;
} }
} }
} }
@ -602,7 +602,7 @@ void IntegrationPluginDrexelUndWeiss::onReceivedInputRegister(int slaveAddress,
void IntegrationPluginDrexelUndWeiss::onWriteRequestFinished(QUuid requestId, bool success) void IntegrationPluginDrexelUndWeiss::onWriteRequestFinished(QUuid requestId, bool success)
{ {
DeviceActionInfo *info = m_pendingActions.take(requestId); ThingActionInfo *info = m_pendingActions.take(requestId);
if (!info) if (!info)
return; return;
@ -618,7 +618,7 @@ void IntegrationPluginDrexelUndWeiss::discoverModbusSlaves(ModbusRTUMaster *modb
foreach (Thing *thing, myThings()) { foreach (Thing *thing, myThings()) {
if (thing->thingClassId() == x2luThingClassId) { if (thing->thingClassId() == x2luThingClassId) {
if (thing->paramValue(x2luThingSlaveAddressParamTypeId).toInt() == slaveAddress) { if (thing->paramValue(x2luThingSlaveAddressParamTypeId).toInt() == slaveAddress) {
qWarning(dcDrexelUndWeiss()) << "Device with slave address" << slaveAddress << "already added"; qWarning(dcDrexelUndWeiss()) << "Thing with slave address" << slaveAddress << "already added";
return; return;
} }
} }

View File

@ -38,7 +38,7 @@
#include "modbusrtumaster.h" #include "modbusrtumaster.h"
#include <QSerialPortInfo> #include <QSerialPortInfo>
class DevicePluginDrexelUndWeiss : public IntegrationPlugin class IntegrationPluginDrexelUndWeiss : public IntegrationPlugin
{ {
Q_OBJECT Q_OBJECT
@ -46,8 +46,8 @@ class DevicePluginDrexelUndWeiss : public IntegrationPlugin
Q_INTERFACES(IntegrationPlugin) Q_INTERFACES(IntegrationPlugin)
public: public:
explicit DevicePluginDrexelUndWeiss(); explicit IntegrationPluginDrexelUndWeiss();
~DevicePluginDrexelUndWeiss() override; ~IntegrationPluginDrexelUndWeiss() override;
void init() override; void init() override;
void discoverThings(ThingDiscoveryInfo *info) override; void discoverThings(ThingDiscoveryInfo *info) override;
@ -62,7 +62,7 @@ private:
PluginTimer *m_refreshTimer = nullptr; PluginTimer *m_refreshTimer = nullptr;
QHash<QUuid, ThingActionInfo *> m_pendingActions; QHash<QUuid, ThingActionInfo *> m_pendingActions;
void updateStates(Device *device); void updateStates(Thing *thing);
void discoverModbusSlaves(ModbusRTUMaster *modbus, int slaveAddress); void discoverModbusSlaves(ModbusRTUMaster *modbus, int slaveAddress);
private slots: private slots:

View File

@ -78,7 +78,7 @@
"interfaces": ["co2sensor", "connectable"], "interfaces": ["co2sensor", "connectable"],
"paramTypes": [ "paramTypes": [
{ {
"id": "22413a22-31d4-4b8c-b855-8a29da5946bc", "id": "28a72cb7-3cd0-4704-b604-44fb090d5a88",
"name": "slaveAddress", "name": "slaveAddress",
"displayName": "Slave address", "displayName": "Slave address",
"type": "int", "type": "int",
@ -97,7 +97,7 @@
], ],
"stateTypes":[ "stateTypes":[
{ {
"id": "181ce6e2-9c55-45c6-b329-adf379679e07a", "id": "b4c4726f-d3d7-46e8-badb-0d590e7f5fac",
"name": "connected", "name": "connected",
"displayName": "connected", "displayName": "connected",
"displayNameEvent": "connection status changed", "displayNameEvent": "connection status changed",
@ -149,7 +149,7 @@
"interfaces": ["thermostat", "heating", "temperaturesensor", "connectable"], "interfaces": ["thermostat", "heating", "temperaturesensor", "connectable"],
"paramTypes": [ "paramTypes": [
{ {
"id": "22413a22-31d4-4b8c-b855-8a29da5946bc", "id": "b551d138-b006-4290-bfef-97072ff677c6",
"name": "slaveAddress", "name": "slaveAddress",
"displayName": "Slave address", "displayName": "Slave address",
"type": "int", "type": "int",
@ -158,7 +158,7 @@
"defaultValue": 0 "defaultValue": 0
}, },
{ {
"id": "91ef76cf-6c53-4a8a-a278-6f6e2ef68cc6", "id": "1ffd72a9-7b3f-4287-b671-7f22e159f9b8",
"name": "sofwareVersion", "name": "sofwareVersion",
"displayName": "Software version", "displayName": "Software version",
"type": "QString", "type": "QString",
@ -169,7 +169,7 @@
"stateTypes":[ "stateTypes":[
{ {
"id": "181ce6e2-9c55-45c6-b329-adf379679e07a", "id": "baf203be-a391-4bfc-8198-53b4ecbcce80",
"name": "connected", "name": "connected",
"displayName": "connected", "displayName": "connected",
"displayNameEvent": "connection status changed", "displayNameEvent": "connection status changed",