diff --git a/fbsh-cli.cc b/fbsh-cli.cc index 404dccf..42514b2 100644 --- a/fbsh-cli.cc +++ b/fbsh-cli.cc @@ -20,7 +20,8 @@ void help() { 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 ("\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 ("\tsaveconfig save configfile.\n"); printf ("\n"); @@ -69,8 +70,8 @@ void getlist(int argpos, int argc, char **argv) { } #define CHARTSIZE 20 -void gethzr(int argci, int argc, char **argv) { - FBSmartHomeHZR hzr; +void gethkr(int argci, int argc, char **argv) { + FBSmartHomeHKR hkr; list::iterator iter; float fmin, fmax; std::string s; @@ -88,36 +89,36 @@ void gethzr(int argci, int argc, char **argv) { if (ain == NULL) return; 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 (" Temp: %.1f\n", hzr.temp); - printf (" Temp Akt: %.1f\n", hzr.temp_cur); - printf (" Temp Set: %.1f\n", hzr.temp_set); - printf (" Temp Komfort: %.1f\n", hzr.temp_h); - printf (" Temp Absenk: %.1f\n", hzr.temp_l); - printf (" Offset: %d\n", hzr.offset); - printf (" Grid: %d\n", hzr.statsgrid); + printf ("Name:%s ID:%s\n", hkr.name.c_str(), hkr.id.c_str()); + printf (" Temp: %.1f\n", hkr.temp); + printf (" Temp Akt: %.1f\n", hkr.temp_cur); + printf (" Temp Set: %.1f\n", hkr.temp_set); + printf (" Temp Komfort: %.1f\n", hkr.temp_h); + printf (" Temp Absenk: %.1f\n", hkr.temp_l); + printf (" Offset: %d\n", hkr.offset); + printf (" Grid: %d\n", hkr.statsgrid); if (!nochart) { - for (iter = hzr.stats.begin(); iter != hzr.stats.end(); iter++) { - if (iter == hzr.stats.begin()) fmin = fmax = *iter; + for (iter = hkr.stats.begin(); iter != hkr.stats.end(); iter++) { + if (iter == hkr.stats.begin()) fmin = fmax = *iter; if (fmin > *iter) fmin = *iter; if (fmax < *iter) fmax = *iter; } 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 = " "; c = ((float)(CHARTSIZE * (*iter - fmin) / (fmax-fmin))); for (i = 0; i < c; i++) s += " "; s += "*"; for (i = c+1; i <= CHARTSIZE; i++) s += " "; - ctime -= hzr.statsgrid; + ctime -= hkr.statsgrid; tmp = localtime(&ctime); strftime(t, 64, "%H:%M", tmp); 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 *devlist; + std::list::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 i; @@ -154,9 +177,13 @@ int main(int argc, char** argv) { config.SaveConfig(); break; } - else if (strcmp(argv[i], "gethzr") == 0) { - gethzr(i, argc, argv); + else if (strcmp(argv[i], "gethkr") == 0) { + gethkr(i, argc, argv); } + else if (strcmp(argv[i], "listhkr") == 0) { + listhkr(i, argc, argv); + } + // // parameters will follow here diff --git a/fbsh.cc b/fbsh.cc index 2838d68..74e9c35 100644 --- a/fbsh.cc +++ b/fbsh.cc @@ -430,7 +430,7 @@ std::list *FBSmartHome::GetDevices() { /* * 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; FBSmartHomeDevice smd; xmlDocPtr xmldoc; @@ -438,7 +438,7 @@ int FBSmartHome::GetHZR(std::string ain, FBSmartHomeHZR *hzr) { xmlAttrPtr xmlattr; int len, i; - if (hzr == NULL) return -1; + if (hkr == NULL) return -1; for (s = "", i = 0; i < (int)ain.length(); i++) { if (ain[i] == ' ') s += "%20"; else s += ain[i]; @@ -469,49 +469,49 @@ int FBSmartHome::GetHZR(std::string ain, FBSmartHomeHZR *hzr) { xmlattr = xmlnode->properties; while (xmlattr) { 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; } while (xmlchild) { // 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 else if (!xmlStrcmp(xmlchild->name, (const xmlChar *)"temperature")) { xmlNodePtr xmlc = xmlchild->children; while(xmlc) { 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")) { - hzr->offset = atoi ((char *) xmlNodeListGetString(xmldoc, xmlc->children, 1)); + hkr->offset = atoi ((char *) xmlNodeListGetString(xmldoc, xmlc->children, 1)); } xmlc = xmlc->next; } } - // hzr + // hkr else if (!xmlStrcmp(xmlchild->name, (const xmlChar *)"hkr")) { xmlNodePtr xmlc = xmlchild->children; while(xmlc) { if (!xmlStrcmp(xmlc->name, (const xmlChar *)"tist")) { - hzr->temp_cur = atof ((char *) xmlNodeListGetString(xmldoc, xmlc->children, 1)); - hzr->temp_cur = hzr->temp_cur / 2.0; + hkr->temp_cur = atof ((char *) xmlNodeListGetString(xmldoc, xmlc->children, 1)); + hkr->temp_cur = hkr->temp_cur / 2.0; } else if (!xmlStrcmp(xmlc->name, (const xmlChar *)"tsoll")) { - hzr->temp_set = atof ((char *) xmlNodeListGetString(xmldoc, xmlc->children, 1)); - hzr->temp_set = hzr->temp_set / 2.0; + hkr->temp_set = atof ((char *) xmlNodeListGetString(xmldoc, xmlc->children, 1)); + hkr->temp_set = hkr->temp_set / 2.0; } else if (!xmlStrcmp(xmlc->name, (const xmlChar *)"absenk")) { - hzr->temp_l = atof ((char *) xmlNodeListGetString(xmldoc, xmlc->children, 1)); - hzr->temp_l = hzr->temp_l / 2.0; + hkr->temp_l = atof ((char *) xmlNodeListGetString(xmldoc, xmlc->children, 1)); + hkr->temp_l = hkr->temp_l / 2.0; } else if (!xmlStrcmp(xmlc->name, (const xmlChar *)"komfort")) { - hzr->temp_h = atof ((char *) xmlNodeListGetString(xmldoc, xmlc->children, 1)); - hzr->temp_h = hzr->temp_h / 2.0; + hkr->temp_h = atof ((char *) xmlNodeListGetString(xmldoc, xmlc->children, 1)); + hkr->temp_h = hkr->temp_h / 2.0; } xmlc = xmlc->next; @@ -561,18 +561,18 @@ int FBSmartHome::GetHZR(std::string ain, FBSmartHomeHZR *hzr) { if (!xmlStrcmp(xmlattr->name, (const xmlChar *)"count")) count = atoi((char *) xmlNodeListGetString(xmldoc, xmlattr->children, 1)); 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; } txt = ((char *) xmlNodeListGetString(xmldoc, xmlc->children, 1)); - hzr->stats.clear(); + hkr->stats.clear(); t = (char*)txt.c_str(); for (int i = 0; t != NULL && i < count; i++) { if (*t == ',') t++; f = atoi (t); - hzr->stats.push_back(f); + hkr->stats.push_back(f); t = strchr(t, ','); } } diff --git a/fbsh.h b/fbsh.h index e65621c..8b830f7 100644 --- a/fbsh.h +++ b/fbsh.h @@ -36,7 +36,7 @@ struct { int offset; std::liststats; int statsgrid; -} typedef FBSmartHomeHZR; +} typedef FBSmartHomeHKR; class FBSmartHome { @@ -66,7 +66,7 @@ public: int Connect(std::string host); // return 0 on success 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 *GetDevices(); };