# HG changeset patch # User Michiel Broek # Date 1557259418 -7200 # Node ID c6a1a6ca543741e2bb968486345febd49e7f71c0 # Parent 7639cfa6aec04a38100b30bddd7e1496aa26d064 Finished websockets screens. diff -r 7639cfa6aec0 -r c6a1a6ca5437 image/files.list --- a/image/files.list Sat May 04 21:18:51 2019 +0200 +++ b/image/files.list Tue May 07 22:03:38 2019 +0200 @@ -4,7 +4,7 @@ fonts/SmallFont.fon fonts/Ubuntu.fon w/css/web.css -w/css/style.css +w/css/webui.css w/js/Chart.min.js.gz w/js/ch-plug-anno.min.js.gz w/js/jquery-1.12.4.min.js.gz diff -r 7639cfa6aec0 -r c6a1a6ca5437 image/version.txt --- a/image/version.txt Sat May 04 21:18:51 2019 +0200 +++ b/image/version.txt Tue May 07 22:03:38 2019 +0200 @@ -1,1 +1,1 @@ -0.1.av +0.1.cp diff -r 7639cfa6aec0 -r c6a1a6ca5437 image/w/css/style.css --- a/image/w/css/style.css Sat May 04 21:18:51 2019 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,109 +0,0 @@ - -body { - background: #ccc; - font-family: Verdana, Arial, sans-serif; - margin: 0px; -} - -#webui_win { - width: 360px; - height: 270px; - background: #353536; - border: 2px solid; - border-color: #59b4d4; -} - -#topline { - width: 100%; - height: 24px; - background: blue; - color: yellow; - text-align: center; - font-size: 18px; -} - -#mltline, -#hltline { - width: 100%; - height: 100px; -} - -#midline { - width: 100%; - height: 45px; -} - -#mlt_table { - width: 178px; - height: 90px; - margin: auto; - background: #303030; - border: 1px solid; - border-collapse: collapse; - color: white; - border-color: white; -} - -#hlt_table { - width: 178px; - height: 90px; - margin: auto; - background: #3f3f40; - border: 1px solid; - border-collapse: collapse; - color: yellow; - border-color: yellow; -} - -#prompt { - width: 100%; - float: left; - text-align: center; -} - -.appbutton { - width: 60px; - height: 36px; - border-radius: 4px; - background-color: #e7e7e7; color: black; -} - -.okbutton { - width: 60px; - height: 36px; - border-radius: 4px; - background-color: #575757; color: white; -} - -.promptbutton { - width: 80px; - height: 40px; - border-radius: 4px; - background-color: #e7e7e7; color: black; -} - -#timer { - color: white; - text-align: center; - font-family: "Courier New", "Lucida Console"; - font-size: 34px; -} - -/* LED */ -.LEDred { - margin: 5px auto; - width: 12px; - height: 12px; - background-color: #820; /* On = #F40 */ - border-radius: 50%; -} - -.LEDgreen { - margin: 5px auto; - width: 12px; - height: 12px; - background-color: #270; /* On = #5E0 */ - border-radius: 50%; -} - - diff -r 7639cfa6aec0 -r c6a1a6ca5437 image/w/css/webui.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/image/w/css/webui.css Tue May 07 22:03:38 2019 +0200 @@ -0,0 +1,130 @@ + +body { + background: #555; + font-family: Verdana, Arial, sans-serif; + margin: 0px; +} + +#webui_win { + width: 360px; + height: 270px; + background: #353536; + border: 2px solid; + border-color: #59b4d4; +} + +#topline { + width: 100%; + height: 24px; + background: blue; + color: yellow; + text-align: center; + font-size: 18px; +} + +#mltline, +#hltline { + width: 100%; + height: 100px; +} + +#midline { + width: 100%; + height: 45px; +} + +#mlt_table { + width: 178px; + height: 90px; + margin: auto; + background: #303030; + border: 1px solid; + border-collapse: collapse; + color: white; + border-color: white; +} + +#hlt_table { + width: 178px; + height: 90px; + margin: auto; + background: #3f3f40; + border: 1px solid; + border-collapse: collapse; + color: yellow; + border-color: yellow; +} + +#prompt { + width: 100%; + float: left; + text-align: center; +} + +.appbutton { + width: 60px; + height: 36px; + border-radius: 4px; + background-color: #e7e7e7; color: black; +} + +.okbutton { + width: 60px; + height: 36px; + border-radius: 4px; + background-color: #575757; color: white; + position: absolute; + left: 150px; + top: 230px; +} + +.promptbutton { + width: 80px; + height: 40px; + border-radius: 4px; + background-color: #e7e7e7; color: black; +} + +#timer { + color: white; + text-align: center; + font-family: "Courier New", "Lucida Console"; + font-size: 34px; +} + +/* LED */ +.LEDred { + margin: 5px auto; + width: 12px; + height: 12px; + background-color: #820; /* On = #F40 */ + border-radius: 50%; +} + +.LEDgreen { + margin: 5px auto; + width: 12px; + height: 12px; + background-color: #270; /* On = #5E0 */ + border-radius: 50%; +} + +.menu input[type=submit] { + background-color: #33b5e5; + border: none; + color: white; + font-weight: bold; + width: 250px; + padding: 15px 32px; + text-decoration: none; + font-size: 16px; + cursor: pointer; + margin: 8px; + text-align: center; + border-radius: 10px; +} + +.menu input[type=submit]:hover { + background-color: #0099cc; +} + diff -r 7639cfa6aec0 -r c6a1a6ca5437 image/w/index.html.gz Binary file image/w/index.html.gz has changed diff -r 7639cfa6aec0 -r c6a1a6ca5437 image/w/js/webui.js --- a/image/w/js/webui.js Sat May 04 21:18:51 2019 +0200 +++ b/image/w/js/webui.js Tue May 07 22:03:38 2019 +0200 @@ -1,117 +1,250 @@ document.getElementById("test").innerHTML = "WebSocket is not connected"; var websocket = new WebSocket('ws://'+location.hostname+'/ws'); -//var slider = document.getElementById("myRange"); +var Beep= new Audio( "data:audio/wav;base64,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 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////VEFHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU291bmRib3kuZGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjAwNGh0dHA6Ly93d3cuc291bmRib3kuZGUAAAAAAAAAACU=" ); var BBScreen={ Screen: -1, + Subscreen: 0, + setTimer: function(v){ + $("#timer").text(''); + if (v == 0) { + $("#timer").css("font-size", "18px"); + $("#timer").css("font-weight", "normal"); + $("#timer").css("font-family", "Verdana, Arial, sans-serif"); + } else { + $("#timer").css("font-size", "36px"); + $("#timer").css("font-weight", "bold"); + $("#timer").css("font-family", "Courier New, Lucida Console"); + } + }, + clearScreen: function(){ + $("#mltline").hide(); + $("#mlt_table").hide(); + $("#mlt00").hide(); + $("#mlt20").hide(); + $("#mlt01").hide(); + $("#mlt21").hide(); + $("#midline").hide(); + this.setTimer(0); + $("#mid00").hide(); + $("#mid20").hide(); + $("#mid00").css("background-color", "#e7e7e7"); + $("#mid00").css("color", "black"); + $("#hltline").hide(); + $("#hlt_table").hide(); + $("#hlt00").hide(); + $("#hlt20").hide(); + $("#hlt01").hide(); + $("#hlt21").hide(); + $("#hlt01").css("background-color", "#e7e7e7"); + $("#hlt01").css("color", "black"); + $("#row_info").hide(); + $("#prompt").hide(); + $("#button_nee").css("background-color", "#e7e7e7"); + $("#button_nee").css("color", "black"); + $("#note").hide(); + $("#brew").hide(); + }, setScreen: function(s){ Screen = parseInt(s,10); - console.log("Screen:"+Screen); switch (Screen) { - case 0: $("#mltline").show(); + case 0: this.clearScreen(); + $("#mltline").show(); $("#mlt_table").show(); $("#but00").text('Hand'); $("#but20").text('Auto'); $("#mlt00").show(); $("#mlt20").show(); - $("#mlt01").hide(); - $("#mlt21").hide(); $("#midline").show(); - $("#mid00").hide(); - $("#mid20").hide(); + this.setTimer(0); $("#hltline").show(); $("#hlt_table").show(); - $("#hlt00").hide(); - $("#hlt20").hide(); $("#hlt01").show(); - $("#hlt21").show(); - $("#hlt01").css("background-color", "#e7e7e7"); - $("#hlt01").css("color", "black"); $("#but04").text('Info'); - $("#but24").text('Tools'); - $("#row_info").hide(); - $("#prompt").hide(); + // No tools button on the web. break; - case 2: $("#mltline").hide(); - $("#midline").hide(); - $("#hltline").hide(); + case 2: this.clearScreen(); $("#row_info").show(); - $("#prompt").hide(); break; -// case 21: Automaat show recipe and Stop / Start -// Prompt -// Prompt - case 100: + case 96: break; // Automaat show recipe and Stop / Start + case 98: break; // Delay start + case 99: this.clearScreen(); // heatup + $("#mltline").show(); + $("#mlt_table").show(); + $("#midline").show(); + $("#hltline").show(); + $("#hlt_table").show(); + break; + case 100: // All handled at Subscreen case 101: case 102: case 103: case 104: case 105: case 106: - case 107: $("#mltline").show(); - $("#but00").text('+sp'); - $("#but20").text('-sp'); - $("#midline").show(); - $("#hltline").show(); - $("#hlt01").hide(); - $("#hlt21").hide(); - $("#row_info").hide(); - $("#prompt").hide(); - break; - case 108: $("#mltline").show(); // to boil - $("#midline").hide(); - $("#hltline").hide(); - $("#prompt").hide(); + case 107: break; + case 108: this.clearScreen(); + $("#mltline").show(); // to boil + $("#mlt_table").show(); + $("#mlt00").show(); + $("#mlt20").show(); + $("#but00").text('+sp'); + $("#but20").text('-sp'); break; - case 109: $("#mltline").show(); // boil + case 109: this.clearScreen(); + $("#mltline").show(); // boil + $("#mlt_table").show(); + $("#mlt00").show(); + $("#mlt20").show(); + $("#but00").text('+sp'); + $("#but20").text('-sp'); $("#midline").show(); - $("#hltline").hide(); - $("#prompt").hide(); + $("#mid00").show(); + $("#mid20").show(); + $("#but02").text('+%'); + $("#but22").text('-%'); + this.setTimer(1); + $("#hltline").show(); + $("#hlt01").show(); + $("#hlt21").show(); + $("#but04").text('+1m'); + $("#but24").text('-1m'); break; - case 200: $("#mltline").hide(); - $("#midline").hide(); - $("#hltline").hide(); - $("#row_info").hide(); + case 110: // whirlpool 9 + case 111: // cooling H + case 112: // whirlpool 7 + case 113: // cooling M + case 114: // whirlpool 6 + case 115: // cooling C + case 116: // whirlpool 2 + break; + case 117: this.clearScreen(); + $("#note").show(); + $("#note_msg").text('Brouwen is gereed.'); + break; + case 118: this.clearScreen(); + $("#note").show(); + $("#note_msg").text('Brouwen is afgebroken.'); + break; + case 97: + case 200: this.clearScreen(); $("#prompt").show(); break; - case 201: $("#mltline").show(); - $("#mlt00").hide(); - $("#mlt20").hide(); - $("#mlt01").hide(); - $("#mlt21").hide(); - $("#mlt_table").hide(); + case 201: this.clearScreen(); + $("#mltline").show(); $("#but00").text('+sp'); $("#but20").text('-sp'); $("#but01").text('Pomp'); $("#but21").text('Aan'); $("#midline").show(); - $("#mid00").hide(); - $("#mid20").hide(); $("#hltline").show(); - $("#hlt00").hide(); - $("#hlt20").hide(); - $("#hlt21").hide(); - $("#hlt_table").hide(); $("#but03").text('+sp'); $("#but23").text('-sp'); $("#but04").text('Stop'); $("#but24").text('Aan'); + $("#hlt01").show(); $("#hlt01").css("background-color", "#575757"); $("#hlt01").css("color", "white"); - $("#row_info").hide(); - $("#prompt").hide(); break; - default: $("#mltline").hide(); - $("#midline").hide(); - $("#hltline").hide(); - $("#prompt").hide(); + default: this.clearScreen(); console.log("this is default screen "+Screen); break; } }, + setSubscreen: function(s){ + Subscreen = parseInt(s,10); + console.log("Screen:"+Screen+" Sub:"+Subscreen); + if (Screen == 96) { + this.clearScreen(); + if (Subscreen == 0) { + $("#prompt").show(); + $("#button_ja").text('Ja'); + $("#button_nee").text('Nee'); + } else if (Subscreen == 1) { + $("#brew").show(); + } + } else if ((Screen >= 100) && (Screen < 108)) { + this.clearScreen(); + $("#mltline").show(); + $("#mlt_table").show(); + $("#midline").show(); + $("#hltline").show(); + $("#hlt_table").show(); + switch (Subscreen) { + case 0: // MASH_NONE + case 1: // MASH_WAITTEMP + $("#mlt00").show(); + $("#mlt20").show(); + $("#but00").text('+sp'); + $("#but20").text('-sp'); + break; + case 2: // MASH_REST + this.setTimer(1); + $("#mid00").show(); + $("#mid20").show(); + $("#but02").text('+1m'); + $("#but22").text('-1m'); + break; + case 3: // MASH_ADD + case 4: // MASH_IODINE + case 5: // MASH_REMOVE + case 6: // MASH_INFUSE + this.setTimer(0); + $("#mid00").show(); + $("#mid00").css("background-color", "#575757"); + $("#mid00").css("color", "white"); + $("#mid20").show(); + $("#but02").text('Halt'); + $("#but22").text('Ok'); + break; + }; + } else if ((Screen == 111) || (Screen == 113) || (Screen == 115)) { // cooling H,M,C + this.clearScreen(); + if (Subscreen == 0) { + $("#prompt").show(); + $("#button_ja").text('Start'); + $("#button_nee").text('Stop'); + $("#button_nee").css("background-color", "#575757"); + $("#button_nee").css("color", "white"); + } else if (Subscreen == 1) { + $("#mltline").show(); + $("#mlt_table").show(); + $("#mlt00").show(); + $("#mlt20").show(); + $("#but00").text('+1'); + $("#but20").text('-1'); + $("#hltline").show(); + $("#hlt01").show(); + $("#but04").text('Stop'); + $("#hlt01").css("background-color", "#575757"); + $("#hlt01").css("color", "white"); + } + } else if ((Screen == 110) || (Screen == 112) || (Screen == 114) || (Screen == 116)) { // whirlpools + this.clearScreen(); + if (Subscreen == 0) { + $("#prompt").show(); + $("#button_ja").text('Start'); + $("#button_nee").text('Stop'); + $("#button_nee").css("background-color", "#575757"); + $("#button_nee").css("color", "white"); + } else if (Subscreen == 1) { + $("#mltline").show(); + $("#mlt_table").show(); + $("#midline").show(); + this.setTimer(1); + $("#mid00").show(); + $("#mid20").show(); + $("#but02").text('-1m'); + $("#but22").text('+1m'); + $("#hltline").show(); + $("#hlt21").show(); + $("#but24").text('Pomp'); + } + }; + }, MLT_pv: function(s) { $("#mlt_pv").text(s); }, @@ -129,6 +262,13 @@ }, MLT_power: function(s) { $("#mlt_power").text(s); + if (Screen == 201) { + if (s != "") { + $("#but21").text('Uit'); + } else { + $("#but21").text('Aan'); + } + } }, MLT_led: function(s) { if (s == 0) @@ -154,10 +294,17 @@ $("#hlt21").show(); $("#hlt_table").show(); } - } + } }, HLT_power: function(s) { $("#hlt_power").text(s); + if (Screen == 201) { + if (s != "") { + $("#but24").text('Uit'); + } else { + $("#but24").text('Aan'); + } + } }, HLT_led: function(s) { if (s == 0) @@ -171,6 +318,20 @@ Timer: function(s) { $("#timer").text(s); }, + Brew1: function(s) { + $("#brew_msg1").text(s); + }, + Brew2: function(s) { + $("#brew_msg2").text(s); + }, + Beep: function(s) { + var loop = parseInt(s,10); + Beep.pause(); + Beep.loop = false; + for (i = 0; i < loop; i++) { + Beep.play(); + } + }, }; var BrewBoard = { @@ -182,6 +343,9 @@ main: function(v){ BBScreen.setScreen(v) }, + sub: function(v){ + BBScreen.setSubscreen(v) + }, mlt_pv:function(v){ BBScreen.MLT_pv(v) }, @@ -215,8 +379,16 @@ timer:function(v){ BBScreen.Timer(v) }, + beep:function(v){ + BBScreen.Beep(v) + }, + brew1:function(v){ + BBScreen.Brew1(v) + }, + brew2:function(v){ + BBScreen.Brew2(v) + }, }; - console.log(e); $.each(a,function(k,v){ if (typeof(c[k])!="undefined"){ c[k](v) @@ -227,13 +399,13 @@ function sendTouch(x, y) { - websocket.send('{"touch":{"x":'+x+',"y":'+y+'}}'); - console.log('Sent {"touch":{"x":'+x+',"y":'+y+'}}'); + websocket.send('{"touch":{"x":'+x+',"y":'+y+'}}'); } /* Define keys in the screens and their actions. */ $("#ok_info").click( function() { sendTouch(160,220); }); +$("#ok_note").click( function() { sendTouch(160,220); }); $("#mlt00").click( function() { sendTouch( 35, 46); }); $("#mlt20").click( function() { sendTouch(285, 46); }); $("#mlt01").click( function() { sendTouch( 35, 96); }); @@ -246,11 +418,12 @@ $("#hlt21").click( function() { sendTouch(285,220); }); $("#button_ja").click( function() { sendTouch( 80,120); }); $("#button_nee").click( function() { sendTouch(240,120); }); - +$("#button_stop").click( function() { sendTouch( 35,220); }); +$("#button_start").click( function() { sendTouch(285,220); }); websocket.onopen = function(evt) { - console.log('WebSocket connection opened'); - document.getElementById("test").innerHTML = "WebSocket is connected!"; + console.log('WebSocket connection opened'); + document.getElementById("test").innerHTML = ""; } /* diff -r 7639cfa6aec0 -r c6a1a6ca5437 image/w/webui.html --- a/image/w/webui.html Sat May 04 21:18:51 2019 +0200 +++ b/image/w/webui.html Tue May 07 22:03:38 2019 +0200 @@ -4,9 +4,9 @@ Web User Interface - + - + @@ -17,7 +17,7 @@
- + @@ -60,7 +60,7 @@ +
01:23:45
-
01:23:45
@@ -69,7 +69,7 @@
-
+
@@ -96,7 +96,7 @@ - + @@ -115,21 +115,40 @@

