show build version in html

This commit is contained in:
Empire 2024-03-02 14:01:48 +01:00
commit e070c802d5
7 changed files with 70 additions and 12 deletions

View File

@ -1,5 +1,5 @@
# Rust often needs a bit of an extra main task stack size compared to C (the default is 3K) # Rust often needs a bit of an extra main task stack size compared to C (the default is 3K)
CONFIG_ESP_MAIN_TASK_STACK_SIZE=20000 CONFIG_ESP_MAIN_TASK_STACK_SIZE=25000
# Use this to set FreeRTOS kernel tick frequency to 1000 Hz (100 Hz by default). # Use this to set FreeRTOS kernel tick frequency to 1000 Hz (100 Hz by default).
# This allows to use 1 ms granuality for thread sleeps (10 ms by default). # This allows to use 1 ms granuality for thread sleeps (10 ms by default).

View File

@ -105,7 +105,7 @@ fn safe_main() -> anyhow::Result<()> {
// Bind the log crate to the ESP Logging facilities // Bind the log crate to the ESP Logging facilities
esp_idf_svc::log::EspLogger::initialize_default(); esp_idf_svc::log::EspLogger::initialize_default();
if esp_idf_sys::CONFIG_MAIN_TASK_STACK_SIZE < 20000 { if esp_idf_sys::CONFIG_MAIN_TASK_STACK_SIZE < 25000 {
error!( error!(
"stack too small: {} bail!", "stack too small: {} bail!",
esp_idf_sys::CONFIG_MAIN_TASK_STACK_SIZE esp_idf_sys::CONFIG_MAIN_TASK_STACK_SIZE
@ -517,7 +517,7 @@ fn safe_main() -> anyhow::Result<()> {
let _ = board.mqtt_publish( let _ = board.mqtt_publish(
&config, &config,
"/deepsleep", "/deepsleep",
"Entering low voltage long deep sleep".as_bytes(), "low Volt 12h".as_bytes(),
); );
} }
12 * 60 12 * 60
@ -527,7 +527,7 @@ fn safe_main() -> anyhow::Result<()> {
let _ = board.mqtt_publish( let _ = board.mqtt_publish(
&config, &config,
"/deepsleep", "/deepsleep",
"Entering after pump restart deep sleep".as_bytes(), "after pump".as_bytes(),
); );
} }
0 0
@ -536,7 +536,7 @@ fn safe_main() -> anyhow::Result<()> {
let _ = board.mqtt_publish( let _ = board.mqtt_publish(
&config, &config,
"/deepsleep", "/deepsleep",
"Entering normal mode 20m deep sleep".as_bytes(), "normal 20m".as_bytes(),
); );
} }
20 20
@ -546,11 +546,16 @@ fn safe_main() -> anyhow::Result<()> {
let _ = board.mqtt_publish( let _ = board.mqtt_publish(
&config, &config,
"/deepsleep", "/deepsleep",
"Entering night mode 1h deep sleep".as_bytes(), "night 1h".as_bytes(),
); );
} }
60 60
}; };
if online_mode == OnlineMode::Online {
let _ = board.mqtt_publish(&config, "/state", "sleep".as_bytes());
}
//determine next event //determine next event
//is light out of work trigger soon? //is light out of work trigger soon?
//is battery low ?? //is battery low ??

View File

