Skip to content
This repository was archived by the owner on May 20, 2025. It is now read-only.

Commit d6e90b9

Browse files
committed
Added more historical data
1 parent 99f6c03 commit d6e90b9

File tree

3 files changed

+137
-12
lines changed

3 files changed

+137
-12
lines changed

software/src/dbus_tsmppt_bridge.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,23 @@ DBusTsmpptBridge::DBusTsmpptBridge(Tsmppt *tsmppt, QObject *parent):
2626

2727
produce(mTsmppt, "arrayCurrent", "/Pv/I", "A", 2);
2828
produce(mTsmppt, "arrayVoltage", "/Pv/V", "V", 2);
29-
produce(mTsmppt, "outputPower", "/Yield/Power", "W", 2);
29+
produce(mTsmppt, "outputPower", "/Yield/Power", "W", 0);
3030
produce(mTsmppt, "chargingCurrent", "/Dc/0/Current", "A", 2);
3131
produce(mTsmppt, "batteryVoltage", "/Dc/0/Voltage", "V", 2);
3232
produce(mTsmppt, "batteryTemperature", "/Dc/0/Temperature");
3333
produce(mTsmppt, "chargeState", "/State");
3434

35+
produce("/History/Overall/DaysAvailable", 1);
36+
produce(mTsmppt, "batteryVoltageMaxDaily", "/History/Daily/0/MaxBatteryVoltage", "V", 2);
37+
produce(mTsmppt, "batteryVoltageMinDaily", "/History/Daily/0/MinBatteryVoltage", "V", 2);
38+
produce(mTsmppt, "powerMaxDaily", "/History/Daily/0/MaxPower", "W", 0);
39+
produce(mTsmppt, "arrayVoltageMaxDaily", "/History/Daily/0/MaxPvVoltage", "V", 2);
40+
produce(mTsmppt, "wattHoursDaily", "/History/Daily/0/Yield", "kWh", 2);
41+
produce(mTsmppt, "timeInAbsorption", "/History/Daily/0/TimeInAbsorption");
42+
// TSMPPT does not give time in bulk:
43+
// produce(mTsmppt, "timeInBulk", "/History/Daily/0/TimeInBulk");
44+
produce(mTsmppt, "timeInFloat", "/History/Daily/0/TimeInFloat");
45+
3546
//registerService();
3647
}
3748

software/src/tsmppt.cpp

Lines changed: 96 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,13 @@ const int REG_I_CC = 28;
1414
const int REG_T_BAT = 37;
1515
const int REG_CHARGE_STATE = 50;
1616
const int REG_POUT = 58;
17+
const int REG_V_BAT_MIN = 64;
18+
const int REG_V_BAT_MAX = 65;
19+
const int REG_V_PV_MAX = 66;
1720
const int REG_WHC_DAILY = 68;
1821
const int REG_POUT_MAX_DAILY= 70;
22+
const int REG_T_FLOAT = 79;
23+
const int REG_T_ABS = 77;
1924
const int REG_LAST_DYN = 79;
2025
const int REG_EHW_VERSION = 57549;
2126
const int REG_ESERIAL = 57536;
@@ -25,14 +30,19 @@ static struct _TsmpptDynVals
2530
double m_v_pu; // Voltage scaling
2631
double m_i_pu; // Current scaling
2732
double m_v_bat; // Battery voltage
33+
double m_v_bat_max; // Max battery voltage, daily
34+
double m_v_bat_min; // Min battery voltage, daily
2835
double m_t_bat; // Battery temperature
2936
double m_i_cc; // Charging current
3037
double m_v_pv; // PV array voltage
3138
double m_pout; // Output power
3239
double m_i_pv; // PV array current
3340
double m_p_max; // Max power, daily
3441
double m_whc; // Watt hours, daily
42+
double m_v_pv_max; // Max PV voltage, daily
3543
int m_cs; // Charge state
44+
int m_t_abs; // Time in absorption
45+
int m_t_float; // Time in float
3646
} TsmpptDynVals;
3747

3848
static struct _TsmpptStatVals
@@ -152,6 +162,14 @@ void Tsmppt::updateValues()
152162
double temp = (double)reg[REG_V_BAT-REG_FIRST_DYN] * TsmpptDynVals.m_v_pu / 32768.0;
153163
setBatteryVoltage(temp);
154164

165+
// Max Battery voltage:
166+
temp = (double)reg[REG_V_BAT_MAX-REG_FIRST_DYN] * TsmpptDynVals.m_v_pu / 32768.0;
167+
setBatteryVoltageMaxDaily(temp);
168+
169+
// Min Battery voltage:
170+
temp = (double)reg[REG_V_BAT_MIN-REG_FIRST_DYN] * TsmpptDynVals.m_v_pu / 32768.0;
171+
setBatteryVoltageMinDaily(temp);
172+
155173
// Battery temperature:
156174
temp = (double)(int16_t)reg[REG_T_BAT-REG_FIRST_DYN];
157175
setBatteryTemperature(temp);
@@ -168,23 +186,29 @@ void Tsmppt::updateValues()
168186
temp = (double)reg[REG_V_PV-REG_FIRST_DYN] * TsmpptDynVals.m_v_pu / 32768.0;
169187
setArrayVoltage(temp);
170188

