summaryrefslogtreecommitdiffstats
path: root/crates/core/tedge_mapper/src
diff options
context:
space:
mode:
Diffstat (limited to 'crates/core/tedge_mapper/src')
-rw-r--r--crates/core/tedge_mapper/src/c8y/converter.rs27
-rw-r--r--crates/core/tedge_mapper/src/c8y/tests.rs2
2 files changed, 16 insertions, 13 deletions
diff --git a/crates/core/tedge_mapper/src/c8y/converter.rs b/crates/core/tedge_mapper/src/c8y/converter.rs
index 12f3ec3c..03123697 100644
--- a/crates/core/tedge_mapper/src/c8y/converter.rs
+++ b/crates/core/tedge_mapper/src/c8y/converter.rs
@@ -274,20 +274,23 @@ where
) -> Result<Vec<Message>, ConversionError> {
if topic.name.starts_with("tedge/alarms") {
let mut mqtt_messages: Vec<Message> = Vec::new();
- let topic_split: Vec<&str> = topic.name.split('/').collect();
- if topic_split.len() == 5 {
- let child_id = topic_split[4];
- // Create a child device, if it does not exists already
- if !child_id.is_empty() && !self.children.contains(child_id) {
- self.children.insert(child_id.to_string());
- mqtt_messages.push(Message::new(
- &Topic::new_unchecked(SMARTREST_PUBLISH_TOPIC),
- format!("101,{child_id},{child_id},thin-edge.io-child"),
- ));
- }
- }
self.size_threshold.validate(message)?;
let mut messages = self.alarm_converter.try_convert_alarm(message)?;
+ if !messages.is_empty() {
+ // When there is some messages to be sent on behalf of a child device,
+ // this child device must be declared first, if not done yet
+ let topic_split: Vec<&str> = topic.name.split('/').collect();
+ if topic_split.len() == 5 {
+ let child_id = topic_split[4];
+ if !child_id.is_empty() && !self.children.contains(child_id) {
+ self.children.insert(child_id.to_string());
+ mqtt_messages.push(Message::new(
+ &Topic::new_unchecked(SMARTREST_PUBLISH_TOPIC),
+ format!("101,{child_id},{child_id},thin-edge.io-child"),
+ ));
+ }
+ }
+ }
mqtt_messages.append(&mut messages);
Ok(mqtt_messages)
} else if topic.name.starts_with(INTERNAL_ALARMS_TOPIC) {
diff --git a/crates/core/tedge_mapper/src/c8y/tests.rs b/crates/core/tedge_mapper/src/c8y/tests.rs
index 2d37ce87..e72f9eed 100644
--- a/crates/core/tedge_mapper/src/c8y/tests.rs
+++ b/crates/core/tedge_mapper/src/c8y/tests.rs
@@ -681,7 +681,7 @@ async fn test_sync_child_alarms() {
let alarm_message = Message::new(&Topic::new_unchecked(alarm_topic), alarm_payload);
// During the sync phase, alarms are not converted immediately, but only cached to be synced later
- assert_eq!(converter.convert(&alarm_message).await.len(), 1);
+ assert!(converter.convert(&alarm_message).await.is_empty());
let non_alarm_topic = "tedge/measurements/external_sensor";
let non_alarm_payload = r#"{"temp": 1}"#;