From a750a67d17de2aa89757971d80261a20b3fd7c4c Mon Sep 17 00:00:00 2001 From: lilly Date: Wed, 22 Jul 2026 19:47:36 +0200 Subject: [PATCH 1/3] add show-locks to usage string --- ssh-cli/src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ssh-cli/src/main.rs b/ssh-cli/src/main.rs index 2c044ef..5257b49 100644 --- a/ssh-cli/src/main.rs +++ b/ssh-cli/src/main.rs @@ -36,7 +36,7 @@ async fn main() -> eyre::Result<()> { "dooris-over-ssh: Your personal door assistant with an extra serving of chaos" ); println!( - "Usage: ssh dooris@dooris.ccchh.net help | lock [wait|nowait] | unlock [wait|nowait]" + "Usage: ssh dooris@dooris.ccchh.net [wait|nowait] | unlock [wait|nowait]>" ); println!(); println!("Commands:"); From d0a865e85ac53135c587ffed67cd7a7659ab49b4 Mon Sep 17 00:00:00 2001 From: lilly Date: Thu, 23 Jul 2026 14:13:30 +0200 Subject: [PATCH 2/3] correct open/close wording which was incosistent --- ssh-cli/src/main.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ssh-cli/src/main.rs b/ssh-cli/src/main.rs index 5257b49..b0b2904 100644 --- a/ssh-cli/src/main.rs +++ b/ssh-cli/src/main.rs @@ -52,7 +52,7 @@ async fn main() -> eyre::Result<()> { " Also takes an additional parameter of \"wait\" or \"nowait\"which dictates" ); println!(" whether the CLI exit as soon as the lock operation is queued or whether"); - println!(" it waits until the lock status changes to open."); + println!(" it waits until the lock status changes to closed."); println!(" Defaults to \"wait\" if not specified."); println!(); println!(" unlock [wait|nowait] -> Unlocks the lock identified with ."); @@ -60,7 +60,7 @@ async fn main() -> eyre::Result<()> { " Also takes an additional parameter of \"wait\" or \"nowait\"which dictates" ); println!(" whether the CLI exit as soon as the lock operation is queued or whether"); - println!(" it waits until the lock status changes to closed."); + println!(" it waits until the lock status changes to open."); println!(" Defaults to \"wait\" if not specified."); exit(0); } @@ -90,7 +90,7 @@ async fn main() -> eyre::Result<()> { let api = ApiClient::new_from_env()?; let lock = find_lock(&api, &lock_name).await?; - println!("dooris at your service, locking {} now…", lock.name); + println!("dooris at your service, unlocking {} now…", lock.name); api.operate_lock(&lock.id, DesiredLockState::OPEN).await?; if wait_until_done { From 5850cff5367b0a46f2098aabddf8d51895aba524 Mon Sep 17 00:00:00 2001 From: lilly Date: Thu, 23 Jul 2026 14:19:29 +0200 Subject: [PATCH 3/3] display lock warnings on every operation not just show-locks --- ssh-cli/src/api_models.rs | 3 +-- ssh-cli/src/main.rs | 42 ++++++++++++++++++++++++++++++--------- 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/ssh-cli/src/api_models.rs b/ssh-cli/src/api_models.rs index 95c2a70..2f90b7a 100644 --- a/ssh-cli/src/api_models.rs +++ b/ssh-cli/src/api_models.rs @@ -12,8 +12,7 @@ pub struct ApiLock { #[derive(Debug, Eq, PartialEq, Hash, Deserialize)] pub struct ApiLockStatus { pub is_unreachable: bool, - #[serde(default)] - pub is_low_batteray: bool, + pub is_low_battery: bool, pub is_error_jammed: bool, pub lock_target_level: LockTargetLevel, pub lock_state: LockState, diff --git a/ssh-cli/src/main.rs b/ssh-cli/src/main.rs index b0b2904..0f891cb 100644 --- a/ssh-cli/src/main.rs +++ b/ssh-cli/src/main.rs @@ -72,6 +72,7 @@ async fn main() -> eyre::Result<()> { let lock = find_lock(&api, &lock_name).await?; println!("dooris at your service, locking {} now…", lock.name); + print_lock_warnings(&lock); api.operate_lock(&lock.id, DesiredLockState::CLOSED).await?; if wait_until_done { @@ -91,6 +92,7 @@ async fn main() -> eyre::Result<()> { let lock = find_lock(&api, &lock_name).await?; println!("dooris at your service, unlocking {} now…", lock.name); + print_lock_warnings(&lock); api.operate_lock(&lock.id, DesiredLockState::OPEN).await?; if wait_until_done { @@ -108,15 +110,7 @@ async fn main() -> eyre::Result<()> { for i_lock in locks.iter() { println!(">> {}", i_lock.name); - if i_lock.status.is_unreachable { - println!(" !!! Lock is currently unreachable !!!"); - } - if i_lock.status.is_low_batteray { - println!(" !!! Lock has low battery !!!"); - } - if i_lock.status.is_error_jammed { - println!(" !!! Lock is jammed !!!"); - } + print_lock_warnings(&lock); println!(" State: {:?}", i_lock.status.lock_state); println!(" Desired State: {:?}", i_lock.status.lock_target_level); println!(" Acitivty: {:?}", i_lock.status.activity_state); @@ -164,3 +158,33 @@ async fn wait_for_lock_state( Ok(()) } + +/// Display big warnings if the lock is in an error state like jammed/disconnected/low battery +fn print_lock_warnings(lock: &ApiLock) { + let has_any_error = + lock.status.is_unreachable || lock.status.is_low_battery || lock.status.is_error_jammed; + + if has_any_error { + println!(" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!") + } + + if lock.status.is_unreachable { + println!(" !!! !!!"); + println!(" !!! Lock is currently unreachable !!!"); + println!(" !!! !!!"); + } + if lock.status.is_low_battery { + println!(" !!! !!!"); + println!(" !!! Lock has low battery !!!"); + println!(" !!! !!!"); + } + if lock.status.is_error_jammed { + println!(" !!! !!!"); + println!(" !!! Lock is jammed !!!"); + println!(" !!! !!!"); + } + + if has_any_error { + println!(" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!") + } +}