text: var COMPODOC_SEARCH_INDEX = {
      "index": {"version":"2.3.8","fields":["title","body"],"fieldVectors":[["title/classes/BrewFatherHelper.html",[0,0.215,1,1.922]],["body/classes/BrewFatherHelper.html",[0,0.321,1,3.362,2,0.764,3,0.764,4,0.652,5,0.45,6,0.526,7,0.419,8,3.403,9,0.548,10,2.902,11,4.214,12,4.911,13,4.911,14,0.808,15,0.652,16,4.202,17,0.885,18,0.05,19,0.699,20,0.45,21,0.885,22,4.202,23,2.876,24,0.764,25,3.075,26,3.075,27,0.575,28,0.885,29,0.652,30,0.975,31,4.202,32,4.202,33,4.202,34,2.876,35,4.202,36,2.876,37,4.202,38,2.876,39,4.202,40,2.876,41,4.202,42,2.876,43,0.764,44,4.202,45,4.911,46,2.876,47,4.202,48,2.876,49,4.202,50,4.202,51,4.202,52,0.652,53,4.202,54,2.483,55,3.403,56,4.202,57,2.876,58,0.036,59,0.042,60,0.036]],["title/classes/BrewSessionState.html",[0,0.215,61,0.591]],["body/classes/BrewSessionState.html",[0,0.411,2,0.382,3,0.382,4,0.326,5,0.225,6,0.503,7,0.4,9,0.274,14,0.777,15,0.705,17,0.443,18,0.05,19,0.481,20,0.516,21,0.443,24,0.564,27,0.465,28,0.443,29,0.812,30,0.825,43,0.789,52,0.572,58,0.018,59,0.027,60,0.018,61,0.653,62,0.443,63,0.653,64,0.856,65,0.913,66,0.805,67,0.749,68,1.327,69,1.327,70,0.818,71,1.414,72,1.414,73,0.658,74,0.854,75,0.988,76,1.186,77,3.102,78,1.053,79,0.996,80,0.854,81,0.824,82,0.749,83,1.096,84,0.749,85,0.653,86,0.847,87,0.983,88,0.854,89,0.653,90,0.564,91,1.11,92,0.983,93,1.096,94,0.749,95,0.988,96,0.854,97,0.854,98,0.913,99,1.015,100,0.895,101,0.956,102,0.632,103,0.856,104,2.103,105,2.103,106,2.103,107,2.103,108,1.134,109,1.096,110,0.443,111,0.382,112,0.443,113,0.856,114,0.579,115,0.508,116,0.579,117,0.579,118,0.508,119,0.508,120,0.382,121,0.508,122,0.579,123,0.508,124,0.983,125,0.508,126,0.564,127,1.184,128,0.382,129,0.854,130,0.579,131,0.579,132,0.67,133,1.12,134,1.195,135,0.579,136,0.579,137,0.579,138,0.579,139,0.579,140,0.508,141,0.579,142,1.355,143,0.579,144,0.508,145,0.508,146,1.12,147,1.355,148,0.89,149,0.579,150,1.015,151,0.579,152,0.89,153,0.579,154,0.579,155,0.89,156,0.854,157,0.854,158,1.164,159,0.579,160,0.579,161,0.579,162,0.89,163,0.564,164,0.854,165,1.015,166,0.564,167,0.854,168,0.854,169,0.854,170,0.854,171,0.579,172,0.89,173,0.564,174,0.579,175,0.579,176,1.015,177,0.579,178,0.983,179,0.789,180,0.579,181,0.579,182,0.579,183,0.579,184,0.579,185,0.508,186,0.854,187,0.579,188,0.579,189,0.579,190,0.579,191,0.705,192,0.91,193,0.749,194,0.508,195,0.508,196,0.382,197,0.789,198,0.508,199,0.508,200,0.89,201,0.443,202,0.508,203,0.382,204,0.789,205,0.443,206,0.382,207,0.564,208,0.443,209,0.653,210,0.776,211,0.777,212,0.653,213,0.653,214,0.443,215,0.856,216,0.326,217,0.74,218,0.382,219,0.382,220,1.175,221,0.579,222,0.579,223,0.579,224,1.253,225,0.579,226,1.29,227,0.579,228,0.579,229,0.923,230,0.579,231,1.397,232,0.579,233,0.579,234,0.579,235,1.015,236,1.397,237,1.12,238,1.12,239,0.579,240,0.579,241,0.508,242,0.508,243,0.854,244,0.579,245,0.579,246,0.508,247,0.579,248,0.579,249,0.579,250,0.579,251,0.326,252,0.579,253,0.749,254,0.579,255,0.508,256,0.382,257,0.89,258,0.579,259,0.579,260,0.579,261,0.579,262,0.579,263,0.854,264,0.854,265,0.579,266,0.579,267,0.579,268,1.208,269,0.508,270,0.508,271,0.579,272,0.579,273,0.579,274,0.579,275,0.579,276,0.579,277,0.579,278,0.382,279,0.749,280,0.74,281,0.564,282,0.749,283,1.048,284,0.508,285,0.508,286,0.508,287,0.749,288,0.749,289,0.89,290,0.508,291,0.508,292,0.508,293,0.579,294,0.854,295,0.854,296,0.579,297,0.579,298,1.327,299,0.382,300,1.327,301,0.579,302,0.579,303,0.382,304,1.015,305,0.579,306,0.579,307,0.579,308,0.382,309,0.579,310,0.579,311,0.854,312,1.015,313,1.157,314,1.12,315,0.579,316,0.579,317,0.579,318,0.579,319,0.988,320,0.508,321,0.508,322,1.014,323,0.508,324,0.508,325,0.579,326,0.579,327,0.579,328,0.579,329,1.015,330,1.12,331,1.12,332,1.12,333,1.12,334,1.12,335,0.579,336,1.048,337,0.579,338,1.015,339,0.579,340,0.776,341,0.443,342,0.579,343,0.579,344,0.776,345,0.508,346,0.508,347,0.508,348,0.508,349,1.048,350,0.983,351,0.579,352,0.579,353,0.579,354,0.579,355,0.579,356,0.579,357,0.579,358,1.015,359,0.579,360,0.749,361,0.856,362,0.579,363,0.579,364,0.382,365,0.508,366,0.67,367,0.579,368,0.749,369,0.579,370,0.749,371,1.25,372,1.188,373,1.25,374,0.508,375,0.854,376,0.579,377,0.579,378,0.508,379,0.508,380,0.508,381,0.579,382,0.579,383,1.015,384,0.508,385,0.579,386,0.579,387,0.508,388,0.749,389,0.749,390,0.508,391,0.579,392,0.508,393,1.015,394,1.12,395,1.12,396,1.12,397,1.12,398,1.12,399,1.12,400,0.579,401,0.508,402,0.579,403,0.579,404,0.579,405,0.579,406,0.579,407,0.579,408,0.579,409,0.579,410,0.579,411,0.579,412,0.579,413,0.579,414,0.579]],["title/classes/CStatus.html",[0,0.215,299,0.511]],["body/classes/CStatus.html",[0,0.414,2,0.395,3,0.395,4,0.337,5,0.233,6,0.402,7,0.32,9,0.283,14,0.736,15,0.493,17,0.457,18,0.05,19,0.414,20,0.443,21,0.457,24,0.578,27,0.471,28,0.457,29,0.817,30,0.835,43,0.799,52,0.493,58,0.019,59,0.027,60,0.019,61,0.457,62,0.457,63,0.457,64,0.79,65,0.79,66,0.783,67,0.767,68,1.138,69,1.138,70,0.783,71,1.339,72,1.339,73,0.679,74,0.598,75,0.87,76,1.176,78,1.061,79,1,80,0.598,81,0.823,82,0.525,83,0.907,84,0.525,85,0.457,86,0.845,87,0.767,88,0.598,89,0.457,90,0.395,91,1.088,92,0.767,93,0.907,94,0.525,95,0.87,96,0.598,97,0.598,98,0.79,99,0.875,100,0.835,101,0.87,102,0.583,103,0.79,108,1.146,109,1.109,110,0.457,111,0.395,112,0.457,113,0.87,114,0.598,115,0.525,116,0.598,117,0.598,118,0.525,119,0.525,120,0.395,121,0.525,122,0.598,123,0.525,124,0.998,125,0.525,126,0.578,127,1.191,128,0.395,129,0.875,130,0.598,131,0.598,132,0.683,133,1.306,134,1.211,135,0.598,136,0.598,137,0.598,138,0.598,139,0.598,140,0.525,141,0.598,142,1.366,143,0.598,144,0.525,145,0.525,146,1.138,147,1.366,148,1.062,149,0.598,150,1.034,151,0.598,152,0.907,153,0.598,154,0.598,155,0.907,156,0.875,157,0.875,158,1.175,159,0.598,160,0.598,161,0.598,162,0.907,163,0.578,164,0.875,165,1.034,166,0.578,167,0.875,168,0.875,169,0.875,170,0.875,171,0.598,172,0.907,173,0.578,174,0.598,175,0.598,176,1.034,177,0.598,178,0.998,179,0.799,180,0.598,181,0.598,182,0.598,183,0.598,184,0.598,185,0.525,186,0.875,187,0.598,188,0.598,189,0.598,190,0.598,191,0.713,192,0.929,193,0.767,194,0.525,195,0.525,196,0.395,197,0.799,198,0.525,199,0.525,200,0.907,201,0.457,202,0.525,203,0.395,204,0.799,205,0.457,206,0.395,207,0.578,208,0.457,209,0.669,210,0.79,211,0.783,212,0.669,213,0.669,214,0.457,215,0.87,216,0.337,217,0.751,218,0.395,219,0.395,220,1.178,221,0.598,222,0.598,223,0.598,224,1.26,225,0.598,226,1.296,227,0.598,228,0.598,229,0.929,230,0.598,231,1.407,232,0.598,233,0.598,234,0.598,235,1.034,236,1.407,237,1.138,238,1.138,239,0.598,240,0.598,241,0.525,242,0.525,243,0.875,244,0.598,245,0.598,246,0.525,247,0.598,248,0.598,249,0.598,250,0.598,251,0.337,252,0.598,253,0.767,254,0.598,255,0.525,256,0.395,257,0.907,258,0.598,259,0.598,260,0.598,261,0.598,262,0.598,263,0.875,264,0.875,265,0.598,266,0.598,267,0.598,268,1.218,269,0.525,270,0.525,271,0.598,272,0.598,273,0.598,274,0.598,275,0.598,276,0.598,277,0.598,278,0.395,279,0.767,280,0.751,281,0.578,282,0.767,283,1.062,284,0.525,285,0.525,286,0.525,287,0.767,288,0.767,289,0.907,290,0.525,291,0.525,292,0.525,293,0.598,294,0.875,295,0.875,296,0.598,297,0.598,298,1.366,299,0.578,300,1.366,301,0.875,302,0.875,303,0.395,304,1.034,305,0.598,306,0.598,307,0.598,308,0.395,309,0.598,310,0.598,311,0.875,312,1.034,313,1.161,314,1.138,315,0.598,316,0.598,317,0.598,318,0.598,319,0.998,320,0.525,321,0.525,322,1.024,323,0.525,324,0.525,325,0.598,326,0.598,327,0.598,328,0.598,329,1.034,330,1.138,331,1.138,332,1.138,333,1.138,334,1.138,335,0.598,336,1.062,337,0.598,338,1.034,339,0.598,340,0.79,341,0.457,342,0.598,343,0.598,344,0.79,345,0.525,346,0.525,347,0.525,348,0.525,349,1.062,350,0.998,351,0.598,352,0.598,353,0.598,354,0.598,355,0.598,356,0.598,357,0.598,358,1.034,359,0.598,360,0.767,361,0.87,362,0.598,363,0.598,364,0.395,365,0.525,366,0.683,367,0.598,368,0.767,369,0.598,370,0.767,371,1.265,372,1.198,373,1.265,374,0.525,375,0.875,376,0.598,377,0.598,378,0.525,379,0.525,380,0.525,381,0.598,382,0.598,383,1.034,384,0.525,385,0.598,386,0.598,387,0.525,388,0.767,389,0.767,390,0.525,391,0.598,392,0.525,393,1.034,394,1.138,395,1.138,396,1.138,397,1.138,398,1.138,399,1.138,400,0.598,401,0.525,402,0.598,403,0.598,404,0.598,405,0.598,406,0.598,407,0.598,408,0.598,409,0.598,410,0.598,411,0.598,412,0.598,413,0.598,414,0.598,415,3.176]],["title/classes/FStatus.html",[0,0.215,303,0.511]],["body/classes/FStatus.html",[0,0.414,2,0.395,3,0.395,4,0.337,5,0.233,6,0.402,7,0.32,9,0.283,14,0.783,15,0.493,17,0.457,18,0.05,19,0.414,20,0.443,21,0.457,24,0.578,27,0.471,28,0.457,29,0.817,30,0.835,43,0.799,52,0.493,58,0.019,59,0.027,60,0.019,61,0.457,62,0.457,63,0.457,64,0.79,65,0.79,66,0.783,67,0.767,68,1.138,69,1.138,70,0.783,71,1.339,72,1.339,73,0.679,74,0.598,75,0.87,76,1.169,78,1.061,79,1,80,0.598,81,0.823,82,0.525,83,0.907,84,0.525,85,0.457,86,0.845,87,0.767,88,0.598,89,0.457,90,0.395,91,1.088,92,0.767,93,0.907,94,0.525,95,0.87,96,0.598,97,0.598,98,0.79,99,0.875,100,0.835,101,0.87,102,0.583,103,0.79,108,1.146,109,1.109,110,0.457,111,0.395,112,0.457,113,0.87,114,0.598,115,0.525,116,0.598,117,0.598,118,0.525,119,0.525,120,0.395,121,0.525,122,0.598,123,0.525,124,0.998,125,0.525,126,0.578,127,1.191,128,0.395,129,0.875,130,0.598,131,0.598,132,0.683,133,1.138,134,1.211,135,0.598,136,0.598,137,0.598,138,0.598,139,0.598,140,0.525,141,0.598,142,1.366,143,0.598,144,0.525,145,0.525,146,1.138,147,1.366,148,0.907,149,0.598,150,1.034,151,0.598,152,1.062,153,0.598,154,0.598,155,0.907,156,0.875,157,0.875,158,1.175,159,0.598,160,0.598,161,0.598,162,0.907,163,0.578,164,0.875,165,1.034,166,0.578,167,0.875,168,0.875,169,0.875,170,0.875,171,0.598,172,0.907,173,0.578,174,0.598,175,0.598,176,1.034,177,0.598,178,0.998,179,0.799,180,0.598,181,0.598,182,0.598,183,0.598,184,0.598,185,0.525,186,0.875,187,0.598,188,0.598,189,0.598,190,0.598,191,0.713,192,0.929,193,0.767,194,0.525,195,0.525,196,0.395,197,0.799,198,0.525,199,0.525,200,0.907,201,0.457,202,0.525,203,0.395,204,0.799,205,0.457,206,0.395,207,0.578,208,0.457,209,0.669,210,0.79,211,0.783,212,0.669,213,0.669,214,0.457,215,0.87,216,0.337,217,0.751,218,0.395,219,0.395,220,1.178,221,0.598,222,0.598,223,0.598,224,1.26,225,0.598,226,1.296,227,0.598,228,0.598,229,0.929,230,0.598,231,1.407,232,0.598,233,0.598,234,0.598,235,1.034,236,1.407,237,1.138,238,1.138,239,0.598,240,0.598,241,0.525,242,0.525,243,0.875,244,0.598,245,0.598,246,0.525,247,0.598,248,0.598,249,0.598,250,0.598,251,0.337,252,0.598,253,0.767,254,0.598,255,0.525,256,0.395,257,0.907,258,0.598,259,0.598,260,0.598,261,0.598,262,0.598,263,0.875,264,0.875,265,0.598,266,0.598,267,0.598,268,1.218,269,0.525,270,0.525,271,0.598,272,0.598,273,0.598,274,0.598,275,0.598,276,0.598,277,0.598,278,0.395,279,0.767,280,0.751,281,0.578,282,0.767,283,1.062,284,0.525,285,0.525,286,0.525,287,0.767,288,0.767,289,0.907,290,0.525,291,0.525,292,0.525,293,0.598,294,0.875,295,0.875,296,0.598,297,0.598,298,1.366,299,0.395,300,1.366,301,0.598,302,0.598,303,0.578,304,1.265,305,0.875,306,0.875,307,0.598,308,0.395,309,0.598,310,0.598,311,0.875,312,1.034,313,1.161,314,1.138,315,0.598,316,0.598,317,0.598,318,0.598,319,0.998,320,0.525,321,0.525,322,1.024,323,0.525,324,0.525,325,0.598,326,0.598,327,0.598,328,0.598,329,1.034,330,1.138,331,1.138,332,1.138,333,1.138,334,1.138,335,0.598,336,1.062,337,0.598,338,1.034,339,0.598,340,0.79,341,0.457,342,0.598,343,0.598,344,0.79,345,0.525,346,0.525,347,0.525,348,0.525,349,1.062,350,0.998,351,0.598,352,0.598,353,0.598,354,0.598,355,0.598,356,0.598,357,0.598,358,1.034,359,0.598,360,0.767,361,0.87,362,0.598,363,0.598,364,0.395,365,0.525,366,0.683,367,0.598,368,0.767,369,0.598,370,0.767,371,1.265,372,1.198,373,1.265,374,0.525,375,0.875,376,0.598,377,0.598,378,0.525,379,0.525,380,0.525,381,0.598,382,0.598,383,1.034,384,0.525,385,0.598,386,0.598,387,0.525,388,0.767,389,0.767,390,0.525,391,0.598,392,0.525,393,1.034,394,1.138,395,1.138,396,1.138,397,1.138,398,1.138,399,1.138,400,0.598,401,0.525,402,0.598,403,0.598,404,0.598,405,0.598,406,0.598,407,0.598,408,0.598,409,0.598,410,0.598,411,0.598,412,0.598,413,0.598,414,0.598,416,3.176]],["title/classes/GrainFatherNotifications.html",[0,0.215,128,0.511]],["body/classes/GrainFatherNotifications.html",[0,0.409,2,0.372,3,0.372,4,0.318,5,0.219,6,0.54,7,0.43,9,0.267,10,1.798,14,0.758,15,0.772,17,0.764,18,0.05,19,0.524,20,0.547,21,0.764,23,2.484,24,0.553,27,0.54,28,0.431,29,0.808,30,0.818,43,0.78,52,0.563,58,0.018,59,0.026,60,0.018,61,0.431,62,0.431,63,0.64,64,0.764,65,0.764,66,0.801,67,0.735,68,1.106,69,1.106,70,0.808,71,1.317,72,1.317,74,0.564,75,0.903,76,1.168,78,1.028,79,0.99,80,0.564,81,0.83,82,0.495,83,0.877,84,0.495,85,0.431,86,0.838,87,0.735,88,0.564,89,0.431,90,0.372,91,1.113,92,0.735,93,0.877,94,0.495,95,0.903,96,0.564,97,0.564,98,0.845,99,0.999,100,0.87,101,0.946,102,0.623,103,0.845,108,1.201,109,1.086,110,0.431,111,0.372,112,0.64,113,1.007,114,0.838,115,0.735,116,0.838,117,0.838,118,0.735,119,0.735,120,0.553,121,0.735,122,0.838,123,0.735,124,1.086,125,0.735,126,0.73,127,1.183,128,0.553,129,1.106,130,0.999,131,0.999,132,0.73,133,1.238,134,1.282,135,0.838,136,0.564,137,0.564,138,0.564,139,0.564,140,0.495,141,0.564,142,1.346,143,0.564,144,0.495,145,0.495,146,1.106,147,1.346,148,0.877,149,0.564,150,0.999,151,0.564,152,0.877,153,0.564,154,0.564,155,0.877,156,0.838,157,0.838,158,1.155,159,0.564,160,0.564,161,0.564,162,0.877,163,0.553,164,0.838,165,0.999,166,0.553,167,0.838,168,0.838,169,0.838,170,0.838,171,0.564,172,0.877,173,0.553,174,0.564,175,0.564,176,0.999,177,0.564,178,0.97,179,0.888,180,0.564,181,0.564,182,0.564,183,0.564,184,0.564,185,0.735,186,0.838,187,0.838,188,0.838,189,0.838,190,0.838,191,0.742,192,0.917,193,0.877,194,0.735,195,0.735,196,0.553,197,0.818,198,0.735,199,0.735,200,0.97,201,0.64,202,0.735,203,0.553,204,0.87,205,0.64,206,0.553,207,0.73,208,0.64,209,0.845,210,0.845,211,0.801,212,0.764,213,0.764,214,0.64,215,0.946,216,0.472,217,0.78,218,0.553,219,0.553,220,1.172,221,0.838,222,0.564,223,0.564,224,1.246,225,0.564,226,1.285,227,0.564,228,0.564,229,0.917,230,0.564,231,1.389,232,0.564,233,0.564,234,0.564,235,0.999,236,1.389,237,1.106,238,1.106,239,0.564,240,0.564,241,0.495,242,0.495,243,0.838,244,0.564,245,0.564,246,0.495,247,0.564,248,0.564,249,0.564,250,0.564,251,0.318,252,0.564,253,0.735,254,0.564,255,0.495,256,0.372,257,0.877,258,0.564,259,0.564,260,0.564,261,0.564,262,0.564,263,0.838,264,0.838,265,0.564,266,0.564,267,0.564,268,1.201,269,0.495,270,0.495,271,0.564,272,0.564,273,0.564,274,0.564,275,0.564,276,0.564,277,0.564,278,0.372,279,0.735,280,0.73,281,0.553,282,0.735,283,1.036,284,0.495,285,0.495,286,0.495,287,0.735,288,0.735,289,0.877,290,0.495,291,0.495,292,0.495,293,0.564,294,0.838,295,0.838,296,0.564,297,0.564,298,1.317,299,0.372,300,1.317,301,0.564,302,0.564,303,0.372,304,0.999,305,0.564,306,0.564,307,0.564,308,0.372,309,0.564,310,0.564,311,0.838,312,0.999,313,1.153,314,1.106,315,0.564,316,0.564,317,0.564,318,0.564,319,0.98,320,0.495,321,0.495,322,1.007,323,0.495,324,0.495,325,0.564,326,0.564,327,0.564,328,0.564,329,0.999,330,1.106,331,1.106,332,1.106,333,1.106,334,1.106,335,0.564,336,1.036,337,0.564,338,0.999,339,0.564,340,0.764,341,0.431,342,0.564,343,0.564,344,0.764,345,0.495,346,0.495,347,0.495,348,0.495,349,1.036,350,0.97,351,0.564,352,0.564,353,0.564,354,0.564,355,0.564,356,0.564,357,0.564,358,0.999,359,0.564,360,0.735,361,0.845,362,0.564,363,0.564,364,0.372,365,0.495,366,0.66,367,0.564,368,0.735,369,0.564,370,0.735,371,1.238,372,1.18,373,1.238,374,0.495,375,0.838,376,0.564,377,0.564,378,0.495,379,0.495,380,0.495,381,0.564,382,0.564,383,0.999,384,0.495,385,0.564,386,0.564,387,0.495,388,0.735,389,0.735,390,0.495,391,0.564,392,0.495,393,0.999,394,1.106,395,1.106,396,1.106,397,1.106,398,1.106,399,1.106,400,0.564,401,0.495,402,0.564,403,0.564,404,0.564,405,0.564,406,0.564,407,0.564,408,0.564,409,0.564,410,0.564,411,0.564,412,0.564,413,0.564,414,0.564,417,3.042,418,3.042,419,2.463,420,3.042,421,2.048,422,2.048,423,2.048,424,2.048,425,2.048,426,2.463,427,2.048,428,2.048,429,2.048,430,2.048,431,2.048,432,2.048]],["title/modules/GrainfatherControlModule.html",[433,1.922,434,1.922]],["body/modules/GrainfatherControlModule.html",[0,0.19,3,0.637,4,0.387,5,0.375,6,0.58,7,0.481,10,1.471,14,0.387,15,0.835,17,1.106,18,0.05,19,0.685,20,0.556,21,1.106,23,3.683,24,0.843,27,0.515,28,0.524,29,0.544,30,0.898,52,0.544,57,3.683,58,0.021,59,0.03,60,0.021,63,1.079,65,0.737,66,0.746,70,0.815,78,0.737,79,0.917,81,0.84,85,0.926,89,0.737,100,0.8,102,0.387,108,0.979,109,0.846,110,0.524,111,0.8,112,0.737,113,1.062,115,0.846,120,0.453,123,0.979,124,1.3,127,0.926,128,0.843,132,0.637,140,0.846,163,0.637,166,0.637,173,0.637,179,0.637,185,0.846,191,0.544,192,0.8,193,0.846,196,0.453,203,0.917,204,0.453,205,0.926,206,0.453,207,0.8,211,0.544,214,0.737,216,0.767,219,0.932,220,1.062,251,0.544,256,0.843,278,0.8,281,0.874,283,0.601,299,0.637,303,0.637,308,0.637,341,0.737,361,0.737,364,0.637,366,0.874,372,1.062,419,2.016,426,3.754,434,2.398,435,1.704,436,4.383,437,2.016,438,3.562,439,2.837,440,3.503,441,3.503,442,5.529,443,3.503,444,5.381,445,4.939,446,3.503,447,3.503,448,5.253,449,3.503,450,3.503,451,3.562,452,3.503,453,2.49,454,3.503,455,3.503,456,3.503,457,3.503,458,4.084,459,3.503,460,4.084,461,2.49,462,3.503,463,4,464,4.053,465,2.49,466,3.503,467,4.151,468,2.49,469,3.503,470,2.49,471,3.503,472,3.503,473,3.503,474,2.49,475,3.503,476,2.49,477,3.503,478,2.837,479,3.503,480,3.503,481,3.503,482,3.503,483,4.635,484,2.49,485,3.503,486,3.562,487,3.503,488,3.503,489,2.837,490,4.939,491,3.452,492,3.503,493,3.503,494,2.837,495,3.503,496,3.503,497,3.503,498,4.053,499,3.503,500,2.49,501,3.503,502,2.49,503,4.399,504,3.503,505,3.503,506,5.195,507,2.49,508,3.503,509,2.49,510,3.503,511,2.49,512,2.599,513,3.503,514,3.503,515,2.49,516,3.503,517,4.635,518,2.49,519,3.503,520,4.053,521,2.49,522,3.503,523,5.302,524,4.293,525,2.49,526,4.808,527,4.053,528,5.126,529,2.49,530,3.503,531,2.49,532,2.49,533,3.503,534,2.49,535,3.503,536,3.282,537,3.503,538,2.49,539,3.503,540,2.837,541,4.053,542,1.704,543,2.016,544,2.016,545,2.016,546,2.49,547,1.704,548,2.774,549,1.704,550,2.919,551,1.471,552,2.398,553,1.704,554,1.704,555,1.704,556,1.704,557,1.704,558,2.016,559,1.704,560,1.704,561,1.704,562,1.704,563,1.704,564,2.398,565,1.704,566,1.704,567,1.704,568,1.704,569,1.704,570,1.704,571,1.471,572,1.704,573,1.704,574,1.704,575,1.704,576,3.503,577,3.503,578,3.503,579,2.49,580,2.49,581,2.016,582,2.49,583,2.016,584,2.016,585,2.016,586,2.49,587,2.49,588,2.49,589,4.053,590,4.053,591,4.053,592,2.49,593,2.49,594,2.49,595,3.503,596,2.49,597,2.49,598,2.49,599,3.503,600,2.49,601,2.49,602,2.49,603,2.49,604,4.053,605,2.49,606,2.016,607,2.49,608,2.49,609,2.49,610,2.49,611,2.49,612,2.49,613,2.49,614,2.49,615,2.49,616,2.49,617,2.49,618,2.49,619,4.053,620,2.49,621,2.49,622,2.49,623,3.503,624,2.49,625,3.503,626,2.49,627,2.49,628,2.49,629,2.49,630,2.49,631,2.49,632,2.49,633,2.49,634,2.49,635,2.49,636,2.49,637,2.49,638,2.49,639,4.053,640,2.49,641,2.49,642,2.49,643,2.49,644,2.49,645,2.49,646,2.49,647,2.49,648,2.49,649,3.503,650,2.49,651,2.49,652,2.49,653,2.49,654,2.49,655,2.49,656,2.49,657,2.49,658,2.49,659,3.503,660,2.49,661,2.49,662,2.49,663,2.49,664,2.49,665,2.49,666,2.49,667,2.49]],["title/classes/IStatus.html",[0,0.215,308,0.511]],["body/classes/IStatus.html",[0,0.414,2,0.395,3,0.395,4,0.337,5,0.233,6,0.402,7,0.32,9,0.283,14,0.783,15,0.493,17,0.457,18,0.05,19,0.414,20,0.443,21,0.457,24,0.578,27,0.471,28,0.457,29,0.817,30,0.835,43,0.8,52,0.493,58,0.019,59,0.027,60,0.019,61,0.457,62,0.457,63,0.457,64,0.791,65,0.791,66,0.783,67,0.768,68,1.138,69,1.138,70,0.783,71,1.34,72,1.34,73,0.68,74,0.599,75,0.87,76,1.169,78,1.061,79,1,80,0.599,81,0.823,82,0.525,83,0.907,84,0.525,85,0.457,86,0.845,87,0.768,88,0.599,89,0.457,90,0.395,91,1.088,92,0.768,93,0.907,94,0.525,95,0.87,96,0.599,97,0.599,98,0.791,99,0.875,100,0.835,101,0.87,102,0.583,103,0.791,108,1.146,109,1.109,110,0.457,111,0.395,112,0.457,113,0.87,114,0.599,115,0.525,116,0.599,117,0.599,118,0.525,119,0.525,120,0.395,121,0.525,122,0.599,123,0.525,124,0.998,125,0.525,126,0.578,127,1.191,128,0.395,129,0.875,130,0.599,131,0.599,132,0.683,133,1.138,134,1.211,135,0.599,136,0.599,137,0.599,138,0.599,139,0.599,140,0.525,141,0.599,142,1.366,143,0.599,144,0.525,145,0.525,146,1.138,147,1.366,148,0.907,149,0.599,150,1.035,151,0.599,152,0.907,153,0.599,154,0.599,155,0.907,156,0.875,157,0.875,158,1.175,159,0.599,160,0.599,161,0.599,162,0.907,163,0.578,164,0.875,165,1.035,166,0.578,167,0.875,168,0.875,169,0.875,170,0.875,171,0.599,172,0.907,173,0.578,174,0.599,175,0.599,176,1.035,177,0.599,178,0.998,179,0.8,180,0.599,181,0.599,182,0.599,183,0.599,184,0.599,185,0.525,186,0.875,187,0.599,188,0.599,189,0.599,190,0.599,191,0.713,192,0.929,193,0.768,194,0.525,195,0.525,196,0.395,197,0.8,198,0.525,199,0.525,200,0.907,201,0.457,202,0.525,203,0.395,204,0.8,205,0.457,206,0.395,207,0.578,208,0.457,209,0.669,210,0.791,211,0.783,212,0.669,213,0.669,214,0.457,215,0.87,216,0.337,217,0.752,218,0.395,219,0.395,220,1.178,221,0.599,222,0.599,223,0.599,224,1.26,225,0.599,226,1.314,227,0.599,228,0.599,229,0.929,230,0.599,231,1.407,232,0.599,233,0.599,234,0.599,235,1.035,236,1.407,237,1.138,238,1.138,239,0.599,240,0.599,241,0.525,242,0.525,243,0.875,244,0.599,245,0.599,246,0.525,247,0.599,248,0.599,249,0.599,250,0.599,251,0.337,252,0.599,253,0.768,254,0.599,255,0.525,256,0.395,257,0.907,258,0.599,259,0.599,260,0.599,261,0.599,262,0.599,263,0.875,264,0.875,265,0.599,266,0.599,267,0.599,268,1.218,269,0.525,270,0.525,271,0.599,272,0.599,273,0.599,274,0.599,275,0.599,276,0.599,277,0.599,278,0.395,279,0.768,280,0.752,281,0.578,282,0.768,283,1.062,284,0.525,285,0.525,286,0.525,287,0.768,288,0.768,289,0.907,290,0.525,291,0.525,292,0.525,293,0.599,294,0.875,295,0.875,296,0.599,297,0.599,298,1.366,299,0.395,300,1.366,301,0.599,302,0.599,303,0.395,304,1.035,305,0.599,306,0.599,307,0.599,308,0.578,309,0.875,310,0.875,311,0.875,312,1.035,313,1.161,314,1.138,315,0.599,316,0.599,317,0.599,318,0.599,319,0.999,320,0.525,321,0.525,322,1.024,323,0.525,324,0.525,325,0.599,326,0.599,327,0.599,328,0.599,329,1.035,330,1.138,331,1.138,332,1.138,333,1.138,334,1.138,335,0.599,336,1.062,337,0.599,338,1.035,339,0.599,340,0.791,341,0.457,342,0.599,343,0.599,344,0.791,345,0.525,346,0.525,347,0.525,348,0.525,349,1.062,350,0.998,351,0.599,352,0.599,353,0.599,354,0.599,355,0.599,356,0.599,357,0.599,358,1.035,359,0.599,360,0.768,361,0.87,362,0.599,363,0.599,364,0.395,365,0.525,366,0.683,367,0.599,368,0.768,369,0.599,370,0.768,371,1.265,372,1.198,373,1.265,374,0.525,375,0.875,376,0.599,377,0.599,378,0.525,379,0.525,380,0.525,381,0.599,382,0.599,383,1.035,384,0.525,385,0.599,386,0.599,387,0.525,388,0.768,389,0.768,390,0.525,391,0.599,392,0.525,393,1.035,394,1.138,395,1.138,396,1.138,397,1.138,398,1.138,399,1.138,400,0.599,401,0.525,402,0.599,403,0.599,404,0.599,405,0.599,406,0.599,407,0.599,408,0.599,409,0.599,410,0.599,411,0.599,412,0.599,413,0.599,414,0.599,668,3.178]],["title/classes/RecipeDetails.html",[0,0.215,27,0.301]],["body/classes/RecipeDetails.html",[0,0.235,2,0.378,3,0.378,4,0.323,5,0.223,6,0.514,7,0.409,9,0.271,10,1.229,11,4.588,14,0.726,15,0.726,18,0.05,19,0.59,20,0.525,25,2.163,26,2.391,27,0.484,29,0.628,30,0.822,34,2.506,36,2.506,38,2.506,40,2.506,42,2.506,43,0.666,46,1.423,48,1.423,52,0.832,54,2.838,55,3.497,57,3.878,58,0.018,59,0.026,60,0.018,64,0.438,66,0.477,67,0.743,76,1.178,78,0.438,79,1.038,81,0.761,82,1.043,83,1.339,84,1.043,85,0.909,86,0.84,87,1.222,89,0.909,90,0.785,91,1.099,92,1.237,93,1.307,94,1.043,95,1.011,98,0.438,100,0.559,101,0.952,102,0.568,103,0.909,111,0.666,126,0.559,148,0.502,152,0.502,155,0.502,158,0.977,162,0.502,172,0.743,191,0.67,192,0.559,197,0.736,203,0.559,204,0.559,207,0.378,208,0.438,209,0.438,210,1.078,211,0.84,213,0.438,215,0.909,216,0.323,217,0.736,218,0.378,220,1.172,224,0.884,229,0.873,241,1.13,246,0.884,251,0.477,253,0.502,255,0.502,256,1.054,268,0.884,269,0.502,270,0.743,278,0.666,280,0.378,281,0.941,313,0.852,319,0.438,322,0.438,336,1.205,340,0.438,341,0.438,344,0.852,346,0.884,347,1.092,348,0.977,349,1.16,350,0.502,360,1.043,361,1.122,364,0.378,370,1.13,378,0.502,380,0.502,384,1.043,388,0.502,389,0.502,401,0.884,451,3.788,460,2.965,486,1.684,491,2.956,512,1.229,524,1.684,536,2.491,540,2.491,551,1.229,571,1.229,606,1.684,669,1.423,670,2.079,671,2.079,672,2.079,673,2.079,674,2.079,675,2.079,676,2.079,677,1.684,678,2.965,679,2.079,680,2.079,681,2.079,682,3.076,683,2.079,684,2.079,685,2.491,686,3.076,687,3.076,688,3.076,689,1.818,690,2.105,691,2.079,692,2.079,693,2.079,694,4.046,695,2.079,696,3.076,697,2.079,698,2.079,699,2.079,700,3.076,701,2.079,702,2.079,703,2.079,704,2.079,705,2.079,706,2.079,707,2.079,708,2.079,709,2.079,710,2.079,711,3.076,712,2.079,713,3.076,714,3.076,715,2.079,716,2.079,717,2.079,718,2.079,719,2.079,720,2.079,721,2.079,722,5.061,723,2.079,724,2.079,725,2.079,726,2.079,727,2.079,728,2.079,729,2.079,730,2.079,731,2.079,732,2.079,733,2.079,734,2.079,735,2.079,736,2.079,737,2.079,738,2.079,739,2.079,740,2.079,741,2.079,742,2.079,743,2.079,744,2.079,745,2.079,746,2.079,747,2.079,748,2.079,749,2.079,750,2.079,751,2.079,752,2.079,753,2.079,754,2.079,755,2.079,756,2.079,757,2.079,758,2.079,759,2.079,760,2.079,761,2.079,762,2.079,763,2.079,764,2.079,765,2.491,766,2.079,767,2.079,768,2.079,769,2.079,770,2.079,771,2.079,772,2.079,773,2.079,774,2.079,775,2.079,776,2.079,777,2.769,778,2.079,779,2.079,780,3.076,781,2.079,782,2.079,783,2.079,784,2.079,785,2.079,786,2.079,787,2.079,788,2.079,789,2.079,790,2.079,791,2.079,792,2.079,793,2.079,794,2.079,795,2.079,796,2.079,797,2.079,798,4.318,799,4.318,800,2.079,801,2.079,802,2.079,803,3.076,804,2.079,805,2.079,806,1.684,807,2.079,808,2.079,809,2.079,810,2.079,811,2.079,812,2.079,813,2.079,814,3.076,815,2.079,816,3.076,817,3.076,818,3.076,819,2.079,820,3.076,821,2.079,822,2.079,823,2.079,824,2.079,825,2.079,826,2.079,827,2.079,828,2.079,829,2.079,830,2.079,831,2.079,832,3.076,833,2.079,834,2.079,835,2.079,836,2.079,837,2.079,838,2.079,839,2.079,840,2.079,841,2.079,842,1.684,843,2.079,844,2.079,845,2.079,846,3.661,847,2.079,848,2.079,849,3.076,850,2.079,851,2.079,852,3.076,853,2.079,854,2.079,855,2.079,856,2.079,857,2.079,858,3.076,859,4.046,860,4.046,861,3.076,862,2.079,863,2.079,864,2.079,865,2.079,866,2.079,867,2.079,868,2.079,869,2.079,870,2.079,871,1.684,872,1.684,873,2.491,874,2.079,875,2.965,876,3.276,877,3.661,878,3.661,879,3.076,880,3.076,881,3.076,882,3.076,883,3.076,884,2.079,885,2.079,886,2.079,887,2.079,888,2.079,889,2.079,890,2.079,891,2.079,892,2.079,893,2.079,894,2.079,895,2.079,896,2.079,897,2.079,898,2.079,899,2.079,900,2.079,901,2.079,902,1.684,903,2.079,904,2.079,905,2.079,906,2.079,907,3.076,908,2.079,909,2.079,910,2.079,911,2.079]],["title/classes/TStatus.html",[0,0.215,132,0.511]],["body/classes/TStatus.html",[0,0.414,2,0.39,3,0.39,4,0.333,5,0.23,6,0.49,7,0.389,9,0.279,14,0.733,15,0.679,17,0.451,18,0.05,19,0.41,20,0.506,21,0.451,24,0.572,27,0.468,28,0.451,29,0.815,30,0.831,43,0.795,52,0.488,58,0.018,59,0.027,60,0.018,61,0.451,62,0.451,63,0.451,64,0.784,65,0.784,66,0.78,67,0.76,68,1.131,69,1.131,70,0.78,71,1.419,72,1.419,73,0.67,74,0.59,75,0.864,76,1.186,78,1.058,79,0.998,80,0.59,81,0.821,82,0.518,83,0.9,84,0.518,85,0.451,86,0.843,87,0.76,88,0.59,89,0.451,90,0.39,91,1.085,92,0.76,93,0.9,94,0.518,95,0.864,96,0.59,97,0.59,98,0.784,99,0.866,100,0.831,101,0.864,102,0.578,103,0.784,108,1.141,109,1.104,110,0.451,111,0.39,112,0.451,113,0.864,114,0.59,115,0.518,116,0.59,117,0.59,118,0.518,119,0.518,120,0.39,121,0.518,122,0.59,123,0.518,124,0.991,125,0.518,126,0.572,127,1.19,128,0.39,129,0.866,130,0.59,131,0.59,132,0.746,133,1.131,134,1.204,135,0.59,136,0.59,137,0.59,138,0.59,139,0.59,140,0.518,141,0.59,142,1.361,143,0.59,144,0.518,145,0.518,146,1.131,147,1.361,148,0.9,149,0.59,150,1.026,151,0.59,152,0.9,153,0.59,154,0.59,155,1.056,156,0.866,157,0.866,158,1.17,159,0.59,160,0.59,161,0.59,162,0.9,163,0.572,164,0.866,165,1.026,166,0.572,167,0.866,168,0.866,169,0.866,170,0.866,171,0.59,172,0.9,173,0.572,174,0.59,175,0.59,176,1.026,177,0.59,178,0.991,179,0.795,180,0.59,181,0.59,182,0.59,183,0.59,184,0.59,185,0.518,186,0.866,187,0.59,188,0.59,189,0.59,190,0.59,191,0.709,192,0.926,193,0.76,194,0.518,195,0.518,196,0.39,197,0.795,198,0.518,199,0.518,200,0.9,201,0.451,202,0.518,203,0.39,204,0.795,205,0.451,206,0.39,207,0.572,208,0.451,209,0.662,210,0.784,211,0.78,212,0.662,213,0.662,214,0.451,215,0.864,216,0.333,217,0.746,218,0.39,219,0.39,220,1.177,221,0.59,222,0.59,223,0.59,224,1.257,225,0.59,226,1.293,227,0.59,228,0.59,229,0.926,230,0.59,231,1.403,232,0.59,233,0.59,234,0.59,235,1.026,236,1.403,237,1.131,238,1.131,239,0.59,240,0.59,241,0.518,242,0.518,243,0.866,244,0.59,245,0.59,246,0.518,247,0.59,248,0.59,249,0.59,250,0.59,251,0.333,252,0.59,253,0.76,254,0.59,255,0.518,256,0.39,257,0.9,258,0.59,259,0.59,260,0.59,261,0.59,262,0.59,263,0.866,264,0.866,265,0.59,266,0.59,267,0.59,268,1.214,269,0.518,270,0.518,271,0.59,272,0.59,273,0.59,274,0.59,275,0.59,276,0.59,277,0.59,278,0.39,279,0.76,280,0.746,281,0.572,282,0.76,283,1.056,284,0.518,285,0.518,286,0.518,287,0.76,288,0.76,289,0.9,290,0.518,291,0.518,292,0.518,293,0.59,294,0.866,295,0.866,296,0.59,297,0.59,298,1.361,299,0.39,300,1.361,301,0.59,302,0.59,303,0.39,304,1.026,305,0.59,306,0.59,307,0.59,308,0.39,309,0.59,310,0.59,311,0.866,312,1.259,313,1.168,314,1.334,315,0.866,316,0.866,317,0.59,318,0.59,319,0.994,320,0.518,321,0.518,322,1.02,323,0.518,324,0.518,325,0.59,326,0.59,327,0.59,328,0.59,329,1.026,330,1.131,331,1.131,332,1.131,333,1.131,334,1.131,335,0.59,336,1.056,337,0.59,338,1.026,339,0.59,340,0.784,341,0.451,342,0.59,343,0.59,344,0.784,345,0.518,346,0.518,347,0.518,348,0.518,349,1.056,350,0.991,351,0.59,352,0.59,353,0.59,354,0.59,355,0.59,356,0.59,357,0.59,358,1.026,359,0.59,360,0.76,361,0.864,362,0.59,363,0.59,364,0.39,365,0.518,366,0.677,367,0.59,368,0.76,369,0.59,370,0.76,371,1.259,372,1.194,373,1.259,374,0.518,375,0.866,376,0.59,377,0.59,378,0.518,379,0.518,380,0.518,381,0.59,382,0.59,383,1.026,384,0.518,385,0.59,386,0.59,387,0.518,388,0.76,389,0.76,390,0.518,391,0.59,392,0.518,393,1.026,394,1.131,395,1.131,396,1.131,397,1.131,398,1.131,399,1.131,400,0.59,401,0.518,402,0.59,403,0.59,404,0.59,405,0.59,406,0.59,407,0.59,408,0.59,409,0.59,410,0.59,411,0.59,412,0.59,413,0.59,414,0.59,912,3.145,913,2.142,914,2.142,915,2.142]],["title/classes/VStatus.html",[0,0.215,163,0.511]],["body/classes/VStatus.html",[0,0.414,2,0.393,3,0.393,4,0.336,5,0.232,6,0.442,7,0.351,9,0.282,14,0.735,15,0.581,17,0.455,18,0.05,19,0.413,20,0.47,21,0.455,24,0.576,27,0.47,28,0.455,29,0.816,30,0.834,43,0.798,52,0.491,58,0.019,59,0.027,60,0.019,61,0.455,62,0.455,63,0.455,64,0.788,65,0.788,66,0.782,67,0.765,68,1.135,69,1.135,70,0.782,71,1.338,72,1.338,73,0.676,74,0.595,75,0.868,76,1.169,78,1.06,79,0.999,80,0.595,81,0.822,82,0.522,83,0.905,84,0.522,85,0.455,86,0.844,87,0.765,88,0.595,89,0.455,90,0.393,91,1.087,92,0.765,93,0.905,94,0.522,95,0.868,96,0.595,97,0.595,98,0.788,99,0.872,100,0.834,101,0.868,102,0.581,103,0.788,108,1.144,109,1.107,110,0.455,111,0.393,112,0.455,113,0.868,114,0.595,115,0.522,116,0.595,117,0.595,118,0.522,119,0.522,120,0.393,121,0.522,122,0.595,123,0.522,124,0.996,125,0.522,126,0.576,127,1.191,128,0.393,129,0.872,130,0.595,131,0.595,132,0.681,133,1.135,134,1.208,135,0.595,136,0.595,137,0.595,138,0.595,139,0.595,140,0.522,141,0.595,142,1.365,143,0.595,144,0.522,145,0.522,146,1.135,147,1.365,148,0.905,149,0.595,150,1.031,151,0.595,152,0.905,153,0.595,154,0.595,155,0.905,156,0.872,157,0.872,158,1.173,159,0.595,160,0.595,161,0.595,162,1.06,163,0.681,164,0.872,165,1.031,166,0.576,167,0.872,168,0.872,169,0.872,170,0.872,171,0.595,172,0.905,173,0.576,174,0.595,175,0.595,176,1.031,177,0.595,178,0.996,179,0.798,180,0.595,181,0.595,182,0.595,183,0.595,184,0.595,185,0.522,186,0.872,187,0.595,188,0.595,189,0.595,190,0.595,191,0.712,192,0.928,193,0.765,194,0.522,195,0.522,196,0.393,197,0.798,198,0.522,199,0.522,200,0.905,201,0.455,202,0.522,203,0.393,204,0.798,205,0.455,206,0.393,207,0.576,208,0.455,209,0.666,210,0.788,211,0.782,212,0.666,213,0.666,214,0.455,215,0.868,216,0.336,217,0.75,218,0.393,219,0.393,220,1.178,221,0.595,222,0.595,223,0.595,224,1.259,225,0.595,226,1.295,227,0.595,228,0.595,229,0.928,230,0.595,231,1.406,232,0.595,233,0.595,234,0.595,235,1.031,236,1.406,237,1.135,238,1.135,239,0.595,240,0.595,241,0.522,242,0.522,243,0.872,244,0.595,245,0.595,246,0.522,247,0.595,248,0.595,249,0.595,250,0.595,251,0.336,252,0.595,253,0.765,254,0.595,255,0.522,256,0.393,257,0.905,258,0.595,259,0.595,260,0.595,261,0.595,262,0.595,263,0.872,264,0.872,265,0.595,266,0.595,267,0.595,268,1.216,269,0.522,270,0.522,271,0.595,272,0.595,273,0.595,274,0.595,275,0.595,276,0.595,277,0.595,278,0.393,279,0.765,280,0.75,281,0.576,282,0.765,283,1.06,284,0.522,285,0.522,286,0.522,287,0.765,288,0.765,289,0.905,290,0.522,291,0.522,292,0.522,293,0.595,294,0.872,295,0.872,296,0.595,297,0.595,298,1.365,299,0.393,300,1.365,301,0.595,302,0.595,303,0.393,304,1.031,305,0.595,306,0.595,307,0.595,308,0.393,309,0.595,310,0.595,311,0.872,312,1.031,313,1.16,314,1.135,315,0.595,316,0.595,317,0.595,318,0.595,319,1.097,320,0.522,321,0.522,322,1.115,323,0.522,324,0.522,325,0.872,326,0.872,327,0.595,328,0.595,329,1.031,330,1.135,331,1.135,332,1.135,333,1.135,334,1.135,335,0.595,336,1.06,337,0.595,338,1.031,339,0.595,340,0.788,341,0.455,342,0.595,343,0.595,344,0.788,345,0.522,346,0.522,347,0.522,348,0.522,349,1.06,350,0.996,351,0.595,352,0.595,353,0.595,354,0.595,355,0.595,356,0.595,357,0.595,358,1.031,359,0.595,360,0.765,361,0.868,362,0.595,363,0.595,364,0.393,365,0.522,366,0.681,367,0.595,368,0.765,369,0.595,370,0.765,371,1.263,372,1.197,373,1.263,374,0.522,375,0.872,376,0.595,377,0.595,378,0.522,379,0.522,380,0.522,381,0.595,382,0.595,383,1.031,384,0.522,385,0.595,386,0.595,387,0.522,388,0.765,389,0.765,390,0.522,391,0.595,392,0.522,393,1.031,394,1.135,395,1.135,396,1.135,397,1.135,398,1.135,399,1.135,400,0.595,401,0.522,402,0.595,403,0.595,404,0.595,405,0.595,406,0.595,407,0.595,408,0.595,409,0.595,410,0.595,411,0.595,412,0.595,413,0.595,414,0.595,916,3.166,917,2.162]],["title/classes/WStatus.html",[0,0.215,166,0.511]],["body/classes/WStatus.html",[0,0.413,2,0.382,3,0.382,4,0.326,5,0.225,6,0.516,7,0.411,9,0.274,14,0.729,15,0.729,17,0.442,18,0.05,19,0.404,20,0.527,21,0.442,24,0.564,27,0.465,28,0.442,29,0.812,30,0.825,43,0.789,52,0.481,58,0.018,59,0.027,60,0.018,61,0.442,62,0.442,63,0.653,64,0.776,65,0.776,66,0.777,67,0.749,68,1.12,69,1.12,70,0.777,71,1.327,72,1.327,73,0.657,74,0.579,75,0.856,76,1.173,78,1.053,79,0.996,80,0.579,81,0.818,82,0.508,83,0.89,84,0.508,85,0.442,86,0.841,87,0.749,88,0.579,89,0.442,90,0.382,91,1.092,92,0.749,93,0.89,94,0.508,95,0.856,96,0.579,97,0.579,98,0.776,99,0.854,100,0.825,101,0.856,102,0.572,103,0.776,108,1.134,109,1.134,110,0.442,111,0.382,112,0.442,113,0.856,114,0.579,115,0.508,116,0.579,117,0.579,118,0.508,119,0.508,120,0.382,121,0.508,122,0.579,123,0.508,124,0.982,125,0.508,126,0.564,127,1.188,128,0.382,129,0.854,130,0.579,131,0.579,132,0.67,133,1.12,134,1.195,135,0.579,136,0.579,137,0.579,138,0.579,139,0.579,140,0.508,141,0.579,142,1.355,143,0.579,144,0.508,145,0.508,146,1.12,147,1.355,148,0.89,149,0.579,150,1.015,151,0.579,152,0.89,153,0.579,154,0.579,155,0.89,156,0.854,157,0.854,158,1.164,159,0.579,160,0.579,161,0.579,162,0.89,163,0.564,164,0.854,165,1.195,166,0.67,167,0.854,168,0.854,169,0.854,170,0.854,171,0.579,172,0.89,173,0.564,174,0.579,175,0.579,176,1.015,177,0.579,178,0.982,179,0.789,180,0.579,181,0.579,182,0.579,183,0.579,184,0.579,185,0.508,186,0.854,187,0.579,188,0.579,189,0.579,190,0.579,191,0.729,192,0.922,193,0.749,194,0.508,195,0.508,196,0.382,197,0.789,198,0.508,199,0.508,200,0.89,201,0.442,202,0.508,203,0.382,204,0.789,205,0.442,206,0.382,207,0.564,208,0.442,209,0.653,210,0.856,211,0.777,212,0.653,213,0.653,214,0.442,215,0.913,216,0.326,217,0.789,218,0.382,219,0.382,220,1.175,221,0.579,222,0.579,223,0.579,224,1.253,225,0.579,226,1.29,227,0.579,228,0.579,229,0.922,230,0.579,231,1.397,232,0.579,233,0.579,234,0.579,235,1.015,236,1.397,237,1.12,238,1.12,239,0.579,240,0.579,241,0.508,242,0.508,243,0.854,244,0.579,245,0.579,246,0.508,247,0.579,248,0.579,249,0.579,250,0.579,251,0.326,252,0.579,253,0.749,254,0.579,255,0.508,256,0.382,257,0.89,258,0.579,259,0.579,260,0.579,261,0.579,262,0.579,263,0.854,264,0.854,265,0.579,266,0.579,267,0.579,268,1.273,269,0.508,270,0.508,271,0.579,272,0.579,273,0.579,274,0.579,275,0.579,276,0.579,277,0.579,278,0.382,279,0.749,280,0.74,281,0.564,282,0.749,283,1.048,284,0.508,285,0.508,286,0.508,287,0.749,288,0.749,289,0.89,290,0.508,291,0.508,292,0.508,293,0.579,294,0.854,295,0.854,296,0.579,297,0.579,298,1.355,299,0.382,300,1.355,301,0.579,302,0.579,303,0.382,304,1.015,305,0.579,306,0.579,307,0.579,308,0.382,309,0.579,310,0.579,311,0.854,312,1.015,313,1.188,314,1.12,315,0.579,316,0.579,317,0.579,318,0.579,319,0.988,320,0.508,321,0.508,322,1.014,323,0.508,324,0.508,325,0.579,326,0.579,327,0.579,328,0.579,329,1.25,330,1.327,331,1.327,332,1.327,333,1.327,334,1.327,335,0.854,336,1.134,337,0.854,338,1.195,339,0.854,340,0.856,341,0.653,342,0.854,343,0.854,344,0.913,345,0.749,346,0.749,347,0.749,348,0.749,349,1.096,350,1.048,351,0.854,352,0.579,353,0.579,354,0.579,355,0.579,356,0.579,357,0.579,358,1.015,359,0.579,360,0.749,361,0.856,362,0.579,363,0.579,364,0.382,365,0.508,366,0.67,367,0.579,368,0.749,369,0.579,370,0.749,371,1.25,372,1.188,373,1.25,374,0.508,375,0.854,376,0.579,377,0.579,378,0.508,379,0.508,380,0.508,381,0.579,382,0.579,383,1.015,384,0.508,385,0.579,386,0.579,387,0.508,388,0.749,389,0.749,390,0.508,391,0.579,392,0.508,393,1.015,394,1.12,395,1.12,396,1.12,397,1.12,398,1.12,399,1.12,400,0.579,401,0.508,402,0.579,403,0.579,404,0.579,405,0.579,406,0.579,407,0.579,408,0.579,409,0.579,410,0.579,411,0.579,412,0.579,413,0.579,414,0.579,918,3.101,919,2.102,920,2.102,921,2.102,922,2.102,923,2.102]],["title/classes/XStatus.html",[0,0.215,173,0.511]],["body/classes/XStatus.html",[0,0.414,2,0.392,3,0.392,4,0.335,5,0.231,6,0.441,7,0.351,9,0.281,14,0.735,15,0.581,17,0.454,18,0.05,19,0.412,20,0.47,21,0.454,24,0.575,27,0.47,28,0.454,29,0.816,30,0.833,43,0.797,52,0.491,58,0.018,59,0.027,60,0.018,61,0.454,62,0.454,63,0.665,64,0.787,65,0.787,66,0.781,67,0.763,68,1.134,69,1.134,70,0.781,71,1.337,72,1.337,73,0.674,74,0.594,75,0.867,76,1.181,78,1.059,79,0.999,80,0.594,81,0.822,82,0.521,83,0.903,84,0.521,85,0.454,86,0.844,87,0.763,88,0.594,89,0.454,90,0.392,91,1.086,92,0.763,93,0.903,94,0.521,95,0.867,96,0.594,97,0.594,98,0.787,99,0.87,100,0.861,101,0.867,102,0.581,103,0.787,108,1.143,109,1.106,110,0.454,111,0.392,112,0.454,113,0.867,114,0.594,115,0.521,116,0.594,117,0.594,118,0.521,119,0.521,120,0.392,121,0.521,122,0.594,123,0.521,124,0.995,125,0.521,126,0.575,127,1.191,128,0.392,129,0.87,130,0.594,131,0.594,132,0.68,133,1.134,134,1.364,135,0.594,136,0.594,137,0.594,138,0.594,139,0.594,140,0.521,141,0.594,142,1.364,143,0.594,144,0.521,145,0.521,146,1.134,147,1.364,148,0.903,149,0.594,150,1.03,151,0.594,152,0.903,153,0.594,154,0.594,155,0.903,156,0.87,157,0.87,158,1.172,159,0.594,160,0.594,161,0.594,162,0.903,163,0.575,164,0.87,165,1.03,166,0.575,167,0.87,168,0.87,169,0.87,170,0.87,171,0.594,172,1.059,173,0.68,174,0.594,175,0.594,176,1.03,177,0.594,178,0.995,179,0.797,180,0.594,181,0.594,182,0.594,183,0.594,184,0.594,185,0.521,186,0.87,187,0.594,188,0.594,189,0.594,190,0.594,191,0.711,192,0.928,193,0.763,194,0.521,195,0.521,196,0.392,197,0.797,198,0.521,199,0.521,200,0.995,201,0.454,202,0.521,203,0.392,204,0.797,205,0.454,206,0.392,207,0.575,208,0.454,209,0.665,210,0.787,211,0.781,212,0.665,213,0.665,214,0.454,215,0.867,216,0.335,217,0.749,218,0.392,219,0.392,220,1.178,221,0.594,222,0.594,223,0.594,224,1.259,225,0.594,226,1.295,227,0.594,228,0.594,229,0.928,230,0.594,231,1.405,232,0.594,233,0.594,234,0.594,235,1.03,236,1.405,237,1.134,238,1.134,239,0.594,240,0.594,241,0.521,242,0.521,243,0.87,244,0.594,245,0.594,246,0.521,247,0.594,248,0.594,249,0.594,250,0.594,251,0.335,252,0.594,253,0.763,254,0.594,255,0.521,256,0.392,257,0.903,258,0.594,259,0.594,260,0.594,261,0.594,262,0.594,263,0.87,264,0.87,265,0.594,266,0.594,267,0.594,268,1.216,269,0.521,270,0.521,271,0.594,272,0.594,273,0.594,274,0.594,275,0.594,276,0.594,277,0.594,278,0.392,279,0.763,280,0.749,281,0.68,282,0.763,283,1.059,284,0.521,285,0.521,286,0.521,287,0.763,288,0.763,289,0.903,290,0.521,291,0.521,292,0.521,293,0.594,294,0.87,295,0.87,296,0.594,297,0.594,298,1.364,299,0.392,300,1.364,301,0.594,302,0.594,303,0.392,304,1.03,305,0.594,306,0.594,307,0.594,308,0.392,309,0.594,310,0.594,311,0.87,312,1.03,313,1.16,314,1.134,315,0.594,316,0.594,317,0.594,318,0.594,319,0.996,320,0.521,321,0.521,322,1.022,323,0.521,324,0.521,325,0.594,326,0.594,327,0.594,328,0.594,329,1.03,330,1.134,331,1.134,332,1.134,333,1.134,334,1.134,335,0.594,336,1.059,337,0.594,338,1.03,339,0.594,340,0.787,341,0.454,342,0.594,343,0.594,344,0.787,345,0.521,346,0.521,347,0.521,348,0.521,349,1.059,350,0.995,351,0.594,352,0.594,353,0.594,354,0.594,355,0.594,356,0.594,357,0.594,358,1.262,359,0.87,360,0.903,361,0.964,362,0.87,363,0.594,364,0.392,365,0.521,366,0.68,367,0.594,368,0.763,369,0.594,370,0.763,371,1.262,372,1.196,373,1.262,374,0.521,375,0.87,376,0.594,377,0.594,378,0.521,379,0.521,380,0.521,381,0.594,382,0.594,383,1.03,384,0.521,385,0.594,386,0.594,387,0.521,388,0.763,389,0.763,390,0.521,391,0.594,392,0.521,393,1.03,394,1.134,395,1.134,396,1.134,397,1.134,398,1.134,399,1.134,400,0.594,401,0.521,402,0.594,403,0.594,404,0.594,405,0.594,406,0.594,407,0.594,408,0.594,409,0.594,410,0.594,411,0.594,412,0.594,413,0.594,414,0.594,924,3.16,925,2.157]],["title/classes/YStatus.html",[0,0.215,179,0.511]],["body/classes/YStatus.html",[0,0.412,2,0.378,3,0.378,4,0.323,5,0.223,6,0.534,7,0.425,9,0.271,14,0.726,15,0.761,17,0.438,18,0.05,19,0.401,20,0.542,21,0.438,24,0.559,27,0.463,28,0.438,29,0.811,30,0.822,43,0.785,52,0.477,58,0.018,59,0.026,60,0.018,61,0.438,62,0.438,63,0.647,64,0.771,65,0.771,66,0.786,67,0.743,68,1.114,69,1.114,70,0.775,71,1.323,72,1.323,73,0.65,74,0.573,75,0.852,76,1.174,78,1.05,79,0.995,80,0.573,81,0.843,82,0.502,83,0.884,84,0.502,85,0.438,86,0.84,87,0.743,88,0.573,89,0.438,90,0.378,91,1.089,92,0.743,93,0.884,94,0.502,95,0.852,96,0.573,97,0.573,98,0.771,99,0.847,100,0.822,101,0.852,102,0.568,103,0.771,108,1.13,109,1.13,110,0.438,111,0.378,112,0.438,113,0.852,114,0.573,115,0.502,116,0.573,117,0.573,118,0.502,119,0.502,120,0.378,121,0.502,122,0.573,123,0.502,124,1.043,125,0.502,126,0.559,127,1.188,128,0.378,129,0.847,130,0.573,131,0.573,132,0.666,133,1.114,134,1.189,135,0.573,136,0.573,137,0.573,138,0.573,139,0.573,140,0.502,141,0.573,142,1.351,143,0.573,144,0.502,145,0.502,146,1.114,147,1.351,148,0.884,149,0.573,150,1.008,151,0.573,152,0.884,153,0.573,154,0.573,155,0.884,156,0.847,157,0.847,158,1.16,159,0.573,160,0.573,161,0.573,162,0.884,163,0.559,164,0.847,165,1.008,166,0.559,167,0.847,168,0.847,169,0.847,170,0.847,171,0.573,172,0.884,173,0.559,174,0.573,175,0.573,176,1.008,177,0.573,178,1.092,179,0.822,180,0.573,181,0.573,182,0.573,183,0.573,184,0.573,185,0.502,186,0.847,187,0.573,188,0.573,189,0.573,190,0.573,191,0.702,192,0.92,193,0.743,194,0.502,195,0.502,196,0.378,197,0.822,198,0.502,199,0.502,200,0.977,201,0.438,202,0.502,203,0.378,204,0.785,205,0.438,206,0.378,207,0.559,208,0.438,209,0.647,210,0.771,211,0.775,212,0.647,213,0.647,214,0.438,215,0.909,216,0.323,217,0.736,218,0.378,219,0.378,220,1.174,221,0.573,222,0.573,223,0.573,224,1.261,225,0.573,226,1.325,227,0.573,228,0.573,229,0.92,230,0.573,231,1.394,232,0.573,233,0.573,234,0.573,235,1.008,236,1.394,237,1.114,238,1.114,239,0.573,240,0.573,241,0.502,242,0.502,243,0.847,244,0.573,245,0.573,246,0.502,247,0.573,248,0.573,249,0.573,250,0.573,251,0.323,252,0.573,253,0.743,254,0.573,255,0.502,256,0.378,257,0.884,258,0.573,259,0.573,260,0.573,261,0.573,262,0.573,263,0.847,264,0.847,265,0.573,266,0.573,267,0.573,268,1.261,269,0.502,270,0.502,271,0.573,272,0.573,273,0.573,274,0.573,275,0.573,276,0.573,277,0.573,278,0.378,279,0.743,280,0.736,281,0.559,282,0.743,283,1.043,284,0.502,285,0.502,286,0.502,287,0.743,288,0.743,289,0.884,290,0.502,291,0.502,292,0.502,293,0.573,294,0.847,295,0.847,296,0.573,297,0.573,298,1.351,299,0.378,300,1.351,301,0.573,302,0.573,303,0.378,304,1.008,305,0.573,306,0.573,307,0.573,308,0.378,309,0.573,310,0.573,311,0.847,312,1.008,313,1.191,314,1.114,315,0.573,316,0.573,317,0.573,318,0.573,319,0.985,320,0.502,321,0.502,322,1.011,323,0.502,324,0.502,325,0.573,326,0.573,327,0.573,328,0.573,329,1.008,330,1.114,331,1.114,332,1.114,333,1.114,334,1.114,335,0.573,336,1.13,337,0.573,338,1.008,339,0.573,340,0.909,341,0.438,342,0.573,343,0.573,344,0.852,345,0.502,346,0.502,347,0.502,348,0.502,349,1.043,350,0.977,351,0.573,352,0.573,353,0.573,354,0.573,355,0.573,356,0.573,357,0.573,358,1.008,359,0.573,360,0.884,361,0.909,362,0.573,363,0.573,364,0.378,365,0.502,366,0.666,367,0.573,368,0.884,369,0.573,370,0.884,371,1.245,372,1.205,373,1.245,374,0.502,375,0.847,376,0.573,377,0.573,378,0.502,379,0.502,380,0.502,381,0.573,382,0.573,383,1.008,384,0.502,385,0.573,386,0.573,387,0.502,388,0.743,389,0.743,390,0.502,391,0.573,392,0.502,393,1.245,394,1.323,395,1.323,396,1.323,397,1.323,398,1.323,399,1.323,400,0.847,401,0.743,402,0.847,403,0.847,404,0.847,405,0.847,406,0.847,407,0.847,408,0.573,409,0.573,410,0.573,411,0.573,412,0.573,413,0.573,414,0.573,926,3.076,927,2.079,928,2.079,929,2.079,930,2.079,931,2.079,932,2.079,933,2.079]],["title/coverage.html",[934,3.083]],["body/coverage.html",[0,0.438,1,2.861,5,0.448,6,0.613,7,0.488,8,3.385,18,0.049,20,0.448,27,0.448,58,0.036,59,0.042,60,0.036,61,0.88,62,1.194,79,0.76,111,0.76,128,0.76,132,0.76,163,0.76,166,0.76,173,0.76,179,0.76,229,0.89,299,0.76,303,0.76,308,0.76,669,3.351,934,3.385,935,3.385,936,4.18,937,4.18,938,4.18,939,4.18,940,4.18,941,4.18,942,4.18,943,4.18,944,5.192,945,5.192,946,4.896,947,4.896,948,4.18,949,4.18,950,3.965,951,4.896,952,4.18,953,4.18,954,4.18,955,4.18]],["title/dependencies.html",[956,2.357,957,2.307]],["body/dependencies.html",[18,0.049,58,0.038,59,0.043,60,0.038,110,0.925,120,0.799,581,3.558,957,3.007,958,4.393,959,4.587,960,4.393,961,4.393,962,4.393,963,5.039,964,4.081,965,4.393,966,4.393,967,4.393,968,4.393,969,4.393,970,4.393,971,4.393,972,4.393,973,4.393]],["title/miscellaneous/enumerations.html",[974,1.393,975,2.729]],["body/miscellaneous/enumerations.html",[6,0.529,7,0.458,9,0.553,18,0.047,58,0.036,59,0.042,60,0.036,62,0.892,64,1.039,65,0.892,66,0.766,70,0.658,75,1.039,81,0.766,86,0.658,127,0.892,178,1.024,191,0.658,192,0.771,197,0.771,211,0.658,212,0.892,217,0.771,226,1.192,229,0.898,257,1.192,278,0.771,279,1.192,280,0.95,281,0.771,282,1.192,284,1.024,285,1.024,286,1.024,287,1.192,288,1.192,289,1.192,290,1.024,291,1.024,292,1.024,319,1.099,320,1.024,321,1.024,322,1.099,323,1.024,324,1.024,364,0.771,365,1.024,366,0.771,374,1.024,390,1.024,392,1.024,436,3.433,437,3.998,463,3.433,467,3.998,583,3.433,584,3.433,585,3.433,974,2.505,975,3.433,976,4.24,977,5.379,978,5.223]],["title/index.html",[9,0.307,979,1.909,980,1.909]],["body/index.html",[0,0.351,5,0.402,7,0.465,14,0.769,18,0.048,19,0.646,20,0.491,25,2.711,26,2.711,27,0.491,29,0.769,34,2.566,36,2.566,38,2.566,40,2.566,42,2.566,43,0.682,46,2.566,48,2.566,52,0.712,54,2.215,58,0.032,59,0.039,60,0.032,66,0.712,70,0.712,75,0.789,76,1.169,81,0.802,90,0.834,91,0.966,95,0.789,98,0.789,100,0.682,101,0.966,102,0.582,103,0.789,112,0.966,113,1.043,118,0.906,119,0.906,120,0.682,121,0.906,125,0.906,126,0.682,191,0.802,194,0.906,195,0.906,196,0.834,197,0.682,198,0.906,199,0.906,200,0.906,201,0.789,202,0.906,203,0.834,204,0.901,205,0.789,206,0.834,207,0.834,208,0.789,209,0.966,210,0.789,211,0.769,212,0.789,213,0.789,214,0.789,215,0.966,216,0.712,217,0.682,218,0.834,219,0.682,242,1.108,251,0.712,256,0.834,280,0.682,313,0.789,340,0.789,366,0.834,379,0.906,433,2.566,438,3.715,439,3.036,458,3.036,491,3.14,512,2.215,542,2.566,543,3.036,544,3.036,545,3.036,547,2.566,548,3.393,549,2.566,550,3.257,551,2.711,552,2.566,553,2.566,554,2.566,555,2.566,556,2.566,557,2.566,559,2.566,560,2.566,561,2.566,562,2.566,563,2.566,564,3.14,565,2.566,566,2.566,567,2.566,568,2.566,569,2.566,570,2.566,571,2.215,572,2.566,573,2.566,574,2.566,575,2.566,677,3.036,678,3.036,689,2.215,690,2.566,777,3.737,842,3.036,871,3.036,872,3.036,873,3.036,875,3.036,876,3.036,902,3.036,959,3.036,964,3.036,981,5.459,982,4.587,983,4.957,984,3.749,985,3.749,986,3.715,987,3.036,988,4.957,989,4.587,990,3.036,991,3.749,992,3.749,993,3.749,994,3.749,995,3.749,996,2.566,997,3.749,998,3.749,999,3.749,1000,3.749,1001,3.749,1002,3.749,1003,5.298,1004,4.957,1005,5.165,1006,3.749,1007,3.749,1008,4.587,1009,3.749,1010,3.749,1011,3.749,1012,3.749,1013,3.749,1014,3.749,1015,3.749,1016,3.749,1017,4.587,1018,4.587,1019,3.749,1020,3.749,1021,3.749,1022,3.749,1023,4.957,1024,3.749,1025,3.749,1026,3.749]],["title/license.html",[550,1.393,979,1.909,980,1.909]],["body/license.html",[0,0.209,4,0.836,5,0.553,15,0.424,18,0.036,19,0.555,24,0.497,54,1.615,58,0.032,59,0.032,60,0.023,63,0.575,70,0.424,86,0.424,90,0.497,102,0.58,126,0.833,144,1.264,145,0.903,196,0.833,201,0.896,206,0.872,216,0.424,218,0.497,219,0.497,251,0.822,344,0.575,345,0.66,368,1.029,387,0.66,478,2.213,489,2.213,494,2.213,512,1.615,542,3.712,547,1.871,548,3.582,549,3.134,550,3.373,551,2.517,552,2.915,553,2.915,554,1.871,555,1.871,556,2.915,557,1.871,558,3.707,559,2.915,560,2.915,561,2.915,562,3.134,563,2.558,564,2.915,565,2.558,566,2.915,567,3.712,568,2.558,569,2.558,570,2.558,571,1.615,572,1.871,573,1.871,574,2.915,575,1.871,685,2.213,689,1.615,690,1.871,777,3.134,806,2.213,878,3.707,935,3.449,950,2.213,986,3.449,987,3.026,990,4.178,996,1.871,1027,2.733,1028,2.733,1029,2.733,1030,5.233,1031,4.578,1032,4.794,1033,2.733,1034,5.483,1035,5.293,1036,2.733,1037,2.733,1038,2.733,1039,2.733,1040,5.293,1041,4.95,1042,5.293,1043,3.737,1044,2.733,1045,4.794,1046,2.733,1047,2.733,1048,2.733,1049,2.733,1050,2.733,1051,4.578,1052,3.737,1053,3.737,1054,4.259,1055,3.737,1056,3.737,1057,2.733,1058,2.733,1059,5.55,1060,3.737,1061,4.95,1062,2.733,1063,3.737,1064,2.733,1065,2.733,1066,2.733,1067,2.733,1068,2.733,1069,2.733,1070,4.259,1071,2.733,1072,3.737,1073,5.423,1074,2.733,1075,2.733,1076,4.95,1077,5.233,1078,4.578,1079,2.733,1080,4.95,1081,2.733,1082,2.733,1083,2.733,1084,2.733,1085,2.733,1086,2.733,1087,2.733,1088,2.733,1089,5.713,1090,4.259,1091,3.737,1092,2.733,1093,3.737,1094,2.733,1095,4.794,1096,3.737,1097,2.733,1098,5.55,1099,5.568,1100,2.733,1101,2.733,1102,2.733,1103,2.733,1104,2.733,1105,2.733,1106,2.733,1107,3.737,1108,3.737,1109,4.259,1110,2.733,1111,2.733,1112,2.733,1113,2.733,1114,2.733,1115,2.733,1116,4.578,1117,4.794,1118,3.737,1119,4.578,1120,3.737,1121,2.733,1122,4.794,1123,3.737,1124,2.733,1125,2.733,1126,4.259,1127,2.733,1128,2.733,1129,2.733,1130,3.737,1131,2.733,1132,2.733,1133,2.733,1134,4.259,1135,2.733,1136,2.733,1137,4.259,1138,2.733,1139,2.733,1140,2.733,1141,5.293,1142,2.733,1143,3.737,1144,4.259,1145,3.737,1146,3.737,1147,3.737,1148,3.737,1149,3.737,1150,4.259,1151,3.737,1152,4.259,1153,3.737,1154,3.737,1155,3.737,1156,3.737,1157,2.733,1158,3.737,1159,2.733,1160,2.733,1161,4.794,1162,5.067,1163,3.737,1164,2.733,1165,2.733,1166,3.737,1167,3.737,1168,2.733,1169,2.733,1170,4.259,1171,3.737,1172,2.733,1173,2.733,1174,2.733,1175,4.259,1176,2.733,1177,2.733,1178,2.733,1179,3.737,1180,3.737,1181,2.733,1182,2.733,1183,2.733,1184,2.733,1185,2.733,1186,2.733,1187,2.733,1188,3.737,1189,2.733,1190,2.733,1191,2.733,1192,2.733,1193,2.733,1194,2.733,1195,2.733,1196,2.733,1197,2.733,1198,2.733,1199,2.733,1200,2.733,1201,2.733,1202,2.733,1203,5.159,1204,2.733,1205,2.733,1206,2.733,1207,2.733,1208,2.733,1209,4.578,1210,3.737,1211,4.578,1212,2.733,1213,2.733,1214,4.578,1215,2.733,1216,2.733,1217,2.733,1218,2.733,1219,2.733,1220,3.737,1221,3.737,1222,2.733,1223,2.733,1224,2.733,1225,2.733,1226,3.737,1227,2.733,1228,2.733,1229,4.794,1230,2.733,1231,2.733,1232,2.733,1233,2.733,1234,2.733,1235,2.733,1236,2.733,1237,4.259,1238,2.733,1239,2.733,1240,2.733,1241,2.733,1242,2.733,1243,2.733,1244,2.733,1245,2.733,1246,2.733,1247,2.733,1248,3.737,1249,2.733,1250,2.733,1251,3.737,1252,2.733,1253,2.733,1254,2.733,1255,2.733,1256,2.733,1257,2.733,1258,2.733,1259,2.733,1260,2.733,1261,4.578,1262,3.737,1263,3.737,1264,2.733,1265,2.733,1266,2.733,1267,2.733,1268,2.733,1269,2.733,1270,2.733,1271,2.733,1272,3.737,1273,2.733,1274,2.733,1275,2.733,1276,2.733,1277,4.794,1278,2.733,1279,2.733,1280,2.733,1281,2.733,1282,2.733,1283,2.733,1284,2.733,1285,2.733,1286,4.794,1287,2.733,1288,2.733,1289,2.733,1290,2.733,1291,2.733,1292,2.733,1293,2.733,1294,2.733,1295,2.733,1296,2.733,1297,2.733,1298,2.733,1299,2.733,1300,2.733,1301,2.733,1302,2.733,1303,4.259,1304,2.733,1305,2.733,1306,2.733,1307,2.733,1308,2.733,1309,3.737,1310,2.733,1311,2.733,1312,2.733,1313,2.733,1314,2.733,1315,2.733,1316,2.733,1317,2.733,1318,2.733,1319,2.733,1320,2.733,1321,2.733,1322,2.733,1323,2.733,1324,3.737,1325,2.733,1326,2.733,1327,2.733,1328,3.737,1329,3.737,1330,2.733,1331,2.733,1332,2.733,1333,2.733,1334,2.733,1335,2.733,1336,2.733,1337,2.733,1338,2.733,1339,2.733,1340,2.733,1341,2.733,1342,2.733,1343,2.733,1344,2.733]],["title/modules.html",[435,2.606]],["body/modules.html",[18,0.044,58,0.039,59,0.044,60,0.039,434,3.086,435,3.086,996,3.086,1345,4.508,1346,4.508]],["title/overview.html",[1347,3.083]],["body/overview.html",[2,0.813,18,0.044,58,0.038,59,0.044,60,0.038,86,0.694,433,3.485,689,2.643,765,3.622,957,3.061,1347,3.622,1348,4.473,1349,4.473,1350,4.473,1351,4.473,1352,4.473,1353,5.091,1354,4.473]],["title/miscellaneous/typealiases.html",[974,1.393,1355,3.37]],["body/miscellaneous/typealiases.html",[6,0.479,7,0.381,9,0.583,18,0.044,20,0.572,25,3.007,26,3.007,58,0.038,59,0.044,60,0.038,669,3.059,974,2.641,1356,4.469,1357,5.089,1358,5.089]]],"invertedIndex":[["",{"_index":18,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"coverage.html":{},"dependencies.html":{},"miscellaneous/enumerations.html":{},"index.html":{},"license.html":{},"modules.html":{},"overview.html":{},"miscellaneous/typealiases.html":{}}}],["0",{"_index":229,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"coverage.html":{},"miscellaneous/enumerations.html":{}}}],["0'},${(delayminutes",{"_index":888,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["0'},${number(skipstart",{"_index":889,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["0'},${showspargealert",{"_index":887,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["0'},${showspargecounter",{"_index":886,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["0'},${striketempmode",{"_index":892,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["0,1,1,0,0",{"_index":851,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["0,4,0,0",{"_index":856,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["0.0.5",{"_index":968,"title":{},"body":{"dependencies.html":{}}}],["0.10.2",{"_index":973,"title":{},"body":{"dependencies.html":{}}}],["0/2",{"_index":938,"title":{},"body":{"coverage.html":{}}}],["0/8",{"_index":941,"title":{},"body":{"coverage.html":{}}}],["0000",{"_index":589,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["0000cdd0",{"_index":588,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["0003cdd1",{"_index":594,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["0003cdd2",{"_index":597,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["00805f9b0131",{"_index":595,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["00805f9b34fb",{"_index":592,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["0:30",{"_index":97,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["1",{"_index":86,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{},"license.html":{},"overview.html":{}}}],["1.10.0",{"_index":971,"title":{},"body":{"dependencies.html":{}}}],["10",{"_index":158,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["1000",{"_index":590,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["10:40",{"_index":868,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["13",{"_index":1354,"title":{},"body":{"overview.html":{}}}],["15.6l",{"_index":848,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["16.7l",{"_index":850,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["19",{"_index":682,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["1:30",{"_index":798,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["2",{"_index":246,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["2.0",{"_index":552,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{},"license.html":{}}}],["2.0unless",{"_index":1026,"title":{},"body":{"index.html":{}}}],["2/10",{"_index":953,"title":{},"body":{"coverage.html":{}}}],["2/3",{"_index":945,"title":{},"body":{"coverage.html":{}}}],["2/4",{"_index":951,"title":{},"body":{"coverage.html":{}}}],["2/6",{"_index":949,"title":{},"body":{"coverage.html":{}}}],["2/7",{"_index":943,"title":{},"body":{"coverage.html":{}}}],["2/8",{"_index":947,"title":{},"body":{"coverage.html":{}}}],["20",{"_index":952,"title":{},"body":{"coverage.html":{}}}],["2004",{"_index":1028,"title":{},"body":{"license.html":{}}}],["2020",{"_index":543,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{}}}],["25",{"_index":946,"title":{},"body":{"coverage.html":{}}}],["28",{"_index":942,"title":{},"body":{"coverage.html":{}}}],["2:30",{"_index":799,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["3",{"_index":269,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["30",{"_index":92,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["33",{"_index":948,"title":{},"body":{"coverage.html":{}}}],["4",{"_index":270,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["40",{"_index":870,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["45",{"_index":861,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["46/47",{"_index":940,"title":{},"body":{"coverage.html":{}}}],["50",{"_index":950,"title":{},"body":{"coverage.html":{},"license.html":{}}}],["6.5.4",{"_index":969,"title":{},"body":{"dependencies.html":{}}}],["60",{"_index":864,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["65:60",{"_index":862,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["65c",{"_index":863,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["66",{"_index":944,"title":{},"body":{"coverage.html":{}}}],["75",{"_index":846,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["75:10",{"_index":865,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["75c",{"_index":866,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["8000",{"_index":591,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["9",{"_index":1038,"title":{},"body":{"license.html":{}}}],["9.1.3",{"_index":959,"title":{},"body":{"dependencies.html":{},"index.html":{}}}],["97",{"_index":939,"title":{},"body":{"coverage.html":{}}}],["_",{"_index":480,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["a${stage},${time},${temperature",{"_index":833,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["a.broekhuis@gmail.com",{"_index":546,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["above",{"_index":1240,"title":{},"body":{"license.html":{}}}],["acceptance",{"_index":1306,"title":{},"body":{"license.html":{}}}],["accepting",{"_index":1303,"title":{},"body":{"license.html":{}}}],["acknowledgement",{"_index":373,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["act",{"_index":1313,"title":{},"body":{"license.html":{}}}],["acting",{"_index":1047,"title":{},"body":{"license.html":{}}}],["acts",{"_index":1284,"title":{},"body":{"license.html":{}}}],["actual",{"_index":252,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["actually",{"_index":94,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["add",{"_index":102,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{},"license.html":{}}}],["addadditionname",{"_index":68,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["addadditiontime",{"_index":69,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["added",{"_index":103,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["addendum",{"_index":1228,"title":{},"body":{"license.html":{}}}],["addgrain",{"_index":287,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["addition",{"_index":101,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["additional",{"_index":1229,"title":{},"body":{"license.html":{}}}],["additions",{"_index":387,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"license.html":{}}}],["adjusted",{"_index":815,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["advised",{"_index":1301,"title":{},"body":{"license.html":{}}}],["against",{"_index":1180,"title":{},"body":{"license.html":{}}}],["agree",{"_index":1316,"title":{},"body":{"license.html":{}}}],["agreed",{"_index":561,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{},"license.html":{}}}],["agreement",{"_index":1245,"title":{},"body":{"license.html":{}}}],["alarm",{"_index":209,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["alert",{"_index":349,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["alexander",{"_index":544,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{}}}],["aliases",{"_index":1356,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["alleging",{"_index":1185,"title":{},"body":{"license.html":{}}}],["alone",{"_index":1176,"title":{},"body":{"license.html":{}}}],["along",{"_index":1218,"title":{},"body":{"license.html":{}}}],["alongside",{"_index":1227,"title":{},"body":{"license.html":{}}}],["and(b",{"_index":1199,"title":{},"body":{"license.html":{}}}],["and(c",{"_index":1206,"title":{},"body":{"license.html":{}}}],["and(d",{"_index":1212,"title":{},"body":{"license.html":{}}}],["and/or",{"_index":1310,"title":{},"body":{"license.html":{}}}],["angular",{"_index":981,"title":{},"body":{"index.html":{}}}],["angular/animations",{"_index":958,"title":{},"body":{"dependencies.html":{}}}],["angular/common",{"_index":960,"title":{},"body":{"dependencies.html":{}}}],["angular/compiler",{"_index":961,"title":{},"body":{"dependencies.html":{}}}],["angular/core",{"_index":110,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"dependencies.html":{}}}],["angular/forms",{"_index":962,"title":{},"body":{"dependencies.html":{}}}],["angular/platform",{"_index":963,"title":{},"body":{"dependencies.html":{}}}],["angular/router",{"_index":966,"title":{},"body":{"dependencies.html":{}}}],["annotations",{"_index":1104,"title":{},"body":{"license.html":{}}}],["apache",{"_index":549,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{},"license.html":{}}}],["api",{"_index":994,"title":{},"body":{"index.html":{}}}],["appear",{"_index":1223,"title":{},"body":{"license.html":{}}}],["append(command",{"_index":900,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["appendix",{"_index":1096,"title":{},"body":{"license.html":{}}}],["appends",{"_index":899,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["applicable",{"_index":559,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{},"license.html":{}}}],["applies",{"_index":1169,"title":{},"body":{"license.html":{}}}],["apply",{"_index":1324,"title":{},"body":{"license.html":{}}}],["appropriate",{"_index":1333,"title":{},"body":{"license.html":{}}}],["appropriateness",{"_index":1271,"title":{},"body":{"license.html":{}}}],["archives",{"_index":1343,"title":{},"body":{"license.html":{}}}],["argument",{"_index":691,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["arising",{"_index":1291,"title":{},"body":{"license.html":{}}}],["array",{"_index":906,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["artifacts",{"_index":1006,"title":{},"body":{"index.html":{}}}],["asking",{"_index":443,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["asserted",{"_index":1322,"title":{},"body":{"license.html":{}}}],["associated",{"_index":1275,"title":{},"body":{"license.html":{}}}],["assume",{"_index":1273,"title":{},"body":{"license.html":{}}}],["assumed",{"_index":997,"title":{},"body":{"index.html":{}}}],["async",{"_index":499,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["attach",{"_index":1325,"title":{},"body":{"license.html":{}}}],["attached",{"_index":1094,"title":{},"body":{"license.html":{}}}],["attribution",{"_index":1209,"title":{},"body":{"license.html":{}}}],["authorized",{"_index":1043,"title":{},"body":{"license.html":{}}}],["authorship",{"_index":1090,"title":{},"body":{"license.html":{}}}],["auto",{"_index":747,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["automated",{"_index":402,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["automatically",{"_index":381,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["automodestatus",{"_index":395,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["available",{"_index":996,"title":{},"body":{"index.html":{},"license.html":{},"modules.html":{}}}],["await",{"_index":659,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["b${minutes},${seconds",{"_index":800,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["b${progress",{"_index":836,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["based",{"_index":1100,"title":{},"body":{"license.html":{}}}],["basis",{"_index":565,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{},"license.html":{}}}],["batch",{"_index":985,"title":{},"body":{"index.html":{}}}],["behalf",{"_index":1122,"title":{},"body":{"license.html":{}}}],["being",{"_index":379,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["below",{"_index":1097,"title":{},"body":{"license.html":{}}}],["beneficial",{"_index":1069,"title":{},"body":{"license.html":{}}}],["besides",{"_index":114,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["between",{"_index":503,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["bind",{"_index":1114,"title":{},"body":{"license.html":{}}}],["ble",{"_index":438,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{}}}],["bluetooth",{"_index":120,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"dependencies.html":{},"index.html":{}}}],["bluetoothdevice",{"_index":483,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["bluetoothremotegattcharacteristic",{"_index":517,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["bluetoothremotegattserver",{"_index":577,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["boil",{"_index":211,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{},"index.html":{}}}],["boiladdition",{"_index":893,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["boilerplate",{"_index":1326,"title":{},"body":{"license.html":{}}}],["boilpowermode",{"_index":882,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["boilramp",{"_index":290,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["boilstep",{"_index":25,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/RecipeDetails.html":{},"index.html":{},"miscellaneous/typealiases.html":{}}}],["boilsteps",{"_index":42,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/RecipeDetails.html":{},"index.html":{}}}],["boiltemperature",{"_index":133,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["boiltime",{"_index":38,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/RecipeDetails.html":{},"index.html":{}}}],["boolean",{"_index":313,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["bootstrap",{"_index":1350,"title":{},"body":{"overview.html":{}}}],["brackets",{"_index":1329,"title":{},"body":{"license.html":{}}}],["break",{"_index":147,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["brew",{"_index":80,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["brewfather",{"_index":984,"title":{},"body":{"index.html":{}}}],["brewfatherbatch",{"_index":31,"title":{},"body":{"classes/BrewFatherHelper.html":{}}}],["brewfatherbatch.boilsteps.foreach(value",{"_index":51,"title":{},"body":{"classes/BrewFatherHelper.html":{}}}],["brewfatherbatch.recipe.boiltime.tostring",{"_index":39,"title":{},"body":{"classes/BrewFatherHelper.html":{}}}],["brewfatherbatch.recipe.data.mashwateramount.tofixed(1).tostring",{"_index":35,"title":{},"body":{"classes/BrewFatherHelper.html":{}}}],["brewfatherbatch.recipe.data.spargewateramount.tofixed(1).tostring",{"_index":37,"title":{},"body":{"classes/BrewFatherHelper.html":{}}}],["brewfatherbatch.recipe.hopstandminutes.tostring",{"_index":41,"title":{},"body":{"classes/BrewFatherHelper.html":{}}}],["brewfatherbatch.recipe.mash.steps.foreach(value",{"_index":44,"title":{},"body":{"classes/BrewFatherHelper.html":{}}}],["brewfatherbatch.recipe.name.touppercase",{"_index":33,"title":{},"body":{"classes/BrewFatherHelper.html":{}}}],["brewfatherbatchstr",{"_index":22,"title":{},"body":{"classes/BrewFatherHelper.html":{}}}],["brewfatherhelper",{"_index":1,"title":{"classes/BrewFatherHelper.html":{}},"body":{"classes/BrewFatherHelper.html":{},"coverage.html":{}}}],["brewing",{"_index":65,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["brewingsessionstate",{"_index":535,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["brewsessionstate",{"_index":61,"title":{"classes/BrewSessionState.html":{}},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"coverage.html":{}}}],["brewsessionstate(sessionstate.idle",{"_index":222,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["broadcasts",{"_index":1002,"title":{},"body":{"index.html":{}}}],["broekhuis",{"_index":545,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{}}}],["browse",{"_index":1346,"title":{},"body":{"modules.html":{}}}],["browser",{"_index":964,"title":{},"body":{"dependencies.html":{},"index.html":{}}}],["buffer",{"_index":907,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["buffer.push(line",{"_index":911,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["build",{"_index":1003,"title":{},"body":{"index.html":{}}}],["building",{"_index":1011,"title":{},"body":{"index.html":{}}}],["button",{"_index":751,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["c",{"_index":148,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["c${interaction",{"_index":839,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["callback",{"_index":471,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["calling",{"_index":479,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["cancel",{"_index":700,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["care",{"_index":440,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["carry",{"_index":1201,"title":{},"body":{"license.html":{}}}],["case",{"_index":142,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["catch(error",{"_index":623,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["cause",{"_index":1056,"title":{},"body":{"license.html":{}}}],["cd",{"_index":1013,"title":{},"body":{"index.html":{}}}],["celsius",{"_index":324,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["changed",{"_index":1205,"title":{},"body":{"license.html":{}}}],["character",{"_index":1290,"title":{},"body":{"license.html":{}}}],["characteristic",{"_index":490,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["characteristic.addeventlistener('characteristicvaluechanged",{"_index":651,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["characteristic.startnotifications",{"_index":650,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["characters",{"_index":683,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["charge",{"_index":1152,"title":{},"body":{"license.html":{}}}],["chars",{"_index":903,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["check",{"_index":1024,"title":{},"body":{"index.html":{}}}],["choose",{"_index":1304,"title":{},"body":{"license.html":{}}}],["claim",{"_index":1182,"title":{},"body":{"license.html":{}}}],["claims",{"_index":1171,"title":{},"body":{"license.html":{}}}],["class",{"_index":0,"title":{"classes/BrewFatherHelper.html":{},"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}},"body":{"classes/BrewFatherHelper.html":{},"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"coverage.html":{},"index.html":{},"license.html":{}}}],["classes",{"_index":2,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"overview.html":{}}}],["cli",{"_index":988,"title":{},"body":{"index.html":{}}}],["code",{"_index":368,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"license.html":{}}}],["codes",{"_index":365,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["combination",{"_index":1177,"title":{},"body":{"license.html":{}}}],["command",{"_index":256,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["command.append(`${++(delayminutes)},${delayseconds",{"_index":898,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["command.append(`${boiladdition.time",{"_index":895,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["command.append(`${mashstep.steptemperature}:${mashstep.steptime",{"_index":897,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["commandemitter",{"_index":131,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["commands",{"_index":491,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"classes/RecipeDetails.html":{},"index.html":{}}}],["comment",{"_index":1334,"title":{},"body":{"license.html":{}}}],["commercial",{"_index":1298,"title":{},"body":{"license.html":{}}}],["common",{"_index":1050,"title":{},"body":{"license.html":{}}}],["communication",{"_index":1126,"title":{},"body":{"license.html":{}}}],["compiled",{"_index":1085,"title":{},"body":{"license.html":{}}}],["complete",{"_index":524,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"classes/RecipeDetails.html":{}}}],["complex",{"_index":842,"title":{},"body":{"classes/RecipeDetails.html":{},"index.html":{}}}],["compliance",{"_index":554,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{},"license.html":{}}}],["complies",{"_index":1235,"title":{},"body":{"license.html":{}}}],["components",{"_index":137,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["components[0",{"_index":156,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["components[1",{"_index":167,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["components[2",{"_index":168,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["components[3",{"_index":169,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["components[4",{"_index":170,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["components[5",{"_index":171,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["components[7",{"_index":182,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["computer",{"_index":1295,"title":{},"body":{"license.html":{}}}],["conditions",{"_index":567,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{},"license.html":{}}}],["configuration",{"_index":1079,"title":{},"body":{"license.html":{}}}],["connect",{"_index":445,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["connect/reconnect/disconnect",{"_index":995,"title":{},"body":{"index.html":{}}}],["connected",{"_index":463,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"miscellaneous/enumerations.html":{}}}],["connecting",{"_index":583,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"miscellaneous/enumerations.html":{}}}],["connection",{"_index":442,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["connectionstate",{"_index":467,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"miscellaneous/enumerations.html":{}}}],["connectionstate.disconnected",{"_index":602,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["connectionstatus",{"_index":598,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["connectioon",{"_index":510,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["consequential",{"_index":1289,"title":{},"body":{"license.html":{}}}],["consistent",{"_index":1312,"title":{},"body":{"license.html":{}}}],["consists",{"_index":688,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["console.log((error",{"_index":653,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["console.log(command",{"_index":908,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["console.log(error",{"_index":624,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["console.log(notificationline",{"_index":136,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["conspicuously",{"_index":1138,"title":{},"body":{"license.html":{}}}],["const",{"_index":30,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["constitutes",{"_index":1186,"title":{},"body":{"license.html":{}}}],["constructor",{"_index":73,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["constructor(...commands",{"_index":695,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["constructor(boiltemperature",{"_index":302,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["constructor(firmwareversion",{"_index":306,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["constructor(heatpower",{"_index":407,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["constructor(heatpoweroutputpercentage",{"_index":351,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["constructor(interactioncode",{"_index":310,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["constructor(state",{"_index":74,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["constructor(targettemperature",{"_index":362,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["constructor(timeractive",{"_index":316,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["constructor(voltage",{"_index":326,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["construed",{"_index":1230,"title":{},"body":{"license.html":{}}}],["contain",{"_index":871,"title":{},"body":{"classes/RecipeDetails.html":{},"index.html":{}}}],["contained",{"_index":1216,"title":{},"body":{"license.html":{}}}],["containing",{"_index":298,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["contains",{"_index":677,"title":{},"body":{"classes/RecipeDetails.html":{},"index.html":{}}}],["content",{"_index":1259,"title":{},"body":{"license.html":{}}}],["contents",{"_index":1224,"title":{},"body":{"license.html":{}}}],["continue",{"_index":385,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["contract",{"_index":1060,"title":{},"body":{"license.html":{}}}],["contribution",{"_index":1117,"title":{},"body":{"license.html":{}}}],["contribution(s",{"_index":1175,"title":{},"body":{"license.html":{}}}],["contributions",{"_index":1237,"title":{},"body":{"license.html":{}}}],["contributor",{"_index":1141,"title":{},"body":{"license.html":{}}}],["contributory",{"_index":1187,"title":{},"body":{"license.html":{}}}],["control",{"_index":777,"title":{},"body":{"classes/RecipeDetails.html":{},"index.html":{},"license.html":{}}}],["control.module.ts",{"_index":437,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"miscellaneous/enumerations.html":{}}}],["control.module.ts:100",{"_index":484,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["control.module.ts:133",{"_index":476,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["control.module.ts:148",{"_index":465,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["control.module.ts:157",{"_index":518,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["control.module.ts:171",{"_index":470,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["control.module.ts:182",{"_index":502,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["control.module.ts:195",{"_index":538,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["control.module.ts:206",{"_index":509,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["control.module.ts:218",{"_index":511,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["control.module.ts:227",{"_index":534,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["control.module.ts:236",{"_index":531,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["control.module.ts:245",{"_index":525,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["control.module.ts:59",{"_index":453,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["control.module.ts:82",{"_index":461,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["control/src/lib/angular",{"_index":436,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"miscellaneous/enumerations.html":{}}}],["control/src/lib/brewfather.helper.ts",{"_index":8,"title":{},"body":{"classes/BrewFatherHelper.html":{},"coverage.html":{}}}],["control/src/lib/brewfather.helper.ts:19",{"_index":16,"title":{},"body":{"classes/BrewFatherHelper.html":{}}}],["control/src/lib/grainfather.commands.ts",{"_index":669,"title":{},"body":{"classes/RecipeDetails.html":{},"coverage.html":{},"miscellaneous/typealiases.html":{}}}],["control/src/lib/grainfather.commands.ts:28",{"_index":675,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["control/src/lib/grainfather.commands.ts:29",{"_index":674,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["control/src/lib/grainfather.commands.ts:30",{"_index":676,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["control/src/lib/grainfather.commands.ts:31",{"_index":671,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["control/src/lib/grainfather.commands.ts:32",{"_index":672,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["control/src/lib/grainfather.commands.ts:33",{"_index":673,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["control/src/lib/grainfather.commands.ts:34",{"_index":670,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["control/src/lib/grainfather.notifications.ts",{"_index":62,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"coverage.html":{},"miscellaneous/enumerations.html":{}}}],["control/src/lib/grainfather.notifications.ts:118",{"_index":429,"title":{},"body":{"classes/GrainFatherNotifications.html":{}}}],["control/src/lib/grainfather.notifications.ts:143",{"_index":425,"title":{},"body":{"classes/GrainFatherNotifications.html":{}}}],["control/src/lib/grainfather.notifications.ts:256",{"_index":105,"title":{},"body":{"classes/BrewSessionState.html":{}}}],["control/src/lib/grainfather.notifications.ts:257",{"_index":106,"title":{},"body":{"classes/BrewSessionState.html":{}}}],["control/src/lib/grainfather.notifications.ts:258",{"_index":107,"title":{},"body":{"classes/BrewSessionState.html":{}}}],["control/src/lib/grainfather.notifications.ts:259",{"_index":104,"title":{},"body":{"classes/BrewSessionState.html":{}}}],["control/src/lib/grainfather.notifications.ts:26",{"_index":432,"title":{},"body":{"classes/GrainFatherNotifications.html":{}}}],["control/src/lib/grainfather.notifications.ts:260",{"_index":77,"title":{},"body":{"classes/BrewSessionState.html":{}}}],["control/src/lib/grainfather.notifications.ts:28",{"_index":431,"title":{},"body":{"classes/GrainFatherNotifications.html":{}}}],["control/src/lib/grainfather.notifications.ts:288",{"_index":415,"title":{},"body":{"classes/CStatus.html":{}}}],["control/src/lib/grainfather.notifications.ts:30",{"_index":430,"title":{},"body":{"classes/GrainFatherNotifications.html":{}}}],["control/src/lib/grainfather.notifications.ts:306",{"_index":416,"title":{},"body":{"classes/FStatus.html":{}}}],["control/src/lib/grainfather.notifications.ts:32",{"_index":423,"title":{},"body":{"classes/GrainFatherNotifications.html":{}}}],["control/src/lib/grainfather.notifications.ts:324",{"_index":668,"title":{},"body":{"classes/IStatus.html":{}}}],["control/src/lib/grainfather.notifications.ts:33",{"_index":424,"title":{},"body":{"classes/GrainFatherNotifications.html":{}}}],["control/src/lib/grainfather.notifications.ts:34",{"_index":421,"title":{},"body":{"classes/GrainFatherNotifications.html":{}}}],["control/src/lib/grainfather.notifications.ts:342",{"_index":913,"title":{},"body":{"classes/TStatus.html":{}}}],["control/src/lib/grainfather.notifications.ts:343",{"_index":914,"title":{},"body":{"classes/TStatus.html":{}}}],["control/src/lib/grainfather.notifications.ts:344",{"_index":915,"title":{},"body":{"classes/TStatus.html":{}}}],["control/src/lib/grainfather.notifications.ts:345",{"_index":912,"title":{},"body":{"classes/TStatus.html":{}}}],["control/src/lib/grainfather.notifications.ts:35",{"_index":422,"title":{},"body":{"classes/GrainFatherNotifications.html":{}}}],["control/src/lib/grainfather.notifications.ts:37",{"_index":427,"title":{},"body":{"classes/GrainFatherNotifications.html":{}}}],["control/src/lib/grainfather.notifications.ts:385",{"_index":917,"title":{},"body":{"classes/VStatus.html":{}}}],["control/src/lib/grainfather.notifications.ts:386",{"_index":916,"title":{},"body":{"classes/VStatus.html":{}}}],["control/src/lib/grainfather.notifications.ts:406",{"_index":919,"title":{},"body":{"classes/WStatus.html":{}}}],["control/src/lib/grainfather.notifications.ts:407",{"_index":921,"title":{},"body":{"classes/WStatus.html":{}}}],["control/src/lib/grainfather.notifications.ts:408",{"_index":923,"title":{},"body":{"classes/WStatus.html":{}}}],["control/src/lib/grainfather.notifications.ts:409",{"_index":920,"title":{},"body":{"classes/WStatus.html":{}}}],["control/src/lib/grainfather.notifications.ts:410",{"_index":922,"title":{},"body":{"classes/WStatus.html":{}}}],["control/src/lib/grainfather.notifications.ts:411",{"_index":918,"title":{},"body":{"classes/WStatus.html":{}}}],["control/src/lib/grainfather.notifications.ts:440",{"_index":925,"title":{},"body":{"classes/XStatus.html":{}}}],["control/src/lib/grainfather.notifications.ts:441",{"_index":924,"title":{},"body":{"classes/XStatus.html":{}}}],["control/src/lib/grainfather.notifications.ts:506",{"_index":928,"title":{},"body":{"classes/YStatus.html":{}}}],["control/src/lib/grainfather.notifications.ts:507",{"_index":931,"title":{},"body":{"classes/YStatus.html":{}}}],["control/src/lib/grainfather.notifications.ts:508",{"_index":927,"title":{},"body":{"classes/YStatus.html":{}}}],["control/src/lib/grainfather.notifications.ts:509",{"_index":933,"title":{},"body":{"classes/YStatus.html":{}}}],["control/src/lib/grainfather.notifications.ts:510",{"_index":930,"title":{},"body":{"classes/YStatus.html":{}}}],["control/src/lib/grainfather.notifications.ts:511",{"_index":929,"title":{},"body":{"classes/YStatus.html":{}}}],["control/src/lib/grainfather.notifications.ts:512",{"_index":932,"title":{},"body":{"classes/YStatus.html":{}}}],["control/src/lib/grainfather.notifications.ts:513",{"_index":926,"title":{},"body":{"classes/YStatus.html":{}}}],["controlled",{"_index":1049,"title":{},"body":{"license.html":{}}}],["controller",{"_index":81,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{},"index.html":{}}}],["controllerstatus",{"_index":130,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["conversions",{"_index":1086,"title":{},"body":{"license.html":{}}}],["copies",{"_index":1194,"title":{},"body":{"license.html":{}}}],["copy",{"_index":556,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{},"license.html":{}}}],["copyright",{"_index":542,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{},"license.html":{}}}],["correct",{"_index":89,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["counter",{"_index":384,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["counterclaim",{"_index":1183,"title":{},"body":{"license.html":{}}}],["coverage",{"_index":934,"title":{"coverage.html":{}},"body":{"coverage.html":{}}}],["create",{"_index":678,"title":{},"body":{"classes/RecipeDetails.html":{},"index.html":{}}}],["createcanceltimer",{"_index":701,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["created",{"_index":457,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["createdecrementtargettemperature",{"_index":705,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createdisablespargewateralert",{"_index":760,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createdisconnectandcancel",{"_index":745,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createdisconnectautomode",{"_index":749,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createdisconnectmanualmode",{"_index":742,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createdismissboiladditionalert",{"_index":698,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createeditstagetemperatureandtime(stage",{"_index":834,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createentermanualpowercontrolmode",{"_index":789,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createexitmanualpowercontrolmode",{"_index":785,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createfinishsession",{"_index":707,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["creategetcontrollervoltageandunits",{"_index":791,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["creategetcurrentboiltemperature",{"_index":736,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["creategetfirmwareversion",{"_index":763,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createincrementtargettemperature",{"_index":756,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createinteractioncomplete",{"_index":719,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createpauseorresumetimer",{"_index":712,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createpressset",{"_index":752,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createrecipe(recipedetails",{"_index":884,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createrecipedetails",{"_index":12,"title":{},"body":{"classes/BrewFatherHelper.html":{}}}],["createrecipedetails(brewfatherbatchstr",{"_index":13,"title":{},"body":{"classes/BrewFatherHelper.html":{}}}],["createresetcontroller",{"_index":767,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createresetrecipeinterrupted",{"_index":770,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["creates",{"_index":78,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["createsetboiltime(time",{"_index":811,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createsetdelayedheatfunction(minutes",{"_index":801,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createsetlocalboiltemperature(temperature",{"_index":808,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createsetnewtimer(minutes",{"_index":825,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createsetnewtimerwithseconds(minutes",{"_index":828,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createsetspargeprogress(progress",{"_index":837,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createsettargettemperature(temperature",{"_index":830,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createskiptointeraction(interaction",{"_index":840,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createskiptostep(step",{"_index":821,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createtoggleheat",{"_index":716,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createtogglepump",{"_index":739,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createturnoffboilcontrolmode",{"_index":779,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createturnoffheat",{"_index":724,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createturnoffpump",{"_index":730,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createturnoffspargealertmode",{"_index":793,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createturnoffspargecountermode",{"_index":772,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createturnonboilcontrolmode",{"_index":782,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createturnonheat",{"_index":727,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createturnonpump",{"_index":733,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createturnonspargealertmode",{"_index":796,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["createturnonspargecountermode",{"_index":775,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["cross",{"_index":1181,"title":{},"body":{"license.html":{}}}],["cstatus",{"_index":299,"title":{"classes/CStatus.html":{}},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"coverage.html":{}}}],["cstatus(parsefloat(components[0",{"_index":149,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["current",{"_index":100,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["currently",{"_index":200,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["currenttemperature",{"_index":134,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["customary",{"_index":1255,"title":{},"body":{"license.html":{}}}],["c{boiltemperature",{"_index":301,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["d",{"_index":704,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["d0",{"_index":771,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["d1",{"_index":774,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["damages",{"_index":1286,"title":{},"body":{"license.html":{}}}],["date",{"_index":1191,"title":{},"body":{"license.html":{}}}],["declarations",{"_index":1349,"title":{},"body":{"overview.html":{}}}],["decrease",{"_index":195,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["decrement",{"_index":703,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["default",{"_index":874,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["defaults",{"_index":998,"title":{},"body":{"index.html":{}}}],["defend",{"_index":1318,"title":{},"body":{"license.html":{}}}],["defined",{"_index":15,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"license.html":{}}}],["definition",{"_index":1052,"title":{},"body":{"license.html":{}}}],["definitions",{"_index":1033,"title":{},"body":{"license.html":{}}}],["delay",{"_index":207,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["delayed",{"_index":370,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["delayedheating",{"_index":285,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["delayedheatmode",{"_index":399,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["delayminutes",{"_index":875,"title":{},"body":{"classes/RecipeDetails.html":{},"index.html":{}}}],["delayseconds",{"_index":876,"title":{},"body":{"classes/RecipeDetails.html":{},"index.html":{}}}],["deliberate",{"_index":1281,"title":{},"body":{"license.html":{}}}],["dependencies",{"_index":957,"title":{"dependencies.html":{}},"body":{"dependencies.html":{},"overview.html":{}}}],["depending",{"_index":804,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["derivative",{"_index":1098,"title":{},"body":{"license.html":{}}}],["derived",{"_index":1101,"title":{},"body":{"license.html":{}}}],["describes",{"_index":64,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["describing",{"_index":1256,"title":{},"body":{"license.html":{}}}],["description",{"_index":63,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"license.html":{}}}],["designated",{"_index":1140,"title":{},"body":{"license.html":{}}}],["details",{"_index":192,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["determinate",{"_index":514,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["determine",{"_index":193,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["determining",{"_index":1270,"title":{},"body":{"license.html":{}}}],["device",{"_index":444,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["device.addeventlistener('gattserverdisconnected",{"_index":620,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["device.gatt.connect().then(server",{"_index":630,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["different",{"_index":806,"title":{},"body":{"classes/RecipeDetails.html":{},"license.html":{}}}],["direct",{"_index":1054,"title":{},"body":{"license.html":{}}}],["direction",{"_index":1057,"title":{},"body":{"license.html":{}}}],["directory",{"_index":1009,"title":{},"body":{"index.html":{}}}],["disable",{"_index":758,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["disableaddgrain",{"_index":820,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["discard",{"_index":143,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["disclaimer",{"_index":1260,"title":{},"body":{"license.html":{}}}],["disconnect",{"_index":460,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"classes/RecipeDetails.html":{}}}],["disconnected",{"_index":585,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"miscellaneous/enumerations.html":{}}}],["disconnects",{"_index":462,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["discussing",{"_index":1135,"title":{},"body":{"license.html":{}}}],["dismiss",{"_index":697,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["display",{"_index":145,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"license.html":{}}}],["displayed",{"_index":854,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["dist",{"_index":1008,"title":{},"body":{"index.html":{}}}],["dist/angular",{"_index":1014,"title":{},"body":{"index.html":{}}}],["distribute",{"_index":1161,"title":{},"body":{"license.html":{}}}],["distributed",{"_index":564,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{},"license.html":{}}}],["distribution",{"_index":1032,"title":{},"body":{"license.html":{}}}],["document",{"_index":1039,"title":{},"body":{"license.html":{}}}],["documentation",{"_index":935,"title":{},"body":{"coverage.html":{},"license.html":{}}}],["don't",{"_index":1332,"title":{},"body":{"license.html":{}}}],["done",{"_index":259,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["due",{"_index":343,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["during",{"_index":386,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["dynamic",{"_index":965,"title":{},"body":{"dependencies.html":{}}}],["e${temperature",{"_index":807,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["e0",{"_index":778,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["e1",{"_index":781,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["each",{"_index":126,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{},"license.html":{}}}],["easier",{"_index":1341,"title":{},"body":{"license.html":{}}}],["edit",{"_index":832,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["editorial",{"_index":1102,"title":{},"body":{"license.html":{}}}],["eg",{"_index":342,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["elaborations",{"_index":1105,"title":{},"body":{"license.html":{}}}],["electronic",{"_index":1123,"title":{},"body":{"license.html":{}}}],["emit",{"_index":254,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["enabled",{"_index":338,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["enclosed",{"_index":1328,"title":{},"body":{"license.html":{}}}],["encode",{"_index":905,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["end",{"_index":685,"title":{},"body":{"classes/RecipeDetails.html":{},"license.html":{}}}],["ends",{"_index":391,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["enough",{"_index":513,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["enter",{"_index":787,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["entities",{"_index":1048,"title":{},"body":{"license.html":{}}}],["entity",{"_index":1042,"title":{},"body":{"license.html":{}}}],["enum",{"_index":283,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["enumerations",{"_index":975,"title":{"miscellaneous/enumerations.html":{}},"body":{"miscellaneous/enumerations.html":{}}}],["error",{"_index":523,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["even",{"_index":1300,"title":{},"body":{"license.html":{}}}],["event",{"_index":219,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{},"license.html":{}}}],["eventemitter",{"_index":108,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["events",{"_index":123,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["exactly",{"_index":681,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["example",{"_index":90,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{},"license.html":{}}}],["except",{"_index":553,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{},"license.html":{}}}],["excluding",{"_index":1137,"title":{},"body":{"license.html":{}}}],["exclusive",{"_index":1151,"title":{},"body":{"license.html":{}}}],["execute",{"_index":1020,"title":{},"body":{"index.html":{}}}],["executed",{"_index":1246,"title":{},"body":{"license.html":{}}}],["exercise",{"_index":1276,"title":{},"body":{"license.html":{}}}],["exercising",{"_index":1071,"title":{},"body":{"license.html":{}}}],["exit",{"_index":783,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["expects",{"_index":902,"title":{},"body":{"classes/RecipeDetails.html":{},"index.html":{}}}],["explicitly",{"_index":1238,"title":{},"body":{"license.html":{}}}],["export",{"_index":29,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["exports",{"_index":1352,"title":{},"body":{"overview.html":{}}}],["exposes",{"_index":993,"title":{},"body":{"index.html":{}}}],["express",{"_index":569,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{},"license.html":{}}}],["f",{"_index":152,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["f0",{"_index":784,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["f1",{"_index":788,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["fahrenheit",{"_index":323,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["failure",{"_index":1296,"title":{},"body":{"license.html":{}}}],["false",{"_index":55,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/RecipeDetails.html":{}}}],["fee",{"_index":1305,"title":{},"body":{"license.html":{}}}],["fields",{"_index":1327,"title":{},"body":{"license.html":{}}}],["fifty",{"_index":1064,"title":{},"body":{"license.html":{}}}],["file",{"_index":5,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"coverage.html":{},"index.html":{},"license.html":{}}}],["filed",{"_index":1192,"title":{},"body":{"license.html":{}}}],["files",{"_index":986,"title":{},"body":{"index.html":{},"license.html":{}}}],["filter",{"_index":605,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["filters",{"_index":608,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["finish",{"_index":213,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["finishbrew",{"_index":392,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["finished",{"_index":292,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["finishsparge",{"_index":289,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["firmware",{"_index":762,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["firmwareversion",{"_index":304,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["fitness",{"_index":1266,"title":{},"body":{"license.html":{}}}],["flag",{"_index":769,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["folder",{"_index":1012,"title":{},"body":{"index.html":{}}}],["following",{"_index":201,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{},"license.html":{}}}],["form",{"_index":1073,"title":{},"body":{"license.html":{}}}],["format",{"_index":1336,"title":{},"body":{"license.html":{}}}],["forwarded",{"_index":473,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["free",{"_index":1154,"title":{},"body":{"license.html":{}}}],["fstatus",{"_index":303,"title":{"classes/FStatus.html":{}},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"coverage.html":{}}}],["fstatus(components[0",{"_index":153,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["further",{"_index":1022,"title":{},"body":{"index.html":{}}}],["f{firmwareversion",{"_index":305,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["g",{"_index":711,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["generated",{"_index":987,"title":{},"body":{"index.html":{},"license.html":{}}}],["generatorornext",{"_index":527,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["getconnectionstate",{"_index":464,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["gets",{"_index":487,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["getting",{"_index":979,"title":{"index.html":{},"license.html":{}},"body":{}}],["gf",{"_index":606,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"classes/RecipeDetails.html":{}}}],["gf_ble_read_characteristic",{"_index":593,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["gf_ble_service",{"_index":587,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["gf_ble_write_characteristic",{"_index":596,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["gfblecommand",{"_index":505,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["gfblecommand.encode",{"_index":658,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["give",{"_index":1197,"title":{},"body":{"license.html":{}}}],["given",{"_index":486,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"classes/RecipeDetails.html":{}}}],["go",{"_index":242,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["goes",{"_index":382,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["goodwill",{"_index":1293,"title":{},"body":{"license.html":{}}}],["governing",{"_index":573,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{},"license.html":{}}}],["grain",{"_index":208,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["grainfather",{"_index":7,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"coverage.html":{},"miscellaneous/enumerations.html":{},"index.html":{},"miscellaneous/typealiases.html":{}}}],["grainfather.commands",{"_index":28,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["grainfather.notifications",{"_index":582,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["grainfathercommands",{"_index":111,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"coverage.html":{}}}],["grainfathercommands('a",{"_index":699,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands('c",{"_index":702,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands('d",{"_index":706,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands('d0",{"_index":773,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands('d1",{"_index":776,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands('e0",{"_index":780,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands('f",{"_index":708,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands('f0",{"_index":786,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands('f1",{"_index":790,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands('g",{"_index":713,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands('h",{"_index":717,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands('h0",{"_index":794,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands('h1",{"_index":797,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands('i",{"_index":720,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands('k0",{"_index":725,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands('k1",{"_index":728,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands('l0",{"_index":731,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands('l1",{"_index":734,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands('m",{"_index":737,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands('p",{"_index":740,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands('q0",{"_index":743,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands('q1",{"_index":746,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands('q2",{"_index":750,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands('t",{"_index":753,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands('u",{"_index":757,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands('v",{"_index":761,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands('x",{"_index":764,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands('z",{"_index":768,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands(`$${temperature",{"_index":831,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands(`a${stage},${time},${temperature",{"_index":835,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands(`b${++minutes},${seconds",{"_index":802,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands(`b${progress",{"_index":838,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands(`c${interaction",{"_index":841,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands(`e${temperature",{"_index":809,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands(`j${time",{"_index":812,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands(`n${step},${number(timeeditable)},${++minutesleft",{"_index":822,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands(`r${recipedetails.boiltime},${recipedetails.mashsteps.length},${recipedetails.mashwateramount},${recipedetails.spargewateramount",{"_index":885,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands(`s${++minutes",{"_index":826,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercommands(`w${++minutes},${seconds",{"_index":829,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["grainfathercontrolmodule",{"_index":434,"title":{"modules/GrainfatherControlModule.html":{}},"body":{"modules/GrainfatherControlModule.html":{},"modules.html":{}}}],["grainfathernotifications",{"_index":128,"title":{"classes/GrainFatherNotifications.html":{}},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"coverage.html":{}}}],["grains",{"_index":376,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["grant",{"_index":1144,"title":{},"body":{"license.html":{}}}],["granted",{"_index":1072,"title":{},"body":{"license.html":{}}}],["granting",{"_index":1044,"title":{},"body":{"license.html":{}}}],["grants",{"_index":1147,"title":{},"body":{"license.html":{}}}],["graph",{"_index":1345,"title":{},"body":{"modules.html":{}}}],["grossly",{"_index":1282,"title":{},"body":{"license.html":{}}}],["h",{"_index":715,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["h0",{"_index":792,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["h1",{"_index":795,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["hack",{"_index":612,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["handle",{"_index":472,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["handlenotifications",{"_index":468,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["handlenotifications(event",{"_index":469,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["handler",{"_index":112,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["handles",{"_index":82,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["harmless",{"_index":1320,"title":{},"body":{"license.html":{}}}],["heated",{"_index":869,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["heating",{"_index":336,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["heatpower",{"_index":393,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["heatpoweroutputpercentage",{"_index":329,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["help",{"_index":1023,"title":{},"body":{"index.html":{}}}],["helper",{"_index":539,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["hereby",{"_index":1146,"title":{},"body":{"license.html":{}}}],["herein",{"_index":1242,"title":{},"body":{"license.html":{}}}],["hight",{"_index":805,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["hold",{"_index":1319,"title":{},"body":{"license.html":{}}}],["hop",{"_index":388,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["hopstand",{"_index":212,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{},"index.html":{}}}],["hopstandadd",{"_index":291,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["hopstandtime",{"_index":40,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/RecipeDetails.html":{},"index.html":{}}}],["http://www.apache.org/licenses",{"_index":1029,"title":{},"body":{"license.html":{}}}],["http://www.apache.org/licenses/license",{"_index":557,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{},"license.html":{}}}],["https://github.com/kingpulsar/grainfather",{"_index":119,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["ic",{"_index":721,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["identification",{"_index":1342,"title":{},"body":{"license.html":{}}}],["identifier",{"_index":936,"title":{},"body":{"coverage.html":{}}}],["identifying",{"_index":1331,"title":{},"body":{"license.html":{}}}],["idle",{"_index":279,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["ii",{"_index":1062,"title":{},"body":{"license.html":{}}}],["iii",{"_index":1068,"title":{},"body":{"license.html":{}}}],["implied",{"_index":570,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{},"license.html":{}}}],["import",{"_index":24,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"license.html":{}}}],["imports",{"_index":586,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["improving",{"_index":1136,"title":{},"body":{"license.html":{}}}],["inability",{"_index":1292,"title":{},"body":{"license.html":{}}}],["incidental",{"_index":1288,"title":{},"body":{"license.html":{}}}],["include",{"_index":1109,"title":{},"body":{"license.html":{}}}],["included",{"_index":1093,"title":{},"body":{"license.html":{}}}],["includes",{"_index":1213,"title":{},"body":{"license.html":{}}}],["including",{"_index":1077,"title":{},"body":{"license.html":{}}}],["inclusion",{"_index":1120,"title":{},"body":{"license.html":{}}}],["incoming",{"_index":116,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["incorporated",{"_index":1143,"title":{},"body":{"license.html":{}}}],["increment",{"_index":754,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["incurred",{"_index":1321,"title":{},"body":{"license.html":{}}}],["indemnify",{"_index":1317,"title":{},"body":{"license.html":{}}}],["indemnity",{"_index":1308,"title":{},"body":{"license.html":{}}}],["index",{"_index":9,"title":{"index.html":{}},"body":{"classes/BrewFatherHelper.html":{},"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{},"miscellaneous/typealiases.html":{}}}],["indicate",{"_index":718,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["indicated",{"_index":1092,"title":{},"body":{"license.html":{}}}],["indication",{"_index":406,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["indirect",{"_index":1055,"title":{},"body":{"license.html":{}}}],["individual",{"_index":1070,"title":{},"body":{"license.html":{}}}],["info",{"_index":3,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["information",{"_index":512,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"classes/RecipeDetails.html":{},"index.html":{},"license.html":{}}}],["informational",{"_index":1225,"title":{},"body":{"license.html":{}}}],["infringed",{"_index":1174,"title":{},"body":{"license.html":{}}}],["infringement",{"_index":1188,"title":{},"body":{"license.html":{}}}],["instance",{"_index":300,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["institute",{"_index":1178,"title":{},"body":{"license.html":{}}}],["intentionally",{"_index":1118,"title":{},"body":{"license.html":{}}}],["interaction",{"_index":197,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{},"index.html":{}}}],["interactioncode",{"_index":226,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["interactioncode.finishbrew",{"_index":271,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["interactioncode.finishsparge",{"_index":244,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["interactioncode.startboil",{"_index":247,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["interactioncode.startbrew",{"_index":230,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["interactioncode.starthopstand",{"_index":273,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["interactioncode.startsparge",{"_index":239,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["interactionmodestatus",{"_index":397,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["interactions",{"_index":202,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["interfaces",{"_index":1115,"title":{},"body":{"license.html":{}}}],["interrupt",{"_index":452,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["interrupted",{"_index":341,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["interval",{"_index":580,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["interval(5000).subscribe",{"_index":646,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["irrevocable",{"_index":1155,"title":{},"body":{"license.html":{}}}],["isrecipeinterrupted",{"_index":332,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["issue",{"_index":1131,"title":{},"body":{"license.html":{}}}],["istatus",{"_index":308,"title":{"classes/IStatus.html":{}},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"coverage.html":{}}}],["istatus(components[0",{"_index":154,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["istimerpaused",{"_index":330,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["i{interactioncode",{"_index":309,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["j${time",{"_index":810,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["january",{"_index":1027,"title":{},"body":{"license.html":{}}}],["json.parse(brewfatherbatchstr",{"_index":32,"title":{},"body":{"classes/BrewFatherHelper.html":{}}}],["k0",{"_index":723,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["k1",{"_index":726,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["karma",{"_index":1021,"title":{},"body":{"index.html":{}}}],["kept",{"_index":117,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["kind",{"_index":568,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{},"license.html":{}}}],["l0",{"_index":729,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["l1",{"_index":732,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["language",{"_index":572,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{},"license.html":{}}}],["later",{"_index":495,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["law",{"_index":560,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{},"license.html":{}}}],["lawsuit",{"_index":1184,"title":{},"body":{"license.html":{}}}],["left",{"_index":95,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["legal",{"_index":1045,"title":{},"body":{"license.html":{}}}],["legend",{"_index":1348,"title":{},"body":{"overview.html":{}}}],["length",{"_index":684,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["liability",{"_index":1277,"title":{},"body":{"license.html":{}}}],["liable",{"_index":1285,"title":{},"body":{"license.html":{}}}],["library",{"_index":983,"title":{},"body":{"index.html":{}}}],["licensable",{"_index":1172,"title":{},"body":{"license.html":{}}}],["license",{"_index":550,"title":{"license.html":{}},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{},"license.html":{}}}],["license.you",{"_index":1232,"title":{},"body":{"license.html":{}}}],["licensed",{"_index":547,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{},"license.html":{}}}],["licenses",{"_index":1189,"title":{},"body":{"license.html":{}}}],["licensor",{"_index":1040,"title":{},"body":{"license.html":{}}}],["limitation",{"_index":1263,"title":{},"body":{"license.html":{}}}],["limitations",{"_index":575,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{},"license.html":{}}}],["limited",{"_index":1078,"title":{},"body":{"license.html":{}}}],["line",{"_index":694,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["lines",{"_index":540,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"classes/RecipeDetails.html":{}}}],["link",{"_index":1113,"title":{},"body":{"license.html":{}}}],["list",{"_index":364,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["listener",{"_index":520,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["lists",{"_index":1129,"title":{},"body":{"license.html":{}}}],["literal",{"_index":1358,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["litigation",{"_index":1179,"title":{},"body":{"license.html":{}}}],["local",{"_index":803,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["long",{"_index":904,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["looks",{"_index":844,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["loss",{"_index":345,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"license.html":{}}}],["losses",{"_index":1299,"title":{},"body":{"license.html":{}}}],["lost",{"_index":449,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["m",{"_index":735,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["made",{"_index":1091,"title":{},"body":{"license.html":{}}}],["mailing",{"_index":1128,"title":{},"body":{"license.html":{}}}],["main",{"_index":992,"title":{},"body":{"index.html":{}}}],["make",{"_index":1165,"title":{},"body":{"license.html":{}}}],["making",{"_index":1075,"title":{},"body":{"license.html":{}}}],["malfunction",{"_index":1297,"title":{},"body":{"license.html":{}}}],["managed",{"_index":1133,"title":{},"body":{"license.html":{}}}],["management",{"_index":1058,"title":{},"body":{"license.html":{}}}],["manual",{"_index":346,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["manualpowermode",{"_index":333,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["marked",{"_index":1139,"title":{},"body":{"license.html":{}}}],["marks",{"_index":1252,"title":{},"body":{"license.html":{}}}],["mash",{"_index":217,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{},"index.html":{}}}],["mashramp",{"_index":286,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["mashstep",{"_index":26,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/RecipeDetails.html":{},"index.html":{},"miscellaneous/typealiases.html":{}}}],["mashsteps",{"_index":43,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["mashwateramount",{"_index":34,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/RecipeDetails.html":{},"index.html":{}}}],["matching",{"_index":59,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"coverage.html":{},"dependencies.html":{},"miscellaneous/enumerations.html":{},"index.html":{},"license.html":{},"modules.html":{},"overview.html":{},"miscellaneous/typealiases.html":{}}}],["mean",{"_index":1035,"title":{},"body":{"license.html":{}}}],["means",{"_index":1053,"title":{},"body":{"license.html":{}}}],["mechanical",{"_index":1082,"title":{},"body":{"license.html":{}}}],["media",{"_index":1087,"title":{},"body":{"license.html":{}}}],["medium",{"_index":1195,"title":{},"body":{"license.html":{}}}],["meet",{"_index":1196,"title":{},"body":{"license.html":{}}}],["merchantability",{"_index":1265,"title":{},"body":{"license.html":{}}}],["merely",{"_index":1112,"title":{},"body":{"license.html":{}}}],["message",{"_index":188,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["method",{"_index":458,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{}}}],["methods",{"_index":10,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/RecipeDetails.html":{}}}],["minimal",{"_index":872,"title":{},"body":{"classes/RecipeDetails.html":{},"index.html":{}}}],["minute",{"_index":87,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["minutes",{"_index":83,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["minutesleft",{"_index":816,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["misbehave",{"_index":504,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["miscellaneous",{"_index":974,"title":{"miscellaneous/enumerations.html":{},"miscellaneous/typealiases.html":{}},"body":{"miscellaneous/enumerations.html":{},"miscellaneous/typealiases.html":{}}}],["mode",{"_index":347,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["modifications",{"_index":1076,"title":{},"body":{"license.html":{}}}],["modified",{"_index":1200,"title":{},"body":{"license.html":{}}}],["modify",{"_index":1226,"title":{},"body":{"license.html":{}}}],["modifying",{"_index":1231,"title":{},"body":{"license.html":{}}}],["module",{"_index":433,"title":{"modules/GrainfatherControlModule.html":{}},"body":{"index.html":{},"overview.html":{}}}],["modules",{"_index":435,"title":{"modules.html":{}},"body":{"modules/GrainfatherControlModule.html":{},"modules.html":{}}}],["monitors",{"_index":446,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["more",{"_index":690,"title":{},"body":{"classes/RecipeDetails.html":{},"index.html":{},"license.html":{}}}],["move",{"_index":261,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["msg",{"_index":654,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["much",{"_index":198,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["multiple",{"_index":843,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["n${step},${timeeditable},${minutesleft},${secondsleft},${skipramp},${disableaddgrain",{"_index":813,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["name",{"_index":19,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{},"license.html":{}}}],["names",{"_index":1251,"title":{},"body":{"license.html":{}}}],["navigator",{"_index":614,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["navigator.bluetooth",{"_index":613,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["navigator.bluetooth.requestdevice(options",{"_index":617,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["necessarily",{"_index":1173,"title":{},"body":{"license.html":{}}}],["need",{"_index":260,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["needed",{"_index":203,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["needs",{"_index":98,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["negligence",{"_index":1280,"title":{},"body":{"license.html":{}}}],["negligent",{"_index":1283,"title":{},"body":{"license.html":{}}}],["new",{"_index":79,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"coverage.html":{}}}],["new/next",{"_index":404,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["next",{"_index":243,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["ng",{"_index":1005,"title":{},"body":{"index.html":{}}}],["ngmodule",{"_index":576,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["non",{"_index":1150,"title":{},"body":{"license.html":{}}}],["normally",{"_index":1222,"title":{},"body":{"license.html":{}}}],["nothing",{"_index":1241,"title":{},"body":{"license.html":{}}}],["notice",{"_index":144,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"license.html":{}}}],["notices",{"_index":1203,"title":{},"body":{"license.html":{}}}],["notification",{"_index":127,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["notification.boiltemperature",{"_index":151,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["notification.currenttemperature",{"_index":177,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["notificationhandler",{"_index":601,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["notificationline",{"_index":428,"title":{},"body":{"classes/GrainFatherNotifications.html":{}}}],["notificationline.substring(1).split(',').slice(0",{"_index":138,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["notificationline[0",{"_index":139,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["notifications",{"_index":113,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["notwithstanding",{"_index":1239,"title":{},"body":{"license.html":{}}}],["now",{"_index":999,"title":{},"body":{"index.html":{}}}],["npm",{"_index":1015,"title":{},"body":{"index.html":{}}}],["null",{"_index":140,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["number",{"_index":76,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["object",{"_index":1080,"title":{},"body":{"license.html":{}}}],["obligations",{"_index":1309,"title":{},"body":{"license.html":{}}}],["obtain",{"_index":555,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{},"license.html":{}}}],["offer",{"_index":1166,"title":{},"body":{"license.html":{}}}],["ondisconnected",{"_index":474,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["ondisconnected(_",{"_index":475,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["one",{"_index":218,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{},"license.html":{}}}],["optional",{"_index":21,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["optionally",{"_index":867,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["options",{"_index":607,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["origin",{"_index":1257,"title":{},"body":{"license.html":{}}}],["original",{"_index":1108,"title":{},"body":{"license.html":{}}}],["otherwise",{"_index":1061,"title":{},"body":{"license.html":{}}}],["out",{"_index":689,"title":{},"body":{"classes/RecipeDetails.html":{},"index.html":{},"license.html":{},"overview.html":{}}}],["output",{"_index":109,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["outputs",{"_index":420,"title":{},"body":{"classes/GrainFatherNotifications.html":{}}}],["outstanding",{"_index":1066,"title":{},"body":{"license.html":{}}}],["overview",{"_index":1347,"title":{"overview.html":{}},"body":{"overview.html":{}}}],["owner",{"_index":1041,"title":{},"body":{"license.html":{}}}],["ownership",{"_index":1063,"title":{},"body":{"license.html":{}}}],["p",{"_index":738,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["package",{"_index":956,"title":{"dependencies.html":{}},"body":{}}],["padded",{"_index":686,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["page",{"_index":1340,"title":{},"body":{"license.html":{}}}],["param",{"_index":220,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["parameters",{"_index":17,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["parsefloat(components[0",{"_index":174,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["parsefloat(components[1",{"_index":175,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["parseint(components[0",{"_index":164,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["parseint(components[1",{"_index":157,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["parseint(components[2",{"_index":159,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["parseint(components[3",{"_index":160,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["parseint(components[5",{"_index":180,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["parseint(components[6",{"_index":181,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["parses",{"_index":187,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["parsestatus",{"_index":417,"title":{},"body":{"classes/GrainFatherNotifications.html":{}}}],["parsestatus(status",{"_index":221,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["part",{"_index":1211,"title":{},"body":{"license.html":{}}}],["particular",{"_index":1267,"title":{},"body":{"license.html":{}}}],["party",{"_index":1221,"title":{},"body":{"license.html":{}}}],["patent",{"_index":1162,"title":{},"body":{"license.html":{}}}],["pause",{"_index":709,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["paused",{"_index":337,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["percent",{"_index":1065,"title":{},"body":{"license.html":{}}}],["perform",{"_index":1159,"title":{},"body":{"license.html":{}}}],["permission",{"_index":1249,"title":{},"body":{"license.html":{}}}],["permissions",{"_index":574,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{},"license.html":{}}}],["perpetual",{"_index":1148,"title":{},"body":{"license.html":{}}}],["pertain",{"_index":1210,"title":{},"body":{"license.html":{}}}],["places",{"_index":1217,"title":{},"body":{"license.html":{}}}],["plain",{"_index":679,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["popup",{"_index":454,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["possibility",{"_index":1302,"title":{},"body":{"license.html":{}}}],["possible",{"_index":199,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["power",{"_index":344,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"license.html":{}}}],["preferred",{"_index":1074,"title":{},"body":{"license.html":{}}}],["prepare",{"_index":1157,"title":{},"body":{"license.html":{}}}],["press",{"_index":255,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["previous",{"_index":339,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["previously",{"_index":497,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["primary",{"_index":488,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["printed",{"_index":1339,"title":{},"body":{"license.html":{}}}],["private",{"_index":506,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["process",{"_index":418,"title":{},"body":{"classes/GrainFatherNotifications.html":{}}}],["process(notificationline",{"_index":135,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["processed",{"_index":1000,"title":{},"body":{"index.html":{}}}],["processing",{"_index":115,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["product",{"_index":1253,"title":{},"body":{"license.html":{}}}],["progress",{"_index":278,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["project",{"_index":982,"title":{},"body":{"index.html":{}}}],["projects/.../angular",{"_index":976,"title":{},"body":{"miscellaneous/enumerations.html":{}}}],["projects/.../grainfather.commands.ts",{"_index":1357,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["projects/.../grainfather.notifications.ts",{"_index":977,"title":{},"body":{"miscellaneous/enumerations.html":{}}}],["projects/angular",{"_index":6,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"coverage.html":{},"miscellaneous/enumerations.html":{},"miscellaneous/typealiases.html":{}}}],["prominent",{"_index":1202,"title":{},"body":{"license.html":{}}}],["promise",{"_index":459,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["promise(resolve",{"_index":662,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["promise.all",{"_index":634,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["properties",{"_index":67,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["protocol",{"_index":121,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["provide",{"_index":1234,"title":{},"body":{"license.html":{}}}],["provided",{"_index":1095,"title":{},"body":{"license.html":{}}}],["providers",{"_index":1351,"title":{},"body":{"overview.html":{}}}],["provides",{"_index":1262,"title":{},"body":{"license.html":{}}}],["publicly",{"_index":1158,"title":{},"body":{"license.html":{}}}],["publish",{"_index":1016,"title":{},"body":{"index.html":{}}}],["publishes",{"_index":122,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["publishing",{"_index":1010,"title":{},"body":{"index.html":{}}}],["pump",{"_index":401,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["pumpstatus",{"_index":394,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["purpose",{"_index":1134,"title":{},"body":{"license.html":{}}}],["purposes",{"_index":1051,"title":{},"body":{"license.html":{}}}],["q0",{"_index":741,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["q1",{"_index":744,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["q2",{"_index":748,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["r75,2,15.7,16.7",{"_index":845,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["ramp",{"_index":819,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["ramping",{"_index":403,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["re)connects",{"_index":485,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["reached",{"_index":377,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["readable",{"_index":1215,"title":{},"body":{"license.html":{}}}],["readme",{"_index":1025,"title":{},"body":{"index.html":{}}}],["readonly",{"_index":367,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["reason",{"_index":1323,"title":{},"body":{"license.html":{}}}],["reasonable",{"_index":1254,"title":{},"body":{"license.html":{}}}],["receive",{"_index":492,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["received",{"_index":494,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"license.html":{}}}],["receiver",{"_index":369,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["recipe",{"_index":191,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{},"index.html":{}}}],["recipedetails",{"_index":27,"title":{"classes/RecipeDetails.html":{}},"body":{"classes/BrewFatherHelper.html":{},"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"coverage.html":{},"index.html":{}}}],["recipedetails.boilsteps",{"_index":894,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["recipedetails.boilsteps.push(boilstep",{"_index":56,"title":{},"body":{"classes/BrewFatherHelper.html":{}}}],["recipedetails.hopstandtime},${recipedetails.boilsteps.length},${boilpowermode",{"_index":891,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["recipedetails.mashsteps",{"_index":896,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["recipedetails.mashsteps.push(mashstep",{"_index":50,"title":{},"body":{"classes/BrewFatherHelper.html":{}}}],["recipedetails.name",{"_index":890,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["recipereceived",{"_index":284,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["recipients",{"_index":1198,"title":{},"body":{"license.html":{}}}],["recommend",{"_index":1337,"title":{},"body":{"license.html":{}}}],["reconnect",{"_index":448,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["reconnect(device",{"_index":482,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["reconnecting",{"_index":584,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"miscellaneous/enumerations.html":{}}}],["redistributing",{"_index":1272,"title":{},"body":{"license.html":{}}}],["redistribution",{"_index":1193,"title":{},"body":{"license.html":{}}}],["regarding",{"_index":1247,"title":{},"body":{"license.html":{}}}],["remain",{"_index":1110,"title":{},"body":{"license.html":{}}}],["remaining",{"_index":860,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["replaced",{"_index":1330,"title":{},"body":{"license.html":{}}}],["represent",{"_index":1106,"title":{},"body":{"license.html":{}}}],["representatives",{"_index":1127,"title":{},"body":{"license.html":{}}}],["reproduce",{"_index":1156,"title":{},"body":{"license.html":{}}}],["reproducing",{"_index":1258,"title":{},"body":{"license.html":{}}}],["reproduction",{"_index":1031,"title":{},"body":{"license.html":{}}}],["requestdeviceoptions",{"_index":578,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["requesting",{"_index":616,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["required",{"_index":196,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{},"license.html":{}}}],["requires",{"_index":190,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["reset",{"_index":765,"title":{},"body":{"classes/RecipeDetails.html":{},"overview.html":{}}}],["responsibility",{"_index":1315,"title":{},"body":{"license.html":{}}}],["responsible",{"_index":1269,"title":{},"body":{"license.html":{}}}],["result",{"_index":58,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"coverage.html":{},"dependencies.html":{},"miscellaneous/enumerations.html":{},"index.html":{},"license.html":{},"modules.html":{},"overview.html":{},"miscellaneous/typealiases.html":{}}}],["resulting",{"_index":1081,"title":{},"body":{"license.html":{}}}],["results",{"_index":60,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"coverage.html":{},"dependencies.html":{},"miscellaneous/enumerations.html":{},"index.html":{},"license.html":{},"modules.html":{},"overview.html":{},"miscellaneous/typealiases.html":{}}}],["resume",{"_index":710,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["retain",{"_index":1207,"title":{},"body":{"license.html":{}}}],["retrieves",{"_index":466,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["return",{"_index":57,"title":{},"body":{"classes/BrewFatherHelper.html":{},"modules/GrainfatherControlModule.html":{},"classes/RecipeDetails.html":{}}}],["returns",{"_index":23,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{}}}],["revisions",{"_index":1103,"title":{},"body":{"license.html":{}}}],["rights",{"_index":1311,"title":{},"body":{"license.html":{}}}],["risks",{"_index":1274,"title":{},"body":{"license.html":{}}}],["rounded",{"_index":84,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["royalty",{"_index":1153,"title":{},"body":{"license.html":{}}}],["run",{"_index":1004,"title":{},"body":{"index.html":{}}}],["running",{"_index":340,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["rxjs",{"_index":581,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"dependencies.html":{}}}],["s${minutes",{"_index":824,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["saison",{"_index":853,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["same",{"_index":1338,"title":{},"body":{"license.html":{}}}],["seconds",{"_index":93,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["secondsleft",{"_index":817,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["secondsleft},${number(skipramp)},${number(disableaddgrain",{"_index":823,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["section",{"_index":1164,"title":{},"body":{"license.html":{}}}],["sections",{"_index":1036,"title":{},"body":{"license.html":{}}}],["see",{"_index":216,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{},"license.html":{}}}],["select",{"_index":455,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["selected",{"_index":498,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["selecting",{"_index":456,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["self",{"_index":629,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["self.notificationhandler.commandemitter.subscribe(command",{"_index":642,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["self.sendcommand(command",{"_index":643,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["self.sendcommand(grainfathercommands.creategetcurrentboiltemperature",{"_index":641,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["self.server",{"_index":631,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["self.setconnectionstate(connectionstate.connected",{"_index":640,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["self.setuplistener(characteristic",{"_index":636,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["self.writer",{"_index":638,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["sell",{"_index":1167,"title":{},"body":{"license.html":{}}}],["send",{"_index":366,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{},"index.html":{}}}],["sendcommand",{"_index":500,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["sendcommand(gfblecommand",{"_index":501,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["sending",{"_index":205,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["sends",{"_index":214,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["sent",{"_index":54,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/RecipeDetails.html":{},"index.html":{},"license.html":{}}}],["separable",{"_index":1111,"title":{},"body":{"license.html":{}}}],["separate",{"_index":1244,"title":{},"body":{"license.html":{}}}],["server",{"_index":599,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["server.getprimaryservice(self.gf_ble_service",{"_index":632,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["service",{"_index":489,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"license.html":{}}}],["service.getcharacteristic(self.gf_ble_read_characteristic).then(characteristic",{"_index":635,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["service.getcharacteristic(self.gf_ble_write_characteristic).then(characteristic",{"_index":637,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["services",{"_index":609,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["session",{"_index":66,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{},"index.html":{}}}],["sessionstate",{"_index":75,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{},"index.html":{}}}],["sessionstate.boil",{"_index":258,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["sessionstate.boilramp",{"_index":250,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["sessionstate.delayedheating",{"_index":234,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["sessionstate.finished",{"_index":272,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["sessionstate.finishsparge",{"_index":245,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["sessionstate.hopstand",{"_index":275,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["sessionstate.hopstandadd",{"_index":274,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["sessionstate.recipereceived",{"_index":232,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["sessionstate.startboil",{"_index":248,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["sessionstate.startsparge",{"_index":240,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["sessionstate.unknown",{"_index":276,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["sessionstatus",{"_index":129,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["sessionstatus.addadditionname",{"_index":265,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["sessionstatus.addadditiontime",{"_index":267,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["sessionstatus.state",{"_index":231,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["sessionstatus.timerminutesleft",{"_index":235,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["sessionstatus.timersecondsleft",{"_index":237,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["set",{"_index":281,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["setconnectionstate",{"_index":507,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["setconnectionstate(state",{"_index":508,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["setrecipedetails",{"_index":419,"title":{},"body":{"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{}}}],["setrecipedetails(recipedetails",{"_index":185,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["sets",{"_index":519,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["settimeout(resolve",{"_index":663,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["setting",{"_index":441,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["setup",{"_index":604,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["setuplistener",{"_index":515,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["setuplistener(characteristic",{"_index":516,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["shall",{"_index":1034,"title":{},"body":{"license.html":{}}}],["shares",{"_index":1067,"title":{},"body":{"license.html":{}}}],["show",{"_index":451,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"classes/RecipeDetails.html":{}}}],["shown",{"_index":350,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["shows",{"_index":383,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["showspargealert",{"_index":880,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["showspargecounter",{"_index":879,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["showwatertreatmentalarm",{"_index":877,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["single",{"_index":693,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["skip",{"_index":241,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["skipped",{"_index":380,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["skipramp",{"_index":818,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["skipstart",{"_index":881,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["software",{"_index":563,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{},"license.html":{}}}],["sole",{"_index":1314,"title":{},"body":{"license.html":{}}}],["solely",{"_index":1268,"title":{},"body":{"license.html":{}}}],["source",{"_index":4,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"license.html":{}}}],["spaces",{"_index":687,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["sparge",{"_index":210,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["spargewateralertdisplayed",{"_index":334,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["spargewateramount",{"_index":36,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/RecipeDetails.html":{},"index.html":{}}}],["sparging",{"_index":378,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["special",{"_index":1287,"title":{},"body":{"license.html":{}}}],["specific",{"_index":571,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"classes/RecipeDetails.html":{},"index.html":{},"license.html":{}}}],["specification",{"_index":991,"title":{},"body":{"index.html":{}}}],["stage",{"_index":224,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["stagenumber",{"_index":398,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["stagerampstatus",{"_index":396,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["stand",{"_index":389,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["start",{"_index":204,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["startboil",{"_index":257,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["startbrew",{"_index":374,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["started",{"_index":980,"title":{"index.html":{},"license.html":{}},"body":{}}],["starthopstand",{"_index":390,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["startsparge",{"_index":288,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["state",{"_index":70,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{},"index.html":{},"license.html":{}}}],["stated",{"_index":1163,"title":{},"body":{"license.html":{}}}],["statement",{"_index":1233,"title":{},"body":{"license.html":{}}}],["statements",{"_index":937,"title":{},"body":{"coverage.html":{}}}],["static",{"_index":11,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/RecipeDetails.html":{}}}],["stating",{"_index":1204,"title":{},"body":{"license.html":{}}}],["status",{"_index":124,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["status.automodestatus",{"_index":223,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["status.delayedheatmode",{"_index":233,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["status.interactioncode",{"_index":227,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["status.stagenumber",{"_index":225,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["status.stagerampstatus",{"_index":249,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["step",{"_index":215,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["step.name",{"_index":266,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["step.sent",{"_index":264,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["step.time",{"_index":263,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["stepmashmode",{"_index":331,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["steps",{"_index":847,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["steptemperature",{"_index":48,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/RecipeDetails.html":{},"index.html":{}}}],["steptime",{"_index":46,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/RecipeDetails.html":{},"index.html":{}}}],["stop",{"_index":859,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["stoppage",{"_index":1294,"title":{},"body":{"license.html":{}}}],["stops",{"_index":857,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["stored",{"_index":1007,"title":{},"body":{"index.html":{}}}],["strange",{"_index":611,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["strike",{"_index":858,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["striketempmode",{"_index":883,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["string",{"_index":14,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["string.fromcharcode.apply(null",{"_index":655,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["sub",{"_index":645,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["sub.unsubscribe",{"_index":648,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["subject",{"_index":1145,"title":{},"body":{"license.html":{}}}],["sublicense",{"_index":1160,"title":{},"body":{"license.html":{}}}],["submission",{"_index":1236,"title":{},"body":{"license.html":{}}}],["submit",{"_index":1121,"title":{},"body":{"license.html":{}}}],["submitted",{"_index":1119,"title":{},"body":{"license.html":{}}}],["subscribe",{"_index":526,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["subscribetoconnectionstatus",{"_index":521,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["subscribetoconnectionstatus(generatorornext",{"_index":522,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["subscribetocontrollerstatus",{"_index":529,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["subscribetocontrollerstatus(generatorornext",{"_index":530,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["subscribetosessionstatus",{"_index":532,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["subscribetosessionstatus(generatorornext",{"_index":533,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["subsequently",{"_index":1142,"title":{},"body":{"license.html":{}}}],["substracted",{"_index":88,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["successful",{"_index":493,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["such",{"_index":1059,"title":{},"body":{"license.html":{}}}],["supersede",{"_index":1243,"title":{},"body":{"license.html":{}}}],["support",{"_index":1307,"title":{},"body":{"license.html":{}}}],["switch",{"_index":141,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["syntax",{"_index":1335,"title":{},"body":{"license.html":{}}}],["systems",{"_index":1130,"title":{},"body":{"license.html":{}}}],["t",{"_index":155,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["table",{"_index":955,"title":{},"body":{"coverage.html":{}}}],["tablesort(document.getelementbyid('coverage",{"_index":954,"title":{},"body":{"coverage.html":{}}}],["taken",{"_index":118,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["takes",{"_index":439,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{}}}],["target",{"_index":360,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["targettemperature",{"_index":358,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["temp",{"_index":253,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["temperature",{"_index":361,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["terminate",{"_index":1190,"title":{},"body":{"license.html":{}}}],["terms",{"_index":1030,"title":{},"body":{"license.html":{}}}],["test",{"_index":1019,"title":{},"body":{"index.html":{}}}],["tests",{"_index":1018,"title":{},"body":{"index.html":{}}}],["text",{"_index":1214,"title":{},"body":{"license.html":{}}}],["textall",{"_index":680,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["then(_",{"_index":639,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["then(device",{"_index":618,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["then(service",{"_index":633,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["theory",{"_index":1278,"title":{},"body":{"license.html":{}}}],["thereof",{"_index":1116,"title":{},"body":{"license.html":{}}}],["third",{"_index":1220,"title":{},"body":{"license.html":{}}}],["this.addadditionname",{"_index":296,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.addadditiontime",{"_index":297,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.automodestatus",{"_index":410,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.boiltemperature",{"_index":150,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.commandemitter.emit(grainfathercommands.createpressset",{"_index":146,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.commands",{"_index":696,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["this.commands.push(command",{"_index":901,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["this.connectionstate",{"_index":649,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["this.connectionstatus.subscribe(generatorornext",{"_index":667,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["this.controllerstatus.emit(notification",{"_index":184,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.currenttemperature",{"_index":176,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.delayedheatmode",{"_index":414,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.device",{"_index":619,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["this.device.gatt.connected",{"_index":625,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["this.device.gatt.disconnect",{"_index":626,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["this.firmwareversion",{"_index":307,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.gf_ble_service",{"_index":610,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["this.handlenotifications.bind(this",{"_index":652,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["this.heatpower",{"_index":408,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.heatpoweroutputpercentage",{"_index":352,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.interactioncode",{"_index":311,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.interactionmodestatus",{"_index":412,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.isrecipeinterrupted",{"_index":355,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.istimerpaused",{"_index":353,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.manualpowermode",{"_index":356,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.notificationhandler.controllerstatus.subscribe(generatorornext",{"_index":666,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["this.notificationhandler.process(msg",{"_index":657,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["this.notificationhandler.sessionstatus.subscribe(generatorornext",{"_index":665,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["this.notificationhandler.setrecipedetails(recipedetails",{"_index":664,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["this.ondisconnected.bind(this",{"_index":621,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["this.parsestatus(notification",{"_index":183,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.pumpstatus",{"_index":409,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.recipedetails",{"_index":186,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.recipedetails.boilsteps.foreach(step",{"_index":262,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.recipedetails.mashsteps.length",{"_index":228,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.reconnect(device",{"_index":622,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["this.reconnect(this.device",{"_index":647,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["this.server",{"_index":628,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["this.sessionstatus.emit(sessionstatus",{"_index":277,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.setconnectionstate(connectionstate.connecting",{"_index":603,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["this.setconnectionstate(connectionstate.disconnected",{"_index":627,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["this.setconnectionstate(connectionstate.reconnecting",{"_index":644,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["this.spargewateralertdisplayed",{"_index":357,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.stagenumber",{"_index":413,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.stagerampstatus",{"_index":411,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.state",{"_index":293,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.stepmashmode",{"_index":354,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.targettemperature",{"_index":363,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.timer",{"_index":161,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.timer.timerminutesleft",{"_index":236,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.timer.timersecondsleft",{"_index":238,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.timeractive",{"_index":317,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.timerminutesleft",{"_index":294,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.timersecondsleft",{"_index":295,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.timertotalstarttime",{"_index":318,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.units",{"_index":328,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.voltage",{"_index":327,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["this.wait(250",{"_index":661,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["this.writer.writevalue(command",{"_index":660,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["those",{"_index":1170,"title":{},"body":{"license.html":{}}}],["through",{"_index":1037,"title":{},"body":{"license.html":{}}}],["time",{"_index":52,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["timeeditable",{"_index":814,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["timeout",{"_index":541,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["timer",{"_index":91,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["timeractive",{"_index":312,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["timerminutesleft",{"_index":71,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["timersecondsleft",{"_index":72,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["timertotalstarttime",{"_index":314,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["title",{"_index":1264,"title":{},"body":{"license.html":{}}}],["todo",{"_index":450,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["toggle",{"_index":714,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["top",{"_index":855,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["tort",{"_index":1279,"title":{},"body":{"license.html":{}}}],["tracking",{"_index":1132,"title":{},"body":{"license.html":{}}}],["trade",{"_index":1250,"title":{},"body":{"license.html":{}}}],["trademark",{"_index":1208,"title":{},"body":{"license.html":{}}}],["trademarks",{"_index":1248,"title":{},"body":{"license.html":{}}}],["transfer",{"_index":1168,"title":{},"body":{"license.html":{}}}],["transformation",{"_index":1083,"title":{},"body":{"license.html":{}}}],["translation",{"_index":1084,"title":{},"body":{"license.html":{}}}],["treated",{"_index":692,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["treatment",{"_index":852,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["tries",{"_index":447,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["true",{"_index":268,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["try",{"_index":477,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["tslib",{"_index":970,"title":{},"body":{"dependencies.html":{}}}],["tstatus",{"_index":132,"title":{"classes/TStatus.html":{}},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"coverage.html":{}}}],["tthe",{"_index":759,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["turn",{"_index":722,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["type",{"_index":20,"title":{},"body":{"classes/BrewFatherHelper.html":{},"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"coverage.html":{},"index.html":{},"miscellaneous/typealiases.html":{}}}],["typealiases",{"_index":1355,"title":{"miscellaneous/typealiases.html":{}},"body":{}}],["types",{"_index":1088,"title":{},"body":{"license.html":{}}}],["types/web",{"_index":967,"title":{},"body":{"dependencies.html":{}}}],["t{timeractive},{timerminutesleft},{timertotalstarttime},{timersecondsleft",{"_index":315,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["u",{"_index":755,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["uint8array(event.target.value.buffer",{"_index":656,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["uint8array.from(command.padend(19",{"_index":909,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["under",{"_index":548,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{},"license.html":{}}}],["union",{"_index":1046,"title":{},"body":{"license.html":{}}}],["unit",{"_index":1017,"title":{},"body":{"index.html":{}}}],["units",{"_index":322,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["unknown",{"_index":282,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["unless",{"_index":558,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"license.html":{}}}],["unused",{"_index":481,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["up",{"_index":85,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["update",{"_index":189,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["updated",{"_index":99,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["updates",{"_index":1001,"title":{},"body":{"index.html":{}}}],["usage",{"_index":496,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["use",{"_index":251,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{},"license.html":{}}}],["used",{"_index":280,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{},"index.html":{}}}],["user",{"_index":372,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["uses",{"_index":194,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["using",{"_index":478,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"license.html":{}}}],["v",{"_index":162,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["v110",{"_index":321,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["v230",{"_index":320,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["value",{"_index":978,"title":{},"body":{"miscellaneous/enumerations.html":{}}}],["value.name",{"_index":45,"title":{},"body":{"classes/BrewFatherHelper.html":{}}}],["value.steptemp",{"_index":49,"title":{},"body":{"classes/BrewFatherHelper.html":{}}}],["value.steptime",{"_index":47,"title":{},"body":{"classes/BrewFatherHelper.html":{}}}],["value.time",{"_index":53,"title":{},"body":{"classes/BrewFatherHelper.html":{}}}],["values",{"_index":873,"title":{},"body":{"classes/RecipeDetails.html":{},"index.html":{}}}],["verbal",{"_index":1124,"title":{},"body":{"license.html":{}}}],["version",{"_index":551,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"classes/RecipeDetails.html":{},"index.html":{},"license.html":{}}}],["via",{"_index":989,"title":{},"body":{"index.html":{}}}],["view",{"_index":96,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["void",{"_index":426,"title":{},"body":{"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{}}}],["voltage",{"_index":319,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["volume",{"_index":849,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["vstatus",{"_index":163,"title":{"classes/VStatus.html":{}},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"coverage.html":{}}}],["v{voltage},{units",{"_index":325,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["w",{"_index":165,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["w${minutes},${seconds",{"_index":827,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["wait",{"_index":536,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"classes/RecipeDetails.html":{}}}],["wait(timeout",{"_index":537,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["waiting",{"_index":405,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["waits",{"_index":371,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["warns",{"_index":375,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["warranties",{"_index":566,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{},"license.html":{}}}],["warranty",{"_index":1261,"title":{},"body":{"license.html":{}}}],["water",{"_index":348,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["web",{"_index":579,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["well",{"_index":125,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{}}}],["wherever",{"_index":1219,"title":{},"body":{"license.html":{}}}],["whether",{"_index":878,"title":{},"body":{"classes/RecipeDetails.html":{},"license.html":{}}}],["whole",{"_index":1107,"title":{},"body":{"license.html":{}}}],["window.navigator",{"_index":615,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["within",{"_index":990,"title":{},"body":{"index.html":{},"license.html":{}}}],["without",{"_index":206,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"index.html":{},"license.html":{}}}],["work",{"_index":1089,"title":{},"body":{"license.html":{}}}],["works",{"_index":1099,"title":{},"body":{"license.html":{}}}],["worldwide",{"_index":1149,"title":{},"body":{"license.html":{}}}],["writer",{"_index":600,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["writing",{"_index":562,"title":{},"body":{"modules/GrainfatherControlModule.html":{},"index.html":{},"license.html":{}}}],["written",{"_index":1125,"title":{},"body":{"license.html":{}}}],["wstatus",{"_index":166,"title":{"classes/WStatus.html":{}},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"coverage.html":{}}}],["w{heatpoweroutputpercentage},{istimerpaused},{stepmashmode},{isrecipeinterrupted},{manualpowermode},{spargewateralertdisplayed",{"_index":335,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["x",{"_index":172,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/RecipeDetails.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["x.charcodeat(0",{"_index":910,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["xstatus",{"_index":173,"title":{"classes/XStatus.html":{}},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"coverage.html":{}}}],["x{targettemperature},{currenttemperature",{"_index":359,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["y",{"_index":178,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"miscellaneous/enumerations.html":{}}}],["yes",{"_index":528,"title":{},"body":{"modules/GrainfatherControlModule.html":{}}}],["ystatus",{"_index":179,"title":{"classes/YStatus.html":{}},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"modules/GrainfatherControlModule.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{},"coverage.html":{}}}],["yyyy",{"_index":1344,"title":{},"body":{"license.html":{}}}],["y{heatpower},{pumpstatus},{automodestatus},{stagerampstatus},{interactionmodestatus},{interactioncode},{stagenumber},{delayedheatmode",{"_index":400,"title":{},"body":{"classes/BrewSessionState.html":{},"classes/CStatus.html":{},"classes/FStatus.html":{},"classes/GrainFatherNotifications.html":{},"classes/IStatus.html":{},"classes/TStatus.html":{},"classes/VStatus.html":{},"classes/WStatus.html":{},"classes/XStatus.html":{},"classes/YStatus.html":{}}}],["z",{"_index":766,"title":{},"body":{"classes/RecipeDetails.html":{}}}],["zone.js",{"_index":972,"title":{},"body":{"dependencies.html":{}}}],["zoom",{"_index":1353,"title":{},"body":{"overview.html":{}}}]],"pipeline":["stemmer"]},
      "store": {"classes/BrewFatherHelper.html":{"url":"classes/BrewFatherHelper.html","title":"class - BrewFatherHelper","body":"\n                   \n\n\n\n\n\n\n\n\n\n\n\n\n  Classes\n  BrewFatherHelper\n\n\n\n        \n            Info\n        \n        \n            Source\n        \n\n\n\n    \n        \n            File\n        \n        \n            projects/angular-grainfather-control/src/lib/brewfather.helper.ts\n        \n\n\n\n\n\n            \n    Index\n    \n        \n\n                \n                    \n                        Methods\n                    \n                \n                \n                    \n                        \n                            \n                                    Static\n                                createRecipeDetails\n                            \n                        \n                    \n                \n\n\n\n\n\n        \n    \n\n\n\n\n            \n    \n    \n        Methods\n    \n    \n        \n            \n                \n                    \n                    \n                        \n                            Static\n                            createRecipeDetails\n                        \n                        \n                    \n                \n            \n            \n                \n                    \n                    createRecipeDetails(brewFatherBatchStr: string)\n                \n            \n\n\n            \n                \n                    Defined in projects/angular-grainfather-control/src/lib/brewfather.helper.ts:19\n                \n            \n\n\n            \n                \n\n                    \n                        Parameters :\n                        \n                            \n                                \n                                    Name\n                                    Type\n                                    Optional\n                                \n                            \n                            \n                                \n                                    brewFatherBatchStr\n                                    \n                                                string\n                                    \n\n                                    \n                                        No\n                                    \n\n\n                                \n                            \n                        \n                    \n                    \n                    \n                    \n                        Returns :         any\n\n                    \n                    \n                        \n                    \n                \n            \n        \n    \n\n\n\n\n\n\n    \n\n\n    \n        import {BoilStep, MashStep, RecipeDetails} from './grainfather.commands';\n\nexport class BrewFatherHelper {\n\n  static createRecipeDetails(brewFatherBatchStr: string) {\n    const brewFatherBatch = JSON.parse(brewFatherBatchStr);\n\n    const recipeDetails: RecipeDetails = {\n      name: brewFatherBatch.recipe.name.toUpperCase(),\n      mashWaterAmount: brewFatherBatch.recipe.data.mashWaterAmount.toFixed(1).toString(),\n      spargeWaterAmount: brewFatherBatch.recipe.data.spargeWaterAmount.toFixed(1).toString(),\n      boilTime: brewFatherBatch.recipe.boilTime.toString(),\n      hopStandTime:  brewFatherBatch.recipe.hopStandMinutes.toString(),\n      boilSteps: [],\n      mashSteps: [],\n    };\n\n    brewFatherBatch.recipe.mash.steps.forEach(value => {\n      const mashStep: MashStep = {\n        name: value.name,\n        stepTime: value.stepTime,\n        stepTemperature: value.stepTemp\n      };\n      recipeDetails.mashSteps.push(mashStep);\n    });\n\n    brewFatherBatch.boilSteps.forEach(value => {\n      const boilStep: BoilStep = {\n        name: value.name,\n        time: value.time,\n        sent: false\n      };\n      recipeDetails.boilSteps.push(boilStep);\n    });\n\n    return recipeDetails;\n  }\n}\n\n    \n\n\n\n\n                   \n\n\n\n\n                   \n    \n         result-matching \"\"\n        \n    \n    \n        No results matching \"\"\n    \n\n"},"classes/BrewSessionState.html":{"url":"classes/BrewSessionState.html","title":"class - BrewSessionState","body":"\n                   \n\n\n\n\n\n\n\n\n\n\n\n\n  Classes\n  BrewSessionState\n\n\n\n        \n            Info\n        \n        \n            Source\n        \n\n\n\n    \n        \n            File\n        \n        \n            projects/angular-grainfather-control/src/lib/grainfather.notifications.ts\n        \n\n            \n                Description\n            \n            \n                Describes a brewing session.\n\n            \n\n\n\n\n            \n    Index\n    \n        \n                \n                    \n                        Properties\n                    \n                \n                \n                    \n                        \n                            \n                                addAdditionName\n                            \n                            \n                                addAdditionTime\n                            \n                            \n                                state\n                            \n                            \n                                timerMinutesLeft\n                            \n                            \n                                timerSecondsLeft\n                            \n                        \n                    \n                \n\n\n\n\n\n\n        \n    \n\n\n            \n    Constructor\n        \n            \n                \n                    \nconstructor(state: SessionState, timerMinutesLeft: number, timerSecondsLeft: number, addAdditionName: string, addAdditionTime: number)\n                    \n                \n                        \n                            \n                                Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:260\n                            \n                        \n\n                \n                    \n                            Creates a new brew session state.\nSince the controller handles minutes as rounded up, 1 minute is substracted to have the correct number of minutes.\nFor example, a timer with 1 minute and 30 seconds actually has 30 seconds left. So to view it as 0:30, it needs to be updated.\n\n                            \n                                    Parameters :\n                                    \n                                        \n                                            \n                                                Name\n                                                    Type\n                                                Optional\n                                                    Description\n                                            \n                                        \n                                        \n                                                \n                                                        state\n                                                  \n                                                        \n                                                                        SessionState\n                                                        \n                                                  \n                                                    \n                                                            No\n                                                    \n                                                    \n                                                        \n                                                                current state of brewing session\n\n                                                        \n                                                \n                                                \n                                                        timerMinutesLeft\n                                                  \n                                                        \n                                                                        number\n                                                        \n                                                  \n                                                    \n                                                            No\n                                                    \n                                                    \n                                                        \n                                                                minutes left on current timer\n\n                                                        \n                                                \n                                                \n                                                        timerSecondsLeft\n                                                  \n                                                        \n                                                                        number\n                                                        \n                                                  \n                                                    \n                                                            No\n                                                    \n                                                    \n                                                        \n                                                                seconds left on current timer\n\n                                                        \n                                                \n                                                \n                                                        addAdditionName\n                                                  \n                                                        \n                                                                        string\n                                                        \n                                                  \n                                                    \n                                                            No\n                                                    \n                                                    \n                                                        \n                                                                name of the addition to add\n\n                                                        \n                                                \n                                                \n                                                        addAdditionTime\n                                                  \n                                                        \n                                                                        number\n                                                        \n                                                  \n                                                    \n                                                            No\n                                                    \n                                                    \n                                                        \n                                                                time at which the addition needs to be added\n\n                                                        \n                                                \n                                        \n                                    \n                            \n                    \n                \n            \n        \n\n\n            \n    \n        \n            Properties\n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            addAdditionName\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         string\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:259\n                            \n                        \n\n\n            \n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            addAdditionTime\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         number\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:260\n                            \n                        \n\n\n            \n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            state\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         SessionState\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:256\n                            \n                        \n\n\n            \n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            timerMinutesLeft\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         number\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:257\n                            \n                        \n\n\n            \n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            timerSecondsLeft\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         number\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:258\n                            \n                        \n\n\n            \n        \n\n\n\n\n\n\n\n\n    \n\n\n    \n        import {EventEmitter, Output} from '@angular/core';\nimport {GrainFatherCommands, RecipeDetails} from './grainfather.commands';\n\n/**\n * Handler for notifications. Besides processing all incoming notifications, also the state of the controller is kept and updated.\n * Notifications are taken from https://github.com/kingpulsar/Grainfather-Bluetooth-Protocol\n *\n * Publishes events for the controller status as well as for each notification.\n */\nexport class GrainFatherNotifications {\n\n  @Output()\n  sessionStatus: EventEmitter = new EventEmitter();\n  @Output()\n  controllerStatus: EventEmitter = new EventEmitter();\n  @Output()\n  commandEmitter: EventEmitter = new EventEmitter();\n\n  recipeDetails: RecipeDetails;\n  timer: TStatus;\n  boilTemperature: number;\n  currentTemperature: number;\n\n  process(notificationLine: string): any {\n    // console.log(notificationLine);\n    const components = notificationLine.substring(1).split(',').slice(0, -1);\n    const type = notificationLine[0];\n\n    let notification: any = null;\n\n    switch (type) {\n      case 'A':\n        // Discard notice on display\n        this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n        break;\n\n      case 'C':\n        notification = new CStatus(parseFloat(components[0]));\n        this.boilTemperature = notification.boilTemperature;\n        break;\n\n      case 'F':\n        notification = new FStatus(components[0]);\n        break;\n\n      case 'I':\n        notification = new IStatus(components[0]);\n        break;\n\n      case 'T':\n        notification = new TStatus(\n          components[0] === '1',\n          parseInt(components[1], 10),\n          parseInt(components[2], 10),\n          parseInt(components[3], 10)\n        );\n        this.timer = notification;\n        break;\n\n      case 'V':\n        notification = new VStatus(\n          parseInt(components[0], 10),\n          parseInt(components[1], 10)\n        );\n        break;\n\n      case 'W':\n        notification = new WStatus(\n          parseInt(components[0], 10),\n          components[1] === '1',\n          components[2] === '1',\n          components[3] === '1',\n          components[4] === '1',\n          components[5] === '1'\n        );\n        break;\n\n      case 'X':\n        notification = new XStatus(\n          parseFloat(components[0]),\n          parseFloat(components[1])\n        );\n        this.currentTemperature = notification.currentTemperature;\n        break;\n\n      case 'Y':\n        notification = new YStatus(\n          components[0] === '1',\n          components[1] === '1',\n          components[2] === '1',\n          components[3] === '1',\n          components[4] === '1',\n          parseInt(components[5], 10),\n          parseInt(components[6], 10),\n          components[7] === '1'\n        );\n\n        this.parseStatus(notification);\n        break;\n    }\n\n    this.controllerStatus.emit(notification);\n  }\n\n  setRecipeDetails(recipeDetails: RecipeDetails) {\n    this.recipeDetails = recipeDetails;\n  }\n\n  /**\n   * Parses the yStatus message to update the session state.\n   *\n   * Requires recipe details to be able to determine the state.\n   *\n   * Uses the state to decrease the required interaction with the controller as much as possible.\n   * Currently the following interactions are needed:\n   *  - Start session after sending recipe without delay\n   *  - Add grain alarm\n   *  - Sparge alarm\n   *  - Start boil timer\n   *  - Start hopstand timer\n   *  - Finish session\n   *\n   *  It also sends notifications with:\n   *   - Current step, see SessionState\n   *   - Time left for step, for delay, mash and boil\n   *   - If a boil addition needs to be added, this will only be one event for each addition\n   *\n   * @param status current YStatus.\n   */\n  parseStatus(status: YStatus) {\n    const sessionStatus = new BrewSessionState(SessionState.Idle);\n\n    if (status && status.autoModeStatus) {\n      if (this.recipeDetails) {\n        const stage = status.stageNumber;\n        const interactionCode = status.interactionCode;\n        const mashSteps = this.recipeDetails.mashSteps.length;\n\n        if (stage === 0) {\n          if (interactionCode === InteractionCode.StartBrew) {\n            sessionStatus.state = SessionState.RecipeReceived;\n          }\n          if (status.delayedHeatMode) {\n            sessionStatus.state = SessionState.DelayedHeating;\n            sessionStatus.timerMinutesLeft = this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n          }\n        } else if (stage > 0 && stage  0 ?\n              this.timer.timerMinutesLeft - 1  : this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n          }\n        } else if (stage === mashSteps + 1) {\n          if (interactionCode === InteractionCode.StartSparge) {\n            sessionStatus.state = SessionState.StartSparge;\n            // Skip this stage and go to next\n            this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n          } else if (interactionCode === InteractionCode.FinishSparge) {\n            sessionStatus.state = SessionState.FinishSparge;\n          }\n        } else if (stage === mashSteps + 2) {\n          if (interactionCode === InteractionCode.StartBoil) {\n            sessionStatus.state = SessionState.StartBoil;\n          } else if (status.stageRampStatus) {\n            sessionStatus.state = SessionState.BoilRamp;\n            // Use actual temp and boil temp to determine if we are there\n            // then emit press command to get to StartBoil\n            if (this.currentTemperature >= this.boilTemperature) {\n              this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n            }\n          } else {\n            sessionStatus.state = SessionState.Boil;\n            sessionStatus.timerMinutesLeft = this.timer.timerMinutesLeft > 0 ?\n              this.timer.timerMinutesLeft - 1  : this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n            // If boil is done, we need to move the controller to the next stage\n            if (this.timer.timerMinutesLeft === 0) {\n              this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n            }\n\n            this.recipeDetails.boilSteps.forEach(step => {\n              if (this.timer.timerMinutesLeft === step.time && !step.sent) {\n                sessionStatus.addAdditionName = step.name;\n                sessionStatus.addAdditionTime = step.time;\n                step.sent = true;\n              }\n            });\n          }\n        } else if (stage === mashSteps + 3 || stage === mashSteps + 4) {\n          if (interactionCode === InteractionCode.FinishBrew) {\n            sessionStatus.state = SessionState.Finished;\n          } else if (interactionCode === InteractionCode.StartHopStand) {\n            sessionStatus.state = SessionState.HopStandAdd;\n          } else {\n            sessionStatus.state = SessionState.HopStand;\n            sessionStatus.timerMinutesLeft = this.timer.timerMinutesLeft > 0 ?\n              this.timer.timerMinutesLeft - 1  : this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n          }\n        }\n      } else {\n        sessionStatus.state = SessionState.Unknown;\n      }\n    }\n\n    this.sessionStatus.emit(sessionStatus);\n  }\n}\n\n/**\n * State of a brewing session.\n *\n * If no session is in progress 'Idle' is used. If no recipe details are set, 'Unknown' is used.\n */\nexport enum SessionState {\n  Idle,\n  RecipeReceived,\n  DelayedHeating,\n  MashRamp,\n  Mash,\n  AddGrain,\n  StartSparge,\n  FinishSparge,\n  BoilRamp,\n  StartBoil,\n  Boil,\n  HopStandAdd,\n  HopStand,\n  Finished,\n  Unknown\n}\n\n/**\n * Describes a brewing session.\n */\nexport class BrewSessionState {\n  state: SessionState;\n  timerMinutesLeft: number;\n  timerSecondsLeft: number;\n  addAdditionName: string;\n  addAdditionTime: number;\n\n  /**\n   * Creates a new brew session state.\n   *\n   * Since the controller handles minutes as rounded up, 1 minute is substracted to have the correct number of minutes.\n   * For example, a timer with 1 minute and 30 seconds actually has 30 seconds left. So to view it as 0:30, it needs to be updated.\n   *\n   * @param state current state of brewing session\n   * @param timerMinutesLeft minutes left on current timer\n   * @param timerSecondsLeft seconds left on current timer\n   * @param addAdditionName name of the addition to add\n   * @param addAdditionTime time at which the addition needs to be added\n   */\n  constructor(state: SessionState, timerMinutesLeft: number= 0, timerSecondsLeft: number = 0, addAdditionName: string = '',\n              addAdditionTime: number = 0) {\n    this.state = state;\n    this.timerMinutesLeft = timerMinutesLeft;\n    this.timerSecondsLeft = timerSecondsLeft;\n    this.addAdditionName = addAdditionName;\n    this.addAdditionTime = addAdditionTime;\n  }\n}\n\n/**\n * Class containing the details of the C notification.\n */\nexport class CStatus {\n  boilTemperature: number;\n\n  /**\n   * Creates a new instance of the C notification.\n   *\n   * Notification: ```C{boilTemperature}```\n   *\n   * @param boilTemperature\n   */\n  constructor(boilTemperature: number) {\n    this.boilTemperature = boilTemperature;\n  }\n}\n\n/**\n * Class containing the details of the F notification.\n */\nexport class FStatus {\n  firmwareVersion: string;\n\n  /**\n   * Creates a new instance of the F notification.\n   *\n   * Notification: ```F{firmwareVersion}```\n   *\n   * @param firmwareVersion\n   */\n  constructor(firmwareVersion: string) {\n    this.firmwareVersion = firmwareVersion;\n  }\n}\n\n/**\n * Class containing the details of the I notification.\n */\nexport class IStatus {\n  interactionCode: string;\n\n  /**\n   * Creates a new instance of the I notification.\n   *\n   * Notification: ```I{interactionCode}```\n   *\n   * @param interactionCode\n   */\n  constructor(interactionCode: string) {\n    this.interactionCode = interactionCode;\n  }\n}\n\n/**\n * Class containing the details of the T notification.\n */\nexport class TStatus {\n  timerActive: boolean;\n  timerMinutesLeft: number;\n  timerTotalStartTime: number;\n  timerSecondsLeft: number;\n\n  /**\n   * Creates a new instance of the T notification.\n   *\n   * Notification: ```T{timerActive},{timerMinutesLeft},{timerTotalStartTime},{timerSecondsLeft}```\n   *\n   * @param timerActive\n   * @param timerMinutesLeft\n   * @param timerTotalStartTime\n   * @param timerSecondsLeft\n   */\n  constructor(timerActive: boolean, timerMinutesLeft: number, timerTotalStartTime: number, timerSecondsLeft: number) {\n    this.timerActive = timerActive;\n    this.timerMinutesLeft = timerMinutesLeft;\n    this.timerTotalStartTime = timerTotalStartTime;\n    this.timerSecondsLeft = timerSecondsLeft;\n  }\n}\n\n/**\n * Describes the voltage of the controller\n */\nexport enum Voltage {\n  V230 = 0,\n  V110\n}\n\n/**\n * Describes the used units.\n */\nexport enum Units {\n  Fahrenheit = 0,\n  Celsius\n}\n\n/**\n * Class containing the details of the V notification.\n */\nexport class VStatus {\n  voltage: Voltage;\n  units: Units;\n\n  /**\n   * Creates a new instance of the V notification.\n   *\n   * Notification: ```V{voltage},{units}```\n   *\n   * @param voltage\n   * @param units\n   */\n  constructor(voltage: Voltage, units: Units) {\n    this.voltage = voltage;\n    this.units = units;\n  }\n}\n\n/**\n * Class containing the details of the W notification.\n */\nexport class WStatus {\n  heatPowerOutputPercentage: number;\n  isTimerPaused: boolean;\n  stepMashMode: boolean;\n  isRecipeInterrupted: boolean;\n  manualPowerMode: boolean;\n  spargeWaterAlertDisplayed: boolean;\n\n  /**\n   * Creates a new instance of the W notification.\n   *\n   * Notification: ```W{heatPowerOutputPercentage},{isTimerPaused},{stepMashMode},{isRecipeInterrupted},{manualPowerMode},{spargeWaterAlertDisplayed}```\n   *\n   * @param heatPowerOutputPercentage heating output\n   * @param isTimerPaused if true, the timer is paused\n   * @param stepMashMode if true, step mash is enabled??\n   * @param isRecipeInterrupted if true, the previous running recipe was interrupted, eg due to power loss\n   * @param manualPowerMode if true, manual power mode is enabled\n   * @param spargeWaterAlertDisplayed if true, the sparge water heating alert is shown\n   */\n  constructor(heatPowerOutputPercentage: number, isTimerPaused: boolean, stepMashMode: boolean,\n              isRecipeInterrupted: boolean, manualPowerMode: boolean, spargeWaterAlertDisplayed: boolean) {\n    this.heatPowerOutputPercentage = heatPowerOutputPercentage;\n    this.isTimerPaused = isTimerPaused;\n    this.stepMashMode = stepMashMode;\n    this.isRecipeInterrupted = isRecipeInterrupted;\n    this.manualPowerMode = manualPowerMode;\n    this.spargeWaterAlertDisplayed = spargeWaterAlertDisplayed;\n  }\n}\n\n/**\n * Class containing the details of the X notification.\n */\nexport class XStatus {\n  targetTemperature: number;\n  currentTemperature: number;\n\n  /**\n   * Creates a new instance of the X notification.\n   *\n   * Notification: ```X{targetTemperature},{currentTemperature}```\n   *\n   * @param targetTemperature target temperature currently set\n   * @param currentTemperature current temperature\n   */\n  constructor(targetTemperature: number, currentTemperature: number) {\n    this.targetTemperature = targetTemperature;\n    this.currentTemperature = currentTemperature;\n  }\n}\n\n/**\n * List of interaction codes send in the Y notification by the controller.\n *\n * @readonly\n * @enum {number}\n */\nexport enum InteractionCode {\n  /**\n   * Interaction code send by the controller if a new recipe is receiver.\n   * Only send if there is no delayed heating timer used.\n   * Waits for user acknowledgement.\n   */\n  StartBrew = 1,\n  /**\n   * Warns the user to add the grains if the mash-in temperature is reached.\n   * Waits for user acknowledgement.\n   */\n  AddGrain,\n  /**\n   * Warns the user that sparging can being.\n   * Is skipped automatically, so that the controller goes to the FinishSparge interaction.\n   */\n  StartSparge,\n  /**\n   * If enabled, shows the sparge counter, if not, shows an alert to continue to the boil stage.\n   * Waits for user acknowledgement.\n   */\n  FinishSparge,\n  /**\n   * Shows an alert to start the boil timer. During this stage, the boil additions will also be shown.\n   * Waits for user acknowledgement.\n   */\n  StartBoil,\n  /**\n   * If a hop stand is added to the recipe, an alert is shown to start the hop stand timer.\n   * Waits for user acknowledgement.\n   */\n  StartHopStand,\n  /**\n   * If the boil timer ends, an alert to finish the session is shown.\n   * Waits for user acknowledgement.\n   */\n  FinishBrew\n}\n\n/**\n * Class containing the details of the Y notification.\n */\nexport class YStatus {\n  heatPower: boolean;\n  pumpStatus: boolean;\n  autoModeStatus: boolean;\n  stageRampStatus: boolean;\n  interactionModeStatus: boolean;\n  interactionCode: InteractionCode;\n  stageNumber: number;\n  delayedHeatMode: boolean;\n\n  /**\n   * Creates a new instance of the Y notification.\n   *\n   * Notification: ```Y{heatPower},{pumpStatus},{autoModeStatus},{stageRampStatus},{interactionModeStatus},{interactionCode},{stageNumber},{delayedHeatMode}```\n   *\n   * @param heatPower heating power output.\n   * @param pumpStatus pump status.\n   * @param autoModeStatus if true the controller is running an automated session.\n   * @param stageRampStatus if true, the controller is ramping to the new/next target temperature.\n   * @param interactionModeStatus if true, the controller is waiting for user interaction.\n   * @param interactionCode code indication the controller step.\n   * @param stageNumber stage number the controller currently is at.\n   * @param delayedHeatMode if true, the controller is running the delayed heating timer.\n   */\n  constructor(heatPower: boolean, pumpStatus: boolean, autoModeStatus: boolean, stageRampStatus: boolean,\n              interactionModeStatus: boolean, interactionCode: InteractionCode, stageNumber: number, delayedHeatMode: boolean) {\n    this.heatPower = heatPower;\n    this.pumpStatus = pumpStatus;\n    this.autoModeStatus = autoModeStatus;\n    this.stageRampStatus = stageRampStatus;\n    this.interactionModeStatus = interactionModeStatus;\n    this.interactionCode = interactionCode;\n    this.stageNumber = stageNumber;\n    this.delayedHeatMode = delayedHeatMode;\n  }\n}\n\n    \n\n\n\n\n                   \n\n\n\n\n                   \n    \n         result-matching \"\"\n        \n    \n    \n        No results matching \"\"\n    \n\n"},"classes/CStatus.html":{"url":"classes/CStatus.html","title":"class - CStatus","body":"\n                   \n\n\n\n\n\n\n\n\n\n\n\n\n  Classes\n  CStatus\n\n\n\n        \n            Info\n        \n        \n            Source\n        \n\n\n\n    \n        \n            File\n        \n        \n            projects/angular-grainfather-control/src/lib/grainfather.notifications.ts\n        \n\n            \n                Description\n            \n            \n                Class containing the details of the C notification.\n\n            \n\n\n\n\n            \n    Index\n    \n        \n                \n                    \n                        Properties\n                    \n                \n                \n                    \n                        \n                            \n                                boilTemperature\n                            \n                        \n                    \n                \n\n\n\n\n\n\n        \n    \n\n\n            \n    Constructor\n        \n            \n                \n                    \nconstructor(boilTemperature: number)\n                    \n                \n                        \n                            \n                                Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:288\n                            \n                        \n\n                \n                    \n                            Creates a new instance of the C notification.\nNotification: C{boilTemperature}\n\n                            \n                                    Parameters :\n                                    \n                                        \n                                            \n                                                Name\n                                                    Type\n                                                Optional\n                                            \n                                        \n                                        \n                                                \n                                                        boilTemperature\n                                                  \n                                                        \n                                                                        number\n                                                        \n                                                  \n                                                    \n                                                            No\n                                                    \n                                                    \n                                                \n                                        \n                                    \n                            \n                    \n                \n            \n        \n\n\n            \n    \n        \n            Properties\n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            boilTemperature\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         number\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:288\n                            \n                        \n\n\n            \n        \n\n\n\n\n\n\n\n\n    \n\n\n    \n        import {EventEmitter, Output} from '@angular/core';\nimport {GrainFatherCommands, RecipeDetails} from './grainfather.commands';\n\n/**\n * Handler for notifications. Besides processing all incoming notifications, also the state of the controller is kept and updated.\n * Notifications are taken from https://github.com/kingpulsar/Grainfather-Bluetooth-Protocol\n *\n * Publishes events for the controller status as well as for each notification.\n */\nexport class GrainFatherNotifications {\n\n  @Output()\n  sessionStatus: EventEmitter = new EventEmitter();\n  @Output()\n  controllerStatus: EventEmitter = new EventEmitter();\n  @Output()\n  commandEmitter: EventEmitter = new EventEmitter();\n\n  recipeDetails: RecipeDetails;\n  timer: TStatus;\n  boilTemperature: number;\n  currentTemperature: number;\n\n  process(notificationLine: string): any {\n    // console.log(notificationLine);\n    const components = notificationLine.substring(1).split(',').slice(0, -1);\n    const type = notificationLine[0];\n\n    let notification: any = null;\n\n    switch (type) {\n      case 'A':\n        // Discard notice on display\n        this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n        break;\n\n      case 'C':\n        notification = new CStatus(parseFloat(components[0]));\n        this.boilTemperature = notification.boilTemperature;\n        break;\n\n      case 'F':\n        notification = new FStatus(components[0]);\n        break;\n\n      case 'I':\n        notification = new IStatus(components[0]);\n        break;\n\n      case 'T':\n        notification = new TStatus(\n          components[0] === '1',\n          parseInt(components[1], 10),\n          parseInt(components[2], 10),\n          parseInt(components[3], 10)\n        );\n        this.timer = notification;\n        break;\n\n      case 'V':\n        notification = new VStatus(\n          parseInt(components[0], 10),\n          parseInt(components[1], 10)\n        );\n        break;\n\n      case 'W':\n        notification = new WStatus(\n          parseInt(components[0], 10),\n          components[1] === '1',\n          components[2] === '1',\n          components[3] === '1',\n          components[4] === '1',\n          components[5] === '1'\n        );\n        break;\n\n      case 'X':\n        notification = new XStatus(\n          parseFloat(components[0]),\n          parseFloat(components[1])\n        );\n        this.currentTemperature = notification.currentTemperature;\n        break;\n\n      case 'Y':\n        notification = new YStatus(\n          components[0] === '1',\n          components[1] === '1',\n          components[2] === '1',\n          components[3] === '1',\n          components[4] === '1',\n          parseInt(components[5], 10),\n          parseInt(components[6], 10),\n          components[7] === '1'\n        );\n\n        this.parseStatus(notification);\n        break;\n    }\n\n    this.controllerStatus.emit(notification);\n  }\n\n  setRecipeDetails(recipeDetails: RecipeDetails) {\n    this.recipeDetails = recipeDetails;\n  }\n\n  /**\n   * Parses the yStatus message to update the session state.\n   *\n   * Requires recipe details to be able to determine the state.\n   *\n   * Uses the state to decrease the required interaction with the controller as much as possible.\n   * Currently the following interactions are needed:\n   *  - Start session after sending recipe without delay\n   *  - Add grain alarm\n   *  - Sparge alarm\n   *  - Start boil timer\n   *  - Start hopstand timer\n   *  - Finish session\n   *\n   *  It also sends notifications with:\n   *   - Current step, see SessionState\n   *   - Time left for step, for delay, mash and boil\n   *   - If a boil addition needs to be added, this will only be one event for each addition\n   *\n   * @param status current YStatus.\n   */\n  parseStatus(status: YStatus) {\n    const sessionStatus = new BrewSessionState(SessionState.Idle);\n\n    if (status && status.autoModeStatus) {\n      if (this.recipeDetails) {\n        const stage = status.stageNumber;\n        const interactionCode = status.interactionCode;\n        const mashSteps = this.recipeDetails.mashSteps.length;\n\n        if (stage === 0) {\n          if (interactionCode === InteractionCode.StartBrew) {\n            sessionStatus.state = SessionState.RecipeReceived;\n          }\n          if (status.delayedHeatMode) {\n            sessionStatus.state = SessionState.DelayedHeating;\n            sessionStatus.timerMinutesLeft = this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n          }\n        } else if (stage > 0 && stage  0 ?\n              this.timer.timerMinutesLeft - 1  : this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n          }\n        } else if (stage === mashSteps + 1) {\n          if (interactionCode === InteractionCode.StartSparge) {\n            sessionStatus.state = SessionState.StartSparge;\n            // Skip this stage and go to next\n            this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n          } else if (interactionCode === InteractionCode.FinishSparge) {\n            sessionStatus.state = SessionState.FinishSparge;\n          }\n        } else if (stage === mashSteps + 2) {\n          if (interactionCode === InteractionCode.StartBoil) {\n            sessionStatus.state = SessionState.StartBoil;\n          } else if (status.stageRampStatus) {\n            sessionStatus.state = SessionState.BoilRamp;\n            // Use actual temp and boil temp to determine if we are there\n            // then emit press command to get to StartBoil\n            if (this.currentTemperature >= this.boilTemperature) {\n              this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n            }\n          } else {\n            sessionStatus.state = SessionState.Boil;\n            sessionStatus.timerMinutesLeft = this.timer.timerMinutesLeft > 0 ?\n              this.timer.timerMinutesLeft - 1  : this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n            // If boil is done, we need to move the controller to the next stage\n            if (this.timer.timerMinutesLeft === 0) {\n              this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n            }\n\n            this.recipeDetails.boilSteps.forEach(step => {\n              if (this.timer.timerMinutesLeft === step.time && !step.sent) {\n                sessionStatus.addAdditionName = step.name;\n                sessionStatus.addAdditionTime = step.time;\n                step.sent = true;\n              }\n            });\n          }\n        } else if (stage === mashSteps + 3 || stage === mashSteps + 4) {\n          if (interactionCode === InteractionCode.FinishBrew) {\n            sessionStatus.state = SessionState.Finished;\n          } else if (interactionCode === InteractionCode.StartHopStand) {\n            sessionStatus.state = SessionState.HopStandAdd;\n          } else {\n            sessionStatus.state = SessionState.HopStand;\n            sessionStatus.timerMinutesLeft = this.timer.timerMinutesLeft > 0 ?\n              this.timer.timerMinutesLeft - 1  : this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n          }\n        }\n      } else {\n        sessionStatus.state = SessionState.Unknown;\n      }\n    }\n\n    this.sessionStatus.emit(sessionStatus);\n  }\n}\n\n/**\n * State of a brewing session.\n *\n * If no session is in progress 'Idle' is used. If no recipe details are set, 'Unknown' is used.\n */\nexport enum SessionState {\n  Idle,\n  RecipeReceived,\n  DelayedHeating,\n  MashRamp,\n  Mash,\n  AddGrain,\n  StartSparge,\n  FinishSparge,\n  BoilRamp,\n  StartBoil,\n  Boil,\n  HopStandAdd,\n  HopStand,\n  Finished,\n  Unknown\n}\n\n/**\n * Describes a brewing session.\n */\nexport class BrewSessionState {\n  state: SessionState;\n  timerMinutesLeft: number;\n  timerSecondsLeft: number;\n  addAdditionName: string;\n  addAdditionTime: number;\n\n  /**\n   * Creates a new brew session state.\n   *\n   * Since the controller handles minutes as rounded up, 1 minute is substracted to have the correct number of minutes.\n   * For example, a timer with 1 minute and 30 seconds actually has 30 seconds left. So to view it as 0:30, it needs to be updated.\n   *\n   * @param state current state of brewing session\n   * @param timerMinutesLeft minutes left on current timer\n   * @param timerSecondsLeft seconds left on current timer\n   * @param addAdditionName name of the addition to add\n   * @param addAdditionTime time at which the addition needs to be added\n   */\n  constructor(state: SessionState, timerMinutesLeft: number= 0, timerSecondsLeft: number = 0, addAdditionName: string = '',\n              addAdditionTime: number = 0) {\n    this.state = state;\n    this.timerMinutesLeft = timerMinutesLeft;\n    this.timerSecondsLeft = timerSecondsLeft;\n    this.addAdditionName = addAdditionName;\n    this.addAdditionTime = addAdditionTime;\n  }\n}\n\n/**\n * Class containing the details of the C notification.\n */\nexport class CStatus {\n  boilTemperature: number;\n\n  /**\n   * Creates a new instance of the C notification.\n   *\n   * Notification: ```C{boilTemperature}```\n   *\n   * @param boilTemperature\n   */\n  constructor(boilTemperature: number) {\n    this.boilTemperature = boilTemperature;\n  }\n}\n\n/**\n * Class containing the details of the F notification.\n */\nexport class FStatus {\n  firmwareVersion: string;\n\n  /**\n   * Creates a new instance of the F notification.\n   *\n   * Notification: ```F{firmwareVersion}```\n   *\n   * @param firmwareVersion\n   */\n  constructor(firmwareVersion: string) {\n    this.firmwareVersion = firmwareVersion;\n  }\n}\n\n/**\n * Class containing the details of the I notification.\n */\nexport class IStatus {\n  interactionCode: string;\n\n  /**\n   * Creates a new instance of the I notification.\n   *\n   * Notification: ```I{interactionCode}```\n   *\n   * @param interactionCode\n   */\n  constructor(interactionCode: string) {\n    this.interactionCode = interactionCode;\n  }\n}\n\n/**\n * Class containing the details of the T notification.\n */\nexport class TStatus {\n  timerActive: boolean;\n  timerMinutesLeft: number;\n  timerTotalStartTime: number;\n  timerSecondsLeft: number;\n\n  /**\n   * Creates a new instance of the T notification.\n   *\n   * Notification: ```T{timerActive},{timerMinutesLeft},{timerTotalStartTime},{timerSecondsLeft}```\n   *\n   * @param timerActive\n   * @param timerMinutesLeft\n   * @param timerTotalStartTime\n   * @param timerSecondsLeft\n   */\n  constructor(timerActive: boolean, timerMinutesLeft: number, timerTotalStartTime: number, timerSecondsLeft: number) {\n    this.timerActive = timerActive;\n    this.timerMinutesLeft = timerMinutesLeft;\n    this.timerTotalStartTime = timerTotalStartTime;\n    this.timerSecondsLeft = timerSecondsLeft;\n  }\n}\n\n/**\n * Describes the voltage of the controller\n */\nexport enum Voltage {\n  V230 = 0,\n  V110\n}\n\n/**\n * Describes the used units.\n */\nexport enum Units {\n  Fahrenheit = 0,\n  Celsius\n}\n\n/**\n * Class containing the details of the V notification.\n */\nexport class VStatus {\n  voltage: Voltage;\n  units: Units;\n\n  /**\n   * Creates a new instance of the V notification.\n   *\n   * Notification: ```V{voltage},{units}```\n   *\n   * @param voltage\n   * @param units\n   */\n  constructor(voltage: Voltage, units: Units) {\n    this.voltage = voltage;\n    this.units = units;\n  }\n}\n\n/**\n * Class containing the details of the W notification.\n */\nexport class WStatus {\n  heatPowerOutputPercentage: number;\n  isTimerPaused: boolean;\n  stepMashMode: boolean;\n  isRecipeInterrupted: boolean;\n  manualPowerMode: boolean;\n  spargeWaterAlertDisplayed: boolean;\n\n  /**\n   * Creates a new instance of the W notification.\n   *\n   * Notification: ```W{heatPowerOutputPercentage},{isTimerPaused},{stepMashMode},{isRecipeInterrupted},{manualPowerMode},{spargeWaterAlertDisplayed}```\n   *\n   * @param heatPowerOutputPercentage heating output\n   * @param isTimerPaused if true, the timer is paused\n   * @param stepMashMode if true, step mash is enabled??\n   * @param isRecipeInterrupted if true, the previous running recipe was interrupted, eg due to power loss\n   * @param manualPowerMode if true, manual power mode is enabled\n   * @param spargeWaterAlertDisplayed if true, the sparge water heating alert is shown\n   */\n  constructor(heatPowerOutputPercentage: number, isTimerPaused: boolean, stepMashMode: boolean,\n              isRecipeInterrupted: boolean, manualPowerMode: boolean, spargeWaterAlertDisplayed: boolean) {\n    this.heatPowerOutputPercentage = heatPowerOutputPercentage;\n    this.isTimerPaused = isTimerPaused;\n    this.stepMashMode = stepMashMode;\n    this.isRecipeInterrupted = isRecipeInterrupted;\n    this.manualPowerMode = manualPowerMode;\n    this.spargeWaterAlertDisplayed = spargeWaterAlertDisplayed;\n  }\n}\n\n/**\n * Class containing the details of the X notification.\n */\nexport class XStatus {\n  targetTemperature: number;\n  currentTemperature: number;\n\n  /**\n   * Creates a new instance of the X notification.\n   *\n   * Notification: ```X{targetTemperature},{currentTemperature}```\n   *\n   * @param targetTemperature target temperature currently set\n   * @param currentTemperature current temperature\n   */\n  constructor(targetTemperature: number, currentTemperature: number) {\n    this.targetTemperature = targetTemperature;\n    this.currentTemperature = currentTemperature;\n  }\n}\n\n/**\n * List of interaction codes send in the Y notification by the controller.\n *\n * @readonly\n * @enum {number}\n */\nexport enum InteractionCode {\n  /**\n   * Interaction code send by the controller if a new recipe is receiver.\n   * Only send if there is no delayed heating timer used.\n   * Waits for user acknowledgement.\n   */\n  StartBrew = 1,\n  /**\n   * Warns the user to add the grains if the mash-in temperature is reached.\n   * Waits for user acknowledgement.\n   */\n  AddGrain,\n  /**\n   * Warns the user that sparging can being.\n   * Is skipped automatically, so that the controller goes to the FinishSparge interaction.\n   */\n  StartSparge,\n  /**\n   * If enabled, shows the sparge counter, if not, shows an alert to continue to the boil stage.\n   * Waits for user acknowledgement.\n   */\n  FinishSparge,\n  /**\n   * Shows an alert to start the boil timer. During this stage, the boil additions will also be shown.\n   * Waits for user acknowledgement.\n   */\n  StartBoil,\n  /**\n   * If a hop stand is added to the recipe, an alert is shown to start the hop stand timer.\n   * Waits for user acknowledgement.\n   */\n  StartHopStand,\n  /**\n   * If the boil timer ends, an alert to finish the session is shown.\n   * Waits for user acknowledgement.\n   */\n  FinishBrew\n}\n\n/**\n * Class containing the details of the Y notification.\n */\nexport class YStatus {\n  heatPower: boolean;\n  pumpStatus: boolean;\n  autoModeStatus: boolean;\n  stageRampStatus: boolean;\n  interactionModeStatus: boolean;\n  interactionCode: InteractionCode;\n  stageNumber: number;\n  delayedHeatMode: boolean;\n\n  /**\n   * Creates a new instance of the Y notification.\n   *\n   * Notification: ```Y{heatPower},{pumpStatus},{autoModeStatus},{stageRampStatus},{interactionModeStatus},{interactionCode},{stageNumber},{delayedHeatMode}```\n   *\n   * @param heatPower heating power output.\n   * @param pumpStatus pump status.\n   * @param autoModeStatus if true the controller is running an automated session.\n   * @param stageRampStatus if true, the controller is ramping to the new/next target temperature.\n   * @param interactionModeStatus if true, the controller is waiting for user interaction.\n   * @param interactionCode code indication the controller step.\n   * @param stageNumber stage number the controller currently is at.\n   * @param delayedHeatMode if true, the controller is running the delayed heating timer.\n   */\n  constructor(heatPower: boolean, pumpStatus: boolean, autoModeStatus: boolean, stageRampStatus: boolean,\n              interactionModeStatus: boolean, interactionCode: InteractionCode, stageNumber: number, delayedHeatMode: boolean) {\n    this.heatPower = heatPower;\n    this.pumpStatus = pumpStatus;\n    this.autoModeStatus = autoModeStatus;\n    this.stageRampStatus = stageRampStatus;\n    this.interactionModeStatus = interactionModeStatus;\n    this.interactionCode = interactionCode;\n    this.stageNumber = stageNumber;\n    this.delayedHeatMode = delayedHeatMode;\n  }\n}\n\n    \n\n\n\n\n                   \n\n\n\n\n                   \n    \n         result-matching \"\"\n        \n    \n    \n        No results matching \"\"\n    \n\n"},"classes/FStatus.html":{"url":"classes/FStatus.html","title":"class - FStatus","body":"\n                   \n\n\n\n\n\n\n\n\n\n\n\n\n  Classes\n  FStatus\n\n\n\n        \n            Info\n        \n        \n            Source\n        \n\n\n\n    \n        \n            File\n        \n        \n            projects/angular-grainfather-control/src/lib/grainfather.notifications.ts\n        \n\n            \n                Description\n            \n            \n                Class containing the details of the F notification.\n\n            \n\n\n\n\n            \n    Index\n    \n        \n                \n                    \n                        Properties\n                    \n                \n                \n                    \n                        \n                            \n                                firmwareVersion\n                            \n                        \n                    \n                \n\n\n\n\n\n\n        \n    \n\n\n            \n    Constructor\n        \n            \n                \n                    \nconstructor(firmwareVersion: string)\n                    \n                \n                        \n                            \n                                Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:306\n                            \n                        \n\n                \n                    \n                            Creates a new instance of the F notification.\nNotification: F{firmwareVersion}\n\n                            \n                                    Parameters :\n                                    \n                                        \n                                            \n                                                Name\n                                                    Type\n                                                Optional\n                                            \n                                        \n                                        \n                                                \n                                                        firmwareVersion\n                                                  \n                                                        \n                                                                        string\n                                                        \n                                                  \n                                                    \n                                                            No\n                                                    \n                                                    \n                                                \n                                        \n                                    \n                            \n                    \n                \n            \n        \n\n\n            \n    \n        \n            Properties\n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            firmwareVersion\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         string\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:306\n                            \n                        \n\n\n            \n        \n\n\n\n\n\n\n\n\n    \n\n\n    \n        import {EventEmitter, Output} from '@angular/core';\nimport {GrainFatherCommands, RecipeDetails} from './grainfather.commands';\n\n/**\n * Handler for notifications. Besides processing all incoming notifications, also the state of the controller is kept and updated.\n * Notifications are taken from https://github.com/kingpulsar/Grainfather-Bluetooth-Protocol\n *\n * Publishes events for the controller status as well as for each notification.\n */\nexport class GrainFatherNotifications {\n\n  @Output()\n  sessionStatus: EventEmitter = new EventEmitter();\n  @Output()\n  controllerStatus: EventEmitter = new EventEmitter();\n  @Output()\n  commandEmitter: EventEmitter = new EventEmitter();\n\n  recipeDetails: RecipeDetails;\n  timer: TStatus;\n  boilTemperature: number;\n  currentTemperature: number;\n\n  process(notificationLine: string): any {\n    // console.log(notificationLine);\n    const components = notificationLine.substring(1).split(',').slice(0, -1);\n    const type = notificationLine[0];\n\n    let notification: any = null;\n\n    switch (type) {\n      case 'A':\n        // Discard notice on display\n        this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n        break;\n\n      case 'C':\n        notification = new CStatus(parseFloat(components[0]));\n        this.boilTemperature = notification.boilTemperature;\n        break;\n\n      case 'F':\n        notification = new FStatus(components[0]);\n        break;\n\n      case 'I':\n        notification = new IStatus(components[0]);\n        break;\n\n      case 'T':\n        notification = new TStatus(\n          components[0] === '1',\n          parseInt(components[1], 10),\n          parseInt(components[2], 10),\n          parseInt(components[3], 10)\n        );\n        this.timer = notification;\n        break;\n\n      case 'V':\n        notification = new VStatus(\n          parseInt(components[0], 10),\n          parseInt(components[1], 10)\n        );\n        break;\n\n      case 'W':\n        notification = new WStatus(\n          parseInt(components[0], 10),\n          components[1] === '1',\n          components[2] === '1',\n          components[3] === '1',\n          components[4] === '1',\n          components[5] === '1'\n        );\n        break;\n\n      case 'X':\n        notification = new XStatus(\n          parseFloat(components[0]),\n          parseFloat(components[1])\n        );\n        this.currentTemperature = notification.currentTemperature;\n        break;\n\n      case 'Y':\n        notification = new YStatus(\n          components[0] === '1',\n          components[1] === '1',\n          components[2] === '1',\n          components[3] === '1',\n          components[4] === '1',\n          parseInt(components[5], 10),\n          parseInt(components[6], 10),\n          components[7] === '1'\n        );\n\n        this.parseStatus(notification);\n        break;\n    }\n\n    this.controllerStatus.emit(notification);\n  }\n\n  setRecipeDetails(recipeDetails: RecipeDetails) {\n    this.recipeDetails = recipeDetails;\n  }\n\n  /**\n   * Parses the yStatus message to update the session state.\n   *\n   * Requires recipe details to be able to determine the state.\n   *\n   * Uses the state to decrease the required interaction with the controller as much as possible.\n   * Currently the following interactions are needed:\n   *  - Start session after sending recipe without delay\n   *  - Add grain alarm\n   *  - Sparge alarm\n   *  - Start boil timer\n   *  - Start hopstand timer\n   *  - Finish session\n   *\n   *  It also sends notifications with:\n   *   - Current step, see SessionState\n   *   - Time left for step, for delay, mash and boil\n   *   - If a boil addition needs to be added, this will only be one event for each addition\n   *\n   * @param status current YStatus.\n   */\n  parseStatus(status: YStatus) {\n    const sessionStatus = new BrewSessionState(SessionState.Idle);\n\n    if (status && status.autoModeStatus) {\n      if (this.recipeDetails) {\n        const stage = status.stageNumber;\n        const interactionCode = status.interactionCode;\n        const mashSteps = this.recipeDetails.mashSteps.length;\n\n        if (stage === 0) {\n          if (interactionCode === InteractionCode.StartBrew) {\n            sessionStatus.state = SessionState.RecipeReceived;\n          }\n          if (status.delayedHeatMode) {\n            sessionStatus.state = SessionState.DelayedHeating;\n            sessionStatus.timerMinutesLeft = this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n          }\n        } else if (stage > 0 && stage  0 ?\n              this.timer.timerMinutesLeft - 1  : this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n          }\n        } else if (stage === mashSteps + 1) {\n          if (interactionCode === InteractionCode.StartSparge) {\n            sessionStatus.state = SessionState.StartSparge;\n            // Skip this stage and go to next\n            this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n          } else if (interactionCode === InteractionCode.FinishSparge) {\n            sessionStatus.state = SessionState.FinishSparge;\n          }\n        } else if (stage === mashSteps + 2) {\n          if (interactionCode === InteractionCode.StartBoil) {\n            sessionStatus.state = SessionState.StartBoil;\n          } else if (status.stageRampStatus) {\n            sessionStatus.state = SessionState.BoilRamp;\n            // Use actual temp and boil temp to determine if we are there\n            // then emit press command to get to StartBoil\n            if (this.currentTemperature >= this.boilTemperature) {\n              this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n            }\n          } else {\n            sessionStatus.state = SessionState.Boil;\n            sessionStatus.timerMinutesLeft = this.timer.timerMinutesLeft > 0 ?\n              this.timer.timerMinutesLeft - 1  : this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n            // If boil is done, we need to move the controller to the next stage\n            if (this.timer.timerMinutesLeft === 0) {\n              this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n            }\n\n            this.recipeDetails.boilSteps.forEach(step => {\n              if (this.timer.timerMinutesLeft === step.time && !step.sent) {\n                sessionStatus.addAdditionName = step.name;\n                sessionStatus.addAdditionTime = step.time;\n                step.sent = true;\n              }\n            });\n          }\n        } else if (stage === mashSteps + 3 || stage === mashSteps + 4) {\n          if (interactionCode === InteractionCode.FinishBrew) {\n            sessionStatus.state = SessionState.Finished;\n          } else if (interactionCode === InteractionCode.StartHopStand) {\n            sessionStatus.state = SessionState.HopStandAdd;\n          } else {\n            sessionStatus.state = SessionState.HopStand;\n            sessionStatus.timerMinutesLeft = this.timer.timerMinutesLeft > 0 ?\n              this.timer.timerMinutesLeft - 1  : this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n          }\n        }\n      } else {\n        sessionStatus.state = SessionState.Unknown;\n      }\n    }\n\n    this.sessionStatus.emit(sessionStatus);\n  }\n}\n\n/**\n * State of a brewing session.\n *\n * If no session is in progress 'Idle' is used. If no recipe details are set, 'Unknown' is used.\n */\nexport enum SessionState {\n  Idle,\n  RecipeReceived,\n  DelayedHeating,\n  MashRamp,\n  Mash,\n  AddGrain,\n  StartSparge,\n  FinishSparge,\n  BoilRamp,\n  StartBoil,\n  Boil,\n  HopStandAdd,\n  HopStand,\n  Finished,\n  Unknown\n}\n\n/**\n * Describes a brewing session.\n */\nexport class BrewSessionState {\n  state: SessionState;\n  timerMinutesLeft: number;\n  timerSecondsLeft: number;\n  addAdditionName: string;\n  addAdditionTime: number;\n\n  /**\n   * Creates a new brew session state.\n   *\n   * Since the controller handles minutes as rounded up, 1 minute is substracted to have the correct number of minutes.\n   * For example, a timer with 1 minute and 30 seconds actually has 30 seconds left. So to view it as 0:30, it needs to be updated.\n   *\n   * @param state current state of brewing session\n   * @param timerMinutesLeft minutes left on current timer\n   * @param timerSecondsLeft seconds left on current timer\n   * @param addAdditionName name of the addition to add\n   * @param addAdditionTime time at which the addition needs to be added\n   */\n  constructor(state: SessionState, timerMinutesLeft: number= 0, timerSecondsLeft: number = 0, addAdditionName: string = '',\n              addAdditionTime: number = 0) {\n    this.state = state;\n    this.timerMinutesLeft = timerMinutesLeft;\n    this.timerSecondsLeft = timerSecondsLeft;\n    this.addAdditionName = addAdditionName;\n    this.addAdditionTime = addAdditionTime;\n  }\n}\n\n/**\n * Class containing the details of the C notification.\n */\nexport class CStatus {\n  boilTemperature: number;\n\n  /**\n   * Creates a new instance of the C notification.\n   *\n   * Notification: ```C{boilTemperature}```\n   *\n   * @param boilTemperature\n   */\n  constructor(boilTemperature: number) {\n    this.boilTemperature = boilTemperature;\n  }\n}\n\n/**\n * Class containing the details of the F notification.\n */\nexport class FStatus {\n  firmwareVersion: string;\n\n  /**\n   * Creates a new instance of the F notification.\n   *\n   * Notification: ```F{firmwareVersion}```\n   *\n   * @param firmwareVersion\n   */\n  constructor(firmwareVersion: string) {\n    this.firmwareVersion = firmwareVersion;\n  }\n}\n\n/**\n * Class containing the details of the I notification.\n */\nexport class IStatus {\n  interactionCode: string;\n\n  /**\n   * Creates a new instance of the I notification.\n   *\n   * Notification: ```I{interactionCode}```\n   *\n   * @param interactionCode\n   */\n  constructor(interactionCode: string) {\n    this.interactionCode = interactionCode;\n  }\n}\n\n/**\n * Class containing the details of the T notification.\n */\nexport class TStatus {\n  timerActive: boolean;\n  timerMinutesLeft: number;\n  timerTotalStartTime: number;\n  timerSecondsLeft: number;\n\n  /**\n   * Creates a new instance of the T notification.\n   *\n   * Notification: ```T{timerActive},{timerMinutesLeft},{timerTotalStartTime},{timerSecondsLeft}```\n   *\n   * @param timerActive\n   * @param timerMinutesLeft\n   * @param timerTotalStartTime\n   * @param timerSecondsLeft\n   */\n  constructor(timerActive: boolean, timerMinutesLeft: number, timerTotalStartTime: number, timerSecondsLeft: number) {\n    this.timerActive = timerActive;\n    this.timerMinutesLeft = timerMinutesLeft;\n    this.timerTotalStartTime = timerTotalStartTime;\n    this.timerSecondsLeft = timerSecondsLeft;\n  }\n}\n\n/**\n * Describes the voltage of the controller\n */\nexport enum Voltage {\n  V230 = 0,\n  V110\n}\n\n/**\n * Describes the used units.\n */\nexport enum Units {\n  Fahrenheit = 0,\n  Celsius\n}\n\n/**\n * Class containing the details of the V notification.\n */\nexport class VStatus {\n  voltage: Voltage;\n  units: Units;\n\n  /**\n   * Creates a new instance of the V notification.\n   *\n   * Notification: ```V{voltage},{units}```\n   *\n   * @param voltage\n   * @param units\n   */\n  constructor(voltage: Voltage, units: Units) {\n    this.voltage = voltage;\n    this.units = units;\n  }\n}\n\n/**\n * Class containing the details of the W notification.\n */\nexport class WStatus {\n  heatPowerOutputPercentage: number;\n  isTimerPaused: boolean;\n  stepMashMode: boolean;\n  isRecipeInterrupted: boolean;\n  manualPowerMode: boolean;\n  spargeWaterAlertDisplayed: boolean;\n\n  /**\n   * Creates a new instance of the W notification.\n   *\n   * Notification: ```W{heatPowerOutputPercentage},{isTimerPaused},{stepMashMode},{isRecipeInterrupted},{manualPowerMode},{spargeWaterAlertDisplayed}```\n   *\n   * @param heatPowerOutputPercentage heating output\n   * @param isTimerPaused if true, the timer is paused\n   * @param stepMashMode if true, step mash is enabled??\n   * @param isRecipeInterrupted if true, the previous running recipe was interrupted, eg due to power loss\n   * @param manualPowerMode if true, manual power mode is enabled\n   * @param spargeWaterAlertDisplayed if true, the sparge water heating alert is shown\n   */\n  constructor(heatPowerOutputPercentage: number, isTimerPaused: boolean, stepMashMode: boolean,\n              isRecipeInterrupted: boolean, manualPowerMode: boolean, spargeWaterAlertDisplayed: boolean) {\n    this.heatPowerOutputPercentage = heatPowerOutputPercentage;\n    this.isTimerPaused = isTimerPaused;\n    this.stepMashMode = stepMashMode;\n    this.isRecipeInterrupted = isRecipeInterrupted;\n    this.manualPowerMode = manualPowerMode;\n    this.spargeWaterAlertDisplayed = spargeWaterAlertDisplayed;\n  }\n}\n\n/**\n * Class containing the details of the X notification.\n */\nexport class XStatus {\n  targetTemperature: number;\n  currentTemperature: number;\n\n  /**\n   * Creates a new instance of the X notification.\n   *\n   * Notification: ```X{targetTemperature},{currentTemperature}```\n   *\n   * @param targetTemperature target temperature currently set\n   * @param currentTemperature current temperature\n   */\n  constructor(targetTemperature: number, currentTemperature: number) {\n    this.targetTemperature = targetTemperature;\n    this.currentTemperature = currentTemperature;\n  }\n}\n\n/**\n * List of interaction codes send in the Y notification by the controller.\n *\n * @readonly\n * @enum {number}\n */\nexport enum InteractionCode {\n  /**\n   * Interaction code send by the controller if a new recipe is receiver.\n   * Only send if there is no delayed heating timer used.\n   * Waits for user acknowledgement.\n   */\n  StartBrew = 1,\n  /**\n   * Warns the user to add the grains if the mash-in temperature is reached.\n   * Waits for user acknowledgement.\n   */\n  AddGrain,\n  /**\n   * Warns the user that sparging can being.\n   * Is skipped automatically, so that the controller goes to the FinishSparge interaction.\n   */\n  StartSparge,\n  /**\n   * If enabled, shows the sparge counter, if not, shows an alert to continue to the boil stage.\n   * Waits for user acknowledgement.\n   */\n  FinishSparge,\n  /**\n   * Shows an alert to start the boil timer. During this stage, the boil additions will also be shown.\n   * Waits for user acknowledgement.\n   */\n  StartBoil,\n  /**\n   * If a hop stand is added to the recipe, an alert is shown to start the hop stand timer.\n   * Waits for user acknowledgement.\n   */\n  StartHopStand,\n  /**\n   * If the boil timer ends, an alert to finish the session is shown.\n   * Waits for user acknowledgement.\n   */\n  FinishBrew\n}\n\n/**\n * Class containing the details of the Y notification.\n */\nexport class YStatus {\n  heatPower: boolean;\n  pumpStatus: boolean;\n  autoModeStatus: boolean;\n  stageRampStatus: boolean;\n  interactionModeStatus: boolean;\n  interactionCode: InteractionCode;\n  stageNumber: number;\n  delayedHeatMode: boolean;\n\n  /**\n   * Creates a new instance of the Y notification.\n   *\n   * Notification: ```Y{heatPower},{pumpStatus},{autoModeStatus},{stageRampStatus},{interactionModeStatus},{interactionCode},{stageNumber},{delayedHeatMode}```\n   *\n   * @param heatPower heating power output.\n   * @param pumpStatus pump status.\n   * @param autoModeStatus if true the controller is running an automated session.\n   * @param stageRampStatus if true, the controller is ramping to the new/next target temperature.\n   * @param interactionModeStatus if true, the controller is waiting for user interaction.\n   * @param interactionCode code indication the controller step.\n   * @param stageNumber stage number the controller currently is at.\n   * @param delayedHeatMode if true, the controller is running the delayed heating timer.\n   */\n  constructor(heatPower: boolean, pumpStatus: boolean, autoModeStatus: boolean, stageRampStatus: boolean,\n              interactionModeStatus: boolean, interactionCode: InteractionCode, stageNumber: number, delayedHeatMode: boolean) {\n    this.heatPower = heatPower;\n    this.pumpStatus = pumpStatus;\n    this.autoModeStatus = autoModeStatus;\n    this.stageRampStatus = stageRampStatus;\n    this.interactionModeStatus = interactionModeStatus;\n    this.interactionCode = interactionCode;\n    this.stageNumber = stageNumber;\n    this.delayedHeatMode = delayedHeatMode;\n  }\n}\n\n    \n\n\n\n\n                   \n\n\n\n\n                   \n    \n         result-matching \"\"\n        \n    \n    \n        No results matching \"\"\n    \n\n"},"classes/GrainFatherNotifications.html":{"url":"classes/GrainFatherNotifications.html","title":"class - GrainFatherNotifications","body":"\n                   \n\n\n\n\n\n\n\n\n\n\n\n\n  Classes\n  GrainFatherNotifications\n\n\n\n        \n            Info\n        \n        \n            Source\n        \n\n\n\n    \n        \n            File\n        \n        \n            projects/angular-grainfather-control/src/lib/grainfather.notifications.ts\n        \n\n            \n                Description\n            \n            \n                Handler for notifications. Besides processing all incoming notifications, also the state of the controller is kept and updated.\nNotifications are taken from https://github.com/kingpulsar/Grainfather-Bluetooth-Protocol\nPublishes events for the controller status as well as for each notification.\n\n            \n\n\n\n\n            \n    Index\n    \n        \n                \n                    \n                        Properties\n                    \n                \n                \n                    \n                        \n                            \n                                boilTemperature\n                            \n                            \n                                currentTemperature\n                            \n                            \n                                recipeDetails\n                            \n                            \n                                timer\n                            \n                        \n                    \n                \n\n                \n                    \n                        Methods\n                    \n                \n                \n                    \n                        \n                            \n                                parseStatus\n                            \n                            \n                                process\n                            \n                            \n                                setRecipeDetails\n                            \n                        \n                    \n                \n\n\n                \n                    \n                        Outputs\n                    \n                \n                \n                    \n                        \n                            \n                                commandEmitter\n                            \n                            \n                                controllerStatus\n                            \n                            \n                                sessionStatus\n                            \n                        \n                    \n                \n\n\n\n        \n    \n\n\n\n            \n    \n        \n            Properties\n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            boilTemperature\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         number\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:34\n                            \n                        \n\n\n            \n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            currentTemperature\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         number\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:35\n                            \n                        \n\n\n            \n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            recipeDetails\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         RecipeDetails\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:32\n                            \n                        \n\n\n            \n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            timer\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         TStatus\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:33\n                            \n                        \n\n\n            \n        \n\n\n            \n    \n    \n        Methods\n    \n    \n        \n            \n                \n                    \n                    \n                        \n                            parseStatus\n                        \n                        \n                    \n                \n            \n            \n                \nparseStatus(status: YStatus)\n                \n            \n\n\n            \n                \n                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:143\n                \n            \n\n\n            \n                \n                    Parses the yStatus message to update the session state.\nRequires recipe details to be able to determine the state.\nUses the state to decrease the required interaction with the controller as much as possible.\nCurrently the following interactions are needed:\n\nStart session after sending recipe without delay\n\nAdd grain alarm\n\nSparge alarm\n\nStart boil timer\n\nStart hopstand timer\n\nFinish session\nIt also sends notifications with:\n\nCurrent step, see SessionState\nTime left for step, for delay, mash and boil\nIf a boil addition needs to be added, this will only be one event for each addition\n\n\n\n\n\n                    \n                        Parameters :\n                        \n                            \n                                \n                                    Name\n                                    Type\n                                    Optional\n                                    Description\n                                \n                            \n                            \n                                \n                                    status\n                                    \n                                                YStatus\n                                    \n\n                                    \n                                        No\n                                    \n\n\n                                    \n                                        current YStatus.\n\n                                    \n                                \n                            \n                        \n                    \n                    \n                    \n                    \n                        Returns :         void\n\n                    \n                    \n                        \n                    \n                \n            \n        \n    \n    \n        \n            \n                \n                    \n                    \n                        \n                            process\n                        \n                        \n                    \n                \n            \n            \n                \nprocess(notificationLine: string)\n                \n            \n\n\n            \n                \n                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:37\n                \n            \n\n\n            \n                \n\n                    \n                        Parameters :\n                        \n                            \n                                \n                                    Name\n                                    Type\n                                    Optional\n                                \n                            \n                            \n                                \n                                    notificationLine\n                                    \n                                                string\n                                    \n\n                                    \n                                        No\n                                    \n\n\n                                \n                            \n                        \n                    \n                    \n                    \n                    \n                        Returns :         any\n\n                    \n                    \n                        \n                    \n                \n            \n        \n    \n    \n        \n            \n                \n                    \n                    \n                        \n                            setRecipeDetails\n                        \n                        \n                    \n                \n            \n            \n                \nsetRecipeDetails(recipeDetails: RecipeDetails)\n                \n            \n\n\n            \n                \n                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:118\n                \n            \n\n\n            \n                \n\n                    \n                        Parameters :\n                        \n                            \n                                \n                                    Name\n                                    Type\n                                    Optional\n                                \n                            \n                            \n                                \n                                    recipeDetails\n                                    \n                                                RecipeDetails\n                                    \n\n                                    \n                                        No\n                                    \n\n\n                                \n                            \n                        \n                    \n                    \n                    \n                    \n                        Returns :         void\n\n                    \n                    \n                        \n                    \n                \n            \n        \n    \n\n\n\n            \n    Outputs\n        \n            \n                \n                    \n                        \n                        commandEmitter\n                    \n                \n                \n                    \n                        Type :     EventEmitter\n\n                    \n                \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:30\n                            \n                        \n            \n        \n        \n            \n                \n                    \n                        \n                        controllerStatus\n                    \n                \n                \n                    \n                        Type :     EventEmitter\n\n                    \n                \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:28\n                            \n                        \n            \n        \n        \n            \n                \n                    \n                        \n                        sessionStatus\n                    \n                \n                \n                    \n                        Type :         EventEmitter\n\n                    \n                \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:26\n                            \n                        \n            \n        \n\n\n\n    \n\n\n    \n        import {EventEmitter, Output} from '@angular/core';\nimport {GrainFatherCommands, RecipeDetails} from './grainfather.commands';\n\n/**\n * Handler for notifications. Besides processing all incoming notifications, also the state of the controller is kept and updated.\n * Notifications are taken from https://github.com/kingpulsar/Grainfather-Bluetooth-Protocol\n *\n * Publishes events for the controller status as well as for each notification.\n */\nexport class GrainFatherNotifications {\n\n  @Output()\n  sessionStatus: EventEmitter = new EventEmitter();\n  @Output()\n  controllerStatus: EventEmitter = new EventEmitter();\n  @Output()\n  commandEmitter: EventEmitter = new EventEmitter();\n\n  recipeDetails: RecipeDetails;\n  timer: TStatus;\n  boilTemperature: number;\n  currentTemperature: number;\n\n  process(notificationLine: string): any {\n    // console.log(notificationLine);\n    const components = notificationLine.substring(1).split(',').slice(0, -1);\n    const type = notificationLine[0];\n\n    let notification: any = null;\n\n    switch (type) {\n      case 'A':\n        // Discard notice on display\n        this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n        break;\n\n      case 'C':\n        notification = new CStatus(parseFloat(components[0]));\n        this.boilTemperature = notification.boilTemperature;\n        break;\n\n      case 'F':\n        notification = new FStatus(components[0]);\n        break;\n\n      case 'I':\n        notification = new IStatus(components[0]);\n        break;\n\n      case 'T':\n        notification = new TStatus(\n          components[0] === '1',\n          parseInt(components[1], 10),\n          parseInt(components[2], 10),\n          parseInt(components[3], 10)\n        );\n        this.timer = notification;\n        break;\n\n      case 'V':\n        notification = new VStatus(\n          parseInt(components[0], 10),\n          parseInt(components[1], 10)\n        );\n        break;\n\n      case 'W':\n        notification = new WStatus(\n          parseInt(components[0], 10),\n          components[1] === '1',\n          components[2] === '1',\n          components[3] === '1',\n          components[4] === '1',\n          components[5] === '1'\n        );\n        break;\n\n      case 'X':\n        notification = new XStatus(\n          parseFloat(components[0]),\n          parseFloat(components[1])\n        );\n        this.currentTemperature = notification.currentTemperature;\n        break;\n\n      case 'Y':\n        notification = new YStatus(\n          components[0] === '1',\n          components[1] === '1',\n          components[2] === '1',\n          components[3] === '1',\n          components[4] === '1',\n          parseInt(components[5], 10),\n          parseInt(components[6], 10),\n          components[7] === '1'\n        );\n\n        this.parseStatus(notification);\n        break;\n    }\n\n    this.controllerStatus.emit(notification);\n  }\n\n  setRecipeDetails(recipeDetails: RecipeDetails) {\n    this.recipeDetails = recipeDetails;\n  }\n\n  /**\n   * Parses the yStatus message to update the session state.\n   *\n   * Requires recipe details to be able to determine the state.\n   *\n   * Uses the state to decrease the required interaction with the controller as much as possible.\n   * Currently the following interactions are needed:\n   *  - Start session after sending recipe without delay\n   *  - Add grain alarm\n   *  - Sparge alarm\n   *  - Start boil timer\n   *  - Start hopstand timer\n   *  - Finish session\n   *\n   *  It also sends notifications with:\n   *   - Current step, see SessionState\n   *   - Time left for step, for delay, mash and boil\n   *   - If a boil addition needs to be added, this will only be one event for each addition\n   *\n   * @param status current YStatus.\n   */\n  parseStatus(status: YStatus) {\n    const sessionStatus = new BrewSessionState(SessionState.Idle);\n\n    if (status && status.autoModeStatus) {\n      if (this.recipeDetails) {\n        const stage = status.stageNumber;\n        const interactionCode = status.interactionCode;\n        const mashSteps = this.recipeDetails.mashSteps.length;\n\n        if (stage === 0) {\n          if (interactionCode === InteractionCode.StartBrew) {\n            sessionStatus.state = SessionState.RecipeReceived;\n          }\n          if (status.delayedHeatMode) {\n            sessionStatus.state = SessionState.DelayedHeating;\n            sessionStatus.timerMinutesLeft = this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n          }\n        } else if (stage > 0 && stage  0 ?\n              this.timer.timerMinutesLeft - 1  : this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n          }\n        } else if (stage === mashSteps + 1) {\n          if (interactionCode === InteractionCode.StartSparge) {\n            sessionStatus.state = SessionState.StartSparge;\n            // Skip this stage and go to next\n            this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n          } else if (interactionCode === InteractionCode.FinishSparge) {\n            sessionStatus.state = SessionState.FinishSparge;\n          }\n        } else if (stage === mashSteps + 2) {\n          if (interactionCode === InteractionCode.StartBoil) {\n            sessionStatus.state = SessionState.StartBoil;\n          } else if (status.stageRampStatus) {\n            sessionStatus.state = SessionState.BoilRamp;\n            // Use actual temp and boil temp to determine if we are there\n            // then emit press command to get to StartBoil\n            if (this.currentTemperature >= this.boilTemperature) {\n              this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n            }\n          } else {\n            sessionStatus.state = SessionState.Boil;\n            sessionStatus.timerMinutesLeft = this.timer.timerMinutesLeft > 0 ?\n              this.timer.timerMinutesLeft - 1  : this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n            // If boil is done, we need to move the controller to the next stage\n            if (this.timer.timerMinutesLeft === 0) {\n              this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n            }\n\n            this.recipeDetails.boilSteps.forEach(step => {\n              if (this.timer.timerMinutesLeft === step.time && !step.sent) {\n                sessionStatus.addAdditionName = step.name;\n                sessionStatus.addAdditionTime = step.time;\n                step.sent = true;\n              }\n            });\n          }\n        } else if (stage === mashSteps + 3 || stage === mashSteps + 4) {\n          if (interactionCode === InteractionCode.FinishBrew) {\n            sessionStatus.state = SessionState.Finished;\n          } else if (interactionCode === InteractionCode.StartHopStand) {\n            sessionStatus.state = SessionState.HopStandAdd;\n          } else {\n            sessionStatus.state = SessionState.HopStand;\n            sessionStatus.timerMinutesLeft = this.timer.timerMinutesLeft > 0 ?\n              this.timer.timerMinutesLeft - 1  : this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n          }\n        }\n      } else {\n        sessionStatus.state = SessionState.Unknown;\n      }\n    }\n\n    this.sessionStatus.emit(sessionStatus);\n  }\n}\n\n/**\n * State of a brewing session.\n *\n * If no session is in progress 'Idle' is used. If no recipe details are set, 'Unknown' is used.\n */\nexport enum SessionState {\n  Idle,\n  RecipeReceived,\n  DelayedHeating,\n  MashRamp,\n  Mash,\n  AddGrain,\n  StartSparge,\n  FinishSparge,\n  BoilRamp,\n  StartBoil,\n  Boil,\n  HopStandAdd,\n  HopStand,\n  Finished,\n  Unknown\n}\n\n/**\n * Describes a brewing session.\n */\nexport class BrewSessionState {\n  state: SessionState;\n  timerMinutesLeft: number;\n  timerSecondsLeft: number;\n  addAdditionName: string;\n  addAdditionTime: number;\n\n  /**\n   * Creates a new brew session state.\n   *\n   * Since the controller handles minutes as rounded up, 1 minute is substracted to have the correct number of minutes.\n   * For example, a timer with 1 minute and 30 seconds actually has 30 seconds left. So to view it as 0:30, it needs to be updated.\n   *\n   * @param state current state of brewing session\n   * @param timerMinutesLeft minutes left on current timer\n   * @param timerSecondsLeft seconds left on current timer\n   * @param addAdditionName name of the addition to add\n   * @param addAdditionTime time at which the addition needs to be added\n   */\n  constructor(state: SessionState, timerMinutesLeft: number= 0, timerSecondsLeft: number = 0, addAdditionName: string = '',\n              addAdditionTime: number = 0) {\n    this.state = state;\n    this.timerMinutesLeft = timerMinutesLeft;\n    this.timerSecondsLeft = timerSecondsLeft;\n    this.addAdditionName = addAdditionName;\n    this.addAdditionTime = addAdditionTime;\n  }\n}\n\n/**\n * Class containing the details of the C notification.\n */\nexport class CStatus {\n  boilTemperature: number;\n\n  /**\n   * Creates a new instance of the C notification.\n   *\n   * Notification: ```C{boilTemperature}```\n   *\n   * @param boilTemperature\n   */\n  constructor(boilTemperature: number) {\n    this.boilTemperature = boilTemperature;\n  }\n}\n\n/**\n * Class containing the details of the F notification.\n */\nexport class FStatus {\n  firmwareVersion: string;\n\n  /**\n   * Creates a new instance of the F notification.\n   *\n   * Notification: ```F{firmwareVersion}```\n   *\n   * @param firmwareVersion\n   */\n  constructor(firmwareVersion: string) {\n    this.firmwareVersion = firmwareVersion;\n  }\n}\n\n/**\n * Class containing the details of the I notification.\n */\nexport class IStatus {\n  interactionCode: string;\n\n  /**\n   * Creates a new instance of the I notification.\n   *\n   * Notification: ```I{interactionCode}```\n   *\n   * @param interactionCode\n   */\n  constructor(interactionCode: string) {\n    this.interactionCode = interactionCode;\n  }\n}\n\n/**\n * Class containing the details of the T notification.\n */\nexport class TStatus {\n  timerActive: boolean;\n  timerMinutesLeft: number;\n  timerTotalStartTime: number;\n  timerSecondsLeft: number;\n\n  /**\n   * Creates a new instance of the T notification.\n   *\n   * Notification: ```T{timerActive},{timerMinutesLeft},{timerTotalStartTime},{timerSecondsLeft}```\n   *\n   * @param timerActive\n   * @param timerMinutesLeft\n   * @param timerTotalStartTime\n   * @param timerSecondsLeft\n   */\n  constructor(timerActive: boolean, timerMinutesLeft: number, timerTotalStartTime: number, timerSecondsLeft: number) {\n    this.timerActive = timerActive;\n    this.timerMinutesLeft = timerMinutesLeft;\n    this.timerTotalStartTime = timerTotalStartTime;\n    this.timerSecondsLeft = timerSecondsLeft;\n  }\n}\n\n/**\n * Describes the voltage of the controller\n */\nexport enum Voltage {\n  V230 = 0,\n  V110\n}\n\n/**\n * Describes the used units.\n */\nexport enum Units {\n  Fahrenheit = 0,\n  Celsius\n}\n\n/**\n * Class containing the details of the V notification.\n */\nexport class VStatus {\n  voltage: Voltage;\n  units: Units;\n\n  /**\n   * Creates a new instance of the V notification.\n   *\n   * Notification: ```V{voltage},{units}```\n   *\n   * @param voltage\n   * @param units\n   */\n  constructor(voltage: Voltage, units: Units) {\n    this.voltage = voltage;\n    this.units = units;\n  }\n}\n\n/**\n * Class containing the details of the W notification.\n */\nexport class WStatus {\n  heatPowerOutputPercentage: number;\n  isTimerPaused: boolean;\n  stepMashMode: boolean;\n  isRecipeInterrupted: boolean;\n  manualPowerMode: boolean;\n  spargeWaterAlertDisplayed: boolean;\n\n  /**\n   * Creates a new instance of the W notification.\n   *\n   * Notification: ```W{heatPowerOutputPercentage},{isTimerPaused},{stepMashMode},{isRecipeInterrupted},{manualPowerMode},{spargeWaterAlertDisplayed}```\n   *\n   * @param heatPowerOutputPercentage heating output\n   * @param isTimerPaused if true, the timer is paused\n   * @param stepMashMode if true, step mash is enabled??\n   * @param isRecipeInterrupted if true, the previous running recipe was interrupted, eg due to power loss\n   * @param manualPowerMode if true, manual power mode is enabled\n   * @param spargeWaterAlertDisplayed if true, the sparge water heating alert is shown\n   */\n  constructor(heatPowerOutputPercentage: number, isTimerPaused: boolean, stepMashMode: boolean,\n              isRecipeInterrupted: boolean, manualPowerMode: boolean, spargeWaterAlertDisplayed: boolean) {\n    this.heatPowerOutputPercentage = heatPowerOutputPercentage;\n    this.isTimerPaused = isTimerPaused;\n    this.stepMashMode = stepMashMode;\n    this.isRecipeInterrupted = isRecipeInterrupted;\n    this.manualPowerMode = manualPowerMode;\n    this.spargeWaterAlertDisplayed = spargeWaterAlertDisplayed;\n  }\n}\n\n/**\n * Class containing the details of the X notification.\n */\nexport class XStatus {\n  targetTemperature: number;\n  currentTemperature: number;\n\n  /**\n   * Creates a new instance of the X notification.\n   *\n   * Notification: ```X{targetTemperature},{currentTemperature}```\n   *\n   * @param targetTemperature target temperature currently set\n   * @param currentTemperature current temperature\n   */\n  constructor(targetTemperature: number, currentTemperature: number) {\n    this.targetTemperature = targetTemperature;\n    this.currentTemperature = currentTemperature;\n  }\n}\n\n/**\n * List of interaction codes send in the Y notification by the controller.\n *\n * @readonly\n * @enum {number}\n */\nexport enum InteractionCode {\n  /**\n   * Interaction code send by the controller if a new recipe is receiver.\n   * Only send if there is no delayed heating timer used.\n   * Waits for user acknowledgement.\n   */\n  StartBrew = 1,\n  /**\n   * Warns the user to add the grains if the mash-in temperature is reached.\n   * Waits for user acknowledgement.\n   */\n  AddGrain,\n  /**\n   * Warns the user that sparging can being.\n   * Is skipped automatically, so that the controller goes to the FinishSparge interaction.\n   */\n  StartSparge,\n  /**\n   * If enabled, shows the sparge counter, if not, shows an alert to continue to the boil stage.\n   * Waits for user acknowledgement.\n   */\n  FinishSparge,\n  /**\n   * Shows an alert to start the boil timer. During this stage, the boil additions will also be shown.\n   * Waits for user acknowledgement.\n   */\n  StartBoil,\n  /**\n   * If a hop stand is added to the recipe, an alert is shown to start the hop stand timer.\n   * Waits for user acknowledgement.\n   */\n  StartHopStand,\n  /**\n   * If the boil timer ends, an alert to finish the session is shown.\n   * Waits for user acknowledgement.\n   */\n  FinishBrew\n}\n\n/**\n * Class containing the details of the Y notification.\n */\nexport class YStatus {\n  heatPower: boolean;\n  pumpStatus: boolean;\n  autoModeStatus: boolean;\n  stageRampStatus: boolean;\n  interactionModeStatus: boolean;\n  interactionCode: InteractionCode;\n  stageNumber: number;\n  delayedHeatMode: boolean;\n\n  /**\n   * Creates a new instance of the Y notification.\n   *\n   * Notification: ```Y{heatPower},{pumpStatus},{autoModeStatus},{stageRampStatus},{interactionModeStatus},{interactionCode},{stageNumber},{delayedHeatMode}```\n   *\n   * @param heatPower heating power output.\n   * @param pumpStatus pump status.\n   * @param autoModeStatus if true the controller is running an automated session.\n   * @param stageRampStatus if true, the controller is ramping to the new/next target temperature.\n   * @param interactionModeStatus if true, the controller is waiting for user interaction.\n   * @param interactionCode code indication the controller step.\n   * @param stageNumber stage number the controller currently is at.\n   * @param delayedHeatMode if true, the controller is running the delayed heating timer.\n   */\n  constructor(heatPower: boolean, pumpStatus: boolean, autoModeStatus: boolean, stageRampStatus: boolean,\n              interactionModeStatus: boolean, interactionCode: InteractionCode, stageNumber: number, delayedHeatMode: boolean) {\n    this.heatPower = heatPower;\n    this.pumpStatus = pumpStatus;\n    this.autoModeStatus = autoModeStatus;\n    this.stageRampStatus = stageRampStatus;\n    this.interactionModeStatus = interactionModeStatus;\n    this.interactionCode = interactionCode;\n    this.stageNumber = stageNumber;\n    this.delayedHeatMode = delayedHeatMode;\n  }\n}\n\n    \n\n\n\n\n                   \n\n\n\n\n                   \n    \n         result-matching \"\"\n        \n    \n    \n        No results matching \"\"\n    \n\n"},"modules/GrainfatherControlModule.html":{"url":"modules/GrainfatherControlModule.html","title":"module - GrainfatherControlModule","body":"\n                   \n\n\n\n\n    Modules\n    GrainfatherControlModule\n\n\n\n\n    \n        Info\n    \n    \n        Source\n    \n\n\n\n    \n\n        \n            File\n        \n        \n            projects/angular-grainfather-control/src/lib/angular-grainfather-control.module.ts\n        \n\n\n        \n            Description\n        \n        \n            BLE controller. Takes care of setting up a Ble connection by asking the user for a device to connect to.\nMonitors the connection, tries to reconnect if the connection is lost.\nTodo: send events for connection status, to be able to show connection status and interrupt reconnect\n\n        \n\n\n        \n            \n            \n        \n\n        \n    \n    \n        Methods\n    \n    \n        \n            \n                \n                    \n                    \n                        \n                            connect\n                        \n                        \n                    \n                \n            \n            \n                \nconnect()\n                \n            \n\n\n            \n                \n                    Defined in projects/angular-grainfather-control/src/lib/angular-grainfather-control.module.ts:59\n                \n            \n\n\n            \n                \n                    Creates a new connection to a controller.\nShow a popup to select a controller. After selecting a connection will be created by the 'reconnect' method.\n\n\n                    \n                        Returns :     Promise\n\n                    \n                \n            \n        \n    \n    \n        \n            \n                \n                    \n                    \n                        \n                            disconnect\n                        \n                        \n                    \n                \n            \n            \n                \ndisconnect()\n                \n            \n\n\n            \n                \n                    Defined in projects/angular-grainfather-control/src/lib/angular-grainfather-control.module.ts:82\n                \n            \n\n\n            \n                \n                    Disconnects the connected device.\n\n\n                    \n                        Returns :         void\n\n                    \n                \n            \n        \n    \n    \n        \n            \n                \n                    \n                    \n                        \n                            getConnectionState\n                        \n                        \n                    \n                \n            \n            \n                \ngetConnectionState()\n                \n            \n\n\n            \n                \n                    Defined in projects/angular-grainfather-control/src/lib/angular-grainfather-control.module.ts:148\n                \n            \n\n\n            \n                \n                    Retrieves the connected status.\n\n\n                    \n                        Returns :         ConnectionState\n\n                    \n                \n            \n        \n    \n    \n        \n            \n                \n                    \n                    \n                        \n                            handleNotifications\n                        \n                        \n                    \n                \n            \n            \n                \nhandleNotifications(event: any)\n                \n            \n\n\n            \n                \n                    Defined in projects/angular-grainfather-control/src/lib/angular-grainfather-control.module.ts:171\n                \n            \n\n\n            \n                \n                    Callback to handle notifications.\nNotifications are forwarded to the 'GrainFatherNotifications' for processing.\n\n\n                    \n                        Parameters :\n                        \n                            \n                                \n                                    Name\n                                    Type\n                                    Optional\n                                    Description\n                                \n                            \n                            \n                                \n                                    event\n                                    \n                                                any\n                                    \n\n                                    \n                                        No\n                                    \n\n\n                                    \n                                        notification\n\n                                    \n                                \n                            \n                        \n                    \n                    \n                    \n                    \n                        Returns :         void\n\n                    \n                    \n                        \n                    \n                \n            \n        \n    \n    \n        \n            \n                \n                    \n                    \n                        \n                            onDisconnected\n                        \n                        \n                    \n                \n            \n            \n                \nonDisconnected(_: Event)\n                \n            \n\n\n            \n                \n                    Defined in projects/angular-grainfather-control/src/lib/angular-grainfather-control.module.ts:133\n                \n            \n\n\n            \n                \n                    Handler for the disconnect event.\nWill try to reconnect using the 'reconnect' method.\nCan be interrupted by calling the 'disconnect' method.\n\n\n                    \n                        Parameters :\n                        \n                            \n                                \n                                    Name\n                                    Type\n                                    Optional\n                                    Description\n                                \n                            \n                            \n                                \n                                    _\n                                    \n                                                Event\n                                    \n\n                                    \n                                        No\n                                    \n\n\n                                    \n                                        unused event\n\n                                    \n                                \n                            \n                        \n                    \n                    \n                    \n                    \n                        Returns :         void\n\n                    \n                    \n                        \n                    \n                \n            \n        \n    \n    \n        \n            \n                \n                    \n                    \n                        \n                            reconnect\n                        \n                        \n                    \n                \n            \n            \n                \nreconnect(device: BluetoothDevice)\n                \n            \n\n\n            \n                \n                    Defined in projects/angular-grainfather-control/src/lib/angular-grainfather-control.module.ts:100\n                \n            \n\n\n            \n                \n                    (Re)connects the given device.\nGets the primary service and needed characteristic to be able to send commands and receive notifications.\nAfter successful connection, the connected state is set, and the current boil temperature is received (for later usage).\n\n\n                    \n                        Parameters :\n                        \n                            \n                                \n                                    Name\n                                    Type\n                                    Optional\n                                    Description\n                                \n                            \n                            \n                                \n                                    device\n                                    \n                                            BluetoothDevice\n                                    \n\n                                    \n                                        No\n                                    \n\n\n                                    \n                                        the device to connect to, previously selected by the user\n\n                                    \n                                \n                            \n                        \n                    \n                    \n                    \n                    \n                        Returns :         any\n\n                    \n                    \n                        \n                    \n                \n            \n        \n    \n    \n        \n            \n                \n                    \n                    \n                        \n                            Async\n                            sendCommand\n                        \n                        \n                    \n                \n            \n            \n                \n                    \n                    sendCommand(gfBleCommand: GrainFatherCommands)\n                \n            \n\n\n            \n                \n                    Defined in projects/angular-grainfather-control/src/lib/angular-grainfather-control.module.ts:182\n                \n            \n\n\n            \n                \n                    Sends the given list of commands to the controller.\nA delay between sending commands is needed, else the controller will misbehave.\n\n\n                    \n                        Parameters :\n                        \n                            \n                                \n                                    Name\n                                    Type\n                                    Optional\n                                    Description\n                                \n                            \n                            \n                                \n                                    gfBleCommand\n                                    \n                                                GrainFatherCommands\n                                    \n\n                                    \n                                        No\n                                    \n\n\n                                    \n                                        the command to send.\n\n                                    \n                                \n                            \n                        \n                    \n                    \n                    \n                    \n                        Returns :         any\n\n                    \n                    \n                        \n                    \n                \n            \n        \n    \n    \n        \n            \n                \n                    \n                    \n                        \n                            Private\n                            setConnectionState\n                        \n                        \n                    \n                \n            \n            \n                \n                    \n                    setConnectionState(state: ConnectionState)\n                \n            \n\n\n            \n                \n                    Defined in projects/angular-grainfather-control/src/lib/angular-grainfather-control.module.ts:206\n                \n            \n\n\n            \n                \n                    Set the connectioon state.\n\n\n                    \n                        Parameters :\n                        \n                            \n                                \n                                    Name\n                                    Type\n                                    Optional\n                                    Description\n                                \n                            \n                            \n                                \n                                    state\n                                    \n                                                ConnectionState\n                                    \n\n                                    \n                                        No\n                                    \n\n\n                                    \n                                        new state\n\n                                    \n                                \n                            \n                        \n                    \n                    \n                    \n                    \n                        Returns :         void\n\n                    \n                    \n                        \n                    \n                \n            \n        \n    \n    \n        \n            \n                \n                    \n                    \n                        \n                            setRecipeDetails\n                        \n                        \n                    \n                \n            \n            \n                \nsetRecipeDetails(recipeDetails: RecipeDetails)\n                \n            \n\n\n            \n                \n                    Defined in projects/angular-grainfather-control/src/lib/angular-grainfather-control.module.ts:218\n                \n            \n\n\n            \n                \n                    Status information from the controller is not enough to determinate the progress.\nRecipe details are needed.\nIf a session is in progress, this information is needed to be able to determine the correct state.\n\n\n                    \n                        Parameters :\n                        \n                            \n                                \n                                    Name\n                                    Type\n                                    Optional\n                                    Description\n                                \n                            \n                            \n                                \n                                    recipeDetails\n                                    \n                                                RecipeDetails\n                                    \n\n                                    \n                                        No\n                                    \n\n\n                                    \n                                        details of the current brewing session.\n\n                                    \n                                \n                            \n                        \n                    \n                    \n                    \n                    \n                        Returns :         void\n\n                    \n                    \n                        \n                    \n                \n            \n        \n    \n    \n        \n            \n                \n                    \n                    \n                        \n                            setupListener\n                        \n                        \n                    \n                \n            \n            \n                \nsetupListener(characteristic: BluetoothRemoteGATTCharacteristic)\n                \n            \n\n\n            \n                \n                    Defined in projects/angular-grainfather-control/src/lib/angular-grainfather-control.module.ts:157\n                \n            \n\n\n            \n                \n                    Sets up the listener for notifications.\n\n\n                    \n                        Parameters :\n                        \n                            \n                                \n                                    Name\n                                    Type\n                                    Optional\n                                    Description\n                                \n                            \n                            \n                                \n                                    characteristic\n                                    \n                                            BluetoothRemoteGATTCharacteristic\n                                    \n\n                                    \n                                        No\n                                    \n\n\n                                    \n                                        notification characteristic\n\n                                    \n                                \n                            \n                        \n                    \n                    \n                    \n                    \n                        Returns :         any\n\n                    \n                    \n                        \n                    \n                \n            \n        \n    \n    \n        \n            \n                \n                    \n                    \n                        \n                            subscribeToConnectionStatus\n                        \n                        \n                    \n                \n            \n            \n                \nsubscribeToConnectionStatus(generatorOrNext?: any, error?: any, complete?: any)\n                \n            \n\n\n            \n                \n                    Defined in projects/angular-grainfather-control/src/lib/angular-grainfather-control.module.ts:245\n                \n            \n\n\n            \n                \n                    Subscribe to connection status.\nSee 'ConnectionState'\n\n\n                    \n                        Parameters :\n                        \n                            \n                                \n                                    Name\n                                    Type\n                                    Optional\n                                \n                            \n                            \n                                \n                                    generatorOrNext\n                                    \n                                                any\n                                    \n\n                                    \n                                        Yes\n                                    \n\n\n                                \n                                \n                                    error\n                                    \n                                                any\n                                    \n\n                                    \n                                        Yes\n                                    \n\n\n                                \n                                \n                                    complete\n                                    \n                                                any\n                                    \n\n                                    \n                                        Yes\n                                    \n\n\n                                \n                            \n                        \n                    \n                    \n                    \n                    \n                        Returns :         any\n\n                    \n                    \n                        \n                    \n                \n            \n        \n    \n    \n        \n            \n                \n                    \n                    \n                        \n                            subscribeToControllerStatus\n                        \n                        \n                    \n                \n            \n            \n                \nsubscribeToControllerStatus(generatorOrNext?: any, error?: any, complete?: any)\n                \n            \n\n\n            \n                \n                    Defined in projects/angular-grainfather-control/src/lib/angular-grainfather-control.module.ts:236\n                \n            \n\n\n            \n                \n                    Subscribe to controller status.\nSee CStatus, FStatus, IStatus, TStatus, VStatus, WStatus, XStatus, YStatus\n\n\n                    \n                        Parameters :\n                        \n                            \n                                \n                                    Name\n                                    Type\n                                    Optional\n                                \n                            \n                            \n                                \n                                    generatorOrNext\n                                    \n                                                any\n                                    \n\n                                    \n                                        Yes\n                                    \n\n\n                                \n                                \n                                    error\n                                    \n                                                any\n                                    \n\n                                    \n                                        Yes\n                                    \n\n\n                                \n                                \n                                    complete\n                                    \n                                                any\n                                    \n\n                                    \n                                        Yes\n                                    \n\n\n                                \n                            \n                        \n                    \n                    \n                    \n                    \n                        Returns :         any\n\n                    \n                    \n                        \n                    \n                \n            \n        \n    \n    \n        \n            \n                \n                    \n                    \n                        \n                            subscribeToSessionStatus\n                        \n                        \n                    \n                \n            \n            \n                \nsubscribeToSessionStatus(generatorOrNext?: any, error?: any, complete?: any)\n                \n            \n\n\n            \n                \n                    Defined in projects/angular-grainfather-control/src/lib/angular-grainfather-control.module.ts:227\n                \n            \n\n\n            \n                \n                    Subscribe to session status.\nSee 'BrewingSessionState'.\n\n\n                    \n                        Parameters :\n                        \n                            \n                                \n                                    Name\n                                    Type\n                                    Optional\n                                \n                            \n                            \n                                \n                                    generatorOrNext\n                                    \n                                                any\n                                    \n\n                                    \n                                        Yes\n                                    \n\n\n                                \n                                \n                                    error\n                                    \n                                                any\n                                    \n\n                                    \n                                        Yes\n                                    \n\n\n                                \n                                \n                                    complete\n                                    \n                                                any\n                                    \n\n                                    \n                                        Yes\n                                    \n\n\n                                \n                            \n                        \n                    \n                    \n                    \n                    \n                        Returns :         any\n\n                    \n                    \n                        \n                    \n                \n            \n        \n    \n    \n        \n            \n                \n                    \n                    \n                        \n                            Private\n                            wait\n                        \n                        \n                    \n                \n            \n            \n                \n                    \n                    wait(timeout)\n                \n            \n\n\n            \n                \n                    Defined in projects/angular-grainfather-control/src/lib/angular-grainfather-control.module.ts:195\n                \n            \n\n\n            \n                \n                    Helper method to be able to set a delay between sending command lines.\n\n\n                    \n                        Parameters :\n                        \n                            \n                                \n                                    Name\n                                    Optional\n                                    Description\n                                \n                            \n                            \n                                \n                                    timeout\n\n                                    \n                                        No\n                                    \n\n\n                                    \n                                        time to wait\n\n                                    \n                                \n                            \n                        \n                    \n                    \n                    \n                    \n                        Returns :         any\n\n                    \n                    \n                        \n                    \n                \n            \n        \n    \n\n    \n\n\n    \n        // Copyright [2020] [Alexander Broekhuis - a.broekhuis@gmail.com]\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n//   You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport {EventEmitter, NgModule, Output} from '@angular/core';\nimport {BluetoothDevice, BluetoothRemoteGATTCharacteristic, BluetoothRemoteGATTServer, RequestDeviceOptions} from 'web-bluetooth';\nimport {interval} from 'rxjs';\nimport {GrainFatherNotifications} from './grainfather.notifications';\nimport {GrainFatherCommands, RecipeDetails} from './grainfather.commands';\n\nexport enum ConnectionState {\n  Connecting,\n  Reconnecting,\n  Connected,\n  Disconnected\n}\n\n/**\n * BLE controller. Takes care of setting up a Ble connection by asking the user for a device to connect to.\n *\n * Monitors the connection, tries to reconnect if the connection is lost.\n *\n * Todo: send events for connection status, to be able to show connection status and interrupt reconnect\n */\n@NgModule({\n  imports: [],\n})\nexport class GrainfatherControlModule {\n  GF_BLE_SERVICE = '0000cdd0-0000-1000-8000-00805f9b34fb';\n  GF_BLE_READ_CHARACTERISTIC = '0003cdd1-0000-1000-8000-00805f9b0131';\n  GF_BLE_WRITE_CHARACTERISTIC = '0003cdd2-0000-1000-8000-00805f9b0131';\n\n  @Output()\n  private connectionStatus: EventEmitter = new EventEmitter();\n\n  private device: BluetoothDevice;\n  private server: BluetoothRemoteGATTServer;\n  private writer: BluetoothRemoteGATTCharacteristic;\n\n  private notificationHandler: GrainFatherNotifications = new GrainFatherNotifications();\n\n  private connectionState: ConnectionState = ConnectionState.Disconnected;\n\n  /**\n   * Creates a new connection to a controller.\n   *\n   * Show a popup to select a controller. After selecting a connection will be created by the 'reconnect' method.\n   */\n  connect(): Promise {\n    this.setConnectionState(ConnectionState.Connecting);\n    // Setup filter for GF controller\n    const options = {\n      filters: [{ services: [ this.GF_BLE_SERVICE ]}]\n    } as RequestDeviceOptions;\n    // Strange hack to get to navigator.bluetooth\n    const navigator: any = window.navigator;\n    // Start connection setup by requesting a device\n    return navigator.bluetooth.requestDevice(options)\n      .then(device => {\n        this.device = device;\n        // Add a listener to get info on disconnect events\n        device.addEventListener('gattserverdisconnected', this.onDisconnected.bind(this));\n        // Use selected device to setup a connection\n        return this.reconnect(device);\n      }).catch(error => console.log(error));\n  }\n\n\n  /**\n   * Disconnects the connected device.\n   */\n  disconnect() {\n    if (this.device.gatt.connected) {\n      this.device.gatt.disconnect();\n    }\n    this.setConnectionState(ConnectionState.Disconnected);\n    this.device = null;\n    this.server = null;\n  }\n\n  /**\n   * (Re)connects the given device.\n   *\n   * Gets the primary service and needed characteristic to be able to send commands and receive notifications.\n   *\n   * After successful connection, the connected state is set, and the current boil temperature is received (for later usage).\n   *\n   * @param device the device to connect to, previously selected by the user\n   */\n  reconnect(device: BluetoothDevice) {\n    const self = this;\n    return device.gatt.connect().then(server => {\n      self.server = server;\n      return server.getPrimaryService(self.GF_BLE_SERVICE);\n    }).then(service => {\n      return Promise.all([\n        service.getCharacteristic(self.GF_BLE_READ_CHARACTERISTIC).then(characteristic => {\n          return self.setupListener(characteristic);\n        }),\n        service.getCharacteristic(self.GF_BLE_WRITE_CHARACTERISTIC).then(characteristic => {\n          self.writer = characteristic;\n        }),\n      ]);\n    }).then(_ => {\n      self.setConnectionState(ConnectionState.Connected);\n      return self.sendCommand(GrainFatherCommands.createGetCurrentBoilTemperature());\n    }).then(_ => {\n      self.notificationHandler.commandEmitter.subscribe(command => {\n        return self.sendCommand(command);\n      });\n    });\n  }\n\n  /**\n   * Handler for the disconnect event.\n   *\n   * Will try to reconnect using the 'reconnect' method.\n   *\n   * Can be interrupted by calling the 'disconnect' method.\n   *\n   * @param _ unused event\n   */\n  onDisconnected(_: Event) {\n    this.setConnectionState(ConnectionState.Reconnecting);\n\n    const sub = interval(5000).subscribe(() => {\n      if (this.device && !this.device.gatt.connected) {\n        this.reconnect(this.device);\n      } else {\n        sub.unsubscribe();\n      }\n    });\n  }\n\n  /**\n   * Retrieves the connected status.\n   */\n  getConnectionState() {\n    return this.connectionState;\n  }\n\n  /**\n   * Sets up the listener for notifications.\n   *\n   * @param characteristic notification characteristic\n   */\n  setupListener(characteristic: BluetoothRemoteGATTCharacteristic) {\n    return characteristic.startNotifications()\n      .then(_ => {\n        characteristic.addEventListener('characteristicvaluechanged', this.handleNotifications.bind(this));\n      }).catch(error => console.log((error)));\n  }\n\n  /**\n   * Callback to handle notifications.\n   *\n   * Notifications are forwarded to the 'GrainFatherNotifications' for processing.\n   *\n   * @param event notification\n   */\n  handleNotifications(event: any) {\n    const msg: string = String.fromCharCode.apply(null, new Uint8Array(event.target.value.buffer));\n    this.notificationHandler.process(msg);\n  }\n\n  /**\n   * Sends the given list of commands to the controller.\n   * A delay between sending commands is needed, else the controller will misbehave.\n   *\n   * @param gfBleCommand the command to send.\n   */\n  async sendCommand(gfBleCommand: GrainFatherCommands) {\n    const commands = gfBleCommand.encode();\n    for (const command of commands) {\n      await this.writer.writeValue(command);\n      await this.wait(250);\n    }\n  }\n\n  /**\n   * Helper method to be able to set a delay between sending command lines.\n   *\n   * @param timeout time to wait\n   */\n  private wait(timeout) {\n    return new Promise(resolve => {\n      setTimeout(resolve, timeout);\n    });\n  }\n\n  /**\n   * Set the connectioon state.\n   *\n   * @param state new state\n   */\n  private setConnectionState(state: ConnectionState) {\n    this.connectionState = state;\n  }\n\n  /**\n   * Status information from the controller is not enough to determinate the progress.\n   * Recipe details are needed.\n   *\n   * If a session is in progress, this information is needed to be able to determine the correct state.\n   *\n   * @param recipeDetails details of the current brewing session.\n   */\n  setRecipeDetails(recipeDetails: RecipeDetails) {\n    this.notificationHandler.setRecipeDetails(recipeDetails);\n  }\n\n  /**\n   * Subscribe to session status.\n   *\n   * See 'BrewingSessionState'.\n   */\n  subscribeToSessionStatus(generatorOrNext?: any, error?: any, complete?: any) {\n    return this.notificationHandler.sessionStatus.subscribe(generatorOrNext, error, complete);\n  }\n\n  /**\n   * Subscribe to controller status.\n   *\n   * See CStatus, FStatus, IStatus, TStatus, VStatus, WStatus, XStatus, YStatus\n   */\n  subscribeToControllerStatus(generatorOrNext?: any, error?: any, complete?: any) {\n    return this.notificationHandler.controllerStatus.subscribe(generatorOrNext, error, complete);\n  }\n\n  /**\n   * Subscribe to connection status.\n   *\n   * See 'ConnectionState'\n   */\n  subscribeToConnectionStatus(generatorOrNext?: any, error?: any, complete?: any) {\n    return this.connectionStatus.subscribe(generatorOrNext, error, complete);\n  }\n}\n\n    \n\n\n\n\n\n\n\n\n\n\n\n                   \n\n\n\n\n                   \n    \n         result-matching \"\"\n        \n    \n    \n        No results matching \"\"\n    \n\n"},"classes/IStatus.html":{"url":"classes/IStatus.html","title":"class - IStatus","body":"\n                   \n\n\n\n\n\n\n\n\n\n\n\n\n  Classes\n  IStatus\n\n\n\n        \n            Info\n        \n        \n            Source\n        \n\n\n\n    \n        \n            File\n        \n        \n            projects/angular-grainfather-control/src/lib/grainfather.notifications.ts\n        \n\n            \n                Description\n            \n            \n                Class containing the details of the I notification.\n\n            \n\n\n\n\n            \n    Index\n    \n        \n                \n                    \n                        Properties\n                    \n                \n                \n                    \n                        \n                            \n                                interactionCode\n                            \n                        \n                    \n                \n\n\n\n\n\n\n        \n    \n\n\n            \n    Constructor\n        \n            \n                \n                    \nconstructor(interactionCode: string)\n                    \n                \n                        \n                            \n                                Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:324\n                            \n                        \n\n                \n                    \n                            Creates a new instance of the I notification.\nNotification: I{interactionCode}\n\n                            \n                                    Parameters :\n                                    \n                                        \n                                            \n                                                Name\n                                                    Type\n                                                Optional\n                                            \n                                        \n                                        \n                                                \n                                                        interactionCode\n                                                  \n                                                        \n                                                                        string\n                                                        \n                                                  \n                                                    \n                                                            No\n                                                    \n                                                    \n                                                \n                                        \n                                    \n                            \n                    \n                \n            \n        \n\n\n            \n    \n        \n            Properties\n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            interactionCode\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         string\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:324\n                            \n                        \n\n\n            \n        \n\n\n\n\n\n\n\n\n    \n\n\n    \n        import {EventEmitter, Output} from '@angular/core';\nimport {GrainFatherCommands, RecipeDetails} from './grainfather.commands';\n\n/**\n * Handler for notifications. Besides processing all incoming notifications, also the state of the controller is kept and updated.\n * Notifications are taken from https://github.com/kingpulsar/Grainfather-Bluetooth-Protocol\n *\n * Publishes events for the controller status as well as for each notification.\n */\nexport class GrainFatherNotifications {\n\n  @Output()\n  sessionStatus: EventEmitter = new EventEmitter();\n  @Output()\n  controllerStatus: EventEmitter = new EventEmitter();\n  @Output()\n  commandEmitter: EventEmitter = new EventEmitter();\n\n  recipeDetails: RecipeDetails;\n  timer: TStatus;\n  boilTemperature: number;\n  currentTemperature: number;\n\n  process(notificationLine: string): any {\n    // console.log(notificationLine);\n    const components = notificationLine.substring(1).split(',').slice(0, -1);\n    const type = notificationLine[0];\n\n    let notification: any = null;\n\n    switch (type) {\n      case 'A':\n        // Discard notice on display\n        this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n        break;\n\n      case 'C':\n        notification = new CStatus(parseFloat(components[0]));\n        this.boilTemperature = notification.boilTemperature;\n        break;\n\n      case 'F':\n        notification = new FStatus(components[0]);\n        break;\n\n      case 'I':\n        notification = new IStatus(components[0]);\n        break;\n\n      case 'T':\n        notification = new TStatus(\n          components[0] === '1',\n          parseInt(components[1], 10),\n          parseInt(components[2], 10),\n          parseInt(components[3], 10)\n        );\n        this.timer = notification;\n        break;\n\n      case 'V':\n        notification = new VStatus(\n          parseInt(components[0], 10),\n          parseInt(components[1], 10)\n        );\n        break;\n\n      case 'W':\n        notification = new WStatus(\n          parseInt(components[0], 10),\n          components[1] === '1',\n          components[2] === '1',\n          components[3] === '1',\n          components[4] === '1',\n          components[5] === '1'\n        );\n        break;\n\n      case 'X':\n        notification = new XStatus(\n          parseFloat(components[0]),\n          parseFloat(components[1])\n        );\n        this.currentTemperature = notification.currentTemperature;\n        break;\n\n      case 'Y':\n        notification = new YStatus(\n          components[0] === '1',\n          components[1] === '1',\n          components[2] === '1',\n          components[3] === '1',\n          components[4] === '1',\n          parseInt(components[5], 10),\n          parseInt(components[6], 10),\n          components[7] === '1'\n        );\n\n        this.parseStatus(notification);\n        break;\n    }\n\n    this.controllerStatus.emit(notification);\n  }\n\n  setRecipeDetails(recipeDetails: RecipeDetails) {\n    this.recipeDetails = recipeDetails;\n  }\n\n  /**\n   * Parses the yStatus message to update the session state.\n   *\n   * Requires recipe details to be able to determine the state.\n   *\n   * Uses the state to decrease the required interaction with the controller as much as possible.\n   * Currently the following interactions are needed:\n   *  - Start session after sending recipe without delay\n   *  - Add grain alarm\n   *  - Sparge alarm\n   *  - Start boil timer\n   *  - Start hopstand timer\n   *  - Finish session\n   *\n   *  It also sends notifications with:\n   *   - Current step, see SessionState\n   *   - Time left for step, for delay, mash and boil\n   *   - If a boil addition needs to be added, this will only be one event for each addition\n   *\n   * @param status current YStatus.\n   */\n  parseStatus(status: YStatus) {\n    const sessionStatus = new BrewSessionState(SessionState.Idle);\n\n    if (status && status.autoModeStatus) {\n      if (this.recipeDetails) {\n        const stage = status.stageNumber;\n        const interactionCode = status.interactionCode;\n        const mashSteps = this.recipeDetails.mashSteps.length;\n\n        if (stage === 0) {\n          if (interactionCode === InteractionCode.StartBrew) {\n            sessionStatus.state = SessionState.RecipeReceived;\n          }\n          if (status.delayedHeatMode) {\n            sessionStatus.state = SessionState.DelayedHeating;\n            sessionStatus.timerMinutesLeft = this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n          }\n        } else if (stage > 0 && stage  0 ?\n              this.timer.timerMinutesLeft - 1  : this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n          }\n        } else if (stage === mashSteps + 1) {\n          if (interactionCode === InteractionCode.StartSparge) {\n            sessionStatus.state = SessionState.StartSparge;\n            // Skip this stage and go to next\n            this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n          } else if (interactionCode === InteractionCode.FinishSparge) {\n            sessionStatus.state = SessionState.FinishSparge;\n          }\n        } else if (stage === mashSteps + 2) {\n          if (interactionCode === InteractionCode.StartBoil) {\n            sessionStatus.state = SessionState.StartBoil;\n          } else if (status.stageRampStatus) {\n            sessionStatus.state = SessionState.BoilRamp;\n            // Use actual temp and boil temp to determine if we are there\n            // then emit press command to get to StartBoil\n            if (this.currentTemperature >= this.boilTemperature) {\n              this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n            }\n          } else {\n            sessionStatus.state = SessionState.Boil;\n            sessionStatus.timerMinutesLeft = this.timer.timerMinutesLeft > 0 ?\n              this.timer.timerMinutesLeft - 1  : this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n            // If boil is done, we need to move the controller to the next stage\n            if (this.timer.timerMinutesLeft === 0) {\n              this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n            }\n\n            this.recipeDetails.boilSteps.forEach(step => {\n              if (this.timer.timerMinutesLeft === step.time && !step.sent) {\n                sessionStatus.addAdditionName = step.name;\n                sessionStatus.addAdditionTime = step.time;\n                step.sent = true;\n              }\n            });\n          }\n        } else if (stage === mashSteps + 3 || stage === mashSteps + 4) {\n          if (interactionCode === InteractionCode.FinishBrew) {\n            sessionStatus.state = SessionState.Finished;\n          } else if (interactionCode === InteractionCode.StartHopStand) {\n            sessionStatus.state = SessionState.HopStandAdd;\n          } else {\n            sessionStatus.state = SessionState.HopStand;\n            sessionStatus.timerMinutesLeft = this.timer.timerMinutesLeft > 0 ?\n              this.timer.timerMinutesLeft - 1  : this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n          }\n        }\n      } else {\n        sessionStatus.state = SessionState.Unknown;\n      }\n    }\n\n    this.sessionStatus.emit(sessionStatus);\n  }\n}\n\n/**\n * State of a brewing session.\n *\n * If no session is in progress 'Idle' is used. If no recipe details are set, 'Unknown' is used.\n */\nexport enum SessionState {\n  Idle,\n  RecipeReceived,\n  DelayedHeating,\n  MashRamp,\n  Mash,\n  AddGrain,\n  StartSparge,\n  FinishSparge,\n  BoilRamp,\n  StartBoil,\n  Boil,\n  HopStandAdd,\n  HopStand,\n  Finished,\n  Unknown\n}\n\n/**\n * Describes a brewing session.\n */\nexport class BrewSessionState {\n  state: SessionState;\n  timerMinutesLeft: number;\n  timerSecondsLeft: number;\n  addAdditionName: string;\n  addAdditionTime: number;\n\n  /**\n   * Creates a new brew session state.\n   *\n   * Since the controller handles minutes as rounded up, 1 minute is substracted to have the correct number of minutes.\n   * For example, a timer with 1 minute and 30 seconds actually has 30 seconds left. So to view it as 0:30, it needs to be updated.\n   *\n   * @param state current state of brewing session\n   * @param timerMinutesLeft minutes left on current timer\n   * @param timerSecondsLeft seconds left on current timer\n   * @param addAdditionName name of the addition to add\n   * @param addAdditionTime time at which the addition needs to be added\n   */\n  constructor(state: SessionState, timerMinutesLeft: number= 0, timerSecondsLeft: number = 0, addAdditionName: string = '',\n              addAdditionTime: number = 0) {\n    this.state = state;\n    this.timerMinutesLeft = timerMinutesLeft;\n    this.timerSecondsLeft = timerSecondsLeft;\n    this.addAdditionName = addAdditionName;\n    this.addAdditionTime = addAdditionTime;\n  }\n}\n\n/**\n * Class containing the details of the C notification.\n */\nexport class CStatus {\n  boilTemperature: number;\n\n  /**\n   * Creates a new instance of the C notification.\n   *\n   * Notification: ```C{boilTemperature}```\n   *\n   * @param boilTemperature\n   */\n  constructor(boilTemperature: number) {\n    this.boilTemperature = boilTemperature;\n  }\n}\n\n/**\n * Class containing the details of the F notification.\n */\nexport class FStatus {\n  firmwareVersion: string;\n\n  /**\n   * Creates a new instance of the F notification.\n   *\n   * Notification: ```F{firmwareVersion}```\n   *\n   * @param firmwareVersion\n   */\n  constructor(firmwareVersion: string) {\n    this.firmwareVersion = firmwareVersion;\n  }\n}\n\n/**\n * Class containing the details of the I notification.\n */\nexport class IStatus {\n  interactionCode: string;\n\n  /**\n   * Creates a new instance of the I notification.\n   *\n   * Notification: ```I{interactionCode}```\n   *\n   * @param interactionCode\n   */\n  constructor(interactionCode: string) {\n    this.interactionCode = interactionCode;\n  }\n}\n\n/**\n * Class containing the details of the T notification.\n */\nexport class TStatus {\n  timerActive: boolean;\n  timerMinutesLeft: number;\n  timerTotalStartTime: number;\n  timerSecondsLeft: number;\n\n  /**\n   * Creates a new instance of the T notification.\n   *\n   * Notification: ```T{timerActive},{timerMinutesLeft},{timerTotalStartTime},{timerSecondsLeft}```\n   *\n   * @param timerActive\n   * @param timerMinutesLeft\n   * @param timerTotalStartTime\n   * @param timerSecondsLeft\n   */\n  constructor(timerActive: boolean, timerMinutesLeft: number, timerTotalStartTime: number, timerSecondsLeft: number) {\n    this.timerActive = timerActive;\n    this.timerMinutesLeft = timerMinutesLeft;\n    this.timerTotalStartTime = timerTotalStartTime;\n    this.timerSecondsLeft = timerSecondsLeft;\n  }\n}\n\n/**\n * Describes the voltage of the controller\n */\nexport enum Voltage {\n  V230 = 0,\n  V110\n}\n\n/**\n * Describes the used units.\n */\nexport enum Units {\n  Fahrenheit = 0,\n  Celsius\n}\n\n/**\n * Class containing the details of the V notification.\n */\nexport class VStatus {\n  voltage: Voltage;\n  units: Units;\n\n  /**\n   * Creates a new instance of the V notification.\n   *\n   * Notification: ```V{voltage},{units}```\n   *\n   * @param voltage\n   * @param units\n   */\n  constructor(voltage: Voltage, units: Units) {\n    this.voltage = voltage;\n    this.units = units;\n  }\n}\n\n/**\n * Class containing the details of the W notification.\n */\nexport class WStatus {\n  heatPowerOutputPercentage: number;\n  isTimerPaused: boolean;\n  stepMashMode: boolean;\n  isRecipeInterrupted: boolean;\n  manualPowerMode: boolean;\n  spargeWaterAlertDisplayed: boolean;\n\n  /**\n   * Creates a new instance of the W notification.\n   *\n   * Notification: ```W{heatPowerOutputPercentage},{isTimerPaused},{stepMashMode},{isRecipeInterrupted},{manualPowerMode},{spargeWaterAlertDisplayed}```\n   *\n   * @param heatPowerOutputPercentage heating output\n   * @param isTimerPaused if true, the timer is paused\n   * @param stepMashMode if true, step mash is enabled??\n   * @param isRecipeInterrupted if true, the previous running recipe was interrupted, eg due to power loss\n   * @param manualPowerMode if true, manual power mode is enabled\n   * @param spargeWaterAlertDisplayed if true, the sparge water heating alert is shown\n   */\n  constructor(heatPowerOutputPercentage: number, isTimerPaused: boolean, stepMashMode: boolean,\n              isRecipeInterrupted: boolean, manualPowerMode: boolean, spargeWaterAlertDisplayed: boolean) {\n    this.heatPowerOutputPercentage = heatPowerOutputPercentage;\n    this.isTimerPaused = isTimerPaused;\n    this.stepMashMode = stepMashMode;\n    this.isRecipeInterrupted = isRecipeInterrupted;\n    this.manualPowerMode = manualPowerMode;\n    this.spargeWaterAlertDisplayed = spargeWaterAlertDisplayed;\n  }\n}\n\n/**\n * Class containing the details of the X notification.\n */\nexport class XStatus {\n  targetTemperature: number;\n  currentTemperature: number;\n\n  /**\n   * Creates a new instance of the X notification.\n   *\n   * Notification: ```X{targetTemperature},{currentTemperature}```\n   *\n   * @param targetTemperature target temperature currently set\n   * @param currentTemperature current temperature\n   */\n  constructor(targetTemperature: number, currentTemperature: number) {\n    this.targetTemperature = targetTemperature;\n    this.currentTemperature = currentTemperature;\n  }\n}\n\n/**\n * List of interaction codes send in the Y notification by the controller.\n *\n * @readonly\n * @enum {number}\n */\nexport enum InteractionCode {\n  /**\n   * Interaction code send by the controller if a new recipe is receiver.\n   * Only send if there is no delayed heating timer used.\n   * Waits for user acknowledgement.\n   */\n  StartBrew = 1,\n  /**\n   * Warns the user to add the grains if the mash-in temperature is reached.\n   * Waits for user acknowledgement.\n   */\n  AddGrain,\n  /**\n   * Warns the user that sparging can being.\n   * Is skipped automatically, so that the controller goes to the FinishSparge interaction.\n   */\n  StartSparge,\n  /**\n   * If enabled, shows the sparge counter, if not, shows an alert to continue to the boil stage.\n   * Waits for user acknowledgement.\n   */\n  FinishSparge,\n  /**\n   * Shows an alert to start the boil timer. During this stage, the boil additions will also be shown.\n   * Waits for user acknowledgement.\n   */\n  StartBoil,\n  /**\n   * If a hop stand is added to the recipe, an alert is shown to start the hop stand timer.\n   * Waits for user acknowledgement.\n   */\n  StartHopStand,\n  /**\n   * If the boil timer ends, an alert to finish the session is shown.\n   * Waits for user acknowledgement.\n   */\n  FinishBrew\n}\n\n/**\n * Class containing the details of the Y notification.\n */\nexport class YStatus {\n  heatPower: boolean;\n  pumpStatus: boolean;\n  autoModeStatus: boolean;\n  stageRampStatus: boolean;\n  interactionModeStatus: boolean;\n  interactionCode: InteractionCode;\n  stageNumber: number;\n  delayedHeatMode: boolean;\n\n  /**\n   * Creates a new instance of the Y notification.\n   *\n   * Notification: ```Y{heatPower},{pumpStatus},{autoModeStatus},{stageRampStatus},{interactionModeStatus},{interactionCode},{stageNumber},{delayedHeatMode}```\n   *\n   * @param heatPower heating power output.\n   * @param pumpStatus pump status.\n   * @param autoModeStatus if true the controller is running an automated session.\n   * @param stageRampStatus if true, the controller is ramping to the new/next target temperature.\n   * @param interactionModeStatus if true, the controller is waiting for user interaction.\n   * @param interactionCode code indication the controller step.\n   * @param stageNumber stage number the controller currently is at.\n   * @param delayedHeatMode if true, the controller is running the delayed heating timer.\n   */\n  constructor(heatPower: boolean, pumpStatus: boolean, autoModeStatus: boolean, stageRampStatus: boolean,\n              interactionModeStatus: boolean, interactionCode: InteractionCode, stageNumber: number, delayedHeatMode: boolean) {\n    this.heatPower = heatPower;\n    this.pumpStatus = pumpStatus;\n    this.autoModeStatus = autoModeStatus;\n    this.stageRampStatus = stageRampStatus;\n    this.interactionModeStatus = interactionModeStatus;\n    this.interactionCode = interactionCode;\n    this.stageNumber = stageNumber;\n    this.delayedHeatMode = delayedHeatMode;\n  }\n}\n\n    \n\n\n\n\n                   \n\n\n\n\n                   \n    \n         result-matching \"\"\n        \n    \n    \n        No results matching \"\"\n    \n\n"},"classes/RecipeDetails.html":{"url":"classes/RecipeDetails.html","title":"class - RecipeDetails","body":"\n                   \n\n\n\n\n\n\n\n\n\n\n\n\n  Classes\n  RecipeDetails\n\n\n\n        \n            Info\n        \n        \n            Source\n        \n\n\n\n    \n        \n            File\n        \n        \n            projects/angular-grainfather-control/src/lib/grainfather.commands.ts\n        \n\n\n\n\n\n            \n    Index\n    \n        \n                \n                    \n                        Properties\n                    \n                \n                \n                    \n                        \n                            \n                                boilSteps\n                            \n                            \n                                boilTime\n                            \n                            \n                                hopStandTime\n                            \n                            \n                                mashSteps\n                            \n                            \n                                mashWaterAmount\n                            \n                            \n                                name\n                            \n                            \n                                spargeWaterAmount\n                            \n                        \n                    \n                \n\n\n\n\n\n\n        \n    \n\n\n\n            \n    \n        \n            Properties\n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            boilSteps\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         BoilStep[]\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.commands.ts:34\n                            \n                        \n\n\n            \n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            boilTime\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         number\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.commands.ts:31\n                            \n                        \n\n\n            \n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            hopStandTime\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         number\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.commands.ts:32\n                            \n                        \n\n\n            \n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            mashSteps\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         MashStep[]\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.commands.ts:33\n                            \n                        \n\n\n            \n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            mashWaterAmount\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         number\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.commands.ts:29\n                            \n                        \n\n\n            \n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            name\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         string\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.commands.ts:28\n                            \n                        \n\n\n            \n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            spargeWaterAmount\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         number\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.commands.ts:30\n                            \n                        \n\n\n            \n        \n\n\n\n\n\n\n\n\n    \n\n\n    \n        export type MashStep = {\n  name: string;\n  stepTime: number;\n  stepTemperature: number;\n};\n\nexport type BoilStep = {\n  name: string;\n  time: number;\n  sent: boolean;\n};\n\nexport class RecipeDetails {\n  name: string;\n  mashWaterAmount: number;\n  spargeWaterAmount: number;\n  boilTime: number;\n  hopStandTime: number;\n  mashSteps: MashStep[];\n  boilSteps: BoilStep[];\n}\n\n/**\n * Describes a command that can be sent to the controller.\n * Contains static methods to create a specific command.\n *\n * Commands are sent in plain textAll and should be exactly 19 characters in length. The end is padded with spaces.\n *\n * A command consists out of 1 or more lines.\n */\nexport class GrainFatherCommands {\n  commands: string[];\n\n  /**\n   * Creates a new command.\n   *\n   * @param commands each argument is treated as a single line (command).\n   */\n  constructor(...commands: string[]) {\n    this.commands = commands;\n  }\n\n  /**\n   * Command to dismiss the boil addition alert.\n   *\n   * Command: ```A```\n   */\n  static createDismissBoilAdditionAlert(): GrainFatherCommands {\n    return new GrainFatherCommands('A');\n  }\n\n  /**\n   * Command to cancel the running timer.\n   *\n   * Command: ```C```\n   */\n  static createCancelTimer() {\n    return new GrainFatherCommands('C');\n  }\n\n  /**\n   * Command to decrement the target temperature.\n   *\n   * Command: ```D```\n   */\n  static createDecrementTargetTemperature() {\n    return new GrainFatherCommands('D');\n  }\n\n  /**\n   * Command to finish the session.\n   *\n   * Command: ```F```\n   */\n  static createFinishSession() {\n    return new GrainFatherCommands('F');\n  }\n\n  /**\n   * Command to pause or resume the current timer.\n   *\n   * Command: ```G```\n   */\n  static createPauseOrResumeTimer() {\n    return new GrainFatherCommands('G');\n  }\n\n  /**\n   * Command to toggle heating.\n   *\n   * Command: ```H```\n   */\n  static createToggleHeat() {\n    return new GrainFatherCommands('H');\n  }\n\n  /**\n   * Command to indicate interaction is complete.\n   *\n   * Command: ```I```\n   */\n  static createInteractionComplete() {\n    return new GrainFatherCommands('I'); // IC?\n  }\n\n  /**\n   * Command to turn off heating.\n   *\n   * Command: ```K0```\n   */\n  static createTurnOffHeat() {\n    return new GrainFatherCommands('K0');\n  }\n\n  /**\n   * Command to turn on heating.\n   *\n   * Command: ```K1```\n   */\n  static createTurnOnHeat() {\n    return new GrainFatherCommands('K1');\n  }\n\n  /**\n   * Command to turn off the pump.\n   *\n   * Command: ```L0```\n   */\n  static createTurnOffPump() {\n    return new GrainFatherCommands('L0');\n  }\n\n  /**\n   * Command to turn on the pump.\n   *\n   * Command: ```L1```\n   */\n  static createTurnOnPump() {\n    return new GrainFatherCommands('L1');\n  }\n\n  /**\n   * Command to get the current boil temperature.\n   *\n   * Command: ```M```\n   */\n  static createGetCurrentBoilTemperature() {\n    return new GrainFatherCommands('M');\n  }\n\n  /**\n   * Command to toggle the pump.\n   *\n   * Command: ```P```\n   */\n  static createTogglePump() {\n    return new GrainFatherCommands('P');\n  }\n\n  /**\n   * Command to disconnect the manual mode.\n   *\n   * Command: ```Q0```\n   */\n  static createDisconnectManualMode() {\n    return new GrainFatherCommands('Q0');\n  }\n\n  /**\n   * Command to disconnect and cancel.\n   *\n   * Command: ```Q1```\n   */\n  static createDisconnectAndCancel() {\n    return new GrainFatherCommands('Q1');\n  }\n\n  /**\n   * Command to disconnect the auto mode.\n   *\n   * Command: ```Q2```\n   */\n  static createDisconnectAutoMode() {\n    return new GrainFatherCommands('Q2');\n  }\n\n  /**\n   * Command to press the set button.\n   *\n   * Command: ```T```\n   */\n  static createPressSet() {\n    return new GrainFatherCommands('T');\n  }\n\n  /**\n   * Command to increment the target temperature.\n   *\n   * Command: ```U```\n   */\n  static createIncrementTargetTemperature() {\n    return new GrainFatherCommands('U');\n  }\n\n  /**\n   * Command to disable tthe sparge water alert.\n   *\n   * Command: ```V```\n   */\n  static createDisableSpargeWaterAlert() {\n    return new GrainFatherCommands('V');\n  }\n\n  /**\n   * Command to get the firmware version.\n   *\n   * Command: ```X```\n   */\n  static createGetFirmwareVersion() {\n    return new GrainFatherCommands('X');\n  }\n\n  /**\n   * Command to reset the controller.\n   *\n   * Command: ```Z```\n   */\n  static createResetController() {\n    return new GrainFatherCommands('Z');\n  }\n\n  /**\n   * Command to reset the \"recipe interrupted\" flag.\n   *\n   * Command: ```!```\n   */\n  static createResetRecipeInterrupted() {\n    return new GrainFatherCommands('!');\n  }\n\n  /**\n   * Command to turn off the sparge counter.\n   *\n   * Command: ```d0```\n   */\n  static createTurnOffSpargeCounterMode() {\n    return new GrainFatherCommands('d0');\n  }\n\n  /**\n   * Command to turn on the sparge counter.\n   *\n   * Command: ```d1```\n   */\n  static createTurnOnSpargeCounterMode() {\n    return new GrainFatherCommands('d1');\n  }\n\n  /**\n   * Command to turn off the boil control.\n   *\n   * Command: ```e0```\n   */\n  static createTurnOffBoilControlMode() {\n    return new GrainFatherCommands('e0');\n  }\n\n  /**\n   * Command to turn on the boil control.\n   *\n   * Command: ```e1```\n   */\n  static createTurnOnBoilControlMode() {\n    return new GrainFatherCommands('e0');\n  }\n\n  /**\n   * Command to exit manual power control.\n   *\n   * Command: ```f0```\n   */\n  static createExitManualPowerControlMode() {\n    return new GrainFatherCommands('f0');\n  }\n\n  /**\n   * Command to enter manual power control.\n   *\n   * Command: ```f1```\n   */\n  static createEnterManualPowerControlMode() {\n    return new GrainFatherCommands('f1');\n  }\n\n  /**\n   * Command to get the controller voltage and used units.\n   *\n   * Command: ```g```\n   */\n  static createGetControllerVoltageAndUnits() {\n    return new GrainFatherCommands('g');\n  }\n\n  /**\n   * Command to turn off the sparge alert.\n   *\n   * Command: ```h0```\n   */\n  static createTurnOffSpargeAlertMode() {\n    return new GrainFatherCommands('h0');\n  }\n\n  /**\n   * Command to turn on the sparge alert.\n   *\n   * Command: ```h1```\n   */\n  static createTurnOnSpargeAlertMode() {\n    return new GrainFatherCommands('h1');\n  }\n\n  /**\n   * Command to set delayed heating.\n   *\n   * Since the controller handles minutes as rounded up, 1 minute is added to have the correct number of minutes.\n   * For example, a timer with 1 minute and 30 seconds actually has 30 seconds left. So to set 1:30, 2:30 has to be sent.\n   *\n   * Command: ```B${minutes},${seconds},```\n   *\n   * @param minutes minutes to wait for delayed heating\n   * @param seconds seconds to wait for delayed heating\n   */\n  static createSetDelayedHeatFunction(minutes: number, seconds: number) {\n    return new GrainFatherCommands(`B${++minutes},${seconds}`);\n  }\n\n  /**\n   * Command to set the local boil temperature.\n   *\n   * Depending on the hight, a different boil temperature might be needed.\n   *\n   * Command: ```E${temperature},```\n   *\n   * @param temperature the local temperature\n   */\n  static createSetLocalBoilTemperature(temperature: number) {\n    return new GrainFatherCommands(`E${temperature},`);\n  }\n\n  /**\n   * Command to set the boil time.\n   *\n   * Command: ```J${time},```\n   *\n   * @param time boil time\n   */\n  static createSetBoilTime(time: number) {\n    return new GrainFatherCommands(`J${time},`);\n  }\n\n  /**\n   * Command to skip to a step.\n   *\n   * Since the controller handles minutes as rounded up, 1 minute is added to have the correct number of minutes.\n   * For example, a timer with 1 minute and 30 seconds actually has 30 seconds left. So to set 1:30, 2:30 has to be sent.\n   *\n   * Command: ```N${step},${timeEditable},${minutesLeft},${secondsLeft},${skipRamp},${disableAddGrain},```\n   *\n   * @param step step to skip to\n   * @param timeEditable can the time be adjusted?\n   * @param minutesLeft minutes left on the timer\n   * @param secondsLeft seconds left on the timer\n   * @param skipRamp skip ramp to target temperature if true\n   * @param disableAddGrain do not show the add grain alert if true\n   */\n  static createSkipToStep(step: number, timeEditable: boolean, minutesLeft: number,\n                          secondsLeft: number, skipRamp: boolean, disableAddGrain: boolean) {\n    return new GrainFatherCommands(`N${step},${Number(timeEditable)},${++minutesLeft},\n                            ${secondsLeft},${Number(skipRamp)},${Number(disableAddGrain)},`);\n  }\n\n  /**\n   * Command to set a new timer with only minutes.\n   *\n   * Since the controller handles minutes as rounded up, 1 minute is added to have the correct number of minutes.\n   * For example, a timer with 1 minute and 30 seconds actually has 30 seconds left. So to set 1:30, 2:30 has to be sent.\n   *\n   * Command: ```S${minutes},```\n   *\n   * @param minutes new timer time in minutes\n   */\n  static createSetNewTimer(minutes: number) {\n    return new GrainFatherCommands(`S${++minutes},`);\n  }\n\n  /**\n   * Command to set a new timer with minutes and seconds.\n   *\n   * Since the controller handles minutes as rounded up, 1 minute is added to have the correct number of minutes.\n   * For example, a timer with 1 minute and 30 seconds actually has 30 seconds left. So to set 1:30, 2:30 has to be sent.\n   *\n   * Command: ```W${minutes},${seconds},```\n   *\n   * @param minutes new timer time in minutes\n   * @param seconds new timer time in seconds\n   */\n  static createSetNewTimerWithSeconds(minutes: number, seconds: number) {\n    return new GrainFatherCommands(`W${++minutes},${seconds},`);\n  }\n\n  /**\n   * Command to set the target temperature.\n   *\n   * Command: ```$${temperature},```\n   *\n   * @param temperature new target temperature\n   */\n  static createSetTargetTemperature(temperature: number) {\n    return new GrainFatherCommands(`$${temperature},`);\n  }\n\n  /**\n   * Command to edit stage temperature and time.\n   *\n   * Command: ```a${stage},${time},${temperature},```\n   *\n   * @param stage the stage to edit\n   * @param time new time in minutes\n   * @param temperature new temperature\n   */\n  static createEditStageTemperatureAndTime(stage: number, time: number, temperature: number) {\n    return new GrainFatherCommands(`a${stage},${time},${temperature},`);\n  }\n\n  /**\n   * Command to turn set the sparge progress when the sparge counter is shown.\n   *\n   * Command: ```b${progress},```\n   *\n   * @param progress the sparging progress\n   */\n  static createSetSpargeProgress(progress: number) {\n    return new GrainFatherCommands(`b${progress},`);\n  }\n\n  /**\n   * Command to skip to the given interaction.\n   *\n   * Command: ```c${interaction},```\n   *\n   * @param interaction interaction number to skip to\n   */\n  static createSkipToInteraction(interaction: number) {\n    return new GrainFatherCommands(`c${interaction},`);\n  }\n\n  /**\n   * Create the recipe command. From all of the commands, this is the most complex one, and needs more details.\n   * A recipe consists out of multiple lines and looks as:\n   *  R75,2,15.7,16.7,  75 minute boil, 2 mash steps, 15.6L mash volume, 16.7L sparge volume\n   *  0,1,1,0,0,        No water treatment alert, show sparge counter, show sparge alert, no delayed session, do not skip the start\n   *  SAISON            Recipe name that will be displayed in the top left\n   *  0,4,0,0,          No hop stand, 4 boil addition stops, no boil power mode, no strike temp mode\n   *  75,               Boil addition stop 1, at 75 minutes boil time remaining\n   *  45,               Boil addition stop 2, at 45 minutes boil time remaining\n   *  30,               Boil addition stop 3, at 30 minutes boil time remaining\n   *  10,               Boil addition stop 4, at 10 Minutes boil time remaining\n   *  65:60,            Mash step 1, 65C for 60 minutes\n   *  75:10,            Mash step 2, 75C for 10 minutes\n   * And optionally, for delayed heating, add this:\n   *  10:40             Heated delay of 10 minutes and 40 seconds\n   *\n   *  RecipeDetails contain the minimal information that is needed. All other values can be skipped and have default values.\n   *\n   * Since the controller handles minutes as rounded up, 1 minute is added to have the correct number of minutes.\n   * For example, a timer with 1 minute and 30 seconds actually has 30 seconds left. So to set 1:30, 2:30 has to be sent.\n   *\n   * @param recipeDetails details to create a recipe for @see RecipeDetails\n   * @param delayMinutes delayed heating time in minutes\n   * @param delaySeconds delayed heating time in seconds\n   * @param showWaterTreatmentAlarm whether to show the water treatment alarm or not\n   * @param showSpargeCounter whether to show the sparge counter or not\n   * @param showSpargeAlert whether to show the sparge water heating alert or not\n   * @param skipStart  whether to show skip start or not??\n   * @param boilPowerMode whether to use boil power mode or not??\n   * @param strikeTempMode whether to use strike temperature mode or not??\n   */\n  static createRecipe(recipeDetails: RecipeDetails, delayMinutes = 0, delaySeconds = 0, showWaterTreatmentAlarm = false,\n                      showSpargeCounter = true, showSpargeAlert = false, skipStart = false, boilPowerMode = false, strikeTempMode = false) {\n    const command = new GrainFatherCommands(`R${recipeDetails.boilTime},${recipeDetails.mashSteps.length},${recipeDetails.mashWaterAmount},${recipeDetails.spargeWaterAmount},`,\n      `${showWaterTreatmentAlarm ? '1' : '0'},${showSpargeCounter ? '1' : '0'},${showSpargeAlert ? '1' : '0'},${(delayMinutes > 0 || delaySeconds > 0) ? '1' : '0'},${Number(skipStart ? '1' : '0')},`,\n      `${recipeDetails.name}`,\n      `${recipeDetails.hopStandTime},${recipeDetails.boilSteps.length},${boilPowerMode ? '1' : '0'},${strikeTempMode ? '1' : '0'}`\n    );\n\n    for (const boilAddition of recipeDetails.boilSteps) {\n      command.append(`${boilAddition.time},`);\n    }\n\n    for (const mashStep of recipeDetails.mashSteps) {\n      command.append(`${mashStep.stepTemperature}:${mashStep.stepTime},`);\n    }\n\n    if (delayMinutes > 0 || delaySeconds > 0) {\n      command.append(`${++(delayMinutes)},${delaySeconds},`);\n    }\n\n    return command;\n  }\n\n  /**\n   * Appends a new command to the end of the list.\n   *\n   * @param command command to add\n   */\n  append(command: string) {\n    this.commands.push(command);\n  }\n\n  /**\n   * The GF controller expects each line to be 19 chars long. A line is padded with spaces.\n   */\n  encode(): Array {\n    const buffer = [];\n    for (const command of this.commands) {\n      // console.log(command);\n      const line = Uint8Array.from(command.padEnd(19, ' '), x => x.charCodeAt(0));\n      buffer.push(line);\n    }\n    return buffer;\n  }\n}\n\n    \n\n\n\n\n                   \n\n\n\n\n                   \n    \n         result-matching \"\"\n        \n    \n    \n        No results matching \"\"\n    \n\n"},"classes/TStatus.html":{"url":"classes/TStatus.html","title":"class - TStatus","body":"\n                   \n\n\n\n\n\n\n\n\n\n\n\n\n  Classes\n  TStatus\n\n\n\n        \n            Info\n        \n        \n            Source\n        \n\n\n\n    \n        \n            File\n        \n        \n            projects/angular-grainfather-control/src/lib/grainfather.notifications.ts\n        \n\n            \n                Description\n            \n            \n                Class containing the details of the T notification.\n\n            \n\n\n\n\n            \n    Index\n    \n        \n                \n                    \n                        Properties\n                    \n                \n                \n                    \n                        \n                            \n                                timerActive\n                            \n                            \n                                timerMinutesLeft\n                            \n                            \n                                timerSecondsLeft\n                            \n                            \n                                timerTotalStartTime\n                            \n                        \n                    \n                \n\n\n\n\n\n\n        \n    \n\n\n            \n    Constructor\n        \n            \n                \n                    \nconstructor(timerActive: boolean, timerMinutesLeft: number, timerTotalStartTime: number, timerSecondsLeft: number)\n                    \n                \n                        \n                            \n                                Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:345\n                            \n                        \n\n                \n                    \n                            Creates a new instance of the T notification.\nNotification: T{timerActive},{timerMinutesLeft},{timerTotalStartTime},{timerSecondsLeft}\n\n                            \n                                    Parameters :\n                                    \n                                        \n                                            \n                                                Name\n                                                    Type\n                                                Optional\n                                            \n                                        \n                                        \n                                                \n                                                        timerActive\n                                                  \n                                                        \n                                                                        boolean\n                                                        \n                                                  \n                                                    \n                                                            No\n                                                    \n                                                    \n                                                \n                                                \n                                                        timerMinutesLeft\n                                                  \n                                                        \n                                                                        number\n                                                        \n                                                  \n                                                    \n                                                            No\n                                                    \n                                                    \n                                                \n                                                \n                                                        timerTotalStartTime\n                                                  \n                                                        \n                                                                        number\n                                                        \n                                                  \n                                                    \n                                                            No\n                                                    \n                                                    \n                                                \n                                                \n                                                        timerSecondsLeft\n                                                  \n                                                        \n                                                                        number\n                                                        \n                                                  \n                                                    \n                                                            No\n                                                    \n                                                    \n                                                \n                                        \n                                    \n                            \n                    \n                \n            \n        \n\n\n            \n    \n        \n            Properties\n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            timerActive\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         boolean\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:342\n                            \n                        \n\n\n            \n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            timerMinutesLeft\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         number\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:343\n                            \n                        \n\n\n            \n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            timerSecondsLeft\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         number\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:345\n                            \n                        \n\n\n            \n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            timerTotalStartTime\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         number\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:344\n                            \n                        \n\n\n            \n        \n\n\n\n\n\n\n\n\n    \n\n\n    \n        import {EventEmitter, Output} from '@angular/core';\nimport {GrainFatherCommands, RecipeDetails} from './grainfather.commands';\n\n/**\n * Handler for notifications. Besides processing all incoming notifications, also the state of the controller is kept and updated.\n * Notifications are taken from https://github.com/kingpulsar/Grainfather-Bluetooth-Protocol\n *\n * Publishes events for the controller status as well as for each notification.\n */\nexport class GrainFatherNotifications {\n\n  @Output()\n  sessionStatus: EventEmitter = new EventEmitter();\n  @Output()\n  controllerStatus: EventEmitter = new EventEmitter();\n  @Output()\n  commandEmitter: EventEmitter = new EventEmitter();\n\n  recipeDetails: RecipeDetails;\n  timer: TStatus;\n  boilTemperature: number;\n  currentTemperature: number;\n\n  process(notificationLine: string): any {\n    // console.log(notificationLine);\n    const components = notificationLine.substring(1).split(',').slice(0, -1);\n    const type = notificationLine[0];\n\n    let notification: any = null;\n\n    switch (type) {\n      case 'A':\n        // Discard notice on display\n        this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n        break;\n\n      case 'C':\n        notification = new CStatus(parseFloat(components[0]));\n        this.boilTemperature = notification.boilTemperature;\n        break;\n\n      case 'F':\n        notification = new FStatus(components[0]);\n        break;\n\n      case 'I':\n        notification = new IStatus(components[0]);\n        break;\n\n      case 'T':\n        notification = new TStatus(\n          components[0] === '1',\n          parseInt(components[1], 10),\n          parseInt(components[2], 10),\n          parseInt(components[3], 10)\n        );\n        this.timer = notification;\n        break;\n\n      case 'V':\n        notification = new VStatus(\n          parseInt(components[0], 10),\n          parseInt(components[1], 10)\n        );\n        break;\n\n      case 'W':\n        notification = new WStatus(\n          parseInt(components[0], 10),\n          components[1] === '1',\n          components[2] === '1',\n          components[3] === '1',\n          components[4] === '1',\n          components[5] === '1'\n        );\n        break;\n\n      case 'X':\n        notification = new XStatus(\n          parseFloat(components[0]),\n          parseFloat(components[1])\n        );\n        this.currentTemperature = notification.currentTemperature;\n        break;\n\n      case 'Y':\n        notification = new YStatus(\n          components[0] === '1',\n          components[1] === '1',\n          components[2] === '1',\n          components[3] === '1',\n          components[4] === '1',\n          parseInt(components[5], 10),\n          parseInt(components[6], 10),\n          components[7] === '1'\n        );\n\n        this.parseStatus(notification);\n        break;\n    }\n\n    this.controllerStatus.emit(notification);\n  }\n\n  setRecipeDetails(recipeDetails: RecipeDetails) {\n    this.recipeDetails = recipeDetails;\n  }\n\n  /**\n   * Parses the yStatus message to update the session state.\n   *\n   * Requires recipe details to be able to determine the state.\n   *\n   * Uses the state to decrease the required interaction with the controller as much as possible.\n   * Currently the following interactions are needed:\n   *  - Start session after sending recipe without delay\n   *  - Add grain alarm\n   *  - Sparge alarm\n   *  - Start boil timer\n   *  - Start hopstand timer\n   *  - Finish session\n   *\n   *  It also sends notifications with:\n   *   - Current step, see SessionState\n   *   - Time left for step, for delay, mash and boil\n   *   - If a boil addition needs to be added, this will only be one event for each addition\n   *\n   * @param status current YStatus.\n   */\n  parseStatus(status: YStatus) {\n    const sessionStatus = new BrewSessionState(SessionState.Idle);\n\n    if (status && status.autoModeStatus) {\n      if (this.recipeDetails) {\n        const stage = status.stageNumber;\n        const interactionCode = status.interactionCode;\n        const mashSteps = this.recipeDetails.mashSteps.length;\n\n        if (stage === 0) {\n          if (interactionCode === InteractionCode.StartBrew) {\n            sessionStatus.state = SessionState.RecipeReceived;\n          }\n          if (status.delayedHeatMode) {\n            sessionStatus.state = SessionState.DelayedHeating;\n            sessionStatus.timerMinutesLeft = this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n          }\n        } else if (stage > 0 && stage  0 ?\n              this.timer.timerMinutesLeft - 1  : this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n          }\n        } else if (stage === mashSteps + 1) {\n          if (interactionCode === InteractionCode.StartSparge) {\n            sessionStatus.state = SessionState.StartSparge;\n            // Skip this stage and go to next\n            this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n          } else if (interactionCode === InteractionCode.FinishSparge) {\n            sessionStatus.state = SessionState.FinishSparge;\n          }\n        } else if (stage === mashSteps + 2) {\n          if (interactionCode === InteractionCode.StartBoil) {\n            sessionStatus.state = SessionState.StartBoil;\n          } else if (status.stageRampStatus) {\n            sessionStatus.state = SessionState.BoilRamp;\n            // Use actual temp and boil temp to determine if we are there\n            // then emit press command to get to StartBoil\n            if (this.currentTemperature >= this.boilTemperature) {\n              this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n            }\n          } else {\n            sessionStatus.state = SessionState.Boil;\n            sessionStatus.timerMinutesLeft = this.timer.timerMinutesLeft > 0 ?\n              this.timer.timerMinutesLeft - 1  : this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n            // If boil is done, we need to move the controller to the next stage\n            if (this.timer.timerMinutesLeft === 0) {\n              this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n            }\n\n            this.recipeDetails.boilSteps.forEach(step => {\n              if (this.timer.timerMinutesLeft === step.time && !step.sent) {\n                sessionStatus.addAdditionName = step.name;\n                sessionStatus.addAdditionTime = step.time;\n                step.sent = true;\n              }\n            });\n          }\n        } else if (stage === mashSteps + 3 || stage === mashSteps + 4) {\n          if (interactionCode === InteractionCode.FinishBrew) {\n            sessionStatus.state = SessionState.Finished;\n          } else if (interactionCode === InteractionCode.StartHopStand) {\n            sessionStatus.state = SessionState.HopStandAdd;\n          } else {\n            sessionStatus.state = SessionState.HopStand;\n            sessionStatus.timerMinutesLeft = this.timer.timerMinutesLeft > 0 ?\n              this.timer.timerMinutesLeft - 1  : this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n          }\n        }\n      } else {\n        sessionStatus.state = SessionState.Unknown;\n      }\n    }\n\n    this.sessionStatus.emit(sessionStatus);\n  }\n}\n\n/**\n * State of a brewing session.\n *\n * If no session is in progress 'Idle' is used. If no recipe details are set, 'Unknown' is used.\n */\nexport enum SessionState {\n  Idle,\n  RecipeReceived,\n  DelayedHeating,\n  MashRamp,\n  Mash,\n  AddGrain,\n  StartSparge,\n  FinishSparge,\n  BoilRamp,\n  StartBoil,\n  Boil,\n  HopStandAdd,\n  HopStand,\n  Finished,\n  Unknown\n}\n\n/**\n * Describes a brewing session.\n */\nexport class BrewSessionState {\n  state: SessionState;\n  timerMinutesLeft: number;\n  timerSecondsLeft: number;\n  addAdditionName: string;\n  addAdditionTime: number;\n\n  /**\n   * Creates a new brew session state.\n   *\n   * Since the controller handles minutes as rounded up, 1 minute is substracted to have the correct number of minutes.\n   * For example, a timer with 1 minute and 30 seconds actually has 30 seconds left. So to view it as 0:30, it needs to be updated.\n   *\n   * @param state current state of brewing session\n   * @param timerMinutesLeft minutes left on current timer\n   * @param timerSecondsLeft seconds left on current timer\n   * @param addAdditionName name of the addition to add\n   * @param addAdditionTime time at which the addition needs to be added\n   */\n  constructor(state: SessionState, timerMinutesLeft: number= 0, timerSecondsLeft: number = 0, addAdditionName: string = '',\n              addAdditionTime: number = 0) {\n    this.state = state;\n    this.timerMinutesLeft = timerMinutesLeft;\n    this.timerSecondsLeft = timerSecondsLeft;\n    this.addAdditionName = addAdditionName;\n    this.addAdditionTime = addAdditionTime;\n  }\n}\n\n/**\n * Class containing the details of the C notification.\n */\nexport class CStatus {\n  boilTemperature: number;\n\n  /**\n   * Creates a new instance of the C notification.\n   *\n   * Notification: ```C{boilTemperature}```\n   *\n   * @param boilTemperature\n   */\n  constructor(boilTemperature: number) {\n    this.boilTemperature = boilTemperature;\n  }\n}\n\n/**\n * Class containing the details of the F notification.\n */\nexport class FStatus {\n  firmwareVersion: string;\n\n  /**\n   * Creates a new instance of the F notification.\n   *\n   * Notification: ```F{firmwareVersion}```\n   *\n   * @param firmwareVersion\n   */\n  constructor(firmwareVersion: string) {\n    this.firmwareVersion = firmwareVersion;\n  }\n}\n\n/**\n * Class containing the details of the I notification.\n */\nexport class IStatus {\n  interactionCode: string;\n\n  /**\n   * Creates a new instance of the I notification.\n   *\n   * Notification: ```I{interactionCode}```\n   *\n   * @param interactionCode\n   */\n  constructor(interactionCode: string) {\n    this.interactionCode = interactionCode;\n  }\n}\n\n/**\n * Class containing the details of the T notification.\n */\nexport class TStatus {\n  timerActive: boolean;\n  timerMinutesLeft: number;\n  timerTotalStartTime: number;\n  timerSecondsLeft: number;\n\n  /**\n   * Creates a new instance of the T notification.\n   *\n   * Notification: ```T{timerActive},{timerMinutesLeft},{timerTotalStartTime},{timerSecondsLeft}```\n   *\n   * @param timerActive\n   * @param timerMinutesLeft\n   * @param timerTotalStartTime\n   * @param timerSecondsLeft\n   */\n  constructor(timerActive: boolean, timerMinutesLeft: number, timerTotalStartTime: number, timerSecondsLeft: number) {\n    this.timerActive = timerActive;\n    this.timerMinutesLeft = timerMinutesLeft;\n    this.timerTotalStartTime = timerTotalStartTime;\n    this.timerSecondsLeft = timerSecondsLeft;\n  }\n}\n\n/**\n * Describes the voltage of the controller\n */\nexport enum Voltage {\n  V230 = 0,\n  V110\n}\n\n/**\n * Describes the used units.\n */\nexport enum Units {\n  Fahrenheit = 0,\n  Celsius\n}\n\n/**\n * Class containing the details of the V notification.\n */\nexport class VStatus {\n  voltage: Voltage;\n  units: Units;\n\n  /**\n   * Creates a new instance of the V notification.\n   *\n   * Notification: ```V{voltage},{units}```\n   *\n   * @param voltage\n   * @param units\n   */\n  constructor(voltage: Voltage, units: Units) {\n    this.voltage = voltage;\n    this.units = units;\n  }\n}\n\n/**\n * Class containing the details of the W notification.\n */\nexport class WStatus {\n  heatPowerOutputPercentage: number;\n  isTimerPaused: boolean;\n  stepMashMode: boolean;\n  isRecipeInterrupted: boolean;\n  manualPowerMode: boolean;\n  spargeWaterAlertDisplayed: boolean;\n\n  /**\n   * Creates a new instance of the W notification.\n   *\n   * Notification: ```W{heatPowerOutputPercentage},{isTimerPaused},{stepMashMode},{isRecipeInterrupted},{manualPowerMode},{spargeWaterAlertDisplayed}```\n   *\n   * @param heatPowerOutputPercentage heating output\n   * @param isTimerPaused if true, the timer is paused\n   * @param stepMashMode if true, step mash is enabled??\n   * @param isRecipeInterrupted if true, the previous running recipe was interrupted, eg due to power loss\n   * @param manualPowerMode if true, manual power mode is enabled\n   * @param spargeWaterAlertDisplayed if true, the sparge water heating alert is shown\n   */\n  constructor(heatPowerOutputPercentage: number, isTimerPaused: boolean, stepMashMode: boolean,\n              isRecipeInterrupted: boolean, manualPowerMode: boolean, spargeWaterAlertDisplayed: boolean) {\n    this.heatPowerOutputPercentage = heatPowerOutputPercentage;\n    this.isTimerPaused = isTimerPaused;\n    this.stepMashMode = stepMashMode;\n    this.isRecipeInterrupted = isRecipeInterrupted;\n    this.manualPowerMode = manualPowerMode;\n    this.spargeWaterAlertDisplayed = spargeWaterAlertDisplayed;\n  }\n}\n\n/**\n * Class containing the details of the X notification.\n */\nexport class XStatus {\n  targetTemperature: number;\n  currentTemperature: number;\n\n  /**\n   * Creates a new instance of the X notification.\n   *\n   * Notification: ```X{targetTemperature},{currentTemperature}```\n   *\n   * @param targetTemperature target temperature currently set\n   * @param currentTemperature current temperature\n   */\n  constructor(targetTemperature: number, currentTemperature: number) {\n    this.targetTemperature = targetTemperature;\n    this.currentTemperature = currentTemperature;\n  }\n}\n\n/**\n * List of interaction codes send in the Y notification by the controller.\n *\n * @readonly\n * @enum {number}\n */\nexport enum InteractionCode {\n  /**\n   * Interaction code send by the controller if a new recipe is receiver.\n   * Only send if there is no delayed heating timer used.\n   * Waits for user acknowledgement.\n   */\n  StartBrew = 1,\n  /**\n   * Warns the user to add the grains if the mash-in temperature is reached.\n   * Waits for user acknowledgement.\n   */\n  AddGrain,\n  /**\n   * Warns the user that sparging can being.\n   * Is skipped automatically, so that the controller goes to the FinishSparge interaction.\n   */\n  StartSparge,\n  /**\n   * If enabled, shows the sparge counter, if not, shows an alert to continue to the boil stage.\n   * Waits for user acknowledgement.\n   */\n  FinishSparge,\n  /**\n   * Shows an alert to start the boil timer. During this stage, the boil additions will also be shown.\n   * Waits for user acknowledgement.\n   */\n  StartBoil,\n  /**\n   * If a hop stand is added to the recipe, an alert is shown to start the hop stand timer.\n   * Waits for user acknowledgement.\n   */\n  StartHopStand,\n  /**\n   * If the boil timer ends, an alert to finish the session is shown.\n   * Waits for user acknowledgement.\n   */\n  FinishBrew\n}\n\n/**\n * Class containing the details of the Y notification.\n */\nexport class YStatus {\n  heatPower: boolean;\n  pumpStatus: boolean;\n  autoModeStatus: boolean;\n  stageRampStatus: boolean;\n  interactionModeStatus: boolean;\n  interactionCode: InteractionCode;\n  stageNumber: number;\n  delayedHeatMode: boolean;\n\n  /**\n   * Creates a new instance of the Y notification.\n   *\n   * Notification: ```Y{heatPower},{pumpStatus},{autoModeStatus},{stageRampStatus},{interactionModeStatus},{interactionCode},{stageNumber},{delayedHeatMode}```\n   *\n   * @param heatPower heating power output.\n   * @param pumpStatus pump status.\n   * @param autoModeStatus if true the controller is running an automated session.\n   * @param stageRampStatus if true, the controller is ramping to the new/next target temperature.\n   * @param interactionModeStatus if true, the controller is waiting for user interaction.\n   * @param interactionCode code indication the controller step.\n   * @param stageNumber stage number the controller currently is at.\n   * @param delayedHeatMode if true, the controller is running the delayed heating timer.\n   */\n  constructor(heatPower: boolean, pumpStatus: boolean, autoModeStatus: boolean, stageRampStatus: boolean,\n              interactionModeStatus: boolean, interactionCode: InteractionCode, stageNumber: number, delayedHeatMode: boolean) {\n    this.heatPower = heatPower;\n    this.pumpStatus = pumpStatus;\n    this.autoModeStatus = autoModeStatus;\n    this.stageRampStatus = stageRampStatus;\n    this.interactionModeStatus = interactionModeStatus;\n    this.interactionCode = interactionCode;\n    this.stageNumber = stageNumber;\n    this.delayedHeatMode = delayedHeatMode;\n  }\n}\n\n    \n\n\n\n\n                   \n\n\n\n\n                   \n    \n         result-matching \"\"\n        \n    \n    \n        No results matching \"\"\n    \n\n"},"classes/VStatus.html":{"url":"classes/VStatus.html","title":"class - VStatus","body":"\n                   \n\n\n\n\n\n\n\n\n\n\n\n\n  Classes\n  VStatus\n\n\n\n        \n            Info\n        \n        \n            Source\n        \n\n\n\n    \n        \n            File\n        \n        \n            projects/angular-grainfather-control/src/lib/grainfather.notifications.ts\n        \n\n            \n                Description\n            \n            \n                Class containing the details of the V notification.\n\n            \n\n\n\n\n            \n    Index\n    \n        \n                \n                    \n                        Properties\n                    \n                \n                \n                    \n                        \n                            \n                                units\n                            \n                            \n                                voltage\n                            \n                        \n                    \n                \n\n\n\n\n\n\n        \n    \n\n\n            \n    Constructor\n        \n            \n                \n                    \nconstructor(voltage: Voltage, units: Units)\n                    \n                \n                        \n                            \n                                Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:386\n                            \n                        \n\n                \n                    \n                            Creates a new instance of the V notification.\nNotification: V{voltage},{units}\n\n                            \n                                    Parameters :\n                                    \n                                        \n                                            \n                                                Name\n                                                    Type\n                                                Optional\n                                            \n                                        \n                                        \n                                                \n                                                        voltage\n                                                  \n                                                        \n                                                                        Voltage\n                                                        \n                                                  \n                                                    \n                                                            No\n                                                    \n                                                    \n                                                \n                                                \n                                                        units\n                                                  \n                                                        \n                                                                        Units\n                                                        \n                                                  \n                                                    \n                                                            No\n                                                    \n                                                    \n                                                \n                                        \n                                    \n                            \n                    \n                \n            \n        \n\n\n            \n    \n        \n            Properties\n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            units\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         Units\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:386\n                            \n                        \n\n\n            \n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            voltage\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         Voltage\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:385\n                            \n                        \n\n\n            \n        \n\n\n\n\n\n\n\n\n    \n\n\n    \n        import {EventEmitter, Output} from '@angular/core';\nimport {GrainFatherCommands, RecipeDetails} from './grainfather.commands';\n\n/**\n * Handler for notifications. Besides processing all incoming notifications, also the state of the controller is kept and updated.\n * Notifications are taken from https://github.com/kingpulsar/Grainfather-Bluetooth-Protocol\n *\n * Publishes events for the controller status as well as for each notification.\n */\nexport class GrainFatherNotifications {\n\n  @Output()\n  sessionStatus: EventEmitter = new EventEmitter();\n  @Output()\n  controllerStatus: EventEmitter = new EventEmitter();\n  @Output()\n  commandEmitter: EventEmitter = new EventEmitter();\n\n  recipeDetails: RecipeDetails;\n  timer: TStatus;\n  boilTemperature: number;\n  currentTemperature: number;\n\n  process(notificationLine: string): any {\n    // console.log(notificationLine);\n    const components = notificationLine.substring(1).split(',').slice(0, -1);\n    const type = notificationLine[0];\n\n    let notification: any = null;\n\n    switch (type) {\n      case 'A':\n        // Discard notice on display\n        this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n        break;\n\n      case 'C':\n        notification = new CStatus(parseFloat(components[0]));\n        this.boilTemperature = notification.boilTemperature;\n        break;\n\n      case 'F':\n        notification = new FStatus(components[0]);\n        break;\n\n      case 'I':\n        notification = new IStatus(components[0]);\n        break;\n\n      case 'T':\n        notification = new TStatus(\n          components[0] === '1',\n          parseInt(components[1], 10),\n          parseInt(components[2], 10),\n          parseInt(components[3], 10)\n        );\n        this.timer = notification;\n        break;\n\n      case 'V':\n        notification = new VStatus(\n          parseInt(components[0], 10),\n          parseInt(components[1], 10)\n        );\n        break;\n\n      case 'W':\n        notification = new WStatus(\n          parseInt(components[0], 10),\n          components[1] === '1',\n          components[2] === '1',\n          components[3] === '1',\n          components[4] === '1',\n          components[5] === '1'\n        );\n        break;\n\n      case 'X':\n        notification = new XStatus(\n          parseFloat(components[0]),\n          parseFloat(components[1])\n        );\n        this.currentTemperature = notification.currentTemperature;\n        break;\n\n      case 'Y':\n        notification = new YStatus(\n          components[0] === '1',\n          components[1] === '1',\n          components[2] === '1',\n          components[3] === '1',\n          components[4] === '1',\n          parseInt(components[5], 10),\n          parseInt(components[6], 10),\n          components[7] === '1'\n        );\n\n        this.parseStatus(notification);\n        break;\n    }\n\n    this.controllerStatus.emit(notification);\n  }\n\n  setRecipeDetails(recipeDetails: RecipeDetails) {\n    this.recipeDetails = recipeDetails;\n  }\n\n  /**\n   * Parses the yStatus message to update the session state.\n   *\n   * Requires recipe details to be able to determine the state.\n   *\n   * Uses the state to decrease the required interaction with the controller as much as possible.\n   * Currently the following interactions are needed:\n   *  - Start session after sending recipe without delay\n   *  - Add grain alarm\n   *  - Sparge alarm\n   *  - Start boil timer\n   *  - Start hopstand timer\n   *  - Finish session\n   *\n   *  It also sends notifications with:\n   *   - Current step, see SessionState\n   *   - Time left for step, for delay, mash and boil\n   *   - If a boil addition needs to be added, this will only be one event for each addition\n   *\n   * @param status current YStatus.\n   */\n  parseStatus(status: YStatus) {\n    const sessionStatus = new BrewSessionState(SessionState.Idle);\n\n    if (status && status.autoModeStatus) {\n      if (this.recipeDetails) {\n        const stage = status.stageNumber;\n        const interactionCode = status.interactionCode;\n        const mashSteps = this.recipeDetails.mashSteps.length;\n\n        if (stage === 0) {\n          if (interactionCode === InteractionCode.StartBrew) {\n            sessionStatus.state = SessionState.RecipeReceived;\n          }\n          if (status.delayedHeatMode) {\n            sessionStatus.state = SessionState.DelayedHeating;\n            sessionStatus.timerMinutesLeft = this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n          }\n        } else if (stage > 0 && stage  0 ?\n              this.timer.timerMinutesLeft - 1  : this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n          }\n        } else if (stage === mashSteps + 1) {\n          if (interactionCode === InteractionCode.StartSparge) {\n            sessionStatus.state = SessionState.StartSparge;\n            // Skip this stage and go to next\n            this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n          } else if (interactionCode === InteractionCode.FinishSparge) {\n            sessionStatus.state = SessionState.FinishSparge;\n          }\n        } else if (stage === mashSteps + 2) {\n          if (interactionCode === InteractionCode.StartBoil) {\n            sessionStatus.state = SessionState.StartBoil;\n          } else if (status.stageRampStatus) {\n            sessionStatus.state = SessionState.BoilRamp;\n            // Use actual temp and boil temp to determine if we are there\n            // then emit press command to get to StartBoil\n            if (this.currentTemperature >= this.boilTemperature) {\n              this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n            }\n          } else {\n            sessionStatus.state = SessionState.Boil;\n            sessionStatus.timerMinutesLeft = this.timer.timerMinutesLeft > 0 ?\n              this.timer.timerMinutesLeft - 1  : this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n            // If boil is done, we need to move the controller to the next stage\n            if (this.timer.timerMinutesLeft === 0) {\n              this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n            }\n\n            this.recipeDetails.boilSteps.forEach(step => {\n              if (this.timer.timerMinutesLeft === step.time && !step.sent) {\n                sessionStatus.addAdditionName = step.name;\n                sessionStatus.addAdditionTime = step.time;\n                step.sent = true;\n              }\n            });\n          }\n        } else if (stage === mashSteps + 3 || stage === mashSteps + 4) {\n          if (interactionCode === InteractionCode.FinishBrew) {\n            sessionStatus.state = SessionState.Finished;\n          } else if (interactionCode === InteractionCode.StartHopStand) {\n            sessionStatus.state = SessionState.HopStandAdd;\n          } else {\n            sessionStatus.state = SessionState.HopStand;\n            sessionStatus.timerMinutesLeft = this.timer.timerMinutesLeft > 0 ?\n              this.timer.timerMinutesLeft - 1  : this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n          }\n        }\n      } else {\n        sessionStatus.state = SessionState.Unknown;\n      }\n    }\n\n    this.sessionStatus.emit(sessionStatus);\n  }\n}\n\n/**\n * State of a brewing session.\n *\n * If no session is in progress 'Idle' is used. If no recipe details are set, 'Unknown' is used.\n */\nexport enum SessionState {\n  Idle,\n  RecipeReceived,\n  DelayedHeating,\n  MashRamp,\n  Mash,\n  AddGrain,\n  StartSparge,\n  FinishSparge,\n  BoilRamp,\n  StartBoil,\n  Boil,\n  HopStandAdd,\n  HopStand,\n  Finished,\n  Unknown\n}\n\n/**\n * Describes a brewing session.\n */\nexport class BrewSessionState {\n  state: SessionState;\n  timerMinutesLeft: number;\n  timerSecondsLeft: number;\n  addAdditionName: string;\n  addAdditionTime: number;\n\n  /**\n   * Creates a new brew session state.\n   *\n   * Since the controller handles minutes as rounded up, 1 minute is substracted to have the correct number of minutes.\n   * For example, a timer with 1 minute and 30 seconds actually has 30 seconds left. So to view it as 0:30, it needs to be updated.\n   *\n   * @param state current state of brewing session\n   * @param timerMinutesLeft minutes left on current timer\n   * @param timerSecondsLeft seconds left on current timer\n   * @param addAdditionName name of the addition to add\n   * @param addAdditionTime time at which the addition needs to be added\n   */\n  constructor(state: SessionState, timerMinutesLeft: number= 0, timerSecondsLeft: number = 0, addAdditionName: string = '',\n              addAdditionTime: number = 0) {\n    this.state = state;\n    this.timerMinutesLeft = timerMinutesLeft;\n    this.timerSecondsLeft = timerSecondsLeft;\n    this.addAdditionName = addAdditionName;\n    this.addAdditionTime = addAdditionTime;\n  }\n}\n\n/**\n * Class containing the details of the C notification.\n */\nexport class CStatus {\n  boilTemperature: number;\n\n  /**\n   * Creates a new instance of the C notification.\n   *\n   * Notification: ```C{boilTemperature}```\n   *\n   * @param boilTemperature\n   */\n  constructor(boilTemperature: number) {\n    this.boilTemperature = boilTemperature;\n  }\n}\n\n/**\n * Class containing the details of the F notification.\n */\nexport class FStatus {\n  firmwareVersion: string;\n\n  /**\n   * Creates a new instance of the F notification.\n   *\n   * Notification: ```F{firmwareVersion}```\n   *\n   * @param firmwareVersion\n   */\n  constructor(firmwareVersion: string) {\n    this.firmwareVersion = firmwareVersion;\n  }\n}\n\n/**\n * Class containing the details of the I notification.\n */\nexport class IStatus {\n  interactionCode: string;\n\n  /**\n   * Creates a new instance of the I notification.\n   *\n   * Notification: ```I{interactionCode}```\n   *\n   * @param interactionCode\n   */\n  constructor(interactionCode: string) {\n    this.interactionCode = interactionCode;\n  }\n}\n\n/**\n * Class containing the details of the T notification.\n */\nexport class TStatus {\n  timerActive: boolean;\n  timerMinutesLeft: number;\n  timerTotalStartTime: number;\n  timerSecondsLeft: number;\n\n  /**\n   * Creates a new instance of the T notification.\n   *\n   * Notification: ```T{timerActive},{timerMinutesLeft},{timerTotalStartTime},{timerSecondsLeft}```\n   *\n   * @param timerActive\n   * @param timerMinutesLeft\n   * @param timerTotalStartTime\n   * @param timerSecondsLeft\n   */\n  constructor(timerActive: boolean, timerMinutesLeft: number, timerTotalStartTime: number, timerSecondsLeft: number) {\n    this.timerActive = timerActive;\n    this.timerMinutesLeft = timerMinutesLeft;\n    this.timerTotalStartTime = timerTotalStartTime;\n    this.timerSecondsLeft = timerSecondsLeft;\n  }\n}\n\n/**\n * Describes the voltage of the controller\n */\nexport enum Voltage {\n  V230 = 0,\n  V110\n}\n\n/**\n * Describes the used units.\n */\nexport enum Units {\n  Fahrenheit = 0,\n  Celsius\n}\n\n/**\n * Class containing the details of the V notification.\n */\nexport class VStatus {\n  voltage: Voltage;\n  units: Units;\n\n  /**\n   * Creates a new instance of the V notification.\n   *\n   * Notification: ```V{voltage},{units}```\n   *\n   * @param voltage\n   * @param units\n   */\n  constructor(voltage: Voltage, units: Units) {\n    this.voltage = voltage;\n    this.units = units;\n  }\n}\n\n/**\n * Class containing the details of the W notification.\n */\nexport class WStatus {\n  heatPowerOutputPercentage: number;\n  isTimerPaused: boolean;\n  stepMashMode: boolean;\n  isRecipeInterrupted: boolean;\n  manualPowerMode: boolean;\n  spargeWaterAlertDisplayed: boolean;\n\n  /**\n   * Creates a new instance of the W notification.\n   *\n   * Notification: ```W{heatPowerOutputPercentage},{isTimerPaused},{stepMashMode},{isRecipeInterrupted},{manualPowerMode},{spargeWaterAlertDisplayed}```\n   *\n   * @param heatPowerOutputPercentage heating output\n   * @param isTimerPaused if true, the timer is paused\n   * @param stepMashMode if true, step mash is enabled??\n   * @param isRecipeInterrupted if true, the previous running recipe was interrupted, eg due to power loss\n   * @param manualPowerMode if true, manual power mode is enabled\n   * @param spargeWaterAlertDisplayed if true, the sparge water heating alert is shown\n   */\n  constructor(heatPowerOutputPercentage: number, isTimerPaused: boolean, stepMashMode: boolean,\n              isRecipeInterrupted: boolean, manualPowerMode: boolean, spargeWaterAlertDisplayed: boolean) {\n    this.heatPowerOutputPercentage = heatPowerOutputPercentage;\n    this.isTimerPaused = isTimerPaused;\n    this.stepMashMode = stepMashMode;\n    this.isRecipeInterrupted = isRecipeInterrupted;\n    this.manualPowerMode = manualPowerMode;\n    this.spargeWaterAlertDisplayed = spargeWaterAlertDisplayed;\n  }\n}\n\n/**\n * Class containing the details of the X notification.\n */\nexport class XStatus {\n  targetTemperature: number;\n  currentTemperature: number;\n\n  /**\n   * Creates a new instance of the X notification.\n   *\n   * Notification: ```X{targetTemperature},{currentTemperature}```\n   *\n   * @param targetTemperature target temperature currently set\n   * @param currentTemperature current temperature\n   */\n  constructor(targetTemperature: number, currentTemperature: number) {\n    this.targetTemperature = targetTemperature;\n    this.currentTemperature = currentTemperature;\n  }\n}\n\n/**\n * List of interaction codes send in the Y notification by the controller.\n *\n * @readonly\n * @enum {number}\n */\nexport enum InteractionCode {\n  /**\n   * Interaction code send by the controller if a new recipe is receiver.\n   * Only send if there is no delayed heating timer used.\n   * Waits for user acknowledgement.\n   */\n  StartBrew = 1,\n  /**\n   * Warns the user to add the grains if the mash-in temperature is reached.\n   * Waits for user acknowledgement.\n   */\n  AddGrain,\n  /**\n   * Warns the user that sparging can being.\n   * Is skipped automatically, so that the controller goes to the FinishSparge interaction.\n   */\n  StartSparge,\n  /**\n   * If enabled, shows the sparge counter, if not, shows an alert to continue to the boil stage.\n   * Waits for user acknowledgement.\n   */\n  FinishSparge,\n  /**\n   * Shows an alert to start the boil timer. During this stage, the boil additions will also be shown.\n   * Waits for user acknowledgement.\n   */\n  StartBoil,\n  /**\n   * If a hop stand is added to the recipe, an alert is shown to start the hop stand timer.\n   * Waits for user acknowledgement.\n   */\n  StartHopStand,\n  /**\n   * If the boil timer ends, an alert to finish the session is shown.\n   * Waits for user acknowledgement.\n   */\n  FinishBrew\n}\n\n/**\n * Class containing the details of the Y notification.\n */\nexport class YStatus {\n  heatPower: boolean;\n  pumpStatus: boolean;\n  autoModeStatus: boolean;\n  stageRampStatus: boolean;\n  interactionModeStatus: boolean;\n  interactionCode: InteractionCode;\n  stageNumber: number;\n  delayedHeatMode: boolean;\n\n  /**\n   * Creates a new instance of the Y notification.\n   *\n   * Notification: ```Y{heatPower},{pumpStatus},{autoModeStatus},{stageRampStatus},{interactionModeStatus},{interactionCode},{stageNumber},{delayedHeatMode}```\n   *\n   * @param heatPower heating power output.\n   * @param pumpStatus pump status.\n   * @param autoModeStatus if true the controller is running an automated session.\n   * @param stageRampStatus if true, the controller is ramping to the new/next target temperature.\n   * @param interactionModeStatus if true, the controller is waiting for user interaction.\n   * @param interactionCode code indication the controller step.\n   * @param stageNumber stage number the controller currently is at.\n   * @param delayedHeatMode if true, the controller is running the delayed heating timer.\n   */\n  constructor(heatPower: boolean, pumpStatus: boolean, autoModeStatus: boolean, stageRampStatus: boolean,\n              interactionModeStatus: boolean, interactionCode: InteractionCode, stageNumber: number, delayedHeatMode: boolean) {\n    this.heatPower = heatPower;\n    this.pumpStatus = pumpStatus;\n    this.autoModeStatus = autoModeStatus;\n    this.stageRampStatus = stageRampStatus;\n    this.interactionModeStatus = interactionModeStatus;\n    this.interactionCode = interactionCode;\n    this.stageNumber = stageNumber;\n    this.delayedHeatMode = delayedHeatMode;\n  }\n}\n\n    \n\n\n\n\n                   \n\n\n\n\n                   \n    \n         result-matching \"\"\n        \n    \n    \n        No results matching \"\"\n    \n\n"},"classes/WStatus.html":{"url":"classes/WStatus.html","title":"class - WStatus","body":"\n                   \n\n\n\n\n\n\n\n\n\n\n\n\n  Classes\n  WStatus\n\n\n\n        \n            Info\n        \n        \n            Source\n        \n\n\n\n    \n        \n            File\n        \n        \n            projects/angular-grainfather-control/src/lib/grainfather.notifications.ts\n        \n\n            \n                Description\n            \n            \n                Class containing the details of the W notification.\n\n            \n\n\n\n\n            \n    Index\n    \n        \n                \n                    \n                        Properties\n                    \n                \n                \n                    \n                        \n                            \n                                heatPowerOutputPercentage\n                            \n                            \n                                isRecipeInterrupted\n                            \n                            \n                                isTimerPaused\n                            \n                            \n                                manualPowerMode\n                            \n                            \n                                spargeWaterAlertDisplayed\n                            \n                            \n                                stepMashMode\n                            \n                        \n                    \n                \n\n\n\n\n\n\n        \n    \n\n\n            \n    Constructor\n        \n            \n                \n                    \nconstructor(heatPowerOutputPercentage: number, isTimerPaused: boolean, stepMashMode: boolean, isRecipeInterrupted: boolean, manualPowerMode: boolean, spargeWaterAlertDisplayed: boolean)\n                    \n                \n                        \n                            \n                                Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:411\n                            \n                        \n\n                \n                    \n                            Creates a new instance of the W notification.\nNotification: W{heatPowerOutputPercentage},{isTimerPaused},{stepMashMode},{isRecipeInterrupted},{manualPowerMode},{spargeWaterAlertDisplayed}\n\n                            \n                                    Parameters :\n                                    \n                                        \n                                            \n                                                Name\n                                                    Type\n                                                Optional\n                                                    Description\n                                            \n                                        \n                                        \n                                                \n                                                        heatPowerOutputPercentage\n                                                  \n                                                        \n                                                                        number\n                                                        \n                                                  \n                                                    \n                                                            No\n                                                    \n                                                    \n                                                        \n                                                                heating output\n\n                                                        \n                                                \n                                                \n                                                        isTimerPaused\n                                                  \n                                                        \n                                                                        boolean\n                                                        \n                                                  \n                                                    \n                                                            No\n                                                    \n                                                    \n                                                        \n                                                                if true, the timer is paused\n\n                                                        \n                                                \n                                                \n                                                        stepMashMode\n                                                  \n                                                        \n                                                                        boolean\n                                                        \n                                                  \n                                                    \n                                                            No\n                                                    \n                                                    \n                                                        \n                                                                if true, step mash is enabled??\n\n                                                        \n                                                \n                                                \n                                                        isRecipeInterrupted\n                                                  \n                                                        \n                                                                        boolean\n                                                        \n                                                  \n                                                    \n                                                            No\n                                                    \n                                                    \n                                                        \n                                                                if true, the previous running recipe was interrupted, eg due to power loss\n\n                                                        \n                                                \n                                                \n                                                        manualPowerMode\n                                                  \n                                                        \n                                                                        boolean\n                                                        \n                                                  \n                                                    \n                                                            No\n                                                    \n                                                    \n                                                        \n                                                                if true, manual power mode is enabled\n\n                                                        \n                                                \n                                                \n                                                        spargeWaterAlertDisplayed\n                                                  \n                                                        \n                                                                        boolean\n                                                        \n                                                  \n                                                    \n                                                            No\n                                                    \n                                                    \n                                                        \n                                                                if true, the sparge water heating alert is shown\n\n                                                        \n                                                \n                                        \n                                    \n                            \n                    \n                \n            \n        \n\n\n            \n    \n        \n            Properties\n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            heatPowerOutputPercentage\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         number\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:406\n                            \n                        \n\n\n            \n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            isRecipeInterrupted\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         boolean\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:409\n                            \n                        \n\n\n            \n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            isTimerPaused\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         boolean\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:407\n                            \n                        \n\n\n            \n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            manualPowerMode\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         boolean\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:410\n                            \n                        \n\n\n            \n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            spargeWaterAlertDisplayed\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         boolean\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:411\n                            \n                        \n\n\n            \n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            stepMashMode\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         boolean\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:408\n                            \n                        \n\n\n            \n        \n\n\n\n\n\n\n\n\n    \n\n\n    \n        import {EventEmitter, Output} from '@angular/core';\nimport {GrainFatherCommands, RecipeDetails} from './grainfather.commands';\n\n/**\n * Handler for notifications. Besides processing all incoming notifications, also the state of the controller is kept and updated.\n * Notifications are taken from https://github.com/kingpulsar/Grainfather-Bluetooth-Protocol\n *\n * Publishes events for the controller status as well as for each notification.\n */\nexport class GrainFatherNotifications {\n\n  @Output()\n  sessionStatus: EventEmitter = new EventEmitter();\n  @Output()\n  controllerStatus: EventEmitter = new EventEmitter();\n  @Output()\n  commandEmitter: EventEmitter = new EventEmitter();\n\n  recipeDetails: RecipeDetails;\n  timer: TStatus;\n  boilTemperature: number;\n  currentTemperature: number;\n\n  process(notificationLine: string): any {\n    // console.log(notificationLine);\n    const components = notificationLine.substring(1).split(',').slice(0, -1);\n    const type = notificationLine[0];\n\n    let notification: any = null;\n\n    switch (type) {\n      case 'A':\n        // Discard notice on display\n        this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n        break;\n\n      case 'C':\n        notification = new CStatus(parseFloat(components[0]));\n        this.boilTemperature = notification.boilTemperature;\n        break;\n\n      case 'F':\n        notification = new FStatus(components[0]);\n        break;\n\n      case 'I':\n        notification = new IStatus(components[0]);\n        break;\n\n      case 'T':\n        notification = new TStatus(\n          components[0] === '1',\n          parseInt(components[1], 10),\n          parseInt(components[2], 10),\n          parseInt(components[3], 10)\n        );\n        this.timer = notification;\n        break;\n\n      case 'V':\n        notification = new VStatus(\n          parseInt(components[0], 10),\n          parseInt(components[1], 10)\n        );\n        break;\n\n      case 'W':\n        notification = new WStatus(\n          parseInt(components[0], 10),\n          components[1] === '1',\n          components[2] === '1',\n          components[3] === '1',\n          components[4] === '1',\n          components[5] === '1'\n        );\n        break;\n\n      case 'X':\n        notification = new XStatus(\n          parseFloat(components[0]),\n          parseFloat(components[1])\n        );\n        this.currentTemperature = notification.currentTemperature;\n        break;\n\n      case 'Y':\n        notification = new YStatus(\n          components[0] === '1',\n          components[1] === '1',\n          components[2] === '1',\n          components[3] === '1',\n          components[4] === '1',\n          parseInt(components[5], 10),\n          parseInt(components[6], 10),\n          components[7] === '1'\n        );\n\n        this.parseStatus(notification);\n        break;\n    }\n\n    this.controllerStatus.emit(notification);\n  }\n\n  setRecipeDetails(recipeDetails: RecipeDetails) {\n    this.recipeDetails = recipeDetails;\n  }\n\n  /**\n   * Parses the yStatus message to update the session state.\n   *\n   * Requires recipe details to be able to determine the state.\n   *\n   * Uses the state to decrease the required interaction with the controller as much as possible.\n   * Currently the following interactions are needed:\n   *  - Start session after sending recipe without delay\n   *  - Add grain alarm\n   *  - Sparge alarm\n   *  - Start boil timer\n   *  - Start hopstand timer\n   *  - Finish session\n   *\n   *  It also sends notifications with:\n   *   - Current step, see SessionState\n   *   - Time left for step, for delay, mash and boil\n   *   - If a boil addition needs to be added, this will only be one event for each addition\n   *\n   * @param status current YStatus.\n   */\n  parseStatus(status: YStatus) {\n    const sessionStatus = new BrewSessionState(SessionState.Idle);\n\n    if (status && status.autoModeStatus) {\n      if (this.recipeDetails) {\n        const stage = status.stageNumber;\n        const interactionCode = status.interactionCode;\n        const mashSteps = this.recipeDetails.mashSteps.length;\n\n        if (stage === 0) {\n          if (interactionCode === InteractionCode.StartBrew) {\n            sessionStatus.state = SessionState.RecipeReceived;\n          }\n          if (status.delayedHeatMode) {\n            sessionStatus.state = SessionState.DelayedHeating;\n            sessionStatus.timerMinutesLeft = this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n          }\n        } else if (stage > 0 && stage  0 ?\n              this.timer.timerMinutesLeft - 1  : this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n          }\n        } else if (stage === mashSteps + 1) {\n          if (interactionCode === InteractionCode.StartSparge) {\n            sessionStatus.state = SessionState.StartSparge;\n            // Skip this stage and go to next\n            this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n          } else if (interactionCode === InteractionCode.FinishSparge) {\n            sessionStatus.state = SessionState.FinishSparge;\n          }\n        } else if (stage === mashSteps + 2) {\n          if (interactionCode === InteractionCode.StartBoil) {\n            sessionStatus.state = SessionState.StartBoil;\n          } else if (status.stageRampStatus) {\n            sessionStatus.state = SessionState.BoilRamp;\n            // Use actual temp and boil temp to determine if we are there\n            // then emit press command to get to StartBoil\n            if (this.currentTemperature >= this.boilTemperature) {\n              this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n            }\n          } else {\n            sessionStatus.state = SessionState.Boil;\n            sessionStatus.timerMinutesLeft = this.timer.timerMinutesLeft > 0 ?\n              this.timer.timerMinutesLeft - 1  : this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n            // If boil is done, we need to move the controller to the next stage\n            if (this.timer.timerMinutesLeft === 0) {\n              this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n            }\n\n            this.recipeDetails.boilSteps.forEach(step => {\n              if (this.timer.timerMinutesLeft === step.time && !step.sent) {\n                sessionStatus.addAdditionName = step.name;\n                sessionStatus.addAdditionTime = step.time;\n                step.sent = true;\n              }\n            });\n          }\n        } else if (stage === mashSteps + 3 || stage === mashSteps + 4) {\n          if (interactionCode === InteractionCode.FinishBrew) {\n            sessionStatus.state = SessionState.Finished;\n          } else if (interactionCode === InteractionCode.StartHopStand) {\n            sessionStatus.state = SessionState.HopStandAdd;\n          } else {\n            sessionStatus.state = SessionState.HopStand;\n            sessionStatus.timerMinutesLeft = this.timer.timerMinutesLeft > 0 ?\n              this.timer.timerMinutesLeft - 1  : this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n          }\n        }\n      } else {\n        sessionStatus.state = SessionState.Unknown;\n      }\n    }\n\n    this.sessionStatus.emit(sessionStatus);\n  }\n}\n\n/**\n * State of a brewing session.\n *\n * If no session is in progress 'Idle' is used. If no recipe details are set, 'Unknown' is used.\n */\nexport enum SessionState {\n  Idle,\n  RecipeReceived,\n  DelayedHeating,\n  MashRamp,\n  Mash,\n  AddGrain,\n  StartSparge,\n  FinishSparge,\n  BoilRamp,\n  StartBoil,\n  Boil,\n  HopStandAdd,\n  HopStand,\n  Finished,\n  Unknown\n}\n\n/**\n * Describes a brewing session.\n */\nexport class BrewSessionState {\n  state: SessionState;\n  timerMinutesLeft: number;\n  timerSecondsLeft: number;\n  addAdditionName: string;\n  addAdditionTime: number;\n\n  /**\n   * Creates a new brew session state.\n   *\n   * Since the controller handles minutes as rounded up, 1 minute is substracted to have the correct number of minutes.\n   * For example, a timer with 1 minute and 30 seconds actually has 30 seconds left. So to view it as 0:30, it needs to be updated.\n   *\n   * @param state current state of brewing session\n   * @param timerMinutesLeft minutes left on current timer\n   * @param timerSecondsLeft seconds left on current timer\n   * @param addAdditionName name of the addition to add\n   * @param addAdditionTime time at which the addition needs to be added\n   */\n  constructor(state: SessionState, timerMinutesLeft: number= 0, timerSecondsLeft: number = 0, addAdditionName: string = '',\n              addAdditionTime: number = 0) {\n    this.state = state;\n    this.timerMinutesLeft = timerMinutesLeft;\n    this.timerSecondsLeft = timerSecondsLeft;\n    this.addAdditionName = addAdditionName;\n    this.addAdditionTime = addAdditionTime;\n  }\n}\n\n/**\n * Class containing the details of the C notification.\n */\nexport class CStatus {\n  boilTemperature: number;\n\n  /**\n   * Creates a new instance of the C notification.\n   *\n   * Notification: ```C{boilTemperature}```\n   *\n   * @param boilTemperature\n   */\n  constructor(boilTemperature: number) {\n    this.boilTemperature = boilTemperature;\n  }\n}\n\n/**\n * Class containing the details of the F notification.\n */\nexport class FStatus {\n  firmwareVersion: string;\n\n  /**\n   * Creates a new instance of the F notification.\n   *\n   * Notification: ```F{firmwareVersion}```\n   *\n   * @param firmwareVersion\n   */\n  constructor(firmwareVersion: string) {\n    this.firmwareVersion = firmwareVersion;\n  }\n}\n\n/**\n * Class containing the details of the I notification.\n */\nexport class IStatus {\n  interactionCode: string;\n\n  /**\n   * Creates a new instance of the I notification.\n   *\n   * Notification: ```I{interactionCode}```\n   *\n   * @param interactionCode\n   */\n  constructor(interactionCode: string) {\n    this.interactionCode = interactionCode;\n  }\n}\n\n/**\n * Class containing the details of the T notification.\n */\nexport class TStatus {\n  timerActive: boolean;\n  timerMinutesLeft: number;\n  timerTotalStartTime: number;\n  timerSecondsLeft: number;\n\n  /**\n   * Creates a new instance of the T notification.\n   *\n   * Notification: ```T{timerActive},{timerMinutesLeft},{timerTotalStartTime},{timerSecondsLeft}```\n   *\n   * @param timerActive\n   * @param timerMinutesLeft\n   * @param timerTotalStartTime\n   * @param timerSecondsLeft\n   */\n  constructor(timerActive: boolean, timerMinutesLeft: number, timerTotalStartTime: number, timerSecondsLeft: number) {\n    this.timerActive = timerActive;\n    this.timerMinutesLeft = timerMinutesLeft;\n    this.timerTotalStartTime = timerTotalStartTime;\n    this.timerSecondsLeft = timerSecondsLeft;\n  }\n}\n\n/**\n * Describes the voltage of the controller\n */\nexport enum Voltage {\n  V230 = 0,\n  V110\n}\n\n/**\n * Describes the used units.\n */\nexport enum Units {\n  Fahrenheit = 0,\n  Celsius\n}\n\n/**\n * Class containing the details of the V notification.\n */\nexport class VStatus {\n  voltage: Voltage;\n  units: Units;\n\n  /**\n   * Creates a new instance of the V notification.\n   *\n   * Notification: ```V{voltage},{units}```\n   *\n   * @param voltage\n   * @param units\n   */\n  constructor(voltage: Voltage, units: Units) {\n    this.voltage = voltage;\n    this.units = units;\n  }\n}\n\n/**\n * Class containing the details of the W notification.\n */\nexport class WStatus {\n  heatPowerOutputPercentage: number;\n  isTimerPaused: boolean;\n  stepMashMode: boolean;\n  isRecipeInterrupted: boolean;\n  manualPowerMode: boolean;\n  spargeWaterAlertDisplayed: boolean;\n\n  /**\n   * Creates a new instance of the W notification.\n   *\n   * Notification: ```W{heatPowerOutputPercentage},{isTimerPaused},{stepMashMode},{isRecipeInterrupted},{manualPowerMode},{spargeWaterAlertDisplayed}```\n   *\n   * @param heatPowerOutputPercentage heating output\n   * @param isTimerPaused if true, the timer is paused\n   * @param stepMashMode if true, step mash is enabled??\n   * @param isRecipeInterrupted if true, the previous running recipe was interrupted, eg due to power loss\n   * @param manualPowerMode if true, manual power mode is enabled\n   * @param spargeWaterAlertDisplayed if true, the sparge water heating alert is shown\n   */\n  constructor(heatPowerOutputPercentage: number, isTimerPaused: boolean, stepMashMode: boolean,\n              isRecipeInterrupted: boolean, manualPowerMode: boolean, spargeWaterAlertDisplayed: boolean) {\n    this.heatPowerOutputPercentage = heatPowerOutputPercentage;\n    this.isTimerPaused = isTimerPaused;\n    this.stepMashMode = stepMashMode;\n    this.isRecipeInterrupted = isRecipeInterrupted;\n    this.manualPowerMode = manualPowerMode;\n    this.spargeWaterAlertDisplayed = spargeWaterAlertDisplayed;\n  }\n}\n\n/**\n * Class containing the details of the X notification.\n */\nexport class XStatus {\n  targetTemperature: number;\n  currentTemperature: number;\n\n  /**\n   * Creates a new instance of the X notification.\n   *\n   * Notification: ```X{targetTemperature},{currentTemperature}```\n   *\n   * @param targetTemperature target temperature currently set\n   * @param currentTemperature current temperature\n   */\n  constructor(targetTemperature: number, currentTemperature: number) {\n    this.targetTemperature = targetTemperature;\n    this.currentTemperature = currentTemperature;\n  }\n}\n\n/**\n * List of interaction codes send in the Y notification by the controller.\n *\n * @readonly\n * @enum {number}\n */\nexport enum InteractionCode {\n  /**\n   * Interaction code send by the controller if a new recipe is receiver.\n   * Only send if there is no delayed heating timer used.\n   * Waits for user acknowledgement.\n   */\n  StartBrew = 1,\n  /**\n   * Warns the user to add the grains if the mash-in temperature is reached.\n   * Waits for user acknowledgement.\n   */\n  AddGrain,\n  /**\n   * Warns the user that sparging can being.\n   * Is skipped automatically, so that the controller goes to the FinishSparge interaction.\n   */\n  StartSparge,\n  /**\n   * If enabled, shows the sparge counter, if not, shows an alert to continue to the boil stage.\n   * Waits for user acknowledgement.\n   */\n  FinishSparge,\n  /**\n   * Shows an alert to start the boil timer. During this stage, the boil additions will also be shown.\n   * Waits for user acknowledgement.\n   */\n  StartBoil,\n  /**\n   * If a hop stand is added to the recipe, an alert is shown to start the hop stand timer.\n   * Waits for user acknowledgement.\n   */\n  StartHopStand,\n  /**\n   * If the boil timer ends, an alert to finish the session is shown.\n   * Waits for user acknowledgement.\n   */\n  FinishBrew\n}\n\n/**\n * Class containing the details of the Y notification.\n */\nexport class YStatus {\n  heatPower: boolean;\n  pumpStatus: boolean;\n  autoModeStatus: boolean;\n  stageRampStatus: boolean;\n  interactionModeStatus: boolean;\n  interactionCode: InteractionCode;\n  stageNumber: number;\n  delayedHeatMode: boolean;\n\n  /**\n   * Creates a new instance of the Y notification.\n   *\n   * Notification: ```Y{heatPower},{pumpStatus},{autoModeStatus},{stageRampStatus},{interactionModeStatus},{interactionCode},{stageNumber},{delayedHeatMode}```\n   *\n   * @param heatPower heating power output.\n   * @param pumpStatus pump status.\n   * @param autoModeStatus if true the controller is running an automated session.\n   * @param stageRampStatus if true, the controller is ramping to the new/next target temperature.\n   * @param interactionModeStatus if true, the controller is waiting for user interaction.\n   * @param interactionCode code indication the controller step.\n   * @param stageNumber stage number the controller currently is at.\n   * @param delayedHeatMode if true, the controller is running the delayed heating timer.\n   */\n  constructor(heatPower: boolean, pumpStatus: boolean, autoModeStatus: boolean, stageRampStatus: boolean,\n              interactionModeStatus: boolean, interactionCode: InteractionCode, stageNumber: number, delayedHeatMode: boolean) {\n    this.heatPower = heatPower;\n    this.pumpStatus = pumpStatus;\n    this.autoModeStatus = autoModeStatus;\n    this.stageRampStatus = stageRampStatus;\n    this.interactionModeStatus = interactionModeStatus;\n    this.interactionCode = interactionCode;\n    this.stageNumber = stageNumber;\n    this.delayedHeatMode = delayedHeatMode;\n  }\n}\n\n    \n\n\n\n\n                   \n\n\n\n\n                   \n    \n         result-matching \"\"\n        \n    \n    \n        No results matching \"\"\n    \n\n"},"classes/XStatus.html":{"url":"classes/XStatus.html","title":"class - XStatus","body":"\n                   \n\n\n\n\n\n\n\n\n\n\n\n\n  Classes\n  XStatus\n\n\n\n        \n            Info\n        \n        \n            Source\n        \n\n\n\n    \n        \n            File\n        \n        \n            projects/angular-grainfather-control/src/lib/grainfather.notifications.ts\n        \n\n            \n                Description\n            \n            \n                Class containing the details of the X notification.\n\n            \n\n\n\n\n            \n    Index\n    \n        \n                \n                    \n                        Properties\n                    \n                \n                \n                    \n                        \n                            \n                                currentTemperature\n                            \n                            \n                                targetTemperature\n                            \n                        \n                    \n                \n\n\n\n\n\n\n        \n    \n\n\n            \n    Constructor\n        \n            \n                \n                    \nconstructor(targetTemperature: number, currentTemperature: number)\n                    \n                \n                        \n                            \n                                Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:441\n                            \n                        \n\n                \n                    \n                            Creates a new instance of the X notification.\nNotification: X{targetTemperature},{currentTemperature}\n\n                            \n                                    Parameters :\n                                    \n                                        \n                                            \n                                                Name\n                                                    Type\n                                                Optional\n                                                    Description\n                                            \n                                        \n                                        \n                                                \n                                                        targetTemperature\n                                                  \n                                                        \n                                                                        number\n                                                        \n                                                  \n                                                    \n                                                            No\n                                                    \n                                                    \n                                                        \n                                                                target temperature currently set\n\n                                                        \n                                                \n                                                \n                                                        currentTemperature\n                                                  \n                                                        \n                                                                        number\n                                                        \n                                                  \n                                                    \n                                                            No\n                                                    \n                                                    \n                                                        \n                                                                current temperature\n\n                                                        \n                                                \n                                        \n                                    \n                            \n                    \n                \n            \n        \n\n\n            \n    \n        \n            Properties\n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            currentTemperature\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         number\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:441\n                            \n                        \n\n\n            \n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            targetTemperature\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         number\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:440\n                            \n                        \n\n\n            \n        \n\n\n\n\n\n\n\n\n    \n\n\n    \n        import {EventEmitter, Output} from '@angular/core';\nimport {GrainFatherCommands, RecipeDetails} from './grainfather.commands';\n\n/**\n * Handler for notifications. Besides processing all incoming notifications, also the state of the controller is kept and updated.\n * Notifications are taken from https://github.com/kingpulsar/Grainfather-Bluetooth-Protocol\n *\n * Publishes events for the controller status as well as for each notification.\n */\nexport class GrainFatherNotifications {\n\n  @Output()\n  sessionStatus: EventEmitter = new EventEmitter();\n  @Output()\n  controllerStatus: EventEmitter = new EventEmitter();\n  @Output()\n  commandEmitter: EventEmitter = new EventEmitter();\n\n  recipeDetails: RecipeDetails;\n  timer: TStatus;\n  boilTemperature: number;\n  currentTemperature: number;\n\n  process(notificationLine: string): any {\n    // console.log(notificationLine);\n    const components = notificationLine.substring(1).split(',').slice(0, -1);\n    const type = notificationLine[0];\n\n    let notification: any = null;\n\n    switch (type) {\n      case 'A':\n        // Discard notice on display\n        this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n        break;\n\n      case 'C':\n        notification = new CStatus(parseFloat(components[0]));\n        this.boilTemperature = notification.boilTemperature;\n        break;\n\n      case 'F':\n        notification = new FStatus(components[0]);\n        break;\n\n      case 'I':\n        notification = new IStatus(components[0]);\n        break;\n\n      case 'T':\n        notification = new TStatus(\n          components[0] === '1',\n          parseInt(components[1], 10),\n          parseInt(components[2], 10),\n          parseInt(components[3], 10)\n        );\n        this.timer = notification;\n        break;\n\n      case 'V':\n        notification = new VStatus(\n          parseInt(components[0], 10),\n          parseInt(components[1], 10)\n        );\n        break;\n\n      case 'W':\n        notification = new WStatus(\n          parseInt(components[0], 10),\n          components[1] === '1',\n          components[2] === '1',\n          components[3] === '1',\n          components[4] === '1',\n          components[5] === '1'\n        );\n        break;\n\n      case 'X':\n        notification = new XStatus(\n          parseFloat(components[0]),\n          parseFloat(components[1])\n        );\n        this.currentTemperature = notification.currentTemperature;\n        break;\n\n      case 'Y':\n        notification = new YStatus(\n          components[0] === '1',\n          components[1] === '1',\n          components[2] === '1',\n          components[3] === '1',\n          components[4] === '1',\n          parseInt(components[5], 10),\n          parseInt(components[6], 10),\n          components[7] === '1'\n        );\n\n        this.parseStatus(notification);\n        break;\n    }\n\n    this.controllerStatus.emit(notification);\n  }\n\n  setRecipeDetails(recipeDetails: RecipeDetails) {\n    this.recipeDetails = recipeDetails;\n  }\n\n  /**\n   * Parses the yStatus message to update the session state.\n   *\n   * Requires recipe details to be able to determine the state.\n   *\n   * Uses the state to decrease the required interaction with the controller as much as possible.\n   * Currently the following interactions are needed:\n   *  - Start session after sending recipe without delay\n   *  - Add grain alarm\n   *  - Sparge alarm\n   *  - Start boil timer\n   *  - Start hopstand timer\n   *  - Finish session\n   *\n   *  It also sends notifications with:\n   *   - Current step, see SessionState\n   *   - Time left for step, for delay, mash and boil\n   *   - If a boil addition needs to be added, this will only be one event for each addition\n   *\n   * @param status current YStatus.\n   */\n  parseStatus(status: YStatus) {\n    const sessionStatus = new BrewSessionState(SessionState.Idle);\n\n    if (status && status.autoModeStatus) {\n      if (this.recipeDetails) {\n        const stage = status.stageNumber;\n        const interactionCode = status.interactionCode;\n        const mashSteps = this.recipeDetails.mashSteps.length;\n\n        if (stage === 0) {\n          if (interactionCode === InteractionCode.StartBrew) {\n            sessionStatus.state = SessionState.RecipeReceived;\n          }\n          if (status.delayedHeatMode) {\n            sessionStatus.state = SessionState.DelayedHeating;\n            sessionStatus.timerMinutesLeft = this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n          }\n        } else if (stage > 0 && stage  0 ?\n              this.timer.timerMinutesLeft - 1  : this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n          }\n        } else if (stage === mashSteps + 1) {\n          if (interactionCode === InteractionCode.StartSparge) {\n            sessionStatus.state = SessionState.StartSparge;\n            // Skip this stage and go to next\n            this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n          } else if (interactionCode === InteractionCode.FinishSparge) {\n            sessionStatus.state = SessionState.FinishSparge;\n          }\n        } else if (stage === mashSteps + 2) {\n          if (interactionCode === InteractionCode.StartBoil) {\n            sessionStatus.state = SessionState.StartBoil;\n          } else if (status.stageRampStatus) {\n            sessionStatus.state = SessionState.BoilRamp;\n            // Use actual temp and boil temp to determine if we are there\n            // then emit press command to get to StartBoil\n            if (this.currentTemperature >= this.boilTemperature) {\n              this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n            }\n          } else {\n            sessionStatus.state = SessionState.Boil;\n            sessionStatus.timerMinutesLeft = this.timer.timerMinutesLeft > 0 ?\n              this.timer.timerMinutesLeft - 1  : this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n            // If boil is done, we need to move the controller to the next stage\n            if (this.timer.timerMinutesLeft === 0) {\n              this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n            }\n\n            this.recipeDetails.boilSteps.forEach(step => {\n              if (this.timer.timerMinutesLeft === step.time && !step.sent) {\n                sessionStatus.addAdditionName = step.name;\n                sessionStatus.addAdditionTime = step.time;\n                step.sent = true;\n              }\n            });\n          }\n        } else if (stage === mashSteps + 3 || stage === mashSteps + 4) {\n          if (interactionCode === InteractionCode.FinishBrew) {\n            sessionStatus.state = SessionState.Finished;\n          } else if (interactionCode === InteractionCode.StartHopStand) {\n            sessionStatus.state = SessionState.HopStandAdd;\n          } else {\n            sessionStatus.state = SessionState.HopStand;\n            sessionStatus.timerMinutesLeft = this.timer.timerMinutesLeft > 0 ?\n              this.timer.timerMinutesLeft - 1  : this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n          }\n        }\n      } else {\n        sessionStatus.state = SessionState.Unknown;\n      }\n    }\n\n    this.sessionStatus.emit(sessionStatus);\n  }\n}\n\n/**\n * State of a brewing session.\n *\n * If no session is in progress 'Idle' is used. If no recipe details are set, 'Unknown' is used.\n */\nexport enum SessionState {\n  Idle,\n  RecipeReceived,\n  DelayedHeating,\n  MashRamp,\n  Mash,\n  AddGrain,\n  StartSparge,\n  FinishSparge,\n  BoilRamp,\n  StartBoil,\n  Boil,\n  HopStandAdd,\n  HopStand,\n  Finished,\n  Unknown\n}\n\n/**\n * Describes a brewing session.\n */\nexport class BrewSessionState {\n  state: SessionState;\n  timerMinutesLeft: number;\n  timerSecondsLeft: number;\n  addAdditionName: string;\n  addAdditionTime: number;\n\n  /**\n   * Creates a new brew session state.\n   *\n   * Since the controller handles minutes as rounded up, 1 minute is substracted to have the correct number of minutes.\n   * For example, a timer with 1 minute and 30 seconds actually has 30 seconds left. So to view it as 0:30, it needs to be updated.\n   *\n   * @param state current state of brewing session\n   * @param timerMinutesLeft minutes left on current timer\n   * @param timerSecondsLeft seconds left on current timer\n   * @param addAdditionName name of the addition to add\n   * @param addAdditionTime time at which the addition needs to be added\n   */\n  constructor(state: SessionState, timerMinutesLeft: number= 0, timerSecondsLeft: number = 0, addAdditionName: string = '',\n              addAdditionTime: number = 0) {\n    this.state = state;\n    this.timerMinutesLeft = timerMinutesLeft;\n    this.timerSecondsLeft = timerSecondsLeft;\n    this.addAdditionName = addAdditionName;\n    this.addAdditionTime = addAdditionTime;\n  }\n}\n\n/**\n * Class containing the details of the C notification.\n */\nexport class CStatus {\n  boilTemperature: number;\n\n  /**\n   * Creates a new instance of the C notification.\n   *\n   * Notification: ```C{boilTemperature}```\n   *\n   * @param boilTemperature\n   */\n  constructor(boilTemperature: number) {\n    this.boilTemperature = boilTemperature;\n  }\n}\n\n/**\n * Class containing the details of the F notification.\n */\nexport class FStatus {\n  firmwareVersion: string;\n\n  /**\n   * Creates a new instance of the F notification.\n   *\n   * Notification: ```F{firmwareVersion}```\n   *\n   * @param firmwareVersion\n   */\n  constructor(firmwareVersion: string) {\n    this.firmwareVersion = firmwareVersion;\n  }\n}\n\n/**\n * Class containing the details of the I notification.\n */\nexport class IStatus {\n  interactionCode: string;\n\n  /**\n   * Creates a new instance of the I notification.\n   *\n   * Notification: ```I{interactionCode}```\n   *\n   * @param interactionCode\n   */\n  constructor(interactionCode: string) {\n    this.interactionCode = interactionCode;\n  }\n}\n\n/**\n * Class containing the details of the T notification.\n */\nexport class TStatus {\n  timerActive: boolean;\n  timerMinutesLeft: number;\n  timerTotalStartTime: number;\n  timerSecondsLeft: number;\n\n  /**\n   * Creates a new instance of the T notification.\n   *\n   * Notification: ```T{timerActive},{timerMinutesLeft},{timerTotalStartTime},{timerSecondsLeft}```\n   *\n   * @param timerActive\n   * @param timerMinutesLeft\n   * @param timerTotalStartTime\n   * @param timerSecondsLeft\n   */\n  constructor(timerActive: boolean, timerMinutesLeft: number, timerTotalStartTime: number, timerSecondsLeft: number) {\n    this.timerActive = timerActive;\n    this.timerMinutesLeft = timerMinutesLeft;\n    this.timerTotalStartTime = timerTotalStartTime;\n    this.timerSecondsLeft = timerSecondsLeft;\n  }\n}\n\n/**\n * Describes the voltage of the controller\n */\nexport enum Voltage {\n  V230 = 0,\n  V110\n}\n\n/**\n * Describes the used units.\n */\nexport enum Units {\n  Fahrenheit = 0,\n  Celsius\n}\n\n/**\n * Class containing the details of the V notification.\n */\nexport class VStatus {\n  voltage: Voltage;\n  units: Units;\n\n  /**\n   * Creates a new instance of the V notification.\n   *\n   * Notification: ```V{voltage},{units}```\n   *\n   * @param voltage\n   * @param units\n   */\n  constructor(voltage: Voltage, units: Units) {\n    this.voltage = voltage;\n    this.units = units;\n  }\n}\n\n/**\n * Class containing the details of the W notification.\n */\nexport class WStatus {\n  heatPowerOutputPercentage: number;\n  isTimerPaused: boolean;\n  stepMashMode: boolean;\n  isRecipeInterrupted: boolean;\n  manualPowerMode: boolean;\n  spargeWaterAlertDisplayed: boolean;\n\n  /**\n   * Creates a new instance of the W notification.\n   *\n   * Notification: ```W{heatPowerOutputPercentage},{isTimerPaused},{stepMashMode},{isRecipeInterrupted},{manualPowerMode},{spargeWaterAlertDisplayed}```\n   *\n   * @param heatPowerOutputPercentage heating output\n   * @param isTimerPaused if true, the timer is paused\n   * @param stepMashMode if true, step mash is enabled??\n   * @param isRecipeInterrupted if true, the previous running recipe was interrupted, eg due to power loss\n   * @param manualPowerMode if true, manual power mode is enabled\n   * @param spargeWaterAlertDisplayed if true, the sparge water heating alert is shown\n   */\n  constructor(heatPowerOutputPercentage: number, isTimerPaused: boolean, stepMashMode: boolean,\n              isRecipeInterrupted: boolean, manualPowerMode: boolean, spargeWaterAlertDisplayed: boolean) {\n    this.heatPowerOutputPercentage = heatPowerOutputPercentage;\n    this.isTimerPaused = isTimerPaused;\n    this.stepMashMode = stepMashMode;\n    this.isRecipeInterrupted = isRecipeInterrupted;\n    this.manualPowerMode = manualPowerMode;\n    this.spargeWaterAlertDisplayed = spargeWaterAlertDisplayed;\n  }\n}\n\n/**\n * Class containing the details of the X notification.\n */\nexport class XStatus {\n  targetTemperature: number;\n  currentTemperature: number;\n\n  /**\n   * Creates a new instance of the X notification.\n   *\n   * Notification: ```X{targetTemperature},{currentTemperature}```\n   *\n   * @param targetTemperature target temperature currently set\n   * @param currentTemperature current temperature\n   */\n  constructor(targetTemperature: number, currentTemperature: number) {\n    this.targetTemperature = targetTemperature;\n    this.currentTemperature = currentTemperature;\n  }\n}\n\n/**\n * List of interaction codes send in the Y notification by the controller.\n *\n * @readonly\n * @enum {number}\n */\nexport enum InteractionCode {\n  /**\n   * Interaction code send by the controller if a new recipe is receiver.\n   * Only send if there is no delayed heating timer used.\n   * Waits for user acknowledgement.\n   */\n  StartBrew = 1,\n  /**\n   * Warns the user to add the grains if the mash-in temperature is reached.\n   * Waits for user acknowledgement.\n   */\n  AddGrain,\n  /**\n   * Warns the user that sparging can being.\n   * Is skipped automatically, so that the controller goes to the FinishSparge interaction.\n   */\n  StartSparge,\n  /**\n   * If enabled, shows the sparge counter, if not, shows an alert to continue to the boil stage.\n   * Waits for user acknowledgement.\n   */\n  FinishSparge,\n  /**\n   * Shows an alert to start the boil timer. During this stage, the boil additions will also be shown.\n   * Waits for user acknowledgement.\n   */\n  StartBoil,\n  /**\n   * If a hop stand is added to the recipe, an alert is shown to start the hop stand timer.\n   * Waits for user acknowledgement.\n   */\n  StartHopStand,\n  /**\n   * If the boil timer ends, an alert to finish the session is shown.\n   * Waits for user acknowledgement.\n   */\n  FinishBrew\n}\n\n/**\n * Class containing the details of the Y notification.\n */\nexport class YStatus {\n  heatPower: boolean;\n  pumpStatus: boolean;\n  autoModeStatus: boolean;\n  stageRampStatus: boolean;\n  interactionModeStatus: boolean;\n  interactionCode: InteractionCode;\n  stageNumber: number;\n  delayedHeatMode: boolean;\n\n  /**\n   * Creates a new instance of the Y notification.\n   *\n   * Notification: ```Y{heatPower},{pumpStatus},{autoModeStatus},{stageRampStatus},{interactionModeStatus},{interactionCode},{stageNumber},{delayedHeatMode}```\n   *\n   * @param heatPower heating power output.\n   * @param pumpStatus pump status.\n   * @param autoModeStatus if true the controller is running an automated session.\n   * @param stageRampStatus if true, the controller is ramping to the new/next target temperature.\n   * @param interactionModeStatus if true, the controller is waiting for user interaction.\n   * @param interactionCode code indication the controller step.\n   * @param stageNumber stage number the controller currently is at.\n   * @param delayedHeatMode if true, the controller is running the delayed heating timer.\n   */\n  constructor(heatPower: boolean, pumpStatus: boolean, autoModeStatus: boolean, stageRampStatus: boolean,\n              interactionModeStatus: boolean, interactionCode: InteractionCode, stageNumber: number, delayedHeatMode: boolean) {\n    this.heatPower = heatPower;\n    this.pumpStatus = pumpStatus;\n    this.autoModeStatus = autoModeStatus;\n    this.stageRampStatus = stageRampStatus;\n    this.interactionModeStatus = interactionModeStatus;\n    this.interactionCode = interactionCode;\n    this.stageNumber = stageNumber;\n    this.delayedHeatMode = delayedHeatMode;\n  }\n}\n\n    \n\n\n\n\n                   \n\n\n\n\n                   \n    \n         result-matching \"\"\n        \n    \n    \n        No results matching \"\"\n    \n\n"},"classes/YStatus.html":{"url":"classes/YStatus.html","title":"class - YStatus","body":"\n                   \n\n\n\n\n\n\n\n\n\n\n\n\n  Classes\n  YStatus\n\n\n\n        \n            Info\n        \n        \n            Source\n        \n\n\n\n    \n        \n            File\n        \n        \n            projects/angular-grainfather-control/src/lib/grainfather.notifications.ts\n        \n\n            \n                Description\n            \n            \n                Class containing the details of the Y notification.\n\n            \n\n\n\n\n            \n    Index\n    \n        \n                \n                    \n                        Properties\n                    \n                \n                \n                    \n                        \n                            \n                                autoModeStatus\n                            \n                            \n                                delayedHeatMode\n                            \n                            \n                                heatPower\n                            \n                            \n                                interactionCode\n                            \n                            \n                                interactionModeStatus\n                            \n                            \n                                pumpStatus\n                            \n                            \n                                stageNumber\n                            \n                            \n                                stageRampStatus\n                            \n                        \n                    \n                \n\n\n\n\n\n\n        \n    \n\n\n            \n    Constructor\n        \n            \n                \n                    \nconstructor(heatPower: boolean, pumpStatus: boolean, autoModeStatus: boolean, stageRampStatus: boolean, interactionModeStatus: boolean, interactionCode: InteractionCode, stageNumber: number, delayedHeatMode: boolean)\n                    \n                \n                        \n                            \n                                Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:513\n                            \n                        \n\n                \n                    \n                            Creates a new instance of the Y notification.\nNotification: Y{heatPower},{pumpStatus},{autoModeStatus},{stageRampStatus},{interactionModeStatus},{interactionCode},{stageNumber},{delayedHeatMode}\n\n                            \n                                    Parameters :\n                                    \n                                        \n                                            \n                                                Name\n                                                    Type\n                                                Optional\n                                                    Description\n                                            \n                                        \n                                        \n                                                \n                                                        heatPower\n                                                  \n                                                        \n                                                                        boolean\n                                                        \n                                                  \n                                                    \n                                                            No\n                                                    \n                                                    \n                                                        \n                                                                heating power output.\n\n                                                        \n                                                \n                                                \n                                                        pumpStatus\n                                                  \n                                                        \n                                                                        boolean\n                                                        \n                                                  \n                                                    \n                                                            No\n                                                    \n                                                    \n                                                        \n                                                                pump status.\n\n                                                        \n                                                \n                                                \n                                                        autoModeStatus\n                                                  \n                                                        \n                                                                        boolean\n                                                        \n                                                  \n                                                    \n                                                            No\n                                                    \n                                                    \n                                                        \n                                                                if true the controller is running an automated session.\n\n                                                        \n                                                \n                                                \n                                                        stageRampStatus\n                                                  \n                                                        \n                                                                        boolean\n                                                        \n                                                  \n                                                    \n                                                            No\n                                                    \n                                                    \n                                                        \n                                                                if true, the controller is ramping to the new/next target temperature.\n\n                                                        \n                                                \n                                                \n                                                        interactionModeStatus\n                                                  \n                                                        \n                                                                        boolean\n                                                        \n                                                  \n                                                    \n                                                            No\n                                                    \n                                                    \n                                                        \n                                                                if true, the controller is waiting for user interaction.\n\n                                                        \n                                                \n                                                \n                                                        interactionCode\n                                                  \n                                                        \n                                                                        InteractionCode\n                                                        \n                                                  \n                                                    \n                                                            No\n                                                    \n                                                    \n                                                        \n                                                                code indication the controller step.\n\n                                                        \n                                                \n                                                \n                                                        stageNumber\n                                                  \n                                                        \n                                                                        number\n                                                        \n                                                  \n                                                    \n                                                            No\n                                                    \n                                                    \n                                                        \n                                                                stage number the controller currently is at.\n\n                                                        \n                                                \n                                                \n                                                        delayedHeatMode\n                                                  \n                                                        \n                                                                        boolean\n                                                        \n                                                  \n                                                    \n                                                            No\n                                                    \n                                                    \n                                                        \n                                                                if true, the controller is running the delayed heating timer.\n\n                                                        \n                                                \n                                        \n                                    \n                            \n                    \n                \n            \n        \n\n\n            \n    \n        \n            Properties\n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            autoModeStatus\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         boolean\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:508\n                            \n                        \n\n\n            \n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            delayedHeatMode\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         boolean\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:513\n                            \n                        \n\n\n            \n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            heatPower\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         boolean\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:506\n                            \n                        \n\n\n            \n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            interactionCode\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         InteractionCode\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:511\n                            \n                        \n\n\n            \n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            interactionModeStatus\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         boolean\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:510\n                            \n                        \n\n\n            \n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            pumpStatus\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         boolean\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:507\n                            \n                        \n\n\n            \n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            stageNumber\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         number\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:512\n                            \n                        \n\n\n            \n        \n        \n            \n                \n                    \n                        \n                        \n                            \n                            stageRampStatus\n                            \n                        \n                    \n                \n                    \n                        \n                            Type :         boolean\n\n                        \n                    \n                        \n                            \n                                    Defined in projects/angular-grainfather-control/src/lib/grainfather.notifications.ts:509\n                            \n                        \n\n\n            \n        \n\n\n\n\n\n\n\n\n    \n\n\n    \n        import {EventEmitter, Output} from '@angular/core';\nimport {GrainFatherCommands, RecipeDetails} from './grainfather.commands';\n\n/**\n * Handler for notifications. Besides processing all incoming notifications, also the state of the controller is kept and updated.\n * Notifications are taken from https://github.com/kingpulsar/Grainfather-Bluetooth-Protocol\n *\n * Publishes events for the controller status as well as for each notification.\n */\nexport class GrainFatherNotifications {\n\n  @Output()\n  sessionStatus: EventEmitter = new EventEmitter();\n  @Output()\n  controllerStatus: EventEmitter = new EventEmitter();\n  @Output()\n  commandEmitter: EventEmitter = new EventEmitter();\n\n  recipeDetails: RecipeDetails;\n  timer: TStatus;\n  boilTemperature: number;\n  currentTemperature: number;\n\n  process(notificationLine: string): any {\n    // console.log(notificationLine);\n    const components = notificationLine.substring(1).split(',').slice(0, -1);\n    const type = notificationLine[0];\n\n    let notification: any = null;\n\n    switch (type) {\n      case 'A':\n        // Discard notice on display\n        this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n        break;\n\n      case 'C':\n        notification = new CStatus(parseFloat(components[0]));\n        this.boilTemperature = notification.boilTemperature;\n        break;\n\n      case 'F':\n        notification = new FStatus(components[0]);\n        break;\n\n      case 'I':\n        notification = new IStatus(components[0]);\n        break;\n\n      case 'T':\n        notification = new TStatus(\n          components[0] === '1',\n          parseInt(components[1], 10),\n          parseInt(components[2], 10),\n          parseInt(components[3], 10)\n        );\n        this.timer = notification;\n        break;\n\n      case 'V':\n        notification = new VStatus(\n          parseInt(components[0], 10),\n          parseInt(components[1], 10)\n        );\n        break;\n\n      case 'W':\n        notification = new WStatus(\n          parseInt(components[0], 10),\n          components[1] === '1',\n          components[2] === '1',\n          components[3] === '1',\n          components[4] === '1',\n          components[5] === '1'\n        );\n        break;\n\n      case 'X':\n        notification = new XStatus(\n          parseFloat(components[0]),\n          parseFloat(components[1])\n        );\n        this.currentTemperature = notification.currentTemperature;\n        break;\n\n      case 'Y':\n        notification = new YStatus(\n          components[0] === '1',\n          components[1] === '1',\n          components[2] === '1',\n          components[3] === '1',\n          components[4] === '1',\n          parseInt(components[5], 10),\n          parseInt(components[6], 10),\n          components[7] === '1'\n        );\n\n        this.parseStatus(notification);\n        break;\n    }\n\n    this.controllerStatus.emit(notification);\n  }\n\n  setRecipeDetails(recipeDetails: RecipeDetails) {\n    this.recipeDetails = recipeDetails;\n  }\n\n  /**\n   * Parses the yStatus message to update the session state.\n   *\n   * Requires recipe details to be able to determine the state.\n   *\n   * Uses the state to decrease the required interaction with the controller as much as possible.\n   * Currently the following interactions are needed:\n   *  - Start session after sending recipe without delay\n   *  - Add grain alarm\n   *  - Sparge alarm\n   *  - Start boil timer\n   *  - Start hopstand timer\n   *  - Finish session\n   *\n   *  It also sends notifications with:\n   *   - Current step, see SessionState\n   *   - Time left for step, for delay, mash and boil\n   *   - If a boil addition needs to be added, this will only be one event for each addition\n   *\n   * @param status current YStatus.\n   */\n  parseStatus(status: YStatus) {\n    const sessionStatus = new BrewSessionState(SessionState.Idle);\n\n    if (status && status.autoModeStatus) {\n      if (this.recipeDetails) {\n        const stage = status.stageNumber;\n        const interactionCode = status.interactionCode;\n        const mashSteps = this.recipeDetails.mashSteps.length;\n\n        if (stage === 0) {\n          if (interactionCode === InteractionCode.StartBrew) {\n            sessionStatus.state = SessionState.RecipeReceived;\n          }\n          if (status.delayedHeatMode) {\n            sessionStatus.state = SessionState.DelayedHeating;\n            sessionStatus.timerMinutesLeft = this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n          }\n        } else if (stage > 0 && stage  0 ?\n              this.timer.timerMinutesLeft - 1  : this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n          }\n        } else if (stage === mashSteps + 1) {\n          if (interactionCode === InteractionCode.StartSparge) {\n            sessionStatus.state = SessionState.StartSparge;\n            // Skip this stage and go to next\n            this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n          } else if (interactionCode === InteractionCode.FinishSparge) {\n            sessionStatus.state = SessionState.FinishSparge;\n          }\n        } else if (stage === mashSteps + 2) {\n          if (interactionCode === InteractionCode.StartBoil) {\n            sessionStatus.state = SessionState.StartBoil;\n          } else if (status.stageRampStatus) {\n            sessionStatus.state = SessionState.BoilRamp;\n            // Use actual temp and boil temp to determine if we are there\n            // then emit press command to get to StartBoil\n            if (this.currentTemperature >= this.boilTemperature) {\n              this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n            }\n          } else {\n            sessionStatus.state = SessionState.Boil;\n            sessionStatus.timerMinutesLeft = this.timer.timerMinutesLeft > 0 ?\n              this.timer.timerMinutesLeft - 1  : this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n            // If boil is done, we need to move the controller to the next stage\n            if (this.timer.timerMinutesLeft === 0) {\n              this.commandEmitter.emit(GrainFatherCommands.createPressSet());\n            }\n\n            this.recipeDetails.boilSteps.forEach(step => {\n              if (this.timer.timerMinutesLeft === step.time && !step.sent) {\n                sessionStatus.addAdditionName = step.name;\n                sessionStatus.addAdditionTime = step.time;\n                step.sent = true;\n              }\n            });\n          }\n        } else if (stage === mashSteps + 3 || stage === mashSteps + 4) {\n          if (interactionCode === InteractionCode.FinishBrew) {\n            sessionStatus.state = SessionState.Finished;\n          } else if (interactionCode === InteractionCode.StartHopStand) {\n            sessionStatus.state = SessionState.HopStandAdd;\n          } else {\n            sessionStatus.state = SessionState.HopStand;\n            sessionStatus.timerMinutesLeft = this.timer.timerMinutesLeft > 0 ?\n              this.timer.timerMinutesLeft - 1  : this.timer.timerMinutesLeft;\n            sessionStatus.timerSecondsLeft = this.timer.timerSecondsLeft;\n          }\n        }\n      } else {\n        sessionStatus.state = SessionState.Unknown;\n      }\n    }\n\n    this.sessionStatus.emit(sessionStatus);\n  }\n}\n\n/**\n * State of a brewing session.\n *\n * If no session is in progress 'Idle' is used. If no recipe details are set, 'Unknown' is used.\n */\nexport enum SessionState {\n  Idle,\n  RecipeReceived,\n  DelayedHeating,\n  MashRamp,\n  Mash,\n  AddGrain,\n  StartSparge,\n  FinishSparge,\n  BoilRamp,\n  StartBoil,\n  Boil,\n  HopStandAdd,\n  HopStand,\n  Finished,\n  Unknown\n}\n\n/**\n * Describes a brewing session.\n */\nexport class BrewSessionState {\n  state: SessionState;\n  timerMinutesLeft: number;\n  timerSecondsLeft: number;\n  addAdditionName: string;\n  addAdditionTime: number;\n\n  /**\n   * Creates a new brew session state.\n   *\n   * Since the controller handles minutes as rounded up, 1 minute is substracted to have the correct number of minutes.\n   * For example, a timer with 1 minute and 30 seconds actually has 30 seconds left. So to view it as 0:30, it needs to be updated.\n   *\n   * @param state current state of brewing session\n   * @param timerMinutesLeft minutes left on current timer\n   * @param timerSecondsLeft seconds left on current timer\n   * @param addAdditionName name of the addition to add\n   * @param addAdditionTime time at which the addition needs to be added\n   */\n  constructor(state: SessionState, timerMinutesLeft: number= 0, timerSecondsLeft: number = 0, addAdditionName: string = '',\n              addAdditionTime: number = 0) {\n    this.state = state;\n    this.timerMinutesLeft = timerMinutesLeft;\n    this.timerSecondsLeft = timerSecondsLeft;\n    this.addAdditionName = addAdditionName;\n    this.addAdditionTime = addAdditionTime;\n  }\n}\n\n/**\n * Class containing the details of the C notification.\n */\nexport class CStatus {\n  boilTemperature: number;\n\n  /**\n   * Creates a new instance of the C notification.\n   *\n   * Notification: ```C{boilTemperature}```\n   *\n   * @param boilTemperature\n   */\n  constructor(boilTemperature: number) {\n    this.boilTemperature = boilTemperature;\n  }\n}\n\n/**\n * Class containing the details of the F notification.\n */\nexport class FStatus {\n  firmwareVersion: string;\n\n  /**\n   * Creates a new instance of the F notification.\n   *\n   * Notification: ```F{firmwareVersion}```\n   *\n   * @param firmwareVersion\n   */\n  constructor(firmwareVersion: string) {\n    this.firmwareVersion = firmwareVersion;\n  }\n}\n\n/**\n * Class containing the details of the I notification.\n */\nexport class IStatus {\n  interactionCode: string;\n\n  /**\n   * Creates a new instance of the I notification.\n   *\n   * Notification: ```I{interactionCode}```\n   *\n   * @param interactionCode\n   */\n  constructor(interactionCode: string) {\n    this.interactionCode = interactionCode;\n  }\n}\n\n/**\n * Class containing the details of the T notification.\n */\nexport class TStatus {\n  timerActive: boolean;\n  timerMinutesLeft: number;\n  timerTotalStartTime: number;\n  timerSecondsLeft: number;\n\n  /**\n   * Creates a new instance of the T notification.\n   *\n   * Notification: ```T{timerActive},{timerMinutesLeft},{timerTotalStartTime},{timerSecondsLeft}```\n   *\n   * @param timerActive\n   * @param timerMinutesLeft\n   * @param timerTotalStartTime\n   * @param timerSecondsLeft\n   */\n  constructor(timerActive: boolean, timerMinutesLeft: number, timerTotalStartTime: number, timerSecondsLeft: number) {\n    this.timerActive = timerActive;\n    this.timerMinutesLeft = timerMinutesLeft;\n    this.timerTotalStartTime = timerTotalStartTime;\n    this.timerSecondsLeft = timerSecondsLeft;\n  }\n}\n\n/**\n * Describes the voltage of the controller\n */\nexport enum Voltage {\n  V230 = 0,\n  V110\n}\n\n/**\n * Describes the used units.\n */\nexport enum Units {\n  Fahrenheit = 0,\n  Celsius\n}\n\n/**\n * Class containing the details of the V notification.\n */\nexport class VStatus {\n  voltage: Voltage;\n  units: Units;\n\n  /**\n   * Creates a new instance of the V notification.\n   *\n   * Notification: ```V{voltage},{units}```\n   *\n   * @param voltage\n   * @param units\n   */\n  constructor(voltage: Voltage, units: Units) {\n    this.voltage = voltage;\n    this.units = units;\n  }\n}\n\n/**\n * Class containing the details of the W notification.\n */\nexport class WStatus {\n  heatPowerOutputPercentage: number;\n  isTimerPaused: boolean;\n  stepMashMode: boolean;\n  isRecipeInterrupted: boolean;\n  manualPowerMode: boolean;\n  spargeWaterAlertDisplayed: boolean;\n\n  /**\n   * Creates a new instance of the W notification.\n   *\n   * Notification: ```W{heatPowerOutputPercentage},{isTimerPaused},{stepMashMode},{isRecipeInterrupted},{manualPowerMode},{spargeWaterAlertDisplayed}```\n   *\n   * @param heatPowerOutputPercentage heating output\n   * @param isTimerPaused if true, the timer is paused\n   * @param stepMashMode if true, step mash is enabled??\n   * @param isRecipeInterrupted if true, the previous running recipe was interrupted, eg due to power loss\n   * @param manualPowerMode if true, manual power mode is enabled\n   * @param spargeWaterAlertDisplayed if true, the sparge water heating alert is shown\n   */\n  constructor(heatPowerOutputPercentage: number, isTimerPaused: boolean, stepMashMode: boolean,\n              isRecipeInterrupted: boolean, manualPowerMode: boolean, spargeWaterAlertDisplayed: boolean) {\n    this.heatPowerOutputPercentage = heatPowerOutputPercentage;\n    this.isTimerPaused = isTimerPaused;\n    this.stepMashMode = stepMashMode;\n    this.isRecipeInterrupted = isRecipeInterrupted;\n    this.manualPowerMode = manualPowerMode;\n    this.spargeWaterAlertDisplayed = spargeWaterAlertDisplayed;\n  }\n}\n\n/**\n * Class containing the details of the X notification.\n */\nexport class XStatus {\n  targetTemperature: number;\n  currentTemperature: number;\n\n  /**\n   * Creates a new instance of the X notification.\n   *\n   * Notification: ```X{targetTemperature},{currentTemperature}```\n   *\n   * @param targetTemperature target temperature currently set\n   * @param currentTemperature current temperature\n   */\n  constructor(targetTemperature: number, currentTemperature: number) {\n    this.targetTemperature = targetTemperature;\n    this.currentTemperature = currentTemperature;\n  }\n}\n\n/**\n * List of interaction codes send in the Y notification by the controller.\n *\n * @readonly\n * @enum {number}\n */\nexport enum InteractionCode {\n  /**\n   * Interaction code send by the controller if a new recipe is receiver.\n   * Only send if there is no delayed heating timer used.\n   * Waits for user acknowledgement.\n   */\n  StartBrew = 1,\n  /**\n   * Warns the user to add the grains if the mash-in temperature is reached.\n   * Waits for user acknowledgement.\n   */\n  AddGrain,\n  /**\n   * Warns the user that sparging can being.\n   * Is skipped automatically, so that the controller goes to the FinishSparge interaction.\n   */\n  StartSparge,\n  /**\n   * If enabled, shows the sparge counter, if not, shows an alert to continue to the boil stage.\n   * Waits for user acknowledgement.\n   */\n  FinishSparge,\n  /**\n   * Shows an alert to start the boil timer. During this stage, the boil additions will also be shown.\n   * Waits for user acknowledgement.\n   */\n  StartBoil,\n  /**\n   * If a hop stand is added to the recipe, an alert is shown to start the hop stand timer.\n   * Waits for user acknowledgement.\n   */\n  StartHopStand,\n  /**\n   * If the boil timer ends, an alert to finish the session is shown.\n   * Waits for user acknowledgement.\n   */\n  FinishBrew\n}\n\n/**\n * Class containing the details of the Y notification.\n */\nexport class YStatus {\n  heatPower: boolean;\n  pumpStatus: boolean;\n  autoModeStatus: boolean;\n  stageRampStatus: boolean;\n  interactionModeStatus: boolean;\n  interactionCode: InteractionCode;\n  stageNumber: number;\n  delayedHeatMode: boolean;\n\n  /**\n   * Creates a new instance of the Y notification.\n   *\n   * Notification: ```Y{heatPower},{pumpStatus},{autoModeStatus},{stageRampStatus},{interactionModeStatus},{interactionCode},{stageNumber},{delayedHeatMode}```\n   *\n   * @param heatPower heating power output.\n   * @param pumpStatus pump status.\n   * @param autoModeStatus if true the controller is running an automated session.\n   * @param stageRampStatus if true, the controller is ramping to the new/next target temperature.\n   * @param interactionModeStatus if true, the controller is waiting for user interaction.\n   * @param interactionCode code indication the controller step.\n   * @param stageNumber stage number the controller currently is at.\n   * @param delayedHeatMode if true, the controller is running the delayed heating timer.\n   */\n  constructor(heatPower: boolean, pumpStatus: boolean, autoModeStatus: boolean, stageRampStatus: boolean,\n              interactionModeStatus: boolean, interactionCode: InteractionCode, stageNumber: number, delayedHeatMode: boolean) {\n    this.heatPower = heatPower;\n    this.pumpStatus = pumpStatus;\n    this.autoModeStatus = autoModeStatus;\n    this.stageRampStatus = stageRampStatus;\n    this.interactionModeStatus = interactionModeStatus;\n    this.interactionCode = interactionCode;\n    this.stageNumber = stageNumber;\n    this.delayedHeatMode = delayedHeatMode;\n  }\n}\n\n    \n\n\n\n\n                   \n\n\n\n\n                   \n    \n         result-matching \"\"\n        \n    \n    \n        No results matching \"\"\n    \n\n"},"coverage.html":{"url":"coverage.html","title":"coverage - coverage","body":"\n                   \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n                   \n\n\n\n    Documentation coverage\n\n\n\n    \n\n\n\n    \n        \n            File\n            Type\n            Identifier\n            Statements\n        \n    \n    \n        \n            \n                \n                projects/angular-grainfather-control/src/lib/brewfather.helper.ts\n            \n            class\n            BrewFatherHelper\n            \n                0 %\n                (0/2)\n            \n        \n        \n            \n                \n                projects/angular-grainfather-control/src/lib/grainfather.commands.ts\n            \n            class\n            GrainFatherCommands\n            \n                97 %\n                (46/47)\n            \n        \n        \n            \n                \n                projects/angular-grainfather-control/src/lib/grainfather.commands.ts\n            \n            class\n            RecipeDetails\n            \n                0 %\n                (0/8)\n            \n        \n        \n            \n                \n                projects/angular-grainfather-control/src/lib/grainfather.notifications.ts\n            \n            class\n            BrewSessionState\n            \n                28 %\n                (2/7)\n            \n        \n        \n            \n                \n                projects/angular-grainfather-control/src/lib/grainfather.notifications.ts\n            \n            class\n            CStatus\n            \n                66 %\n                (2/3)\n            \n        \n        \n            \n                \n                projects/angular-grainfather-control/src/lib/grainfather.notifications.ts\n            \n            class\n            FStatus\n            \n                66 %\n                (2/3)\n            \n        \n        \n            \n                \n                projects/angular-grainfather-control/src/lib/grainfather.notifications.ts\n            \n            class\n            GrainFatherNotifications\n            \n                25 %\n                (2/8)\n            \n        \n        \n            \n                \n                projects/angular-grainfather-control/src/lib/grainfather.notifications.ts\n            \n            class\n            IStatus\n            \n                66 %\n                (2/3)\n            \n        \n        \n            \n                \n                projects/angular-grainfather-control/src/lib/grainfather.notifications.ts\n            \n            class\n            TStatus\n            \n                33 %\n                (2/6)\n            \n        \n        \n            \n                \n                projects/angular-grainfather-control/src/lib/grainfather.notifications.ts\n            \n            class\n            VStatus\n            \n                50 %\n                (2/4)\n            \n        \n        \n            \n                \n                projects/angular-grainfather-control/src/lib/grainfather.notifications.ts\n            \n            class\n            WStatus\n            \n                25 %\n                (2/8)\n            \n        \n        \n            \n                \n                projects/angular-grainfather-control/src/lib/grainfather.notifications.ts\n            \n            class\n            XStatus\n            \n                50 %\n                (2/4)\n            \n        \n        \n            \n                \n                projects/angular-grainfather-control/src/lib/grainfather.notifications.ts\n            \n            class\n            YStatus\n            \n                20 %\n                (2/10)\n            \n        \n    \n\n\n\n\n\n    new Tablesort(document.getElementById('coverage-table'));\n\n\n                   \n    \n         result-matching \"\"\n        \n    \n    \n        No results matching \"\"\n    \n\n"},"dependencies.html":{"url":"dependencies.html","title":"package-dependencies - dependencies","body":"\n                   \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    \n        Dependencies\n    \n    \n        \n            @angular/animations : ~9.1.3\n        \n            @angular/common : ~9.1.3\n        \n            @angular/compiler : ~9.1.3\n        \n            @angular/core : ~9.1.3\n        \n            @angular/forms : ~9.1.3\n        \n            @angular/platform-browser : ~9.1.3\n        \n            @angular/platform-browser-dynamic : ~9.1.3\n        \n            @angular/router : ~9.1.3\n        \n            @types/web-bluetooth : 0.0.5\n        \n            rxjs : ~6.5.4\n        \n            tslib : ^1.10.0\n        \n            zone.js : ~0.10.2\n    \n\n                   \n\n\n\n\n                   \n    \n         result-matching \"\"\n        \n    \n    \n        No results matching \"\"\n    \n\n"},"miscellaneous/enumerations.html":{"url":"miscellaneous/enumerations.html","title":"miscellaneous-enumerations - enumerations","body":"\n                   \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n                   \n\n\n  Miscellaneous\n  Enumerations\n\n\n\n    Index\n    \n        \n            \n                \n                    \n                        \n                            ConnectionState   (projects/.../angular-grainfather-control.module.ts)\n                        \n                        \n                            InteractionCode   (projects/.../grainfather.notifications.ts)\n                        \n                        \n                            SessionState   (projects/.../grainfather.notifications.ts)\n                        \n                        \n                            Units   (projects/.../grainfather.notifications.ts)\n                        \n                        \n                            Voltage   (projects/.../grainfather.notifications.ts)\n                        \n                    \n                \n            \n        \n    \n\n\n    projects/angular-grainfather-control/src/lib/angular-grainfather-control.module.ts\n    \n        \n            \n                \n                    \n                        \n                        ConnectionState\n                    \n                \n                        \n                            \n                                 Connecting\n                            \n                        \n                        \n                            \n                                 Reconnecting\n                            \n                        \n                        \n                            \n                                 Connected\n                            \n                        \n                        \n                            \n                                 Disconnected\n                            \n                        \n            \n        \n\n    projects/angular-grainfather-control/src/lib/grainfather.notifications.ts\n    \n        \n            \n                \n                    \n                        \n                        InteractionCode\n                    \n                \n                    \n                        \n                            List of interaction codes send in the Y notification by the controller.\n\n                        \n                    \n                        \n                            \n                                 StartBrew\n                            \n                        \n                        \n                            \n                                Value : 1\n                            \n                        \n                        \n                            \n                                 AddGrain\n                            \n                        \n                        \n                            \n                                 StartSparge\n                            \n                        \n                        \n                            \n                                 FinishSparge\n                            \n                        \n                        \n                            \n                                 StartBoil\n                            \n                        \n                        \n                            \n                                 StartHopStand\n                            \n                        \n                        \n                            \n                                 FinishBrew\n                            \n                        \n            \n        \n        \n            \n                \n                    \n                        \n                        SessionState\n                    \n                \n                    \n                        \n                            State of a brewing session.\nIf no session is in progress 'Idle' is used. If no recipe details are set, 'Unknown' is used.\n\n                        \n                    \n                        \n                            \n                                 Idle\n                            \n                        \n                        \n                            \n                                 RecipeReceived\n                            \n                        \n                        \n                            \n                                 DelayedHeating\n                            \n                        \n                        \n                            \n                                 MashRamp\n                            \n                        \n                        \n                            \n                                 Mash\n                            \n                        \n                        \n                            \n                                 AddGrain\n                            \n                        \n                        \n                            \n                                 StartSparge\n                            \n                        \n                        \n                            \n                                 FinishSparge\n                            \n                        \n                        \n                            \n                                 BoilRamp\n                            \n                        \n                        \n                            \n                                 StartBoil\n                            \n                        \n                        \n                            \n                                 Boil\n                            \n                        \n                        \n                            \n                                 HopStandAdd\n                            \n                        \n                        \n                            \n                                 HopStand\n                            \n                        \n                        \n                            \n                                 Finished\n                            \n                        \n                        \n                            \n                                 Unknown\n                            \n                        \n            \n        \n        \n            \n                \n                    \n                        \n                        Units\n                    \n                \n                    \n                        \n                            Describes the used units.\n\n                        \n                    \n                        \n                            \n                                 Fahrenheit\n                            \n                        \n                        \n                            \n                                Value : 0\n                            \n                        \n                        \n                            \n                                 Celsius\n                            \n                        \n            \n        \n        \n            \n                \n                    \n                        \n                        Voltage\n                    \n                \n                    \n                        \n                            Describes the voltage of the controller\n\n                        \n                    \n                        \n                            \n                                 V230\n                            \n                        \n                        \n                            \n                                Value : 0\n                            \n                        \n                        \n                            \n                                 V110\n                            \n                        \n            \n        \n\n\n\n\n                   \n    \n         result-matching \"\"\n        \n    \n    \n        No results matching \"\"\n    \n\n"},"index.html":{"url":"index.html","title":"getting-started - index","body":"\n                   \n\nAngular Grainfather Control\nThis project contains an example and the grainfather control library. \nThe example expects BrewFather batch files to be able to send a recipe to the controller.\nThis library was generated with Angular CLI version 9.1.3.\nIt can be used to control the GrainFather controller via BLE from within a browser.\nThe BLE specification is taken from https://github.com/kingpulsar/Grainfather-Bluetooth-Protocol.\nThe main module exposes an API to connect/reconnect/disconnect from the controller. \nIt also has a send method, which takes a Command from the commands files.\nAll commands are available as a class, with the Recipe command being the most complex one.\nRecipeDetails contain the minimal information that is needed to create a recipe. \nAll other values are assumed to have defaults for now.\nexport type MashStep = {\n  name: string;\n  stepTime: number;\n  stepTemperature: number;\n};\n\nexport type BoilStep = {\n  name: string;\n  time: number;\n  sent: boolean;\n};\n\nexport class RecipeDetails {\n  name: string;\n  mashWaterAmount: number;\n  spargeWaterAmount: number;\n  boilTime: number;\n  hopStandTime: number;\n  mashSteps: MashStep[];\n  boilSteps: BoilStep[];\n  delayMinutes: number;\n  delaySeconds: number;\n}Notifications are processed by the notifications handler. \nThis handler updates and broadcasts the state as well.\nIt uses the state to decrease the required interaction with the controller as much as possible.\nCurrently the following interactions are needed:\n\nStart session after sending recipe without delay\nAdd grain alarm\nSparge alarm\nStart boil timer\nStart hopstand timer\nFinish session\n\nIt also sends notifications with:\n\nCurrent step, see SessionState\nTime left for step, for delay, mash and boil\nIf a boil addition needs to be added, this will only be one event for each addition\n\nBuild\nRun ng build angular-grainfather-control to build the project. The build artifacts will be stored in the dist/ directory.\nPublishing\nAfter building your library with ng build angular-grainfather-control, go to the dist folder cd dist/angular-grainfather-control and run npm publish.\nRunning unit tests\nRun ng test angular-grainfather-control to execute the unit tests via Karma.\nFurther help\nTo get more help on the Angular CLI use ng help or go check out the Angular CLI README.\nLicense\nCopyright 2020 Alexander Broekhuis\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\nhttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n                   \n\n\n\n\n                   \n    \n         result-matching \"\"\n        \n    \n    \n        No results matching \"\"\n    \n\n"},"license.html":{"url":"license.html","title":"getting-started - license","body":"\n                   \n\n                             Apache License\n                       Version 2.0, January 2004\n                    http://www.apache.org/licenses/   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\nDefinitions.\n\"License\" shall mean the terms and conditions for use, reproduction,\nand distribution as defined by Sections 1 through 9 of this document.\n\"Licensor\" shall mean the copyright owner or entity authorized by\nthe copyright owner that is granting the License.\n\"Legal Entity\" shall mean the union of the acting entity and all\nother entities that control, are controlled by, or are under common\ncontrol with that entity. For the purposes of this definition,\n\"control\" means (i) the power, direct or indirect, to cause the\ndirection or management of such entity, whether by contract or\notherwise, or (ii) ownership of fifty percent (50%) or more of the\noutstanding shares, or (iii) beneficial ownership of such entity.\n\"You\" (or \"Your\") shall mean an individual or Legal Entity\nexercising permissions granted by this License.\n\"Source\" form shall mean the preferred form for making modifications,\nincluding but not limited to software source code, documentation\nsource, and configuration files.\n\"Object\" form shall mean any form resulting from mechanical\ntransformation or translation of a Source form, including but\nnot limited to compiled object code, generated documentation,\nand conversions to other media types.\n\"Work\" shall mean the work of authorship, whether in Source or\nObject form, made available under the License, as indicated by a\ncopyright notice that is included in or attached to the work\n(an example is provided in the Appendix below).\n\"Derivative Works\" shall mean any work, whether in Source or Object\nform, that is based on (or derived from) the Work and for which the\neditorial revisions, annotations, elaborations, or other modifications\nrepresent, as a whole, an original work of authorship. For the purposes\nof this License, Derivative Works shall not include works that remain\nseparable from, or merely link (or bind by name) to the interfaces of,\nthe Work and Derivative Works thereof.\n\"Contribution\" shall mean any work of authorship, including\nthe original version of the Work and any modifications or additions\nto that Work or Derivative Works thereof, that is intentionally\nsubmitted to Licensor for inclusion in the Work by the copyright owner\nor by an individual or Legal Entity authorized to submit on behalf of\nthe copyright owner. For the purposes of this definition, \"submitted\"\nmeans any form of electronic, verbal, or written communication sent\nto the Licensor or its representatives, including but not limited to\ncommunication on electronic mailing lists, source code control systems,\nand issue tracking systems that are managed by, or on behalf of, the\nLicensor for the purpose of discussing and improving the Work, but\nexcluding communication that is conspicuously marked or otherwise\ndesignated in writing by the copyright owner as \"Not a Contribution.\"\n\"Contributor\" shall mean Licensor and any individual or Legal Entity\non behalf of whom a Contribution has been received by Licensor and\nsubsequently incorporated within the Work.\n\nGrant of Copyright License. Subject to the terms and conditions of\nthis License, each Contributor hereby grants to You a perpetual,\nworldwide, non-exclusive, no-charge, royalty-free, irrevocable\ncopyright license to reproduce, prepare Derivative Works of,\npublicly display, publicly perform, sublicense, and distribute the\nWork and such Derivative Works in Source or Object form.\n\nGrant of Patent License. Subject to the terms and conditions of\nthis License, each Contributor hereby grants to You a perpetual,\nworldwide, non-exclusive, no-charge, royalty-free, irrevocable\n(except as stated in this section) patent license to make, have made,\nuse, offer to sell, sell, import, and otherwise transfer the Work,\nwhere such license applies only to those patent claims licensable\nby such Contributor that are necessarily infringed by their\nContribution(s) alone or by combination of their Contribution(s)\nwith the Work to which such Contribution(s) was submitted. If You\ninstitute patent litigation against any entity (including a\ncross-claim or counterclaim in a lawsuit) alleging that the Work\nor a Contribution incorporated within the Work constitutes direct\nor contributory patent infringement, then any patent licenses\ngranted to You under this License for that Work shall terminate\nas of the date such litigation is filed.\n\nRedistribution. You may reproduce and distribute copies of the\nWork or Derivative Works thereof in any medium, with or without\nmodifications, and in Source or Object form, provided that You\nmeet the following conditions:\n(a) You must give any other recipients of the Work or\nDerivative Works a copy of this License; and(b) You must cause any modified files to carry prominent notices\nstating that You changed the files; and(c) You must retain, in the Source form of any Derivative Works\nthat You distribute, all copyright, patent, trademark, and\nattribution notices from the Source form of the Work,\nexcluding those notices that do not pertain to any part of\nthe Derivative Works; and(d) If the Work includes a \"NOTICE\" text file as part of its\ndistribution, then any Derivative Works that You distribute must\ninclude a readable copy of the attribution notices contained\nwithin such NOTICE file, excluding those notices that do not\npertain to any part of the Derivative Works, in at least one\nof the following places: within a NOTICE text file distributed\nas part of the Derivative Works; within the Source form or\ndocumentation, if provided along with the Derivative Works; or,\nwithin a display generated by the Derivative Works, if and\nwherever such third-party notices normally appear. The contents\nof the NOTICE file are for informational purposes only and\ndo not modify the License. You may add Your own attribution\nnotices within Derivative Works that You distribute, alongside\nor as an addendum to the NOTICE text from the Work, provided\nthat such additional attribution notices cannot be construed\nas modifying the License.You may add Your own copyright statement to Your modifications and\nmay provide additional or different license terms and conditions\nfor use, reproduction, or distribution of Your modifications, or\nfor any such Derivative Works as a whole, provided Your use,\nreproduction, and distribution of the Work otherwise complies with\nthe conditions stated in this License.\n\nSubmission of Contributions. Unless You explicitly state otherwise,\nany Contribution intentionally submitted for inclusion in the Work\nby You to the Licensor shall be under the terms and conditions of\nthis License, without any additional terms or conditions.\nNotwithstanding the above, nothing herein shall supersede or modify\nthe terms of any separate license agreement you may have executed\nwith Licensor regarding such Contributions.\n\nTrademarks. This License does not grant permission to use the trade\nnames, trademarks, service marks, or product names of the Licensor,\nexcept as required for reasonable and customary use in describing the\norigin of the Work and reproducing the content of the NOTICE file.\n\nDisclaimer of Warranty. Unless required by applicable law or\nagreed to in writing, Licensor provides the Work (and each\nContributor provides its Contributions) on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\nimplied, including, without limitation, any warranties or conditions\nof TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\nPARTICULAR PURPOSE. You are solely responsible for determining the\nappropriateness of using or redistributing the Work and assume any\nrisks associated with Your exercise of permissions under this License.\n\nLimitation of Liability. In no event and under no legal theory,\nwhether in tort (including negligence), contract, or otherwise,\nunless required by applicable law (such as deliberate and grossly\nnegligent acts) or agreed to in writing, shall any Contributor be\nliable to You for damages, including any direct, indirect, special,\nincidental, or consequential damages of any character arising as a\nresult of this License or out of the use or inability to use the\nWork (including but not limited to damages for loss of goodwill,\nwork stoppage, computer failure or malfunction, or any and all\nother commercial damages or losses), even if such Contributor\nhas been advised of the possibility of such damages.\n\nAccepting Warranty or Additional Liability. While redistributing\nthe Work or Derivative Works thereof, You may choose to offer,\nand charge a fee for, acceptance of support, warranty, indemnity,\nor other liability obligations and/or rights consistent with this\nLicense. However, in accepting such obligations, You may act only\non Your own behalf and on Your sole responsibility, not on behalf\nof any other Contributor, and only if You agree to indemnify,\ndefend, and hold each Contributor harmless for any liability\nincurred by, or claims asserted against, such Contributor by reason\nof your accepting any such warranty or additional liability.\nEND OF TERMS AND CONDITIONS\nAPPENDIX: How to apply the Apache License to your work.\nTo apply the Apache License to your work, attach the following\nboilerplate notice, with the fields enclosed by brackets \"[]\"\nreplaced with your own identifying information. (Don't include\nthe brackets!)  The text should be enclosed in the appropriate\ncomment syntax for the file format. We also recommend that a\nfile or class name and description of purpose be included on the\nsame \"printed page\" as the copyright notice for easier\nidentification within third-party archives.\nCopyright [yyyy] [name of copyright owner]\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n http://www.apache.org/licenses/LICENSE-2.0\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n                   \n\n\n\n\n                   \n    \n         result-matching \"\"\n        \n    \n    \n        No results matching \"\"\n    \n\n"},"modules.html":{"url":"modules.html","title":"modules - modules","body":"\n                   \n\n\n\n\n    Modules\n\n\n    \n            \n                \n                    \n                        GrainfatherControlModule\n                    \n                    \n                                \n                                    No graph available.\n                                \n                        \n                            Browse\n                        \n                    \n                \n            \n    \n\n\n\n\n\n\n\n\n\n\n\n\n                   \n\n\n\n\n                   \n    \n         result-matching \"\"\n        \n    \n    \n        No results matching \"\"\n    \n\n"},"overview.html":{"url":"overview.html","title":"overview - overview","body":"\n                   \n\n\n\n    Overview\n\n  \n\n    \n        \n\n\n\n\n\ndependencies\n\nLegend\n\n  Declarations\n\n  Module\n\n  Bootstrap\n\n  Providers\n\n  Exports\n\n\n\n    \n    \n    \n        Zoom in\n        Reset\n        Zoom out\n    \n\n  \n\n    \n        \n            \n                \n                    \n                    \n                        1 Module\n                    \n                \n            \n        \n        \n            \n                \n                    \n                    13 Classes\n                \n            \n        \n    \n\n\n \n\n\n\n\n\n\n\n\n\n\n\n                   \n\n\n\n\n                   \n    \n         result-matching \"\"\n        \n    \n    \n        No results matching \"\"\n    \n\n"},"miscellaneous/typealiases.html":{"url":"miscellaneous/typealiases.html","title":"miscellaneous-typealiases - typealiases","body":"\n                   \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n                   \n\n\n  Miscellaneous\n  Type aliases\n\n\n\n    Index\n    \n        \n            \n                \n                    \n                        \n                            BoilStep   (projects/.../grainfather.commands.ts)\n                        \n                        \n                            MashStep   (projects/.../grainfather.commands.ts)\n                        \n                    \n                \n            \n        \n    \n\n\n    projects/angular-grainfather-control/src/lib/grainfather.commands.ts\n    \n    \n        \n            \n                \n                    \n                    BoilStep\n                \n            \n            \n                \n                        literal type\n\n                \n            \n        \n    \n    \n        \n            \n                \n                    \n                    MashStep\n                \n            \n            \n                \n                        literal type\n\n                \n            \n        \n    \n\n\n\n                   \n    \n         result-matching \"\"\n        \n    \n    \n        No results matching \"\"\n    \n\n"}}
  }
  