Parts are written by Chris Morgan, Brett Beauregard, Blake Felt, LoBo and David Antliff.

- +
- +
+
+
nm
+
+ +
+
+ +
+
Installatie:
+
Recept:
+
Zie het display voor de details.
+
+ + +
+
+
- + -

+

diff -r 7639cfa6aec0 -r c6a1a6ca5437 main/automation.c --- a/main/automation.c Sat May 04 21:18:51 2019 +0200 +++ b/main/automation.c Tue May 07 22:03:38 2019 +0200 @@ -40,6 +40,7 @@ extern bool System_TimeOk; ///< System time is valid extern sButton Buttons[MAXBUTTONS]; ///< Buttons definitions extern int Main_Screen; ///< Current screen +extern int Sub_Screen; ///< Sub screen during mash extern DS18B20_State *ds18b20_state; ///< DS18B20 state extern DRIVER_State *driver_state; ///< Relays driver state extern SemaphoreHandle_t xSemaphoreDS18B20; ///< DS18B20 lock semaphore @@ -64,8 +65,10 @@ */ bool Automation_Init(void) { + char msg[64]; + switch (Main_Screen) { - case MAIN_AUTO_INIT: + case MAIN_AUTO_INIT1: #ifdef CONFIG_TEMP_SENSORS_SIMULATOR Fake_MLT = recipe.MashStep[0].Temperature - 10; Fake_HLT = recipe.SpargeTemp - 15; @@ -136,7 +139,7 @@ runtime.UseHLT = _UseHLT = false; runtime.TimeBrewing = 0; TimeBrewing = 0; - runtime.StageResume = MAIN_AUTO_INIT; + runtime.StageResume = MAIN_AUTO_INIT1; runtime.StageTimeLeft = 0; runtime.HopAddition = 0; runtime.Logfile[0] = '\0'; @@ -147,6 +150,7 @@ vTaskDelay(250 / portTICK_PERIOD_MS); // Allow some time break; + case MAIN_AUTO_INIT2: case MAIN_AUTO_DELAYSTART: break; @@ -196,7 +200,9 @@ MaxMash = 75.0; } } - MashState = MASH_NONE; + MashState = Sub_Screen = MASH_NONE; + snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"\"}", Main_Screen, Sub_Screen); + ws_server_send_text_clients("/ws", msg, strlen(msg)); pumpTime = 0; pumpRest = false; runtime.StageResume = Main_Screen; @@ -227,13 +233,14 @@ Buttons_Add(255, 30, 60, 40, "-sp", 1); Buttons_Show(); ESP_LOGI(TAG, "Mash done, going to boil."); + Sub_Screen = 0; break; case MAIN_AUTO_BOILING: if (Resume) { TimeLeft = runtime.StageTimeLeft * 60; } else { - // +1 minute for flameout and 2 seconds for a smooth transition. + // +1 minute for flameout and for a smooth transition. runtime.StageTimeLeft = TimeLeft = (recipe.BoilTime * 60) + 60; runtime.StageResume = Main_Screen; runtime.HopAddition = 0; @@ -257,6 +264,7 @@ Buttons_Show(); ESP_LOGI(TAG, "Boil temperature reached, boil %d minutes", (TimeLeft / 60) -1); log_annotation(ANNOTATION_STAGE, "Koken"); + Sub_Screen = 0; break; case MAIN_AUTO_COOLING_H: @@ -373,16 +381,20 @@ bool Automation_Loop(void) { static bool beeped = false; - char tmp[32]; + char tmp[32], msg[256]; uint16_t y; switch (Main_Screen) { - case MAIN_AUTO_INIT: + case MAIN_AUTO_INIT1: /* * Present selected equipment and recipe. */ + Sub_Screen = 1; read_recipe(config.RecipeRec); + snprintf(msg, 255, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"\",\"brew1\":\"%s\",\"brew2\":\"%s\"}", + Main_Screen, Sub_Screen, equipment.Name, recipe.Name); + ws_server_send_text_clients("/ws", msg, strlen(msg)); y = 28; TopMessage("Automaat"); TFT_setFont(DEFAULT_FONT, NULL); @@ -462,15 +474,17 @@ break; case 1: loop = false; + Main_Screen = MAIN_AUTO_INIT2; break; default: break; } vTaskDelay(20 / portTICK_PERIOD_MS); } - if (Main_Screen == MAIN_AUTO_ABORT) - break; + Buttons_Clear(); + break; + case MAIN_AUTO_INIT2: _UseHLT = false; _bg = TFT_BLACK; TFT_fillScreen(_bg); @@ -598,7 +612,9 @@ driver_state->mlt_mode = MLT_MODE_PID; xSemaphoreGive(xSemaphoreDriver); } - MashState = MASH_WAITTEMP; + MashState = Sub_Screen = MASH_WAITTEMP; + snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"\"}", Main_Screen, Sub_Screen); + ws_server_send_text_clients("/ws", msg, strlen(msg)); ESP_LOGI(TAG, "Mash step %d type: %s time: %d temp: %4.1f min: %4.1f max: %4.1f", Main_Screen - MAIN_AUTO_MASH_IN, mashTypes[recipe.MashStep[Main_Screen - MAIN_AUTO_MASH_IN].Type], stageTime, stageTemp, MinMash, MaxMash); @@ -632,7 +648,9 @@ recipe.MashStep[Main_Screen - MAIN_AUTO_MASH_IN].Infusion_temp); TFT_print(temp_buf, CENTER, 135); SoundPlay(SOUND_Prompt); - MashState = MASH_INFUSE; + MashState = Sub_Screen = MASH_INFUSE; + snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"%s\"}", Main_Screen, Sub_Screen, temp_buf); + ws_server_send_text_clients("/ws", msg, strlen(msg)); if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { // No heating during the infusion. driver_state->mlt_sp = stageTemp; @@ -654,7 +672,9 @@ if ((temp_MLT >= stageTemp) && (Steady > 10)) { SoundPlay(SOUND_TempReached); TempReached = true; - MashState = MASH_REST; + MashState = Sub_Screen = MASH_REST; + snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"\"}", Main_Screen, Sub_Screen); + ws_server_send_text_clients("/ws", msg, strlen(msg)); if (Main_Screen == MAIN_AUTO_MASH_IN) { TimerSet(0); } else { @@ -756,7 +776,9 @@ TFT_setFont(DEJAVU24_FONT, NULL); TFT_print("Mout storten?", CENTER, 135); SoundPlay(SOUND_Prompt); - MashState = MASH_ADD; + MashState = Sub_Screen = MASH_ADD; + snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"Mout storten?\"}", Main_Screen, Sub_Screen); + ws_server_send_text_clients("/ws", msg, strlen(msg)); ESP_LOGI(TAG, "Mash add prompt"); break; } @@ -778,7 +800,9 @@ SoundPlay(SOUND_Prompt); beeped = false; TimerSet(config.IodineTime * 60); - MashState = MASH_IODINE; + MashState = Sub_Screen = MASH_IODINE; + snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"Jodium test?\"}", Main_Screen, Sub_Screen); + ws_server_send_text_clients("/ws", msg, strlen(msg)); ESP_LOGI(TAG, "Mash iodine test prompt"); break; } @@ -798,7 +822,9 @@ TFT_setFont(DEJAVU18_FONT, NULL); TFT_print("Mout verwijderen?", CENTER, 135); SoundPlay(SOUND_Prompt); - MashState = MASH_REMOVE; + MashState = Sub_Screen = MASH_REMOVE; + snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"Mout verwijderen?\"}", Main_Screen, Sub_Screen); + ws_server_send_text_clients("/ws", msg, strlen(msg)); ESP_LOGI(TAG, "Mash remove prompt"); break; } @@ -851,7 +877,9 @@ switch (Buttons_Scan()) { case 0: Main_Screen = MAIN_AUTO_ABORT; break; - case 1: MashState = MASH_WAITTEMP; + case 1: MashState = Sub_Screen = MASH_WAITTEMP; + snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"\"}", Main_Screen, Sub_Screen); + ws_server_send_text_clients("/ws", msg, strlen(msg)); if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { // Start PID again. driver_state->mlt_sp = stageTemp; @@ -1018,6 +1046,7 @@ */ Buttons_Clear(); TFT_fillScreen(_bg); + Sub_Screen = 1; if (Main_Screen == MAIN_AUTO_COOLING_H) { stageTemp = 77.0; } else if (Main_Screen == MAIN_AUTO_COOLING_M) { @@ -1025,6 +1054,8 @@ } else { stageTemp = recipe.CoolTemp; } + snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"\"}", Main_Screen, Sub_Screen); + ws_server_send_text_clients("/ws", msg, strlen(msg)); CoolBeep = false; ESP_LOGI(TAG, "Start cooling from %6.2f to %4.1f", ds18b20_state->mlt_temperature, stageTemp); if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { @@ -1146,6 +1177,7 @@ if (driver_state->mlt_pv <= driver_state->mlt_sp) { SoundPlay(SOUND_TempReached); Main_Screen++; + Sub_Screen = 0; } xSemaphoreGive(xSemaphoreDriver); } @@ -1179,6 +1211,9 @@ */ Buttons_Clear(); TFT_fillScreen(_bg); + Sub_Screen = 1; + snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"\"}", Main_Screen, Sub_Screen); + ws_server_send_text_clients("/ws", msg, strlen(msg)); if (Main_Screen == MAIN_AUTO_WHIRLPOOL9) { TimeWhirlPool = recipe.Whirlpool9; if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { @@ -1227,7 +1262,7 @@ ESP_LOGI(TAG, "Whirlpool %d minutes, sp %4.1f", TimeWhirlPool, driver_state->mlt_sp); Buttons_Add(255, 120, 60, 40, "+1m", 0); Buttons_Add( 5, 120, 60, 40, "-1m", 1); - Buttons_Add(130, 200, 60, 40, "Pomp", 2); + Buttons_Add(255, 200, 60, 40, "Pomp", 2); Buttons_Show(); } } else { diff -r 7639cfa6aec0 -r c6a1a6ca5437 main/brewboard.c --- a/main/brewboard.c Sat May 04 21:18:51 2019 +0200 +++ b/main/brewboard.c Tue May 07 22:03:38 2019 +0200 @@ -21,6 +21,7 @@ int Main_Screen = MAIN_MODE_UNKNOWN; ///< Screen number int Old_Screen = MAIN_MODE_UNKNOWN; ///< Previous screen number +int Sub_Screen = 0; ///< Subscreen during mash bool System_TimeOk = false; ///< System time status const esp_app_desc_t *app_desc = NULL; diff -r 7639cfa6aec0 -r c6a1a6ca5437 main/config.h --- a/main/config.h Sat May 04 21:18:51 2019 +0200 +++ b/main/config.h Tue May 07 22:03:38 2019 +0200 @@ -107,7 +107,8 @@ MAIN_TOOLS_FILES_RESTORE, ///< Main files restore. MAIN_TOOLS_FILES_BACKUP, ///< Main files backup. MAIN_TOOLS_UPDATES, ///< Main Updates. - MAIN_AUTO_INIT, ///< Automatic start + MAIN_AUTO_INIT1 = 96, ///< Automatic start part 1 + MAIN_AUTO_INIT2, ///< Automatic start part 2 MAIN_AUTO_DELAYSTART, ///< Delayed start MAIN_AUTO_HEATUP, ///< Heatup the system MAIN_AUTO_MASH_IN = 100, ///< Mash-in diff -r 7639cfa6aec0 -r c6a1a6ca5437 main/task_sound.c --- a/main/task_sound.c Sat May 04 21:18:51 2019 +0200 +++ b/main/task_sound.c Tue May 07 22:03:38 2019 +0200 @@ -43,14 +43,26 @@ */ void BuzzerPlay(const uint16_t *sound) { + char msg[16]; + for (int i = 1; i <= sound[0]; i += 2) { gpio_set_level(PIEZO_BUZZER, 1); + if (sound != _sound_Startup) { + snprintf(msg, 15, "{\"beep\":\"1\"}"); + ws_server_send_text_clients("/ws", msg, strlen(msg)); + } vTaskDelay(sound[i] / portTICK_PERIOD_MS); gpio_set_level(PIEZO_BUZZER, 0); +// if (sound != _sound_Startup) { + // snprintf(msg, 15, "{\"beep\":\"0\"}"); + // ws_server_send_text_clients("/ws", msg, strlen(msg)); +// } vTaskDelay(sound[i+1] / portTICK_PERIOD_MS); } gpio_set_level(PIEZO_BUZZER, 0); // Just make sure the sound is off. +// snprintf(msg, 15, "{\"beep\":\"0\"}"); +// ws_server_send_text_clients("/ws", msg, strlen(msg)); } diff -r 7639cfa6aec0 -r c6a1a6ca5437 main/task_tft.c --- a/main/task_tft.c Sat May 04 21:18:51 2019 +0200 +++ b/main/task_tft.c Tue May 07 22:03:38 2019 +0200 @@ -13,8 +13,9 @@ spi_lobo_device_handle_t tsspi = NULL; ///< Touchscreen SPI handler extern sButton Buttons[MAXBUTTONS]; ///< 40 buttons on a screen. time_t now; ///< Current time +time_t last = 0; ///< Last time struct tm timeinfo; ///< Current time structure -char s_timer[10]; ///< Timer sctring buffer +char s_timer[10]; ///< Timer string buffer char s_top_msg[64]; ///< Top message string buffer extern float stageTemp; @@ -37,6 +38,7 @@ #define SPI_BUS TFT_HSPI_HOST ///< SPI bus for the TFT, TFT_VSPI_HOST or TFT_HSPI_HOST extern int Main_Screen; +extern int Sub_Screen; extern int Old_Screen; extern int MLT_pin; extern int HLT_pin; @@ -471,10 +473,10 @@ hlt_sp[0] = '\0'; hlt_power[0] = '\0'; } - snprintf(msg, 1023, "{\"main\":\"%d\",\"mlt_led\":\"%d\",\"mlt_pv\":\"%7.3f\",\"mlt_sp\":\"%s\",\"mlt_power\":\"%s\"" \ + snprintf(msg, 1023, "{\"main\":\"%d\",\"sub\":\"%d\",\"mlt_led\":\"%d\",\"mlt_pv\":\"%7.3f\",\"mlt_sp\":\"%s\",\"mlt_power\":\"%s\"" \ ",\"pump_led\":\"%d\",\"hlt_led\":\"%d\",\"hlt_pv\":\"%7.3f\",\"hlt_sp\":\"%s\",\"hlt_power\":\"%s\"" \ ",\"timer\":\"%s\",\"top_msg\":\"%s\"}", - Main_Screen, (MLT_pin) ? 1:0, driver_state->mlt_pv, mlt_sp, mlt_power, + Main_Screen, Sub_Screen, (MLT_pin) ? 1:0, driver_state->mlt_pv, mlt_sp, mlt_power, (Pump_pin) ? 1:0, (HLT_pin) ? 1:0, driver_state->hlt_pv, hlt_sp, hlt_power, s_timer, s_top_msg); @@ -488,7 +490,7 @@ void task_tft(void *pvParameter) { - char msg[32]; + char msg[64]; ESP_LOGI(TAG, "Initialize TFT/Touch task"); @@ -529,7 +531,8 @@ /* * With each screenchange, remove the timer too. */ - snprintf(msg, 31, "{\"main\":\"%d\",\"timer\":\"\"}", Main_Screen); + Sub_Screen = 0; + snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"\"}", Main_Screen, Sub_Screen); ws_server_send_text_clients("/ws", msg, strlen(msg)); ESP_LOGI(TAG, "Change screen %d to %d", Old_Screen, Main_Screen); @@ -619,7 +622,8 @@ Updates_Init(); break; - case MAIN_AUTO_INIT: + case MAIN_AUTO_INIT1: + case MAIN_AUTO_INIT2: case MAIN_AUTO_DELAYSTART: case MAIN_AUTO_HEATUP: case MAIN_AUTO_MASH_IN: @@ -667,17 +671,20 @@ } switch (Buttons_Scan()) { case 0: Main_Screen = MAIN_MANUAL_INIT; break; - case 1: Main_Screen = MAIN_AUTO_INIT; break; - case 2: Main_Screen = MAIN_INFO; break; - case 3: Main_Screen = MAIN_TOOLS; break; + case 1: Main_Screen = MAIN_AUTO_INIT1; break; + case 2: Main_Screen = MAIN_INFO; break; + case 3: Main_Screen = MAIN_TOOLS; break; default: break; } - if (System_TimeOk) { + if (System_TimeOk && (now != last)) { + last = now; strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo); TFT_setFont(DEJAVU18_FONT, NULL); _bg = TFT_BLACK; _fg = TFT_ORANGE; TFT_print(strftime_buf, CENTER, 125); + snprintf(msg, 63, "{\"timer\":\"%s\"}", strftime_buf); // Fix string termination and only send once/second. + ws_server_send_text_clients("/ws", msg, strlen(msg)); } break; @@ -736,7 +743,8 @@ } break; - case MAIN_AUTO_INIT: + case MAIN_AUTO_INIT1: + case MAIN_AUTO_INIT2: case MAIN_AUTO_DELAYSTART: case MAIN_AUTO_HEATUP: case MAIN_AUTO_MASH_IN: diff -r 7639cfa6aec0 -r c6a1a6ca5437 main/updates.c --- a/main/updates.c Sat May 04 21:18:51 2019 +0200 +++ b/main/updates.c Tue May 07 22:03:38 2019 +0200 @@ -219,7 +219,7 @@ } else if (data_read == 0) { break; } - vTaskDelay(5 / portTICK_PERIOD_MS); + vTaskDelay(10 / portTICK_PERIOD_MS); } fclose(f); @@ -278,8 +278,6 @@ fgets(v2, 11, f); fclose(f); } -// ESP_LOG_BUFFER_HEXDUMP(TAG, v1, strlen(v1), ESP_LOG_INFO); -// ESP_LOG_BUFFER_HEXDUMP(TAG, v2, strlen(v2), ESP_LOG_INFO); if (strcmp(v1, v2) == 0) { ESP_LOGI(TAG, "/spiffs is up to date"); TFT_print("Ok\r\n", LASTX, LASTY); diff -r 7639cfa6aec0 -r c6a1a6ca5437 sdkconfig --- a/sdkconfig Sat May 04 21:18:51 2019 +0200 +++ b/sdkconfig Tue May 07 22:03:38 2019 +0200 @@ -224,7 +224,7 @@ CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32 # CONFIG_ESP32_WIFI_DEBUG_LOG_ENABLE is not set CONFIG_ESP32_WIFI_IRAM_OPT=y -CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y +# CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE is not set # CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 CONFIG_ESP32_PHY_MAX_TX_POWER=20