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"); |