@ -621,6 +621,7 @@ impl PlantCtrlBoardInteraction for PlantCtrlBoard<'_> {
qos: AtLeastOnce, qos: AtLeastOnce,
retain: true, retain: true,
}), }),
client_id: Some("plantctrl"),
keep_alive_interval : Some(Duration::from_secs(60*60*2)), keep_alive_interval : Some(Duration::from_secs(60*60*2)),
//room for improvement //room for improvement
..Default::default() ..Default::default()
@ -716,14 +717,22 @@ impl PlantCtrlBoardInteraction for PlantCtrlBoard<'_> {
println!("Some error assembling full_topic 2"); println!("Some error assembling full_topic 2");
bail!("Some error assembling full_topic 2") bail!("Some error assembling full_topic 2")
}; };
client.publish( let publish = client.publish(
&full_topic, &full_topic,
embedded_svc::mqtt::client::QoS::ExactlyOnce, embedded_svc::mqtt::client::QoS::ExactlyOnce,
true, true,
message, message,
)?; );
return Ok(()); match publish {
OkStd(_) => return Ok(()),
Err(err) => {
println!("Error during mqtt send on topic {} with message {:#?} error is {:?}",full_topic, message, err);
return Err(err)?
},
}
;
} }
fn state_charge_percent(&mut self) -> Result<u8> { fn state_charge_percent(&mut self) -> Result<u8> {

View File

@ -1,6 +1,13 @@
<html> <html>
<body> <body>
<h2>Current Firmware</h2>
<div>
<div id="firmware_buildtime">Buildtime loading</div>
<div id="firmware_githash">Build githash loading</div>
</div>
<h2>firmeware OTA v3</h2> <h2>firmeware OTA v3</h2>
<form id="upload_form" method="post"> <form id="upload_form" method="post">
<input type="file" name="file1" id="file1"><br> <input type="file" name="file1" id="file1"><br>
<progress id="progressBar" value="0" max="100" style="width:300px;"></progress> <progress id="progressBar" value="0" max="100" style="width:300px;"></progress>
@ -9,6 +16,8 @@
<p id="loaded_n_total"></p> <p id="loaded_n_total"></p>
</form> </form>
<h2>config</h2> <h2>config</h2>
<div id="configform"> <div id="configform">

View File

@ -1,7 +1,11 @@
<html> <html>
<body> <body>
<input type="button" id="test" value="Test"> <input type="button" id="test" value="Test">
<h2>Current Firmware</h2>
<div>
<div id="firmware_buildtime">Buildtime loading</div>
<div id="firmware_githash">Build githash loading</div>
</div>
<div> <div>
<h2>firmeware OTA v3</h2> <h2>firmeware OTA v3</h2>
<form id="upload_form" method="post"> <form id="upload_form" method="post">

View File

@ -22,6 +22,12 @@ struct SSIDList<'a> {
ssids: Vec<&'a String<32>>, ssids: Vec<&'a String<32>>,
} }
#[derive(Serialize, Debug)]
struct VersionInfo<'a> {
git_hash: &'a str,
build_time: &'a str
}
pub fn httpd_initial(reboot_now: Arc<AtomicBool>) -> Box<EspHttpServer<'static>> { pub fn httpd_initial(reboot_now: Arc<AtomicBool>) -> Box<EspHttpServer<'static>> {
let mut server = shared(); let mut server = shared();
server server
@ -170,7 +176,14 @@ pub fn shared() -> Box<EspHttpServer<'static>> {
server server
.fn_handler("/version", Method::Get, |request| { .fn_handler("/version", Method::Get, |request| {
let mut response = request.into_ok_response()?; let mut response = request.into_ok_response()?;
response.write(env!("VERGEN_GIT_DESCRIBE").as_bytes())?; let git_hash = env!("VERGEN_GIT_DESCRIBE");
let build_time = env!("VERGEN_BUILD_TIMESTAMP");
let version_info = VersionInfo{
git_hash,
build_time,
};
let version_info_json = serde_json::to_string(&version_info)?;
response.write(version_info_json.as_bytes())?;
anyhow::Ok(()) anyhow::Ok(())
}) })
.unwrap(); .unwrap();

View File

@ -33,5 +33,23 @@ export function uploadFile() {
ajax.send(file); ajax.send(file);
} }
interface VersionInfo{
git_hash:string,
build_time: string
}
let file1Upload = document.getElementById("file1") as HTMLInputElement; let file1Upload = document.getElementById("file1") as HTMLInputElement;
file1Upload.onchange = uploadFile; file1Upload.onchange = uploadFile;
let firmware_buildtime = document.getElementById("firmware_buildtime") as HTMLDivElement;
let firmware_githash = document.getElementById("firmware_githash") as HTMLDivElement;
document.addEventListener('DOMContentLoaded', function() {
fetch("/version")
.then(response => response.json())
.then(json => json as VersionInfo)
.then(versionInfo => {
firmware_buildtime.innerText = versionInfo.build_time;
firmware_githash.innerText = versionInfo.git_hash;
})
}, false);