thermferm/server.c

changeset 46
000399c64d3f
parent 45
053c4657105f
child 48
d8c64f81b192
--- a/thermferm/server.c	Tue May 20 17:07:32 2014 +0200
+++ b/thermferm/server.c	Tue May 20 22:40:16 2014 +0200
@@ -23,7 +23,7 @@
 
 #include "../lib/mbselib.h"
 #include "server.h"
-
+#include "thermferm.h"
 
 extern bool		my_shutdown;
 extern bool		debug;
@@ -32,12 +32,6 @@
 extern sys_config       Config;
 extern int		clients;
 
-/* beer settings */
-float 			cs_beerSet = 20.0;
-float			cs_fridgeSet = 20.0;
-unsigned char		cs_mode = 'o';	/* o = Off, f = fridge, b = beer, p = profile-run */
-
-
 int			s;		/* connected socket			*/
 int			ls;		/* listen socket			*/
 
@@ -50,6 +44,36 @@
 #define SS_TIMEOUT      300
 
 
+
+void defaultControlsettings(void)
+{
+	beer->cs_mode = 'o';		/* o = Off, f = fridge, b = beer, p = profile-run */
+	beer->cs_beerSet = 20.0;
+	beer->cs_fridgeSet = 20.0;
+	beer->cs_heatEstimator = 0.2;
+	beer->cs_coolEstimator = 5;
+}
+
+
+
+void defaultControlConstants(void)
+{
+	beer->cc_tempFormat = 'C';
+	beer->cc_tempSetMin = 1.0;
+	beer->cc_tempSetMax = 30.0;
+	beer->cc_idleRangeH = 1.000;
+	beer->cc_idleRangeL = -1.000;
+}
+
+
+
+void defaultControlVariables(void)
+{
+	beer->cv_beerDiff = 0.0;
+}
+
+
+
 /*
  * Send message to client
  */
@@ -95,10 +119,11 @@
 
 void cmd_server(void)
 {
-    char                *hostname, buf[SS_BUFSIZE], obuf[SS_BUFSIZE];
+    char                *inp, *hostname, buf[SS_BUFSIZE], obuf[SS_BUFSIZE];
     int                 i, rc, rlen, timer;
     socklen_t           fromlen;
     struct pollfd       pfd[1];
+    float		newtemp;
 
     /*
      * Close listen socket
@@ -172,7 +197,7 @@
 			if (strncmp(buf, "ack", 3) == 0) {
 			    srv_send((char *)"ack");
 			} else if (strncmp(buf, "lcd", 3) == 0) {
-			    sprintf(obuf, "[\"12345678901234567890\", \"12345678901234567890\", \"12345678901234567890\", \"12345678901234567890\"]");
+			    sprintf(obuf, "[\"                    \", \"                    \", \"                    \", \"                    \"]");
 			    for (i = 0; i < 20; i++) {
 				obuf[i+2]  = lcdbuf[lcdHandle][i][0];
 				obuf[i+26] = lcdbuf[lcdHandle][i][1];
@@ -181,9 +206,43 @@
 			    }
 			    srv_send(obuf);
 			} else if (strncmp(buf, "getMode", 7) == 0) {
-			    srv_send("%c", cs_mode);
+			    srv_send("%c", beer->cs_mode);
+			} else if (strncmp(buf, "getFridge", 9) == 0) {
+			    srv_send("%.1f", beer->cs_fridgeSet);
+			} else if (strncmp(buf, "getBeer", 7) == 0) {
+			    srv_send("%.1f", beer->cs_beerSet);
+			} else if (strncmp(buf, "getControlConstants", 19) == 0) {
+			    srv_send("{ \"tempFormat\":\"%c\", \"tempSetMin\":%.1f, \"tempSetMax\":%.1f, \"idleRangeH\":%.3f, \"idleRangeL\":%.3f }", 
+				     beer->cc_tempFormat, beer->cc_tempSetMin, beer->cc_tempSetMax, beer->cc_idleRangeH, beer->cc_idleRangeL );
 			} else if (strncmp(buf, "getControlSettings", 18) == 0) {
-			    srv_send("{ mode:%c, \"beerSet\":\"%.1f\", \"fridgeSet\":\"%.1f\", \"heatEstimator\":\"0.2\", \"coolEstimator\":\"5\" }", cs_mode, cs_beerSet, cs_fridgeSet);
+			    srv_send("{ \"mode\":\"%c\", \"beerSet\":%.1f, \"fridgeSet\":%.1f, \"heatEstimator\":%.1f, \"coolEstimator\":%.1f }", 
+				     beer->cs_mode, beer->cs_beerSet, beer->cs_fridgeSet, beer->cs_heatEstimator, beer->cs_coolEstimator);
+			} else if (strncmp(buf, "getControlVariables", 19) == 0) {
+			    srv_send("{ \"beerDiff\":%.2f }", beer->cv_beerDiff);
+			} else if (strncmp(buf, "setBeer=", 8) == 0) {
+			    inp = xstrcpy(buf+8);
+			    rc = sscanf(inp, "%f", &newtemp);
+			    if (debug)
+				fprintf(stdout, "new temp from %s, %.1f, rc=%d\n", inp, newtemp, rc);
+			    if (rc == 1) {
+			        srv_send("ack");
+				beer->cs_mode = 'b';
+				beer->cs_beerSet = newtemp;
+			    } else {
+				srv_send("err");
+			    }
+			} else if (strncmp(buf, "setFridge=", 10) == 0) {
+			    inp = xstrcpy(buf+10);
+			    rc = sscanf(inp, "%f", &newtemp);
+			    if (debug)
+				fprintf(stdout, "new temp from %s, %.1f, rc=%d\n", inp, newtemp, rc);
+			    if (rc == 1) {
+			    	srv_send("ack");
+				beer->cs_mode = 'f';
+				beer->cs_fridgeSet = newtemp;
+			    } else {
+				srv_send("err");
+			    }
 			} else {
 			    if (debug)
 				fprintf(stdout, "unknown command \"%s\"\n", buf);
@@ -231,6 +290,10 @@
     if (debug)
 	fprintf(stdout, "Thread my_server_loop started\n");
 
+    defaultControlsettings();
+    defaultControlConstants();
+    defaultControlVariables();
+
     memset((char *)&myaddr_in, 0, sizeof(struct sockaddr_in));
     memset((char *)&peeraddr_in, 0, sizeof(struct sockaddr_in));
     myaddr_in.sin_family = AF_INET;

mercurial