rice: More thoughts and slight API change.

This commit is contained in:
William Floyd 2018-07-03 17:56:38 -05:00
parent 2f24d96d28
commit e1ee45e94e
Signed by untrusted user who does not match committer: william
GPG key ID: B3EEEDD81893CAF9
3 changed files with 150 additions and 119 deletions

View file

@ -38,19 +38,36 @@ Many of my parts have arrived (rice cooker, thermistors, relay, and NodeMCU), so
# Thoughts
Having received shipment of the rice cooker, and beginning to use it, I realise there's nothing about it that makes it fit only for rice, if I can control the heating myself.
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.
The possibility of steaming things only furthers this goal.
## Heating
The contents of the rice cooker should be considered when heating/cooling, as they will absorb the heat and thermal lag will be an issue.
If possible, look into either weighing the contents for a rough approximation (hard/complicated) or use recipe provided portion sizes to calculate the thermal capacity of the contents (water, mainly).
Seeing as the dumb rice cooker still manages to kick itself off when needed, even given different serving sizes, there must be a simple way to find the time needed to cook the rice, even without predefines portion sizes.
On the face of it, I would assume the time rice is kept at full heat will only slightly increase in duration as the volume of rice increases, if at all.
The time it takes to get up to heat shouln't be ignored, as some cooking must be done during that time.
The variety of rice should not be discounted either.
Further research into the dynamics of rice cooking are meritted, once internet and more rice is available once again.
## Cooling
I am planning my setup in such a way as to allow actively cooling the cooking pot, but upon further consideration, it is likely not an issue worth worrying about.
As such, I'll continue my planning as I am, but not be too worried about the details for now.
***
# API
I tentatively (with no real experience designing them) plan on my API being something like the following.
*Italicized* = Description
- `/action/light/kill` - *Stops all light activity*
- `/action/light/set` - *Change lighting mode, with optional duration*
- `/action/temperature/kill` - *Stops all heating/cooling, lets the cooker cool to room temperature alone*
@ -69,7 +86,7 @@ I tentatively (with no real experience designing them) plan on my API being some
- `/settings/cook/warm/temperature` - *Set post-cook warming temperature*
- `/settings/lighting/list` - *List lighting modes*
- `/settings/lighting/set` - *Submit/modify/delete a lighting mode*
- `/settings/time` - *Set/read date and time*
- `/settings/time/set` - *Set/read date and time*
# Cooking schedule definition specifications
@ -84,13 +101,14 @@ Just wait for given duration, or until a given condition is met.
Heat for a given duration, or until a given condition is met.
### Cool
Cool for a given duration, or until a given condition is met.
If I someday choose to use a fan, this should be an active feature.
Instead, it's the same as `Sleep` for now.
### Temperature
Heat/cool to given temperature, optionally at a given rate of change (may be difficult for cooling if no fan is included).
This should just be a proxy directive to `Heat`, `Cool`, and `Sleep`.
For now that should work, but in due course, with tuning and benchmarks, this should run cooling at a variable rate.
For now that should work, but in due course, with tuning and benchmarks, this should run cooling at a variable rate (using a fan, I wouldn't want to cut on and off all the time).
Heating should be fine be fine with fairly large PWM, as the thermal lag I expect to be significant, and we want to try to hit our deadline as quickly as possible.
# Dep Graph

View file

@ -98,7 +98,15 @@ digraph {
subgraph cluster_settings {
"/api/settings/time"[label="time"]
subgraph cluster_time {
"/api/settings/time/set"[label="set"]
label="time"
}
subgraph cluster_lighting {
@ -163,7 +171,7 @@ digraph {
"/api/settings/cook/warm/temperature"[documented]
"/api/settings/lighting/list"[documented]
"/api/settings/lighting/set"[documented]
"/api/settings/time"[documented]
"/api/settings/time/set"[documented]
"Temperature"[documented]
"Heat"[documented]

View file

@ -4,309 +4,314 @@
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: %3 Pages: 1 -->
<svg width="1329pt" height="1073pt"
viewBox="0.00 0.00 1329.00 1073.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 1069)">
<svg width="1305pt" height="1103pt"
viewBox="0.00 0.00 1305.00 1103.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 1099)">
<title>%3</title>
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-1069 1325,-1069 1325,4 -4,4"/>
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-1099 1301,-1099 1301,4 -4,4"/>
<g id="clust1" class="cluster">
<title>cluster_key</title>
<polygon fill="none" stroke="#000000" points="863.7381,-810.1409 863.7381,-1065.1409 1320.7381,-1065.1409 1320.7381,-810.1409 863.7381,-810.1409"/>
<text text-anchor="middle" x="1092.2381" y="-1049.9409" font-family="Times,serif" font-size="14.00" fill="#000000">Key</text>
<polygon fill="none" stroke="#000000" points="839.7381,-840.1409 839.7381,-1095.1409 1296.7381,-1095.1409 1296.7381,-840.1409 839.7381,-840.1409"/>
<text text-anchor="middle" x="1068.2381" y="-1079.9409" font-family="Times,serif" font-size="14.00" fill="#000000">Key</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_doc</title>
<polygon fill="none" stroke="#000000" points="1091.4762,-917.7818 1091.4762,-1033.7818 1312.4762,-1033.7818 1312.4762,-917.7818 1091.4762,-917.7818"/>
<polygon fill="none" stroke="#000000" points="1067.4762,-947.7818 1067.4762,-1063.7818 1288.4762,-1063.7818 1288.4762,-947.7818 1067.4762,-947.7818"/>
</g>
<g id="clust3" class="cluster">
<title>cluster_sub</title>
<polygon fill="none" stroke="#000000" points="871.7866,-817.6918 871.7866,-963.6918 1048.7866,-963.6918 1048.7866,-817.6918 871.7866,-817.6918"/>
<polygon fill="none" stroke="#000000" points="847.7866,-847.6918 847.7866,-993.6918 1024.7866,-993.6918 1024.7866,-847.6918 847.7866,-847.6918"/>
</g>
<g id="clust4" class="cluster">
<title>cluster_directives</title>
<polygon fill="none" stroke="#000000" points="594.2381,-809.6409 594.2381,-993.6409 790.2381,-993.6409 790.2381,-809.6409 594.2381,-809.6409"/>
<text text-anchor="middle" x="692.2381" y="-978.4409" font-family="Times,serif" font-size="14.00" fill="#000000">Directives</text>
<polygon fill="none" stroke="#000000" points="560.2381,-839.6409 560.2381,-1023.6409 756.2381,-1023.6409 756.2381,-839.6409 560.2381,-839.6409"/>
<text text-anchor="middle" x="658.2381" y="-1008.4409" font-family="Times,serif" font-size="14.00" fill="#000000">Directives</text>
</g>
<g id="clust5" class="cluster">
<title>cluster_api</title>
<polygon fill="none" stroke="#000000" points=".2381,.3591 .2381,-699.6409 808.2381,-699.6409 808.2381,.3591 .2381,.3591"/>
<text text-anchor="middle" x="404.2381" y="-684.4409" font-family="Times,serif" font-size="14.00" fill="#000000">api</text>
<polygon fill="none" stroke="#000000" points=".2381,.3591 .2381,-745.6409 824.2381,-745.6409 824.2381,.3591 .2381,.3591"/>
<text text-anchor="middle" x="412.2381" y="-730.4409" font-family="Times,serif" font-size="14.00" fill="#000000">api</text>
</g>
<g id="clust6" class="cluster">
<title>cluster_action</title>
<polygon fill="none" stroke="#000000" points="504.4762,-441.2818 504.4762,-621.2818 800.4762,-621.2818 800.4762,-441.2818 504.4762,-441.2818"/>
<text text-anchor="middle" x="652.4762" y="-606.0818" font-family="Times,serif" font-size="14.00" fill="#000000">action</text>
<polygon fill="none" stroke="#000000" points="520.4762,-487.2818 520.4762,-667.2818 816.4762,-667.2818 816.4762,-487.2818 520.4762,-487.2818"/>
<text text-anchor="middle" x="668.4762" y="-652.0818" font-family="Times,serif" font-size="14.00" fill="#000000">action</text>
</g>
<g id="clust7" class="cluster">
<title>cluster_light</title>
<polygon fill="none" stroke="#000000" points="662.7144,-448.9227 662.7144,-574.9227 792.7144,-574.9227 792.7144,-448.9227 662.7144,-448.9227"/>
<text text-anchor="middle" x="727.7144" y="-559.7227" font-family="Times,serif" font-size="14.00" fill="#000000">light</text>
<polygon fill="none" stroke="#000000" points="678.7144,-494.9227 678.7144,-620.9227 808.7144,-620.9227 808.7144,-494.9227 678.7144,-494.9227"/>
<text text-anchor="middle" x="743.7144" y="-605.7227" font-family="Times,serif" font-size="14.00" fill="#000000">light</text>
</g>
<g id="clust8" class="cluster">
<title>cluster_temperature</title>
<polygon fill="none" stroke="#000000" points="512.7144,-463.9227 512.7144,-589.9227 642.7144,-589.9227 642.7144,-463.9227 512.7144,-463.9227"/>
<text text-anchor="middle" x="577.7144" y="-574.7227" font-family="Times,serif" font-size="14.00" fill="#000000">temperature</text>
<polygon fill="none" stroke="#000000" points="528.7144,-509.9227 528.7144,-635.9227 658.7144,-635.9227 658.7144,-509.9227 528.7144,-509.9227"/>
<text text-anchor="middle" x="593.7144" y="-620.7227" font-family="Times,serif" font-size="14.00" fill="#000000">temperature</text>
</g>
<g id="clust9" class="cluster">
<title>cluster_sensor</title>
<polygon fill="none" stroke="#000000" points="38.9762,-441.2818 38.9762,-517.2818 161.9762,-517.2818 161.9762,-441.2818 38.9762,-441.2818"/>
<text text-anchor="middle" x="100.4762" y="-502.0818" font-family="Times,serif" font-size="14.00" fill="#000000">sensor</text>
<polygon fill="none" stroke="#000000" points="71.9762,-487.2818 71.9762,-563.2818 194.9762,-563.2818 194.9762,-487.2818 71.9762,-487.2818"/>
<text text-anchor="middle" x="133.4762" y="-548.0818" font-family="Times,serif" font-size="14.00" fill="#000000">sensor</text>
</g>
<g id="clust10" class="cluster">
<title>cluster_routine</title>
<polygon fill="none" stroke="#000000" points="225.4762,-441.7818 225.4762,-668.7818 455.4762,-668.7818 455.4762,-441.7818 225.4762,-441.7818"/>
<text text-anchor="middle" x="340.4762" y="-653.5818" font-family="Times,serif" font-size="14.00" fill="#000000">routine</text>
<polygon fill="none" stroke="#000000" points="232.4762,-487.7818 232.4762,-714.7818 462.4762,-714.7818 462.4762,-487.7818 232.4762,-487.7818"/>
<text text-anchor="middle" x="347.4762" y="-699.5818" font-family="Times,serif" font-size="14.00" fill="#000000">routine</text>
</g>
<g id="clust11" class="cluster">
<title>cluster_routine_cook</title>
<polygon fill="none" stroke="#000000" points="233.7144,-449.4227 233.7144,-637.4227 447.7144,-637.4227 447.7144,-449.4227 233.7144,-449.4227"/>
<text text-anchor="middle" x="340.7144" y="-622.2227" font-family="Times,serif" font-size="14.00" fill="#000000">cook</text>
<polygon fill="none" stroke="#000000" points="240.7144,-495.4227 240.7144,-683.4227 454.7144,-683.4227 454.7144,-495.4227 240.7144,-495.4227"/>
<text text-anchor="middle" x="347.7144" y="-668.2227" font-family="Times,serif" font-size="14.00" fill="#000000">cook</text>
</g>
<g id="clust12" class="cluster">
<title>cluster_schedule</title>
<polygon fill="none" stroke="#000000" points="241.9525,-465.0636 241.9525,-591.0636 371.9525,-591.0636 371.9525,-465.0636 241.9525,-465.0636"/>
<text text-anchor="middle" x="306.9525" y="-575.8636" font-family="Times,serif" font-size="14.00" fill="#000000">schedule</text>
<polygon fill="none" stroke="#000000" points="248.9525,-511.0636 248.9525,-637.0636 378.9525,-637.0636 378.9525,-511.0636 248.9525,-511.0636"/>
<text text-anchor="middle" x="313.9525" y="-621.8636" font-family="Times,serif" font-size="14.00" fill="#000000">schedule</text>
</g>
<g id="clust13" class="cluster">
<title>cluster_settings</title>
<polygon fill="none" stroke="#000000" points="8.4762,-7.2818 8.4762,-387.2818 522.4762,-387.2818 522.4762,-7.2818 8.4762,-7.2818"/>
<text text-anchor="middle" x="265.4762" y="-372.0818" font-family="Times,serif" font-size="14.00" fill="#000000">settings</text>
<polygon fill="none" stroke="#000000" points="8.4762,-7.2818 8.4762,-435.2818 538.4762,-435.2818 538.4762,-7.2818 8.4762,-7.2818"/>
<text text-anchor="middle" x="273.4762" y="-420.0818" font-family="Times,serif" font-size="14.00" fill="#000000">settings</text>
</g>
<g id="clust14" class="cluster">
<title>cluster_lighting</title>
<polygon fill="none" stroke="#000000" points="384.7144,-14.9227 384.7144,-140.9227 514.7144,-140.9227 514.7144,-14.9227 384.7144,-14.9227"/>
<text text-anchor="middle" x="449.7144" y="-125.7227" font-family="Times,serif" font-size="14.00" fill="#000000">lighting</text>
<title>cluster_time</title>
<polygon fill="none" stroke="#000000" points="400.7144,-182.9227 400.7144,-258.9227 470.7144,-258.9227 470.7144,-182.9227 400.7144,-182.9227"/>
<text text-anchor="middle" x="435.7144" y="-243.7227" font-family="Times,serif" font-size="14.00" fill="#000000">time</text>
</g>
<g id="clust15" class="cluster">
<title>cluster_settings_cook</title>
<polygon fill="none" stroke="#000000" points="16.7144,-15.4227 16.7144,-356.4227 354.7144,-356.4227 354.7144,-15.4227 16.7144,-15.4227"/>
<text text-anchor="middle" x="185.7144" y="-341.2227" font-family="Times,serif" font-size="14.00" fill="#000000">cook</text>
<title>cluster_lighting</title>
<polygon fill="none" stroke="#000000" points="400.7144,-14.9227 400.7144,-140.9227 530.7144,-140.9227 530.7144,-14.9227 400.7144,-14.9227"/>
<text text-anchor="middle" x="465.7144" y="-125.7227" font-family="Times,serif" font-size="14.00" fill="#000000">lighting</text>
</g>
<g id="clust16" class="cluster">
<title>cluster_warm</title>
<polygon fill="none" stroke="#000000" points="24.4525,-23.0636 24.4525,-165.0636 201.4525,-165.0636 201.4525,-23.0636 24.4525,-23.0636"/>
<text text-anchor="middle" x="112.9525" y="-149.8636" font-family="Times,serif" font-size="14.00" fill="#000000">warm</text>
<title>cluster_settings_cook</title>
<polygon fill="none" stroke="#000000" points="16.7144,-63.4227 16.7144,-404.4227 354.7144,-404.4227 354.7144,-63.4227 16.7144,-63.4227"/>
<text text-anchor="middle" x="185.7144" y="-389.2227" font-family="Times,serif" font-size="14.00" fill="#000000">cook</text>
</g>
<g id="clust17" class="cluster">
<title>cluster_warm</title>
<polygon fill="none" stroke="#000000" points="24.4525,-71.0636 24.4525,-213.0636 201.4525,-213.0636 201.4525,-71.0636 24.4525,-71.0636"/>
<text text-anchor="middle" x="112.9525" y="-197.8636" font-family="Times,serif" font-size="14.00" fill="#000000">warm</text>
</g>
<g id="clust18" class="cluster">
<title>cluster_recipe</title>
<polygon fill="none" stroke="#000000" points="216.9525,-199.0636 216.9525,-325.0636 346.9525,-325.0636 346.9525,-199.0636 216.9525,-199.0636"/>
<text text-anchor="middle" x="281.9525" y="-309.8636" font-family="Times,serif" font-size="14.00" fill="#000000">recipe</text>
<polygon fill="none" stroke="#000000" points="216.9525,-247.0636 216.9525,-373.0636 346.9525,-373.0636 346.9525,-247.0636 216.9525,-247.0636"/>
<text text-anchor="middle" x="281.9525" y="-357.8636" font-family="Times,serif" font-size="14.00" fill="#000000">recipe</text>
</g>
<!-- Done -->
<g id="node1" class="node">
<title>Done</title>
<polygon fill="#7fff00" stroke="#000000" points="1127.7144,-989.4227 1127.7144,-1025.4227 1181.7144,-1025.4227 1181.7144,-989.4227 1127.7144,-989.4227"/>
<text text-anchor="middle" x="1154.7144" y="-1003.7227" font-family="Times,serif" font-size="14.00" fill="#000000">Done</text>
<polygon fill="#7fff00" stroke="#000000" points="1103.7144,-1019.4227 1103.7144,-1055.4227 1157.7144,-1055.4227 1157.7144,-1019.4227 1103.7144,-1019.4227"/>
<text text-anchor="middle" x="1130.7144" y="-1033.7227" font-family="Times,serif" font-size="14.00" fill="#000000">Done</text>
</g>
<!-- Documented -->
<g id="node2" class="node">
<title>Documented</title>
<polygon fill="#caff70" stroke="#000000" points="1197.2144,-975.4227 1197.2144,-1011.4227 1304.2144,-1011.4227 1304.2144,-975.4227 1197.2144,-975.4227"/>
<text text-anchor="middle" x="1250.7144" y="-989.7227" font-family="Times,serif" font-size="14.00" fill="#000000">Documented</text>
<polygon fill="#caff70" stroke="#000000" points="1173.2144,-1005.4227 1173.2144,-1041.4227 1280.2144,-1041.4227 1280.2144,-1005.4227 1173.2144,-1005.4227"/>
<text text-anchor="middle" x="1226.7144" y="-1019.7227" font-family="Times,serif" font-size="14.00" fill="#000000">Documented</text>
</g>
<!-- Undocumented -->
<g id="node3" class="node">
<title>Undocumented</title>
<polygon fill="#ff6347" stroke="#000000" points="1099.7144,-926.4227 1099.7144,-962.4227 1225.7144,-962.4227 1225.7144,-926.4227 1099.7144,-926.4227"/>
<text text-anchor="middle" x="1162.7144" y="-940.7227" font-family="Times,serif" font-size="14.00" fill="#000000">Undocumented</text>
<polygon fill="#ff6347" stroke="#000000" points="1075.7144,-956.4227 1075.7144,-992.4227 1201.7144,-992.4227 1201.7144,-956.4227 1075.7144,-956.4227"/>
<text text-anchor="middle" x="1138.7144" y="-970.7227" font-family="Times,serif" font-size="14.00" fill="#000000">Undocumented</text>
</g>
<!-- Depend on value -->
<g id="node4" class="node">
<title>Depend on value</title>
<polygon fill="transparent" stroke="#000000" points="879.4052,-825.7921 879.4052,-861.7921 1015.4052,-861.7921 1015.4052,-825.7921 879.4052,-825.7921"/>
<text text-anchor="middle" x="947.4052" y="-840.0921" font-family="Times,serif" font-size="14.00" fill="#000000">Depend on value</text>
<polygon fill="transparent" stroke="#000000" points="881.0548,-949.3938 881.0548,-985.3938 1017.0548,-985.3938 1017.0548,-949.3938 881.0548,-949.3938"/>
<text text-anchor="middle" x="949.0548" y="-963.6938" font-family="Times,serif" font-size="14.00" fill="#000000">Depend on value</text>
</g>
<!-- Node -->
<g id="node7" class="node">
<title>Node</title>
<polygon fill="transparent" stroke="#000000" points="1056.799,-854.1636 1056.799,-890.1636 1111.799,-890.1636 1111.799,-854.1636 1056.799,-854.1636"/>
<text text-anchor="middle" x="1084.299" y="-868.4636" font-family="Times,serif" font-size="14.00" fill="#000000">Node</text>
<polygon fill="transparent" stroke="#000000" points="1032.799,-884.1636 1032.799,-920.1636 1087.799,-920.1636 1087.799,-884.1636 1032.799,-884.1636"/>
<text text-anchor="middle" x="1060.299" y="-898.4636" font-family="Times,serif" font-size="14.00" fill="#000000">Node</text>
</g>
<!-- Depend on value&#45;&gt;Node -->
<g id="edge1" class="edge">
<title>Depend on value&#45;&gt;Node</title>
<path fill="none" stroke="#0000ff" d="M1015.451,-857.8947C1026.1938,-860.1212 1036.9497,-862.3504 1046.6602,-864.3629"/>
<polygon fill="#0000ff" stroke="#0000ff" points="1046.2345,-867.849 1056.7368,-866.4513 1047.6552,-860.9946 1046.2345,-867.849"/>
<path fill="none" stroke="#0000ff" d="M980.0425,-949.2236C993.5434,-941.3071 1009.4707,-931.9678 1023.5628,-923.7046"/>
<polygon fill="#0000ff" stroke="#0000ff" points="1025.6584,-926.5332 1032.5144,-918.4557 1022.1176,-920.4947 1025.6584,-926.5332"/>
</g>
<!-- Proxy to value -->
<g id="node5" class="node">
<title>Proxy to value</title>
<polygon fill="transparent" stroke="#000000" points="879.7255,-874.3893 879.7255,-910.3893 998.7255,-910.3893 998.7255,-874.3893 879.7255,-874.3893"/>
<text text-anchor="middle" x="939.2255" y="-888.6893" font-family="Times,serif" font-size="14.00" fill="#000000">Proxy to value</text>
<polygon fill="transparent" stroke="#000000" points="866.7255,-904.3893 866.7255,-940.3893 985.7255,-940.3893 985.7255,-904.3893 866.7255,-904.3893"/>
<text text-anchor="middle" x="926.2255" y="-918.6893" font-family="Times,serif" font-size="14.00" fill="#000000">Proxy to value</text>
</g>
<!-- Proxy to value&#45;&gt;Node -->
<g id="edge2" class="edge">
<title>Proxy to value&#45;&gt;Node</title>
<path fill="none" stroke="#00bfff" d="M999.0701,-884.046C1015.1486,-881.8044 1032.0858,-879.443 1046.588,-877.4212"/>
<polygon fill="#00bfff" stroke="#00bfff" points="1047.2495,-880.8629 1056.6704,-876.0155 1046.2828,-873.93 1047.2495,-880.8629"/>
<path fill="none" stroke="#00bfff" d="M985.8129,-913.4002C998.3426,-911.5101 1011.2237,-909.5669 1022.6762,-907.8392"/>
<polygon fill="#00bfff" stroke="#00bfff" points="1023.3751,-911.2735 1032.7411,-906.3209 1022.3309,-904.3518 1023.3751,-911.2735"/>
</g>
<!-- Depend on function -->
<g id="node6" class="node">
<title>Depend on function</title>
<polygon fill="transparent" stroke="#000000" points="883.5548,-919.3938 883.5548,-955.3938 1040.5548,-955.3938 1040.5548,-919.3938 883.5548,-919.3938"/>
<text text-anchor="middle" x="962.0548" y="-933.6938" font-family="Times,serif" font-size="14.00" fill="#000000">Depend on function</text>
<polygon fill="transparent" stroke="#000000" points="855.9052,-855.7921 855.9052,-891.7921 1012.9052,-891.7921 1012.9052,-855.7921 855.9052,-855.7921"/>
<text text-anchor="middle" x="934.4052" y="-870.0921" font-family="Times,serif" font-size="14.00" fill="#000000">Depend on function</text>
</g>
<!-- Depend on function&#45;&gt;Node -->
<g id="edge3" class="edge">
<title>Depend on function&#45;&gt;Node</title>
<path fill="none" stroke="#6495ed" d="M996.1067,-919.2236C1012.0518,-910.7151 1031.0771,-900.5631 1047.3684,-891.87"/>
<polygon fill="#6495ed" stroke="#6495ed" points="1049.4257,-894.7394 1056.6005,-886.9437 1046.1303,-888.5636 1049.4257,-894.7394"/>
<path fill="none" stroke="#6495ed" d="M1013.0626,-891.5184C1016.4331,-892.278 1019.7394,-893.0231 1022.9394,-893.7442"/>
<polygon fill="#6495ed" stroke="#6495ed" points="1022.2216,-897.1702 1032.7465,-895.9544 1023.7606,-890.3414 1022.2216,-897.1702"/>
</g>
<!-- Sleep -->
<g id="node8" class="node">
<title>Sleep</title>
<polygon fill="#caff70" stroke="#000000" points="686.4762,-908.2818 686.4762,-944.2818 742.4762,-944.2818 742.4762,-908.2818 686.4762,-908.2818"/>
<text text-anchor="middle" x="714.4762" y="-922.5818" font-family="Times,serif" font-size="14.00" fill="#000000">Sleep</text>
<polygon fill="#caff70" stroke="#000000" points="652.4762,-938.2818 652.4762,-974.2818 708.4762,-974.2818 708.4762,-938.2818 652.4762,-938.2818"/>
<text text-anchor="middle" x="680.4762" y="-952.5818" font-family="Times,serif" font-size="14.00" fill="#000000">Sleep</text>
</g>
<!-- Heat -->
<g id="node9" class="node">
<title>Heat</title>
<polygon fill="#caff70" stroke="#000000" points="728.4762,-818.2818 728.4762,-854.2818 782.4762,-854.2818 782.4762,-818.2818 728.4762,-818.2818"/>
<text text-anchor="middle" x="755.4762" y="-832.5818" font-family="Times,serif" font-size="14.00" fill="#000000">Heat</text>
<polygon fill="#caff70" stroke="#000000" points="694.4762,-848.2818 694.4762,-884.2818 748.4762,-884.2818 748.4762,-848.2818 694.4762,-848.2818"/>
<text text-anchor="middle" x="721.4762" y="-862.5818" font-family="Times,serif" font-size="14.00" fill="#000000">Heat</text>
</g>
<!-- Cool -->
<g id="node10" class="node">
<title>Cool</title>
<polygon fill="#caff70" stroke="#000000" points="620.4762,-926.2818 620.4762,-962.2818 674.4762,-962.2818 674.4762,-926.2818 620.4762,-926.2818"/>
<text text-anchor="middle" x="647.4762" y="-940.5818" font-family="Times,serif" font-size="14.00" fill="#000000">Cool</text>
<polygon fill="#caff70" stroke="#000000" points="586.4762,-956.2818 586.4762,-992.2818 640.4762,-992.2818 640.4762,-956.2818 586.4762,-956.2818"/>
<text text-anchor="middle" x="613.4762" y="-970.5818" font-family="Times,serif" font-size="14.00" fill="#000000">Cool</text>
</g>
<!-- Temperature -->
<g id="node11" class="node">
<title>Temperature</title>
<polygon fill="#caff70" stroke="#000000" points="602.4762,-860.2818 602.4762,-896.2818 712.4762,-896.2818 712.4762,-860.2818 602.4762,-860.2818"/>
<text text-anchor="middle" x="657.4762" y="-874.5818" font-family="Times,serif" font-size="14.00" fill="#000000">Temperature</text>
<polygon fill="#caff70" stroke="#000000" points="568.4762,-890.2818 568.4762,-926.2818 678.4762,-926.2818 678.4762,-890.2818 568.4762,-890.2818"/>
<text text-anchor="middle" x="623.4762" y="-904.5818" font-family="Times,serif" font-size="14.00" fill="#000000">Temperature</text>
</g>
<!-- Temperature&#45;&gt;Sleep -->
<g id="edge4" class="edge">
<title>Temperature&#45;&gt;Sleep</title>
<path fill="none" stroke="#6495ed" d="M679.0255,-896.4285C681.0116,-898.1011 683.0458,-899.814 685.086,-901.5321"/>
<polygon fill="#6495ed" stroke="#6495ed" points="682.9929,-904.3452 692.8965,-908.1094 687.5019,-898.9908 682.9929,-904.3452"/>
<path fill="none" stroke="#6495ed" d="M645.0255,-926.4285C647.0116,-928.1011 649.0458,-929.814 651.086,-931.5321"/>
<polygon fill="#6495ed" stroke="#6495ed" points="648.9929,-934.3452 658.8965,-938.1094 653.5019,-928.9908 648.9929,-934.3452"/>
</g>
<!-- Temperature&#45;&gt;Heat -->
<g id="edge5" class="edge">
<title>Temperature&#45;&gt;Heat</title>
<path fill="none" stroke="#6495ed" d="M699.6058,-860.2262C706.0062,-857.4832 712.5662,-854.6718 718.8371,-851.9843"/>
<polygon fill="#6495ed" stroke="#6495ed" points="720.5764,-855.0468 728.3892,-847.8905 717.819,-848.6128 720.5764,-855.0468"/>
<path fill="none" stroke="#6495ed" d="M665.6058,-890.2262C672.0062,-887.4832 678.5662,-884.6718 684.8371,-881.9843"/>
<polygon fill="#6495ed" stroke="#6495ed" points="686.5764,-885.0468 694.3892,-877.8905 683.819,-878.6128 686.5764,-885.0468"/>
</g>
<!-- Temperature&#45;&gt;Cool -->
<g id="edge6" class="edge">
<title>Temperature&#45;&gt;Cool</title>
<path fill="none" stroke="#6495ed" d="M654.7437,-896.3166C653.8177,-902.428 652.7601,-909.4083 651.7438,-916.1161"/>
<polygon fill="#6495ed" stroke="#6495ed" points="648.2431,-915.8573 650.2055,-926.2688 655.1641,-916.906 648.2431,-915.8573"/>
<path fill="none" stroke="#6495ed" d="M620.7437,-926.3166C619.8177,-932.428 618.7601,-939.4083 617.7438,-946.1161"/>
<polygon fill="#6495ed" stroke="#6495ed" points="614.2431,-945.8573 616.2055,-956.2688 621.1641,-946.906 614.2431,-945.8573"/>
</g>
<!-- /api/action/light/kill -->
<g id="node12" class="node">
<title>/api/action/light/kill</title>
<polygon fill="#caff70" stroke="#000000" points="730.9525,-507.5636 730.9525,-543.5636 784.9525,-543.5636 784.9525,-507.5636 730.9525,-507.5636"/>
<text text-anchor="middle" x="757.9525" y="-521.8636" font-family="Times,serif" font-size="14.00" fill="#000000">kill</text>
<polygon fill="#caff70" stroke="#000000" points="686.9525,-503.5636 686.9525,-539.5636 740.9525,-539.5636 740.9525,-503.5636 686.9525,-503.5636"/>
<text text-anchor="middle" x="713.9525" y="-517.8636" font-family="Times,serif" font-size="14.00" fill="#000000">kill</text>
</g>
<!-- /api/action/light/set -->
<g id="node13" class="node">
<title>/api/action/light/set</title>
<polygon fill="#caff70" stroke="#000000" points="670.9525,-457.5636 670.9525,-493.5636 724.9525,-493.5636 724.9525,-457.5636 670.9525,-457.5636"/>
<text text-anchor="middle" x="697.9525" y="-471.8636" font-family="Times,serif" font-size="14.00" fill="#000000">set</text>
<polygon fill="#caff70" stroke="#000000" points="746.9525,-553.5636 746.9525,-589.5636 800.9525,-589.5636 800.9525,-553.5636 746.9525,-553.5636"/>
<text text-anchor="middle" x="773.9525" y="-567.8636" font-family="Times,serif" font-size="14.00" fill="#000000">set</text>
</g>
<!-- /api/action/temperature/kill -->
<g id="node14" class="node">
<title>/api/action/temperature/kill</title>
<polygon fill="#caff70" stroke="#000000" points="520.9525,-472.5636 520.9525,-508.5636 574.9525,-508.5636 574.9525,-472.5636 520.9525,-472.5636"/>
<text text-anchor="middle" x="547.9525" y="-486.8636" font-family="Times,serif" font-size="14.00" fill="#000000">kill</text>
<polygon fill="#caff70" stroke="#000000" points="596.9525,-568.5636 596.9525,-604.5636 650.9525,-604.5636 650.9525,-568.5636 596.9525,-568.5636"/>
<text text-anchor="middle" x="623.9525" y="-582.8636" font-family="Times,serif" font-size="14.00" fill="#000000">kill</text>
</g>
<!-- /api/action/temperature/set -->
<g id="node15" class="node">
<title>/api/action/temperature/set</title>
<polygon fill="#caff70" stroke="#000000" points="580.9525,-522.5636 580.9525,-558.5636 634.9525,-558.5636 634.9525,-522.5636 580.9525,-522.5636"/>
<text text-anchor="middle" x="607.9525" y="-536.8636" font-family="Times,serif" font-size="14.00" fill="#000000">set</text>
<polygon fill="#caff70" stroke="#000000" points="536.9525,-518.5636 536.9525,-554.5636 590.9525,-554.5636 590.9525,-518.5636 536.9525,-518.5636"/>
<text text-anchor="middle" x="563.9525" y="-532.8636" font-family="Times,serif" font-size="14.00" fill="#000000">set</text>
</g>
<!-- /api/sensor/temperature -->
<g id="node16" class="node">
<title>/api/sensor/temperature</title>
<polygon fill="#caff70" stroke="#000000" points="46.7144,-449.9227 46.7144,-485.9227 153.7144,-485.9227 153.7144,-449.9227 46.7144,-449.9227"/>
<text text-anchor="middle" x="100.2144" y="-464.2227" font-family="Times,serif" font-size="14.00" fill="#000000">temperature</text>
<polygon fill="#caff70" stroke="#000000" points="79.7144,-495.9227 79.7144,-531.9227 186.7144,-531.9227 186.7144,-495.9227 79.7144,-495.9227"/>
<text text-anchor="middle" x="133.2144" y="-510.2227" font-family="Times,serif" font-size="14.00" fill="#000000">temperature</text>
</g>
<!-- /api/routine/cook/list -->
<g id="node17" class="node">
<title>/api/routine/cook/list</title>
<polygon fill="#caff70" stroke="#000000" points="385.9525,-514.0636 385.9525,-550.0636 439.9525,-550.0636 439.9525,-514.0636 385.9525,-514.0636"/>
<text text-anchor="middle" x="412.9525" y="-528.3636" font-family="Times,serif" font-size="14.00" fill="#000000">list</text>
<polygon fill="#caff70" stroke="#000000" points="392.9525,-560.0636 392.9525,-596.0636 446.9525,-596.0636 446.9525,-560.0636 392.9525,-560.0636"/>
<text text-anchor="middle" x="419.9525" y="-574.3636" font-family="Times,serif" font-size="14.00" fill="#000000">list</text>
</g>
<!-- /api/settings/cook/recipe/list -->
<g id="node28" class="node">
<title>/api/settings/cook/recipe/list</title>
<polygon fill="#caff70" stroke="#000000" points="225.1906,-207.7044 225.1906,-243.7044 279.1906,-243.7044 279.1906,-207.7044 225.1906,-207.7044"/>
<text text-anchor="middle" x="252.1906" y="-222.0044" font-family="Times,serif" font-size="14.00" fill="#000000">list</text>
<polygon fill="#caff70" stroke="#000000" points="225.1906,-255.7044 225.1906,-291.7044 279.1906,-291.7044 279.1906,-255.7044 225.1906,-255.7044"/>
<text text-anchor="middle" x="252.1906" y="-270.0044" 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="edge7" class="edge">
<title>/api/routine/cook/list&#45;&gt;/api/settings/cook/recipe/list</title>
<path fill="none" stroke="#00bfff" d="M398.2776,-513.9445C393.7443,-507.9989 388.8909,-501.2539 384.8725,-494.7836 332.2846,-410.1097 327.5023,-384.1591 284.1106,-294.4244 277.5392,-280.8348 270.4456,-265.6207 264.6182,-252.969"/>
<polygon fill="#00bfff" stroke="#00bfff" points="267.791,-251.4912 260.4384,-243.8629 261.4292,-254.4113 267.791,-251.4912"/>
<path fill="none" stroke="#00bfff" d="M405.4001,-559.867C400.8734,-553.9173 395.993,-547.1894 391.8725,-540.7836 337.5958,-456.4034 329.2126,-432.0446 284.1106,-342.4244 277.3247,-328.9406 270.2089,-313.7375 264.4223,-301.0656"/>
<polygon fill="#00bfff" stroke="#00bfff" points="267.6013,-299.6011 260.2839,-291.9392 261.2261,-302.492 267.6013,-299.6011"/>
</g>
<!-- /api/routine/cook/start -->
<g id="node18" class="node">
<title>/api/routine/cook/start</title>
<polygon fill="#caff70" stroke="#000000" points="385.9525,-570.0636 385.9525,-606.0636 439.9525,-606.0636 439.9525,-570.0636 385.9525,-570.0636"/>
<text text-anchor="middle" x="412.9525" y="-584.3636" font-family="Times,serif" font-size="14.00" fill="#000000">start</text>
<polygon fill="#caff70" stroke="#000000" points="392.9525,-616.0636 392.9525,-652.0636 446.9525,-652.0636 446.9525,-616.0636 392.9525,-616.0636"/>
<text text-anchor="middle" x="419.9525" y="-630.3636" font-family="Times,serif" font-size="14.00" fill="#000000">start</text>
</g>
<!-- /api/routine/cook/kill -->
<g id="node19" class="node">
<title>/api/routine/cook/kill</title>
<polygon fill="#caff70" stroke="#000000" points="385.9525,-458.0636 385.9525,-494.0636 439.9525,-494.0636 439.9525,-458.0636 385.9525,-458.0636"/>
<text text-anchor="middle" x="412.9525" y="-472.3636" font-family="Times,serif" font-size="14.00" fill="#000000">kill</text>
<polygon fill="#caff70" stroke="#000000" points="392.9525,-504.0636 392.9525,-540.0636 446.9525,-540.0636 446.9525,-504.0636 392.9525,-504.0636"/>
<text text-anchor="middle" x="419.9525" y="-518.3636" font-family="Times,serif" font-size="14.00" fill="#000000">kill</text>
</g>
<!-- /api/routine/cook/schedule/list -->
<g id="node20" class="node">
<title>/api/routine/cook/schedule/list</title>
<polygon fill="#caff70" stroke="#000000" points="250.1906,-473.7044 250.1906,-509.7044 304.1906,-509.7044 304.1906,-473.7044 250.1906,-473.7044"/>
<text text-anchor="middle" x="277.1906" y="-488.0044" font-family="Times,serif" font-size="14.00" fill="#000000">list</text>
<polygon fill="#caff70" stroke="#000000" points="317.1906,-569.7044 317.1906,-605.7044 371.1906,-605.7044 371.1906,-569.7044 317.1906,-569.7044"/>
<text text-anchor="middle" x="344.1906" y="-584.0044" font-family="Times,serif" font-size="14.00" fill="#000000">list</text>
</g>
<!-- /api/routine/cook/schedule/set -->
<g id="node21" class="node">
<title>/api/routine/cook/schedule/set</title>
<polygon fill="#caff70" stroke="#000000" points="310.1906,-523.7044 310.1906,-559.7044 364.1906,-559.7044 364.1906,-523.7044 310.1906,-523.7044"/>
<text text-anchor="middle" x="337.1906" y="-538.0044" font-family="Times,serif" font-size="14.00" fill="#000000">set</text>
<polygon fill="#caff70" stroke="#000000" points="257.1906,-519.7044 257.1906,-555.7044 311.1906,-555.7044 311.1906,-519.7044 257.1906,-519.7044"/>
<text text-anchor="middle" x="284.1906" y="-534.0044" font-family="Times,serif" font-size="14.00" fill="#000000">set</text>
</g>
<!-- /api/settings/time -->
<!-- /api/settings/time/set -->
<g id="node22" class="node">
<title>/api/settings/time</title>
<polygon fill="#caff70" stroke="#000000" points="384.7144,-176.9227 384.7144,-212.9227 438.7144,-212.9227 438.7144,-176.9227 384.7144,-176.9227"/>
<text text-anchor="middle" x="411.7144" y="-191.2227" font-family="Times,serif" font-size="14.00" fill="#000000">time</text>
<title>/api/settings/time/set</title>
<polygon fill="#caff70" stroke="#000000" points="408.9525,-191.5636 408.9525,-227.5636 462.9525,-227.5636 462.9525,-191.5636 408.9525,-191.5636"/>
<text text-anchor="middle" x="435.9525" y="-205.8636" font-family="Times,serif" font-size="14.00" fill="#000000">set</text>
</g>
<!-- /api/settings/lighting/list -->
<g id="node23" class="node">
<title>/api/settings/lighting/list</title>
<polygon fill="#caff70" stroke="#000000" points="392.9525,-23.5636 392.9525,-59.5636 446.9525,-59.5636 446.9525,-23.5636 392.9525,-23.5636"/>
<text text-anchor="middle" x="419.9525" y="-37.8636" font-family="Times,serif" font-size="14.00" fill="#000000">list</text>
<polygon fill="#caff70" stroke="#000000" points="468.9525,-73.5636 468.9525,-109.5636 522.9525,-109.5636 522.9525,-73.5636 468.9525,-73.5636"/>
<text text-anchor="middle" x="495.9525" y="-87.8636" font-family="Times,serif" font-size="14.00" fill="#000000">list</text>
</g>
<!-- /api/settings/lighting/set -->
<g id="node24" class="node">
<title>/api/settings/lighting/set</title>
<polygon fill="#caff70" stroke="#000000" points="452.9525,-73.5636 452.9525,-109.5636 506.9525,-109.5636 506.9525,-73.5636 452.9525,-73.5636"/>
<text text-anchor="middle" x="479.9525" y="-87.8636" font-family="Times,serif" font-size="14.00" fill="#000000">set</text>
<polygon fill="#caff70" stroke="#000000" points="408.9525,-23.5636 408.9525,-59.5636 462.9525,-59.5636 462.9525,-23.5636 408.9525,-23.5636"/>
<text text-anchor="middle" x="435.9525" y="-37.8636" font-family="Times,serif" font-size="14.00" fill="#000000">set</text>
</g>
<!-- /api/settings/cook/warm/temperature -->
<g id="node25" class="node">
<title>/api/settings/cook/warm/temperature</title>
<polygon fill="#caff70" stroke="#000000" points="32.1906,-31.7044 32.1906,-67.7044 139.1906,-67.7044 139.1906,-31.7044 32.1906,-31.7044"/>
<text text-anchor="middle" x="85.6906" y="-46.0044" font-family="Times,serif" font-size="14.00" fill="#000000">temperature</text>
<polygon fill="#caff70" stroke="#000000" points="32.1906,-79.7044 32.1906,-115.7044 139.1906,-115.7044 139.1906,-79.7044 32.1906,-79.7044"/>
<text text-anchor="middle" x="85.6906" y="-94.0044" font-family="Times,serif" font-size="14.00" fill="#000000">temperature</text>
</g>
<!-- /api/settings/cook/warm/set -->
<g id="node26" class="node">
<title>/api/settings/cook/warm/set</title>
<polygon fill="#caff70" stroke="#000000" points="50.6906,-97.7044 50.6906,-133.7044 104.6906,-133.7044 104.6906,-97.7044 50.6906,-97.7044"/>
<text text-anchor="middle" x="77.6906" y="-112.0044" font-family="Times,serif" font-size="14.00" fill="#000000">set</text>
<polygon fill="#caff70" stroke="#000000" points="50.6906,-145.7044 50.6906,-181.7044 104.6906,-181.7044 104.6906,-145.7044 50.6906,-145.7044"/>
<text text-anchor="middle" x="77.6906" y="-160.0044" font-family="Times,serif" font-size="14.00" fill="#000000">set</text>
</g>
<!-- /api/settings/cook/warm/duration -->
<g id="node27" class="node">
<title>/api/settings/cook/warm/duration</title>
<polygon fill="#caff70" stroke="#000000" points="116.1906,-79.7044 116.1906,-115.7044 193.1906,-115.7044 193.1906,-79.7044 116.1906,-79.7044"/>
<text text-anchor="middle" x="154.6906" y="-94.0044" font-family="Times,serif" font-size="14.00" fill="#000000">duration</text>
<polygon fill="#caff70" stroke="#000000" points="116.1906,-127.7044 116.1906,-163.7044 193.1906,-163.7044 193.1906,-127.7044 116.1906,-127.7044"/>
<text text-anchor="middle" x="154.6906" y="-142.0044" font-family="Times,serif" font-size="14.00" fill="#000000">duration</text>
</g>
<!-- /api/settings/cook/recipe/set -->
<g id="node29" class="node">
<title>/api/settings/cook/recipe/set</title>
<polygon fill="#caff70" stroke="#000000" points="285.1906,-257.7044 285.1906,-293.7044 339.1906,-293.7044 339.1906,-257.7044 285.1906,-257.7044"/>
<text text-anchor="middle" x="312.1906" y="-272.0044" font-family="Times,serif" font-size="14.00" fill="#000000">set</text>
<polygon fill="#caff70" stroke="#000000" points="285.1906,-305.7044 285.1906,-341.7044 339.1906,-341.7044 339.1906,-305.7044 285.1906,-305.7044"/>
<text text-anchor="middle" x="312.1906" y="-320.0044" font-family="Times,serif" font-size="14.00" fill="#000000">set</text>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 20 KiB