thermferm/server.c

changeset 155
0d86f3c0a07b
parent 140
1b001de37945
child 156
5fb74d89f571
--- a/thermferm/server.c	Wed Jul 30 19:39:50 2014 +0200
+++ b/thermferm/server.c	Wed Jul 30 22:57:48 2014 +0200
@@ -22,6 +22,7 @@
 
 #include "rdconfig.h"
 #include "thermferm.h"
+#include "logger.h"
 #include "server.h"
 #include "xutil.h"
 
@@ -491,6 +492,52 @@
  */
 int cmd_mode(char *buf)
 {
+    char	*opt;
+    units_list	*unit;
+
+    opt = strtok(buf, " \0");
+    opt = strtok(NULL, "\0");
+
+    if (opt == NULL) {
+	srv_send((char *)"502 Missing command option");
+	return 1;
+    }
+
+    if (current_unit == NULL) {
+	srv_send((char *)"401 No fermenter unit selected");
+	return 1;
+    }
+    for (unit = Config.units; unit; unit = unit->next) {
+	if (strcmp(current_unit, unit->uuid) == 0)
+	    break;
+    }
+
+    if (strcmp(opt, (char *)"OFF") == 0) {
+	if (unit->mode != UNITMODE_OFF) {
+	    unit->mode = UNITMODE_OFF;
+	    syslog(LOG_NOTICE, "Unit %s mode set to OFF", unit->name);
+	}
+	srv_send((char *)"218 Unit mode to OFF");
+	return 0;
+
+    } else if (strcmp(opt, (char *)"NONE") == 0) {
+	if (unit->mode != UNITMODE_NONE) {
+	    unit->mode = UNITMODE_NONE;
+	    syslog(LOG_NOTICE, "Unit %s mode set to NONE", unit->name);
+	    initlog(unit->name);
+	}
+	srv_send((char *)"218 Unit mode to NONE");
+	return 0;
+
+    } else if (strcmp(opt, (char *)"FRIDGE") == 0) {
+
+    } else if (strcmp(opt, (char *)"BEER") == 0) {
+
+    } else if (strcmp(opt, (char *)"PROFILE") == 0) {
+
+    }
+
+    srv_send((char *)"502 Unknown command option");
     return 1;
 }
 

mercurial