Make use of the byte order register and configure the kostal connection
parent
20b414ae10
commit
380a0ca79b
|
|
@ -75,44 +75,6 @@ void IntegrationPluginKostal::discoverThings(ThingDiscoveryInfo *info)
|
||||||
|
|
||||||
// Start the discovery process
|
// Start the discovery process
|
||||||
discovery->startDiscovery();
|
discovery->startDiscovery();
|
||||||
|
|
||||||
// NetworkDeviceDiscoveryReply *discoveryReply = hardwareManager()->networkDeviceDiscovery()->discover();
|
|
||||||
// connect(discoveryReply, &NetworkDeviceDiscoveryReply::finished, this, [=](){
|
|
||||||
// foreach (const NetworkDeviceInfo &networkDeviceInfo, discoveryReply->networkDeviceInfos()) {
|
|
||||||
|
|
||||||
// qCDebug(dcKostal()) << "Found" << networkDeviceInfo;
|
|
||||||
|
|
||||||
// QString title;
|
|
||||||
// if (networkDeviceInfo.hostName().isEmpty()) {
|
|
||||||
// title = networkDeviceInfo.address().toString();
|
|
||||||
// } else {
|
|
||||||
// title = networkDeviceInfo.hostName() + " (" + networkDeviceInfo.address().toString() + ")";
|
|
||||||
// }
|
|
||||||
|
|
||||||
// QString description;
|
|
||||||
// if (networkDeviceInfo.macAddressManufacturer().isEmpty()) {
|
|
||||||
// description = networkDeviceInfo.macAddress();
|
|
||||||
// } else {
|
|
||||||
// description = networkDeviceInfo.macAddress() + " (" + networkDeviceInfo.macAddressManufacturer() + ")";
|
|
||||||
// }
|
|
||||||
|
|
||||||
// ThingDescriptor descriptor(kostalInverterThingClassId, title, description);
|
|
||||||
// ParamList params;
|
|
||||||
// params << Param(kostalInverterThingMacAddressParamTypeId, networkDeviceInfo.macAddress());
|
|
||||||
// descriptor.setParams(params);
|
|
||||||
|
|
||||||
// // Check if we already have set up this device
|
|
||||||
// Things existingThings = myThings().filterByParam(kostalInverterThingMacAddressParamTypeId, networkDeviceInfo.macAddress());
|
|
||||||
// if (existingThings.count() == 1) {
|
|
||||||
// qCDebug(dcKostal()) << "This connection already exists in the system:" << networkDeviceInfo;
|
|
||||||
// descriptor.setThingId(existingThings.first()->id());
|
|
||||||
// }
|
|
||||||
|
|
||||||
// info->addThingDescriptor(descriptor);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// info->finish(Thing::ThingErrorNoError);
|
|
||||||
// });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void IntegrationPluginKostal::setupThing(ThingSetupInfo *info)
|
void IntegrationPluginKostal::setupThing(ThingSetupInfo *info)
|
||||||
|
|
@ -173,6 +135,7 @@ void IntegrationPluginKostal::setupThing(ThingSetupInfo *info)
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -198,71 +161,60 @@ void IntegrationPluginKostal::setupThing(ThingSetupInfo *info)
|
||||||
// Update the meter data from the kostal connection containing all information
|
// Update the meter data from the kostal connection containing all information
|
||||||
|
|
||||||
connect(kostalConnection, &KostalModbusTcpConnection::powerMeterTotalActivePowerChanged, this, [thing](float powerMeterTotalActivePower){
|
connect(kostalConnection, &KostalModbusTcpConnection::powerMeterTotalActivePowerChanged, this, [thing](float powerMeterTotalActivePower){
|
||||||
qCDebug(dcKostal()) << thing << "total active power changed" << powerMeterTotalActivePower << "W";
|
|
||||||
thing->setStateValue(kostalMeterCurrentPowerStateTypeId, powerMeterTotalActivePower);
|
thing->setStateValue(kostalMeterCurrentPowerStateTypeId, powerMeterTotalActivePower);
|
||||||
});
|
});
|
||||||
|
|
||||||
// TODO: set toal energy consumed/produced
|
// TODO: set toal energy consumed/produced
|
||||||
|
|
||||||
connect(kostalConnection, &KostalModbusTcpConnection::powerMeterTotalActivePowerChanged, this, [thing](float powerMeterTotalActivePower){
|
connect(kostalConnection, &KostalModbusTcpConnection::powerMeterTotalActivePowerChanged, this, [thing](float powerMeterTotalActivePower){
|
||||||
qCDebug(dcKostal()) << thing << "total active power changed" << powerMeterTotalActivePower << "W";
|
|
||||||
thing->setStateValue(kostalMeterCurrentPowerStateTypeId, powerMeterTotalActivePower);
|
thing->setStateValue(kostalMeterCurrentPowerStateTypeId, powerMeterTotalActivePower);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Current
|
// Current
|
||||||
connect(kostalConnection, &KostalModbusTcpConnection::powerMeterCurrentPhase1Changed, this, [thing](float powerMeterCurrentPhase1){
|
connect(kostalConnection, &KostalModbusTcpConnection::powerMeterCurrentPhase1Changed, this, [thing](float powerMeterCurrentPhase1){
|
||||||
qCDebug(dcKostal()) << thing << "current phase 1 changed" << powerMeterCurrentPhase1 << "A";
|
|
||||||
thing->setStateValue(kostalMeterCurrentPhaseAStateTypeId, powerMeterCurrentPhase1);
|
thing->setStateValue(kostalMeterCurrentPhaseAStateTypeId, powerMeterCurrentPhase1);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(kostalConnection, &KostalModbusTcpConnection::powerMeterCurrentPhase2Changed, this, [thing](float powerMeterCurrentPhase2){
|
connect(kostalConnection, &KostalModbusTcpConnection::powerMeterCurrentPhase2Changed, this, [thing](float powerMeterCurrentPhase2){
|
||||||
qCDebug(dcKostal()) << thing << "current phase 2 changed" << powerMeterCurrentPhase2 << "A";
|
|
||||||
thing->setStateValue(kostalMeterCurrentPhaseBStateTypeId, powerMeterCurrentPhase2);
|
thing->setStateValue(kostalMeterCurrentPhaseBStateTypeId, powerMeterCurrentPhase2);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(kostalConnection, &KostalModbusTcpConnection::powerMeterCurrentPhase3Changed, this, [thing](float powerMeterCurrentPhase3){
|
connect(kostalConnection, &KostalModbusTcpConnection::powerMeterCurrentPhase3Changed, this, [thing](float powerMeterCurrentPhase3){
|
||||||
qCDebug(dcKostal()) << thing << "current phase 3 changed" << powerMeterCurrentPhase3 << "A";
|
|
||||||
thing->setStateValue(kostalMeterCurrentPhaseCStateTypeId, powerMeterCurrentPhase3);
|
thing->setStateValue(kostalMeterCurrentPhaseCStateTypeId, powerMeterCurrentPhase3);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Voltage
|
// Voltage
|
||||||
connect(kostalConnection, &KostalModbusTcpConnection::powerMeterVoltagePhase1Changed, this, [thing](float powerMeterVoltagePhase1){
|
connect(kostalConnection, &KostalModbusTcpConnection::powerMeterVoltagePhase1Changed, this, [thing](float powerMeterVoltagePhase1){
|
||||||
qCDebug(dcKostal()) << thing << "voltage phase 1 changed" << powerMeterVoltagePhase1 << "V";
|
|
||||||
thing->setStateValue(kostalMeterVoltagePhaseAStateTypeId, powerMeterVoltagePhase1);
|
thing->setStateValue(kostalMeterVoltagePhaseAStateTypeId, powerMeterVoltagePhase1);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(kostalConnection, &KostalModbusTcpConnection::powerMeterVoltagePhase2Changed, this, [thing](float powerMeterVoltagePhase2){
|
connect(kostalConnection, &KostalModbusTcpConnection::powerMeterVoltagePhase2Changed, this, [thing](float powerMeterVoltagePhase2){
|
||||||
qCDebug(dcKostal()) << thing << "voltage phase 2 changed" << powerMeterVoltagePhase2 << "V";
|
|
||||||
thing->setStateValue(kostalMeterVoltagePhaseBStateTypeId, powerMeterVoltagePhase2);
|
thing->setStateValue(kostalMeterVoltagePhaseBStateTypeId, powerMeterVoltagePhase2);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(kostalConnection, &KostalModbusTcpConnection::powerMeterVoltagePhase3Changed, this, [thing](float powerMeterVoltagePhase3){
|
connect(kostalConnection, &KostalModbusTcpConnection::powerMeterVoltagePhase3Changed, this, [thing](float powerMeterVoltagePhase3){
|
||||||
qCDebug(dcKostal()) << thing << "voltage phase 3 changed" << powerMeterVoltagePhase3 << "V";
|
|
||||||
thing->setStateValue(kostalMeterVoltagePhaseCStateTypeId, powerMeterVoltagePhase3);
|
thing->setStateValue(kostalMeterVoltagePhaseCStateTypeId, powerMeterVoltagePhase3);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Power
|
// Power
|
||||||
connect(kostalConnection, &KostalModbusTcpConnection::powerMeterActivePowerPhase1Changed, this, [thing](float powerMeterActivePowerPhase1){
|
connect(kostalConnection, &KostalModbusTcpConnection::powerMeterActivePowerPhase1Changed, this, [thing](float powerMeterActivePowerPhase1){
|
||||||
qCDebug(dcKostal()) << thing << "power phase 1 changed" << powerMeterActivePowerPhase1 << "W";
|
|
||||||
thing->setStateValue(kostalMeterCurrentPowerPhaseAStateTypeId, powerMeterActivePowerPhase1);
|
thing->setStateValue(kostalMeterCurrentPowerPhaseAStateTypeId, powerMeterActivePowerPhase1);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(kostalConnection, &KostalModbusTcpConnection::powerMeterActivePowerPhase2Changed, this, [thing](float powerMeterActivePowerPhase2){
|
connect(kostalConnection, &KostalModbusTcpConnection::powerMeterActivePowerPhase2Changed, this, [thing](float powerMeterActivePowerPhase2){
|
||||||
qCDebug(dcKostal()) << thing << "power phase 2 changed" << powerMeterActivePowerPhase2 << "W";
|
|
||||||
thing->setStateValue(kostalMeterCurrentPowerPhaseBStateTypeId, powerMeterActivePowerPhase2);
|
thing->setStateValue(kostalMeterCurrentPowerPhaseBStateTypeId, powerMeterActivePowerPhase2);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(kostalConnection, &KostalModbusTcpConnection::powerMeterActivePowerPhase3Changed, this, [thing](float powerMeterActivePowerPhase3){
|
connect(kostalConnection, &KostalModbusTcpConnection::powerMeterActivePowerPhase3Changed, this, [thing](float powerMeterActivePowerPhase3){
|
||||||
qCDebug(dcKostal()) << thing << "power phase 3 changed" << powerMeterActivePowerPhase3 << "W";
|
|
||||||
thing->setStateValue(kostalMeterCurrentPowerPhaseCStateTypeId, powerMeterActivePowerPhase3);
|
thing->setStateValue(kostalMeterCurrentPowerPhaseCStateTypeId, powerMeterActivePowerPhase3);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(kostalConnection, &KostalModbusTcpConnection::gridFrequencyPowerMeterChanged, this, [thing](float gridFrequency){
|
connect(kostalConnection, &KostalModbusTcpConnection::gridFrequencyPowerMeterChanged, this, [thing](float gridFrequency){
|
||||||
qCDebug(dcKostal()) << thing << "grid frequency changed" << gridFrequency << "Hz";
|
|
||||||
thing->setStateValue(kostalMeterFrequencyStateTypeId, gridFrequency);
|
thing->setStateValue(kostalMeterFrequencyStateTypeId, gridFrequency);
|
||||||
});
|
});
|
||||||
|
|
||||||
info->finish(Thing::ThingErrorNoError);
|
info->finish(Thing::ThingErrorNoError);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (thing->thingClassId() == kostalBatteryThingClassId) {
|
if (thing->thingClassId() == kostalBatteryThingClassId) {
|
||||||
|
|
@ -284,14 +236,11 @@ void IntegrationPluginKostal::setupThing(ThingSetupInfo *info)
|
||||||
// Note: The connected state will be handled in the parent inverter thing
|
// Note: The connected state will be handled in the parent inverter thing
|
||||||
|
|
||||||
connect(kostalConnection, &KostalModbusTcpConnection::batteryStateOfChargeChanged, this, [thing](quint16 batteryStateOfCharge){
|
connect(kostalConnection, &KostalModbusTcpConnection::batteryStateOfChargeChanged, this, [thing](quint16 batteryStateOfCharge){
|
||||||
qCDebug(dcKostal()) << thing << "battery SoC changed" << batteryStateOfCharge << "%";
|
|
||||||
thing->setStateValue(kostalBatteryBatteryLevelStateTypeId, batteryStateOfCharge);
|
thing->setStateValue(kostalBatteryBatteryLevelStateTypeId, batteryStateOfCharge);
|
||||||
thing->setStateValue(kostalBatteryBatteryCriticalStateTypeId, batteryStateOfCharge < 5);
|
thing->setStateValue(kostalBatteryBatteryCriticalStateTypeId, batteryStateOfCharge < 5);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
connect(kostalConnection, &KostalModbusTcpConnection::batteryActualPowerChanged, this, [thing](float batteryActualPower){
|
connect(kostalConnection, &KostalModbusTcpConnection::batteryActualPowerChanged, this, [thing](float batteryActualPower){
|
||||||
qCDebug(dcKostal()) << thing << "battery charge current changed" << batteryActualPower << "W";
|
|
||||||
thing->setStateValue(kostalBatteryCurrentPowerStateTypeId, batteryActualPower);
|
thing->setStateValue(kostalBatteryCurrentPowerStateTypeId, batteryActualPower);
|
||||||
if (batteryActualPower == 0) {
|
if (batteryActualPower == 0) {
|
||||||
thing->setStateValue(kostalBatteryChargingStateStateTypeId, "idle");
|
thing->setStateValue(kostalBatteryChargingStateStateTypeId, "idle");
|
||||||
|
|
@ -303,11 +252,11 @@ void IntegrationPluginKostal::setupThing(ThingSetupInfo *info)
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(kostalConnection, &KostalModbusTcpConnection::batteryWorkCapacityChanged, this, [thing](quint32 batteryWorkCapacity){
|
connect(kostalConnection, &KostalModbusTcpConnection::batteryWorkCapacityChanged, this, [thing](quint32 batteryWorkCapacity){
|
||||||
qCDebug(dcKostal()) << thing << "battery work capacity changed" << batteryWorkCapacity << "Wh";
|
|
||||||
thing->setStateValue(kostalBatteryCapacityStateTypeId, batteryWorkCapacity / 1000.0); // kWh
|
thing->setStateValue(kostalBatteryCapacityStateTypeId, batteryWorkCapacity / 1000.0); // kWh
|
||||||
});
|
});
|
||||||
|
|
||||||
info->finish(Thing::ThingErrorNoError);
|
info->finish(Thing::ThingErrorNoError);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -315,6 +264,20 @@ void IntegrationPluginKostal::postSetupThing(Thing *thing)
|
||||||
{
|
{
|
||||||
if (thing->thingClassId() == kostalInverterThingClassId) {
|
if (thing->thingClassId() == kostalInverterThingClassId) {
|
||||||
|
|
||||||
|
// Create the update timer if not already set up
|
||||||
|
if (!m_pluginTimer) {
|
||||||
|
qCDebug(dcKostal()) << "Starting plugin timer...";
|
||||||
|
m_pluginTimer = hardwareManager()->pluginTimerManager()->registerTimer(2);
|
||||||
|
connect(m_pluginTimer, &PluginTimer::timeout, this, [this] {
|
||||||
|
foreach(KostalModbusTcpConnection *connection, m_kostalConnections) {
|
||||||
|
qCDebug(dcKostal()) << "Update connection" << connection->hostAddress().toString();
|
||||||
|
connection->update();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
m_pluginTimer->start();
|
||||||
|
}
|
||||||
|
|
||||||
KostalModbusTcpConnection *kostalConnection = m_kostalConnections.value(thing);
|
KostalModbusTcpConnection *kostalConnection = m_kostalConnections.value(thing);
|
||||||
|
|
||||||
// Check if we have to create the meter for the Kostal inverter
|
// Check if we have to create the meter for the Kostal inverter
|
||||||
|
|
@ -376,18 +339,16 @@ void IntegrationPluginKostal::postSetupThing(Thing *thing)
|
||||||
emit autoThingsAppeared(ThingDescriptors() << descriptor);
|
emit autoThingsAppeared(ThingDescriptors() << descriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create the update timer if not already set up
|
return;
|
||||||
if (!m_pluginTimer) {
|
}
|
||||||
qCDebug(dcKostal()) << "Starting plugin timer...";
|
|
||||||
m_pluginTimer = hardwareManager()->pluginTimerManager()->registerTimer(4);
|
if (thing->thingClassId() == kostalMeterThingClassId || thing->thingClassId() == kostalBatteryThingClassId) {
|
||||||
connect(m_pluginTimer, &PluginTimer::timeout, this, [this] {
|
Thing *connectionThing = myThings().findById(thing->parentId());
|
||||||
foreach(KostalModbusTcpConnection *connection, m_kostalConnections) {
|
if (connectionThing) {
|
||||||
if (connection->connected()) {
|
thing->setStateValue("connected", connectionThing->stateValue("connected"));
|
||||||
connection->update();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -437,6 +398,32 @@ void IntegrationPluginKostal::setupKostalConnection(ThingSetupInfo *info)
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
connect(kostalConnection, &KostalModbusTcpConnection::reachableChanged, thing, [this, thing, kostalConnection](bool reachable){
|
||||||
|
qCDebug(dcKostal()) << "Reachable changed to" << reachable << "for" << thing;
|
||||||
|
if (reachable) {
|
||||||
|
// Connected true will be set after successfull init
|
||||||
|
kostalConnection->initialize();
|
||||||
|
} else {
|
||||||
|
thing->setStateValue("connected", false);
|
||||||
|
foreach (Thing *childThing, myThings().filterByParentId(thing->id())) {
|
||||||
|
childThing->setStateValue("connected", false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
connect(kostalConnection, &KostalModbusTcpConnection::initializationFinished, thing, [=](bool success){
|
||||||
|
if (!thing->setupComplete())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (success) {
|
||||||
|
thing->setStateValue("connected", true);
|
||||||
|
} else {
|
||||||
|
thing->setStateValue("connected", false);
|
||||||
|
// Try once to reconnect the device
|
||||||
|
kostalConnection->reconnectDevice();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
connect(kostalConnection, &KostalModbusTcpConnection::initializationFinished, info, [=](bool success){
|
connect(kostalConnection, &KostalModbusTcpConnection::initializationFinished, info, [=](bool success){
|
||||||
if (!success) {
|
if (!success) {
|
||||||
qCWarning(dcKostal()) << "Connection init finished with errors" << thing->name() << kostalConnection->hostAddress().toString();
|
qCWarning(dcKostal()) << "Connection init finished with errors" << thing->name() << kostalConnection->hostAddress().toString();
|
||||||
|
|
@ -456,66 +443,68 @@ void IntegrationPluginKostal::setupKostalConnection(ThingSetupInfo *info)
|
||||||
childThing->setStateValue("connected", true);
|
childThing->setStateValue("connected", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Make sure we use the same endianness as the inverter (register size 1, so independent from endianess)
|
||||||
|
switch (kostalConnection->modbusByteOrder()) {
|
||||||
|
case KostalModbusTcpConnection::ByteOrderBigEndian:
|
||||||
|
kostalConnection->setEndianness(ModbusDataUtils::ByteOrderBigEndian);
|
||||||
|
break;
|
||||||
|
case KostalModbusTcpConnection::ByteOrderLittleEndian:
|
||||||
|
kostalConnection->setEndianness(ModbusDataUtils::ByteOrderLittleEndian);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
connect(kostalConnection, &KostalModbusTcpConnection::updateFinished, thing, [=](){
|
||||||
|
qCDebug(dcKostal()) << "Updated" << kostalConnection;
|
||||||
|
});
|
||||||
|
|
||||||
connect(kostalConnection, &KostalModbusTcpConnection::totalAcPowerChanged, thing, [thing](float totalAcPower){
|
connect(kostalConnection, &KostalModbusTcpConnection::totalAcPowerChanged, thing, [thing](float totalAcPower){
|
||||||
qCDebug(dcKostal()) << thing << "total AC power changed" << totalAcPower << "W";
|
|
||||||
thing->setStateValue(kostalInverterCurrentPowerStateTypeId, - totalAcPower);
|
thing->setStateValue(kostalInverterCurrentPowerStateTypeId, - totalAcPower);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(kostalConnection, &KostalModbusTcpConnection::totalYieldChanged, thing, [thing](float totalYield){
|
connect(kostalConnection, &KostalModbusTcpConnection::totalYieldChanged, thing, [thing](float totalYield){
|
||||||
qCDebug(dcKostal()) << thing << "total yeald changed" << totalYield << "Wh";
|
|
||||||
thing->setStateValue(kostalInverterTotalEnergyProducedStateTypeId, totalYield / 1000.0); // kWh
|
thing->setStateValue(kostalInverterTotalEnergyProducedStateTypeId, totalYield / 1000.0); // kWh
|
||||||
});
|
});
|
||||||
|
|
||||||
// Current
|
// Current
|
||||||
connect(kostalConnection, &KostalModbusTcpConnection::currentPhase1Changed, thing, [thing](float currentPhase1){
|
connect(kostalConnection, &KostalModbusTcpConnection::currentPhase1Changed, thing, [thing](float currentPhase1){
|
||||||
qCDebug(dcKostal()) << thing << "current phase 1 changed" << currentPhase1 << "A";
|
|
||||||
thing->setStateValue(kostalInverterPhaseACurrentStateTypeId, currentPhase1); // A
|
thing->setStateValue(kostalInverterPhaseACurrentStateTypeId, currentPhase1); // A
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(kostalConnection, &KostalModbusTcpConnection::currentPhase2Changed, thing, [thing](float currentPhase2){
|
connect(kostalConnection, &KostalModbusTcpConnection::currentPhase2Changed, thing, [thing](float currentPhase2){
|
||||||
qCDebug(dcKostal()) << thing << "current phase 2 changed" << currentPhase2 << "A";
|
|
||||||
thing->setStateValue(kostalInverterPhaseBCurrentStateTypeId, currentPhase2); // A
|
thing->setStateValue(kostalInverterPhaseBCurrentStateTypeId, currentPhase2); // A
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(kostalConnection, &KostalModbusTcpConnection::currentPhase3Changed, thing, [thing](float currentPhase3){
|
connect(kostalConnection, &KostalModbusTcpConnection::currentPhase3Changed, thing, [thing](float currentPhase3){
|
||||||
qCDebug(dcKostal()) << thing << "current phase 3 changed" << currentPhase3 << "A";
|
|
||||||
thing->setStateValue(kostalInverterPhaseCCurrentStateTypeId, currentPhase3); // A
|
thing->setStateValue(kostalInverterPhaseCCurrentStateTypeId, currentPhase3); // A
|
||||||
});
|
});
|
||||||
|
|
||||||
// Voltage
|
// Voltage
|
||||||
connect(kostalConnection, &KostalModbusTcpConnection::voltagePhase1Changed, thing, [thing](float voltagePhase1){
|
connect(kostalConnection, &KostalModbusTcpConnection::voltagePhase1Changed, thing, [thing](float voltagePhase1){
|
||||||
qCDebug(dcKostal()) << thing << "voltage phase 1 changed" << voltagePhase1 << "V";
|
|
||||||
thing->setStateValue(kostalInverterVoltagePhaseAStateTypeId, voltagePhase1);
|
thing->setStateValue(kostalInverterVoltagePhaseAStateTypeId, voltagePhase1);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(kostalConnection, &KostalModbusTcpConnection::voltagePhase2Changed, thing, [thing](float voltagePhase2){
|
connect(kostalConnection, &KostalModbusTcpConnection::voltagePhase2Changed, thing, [thing](float voltagePhase2){
|
||||||
qCDebug(dcKostal()) << thing << "voltage phase 2 changed" << voltagePhase2 << "V";
|
|
||||||
thing->setStateValue(kostalInverterVoltagePhaseBStateTypeId, voltagePhase2);
|
thing->setStateValue(kostalInverterVoltagePhaseBStateTypeId, voltagePhase2);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(kostalConnection, &KostalModbusTcpConnection::voltagePhase3Changed, thing, [thing](float voltagePhase3){
|
connect(kostalConnection, &KostalModbusTcpConnection::voltagePhase3Changed, thing, [thing](float voltagePhase3){
|
||||||
qCDebug(dcKostal()) << thing << "voltage phase 3 changed" << voltagePhase3 << "V";
|
|
||||||
thing->setStateValue(kostalInverterVoltagePhaseCStateTypeId, voltagePhase3);
|
thing->setStateValue(kostalInverterVoltagePhaseCStateTypeId, voltagePhase3);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Current power
|
// Current power
|
||||||
connect(kostalConnection, &KostalModbusTcpConnection::activePowerPhase1Changed, thing, [thing](float activePowerPhase1){
|
connect(kostalConnection, &KostalModbusTcpConnection::activePowerPhase1Changed, thing, [thing](float activePowerPhase1){
|
||||||
qCDebug(dcKostal()) << thing << "active power phase 1 changed" << activePowerPhase1 << "W";
|
|
||||||
thing->setStateValue(kostalInverterCurrentPowerPhaseAStateTypeId, activePowerPhase1);
|
thing->setStateValue(kostalInverterCurrentPowerPhaseAStateTypeId, activePowerPhase1);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(kostalConnection, &KostalModbusTcpConnection::activePowerPhase2Changed, thing, [thing](float activePowerPhase2){
|
connect(kostalConnection, &KostalModbusTcpConnection::activePowerPhase2Changed, thing, [thing](float activePowerPhase2){
|
||||||
qCDebug(dcKostal()) << thing << "active power phase 2 changed" << activePowerPhase2 << "W";
|
|
||||||
thing->setStateValue(kostalInverterCurrentPowerPhaseBStateTypeId, activePowerPhase2);
|
thing->setStateValue(kostalInverterCurrentPowerPhaseBStateTypeId, activePowerPhase2);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(kostalConnection, &KostalModbusTcpConnection::activePowerPhase3Changed, thing, [thing](float activePowerPhase3){
|
connect(kostalConnection, &KostalModbusTcpConnection::activePowerPhase3Changed, thing, [thing](float activePowerPhase3){
|
||||||
qCDebug(dcKostal()) << thing << "active power phase 3 changed" << activePowerPhase3 << "W";
|
|
||||||
thing->setStateValue(kostalInverterCurrentPowerPhaseCStateTypeId, activePowerPhase3);
|
thing->setStateValue(kostalInverterCurrentPowerPhaseCStateTypeId, activePowerPhase3);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(kostalConnection, &KostalModbusTcpConnection::gridFrequencyInverterChanged, thing, [thing](float gridFrequencyInverter){
|
connect(kostalConnection, &KostalModbusTcpConnection::gridFrequencyInverterChanged, thing, [thing](float gridFrequencyInverter){
|
||||||
qCDebug(dcKostal()) << thing << "grid frequency changed" << gridFrequencyInverter << "Hz";
|
|
||||||
thing->setStateValue(kostalInverterFrequencyStateTypeId, gridFrequencyInverter);
|
thing->setStateValue(kostalInverterFrequencyStateTypeId, gridFrequencyInverter);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -523,29 +512,5 @@ void IntegrationPluginKostal::setupKostalConnection(ThingSetupInfo *info)
|
||||||
kostalConnection->update();
|
kostalConnection->update();
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(kostalConnection, &KostalModbusTcpConnection::reachableChanged, thing, [this, thing, kostalConnection](bool reachable){
|
|
||||||
qCDebug(dcKostal()) << "Reachable changed to" << reachable << "for" << thing;
|
|
||||||
if (reachable) {
|
|
||||||
// Connected true will be set after successfull init
|
|
||||||
kostalConnection->initialize();
|
|
||||||
} else {
|
|
||||||
thing->setStateValue("connected", false);
|
|
||||||
foreach (Thing *childThing, myThings().filterByParentId(thing->id())) {
|
|
||||||
childThing->setStateValue("connected", false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
connect(kostalConnection, &KostalModbusTcpConnection::initializationFinished, info, [=](bool success){
|
|
||||||
if (success) {
|
|
||||||
thing->setStateValue("connected", true);
|
|
||||||
} else {
|
|
||||||
thing->setStateValue("connected", false);
|
|
||||||
// Try once to reconnect the device
|
|
||||||
kostalConnection->reconnectDevice();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
kostalConnection->connectDevice();
|
kostalConnection->connectDevice();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -157,7 +157,7 @@
|
||||||
"enum": "ByteOrder",
|
"enum": "ByteOrder",
|
||||||
"registerType": "holdingRegister",
|
"registerType": "holdingRegister",
|
||||||
"description": "MODBUS Byte Order Note",
|
"description": "MODBUS Byte Order Note",
|
||||||
"defaultValue": "ByteOrderLittleEndian",
|
"defaultValue": "ByteOrderBigEndian",
|
||||||
"access": "RO"
|
"access": "RO"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue