rice: Gut a lot of stuff after some discussions. Flesh some out.
This commit is contained in:
parent
4e805873a5
commit
828648083d
3 changed files with 340 additions and 242 deletions
|
|
@ -36,9 +36,20 @@ Many of my parts have arrived (rice cooker, thermistors, relay, and NodeMCU), so
|
|||
|
||||
***
|
||||
|
||||
# Terminology
|
||||
|
||||
### Directive
|
||||
|
||||
A directive is an instruction for the rice cooker.
|
||||
User facing directives have, at most, a single input.
|
||||
|
||||
Internally, directives chain each other with conditions to achieve their given goal.
|
||||
|
||||
***
|
||||
|
||||
# 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.
|
||||
Having received shipment of the rice cooker, and beginning to use it, I realize 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.
|
||||
|
|
@ -46,37 +57,18 @@ The possibility of steaming things only furthers this goal.
|
|||
|
||||
## Recipes
|
||||
|
||||
The question is raised, how should I deal with parametric recipes, and more specifically, internally governed parametric recipes.
|
||||
That is, recipes that have no prior knowledge of the volume of rice and water added, but infer it from the time it takes to reach temperature.
|
||||
This value, that is, the duration taken to reach temperature, only holds value when a set heating cycle is used, such as full heat, or constant PWM.
|
||||
Typically however, no PWM is required during initial heat, only once at heat.
|
||||
Recipes should be submitted as simple JSON structures.
|
||||
These may be linted, and will contain no logic.
|
||||
All calculations are to be done when producing the recipe.
|
||||
This is done so as to ease the technical burden on the cooker.
|
||||
|
||||
As such, a value that any directive may rely upon should be the duration taken by some prior directive.
|
||||
This then leads me to say that each and every step in a recipe must have a unique identity, so that later directives may rely on them.
|
||||
## Heating / Cooling
|
||||
|
||||
This, then, immediately appears to be far more complicated than I should worry about, instead, this behaviour aught to be offloaded to Lua or some other scripting system.
|
||||
As such, the NodeMCU should be ideal, as it supports a variation of Lua.
|
||||
Ideally, this will allow branching logic also, and storing of values, simplifying my technical burden.
|
||||
Active cooling is not something worth designing for, as it is not an issue to begin with.
|
||||
|
||||
Alternatively, it does not sound impossible to write a simple translator to emit both a Lua scripted version of a recipe, and a version that may be embedded directly into the compiled code (so that non-Lua boards may be used).
|
||||
## Coding
|
||||
|
||||
## 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.
|
||||
Internally, a temperature kill switch should be enacted, which will kick in if the
|
||||
|
||||
***
|
||||
|
||||
|
|
@ -84,11 +76,10 @@ As such, I'll continue my planning as I am, but not be too worried about the det
|
|||
|
||||
I tentatively (with no real experience designing them) plan on my API being something like the following.
|
||||
|
||||
- `/action/light/kill` - *Stops all light activity*
|
||||
- `/action/light/kill` - *Kill 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*
|
||||
- `/action/temperature/set` - *Heat/cool to given temperature, then hold. Should allow setting a target heat/cool rate. Should allow setting a hold duration*
|
||||
*(proxy to `/settings/cook/recipe/list`)*
|
||||
- `/action/temperature/kill` - *Stops all heating*
|
||||
- `/action/temperature/set` - *Heat/cool to given temperature.*
|
||||
- `/routine/cook/kill` - *Kill any current running routine*
|
||||
- `/routine/cook/list` - *List known cooking routines*
|
||||
- `/routine/cook/schedule/list` - *List any scheduled routines*
|
||||
|
|
@ -97,47 +88,66 @@ I tentatively (with no real experience designing them) plan on my API being some
|
|||
- `/sensor/temperature` - *Returns temperature*
|
||||
- `/settings/cook/recipe/list` - *List known cooking routines*
|
||||
- `/settings/cook/recipe/set` - *Submit/modify/delete a cooking routine*
|
||||
- `/settings/cook/warm/duration` - *Determine post-cook warming duration*
|
||||
- `/settings/cook/warm/set` - *Turn post-cook warming on/off*
|
||||
- `/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` - *Set/read date and time*
|
||||
|
||||
# Cooking schedule definition specifications
|
||||
# Cooking recipe definition specifications
|
||||
|
||||
Directives are distinct actions to be taken.
|
||||
|
||||
They may be catagorised as follows:
|
||||
They may be categorized as follows:
|
||||
|
||||
#### Primary Directives
|
||||
|
||||
* Sleep
|
||||
* Heat
|
||||
* Cooling
|
||||
* Sleep
|
||||
|
||||
#### Secondary Directives
|
||||
|
||||
* Temperature
|
||||
* Lighting Change
|
||||
* Lighting Kill
|
||||
* Temperature Change
|
||||
* Temperature Hold
|
||||
* Temperature Kill
|
||||
|
||||
## Definitions
|
||||
|
||||
These are defined as such:
|
||||
|
||||
### Sleep
|
||||
Just wait for given duration, or until a given condition is met.
|
||||
Wait for a given duration.
|
||||
No need to expose to recipes directly, see `Kill`, `Temperature Change`, and `Temperature Hold` instead.
|
||||
Will keep things like LED lights going still.
|
||||
|
||||
### Heat
|
||||
Heat for a given duration, or until a given condition is met.
|
||||
Takes a bool, turns the heating element on or off.
|
||||
Non-blocking so that conditions may be checked without unnecessarily cycling the relay.
|
||||
Dangerous to expose to recipes directly, see `Kill`
|
||||
|
||||
### 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.
|
||||
### Lighting Change
|
||||
Change lighting mode.
|
||||
|
||||
### Temperature
|
||||
Heat/cool to given temperature, optionally at a given rate of change (may be difficult for cooling if no fan is included), or percentage load (which will set a PWM rate, or if full, run constant).
|
||||
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 (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.
|
||||
### Lighting Kill
|
||||
Kill any running lighting mode.
|
||||
|
||||
### Temperature Change
|
||||
Heat/cool to given temperature.
|
||||
This should just be a proxy directive to `Heat` and `Sleep`.
|
||||
That is, `Heat` if under temp, `Sleep` if over temp.
|
||||
As heating during cooking tends to be a matter of getting to temperature as quickly as possible, there is no need for a duration setting.
|
||||
|
||||
### Temperature Hold
|
||||
Hold at current temperature for given duration.
|
||||
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.
|
||||
|
||||
### Temperature Kill
|
||||
Turns off heat, cancels any running recipe.
|
||||
Takes no input.
|
||||
Just a proxy to `Heat`, but only as a false bool.
|
||||
|
||||
*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).
|
||||
|
||||
# Dep Graph
|
||||
|
||||
|
|
|
|||
|
|
@ -20,12 +20,14 @@ digraph {
|
|||
"Depend on value"
|
||||
"Proxy to value"
|
||||
"Depend on function"
|
||||
"Proxy to function"
|
||||
|
||||
}
|
||||
|
||||
"Depend on value" -> "Node"[depend_value]
|
||||
"Proxy to value" -> "Node"[proxy_value]
|
||||
"Depend on function" -> "Node"[depend_function]
|
||||
"Proxy to function" -> "Node"[proxy_function]
|
||||
|
||||
label="Key"
|
||||
|
||||
|
|
@ -33,14 +35,33 @@ digraph {
|
|||
|
||||
subgraph cluster_directives {
|
||||
|
||||
"Sleep"
|
||||
"Heat"
|
||||
"Cool"
|
||||
"Temperature"
|
||||
subgraph cluster_primary {
|
||||
"Sleep"
|
||||
"Heat"
|
||||
label="Primary"
|
||||
}
|
||||
|
||||
subgraph cluster_secondary {
|
||||
"Lighting Change"
|
||||
"Lighting Kill"
|
||||
"Temperature Kill"
|
||||
"Temperature Change"
|
||||
"Temperature Hold"
|
||||
label="Secondary"
|
||||
}
|
||||
|
||||
label="Directives"
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_sensor {
|
||||
|
||||
"Temperature"
|
||||
|
||||
label="Sensors"
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_api {
|
||||
|
||||
subgraph cluster_action {
|
||||
|
|
@ -66,7 +87,7 @@ digraph {
|
|||
label="action"
|
||||
}
|
||||
|
||||
subgraph cluster_sensor {
|
||||
subgraph cluster_api_sensor {
|
||||
|
||||
"/api/sensor/temperature"[label="temperature"]
|
||||
|
||||
|
|
@ -119,16 +140,6 @@ digraph {
|
|||
|
||||
subgraph cluster_settings_cook {
|
||||
|
||||
subgraph cluster_warm {
|
||||
|
||||
"/api/settings/cook/warm/temperature"[label="temperature"]
|
||||
"/api/settings/cook/warm/set"[label="set"]
|
||||
"/api/settings/cook/warm/duration"[label="duration"]
|
||||
|
||||
label="warm"
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_recipe {
|
||||
|
||||
"/api/settings/cook/recipe/list"[label="list"]
|
||||
|
|
@ -149,7 +160,14 @@ digraph {
|
|||
label="api"
|
||||
}
|
||||
|
||||
"Temperature" -> { "Heat" "Cool" "Sleep" }[depend_function]
|
||||
"Temperature Change" -> { "Heat" "Sleep" }[depend_function]
|
||||
"Temperature Hold" -> { "Heat" "Sleep" }[depend_function]
|
||||
"Temperature Kill" -> "Heat"[proxy_function]
|
||||
{ "Temperature Change" "Temperature Hold" } -> "Temperature"[depend_value]
|
||||
|
||||
"/api/action/temperature/set" -> "Temperature Change"[proxy_function]
|
||||
"/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 ///////////////////////////////////////////////////////
|
||||
|
|
@ -166,17 +184,17 @@ digraph {
|
|||
"/api/sensor/temperature"[documented]
|
||||
"/api/settings/cook/recipe/list"[documented]
|
||||
"/api/settings/cook/recipe/set"[documented]
|
||||
"/api/settings/cook/warm/duration"[documented]
|
||||
"/api/settings/cook/warm/set"[documented]
|
||||
"/api/settings/cook/warm/temperature"[documented]
|
||||
"/api/settings/lighting/list"[documented]
|
||||
"/api/settings/lighting/set"[documented]
|
||||
"/api/settings/time/set"[documented]
|
||||
|
||||
"Temperature"[documented]
|
||||
"Heat"[documented]
|
||||
"Cool"[documented]
|
||||
"Lighting Change"[documented]
|
||||
"Lighting Kill"[documented]
|
||||
"Sleep"[documented]
|
||||
"Temperature Change"[documented]
|
||||
"Temperature Hold"[documented]
|
||||
"Temperature Kill"[documented]
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
|
|
|||
|
|
@ -4,314 +4,384 @@
|
|||
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
|
||||
-->
|
||||
<!-- Title: %3 Pages: 1 -->
|
||||
<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)">
|
||||
<svg width="1459pt" height="1057pt"
|
||||
viewBox="0.00 0.00 1459.00 1057.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)">
|
||||
<title>%3</title>
|
||||
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-1099 1301,-1099 1301,4 -4,4"/>
|
||||
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-1053 1455,-1053 1455,4 -4,4"/>
|
||||
<g id="clust1" class="cluster">
|
||||
<title>cluster_key</title>
|
||||
<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>
|
||||
<polygon fill="none" stroke="#000000" points="983.7381,-.1409 983.7381,-293.1409 1450.7381,-293.1409 1450.7381,-.1409 983.7381,-.1409"/>
|
||||
<text text-anchor="middle" x="1217.2381" y="-277.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="1067.4762,-947.7818 1067.4762,-1063.7818 1288.4762,-1063.7818 1288.4762,-947.7818 1067.4762,-947.7818"/>
|
||||
<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"/>
|
||||
</g>
|
||||
<g id="clust3" class="cluster">
|
||||
<title>cluster_sub</title>
|
||||
<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"/>
|
||||
<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"/>
|
||||
</g>
|
||||
<g id="clust4" class="cluster">
|
||||
<title>cluster_directives</title>
|
||||
<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>
|
||||
<polygon fill="none" stroke="#000000" points="-.0126,-623.898 -.0126,-1048.898 511.9874,-1048.898 511.9874,-623.898 -.0126,-623.898"/>
|
||||
<text text-anchor="middle" x="255.9874" y="-1033.698" 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,-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>
|
||||
<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"/>
|
||||
<text text-anchor="middle" x="438.2255" y="-1002.3389" font-family="Times,serif" font-size="14.00" fill="#000000">Primary</text>
|
||||
</g>
|
||||
<g id="clust6" class="cluster">
|
||||
<title>cluster_action</title>
|
||||
<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>
|
||||
<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"/>
|
||||
<text text-anchor="middle" x="217.8531" y="-828.9826" font-family="Times,serif" font-size="14.00" fill="#000000">Secondary</text>
|
||||
</g>
|
||||
<g id="clust7" class="cluster">
|
||||
<title>cluster_light</title>
|
||||
<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>
|
||||
<title>cluster_sensor</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"/>
|
||||
<text text-anchor="middle" x="853.4786" y="-851.2494" font-family="Times,serif" font-size="14.00" fill="#000000">Sensors</text>
|
||||
</g>
|
||||
<g id="clust8" class="cluster">
|
||||
<title>cluster_temperature</title>
|
||||
<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>
|
||||
<title>cluster_api</title>
|
||||
<polygon fill="none" stroke="#000000" points="251.5635,.1548 251.5635,-615.8452 844.5635,-615.8452 844.5635,.1548 251.5635,.1548"/>
|
||||
<text text-anchor="middle" x="548.0635" y="-600.6452" font-family="Times,serif" font-size="14.00" fill="#000000">api</text>
|
||||
</g>
|
||||
<g id="clust9" class="cluster">
|
||||
<title>cluster_sensor</title>
|
||||
<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>
|
||||
<title>cluster_action</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"/>
|
||||
<text text-anchor="middle" x="697.6506" y="-521.3416" font-family="Times,serif" font-size="14.00" fill="#000000">action</text>
|
||||
</g>
|
||||
<g id="clust10" class="cluster">
|
||||
<title>cluster_routine</title>
|
||||
<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>
|
||||
<title>cluster_light</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"/>
|
||||
<text text-anchor="middle" x="632.3888" y="-489.9825" font-family="Times,serif" font-size="14.00" fill="#000000">light</text>
|
||||
</g>
|
||||
<g id="clust11" class="cluster">
|
||||
<title>cluster_routine_cook</title>
|
||||
<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>
|
||||
<title>cluster_temperature</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"/>
|
||||
<text text-anchor="middle" x="774.9259" y="-471.1657" font-family="Times,serif" font-size="14.00" fill="#000000">temperature</text>
|
||||
</g>
|
||||
<g id="clust12" class="cluster">
|
||||
<title>cluster_schedule</title>
|
||||
<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>
|
||||
<title>cluster_api_sensor</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"/>
|
||||
<text text-anchor="middle" x="670.8016" y="-68.2861" font-family="Times,serif" font-size="14.00" fill="#000000">sensor</text>
|
||||
</g>
|
||||
<g id="clust13" class="cluster">
|
||||
<title>cluster_settings</title>
|
||||
<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>
|
||||
<title>cluster_routine</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"/>
|
||||
<text text-anchor="middle" x="399.8016" y="-569.7861" font-family="Times,serif" font-size="14.00" fill="#000000">routine</text>
|
||||
</g>
|
||||
<g id="clust14" class="cluster">
|
||||
<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>
|
||||
<title>cluster_routine_cook</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"/>
|
||||
<text text-anchor="middle" x="400.0397" y="-538.427" font-family="Times,serif" font-size="14.00" fill="#000000">cook</text>
|
||||
</g>
|
||||
<g id="clust15" class="cluster">
|
||||
<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>
|
||||
<title>cluster_schedule</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"/>
|
||||
<text text-anchor="middle" x="366.2778" y="-492.0679" font-family="Times,serif" font-size="14.00" fill="#000000">schedule</text>
|
||||
</g>
|
||||
<g id="clust16" class="cluster">
|
||||
<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>
|
||||
<title>cluster_settings</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"/>
|
||||
<text text-anchor="middle" x="416.8016" y="-311.7861" font-family="Times,serif" font-size="14.00" fill="#000000">settings</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>
|
||||
<title>cluster_time</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"/>
|
||||
<text text-anchor="middle" x="471.0397" y="-280.427" font-family="Times,serif" font-size="14.00" fill="#000000">time</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="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>
|
||||
<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>
|
||||
<!-- Done -->
|
||||
<g id="node1" class="node">
|
||||
<title>Done</title>
|
||||
<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>
|
||||
<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"/>
|
||||
<text text-anchor="middle" x="1284.7144" y="-231.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="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>
|
||||
<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"/>
|
||||
<text text-anchor="middle" x="1380.7144" y="-217.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="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>
|
||||
<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"/>
|
||||
<text text-anchor="middle" x="1292.7144" y="-168.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="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>
|
||||
<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"/>
|
||||
<text text-anchor="middle" x="1081.0629" y="-31.3879" font-family="Times,serif" font-size="14.00" fill="#000000">Depend on value</text>
|
||||
</g>
|
||||
<!-- Node -->
|
||||
<g id="node7" class="node">
|
||||
<g id="node8" class="node">
|
||||
<title>Node</title>
|
||||
<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>
|
||||
<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"/>
|
||||
<text text-anchor="middle" x="1220.6256" y="-93.7232" font-family="Times,serif" font-size="14.00" fill="#000000">Node</text>
|
||||
</g>
|
||||
<!-- Depend on value->Node -->
|
||||
<g id="edge1" class="edge">
|
||||
<title>Depend on value->Node</title>
|
||||
<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"/>
|
||||
<path fill="none" stroke="#0000ff" d="M1121.4302,-53.1178C1140.989,-61.8537 1164.3213,-72.275 1183.442,-80.8152"/>
|
||||
<polygon fill="#0000ff" stroke="#0000ff" points="1182.1761,-84.083 1192.7341,-84.9655 1185.0308,-77.6915 1182.1761,-84.083"/>
|
||||
</g>
|
||||
<!-- Proxy to value -->
|
||||
<g id="node5" class="node">
|
||||
<title>Proxy to value</title>
|
||||
<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>
|
||||
<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"/>
|
||||
<text text-anchor="middle" x="1107.8692" y="-99.5431" font-family="Times,serif" font-size="14.00" fill="#000000">Proxy to value</text>
|
||||
</g>
|
||||
<!-- Proxy to value->Node -->
|
||||
<g id="edge2" class="edge">
|
||||
<title>Proxy to value->Node</title>
|
||||
<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"/>
|
||||
<path fill="none" stroke="#00bfff" d="M1167.5491,-100.1627C1172.6798,-99.8979 1177.7739,-99.635 1182.6606,-99.3827"/>
|
||||
<polygon fill="#00bfff" stroke="#00bfff" points="1183.1548,-102.862 1192.9611,-98.8511 1182.7939,-95.8713 1183.1548,-102.862"/>
|
||||
</g>
|
||||
<!-- Depend on function -->
|
||||
<g id="node6" class="node">
|
||||
<title>Depend on function</title>
|
||||
<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>
|
||||
<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"/>
|
||||
<text text-anchor="middle" x="1078.4595" y="-144.5476" font-family="Times,serif" font-size="14.00" fill="#000000">Depend on function</text>
|
||||
</g>
|
||||
<!-- Depend on function->Node -->
|
||||
<g id="edge3" class="edge">
|
||||
<title>Depend on function->Node</title>
|
||||
<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"/>
|
||||
<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"/>
|
||||
<polygon fill="#6495ed" stroke="#6495ed" points="1185.4219,-119.1853 1193.0086,-111.7899 1182.4659,-112.84 1185.4219,-119.1853"/>
|
||||
</g>
|
||||
<!-- Proxy to function -->
|
||||
<g id="node7" class="node">
|
||||
<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"/>
|
||||
<text text-anchor="middle" x="1106.7213" y="-195.7596" font-family="Times,serif" font-size="14.00" fill="#000000">Proxy to function</text>
|
||||
</g>
|
||||
<!-- Proxy to function->Node -->
|
||||
<g id="edge4" class="edge">
|
||||
<title>Proxy to function->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"/>
|
||||
<polygon fill="#1e90ff" stroke="#1e90ff" points="1203.8712,-125.6816 1207.2973,-115.656 1198.3669,-121.3568 1203.8712,-125.6816"/>
|
||||
</g>
|
||||
<!-- Sleep -->
|
||||
<g id="node8" class="node">
|
||||
<g id="node9" class="node">
|
||||
<title>Sleep</title>
|
||||
<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>
|
||||
<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"/>
|
||||
<text text-anchor="middle" x="468.4636" y="-964.4798" 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="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="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>
|
||||
<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"/>
|
||||
<text text-anchor="middle" x="407.4636" y="-914.4798" font-family="Times,serif" font-size="14.00" fill="#000000">Heat</text>
|
||||
</g>
|
||||
<!-- Lighting Change -->
|
||||
<g id="node11" class="node">
|
||||
<title>Lighting Change</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"/>
|
||||
<text text-anchor="middle" x="339.0912" y="-723.1235" font-family="Times,serif" font-size="14.00" fill="#000000">Lighting Change</text>
|
||||
</g>
|
||||
<!-- Lighting Kill -->
|
||||
<g id="node12" class="node">
|
||||
<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"/>
|
||||
<text text-anchor="middle" x="324.0912" y="-791.1235" font-family="Times,serif" font-size="14.00" fill="#000000">Lighting Kill</text>
|
||||
</g>
|
||||
<!-- Temperature Kill -->
|
||||
<g id="node13" class="node">
|
||||
<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"/>
|
||||
<text text-anchor="middle" x="84.7163" y="-718.1979" font-family="Times,serif" font-size="14.00" fill="#000000">Temperature Kill</text>
|
||||
</g>
|
||||
<!-- Temperature Kill->Heat -->
|
||||
<g id="edge9" class="edge">
|
||||
<title>Temperature Kill->Heat</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"/>
|
||||
<polygon fill="#1e90ff" stroke="#1e90ff" points="369.8916,-901.6166 380.2887,-903.6538 373.4313,-895.5775 369.8916,-901.6166"/>
|
||||
</g>
|
||||
<!-- Temperature Change -->
|
||||
<g id="node14" class="node">
|
||||
<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"/>
|
||||
<text text-anchor="middle" x="335.8143" y="-654.6257" font-family="Times,serif" font-size="14.00" fill="#000000">Temperature Change</text>
|
||||
</g>
|
||||
<!-- Temperature Change->Sleep -->
|
||||
<g id="edge5" class="edge">
|
||||
<title>Temperature Change->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"/>
|
||||
<polygon fill="#6495ed" stroke="#6495ed" points="465.2769,-940.0084 468.8475,-949.9834 472.2767,-939.9589 465.2769,-940.0084"/>
|
||||
</g>
|
||||
<!-- Temperature Change->Heat -->
|
||||
<g id="edge6" class="edge">
|
||||
<title>Temperature Change->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"/>
|
||||
<polygon fill="#6495ed" stroke="#6495ed" points="412.5219,-889.3758 413.2484,-899.9457 419.2719,-891.2297 412.5219,-889.3758"/>
|
||||
</g>
|
||||
<!-- Temperature -->
|
||||
<g id="node11" class="node">
|
||||
<g id="node16" class="node">
|
||||
<title>Temperature</title>
|
||||
<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>
|
||||
<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"/>
|
||||
<text text-anchor="middle" x="853.8816" y="-813.5222" font-family="Times,serif" font-size="14.00" fill="#000000">Temperature</text>
|
||||
</g>
|
||||
<!-- Temperature->Sleep -->
|
||||
<g id="edge4" class="edge">
|
||||
<title>Temperature->Sleep</title>
|
||||
<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"/>
|
||||
<!-- Temperature Change->Temperature -->
|
||||
<g id="edge10" class="edge">
|
||||
<title>Temperature Change->Temperature</title>
|
||||
<path fill="none" stroke="#0000ff" d="M394.7388,-676.3985C492.3973,-706.3513 687.0816,-766.0629 788.7111,-797.2338"/>
|
||||
<polygon fill="#0000ff" stroke="#0000ff" points="787.9605,-800.6644 798.5473,-800.2506 790.0132,-793.9721 787.9605,-800.6644"/>
|
||||
</g>
|
||||
<!-- Temperature->Heat -->
|
||||
<g id="edge5" class="edge">
|
||||
<title>Temperature->Heat</title>
|
||||
<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"/>
|
||||
<!-- Temperature Hold -->
|
||||
<g id="node15" class="node">
|
||||
<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"/>
|
||||
<text text-anchor="middle" x="164.791" y="-763.2024" font-family="Times,serif" font-size="14.00" fill="#000000">Temperature Hold</text>
|
||||
</g>
|
||||
<!-- Temperature->Cool -->
|
||||
<g id="edge6" class="edge">
|
||||
<title>Temperature->Cool</title>
|
||||
<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"/>
|
||||
<!-- Temperature Hold->Sleep -->
|
||||
<g id="edge7" class="edge">
|
||||
<title>Temperature Hold->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"/>
|
||||
<polygon fill="#6495ed" stroke="#6495ed" points="429.5722,-961.2913 440.1583,-960.8634 431.6159,-954.5963 429.5722,-961.2913"/>
|
||||
</g>
|
||||
<!-- Temperature Hold->Heat -->
|
||||
<g id="edge8" class="edge">
|
||||
<title>Temperature Hold->Heat</title>
|
||||
<path fill="none" stroke="#6495ed" d="M194.063,-785.15C238.6848,-812.9664 323.6051,-865.904 371.7761,-895.9329"/>
|
||||
<polygon fill="#6495ed" stroke="#6495ed" points="369.9873,-898.9422 380.325,-901.2622 373.6904,-893.0018 369.9873,-898.9422"/>
|
||||
</g>
|
||||
<!-- Temperature Hold->Temperature -->
|
||||
<g id="edge11" class="edge">
|
||||
<title>Temperature Hold->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="node12" class="node">
|
||||
<g id="node17" class="node">
|
||||
<title>/api/action/light/kill</title>
|
||||
<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>
|
||||
<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="node13" class="node">
|
||||
<g id="node18" class="node">
|
||||
<title>/api/action/light/set</title>
|
||||
<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>
|
||||
<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="node14" class="node">
|
||||
<g id="node19" class="node">
|
||||
<title>/api/action/temperature/kill</title>
|
||||
<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>
|
||||
<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->Temperature Kill -->
|
||||
<g id="edge13" class="edge">
|
||||
<title>/api/action/temperature/kill->Temperature Kill</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"/>
|
||||
<polygon fill="#1e90ff" stroke="#1e90ff" points="126.8691,-696.2152 119.5675,-703.8924 130.0629,-702.4442 126.8691,-696.2152"/>
|
||||
</g>
|
||||
<!-- /api/action/temperature/kill->Temperature -->
|
||||
<g id="edge14" class="edge">
|
||||
<title>/api/action/temperature/kill->Temperature</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"/>
|
||||
<polygon fill="#00bfff" stroke="#00bfff" points="853.6235,-788.8293 856.0984,-799.131 860.5879,-789.5344 853.6235,-788.8293"/>
|
||||
</g>
|
||||
<!-- /api/action/temperature/set -->
|
||||
<g id="node15" class="node">
|
||||
<g id="node20" class="node">
|
||||
<title>/api/action/temperature/set</title>
|
||||
<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>
|
||||
<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->Temperature Change -->
|
||||
<g id="edge12" class="edge">
|
||||
<title>/api/action/temperature/set->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>
|
||||
<!-- /api/sensor/temperature -->
|
||||
<g id="node16" class="node">
|
||||
<g id="node21" class="node">
|
||||
<title>/api/sensor/temperature</title>
|
||||
<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>
|
||||
<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"/>
|
||||
<text text-anchor="middle" x="670.5397" y="-30.427" font-family="Times,serif" font-size="14.00" fill="#000000">temperature</text>
|
||||
</g>
|
||||
<!-- /api/routine/cook/list -->
|
||||
<g id="node17" class="node">
|
||||
<g id="node22" class="node">
|
||||
<title>/api/routine/cook/list</title>
|
||||
<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>
|
||||
<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="node28" class="node">
|
||||
<g id="node30" class="node">
|
||||
<title>/api/settings/cook/recipe/list</title>
|
||||
<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>
|
||||
<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->/api/settings/cook/recipe/list -->
|
||||
<g id="edge7" class="edge">
|
||||
<g id="edge15" class="edge">
|
||||
<title>/api/routine/cook/list->/api/settings/cook/recipe/list</title>
|
||||
<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"/>
|
||||
<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"/>
|
||||
<polygon fill="#00bfff" stroke="#00bfff" points="324.6966,-140.659 317.9649,-132.4776 318.1253,-143.0712 324.6966,-140.659"/>
|
||||
</g>
|
||||
<!-- /api/routine/cook/start -->
|
||||
<g id="node18" class="node">
|
||||
<g id="node23" class="node">
|
||||
<title>/api/routine/cook/start</title>
|
||||
<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>
|
||||
<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"/>
|
||||
<text text-anchor="middle" x="472.2778" y="-500.5679" font-family="Times,serif" font-size="14.00" fill="#000000">start</text>
|
||||
</g>
|
||||
<!-- /api/routine/cook/kill -->
|
||||
<g id="node19" class="node">
|
||||
<g id="node24" class="node">
|
||||
<title>/api/routine/cook/kill</title>
|
||||
<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>
|
||||
<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"/>
|
||||
<text text-anchor="middle" x="472.2778" y="-388.5679" font-family="Times,serif" font-size="14.00" fill="#000000">kill</text>
|
||||
</g>
|
||||
<!-- /api/routine/cook/schedule/list -->
|
||||
<g id="node20" class="node">
|
||||
<g id="node25" class="node">
|
||||
<title>/api/routine/cook/schedule/list</title>
|
||||
<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>
|
||||
<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="node21" class="node">
|
||||
<g id="node26" class="node">
|
||||
<title>/api/routine/cook/schedule/set</title>
|
||||
<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>
|
||||
<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>
|
||||
<!-- /api/settings/time/set -->
|
||||
<g id="node22" class="node">
|
||||
<g id="node27" class="node">
|
||||
<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>
|
||||
<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"/>
|
||||
<text text-anchor="middle" x="471.2778" y="-242.5679" font-family="Times,serif" font-size="14.00" fill="#000000">set</text>
|
||||
</g>
|
||||
<!-- /api/settings/lighting/list -->
|
||||
<g id="node23" class="node">
|
||||
<g id="node28" class="node">
|
||||
<title>/api/settings/lighting/list</title>
|
||||
<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>
|
||||
<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"/>
|
||||
<text text-anchor="middle" x="531.2778" y="-138.5679" font-family="Times,serif" font-size="14.00" fill="#000000">list</text>
|
||||
</g>
|
||||
<!-- /api/settings/lighting/set -->
|
||||
<g id="node24" class="node">
|
||||
<g id="node29" class="node">
|
||||
<title>/api/settings/lighting/set</title>
|
||||
<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,-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,-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,-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>
|
||||
<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"/>
|
||||
<text text-anchor="middle" x="471.2778" y="-88.5679" font-family="Times,serif" font-size="14.00" fill="#000000">set</text>
|
||||
</g>
|
||||
<!-- /api/settings/cook/recipe/set -->
|
||||
<g id="node29" class="node">
|
||||
<g id="node31" class="node">
|
||||
<title>/api/settings/cook/recipe/set</title>
|
||||
<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>
|
||||
<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"/>
|
||||
<text text-anchor="middle" x="371.516" y="-160.7087" font-family="Times,serif" font-size="14.00" fill="#000000">set</text>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 24 KiB |
Loading…
Add table
Reference in a new issue