189+
// Max PV array voltage:
190+
temp = (double)reg[REG_V_PV_MAX-REG_FIRST_DYN] * TsmpptDynVals.m_v_pu / 32768.0;
191+
setArrayVoltageMaxDaily(temp);
192+
171193
// PV array current:
172194
temp = (double)reg[REG_I_PV-REG_FIRST_DYN] * TsmpptDynVals.m_i_pu / 32768.0;
173195
setArrayCurrent(temp);
174196

175-
176-
177-
178197
// Whc daily:
179198
temp = (double)reg[REG_WHC_DAILY-REG_FIRST_DYN];
199+
// CCGX expects kWh:
200+
temp /= 1000.0;
180201
setWattHoursDaily(temp);
181202

182203
// Pmax daily:
183204
temp = (double)reg[REG_POUT_MAX_DAILY-REG_FIRST_DYN] * TsmpptDynVals.m_i_pu * TsmpptDynVals.m_v_pu / 131072.0;
184-
setMaxPowerDaily(temp);
205+
setPowerMaxDaily(temp);
185206

186207
// Charge state:
187208
setChargeState(reg[REG_CHARGE_STATE-REG_FIRST_DYN]);
209+
210+
setTimeInAbsorption(reg[REG_T_ABS-REG_FIRST_DYN]/60);
211+
setTimeInFloat(reg[REG_T_FLOAT-REG_FIRST_DYN]/60);
188212
}
189213

190214
QString Tsmppt::firmwareVersion() const
@@ -215,6 +239,32 @@ void Tsmppt::setBatteryVoltage(double v)
215239
emit batteryVoltageChanged();
216240
}
217241

242+
double Tsmppt::batteryVoltageMaxDaily() const
243+
{
244+
return TsmpptDynVals.m_v_bat_max;
245+
}
246+
247+
void Tsmppt::setBatteryVoltageMaxDaily(double v)
248+
{
249+
if (TsmpptDynVals.m_v_bat_max == v)
250+
return;
251+
TsmpptDynVals.m_v_bat_max = v;
252+
emit batteryVoltageMaxDailyChanged();
253+
}
254+
255+
double Tsmppt::batteryVoltageMinDaily() const
256+
{
257+
return TsmpptDynVals.m_v_bat_min;
258+
}
259+
260+
void Tsmppt::setBatteryVoltageMinDaily(double v)
261+
{
262+
if (TsmpptDynVals.m_v_bat_min == v)
263+
return;
264+
TsmpptDynVals.m_v_bat_min = v;
265+
emit batteryVoltageMinDailyChanged();
266+
}
267+
218268
double Tsmppt::batteryTemperature() const
219269
{
220270
return TsmpptDynVals.m_t_bat;
@@ -280,17 +330,30 @@ void Tsmppt::setArrayVoltage(double v)
280330
emit arrayVoltageChanged();
281331
}
282332

283-
double Tsmppt::maxPowerDaily() const
333+
double Tsmppt::arrayVoltageMaxDaily() const
334+
{
335+
return TsmpptDynVals.m_v_pv_max;
336+
}
337+
338+
void Tsmppt::setArrayVoltageMaxDaily(double v)
339+
{
340+
if (TsmpptDynVals.m_v_pv_max == v)
341+
return;
342+
TsmpptDynVals.m_v_pv_max = v;
343+
emit arrayVoltageMaxDailyChanged();
344+
}
345+
346+
double Tsmppt::powerMaxDaily() const
284347
{
285348
return TsmpptDynVals.m_p_max;
286349
}
287350

288-
void Tsmppt::setMaxPowerDaily(double v)
351+
void Tsmppt::setPowerMaxDaily(double v)
289352
{
290353
if (TsmpptDynVals.m_p_max == v)
291354
return;
292355
TsmpptDynVals.m_p_max = v;
293-
emit maxPowerDailyChanged();
356+
emit powerMaxDailyChanged();
294357
}
295358

296359
double Tsmppt::wattHoursDaily() const
@@ -332,6 +395,32 @@ void Tsmppt::setChargeState(int v)
332395
emit chargeStateChanged();
333396
}
334397

