|
@@ -1,5 +1,5 @@
|
|
|
use crate::cmd::config::app_config;
|
|
|
-use crate::ems::bms::bms::Bms;
|
|
|
+use crate::ems::bms::gold_bms::GoldBms;
|
|
|
use crate::ems::emu::device::{DevType, Device};
|
|
|
use crate::ems::emu::BroadcastMessage;
|
|
|
use crate::ems::pcs::pcs::Pcs;
|
|
@@ -11,6 +11,7 @@ use regex::Regex;
|
|
|
use std::collections::HashMap;
|
|
|
use std::sync::Arc;
|
|
|
use tokio::sync::broadcast;
|
|
|
+use tokio::task::JoinHandle;
|
|
|
use tokio::{join, sync};
|
|
|
|
|
|
/// EMU 能量管理处理单元
|
|
@@ -37,7 +38,7 @@ impl Emu {
|
|
|
|
|
|
//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 创建BMS
|
|
|
let (bms_tx, bms_rx) = sync::mpsc::channel::<String>(8);
|
|
|
- let bms = Bms::new(bms_tx, tx.subscribe());
|
|
|
+ let bms = GoldBms::new(bms_tx, tx.subscribe());
|
|
|
//↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
|
|
|
let (pcs, bms) = join!(pcs, bms);
|
|
|
|
|
@@ -48,12 +49,12 @@ impl Emu {
|
|
|
);
|
|
|
}
|
|
|
|
|
|
- if let Ok(p) = pcs {
|
|
|
- devices.insert(
|
|
|
- DevType::PCS,
|
|
|
- Device::new(p.id.clone(), "PCS", Arc::new(p), pcs_rx),
|
|
|
- );
|
|
|
- }
|
|
|
+ // if let Ok(p) = pcs {
|
|
|
+ // devices.insert(
|
|
|
+ // DevType::PCS,
|
|
|
+ // Device::new(p.id.clone(), "PCS", Arc::new(p), pcs_rx),
|
|
|
+ // );
|
|
|
+ // }
|
|
|
}
|
|
|
info!("EMU初始化完成");
|
|
|
Emu {
|
|
@@ -64,15 +65,16 @@ impl Emu {
|
|
|
|
|
|
pub async fn run(self: Arc<Self>) {
|
|
|
let mut handles = Vec::new();
|
|
|
+ match self.mqtt().await {
|
|
|
+ Ok(h) => handles.push(h),
|
|
|
+ Err(e) => error!("MQTT 启动失败: {}", e),
|
|
|
+ }
|
|
|
for dev in self.devices.values() {
|
|
|
let device_clone = Arc::clone(dev);
|
|
|
handles.push(tokio::spawn(async move {
|
|
|
device_clone.start().await;
|
|
|
}))
|
|
|
}
|
|
|
- if let Err(e) = self.mqtt().await {
|
|
|
- error!("MQTT 启动失败: {}", e);
|
|
|
- }
|
|
|
// let x = &self.devices;
|
|
|
// let a = x.get(&"pcs".to_string()).unwrap().clone();
|
|
|
// tokio::spawn(async move {
|
|
@@ -106,7 +108,7 @@ impl Emu {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- async fn mqtt(&self) -> anyhow::Result<()> {
|
|
|
+ async fn mqtt(&self) -> anyhow::Result<JoinHandle<()>> {
|
|
|
//mqtt Client
|
|
|
let client = &mqtt_client().await?.mosq;
|
|
|
let subscriptions = client.subscriber().unwrap();
|
|
@@ -118,7 +120,7 @@ impl Emu {
|
|
|
let sender = self.tx.clone();
|
|
|
let devices = Arc::clone(&self.devices);
|
|
|
//异步处理mqtt推送的消息
|
|
|
- tokio::spawn(async move {
|
|
|
+ Ok(tokio::spawn(async move {
|
|
|
loop {
|
|
|
if let Ok(message) = subscriptions.recv().await {
|
|
|
match message {
|
|
@@ -136,8 +138,7 @@ impl Emu {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- });
|
|
|
- Ok(())
|
|
|
+ }))
|
|
|
}
|
|
|
}
|
|
|
|