6 Commits

Author SHA1 Message Date
8603d6fab4 Added missing ser/de 2025-01-11 06:05:57 +01:00
d3e915575f Moved types into seperate library 2025-01-11 06:00:16 +01:00
14f17d49df Use tagged version of iot_tools/updater 2025-01-11 05:55:32 +01:00
01738df95c Added missing functions to structs 2025-01-11 05:46:23 +01:00
2f89c58f95 Bump version 2025-01-11 05:32:56 +01:00
032d785d60 Added upload script 2025-01-11 05:32:11 +01:00
6 changed files with 64 additions and 11 deletions

15
Cargo.lock generated
View File

@@ -13,8 +13,9 @@ dependencies = [
[[package]]
name = "air_filter"
version = "0.3.0"
version = "0.4.4"
dependencies = [
"air_filter_types",
"bme280",
"cfg-if",
"const_format",
@@ -49,6 +50,15 @@ dependencies = [
"updater",
]
[[package]]
name = "air_filter_types"
version = "0.1.0"
dependencies = [
"bme280",
"defmt",
"serde",
]
[[package]]
name = "arrayvec"
version = "0.7.6"
@@ -1889,7 +1899,8 @@ checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
[[package]]
name = "updater"
version = "0.1.0"
version = "0.2.0"
source = "git+https://git.huizinga.dev/Dreaded_X/iot_tools?tag=v0.2.0#ce96dd0a4ef3cffe1c6be6786b0a47cdb412f861"
dependencies = [
"cortex-m",
"defmt",

View File

@@ -1,12 +1,18 @@
[package]
name = "air_filter"
version = "0.3.0"
version = "0.4.4"
edition = "2021"
[workspace.dependencies]
defmt = "0.3"
bme280 = { version = "0.5.0", features = ["async", "defmt"] }
serde = { version = "1.0", default-features = false, features = ["derive"] }
[dependencies]
air_filter_types = { path = "./air_filter_types/" }
cortex-m = { version = "0.7", features = ["inline-asm"] }
cortex-m-rt = "0.7"
defmt = "0.3"
defmt = { workspace = true }
defmt-rtt = "0.4"
embassy-embedded-hal = { version = "0.3.0", features = ["defmt"] }
embassy-executor = { version = "0.7", features = [
@@ -58,7 +64,7 @@ rust-mqtt = { version = "0.3", features = [
], default-features = false }
const_format = "0.2"
git-version = "0.3"
serde = { version = "1.0", default-features = false, features = ["derive"] }
serde = { workspace = true }
heapless = { version = "0.8", features = ["defmt-03", "serde"] }
nourl = { version = "0.1", features = ["defmt"] }
# Embassy hardcodes a max of 6 dns servers, if there are more it crashes. This is a workaround
@@ -67,9 +73,9 @@ nourl = { version = "0.1", features = ["defmt"] }
smoltcp = { version = "0.12", default-features = false, features = [
"dns-max-server-count-4",
] }
updater = { version = "0.1.0", path = "../iot_tools/updater" }
updater = { git = "https://git.huizinga.dev/Dreaded_X/iot_tools", tag = "v0.2.0" }
portable-atomic = { version = "1.6", features = ["critical-section"] }
bme280 = { version = "0.5.0", features = ["async", "defmt"] }
bme280 = { workspace = true }
picoserve = { version = "0.13.3", features = ["defmt", "embassy"] }
embedded-storage = "0.3"

View File

@@ -0,0 +1,9 @@
[package]
name = "air_filter_types"
version = "0.1.0"
edition = "2024"
[dependencies]
bme280 = { workspace = true }
defmt = { workspace = true }
serde = { workspace = true }

View File

@@ -15,7 +15,7 @@ pub enum FanSpeed {
High,
}
#[derive(Serialize)]
#[derive(Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub struct FanState {
pub speed: FanSpeed,
@@ -26,20 +26,32 @@ impl FanState {
pub fn new(speed: FanSpeed, manual: bool) -> Self {
Self { speed, manual }
}
pub fn speed(&self) -> FanSpeed {
self.speed
}
pub fn manual(&self) -> bool {
self.manual
}
}
#[derive(Deserialize)]
#[derive(Serialize, Deserialize)]
pub struct SetFanSpeed {
speed: FanSpeed,
}
impl SetFanSpeed {
pub fn new(speed: FanSpeed) -> Self {
Self { speed }
}
pub fn speed(&self) -> FanSpeed {
self.speed
}
}
#[derive(Serialize)]
#[derive(Serialize, Deserialize)]
pub struct SensorData {
temperature: f32,
humidity: f32,
@@ -54,4 +66,16 @@ impl SensorData {
pressure: measurements.pressure,
}
}
pub fn temperature(&self) -> f32 {
self.temperature
}
pub fn humidity(&self) -> f32 {
self.humidity
}
pub fn pressure(&self) -> f32 {
self.pressure
}
}

View File

@@ -42,7 +42,7 @@ use updater::firmware_router;
use {defmt_rtt as _, panic_probe as _};
use air_filter::{FanSpeed, FanState, SensorData, SetFanSpeed};
use air_filter_types::{FanSpeed, FanState, SensorData, SetFanSpeed};
bind_interrupts!(struct Irqs {
PIO0_IRQ_0 => pio::InterruptHandler<PIO0>;

3
upload.sh Executable file
View File

@@ -0,0 +1,3 @@
#!/bin/bash
curl -X PUT --data-binary "@./target/firmware/firmware+signed" airfilter.lan.huizinga.dev/firmware/update