rice: Various.

This commit is contained in:
William Floyd 2018-07-09 22:08:40 -04:00
parent 828648083d
commit b2a2c66f41
Signed by untrusted user who does not match committer: william
GPG key ID: B3EEEDD81893CAF9
3 changed files with 273 additions and 308 deletions

View file

@ -55,20 +55,42 @@ Everything about it is like any other hot pot, it's just tuned for cooking rice.
Thus, once I convert the thing to being smart, I will be able to use it for, say, ramen, or any number of other things. Thus, once I convert the thing to being smart, I will be able to use it for, say, ramen, or any number of other things.
The possibility of steaming things only furthers this goal. The possibility of steaming things only furthers this goal.
## Recipe Submission
Wrap the JSON as an object so that flags and things can be passed along without modifying the recipe.
Recipe IDs are handled internally by the cooker, as a hash of the contents.
When submitting a recipe, the server will return the ID of the recipe, so the client may immediately attempt to start a recipe, but flags such as `delete-on-complete` make sure that recipes may be temporary in nature and not stay in history (parametric recipes are a prime example)
## Recipes ## Recipes
Recipes should be submitted as simple JSON structures. Recipes should be submitted as simple JSON structures.
These may be linted, and will contain no logic. These may be linted prior to submission, and will contain no logic.
All calculations are to be done when producing the recipe. All calculations are to be done when producing the recipe.
This is done so as to ease the technical burden on the cooker. This is done so as to ease the technical burden on the cooker.
## Tuning
Heating should be tuned through the frontend.
A wattage value may be submitted as a rough guide.
Otherwise, say how much water you put in, it will heat up until a threshold temperature is reached.
Wait until the heat dropping is stable (thermal lag needs to be gotten rid of), then read temperature.
Given this information, the cooker may then calculate the heating rate of the hot pot, as the thermal capacity of the water is known, and the thermal lag is mostly taken care of.
This information may be used for ballpark estimates for cooking duration, when accounting for the time it takes to reach temperature.
Examples of use might be scheduling a recipe in time to get home.
However, more useful will be using prior cooking runs to average the cooking times.
## Heating / Cooling ## Heating / Cooling
Active cooling is not something worth designing for, as it is not an issue to begin with. Active cooling is not something worth designing for, as it is not an issue to begin with.
## Coding ## Coding
Internally, a temperature kill switch should be enacted, which will kick in if the Internally, a temperature kill switch should be enacted, which will kick in if the temperature gets too high.
*** ***
@ -76,20 +98,15 @@ Internally, a temperature kill switch should be enacted, which will kick in if t
I tentatively (with no real experience designing them) plan on my API being something like the following. I tentatively (with no real experience designing them) plan on my API being something like the following.
- `/action/light/kill` - *Kill all light activity* - `/cookbook/add` - *Add a recipe*
- `/action/light/set` - *Change lighting mode, with optional duration* - `/cookbook/delete` - *Delete a recipe*
- `/action/temperature/kill` - *Stops all heating* - `/cookbook/list` - *List known recipes*
- `/action/temperature/set` - *Heat/cool to given temperature.* - `/action/kill` - *Kill any current running recipe*
- `/routine/cook/kill` - *Kill any current running routine* - `/action/start` - *Start a recipe*
- `/routine/cook/list` - *List known cooking routines* - `/action/schedule/add` - *Schedule a recipe*
- `/routine/cook/schedule/list` - *List any scheduled routines* - `/action/schedule/delete` *Delete a scheduled recipe*
- `/routine/cook/schedule/set` - *Submit/modify/delete a scheduled routine* - `/action/schedule/list` - *List scheduled recipes*
- `/routine/cook/start` - *Start a routine*
- `/sensor/temperature` - *Returns temperature* - `/sensor/temperature` - *Returns temperature*
- `/settings/cook/recipe/list` - *List known cooking routines*
- `/settings/cook/recipe/set` - *Submit/modify/delete a cooking routine*
- `/settings/lighting/list` - *List lighting modes*
- `/settings/lighting/set` - *Submit/modify/delete a lighting mode*
- `/settings/time/set` - *Set/read date and time* - `/settings/time/set` - *Set/read date and time*
# Cooking recipe definition specifications # Cooking recipe definition specifications
@ -115,13 +132,17 @@ These are defined as such:
### Sleep ### Sleep
Wait for a given duration. Wait for a given duration.
No need to expose to recipes directly, see `Kill`, `Temperature Change`, and `Temperature Hold` instead. No need to expose to recipes directly, see `Temperature Kill`, `Temperature Change`, and `Temperature Hold` instead.
Will keep things like LED lights going still. Will keep things like LED lights going still.
### Heat ### Heat
Takes a bool, turns the heating element on or off. Takes a bool, turns the heating element on or off.
Non-blocking so that conditions may be checked without unnecessarily cycling the relay. Non-blocking so that conditions may be checked without unnecessarily cycling the relay.
Dangerous to expose to recipes directly, see `Kill` Dangerous to expose to recipes directly, see `Temperature Kill`
### All Kill
Mostly to be used as a soft kill switch, invoked from a physical button or via API.
Proxy to `Temperature Kill` and `Lighting Kill`, then exits any current recipe.
### Lighting Change ### Lighting Change
Change lighting mode. Change lighting mode.
@ -141,12 +162,11 @@ This should just be a proxy directive to `Heat` and `Sleep`.
That is, `Heat` if under temp, `Sleep` if over temp, until an internal clock has ticked over the time required. That is, `Heat` if under temp, `Sleep` if over temp, until an internal clock has ticked over the time required.
### Temperature Kill ### Temperature Kill
Turns off heat, cancels any running recipe. Turns off heat.
Takes no input. Takes no input.
Just a proxy to `Heat`, but only as a false bool. Just a proxy to `Heat`, but only as a false bool.
*Might* be used at the end of a recipe, unnecessary though. *Might* be used at the end of a recipe, unnecessary though.
Mostly to be used as a soft kill switch, invoked from a physical button or via API.
Examples might be canceling an infinite temperature holding cycle (e.g rice warming). Examples might be canceling an infinite temperature holding cycle (e.g rice warming).
# Dep Graph # Dep Graph

View file

