summaryrefslogtreecommitdiff
path: root/src/bin
diff options
context:
space:
mode:
authorLibravatar Silas Bartha <silas@exvacuum.dev>2024-12-25 00:24:16 -0500
committerLibravatar Silas Bartha <silas@exvacuum.dev>2024-12-25 00:24:16 -0500
commit2accad049d07ee9dbb844093396968f68d406204 (patch)
tree4fc9877bcbd321de1ece87f9b7285c0abc8e363b /src/bin
Initial CommitHEADmaster
Diffstat (limited to 'src/bin')
-rw-r--r--src/bin/piss-level/main.rs13
-rw-r--r--src/bin/pissd/main.rs82
2 files changed, 95 insertions, 0 deletions
diff --git a/src/bin/piss-level/main.rs b/src/bin/piss-level/main.rs
new file mode 100644
index 0000000..613407a
--- /dev/null
+++ b/src/bin/piss-level/main.rs
@@ -0,0 +1,13 @@
+use std::error::Error;
+
+use zbus::Connection;
+
+#[tokio::main]
+async fn main() -> Result<(), Box<dyn Error>>{
+ let connection = Connection::session().await?;
+
+ let m = connection.call_method(Some("dev.exvacuum.pissd"), "/dev/exvacuum/pissd", Some("dev.exvacuum.pissd"),"GetPissPercentage", &()).await?;
+ let reply = m.body().deserialize::<f32>().unwrap();
+ println!("{}", reply);
+ Ok(())
+}
diff --git a/src/bin/pissd/main.rs b/src/bin/pissd/main.rs
new file mode 100644
index 0000000..9f579b7
--- /dev/null
+++ b/src/bin/pissd/main.rs
@@ -0,0 +1,82 @@
+use std::{
+ error::Error,
+ sync::{atomic::Ordering, Arc},
+};
+
+use atomic_float::AtomicF32;
+use lazy_static::lazy_static;
+use lightstreamer_client::{
+ ls_client::{LightstreamerClient, LogType, Transport},
+ subscription::{Snapshot, Subscription, SubscriptionMode},
+ subscription_listener::SubscriptionListener,
+};
+use tokio::sync::Notify;
+use tracing::info;
+use zbus::interface;
+
+lazy_static! {
+ static ref PISS_PERCENTAGE: AtomicF32 = AtomicF32::new(0.0);
+}
+
+#[derive(Debug)]
+struct PissSubscriberListener;
+
+impl SubscriptionListener for PissSubscriberListener {
+ fn on_item_update(&self, update: &lightstreamer_client::item_update::ItemUpdate) {
+ if let Some(value) = update.get_value("Value") {
+ info!("Piss tank at {value}%");
+ PISS_PERCENTAGE.store(value.parse::<f32>().unwrap(), Ordering::Relaxed);
+ }
+ }
+}
+
+struct PissdInterface;
+
+#[interface(name = "dev.exvacuum.pissd")]
+impl PissdInterface {
+ fn get_piss_percentage(&self) -> f32 {
+ PISS_PERCENTAGE.load(Ordering::Relaxed)
+ }
+}
+
+#[tokio::main]
+async fn main() -> Result<(), Box<dyn Error>> {
+ tracing_subscriber::fmt::init();
+ let mut ls = match LightstreamerClient::new(
+ Some("http://push.lightstreamer.com/lightstreamer"),
+ Some("ISSLIVE"),
+ None,
+ None,
+ ) {
+ Ok(ls) => ls,
+ Err(e) => panic!("Could not establish ISS telemetry connection: {e:?}"),
+ };
+ ls.set_logging_type(LogType::TracingLogs);
+ ls.connection_options.set_slowing_enabled(false);
+ ls.connection_options
+ .set_forced_transport(Some(Transport::WsStreaming));
+
+ let mut subscription = Subscription::new(
+ SubscriptionMode::Merge,
+ Some(vec!["NODE3000005".into()]),
+ Some(vec!["TimeStamp".into(), "Value".into()]),
+ )
+ .unwrap();
+ subscription
+ .set_requested_snapshot(Some(Snapshot::Yes))
+ .unwrap();
+ subscription.add_listener(Box::new(PissSubscriberListener));
+
+ let shutdown = Arc::new(Notify::new());
+ ls.subscribe(subscription);
+
+ let pissd_interface = PissdInterface;
+ let connection = zbus::connection::Builder::session()?
+ .name("dev.exvacuum.pissd")?
+ .serve_at("/dev/exvacuum/pissd", pissd_interface)?
+ .build()
+ .await?;
+
+ ls.connect(shutdown.clone()).await?;
+ Ok(())
+}