thermferm/server.c

changeset 120
466c5cee0463
parent 106
1bd9a16f5061
child 124
350401bac16e
equal deleted inserted replaced
119:a697f98cb757 120:466c5cee0463
190 190
191 191
192 /* 192 /*
193 * LIST 193 * LIST
194 * LIST BUS 194 * LIST BUS
195 * LIST LOG
195 * LIST PROFILES 196 * LIST PROFILES
196 * LIST UNIT 197 * LIST UNIT
197 */ 198 */
198 int cmd_list(char *buf) 199 int cmd_list(char *buf)
199 { 200 {
200 char *opt; 201 char *opt, *filename, *p, q[2], buffer[256];
201 units_list *unit; 202 units_list *unit;
202 profiles_list *profile; 203 profiles_list *profile;
203 int i; 204 int i;
204 DIR *fd; 205 DIR *fd;
206 FILE *fp;
205 struct dirent *de; 207 struct dirent *de;
206 208
207 opt = strtok(buf, " \0"); 209 opt = strtok(buf, " \0");
208 opt = strtok(NULL, "\0"); 210 opt = strtok(NULL, "\0");
209 211
249 } else { 251 } else {
250 srv_send((char *)"503 directory /sys/bus/w1/devices: %s", strerror(errno)); 252 srv_send((char *)"503 directory /sys/bus/w1/devices: %s", strerror(errno));
251 return 1; 253 return 1;
252 } 254 }
253 255
256 } else if (strcmp(opt, (char *)"LOG") == 0) {
257 /*
258 * Get the logfile data and emit only one line per hour.
259 */
260 if (current_unit == -1) {
261 srv_send((char *)"401 No fermenter unit selected");
262 return 1;
263 }
264
265 i = 0;
266 q[0] = q[1] = 'a';
267 for (unit = Config.units; unit; unit = unit->next) {
268 i++;
269 if (i == current_unit)
270 break;
271 }
272
273 srv_send((char *)"212 Logfile list follows:");
274 if (getenv((char *)"USER") == NULL) {
275 filename = xstrcpy((char *)"/root");
276 } else {
277 filename = xstrcpy(getenv((char *)"HOME"));
278 }
279 filename = xstrcat(filename, (char *)"/.thermferm/log/");
280 filename = xstrcat(filename, unit->name);
281 filename = xstrcat(filename, (char *)".log");
282 if ((fp = fopen(filename, "r"))) {
283 while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) {
284 buffer[strlen(buffer) -1] = '\0';
285 p = buffer + 17;
286 if (strncmp(p, (char *)"Mode", 4)) {
287 if ((q[0] != buffer[11]) || (q[1] != buffer[12])) {
288 q[0] = buffer[11];
289 q[1] = buffer[12];
290 srv_send(buffer);
291 }
292 }
293 }
294 }
295 free(filename);
296 filename = NULL;
297 srv_send((char *)".");
298 return 0;
299
254 } else if (strcmp(opt, (char *)"PROFILES") == 0) { 300 } else if (strcmp(opt, (char *)"PROFILES") == 0) {
255 /* 301 /*
256 * Fermenting profiles 302 * Fermenting profiles
257 */ 303 */
258 srv_send((char *)"212 profiles:"); 304 srv_send((char *)"212 profiles:");
586 srv_send((char *)"ADD PROFILE name Add a new profile with \"name\""); 632 srv_send((char *)"ADD PROFILE name Add a new profile with \"name\"");
587 srv_send((char *)"ADD UNIT name Add a new unit with \"name\""); 633 srv_send((char *)"ADD UNIT name Add a new unit with \"name\"");
588 srv_send((char *)"LCD Get LCD screen (allways 4 rows of 20 characters)"); 634 srv_send((char *)"LCD Get LCD screen (allways 4 rows of 20 characters)");
589 srv_send((char *)"LIST List all fermenter units"); 635 srv_send((char *)"LIST List all fermenter units");
590 srv_send((char *)"LIST BUS List 1-wire bus"); 636 srv_send((char *)"LIST BUS List 1-wire bus");
637 srv_send((char *)"LIST LOG List logfile data in 1 hour lines");
591 srv_send((char *)"LIST PROFILES List available profiles"); 638 srv_send((char *)"LIST PROFILES List available profiles");
592 srv_send((char *)"LIST UNIT List fermenter unit"); 639 srv_send((char *)"LIST UNIT List fermenter unit");
593 srv_send((char *)"MODE OFF|NONE|BEER|FRIDGE|PROFILE"); 640 srv_send((char *)"MODE OFF|NONE|BEER|FRIDGE|PROFILE");
594 // srv_send((char *)"PROFILE Profile status"); 641 // srv_send((char *)"PROFILE Profile status");
595 // srv_send((char *)"PROFILE start|stop|pause Profile start, stop or pause"); 642 // srv_send((char *)"PROFILE start|stop|pause Profile start, stop or pause");

mercurial