main/automation.c

branch
stable
changeset 66
f066fdeb9650
parent 64
326c38d3681b
child 75
224851e81117
--- a/main/automation.c	Tue Jul 02 17:33:23 2019 +0200
+++ b/main/automation.c	Fri Jul 05 16:17:04 2019 +0200
@@ -59,6 +59,39 @@
 static const char		*TAG = "automation";
 
 
+void change_sp(bool up)
+{
+    if (up)
+	stageTemp += 0.25;
+    else
+	stageTemp -= 0.25;
+    if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
+	driver_state->mlt_sp = stageTemp;
+	xSemaphoreGive(xSemaphoreDriver);
+    }
+    log_msg(TAG, "Changed sp to %.2f", stageTemp);
+}
+
+
+
+void change_tl(int max)
+{
+    if (max) {
+	if (TimeLeft < max)
+	    TimeLeft += 60;
+	else
+	    TimeLeft = max;
+    } else {
+	if (TimeLeft > 60)
+            TimeLeft -= 60;
+        else
+            TimeLeft = 0;
+    }
+    log_msg(TAG, "Changed timeleft to %d", TimeLeft / 60);
+}
+
+
+
 /*
  * Automation init function that only runs once when a
  * new screen is entered.
@@ -69,6 +102,7 @@
 
     switch (Main_Screen) {
 	case MAIN_AUTO_INIT1:
+		log_msg(TAG, "Automation startup");
 #ifdef CONFIG_TEMP_SENSORS_SIMULATOR
 		Fake_MLT = recipe.MashStep[0].Temperature - 10;
 		Fake_HLT = recipe.SpargeTemp - 15;
@@ -82,7 +116,7 @@
                     if (recipe.MashStep[i].Resttime)
                         LastMashStep = i;
                 }
-                ESP_LOGI(TAG, "Last mash step %d", LastMashStep);
+                log_msg(TAG, "Last mash step %d", LastMashStep);
 
                 // Check for a crashed session.
                 if (runtime.AutoModeStarted) {
@@ -111,7 +145,7 @@
 					    }
 					    xSemaphoreGive(xSemaphoreDriver);
 					}
-					ESP_LOGI(TAG, "Resume brew screen %d, time left %d", Main_Screen, TimeLeft);
+					log_msg(TAG, "Resume brew screen %d, time left %d", Main_Screen, TimeLeft);
 					log_begin((time_t)0);
 					update_json();
 					log_annotation(ANNOTATION_SYSTEM, (char *)"Resume");
@@ -232,7 +266,7 @@
                 Buttons_Add(  5,  30, 60, 40, (char *)"+sp",  0);
                 Buttons_Add(255,  30, 60, 40, (char *)"-sp",  1);
                 Buttons_Show();
-                ESP_LOGI(TAG, "Mash done, going to boil.");
+                log_msg(TAG, "Mash done, going to boil.");
 		Sub_Screen = 0;
                 break;
 
@@ -262,7 +296,7 @@
                 Buttons_Add(  3, 190, 60, 40, (char *)"+1m",  2);
                 Buttons_Add(257, 190, 60, 40, (char *)"-1m",  3);
                 Buttons_Show();
-                ESP_LOGI(TAG, "Boil temperature reached, boil %d minutes", (TimeLeft / 60) -1);
+                log_msg(TAG, "Boil temperature reached, boil %d minutes", (TimeLeft / 60) -1);
 		log_annotation(ANNOTATION_STAGE, (char *)"Koken");
 		Sub_Screen = 0;
                 break;
@@ -284,6 +318,7 @@
                     Main_Screen = MAIN_AUTO_COOLING_C;
                     return true; //goto startover;
                 }
+		log_msg(TAG, "Prompt start cooling");
                 TopMessage((char *)"Start koelen?");
                 Buttons_Add( 40, 100, 80, 40, (char *)"Start", 0);
                 Buttons_Add(200, 100, 80, 40, (char *)"Stop",  1);
@@ -321,6 +356,7 @@
                     return true; //goto startover;
                 }
 
+		log_msg(TAG, "Prompt start whirlpool");
                 TopMessage((char *)"Start Whirlpool?");
                 Buttons_Add( 40, 100, 80, 40, (char *)"Start", 0);
                 Buttons_Add(200, 100, 80, 40, (char *)"Stop",  1);
@@ -345,11 +381,11 @@
                 TFT_setFont(DEJAVU24_FONT, NULL);
                 if (Main_Screen == MAIN_AUTO_DONE) {
                     TFT_print((char *)"Brouwen is gereed.", CENTER, CENTER);
-                    ESP_LOGI(TAG, "Brew is done");
+                    log_msg(TAG, "Brew is done");
                     SoundPlay(SOUND_End);
                 } else {
                     TFT_print((char *)"Brouwen is afgebroken.", CENTER, CENTER);
-                    ESP_LOGI(TAG, "Brew is aborted");
+                    log_msg(TAG, "Brew is aborted");
                     SoundPlay(SOUND_Warn);
                 }
                 log_close();
@@ -476,6 +512,7 @@
 
 			case 1:         loop = false;
 					Main_Screen = MAIN_AUTO_INIT2;
+					log_msg(TAG, "Brew `%s' on `%s'", recipe.Name, equipment.Name); 
 					break;
 
 			default:        break;
@@ -533,6 +570,7 @@
 		} else {
 		    runtime.UseHLT = _UseHLT = false;
 		}
+		log_msg(TAG, "Use HLT %s", (_UseHLT)?"true":"false");
                 updateRuntime = true;
                 if (_UseHLT) {
                     /*
@@ -545,7 +583,7 @@
                         AvailableTime += recipe.MashStep[i].Resttime;
                     if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
                         driver_state->hlt_sp = recipe.SpargeTemp - ((AvailableTime / 2) + 2);
-                        ESP_LOGI(TAG, "HLT preheat set to %4.1f", driver_state->hlt_sp);
+                        log_msg(TAG, "HLT preheat set to %4.2f", driver_state->hlt_sp);
                         xSemaphoreGive(xSemaphoreDriver);
                     }
                 }
@@ -569,6 +607,7 @@
                     if (driver_state->hlt_pv >= driver_state->hlt_sp) {
                         Main_Screen = MAIN_AUTO_MASH_IN;
                         driver_state->hlt_sp = recipe.SpargeTemp;       // Set final setpoint
+			log_msg(TAG, "HLT preheat done");
                     }
                     xSemaphoreGive(xSemaphoreDriver);
                 }
@@ -616,9 +655,9 @@
                     MashState = Sub_Screen = MASH_WAITTEMP;
 		    snprintf(msg, 255, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"\"}", Main_Screen, Sub_Screen);
                     ws_server_send_text_clients((char *)"/ws", msg, strlen(msg));
-                    ESP_LOGI(TAG, "Mash step %d type: %s time: %d temp: %4.1f  min: %4.1f max: %4.1f",
+                    log_msg(TAG, "Mash step %d type: %s time: %d sp: %4.2f  sv: %4.3f",
 				    Main_Screen - MAIN_AUTO_MASH_IN, mashTypes[recipe.MashStep[Main_Screen - MAIN_AUTO_MASH_IN].Type],
-                                    stageTime, stageTemp, MinMash, MaxMash);
+                                    stageTime, stageTemp, temp_MLT);
 
 		    if (Main_Screen > MAIN_AUTO_MASH_IN) {
 			// Do not annotate before the log is open.
@@ -658,7 +697,7 @@
 			    driver_state->mlt_mode = MLT_MODE_OFF;
 			    xSemaphoreGive(xSemaphoreDriver);
 			}
-			ESP_LOGI(TAG, "Mash infusion prompt");
+			log_msg(TAG, "Mash infusion prompt");
 		    } else {
 			Buttons_Add(  5,  30, 60, 40, (char *)"+sp",   0);
 			Buttons_Add(255,  30, 60, 40, (char *)"-sp",   1);
@@ -687,29 +726,19 @@
 			Resume = false;
 			runtime.StageTimeLeft = TimeLeft / 60;
 			updateRuntime = true;
-                        ESP_LOGI(TAG, "Mash step %d temperature reached, rest time %d", Main_Screen - MAIN_AUTO_MASH_IN, TimeLeft / 60);
+                        log_msg(TAG, "Mash step %d temperature reached, rest %d minutes", Main_Screen - MAIN_AUTO_MASH_IN, TimeLeft / 60);
                         Buttons_Clear();
                         Buttons_Add(  0, 120, 60, 40, (char *)"+1m",   0);
                         Buttons_Add(260, 120, 60, 40, (char *)"-1m",   1);
                         Buttons_Show();
                     }
                     switch (Buttons_Scan()) {
-                        case 0:         if (stageTemp < MaxMash) {
-                                            stageTemp += 0.25;
-                                            if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
-                                                driver_state->mlt_sp = stageTemp;
-                                                xSemaphoreGive(xSemaphoreDriver);
-                                            }
-                                        }
+                        case 0:         if (stageTemp < MaxMash)
+					    change_sp(true);
                                         break;
 
-                        case 1:         if (stageTemp > MinMash) {
-                                            stageTemp -= 0.25;
-                                            if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
-                                                driver_state->mlt_sp = stageTemp;
-                                                xSemaphoreGive(xSemaphoreDriver);
-                                            }
-                                        }
+                        case 1:         if (stageTemp > MinMash)
+					    change_sp(false);
                                         break;
 
                         default:
@@ -731,26 +760,23 @@
                         if (pumpTime >= equipment.PumpCycle) {
                             if (! pumpRest) {
                                 pumpRest = true;
-                                ESP_LOGI(TAG, "Pump rest");
+                                log_msg(TAG, "Pump stop");
                             }
                         } else {
                             if (pumpRest) {
                                 pumpRest = false;
-                                ESP_LOGI(TAG, "Pump start");
+                                log_msg(TAG, "Pump start");
                             }
                         }
                     }
                     if (TimeLeft) {
                         switch (Buttons_Scan()) {
-                            case 0:     TimeLeft += 60;
+                            case 0:     change_tl(21600);
 					runtime.StageTimeLeft = TimeLeft / 60;
 					updateRuntime = true;
                                         break;
 
-                            case 1:     if (TimeLeft < 60)
-                                            TimeLeft = 0;
-                                        else
-                                            TimeLeft -= 60;
+                            case 1:     change_tl(0);
 					runtime.StageTimeLeft = TimeLeft / 60;
 					updateRuntime = true;
                                         break;
@@ -760,7 +786,7 @@
                     }
 
                     if (TimeLeft == 0) {
-			runtime.StageTimeLeft = TimeLeft / 60;
+			runtime.StageTimeLeft = 0;
 			updateRuntime = true;
                         if ((Main_Screen == MAIN_AUTO_MASH_IN) && config.AskAdd) {
                             /*
@@ -780,7 +806,7 @@
 			    MashState = Sub_Screen = MASH_ADD;
 			    snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"Mout storten?\"}", Main_Screen, Sub_Screen);
                 	    ws_server_send_text_clients((char *)"/ws", msg, strlen(msg));
-			    ESP_LOGI(TAG, "Mash add prompt");
+			    log_msg(TAG, "Mash add prompt");
 			    break;
                         }
                         if (((Main_Screen - MAIN_AUTO_MASH_IN) == LastMashStep) && config.AskIodine) {
@@ -804,7 +830,7 @@
 			    MashState = Sub_Screen = MASH_IODINE;
 			    snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"Jodium test?\"}", Main_Screen, Sub_Screen);
                 	    ws_server_send_text_clients((char *)"/ws", msg, strlen(msg));
-			    ESP_LOGI(TAG, "Mash iodine test prompt");
+			    log_msg(TAG, "Mash iodine test prompt");
 			    break;
                         }
                         if ((Main_Screen == MAIN_AUTO_MASH_OUT) && config.AskRemove) {
@@ -826,7 +852,7 @@
 			    MashState = Sub_Screen = MASH_REMOVE;
 			    snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"Mout verwijderen?\"}", Main_Screen, Sub_Screen);
                 	    ws_server_send_text_clients((char *)"/ws", msg, strlen(msg));
-			    ESP_LOGI(TAG, "Mash remove prompt");
+			    log_msg(TAG, "Mash remove prompt");
 			    break;
                         }
                         if (Main_Screen != MAIN_AUTO_ABORT)
@@ -839,22 +865,16 @@
 			    updateRuntime = true;
 			}
                     }
-		} else if (MashState == MASH_ADD) {
-		    switch (Buttons_Scan()) {
-			case 0:     Main_Screen = MAIN_AUTO_ABORT;
-				    break;
-			case 1:     Main_Screen++;
-				    break;
-			default:    break;
-		    }
-		} else if (MashState == MASH_IODINE) {
-		    if (TimeSpent % 45 == 0) {
-			if (! beeped) {
-			    SoundPlay(SOUND_Warn);
-			    beeped = true;
-			}
-		    } else {
-			beeped = false;
+		} else if (MashState == MASH_ADD || MashState == MASH_IODINE || MashState == MASH_REMOVE) {
+		    if (MashState == MASH_IODINE) {
+			if (TimeSpent % 45 == 0) {
+                            if (! beeped) {
+                            	SoundPlay(SOUND_Warn);
+                            	beeped = true;
+                            }
+                    	} else {
+                            beeped = false;
+                    	}
 		    }
 		    switch (Buttons_Scan()) {
 			case 0:     Main_Screen = MAIN_AUTO_ABORT;
@@ -863,17 +883,9 @@
 				    break;
 			default:    break;
 		    }
-		    if (TimeLeft == 0) {
+		    if (MashState == MASH_IODINE && TimeLeft == 0) {
 			Main_Screen++;
 		    }
-		} else if (MashState == MASH_REMOVE) {
-		    switch (Buttons_Scan()) {
-			case 0:     Main_Screen = MAIN_AUTO_ABORT;
-				    break;
-			case 1:     Main_Screen++;
-				    break;
-			default:    break;
-		    }
 		} else if (MashState == MASH_INFUSE) {
 		    switch (Buttons_Scan()) {
 			case 0:     Main_Screen = MAIN_AUTO_ABORT;
@@ -923,16 +935,14 @@
 
                 MLT_info(71, 26, true);
                 switch (Buttons_Scan()) {
-                    case 0:     if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
-                                    driver_state->mlt_sp += 0.25;
-                                    xSemaphoreGive(xSemaphoreDriver);
-                                }
+                    case 0:     if (stageTemp < 105) {
+				    change_sp(true);
+				}
                                 break;
 
-                    case 1:     if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
-                                    driver_state->mlt_sp -= 0.25;
-                                    xSemaphoreGive(xSemaphoreDriver);
-                                }
+                    case 1:     if (stageTemp > 80) {
+				    change_sp(false);
+				}
                                 break;
 
                     default:    break;
@@ -946,7 +956,7 @@
 		    Resume = false;
                 if (NewMinute) {
                     if ((runtime.HopAddition < recipe.Additions) && (TimeLeft <= ((recipe.Addition[runtime.HopAddition].Time * 60) + 60))) {
-                        ESP_LOGI(TAG, "Hop addition %d at %d minutes", runtime.HopAddition + 1, recipe.Addition[runtime.HopAddition].Time);
+                        log_msg(TAG, "Hop addition %d at %d minutes", runtime.HopAddition + 1, recipe.Addition[runtime.HopAddition].Time);
                         TopMessage(recipe.Addition[runtime.HopAddition].Name);
 			log_annotation(ANNOTATION_EVENT, recipe.Addition[runtime.HopAddition].Name);
                         SoundPlay(SOUND_AddHop);
@@ -960,6 +970,7 @@
                 if (TimeLeft < 60) {
 		    if (Output) {
 			log_annotation(ANNOTATION_STAGE, (char *)"Vlamuit");
+			log_msg(TAG, "Boil flame off");
 		    }
                     // Flameout
                     Output = 0;
@@ -984,33 +995,30 @@
                 TimerShow(TimeLeft, 65, 190);
 
                 switch (Buttons_Scan()) {
-                    case 0:     if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
-                                    driver_state->mlt_sp += 0.25;
-                                    xSemaphoreGive(xSemaphoreDriver);
-                                }
+                    case 0:     if (stageTemp < 105) {
+				    change_sp(true);
+				}
                                 break;
 
-                    case 1:     if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
-                                    driver_state->mlt_sp -= 0.25;
-                                    xSemaphoreGive(xSemaphoreDriver);
-                                }
+                    case 1:     if (stageTemp > 80) {
+				    change_sp(false);
+				}
                                 break;
 
-                    case 2:     TimeLeft += 60;
+                    case 2:     change_tl(21600);
                                 break;
 
-                    case 3:     if (TimeLeft > 60)
-                                    TimeLeft -= 60;
-                                else
-                                    TimeLeft = 0;
+                    case 3:     change_tl(0);
                                 break;
 
                     case 4:     if (BoilPower < 100)
                                     BoilPower++;
+				log_msg(TAG, "Increase boilpower to %d%%", BoilPower);
                                 break;
 
                     case 5:     if (BoilPower > 0)
                                     BoilPower--;
+				log_msg(TAG, "Decrease boilpower to %d%%", BoilPower);
                                 break;
 
                     default:    break;
@@ -1018,7 +1026,7 @@
 
                 if (TimeLeft == 0) {
                     Main_Screen = MAIN_AUTO_WHIRLPOOL9;
-                    ESP_LOGI(TAG, "Boil is ready");
+                    log_msg(TAG, "Boil is ready");
                 }
                 break;
 
@@ -1058,7 +1066,7 @@
 			snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"\"}", Main_Screen, Sub_Screen);
                         ws_server_send_text_clients((char *)"/ws", msg, strlen(msg));
 			CoolBeep = false;
-			ESP_LOGI(TAG, "Start cooling from %6.2f to %4.1f", ds18b20_state->mlt_temperature, stageTemp);
+			log_msg(TAG, "Start cooling from %6.2f to %4.1f", ds18b20_state->mlt_temperature, stageTemp);
 			if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
 			    driver_state->mlt_mode = MLT_MODE_OFF;
 			    driver_state->mlt_sp = stageTemp;
@@ -1121,6 +1129,7 @@
                                     }
                                     xSemaphoreGive(xSemaphoreDriver);
                                 }
+				log_msg(TAG, "Increase sp to %.2f", driver_state->mlt_sp);
                                 break;
 
                     	case 0: Buttons_Add( 60, 150, 90, 40, (char *)"Stoppen", 4);
@@ -1142,6 +1151,7 @@
                                     }
                                     xSemaphoreGive(xSemaphoreDriver);
                                 }
+				log_msg(TAG, "Decrease sp to %.2f", driver_state->mlt_sp);
                                 break;
 
                     	case 3: if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
@@ -1154,6 +1164,7 @@
                                         driver_state->pump_run = 0;
                                     }
 				    runtime.PumpCooling = driver_state->pump_run;
+				    log_msg(TAG, "Pump turned %s", (driver_state->pump_run)?"on":"off");
 				    updateRuntime = true;
                                     xSemaphoreGive(xSemaphoreDriver);
                                 }
@@ -1260,7 +1271,7 @@
 			runtime.StageTimeLeft = TimeWhirlPool;
 			updateRuntime = true;
 			MLT_info(71, 26, false);
-			ESP_LOGI(TAG, "Whirlpool %d minutes, sp %4.1f", TimeWhirlPool, driver_state->mlt_sp);
+			log_msg(TAG, "Whirlpool %d minutes, sp %4.1f", TimeWhirlPool, driver_state->mlt_sp);
 			Buttons_Add(255, 120, 60, 40, (char *)"+1m", 0);
 			Buttons_Add(  5, 120, 60, 40, (char *)"-1m", 1);
 			Buttons_Add(255, 200, 60, 40, (char *)"Pomp",  2);
@@ -1290,19 +1301,17 @@
                     MLT_info(71, 26, true);
                     TimerShow(TimeLeft, 65, 122);
                     switch (Buttons_Scan()) {
-                    	case 0:     TimeLeft += 60;
+                    	case 0: change_tl(7200);
                                 break;
-                    	case 1:     if (TimeLeft > 60)
-                                    TimeLeft -= 60;
-                                else
-                                    TimeLeft = 0;
+                    	case 1: change_tl(0);
                                 break;
-                    	case 2:     if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
+                    	case 2: if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
                                     if (driver_state->mlt_pv < equipment.PumpMaxTemp) {
                                         if (driver_state->pump_run)
                                             driver_state->pump_run = 0;
                                         else
                                             driver_state->pump_run = 1;
+					log_msg(TAG, "Pump switched %s", (driver_state->pump_run)?"on":"off");
                                     } else {
                                         driver_state->pump_run = 0;
                                     }

mercurial