Skip to content

Commit

Permalink
Added events to firmwareVersion etc.
Browse files Browse the repository at this point in the history
  • Loading branch information
osaether committed Jul 5, 2019
1 parent f4a1878 commit c9da45b
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 42 deletions.
14 changes: 5 additions & 9 deletions software/src/dbus_tsmppt_bridge.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,11 @@ DBusTsmpptBridge::DBusTsmpptBridge(Tsmppt *tsmppt, QObject *parent):
produce(mTsmppt, "timeInAbsorption", "/History/Daily/0/TimeInAbsorption");
produce(mTsmppt, "timeInBulk", "/History/Daily/0/TimeInBulk");
produce(mTsmppt, "timeInFloat", "/History/Daily/0/TimeInFloat");
produce(mTsmppt, "firmwareVersion", "/FirmwareVersion");
produce(mTsmppt, "hardwareVersion", "/HardwareVersion");
produce(mTsmppt, "productName", "/ProductName");
produce(mTsmppt, "serialNumber", "/Serial");

registerService();
}

Expand All @@ -58,13 +63,4 @@ void DBusTsmpptBridge::onTsmpptConnected()
{
produce("/Connected", 1);
produce("/Mode", 1);
QString fwver = mTsmppt->firmwareVersion();
produce("/FirmwareVersion", fwver.toInt());
QString hwver = mTsmppt->hardwareVersion();
produce("/HardwareVersion", hwver);
produce("/ProductName", mTsmppt->productName());
uint64_t serial = mTsmppt->serialNumber();
produce("/Serial", QString::number(serial));
QString logmsg = mTsmppt->productName() + " (serial #" + QString::number(serial) + ", controler v" + hwver + "." + fwver + ") connected";
QLOG_INFO() << logmsg.toStdString().c_str();
}
96 changes: 68 additions & 28 deletions software/src/tsmppt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ const int CS_BULK = 5;

Tsmppt::Tsmppt(const QString &IPAddress, const int port, int interval, int slave, QObject *parent):
QObject(parent), mInitialized(false), mTimer(new QTimer(this)), m_interval(interval), m_cs(0), m_t_bulk(1),
m_t_bulk_ms(0), yield_user(0), yield_system(0), m_model(1)
m_t_bulk_ms(0), yield_user(0), yield_system(0)
{
QLOG_DEBUG() << "Tsmppt::Tsmppt(" << IPAddress << ", " << port << ", " << interval << ", " << slave << ")";
mCtx = modbus_new_tcp_pi(IPAddress.toStdString().c_str(), QString::number(port).toStdString().c_str());
Expand Down Expand Up @@ -121,43 +121,65 @@ bool Tsmppt::initialize()
ver += ((regs[4] >> 8) & 0x0f) * 100;
ver += ((regs[4] >> 4) & 0x0f) * 10;
ver += regs[4] & 0x0f;
m_fw_ver = QString::number(ver);
setFirmwareVersion(ver);

// Hardware version:
if (!readInputRegisters(REG_EHW_VERSION, 1, regs))
{
modbus_close(mCtx);
return false;
}
m_hw_ver = QString::number(regs[0] >> 8) + "." + QString::number(regs[0] & 0xff);
setHardwareVersion(QString::number(regs[0] >> 8) + "." + QString::number(regs[0] & 0xff));

// Model
if (!readInputRegisters(REG_EMODEL, 1, regs))
{
modbus_close(mCtx);
return false;
}
m_model = regs[0];
QString name;
switch (regs[0])
{
case 0:
name = "TriStar MPPT 45";
break;

case 1:
name = "TriStar MPPT 60";
break;

case 2:
name = "TriStar MPPT 30";
break;

default:
name = "";
}
setProductName(name);

// Serial number:
if (!readInputRegisters(REG_ESERIAL, 4, regs))
{
modbus_close(mCtx);
return false;
}
m_serial = (uint64_t)((regs[0] & 0xff) - 0x30) * 10000000;
m_serial += (uint64_t)((regs[0] >> 8) - 0x30) * 1000000;
m_serial += (uint64_t)((regs[1] & 0xff) - 0x30) * 100000;
m_serial += (uint64_t)((regs[1] >> 8) - 0x30) * 10000;
m_serial += (uint64_t)((regs[2] & 0xff) - 0x30) * 1000;
m_serial += (uint64_t)((regs[2] >> 8) - 0x30) * 100;
m_serial += (uint64_t)((regs[3] & 0xff) - 0x30) * 10;
m_serial += (uint64_t)((regs[3] >> 8) - 0x30);
uint64_t serial = (uint64_t)((regs[0] & 0xff) - 0x30) * 10000000;
serial += (uint64_t)((regs[0] >> 8) - 0x30) * 1000000;
serial += (uint64_t)((regs[1] & 0xff) - 0x30) * 100000;
serial += (uint64_t)((regs[1] >> 8) - 0x30) * 10000;
serial += (uint64_t)((regs[2] & 0xff) - 0x30) * 1000;
serial += (uint64_t)((regs[2] >> 8) - 0x30) * 100;
serial += (uint64_t)((regs[3] & 0xff) - 0x30) * 10;
serial += (uint64_t)((regs[3] >> 8) - 0x30);
setSerialNumber(QString::number(serial));


modbus_close(mCtx);
mInitialized = true;
emit tsmpptConnected();
QLOG_DEBUG() << "Tsmppt::initialize(end)";
QString logmsg = productName() + " (serial #" + serialNumber() + ", controler v" + hardwareVersion() + "." + firmwareVersion() + ") connected";
QLOG_INFO() << logmsg.toStdString().c_str();
return true;
}

