Sun, 08 Nov 2015 17:49:29 +0100
Basic ideas to write to the simulated LCD display are in place.
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
1 | /***************************************************************************** |
326 | 2 | * Copyright (C) 2014-2015 |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
3 | * |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
4 | * Michiel Broek <mbroek at mbse dot eu> |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
5 | * |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
6 | * This file is part of the mbsePi-apps |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
7 | * |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
8 | * This is free software; you can redistribute it and/or modify it |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
9 | * under the terms of the GNU General Public License as published by the |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
10 | * Free Software Foundation; either version 2, or (at your option) any |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
11 | * later version. |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
12 | * |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
13 | * mbsePi-apps is distributed in the hope that it will be useful, but |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
14 | * WITHOUT ANY WARRANTY; without even the implied warranty of |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
16 | * General Public License for more details. |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
17 | * |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
18 | * You should have received a copy of the GNU General Public License |
213
2317b8d644fa
Code cleanup, streamlined error messages.
Michiel Broek <mbroek@mbse.eu>
parents:
209
diff
changeset
|
19 | * along with ThermFerm; see the file COPYING. If not, write to the Free |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
20 | * Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
21 | *****************************************************************************/ |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
22 | |
106 | 23 | #include "lock.h" |
24 | #include "logger.h" | |
25 | #include "rdconfig.h" | |
160 | 26 | #include "devices.h" |
106 | 27 | #include "server.h" |
41
f534ace74eea
Code preparation for client/server communication
Michiel Broek <mbroek@mbse.eu>
parents:
40
diff
changeset
|
28 | #include "thermferm.h" |
259
b7c967359771
Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents:
248
diff
changeset
|
29 | #include "simulator.h" |
106 | 30 | #include "lcd-pcf8574.h" |
31 | #include "lcd-buffer.h" | |
198
20716bcff2b0
Added dependencies for panel
Michiel Broek <mbroek@mbse.eu>
parents:
195
diff
changeset
|
32 | #include "panel.h" |
106 | 33 | #include "futil.h" |
34 | #include "xutil.h" | |
316
73cd31dc6ce1
Moved pid function to separate files
Michiel Broek <mbroek@mbse.eu>
parents:
315
diff
changeset
|
35 | #include "pid.h" |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
36 | |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
37 | |
75
4b976601737d
Writes a basic xml configuration next to the plain ascii config file
Michiel Broek <mbroek@mbse.eu>
parents:
74
diff
changeset
|
38 | int my_shutdown = FALSE; |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
39 | static pid_t pgrp, mypid; |
245
b01b6238eb67
You can now safely add and remove units on a running system.
Michiel Broek <mbroek@mbse.eu>
parents:
244
diff
changeset
|
40 | int run_pause = FALSE; |
b01b6238eb67
You can now safely add and remove units on a running system.
Michiel Broek <mbroek@mbse.eu>
parents:
244
diff
changeset
|
41 | int run_hold = FALSE; |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
42 | |
75
4b976601737d
Writes a basic xml configuration next to the plain ascii config file
Michiel Broek <mbroek@mbse.eu>
parents:
74
diff
changeset
|
43 | extern int debug; |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
44 | extern sys_config Config; |
66
805f1d285acd
Compiles with 1-wire bus on PC hardware
Michiel Broek <mbroek@mbse.eu>
parents:
64
diff
changeset
|
45 | #ifdef HAVE_WIRINGPI_H |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
46 | extern int lcdHandle; |
205 | 47 | int setupmenu = MENU_NONE; |
238 | 48 | units_list *current_unit = NULL; /* In panel editor this points to the current unit. */ |
247
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
49 | profiles_list *current_profile = NULL; |
246
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
50 | float temp_temp = 20.0; |
66
805f1d285acd
Compiles with 1-wire bus on PC hardware
Michiel Broek <mbroek@mbse.eu>
parents:
64
diff
changeset
|
51 | #endif |
246
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
52 | |
74 | 53 | #ifndef HAVE_WIRINGPI_H |
259
b7c967359771
Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents:
248
diff
changeset
|
54 | pthread_t threads[5]; |
74 | 55 | #endif |
104 | 56 | extern const char UNITMODE[5][8]; |
195
b34a1b2421fb
Reset output when a different profile is selected. Better startup logging about the unit state. Added Beer, Fridge and partial Profile settings from the liveview weeb screen.
Michiel Broek <mbroek@mbse.eu>
parents:
194
diff
changeset
|
57 | extern const char PROFSTATE[4][6]; |
104 | 58 | |
40
dafbbd5e9922
Prepared unix socket communication
Michiel Broek <mbroek@mbse.eu>
parents:
34
diff
changeset
|
59 | |
41
f534ace74eea
Code preparation for client/server communication
Michiel Broek <mbroek@mbse.eu>
parents:
40
diff
changeset
|
60 | int server(void); |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
61 | void help(void); |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
62 | void die(int); |
66
805f1d285acd
Compiles with 1-wire bus on PC hardware
Michiel Broek <mbroek@mbse.eu>
parents:
64
diff
changeset
|
63 | #ifdef HAVE_WIRINGPI_H |
46
000399c64d3f
More client/server communications
Michiel Broek <mbroek@mbse.eu>
parents:
44
diff
changeset
|
64 | void sendRCswitch(char *, int); |
000399c64d3f
More client/server communications
Michiel Broek <mbroek@mbse.eu>
parents:
44
diff
changeset
|
65 | void stopLCD(void); |
000399c64d3f
More client/server communications
Michiel Broek <mbroek@mbse.eu>
parents:
44
diff
changeset
|
66 | void stopRCswitch(void); |
66
805f1d285acd
Compiles with 1-wire bus on PC hardware
Michiel Broek <mbroek@mbse.eu>
parents:
64
diff
changeset
|
67 | #endif |
46
000399c64d3f
More client/server communications
Michiel Broek <mbroek@mbse.eu>
parents:
44
diff
changeset
|
68 | |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
69 | |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
70 | |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
71 | void help(void) |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
72 | { |
41
f534ace74eea
Code preparation for client/server communication
Michiel Broek <mbroek@mbse.eu>
parents:
40
diff
changeset
|
73 | fprintf(stdout, "mbsePi-apps thermferm v%s starting\n\n", VERSION); |
f534ace74eea
Code preparation for client/server communication
Michiel Broek <mbroek@mbse.eu>
parents:
40
diff
changeset
|
74 | fprintf(stdout, "Usage: thermferm [-d] [-h]\n"); |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
75 | fprintf(stdout, " -d --debug Debug and run in foreground\n"); |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
76 | fprintf(stdout, " -h --help Display this help\n"); |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
77 | } |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
78 | |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
79 | |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
80 | |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
81 | void die(int onsig) |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
82 | { |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
83 | switch (onsig) { |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
84 | case SIGHUP: syslog(LOG_NOTICE, "Got SIGHUP, shutting down"); |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
85 | break; |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
86 | case SIGINT: syslog(LOG_NOTICE, "Keyboard interrupt, shutting down"); |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
87 | break; |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
88 | case SIGTERM: syslog(LOG_NOTICE, "Got SIGTERM, shutting down"); |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
89 | break; |
326 | 90 | case SIGSEGV: syslog(LOG_NOTICE, "Got SIGSEGV, shutting down"); |
91 | my_shutdown = TRUE; | |
92 | exit(SIGSEGV); | |
93 | break; | |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
94 | default: syslog(LOG_NOTICE, "die() on signal %d", onsig); |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
95 | } |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
96 | |
75
4b976601737d
Writes a basic xml configuration next to the plain ascii config file
Michiel Broek <mbroek@mbse.eu>
parents:
74
diff
changeset
|
97 | my_shutdown = TRUE; |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
98 | } |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
99 | |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
100 | |
238 | 101 | |
241
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
102 | #ifdef HAVE_WIRINGPI_H |
238 | 103 | void show_mode(void) |
104 | { | |
105 | char buf[21]; | |
106 | ||
328 | 107 | snprintf(buf, 20, "Old mode %s", UNITMODE[current_unit->mode]); |
238 | 108 | lcdPuts(lcdHandle, buf); |
109 | lcdPosition(lcdHandle, 0, 1); | |
110 | } | |
111 | ||
112 | ||
113 | ||
214
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
114 | void go_menu(int menu) |
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
115 | { |
247
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
116 | char buf[21]; |
238 | 117 | |
241
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
118 | piLock(LOCK_LCD); |
244
2f868eaefec2
Selecting units in setup does now work. Menu select variables are protected with thread locking.
Michiel Broek <mbroek@mbse.eu>
parents:
241
diff
changeset
|
119 | piLock(LOCK_MENU); |
223
14700edd2a67
Removed LCD shadow copy buffer.
Michiel Broek <mbroek@mbse.eu>
parents:
221
diff
changeset
|
120 | lcdClear(lcdHandle); |
214
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
121 | lcdPosition(lcdHandle, 0, 0); |
244
2f868eaefec2
Selecting units in setup does now work. Menu select variables are protected with thread locking.
Michiel Broek <mbroek@mbse.eu>
parents:
241
diff
changeset
|
122 | syslog(LOG_NOTICE, "from menu %d to menu %d", setupmenu, menu); |
214
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
123 | setupmenu = menu; |
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
124 | |
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
125 | switch (menu) { |
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
126 | case MENU_NONE: lcd_buf_show(); |
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
127 | break; |
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
128 | |
223
14700edd2a67
Removed LCD shadow copy buffer.
Michiel Broek <mbroek@mbse.eu>
parents:
221
diff
changeset
|
129 | case MENU_TOP_DEFAULT: lcdPuts(lcdHandle, "Setup mode."); |
214
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
130 | lcdPosition(lcdHandle, 0, 1); |
223
14700edd2a67
Removed LCD shadow copy buffer.
Michiel Broek <mbroek@mbse.eu>
parents:
221
diff
changeset
|
131 | lcdPuts(lcdHandle, "Up&Down = Escape"); |
214
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
132 | break; |
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
133 | |
223
14700edd2a67
Removed LCD shadow copy buffer.
Michiel Broek <mbroek@mbse.eu>
parents:
221
diff
changeset
|
134 | case MENU_TOP_UNITS: lcdPuts(lcdHandle, "Select units"); |
214
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
135 | break; |
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
136 | |
223
14700edd2a67
Removed LCD shadow copy buffer.
Michiel Broek <mbroek@mbse.eu>
parents:
221
diff
changeset
|
137 | case MENU_UNITS: lcdPuts(lcdHandle, "Choose unit:"); |
244
2f868eaefec2
Selecting units in setup does now work. Menu select variables are protected with thread locking.
Michiel Broek <mbroek@mbse.eu>
parents:
241
diff
changeset
|
138 | lcdPosition(lcdHandle, 0, 1); |
2f868eaefec2
Selecting units in setup does now work. Menu select variables are protected with thread locking.
Michiel Broek <mbroek@mbse.eu>
parents:
241
diff
changeset
|
139 | lcdPuts(lcdHandle, current_unit->name); |
214
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
140 | break; |
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
141 | |
238 | 142 | case MENU_MODE_OFF: show_mode(); |
143 | lcdPuts(lcdHandle, "New mode OFF"); | |
214
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
144 | break; |
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
145 | |
238 | 146 | case MENU_MODE_NONE: show_mode(); |
147 | lcdPuts(lcdHandle, "New mode NONE"); | |
148 | break; | |
149 | ||
247
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
150 | case MENU_NONE_HEAT: snprintf(buf, Config.lcd_cols, "Set heater %s", current_unit->heater_state ? "OFF":"ON"); |
238 | 151 | lcdPuts(lcdHandle, buf); |
214
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
152 | break; |
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
153 | |
247
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
154 | case MENU_NONE_COOL: snprintf(buf, Config.lcd_cols, "Set cooler %s", current_unit->cooler_state ? "OFF":"ON"); |
238 | 155 | lcdPuts(lcdHandle, buf); |
214
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
156 | break; |
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
157 | |
247
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
158 | case MENU_NONE_FAN: snprintf(buf, Config.lcd_cols, "Set fan %s", current_unit->fan_state ? "OFF":"ON"); |
238 | 159 | lcdPuts(lcdHandle, buf); |
214
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
160 | break; |
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
161 | |
238 | 162 | case MENU_MODE_BEER: show_mode(); |
163 | lcdPuts(lcdHandle, "New mode BEER"); | |
214
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
164 | break; |
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
165 | |
223
14700edd2a67
Removed LCD shadow copy buffer.
Michiel Broek <mbroek@mbse.eu>
parents:
221
diff
changeset
|
166 | case MENU_BEER_TEMP: lcdPuts(lcdHandle, "Set beer temp"); |
246
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
167 | lcdPosition(lcdHandle, 0, 1); |
247
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
168 | snprintf(buf, Config.lcd_cols, "Set %.1f", temp_temp); |
246
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
169 | lcdPuts(lcdHandle, buf); |
214
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
170 | break; |
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
171 | |
238 | 172 | case MENU_MODE_FRIDGE: show_mode(); |
173 | lcdPuts(lcdHandle, "New mode FRIDGE"); | |
214
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
174 | break; |
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
175 | |
223
14700edd2a67
Removed LCD shadow copy buffer.
Michiel Broek <mbroek@mbse.eu>
parents:
221
diff
changeset
|
176 | case MENU_FRIDGE_TEMP: lcdPuts(lcdHandle, "Set fridge temp"); |
246
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
177 | lcdPosition(lcdHandle, 0, 1); |
247
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
178 | snprintf(buf, Config.lcd_cols, "Set %.1f", temp_temp); |
246
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
179 | lcdPuts(lcdHandle, buf); |
214
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
180 | break; |
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
181 | |
238 | 182 | case MENU_MODE_PROFILE: show_mode(); |
183 | lcdPuts(lcdHandle, "New mode PROFILE"); | |
214
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
184 | break; |
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
185 | |
247
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
186 | case MENU_PROFILE_SELECT: snprintf(buf, Config.lcd_cols, "%s", current_profile->name); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
187 | lcdPuts(lcdHandle, buf); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
188 | lcdPosition(lcdHandle, 0, 1); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
189 | lcdPuts(lcdHandle, "Select profile"); |
214
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
190 | break; |
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
191 | |
247
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
192 | case MENU_PROFILE_START: snprintf(buf, Config.lcd_cols, "%s", current_profile->name); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
193 | lcdPuts(lcdHandle, buf); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
194 | lcdPosition(lcdHandle, 0, 1); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
195 | lcdPuts(lcdHandle, "Start profile"); |
214
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
196 | break; |
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
197 | |
247
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
198 | case MENU_PROFILE_PAUSE: snprintf(buf, Config.lcd_cols, "%s", current_profile->name); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
199 | lcdPuts(lcdHandle, buf); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
200 | lcdPosition(lcdHandle, 0, 1); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
201 | lcdPuts(lcdHandle, "Pause profile"); |
214
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
202 | break; |
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
203 | |
247
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
204 | case MENU_PROFILE_ABORT: snprintf(buf, Config.lcd_cols, "%s", current_profile->name); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
205 | lcdPuts(lcdHandle, buf); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
206 | lcdPosition(lcdHandle, 0, 1); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
207 | lcdPuts(lcdHandle, "Abort profile"); |
214
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
208 | break; |
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
209 | |
247
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
210 | case MENU_PROFILE_RESUME: snprintf(buf, Config.lcd_cols, "%s", current_profile->name); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
211 | lcdPuts(lcdHandle, buf); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
212 | lcdPosition(lcdHandle, 0, 1); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
213 | lcdPuts(lcdHandle, "Resume profile"); |
214
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
214 | break; |
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
215 | |
247
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
216 | case MENU_PROFILE_GOOFF: snprintf(buf, Config.lcd_cols, "%s", current_profile->name); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
217 | lcdPuts(lcdHandle, buf); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
218 | lcdPosition(lcdHandle, 0, 1); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
219 | lcdPuts(lcdHandle, "Set profile OFF"); |
214
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
220 | break; |
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
221 | |
223
14700edd2a67
Removed LCD shadow copy buffer.
Michiel Broek <mbroek@mbse.eu>
parents:
221
diff
changeset
|
222 | case MENU_TOP_SYS: lcdPuts(lcdHandle, "System menu"); |
214
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
223 | break; |
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
224 | |
223
14700edd2a67
Removed LCD shadow copy buffer.
Michiel Broek <mbroek@mbse.eu>
parents:
221
diff
changeset
|
225 | case MENU_SYS_HALT: lcdPuts(lcdHandle, "Halt system"); |
214
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
226 | break; |
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
227 | |
223
14700edd2a67
Removed LCD shadow copy buffer.
Michiel Broek <mbroek@mbse.eu>
parents:
221
diff
changeset
|
228 | case MENU_SYS_REBOOT: lcdPuts(lcdHandle, "Reboot system"); |
214
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
229 | break; |
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
230 | } |
244
2f868eaefec2
Selecting units in setup does now work. Menu select variables are protected with thread locking.
Michiel Broek <mbroek@mbse.eu>
parents:
241
diff
changeset
|
231 | |
2f868eaefec2
Selecting units in setup does now work. Menu select variables are protected with thread locking.
Michiel Broek <mbroek@mbse.eu>
parents:
241
diff
changeset
|
232 | piUnlock(LOCK_MENU); |
2f868eaefec2
Selecting units in setup does now work. Menu select variables are protected with thread locking.
Michiel Broek <mbroek@mbse.eu>
parents:
241
diff
changeset
|
233 | piUnlock(LOCK_LCD); |
214
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
234 | } |
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
235 | |
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
236 | |
37d1eb0e1d66
Added a bunch of panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
213
diff
changeset
|
237 | |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
238 | void stopLCD(void) |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
239 | { |
241
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
240 | piLock(LOCK_LCD); |
223
14700edd2a67
Removed LCD shadow copy buffer.
Michiel Broek <mbroek@mbse.eu>
parents:
221
diff
changeset
|
241 | lcdClear(lcdHandle); |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
242 | setBacklight(0); |
241
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
243 | piUnlock(LOCK_LCD); |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
244 | } |
238 | 245 | |
246 | ||
247 | ||
248 | /* | |
249 | * Change mode of current_unit | |
250 | */ | |
251 | void change_mode(int mode) | |
252 | { | |
253 | if ((current_unit->mode == UNITMODE_OFF) && (mode != UNITMODE_OFF)) | |
254 | initlog(current_unit->name); | |
255 | syslog(LOG_NOTICE, "Mode from %s to %s via panel interface", UNITMODE[current_unit->mode], UNITMODE[mode]); | |
256 | current_unit->mode = mode; | |
257 | /* Allways turn everything off after a mode change */ | |
367
b9130db48c63
Fixed compiling on a real RPi
Michiel Broek <mbroek@mbse.eu>
parents:
364
diff
changeset
|
258 | current_unit->PID_cool->OutP = current_unit->PID_heat->OutP = 0.0; |
b9130db48c63
Fixed compiling on a real RPi
Michiel Broek <mbroek@mbse.eu>
parents:
364
diff
changeset
|
259 | current_unit->PID_cool->Mode = current_unit->PID_heat->Mode = PID_MODE_NONE; |
b9130db48c63
Fixed compiling on a real RPi
Michiel Broek <mbroek@mbse.eu>
parents:
364
diff
changeset
|
260 | current_unit->heater_state = current_unit->cooler_state = current_unit->fan_state = current_unit->light_state = 0; |
b9130db48c63
Fixed compiling on a real RPi
Michiel Broek <mbroek@mbse.eu>
parents:
364
diff
changeset
|
261 | current_unit->heater_wait = current_unit->cooler_wait = current_unit->fan_wait = current_unit->light_wait = 0; |
238 | 262 | device_out(current_unit->heater_address, current_unit->heater_state); |
263 | device_out(current_unit->cooler_address, current_unit->cooler_state); | |
264 | device_out(current_unit->fan_address, current_unit->fan_state); | |
367
b9130db48c63
Fixed compiling on a real RPi
Michiel Broek <mbroek@mbse.eu>
parents:
364
diff
changeset
|
265 | device_out(current_unit->light_address, current_unit->light_state); |
238 | 266 | if (current_unit->mode == UNITMODE_PROFILE) { |
267 | /* | |
268 | * Set a sane default until it will be overruled by the | |
269 | * main processing loop. | |
270 | */ | |
406
44566f986f76
Fixed compiling on a real RPi.
Michiel Broek <mbroek@mbse.eu>
parents:
405
diff
changeset
|
271 | current_unit->prof_target_lo = 19.8; |
44566f986f76
Fixed compiling on a real RPi.
Michiel Broek <mbroek@mbse.eu>
parents:
405
diff
changeset
|
272 | current_unit->prof_target_hi = 20.2; |
44566f986f76
Fixed compiling on a real RPi.
Michiel Broek <mbroek@mbse.eu>
parents:
405
diff
changeset
|
273 | current_unit->prof_fridge_mode = 0; |
238 | 274 | } |
275 | } | |
276 | ||
277 | ||
66
805f1d285acd
Compiles with 1-wire bus on PC hardware
Michiel Broek <mbroek@mbse.eu>
parents:
64
diff
changeset
|
278 | #endif |
28
32ed1ea4d0b6
Coolers working with a hardcode reference
Michiel Broek <mbroek@mbse.eu>
parents:
27
diff
changeset
|
279 | |
32ed1ea4d0b6
Coolers working with a hardcode reference
Michiel Broek <mbroek@mbse.eu>
parents:
27
diff
changeset
|
280 | |
32ed1ea4d0b6
Coolers working with a hardcode reference
Michiel Broek <mbroek@mbse.eu>
parents:
27
diff
changeset
|
281 | |
246
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
282 | /* |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
283 | * Handle panel key events |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
284 | */ |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
285 | #ifdef HAVE_WIRINGPI_H |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
286 | void panel_key_events(int key) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
287 | { |
247
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
288 | units_list *unit; |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
289 | profiles_list *profile; |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
290 | int rc; |
246
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
291 | |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
292 | switch (setupmenu) { |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
293 | case MENU_NONE: |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
294 | if ((key == KEY_DOWN) || (key == KEY_UP)) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
295 | lcd_buf_step(key); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
296 | if ((key == KEY_CONFIRM) && (setupmenu == MENU_NONE)) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
297 | go_menu(MENU_TOP_DEFAULT); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
298 | break; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
299 | |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
300 | case MENU_TOP_DEFAULT: |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
301 | if (key == KEY_ESCAPE) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
302 | go_menu(MENU_NONE); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
303 | if (key == KEY_DOWN) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
304 | go_menu(MENU_TOP_UNITS); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
305 | if (key == KEY_UP) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
306 | go_menu(MENU_TOP_SYS); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
307 | break; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
308 | |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
309 | case MENU_TOP_UNITS: |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
310 | if (key == KEY_ESCAPE) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
311 | go_menu(MENU_NONE); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
312 | if (key == KEY_DOWN) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
313 | go_menu(MENU_TOP_SYS); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
314 | if (key == KEY_UP) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
315 | go_menu(MENU_TOP_DEFAULT); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
316 | if ((key == KEY_ENTER) && Config.units) { |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
317 | /* |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
318 | * Start with the first unit |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
319 | */ |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
320 | current_unit = Config.units; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
321 | go_menu(MENU_UNITS); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
322 | } |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
323 | break; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
324 | |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
325 | case MENU_UNITS: |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
326 | if (key == KEY_ESCAPE) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
327 | go_menu(MENU_TOP_UNITS); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
328 | if (key == KEY_DOWN) { |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
329 | if (current_unit->next) { |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
330 | current_unit = current_unit->next; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
331 | go_menu(MENU_UNITS); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
332 | } |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
333 | } |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
334 | if (key == KEY_UP) { |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
335 | for (unit = Config.units; unit; unit = unit->next) { |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
336 | if (unit->next && (unit->next == current_unit)) { |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
337 | current_unit = unit; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
338 | go_menu(MENU_UNITS); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
339 | break; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
340 | } |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
341 | } |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
342 | } |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
343 | if (key == KEY_ENTER) { |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
344 | /* |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
345 | * Drop into the current mode |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
346 | */ |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
347 | switch (current_unit->mode) { |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
348 | case UNITMODE_OFF: go_menu(MENU_MODE_OFF); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
349 | break; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
350 | case UNITMODE_NONE: go_menu(MENU_MODE_NONE); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
351 | break; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
352 | case UNITMODE_FRIDGE: go_menu(MENU_MODE_FRIDGE); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
353 | break; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
354 | case UNITMODE_BEER: go_menu(MENU_MODE_BEER); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
355 | break; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
356 | case UNITMODE_PROFILE: go_menu(MENU_MODE_PROFILE); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
357 | break; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
358 | } |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
359 | } |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
360 | break; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
361 | |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
362 | case MENU_MODE_OFF: |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
363 | if (key == KEY_ESCAPE) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
364 | go_menu(MENU_UNITS); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
365 | if (key == KEY_DOWN) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
366 | go_menu(MENU_MODE_NONE); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
367 | if (key == KEY_UP) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
368 | go_menu(MENU_MODE_PROFILE); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
369 | if (key == KEY_ENTER) { |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
370 | change_mode(UNITMODE_OFF); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
371 | go_menu(MENU_MODE_OFF); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
372 | } |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
373 | break; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
374 | |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
375 | case MENU_MODE_NONE: |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
376 | if (key == KEY_ESCAPE) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
377 | go_menu(MENU_UNITS); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
378 | if (key == KEY_DOWN) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
379 | go_menu(MENU_MODE_FRIDGE); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
380 | if (key == KEY_UP) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
381 | go_menu(MENU_MODE_OFF); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
382 | if (key == KEY_ENTER) { |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
383 | if (current_unit->mode == UNITMODE_NONE) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
384 | go_menu(MENU_NONE_HEAT); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
385 | else { |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
386 | change_mode(UNITMODE_NONE); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
387 | go_menu(MENU_MODE_NONE); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
388 | } |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
389 | } |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
390 | break; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
391 | |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
392 | case MENU_NONE_HEAT: |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
393 | if (key == KEY_ESCAPE) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
394 | go_menu(MENU_MODE_NONE); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
395 | if (key == KEY_DOWN) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
396 | go_menu(MENU_NONE_COOL); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
397 | if (key == KEY_UP) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
398 | go_menu(MENU_NONE_FAN); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
399 | if (key == KEY_ENTER) { |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
400 | if (current_unit->heater_state) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
401 | current_unit->heater_state = 0; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
402 | else |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
403 | current_unit->heater_state = 100; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
404 | go_menu(MENU_NONE_HEAT); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
405 | } |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
406 | break; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
407 | |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
408 | case MENU_NONE_COOL: |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
409 | if (key == KEY_ESCAPE) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
410 | go_menu(MENU_MODE_NONE); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
411 | if (key == KEY_DOWN) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
412 | go_menu(MENU_NONE_FAN); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
413 | if (key == KEY_UP) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
414 | go_menu(MENU_NONE_HEAT); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
415 | if (key == KEY_ENTER) { |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
416 | if (current_unit->cooler_state) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
417 | current_unit->cooler_state = 0; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
418 | else |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
419 | current_unit->cooler_state = 100; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
420 | go_menu(MENU_NONE_COOL); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
421 | } |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
422 | break; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
423 | |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
424 | case MENU_NONE_FAN: |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
425 | if (key == KEY_ESCAPE) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
426 | go_menu(MENU_MODE_NONE); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
427 | if (key == KEY_DOWN) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
428 | go_menu(MENU_NONE_HEAT); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
429 | if (key == KEY_UP) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
430 | go_menu(MENU_NONE_COOL); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
431 | if (key == KEY_ENTER) { |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
432 | if (current_unit->fan_state) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
433 | current_unit->fan_state = 0; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
434 | else |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
435 | current_unit->fan_state = 100; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
436 | go_menu(MENU_NONE_FAN); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
437 | } |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
438 | break; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
439 | |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
440 | case MENU_MODE_FRIDGE: |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
441 | if (key == KEY_ESCAPE) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
442 | go_menu(MENU_UNITS); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
443 | if (key == KEY_DOWN) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
444 | go_menu(MENU_MODE_BEER); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
445 | if (key == KEY_UP) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
446 | go_menu(MENU_MODE_NONE); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
447 | if (key == KEY_ENTER) { |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
448 | if (current_unit->mode == UNITMODE_FRIDGE) { |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
449 | temp_temp = current_unit->fridge_set; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
450 | go_menu(MENU_FRIDGE_TEMP); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
451 | } else { |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
452 | change_mode(UNITMODE_FRIDGE); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
453 | go_menu(MENU_MODE_FRIDGE); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
454 | } |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
455 | } |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
456 | break; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
457 | |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
458 | case MENU_FRIDGE_TEMP: |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
459 | if (key == KEY_ESCAPE) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
460 | go_menu(MENU_MODE_FRIDGE); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
461 | if (key == KEY_DOWN) { |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
462 | if (temp_temp > current_unit->temp_set_min) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
463 | temp_temp -= 0.1; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
464 | go_menu(MENU_FRIDGE_TEMP); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
465 | } |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
466 | if (key == KEY_UP) { |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
467 | if (temp_temp < current_unit->temp_set_max) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
468 | temp_temp += 0.1; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
469 | go_menu(MENU_FRIDGE_TEMP); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
470 | } |
302
3d2bd47f35b4
Use confirm instead of enter key when stepping to a new beer or fridge temperature
Michiel Broek <mbroek@mbse.eu>
parents:
297
diff
changeset
|
471 | if (key == KEY_CONFIRM) { |
246
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
472 | if (temp_temp != current_unit->fridge_set) { |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
473 | syslog(LOG_NOTICE, "Fridge temperature changed from %.1f to %.1f degrees from the panel", current_unit->fridge_set, temp_temp); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
474 | current_unit->fridge_set = temp_temp; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
475 | } |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
476 | go_menu(MENU_MODE_FRIDGE); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
477 | } |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
478 | break; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
479 | |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
480 | case MENU_MODE_BEER: |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
481 | if (key == KEY_ESCAPE) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
482 | go_menu(MENU_UNITS); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
483 | if (key == KEY_DOWN) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
484 | go_menu(MENU_MODE_PROFILE); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
485 | if (key == KEY_UP) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
486 | go_menu(MENU_MODE_FRIDGE); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
487 | if (key == KEY_ENTER) { |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
488 | if (current_unit->mode == UNITMODE_BEER) { |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
489 | temp_temp = current_unit->beer_set; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
490 | go_menu(MENU_BEER_TEMP); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
491 | } else { |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
492 | change_mode(UNITMODE_BEER); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
493 | go_menu(MENU_MODE_BEER); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
494 | } |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
495 | } |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
496 | break; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
497 | |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
498 | case MENU_BEER_TEMP: |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
499 | if (key == KEY_ESCAPE) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
500 | go_menu(MENU_MODE_BEER); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
501 | if (key == KEY_DOWN) { |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
502 | if (temp_temp > current_unit->temp_set_min) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
503 | temp_temp -= 0.1; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
504 | go_menu(MENU_BEER_TEMP); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
505 | } |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
506 | if (key == KEY_UP) { |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
507 | if (temp_temp < current_unit->temp_set_max) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
508 | temp_temp += 0.1; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
509 | go_menu(MENU_BEER_TEMP); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
510 | } |
302
3d2bd47f35b4
Use confirm instead of enter key when stepping to a new beer or fridge temperature
Michiel Broek <mbroek@mbse.eu>
parents:
297
diff
changeset
|
511 | if (key == KEY_CONFIRM) { |
246
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
512 | if (temp_temp != current_unit->beer_set) { |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
513 | syslog(LOG_NOTICE, "Beer temperature changed from %.1f to %.1f degrees from the panel", current_unit->beer_set, temp_temp); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
514 | current_unit->beer_set = temp_temp; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
515 | } |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
516 | go_menu(MENU_MODE_BEER); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
517 | } |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
518 | break; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
519 | |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
520 | case MENU_MODE_PROFILE: |
247
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
521 | if (current_unit->profile) { |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
522 | for (current_profile = Config.profiles; current_profile; current_profile = current_profile->next) { |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
523 | if (strcmp(current_profile->uuid, current_unit->profile) == 0) |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
524 | break; |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
525 | } |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
526 | } else { |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
527 | current_profile = NULL; |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
528 | } |
246
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
529 | if (key == KEY_ESCAPE) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
530 | go_menu(MENU_UNITS); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
531 | if (key == KEY_DOWN) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
532 | go_menu(MENU_MODE_OFF); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
533 | if (key == KEY_UP) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
534 | go_menu(MENU_MODE_BEER); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
535 | if (key == KEY_ENTER) { |
247
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
536 | if (current_unit->mode == UNITMODE_PROFILE) { |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
537 | switch (current_unit->prof_state) { |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
538 | case PROFILE_OFF: if (current_unit->profile) |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
539 | go_menu(MENU_PROFILE_START); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
540 | else |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
541 | go_menu(MENU_PROFILE_SELECT); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
542 | break; |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
543 | case PROFILE_PAUSE: go_menu(MENU_PROFILE_RESUME); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
544 | break; |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
545 | case PROFILE_RUN: go_menu(MENU_PROFILE_PAUSE); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
546 | break; |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
547 | case PROFILE_DONE: go_menu(MENU_PROFILE_GOOFF); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
548 | break; |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
549 | } |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
550 | } else { |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
551 | change_mode(UNITMODE_PROFILE); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
552 | go_menu(MENU_MODE_PROFILE); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
553 | } |
246
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
554 | } |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
555 | break; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
556 | |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
557 | case MENU_PROFILE_SELECT: |
247
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
558 | if (key == KEY_ESCAPE) |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
559 | go_menu(MENU_MODE_PROFILE); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
560 | if (key == KEY_DOWN) { |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
561 | if (current_profile->next) { |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
562 | current_profile = current_profile->next; |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
563 | go_menu(MENU_PROFILE_SELECT); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
564 | } else { |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
565 | go_menu(MENU_PROFILE_START); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
566 | } |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
567 | } |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
568 | if (key == KEY_UP) { |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
569 | for (profile = Config.profiles; profile; profile = profile->next) { |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
570 | if (profile->next && profile->next == current_profile) { |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
571 | current_profile = profile; |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
572 | go_menu(MENU_PROFILE_SELECT); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
573 | break; |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
574 | } |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
575 | } |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
576 | go_menu(MENU_PROFILE_START); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
577 | } |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
578 | if (key == KEY_ENTER) { |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
579 | current_unit->profile = current_profile->uuid; |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
580 | syslog(LOG_NOTICE, "Profile %s selected from panel", current_profile->name); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
581 | go_menu(MENU_PROFILE_START); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
582 | } |
246
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
583 | break; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
584 | |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
585 | case MENU_PROFILE_START: |
247
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
586 | if (key == KEY_ESCAPE) |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
587 | go_menu(MENU_MODE_PROFILE); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
588 | if ((key == KEY_DOWN) || (key == KEY_UP)) |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
589 | go_menu(MENU_PROFILE_SELECT); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
590 | if (key == KEY_ENTER) { |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
591 | current_unit->prof_state = PROFILE_RUN; |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
592 | current_unit->prof_started = time(NULL); |
289
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
593 | current_unit->prof_paused = current_unit->prof_primary_done = 0; |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
594 | current_unit->prof_peak_abs = current_unit->prof_peak_rel = 0.0; |
247
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
595 | syslog(LOG_NOTICE, "Profile started from the panel"); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
596 | go_menu(MENU_MODE_PROFILE); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
597 | } |
246
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
598 | break; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
599 | |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
600 | case MENU_PROFILE_PAUSE: |
247
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
601 | if (key == KEY_ESCAPE) |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
602 | go_menu(MENU_MODE_PROFILE); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
603 | if ((key == KEY_DOWN) || (key == KEY_UP)) |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
604 | go_menu(MENU_PROFILE_ABORT); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
605 | if (key == KEY_ENTER) { |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
606 | current_unit->prof_state = PROFILE_PAUSE; |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
607 | syslog(LOG_NOTICE, "Profile pause from the panel"); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
608 | go_menu(MENU_MODE_PROFILE); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
609 | } |
246
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
610 | break; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
611 | |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
612 | case MENU_PROFILE_ABORT: |
247
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
613 | if (key == KEY_ESCAPE) |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
614 | go_menu(MENU_MODE_PROFILE); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
615 | if ((key == KEY_DOWN) || (key == KEY_UP)) { |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
616 | if (current_unit->prof_state == PROFILE_PAUSE) |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
617 | go_menu(MENU_PROFILE_RESUME); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
618 | else if (current_unit->prof_state == PROFILE_RUN) |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
619 | go_menu(MENU_PROFILE_PAUSE); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
620 | } |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
621 | if ((key == KEY_ENTER) && ((current_unit->prof_state == PROFILE_RUN) || (current_unit->prof_state == PROFILE_PAUSE))) { |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
622 | current_unit->prof_state = PROFILE_OFF; |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
623 | current_unit->prof_started = 0; |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
624 | syslog(LOG_NOTICE, "Profile aborted from the panel"); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
625 | go_menu(MENU_MODE_PROFILE); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
626 | } |
246
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
627 | break; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
628 | |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
629 | case MENU_PROFILE_RESUME: |
247
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
630 | if (key == KEY_ESCAPE) |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
631 | go_menu(MENU_MODE_PROFILE); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
632 | if ((key == KEY_DOWN) || (key == KEY_UP)) |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
633 | go_menu(MENU_PROFILE_ABORT); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
634 | if (key == KEY_ENTER) { |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
635 | current_unit->prof_state = PROFILE_RUN; |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
636 | syslog(LOG_NOTICE, "Profile resume from the panel"); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
637 | go_menu(MENU_MODE_PROFILE); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
638 | } |
246
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
639 | break; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
640 | |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
641 | case MENU_PROFILE_GOOFF: |
247
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
642 | if (key == KEY_ESCAPE) |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
643 | go_menu(MENU_MODE_PROFILE); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
644 | if (key == KEY_ENTER) { |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
645 | if (current_unit->prof_state == PROFILE_DONE) { |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
646 | current_unit->prof_state = PROFILE_OFF; |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
647 | syslog(LOG_NOTICE, "Profile from done to off from the panel"); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
648 | } |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
649 | } |
246
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
650 | break; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
651 | |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
652 | case MENU_TOP_SYS: |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
653 | if (key == KEY_ESCAPE) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
654 | go_menu(MENU_NONE); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
655 | if (key == KEY_DOWN) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
656 | go_menu(MENU_TOP_DEFAULT); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
657 | if (key == KEY_UP) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
658 | go_menu(MENU_TOP_UNITS); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
659 | if (key == KEY_ENTER) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
660 | go_menu(MENU_SYS_HALT); |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
661 | break; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
662 | |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
663 | case MENU_SYS_HALT: |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
664 | if (key == KEY_ESCAPE) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
665 | go_menu(MENU_TOP_SYS); |
248
870d0be6880d
Removed two system menus that would not work correctly. All panel menus are complete now.
Michiel Broek <mbroek@mbse.eu>
parents:
247
diff
changeset
|
666 | if ((key == KEY_DOWN) || (key == KEY_UP)) |
246
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
667 | go_menu(MENU_SYS_REBOOT); |
248
870d0be6880d
Removed two system menus that would not work correctly. All panel menus are complete now.
Michiel Broek <mbroek@mbse.eu>
parents:
247
diff
changeset
|
668 | if (key == KEY_CONFIRM) { |
247
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
669 | rc = system("/sbin/halt"); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
670 | syslog(LOG_NOTICE, "System halt from panel: /sbin/halt rc=%d", rc); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
671 | go_menu(MENU_NONE); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
672 | } |
246
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
673 | break; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
674 | |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
675 | case MENU_SYS_REBOOT: |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
676 | if (key == KEY_ESCAPE) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
677 | go_menu(MENU_TOP_SYS); |
248
870d0be6880d
Removed two system menus that would not work correctly. All panel menus are complete now.
Michiel Broek <mbroek@mbse.eu>
parents:
247
diff
changeset
|
678 | if ((key == KEY_DOWN) || (key == KEY_UP)) |
246
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
679 | go_menu(MENU_SYS_HALT); |
248
870d0be6880d
Removed two system menus that would not work correctly. All panel menus are complete now.
Michiel Broek <mbroek@mbse.eu>
parents:
247
diff
changeset
|
680 | if (key == KEY_CONFIRM) { |
247
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
681 | rc = system("/sbin/reboot"); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
682 | syslog(LOG_NOTICE, "System reboot from panel: /sbin/reboot rc=%d", rc); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
683 | go_menu(MENU_NONE); |
f3d0e9445fcd
Added profile panel menus and system panel menus
Michiel Broek <mbroek@mbse.eu>
parents:
246
diff
changeset
|
684 | } |
246
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
685 | break; |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
686 | } |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
687 | } |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
688 | #endif |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
689 | |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
690 | |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
691 | |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
692 | |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
693 | int main(int argc, char *argv[]) |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
694 | { |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
695 | int rc, c, i; |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
696 | pid_t frk; |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
697 | |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
698 | while (1) { |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
699 | int option_index = 0; |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
700 | static struct option long_options[] = { |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
701 | {"debug", 0, 0, 'c'}, |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
702 | {"help", 0, 0, 'h'}, |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
703 | {0, 0, 0, 0} |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
704 | }; |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
705 | |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
706 | c = getopt_long(argc, argv, "dh", long_options, &option_index); |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
707 | if (c == -1) |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
708 | break; |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
709 | |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
710 | switch (c) { |
75
4b976601737d
Writes a basic xml configuration next to the plain ascii config file
Michiel Broek <mbroek@mbse.eu>
parents:
74
diff
changeset
|
711 | case 'd': debug = TRUE; |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
712 | break; |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
713 | case 'h': help(); |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
714 | return 1; |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
715 | } |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
716 | } |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
717 | |
41
f534ace74eea
Code preparation for client/server communication
Michiel Broek <mbroek@mbse.eu>
parents:
40
diff
changeset
|
718 | openlog("thermferm", LOG_PID|LOG_CONS|LOG_NOWAIT, LOG_USER); |
f534ace74eea
Code preparation for client/server communication
Michiel Broek <mbroek@mbse.eu>
parents:
40
diff
changeset
|
719 | syslog(LOG_NOTICE, "mbsePi-apps thermferm v%s starting", VERSION); |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
720 | if (debug) |
41
f534ace74eea
Code preparation for client/server communication
Michiel Broek <mbroek@mbse.eu>
parents:
40
diff
changeset
|
721 | fprintf(stdout, "mbsePi-apps thermferm v%s starting\n", VERSION); |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
722 | |
86
3d7a241329e2
Using final user paths for log, configuration and profiles
Michiel Broek <mbroek@mbse.eu>
parents:
83
diff
changeset
|
723 | if (rdconfig()) { |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
724 | fprintf(stderr, "Error reading configuration\n"); |
268
dda91dfa4aa8
All syslog logging only to LOG_NOTICE
Michiel Broek <mbroek@mbse.eu>
parents:
267
diff
changeset
|
725 | syslog(LOG_NOTICE, "Error reading configuration: halted"); |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
726 | return 1; |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
727 | } |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
728 | |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
729 | /* |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
730 | * Catch all the signals we can, and ignore the rest. Note that SIGKILL can't be ignored |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
731 | * but that's live. This daemon should only be stopped by SIGTERM. |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
732 | * Don't catch SIGCHLD. |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
733 | */ |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
734 | for (i = 0; i < NSIG; i++) { |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
735 | if ((i != SIGCHLD) && (i != SIGKILL) && (i != SIGSTOP)) |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
736 | signal(i, (void (*))die); |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
737 | } |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
738 | |
66
805f1d285acd
Compiles with 1-wire bus on PC hardware
Michiel Broek <mbroek@mbse.eu>
parents:
64
diff
changeset
|
739 | #ifdef HAVE_WIRINGPI_H |
28
32ed1ea4d0b6
Coolers working with a hardcode reference
Michiel Broek <mbroek@mbse.eu>
parents:
27
diff
changeset
|
740 | if (wiringPiSetup () ) |
32ed1ea4d0b6
Coolers working with a hardcode reference
Michiel Broek <mbroek@mbse.eu>
parents:
27
diff
changeset
|
741 | return 1; |
32ed1ea4d0b6
Coolers working with a hardcode reference
Michiel Broek <mbroek@mbse.eu>
parents:
27
diff
changeset
|
742 | |
108 | 743 | if ((rc = initLCD (Config.lcd_cols, Config.lcd_rows))) { |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
744 | fprintf(stderr, "Cannot initialize LCD display, rc=%d\n", rc); |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
745 | return 1; |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
746 | } |
66
805f1d285acd
Compiles with 1-wire bus on PC hardware
Michiel Broek <mbroek@mbse.eu>
parents:
64
diff
changeset
|
747 | #endif |
28
32ed1ea4d0b6
Coolers working with a hardcode reference
Michiel Broek <mbroek@mbse.eu>
parents:
27
diff
changeset
|
748 | |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
749 | if (debug) { |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
750 | /* |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
751 | * For debugging run in foreground. |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
752 | */ |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
753 | rc = server(); |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
754 | } else { |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
755 | /* |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
756 | * Server initialization is complete. Now we can fork the |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
757 | * daemon and return to the user. We need to do a setpgrp |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
758 | * so that the daemon will no longer be assosiated with the |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
759 | * users control terminal. This is done before the fork, so |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
760 | * that the child will not be a process group leader. Otherwise, |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
761 | * if the child were to open a terminal, it would become |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
762 | * associated with that terminal as its control terminal. |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
763 | */ |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
764 | if ((pgrp = setpgid(0, 0)) == -1) { |
268
dda91dfa4aa8
All syslog logging only to LOG_NOTICE
Michiel Broek <mbroek@mbse.eu>
parents:
267
diff
changeset
|
765 | syslog(LOG_NOTICE, "setpgpid failed"); |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
766 | } |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
767 | |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
768 | frk = fork(); |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
769 | switch (frk) { |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
770 | case -1: |
268
dda91dfa4aa8
All syslog logging only to LOG_NOTICE
Michiel Broek <mbroek@mbse.eu>
parents:
267
diff
changeset
|
771 | syslog(LOG_NOTICE, "Daemon fork failed: %s", strerror(errno)); |
66
805f1d285acd
Compiles with 1-wire bus on PC hardware
Michiel Broek <mbroek@mbse.eu>
parents:
64
diff
changeset
|
772 | #ifdef HAVE_WIRINGPI_H |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
773 | stopLCD(); |
66
805f1d285acd
Compiles with 1-wire bus on PC hardware
Michiel Broek <mbroek@mbse.eu>
parents:
64
diff
changeset
|
774 | #endif |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
775 | exit(1); |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
776 | case 0: /* |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
777 | * Run the daemon |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
778 | */ |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
779 | fclose(stdin); |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
780 | if (open("/dev/null", O_RDONLY) != 0) { |
268
dda91dfa4aa8
All syslog logging only to LOG_NOTICE
Michiel Broek <mbroek@mbse.eu>
parents:
267
diff
changeset
|
781 | syslog(LOG_NOTICE, "Reopen of stdin to /dev/null failed"); |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
782 | _exit(2); |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
783 | } |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
784 | fclose(stdout); |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
785 | if (open("/dev/null", O_WRONLY | O_APPEND | O_CREAT,0600) != 1) { |
268
dda91dfa4aa8
All syslog logging only to LOG_NOTICE
Michiel Broek <mbroek@mbse.eu>
parents:
267
diff
changeset
|
786 | syslog(LOG_NOTICE, "Reopen of stdout to /dev/null failed"); |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
787 | _exit(2); |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
788 | } |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
789 | fclose(stderr); |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
790 | if (open("/dev/null", O_WRONLY | O_APPEND | O_CREAT,0600) != 2) { |
268
dda91dfa4aa8
All syslog logging only to LOG_NOTICE
Michiel Broek <mbroek@mbse.eu>
parents:
267
diff
changeset
|
791 | syslog(LOG_NOTICE, "Reopen of stderr to /dev/null failed"); |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
792 | _exit(2); |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
793 | } |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
794 | mypid = getpid(); |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
795 | rc = server(); |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
796 | break; |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
797 | /* Not reached */ |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
798 | default: |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
799 | /* |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
800 | * Here we detach this process and let the child |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
801 | * run the deamon process. |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
802 | */ |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
803 | syslog(LOG_NOTICE, "Starting daemon with pid %d", frk); |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
804 | exit(0); |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
805 | } |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
806 | } |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
807 | |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
808 | syslog(LOG_NOTICE, "Finished, rc=%d", rc); |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
809 | return rc; |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
810 | } |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
811 | |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
812 | |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
813 | |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
814 | int server(void) |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
815 | { |
397
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
816 | char buf[1024], *filename, target_lo[40], target_hi[40], heater[40], cooler[40], fan[40], door[40]; |
355
8f946f9d125a
Added logging of the room temperature.
Michiel Broek <mbroek@mbse.eu>
parents:
352
diff
changeset
|
817 | char use_heater[40], use_cooler[40], use_fan[40], room_temp[40]; |
64
2431965e8a8c
Write loglines only every 60 seconds
Michiel Broek <mbroek@mbse.eu>
parents:
63
diff
changeset
|
818 | time_t now, last = (time_t)0; |
104 | 819 | units_list *unit; |
194
9eaaba49450f
Added some ideas about profiles.
Michiel Broek <mbroek@mbse.eu>
parents:
189
diff
changeset
|
820 | profiles_list *profile; |
9eaaba49450f
Added some ideas about profiles.
Michiel Broek <mbroek@mbse.eu>
parents:
189
diff
changeset
|
821 | prof_step *step; |
312
7b0f819a3805
Added more precision to the unit low and high black window margins. Switched to PID routine from Pid without a PhD. The PID compute routine is now in the one second loop. The switch delay times are now in seconds, 0..720.
Michiel Broek <mbroek@mbse.eu>
parents:
311
diff
changeset
|
822 | int rc, run = 1, seconds = 0, minutes = 0, temp, deviation; |
276
a19cc3770f09
Profile progress logging now also shows the percentage done. The DEVICE PUT command logs all changed values.
Michiel Broek <mbroek@mbse.eu>
parents:
275
diff
changeset
|
823 | int run_seconds, run_minutes, run_hours, tot_minutes; |
105
a5a964148e34
Started code of roulating lcd display
Michiel Broek <mbroek@mbse.eu>
parents:
104
diff
changeset
|
824 | #ifdef HAVE_WIRINGPI_H |
a5a964148e34
Started code of roulating lcd display
Michiel Broek <mbroek@mbse.eu>
parents:
104
diff
changeset
|
825 | struct tm *tm; |
205 | 826 | int row, key; |
105
a5a964148e34
Started code of roulating lcd display
Michiel Broek <mbroek@mbse.eu>
parents:
104
diff
changeset
|
827 | #else |
74 | 828 | long t = 0; |
66
805f1d285acd
Compiles with 1-wire bus on PC hardware
Michiel Broek <mbroek@mbse.eu>
parents:
64
diff
changeset
|
829 | #endif |
398
efdfef1677d1
Fixed crash after profile is finished. Fixed error in UNIT GET output.
Michiel Broek <mbroek@mbse.eu>
parents:
397
diff
changeset
|
830 | int current_step, valid_step, time_until_now, previous_fridge_mode; |
397
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
831 | float previous_target_lo, previous_target_hi; |
316
73cd31dc6ce1
Moved pid function to separate files
Michiel Broek <mbroek@mbse.eu>
parents:
315
diff
changeset
|
832 | |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
833 | |
41
f534ace74eea
Code preparation for client/server communication
Michiel Broek <mbroek@mbse.eu>
parents:
40
diff
changeset
|
834 | if (lockprog((char *)"thermferm")) { |
268
dda91dfa4aa8
All syslog logging only to LOG_NOTICE
Michiel Broek <mbroek@mbse.eu>
parents:
267
diff
changeset
|
835 | syslog(LOG_NOTICE, "Can't lock"); |
34 | 836 | return 1; |
837 | } | |
838 | ||
350
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
839 | if ((rc = devices_detect())) { |
158 | 840 | syslog(LOG_NOTICE, "Detected %d new devices", rc); |
841 | wrconfig(); | |
842 | } | |
843 | ||
66
805f1d285acd
Compiles with 1-wire bus on PC hardware
Michiel Broek <mbroek@mbse.eu>
parents:
64
diff
changeset
|
844 | #ifdef HAVE_WIRINGPI_H |
164
f16def8472ba
Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents:
160
diff
changeset
|
845 | rc = piThreadCreate(my_devices_loop); |
f16def8472ba
Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents:
160
diff
changeset
|
846 | #else |
f16def8472ba
Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents:
160
diff
changeset
|
847 | rc = pthread_create(&threads[t], NULL, my_devices_loop, (void *)t ); |
f16def8472ba
Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents:
160
diff
changeset
|
848 | #endif |
f16def8472ba
Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents:
160
diff
changeset
|
849 | if (rc) { |
f16def8472ba
Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents:
160
diff
changeset
|
850 | fprintf(stderr, "my_devices_loop thread didn't start rc=%d\n", rc); |
268
dda91dfa4aa8
All syslog logging only to LOG_NOTICE
Michiel Broek <mbroek@mbse.eu>
parents:
267
diff
changeset
|
851 | syslog(LOG_NOTICE, "my_devices_loop thread didn't start rc=%d", rc); |
164
f16def8472ba
Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents:
160
diff
changeset
|
852 | #ifndef HAVE_WIRINGPI_H |
f16def8472ba
Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents:
160
diff
changeset
|
853 | } else { |
f16def8472ba
Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents:
160
diff
changeset
|
854 | t++; |
f16def8472ba
Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents:
160
diff
changeset
|
855 | #endif |
f16def8472ba
Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents:
160
diff
changeset
|
856 | } |
f16def8472ba
Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents:
160
diff
changeset
|
857 | |
f16def8472ba
Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents:
160
diff
changeset
|
858 | #ifdef HAVE_WIRINGPI_H |
43 | 859 | rc = piThreadCreate(my_server_loop); |
74 | 860 | #else |
75
4b976601737d
Writes a basic xml configuration next to the plain ascii config file
Michiel Broek <mbroek@mbse.eu>
parents:
74
diff
changeset
|
861 | rc = pthread_create(&threads[t], NULL, my_server_loop, (void *)t ); |
74 | 862 | #endif |
43 | 863 | if (rc) { |
864 | fprintf(stderr, "my_server_loop thread didn't start rc=%d\n", rc); | |
268
dda91dfa4aa8
All syslog logging only to LOG_NOTICE
Michiel Broek <mbroek@mbse.eu>
parents:
267
diff
changeset
|
865 | syslog(LOG_NOTICE, "my_server_loop thread didn't start rc=%d", rc); |
75
4b976601737d
Writes a basic xml configuration next to the plain ascii config file
Michiel Broek <mbroek@mbse.eu>
parents:
74
diff
changeset
|
866 | #ifndef HAVE_WIRINGPI_H |
4b976601737d
Writes a basic xml configuration next to the plain ascii config file
Michiel Broek <mbroek@mbse.eu>
parents:
74
diff
changeset
|
867 | } else { |
4b976601737d
Writes a basic xml configuration next to the plain ascii config file
Michiel Broek <mbroek@mbse.eu>
parents:
74
diff
changeset
|
868 | t++; |
4b976601737d
Writes a basic xml configuration next to the plain ascii config file
Michiel Broek <mbroek@mbse.eu>
parents:
74
diff
changeset
|
869 | #endif |
43 | 870 | } |
871 | ||
199 | 872 | #ifdef HAVE_WIRINGPI_H |
350
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
873 | if ((rc = piThreadCreate(my_panel_loop))) { |
199 | 874 | fprintf(stderr, "my_panel_loop thread didn't start rc=%d\n", rc); |
268
dda91dfa4aa8
All syslog logging only to LOG_NOTICE
Michiel Broek <mbroek@mbse.eu>
parents:
267
diff
changeset
|
875 | syslog(LOG_NOTICE, "my_panel_loop thread didn't start rc=%d", rc); |
199 | 876 | } |
877 | #endif | |
878 | ||
259
b7c967359771
Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents:
248
diff
changeset
|
879 | |
b7c967359771
Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents:
248
diff
changeset
|
880 | #ifdef USE_SIMULATOR |
b7c967359771
Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents:
248
diff
changeset
|
881 | #ifdef HAVE_WIRINGPI_H |
b7c967359771
Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents:
248
diff
changeset
|
882 | rc = piThreadCreate(my_simulator_loop); |
b7c967359771
Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents:
248
diff
changeset
|
883 | #else |
b7c967359771
Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents:
248
diff
changeset
|
884 | rc = pthread_create(&threads[t], NULL, my_simulator_loop, (void *)t ); |
b7c967359771
Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents:
248
diff
changeset
|
885 | #endif |
b7c967359771
Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents:
248
diff
changeset
|
886 | if (rc) { |
b7c967359771
Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents:
248
diff
changeset
|
887 | fprintf(stderr, "my_simulator_loop thread didn't start rc=%d\n", rc); |
268
dda91dfa4aa8
All syslog logging only to LOG_NOTICE
Michiel Broek <mbroek@mbse.eu>
parents:
267
diff
changeset
|
888 | syslog(LOG_NOTICE, "my_simulator_loop thread didn't start rc=%d", rc); |
259
b7c967359771
Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents:
248
diff
changeset
|
889 | #ifndef HAVE_WIRINGPI_H |
b7c967359771
Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents:
248
diff
changeset
|
890 | } else { |
b7c967359771
Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents:
248
diff
changeset
|
891 | t++; |
b7c967359771
Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents:
248
diff
changeset
|
892 | #endif |
b7c967359771
Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents:
248
diff
changeset
|
893 | } |
b7c967359771
Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents:
248
diff
changeset
|
894 | #endif |
b7c967359771
Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents:
248
diff
changeset
|
895 | |
182 | 896 | /* |
897 | * Initialize units for processing | |
898 | */ | |
899 | for (unit = Config.units; unit; unit = unit->next) { | |
900 | /* | |
901 | * Safety, turn everything off | |
902 | */ | |
350
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
903 | unit->heater_state = unit->cooler_state = unit->fan_state = unit->door_state = unit->light_state = 0; |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
904 | unit->heater_wait = unit->cooler_wait = unit->fan_wait = unit->light_wait = 0; |
195
b34a1b2421fb
Reset output when a different profile is selected. Better startup logging about the unit state. Added Beer, Fridge and partial Profile settings from the liveview weeb screen.
Michiel Broek <mbroek@mbse.eu>
parents:
194
diff
changeset
|
905 | if (unit->mode == UNITMODE_PROFILE) { |
219
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
906 | if (!unit->profile) |
362
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
907 | syslog(LOG_NOTICE, "Starting unit `%s' in profile mode, no profile defined.", unit->name); |
195
b34a1b2421fb
Reset output when a different profile is selected. Better startup logging about the unit state. Added Beer, Fridge and partial Profile settings from the liveview weeb screen.
Michiel Broek <mbroek@mbse.eu>
parents:
194
diff
changeset
|
908 | else |
362
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
909 | syslog(LOG_NOTICE, "Starting unit `%s' in profile state %s.", unit->name, PROFSTATE[unit->prof_state]); |
182 | 910 | } else if (unit->mode == UNITMODE_BEER) { |
362
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
911 | syslog(LOG_NOTICE, "Starting unit `%s' beer cooler at %.1f degrees", unit->name, unit->beer_set); |
182 | 912 | } else if (unit->mode == UNITMODE_FRIDGE) { |
362
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
913 | syslog(LOG_NOTICE, "Starting unit `%s' as refridgerator at %.1f degrees", unit->name, unit->fridge_set); |
182 | 914 | } else if (unit->mode == UNITMODE_NONE) { |
362
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
915 | syslog(LOG_NOTICE, "Starting unit `%s' in inactive state", unit->name); |
182 | 916 | } else { |
362
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
917 | syslog(LOG_NOTICE, "Starting unit `%s' in off state", unit->name); |
182 | 918 | } |
919 | } | |
920 | ||
111 | 921 | #ifdef HAVE_WIRINGPI_H |
241
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
922 | piLock(LOCK_LCD); |
238 | 923 | lcd_buf_write(1, (char *)" ThermFerm "); |
108 | 924 | lcd_buf_write(2, (char *)" Version %s ", VERSION); |
241
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
925 | piUnlock(LOCK_LCD); |
111 | 926 | #endif |
108 | 927 | |
350
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
928 | /* |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
929 | * Initialize logfiles for each unit |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
930 | */ |
104 | 931 | for (unit = Config.units; unit; unit = unit->next) { |
932 | if (unit->mode != UNITMODE_OFF) { | |
155
0d86f3c0a07b
Unit mode can switch between OFF and NONE.
Michiel Broek <mbroek@mbse.eu>
parents:
150
diff
changeset
|
933 | initlog(unit->name); |
104 | 934 | } |
935 | } | |
33
2357e8636a60
Added user log with temperatures and cooler state
Michiel Broek <mbroek@mbse.eu>
parents:
29
diff
changeset
|
936 | |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
937 | do { |
46
000399c64d3f
More client/server communications
Michiel Broek <mbroek@mbse.eu>
parents:
44
diff
changeset
|
938 | if (my_shutdown) |
000399c64d3f
More client/server communications
Michiel Broek <mbroek@mbse.eu>
parents:
44
diff
changeset
|
939 | run = 0; |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
940 | |
245
b01b6238eb67
You can now safely add and remove units on a running system.
Michiel Broek <mbroek@mbse.eu>
parents:
244
diff
changeset
|
941 | /* |
b01b6238eb67
You can now safely add and remove units on a running system.
Michiel Broek <mbroek@mbse.eu>
parents:
244
diff
changeset
|
942 | * Use to stop processing units. Should be used when a unit is |
b01b6238eb67
You can now safely add and remove units on a running system.
Michiel Broek <mbroek@mbse.eu>
parents:
244
diff
changeset
|
943 | * added or removed. |
b01b6238eb67
You can now safely add and remove units on a running system.
Michiel Broek <mbroek@mbse.eu>
parents:
244
diff
changeset
|
944 | */ |
b01b6238eb67
You can now safely add and remove units on a running system.
Michiel Broek <mbroek@mbse.eu>
parents:
244
diff
changeset
|
945 | if (run_pause) { |
b01b6238eb67
You can now safely add and remove units on a running system.
Michiel Broek <mbroek@mbse.eu>
parents:
244
diff
changeset
|
946 | run_hold = TRUE; |
b01b6238eb67
You can now safely add and remove units on a running system.
Michiel Broek <mbroek@mbse.eu>
parents:
244
diff
changeset
|
947 | syslog(LOG_NOTICE, "run_pause: entering hold state"); |
b01b6238eb67
You can now safely add and remove units on a running system.
Michiel Broek <mbroek@mbse.eu>
parents:
244
diff
changeset
|
948 | for (;;) { |
b01b6238eb67
You can now safely add and remove units on a running system.
Michiel Broek <mbroek@mbse.eu>
parents:
244
diff
changeset
|
949 | usleep(100000); |
b01b6238eb67
You can now safely add and remove units on a running system.
Michiel Broek <mbroek@mbse.eu>
parents:
244
diff
changeset
|
950 | if (! run_pause) |
b01b6238eb67
You can now safely add and remove units on a running system.
Michiel Broek <mbroek@mbse.eu>
parents:
244
diff
changeset
|
951 | break; |
b01b6238eb67
You can now safely add and remove units on a running system.
Michiel Broek <mbroek@mbse.eu>
parents:
244
diff
changeset
|
952 | } |
b01b6238eb67
You can now safely add and remove units on a running system.
Michiel Broek <mbroek@mbse.eu>
parents:
244
diff
changeset
|
953 | syslog(LOG_NOTICE, "run_pause: leaving hold state"); |
b01b6238eb67
You can now safely add and remove units on a running system.
Michiel Broek <mbroek@mbse.eu>
parents:
244
diff
changeset
|
954 | run_hold = FALSE; |
b01b6238eb67
You can now safely add and remove units on a running system.
Michiel Broek <mbroek@mbse.eu>
parents:
244
diff
changeset
|
955 | #ifdef HAVE_WIRINGPI_H |
b01b6238eb67
You can now safely add and remove units on a running system.
Michiel Broek <mbroek@mbse.eu>
parents:
244
diff
changeset
|
956 | /* |
b01b6238eb67
You can now safely add and remove units on a running system.
Michiel Broek <mbroek@mbse.eu>
parents:
244
diff
changeset
|
957 | * In case the LCD buffers were cleared, setup the first page. |
b01b6238eb67
You can now safely add and remove units on a running system.
Michiel Broek <mbroek@mbse.eu>
parents:
244
diff
changeset
|
958 | */ |
b01b6238eb67
You can now safely add and remove units on a running system.
Michiel Broek <mbroek@mbse.eu>
parents:
244
diff
changeset
|
959 | piLock(LOCK_LCD); |
b01b6238eb67
You can now safely add and remove units on a running system.
Michiel Broek <mbroek@mbse.eu>
parents:
244
diff
changeset
|
960 | lcd_buf_write(1, (char *)" ThermFerm "); |
b01b6238eb67
You can now safely add and remove units on a running system.
Michiel Broek <mbroek@mbse.eu>
parents:
244
diff
changeset
|
961 | lcd_buf_write(2, (char *)" Version %s ", VERSION); |
b01b6238eb67
You can now safely add and remove units on a running system.
Michiel Broek <mbroek@mbse.eu>
parents:
244
diff
changeset
|
962 | piUnlock(LOCK_LCD); |
b01b6238eb67
You can now safely add and remove units on a running system.
Michiel Broek <mbroek@mbse.eu>
parents:
244
diff
changeset
|
963 | #endif |
b01b6238eb67
You can now safely add and remove units on a running system.
Michiel Broek <mbroek@mbse.eu>
parents:
244
diff
changeset
|
964 | } |
b01b6238eb67
You can now safely add and remove units on a running system.
Michiel Broek <mbroek@mbse.eu>
parents:
244
diff
changeset
|
965 | |
64
2431965e8a8c
Write loglines only every 60 seconds
Michiel Broek <mbroek@mbse.eu>
parents:
63
diff
changeset
|
966 | now = time(NULL); |
104 | 967 | if (now != last) { |
189
cc2b04d4db99
Init logfile when a unit is turned on. Added comments for profile processing.
Michiel Broek <mbroek@mbse.eu>
parents:
188
diff
changeset
|
968 | /* |
cc2b04d4db99
Init logfile when a unit is turned on. Added comments for profile processing.
Michiel Broek <mbroek@mbse.eu>
parents:
188
diff
changeset
|
969 | * Each second |
cc2b04d4db99
Init logfile when a unit is turned on. Added comments for profile processing.
Michiel Broek <mbroek@mbse.eu>
parents:
188
diff
changeset
|
970 | */ |
64
2431965e8a8c
Write loglines only every 60 seconds
Michiel Broek <mbroek@mbse.eu>
parents:
63
diff
changeset
|
971 | last = now; |
104 | 972 | seconds++; |
973 | ||
105
a5a964148e34
Started code of roulating lcd display
Michiel Broek <mbroek@mbse.eu>
parents:
104
diff
changeset
|
974 | #ifdef HAVE_WIRINGPI_H |
108 | 975 | row = 3; |
976 | tm = localtime(&now); | |
241
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
977 | piLock(LOCK_LCD); |
108 | 978 | lcd_buf_write(row++, " %02d-%02d-%04d ", tm->tm_mday, tm->tm_mon + 1, tm->tm_year + 1900); |
979 | lcd_buf_write(row++, " %02d:%02d:%02d ", tm->tm_hour, tm->tm_min, tm->tm_sec); | |
241
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
980 | piUnlock(LOCK_LCD); |
182 | 981 | #endif |
105
a5a964148e34
Started code of roulating lcd display
Michiel Broek <mbroek@mbse.eu>
parents:
104
diff
changeset
|
982 | |
207 | 983 | if (Config.temp_address) { |
395
e32e83550963
Switched to new device read code. Removed the incomplete support for the DS2408 1-wire chip.
Michiel Broek <mbroek@mbse.eu>
parents:
367
diff
changeset
|
984 | rc = device_in(Config.temp_address, &temp); |
207 | 985 | if (rc == DEVPRESENT_YES) { |
986 | Config.temp_value = temp; | |
987 | Config.temp_state = 0; | |
988 | #ifdef HAVE_WIRINGPI_H | |
241
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
989 | piLock(LOCK_LCD); |
207 | 990 | lcd_buf_write(row++, "Room temp %.1f %cC ", Config.temp_value / 1000.0, 0xdf); |
241
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
991 | piUnlock(LOCK_LCD); |
207 | 992 | #endif |
993 | } else if (rc == DEVPRESENT_ERROR) { | |
994 | Config.temp_state = 1; | |
995 | } else { | |
996 | Config.temp_state = 2; | |
997 | } | |
998 | } | |
999 | ||
1000 | if (Config.hum_address) { | |
395
e32e83550963
Switched to new device read code. Removed the incomplete support for the DS2408 1-wire chip.
Michiel Broek <mbroek@mbse.eu>
parents:
367
diff
changeset
|
1001 | rc = device_in(Config.hum_address, &temp); |
207 | 1002 | if (rc == DEVPRESENT_YES) { |
1003 | Config.hum_value = temp; | |
1004 | Config.hum_state = 0; | |
1005 | #ifdef HAVE_WIRINGPI_H | |
241
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
1006 | piLock(LOCK_LCD); |
207 | 1007 | lcd_buf_write(row++, " Humidity %.1f %% ", Config.hum_value / 1000.0, 0xdf); |
241
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
1008 | piUnlock(LOCK_LCD); |
207 | 1009 | #endif |
1010 | } else if (rc == DEVPRESENT_ERROR) { | |
1011 | Config.hum_state = 1; | |
1012 | } else { | |
1013 | Config.hum_state = 2; | |
1014 | } | |
1015 | } | |
1016 | ||
108 | 1017 | for (unit = Config.units; unit; unit = unit->next) { |
182 | 1018 | #ifdef HAVE_WIRINGPI_H |
241
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
1019 | piLock(LOCK_LCD); |
184 | 1020 | lcd_buf_write(row++, "Unit %s ", unit->name); |
1021 | lcd_buf_write(row++, "Mode %s ", UNITMODE[unit->mode]); | |
241
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
1022 | piUnlock(LOCK_LCD); |
182 | 1023 | #endif |
1024 | ||
1025 | if (unit->air_address) { | |
395
e32e83550963
Switched to new device read code. Removed the incomplete support for the DS2408 1-wire chip.
Michiel Broek <mbroek@mbse.eu>
parents:
367
diff
changeset
|
1026 | rc = device_in(unit->air_address, &temp); |
182 | 1027 | if (rc == DEVPRESENT_YES) { |
1028 | /* | |
1029 | * It is possible to have read errors or extreme values. | |
1030 | * This can happen with bad connections so we compare the | |
1031 | * value with the previous one. If the difference is too | |
1032 | * much, we don't send that value. That also means that if | |
1033 | * the next value is ok again, it will be marked invalid too. | |
1034 | * Maximum error is 40 degrees for now. | |
1035 | */ | |
1036 | deviation = 40000; | |
1037 | if ((unit->air_temperature == 0) || | |
1038 | (unit->air_temperature && (temp > (int)unit->air_temperature - deviation) && (temp < ((int)unit->air_temperature + deviation)))) { | |
1039 | unit->air_temperature = temp; | |
1040 | unit->air_state = 0; | |
188
4fc17ef4593f
Added heat/cool state to the LCD display
Michiel Broek <mbroek@mbse.eu>
parents:
185
diff
changeset
|
1041 | #ifdef HAVE_WIRINGPI_H |
241
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
1042 | piLock(LOCK_LCD); |
188
4fc17ef4593f
Added heat/cool state to the LCD display
Michiel Broek <mbroek@mbse.eu>
parents:
185
diff
changeset
|
1043 | lcd_buf_write(row++, " Air %.3f %cC ", unit->air_temperature / 1000.0, 0xdf); |
241
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
1044 | piUnlock(LOCK_LCD); |
188
4fc17ef4593f
Added heat/cool state to the LCD display
Michiel Broek <mbroek@mbse.eu>
parents:
185
diff
changeset
|
1045 | #endif |
182 | 1046 | } else { |
1047 | syslog(LOG_NOTICE, "deviation error deviation=%d, old=%d new=%d", deviation, unit->air_temperature, temp); | |
1048 | if (debug) { | |
1049 | fprintf(stdout, "deviation error deviation=%d, old=%d new=%d\n", deviation, unit->air_temperature, temp); | |
1050 | } | |
1051 | } | |
1052 | } else if (rc == DEVPRESENT_ERROR) { | |
1053 | unit->air_state = 1; | |
1054 | } else { | |
1055 | unit->air_state = 2; | |
1056 | } | |
1057 | } | |
1058 | ||
1059 | if (unit->beer_address) { | |
395
e32e83550963
Switched to new device read code. Removed the incomplete support for the DS2408 1-wire chip.
Michiel Broek <mbroek@mbse.eu>
parents:
367
diff
changeset
|
1060 | rc = device_in(unit->beer_address, &temp); |
182 | 1061 | if (rc == DEVPRESENT_YES) { |
1062 | deviation = 40000; | |
1063 | if ((unit->beer_temperature == 0) || | |
1064 | (unit->beer_temperature && (temp > (int)unit->beer_temperature - deviation) && (temp < ((int)unit->beer_temperature + deviation)))) { | |
1065 | unit->beer_temperature = temp; | |
1066 | unit->beer_state = 0; | |
188
4fc17ef4593f
Added heat/cool state to the LCD display
Michiel Broek <mbroek@mbse.eu>
parents:
185
diff
changeset
|
1067 | #ifdef HAVE_WIRINGPI_H |
241
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
1068 | piLock(LOCK_LCD); |
188
4fc17ef4593f
Added heat/cool state to the LCD display
Michiel Broek <mbroek@mbse.eu>
parents:
185
diff
changeset
|
1069 | lcd_buf_write(row++, "Beer %.3f %cC ", unit->beer_temperature / 1000.0, 0xdf); |
241
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
1070 | piUnlock(LOCK_LCD); |
188
4fc17ef4593f
Added heat/cool state to the LCD display
Michiel Broek <mbroek@mbse.eu>
parents:
185
diff
changeset
|
1071 | #endif |
182 | 1072 | } else { |
1073 | syslog(LOG_NOTICE, "deviation error deviation=%d, old=%d new=%d", deviation, unit->beer_temperature, temp); | |
1074 | if (debug) { | |
1075 | fprintf(stdout, "deviation error deviation=%d, old=%d new=%d\n", deviation, unit->beer_temperature, temp); | |
1076 | } | |
1077 | } | |
1078 | } else if (rc == DEVPRESENT_ERROR) { | |
1079 | unit->beer_state = 1; | |
1080 | } else { | |
1081 | unit->beer_state = 2; | |
1082 | } | |
1083 | } | |
184 | 1084 | |
350
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1085 | if (unit->door_address) { |
395
e32e83550963
Switched to new device read code. Removed the incomplete support for the DS2408 1-wire chip.
Michiel Broek <mbroek@mbse.eu>
parents:
367
diff
changeset
|
1086 | rc = device_in(unit->door_address, &temp); |
350
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1087 | if (rc == DEVPRESENT_YES) { |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1088 | if (temp) { |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1089 | if (unit->door_state == 0) { |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1090 | syslog(LOG_NOTICE, "Unit `%s' door closed", unit->name); |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1091 | unit->door_state = 1; |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1092 | } |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1093 | } else { |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1094 | if (unit->door_state) { |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1095 | syslog(LOG_NOTICE, "Unit `%s' door opened", unit->name); |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1096 | unit->door_state = 0; |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1097 | } |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1098 | } |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1099 | } else { |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1100 | unit->door_state = 1; |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1101 | } |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1102 | } else { |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1103 | /* |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1104 | * No door switch, say door is closed. |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1105 | */ |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1106 | unit->door_state = 1; |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1107 | } |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1108 | |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1109 | if (unit->psu_address) { |
395
e32e83550963
Switched to new device read code. Removed the incomplete support for the DS2408 1-wire chip.
Michiel Broek <mbroek@mbse.eu>
parents:
367
diff
changeset
|
1110 | rc = device_in(unit->psu_address, &temp); |
350
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1111 | if (rc == DEVPRESENT_YES) { |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1112 | if (temp) { |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1113 | if (unit->psu_state == 0) { |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1114 | syslog(LOG_NOTICE, "Unit `%s' PSU (12 volt) is on", unit->name); |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1115 | unit->psu_state = 1; |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1116 | } |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1117 | } else { |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1118 | if (unit->psu_state) { |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1119 | syslog(LOG_NOTICE, "Unit `%s' PSU (12 volt) is off", unit->name); |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1120 | unit->psu_state = 0; |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1121 | } |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1122 | } |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1123 | } else { |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1124 | unit->psu_state = 1; |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1125 | } |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1126 | } else { |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1127 | unit->psu_state = 1; |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1128 | } |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1129 | |
184 | 1130 | /* |
189
cc2b04d4db99
Init logfile when a unit is turned on. Added comments for profile processing.
Michiel Broek <mbroek@mbse.eu>
parents:
188
diff
changeset
|
1131 | * Handle profile |
cc2b04d4db99
Init logfile when a unit is turned on. Added comments for profile processing.
Michiel Broek <mbroek@mbse.eu>
parents:
188
diff
changeset
|
1132 | */ |
cc2b04d4db99
Init logfile when a unit is turned on. Added comments for profile processing.
Michiel Broek <mbroek@mbse.eu>
parents:
188
diff
changeset
|
1133 | if ((unit->mode == UNITMODE_PROFILE) && (unit->profile)) { |
cc2b04d4db99
Init logfile when a unit is turned on. Added comments for profile processing.
Michiel Broek <mbroek@mbse.eu>
parents:
188
diff
changeset
|
1134 | /* |
cc2b04d4db99
Init logfile when a unit is turned on. Added comments for profile processing.
Michiel Broek <mbroek@mbse.eu>
parents:
188
diff
changeset
|
1135 | * unit->profile - uuid of the selected profile. |
cc2b04d4db99
Init logfile when a unit is turned on. Added comments for profile processing.
Michiel Broek <mbroek@mbse.eu>
parents:
188
diff
changeset
|
1136 | * unit->prof_started - start time or 0 if not yet running. |
cc2b04d4db99
Init logfile when a unit is turned on. Added comments for profile processing.
Michiel Broek <mbroek@mbse.eu>
parents:
188
diff
changeset
|
1137 | * unit->prof_state - PROFILE_OFF|PROFILE_PAUSE|PROFILE_RUN|PROFILE_DONE |
cc2b04d4db99
Init logfile when a unit is turned on. Added comments for profile processing.
Michiel Broek <mbroek@mbse.eu>
parents:
188
diff
changeset
|
1138 | * unit->prof_target - Calculated target temperature. |
194
9eaaba49450f
Added some ideas about profiles.
Michiel Broek <mbroek@mbse.eu>
parents:
189
diff
changeset
|
1139 | * unit->prof_paused - Internal pause counter. |
289
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1140 | * unit->prof_peak_abs - Peak temperature of the beer. |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1141 | * unit->prof_peak_rel - Peak temperature between beer and fridge. |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1142 | * unit->prof_primary_done - time when primary fermentation was over the peak. |
189
cc2b04d4db99
Init logfile when a unit is turned on. Added comments for profile processing.
Michiel Broek <mbroek@mbse.eu>
parents:
188
diff
changeset
|
1143 | */ |
194
9eaaba49450f
Added some ideas about profiles.
Michiel Broek <mbroek@mbse.eu>
parents:
189
diff
changeset
|
1144 | for (profile = Config.profiles; profile; profile = profile->next) { |
9eaaba49450f
Added some ideas about profiles.
Michiel Broek <mbroek@mbse.eu>
parents:
189
diff
changeset
|
1145 | if (strcmp(unit->profile, profile->uuid) == 0) { |
219
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1146 | |
398
efdfef1677d1
Fixed crash after profile is finished. Fixed error in UNIT GET output.
Michiel Broek <mbroek@mbse.eu>
parents:
397
diff
changeset
|
1147 | /* |
efdfef1677d1
Fixed crash after profile is finished. Fixed error in UNIT GET output.
Michiel Broek <mbroek@mbse.eu>
parents:
397
diff
changeset
|
1148 | * Safe defaults |
efdfef1677d1
Fixed crash after profile is finished. Fixed error in UNIT GET output.
Michiel Broek <mbroek@mbse.eu>
parents:
397
diff
changeset
|
1149 | */ |
efdfef1677d1
Fixed crash after profile is finished. Fixed error in UNIT GET output.
Michiel Broek <mbroek@mbse.eu>
parents:
397
diff
changeset
|
1150 | unit->prof_target_lo = profile->inittemp_lo; |
efdfef1677d1
Fixed crash after profile is finished. Fixed error in UNIT GET output.
Michiel Broek <mbroek@mbse.eu>
parents:
397
diff
changeset
|
1151 | unit->prof_target_hi = profile->inittemp_hi; |
efdfef1677d1
Fixed crash after profile is finished. Fixed error in UNIT GET output.
Michiel Broek <mbroek@mbse.eu>
parents:
397
diff
changeset
|
1152 | unit->prof_fridge_mode = 0; |
efdfef1677d1
Fixed crash after profile is finished. Fixed error in UNIT GET output.
Michiel Broek <mbroek@mbse.eu>
parents:
397
diff
changeset
|
1153 | |
194
9eaaba49450f
Added some ideas about profiles.
Michiel Broek <mbroek@mbse.eu>
parents:
189
diff
changeset
|
1154 | switch (unit->prof_state) { |
9eaaba49450f
Added some ideas about profiles.
Michiel Broek <mbroek@mbse.eu>
parents:
189
diff
changeset
|
1155 | case PROFILE_OFF: |
284
9e6fb5aed618
Profile progress is visible in the web interface
Michiel Broek <mbroek@mbse.eu>
parents:
277
diff
changeset
|
1156 | unit->prof_percent = 0; |
194
9eaaba49450f
Added some ideas about profiles.
Michiel Broek <mbroek@mbse.eu>
parents:
189
diff
changeset
|
1157 | break; |
9eaaba49450f
Added some ideas about profiles.
Michiel Broek <mbroek@mbse.eu>
parents:
189
diff
changeset
|
1158 | case PROFILE_PAUSE: |
9eaaba49450f
Added some ideas about profiles.
Michiel Broek <mbroek@mbse.eu>
parents:
189
diff
changeset
|
1159 | /* |
219
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1160 | * Keep current temperature, measure pause time. For |
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1161 | * temperature fall thru. |
194
9eaaba49450f
Added some ideas about profiles.
Michiel Broek <mbroek@mbse.eu>
parents:
189
diff
changeset
|
1162 | */ |
219
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1163 | unit->prof_paused++; |
194
9eaaba49450f
Added some ideas about profiles.
Michiel Broek <mbroek@mbse.eu>
parents:
189
diff
changeset
|
1164 | case PROFILE_RUN: |
9eaaba49450f
Added some ideas about profiles.
Michiel Broek <mbroek@mbse.eu>
parents:
189
diff
changeset
|
1165 | /* |
288 | 1166 | * Calculate current profile step and desired temperature. |
1167 | * When all steps are done, set state to PROFILE_DONE. | |
194
9eaaba49450f
Added some ideas about profiles.
Michiel Broek <mbroek@mbse.eu>
parents:
189
diff
changeset
|
1168 | */ |
397
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1169 | previous_target_lo = profile->inittemp_lo; |
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1170 | previous_target_hi = profile->inittemp_hi; |
398
efdfef1677d1
Fixed crash after profile is finished. Fixed error in UNIT GET output.
Michiel Broek <mbroek@mbse.eu>
parents:
397
diff
changeset
|
1171 | previous_fridge_mode = profile->fridge_mode; |
277
6f9a7cca8f19
Fixed profile progess percentage
Michiel Broek <mbroek@mbse.eu>
parents:
276
diff
changeset
|
1172 | time_until_now = current_step = 0; |
194
9eaaba49450f
Added some ideas about profiles.
Michiel Broek <mbroek@mbse.eu>
parents:
189
diff
changeset
|
1173 | run_seconds = (int)(now - unit->prof_started - unit->prof_paused); |
9eaaba49450f
Added some ideas about profiles.
Michiel Broek <mbroek@mbse.eu>
parents:
189
diff
changeset
|
1174 | run_minutes = run_seconds / 60; |
9eaaba49450f
Added some ideas about profiles.
Michiel Broek <mbroek@mbse.eu>
parents:
189
diff
changeset
|
1175 | run_hours = run_minutes / 60; |
9eaaba49450f
Added some ideas about profiles.
Michiel Broek <mbroek@mbse.eu>
parents:
189
diff
changeset
|
1176 | if (debug) |
221
91a5e7281c35
Fixed end of profile steps, didn't go to the PROFILE_DONE state.
Michiel Broek <mbroek@mbse.eu>
parents:
219
diff
changeset
|
1177 | fprintf(stdout, "run_HMS=%d,%d,%d ", run_hours, run_minutes, run_seconds); |
219
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1178 | |
277
6f9a7cca8f19
Fixed profile progess percentage
Michiel Broek <mbroek@mbse.eu>
parents:
276
diff
changeset
|
1179 | /* |
289
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1180 | * Primary fermentation tests |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1181 | */ |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1182 | if ((unit->beer_temperature / 1000.0) > unit->prof_peak_abs) |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1183 | unit->prof_peak_abs = unit->beer_temperature / 1000.0; |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1184 | if (((unit->beer_temperature - unit->air_temperature) / 1000.0) > unit->prof_peak_rel) |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1185 | unit->prof_peak_rel = (unit->beer_temperature - unit->air_temperature) / 1000.0; |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1186 | if (unit->prof_primary_done == 0) { |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1187 | if (unit->cooler_address) { |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1188 | /* |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1189 | * There is a cooler. If the difference between the beer and air temperature |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1190 | * drops we assume the primary fermentation is done. |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1191 | */ |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1192 | if (((unit->beer_temperature - unit->air_temperature) / 1000.0) < (unit->prof_peak_rel - 0.5)) { |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1193 | unit->prof_primary_done = time(NULL); |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1194 | syslog(LOG_NOTICE, "Profile `%s' primary fermentation is ready (cooler mode)", profile->name); |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1195 | } |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1196 | } else { |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1197 | /* |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1198 | * This method works if the unit has no cooling or if the profile allowd the |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1199 | * beer temperature to rise freely. |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1200 | */ |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1201 | if ((unit->beer_temperature / 1000.0) < (unit->prof_peak_abs - 0.5)) { |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1202 | unit->prof_primary_done = time(NULL); |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1203 | syslog(LOG_NOTICE, "Profile `%s' primary fermentation is ready (free rise mode)", profile->name); |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1204 | } |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1205 | } |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1206 | } |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1207 | |
d810df0df36a
Added code to detect primary fermentation
Michiel Broek <mbroek@mbse.eu>
parents:
288
diff
changeset
|
1208 | /* |
277
6f9a7cca8f19
Fixed profile progess percentage
Michiel Broek <mbroek@mbse.eu>
parents:
276
diff
changeset
|
1209 | * See how long this profile will take |
6f9a7cca8f19
Fixed profile progess percentage
Michiel Broek <mbroek@mbse.eu>
parents:
276
diff
changeset
|
1210 | */ |
6f9a7cca8f19
Fixed profile progess percentage
Michiel Broek <mbroek@mbse.eu>
parents:
276
diff
changeset
|
1211 | tot_minutes = 0; |
6f9a7cca8f19
Fixed profile progess percentage
Michiel Broek <mbroek@mbse.eu>
parents:
276
diff
changeset
|
1212 | for (step = profile->steps; step; step = step->next) { |
6f9a7cca8f19
Fixed profile progess percentage
Michiel Broek <mbroek@mbse.eu>
parents:
276
diff
changeset
|
1213 | tot_minutes += ((step->steptime + step->resttime) * 60); |
6f9a7cca8f19
Fixed profile progess percentage
Michiel Broek <mbroek@mbse.eu>
parents:
276
diff
changeset
|
1214 | } |
6f9a7cca8f19
Fixed profile progess percentage
Michiel Broek <mbroek@mbse.eu>
parents:
276
diff
changeset
|
1215 | |
221
91a5e7281c35
Fixed end of profile steps, didn't go to the PROFILE_DONE state.
Michiel Broek <mbroek@mbse.eu>
parents:
219
diff
changeset
|
1216 | valid_step = FALSE; |
91a5e7281c35
Fixed end of profile steps, didn't go to the PROFILE_DONE state.
Michiel Broek <mbroek@mbse.eu>
parents:
219
diff
changeset
|
1217 | for (step = profile->steps; step; step = step->next) { |
219
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1218 | /* |
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1219 | * step->steptime |
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1220 | * step->resttime |
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1221 | * step->target |
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1222 | */ |
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1223 | current_step++; |
221
91a5e7281c35
Fixed end of profile steps, didn't go to the PROFILE_DONE state.
Michiel Broek <mbroek@mbse.eu>
parents:
219
diff
changeset
|
1224 | if ((run_hours >= time_until_now) && (run_hours < (time_until_now + step->steptime + step->resttime))) { |
219
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1225 | /* |
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1226 | * This is our current step |
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1227 | */ |
221
91a5e7281c35
Fixed end of profile steps, didn't go to the PROFILE_DONE state.
Michiel Broek <mbroek@mbse.eu>
parents:
219
diff
changeset
|
1228 | valid_step = TRUE; |
401
0226d0f37bb7
More fixes for profiles temperature window. Added the sliding beer/air target switch.
Michiel Broek <mbroek@mbse.eu>
parents:
398
diff
changeset
|
1229 | // unit->prof_fridge_mode = step->fridge_mode; |
219
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1230 | if (debug) |
397
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1231 | fprintf(stdout, "step=%d step_pos=%d step=%d/%d target=%.1f..%.1f ", |
221
91a5e7281c35
Fixed end of profile steps, didn't go to the PROFILE_DONE state.
Michiel Broek <mbroek@mbse.eu>
parents:
219
diff
changeset
|
1232 | current_step, run_hours - time_until_now, |
397
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1233 | step->steptime, step->resttime, step->target_lo, step->target_hi); |
219
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1234 | if ((run_hours - time_until_now) < step->steptime) { |
397
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1235 | unit->prof_target_lo = previous_target_lo + (((run_minutes - (time_until_now * 60.0)) / (step->steptime * 60.0)) * (step->target_lo - previous_target_lo)); |
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1236 | unit->prof_target_hi = previous_target_hi + (((run_minutes - (time_until_now * 60.0)) / (step->steptime * 60.0)) * (step->target_hi - previous_target_hi)); |
401
0226d0f37bb7
More fixes for profiles temperature window. Added the sliding beer/air target switch.
Michiel Broek <mbroek@mbse.eu>
parents:
398
diff
changeset
|
1237 | if (step->fridge_mode > previous_fridge_mode) { |
0226d0f37bb7
More fixes for profiles temperature window. Added the sliding beer/air target switch.
Michiel Broek <mbroek@mbse.eu>
parents:
398
diff
changeset
|
1238 | unit->prof_fridge_mode = (((run_minutes - (time_until_now * 60)) * 100) / (step->steptime * 60)); |
0226d0f37bb7
More fixes for profiles temperature window. Added the sliding beer/air target switch.
Michiel Broek <mbroek@mbse.eu>
parents:
398
diff
changeset
|
1239 | } else if (step->fridge_mode < previous_fridge_mode) { |
0226d0f37bb7
More fixes for profiles temperature window. Added the sliding beer/air target switch.
Michiel Broek <mbroek@mbse.eu>
parents:
398
diff
changeset
|
1240 | unit->prof_fridge_mode = 100 - (((run_minutes - (time_until_now * 60)) * 100) / (step->steptime * 60)); |
0226d0f37bb7
More fixes for profiles temperature window. Added the sliding beer/air target switch.
Michiel Broek <mbroek@mbse.eu>
parents:
398
diff
changeset
|
1241 | } else { |
0226d0f37bb7
More fixes for profiles temperature window. Added the sliding beer/air target switch.
Michiel Broek <mbroek@mbse.eu>
parents:
398
diff
changeset
|
1242 | unit->prof_fridge_mode = step->fridge_mode; |
0226d0f37bb7
More fixes for profiles temperature window. Added the sliding beer/air target switch.
Michiel Broek <mbroek@mbse.eu>
parents:
398
diff
changeset
|
1243 | } |
0226d0f37bb7
More fixes for profiles temperature window. Added the sliding beer/air target switch.
Michiel Broek <mbroek@mbse.eu>
parents:
398
diff
changeset
|
1244 | if (debug) |
397
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1245 | fprintf(stdout, "tempshift=%.1f..%.1f minutes=%d duration=%d temp_move=%.3f..%.3f ", |
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1246 | step->target_lo - previous_target_lo, |
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1247 | step->target_hi - previous_target_hi, |
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1248 | run_minutes - (time_until_now * 60), |
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1249 | step->steptime * 60, unit->prof_target_lo, unit->prof_target_hi); |
219
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1250 | } else { |
397
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1251 | unit->prof_target_lo = step->target_lo; |
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1252 | unit->prof_target_hi = step->target_hi; |
398
efdfef1677d1
Fixed crash after profile is finished. Fixed error in UNIT GET output.
Michiel Broek <mbroek@mbse.eu>
parents:
397
diff
changeset
|
1253 | unit->prof_fridge_mode = step->fridge_mode; |
397
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1254 | if (debug) |
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1255 | fprintf(stdout, "resting target=%.1f..%.1f ", step->target_lo, step->target_hi); |
219
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1256 | } |
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1257 | break; |
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1258 | } |
221
91a5e7281c35
Fixed end of profile steps, didn't go to the PROFILE_DONE state.
Michiel Broek <mbroek@mbse.eu>
parents:
219
diff
changeset
|
1259 | time_until_now += step->steptime + step->resttime; |
397
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1260 | previous_target_lo = step->target_lo; |
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1261 | previous_target_hi = step->target_hi; |
398
efdfef1677d1
Fixed crash after profile is finished. Fixed error in UNIT GET output.
Michiel Broek <mbroek@mbse.eu>
parents:
397
diff
changeset
|
1262 | previous_fridge_mode = step->fridge_mode; |
194
9eaaba49450f
Added some ideas about profiles.
Michiel Broek <mbroek@mbse.eu>
parents:
189
diff
changeset
|
1263 | } |
219
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1264 | if (debug) |
274
111b0e9663dc
Added logging if profile state is changed via the web interface. Log profile progress each half hour in syslog. Profile resttime steps 0 hours is allowed, meaning resttime or steptime must be set for a valid step. Updated the helptext on the web page.
Michiel Broek <mbroek@mbse.eu>
parents:
273
diff
changeset
|
1265 | fprintf(stdout, " %s %02d:%02d\n", valid_step ? "TRUE":"FALSE", minutes, seconds); |
221
91a5e7281c35
Fixed end of profile steps, didn't go to the PROFILE_DONE state.
Michiel Broek <mbroek@mbse.eu>
parents:
219
diff
changeset
|
1266 | |
274
111b0e9663dc
Added logging if profile state is changed via the web interface. Log profile progress each half hour in syslog. Profile resttime steps 0 hours is allowed, meaning resttime or steptime must be set for a valid step. Updated the helptext on the web page.
Michiel Broek <mbroek@mbse.eu>
parents:
273
diff
changeset
|
1267 | if (valid_step == TRUE) { |
284
9e6fb5aed618
Profile progress is visible in the web interface
Michiel Broek <mbroek@mbse.eu>
parents:
277
diff
changeset
|
1268 | unit->prof_percent = (100 * run_minutes) / tot_minutes; |
276
a19cc3770f09
Profile progress logging now also shows the percentage done. The DEVICE PUT command logs all changed values.
Michiel Broek <mbroek@mbse.eu>
parents:
275
diff
changeset
|
1269 | if (((minutes == 10) || (minutes == 40)) && (seconds == 1)) { |
397
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1270 | syslog(LOG_NOTICE, "Profile `%s' running %dd %02d:%02d in step %d, %d%% done, target %s %.3f..%.3f degrees", |
276
a19cc3770f09
Profile progress logging now also shows the percentage done. The DEVICE PUT command logs all changed values.
Michiel Broek <mbroek@mbse.eu>
parents:
275
diff
changeset
|
1271 | profile->name, run_hours / 24, run_hours % 24, run_minutes % 60, current_step, |
397
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1272 | unit->prof_percent, unit->prof_fridge_mode ? (char *)"air":(char *)"beer", |
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1273 | unit->prof_target_lo, unit->prof_target_hi); |
274
111b0e9663dc
Added logging if profile state is changed via the web interface. Log profile progress each half hour in syslog. Profile resttime steps 0 hours is allowed, meaning resttime or steptime must be set for a valid step. Updated the helptext on the web page.
Michiel Broek <mbroek@mbse.eu>
parents:
273
diff
changeset
|
1274 | } |
111b0e9663dc
Added logging if profile state is changed via the web interface. Log profile progress each half hour in syslog. Profile resttime steps 0 hours is allowed, meaning resttime or steptime must be set for a valid step. Updated the helptext on the web page.
Michiel Broek <mbroek@mbse.eu>
parents:
273
diff
changeset
|
1275 | } else { |
111b0e9663dc
Added logging if profile state is changed via the web interface. Log profile progress each half hour in syslog. Profile resttime steps 0 hours is allowed, meaning resttime or steptime must be set for a valid step. Updated the helptext on the web page.
Michiel Broek <mbroek@mbse.eu>
parents:
273
diff
changeset
|
1276 | /* |
111b0e9663dc
Added logging if profile state is changed via the web interface. Log profile progress each half hour in syslog. Profile resttime steps 0 hours is allowed, meaning resttime or steptime must be set for a valid step. Updated the helptext on the web page.
Michiel Broek <mbroek@mbse.eu>
parents:
273
diff
changeset
|
1277 | * No more steps to do |
111b0e9663dc
Added logging if profile state is changed via the web interface. Log profile progress each half hour in syslog. Profile resttime steps 0 hours is allowed, meaning resttime or steptime must be set for a valid step. Updated the helptext on the web page.
Michiel Broek <mbroek@mbse.eu>
parents:
273
diff
changeset
|
1278 | */ |
221
91a5e7281c35
Fixed end of profile steps, didn't go to the PROFILE_DONE state.
Michiel Broek <mbroek@mbse.eu>
parents:
219
diff
changeset
|
1279 | unit->prof_state = PROFILE_DONE; |
284
9e6fb5aed618
Profile progress is visible in the web interface
Michiel Broek <mbroek@mbse.eu>
parents:
277
diff
changeset
|
1280 | unit->prof_percent = 100; |
221
91a5e7281c35
Fixed end of profile steps, didn't go to the PROFILE_DONE state.
Michiel Broek <mbroek@mbse.eu>
parents:
219
diff
changeset
|
1281 | syslog(LOG_NOTICE, "Profile `%s' is done", profile->name); |
91a5e7281c35
Fixed end of profile steps, didn't go to the PROFILE_DONE state.
Michiel Broek <mbroek@mbse.eu>
parents:
219
diff
changeset
|
1282 | } |
194
9eaaba49450f
Added some ideas about profiles.
Michiel Broek <mbroek@mbse.eu>
parents:
189
diff
changeset
|
1283 | break; |
221
91a5e7281c35
Fixed end of profile steps, didn't go to the PROFILE_DONE state.
Michiel Broek <mbroek@mbse.eu>
parents:
219
diff
changeset
|
1284 | |
194
9eaaba49450f
Added some ideas about profiles.
Michiel Broek <mbroek@mbse.eu>
parents:
189
diff
changeset
|
1285 | case PROFILE_DONE: |
9eaaba49450f
Added some ideas about profiles.
Michiel Broek <mbroek@mbse.eu>
parents:
189
diff
changeset
|
1286 | /* |
219
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1287 | * Keep this state, set target temperature to the last step. |
194
9eaaba49450f
Added some ideas about profiles.
Michiel Broek <mbroek@mbse.eu>
parents:
189
diff
changeset
|
1288 | */ |
397
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1289 | previous_target_lo = profile->inittemp_lo; |
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1290 | previous_target_hi = profile->inittemp_hi; |
398
efdfef1677d1
Fixed crash after profile is finished. Fixed error in UNIT GET output.
Michiel Broek <mbroek@mbse.eu>
parents:
397
diff
changeset
|
1291 | previous_fridge_mode = profile->fridge_mode; |
219
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1292 | for (step = profile->steps; step; step = step->next) { |
398
efdfef1677d1
Fixed crash after profile is finished. Fixed error in UNIT GET output.
Michiel Broek <mbroek@mbse.eu>
parents:
397
diff
changeset
|
1293 | if ((step->steptime + step->resttime) == 0) |
219
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1294 | break; |
397
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1295 | previous_target_lo = step->target_lo; |
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1296 | previous_target_hi = step->target_hi; |
398
efdfef1677d1
Fixed crash after profile is finished. Fixed error in UNIT GET output.
Michiel Broek <mbroek@mbse.eu>
parents:
397
diff
changeset
|
1297 | previous_fridge_mode = step->fridge_mode; |
397
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1298 | |
219
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1299 | } |
397
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1300 | unit->prof_target_lo = previous_target_lo; |
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1301 | unit->prof_target_hi = previous_target_hi; |
398
efdfef1677d1
Fixed crash after profile is finished. Fixed error in UNIT GET output.
Michiel Broek <mbroek@mbse.eu>
parents:
397
diff
changeset
|
1302 | unit->prof_fridge_mode = previous_fridge_mode; |
284
9e6fb5aed618
Profile progress is visible in the web interface
Michiel Broek <mbroek@mbse.eu>
parents:
277
diff
changeset
|
1303 | unit->prof_percent = 100; |
194
9eaaba49450f
Added some ideas about profiles.
Michiel Broek <mbroek@mbse.eu>
parents:
189
diff
changeset
|
1304 | break; |
9eaaba49450f
Added some ideas about profiles.
Michiel Broek <mbroek@mbse.eu>
parents:
189
diff
changeset
|
1305 | } /* switch */ |
9eaaba49450f
Added some ideas about profiles.
Michiel Broek <mbroek@mbse.eu>
parents:
189
diff
changeset
|
1306 | } |
9eaaba49450f
Added some ideas about profiles.
Michiel Broek <mbroek@mbse.eu>
parents:
189
diff
changeset
|
1307 | } |
402
6b9f0c3c7f63
Set sane default profile values when not using a profile.
Michiel Broek <mbroek@mbse.eu>
parents:
401
diff
changeset
|
1308 | } else { |
6b9f0c3c7f63
Set sane default profile values when not using a profile.
Michiel Broek <mbroek@mbse.eu>
parents:
401
diff
changeset
|
1309 | /* |
6b9f0c3c7f63
Set sane default profile values when not using a profile.
Michiel Broek <mbroek@mbse.eu>
parents:
401
diff
changeset
|
1310 | * Set some sane values |
6b9f0c3c7f63
Set sane default profile values when not using a profile.
Michiel Broek <mbroek@mbse.eu>
parents:
401
diff
changeset
|
1311 | */ |
6b9f0c3c7f63
Set sane default profile values when not using a profile.
Michiel Broek <mbroek@mbse.eu>
parents:
401
diff
changeset
|
1312 | unit->prof_target_lo = 19.8; |
6b9f0c3c7f63
Set sane default profile values when not using a profile.
Michiel Broek <mbroek@mbse.eu>
parents:
401
diff
changeset
|
1313 | unit->prof_target_hi = 20.2; |
6b9f0c3c7f63
Set sane default profile values when not using a profile.
Michiel Broek <mbroek@mbse.eu>
parents:
401
diff
changeset
|
1314 | unit->prof_fridge_mode = 0; |
189
cc2b04d4db99
Init logfile when a unit is turned on. Added comments for profile processing.
Michiel Broek <mbroek@mbse.eu>
parents:
188
diff
changeset
|
1315 | } |
cc2b04d4db99
Init logfile when a unit is turned on. Added comments for profile processing.
Michiel Broek <mbroek@mbse.eu>
parents:
188
diff
changeset
|
1316 | |
cc2b04d4db99
Init logfile when a unit is turned on. Added comments for profile processing.
Michiel Broek <mbroek@mbse.eu>
parents:
188
diff
changeset
|
1317 | /* |
184 | 1318 | * Manual switching |
1319 | */ | |
1320 | if (unit->mode == UNITMODE_NONE) { | |
1321 | device_out(unit->heater_address, unit->heater_state); | |
1322 | device_out(unit->cooler_address, unit->cooler_state); | |
1323 | device_out(unit->fan_address, unit->fan_state); | |
1324 | } | |
293 | 1325 | |
1326 | /* | |
1327 | * Usage counters | |
1328 | */ | |
1329 | if (unit->heater_address && unit->heater_state) | |
1330 | unit->heater_usage++; | |
1331 | if (unit->cooler_address && unit->cooler_state) | |
1332 | unit->cooler_usage++; | |
1333 | if (unit->fan_address && unit->fan_state) | |
1334 | unit->fan_usage++; | |
350
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1335 | if (unit->light_address && unit->light_state) |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1336 | unit->light_usage++; |
293 | 1337 | |
188
4fc17ef4593f
Added heat/cool state to the LCD display
Michiel Broek <mbroek@mbse.eu>
parents:
185
diff
changeset
|
1338 | #ifdef HAVE_WIRINGPI_H |
219
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1339 | if (unit->heater_address && unit->cooler_address) { |
241
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
1340 | piLock(LOCK_LCD); |
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
1341 | if (unit->heater_state) { |
219
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1342 | lcd_buf_write(row++, "Heater On "); |
241
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
1343 | } else if (unit->cooler_state) { |
219
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1344 | lcd_buf_write(row++, "Cooler On "); |
241
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
1345 | } else { |
219
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1346 | lcd_buf_write(row++, "Standby "); |
241
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
1347 | } |
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
1348 | piUnlock(LOCK_LCD); |
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
1349 | piLock(LOCK_LCD); |
219
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1350 | switch (unit->mode) { |
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1351 | case UNITMODE_BEER: lcd_buf_write(row++, "Target %.1f %cC ", unit->beer_set, 0xdf); |
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1352 | break; |
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1353 | case UNITMODE_FRIDGE: lcd_buf_write(row++, "Target %.1f %cC ", unit->fridge_set, 0xdf); |
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1354 | break; |
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1355 | case UNITMODE_PROFILE: if (unit->prof_state != PROFILE_OFF) |
406
44566f986f76
Fixed compiling on a real RPi.
Michiel Broek <mbroek@mbse.eu>
parents:
405
diff
changeset
|
1356 | lcd_buf_write(row++, "Tgt %.1f..%.1f %cC ", unit->prof_target_lo, unit->prof_target_hi, 0xdf); |
219
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1357 | else |
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1358 | lcd_buf_write(row++, "Target not set "); |
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1359 | break; |
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1360 | default: lcd_buf_write(row++, "Target not set "); |
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1361 | } |
241
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
1362 | piUnlock(LOCK_LCD); |
219
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1363 | } else { |
241
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
1364 | piLock(LOCK_LCD); |
219
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1365 | if (unit->heater_address) { |
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1366 | lcd_buf_write(row++, "Heat %s ", unit->heater_state ? "On ":"Off"); |
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1367 | } |
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1368 | if (unit->cooler_address) { |
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1369 | lcd_buf_write(row++, "Cool %s ", unit->cooler_state ? "On ":"Off"); |
ae720212accc
Added profile running and steps handling.
Michiel Broek <mbroek@mbse.eu>
parents:
215
diff
changeset
|
1370 | } |
241
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
1371 | piUnlock(LOCK_LCD); |
188
4fc17ef4593f
Added heat/cool state to the LCD display
Michiel Broek <mbroek@mbse.eu>
parents:
185
diff
changeset
|
1372 | } |
4fc17ef4593f
Added heat/cool state to the LCD display
Michiel Broek <mbroek@mbse.eu>
parents:
185
diff
changeset
|
1373 | #endif |
108 | 1374 | |
350
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1375 | /* |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1376 | * Interior lights |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1377 | */ |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1378 | if (unit->light_address) { |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1379 | if (unit->door_state && unit->light_state) { |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1380 | if (unit->light_wait > 0) { |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1381 | unit->light_wait--; |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1382 | } else { |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1383 | unit->light_state = 0; |
352
a8e106c95db4
Improved regular logging, disabled some debug logging.
Michiel Broek <mbroek@mbse.eu>
parents:
350
diff
changeset
|
1384 | syslog(LOG_NOTICE, "Unit `%s' lights On => Off", unit->name); |
350
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1385 | } |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1386 | } |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1387 | if (!unit->door_state && !unit->light_state) { |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1388 | unit->light_wait = unit->light_delay; /* No delay to turn lights on */ |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1389 | unit->light_state = 1; |
352
a8e106c95db4
Improved regular logging, disabled some debug logging.
Michiel Broek <mbroek@mbse.eu>
parents:
350
diff
changeset
|
1390 | syslog(LOG_NOTICE, "Unit `%s' lights Off => On", unit->name); |
350
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1391 | } |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1392 | device_out(unit->light_address, unit->light_state); |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1393 | } |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1394 | |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1395 | /* |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1396 | * Temperature control in this unit |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1397 | */ |
312
7b0f819a3805
Added more precision to the unit low and high black window margins. Switched to PID routine from Pid without a PhD. The PID compute routine is now in the one second loop. The switch delay times are now in seconds, 0..720.
Michiel Broek <mbroek@mbse.eu>
parents:
311
diff
changeset
|
1398 | if ((unit->mode == UNITMODE_FRIDGE) || (unit->mode == UNITMODE_BEER) || (unit->mode == UNITMODE_PROFILE)) { |
7b0f819a3805
Added more precision to the unit low and high black window margins. Switched to PID routine from Pid without a PhD. The PID compute routine is now in the one second loop. The switch delay times are now in seconds, 0..720.
Michiel Broek <mbroek@mbse.eu>
parents:
311
diff
changeset
|
1399 | |
362
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
1400 | /* |
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
1401 | * Set both PID's to their input values. |
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
1402 | */ |
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
1403 | unit->PID_cool->Mode = unit->PID_heat->Mode = PID_MODE_NONE; |
312
7b0f819a3805
Added more precision to the unit low and high black window margins. Switched to PID routine from Pid without a PhD. The PID compute routine is now in the one second loop. The switch delay times are now in seconds, 0..720.
Michiel Broek <mbroek@mbse.eu>
parents:
311
diff
changeset
|
1404 | if (unit->mode == UNITMODE_FRIDGE) { |
401
0226d0f37bb7
More fixes for profiles temperature window. Added the sliding beer/air target switch.
Michiel Broek <mbroek@mbse.eu>
parents:
398
diff
changeset
|
1405 | unit->PID_cool->SetP = unit->fridge_set; |
0226d0f37bb7
More fixes for profiles temperature window. Added the sliding beer/air target switch.
Michiel Broek <mbroek@mbse.eu>
parents:
398
diff
changeset
|
1406 | unit->PID_heat->SetP = unit->fridge_set; |
362
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
1407 | unit->PID_cool->Input = unit->PID_heat->Input = unit->air_temperature / 1000.0; |
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
1408 | unit->PID_cool->Mode = unit->PID_heat->Mode = PID_MODE_BOO; |
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
1409 | } else if (unit->mode == UNITMODE_BEER) { |
401
0226d0f37bb7
More fixes for profiles temperature window. Added the sliding beer/air target switch.
Michiel Broek <mbroek@mbse.eu>
parents:
398
diff
changeset
|
1410 | unit->PID_cool->SetP = unit->beer_set; |
0226d0f37bb7
More fixes for profiles temperature window. Added the sliding beer/air target switch.
Michiel Broek <mbroek@mbse.eu>
parents:
398
diff
changeset
|
1411 | unit->PID_heat->SetP = unit->beer_set; |
362
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
1412 | unit->PID_cool->Input = unit->PID_heat->Input = unit->beer_temperature / 1000.0; |
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
1413 | unit->PID_cool->Mode = unit->PID_heat->Mode = PID_MODE_AUTO; |
312
7b0f819a3805
Added more precision to the unit low and high black window margins. Switched to PID routine from Pid without a PhD. The PID compute routine is now in the one second loop. The switch delay times are now in seconds, 0..720.
Michiel Broek <mbroek@mbse.eu>
parents:
311
diff
changeset
|
1414 | } else if (unit->mode == UNITMODE_PROFILE) { |
401
0226d0f37bb7
More fixes for profiles temperature window. Added the sliding beer/air target switch.
Michiel Broek <mbroek@mbse.eu>
parents:
398
diff
changeset
|
1415 | double usetemp; |
397
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1416 | unit->PID_cool->SetP = unit->prof_target_hi; |
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1417 | unit->PID_heat->SetP = unit->prof_target_lo; |
401
0226d0f37bb7
More fixes for profiles temperature window. Added the sliding beer/air target switch.
Michiel Broek <mbroek@mbse.eu>
parents:
398
diff
changeset
|
1418 | /* |
0226d0f37bb7
More fixes for profiles temperature window. Added the sliding beer/air target switch.
Michiel Broek <mbroek@mbse.eu>
parents:
398
diff
changeset
|
1419 | * Get percentage to use from each thermometer. unit->prof_fridge_mode = 0..100 |
0226d0f37bb7
More fixes for profiles temperature window. Added the sliding beer/air target switch.
Michiel Broek <mbroek@mbse.eu>
parents:
398
diff
changeset
|
1420 | */ |
0226d0f37bb7
More fixes for profiles temperature window. Added the sliding beer/air target switch.
Michiel Broek <mbroek@mbse.eu>
parents:
398
diff
changeset
|
1421 | usetemp = ((unit->prof_fridge_mode * (unit->air_temperature / 1000.0)) + |
0226d0f37bb7
More fixes for profiles temperature window. Added the sliding beer/air target switch.
Michiel Broek <mbroek@mbse.eu>
parents:
398
diff
changeset
|
1422 | ((100 - unit->prof_fridge_mode) * (unit->beer_temperature / 1000.0))) / 100.0; |
0226d0f37bb7
More fixes for profiles temperature window. Added the sliding beer/air target switch.
Michiel Broek <mbroek@mbse.eu>
parents:
398
diff
changeset
|
1423 | if (debug) |
0226d0f37bb7
More fixes for profiles temperature window. Added the sliding beer/air target switch.
Michiel Broek <mbroek@mbse.eu>
parents:
398
diff
changeset
|
1424 | fprintf(stdout, " fridge_mode=%d measured=%.3f %.3f => %.3f\n", unit->prof_fridge_mode, |
0226d0f37bb7
More fixes for profiles temperature window. Added the sliding beer/air target switch.
Michiel Broek <mbroek@mbse.eu>
parents:
398
diff
changeset
|
1425 | unit->air_temperature / 1000.0, unit->beer_temperature / 1000.0, usetemp); |
0226d0f37bb7
More fixes for profiles temperature window. Added the sliding beer/air target switch.
Michiel Broek <mbroek@mbse.eu>
parents:
398
diff
changeset
|
1426 | unit->PID_cool->Input = unit->PID_heat->Input = usetemp; |
362
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
1427 | unit->PID_cool->Mode = unit->PID_heat->Mode = PID_MODE_AUTO; |
314 | 1428 | } |
316
73cd31dc6ce1
Moved pid function to separate files
Michiel Broek <mbroek@mbse.eu>
parents:
315
diff
changeset
|
1429 | |
362
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
1430 | /* |
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
1431 | * PID controller compute |
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
1432 | */ |
364
2f9bbbcd2407
Tuning PID code. Samll changes on the unit web page.
Michiel Broek <mbroek@mbse.eu>
parents:
363
diff
changeset
|
1433 | UpdatePID(unit->PID_heat); |
2f9bbbcd2407
Tuning PID code. Samll changes on the unit web page.
Michiel Broek <mbroek@mbse.eu>
parents:
363
diff
changeset
|
1434 | UpdatePID(unit->PID_cool); |
2f9bbbcd2407
Tuning PID code. Samll changes on the unit web page.
Michiel Broek <mbroek@mbse.eu>
parents:
363
diff
changeset
|
1435 | |
2f9bbbcd2407
Tuning PID code. Samll changes on the unit web page.
Michiel Broek <mbroek@mbse.eu>
parents:
363
diff
changeset
|
1436 | /* |
2f9bbbcd2407
Tuning PID code. Samll changes on the unit web page.
Michiel Broek <mbroek@mbse.eu>
parents:
363
diff
changeset
|
1437 | * Logging |
2f9bbbcd2407
Tuning PID code. Samll changes on the unit web page.
Michiel Broek <mbroek@mbse.eu>
parents:
363
diff
changeset
|
1438 | */ |
362
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
1439 | if (unit->heater_address) { |
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
1440 | if (debug) |
363
468ec0d96cce
Back to the old PID algorythm. Version 0.3.1.
Michiel Broek <mbroek@mbse.eu>
parents:
362
diff
changeset
|
1441 | fprintf(stdout, "Heat: sp=%.2f Input=%.2f iState=%.2f Err=%.2f Out=%.2f\n", |
468ec0d96cce
Back to the old PID algorythm. Version 0.3.1.
Michiel Broek <mbroek@mbse.eu>
parents:
362
diff
changeset
|
1442 | unit->PID_heat->SetP, unit->PID_heat->Input, unit->PID_heat->iState, unit->PID_heat->Err, unit->PID_heat->OutP); |
364
2f9bbbcd2407
Tuning PID code. Samll changes on the unit web page.
Michiel Broek <mbroek@mbse.eu>
parents:
363
diff
changeset
|
1443 | if (((unit->PID_heat->OutP >= 2) && unit->heater_address) || (seconds == 60) || unit->heater_state) { |
363
468ec0d96cce
Back to the old PID algorythm. Version 0.3.1.
Michiel Broek <mbroek@mbse.eu>
parents:
362
diff
changeset
|
1444 | syslog(LOG_NOTICE, "Heat: sp=%.2f Input=%.2f iState=%.2f Err=%.2f Out=%.2f", |
468ec0d96cce
Back to the old PID algorythm. Version 0.3.1.
Michiel Broek <mbroek@mbse.eu>
parents:
362
diff
changeset
|
1445 | unit->PID_heat->SetP, unit->PID_heat->Input, unit->PID_heat->iState, unit->PID_heat->Err, unit->PID_heat->OutP); |
362
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
1446 | } |
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
1447 | } |
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
1448 | if (unit->cooler_address) { |
317
18dd6eadba31
Simple temperature control in fridge mode.
Michiel Broek <mbroek@mbse.eu>
parents:
316
diff
changeset
|
1449 | if (debug) |
363
468ec0d96cce
Back to the old PID algorythm. Version 0.3.1.
Michiel Broek <mbroek@mbse.eu>
parents:
362
diff
changeset
|
1450 | fprintf(stdout, "Cool: sp=%.2f Input=%.2f iState=%.2f Err=%.2f Out=%.2f\n", |
468ec0d96cce
Back to the old PID algorythm. Version 0.3.1.
Michiel Broek <mbroek@mbse.eu>
parents:
362
diff
changeset
|
1451 | unit->PID_cool->SetP, unit->PID_cool->Input, unit->PID_cool->iState, unit->PID_cool->Err, unit->PID_cool->OutP); |
364
2f9bbbcd2407
Tuning PID code. Samll changes on the unit web page.
Michiel Broek <mbroek@mbse.eu>
parents:
363
diff
changeset
|
1452 | if (((unit->PID_cool->OutP >= 2) && unit->cooler_address) || (seconds == 60) || unit->cooler_state) { |
363
468ec0d96cce
Back to the old PID algorythm. Version 0.3.1.
Michiel Broek <mbroek@mbse.eu>
parents:
362
diff
changeset
|
1453 | syslog(LOG_NOTICE, "Cool: sp=%.2f Input=%.2f iState=%.2f Err=%.2f Out=%.2f", |
468ec0d96cce
Back to the old PID algorythm. Version 0.3.1.
Michiel Broek <mbroek@mbse.eu>
parents:
362
diff
changeset
|
1454 | unit->PID_cool->SetP, unit->PID_cool->Input, unit->PID_cool->iState, unit->PID_cool->Err, unit->PID_cool->OutP); |
317
18dd6eadba31
Simple temperature control in fridge mode.
Michiel Broek <mbroek@mbse.eu>
parents:
316
diff
changeset
|
1455 | } |
362
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
1456 | } |
317
18dd6eadba31
Simple temperature control in fridge mode.
Michiel Broek <mbroek@mbse.eu>
parents:
316
diff
changeset
|
1457 | |
364
2f9bbbcd2407
Tuning PID code. Samll changes on the unit web page.
Michiel Broek <mbroek@mbse.eu>
parents:
363
diff
changeset
|
1458 | /* |
2f9bbbcd2407
Tuning PID code. Samll changes on the unit web page.
Michiel Broek <mbroek@mbse.eu>
parents:
363
diff
changeset
|
1459 | * Deadlock |
2f9bbbcd2407
Tuning PID code. Samll changes on the unit web page.
Michiel Broek <mbroek@mbse.eu>
parents:
363
diff
changeset
|
1460 | */ |
362
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
1461 | if (unit->PID_cool->OutP && unit->PID_heat->OutP) { |
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
1462 | syslog(LOG_NOTICE, "Heat and Cool lockdown"); |
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
1463 | unit->PID_cool->OutP = unit->PID_heat->OutP = 0.0; |
316
73cd31dc6ce1
Moved pid function to separate files
Michiel Broek <mbroek@mbse.eu>
parents:
315
diff
changeset
|
1464 | } |
73cd31dc6ce1
Moved pid function to separate files
Michiel Broek <mbroek@mbse.eu>
parents:
315
diff
changeset
|
1465 | |
318
aad7789a40f2
Better protection, fixed fridge mode.
Michiel Broek <mbroek@mbse.eu>
parents:
317
diff
changeset
|
1466 | if (unit->heater_address && ! unit->cooler_state) { |
364
2f9bbbcd2407
Tuning PID code. Samll changes on the unit web page.
Michiel Broek <mbroek@mbse.eu>
parents:
363
diff
changeset
|
1467 | if (unit->PID_heat->OutP >= 2) { |
313 | 1468 | if (unit->heater_wait < unit->heater_delay) { |
1469 | unit->heater_wait++; | |
273
b863e0147296
Fixed unit edit heater/cooler delay values. Heater and Cooler start/stop now use a different algorithm.
Michiel Broek <mbroek@mbse.eu>
parents:
270
diff
changeset
|
1470 | } else { |
362
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
1471 | int power = round(unit->PID_heat->OutP); |
319
8c454ec761a8
Actuators behind a PID now use power percentage instead of always 100%
Michiel Broek <mbroek@mbse.eu>
parents:
318
diff
changeset
|
1472 | if (unit->heater_state != power) { |
352
a8e106c95db4
Improved regular logging, disabled some debug logging.
Michiel Broek <mbroek@mbse.eu>
parents:
350
diff
changeset
|
1473 | syslog(LOG_NOTICE, "Unit `%s' heater %d%% => %d%%", unit->name, unit->heater_state, power); |
319
8c454ec761a8
Actuators behind a PID now use power percentage instead of always 100%
Michiel Broek <mbroek@mbse.eu>
parents:
318
diff
changeset
|
1474 | unit->heater_state = power; |
273
b863e0147296
Fixed unit edit heater/cooler delay values. Heater and Cooler start/stop now use a different algorithm.
Michiel Broek <mbroek@mbse.eu>
parents:
270
diff
changeset
|
1475 | } |
234
b69438db19ec
Added loggin when a device is switched on or off in beer/fridge/profile mode.
Michiel Broek <mbroek@mbse.eu>
parents:
233
diff
changeset
|
1476 | } |
313 | 1477 | } else { |
1478 | if (unit->heater_wait > 0) { | |
1479 | unit->heater_wait--; | |
1480 | } else { | |
1481 | if (unit->heater_state) { | |
352
a8e106c95db4
Improved regular logging, disabled some debug logging.
Michiel Broek <mbroek@mbse.eu>
parents:
350
diff
changeset
|
1482 | syslog(LOG_NOTICE, "Unit `%s' heater On => Off", unit->name); |
313 | 1483 | unit->heater_state = 0; |
1484 | } | |
1485 | } | |
1486 | } | |
350
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1487 | if (unit->door_state) |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1488 | device_out(unit->heater_address, unit->heater_state); |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1489 | else |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1490 | device_out(unit->heater_address, 0); |
312
7b0f819a3805
Added more precision to the unit low and high black window margins. Switched to PID routine from Pid without a PhD. The PID compute routine is now in the one second loop. The switch delay times are now in seconds, 0..720.
Michiel Broek <mbroek@mbse.eu>
parents:
311
diff
changeset
|
1491 | } |
350
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1492 | |
318
aad7789a40f2
Better protection, fixed fridge mode.
Michiel Broek <mbroek@mbse.eu>
parents:
317
diff
changeset
|
1493 | if (unit->cooler_address && ! unit->heater_state) { |
364
2f9bbbcd2407
Tuning PID code. Samll changes on the unit web page.
Michiel Broek <mbroek@mbse.eu>
parents:
363
diff
changeset
|
1494 | if (unit->PID_cool->OutP >= 2) { |
313 | 1495 | if (unit->cooler_wait < unit->cooler_delay) { |
1496 | unit->cooler_wait++; | |
273
b863e0147296
Fixed unit edit heater/cooler delay values. Heater and Cooler start/stop now use a different algorithm.
Michiel Broek <mbroek@mbse.eu>
parents:
270
diff
changeset
|
1497 | } else { |
362
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
1498 | int power = round(unit->PID_cool->OutP); |
319
8c454ec761a8
Actuators behind a PID now use power percentage instead of always 100%
Michiel Broek <mbroek@mbse.eu>
parents:
318
diff
changeset
|
1499 | if (unit->cooler_state != power) { |
352
a8e106c95db4
Improved regular logging, disabled some debug logging.
Michiel Broek <mbroek@mbse.eu>
parents:
350
diff
changeset
|
1500 | syslog(LOG_NOTICE, "Unit `%s' cooler %d%% => %d%%", unit->name, unit->cooler_state, power); |
319
8c454ec761a8
Actuators behind a PID now use power percentage instead of always 100%
Michiel Broek <mbroek@mbse.eu>
parents:
318
diff
changeset
|
1501 | unit->cooler_state = power; |
270
df81d583c2c3
The PID commands have an adjustable delay, default 5 minutes
Michiel Broek <mbroek@mbse.eu>
parents:
268
diff
changeset
|
1502 | } |
234
b69438db19ec
Added loggin when a device is switched on or off in beer/fridge/profile mode.
Michiel Broek <mbroek@mbse.eu>
parents:
233
diff
changeset
|
1503 | } |
313 | 1504 | } else { |
1505 | if (unit->cooler_wait > 0) { | |
1506 | unit->cooler_wait--; | |
1507 | } else { | |
1508 | if (unit->cooler_state) { | |
352
a8e106c95db4
Improved regular logging, disabled some debug logging.
Michiel Broek <mbroek@mbse.eu>
parents:
350
diff
changeset
|
1509 | syslog(LOG_NOTICE, "Unit `%s' cooler On => Off", unit->name); |
313 | 1510 | unit->cooler_state = 0; |
1511 | } | |
1512 | } | |
1513 | } | |
350
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1514 | if (unit->door_state) |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1515 | device_out(unit->cooler_address, unit->cooler_state); |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1516 | else |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1517 | device_out(unit->cooler_address, 0); |
312
7b0f819a3805
Added more precision to the unit low and high black window margins. Switched to PID routine from Pid without a PhD. The PID compute routine is now in the one second loop. The switch delay times are now in seconds, 0..720.
Michiel Broek <mbroek@mbse.eu>
parents:
311
diff
changeset
|
1518 | } |
348 | 1519 | |
1520 | if ((unit->heater_address || unit->cooler_address) && unit->fan_address) { | |
313 | 1521 | /* |
348 | 1522 | * If there is a heater or cooler and we have a fan, turn fan on if |
349 | 1523 | * cooling or heating. The Fan has a start/stop delay. |
313 | 1524 | */ |
348 | 1525 | if ((unit->heater_address && unit->heater_state) || (unit->cooler_address && unit->cooler_state)) { |
349 | 1526 | if (unit->fan_wait < unit->fan_delay) { |
1527 | unit->fan_wait++; | |
1528 | } else { | |
1529 | if (! unit->fan_state) { | |
352
a8e106c95db4
Improved regular logging, disabled some debug logging.
Michiel Broek <mbroek@mbse.eu>
parents:
350
diff
changeset
|
1530 | syslog(LOG_NOTICE, "Unit `%s' Fan Off => On", unit->name); |
349 | 1531 | unit->fan_state = 100; |
1532 | } | |
1533 | } | |
313 | 1534 | } else { |
349 | 1535 | if (unit->fan_wait > 0) { |
1536 | unit->fan_wait--; | |
1537 | } else { | |
1538 | if (unit->fan_state) { | |
352
a8e106c95db4
Improved regular logging, disabled some debug logging.
Michiel Broek <mbroek@mbse.eu>
parents:
350
diff
changeset
|
1539 | syslog(LOG_NOTICE, "Unit `%s' Fan On => Off", unit->name); |
349 | 1540 | unit->fan_state = 0; |
1541 | } | |
1542 | } | |
313 | 1543 | } |
350
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1544 | if (unit->door_state) |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1545 | device_out(unit->fan_address, unit->fan_state); |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1546 | else |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1547 | device_out(unit->fan_address, 0); |
312
7b0f819a3805
Added more precision to the unit low and high black window margins. Switched to PID routine from Pid without a PhD. The PID compute routine is now in the one second loop. The switch delay times are now in seconds, 0..720.
Michiel Broek <mbroek@mbse.eu>
parents:
311
diff
changeset
|
1548 | } |
7b0f819a3805
Added more precision to the unit low and high black window margins. Switched to PID routine from Pid without a PhD. The PID compute routine is now in the one second loop. The switch delay times are now in seconds, 0..720.
Michiel Broek <mbroek@mbse.eu>
parents:
311
diff
changeset
|
1549 | } else { |
362
c92651a54969
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents:
361
diff
changeset
|
1550 | unit->PID_cool->Mode = unit->PID_heat->Mode = PID_MODE_NONE; |
349 | 1551 | } /* fridge beer or profile mode */ |
1552 | } /* for units */ | |
182 | 1553 | |
204
9a14d6b2de7f
Fixed LCD display updates. Better key routines.
Michiel Broek <mbroek@mbse.eu>
parents:
200
diff
changeset
|
1554 | #ifdef HAVE_WIRINGPI_H |
244
2f868eaefec2
Selecting units in setup does now work. Menu select variables are protected with thread locking.
Michiel Broek <mbroek@mbse.eu>
parents:
241
diff
changeset
|
1555 | piLock(LOCK_MENU); |
241
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
1556 | if (setupmenu == MENU_NONE) { |
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
1557 | piLock(LOCK_LCD); |
205 | 1558 | lcd_buf_show(); |
241
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
1559 | piUnlock(LOCK_LCD); |
4ba138737bf4
Added thread locks to all LCD access functions. This seems to have fixed the LCD corruption problems.
Michiel Broek <mbroek@mbse.eu>
parents:
240
diff
changeset
|
1560 | } |
244
2f868eaefec2
Selecting units in setup does now work. Menu select variables are protected with thread locking.
Michiel Broek <mbroek@mbse.eu>
parents:
241
diff
changeset
|
1561 | piUnlock(LOCK_MENU); |
204
9a14d6b2de7f
Fixed LCD display updates. Better key routines.
Michiel Broek <mbroek@mbse.eu>
parents:
200
diff
changeset
|
1562 | #endif |
205 | 1563 | |
182 | 1564 | if (seconds == 60) { |
1565 | seconds = 0; | |
1566 | ||
1567 | /* | |
1568 | * Log temperature and status every minute if unit is active. | |
1569 | */ | |
1570 | for (unit = Config.units; unit; unit = unit->next) { | |
1571 | if (unit->mode != UNITMODE_OFF) { | |
176
8c7d87a2c094
Initial code for a simple PID controller.
Michiel Broek <mbroek@mbse.eu>
parents:
175
diff
changeset
|
1572 | |
397
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1573 | snprintf(target_lo, 39, "NA"); |
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1574 | snprintf(target_hi, 39, "NA"); |
105
a5a964148e34
Started code of roulating lcd display
Michiel Broek <mbroek@mbse.eu>
parents:
104
diff
changeset
|
1575 | snprintf(heater, 39, "NA"); |
a5a964148e34
Started code of roulating lcd display
Michiel Broek <mbroek@mbse.eu>
parents:
104
diff
changeset
|
1576 | snprintf(cooler, 39, "NA"); |
a5a964148e34
Started code of roulating lcd display
Michiel Broek <mbroek@mbse.eu>
parents:
104
diff
changeset
|
1577 | snprintf(fan, 39, "NA"); |
a5a964148e34
Started code of roulating lcd display
Michiel Broek <mbroek@mbse.eu>
parents:
104
diff
changeset
|
1578 | snprintf(door, 39, "NA"); |
297
a70527a4e56a
Added usage counters to the beer logfiles. Bumped to version 0.2.4
Michiel Broek <mbroek@mbse.eu>
parents:
293
diff
changeset
|
1579 | snprintf(use_heater, 39, "NA"); |
a70527a4e56a
Added usage counters to the beer logfiles. Bumped to version 0.2.4
Michiel Broek <mbroek@mbse.eu>
parents:
293
diff
changeset
|
1580 | snprintf(use_cooler, 39, "NA"); |
a70527a4e56a
Added usage counters to the beer logfiles. Bumped to version 0.2.4
Michiel Broek <mbroek@mbse.eu>
parents:
293
diff
changeset
|
1581 | snprintf(use_fan, 39, "NA"); |
355
8f946f9d125a
Added logging of the room temperature.
Michiel Broek <mbroek@mbse.eu>
parents:
352
diff
changeset
|
1582 | snprintf(room_temp, 39, "NA"); |
105
a5a964148e34
Started code of roulating lcd display
Michiel Broek <mbroek@mbse.eu>
parents:
104
diff
changeset
|
1583 | |
397
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1584 | if (unit->mode == UNITMODE_BEER) { |
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1585 | snprintf(target_lo, 39, "%.1f", unit->beer_set); |
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1586 | snprintf(target_hi, 39, "%.1f", unit->beer_set); |
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1587 | } else if (unit->mode == UNITMODE_FRIDGE) { |
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1588 | snprintf(target_lo, 39, "%.1f", unit->fridge_set); |
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1589 | snprintf(target_hi, 39, "%.1f", unit->fridge_set); |
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1590 | } else if (unit->mode == UNITMODE_PROFILE) { |
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1591 | snprintf(target_lo, 39, "%.1f", unit->prof_target_lo); |
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1592 | snprintf(target_hi, 39, "%.1f", unit->prof_target_hi); |
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1593 | } |
105
a5a964148e34
Started code of roulating lcd display
Michiel Broek <mbroek@mbse.eu>
parents:
104
diff
changeset
|
1594 | |
175
b73490398368
Units editing is more or less complete. Changed structures for heating, cooling, fan and door. Updated the web interface to confuigure all these things.
Michiel Broek <mbroek@mbse.eu>
parents:
174
diff
changeset
|
1595 | if (unit->heater_address) { |
b73490398368
Units editing is more or less complete. Changed structures for heating, cooling, fan and door. Updated the web interface to confuigure all these things.
Michiel Broek <mbroek@mbse.eu>
parents:
174
diff
changeset
|
1596 | snprintf(heater, 39, "%d", unit->heater_state); |
297
a70527a4e56a
Added usage counters to the beer logfiles. Bumped to version 0.2.4
Michiel Broek <mbroek@mbse.eu>
parents:
293
diff
changeset
|
1597 | snprintf(use_heater, 39, "%d", unit->heater_usage); |
175
b73490398368
Units editing is more or less complete. Changed structures for heating, cooling, fan and door. Updated the web interface to confuigure all these things.
Michiel Broek <mbroek@mbse.eu>
parents:
174
diff
changeset
|
1598 | } |
b73490398368
Units editing is more or less complete. Changed structures for heating, cooling, fan and door. Updated the web interface to confuigure all these things.
Michiel Broek <mbroek@mbse.eu>
parents:
174
diff
changeset
|
1599 | if (unit->cooler_address) { |
b73490398368
Units editing is more or less complete. Changed structures for heating, cooling, fan and door. Updated the web interface to confuigure all these things.
Michiel Broek <mbroek@mbse.eu>
parents:
174
diff
changeset
|
1600 | snprintf(cooler, 39, "%d", unit->cooler_state); |
297
a70527a4e56a
Added usage counters to the beer logfiles. Bumped to version 0.2.4
Michiel Broek <mbroek@mbse.eu>
parents:
293
diff
changeset
|
1601 | snprintf(use_cooler, 39, "%d", unit->cooler_usage); |
105
a5a964148e34
Started code of roulating lcd display
Michiel Broek <mbroek@mbse.eu>
parents:
104
diff
changeset
|
1602 | } |
175
b73490398368
Units editing is more or less complete. Changed structures for heating, cooling, fan and door. Updated the web interface to confuigure all these things.
Michiel Broek <mbroek@mbse.eu>
parents:
174
diff
changeset
|
1603 | if (unit->fan_address) { |
b73490398368
Units editing is more or less complete. Changed structures for heating, cooling, fan and door. Updated the web interface to confuigure all these things.
Michiel Broek <mbroek@mbse.eu>
parents:
174
diff
changeset
|
1604 | snprintf(fan, 39, "%d", unit->fan_state); |
297
a70527a4e56a
Added usage counters to the beer logfiles. Bumped to version 0.2.4
Michiel Broek <mbroek@mbse.eu>
parents:
293
diff
changeset
|
1605 | snprintf(use_fan, 39, "%d", unit->fan_usage); |
175
b73490398368
Units editing is more or less complete. Changed structures for heating, cooling, fan and door. Updated the web interface to confuigure all these things.
Michiel Broek <mbroek@mbse.eu>
parents:
174
diff
changeset
|
1606 | } |
b73490398368
Units editing is more or less complete. Changed structures for heating, cooling, fan and door. Updated the web interface to confuigure all these things.
Michiel Broek <mbroek@mbse.eu>
parents:
174
diff
changeset
|
1607 | if (unit->door_address) { |
b73490398368
Units editing is more or less complete. Changed structures for heating, cooling, fan and door. Updated the web interface to confuigure all these things.
Michiel Broek <mbroek@mbse.eu>
parents:
174
diff
changeset
|
1608 | snprintf(door, 39, "%d", unit->door_state); |
105
a5a964148e34
Started code of roulating lcd display
Michiel Broek <mbroek@mbse.eu>
parents:
104
diff
changeset
|
1609 | } |
355
8f946f9d125a
Added logging of the room temperature.
Michiel Broek <mbroek@mbse.eu>
parents:
352
diff
changeset
|
1610 | if (Config.temp_address) { |
8f946f9d125a
Added logging of the room temperature.
Michiel Broek <mbroek@mbse.eu>
parents:
352
diff
changeset
|
1611 | snprintf(room_temp, 39, "%.3f", Config.temp_value / 1000.0); |
8f946f9d125a
Added logging of the room temperature.
Michiel Broek <mbroek@mbse.eu>
parents:
352
diff
changeset
|
1612 | } |
105
a5a964148e34
Started code of roulating lcd display
Michiel Broek <mbroek@mbse.eu>
parents:
104
diff
changeset
|
1613 | |
397
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1614 | snprintf(buf, 1023, "%s,%.3f,%.3f,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s", |
105
a5a964148e34
Started code of roulating lcd display
Michiel Broek <mbroek@mbse.eu>
parents:
104
diff
changeset
|
1615 | UNITMODE[unit->mode], unit->air_temperature / 1000.0, |
397
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1616 | unit->beer_temperature / 1000.0, |
00ca08f5a6f8
Fermentation profiles now have a low and high temperature setting so that you can use a temperture window. Each profile step can now set for beer or air temperature reference. The logfiles have an extra temperature field for this. Bumped to version 0.4.2.
Michiel Broek <mbroek@mbse.eu>
parents:
395
diff
changeset
|
1617 | target_lo, heater, cooler, fan, door, use_heater, use_cooler, use_fan, room_temp, target_hi); |
104 | 1618 | filename = xstrcpy(unit->name); |
1619 | filename = xstrcat(filename, (char *)".log"); | |
1620 | logger(filename, buf); | |
1621 | free(filename); | |
1622 | filename = NULL; | |
1623 | } | |
1624 | } | |
167
56b008563db8
Fixed GET AIR|BEER commands. Save configuration every 30 minutes.
Michiel Broek <mbroek@mbse.eu>
parents:
165
diff
changeset
|
1625 | |
56b008563db8
Fixed GET AIR|BEER commands. Save configuration every 30 minutes.
Michiel Broek <mbroek@mbse.eu>
parents:
165
diff
changeset
|
1626 | minutes++; |
293 | 1627 | if (minutes == 60) { |
167
56b008563db8
Fixed GET AIR|BEER commands. Save configuration every 30 minutes.
Michiel Broek <mbroek@mbse.eu>
parents:
165
diff
changeset
|
1628 | minutes = 0; |
293 | 1629 | /* |
1630 | * Log usage counters every hour | |
1631 | */ | |
1632 | for (unit = Config.units; unit; unit = unit->next) { | |
1633 | syslog(LOG_NOTICE, "Unit `%s' usage heater=%d cooler=%d fan=%d", unit->name, unit->heater_usage, unit->cooler_usage, unit->fan_usage); | |
1634 | } | |
1635 | } | |
167
56b008563db8
Fixed GET AIR|BEER commands. Save configuration every 30 minutes.
Michiel Broek <mbroek@mbse.eu>
parents:
165
diff
changeset
|
1636 | |
227
1cb55ea51f76
Remove debug log information about regular configuration saving.
Michiel Broek <mbroek@mbse.eu>
parents:
223
diff
changeset
|
1637 | /* |
1cb55ea51f76
Remove debug log information about regular configuration saving.
Michiel Broek <mbroek@mbse.eu>
parents:
223
diff
changeset
|
1638 | * Save the configuration each half hour. |
1cb55ea51f76
Remove debug log information about regular configuration saving.
Michiel Broek <mbroek@mbse.eu>
parents:
223
diff
changeset
|
1639 | */ |
1cb55ea51f76
Remove debug log information about regular configuration saving.
Michiel Broek <mbroek@mbse.eu>
parents:
223
diff
changeset
|
1640 | if ((minutes == 15) || (minutes == 45)) |
167
56b008563db8
Fixed GET AIR|BEER commands. Save configuration every 30 minutes.
Michiel Broek <mbroek@mbse.eu>
parents:
165
diff
changeset
|
1641 | wrconfig(); |
64
2431965e8a8c
Write loglines only every 60 seconds
Michiel Broek <mbroek@mbse.eu>
parents:
63
diff
changeset
|
1642 | } |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
1643 | } |
200
a215ddaabbe2
Added first panel key routines. The LCD display steps manual only and has a 2 minutes backlight timeout.
Michiel Broek <mbroek@mbse.eu>
parents:
199
diff
changeset
|
1644 | |
a215ddaabbe2
Added first panel key routines. The LCD display steps manual only and has a 2 minutes backlight timeout.
Michiel Broek <mbroek@mbse.eu>
parents:
199
diff
changeset
|
1645 | #ifdef HAVE_WIRINGPI_H |
205 | 1646 | key = keycheck(); |
246
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
1647 | if (key != KEY_NONE) |
6df404da3537
Setting fridge and beer temperature from the panel implemented
Michiel Broek <mbroek@mbse.eu>
parents:
245
diff
changeset
|
1648 | panel_key_events(key); |
200
a215ddaabbe2
Added first panel key routines. The LCD display steps manual only and has a 2 minutes backlight timeout.
Michiel Broek <mbroek@mbse.eu>
parents:
199
diff
changeset
|
1649 | #endif |
a215ddaabbe2
Added first panel key routines. The LCD display steps manual only and has a 2 minutes backlight timeout.
Michiel Broek <mbroek@mbse.eu>
parents:
199
diff
changeset
|
1650 | |
28
32ed1ea4d0b6
Coolers working with a hardcode reference
Michiel Broek <mbroek@mbse.eu>
parents:
27
diff
changeset
|
1651 | usleep(100000); |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
1652 | |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
1653 | } while (run); |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
1654 | |
182 | 1655 | /* |
1656 | * Stop units processing in a neat way | |
1657 | */ | |
1658 | for (unit = Config.units; unit; unit = unit->next) { | |
1659 | /* | |
1660 | * Turn everything off | |
1661 | */ | |
350
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1662 | unit->heater_state = unit->cooler_state = unit->fan_state = unit->door_state = unit->light_state = 0; |
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1663 | unit->heater_wait = unit->cooler_wait = unit->fan_wait = unit->light_wait = 0; |
182 | 1664 | device_out(unit->heater_address, unit->heater_state); |
1665 | device_out(unit->cooler_address, unit->cooler_state); | |
1666 | device_out(unit->fan_address, unit->fan_state); | |
350
7283561977b1
Added door and PSU sensors. Added interior light logic and switching.
Michiel Broek <mbroek@mbse.eu>
parents:
349
diff
changeset
|
1667 | device_out(unit->light_address, unit->light_state); |
352
a8e106c95db4
Improved regular logging, disabled some debug logging.
Michiel Broek <mbroek@mbse.eu>
parents:
350
diff
changeset
|
1668 | syslog(LOG_NOTICE, "Unit `%s' stopped in mode %s", unit->name, UNITMODE[unit->mode]); |
182 | 1669 | } |
1670 | ||
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
1671 | if (debug) |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
1672 | fprintf(stdout, (char *)"Out of loop\n"); |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
1673 | |
28
32ed1ea4d0b6
Coolers working with a hardcode reference
Michiel Broek <mbroek@mbse.eu>
parents:
27
diff
changeset
|
1674 | /* |
32ed1ea4d0b6
Coolers working with a hardcode reference
Michiel Broek <mbroek@mbse.eu>
parents:
27
diff
changeset
|
1675 | * Give threads time to cleanup |
32ed1ea4d0b6
Coolers working with a hardcode reference
Michiel Broek <mbroek@mbse.eu>
parents:
27
diff
changeset
|
1676 | */ |
32ed1ea4d0b6
Coolers working with a hardcode reference
Michiel Broek <mbroek@mbse.eu>
parents:
27
diff
changeset
|
1677 | usleep(1500000); |
32ed1ea4d0b6
Coolers working with a hardcode reference
Michiel Broek <mbroek@mbse.eu>
parents:
27
diff
changeset
|
1678 | |
66
805f1d285acd
Compiles with 1-wire bus on PC hardware
Michiel Broek <mbroek@mbse.eu>
parents:
64
diff
changeset
|
1679 | #ifdef HAVE_WIRINGPI_H |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
1680 | stopLCD(); |
66
805f1d285acd
Compiles with 1-wire bus on PC hardware
Michiel Broek <mbroek@mbse.eu>
parents:
64
diff
changeset
|
1681 | #endif |
28
32ed1ea4d0b6
Coolers working with a hardcode reference
Michiel Broek <mbroek@mbse.eu>
parents:
27
diff
changeset
|
1682 | |
86
3d7a241329e2
Using final user paths for log, configuration and profiles
Michiel Broek <mbroek@mbse.eu>
parents:
83
diff
changeset
|
1683 | wrconfig(); |
41
f534ace74eea
Code preparation for client/server communication
Michiel Broek <mbroek@mbse.eu>
parents:
40
diff
changeset
|
1684 | ulockprog((char *)"thermferm"); |
26
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
1685 | return 0; |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
1686 | } |
9322c619c525
Added coolers program, first draft
Michiel Broek <mbroek@mbse.eu>
parents:
diff
changeset
|
1687 |