# HG changeset patch # User Michiel Broek # Date 1408371236 -7200 # Node ID 6df404da35372eaeda37c4c4139c8c9fe3258541 # Parent b01b6238eb675d7ca3cb3a5508ff572cc421adad Setting fridge and beer temperature from the panel implemented diff -r b01b6238eb67 -r 6df404da3537 thermferm/server.c --- 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) { diff -r b01b6238eb67 -r 6df404da3537 thermferm/thermferm.c --- 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);