Handle downlink request
Add metadata only if any other data exists
diff --git a/platform/southbound/mqtt/ttn-device/src/main/java/org/eclipse/sensinact/gateway/sthbnd/ttn/model/TtnUplinkPayload.java b/platform/southbound/mqtt/ttn-device/src/main/java/org/eclipse/sensinact/gateway/sthbnd/ttn/model/TtnUplinkPayload.java
index 9a32655..54b773a 100644
--- a/platform/southbound/mqtt/ttn-device/src/main/java/org/eclipse/sensinact/gateway/sthbnd/ttn/model/TtnUplinkPayload.java
+++ b/platform/southbound/mqtt/ttn-device/src/main/java/org/eclipse/sensinact/gateway/sthbnd/ttn/model/TtnUplinkPayload.java
@@ -12,6 +12,7 @@
package org.eclipse.sensinact.gateway.sthbnd.ttn.model;
import org.eclipse.sensinact.gateway.common.bundle.Mediator;
+import org.eclipse.sensinact.gateway.sthbnd.ttn.listener.TtnUplinkListener;
import org.eclipse.sensinact.gateway.sthbnd.ttn.packet.PayloadDecoder;
import org.eclipse.sensinact.gateway.util.UriUtils;
import org.json.JSONException;
@@ -99,19 +100,11 @@
public TtnMetadata getMetadata() {
return metadata;
- }
+ }
-
@Override
public List<TtnSubPacket> getSubPackets() {
List<TtnSubPacket> subPackets = new ArrayList<>();
-
- subPackets.add(new TtnSubPacket<>("system", "frequency", null,null,metadata.getFrequency()));
- subPackets.add(new TtnSubPacket<>("system", "modulation", null,null,metadata.getModulation()));
- subPackets.add(new TtnSubPacket<>("system", "data_rate", null,null,metadata.getDataRate()));
- subPackets.add(new TtnSubPacket<>("system", "coding_rate", null,null,metadata.getCodingRate()));
- subPackets.add(new TtnSubPacket<>("system", "data", null, null, payloadRaw));
-
if (payloadRaw != null) {
try {
ServiceReference[] serviceReferences = this.mediator.getContext().getServiceReferences((String) null, PAYLOAD_DECODER);
@@ -122,9 +115,14 @@
if(!decodedPayload.isEmpty()) {
for(Map.Entry<String, Object> payloadMap : decodedPayload.entrySet()) {
- if(payloadMap.getKey().equals("position")){
+ if(payloadMap.getKey().equals("position")) {
subPackets.add(new TtnSubPacket<>("admin", "location", null,null,String.valueOf(payloadMap.getValue())));
+ continue;
}
+ if(TtnUplinkListener.DOWNLINK_MARKER.equals(payloadMap.getKey())){
+ subPackets.add(new TtnSubPacket<>(null, null, null, TtnUplinkListener.DOWNLINK_MARKER, payloadMap.getValue()));
+ continue;
+ }
String key = payloadMap.getKey();
String[] keyElements = UriUtils.getUriElements(key);
subPackets.add(new TtnSubPacket<>("content", keyElements[0],keyElements.length>1?keyElements[1]:null,
@@ -138,6 +136,15 @@
e.printStackTrace();
}
}
+ if(!subPackets.isEmpty() && (subPackets.size() > 1 || !TtnUplinkListener.DOWNLINK_MARKER.equals(subPackets.get(0).getMetadata()))) {
+ Double frequency = metadata.getFrequency();
+ if(frequency != null)
+ subPackets.add(new TtnSubPacket<>("system", "frequency", null,null, frequency.doubleValue()));
+ subPackets.add(new TtnSubPacket<>("system", "modulation", null,null,metadata.getModulation()));
+ subPackets.add(new TtnSubPacket<>("system", "data_rate", null,null,metadata.getDataRate()));
+ subPackets.add(new TtnSubPacket<>("system", "coding_rate", null,null,metadata.getCodingRate()));
+ subPackets.add(new TtnSubPacket<>("system", "data", null, null, payloadRaw));
+ }
return subPackets;
}
}