Files
pilot/pilot-v2/target/doc/search.index/path/e12668e2c88d.js
Gilles Soulier c5381b7112 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>
2025-12-30 06:23:00 +01:00

1 line
9.3 KiB
JavaScript

rd_("f[1,\"\"]00Ah[2,\"rumqttc::mqttbytes\"]m[2,\"rumqttc\"]Al[2,\"rumqttc::v5::mqttbytes\"]A`[10,\"core::any\"]Ao[5,\"sysinfo\",\"sysinfo::common\"]0A`[10,\"core::cmp\"]1Ce[6,\"rumqttc::v5::mqttbytes\",\"rumqttc::v5::mqttbytes\"]Bm[6,\"rumqttc::mqttbytes\",\"rumqttc::mqttbytes\"]3Am[5,\"alloc::vec\",\"alloc::vec\"]99f[0,\"\"]::::5Ad[10,\"core::convert\"]Aa[10,\"core::hash\"]1g[17,\"\"]Bk[5,\"core::slice::iter\",\"core::slice::iter\"]Ao[5,\"rumqttc\",\"rumqttc::client\"]Bg[5,\"rumqttc::v5\",\"rumqttc::v5::client\"]Ak[5,\"std::path\",\"std::path\"]<f[1,\"\"]B`[2,\"rumqttc::v5::mqttbytes::v5\"]Al[2,\"rumqttc::mqttbytes::v4\"]2Ba[5,\"bytes::bytes\",\"bytes::bytes\"]Ab[10,\"core::clone\"]A`[10,\"core::fmt\"]Ag[10,\"core::ops::deref\"]Ao[5,\"sysinfo\",\"sysinfo::common\"]Ab[10,\"core::error\"]Be[5,\"std::io::error\",\"std::io::error\"]Al[2,\"rumqttc::v5::mqttbytes\"]Bc[6,\"rustls::error\",\"rustls::error\"]Bc[6,\"webpki::error\",\"webpki::error\"]Ce[6,\"rumqttc::v5::mqttbytes\",\"rumqttc::v5::mqttbytes\"]Bm[6,\"rumqttc::mqttbytes\",\"rumqttc::mqttbytes\"]Bb[6,\"rumqttc\",\"rumqttc::eventloop\"]Bj[6,\"rumqttc::v5\",\"rumqttc::v5::eventloop\"]9Df[5,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::connect\"]Cn[5,\"rumqttc::mqttbytes::v4\",\"rumqttc::mqttbytes::v4::connect\"]Bi[5,\"std::ffi::os_str\",\"std::ffi::os_str\"]<f[1,\"\"]Ac[2,\"sysinfo::unix\"]1m[2,\"rumqttc\"]Aa[2,\"rumqttc::v5\"]Ah[2,\"rumqttc::mqttbytes\"]44Ac[10,\"core::borrow\"]Ao[5,\"rumqttc\",\"rumqttc::client\"]Bg[5,\"rumqttc::v5\",\"rumqttc::v5::client\"]Dh[5,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::subscribe\"]Ao[5,\"sysinfo\",\"sysinfo::common\"]An[10,\"core::hash\",\"core::hash\"]Ba[6,\"core::option\",\"core::option\"]Cm[6,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5\"]Ce[6,\"rumqttc::mqttbytes::v4\",\"rumqttc::mqttbytes::v4\"]De[5,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::puback\"]Cm[5,\"rumqttc::mqttbytes::v4\",\"rumqttc::mqttbytes::v4::puback\"]De[5,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::pubrec\"]Cm[5,\"rumqttc::mqttbytes::v4\",\"rumqttc::mqttbytes::v4::pubrec\"]De[5,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::pubrel\"]Cm[5,\"rumqttc::mqttbytes::v4\",\"rumqttc::mqttbytes::v4::pubrel\"]Ak[8,\"core::fmt\",\"core::fmt\"]Ba[6,\"core::result\",\"core::result\"]Ac[5,\"flume\",\"flume\"]Ao[6,\"sysinfo\",\"sysinfo::common\"]B`[15,\"rumqttc::TlsConfiguration\"]Bc[5,\"alloc::string\",\"alloc::string\"]De[5,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::suback\"]Cm[5,\"rumqttc::mqttbytes::v4\",\"rumqttc::mqttbytes::v4::suback\"]Ao[5,\"sysinfo\",\"sysinfo::common\"]Ak[5,\"core::any\",\"core::any\"]m[2,\"rumqttc\"]Aa[2,\"rumqttc::v5\"]m[2,\"sysinfo\"]B`[2,\"rumqttc::v5::mqttbytes::v5\"]Al[2,\"rumqttc::mqttbytes::v4\"]101010Df[5,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::connack\"]Cn[5,\"rumqttc::mqttbytes::v4\",\"rumqttc::mqttbytes::v4::connack\"]Df[5,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::connect\"]Cn[5,\"rumqttc::mqttbytes::v4\",\"rumqttc::mqttbytes::v4::connect\"]Ad[10,\"core::default\"]A`[10,\"core::fmt\"]Bm[5,\"tokio::time::error\",\"tokio::time::error\"]Ah[10,\"core::str::traits\"]Co[5,\"std::collections::hash::map\",\"std::collections::hash::map\"]Co[5,\"std::collections::hash::set\",\"std::collections::hash::set\"]Ao[5,\"sysinfo\",\"sysinfo::common\"]0Dc[5,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::ping\"]Ck[5,\"rumqttc::mqttbytes::v4\",\"rumqttc::mqttbytes::v4::ping\"]2Df[5,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::pubcomp\"]Cn[5,\"rumqttc::mqttbytes::v4\",\"rumqttc::mqttbytes::v4::pubcomp\"]Df[5,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::publish\"]Cn[5,\"rumqttc::mqttbytes::v4\",\"rumqttc::mqttbytes::v4::publish\"]Ag[6,\"rumqttc\",\"rumqttc\"]Ao[6,\"rumqttc::v5\",\"rumqttc::v5\"]An[15,\"rumqttc::v5::StateError\"]Ad[10,\"alloc::borrow\"]Ad[10,\"core::convert\"]0B`[2,\"rumqttc::v5::mqttbytes::v5\"]Al[2,\"rumqttc::mqttbytes::v4\"]10f[1,\"\"]2121f[3,\"\"]0Bi[5,\"bytes::bytes_mut\",\"bytes::bytes_mut\"]7Ag[10,\"core::ops::deref\"]Ao[6,\"sysinfo\",\"sysinfo::common\"]Am[5,\"core::time\",\"core::time\"]Ag[8,\"rumqttc\",\"rumqttc\"]Ao[8,\"rumqttc::v5\",\"rumqttc::v5\"]Bc[10,\"core::iter::traits::iterator\"]Df[5,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::connect\"]Cn[5,\"rumqttc::mqttbytes::v4\",\"rumqttc::mqttbytes::v4::connect\"]Ao[5,\"sysinfo\",\"sysinfo::common\"]Ak[6,\"core::cmp\",\"core::cmp\"]Ag[6,\"rumqttc\",\"rumqttc\"]Dc[5,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::ping\"]Ck[5,\"rumqttc::mqttbytes::v4\",\"rumqttc::mqttbytes::v4::ping\"]Bm[6,\"rumqttc::mqttbytes\",\"rumqttc::mqttbytes\"]m[6,\"rumqttc\"]Ad[10,\"alloc::string\"]Dg[5,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::unsuback\"]Co[5,\"rumqttc::mqttbytes::v4\",\"rumqttc::mqttbytes::v4::unsuback\"]Dc[5,\"alloc::collections::vec_deque\",\"alloc::collections::vec_deque\"]B`[2,\"rumqttc::v5::mqttbytes::v5\"]Al[2,\"rumqttc::mqttbytes::v4\"]Ac[10,\"core::borrow\"]==Bb[5,\"rumqttc\",\"rumqttc::eventloop\"]Bj[5,\"rumqttc::v5\",\"rumqttc::v5::eventloop\"]Ak[5,\"core::fmt\",\"core::fmt\"]An[5,\"rumqttc\",\"rumqttc::state\"]Bf[5,\"rumqttc::v5\",\"rumqttc::v5::state\"]A`[10,\"core::cmp\"]An[10,\"crossbeam_epoch::atomic\"]Ao[5,\"rumqttc\",\"rumqttc::client\"]Ac[5,\"flume\",\"flume\"]Dh[5,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::subscribe\"]D`[5,\"rumqttc::mqttbytes::v4\",\"rumqttc::mqttbytes::v4::subscribe\"]Ag[6,\"rumqttc\",\"rumqttc\"]An[15,\"rumqttc::v5::StateError\"]Bi[5,\"core::str::error\",\"core::str::error\"]m[2,\"rumqttc\"]Aa[2,\"rumqttc::v5\"]10f[1,\"\"]B`[2,\"rumqttc::v5::mqttbytes::v5\"]Al[2,\"rumqttc::mqttbytes::v4\"]Ao[5,\"sysinfo\",\"sysinfo::common\"]<Bg[5,\"rumqttc::v5\",\"rumqttc::v5::client\"]Di[5,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::disconnect\"]Da[5,\"rumqttc::mqttbytes::v4\",\"rumqttc::mqttbytes::v4::disconnect\"]Cm[6,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5\"]Bm[6,\"rumqttc::mqttbytes\",\"rumqttc::mqttbytes\"]A`[10,\"core::cmp\"]===;:An[6,\"rumqttc\",\"rumqttc::state\"]Bf[6,\"rumqttc::v5\",\"rumqttc::v5::state\"]Ao[6,\"sysinfo\",\"sysinfo::common\"]0;:Ao[5,\"rumqttc\",\"rumqttc::client\"]9Ao[6,\"rumqttc\",\"rumqttc::client\"]Bg[6,\"rumqttc::v5\",\"rumqttc::v5::client\"]Cm[5,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5\"]Bm[5,\"rumqttc::mqttbytes\",\"rumqttc::mqttbytes\"]Ag[5,\"rumqttc\",\"rumqttc\"]Ao[5,\"rumqttc::v5\",\"rumqttc::v5\"]Ao[5,\"sysinfo\",\"sysinfo::common\"]An[15,\"rumqttc::v5::StateError\"]1Dj[5,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::unsubscribe\"]Db[5,\"rumqttc::mqttbytes::v4\",\"rumqttc::mqttbytes::v4::unsubscribe\"]B`[2,\"rumqttc::v5::mqttbytes::v5\"]Al[2,\"rumqttc::mqttbytes::v4\"]5Co[5,\"rustls::client::client_conn\",\"rustls::client::client_conn\"]Bb[10,\"core::iter::traits::collect\"]6De[6,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::puback\"]De[6,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::pubrec\"]De[6,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::pubrel\"]Ao[6,\"rumqttc\",\"rumqttc::client\"]Ac[6,\"flume\",\"flume\"]Ab[10,\"core::clone\"]Ao[6,\"sysinfo\",\"sysinfo::common\"]Df[6,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::pubcomp\"]Bk[5,\"core::net::parser\",\"core::net::parser\"]Ao[5,\"sysinfo\",\"sysinfo::common\"]Ag[5,\"rumqttc\",\"rumqttc\"]Dg[6,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::unsuback\"]Bb[6,\"rumqttc\",\"rumqttc::eventloop\"]Bj[6,\"rumqttc::v5\",\"rumqttc::v5::eventloop\"]D`[5,\"rumqttc::mqttbytes::v4\",\"rumqttc::mqttbytes::v4::subscribe\"]Bi[5,\"core::num::error\",\"core::num::error\"]De[5,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::puback\"]De[5,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::pubrec\"]De[5,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::pubrel\"]?An[15,\"rumqttc::v5::StateError\"]De[5,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::suback\"]m[2,\"rumqttc\"]Ag[6,\"rumqttc\",\"rumqttc\"]Df[5,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::connack\"]Df[5,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::connect\"]Df[6,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::connack\"]Cn[6,\"rumqttc::mqttbytes::v4\",\"rumqttc::mqttbytes::v4::connack\"]Ao[5,\"sysinfo\",\"sysinfo::common\"]Df[5,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::pubcomp\"]Df[5,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::publish\"]Dh[6,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::subscribe\"]D`[6,\"rumqttc::mqttbytes::v4\",\"rumqttc::mqttbytes::v4::subscribe\"]74Dg[5,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::unsuback\"]Dc[5,\"rustls_pki_types::server_name\",\"rustls_pki_types::server_name\"]Dh[5,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::subscribe\"]De[6,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::suback\"]Cm[6,\"rumqttc::mqttbytes::v4\",\"rumqttc::mqttbytes::v4::suback\"]Di[6,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::disconnect\"]Dj[5,\"rumqttc::v5::mqttbytes::v5\",\"rumqttc::v5::mqttbytes::v5::unsubscribe\"]An[15,\"rumqttc::v5::StateError\"]0Aj[15,\"rumqttc::StateError\"]Bd[15,\"rumqttc::v5::mqttbytes::Error\"]")