Pilot v2: Core implementation + battery telemetry
Major updates: - Complete Rust rewrite (pilot-v2/) with working MQTT client - Fixed MQTT event loop deadlock (background task pattern) - Battery telemetry for Linux (auto-detected via /sys/class/power_supply) - Home Assistant auto-discovery for all sensors and switches - Comprehensive documentation (AVANCEMENT.md, CLAUDE.md, roadmap) - Docker test environment with Mosquitto broker - Helper scripts for development and testing Features working: ✅ MQTT connectivity with LWT ✅ YAML configuration with validation ✅ Telemetry: CPU, memory, IP, battery (Linux) ✅ Commands: shutdown, reboot, sleep, screen (dry-run tested) ✅ HA discovery and integration ✅ Allowlist and cooldown protection Ready for testing on real hardware. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
0
pilot-v2/target/debug/.cargo-lock
Normal file
0
pilot-v2/target/debug/.cargo-lock
Normal file
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
d0c54af552649cc6
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":4758242423518056681,"features":"[\"perf-literal\", \"std\"]","declared_features":"[\"default\", \"logging\", \"perf-literal\", \"std\"]","target":7534583537114156500,"profile":2225463790103693989,"path":2697853566079511613,"deps":[[198136567835728122,"memchr",false,14442475621410761341]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/aho-corasick-f56eb701d1d265c8/dep-lib-aho_corasick","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
@@ -0,0 +1 @@
|
||||
5f4dfbc57583d453
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":4758242423518056681,"features":"","declared_features":"","target":0,"profile":0,"path":0,"deps":[[1852463361802237065,"build_script_build",false,2620827986237482161]],"local":[{"RerunIfChanged":{"output":"debug/build/anyhow-7dffd08ca73f1c01/output","paths":["src/nightly.rs"]}},{"RerunIfEnvChanged":{"var":"RUSTC_BOOTSTRAP","val":null}}],"rustflags":[],"config":0,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
71cddc83508d9fb9
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":4758242423518056681,"features":"[\"default\", \"std\"]","declared_features":"[\"backtrace\", \"default\", \"std\"]","target":16100955855663461252,"profile":2241668132362809309,"path":15748188269771136802,"deps":[[1852463361802237065,"build_script_build",false,6040597542066670943]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/anyhow-a8e29080dfa88f6a/dep-lib-anyhow","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
@@ -0,0 +1 @@
|
||||
b16416f12a0d5f24
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":4758242423518056681,"features":"[\"default\", \"std\"]","declared_features":"[\"backtrace\", \"default\", \"std\"]","target":17883862002600103897,"profile":2225463790103693989,"path":11298574807048988049,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/anyhow-f0f8ac34947eb6de/dep-build-script-build-script-build","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
58ae41729d808c2a
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":4758242423518056681,"features":"[\"default\", \"std\"]","declared_features":"[\"backtrace\", \"default\", \"std\"]","target":16100955855663461252,"profile":15657897354478470176,"path":15748188269771136802,"deps":[[1852463361802237065,"build_script_build",false,6040597542066670943]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/anyhow-f83b8d3e8e6fcc5b/dep-lib-anyhow","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
4483bcdbbe950895
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":4758242423518056681,"features":"[]","declared_features":"[]","target":14946317168266388427,"profile":15657897354478470176,"path":4414353296763948497,"deps":[[1464803193346256239,"event_listener",false,15480104919079411986],[7620660491849607393,"futures_core",false,14806556747044414787]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/async-broadcast-96cd5d92478f62ce/dep-lib-async_broadcast","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
ebf9ddc1043cc9b6
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":4758242423518056681,"features":"[]","declared_features":"[]","target":14946317168266388427,"profile":2241668132362809309,"path":4414353296763948497,"deps":[[1464803193346256239,"event_listener",false,6817172485043742015],[7620660491849607393,"futures_core",false,8459390063132964111]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/async-broadcast-ed4fb2f1bd311559/dep-lib-async_broadcast","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
e9346414c52f9df2
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":4758242423518056681,"features":"[\"default\", \"std\"]","declared_features":"[\"default\", \"portable-atomic\", \"std\"]","target":2348331682808714104,"profile":15657897354478470176,"path":11422452653132114092,"deps":[[1906322745568073236,"pin_project_lite",false,8991253654115275928],[7620660491849607393,"futures_core",false,14806556747044414787],[12100481297174703255,"concurrent_queue",false,16848644008424325506],[17148897597675491682,"event_listener_strategy",false,17280328617240379150]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/async-channel-86c3c96ca9a3e4c4/dep-lib-async_channel","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
dd86fdc7c107195d
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":4758242423518056681,"features":"[\"default\", \"std\"]","declared_features":"[\"default\", \"portable-atomic\", \"std\"]","target":2348331682808714104,"profile":2241668132362809309,"path":11422452653132114092,"deps":[[1906322745568073236,"pin_project_lite",false,3550369563450963358],[7620660491849607393,"futures_core",false,8459390063132964111],[12100481297174703255,"concurrent_queue",false,4102932450197136801],[17148897597675491682,"event_listener_strategy",false,5354340854549327226]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/async-channel-e91f434cc5bde120/dep-lib-async_channel","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
2c11f4d5bc76d548
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":4758242423518056681,"features":"[]","declared_features":"[\"static\"]","target":7483652822946339806,"profile":2241668132362809309,"path":3112205183626101043,"deps":[[867502981669738401,"async_task",false,16343854254514468088],[1906322745568073236,"pin_project_lite",false,3550369563450963358],[9090520973410485560,"futures_lite",false,11145987570875990860],[12100481297174703255,"concurrent_queue",false,4102932450197136801],[12285238697122577036,"fastrand",false,8347313827937685988],[14767213526276824509,"slab",false,10354343093452352864]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/async-executor-901f60802cc7cf0d/dep-lib-async_executor","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
6c5f9465a8f5c627
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":4758242423518056681,"features":"[]","declared_features":"[\"static\"]","target":7483652822946339806,"profile":15657897354478470176,"path":3112205183626101043,"deps":[[867502981669738401,"async_task",false,1082350877060955153],[1906322745568073236,"pin_project_lite",false,8991253654115275928],[9090520973410485560,"futures_lite",false,7501930813355833590],[12100481297174703255,"concurrent_queue",false,16848644008424325506],[12285238697122577036,"fastrand",false,16856789532386053895],[14767213526276824509,"slab",false,9338198606256010886]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/async-executor-f15b8cf4d2656fdf/dep-lib-async_executor","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
@@ -0,0 +1 @@
|
||||
e097dd7138b31ef5
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":4758242423518056681,"features":"[]","declared_features":"[]","target":17883862002600103897,"profile":2225463790103693989,"path":16311120052012549081,"deps":[[13927012481677012980,"autocfg",false,4491350997734096854]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/async-fs-0fc57937ef2ca20d/dep-build-script-build-script-build","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
73aaca22067421c5
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":4758242423518056681,"features":"[]","declared_features":"[]","target":13530298058224660176,"profile":2241668132362809309,"path":7810507604688103693,"deps":[[7208080732687383809,"async_lock",false,3120658934024652719],[9570980159325712564,"futures_lite",false,2801693992710442923],[11099682918945173275,"blocking",false,1558806162020186034],[17415156283097623665,"build_script_build",false,5620434700617653819]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/async-fs-226cd1aa13a861ef/dep-lib-async_fs","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
257328d007fa2ac5
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":4758242423518056681,"features":"[]","declared_features":"[]","target":13530298058224660176,"profile":15657897354478470176,"path":7810507604688103693,"deps":[[7208080732687383809,"async_lock",false,9875250485109216967],[9570980159325712564,"futures_lite",false,12762884056246454962],[11099682918945173275,"blocking",false,8648931100631883446],[17415156283097623665,"build_script_build",false,5620434700617653819]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/async-fs-3ea0bd7facca6ae4/dep-lib-async_fs","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
@@ -0,0 +1 @@
|
||||
3b1e98f594cbff4d
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":4758242423518056681,"features":"","declared_features":"","target":0,"profile":0,"path":0,"deps":[[17415156283097623665,"build_script_build",false,17662751843603552224]],"local":[{"Precalculated":"1.6.0"}],"rustflags":[],"config":0,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
c1e6c7b1680a3102
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":4758242423518056681,"features":"[]","declared_features":"[]","target":13601420042805913294,"profile":2241668132362809309,"path":15080696096402417374,"deps":[[189982446159473706,"parking",false,4296536885862228987],[1211321333142909612,"socket2",false,15328149775485923740],[6246679968272628950,"rustix",false,4306342092927746802],[7208080732687383809,"async_lock",false,3120658934024652719],[7667230146095136825,"cfg_if",false,2379222946250249096],[8864093321401338808,"waker_fn",false,6754656470642932160],[9570980159325712564,"futures_lite",false,2801693992710442923],[10166384453965283024,"polling",false,16092961559541005391],[10630857666389190470,"log",false,5080065308326131370],[12100481297174703255,"concurrent_queue",false,4102932450197136801],[12914622799526586510,"build_script_build",false,11966104318495890957],[14767213526276824509,"slab",false,10354343093452352864]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/async-io-5b17f2e9cedef537/dep-lib-async_io","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
@@ -0,0 +1 @@
|
||||
0d1e37817a2410a6
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":4758242423518056681,"features":"","declared_features":"","target":0,"profile":0,"path":0,"deps":[[12914622799526586510,"build_script_build",false,6751964766134238648]],"local":[{"Precalculated":"1.13.0"}],"rustflags":[],"config":0,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
0237cc00cdb079f0
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":4758242423518056681,"features":"[]","declared_features":"[]","target":13601420042805913294,"profile":15657897354478470176,"path":15080696096402417374,"deps":[[189982446159473706,"parking",false,12450303803023399652],[1211321333142909612,"socket2",false,3755417887275652736],[6246679968272628950,"rustix",false,18147481592832568662],[7208080732687383809,"async_lock",false,9875250485109216967],[7667230146095136825,"cfg_if",false,4127000677558031520],[8864093321401338808,"waker_fn",false,7128209248171288251],[9570980159325712564,"futures_lite",false,12762884056246454962],[10166384453965283024,"polling",false,9970362139234296328],[10630857666389190470,"log",false,12461827721875662956],[12100481297174703255,"concurrent_queue",false,16848644008424325506],[12914622799526586510,"build_script_build",false,11966104318495890957],[14767213526276824509,"slab",false,9338198606256010886]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/async-io-c29a4c449a4f1a74/dep-lib-async_io","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
@@ -0,0 +1 @@
|
||||
b87d626d2eccb35d
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":4758242423518056681,"features":"[]","declared_features":"[]","target":17883862002600103897,"profile":2225463790103693989,"path":10704244322782859744,"deps":[[13927012481677012980,"autocfg",false,4491350997734096854]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/async-io-efada4b51bbaa2f4/dep-build-script-build-script-build","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
c756f0b0feef0b89
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":4758242423518056681,"features":"[]","declared_features":"[]","target":4213861256432978679,"profile":15657897354478470176,"path":2858335931736234219,"deps":[[1464803193346256239,"event_listener",false,15480104919079411986]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/async-lock-4d7615b53c137535/dep-lib-async_lock","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
af47b03bc4ce4e2b
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":4758242423518056681,"features":"[]","declared_features":"[]","target":4213861256432978679,"profile":2241668132362809309,"path":2858335931736234219,"deps":[[1464803193346256239,"event_listener",false,6817172485043742015]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/async-lock-b68da8ab013ff246/dep-lib-async_lock","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
138119a117138926
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":4758242423518056681,"features":"[]","declared_features":"[]","target":5344269587553143856,"profile":2225463790103693989,"path":3849974461994376029,"deps":[[5566979019427230758,"proc_macro2",false,13835395518546435096],[7988640081342112296,"syn",false,8400351172994901857],[9869581871423326951,"quote",false,11943980234332031491]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/async-recursion-b57f76abda3b94ad/dep-lib-async_recursion","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
f87417ddd908d1e2
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":4758242423518056681,"features":"[\"default\", \"std\"]","declared_features":"[\"default\", \"portable-atomic\", \"std\"]","target":9397226730057430065,"profile":2241668132362809309,"path":9829126098621136191,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/async-task-28220744cec68f4b/dep-lib-async_task","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
11fc8c5d6348050f
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":4758242423518056681,"features":"[\"default\", \"std\"]","declared_features":"[\"default\", \"portable-atomic\", \"std\"]","target":9397226730057430065,"profile":15657897354478470176,"path":9829126098621136191,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/async-task-6f7ecf96ff8f5c7d/dep-lib-async_task","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
701d5fffc2e98840
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":4758242423518056681,"features":"[]","declared_features":"[]","target":5116616278641129243,"profile":2225463790103693989,"path":13929270559738456162,"deps":[[5566979019427230758,"proc_macro2",false,13835395518546435096],[7988640081342112296,"syn",false,8400351172994901857],[9869581871423326951,"quote",false,11943980234332031491]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/async-trait-e7e842722d3c8921/dep-lib-async_trait","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
c44f67f1132517a8
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":4758242423518056681,"features":"[]","declared_features":"[\"portable-atomic\"]","target":14411119108718288063,"profile":2241668132362809309,"path":16769721439513428360,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/atomic-waker-5d2db5f7d9229e4e/dep-lib-atomic_waker","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user