Merge branch 'feature/12v' of https://git.mannheim.ccc.de/C3MA/PlantCtrl into feature/12v
This commit is contained in:
commit
3110f25d80
@ -4,8 +4,9 @@ target = "xtensa-esp32-espidf"
|
|||||||
[target.xtensa-esp32-espidf]
|
[target.xtensa-esp32-espidf]
|
||||||
linker = "ldproxy"
|
linker = "ldproxy"
|
||||||
#runner = "espflash flash --monitor --partition-table partitions.csv" # Select this runner for espflash v2.x.x
|
#runner = "espflash flash --monitor --partition-table partitions.csv" # Select this runner for espflash v2.x.x
|
||||||
#runner = "espflash flash --monitor --baud 921600 --partition-table partitions.csv" # Select this runner for espflash v2.x.x
|
# runner = espflash erase-parts otadata
|
||||||
runner = "cargo runner"
|
runner = "espflash flash --monitor --baud 921600 --partition-table partitions.csv" # Select this runner for espflash v2.x.x
|
||||||
|
#runner = "cargo runner"
|
||||||
rustflags = [ "--cfg", "espidf_time64"] # Extending time_t for ESP IDF 5: https://github.com/esp-rs/rust/issues/110
|
rustflags = [ "--cfg", "espidf_time64"] # Extending time_t for ESP IDF 5: https://github.com/esp-rs/rust/issues/110
|
||||||
|
|
||||||
[unstable]
|
[unstable]
|
||||||
|
@ -76,7 +76,7 @@ serde_json = "1.0.108"
|
|||||||
strum = { version = "0.26.1", features = ["derive"] }
|
strum = { version = "0.26.1", features = ["derive"] }
|
||||||
once_cell = "1.19.0"
|
once_cell = "1.19.0"
|
||||||
measurements = "0.11.0"
|
measurements = "0.11.0"
|
||||||
bq34z100 = "0.1.0"
|
bq34z100 = "0.2.1"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
embuild = "0.31.3"
|
embuild = "0.31.3"
|
||||||
|
@ -25,7 +25,7 @@ fn main() {
|
|||||||
}
|
}
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
println!("Assuming build on linux");
|
println!("Assuming build on linux");
|
||||||
let output = Command::new("bash")
|
let output = Command::new("npx")
|
||||||
.arg("webpack")
|
.arg("webpack")
|
||||||
.current_dir("./src_webpack")
|
.current_dir("./src_webpack")
|
||||||
.output()
|
.output()
|
||||||
|
@ -236,8 +236,10 @@ fn safe_main() -> anyhow::Result<()> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
println!("attempting to connect wifi");
|
println!("attempting to connect wifi");
|
||||||
|
let mut ip_address: Option<String> = None;
|
||||||
match board.wifi(wifi.ssid, wifi.password, 10000) {
|
match board.wifi(wifi.ssid, wifi.password, 10000) {
|
||||||
Ok(_) => {
|
Ok(ip_info) => {
|
||||||
|
ip_address = Some(ip_info.ip.to_string());
|
||||||
online_mode = OnlineMode::Wifi;
|
online_mode = OnlineMode::Wifi;
|
||||||
}
|
}
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
@ -292,6 +294,14 @@ fn safe_main() -> anyhow::Result<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if online_mode == OnlineMode::Online {
|
if online_mode == OnlineMode::Online {
|
||||||
|
match ip_address {
|
||||||
|
Some(add_some) => {
|
||||||
|
let _ = board.mqtt_publish(&config, "/firmware/address", add_some.as_bytes());
|
||||||
|
},
|
||||||
|
None => {
|
||||||
|
let _ = board.mqtt_publish(&config, "/firmware/address", "N/A?".as_bytes());
|
||||||
|
},
|
||||||
|
}
|
||||||
let _ = board.mqtt_publish(&config, "/firmware/githash", git_hash.as_bytes());
|
let _ = board.mqtt_publish(&config, "/firmware/githash", git_hash.as_bytes());
|
||||||
let _ = board.mqtt_publish(&config, "/firmware/buildtime", build_timestamp.as_bytes());
|
let _ = board.mqtt_publish(&config, "/firmware/buildtime", build_timestamp.as_bytes());
|
||||||
let _ = board.mqtt_publish(&config, "/firmware/last_online", europe_time.to_rfc3339().as_bytes());
|
let _ = board.mqtt_publish(&config, "/firmware/last_online", europe_time.to_rfc3339().as_bytes());
|
||||||
@ -690,7 +700,7 @@ fn determine_tank_state(
|
|||||||
);
|
);
|
||||||
})
|
})
|
||||||
.and_then(|percent| {
|
.and_then(|percent| {
|
||||||
rv.left_ml = (percent * config.tank_useable_ml as f32) as u32;
|
rv.left_ml = ((percent * config.tank_useable_ml as f32) / 100_f32) as u32;
|
||||||
println!(
|
println!(
|
||||||
"Tank sensor returned mv {} as {}% leaving {} ml useable",
|
"Tank sensor returned mv {} as {}% leaving {} ml useable",
|
||||||
rv.raw, percent as u8, rv.left_ml
|
rv.raw, percent as u8, rv.left_ml
|
||||||
@ -702,12 +712,12 @@ fn determine_tank_state(
|
|||||||
percent as u8, config.tank_warn_percent
|
percent as u8, config.tank_warn_percent
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if config.tank_empty_percent > percent as u8 {
|
if config.tank_empty_percent < percent as u8 {
|
||||||
println!(
|
println!(
|
||||||
"Empty water, current percent is {}, minimum empty level is {}",
|
"Enough water, current percent is {}, minimum empty level is {}",
|
||||||
percent as u8, config.tank_empty_percent
|
percent as u8, config.tank_empty_percent
|
||||||
);
|
);
|
||||||
rv.enough_water = false;
|
rv.enough_water = true;
|
||||||
}
|
}
|
||||||
return Ok(());
|
return Ok(());
|
||||||
});
|
});
|
||||||
|
@ -7,6 +7,7 @@ use embedded_svc::wifi::{
|
|||||||
use esp_idf_hal::i2c::{I2cConfig, I2cDriver, I2cError};
|
use esp_idf_hal::i2c::{I2cConfig, I2cDriver, I2cError};
|
||||||
use esp_idf_hal::units::FromValueType;
|
use esp_idf_hal::units::FromValueType;
|
||||||
use esp_idf_svc::eventloop::EspSystemEventLoop;
|
use esp_idf_svc::eventloop::EspSystemEventLoop;
|
||||||
|
use esp_idf_svc::ipv4::IpInfo;
|
||||||
use esp_idf_svc::mqtt::client::QoS::AtLeastOnce;
|
use esp_idf_svc::mqtt::client::QoS::AtLeastOnce;
|
||||||
use esp_idf_svc::mqtt::client::QoS::ExactlyOnce;
|
use esp_idf_svc::mqtt::client::QoS::ExactlyOnce;
|
||||||
use esp_idf_svc::mqtt::client::{EspMqttClient, LwtConfiguration, MqttClientConfiguration};
|
use esp_idf_svc::mqtt::client::{EspMqttClient, LwtConfiguration, MqttClientConfiguration};
|
||||||
@ -94,7 +95,7 @@ pub trait PlantCtrlBoardInteraction {
|
|||||||
ssid: heapless::String<32>,
|
ssid: heapless::String<32>,
|
||||||
password: Option<heapless::String<64>>,
|
password: Option<heapless::String<64>>,
|
||||||
max_wait: u32,
|
max_wait: u32,
|
||||||
) -> Result<()>;
|
) -> Result<IpInfo>;
|
||||||
fn sntp(&mut self, max_wait: u32) -> Result<chrono::DateTime<Utc>>;
|
fn sntp(&mut self, max_wait: u32) -> Result<chrono::DateTime<Utc>>;
|
||||||
fn mount_file_system(&mut self) -> Result<()>;
|
fn mount_file_system(&mut self) -> Result<()>;
|
||||||
fn file_system_size(&mut self) -> Result<FileSystemSizeInfo>;
|
fn file_system_size(&mut self) -> Result<FileSystemSizeInfo>;
|
||||||
@ -393,7 +394,7 @@ impl PlantCtrlBoardInteraction for PlantCtrlBoard<'_> {
|
|||||||
ssid: heapless::String<32>,
|
ssid: heapless::String<32>,
|
||||||
password: Option<heapless::String<64>>,
|
password: Option<heapless::String<64>>,
|
||||||
max_wait: u32,
|
max_wait: u32,
|
||||||
) -> Result<()> {
|
) -> Result<IpInfo> {
|
||||||
match password {
|
match password {
|
||||||
Some(pw) => {
|
Some(pw) => {
|
||||||
//TODO expect error due to invalid pw or similar! //call this during configuration and check if works, revert to config mode if not
|
//TODO expect error due to invalid pw or similar! //call this during configuration and check if works, revert to config mode if not
|
||||||
@ -448,7 +449,7 @@ impl PlantCtrlBoardInteraction for PlantCtrlBoard<'_> {
|
|||||||
//update freertos registers ;)
|
//update freertos registers ;)
|
||||||
let address = self.wifi_driver.sta_netif().get_ip_info().unwrap();
|
let address = self.wifi_driver.sta_netif().get_ip_info().unwrap();
|
||||||
println!("IP info: {:?}", address);
|
println!("IP info: {:?}", address);
|
||||||
Ok(())
|
Ok(address)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn mount_file_system(&mut self) -> Result<()> {
|
fn mount_file_system(&mut self) -> Result<()> {
|
||||||
@ -620,6 +621,7 @@ impl PlantCtrlBoardInteraction for PlantCtrlBoard<'_> {
|
|||||||
qos: AtLeastOnce,
|
qos: AtLeastOnce,
|
||||||
retain: true,
|
retain: true,
|
||||||
}),
|
}),
|
||||||
|
keep_alive_interval : Some(Duration::from_secs(60*60*2)),
|
||||||
//room for improvement
|
//room for improvement
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
|
@ -40,7 +40,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<input type="number" min="1" max="500000" id="tank_warn_percent">
|
<input type="number" min="1" max="500000" id="tank_warn_percent">
|
||||||
Tank Warn below mL
|
Tank Warn Percent (mapped in relation to empty and full)
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<input type="number" min="0" max="100" id="tank_empty_percent">
|
<input type="number" min="0" max="100" id="tank_empty_percent">
|
||||||
|
Loading…
Reference in New Issue
Block a user