Expand Down Expand Up @@ -247,21 +269,45 @@ void Tsmppt::updateValues()
modbus_close(mCtx);
}

QString Tsmppt::firmwareVersion() const
int Tsmppt::firmwareVersion() const
{
return m_fw_ver;
}

void Tsmppt::setFirmwareVersion(int v)
{
if (m_fw_ver == v)
return;
m_fw_ver = v;
emit firmwareVersionChanged();
}

QString Tsmppt::hardwareVersion() const
{
return m_hw_ver;
}

uint64_t Tsmppt::serialNumber() const
void Tsmppt::setHardwareVersion(QString v)
{
if (m_hw_ver == v)
return;
m_hw_ver = v;
emit hardwareVersionChanged();
}

QString Tsmppt::serialNumber() const
{
return m_serial;
}

void Tsmppt::setSerialNumber(QString v)
{
if (m_serial == v)
return;
m_serial = v;
emit serialNumberChanged();
}

double Tsmppt::batteryVoltage() const
{
return m_v_bat;
Expand Down Expand Up @@ -525,22 +571,16 @@ void Tsmppt::setTimeInFloat(int v)

QString Tsmppt::productName() const
{
QString name;
switch (m_model)
{
case 0:
name = "TriStar MPPT 45";
break;
return m_name;
}

case 1:
name = "TriStar MPPT 60";
break;

case 2:
name = "TriStar MPPT 30";
break;
}
return name;
void Tsmppt::setProductName(QString v)
{
if (m_name == v)
return;
m_name = v;
emit productNameChanged();
}

void Tsmppt::onTimeout()
Expand Down
25 changes: 20 additions & 5 deletions software/src/tsmppt.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ class Tsmppt : public QObject
Q_PROPERTY(int timeInBulk READ timeInBulk WRITE setTimeInBulk NOTIFY timeInBulkChanged)
Q_PROPERTY(double yieldUser READ yieldUser WRITE setYieldUser NOTIFY yieldUserChanged)
Q_PROPERTY(double yieldSystem READ yieldSystem WRITE setYieldSystem NOTIFY yieldSystemChanged)
Q_PROPERTY(int firmwareVersion READ firmwareVersion WRITE setFirmwareVersion NOTIFY firmwareVersionChanged)
Q_PROPERTY(QString hardwareVersion READ hardwareVersion WRITE setHardwareVersion NOTIFY hardwareVersionChanged)
Q_PROPERTY(QString productName READ productName WRITE setProductName NOTIFY productNameChanged)
Q_PROPERTY(QString serialNumber READ serialNumber WRITE setSerialNumber NOTIFY serialNumberChanged)

public:
Tsmppt(const QString &IPAddress, const int port = 502, int interval = 5000, int slave = 1, QObject *parent = 0);
Expand Down Expand Up @@ -91,10 +95,17 @@ class Tsmppt : public QObject
double yieldSystem() const;
void setYieldSystem(double v);

QString firmwareVersion() const;
int firmwareVersion() const;
void setFirmwareVersion(int v);

QString hardwareVersion() const;
uint64_t serialNumber() const;
void setHardwareVersion(QString v);

QString serialNumber() const;
void setSerialNumber(QString v);

QString productName() const;
void setProductName(QString v);

bool initialize();

Expand All @@ -120,6 +131,10 @@ class Tsmppt : public QObject
void timeInBulkChanged();
void yieldUserChanged();
void yieldSystemChanged();
void firmwareVersionChanged();
void hardwareVersionChanged();
void serialNumberChanged();
void productNameChanged();

private slots:
void onTimeout();
Expand Down Expand Up @@ -159,10 +174,10 @@ private slots:
// Static values (read once):
double m_v_pu; // Voltage scaling
double m_i_pu; // Current scaling
QString m_fw_ver;
int m_fw_ver;
QString m_hw_ver;
uint64_t m_serial;
uint16_t m_model;
QString m_serial;
QString m_name;
};

#endif // TSMPPT_H

0 comments on commit c9da45b

Please sign in to comment.