398+
int Tsmppt::timeInAbsorption() const
399+
{
400+
return TsmpptDynVals.m_t_abs;
401+
}
402+
403+
void Tsmppt::setTimeInAbsorption(int v)
404+
{
405+
if (TsmpptDynVals.m_t_abs == v)
406+
return;
407+
TsmpptDynVals.m_t_abs = v;
408+
emit timeInAbsorptionChanged();
409+
}
410+
411+
int Tsmppt::timeInFloat() const
412+
{
413+
return TsmpptDynVals.m_t_float;
414+
}
415+
416+
void Tsmppt::setTimeInFloat(int v)
417+
{
418+
if (TsmpptDynVals.m_t_float == v)
419+
return;
420+
TsmpptDynVals.m_t_float = v;
421+
emit timeInAbsorptionChanged();
422+
}
423+
335424
QString Tsmppt::productName() const
336425
{
337426
return QString("TriStar MPPT 60");

software/src/tsmppt.h

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,19 @@ class Tsmppt : public QObject
1111
{
1212
Q_OBJECT
1313
Q_PROPERTY(double batteryVoltage READ batteryVoltage WRITE setBatteryVoltage NOTIFY batteryVoltageChanged)
14+
Q_PROPERTY(double batteryVoltageMaxDaily READ batteryVoltageMaxDaily WRITE setBatteryVoltageMaxDaily NOTIFY batteryVoltageMaxDailyChanged)
15+
Q_PROPERTY(double batteryVoltageMinDaily READ batteryVoltageMinDaily WRITE setBatteryVoltageMinDaily NOTIFY batteryVoltageMinDailyChanged)
1416
Q_PROPERTY(double batteryTemperature READ batteryTemperature WRITE setBatteryTemperature NOTIFY batteryTemperatureChanged)
1517
Q_PROPERTY(double chargingCurrent READ chargingCurrent WRITE setChargingCurrent NOTIFY chargingCurrentChanged)
1618
Q_PROPERTY(double outputPower READ outputPower WRITE setOutputPower NOTIFY outputPowerChanged)
1719
Q_PROPERTY(double arrayCurrent READ arrayCurrent WRITE setArrayCurrent NOTIFY arrayCurrentChanged)
1820
Q_PROPERTY(double arrayVoltage READ arrayVoltage WRITE setArrayVoltage NOTIFY arrayVoltageChanged)
19-
Q_PROPERTY(double maxPowerDaily READ maxPowerDaily WRITE setMaxPowerDaily NOTIFY maxPowerDailyChanged)
21+
Q_PROPERTY(double arrayVoltageMaxDaily READ arrayVoltageMaxDaily WRITE setArrayVoltageMaxDaily NOTIFY arrayVoltageMaxDailyChanged)
22+
Q_PROPERTY(double powerMaxDaily READ powerMaxDaily WRITE setPowerMaxDaily NOTIFY powerMaxDailyChanged)
2023
Q_PROPERTY(double wattHoursDaily READ wattHoursDaily WRITE setWattHoursDaily NOTIFY wattHoursDailyChanged)
2124
Q_PROPERTY(int chargeState READ chargeState WRITE setChargeState NOTIFY chargeStateChanged)
25+
Q_PROPERTY(int timeInAbsorption READ timeInAbsorption WRITE setTimeInAbsorption NOTIFY timeInAbsorptionChanged)
26+
Q_PROPERTY(int timeInFloat READ timeInFloat WRITE setTimeInFloat NOTIFY timeInFloatChanged)
2227

2328
public:
2429
Tsmppt(const QString &IPAddress, const int port = 502, int slave = 1, QObject *parent = 0);
@@ -27,6 +32,12 @@ class Tsmppt : public QObject
2732
double batteryVoltage() const;
2833
void setBatteryVoltage(double v);
2934

35+
double batteryVoltageMaxDaily() const;
36+
void setBatteryVoltageMaxDaily(double v);
37+
38+
double batteryVoltageMinDaily() const;
39+
void setBatteryVoltageMinDaily(double v);
40+
3041
double batteryTemperature() const;
3142
void setBatteryTemperature(double v);
3243

@@ -42,15 +53,24 @@ class Tsmppt : public QObject
4253
double arrayVoltage() const;
4354
void setArrayVoltage(double v);
4455

45-
double maxPowerDaily() const;
46-
void setMaxPowerDaily(double v);
56+
double arrayVoltageMaxDaily() const;
57+
void setArrayVoltageMaxDaily(double v);
58+
59+
double powerMaxDaily() const;
60+
void setPowerMaxDaily(double v);
4761

4862
double wattHoursDaily() const;
4963
void setWattHoursDaily(double v);
5064

5165
int chargeState() const;
5266
void setChargeState(int v);
5367

68+
int timeInAbsorption() const;
69+
void setTimeInAbsorption(int v);
70+
71+
int timeInFloat() const;
72+
void setTimeInFloat(int v);
73+
5474
QString firmwareVersion() const;
5575
QString hardwareVersion() const;
5676
uint64_t serialNumber() const;
@@ -60,16 +80,21 @@ class Tsmppt : public QObject
6080

6181
signals:
6282
void batteryVoltageChanged();
83+
void batteryVoltageMaxDailyChanged();
84+
void batteryVoltageMinDailyChanged();
6385
void batteryTemperatureChanged();
6486
void chargingCurrentChanged();
6587
void outputPowerChanged();
6688
void arrayCurrentChanged();
6789
void arrayVoltageChanged();
68-
void maxPowerDailyChanged();
90+
void arrayVoltageMaxDailyChanged();
91+
void powerMaxDailyChanged();
6992
void wattHoursDailyChanged();
7093
void chargeStateChanged();
7194
void tsmpptConnected();
7295
void connectionLost();
96+
void timeInAbsorptionChanged();
97+
void timeInFloatChanged();
7398

7499
private slots:
75100
void onTimeout();

0 commit comments

Comments
 (0)