adding command listhkr

master
Steffen Pohle 4 years ago
parent c1ab440a33
commit dd4c9e8749

@ -20,7 +20,8 @@ void help() {
printf ("\tconnect connect to the device, it will save the SID file.\n"); printf ("\tconnect connect to the device, it will save the SID file.\n");
printf ("\tlist lists all devices, connection will be recovered from SID.\n"); printf ("\tlist lists all devices, connection will be recovered from SID.\n");
printf ("\t If silent parameter is set, we will not be asked for credentials\n"); printf ("\t If silent parameter is set, we will not be asked for credentials\n");
printf ("\tgethzr AIN options reads heating control device\n"); printf ("\tlisthkr shows a list of Heating Crontrols\n");
printf ("\tgethkr AIN options reads heating control device\n");
printf ("\t -nochart display no history chart\n"); printf ("\t -nochart display no history chart\n");
printf ("\tsaveconfig save configfile.\n"); printf ("\tsaveconfig save configfile.\n");
printf ("\n"); printf ("\n");
@ -69,8 +70,8 @@ void getlist(int argpos, int argc, char **argv) {
} }
#define CHARTSIZE 20 #define CHARTSIZE 20
void gethzr(int argci, int argc, char **argv) { void gethkr(int argci, int argc, char **argv) {
FBSmartHomeHZR hzr; FBSmartHomeHKR hkr;
list<float>::iterator iter; list<float>::iterator iter;
float fmin, fmax; float fmin, fmax;
std::string s; std::string s;
@ -88,36 +89,36 @@ void gethzr(int argci, int argc, char **argv) {
if (ain == NULL) return; if (ain == NULL) return;
connect(); connect();
fbsh.GetHZR((std::string)ain, &hzr); fbsh.GetHKR((std::string)ain, &hkr);
printf ("Name:%s ID:%s\n", hzr.name.c_str(), hzr.id.c_str()); printf ("Name:%s ID:%s\n", hkr.name.c_str(), hkr.id.c_str());
printf (" Temp: %.1f\n", hzr.temp); printf (" Temp: %.1f\n", hkr.temp);
printf (" Temp Akt: %.1f\n", hzr.temp_cur); printf (" Temp Akt: %.1f\n", hkr.temp_cur);
printf (" Temp Set: %.1f\n", hzr.temp_set); printf (" Temp Set: %.1f\n", hkr.temp_set);
printf (" Temp Komfort: %.1f\n", hzr.temp_h); printf (" Temp Komfort: %.1f\n", hkr.temp_h);
printf (" Temp Absenk: %.1f\n", hzr.temp_l); printf (" Temp Absenk: %.1f\n", hkr.temp_l);
printf (" Offset: %d\n", hzr.offset); printf (" Offset: %d\n", hkr.offset);
printf (" Grid: %d\n", hzr.statsgrid); printf (" Grid: %d\n", hkr.statsgrid);
if (!nochart) { if (!nochart) {
for (iter = hzr.stats.begin(); iter != hzr.stats.end(); iter++) { for (iter = hkr.stats.begin(); iter != hkr.stats.end(); iter++) {
if (iter == hzr.stats.begin()) fmin = fmax = *iter; if (iter == hkr.stats.begin()) fmin = fmax = *iter;
if (fmin > *iter) fmin = *iter; if (fmin > *iter) fmin = *iter;
if (fmax < *iter) fmax = *iter; if (fmax < *iter) fmax = *iter;
} }
printf (" %-2.1f %-2.1f\n", fmin/10.0, fmax/10.0); printf (" %-2.1f %-2.1f\n", fmin/10.0, fmax/10.0);
ctime = (ctime / hzr.statsgrid) * hzr.statsgrid; ctime = (ctime / hkr.statsgrid) * hkr.statsgrid;
for (iter = hzr.stats.begin(); iter != hzr.stats.end(); iter++) { for (iter = hkr.stats.begin(); iter != hkr.stats.end(); iter++) {
s = " "; s = " ";
c = ((float)(CHARTSIZE * (*iter - fmin) / (fmax-fmin))); c = ((float)(CHARTSIZE * (*iter - fmin) / (fmax-fmin)));
for (i = 0; i < c; i++) s += " "; for (i = 0; i < c; i++) s += " ";
s += "*"; s += "*";
for (i = c+1; i <= CHARTSIZE; i++) s += " "; for (i = c+1; i <= CHARTSIZE; i++) s += " ";
ctime -= hzr.statsgrid; ctime -= hkr.statsgrid;
tmp = localtime(&ctime); tmp = localtime(&ctime);
strftime(t, 64, "%H:%M", tmp); strftime(t, 64, "%H:%M", tmp);
printf (" %s |%s|\n", t, s.c_str()); printf (" %s |%s|\n", t, s.c_str());
@ -127,6 +128,28 @@ void gethzr(int argci, int argc, char **argv) {
} }
void listhkr(int argci, int argc, char **argv) {
FBSmartHomeHKR hkr;
std::list<FBSmartHomeDevice> *devlist;
std::list<FBSmartHomeDevice>::iterator iter;
connect ();
devlist = fbsh.GetDevices();
if (devlist == NULL) {
fprintf (stderr, "Error Retrieving Devices: %s\n", strerror(errno));
return;
}
for (iter = devlist->begin(); iter != devlist->end(); iter++) {
if (iter->type.compare("hkr") == 0) {
fbsh.GetHKR(iter->id, &hkr);
printf ("%s name:%s temp:%.1f cur:%.1f set:%.1f\n", hkr.id.c_str(), hkr.name.c_str(), hkr.temp, hkr.temp_cur, hkr.temp_set);
}
}
delete devlist;
}
int main(int argc, char** argv) { int main(int argc, char** argv) {
int i; int i;
@ -154,9 +177,13 @@ int main(int argc, char** argv) {
config.SaveConfig(); config.SaveConfig();
break; break;
} }
else if (strcmp(argv[i], "gethzr") == 0) { else if (strcmp(argv[i], "gethkr") == 0) {
gethzr(i, argc, argv); gethkr(i, argc, argv);
} }
else if (strcmp(argv[i], "listhkr") == 0) {
listhkr(i, argc, argv);
}
// //
// parameters will follow here // parameters will follow here

@ -430,7 +430,7 @@ std::list<FBSmartHomeDevice> *FBSmartHome::GetDevices() {
/* /*
* read data from device and fill out FBSmartHomeHZR structure * read data from device and fill out FBSmartHomeHZR structure
*/ */
int FBSmartHome::GetHZR(std::string ain, FBSmartHomeHZR *hzr) { int FBSmartHome::GetHKR(std::string ain, FBSmartHomeHKR *hkr) {
std::string s; std::string s;
FBSmartHomeDevice smd; FBSmartHomeDevice smd;
xmlDocPtr xmldoc; xmlDocPtr xmldoc;
@ -438,7 +438,7 @@ int FBSmartHome::GetHZR(std::string ain, FBSmartHomeHZR *hzr) {
xmlAttrPtr xmlattr; xmlAttrPtr xmlattr;
int len, i; int len, i;
if (hzr == NULL) return -1; if (hkr == NULL) return -1;
for (s = "", i = 0; i < (int)ain.length(); i++) { for (s = "", i = 0; i < (int)ain.length(); i++) {
if (ain[i] == ' ') s += "%20"; if (ain[i] == ' ') s += "%20";
else s += ain[i]; else s += ain[i];
@ -469,49 +469,49 @@ int FBSmartHome::GetHZR(std::string ain, FBSmartHomeHZR *hzr) {
xmlattr = xmlnode->properties; xmlattr = xmlnode->properties;
while (xmlattr) { while (xmlattr) {
if (!xmlStrcmp(xmlattr->name, (const xmlChar *)"identifier")) if (!xmlStrcmp(xmlattr->name, (const xmlChar *)"identifier"))
hzr->id = (char *) xmlNodeListGetString(xmldoc, xmlattr->children, 1); hkr->id = (char *) xmlNodeListGetString(xmldoc, xmlattr->children, 1);
xmlattr = xmlattr->next; xmlattr = xmlattr->next;
} }
while (xmlchild) { while (xmlchild) {
// name // name
if (!xmlStrcmp(xmlchild->name, (const xmlChar *)"name")) if (!xmlStrcmp(xmlchild->name, (const xmlChar *)"name"))
hzr->name = (char *) xmlNodeListGetString(xmldoc, xmlchild->children, 1); hkr->name = (char *) xmlNodeListGetString(xmldoc, xmlchild->children, 1);
// temperatur // temperatur
else if (!xmlStrcmp(xmlchild->name, (const xmlChar *)"temperature")) { else if (!xmlStrcmp(xmlchild->name, (const xmlChar *)"temperature")) {
xmlNodePtr xmlc = xmlchild->children; xmlNodePtr xmlc = xmlchild->children;
while(xmlc) { while(xmlc) {
if (!xmlStrcmp(xmlc->name, (const xmlChar *)"celsius")) { if (!xmlStrcmp(xmlc->name, (const xmlChar *)"celsius")) {
hzr->temp = (atof ((char *) xmlNodeListGetString(xmldoc, xmlc->children, 1))) / 10.0; hkr->temp = (atof ((char *) xmlNodeListGetString(xmldoc, xmlc->children, 1))) / 10.0;
} }
else if (!xmlStrcmp(xmlc->name, (const xmlChar *)"offset")) { else if (!xmlStrcmp(xmlc->name, (const xmlChar *)"offset")) {
hzr->offset = atoi ((char *) xmlNodeListGetString(xmldoc, xmlc->children, 1)); hkr->offset = atoi ((char *) xmlNodeListGetString(xmldoc, xmlc->children, 1));
} }
xmlc = xmlc->next; xmlc = xmlc->next;
} }
} }
// hzr // hkr
else if (!xmlStrcmp(xmlchild->name, (const xmlChar *)"hkr")) { else if (!xmlStrcmp(xmlchild->name, (const xmlChar *)"hkr")) {
xmlNodePtr xmlc = xmlchild->children; xmlNodePtr xmlc = xmlchild->children;
while(xmlc) { while(xmlc) {
if (!xmlStrcmp(xmlc->name, (const xmlChar *)"tist")) { if (!xmlStrcmp(xmlc->name, (const xmlChar *)"tist")) {
hzr->temp_cur = atof ((char *) xmlNodeListGetString(xmldoc, xmlc->children, 1)); hkr->temp_cur = atof ((char *) xmlNodeListGetString(xmldoc, xmlc->children, 1));
hzr->temp_cur = hzr->temp_cur / 2.0; hkr->temp_cur = hkr->temp_cur / 2.0;
} }
else if (!xmlStrcmp(xmlc->name, (const xmlChar *)"tsoll")) { else if (!xmlStrcmp(xmlc->name, (const xmlChar *)"tsoll")) {
hzr->temp_set = atof ((char *) xmlNodeListGetString(xmldoc, xmlc->children, 1)); hkr->temp_set = atof ((char *) xmlNodeListGetString(xmldoc, xmlc->children, 1));
hzr->temp_set = hzr->temp_set / 2.0; hkr->temp_set = hkr->temp_set / 2.0;
} }
else if (!xmlStrcmp(xmlc->name, (const xmlChar *)"absenk")) { else if (!xmlStrcmp(xmlc->name, (const xmlChar *)"absenk")) {
hzr->temp_l = atof ((char *) xmlNodeListGetString(xmldoc, xmlc->children, 1)); hkr->temp_l = atof ((char *) xmlNodeListGetString(xmldoc, xmlc->children, 1));
hzr->temp_l = hzr->temp_l / 2.0; hkr->temp_l = hkr->temp_l / 2.0;
} }
else if (!xmlStrcmp(xmlc->name, (const xmlChar *)"komfort")) { else if (!xmlStrcmp(xmlc->name, (const xmlChar *)"komfort")) {
hzr->temp_h = atof ((char *) xmlNodeListGetString(xmldoc, xmlc->children, 1)); hkr->temp_h = atof ((char *) xmlNodeListGetString(xmldoc, xmlc->children, 1));
hzr->temp_h = hzr->temp_h / 2.0; hkr->temp_h = hkr->temp_h / 2.0;
} }
xmlc = xmlc->next; xmlc = xmlc->next;
@ -561,18 +561,18 @@ int FBSmartHome::GetHZR(std::string ain, FBSmartHomeHZR *hzr) {
if (!xmlStrcmp(xmlattr->name, (const xmlChar *)"count")) if (!xmlStrcmp(xmlattr->name, (const xmlChar *)"count"))
count = atoi((char *) xmlNodeListGetString(xmldoc, xmlattr->children, 1)); count = atoi((char *) xmlNodeListGetString(xmldoc, xmlattr->children, 1));
else if (!xmlStrcmp(xmlattr->name, (const xmlChar *)"grid")) else if (!xmlStrcmp(xmlattr->name, (const xmlChar *)"grid"))
hzr-> statsgrid = atoi((char *) xmlNodeListGetString(xmldoc, xmlattr->children, 1)); hkr-> statsgrid = atoi((char *) xmlNodeListGetString(xmldoc, xmlattr->children, 1));
xmlattr = xmlattr->next; xmlattr = xmlattr->next;
} }
txt = ((char *) xmlNodeListGetString(xmldoc, xmlc->children, 1)); txt = ((char *) xmlNodeListGetString(xmldoc, xmlc->children, 1));
hzr->stats.clear(); hkr->stats.clear();
t = (char*)txt.c_str(); t = (char*)txt.c_str();
for (int i = 0; t != NULL && i < count; i++) { for (int i = 0; t != NULL && i < count; i++) {
if (*t == ',') t++; if (*t == ',') t++;
f = atoi (t); f = atoi (t);
hzr->stats.push_back(f); hkr->stats.push_back(f);
t = strchr(t, ','); t = strchr(t, ',');
} }
} }

@ -36,7 +36,7 @@ struct {
int offset; int offset;
std::list<float>stats; std::list<float>stats;
int statsgrid; int statsgrid;
} typedef FBSmartHomeHZR; } typedef FBSmartHomeHKR;
class FBSmartHome { class FBSmartHome {
@ -66,7 +66,7 @@ public:
int Connect(std::string host); // return 0 on success int Connect(std::string host); // return 0 on success
int Connect(std::string host, std::string username, std::string password); int Connect(std::string host, std::string username, std::string password);
int GetHZR(std::string ain, FBSmartHomeHZR *hzr); int GetHKR(std::string ain, FBSmartHomeHKR *hkr);
std::list<FBSmartHomeDevice> *GetDevices(); std::list<FBSmartHomeDevice> *GetDevices();
}; };

Loading…
Cancel
Save