Fotobot
Get data from your photovoltaic plant
exportcontroller.cpp
Go to the documentation of this file.
1 
7 #include "exportcontroller.h"
8 #include <QVariant>
9 #include <QDateTime>
10 #include <QHostInfo>
11 
13  m_needs_access_data = true;
14  m_needs_change_settings = false;
15 }
16 
17 void ExportController::service(HttpRequest& request, HttpResponse& response) {
18 
19  if (needsLogin(request, response)) {
20  return;
21  }
22 
23  QString body ("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
24  "<?xml-stylesheet type=\"text/xsl\" href=\"data.xsl\"?>\n"
25  "<actual_state_of_invertors>\n");
26  body.append(QString("<FVEname>%1</FVEname>\n")
27  .arg(QHostInfo::localHostName() + "." + QHostInfo::localDomainName())
28  );
29 
30  QDateTime from, to;
31  QString fromString (QByteArray::fromPercentEncoding(request.getParameter("from")));
32  QString toString (QByteArray::fromPercentEncoding(request.getParameter("to")));
33  if(!fromString.isEmpty()) from = QDateTime::fromString(fromString, "yyyy-MM-dd hh:mm:ss");
34  if(!toString.isEmpty()) to = QDateTime::fromString(toString, "yyyy-MM-dd hh:mm:ss");
35 
36  QList<DBT_DATA_VW> data = Static::db->data(from, to);
37 
38  QList<DBT_DATA_VW>::const_iterator i;
39  for(i = data.constBegin(); i != data.constEnd(); ++i) {
40  const DBT_DATA_VW& inv = *i;
41 
42  if (inv.address >= 1000) {
43 
44  // SENSORS
45  body.append("<sensors>\n");
46  body.append(QString("\t<line>%1</line>\n").arg(inv.line));
47  body.append(QString("\t<address>%1</address>\n").arg(inv.address));
48  if(!inv.serial_number.isNull())
49  body.append(QString("\t<sn>%1</sn>\n").arg(inv.serial_number));
50  if(!inv.date.isNull())
51  body.append(QString("\t<date>%1</date>\n").arg(inv.date.toString("yyyy-MM-dd hh:mm:ss")));
52  if(!inv.error.isNull())
53  body.append(QString("\t<error>%1</error>\n").arg(inv.error));
54  if(!inv.temperature_1.isNull())
55  body.append(QString("\t<temperature_1>%1</temperature_1>\n").arg(inv.temperature_1.toString()));
56  if(!inv.temperature_2.isNull())
57  body.append(QString("\t<temperature_2>%1</temperature_2>\n").arg(inv.temperature_2.toString()));
58  if(!inv.irradiance.isNull())
59  body.append(QString("\t<irradiance>%1</irradiance>\n").arg(inv.irradiance.toString()));
60  body.append("</sensors>\n");
61 
62 
63  } else {
64 
65  // INVERTORS
66  body.append("<invertor>\n");
67  body.append(QString("\t<line>%1</line>\n").arg(inv.line));
68  body.append(QString("\t<address>%1</address>\n").arg(inv.address));
69  if(!inv.serial_number.isNull())
70  body.append(QString("\t<sn>%1</sn>\n").arg(inv.serial_number));
71  if(!inv.date.isNull())
72  body.append(QString("\t<date>%1</date>\n").arg(inv.date.toString("yyyy-MM-dd hh:mm:ss")));
73  if(!inv.error.isNull())
74  body.append(QString("\t<error>%1</error>\n").arg(inv.error));
75  if(!inv.now_power.isNull())
76  body.append(QString("\t<now-power>%1</now-power>\n").arg(inv.now_power.toString()));
77  if(!inv.now_ac_current.isNull())
78  body.append(QString("\t<now-ac-current>%1</now-ac-current>\n").arg(inv.now_ac_current.toString()));
79  if(!inv.now_ac_voltage.isNull())
80  body.append(QString("\t<now-ac-voltage>%1</now-ac-voltage>\n").arg(inv.now_ac_voltage.toString()));
81  if(!inv.now_ac_frequency.isNull())
82  body.append(QString("\t<now-ac-frequency>%1</now-ac-frequency>\n").arg(inv.now_ac_frequency.toString()));
83  if(!inv.now_dc_current.isNull())
84  body.append(QString("\t<now-dc-current>%1</now-dc-current>\n").arg(inv.now_dc_current.toString()));
85  if(!inv.now_dc_voltage.isNull())
86  body.append(QString("\t<now-dc-voltage>%1</now-dc-voltage>\n").arg(inv.now_dc_voltage.toString()));
87  if(!inv.day_energy.isNull())
88  body.append(QString("\t<day-energy>%1</day-energy>\n").arg(inv.day_energy.toString()));
89  if(!inv.day_power_maximum.isNull())
90  body.append(QString("\t<day-power-maximum>%1</day-power-maximum>\n").arg(inv.day_power_maximum.toString()));
91  if(!inv.day_ac_voltage_maximum.isNull())
92  body.append(QString("\t<day-ac-voltage-maximum>%1</day-ac-voltage-maximum>\n").arg(inv.day_ac_voltage_maximum.toString()));
93  if(!inv.day_ac_voltage_minimum.isNull())
94  body.append(QString("\t<day-ac-voltage-minimum>%1</day-ac-voltage-minimum>\n").arg(inv.day_ac_voltage_minimum.toString()));
95  if(!inv.day_dc_voltage_maximum.isNull())
96  body.append(QString("\t<day-dc-voltage-maximum>%1</day-dc-voltage-maximum>\n").arg(inv.day_dc_voltage_maximum.toString()));
97  if(!inv.day_operating_hours.isNull())
98  body.append(QString("\t<day-operating-hours>%1</day-operating-hours>\n").arg(inv.day_operating_hours.toString()));
99  if(!inv.total_energy.isNull())
100  body.append(QString("\t<total-energy>%1</total-energy>\n").arg(inv.total_energy.toString()));
101  if(!inv.total_power_maximum.isNull())
102  body.append(QString("\t<total-power-maximum>%1</total-power-maximum>\n").arg(inv.total_power_maximum.toString()));
103  if(!inv.total_ac_voltage_maximum.isNull())
104  body.append(QString("\t<total-ac-voltage-maximum>%1</total-ac-voltage-maximum>\n").arg(inv.total_ac_voltage_maximum.toString()));
105  if(!inv.total_ac_voltage_minimum.isNull())
106  body.append(QString("\t<total-ac-voltage-minimum>%1</total-ac-voltage-minimum>\n").arg(inv.total_ac_voltage_minimum.toString()));
107  if(!inv.total_dc_voltage_maximum.isNull())
108  body.append(QString("\t<total-dc-voltage-maximum>%1</total-dc-voltage-maximum>\n").arg(inv.total_dc_voltage_maximum.toString()));
109  if(!inv.total_operating_hours.isNull())
110  body.append(QString("\t<total-operating-hours>%1</total-operating-hours>\n").arg(inv.total_operating_hours.toString()));
111  body.append(QString("\t<status>%1</status>\n").arg(inv.status));
112  body.append("</invertor>\n");
113  }
114 
115  }
116  body.append("</actual_state_of_invertors>\n");
117 
118  QByteArray databody;
119  QByteArray contenttype;
120  QByteArray zip = request.getParameter("zip");
121  if (zip == "Y" || zip == "y") {
122  contenttype = "application/x-gzip";
123  databody = qCompress(body.toUtf8(),9);
124  } else {
125  contenttype = "text/xml; charset=utf-8";
126  databody = body.toUtf8();
127  }
128 
129  response.setHeader("Content-Type", contenttype);
130  response.setHeader("Cache-Control", "private, must-revalidate, max-age=0");
131  response.setHeader("Pragma", "no-cache");
132  response.write(databody);
133 }
134 
135 
void service(HttpRequest &request, HttpResponse &response)
QList< DBT_DATA_VW > data(const QDateTime &from=QDateTime(), const QDateTime &to=QDateTime(), bool limit=true)
Returns data for all invertors.
Definition: database.cpp:611
Class describing database table DATA + INVERTORS.