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 ("\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<float>::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<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 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

@ -430,7 +430,7 @@ std::list<FBSmartHomeDevice> *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, ',');
}
}

@ -36,7 +36,7 @@ struct {
int offset;
std::list<float>stats;
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<FBSmartHomeDevice> *GetDevices();
};

Loading…
Cancel
Save