fan_control/
fan_control.rs

1use logicline::{Rack, action};
2
3fn main() {
4    let mut state = Rack::new().with_recording_enabled();
5    let mut processor = state.processor();
6
7    // Some fan state
8    let mut fan = false;
9
10    // A temperature sensor value
11    let temperature = 31.0;
12
13    processor
14        // a sequence to turn on the fan on if the temperature is above 30 degrees
15        .line("fan_on", temperature)
16        .then(action!("temp_high", |t| (t > 30.0).then_some(())))
17        .then(action!("fan_on", |()| {
18            fan = true;
19            Some(())
20        }));
21    processor
22        // a sequence to turn off the fan if the temperature is below 25 degrees
23        .line("fan_off", temperature)
24        .then(action!("temp_low", |t| (t < 25.0).then_some(())))
25        .then(action!("fan_off", |()| {
26            fan = false;
27            Some(())
28        }));
29
30    state.ingress(&mut processor);
31    println!("{}", state);
32
33    println!("{}", serde_json::to_string_pretty(&state).unwrap());
34}