@ -42,11 +42,25 @@ digraph {
} }
subgraph cluster_secondary { subgraph cluster_secondary {
"All Kill"
"Lighting Change" "Lighting Change"
"Lighting Kill" "Lighting Kill"
"Temperature Kill"
"Temperature Change" subgraph cluster_directives_lighting {
"Temperature Hold" "Lighting Change"
"Lighting Kill"
label="Lighting"
}
subgraph cluster_directives_temperature {
"Temperature Change"
"Temperature Hold"
"Temperature Kill"
label="Temperature"
}
label="Secondary" label="Secondary"
} }
@ -63,29 +77,7 @@ digraph {
} }
subgraph cluster_api { subgraph cluster_api {
subgraph cluster_action {
subgraph cluster_light {
"/api/action/light/kill"[label="kill"]
"/api/action/light/set"[label="set"]
label="light"
}
subgraph cluster_temperature {
"/api/action/temperature/kill"[label="kill"]
"/api/action/temperature/set"[label="set"]
label="temperature"
}
label="action"
}
subgraph cluster_api_sensor { subgraph cluster_api_sensor {
@ -95,26 +87,22 @@ digraph {
} }
subgraph cluster_routine { subgraph cluster_recipe {
"/api/recipe/list"[label="list"]
"/api/recipe/start"[label="start"]
"/api/recipe/kill"[label="kill"]
subgraph cluster_routine_cook { subgraph cluster_schedule {
"/api/routine/cook/list"[label="list"] "/api/recipe/schedule/add"[label="add"]
"/api/routine/cook/start"[label="start"] "/api/recipe/schedule/delete"[label="delete"]
"/api/routine/cook/kill"[label="kill"] "/api/recipe/schedule/list"[label="list"]
subgraph cluster_schedule { label="schedule"
"/api/routine/cook/schedule/list"[label="list"]
"/api/routine/cook/schedule/set"[label="set"]
label="schedule"
}
label="cook"
} }
label="routine" label="recipe"
} }
subgraph cluster_settings { subgraph cluster_settings {
@ -138,18 +126,12 @@ digraph {
} }
subgraph cluster_settings_cook {
subgraph cluster_recipe { subgraph cluster_settings_recipe {
"/api/settings/recipe/set"[label="set"]
"/api/settings/cook/recipe/list"[label="list"] label="recipe"
"/api/settings/cook/recipe/set"[label="set"]
label="recipe"
}
label="cook"
} }
@ -160,34 +142,30 @@ digraph {
label="api" label="api"
} }
"All Kill" -> { "Temperature Kill" "Lighting Kill" }[proxy_function]
"Temperature Change" -> { "Heat" "Sleep" }[depend_function] "Temperature Change" -> { "Heat" "Sleep" }[depend_function]
"Temperature Hold" -> { "Heat" "Sleep" }[depend_function] "Temperature Hold" -> { "Heat" "Sleep" }[depend_function]
"Temperature Kill" -> "Heat"[proxy_function] "Temperature Kill" -> "Heat"[proxy_function]
{ "Temperature Change" "Temperature Hold" } -> "Temperature"[depend_value] { "Temperature Change" "Temperature Hold" } -> "Temperature"[depend_value]
"/api/recipe/kill" -> "All Kill"[proxy_function]
"/api/action/temperature/set" -> "Temperature Change"[proxy_function] "/api/sensor/temperature" -> "Temperature"[proxy_value]
"/api/action/temperature/kill" -> "Temperature Kill"[proxy_function]
"/api/action/temperature/kill" -> "Temperature"[proxy_value]
"/api/routine/cook/list" -> "/api/settings/cook/recipe/list"[proxy_value]
// Description checklist /////////////////////////////////////////////////////// // Description checklist ///////////////////////////////////////////////////////
"/api/action/light/kill"[documented] "/api/recipe/kill"[documented]
"/api/action/light/set"[documented] "/api/recipe/list"[documented]
"/api/action/temperature/kill"[documented] "/api/recipe/schedule/add"[documented]
"/api/action/temperature/set"[documented] "/api/recipe/schedule/delete"[documented]
"/api/routine/cook/kill"[documented] "/api/recipe/schedule/list"[documented]
"/api/routine/cook/list"[documented] "/api/recipe/start"[documented]
"/api/routine/cook/schedule/list"[documented]
"/api/routine/cook/schedule/set"[documented]
"/api/routine/cook/start"[documented]
"/api/sensor/temperature"[documented] "/api/sensor/temperature"[documented]
"/api/settings/cook/recipe/list"[documented] "/api/settings/recipe/set"[documented]
"/api/settings/cook/recipe/set"[documented]
"/api/settings/lighting/list"[documented] "/api/settings/lighting/list"[documented]
"/api/settings/lighting/set"[documented] "/api/settings/lighting/set"[documented]
"/api/settings/time/set"[documented] "/api/settings/time/set"[documented]
"All Kill"[documented]
"Heat"[documented] "Heat"[documented]
"Lighting Change"[documented] "Lighting Change"[documented]
"Lighting Kill"[documented] "Lighting Kill"[documented]

View file

@ -4,384 +4,351 @@
<!-- Generated by graphviz version 2.40.1 (20161225.0304) <!-- Generated by graphviz version 2.40.1 (20161225.0304)
--> -->
<!-- Title: %3 Pages: 1 --> <!-- Title: %3 Pages: 1 -->
<svg width="1459pt" height="1057pt" <svg width="1432pt" height="1258pt"
viewBox="0.00 0.00 1459.00 1057.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> viewBox="0.00 0.00 1432.00 1258.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 1053)"> <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 1254)">
<title>%3</title> <title>%3</title>
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-1053 1455,-1053 1455,4 -4,4"/> <polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-1254 1428,-1254 1428,4 -4,4"/>
<g id="clust1" class="cluster"> <g id="clust1" class="cluster">
<title>cluster_key</title> <title>cluster_key</title>
<polygon fill="none" stroke="#000000" points="983.7381,-.1409 983.7381,-293.1409 1450.7381,-293.1409 1450.7381,-.1409 983.7381,-.1409"/> <polygon fill="none" stroke="#000000" points="956.7381,-957.1409 956.7381,-1250.1409 1423.7381,-1250.1409 1423.7381,-957.1409 956.7381,-957.1409"/>
<text text-anchor="middle" x="1217.2381" y="-277.9409" font-family="Times,serif" font-size="14.00" fill="#000000">Key</text> <text text-anchor="middle" x="1190.2381" y="-1234.9409" font-family="Times,serif" font-size="14.00" fill="#000000">Key</text>
</g> </g>
<g id="clust2" class="cluster"> <g id="clust2" class="cluster">
<title>cluster_doc</title> <title>cluster_doc</title>
<polygon fill="none" stroke="#000000" points="1221.4762,-145.7818 1221.4762,-261.7818 1442.4762,-261.7818 1442.4762,-145.7818 1221.4762,-145.7818"/> <polygon fill="none" stroke="#000000" points="1194.4762,-1102.7818 1194.4762,-1218.7818 1415.4762,-1218.7818 1415.4762,-1102.7818 1194.4762,-1102.7818"/>
</g> </g>
<g id="clust3" class="cluster"> <g id="clust3" class="cluster">
<title>cluster_sub</title> <title>cluster_sub</title>
<polygon fill="none" stroke="#000000" points="992.1124,-8.1466 992.1124,-226.1466 1185.1124,-226.1466 1185.1124,-8.1466 992.1124,-8.1466"/> <polygon fill="none" stroke="#000000" points="965.1124,-965.1466 965.1124,-1183.1466 1158.1124,-1183.1466 1158.1124,-965.1466 965.1124,-965.1466"/>
</g> </g>
<g id="clust4" class="cluster"> <g id="clust4" class="cluster">
<title>cluster_directives</title> <title>cluster_directives</title>
<polygon fill="none" stroke="#000000" points="-.0126,-623.898 -.0126,-1048.898 511.9874,-1048.898 511.9874,-623.898 -.0126,-623.898"/> <polygon fill="none" stroke="#000000" points=".3237,-479.2893 .3237,-1088.2893 664.3237,-1088.2893 664.3237,-479.2893 .3237,-479.2893"/>
<text text-anchor="middle" x="255.9874" y="-1033.698" font-family="Times,serif" font-size="14.00" fill="#000000">Directives</text> <text text-anchor="middle" x="332.3237" y="-1073.0893" font-family="Times,serif" font-size="14.00" fill="#000000">Directives</text>
</g> </g>
<g id="clust5" class="cluster"> <g id="clust5" class="cluster">
<title>cluster_primary</title> <title>cluster_primary</title>
<polygon fill="none" stroke="#000000" points="372.2255,-891.5389 372.2255,-1017.5389 504.2255,-1017.5389 504.2255,-891.5389 372.2255,-891.5389"/> <polygon fill="none" stroke="#000000" points="526.5618,-930.9302 526.5618,-1056.9302 656.5618,-1056.9302 656.5618,-930.9302 526.5618,-930.9302"/>
<text text-anchor="middle" x="438.2255" y="-1002.3389" font-family="Times,serif" font-size="14.00" fill="#000000">Primary</text> <text text-anchor="middle" x="591.5618" y="-1041.7302" font-family="Times,serif" font-size="14.00" fill="#000000">Primary</text>
</g> </g>
<g id="clust6" class="cluster"> <g id="clust6" class="cluster">
<title>cluster_secondary</title> <title>cluster_secondary</title>
<polygon fill="none" stroke="#000000" points="7.8531,-632.1826 7.8531,-844.1826 427.8531,-844.1826 427.8531,-632.1826 7.8531,-632.1826"/> <polygon fill="none" stroke="#000000" points="8.6738,-487.4461 8.6738,-874.4461 538.6738,-874.4461 538.6738,-487.4461 8.6738,-487.4461"/>
<text text-anchor="middle" x="217.8531" y="-828.9826" font-family="Times,serif" font-size="14.00" fill="#000000">Secondary</text> <text text-anchor="middle" x="273.6738" y="-859.2461" font-family="Times,serif" font-size="14.00" fill="#000000">Secondary</text>
</g> </g>
<g id="clust7" class="cluster"> <g id="clust7" class="cluster">
<title>cluster_sensor</title> <title>cluster_directives_lighting</title>
<polygon fill="none" stroke="#000000" points="790.4786,-790.4494 790.4786,-866.4494 916.4786,-866.4494 916.4786,-790.4494 790.4786,-790.4494"/> <polygon fill="none" stroke="#000000" points="304.9119,-711.087 304.9119,-843.087 530.9119,-843.087 530.9119,-711.087 304.9119,-711.087"/>
<text text-anchor="middle" x="853.4786" y="-851.2494" font-family="Times,serif" font-size="14.00" fill="#000000">Sensors</text> <text text-anchor="middle" x="417.9119" y="-827.887" font-family="Times,serif" font-size="14.00" fill="#000000">Lighting</text>
</g> </g>
<g id="clust8" class="cluster"> <g id="clust8" class="cluster">
<title>cluster_api</title> <title>cluster_directives_temperature</title>
<polygon fill="none" stroke="#000000" points="251.5635,.1548 251.5635,-615.8452 844.5635,-615.8452 844.5635,.1548 251.5635,.1548"/> <polygon fill="none" stroke="#000000" points="17.1738,-540.7617 17.1738,-674.7617 340.1738,-674.7617 340.1738,-540.7617 17.1738,-540.7617"/>
<text text-anchor="middle" x="548.0635" y="-600.6452" font-family="Times,serif" font-size="14.00" fill="#000000">api</text> <text text-anchor="middle" x="178.6738" y="-659.5617" font-family="Times,serif" font-size="14.00" fill="#000000">Temperature</text>
</g> </g>
<g id="clust9" class="cluster"> <g id="clust9" class="cluster">
<title>cluster_action</title> <title>cluster_sensor</title>
<polygon fill="none" stroke="#000000" points="559.1506,-357.5416 559.1506,-536.5416 836.1506,-536.5416 836.1506,-357.5416 559.1506,-357.5416"/> <polygon fill="none" stroke="#000000" points="888.8605,-737.5473 888.8605,-813.5473 1014.8605,-813.5473 1014.8605,-737.5473 888.8605,-737.5473"/>
<text text-anchor="middle" x="697.6506" y="-521.3416" font-family="Times,serif" font-size="14.00" fill="#000000">action</text> <text text-anchor="middle" x="951.8605" y="-798.3473" font-family="Times,serif" font-size="14.00" fill="#000000">Sensors</text>
</g> </g>
<g id="clust10" class="cluster"> <g id="clust10" class="cluster">
<title>cluster_light</title> <title>cluster_api</title>
<polygon fill="none" stroke="#000000" points="567.3888,-379.1825 567.3888,-505.1825 697.3888,-505.1825 697.3888,-379.1825 567.3888,-379.1825"/> <polygon fill="none" stroke="#000000" points="367.6765,-.2345 367.6765,-471.2345 902.6765,-471.2345 902.6765,-.2345 367.6765,-.2345"/>
<text text-anchor="middle" x="632.3888" y="-489.9825" font-family="Times,serif" font-size="14.00" fill="#000000">light</text> <text text-anchor="middle" x="635.1765" y="-456.0345" font-family="Times,serif" font-size="14.00" fill="#000000">api</text>
</g> </g>
<g id="clust11" class="cluster"> <g id="clust11" class="cluster">
<title>cluster_temperature</title> <title>cluster_api_sensor</title>
<polygon fill="none" stroke="#000000" points="721.4259,-365.3657 721.4259,-486.3657 828.4259,-486.3657 828.4259,-365.3657 721.4259,-365.3657"/> <polygon fill="none" stroke="#000000" points="615.8325,-69.0458 615.8325,-145.0458 738.8325,-145.0458 738.8325,-69.0458 615.8325,-69.0458"/>
<text text-anchor="middle" x="774.9259" y="-471.1657" font-family="Times,serif" font-size="14.00" fill="#000000">temperature</text> <text text-anchor="middle" x="677.3325" y="-129.8458" font-family="Times,serif" font-size="14.00" fill="#000000">sensor</text>
</g> </g>
<g id="clust12" class="cluster"> <g id="clust12" class="cluster">
<title>cluster_api_sensor</title> <title>cluster_recipe</title>
<polygon fill="none" stroke="#000000" points="609.3016,-7.4861 609.3016,-83.4861 732.3016,-83.4861 732.3016,-7.4861 609.3016,-7.4861"/> <polygon fill="none" stroke="#000000" points="375.814,-8.4367 375.814,-206.4367 607.814,-206.4367 607.814,-8.4367 375.814,-8.4367"/>
<text text-anchor="middle" x="670.8016" y="-68.2861" font-family="Times,serif" font-size="14.00" fill="#000000">sensor</text> <text text-anchor="middle" x="491.814" y="-191.2367" font-family="Times,serif" font-size="14.00" fill="#000000">recipe</text>
</g> </g>
<g id="clust13" class="cluster"> <g id="clust13" class="cluster">
<title>cluster_routine</title> <title>cluster_schedule</title>
<polygon fill="none" stroke="#000000" points="284.8016,-357.9861 284.8016,-584.9861 514.8016,-584.9861 514.8016,-357.9861 284.8016,-357.9861"/> <polygon fill="none" stroke="#000000" points="384.0521,-34.5776 384.0521,-175.5776 524.0521,-175.5776 524.0521,-34.5776 384.0521,-34.5776"/>
<text text-anchor="middle" x="399.8016" y="-569.7861" font-family="Times,serif" font-size="14.00" fill="#000000">routine</text> <text text-anchor="middle" x="454.0521" y="-160.3776" font-family="Times,serif" font-size="14.00" fill="#000000">schedule</text>
</g> </g>
<g id="clust14" class="cluster"> <g id="clust14" class="cluster">
<title>cluster_routine_cook</title> <title>cluster_settings</title>
<polygon fill="none" stroke="#000000" points="293.0397,-365.627 293.0397,-553.627 507.0397,-553.627 507.0397,-365.627 293.0397,-365.627"/> <polygon fill="none" stroke="#000000" points="665.4146,-181.8754 665.4146,-439.8754 894.4146,-439.8754 894.4146,-181.8754 665.4146,-181.8754"/>
<text text-anchor="middle" x="400.0397" y="-538.427" font-family="Times,serif" font-size="14.00" fill="#000000">cook</text> <text text-anchor="middle" x="779.9146" y="-424.6754" font-family="Times,serif" font-size="14.00" fill="#000000">settings</text>
</g> </g>
<g id="clust15" class="cluster"> <g id="clust15" class="cluster">
<title>cluster_schedule</title> <title>cluster_time</title>
<polygon fill="none" stroke="#000000" points="301.2778,-381.2679 301.2778,-507.2679 431.2778,-507.2679 431.2778,-381.2679 301.2778,-381.2679"/> <polygon fill="none" stroke="#000000" points="728.6528,-332.5162 728.6528,-408.5162 798.6528,-408.5162 798.6528,-332.5162 728.6528,-332.5162"/>
<text text-anchor="middle" x="366.2778" y="-492.0679" font-family="Times,serif" font-size="14.00" fill="#000000">schedule</text> <text text-anchor="middle" x="763.6528" y="-393.3162" font-family="Times,serif" font-size="14.00" fill="#000000">time</text>
</g> </g>
<g id="clust16" class="cluster"> <g id="clust16" class="cluster">
<title>cluster_settings</title> <title>cluster_lighting</title>
<polygon fill="none" stroke="#000000" points="259.8016,-57.9861 259.8016,-326.9861 573.8016,-326.9861 573.8016,-57.9861 259.8016,-57.9861"/> <polygon fill="none" stroke="#000000" points="673.6528,-189.5162 673.6528,-315.5162 803.6528,-315.5162 803.6528,-189.5162 673.6528,-189.5162"/>
<text text-anchor="middle" x="416.8016" y="-311.7861" font-family="Times,serif" font-size="14.00" fill="#000000">settings</text> <text text-anchor="middle" x="738.6528" y="-300.3162" font-family="Times,serif" font-size="14.00" fill="#000000">lighting</text>
</g> </g>
<g id="clust17" class="cluster"> <g id="clust17" class="cluster">
<title>cluster_time</title> <title>cluster_settings_recipe</title>
<polygon fill="none" stroke="#000000" points="436.0397,-219.627 436.0397,-295.627 506.0397,-295.627 506.0397,-219.627 436.0397,-219.627"/> <polygon fill="none" stroke="#000000" points="816.6528,-332.5162 816.6528,-408.5162 886.6528,-408.5162 886.6528,-332.5162 816.6528,-332.5162"/>
<text text-anchor="middle" x="471.0397" y="-280.427" font-family="Times,serif" font-size="14.00" fill="#000000">time</text> <text text-anchor="middle" x="851.6528" y="-393.3162" font-family="Times,serif" font-size="14.00" fill="#000000">recipe</text>
</g>
<g id="clust18" class="cluster">
<title>cluster_lighting</title>
<polygon fill="none" stroke="#000000" points="436.0397,-65.627 436.0397,-191.627 566.0397,-191.627 566.0397,-65.627 436.0397,-65.627"/>
<text text-anchor="middle" x="501.0397" y="-176.427" font-family="Times,serif" font-size="14.00" fill="#000000">lighting</text>
</g>
<g id="clust19" class="cluster">
<title>cluster_settings_cook</title>
<polygon fill="none" stroke="#000000" points="268.0397,-80.127 268.0397,-245.127 414.0397,-245.127 414.0397,-80.127 268.0397,-80.127"/>
<text text-anchor="middle" x="341.0397" y="-229.927" font-family="Times,serif" font-size="14.00" fill="#000000">cook</text>
</g>
<g id="clust20" class="cluster">
<title>cluster_recipe</title>
<polygon fill="none" stroke="#000000" points="276.2778,-87.7679 276.2778,-213.7679 406.2778,-213.7679 406.2778,-87.7679 276.2778,-87.7679"/>
<text text-anchor="middle" x="341.2778" y="-198.5679" font-family="Times,serif" font-size="14.00" fill="#000000">recipe</text>
</g> </g>
<!-- Done --> <!-- Done -->
<g id="node1" class="node"> <g id="node1" class="node">
<title>Done</title> <title>Done</title>
<polygon fill="#7fff00" stroke="#000000" points="1257.7144,-217.4227 1257.7144,-253.4227 1311.7144,-253.4227 1311.7144,-217.4227 1257.7144,-217.4227"/> <polygon fill="#7fff00" stroke="#000000" points="1230.7144,-1174.4227 1230.7144,-1210.4227 1284.7144,-1210.4227 1284.7144,-1174.4227 1230.7144,-1174.4227"/>
<text text-anchor="middle" x="1284.7144" y="-231.7227" font-family="Times,serif" font-size="14.00" fill="#000000">Done</text> <text text-anchor="middle" x="1257.7144" y="-1188.7227" font-family="Times,serif" font-size="14.00" fill="#000000">Done</text>
</g> </g>
<!-- Documented --> <!-- Documented -->
<g id="node2" class="node"> <g id="node2" class="node">
<title>Documented</title> <title>Documented</title>
<polygon fill="#caff70" stroke="#000000" points="1327.2144,-203.4227 1327.2144,-239.4227 1434.2144,-239.4227 1434.2144,-203.4227 1327.2144,-203.4227"/> <polygon fill="#caff70" stroke="#000000" points="1300.2144,-1160.4227 1300.2144,-1196.4227 1407.2144,-1196.4227 1407.2144,-1160.4227 1300.2144,-1160.4227"/>
<text text-anchor="middle" x="1380.7144" y="-217.7227" font-family="Times,serif" font-size="14.00" fill="#000000">Documented</text> <text text-anchor="middle" x="1353.7144" y="-1174.7227" font-family="Times,serif" font-size="14.00" fill="#000000">Documented</text>
</g> </g>
<!-- Undocumented --> <!-- Undocumented -->
<g id="node3" class="node"> <g id="node3" class="node">
<title>Undocumented</title> <title>Undocumented</title>
<polygon fill="#ff6347" stroke="#000000" points="1229.7144,-154.4227 1229.7144,-190.4227 1355.7144,-190.4227 1355.7144,-154.4227 1229.7144,-154.4227"/> <polygon fill="#ff6347" stroke="#000000" points="1202.7144,-1111.4227 1202.7144,-1147.4227 1328.7144,-1147.4227 1328.7144,-1111.4227 1202.7144,-1111.4227"/>
<text text-anchor="middle" x="1292.7144" y="-168.7227" font-family="Times,serif" font-size="14.00" fill="#000000">Undocumented</text> <text text-anchor="middle" x="1265.7144" y="-1125.7227" font-family="Times,serif" font-size="14.00" fill="#000000">Undocumented</text>
</g> </g>
<!-- Depend on value --> <!-- Depend on value -->
<g id="node4" class="node"> <g id="node4" class="node">
<title>Depend on value</title> <title>Depend on value</title>
<polygon fill="transparent" stroke="#000000" points="1013.0629,-17.0879 1013.0629,-53.0879 1149.0629,-53.0879 1149.0629,-17.0879 1013.0629,-17.0879"/> <polygon fill="transparent" stroke="#000000" points="986.0629,-974.0879 986.0629,-1010.0879 1122.0629,-1010.0879 1122.0629,-974.0879 986.0629,-974.0879"/>
<text text-anchor="middle" x="1081.0629" y="-31.3879" font-family="Times,serif" font-size="14.00" fill="#000000">Depend on value</text> <text text-anchor="middle" x="1054.0629" y="-988.3879" font-family="Times,serif" font-size="14.00" fill="#000000">Depend on value</text>
</g> </g>
<!-- Node --> <!-- Node -->
<g id="node8" class="node"> <g id="node8" class="node">
<title>Node</title> <title>Node</title>
<polygon fill="transparent" stroke="#000000" points="1193.1256,-79.4232 1193.1256,-115.4232 1248.1256,-115.4232 1248.1256,-79.4232 1193.1256,-79.4232"/> <polygon fill="transparent" stroke="#000000" points="1166.1256,-1036.4232 1166.1256,-1072.4232 1221.1256,-1072.4232 1221.1256,-1036.4232 1166.1256,-1036.4232"/>
<text text-anchor="middle" x="1220.6256" y="-93.7232" font-family="Times,serif" font-size="14.00" fill="#000000">Node</text> <text text-anchor="middle" x="1193.6256" y="-1050.7232" font-family="Times,serif" font-size="14.00" fill="#000000">Node</text>
</g> </g>
<!-- Depend on value&#45;&gt;Node --> <!-- Depend on value&#45;&gt;Node -->
<g id="edge1" class="edge"> <g id="edge1" class="edge">
<title>Depend on value&#45;&gt;Node</title> <title>Depend on value&#45;&gt;Node</title>
<path fill="none" stroke="#0000ff" d="M1121.4302,-53.1178C1140.989,-61.8537 1164.3213,-72.275 1183.442,-80.8152"/> <path fill="none" stroke="#0000ff" d="M1094.4302,-1010.1178C1113.989,-1018.8537 1137.3213,-1029.275 1156.442,-1037.8152"/>
<polygon fill="#0000ff" stroke="#0000ff" points="1182.1761,-84.083 1192.7341,-84.9655 1185.0308,-77.6915 1182.1761,-84.083"/> <polygon fill="#0000ff" stroke="#0000ff" points="1155.1761,-1041.083 1165.7341,-1041.9655 1158.0308,-1034.6915 1155.1761,-1041.083"/>
</g> </g>
<!-- Proxy to value --> <!-- Proxy to value -->
<g id="node5" class="node"> <g id="node5" class="node">
<title>Proxy to value</title> <title>Proxy to value</title>
<polygon fill="transparent" stroke="#000000" points="1048.3692,-85.2431 1048.3692,-121.2431 1167.3692,-121.2431 1167.3692,-85.2431 1048.3692,-85.2431"/> <polygon fill="transparent" stroke="#000000" points="1021.3692,-1042.2431 1021.3692,-1078.2431 1140.3692,-1078.2431 1140.3692,-1042.2431 1021.3692,-1042.2431"/>
<text text-anchor="middle" x="1107.8692" y="-99.5431" font-family="Times,serif" font-size="14.00" fill="#000000">Proxy to value</text> <text text-anchor="middle" x="1080.8692" y="-1056.5431" font-family="Times,serif" font-size="14.00" fill="#000000">Proxy to value</text>
</g> </g>
<!-- Proxy to value&#45;&gt;Node --> <!-- Proxy to value&#45;&gt;Node -->
<g id="edge2" class="edge"> <g id="edge2" class="edge">
<title>Proxy to value&#45;&gt;Node</title> <title>Proxy to value&#45;&gt;Node</title>
<path fill="none" stroke="#00bfff" d="M1167.5491,-100.1627C1172.6798,-99.8979 1177.7739,-99.635 1182.6606,-99.3827"/> <path fill="none" stroke="#00bfff" d="M1140.5491,-1057.1627C1145.6798,-1056.8979 1150.7739,-1056.635 1155.6606,-1056.3827"/>
<polygon fill="#00bfff" stroke="#00bfff" points="1183.1548,-102.862 1192.9611,-98.8511 1182.7939,-95.8713 1183.1548,-102.862"/> <polygon fill="#00bfff" stroke="#00bfff" points="1156.1548,-1059.862 1165.9611,-1055.8511 1155.7939,-1052.8713 1156.1548,-1059.862"/>
</g> </g>
<!-- Depend on function --> <!-- Depend on function -->
<g id="node6" class="node"> <g id="node6" class="node">
<title>Depend on function</title> <title>Depend on function</title>
<polygon fill="transparent" stroke="#000000" points="999.9595,-130.2476 999.9595,-166.2476 1156.9595,-166.2476 1156.9595,-130.2476 999.9595,-130.2476"/> <polygon fill="transparent" stroke="#000000" points="972.9595,-1087.2476 972.9595,-1123.2476 1129.9595,-1123.2476 1129.9595,-1087.2476 972.9595,-1087.2476"/>
<text text-anchor="middle" x="1078.4595" y="-144.5476" font-family="Times,serif" font-size="14.00" fill="#000000">Depend on function</text> <text text-anchor="middle" x="1051.4595" y="-1101.5476" font-family="Times,serif" font-size="14.00" fill="#000000">Depend on function</text>
</g> </g>
<!-- Depend on function&#45;&gt;Node --> <!-- Depend on function&#45;&gt;Node -->
<g id="edge3" class="edge"> <g id="edge3" class="edge">
<title>Depend on function&#45;&gt;Node</title> <title>Depend on function&#45;&gt;Node</title>
<path fill="none" stroke="#6495ed" d="M1146.188,-130.1398C1154.1959,-127.5897 1162.1998,-124.8469 1169.7492,-121.9631 1174.3182,-120.2178 1179.038,-118.2211 1183.6764,-116.1372"/> <path fill="none" stroke="#6495ed" d="M1119.188,-1087.1398C1127.1959,-1084.5897 1135.1998,-1081.8469 1142.7492,-1078.9631 1147.3182,-1077.2178 1152.038,-1075.2211 1156.6764,-1073.1372"/>
<polygon fill="#6495ed" stroke="#6495ed" points="1185.4219,-119.1853 1193.0086,-111.7899 1182.4659,-112.84 1185.4219,-119.1853"/> <polygon fill="#6495ed" stroke="#6495ed" points="1158.4219,-1076.1853 1166.0086,-1068.7899 1155.4659,-1069.84 1158.4219,-1076.1853"/>
</g> </g>
<!-- Proxy to function --> <!-- Proxy to function -->
<g id="node7" class="node"> <g id="node7" class="node">
<title>Proxy to function</title> <title>Proxy to function</title>
<polygon fill="transparent" stroke="#000000" points="1036.7213,-181.4596 1036.7213,-217.4596 1176.7213,-217.4596 1176.7213,-181.4596 1036.7213,-181.4596"/> <polygon fill="transparent" stroke="#000000" points="1009.7213,-1138.4596 1009.7213,-1174.4596 1149.7213,-1174.4596 1149.7213,-1138.4596 1009.7213,-1138.4596"/>
<text text-anchor="middle" x="1106.7213" y="-195.7596" font-family="Times,serif" font-size="14.00" fill="#000000">Proxy to function</text> <text text-anchor="middle" x="1079.7213" y="-1152.7596" font-family="Times,serif" font-size="14.00" fill="#000000">Proxy to function</text>
</g> </g>
<!-- Proxy to function&#45;&gt;Node --> <!-- Proxy to function&#45;&gt;Node -->
<g id="edge4" class="edge"> <g id="edge4" class="edge">
<title>Proxy to function&#45;&gt;Node</title> <title>Proxy to function&#45;&gt;Node</title>
<path fill="none" stroke="#1e90ff" d="M1139.9927,-181.3916C1146.9139,-177.0425 1153.9629,-172.1439 1160.0995,-166.9676 1175.196,-154.2336 1189.801,-137.6186 1200.881,-123.8221"/> <path fill="none" stroke="#1e90ff" d="M1112.9927,-1138.3916C1119.9139,-1134.0425 1126.9629,-1129.1439 1133.0995,-1123.9676 1148.196,-1111.2336 1162.801,-1094.6186 1173.881,-1080.8221"/>
<polygon fill="#1e90ff" stroke="#1e90ff" points="1203.8712,-125.6816 1207.2973,-115.656 1198.3669,-121.3568 1203.8712,-125.6816"/> <polygon fill="#1e90ff" stroke="#1e90ff" points="1176.8712,-1082.6816 1180.2973,-1072.656 1171.3669,-1078.3568 1176.8712,-1082.6816"/>
</g> </g>
<!-- Sleep --> <!-- Sleep -->
<g id="node9" class="node"> <g id="node9" class="node">
<title>Sleep</title> <title>Sleep</title>
<polygon fill="#caff70" stroke="#000000" points="440.4636,-950.1798 440.4636,-986.1798 496.4636,-986.1798 496.4636,-950.1798 440.4636,-950.1798"/> <polygon fill="#caff70" stroke="#000000" points="534.7999,-939.571 534.7999,-975.571 590.7999,-975.571 590.7999,-939.571 534.7999,-939.571"/>
<text text-anchor="middle" x="468.4636" y="-964.4798" font-family="Times,serif" font-size="14.00" fill="#000000">Sleep</text> <text text-anchor="middle" x="562.7999" y="-953.871" font-family="Times,serif" font-size="14.00" fill="#000000">Sleep</text>
</g> </g>
<!-- Heat --> <!-- Heat -->
<g id="node10" class="node"> <g id="node10" class="node">
<title>Heat</title> <title>Heat</title>
<polygon fill="#caff70" stroke="#000000" points="380.4636,-900.1798 380.4636,-936.1798 434.4636,-936.1798 434.4636,-900.1798 380.4636,-900.1798"/> <polygon fill="#caff70" stroke="#000000" points="594.7999,-989.571 594.7999,-1025.571 648.7999,-1025.571 648.7999,-989.571 594.7999,-989.571"/>
<text text-anchor="middle" x="407.4636" y="-914.4798" font-family="Times,serif" font-size="14.00" fill="#000000">Heat</text> <text text-anchor="middle" x="621.7999" y="-1003.871" font-family="Times,serif" font-size="14.00" fill="#000000">Heat</text>
</g> </g>
<!-- Lighting Change --> <!-- All Kill -->
<g id="node11" class="node"> <g id="node11" class="node">
<title>Lighting Change</title> <title>All Kill</title>
<polygon fill="#caff70" stroke="#000000" points="270.5912,-708.8235 270.5912,-744.8235 407.5912,-744.8235 407.5912,-708.8235 270.5912,-708.8235"/> <polygon fill="#caff70" stroke="#000000" points="117.2167,-496.2523 117.2167,-532.2523 182.2167,-532.2523 182.2167,-496.2523 117.2167,-496.2523"/>
<text text-anchor="middle" x="339.0912" y="-723.1235" font-family="Times,serif" font-size="14.00" fill="#000000">Lighting Change</text> <text text-anchor="middle" x="149.7167" y="-510.5523" font-family="Times,serif" font-size="14.00" fill="#000000">All Kill</text>
</g> </g>
<!-- Lighting Kill --> <!-- Lighting Kill -->
<g id="node12" class="node"> <g id="node13" class="node">
<title>Lighting Kill</title> <title>Lighting Kill</title>
<polygon fill="#caff70" stroke="#000000" points="271.0912,-776.8235 271.0912,-812.8235 377.0912,-812.8235 377.0912,-776.8235 271.0912,-776.8235"/> <polygon fill="#caff70" stroke="#000000" points="417.1501,-775.7279 417.1501,-811.7279 523.1501,-811.7279 523.1501,-775.7279 417.1501,-775.7279"/>
<text text-anchor="middle" x="324.0912" y="-791.1235" font-family="Times,serif" font-size="14.00" fill="#000000">Lighting Kill</text> <text text-anchor="middle" x="470.1501" y="-790.0279" font-family="Times,serif" font-size="14.00" fill="#000000">Lighting Kill</text>
</g>
<!-- All Kill&#45;&gt;Lighting Kill -->
<g id="edge5" class="edge">
<title>All Kill&#45;&gt;Lighting Kill</title>
<path fill="none" stroke="#1e90ff" d="M160.3098,-532.6102C172.527,-553.7532 191.0282,-585.6676 191.6519,-586.1226 225.6491,-610.9202 245.393,-590.0611 284.096,-606.5782 366.8298,-641.8861 401.0364,-645.1545 452.3901,-719.0079 461.8231,-732.5739 466.2852,-750.5148 468.3786,-765.4162"/>
<polygon fill="#1e90ff" stroke="#1e90ff" points="464.9304,-766.0751 469.5215,-775.6236 471.8869,-765.2962 464.9304,-766.0751"/>
</g> </g>
<!-- Temperature Kill --> <!-- Temperature Kill -->
<g id="node13" class="node"> <g id="node16" class="node">
<title>Temperature Kill</title> <title>Temperature Kill</title>
<polygon fill="#caff70" stroke="#000000" points="15.7163,-703.8979 15.7163,-739.8979 153.7163,-739.8979 153.7163,-703.8979 15.7163,-703.8979"/> <polygon fill="#caff70" stroke="#000000" points="194.4119,-549.4026 194.4119,-585.4026 332.4119,-585.4026 332.4119,-549.4026 194.4119,-549.4026"/>
<text text-anchor="middle" x="84.7163" y="-718.1979" font-family="Times,serif" font-size="14.00" fill="#000000">Temperature Kill</text> <text text-anchor="middle" x="263.4119" y="-563.7026" font-family="Times,serif" font-size="14.00" fill="#000000">Temperature Kill</text>
</g> </g>
<!-- Temperature Kill&#45;&gt;Heat --> <!-- All Kill&#45;&gt;Temperature Kill -->
<g id="edge9" class="edge"> <g id="edge6" class="edge">
<title>Temperature Kill&#45;&gt;Heat</title> <title>All Kill&#45;&gt;Temperature Kill</title>
<path fill="none" stroke="#1e90ff" d="M153.9652,-719.0004C183.9257,-721.1425 217.6814,-728.5348 242.271,-748.1824 266.7862,-767.7705 249.8364,-788.673 268.9712,-813.5435 296.9853,-849.9548 340.7481,-880.1071 371.5678,-898.5422"/> <path fill="none" stroke="#1e90ff" d="M182.2972,-529.4831C192.6526,-534.324 204.3306,-539.7832 215.5321,-545.0197"/>
<polygon fill="#1e90ff" stroke="#1e90ff" points="369.8916,-901.6166 380.2887,-903.6538 373.4313,-895.5775 369.8916,-901.6166"/> <polygon fill="#1e90ff" stroke="#1e90ff" points="214.2485,-548.2832 224.7898,-549.3475 217.213,-541.9419 214.2485,-548.2832"/>
</g>
<!-- Lighting Change -->
<g id="node12" class="node">
<title>Lighting Change</title>
<polygon fill="#caff70" stroke="#000000" points="312.6501,-719.7279 312.6501,-755.7279 449.6501,-755.7279 449.6501,-719.7279 312.6501,-719.7279"/>
<text text-anchor="middle" x="381.1501" y="-734.0279" font-family="Times,serif" font-size="14.00" fill="#000000">Lighting Change</text>
</g> </g>
<!-- Temperature Change --> <!-- Temperature Change -->
<g id="node14" class="node"> <g id="node14" class="node">
<title>Temperature Change</title> <title>Temperature Change</title>
<polygon fill="#caff70" stroke="#000000" points="251.3143,-640.3257 251.3143,-676.3257 420.3143,-676.3257 420.3143,-640.3257 251.3143,-640.3257"/> <polygon fill="#caff70" stroke="#000000" points="111.716,-607.2982 111.716,-643.2982 280.716,-643.2982 280.716,-607.2982 111.716,-607.2982"/>
<text text-anchor="middle" x="335.8143" y="-654.6257" font-family="Times,serif" font-size="14.00" fill="#000000">Temperature Change</text> <text text-anchor="middle" x="196.216" y="-621.5982" font-family="Times,serif" font-size="14.00" fill="#000000">Temperature Change</text>
</g> </g>
<!-- Temperature Change&#45;&gt;Sleep --> <!-- Temperature Change&#45;&gt;Sleep -->
<g id="edge5" class="edge"> <g id="edge7" class="edge">
<title>Temperature Change&#45;&gt;Sleep</title> <title>Temperature Change&#45;&gt;Sleep</title>
<path fill="none" stroke="#6495ed" d="M374.5286,-676.4834C387.7071,-684.453 401.3593,-695.0142 410.3312,-708.1035 460.0453,-780.6323 467.984,-888.8137 468.7751,-939.7357"/> <path fill="none" stroke="#6495ed" d="M210.3173,-643.6255C230.8994,-669.8748 270.97,-719.1233 309.9101,-756.4479 382.8385,-826.3509 478.3034,-897.4309 528.5109,-933.4415"/>
<polygon fill="#6495ed" stroke="#6495ed" points="465.2769,-940.0084 468.8475,-949.9834 472.2767,-939.9589 465.2769,-940.0084"/> <polygon fill="#6495ed" stroke="#6495ed" points="526.5855,-936.3673 536.7571,-939.3321 530.6545,-930.6713 526.5855,-936.3673"/>
</g> </g>
<!-- Temperature Change&#45;&gt;Heat --> <!-- Temperature Change&#45;&gt;Heat -->
<g id="edge6" class="edge"> <g id="edge8" class="edge">
<title>Temperature Change&#45;&gt;Heat</title> <title>Temperature Change&#45;&gt;Heat</title>
<path fill="none" stroke="#6495ed" d="M377.7173,-676.4388C390.5383,-684.2114 403.1431,-694.6575 410.3312,-708.1035 441.5609,-766.5219 427.038,-847.7789 415.9606,-890.0707"/> <path fill="none" stroke="#6495ed" d="M208.6591,-643.5997C248.7761,-701.2377 381.0157,-880.8287 533.6799,-976.291 549.296,-986.0559 568.378,-993.3092 584.7868,-998.3592"/>
<polygon fill="#6495ed" stroke="#6495ed" points="412.5219,-889.3758 413.2484,-899.9457 419.2719,-891.2297 412.5219,-889.3758"/> <polygon fill="#6495ed" stroke="#6495ed" points="584.0232,-1001.7823 594.6032,-1001.2216 585.9828,-995.0622 584.0232,-1001.7823"/>
</g> </g>
<!-- Temperature --> <!-- Temperature -->
<g id="node16" class="node"> <g id="node17" class="node">
<title>Temperature</title> <title>Temperature</title>
<polygon fill="#ff6347" stroke="#000000" points="798.8816,-799.2222 798.8816,-835.2222 908.8816,-835.2222 908.8816,-799.2222 798.8816,-799.2222"/> <polygon fill="#ff6347" stroke="#000000" points="897.2635,-746.3201 897.2635,-782.3201 1007.2635,-782.3201 1007.2635,-746.3201 897.2635,-746.3201"/>
<text text-anchor="middle" x="853.8816" y="-813.5222" font-family="Times,serif" font-size="14.00" fill="#000000">Temperature</text> <text text-anchor="middle" x="952.2635" y="-760.6201" font-family="Times,serif" font-size="14.00" fill="#000000">Temperature</text>
</g> </g>
<!-- Temperature Change&#45;&gt;Temperature --> <!-- Temperature Change&#45;&gt;Temperature -->
<g id="edge10" class="edge"> <g id="edge12" class="edge">
<title>Temperature Change&#45;&gt;Temperature</title> <title>Temperature Change&#45;&gt;Temperature</title>
<path fill="none" stroke="#0000ff" d="M394.7388,-676.3985C492.3973,-706.3513 687.0816,-766.0629 788.7111,-797.2338"/> <path fill="none" stroke="#0000ff" d="M280.7436,-640.8411C432.9914,-668.8364 750.1668,-727.1586 887.0517,-752.329"/>
<polygon fill="#0000ff" stroke="#0000ff" points="787.9605,-800.6644 798.5473,-800.2506 790.0132,-793.9721 787.9605,-800.6644"/> <polygon fill="#0000ff" stroke="#0000ff" points="886.5161,-755.7891 896.9842,-754.1554 887.7821,-748.9045 886.5161,-755.7891"/>
</g> </g>
<!-- Temperature Hold --> <!-- Temperature Hold -->
<g id="node15" class="node"> <g id="node15" class="node">
<title>Temperature Hold</title> <title>Temperature Hold</title>
<polygon fill="#caff70" stroke="#000000" points="90.291,-748.9024 90.291,-784.9024 239.291,-784.9024 239.291,-748.9024 90.291,-748.9024"/> <polygon fill="#caff70" stroke="#000000" points="25.0486,-562.2937 25.0486,-598.2937 174.0486,-598.2937 174.0486,-562.2937 25.0486,-562.2937"/>
<text text-anchor="middle" x="164.791" y="-763.2024" font-family="Times,serif" font-size="14.00" fill="#000000">Temperature Hold</text> <text text-anchor="middle" x="99.5486" y="-576.5937" font-family="Times,serif" font-size="14.00" fill="#000000">Temperature Hold</text>
</g> </g>
<!-- Temperature Hold&#45;&gt;Sleep --> <!-- Temperature Hold&#45;&gt;Sleep -->
<g id="edge7" class="edge"> <g id="edge9" class="edge">
<title>Temperature Hold&#45;&gt;Sleep</title> <title>Temperature Hold&#45;&gt;Sleep</title>
<path fill="none" stroke="#6495ed" d="M183.0612,-784.9387C218.2963,-818.8645 299.2587,-892.7285 379.3836,-936.8998 395.3124,-945.6811 414.1697,-952.7269 430.4238,-957.8919"/> <path fill="none" stroke="#6495ed" d="M98.2808,-598.3496C98.1773,-611.8733 99.9036,-630.3244 108.336,-644.0182 210.1931,-809.4291 435.578,-909.4455 525.0892,-943.9467"/>
<polygon fill="#6495ed" stroke="#6495ed" points="429.5722,-961.2913 440.1583,-960.8634 431.6159,-954.5963 429.5722,-961.2913"/> <polygon fill="#6495ed" stroke="#6495ed" points="523.9782,-947.2687 534.5693,-947.5505 526.4657,-940.7255 523.9782,-947.2687"/>
</g> </g>
<!-- Temperature Hold&#45;&gt;Heat --> <!-- Temperature Hold&#45;&gt;Heat -->
<g id="edge8" class="edge"> <g id="edge10" class="edge">
<title>Temperature Hold&#45;&gt;Heat</title> <title>Temperature Hold&#45;&gt;Heat</title>
<path fill="none" stroke="#6495ed" d="M194.063,-785.15C238.6848,-812.9664 323.6051,-865.904 371.7761,-895.9329"/> <path fill="none" stroke="#6495ed" d="M98.5163,-598.4907C98.5602,-611.9157 100.3684,-630.1775 108.336,-644.0182 228.0158,-851.9171 323.4057,-860.8355 533.6799,-976.291 549.7064,-985.0907 568.687,-992.2019 584.9204,-997.4071"/>
<polygon fill="#6495ed" stroke="#6495ed" points="369.9873,-898.9422 380.325,-901.2622 373.6904,-893.0018 369.9873,-898.9422"/> <polygon fill="#6495ed" stroke="#6495ed" points="584.0347,-1000.7966 594.6221,-1000.3998 586.0981,-994.1076 584.0347,-1000.7966"/>
</g> </g>
<!-- Temperature Hold&#45;&gt;Temperature --> <!-- Temperature Hold&#45;&gt;Temperature -->
<g id="edge11" class="edge">
<title>Temperature Hold&#45;&gt;Temperature</title>
<path fill="none" stroke="#0000ff" d="M239.7538,-769.3194C280.94,-770.8486 332.9194,-773.1067 379.2112,-776.1035 525.6545,-785.584 697.0939,-801.6724 788.5511,-810.6567"/>
<polygon fill="#0000ff" stroke="#0000ff" points="788.4678,-814.1654 798.7628,-811.663 789.1543,-807.1991 788.4678,-814.1654"/>
</g>
<!-- /api/action/light/kill -->
<g id="node17" class="node">
<title>/api/action/light/kill</title>
<polygon fill="#caff70" stroke="#000000" points="575.6269,-387.8233 575.6269,-423.8233 629.6269,-423.8233 629.6269,-387.8233 575.6269,-387.8233"/>
<text text-anchor="middle" x="602.6269" y="-402.1233" font-family="Times,serif" font-size="14.00" fill="#000000">kill</text>
</g>
<!-- /api/action/light/set -->
<g id="node18" class="node">
<title>/api/action/light/set</title>
<polygon fill="#caff70" stroke="#000000" points="635.6269,-437.8233 635.6269,-473.8233 689.6269,-473.8233 689.6269,-437.8233 635.6269,-437.8233"/>
<text text-anchor="middle" x="662.6269" y="-452.1233" font-family="Times,serif" font-size="14.00" fill="#000000">set</text>
</g>
<!-- /api/action/temperature/kill -->
<g id="node19" class="node">
<title>/api/action/temperature/kill</title>
<polygon fill="#caff70" stroke="#000000" points="746.1925,-374.1479 746.1925,-410.1479 800.1925,-410.1479 800.1925,-374.1479 746.1925,-374.1479"/>
<text text-anchor="middle" x="773.1925" y="-388.4479" font-family="Times,serif" font-size="14.00" fill="#000000">kill</text>
</g>
<!-- /api/action/temperature/kill&#45;&gt;Temperature Kill -->
<g id="edge13" class="edge"> <g id="edge13" class="edge">
<title>/api/action/temperature/kill&#45;&gt;Temperature Kill</title> <title>Temperature Hold&#45;&gt;Temperature</title>
<path fill="none" stroke="#1e90ff" d="M746.0959,-398.7275C717.5679,-406.1567 671.7243,-419.5354 634.5469,-437.1033 570.526,-467.3559 562.4625,-488.9746 500.3578,-522.9879 391.9669,-582.351 359.2196,-585.8644 247.9343,-639.6058 207.3599,-659.1997 161.5852,-682.373 128.8598,-699.1279"/> <path fill="none" stroke="#0000ff" d="M174.3302,-589.3829C207.993,-593.8752 248.1613,-599.7918 284.096,-606.5782 507.374,-648.7452 768.6473,-715.5874 887.5047,-746.9698"/>
<polygon fill="#1e90ff" stroke="#1e90ff" points="126.8691,-696.2152 119.5675,-703.8924 130.0629,-702.4442 126.8691,-696.2152"/> <polygon fill="#0000ff" stroke="#0000ff" points="886.6246,-750.3573 897.1872,-749.5311 888.4148,-743.59 886.6246,-750.3573"/>
</g> </g>
<!-- /api/action/temperature/kill&#45;&gt;Temperature --> <!-- Temperature Kill&#45;&gt;Heat -->
<g id="edge14" class="edge"> <g id="edge11" class="edge">
<title>/api/action/temperature/kill&#45;&gt;Temperature</title> <title>Temperature Kill&#45;&gt;Heat</title>
<path fill="none" stroke="#00bfff" d="M798.753,-410.3934C801.0069,-412.8717 803.0217,-415.5603 804.5846,-418.4324 872.3188,-542.9043 863.599,-720.9294 857.1089,-789.1498"/> <path fill="none" stroke="#1e90ff" d="M295.9754,-585.6517C350.2964,-617.5679 459.8784,-688.4409 525.2701,-775.0079 574.2827,-839.892 603.0331,-933.2686 615.0901,-979.4763"/>
<polygon fill="#00bfff" stroke="#00bfff" points="853.6235,-788.8293 856.0984,-799.131 860.5879,-789.5344 853.6235,-788.8293"/> <polygon fill="#1e90ff" stroke="#1e90ff" points="611.7514,-980.5493 617.6054,-989.38 618.536,-978.8261 611.7514,-980.5493"/>
</g>
<!-- /api/action/temperature/set -->
<g id="node20" class="node">
<title>/api/action/temperature/set</title>
<polygon fill="#caff70" stroke="#000000" points="749.5046,-419.1524 749.5046,-455.1524 803.5046,-455.1524 803.5046,-419.1524 749.5046,-419.1524"/>
<text text-anchor="middle" x="776.5046" y="-433.4524" font-family="Times,serif" font-size="14.00" fill="#000000">set</text>
</g>
<!-- /api/action/temperature/set&#45;&gt;Temperature Change -->
<g id="edge12" class="edge">
<title>/api/action/temperature/set&#45;&gt;Temperature Change</title>
<path fill="none" stroke="#1e90ff" d="M749.27,-450.8208C675.6109,-487.7888 471.8888,-590.0328 380.8187,-635.7389"/>
<polygon fill="#1e90ff" stroke="#1e90ff" points="379.2118,-632.6293 371.8442,-640.2431 382.3517,-638.8856 379.2118,-632.6293"/>
</g> </g>
<!-- /api/sensor/temperature --> <!-- /api/sensor/temperature -->
<g id="node21" class="node"> <g id="node18" class="node">
<title>/api/sensor/temperature</title> <title>/api/sensor/temperature</title>
<polygon fill="#caff70" stroke="#000000" points="617.0397,-16.127 617.0397,-52.127 724.0397,-52.127 724.0397,-16.127 617.0397,-16.127"/> <polygon fill="#caff70" stroke="#000000" points="624.1819,-77.9259 624.1819,-113.9259 731.1819,-113.9259 731.1819,-77.9259 624.1819,-77.9259"/>
<text text-anchor="middle" x="670.5397" y="-30.427" font-family="Times,serif" font-size="14.00" fill="#000000">temperature</text> <text text-anchor="middle" x="677.6819" y="-92.2259" font-family="Times,serif" font-size="14.00" fill="#000000">temperature</text>
</g> </g>
<!-- /api/routine/cook/list --> <!-- /api/sensor/temperature&#45;&gt;Temperature -->
<g id="node22" class="node">
<title>/api/routine/cook/list</title>
<polygon fill="#caff70" stroke="#000000" points="445.2778,-430.2679 445.2778,-466.2679 499.2778,-466.2679 499.2778,-430.2679 445.2778,-430.2679"/>
<text text-anchor="middle" x="472.2778" y="-444.5679" font-family="Times,serif" font-size="14.00" fill="#000000">list</text>
</g>
<!-- /api/settings/cook/recipe/list -->
<g id="node30" class="node">
<title>/api/settings/cook/recipe/list</title>
<polygon fill="#caff70" stroke="#000000" points="284.516,-96.4087 284.516,-132.4087 338.516,-132.4087 338.516,-96.4087 284.516,-96.4087"/>
<text text-anchor="middle" x="311.516" y="-110.7087" font-family="Times,serif" font-size="14.00" fill="#000000">list</text>
</g>
<!-- /api/routine/cook/list&#45;&gt;/api/settings/cook/recipe/list -->
<g id="edge15" class="edge"> <g id="edge15" class="edge">
<title>/api/routine/cook/list&#45;&gt;/api/settings/cook/recipe/list</title> <title>/api/sensor/temperature&#45;&gt;Temperature</title>
<path fill="none" stroke="#00bfff" d="M457.4257,-430.2561C452.8829,-424.3163 448.0687,-417.5475 444.1978,-410.9879 388.7191,-316.9732 341.2948,-195.6118 321.4524,-141.9781"/> <path fill="none" stroke="#00bfff" d="M696.7125,-114.0515C723.4597,-140.6694 771.7201,-193.0905 796.9709,-247.4371 821.9105,-301.1141 808.485,-320.7079 823.8109,-377.8771 860.4012,-514.3681 918.1572,-673.294 941.7239,-736.4208"/>
<polygon fill="#00bfff" stroke="#00bfff" points="324.6966,-140.659 317.9649,-132.4776 318.1253,-143.0712 324.6966,-140.659"/> <polygon fill="#00bfff" stroke="#00bfff" points="938.5465,-737.9161 945.3324,-746.0526 945.1015,-735.4602 938.5465,-737.9161"/>
</g> </g>
<!-- /api/routine/cook/start --> <!-- /api/recipe/list -->
<g id="node19" class="node">
<title>/api/recipe/list</title>
<polygon fill="#caff70" stroke="#000000" points="546.0521,-17.0776 546.0521,-53.0776 600.0521,-53.0776 600.0521,-17.0776 546.0521,-17.0776"/>
<text text-anchor="middle" x="573.0521" y="-31.3776" font-family="Times,serif" font-size="14.00" fill="#000000">list</text>
</g>
<!-- /api/recipe/start -->
<g id="node20" class="node">
<title>/api/recipe/start</title>
<polygon fill="#caff70" stroke="#000000" points="546.0521,-71.0776 546.0521,-107.0776 600.0521,-107.0776 600.0521,-71.0776 546.0521,-71.0776"/>
<text text-anchor="middle" x="573.0521" y="-85.3776" font-family="Times,serif" font-size="14.00" fill="#000000">start</text>
</g>
<!-- /api/recipe/kill -->
<g id="node21" class="node">
<title>/api/recipe/kill</title>
<polygon fill="#caff70" stroke="#000000" points="545.4845,-125.3139 545.4845,-161.3139 599.4845,-161.3139 599.4845,-125.3139 545.4845,-125.3139"/>
<text text-anchor="middle" x="572.4845" y="-139.6139" font-family="Times,serif" font-size="14.00" fill="#000000">kill</text>
</g>
<!-- /api/recipe/kill&#45;&gt;All Kill -->
<g id="edge14" class="edge">
<title>/api/recipe/kill&#45;&gt;All Kill</title>
<path fill="none" stroke="#1e90ff" d="M551.8073,-161.4562C482.4083,-222.3471 257.6931,-419.5133 178.0357,-489.4051"/>
<polygon fill="#1e90ff" stroke="#1e90ff" points="175.5625,-486.9188 170.354,-496.145 180.1792,-492.1806 175.5625,-486.9188"/>
</g>
<!-- /api/recipe/schedule/add -->
<g id="node22" class="node">
<title>/api/recipe/schedule/add</title>
<polygon fill="#caff70" stroke="#000000" points="457.2902,-108.2185 457.2902,-144.2185 511.2902,-144.2185 511.2902,-108.2185 457.2902,-108.2185"/>
<text text-anchor="middle" x="484.2902" y="-122.5185" font-family="Times,serif" font-size="14.00" fill="#000000">add</text>
</g>
<!-- /api/recipe/schedule/delete -->
<g id="node23" class="node"> <g id="node23" class="node">
<title>/api/routine/cook/start</title> <title>/api/recipe/schedule/delete</title>
<polygon fill="#caff70" stroke="#000000" points="445.2778,-486.2679 445.2778,-522.2679 499.2778,-522.2679 499.2778,-486.2679 445.2778,-486.2679"/> <polygon fill="#caff70" stroke="#000000" points="391.7902,-58.2185 391.7902,-94.2185 452.7902,-94.2185 452.7902,-58.2185 391.7902,-58.2185"/>
<text text-anchor="middle" x="472.2778" y="-500.5679" font-family="Times,serif" font-size="14.00" fill="#000000">start</text> <text text-anchor="middle" x="422.2902" y="-72.5185" font-family="Times,serif" font-size="14.00" fill="#000000">delete</text>
</g> </g>
<!-- /api/routine/cook/kill --> <!-- /api/recipe/schedule/list -->
<g id="node24" class="node"> <g id="node24" class="node">
<title>/api/routine/cook/kill</title> <title>/api/recipe/schedule/list</title>
<polygon fill="#caff70" stroke="#000000" points="445.2778,-374.2679 445.2778,-410.2679 499.2778,-410.2679 499.2778,-374.2679 445.2778,-374.2679"/> <polygon fill="#caff70" stroke="#000000" points="462.2902,-43.2185 462.2902,-79.2185 516.2902,-79.2185 516.2902,-43.2185 462.2902,-43.2185"/>
<text text-anchor="middle" x="472.2778" y="-388.5679" font-family="Times,serif" font-size="14.00" fill="#000000">kill</text> <text text-anchor="middle" x="489.2902" y="-57.5185" font-family="Times,serif" font-size="14.00" fill="#000000">list</text>
</g>
<!-- /api/routine/cook/schedule/list -->
<g id="node25" class="node">
<title>/api/routine/cook/schedule/list</title>
<polygon fill="#caff70" stroke="#000000" points="309.516,-389.9087 309.516,-425.9087 363.516,-425.9087 363.516,-389.9087 309.516,-389.9087"/>
<text text-anchor="middle" x="336.516" y="-404.2087" font-family="Times,serif" font-size="14.00" fill="#000000">list</text>
</g>
<!-- /api/routine/cook/schedule/set -->
<g id="node26" class="node">
<title>/api/routine/cook/schedule/set</title>
<polygon fill="#caff70" stroke="#000000" points="369.516,-439.9087 369.516,-475.9087 423.516,-475.9087 423.516,-439.9087 369.516,-439.9087"/>
<text text-anchor="middle" x="396.516" y="-454.2087" font-family="Times,serif" font-size="14.00" fill="#000000">set</text>
</g> </g>
<!-- /api/settings/time/set --> <!-- /api/settings/time/set -->
<g id="node27" class="node"> <g id="node25" class="node">
<title>/api/settings/time/set</title> <title>/api/settings/time/set</title>
<polygon fill="#caff70" stroke="#000000" points="444.2778,-228.2679 444.2778,-264.2679 498.2778,-264.2679 498.2778,-228.2679 444.2778,-228.2679"/> <polygon fill="#caff70" stroke="#000000" points="736.8909,-341.1571 736.8909,-377.1571 790.8909,-377.1571 790.8909,-341.1571 736.8909,-341.1571"/>
<text text-anchor="middle" x="471.2778" y="-242.5679" font-family="Times,serif" font-size="14.00" fill="#000000">set</text> <text text-anchor="middle" x="763.8909" y="-355.4571" font-family="Times,serif" font-size="14.00" fill="#000000">set</text>
</g> </g>
<!-- /api/settings/lighting/list --> <!-- /api/settings/lighting/list -->
<g id="node28" class="node"> <g id="node26" class="node">
<title>/api/settings/lighting/list</title> <title>/api/settings/lighting/list</title>
<polygon fill="#caff70" stroke="#000000" points="504.2778,-124.2679 504.2778,-160.2679 558.2778,-160.2679 558.2778,-124.2679 504.2778,-124.2679"/> <polygon fill="#caff70" stroke="#000000" points="741.8909,-248.1571 741.8909,-284.1571 795.8909,-284.1571 795.8909,-248.1571 741.8909,-248.1571"/>
<text text-anchor="middle" x="531.2778" y="-138.5679" font-family="Times,serif" font-size="14.00" fill="#000000">list</text> <text text-anchor="middle" x="768.8909" y="-262.4571" font-family="Times,serif" font-size="14.00" fill="#000000">list</text>
</g> </g>
<!-- /api/settings/lighting/set --> <!-- /api/settings/lighting/set -->
<g id="node29" class="node"> <g id="node27" class="node">
<title>/api/settings/lighting/set</title> <title>/api/settings/lighting/set</title>
<polygon fill="#caff70" stroke="#000000" points="444.2778,-74.2679 444.2778,-110.2679 498.2778,-110.2679 498.2778,-74.2679 444.2778,-74.2679"/> <polygon fill="#caff70" stroke="#000000" points="681.8909,-198.1571 681.8909,-234.1571 735.8909,-234.1571 735.8909,-198.1571 681.8909,-198.1571"/>
<text text-anchor="middle" x="471.2778" y="-88.5679" font-family="Times,serif" font-size="14.00" fill="#000000">set</text> <text text-anchor="middle" x="708.8909" y="-212.4571" font-family="Times,serif" font-size="14.00" fill="#000000">set</text>
</g> </g>
<!-- /api/settings/cook/recipe/set --> <!-- /api/settings/recipe/set -->
<g id="node31" class="node"> <g id="node28" class="node">
<title>/api/settings/cook/recipe/set</title> <title>/api/settings/recipe/set</title>
<polygon fill="#caff70" stroke="#000000" points="344.516,-146.4087 344.516,-182.4087 398.516,-182.4087 398.516,-146.4087 344.516,-146.4087"/> <polygon fill="#caff70" stroke="#000000" points="824.8909,-341.1571 824.8909,-377.1571 878.8909,-377.1571 878.8909,-341.1571 824.8909,-341.1571"/>
<text text-anchor="middle" x="371.516" y="-160.7087" font-family="Times,serif" font-size="14.00" fill="#000000">set</text> <text text-anchor="middle" x="851.8909" y="-355.4571" font-family="Times,serif" font-size="14.00" fill="#000000">set</text>
</g> </g>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 22 KiB