Fotobot
Get data from your photovoltaic plant
Public Member Functions | Private Member Functions | List of all members
ExportController Class Reference

XML export controller. More...

#include <exportcontroller.h>

Inheritance diagram for ExportController:
MRequestHandler

Public Member Functions

 ExportController ()
 
void service (HttpRequest &request, HttpResponse &response)
 
- Public Member Functions inherited from MRequestHandler
 MRequestHandler ()
 

Private Member Functions

 Q_DISABLE_COPY (ExportController)
 

Additional Inherited Members

- Protected Member Functions inherited from MRequestHandler
bool needsLogin (HttpRequest &request, HttpResponse &response)
 
- Protected Attributes inherited from MRequestHandler
bool m_needs_access_data
 
bool m_needs_change_settings
 
bool m_cacheable
 

Detailed Description

XML export controller.

This is a controller for interface to XML export of the last known state of invertors or their past recorded state.

By default (with no parameters) the last known state of all invertors is returned.

HTTP parameters "from" and "to" can be used to get past recorded state. They are expected to be in form of percent-encoded date-time string of format "yyyy-MM-dd hh:mm:ss".

When just one parameter was given then all records from this time till last know state is returned.

Definition at line 27 of file exportcontroller.h.

Constructor & Destructor Documentation

ExportController::ExportController ( )

Constructor

Definition at line 12 of file exportcontroller.cpp.

12  {
13  m_needs_access_data = true;
14  m_needs_change_settings = false;
15 }

Member Function Documentation

void ExportController::service ( HttpRequest &  request,
HttpResponse &  response 
)

Generates the response

Definition at line 17 of file exportcontroller.cpp.

17  {
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 }
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.

The documentation for this class was generated from the following files: