Mercurial > templog
annotate rust/src/fridge.rs @ 639:89818a14648b rust tip
- switch to using anyhow for errors, surf for http
runs but surf has problems
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Thu, 28 Nov 2019 23:57:00 +0800 |
parents | a9f353f488d0 |
children |
rev | line source |
---|---|
634 | 1 // TODO: |
2 // - riker | |
3 // - use monotonic clock | |
4 // - timer.rs should use rx.recv_timeout(next_time) instead of rx.try_recv() | |
5 // and then could remove cfg.frequency_millis | |
632
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
6 use std; |
594
aff50ee77252
rust working better now with streams and sinks.
Matt Johnston <matt@ucc.asn.au>
parents:
593
diff
changeset
|
7 |
597 | 8 use std::time::{Duration,Instant}; |
632
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
9 use riker::actors::*; |
621 | 10 |
11 #[cfg(target_os = "linux")] | |
626 | 12 use self::sysfs_gpio::{Direction, Pin}; |
593
bf138339d20a
fiddling with timeouts and closures
Matt Johnston <matt@ucc.asn.au>
parents:
592
diff
changeset
|
13 |
638 | 14 use crate::params::Params; |
632
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
15 use super::config::Config; |
638 | 16 use super::params; |
17 use super::sensor; | |
632
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
18 use super::types::*; |
592 | 19 |
634 | 20 #[derive(Debug,Clone)] |
632
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
21 pub struct Tick; |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
22 |
633 | 23 #[actor(Params, Tick, Readings)] |
593
bf138339d20a
fiddling with timeouts and closures
Matt Johnston <matt@ucc.asn.au>
parents:
592
diff
changeset
|
24 pub struct Fridge { |
bf138339d20a
fiddling with timeouts and closures
Matt Johnston <matt@ucc.asn.au>
parents:
592
diff
changeset
|
25 params: Params, |
603
b45b8b4cf0f5
get rid of lazy_static, config is passed around
Matt Johnston <matt@ucc.asn.au>
parents:
601
diff
changeset
|
26 config: Config, |
638 | 27 testmode: bool, |
620 | 28 |
29 on: bool, | |
593
bf138339d20a
fiddling with timeouts and closures
Matt Johnston <matt@ucc.asn.au>
parents:
592
diff
changeset
|
30 temp_wort: Option<f32>, |
bf138339d20a
fiddling with timeouts and closures
Matt Johnston <matt@ucc.asn.au>
parents:
592
diff
changeset
|
31 temp_fridge: Option<f32>, |
620 | 32 last_off_time: Instant, |
33 wort_valid_time: Instant, | |
34 integrator: StepIntegrator, | |
621 | 35 control: FridgeControl, |
632
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
36 } |
593
bf138339d20a
fiddling with timeouts and closures
Matt Johnston <matt@ucc.asn.au>
parents:
592
diff
changeset
|
37 |
632
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
38 impl Actor for Fridge { |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
39 type Msg = FridgeMsg; |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
40 fn recv(&mut self, |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
41 ctx: &Context<Self::Msg>, |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
42 msg: Self::Msg, |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
43 sender: Sender) { |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
44 self.receive(ctx, msg, sender); |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
45 // TODO: should we do self.tick(ctx) here instead? |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
46 } |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
47 |
634 | 48 fn pre_start(&mut self, ctx: &Context<Self::Msg>) { |
638 | 49 |
50 let params_chan : ChannelRef<Params> = channel("params", ctx).unwrap(); | |
51 let sensor_chan : ChannelRef<Readings> = channel("readings", ctx).unwrap(); | |
633 | 52 let sub = Box::new(ctx.myself()); |
638 | 53 params_chan.tell(Subscribe {actor: sub.clone(), topic: "params".into()}, None); |
54 sensor_chan.tell(Subscribe {actor: sub.clone(), topic: "readings".into()}, None); | |
55 | |
633 | 56 |
638 | 57 // XXX a better way to get own reference? |
58 let props = Props::new_args(params::ParamWaiter::new_actor, (self.config.clone(), params_chan)); | |
59 ctx.actor_of(props, "paramwaiter").unwrap(); | |
60 | |
61 if self.testmode { | |
62 let props = Props::new_args(sensor::TestSensor::new_actor, (self.config.clone(), sensor_chan)); | |
63 ctx.actor_of(props, "sensor").unwrap() | |
64 } else { | |
65 let props = Props::new_args(sensor::OneWireSensor::new_actor, (self.config.clone(), sensor_chan)); | |
66 ctx.actor_of(props, "sensor").unwrap() | |
67 }; | |
634 | 68 |
69 self.tick(ctx); | |
632
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
70 } |
594
aff50ee77252
rust working better now with streams and sinks.
Matt Johnston <matt@ucc.asn.au>
parents:
593
diff
changeset
|
71 } |
aff50ee77252
rust working better now with streams and sinks.
Matt Johnston <matt@ucc.asn.au>
parents:
593
diff
changeset
|
72 |
633 | 73 impl Receive<Readings> for Fridge { |
632
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
74 type Msg = FridgeMsg; |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
75 fn receive(&mut self, |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
76 ctx: &Context<Self::Msg>, |
633 | 77 r: Readings, |
632
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
78 _sender: Sender) { |
635
4424a8b30f9c
config crate wants everything to be lower case
Matt Johnston <matt@ucc.asn.au>
parents:
634
diff
changeset
|
79 self.temp_wort = r.get_temp(&self.config.wort_name); |
4424a8b30f9c
config crate wants everything to be lower case
Matt Johnston <matt@ucc.asn.au>
parents:
634
diff
changeset
|
80 self.temp_fridge = r.get_temp(&self.config.fridge_name); |
594
aff50ee77252
rust working better now with streams and sinks.
Matt Johnston <matt@ucc.asn.au>
parents:
593
diff
changeset
|
81 |
632
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
82 if self.temp_wort.is_some() { |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
83 self.wort_valid_time = Instant::now(); |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
84 } |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
85 |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
86 self.tick(ctx); |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
87 } |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
88 } |
594
aff50ee77252
rust working better now with streams and sinks.
Matt Johnston <matt@ucc.asn.au>
parents:
593
diff
changeset
|
89 |
632
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
90 impl Receive<Params> for Fridge { |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
91 type Msg = FridgeMsg; |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
92 fn receive(&mut self, |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
93 ctx: &Context<Self::Msg>, |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
94 p: Params, |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
95 _sender: Sender) { |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
96 self.params = p; |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
97 println!("fridge set_params {:?}", self.params); |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
98 |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
99 self.tick(ctx); |
594
aff50ee77252
rust working better now with streams and sinks.
Matt Johnston <matt@ucc.asn.au>
parents:
593
diff
changeset
|
100 } |
632
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
101 } |
594
aff50ee77252
rust working better now with streams and sinks.
Matt Johnston <matt@ucc.asn.au>
parents:
593
diff
changeset
|
102 |
632
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
103 impl Receive<Tick> for Fridge { |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
104 type Msg = FridgeMsg; |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
105 fn receive(&mut self, |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
106 ctx: &Context<Self::Msg>, |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
107 _tick: Tick, |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
108 _sender: Sender) { |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
109 self.tick(ctx); |
594
aff50ee77252
rust working better now with streams and sinks.
Matt Johnston <matt@ucc.asn.au>
parents:
593
diff
changeset
|
110 } |
592 | 111 } |
112 | |
621 | 113 enum FridgeControl { |
114 #[cfg(target_os = "linux")] | |
115 Gpio(Pin), | |
116 Fake, | |
117 } | |
118 | |
620 | 119 impl Drop for Fridge { |
120 fn drop(&mut self) { | |
121 // safety fridge off | |
621 | 122 self.turn(false); |
620 | 123 } |
124 } | |
125 | |
593
bf138339d20a
fiddling with timeouts and closures
Matt Johnston <matt@ucc.asn.au>
parents:
592
diff
changeset
|
126 impl Fridge { |
638 | 127 pub fn new_actor((config, testmode, nowait) |
128 : (Config, bool, bool)) -> Fridge { | |
129 Self::new(config, testmode, nowait) | |
634 | 130 |
131 } | |
638 | 132 pub fn new(config: Config, |
133 testmode: bool, | |
134 nowait: bool) -> Fridge { | |
594
aff50ee77252
rust working better now with streams and sinks.
Matt Johnston <matt@ucc.asn.au>
parents:
593
diff
changeset
|
135 let mut f = Fridge { |
603
b45b8b4cf0f5
get rid of lazy_static, config is passed around
Matt Johnston <matt@ucc.asn.au>
parents:
601
diff
changeset
|
136 config: config.clone(), |
634 | 137 params: Params::defaults(), |
620 | 138 on: false, |
593
bf138339d20a
fiddling with timeouts and closures
Matt Johnston <matt@ucc.asn.au>
parents:
592
diff
changeset
|
139 temp_wort: None, |
bf138339d20a
fiddling with timeouts and closures
Matt Johnston <matt@ucc.asn.au>
parents:
592
diff
changeset
|
140 temp_fridge: None, |
620 | 141 last_off_time: Instant::now(), |
635
4424a8b30f9c
config crate wants everything to be lower case
Matt Johnston <matt@ucc.asn.au>
parents:
634
diff
changeset
|
142 wort_valid_time: Instant::now() - Duration::new(config.fridge_wort_invalid_time, 100), |
634 | 143 integrator: StepIntegrator::new(Duration::new(1, 0)), |
144 control: Self::make_control(&config), | |
638 | 145 testmode: testmode, |
594
aff50ee77252
rust working better now with streams and sinks.
Matt Johnston <matt@ucc.asn.au>
parents:
593
diff
changeset
|
146 }; |
620 | 147 |
597 | 148 if nowait { |
635
4424a8b30f9c
config crate wants everything to be lower case
Matt Johnston <matt@ucc.asn.au>
parents:
634
diff
changeset
|
149 f.last_off_time -= Duration::new(config.fridge_delay, 1); |
597 | 150 } |
620 | 151 |
594
aff50ee77252
rust working better now with streams and sinks.
Matt Johnston <matt@ucc.asn.au>
parents:
593
diff
changeset
|
152 f |
593
bf138339d20a
fiddling with timeouts and closures
Matt Johnston <matt@ucc.asn.au>
parents:
592
diff
changeset
|
153 } |
bf138339d20a
fiddling with timeouts and closures
Matt Johnston <matt@ucc.asn.au>
parents:
592
diff
changeset
|
154 |
621 | 155 #[cfg(target_os = "linux")] |
156 fn make_control(config: &Config) -> FridgeControl { | |
635
4424a8b30f9c
config crate wants everything to be lower case
Matt Johnston <matt@ucc.asn.au>
parents:
634
diff
changeset
|
157 let mut pin = Pin(config.fridge_gpio_pin); |
621 | 158 // XXX better error handling? |
159 pin.export().expect("Exporting fridge gpio failed"); | |
160 pin.set_direction(Direction::Low).expect("Fridge gpio direction failed"); | |
161 FridgeControl::Gpio(pin) | |
162 } | |
163 | |
164 #[cfg(not(target_os = "linux"))] | |
634 | 165 fn make_control(_config: &Config) -> FridgeControl { |
621 | 166 FridgeControl::Fake |
167 } | |
168 | |
594
aff50ee77252
rust working better now with streams and sinks.
Matt Johnston <matt@ucc.asn.au>
parents:
593
diff
changeset
|
169 fn next_wakeup(&self) -> Duration { |
aff50ee77252
rust working better now with streams and sinks.
Matt Johnston <matt@ucc.asn.au>
parents:
593
diff
changeset
|
170 let millis = 400; |
aff50ee77252
rust working better now with streams and sinks.
Matt Johnston <matt@ucc.asn.au>
parents:
593
diff
changeset
|
171 let dur = Duration::from_millis(millis); |
aff50ee77252
rust working better now with streams and sinks.
Matt Johnston <matt@ucc.asn.au>
parents:
593
diff
changeset
|
172 dur |
aff50ee77252
rust working better now with streams and sinks.
Matt Johnston <matt@ucc.asn.au>
parents:
593
diff
changeset
|
173 } |
aff50ee77252
rust working better now with streams and sinks.
Matt Johnston <matt@ucc.asn.au>
parents:
593
diff
changeset
|
174 |
606 | 175 |
620 | 176 fn turn_off(&mut self) { |
621 | 177 info!("Turning fridge off"); |
620 | 178 self.turn(false); |
179 } | |
180 | |
181 fn turn_on(&mut self) { | |
621 | 182 info!("Turning fridge on"); |
620 | 183 self.turn(true); |
184 } | |
185 | |
186 fn turn(&mut self, on: bool) { | |
621 | 187 match self.control { |
188 #[cfg(target_os = "linux")] | |
189 Gpio(pin) => pin.set_value(on as u8), | |
190 FridgeControl::Fake => debug!("fridge turns {}", if on {"on"} else {"off"}), | |
191 } | |
620 | 192 self.on = on; |
636
43eb3cfdf769
some progress, better error handling
Matt Johnston <matt@ucc.asn.au>
parents:
635
diff
changeset
|
193 self.integrator.turn(on) |
620 | 194 } |
195 | |
632
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
196 // Turns the fridge off and on |
620 | 197 fn compare_temperatures(&mut self) { |
198 let fridge_min = self.params.fridge_setpoint - self.params.fridge_range_lower; | |
199 let fridge_max = self.params.fridge_setpoint - self.params.fridge_range_upper; | |
200 let wort_max = self.params.fridge_setpoint + self.params.fridge_difference; | |
201 let off_time = Instant::now() - self.last_off_time; | |
202 | |
203 // Or elsewhere? | |
621 | 204 self.integrator.set_limit(Duration::new(self.params.overshoot_delay, 0)); |
620 | 205 |
206 // Safety to avoid bad things happening to the fridge motor (?) | |
207 // When it turns off don't start up again for at least FRIDGE_DELAY | |
635
4424a8b30f9c
config crate wants everything to be lower case
Matt Johnston <matt@ucc.asn.au>
parents:
634
diff
changeset
|
208 if !self.on && off_time < Duration::new(self.config.fridge_delay, 0) { |
621 | 209 info!("fridge skipping, too early"); |
620 | 210 return; |
211 } | |
212 | |
213 if self.params.disabled { | |
214 if self.on { | |
621 | 215 info!("Disabled, turning fridge off"); |
620 | 216 self.turn_off(); |
217 } | |
218 return; | |
219 } | |
220 | |
221 // handle broken wort sensor | |
222 if self.temp_wort.is_none() { | |
223 let invalid_time = Instant::now() - self.wort_valid_time; | |
224 warn!("Invalid wort sensor for {:?} secs", invalid_time); | |
635
4424a8b30f9c
config crate wants everything to be lower case
Matt Johnston <matt@ucc.asn.au>
parents:
634
diff
changeset
|
225 if invalid_time < Duration::new(self.config.fridge_wort_invalid_time, 0) { |
620 | 226 warn!("Has only been invalid for {:?}, waiting", invalid_time); |
227 return; | |
228 } | |
229 } | |
230 | |
231 if self.temp_fridge.is_none() { | |
232 warn!("Invalid fridge sensor"); | |
233 } | |
234 | |
235 if self.on { | |
236 debug!("fridge is on"); | |
237 let on_time = self.integrator.integrate().as_secs() as f32; | |
621 | 238 let on_ratio = on_time / self.params.overshoot_delay as f32; |
620 | 239 |
621 | 240 let overshoot = self.params.overshoot_factor as f32 * on_ratio; |
241 debug!("on_percent {}, overshoot {}", on_ratio * 100.0, overshoot); | |
620 | 242 |
243 let mut turn_off = false; | |
621 | 244 if self.temp_wort.is_some() && !self.params.nowort { |
245 let t = self.temp_wort.unwrap(); | |
620 | 246 // use the wort temperature |
621 | 247 if t - overshoot < self.params.fridge_setpoint { |
248 info!("wort has cooled enough, {temp}º (overshoot {overshoot}º = {factor} × {percent}%)", | |
620 | 249 temp = t, overshoot = overshoot, |
621 | 250 factor = self.params.overshoot_factor, |
251 percent = on_ratio*100.0); | |
620 | 252 turn_off = true; |
253 } | |
621 | 254 } else if let Some(t) = self.temp_fridge { |
620 | 255 // use the fridge temperature |
256 if t < fridge_min { | |
257 warn!("fridge off fallback, fridge {}, min {}", t, fridge_min); | |
258 if self.temp_wort.is_none() { | |
621 | 259 warn!("wort has been invalid for {:?}", Instant::now() - self.wort_valid_time); |
620 | 260 } |
261 turn_off = true; | |
262 } | |
263 } | |
264 if turn_off { | |
265 self.turn_off(); | |
266 } | |
267 } else { | |
268 debug!("fridge is off. fridge {:?} max {:?}. wort {:?} max {:?}", | |
269 self.temp_fridge, fridge_max, self.temp_wort, wort_max); | |
270 let mut turn_on = false; | |
621 | 271 if self.temp_wort.is_some() && !self.params.nowort { |
620 | 272 // use the wort temperature |
621 | 273 let t = self.temp_wort.unwrap(); |
620 | 274 if t >= wort_max { |
621 | 275 info!("Wort is too hot {}°, max {}°", t, wort_max); |
620 | 276 turn_on = true; |
277 } | |
278 } | |
279 | |
280 if let Some(t) = self.temp_fridge { | |
281 if t >= fridge_max { | |
621 | 282 warn!("fridge too hot fallback, fridge {}°, max {}°", t, fridge_max); |
620 | 283 turn_on = true; |
284 } | |
285 } | |
286 | |
287 if turn_on { | |
288 self.turn_on() | |
289 } | |
290 } | |
291 } | |
292 | |
606 | 293 /// Must be called after every state change. Turns the fridge on/off as required and |
294 /// schedules any future wakeups based on the present (new) state | |
632
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
295 /// Examples of wakeups events are |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
296 /// |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
297 /// * overshoot calculation |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
298 /// * minimum fridge-off time |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
299 /// * invalid wort timeout |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
300 /// All specified in next_wakeup() |
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
301 fn tick(&mut self, |
633 | 302 ctx: &Context<<Self as Actor>::Msg>) { |
594
aff50ee77252
rust working better now with streams and sinks.
Matt Johnston <matt@ucc.asn.au>
parents:
593
diff
changeset
|
303 debug!("tick"); |
aff50ee77252
rust working better now with streams and sinks.
Matt Johnston <matt@ucc.asn.au>
parents:
593
diff
changeset
|
304 |
621 | 305 self.compare_temperatures(); |
592 | 306 |
632
bde302def78e
moving to riker, nowhere near yet
Matt Johnston <matt@ucc.asn.au>
parents:
631
diff
changeset
|
307 // Sets the next self-wakeup timeout |
594
aff50ee77252
rust working better now with streams and sinks.
Matt Johnston <matt@ucc.asn.au>
parents:
593
diff
changeset
|
308 let dur = self.next_wakeup(); |
634 | 309 ctx.schedule_once(dur, ctx.myself(), None, Tick); |
593
bf138339d20a
fiddling with timeouts and closures
Matt Johnston <matt@ucc.asn.au>
parents:
592
diff
changeset
|
310 } |
592 | 311 } |