mirror of
https://codeberg.org/icewind/taspromto.git
synced 2026-08-02 12:14:45 +02:00
handle dmsr mqtt messages
This commit is contained in:
parent
a5bb4b1d80
commit
217298c1c7
6 changed files with 202 additions and 12 deletions
68
src/topic.rs
68
src/topic.rs
|
|
@ -1,4 +1,4 @@
|
|||
use crate::device::Device;
|
||||
use crate::device::{Device, DsmrMessageType};
|
||||
|
||||
#[derive(Debug, Eq, PartialEq)]
|
||||
pub enum Topic {
|
||||
|
|
@ -10,6 +10,42 @@ pub enum Topic {
|
|||
Other(String),
|
||||
Status(Device),
|
||||
Msg(Device),
|
||||
Water(Device),
|
||||
Gas(Device),
|
||||
Energy1(Device),
|
||||
Energy2(Device),
|
||||
DsmrPower(Device),
|
||||
}
|
||||
|
||||
impl Topic {
|
||||
pub fn dsmr_type(&self) -> Option<DsmrMessageType> {
|
||||
match self {
|
||||
Topic::Water(_) => Some(DsmrMessageType::Water),
|
||||
Topic::Gas(_) => Some(DsmrMessageType::Gas),
|
||||
Topic::Energy1(_) => Some(DsmrMessageType::Energy1),
|
||||
Topic::Energy2(_) => Some(DsmrMessageType::Energy2),
|
||||
Topic::DsmrPower(_) => Some(DsmrMessageType::Power),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn into_device(self) -> Device {
|
||||
match self {
|
||||
Topic::Lwt(device) => device,
|
||||
Topic::Power(device) => device,
|
||||
Topic::State(device) => device,
|
||||
Topic::Sensor(device) => device,
|
||||
Topic::Result(device) => device,
|
||||
Topic::Other(device) => Device { hostname: device },
|
||||
Topic::Status(device) => device,
|
||||
Topic::Msg(device) => device,
|
||||
Topic::Water(device) => device,
|
||||
Topic::Gas(device) => device,
|
||||
Topic::Energy1(device) => device,
|
||||
Topic::Energy2(device) => device,
|
||||
Topic::DsmrPower(device) => device,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<&str> for Topic {
|
||||
|
|
@ -20,6 +56,36 @@ impl From<&str> for Topic {
|
|||
};
|
||||
return Topic::Msg(device);
|
||||
}
|
||||
if let Some(name) = raw.strip_suffix("/water") {
|
||||
let device = Device {
|
||||
hostname: name.to_string(),
|
||||
};
|
||||
return Topic::Water(device);
|
||||
}
|
||||
if let Some(name) = raw.strip_suffix("/gas_delivered") {
|
||||
let device = Device {
|
||||
hostname: name.to_string(),
|
||||
};
|
||||
return Topic::Gas(device);
|
||||
}
|
||||
if let Some(name) = raw.strip_suffix("/energy_delivered_tariff1") {
|
||||
let device = Device {
|
||||
hostname: name.to_string(),
|
||||
};
|
||||
return Topic::Energy1(device);
|
||||
}
|
||||
if let Some(name) = raw.strip_suffix("/energy_delivered_tariff2") {
|
||||
let device = Device {
|
||||
hostname: name.to_string(),
|
||||
};
|
||||
return Topic::Energy2(device);
|
||||
}
|
||||
if let Some(name) = raw.strip_suffix("/power_delivered_l1") {
|
||||
let device = Device {
|
||||
hostname: name.to_string(),
|
||||
};
|
||||
return Topic::DsmrPower(device);
|
||||
}
|
||||
|
||||
let mut parts = raw.split('/');
|
||||
if let (Some(prefix), Some(hostname), Some(cmd)) =
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue