thermferm/server.c

changeset 542
73b63f431da2
parent 536
e833bbd5e733
child 545
c382a6c58c20
equal deleted inserted replaced
541:a5530abb16dd 542:73b63f431da2
1163 1163
1164 1164
1165 1165
1166 /* 1166 /*
1167 * LIST 1167 * LIST
1168 * LIST LOG
1169 */ 1168 */
1170 int cmd_list(char *buf) 1169 int cmd_list(char *buf)
1171 { 1170 {
1172 char *opt; 1171 char *opt;
1173 // char *param, *filename, q[5], hr[3], buffer[256], outbuf[256];
1174 // char *date_n, *mode_n, *air_n, *beer_n, *target_lo_n, *target_hi_n, *heater_n, *cooler_n, *room_n, *chiller_n;
1175 // char *heater_u, *cooler_u;
1176 // int heater_l = 0, cooler_l = 0, h = 0, c = 0, heat_used = 0, cool_used = 0, lines = 0, graphstep = 0;
1177 units_list *unit; 1172 units_list *unit;
1178 // FILE *fp;
1179 // float room_t;
1180 1173
1181 opt = strtok(buf, " \0"); 1174 opt = strtok(buf, " \0");
1182 opt = strtok(NULL, " \0"); 1175 opt = strtok(NULL, " \0");
1183 1176
1184 if (opt == NULL) { 1177 if (opt == NULL) {
1194 1187
1195 } else if (strcmp(opt, (char *)"HELP") == 0) { 1188 } else if (strcmp(opt, (char *)"HELP") == 0) {
1196 srv_send((char *)"100 Help text follows:"); 1189 srv_send((char *)"100 Help text follows:");
1197 srv_send((char *)"Recognized commands:"); 1190 srv_send((char *)"Recognized commands:");
1198 srv_send((char *)"LIST List available units"); 1191 srv_send((char *)"LIST List available units");
1199 // srv_send((char *)"LIST LOG uuid List logfile of unit by uuid");
1200 srv_send((char *)"."); 1192 srv_send((char *)".");
1201 return 0; 1193 return 0;
1202 /*
1203 } else if (strcmp(opt, (char *)"LOG") == 0) {
1204
1205 param = strtok(NULL, "\0");
1206 if (param == NULL) {
1207 srv_send((char *)"502 Parameter missing");
1208 return 0;
1209 }
1210
1211 q[0] = q[1] = q[2] = q[3] = q[4] = 'a';
1212 for (unit = Config.units; unit; unit = unit->next) {
1213 if (strcmp(param, unit->uuid) == 0)
1214 break;
1215 }
1216
1217 srv_send((char *)"212 Logfile list follows:");
1218 if (getenv((char *)"USER") == NULL) {
1219 filename = xstrcpy((char *)"/root");
1220 } else {
1221 filename = xstrcpy(getenv((char *)"HOME"));
1222 }
1223 filename = xstrcat(filename, (char *)"/.thermferm/log/");
1224 filename = xstrcat(filename, unit->name);
1225 filename = xstrcat(filename, (char *)".log");
1226 if ((fp = fopen(filename, "r"))) {
1227 */
1228 /*
1229 * Count the lines in the logfile
1230 */
1231 /* lines = 0;
1232 while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) {
1233 lines++;
1234 }
1235 fseek(fp, 0L, SEEK_SET);
1236 */ /*
1237 * We have counted the lines in the logfile including the header lines.
1238 * The header lines should be ignored but there are so few of them, we
1239 * just include them in the total.
1240 * Now find a reasonable interval of lines to sent to the client.
1241 */
1242 /* for (graphstep = 1; graphstep <= MAX_INTERVALS; graphstep++) {
1243 if (lines < GRAPH_DATALINES[graphstep]) {
1244 break;
1245 }
1246 }
1247 if (graphstep > MAX_INTERVALS)
1248 graphstep = MAX_INTERVALS;
1249 syslog(LOG_NOTICE, "LIST LOG %s: lines=%d, interval=%d, graphstep=%d", unit->name, lines, GRAPH_INTERVAL[graphstep], graphstep);
1250
1251 while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) {
1252 */ /*
1253 * 2014-11-15 18:39,BEER,20.312,19.750,20.0,0,NA,NA,NA,78105,NA,NA
1254 */
1255 // hr[0] = q[0] = buffer[11];
1256 // hr[1] = q[1] = buffer[12];
1257 // q[2] = buffer[14];
1258 // q[3] = buffer[15];
1259 // hr[2] = '\0';
1260 // buffer[strlen(buffer) -1] = '\0';
1261 // date_n = strtok(buffer, ",\0"); /* timestamp */
1262 // mode_n = strtok(NULL, ",\0"); /* unit mode */
1263 // air_n = strtok(NULL, ",\0"); /* air temp */
1264 // beer_n = strtok(NULL, ",\0"); /* beer temp */
1265 // target_lo_n = strtok(NULL, ",\0"); /* target low temp */
1266 // heater_n = strtok(NULL, ",\0"); /* current heater state */
1267 // cooler_n = strtok(NULL, ",\0"); /* current cooler state */
1268 // heater_u = strtok(NULL, ",\0"); /* current fan state */
1269 // heater_u = strtok(NULL, ",\0"); /* current door state */
1270 // heater_u = strtok(NULL, ",\0"); /* heater use counter */
1271 // cooler_u = strtok(NULL, ",\0"); /* cooler use counter */
1272 // room_n = strtok(NULL, ",\0"); /* fan use counter */
1273 // room_n = strtok(NULL, ",\0"); /* room temperature */
1274 // target_hi_n = strtok(NULL, ",\0"); /* target high temp */
1275 // chiller_n = strtok(NULL, ",\0"); /* chiller temp */
1276
1277 // if (strncmp(mode_n, (char *)"Mode", 4)) {
1278 /*
1279 * Output a line at the right intervals
1280 */
1281 // int hour = atoi(hr);
1282 // if (((graphstep == 1)) ||
1283 // ((graphstep == 2) && (q[3] == '0' || q[3] == '5')) ||
1284 // ((graphstep == 3) && ((q[2] == '0' && q[3] == '0') || (q[2] == '1' && q[3] == '5') || (q[2] == '3' && q[3] == '0') || (q[2] == '4' && q[3] == '5'))) ||
1285 // ((graphstep == 4) && ((q[2] == '0' && q[3] == '0') || (q[2] == '3' && q[3] == '0'))) ||
1286 // ((graphstep == 5) && (q[2] == '0' && q[3] == '0')) ||
1287 // ((graphstep == 6) && (hour % 2 == 0) && (q[2] == '0' && q[3] == '0')) || /* 120 minutes */
1288 // ((graphstep == 7) && (hour % 4 == 0) && (q[2] == '0' && q[3] == '0')) || /* 240 minutes */
1289 // ((graphstep >= 8) && (hour % 8 == 0) && (q[2] == '0' && q[3] == '0')) ) { /* 480 minutes */
1290 // heat_used = cool_used = 0;
1291 // if (strcmp(heater_u, "NA") && (sscanf(heater_u, "%d", &h) == 1)) {
1292 // if (h && heater_l) {
1293 // heat_used = ((h - heater_l) * 100) / (GRAPH_INTERVAL[graphstep] * 60);
1294 // }
1295 // }
1296 // if (strcmp(cooler_u, "NA") && (sscanf(cooler_u, "%d", &c) == 1)) {
1297 // if (c && cooler_l) {
1298 // cool_used = ((c - cooler_l) * 100) / (GRAPH_INTERVAL[graphstep] * 60);
1299 // }
1300 // }
1301 // if (room_n)
1302 // sscanf(room_n, "%f", &room_t);
1303 // else
1304 // room_t = 0.0;
1305 // if (target_hi_n == NULL)
1306 // target_hi_n = target_lo_n;
1307 // snprintf(outbuf, 255, "%s,%s,%s,%s,%s,%s,%s,%d,%d,%.1f,%s,%s",
1308 // date_n, mode_n, air_n, beer_n, target_lo_n, heater_n, cooler_n,
1309 // heat_used, cool_used, room_t, target_hi_n, chiller_n);
1310 // srv_send(outbuf);
1311 // if (h && strcmp(heater_u, "NA"))
1312 // heater_l = h;
1313 // if (c & strcmp(cooler_u, "NA"))
1314 // cooler_l = c;
1315 // }
1316 // }
1317 // }
1318 // }
1319 // free(filename);
1320 // filename = NULL;
1321 // srv_send((char *)".");
1322 // return 0;
1323 } 1194 }
1324 1195
1325 srv_send((char *)"504 Subcommand error"); 1196 srv_send((char *)"504 Subcommand error");
1326 return 0; 1197 return 0;
1327 } 1198 }

mercurial