Setting fridge and beer temperature from the panel implemented

Mon, 18 Aug 2014 16:13:56 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Mon, 18 Aug 2014 16:13:56 +0200
changeset 246
6df404da3537
parent 245
b01b6238eb67
child 247
f3d0e9445fcd

Setting fridge and beer temperature from the panel implemented

thermferm/server.c file | annotate | diff | comparison | revisions
thermferm/thermferm.c file | annotate | diff | comparison | revisions
--- a/thermferm/server.c	Mon Aug 18 15:10:09 2014 +0200
+++ b/thermferm/server.c	Mon Aug 18 16:13:56 2014 +0200
@@ -1288,12 +1288,16 @@
 				}
 
 			    } else if (val && (strcmp(kwd, (char *)"FRIDGE_SET") == 0)) {
-				if (sscanf(val, "%f", &fval) == 1)
+				if ((sscanf(val, "%f", &fval) == 1) && (fval >= unit->temp_set_min) && (fval <= unit->temp_set_max)) {
+				    syslog(LOG_NOTICE, "Fridge temperature from %.1f to %.1f via web interface", unit->fridge_set, fval);
 				    unit->fridge_set = fval;
+				}
 
 			    } else if (val && (strcmp(kwd, (char *)"BEER_SET") == 0)) {
-				if (sscanf(val, "%f", &fval) == 1)
+				if ((sscanf(val, "%f", &fval) == 1) && (fval >= unit->temp_set_min) && (fval <= unit->temp_set_max)) {
+				    syslog(LOG_NOTICE, "Beer temperature from %.1f to %.1f via web interface", unit->beer_set, fval);
 				    unit->beer_set = fval;
+				}
 
 			    } else if (strcmp(kwd, (char *)"PROFILE") == 0) {
 				if (unit->prof_state == PROFILE_OFF) {
--- a/thermferm/thermferm.c	Mon Aug 18 15:10:09 2014 +0200
+++ b/thermferm/thermferm.c	Mon Aug 18 16:13:56 2014 +0200
@@ -44,9 +44,9 @@
 extern int		lcdHandle;
 int			setupmenu = MENU_NONE;
 units_list		*current_unit = NULL;		/* In panel editor this points to the current unit. */
-
+float			temp_temp = 20.0;
 #endif
-int			lcdupdate;
+
 #ifndef HAVE_WIRINGPI_H
 pthread_t		threads[4];
 #endif
@@ -157,6 +157,9 @@
 				break;
 
 	case MENU_BEER_TEMP:	lcdPuts(lcdHandle, "Set beer temp");
+				lcdPosition(lcdHandle, 0, 1);
+				snprintf(buf, 20, "Set %.1f", temp_temp);
+				lcdPuts(lcdHandle, buf);
 				break;
 
 	case MENU_MODE_FRIDGE:	show_mode();
@@ -164,6 +167,9 @@
 				break;
 
 	case MENU_FRIDGE_TEMP:	lcdPuts(lcdHandle, "Set fridge temp");
+				lcdPosition(lcdHandle, 0, 1);
+				snprintf(buf, 20, "Set %.1f", temp_temp);
+				lcdPuts(lcdHandle, buf);
 				break;
 
 	case MENU_MODE_PROFILE:	show_mode();
@@ -273,6 +279,327 @@
 
 
 
+/*
+ * Handle panel key events
+ */
+#ifdef HAVE_WIRINGPI_H
+void panel_key_events(int key)
+{
+    units_list	*unit;
+
+    switch (setupmenu) {
+	case MENU_NONE:
+		    	if ((key == KEY_DOWN) || (key == KEY_UP))
+	    		    lcd_buf_step(key);
+			if ((key == KEY_CONFIRM) && (setupmenu == MENU_NONE))
+			    go_menu(MENU_TOP_DEFAULT);
+			break;
+
+	case MENU_TOP_DEFAULT:
+	    		if (key == KEY_ESCAPE)
+			    go_menu(MENU_NONE);
+			if (key == KEY_DOWN)
+			    go_menu(MENU_TOP_UNITS);
+			if (key == KEY_UP)
+			    go_menu(MENU_TOP_SYS);
+			break;
+
+	case MENU_TOP_UNITS:
+			if (key == KEY_ESCAPE)
+			    go_menu(MENU_NONE);
+			if (key == KEY_DOWN)
+			    go_menu(MENU_TOP_SYS);
+			if (key == KEY_UP)
+			    go_menu(MENU_TOP_DEFAULT);
+			if ((key == KEY_ENTER) && Config.units) {
+			    /*
+			     * Start with the first unit
+			     */
+			    current_unit = Config.units;
+			    go_menu(MENU_UNITS);
+			}
+			break;
+
+	case MENU_UNITS:
+			if (key == KEY_ESCAPE)
+			    go_menu(MENU_TOP_UNITS);
+			if (key == KEY_DOWN) {
+			    if (current_unit->next) {
+				current_unit = current_unit->next;
+				go_menu(MENU_UNITS);
+			    }
+			}
+			if (key == KEY_UP) {
+			    for (unit = Config.units; unit; unit = unit->next) {
+				if (unit->next && (unit->next == current_unit)) {
+				    current_unit = unit;
+				    go_menu(MENU_UNITS);
+				    break;
+				}
+			    }
+			}
+			if (key == KEY_ENTER) {
+			    /*
+			     * Drop into the current mode
+			     */
+			    switch (current_unit->mode) {
+				case UNITMODE_OFF:	go_menu(MENU_MODE_OFF);
+							break;
+				case UNITMODE_NONE:	go_menu(MENU_MODE_NONE);
+							break;
+				case UNITMODE_FRIDGE:	go_menu(MENU_MODE_FRIDGE);
+							break;
+				case UNITMODE_BEER:	go_menu(MENU_MODE_BEER);
+							break;
+				case UNITMODE_PROFILE:	go_menu(MENU_MODE_PROFILE);
+							break;
+			    }
+			}
+			break;
+
+	case MENU_MODE_OFF:
+			if (key == KEY_ESCAPE)
+			    go_menu(MENU_UNITS);
+			if (key == KEY_DOWN)
+			    go_menu(MENU_MODE_NONE);
+			if (key == KEY_UP)
+			    go_menu(MENU_MODE_PROFILE);
+			if (key == KEY_ENTER) {
+			    change_mode(UNITMODE_OFF);
+			    go_menu(MENU_MODE_OFF);
+			}
+			break;
+
+	case MENU_MODE_NONE:
+			if (key == KEY_ESCAPE)
+			    go_menu(MENU_UNITS);
+			if (key == KEY_DOWN)
+			    go_menu(MENU_MODE_FRIDGE);
+			if (key == KEY_UP)
+			    go_menu(MENU_MODE_OFF);
+			if (key == KEY_ENTER) {
+			    if (current_unit->mode == UNITMODE_NONE)
+				go_menu(MENU_NONE_HEAT);
+			    else {
+			    	change_mode(UNITMODE_NONE);
+				go_menu(MENU_MODE_NONE);
+			    }
+			}
+			break;
+
+	case MENU_NONE_HEAT:
+			if (key == KEY_ESCAPE)
+			    go_menu(MENU_MODE_NONE);
+			if (key == KEY_DOWN)
+			    go_menu(MENU_NONE_COOL);
+			if (key == KEY_UP)
+			    go_menu(MENU_NONE_FAN);
+			if (key == KEY_ENTER) {
+			    if (current_unit->heater_state)
+				current_unit->heater_state = 0;
+			    else
+				current_unit->heater_state = 100;
+			    go_menu(MENU_NONE_HEAT);
+			}
+			break;
+
+	case MENU_NONE_COOL:
+			if (key == KEY_ESCAPE)
+			    go_menu(MENU_MODE_NONE);
+			if (key == KEY_DOWN)
+			    go_menu(MENU_NONE_FAN);
+			if (key == KEY_UP)      
+			    go_menu(MENU_NONE_HEAT);
+			if (key == KEY_ENTER) {
+			    if (current_unit->cooler_state)
+				current_unit->cooler_state = 0;
+			    else
+				current_unit->cooler_state = 100;
+			    go_menu(MENU_NONE_COOL);
+			}
+			break;
+
+	case MENU_NONE_FAN:
+			if (key == KEY_ESCAPE)
+			    go_menu(MENU_MODE_NONE);
+			if (key == KEY_DOWN)
+			    go_menu(MENU_NONE_HEAT);
+			if (key == KEY_UP)      
+			    go_menu(MENU_NONE_COOL);
+			if (key == KEY_ENTER) {
+			    if (current_unit->fan_state)
+				current_unit->fan_state = 0;
+			    else
+				current_unit->fan_state = 100;
+			    go_menu(MENU_NONE_FAN);
+			}
+			break;
+
+	case MENU_MODE_FRIDGE:
+			if (key == KEY_ESCAPE)
+			    go_menu(MENU_UNITS);
+			if (key == KEY_DOWN)
+			    go_menu(MENU_MODE_BEER);
+			if (key == KEY_UP)
+			    go_menu(MENU_MODE_NONE);
+			if (key == KEY_ENTER) {
+			    if (current_unit->mode == UNITMODE_FRIDGE) {
+				temp_temp = current_unit->fridge_set;
+				go_menu(MENU_FRIDGE_TEMP);
+			    } else {
+			    	change_mode(UNITMODE_FRIDGE);
+			    	go_menu(MENU_MODE_FRIDGE);
+			    }
+			}
+			break;
+
+	case MENU_FRIDGE_TEMP:
+			if (key == KEY_ESCAPE)
+			    go_menu(MENU_MODE_FRIDGE);
+			if (key == KEY_DOWN) {
+			    if (temp_temp > current_unit->temp_set_min)
+				temp_temp -= 0.1;
+			    go_menu(MENU_FRIDGE_TEMP);
+			}
+			if (key == KEY_UP) {
+			    if (temp_temp < current_unit->temp_set_max)
+				temp_temp += 0.1;
+			    go_menu(MENU_FRIDGE_TEMP);
+			}
+			if (key == KEY_ENTER) {
+			    if (temp_temp != current_unit->fridge_set) {
+				syslog(LOG_NOTICE, "Fridge temperature changed from %.1f to %.1f degrees from the panel", current_unit->fridge_set, temp_temp);
+				current_unit->fridge_set = temp_temp;
+			    }
+			    go_menu(MENU_MODE_FRIDGE);
+			}
+			break;
+
+	case MENU_MODE_BEER:
+			if (key == KEY_ESCAPE)
+			    go_menu(MENU_UNITS);
+			if (key == KEY_DOWN)
+			    go_menu(MENU_MODE_PROFILE);
+			if (key == KEY_UP)
+			    go_menu(MENU_MODE_FRIDGE);
+			if (key == KEY_ENTER) {
+			    if (current_unit->mode == UNITMODE_BEER) {
+				temp_temp = current_unit->beer_set;
+				go_menu(MENU_BEER_TEMP);
+			    } else {
+			    	change_mode(UNITMODE_BEER);
+			    	go_menu(MENU_MODE_BEER);
+			    }
+			}
+			break;
+
+	case MENU_BEER_TEMP:
+			if (key == KEY_ESCAPE)
+			    go_menu(MENU_MODE_BEER);
+			if (key == KEY_DOWN) {
+			    if (temp_temp > current_unit->temp_set_min)
+				temp_temp -= 0.1;
+			    go_menu(MENU_BEER_TEMP);
+			}
+			if (key == KEY_UP) {
+			    if (temp_temp < current_unit->temp_set_max)
+				temp_temp += 0.1;
+			    go_menu(MENU_BEER_TEMP);
+			}
+			if (key == KEY_ENTER) {
+			    if (temp_temp != current_unit->beer_set) {
+				syslog(LOG_NOTICE, "Beer temperature changed from %.1f to %.1f degrees from the panel", current_unit->beer_set, temp_temp);
+				current_unit->beer_set = temp_temp;
+			    }
+			    go_menu(MENU_MODE_BEER);			    
+			}
+			break;
+
+	case MENU_MODE_PROFILE:
+			if (key == KEY_ESCAPE)
+			    go_menu(MENU_UNITS);
+			if (key == KEY_DOWN)
+			    go_menu(MENU_MODE_OFF);     
+			if (key == KEY_UP)
+			    go_menu(MENU_MODE_BEER);                                
+			if (key == KEY_ENTER) {
+			    change_mode(UNITMODE_PROFILE);
+			    go_menu(MENU_MODE_PROFILE);
+			}
+			break;
+
+	case MENU_PROFILE_SELECT:
+			break;
+
+	case MENU_PROFILE_START:
+			break;
+
+	case MENU_PROFILE_PAUSE:
+			break;
+
+	case MENU_PROFILE_ABORT:
+			break;
+
+	case MENU_PROFILE_RESUME:
+			break;
+
+	case MENU_PROFILE_GOOFF:
+			break;
+
+	case MENU_TOP_SYS:
+			if (key == KEY_ESCAPE)
+			    go_menu(MENU_NONE);
+			if (key == KEY_DOWN)
+			    go_menu(MENU_TOP_DEFAULT);
+			if (key == KEY_UP)
+			    go_menu(MENU_TOP_UNITS);
+			if (key == KEY_ENTER)
+			    go_menu(MENU_SYS_HALT);
+			break;
+
+	case MENU_SYS_HALT:
+			if (key == KEY_ESCAPE)
+			    go_menu(MENU_TOP_SYS);
+			if (key == KEY_DOWN)
+			    go_menu(MENU_SYS_REBOOT);
+			if (key == KEY_UP)
+			    go_menu(MENU_SYS_THERMS);
+			break;
+
+	case MENU_SYS_REBOOT:
+			if (key == KEY_ESCAPE)
+			    go_menu(MENU_TOP_SYS);
+			if (key == KEY_DOWN)
+			    go_menu(MENU_SYS_MASH);
+			if (key == KEY_UP)
+			    go_menu(MENU_SYS_HALT);
+			break;
+
+	case MENU_SYS_MASH:
+			if (key == KEY_ESCAPE)
+			    go_menu(MENU_TOP_SYS);
+			if (key == KEY_DOWN)
+			    go_menu(MENU_SYS_THERMS);
+			if (key == KEY_UP)
+			    go_menu(MENU_SYS_REBOOT);
+			break;
+
+	case MENU_SYS_THERMS:
+			if (key == KEY_ESCAPE)
+			    go_menu(MENU_TOP_SYS);
+			if (key == KEY_DOWN)
+			    go_menu(MENU_SYS_HALT);
+			if (key == KEY_UP)
+			    go_menu(MENU_SYS_MASH);
+			break;
+
+    }
+}
+#endif
+
+
+
+
 int main(int argc, char *argv[])
 {
     int		rc, c, i;
@@ -956,271 +1283,9 @@
 	}
 
 #ifdef HAVE_WIRINGPI_H
-	/*
-	 * Handle panel key events.
-	 */
 	key = keycheck();
-
-	switch (setupmenu) {
-	    case MENU_NONE:
-		    	if ((key == KEY_DOWN) || (key == KEY_UP))
-	    		    lcd_buf_step(key);
-			if ((key == KEY_CONFIRM) && (setupmenu == MENU_NONE))
-			    go_menu(MENU_TOP_DEFAULT);
-			break;
-
-	    case MENU_TOP_DEFAULT:
-	    		if (key == KEY_ESCAPE)
-			    go_menu(MENU_NONE);
-			if (key == KEY_DOWN)
-			    go_menu(MENU_TOP_UNITS);
-			if (key == KEY_UP)
-			    go_menu(MENU_TOP_SYS);
-			break;
-
-	    case MENU_TOP_UNITS:
-			if (key == KEY_ESCAPE)
-			    go_menu(MENU_NONE);
-			if (key == KEY_DOWN)
-			    go_menu(MENU_TOP_SYS);
-			if (key == KEY_UP)
-			    go_menu(MENU_TOP_DEFAULT);
-			if ((key == KEY_ENTER) && Config.units) {
-			    /*
-			     * Start with the first unit
-			     */
-			    current_unit = Config.units;
-			    go_menu(MENU_UNITS);
-			}
-			break;
-
-	    case MENU_UNITS:
-			if (key == KEY_ESCAPE)
-			    go_menu(MENU_TOP_UNITS);
-			if (key == KEY_DOWN) {
-			    if (current_unit->next) {
-				current_unit = current_unit->next;
-				go_menu(MENU_UNITS);
-			    }
-			}
-			if (key == KEY_UP) {
-			    for (unit = Config.units; unit; unit = unit->next) {
-				if (unit->next && (unit->next == current_unit)) {
-				    current_unit = unit;
-				    go_menu(MENU_UNITS);
-				    break;
-				}
-			    }
-			}
-			if (key == KEY_ENTER) {
-			    /*
-			     * Drop into the current mode
-			     */
-			    switch (current_unit->mode) {
-				case UNITMODE_OFF:	go_menu(MENU_MODE_OFF);
-							break;
-				case UNITMODE_NONE:	go_menu(MENU_MODE_NONE);
-							break;
-				case UNITMODE_FRIDGE:	go_menu(MENU_MODE_FRIDGE);
-							break;
-				case UNITMODE_BEER:	go_menu(MENU_MODE_BEER);
-							break;
-				case UNITMODE_PROFILE:	go_menu(MENU_MODE_PROFILE);
-							break;
-			    }
-			}
-			break;
-
-	    case MENU_MODE_OFF:
-			if (key == KEY_ESCAPE)
-			    go_menu(MENU_UNITS);
-			if (key == KEY_DOWN)
-			    go_menu(MENU_MODE_NONE);
-			if (key == KEY_UP)
-			    go_menu(MENU_MODE_PROFILE);
-			if (key == KEY_ENTER) {
-			    change_mode(UNITMODE_OFF);
-			    go_menu(MENU_MODE_OFF);
-			}
-			break;
-
-	    case MENU_MODE_NONE:
-			if (key == KEY_ESCAPE)
-			    go_menu(MENU_UNITS);
-			if (key == KEY_DOWN)
-			    go_menu(MENU_MODE_FRIDGE);
-			if (key == KEY_UP)
-			    go_menu(MENU_MODE_OFF);
-			if (key == KEY_ENTER) {
-			    if (current_unit->mode == UNITMODE_NONE)
-				go_menu(MENU_NONE_HEAT);
-			    else {
-			    	change_mode(UNITMODE_NONE);
-				go_menu(MENU_MODE_NONE);
-			    }
-			}
-			break;
-
-	    case MENU_NONE_HEAT:
-			if (key == KEY_ESCAPE)
-			    go_menu(MENU_MODE_NONE);
-			if (key == KEY_DOWN)
-			    go_menu(MENU_NONE_COOL);
-			if (key == KEY_UP)
-			    go_menu(MENU_NONE_FAN);
-			if (key == KEY_ENTER) {
-			    if (current_unit->heater_state)
-				current_unit->heater_state = 0;
-			    else
-				current_unit->heater_state = 100;
-			    go_menu(MENU_NONE_HEAT);
-			}
-			break;
-
-	    case MENU_NONE_COOL:
-			if (key == KEY_ESCAPE)
-			    go_menu(MENU_MODE_NONE);
-			if (key == KEY_DOWN)
-			    go_menu(MENU_NONE_FAN);
-			if (key == KEY_UP)      
-			    go_menu(MENU_NONE_HEAT);
-			if (key == KEY_ENTER) {
-			    if (current_unit->cooler_state)
-				current_unit->cooler_state = 0;
-			    else
-				current_unit->cooler_state = 100;
-			    go_menu(MENU_NONE_COOL);
-			}
-			break;
-
-	    case MENU_NONE_FAN:
-			if (key == KEY_ESCAPE)
-			    go_menu(MENU_MODE_NONE);
-			if (key == KEY_DOWN)
-			    go_menu(MENU_NONE_HEAT);
-			if (key == KEY_UP)      
-			    go_menu(MENU_NONE_COOL);
-			if (key == KEY_ENTER) {
-			    if (current_unit->fan_state)
-				current_unit->fan_state = 0;
-			    else
-				current_unit->fan_state = 100;
-			    go_menu(MENU_NONE_FAN);
-			}
-			break;
-
-	    case MENU_MODE_FRIDGE:
-			if (key == KEY_ESCAPE)
-			    go_menu(MENU_UNITS);
-			if (key == KEY_DOWN)
-			    go_menu(MENU_MODE_BEER);
-			if (key == KEY_UP)
-			    go_menu(MENU_MODE_NONE);
-			if (key == KEY_ENTER) {
-			    change_mode(UNITMODE_FRIDGE);
-			    go_menu(MENU_MODE_FRIDGE);
-			}
-			break;
-
-	    case MENU_FRIDGE_TEMP:
-			break;
-
-	    case MENU_MODE_BEER:
-			if (key == KEY_ESCAPE)
-			    go_menu(MENU_UNITS);
-			if (key == KEY_DOWN)
-			    go_menu(MENU_MODE_PROFILE);
-			if (key == KEY_UP)
-			    go_menu(MENU_MODE_FRIDGE);
-			if (key == KEY_ENTER) {
-			    change_mode(UNITMODE_BEER);
-			    go_menu(MENU_MODE_BEER);
-			}
-			break;
-
-	    case MENU_BEER_TEMP:
-			break;
-
-	    case MENU_MODE_PROFILE:
-			if (key == KEY_ESCAPE)
-			    go_menu(MENU_UNITS);
-			if (key == KEY_DOWN)
-			    go_menu(MENU_MODE_OFF);     
-			if (key == KEY_UP)
-			    go_menu(MENU_MODE_BEER);                                
-			if (key == KEY_ENTER) {
-			    change_mode(UNITMODE_PROFILE);
-			    go_menu(MENU_MODE_PROFILE);
-			}
-			break;
-
-	    case MENU_PROFILE_SELECT:
-			break;
-
-	    case MENU_PROFILE_START:
-			break;
-
-	    case MENU_PROFILE_PAUSE:
-			break;
-
-	    case MENU_PROFILE_ABORT:
-			break;
-
-	    case MENU_PROFILE_RESUME:
-			break;
-
-	    case MENU_PROFILE_GOOFF:
-			break;
-
-	    case MENU_TOP_SYS:
-			if (key == KEY_ESCAPE)
-			    go_menu(MENU_NONE);
-			if (key == KEY_DOWN)
-			    go_menu(MENU_TOP_DEFAULT);
-			if (key == KEY_UP)
-			    go_menu(MENU_TOP_UNITS);
-			if (key == KEY_ENTER)
-			    go_menu(MENU_SYS_HALT);
-			break;
-
-	    case MENU_SYS_HALT:
-			if (key == KEY_ESCAPE)
-			    go_menu(MENU_TOP_SYS);
-			if (key == KEY_DOWN)
-			    go_menu(MENU_SYS_REBOOT);
-			if (key == KEY_UP)
-			    go_menu(MENU_SYS_THERMS);
-			break;
-
-	    case MENU_SYS_REBOOT:
-			if (key == KEY_ESCAPE)
-			    go_menu(MENU_TOP_SYS);
-			if (key == KEY_DOWN)
-			    go_menu(MENU_SYS_MASH);
-			if (key == KEY_UP)
-			    go_menu(MENU_SYS_HALT);
-			break;
-
-	    case MENU_SYS_MASH:
-			if (key == KEY_ESCAPE)
-			    go_menu(MENU_TOP_SYS);
-			if (key == KEY_DOWN)
-			    go_menu(MENU_SYS_THERMS);
-			if (key == KEY_UP)
-			    go_menu(MENU_SYS_REBOOT);
-			break;
-
-	    case MENU_SYS_THERMS:
-			if (key == KEY_ESCAPE)
-			    go_menu(MENU_TOP_SYS);
-			if (key == KEY_DOWN)
-			    go_menu(MENU_SYS_HALT);
-			if (key == KEY_UP)
-			    go_menu(MENU_SYS_MASH);
-			break;
-
-	}
-
+	if (key != KEY_NONE)
+	    panel_key_events(key);
 #endif
 
 	usleep(100000);

mercurial