if (payload.getTimestamp() != null) { protoMsg.setTimestamp(payload.getTimestamp().getTime()); protoMsg.setSeq(payload.getSeq()); if (payload.getUuid() != null) { protoMsg.setUuid(payload.getUuid()); for (Metric metric : payload.getMetrics()) { try { protoMsg.addMetrics(convertMetric(metric)); if (payload.getBody() != null) { protoMsg.setBody(ByteString.copyFrom(payload.getBody()));
SparkplugBPayload payload = new SparkplugBPayload( calendar.getTime(), new ArrayList<Metric>(), null); payload.addMetric(new MetricBuilder("bdSeq", Int64, (long)bdSeq).createMetric()); payload.addMetric(new MetricBuilder("Node Control/Rebirth", Boolean, false) .createMetric()); payload.addMetric(new MetricBuilder("MyNodeMetric", Int32, index) .timestamp(calendar.getTime()) .createMetric()); payload = new SparkplugBPayload( calendar.getTime(), new ArrayList<Metric>(), null); payload.addMetric(new MetricBuilder("MyDeviceMetric", Int32, index+50) .timestamp(calendar.getTime()) .createMetric());
private void publishBirth() { try { synchronized (seqLock) { // Reset the sequence number seq = 0; // Create the BIRTH payload and set the position and other metrics SparkplugBPayload payload = new SparkplugBPayload(new Date(), new ArrayList<Metric>(), getSeqNum(), newUUID(), null); payload.addMetric(new MetricBuilder("bdSeq", Int64, (long) bdSeq).createMetric()); payload.addMetric(new MetricBuilder("Node Control/Rebirth", Boolean, false).createMetric()); // Add a node level template definition and instance payload.addMetric( new MetricBuilder("simpleType", Template, newSimpleTemplate(true, null)).createMetric()); payload.addMetric(new MetricBuilder("mySimpleType", Template, newSimpleTemplate(false, "simpleType")) .createMetric()); // Add the complex template definition - All UDT definitions must be published in the NBIRTH payload.addMetrics(newComplexTemplateDefs()); System.out.println("Publishing Edge Node Birth"); executor.execute(new Publisher(NAMESPACE + "/" + groupId + "/NBIRTH/" + edgeNode, payload)); // Create the payload and add a complex Template instance payload = new SparkplugBPayload(new Date(), newComplexTemplateInstance(), getSeqNum(), newUUID(), null); System.out.println("Publishing Device Birth"); executor.execute( new Publisher(NAMESPACE + "/" + groupId + "/DBIRTH/" + edgeNode + "/" + deviceId, payload)); } } catch (Exception e) { e.printStackTrace(); } }
for (Metric metric : inboundPayload.getMetrics()) { System.out.println("Metric " + metric.getName() + "=" + metric.getValue()); if (splitTopic[0].equals(NAMESPACE) && splitTopic[1].equals(groupId) && splitTopic[2].equals("NCMD") && splitTopic[3].equals(edgeNode)) { for (Metric metric : inboundPayload.getMetrics()) { if ("Node Control/Rebirth".equals(metric.getName()) && ((Boolean) metric.getValue())) { publishBirth(); System.out.println("Command recevied for device " + splitTopic[4]); SparkplugBPayload outboundPayload = new SparkplugBPayload(new Date(), new ArrayList<Metric>(), getSeqNum(), newUUID(), null); for (Metric metric : inboundPayload.getMetrics()) {
for (Metric metric : inboundPayload.getMetrics()) { System.out.println("Metric " + metric.getName() + "=" + metric.getValue()); splitTopic[2].equals("NCMD") && splitTopic[3].equals(edgeNode)) { for (Metric metric : inboundPayload.getMetrics()) { if ("Node Control/Rebirth".equals(metric.getName()) && ((Boolean)metric.getValue())) { publishBirth(); SparkplugBPayload outboundPayload = new SparkplugBPayload( new Date(), new ArrayList<Metric>(), newUUID(), null); for (Metric metric : inboundPayload.getMetrics()) { String name = metric.getName(); Object value = metric.getValue(); } else if ("Outputs/0".equals(name)) { System.out.println("Outputs/0: " + value); outboundPayload.addMetric(new MetricBuilder("Inputs/0", Boolean, value).createMetric()); outboundPayload.addMetric(new MetricBuilder("Outputs/0", Boolean, value).createMetric()); System.out.println("Publishing updated value for Inputs/0 " + value); } else if ("Outputs/1".equals(name)) { System.out.println("Output1: " + value); outboundPayload.addMetric(new MetricBuilder("Inputs/1", Int32, value).createMetric()); outboundPayload.addMetric(new MetricBuilder("Outputs/1", Int32, value).createMetric()); System.out.println("Publishing updated value for Inputs/1 " + value);
private static void divideAndAddMessages(Collection<Message> messages, Message message, int maxBytes) throws SparkplugException, JsonProcessingException { Topic topic = message.getTopic(); SparkplugBPayload payload = message.getPayload(); List<Metric> metrics = payload.getMetrics(); final int metricCount = message.getPayload().getMetricCount(); final int size = toJsonString(message).getBytes().length; // Check if the message can be divided if (metricCount <= 1) { throw new SparkplugException("Cannot divide SparkplugBPayload with only " + metricCount + " metric(s)"); } int newMessageCount = size / maxBytes + ((size % maxBytes > 0) ? 1 : 0); int metricsPerMessageCount = metricCount / newMessageCount + ((metricCount % newMessageCount > 0) ? 1 : 0); int index = 0; while (index < metricCount) { int toIndex = metricCount < (index + metricsPerMessageCount) ? metricCount : index + metricsPerMessageCount; // build a new Message with the payload containing the next subset (count) of metrics Message newMessage = new MessageBuilder(topic, new SparkplugBPayloadBuilder().setTimestamp(payload.getTimestamp()).setUuid(payload.getUuid()) .setSeq(payload.getSeq()).addMetrics(new ArrayList<Metric>(metrics.subList(index, toIndex))) .createPayload()).build(); String jsonMessage = toJsonString(newMessage); if (jsonMessage.getBytes().length < maxBytes) { messages.add(newMessage); } else { divideAndAddMessages(messages, newMessage, maxBytes); } index += metricsPerMessageCount; } }
if (UUID_COMPRESSED.equals(payload.getUuid())) { logger.trace("Decompressing payload"); SparkplugBPayloadDecoder decoder = new SparkplugBPayloadDecoder(); CompressionConfig config = new CompressionConfig(); byte[] decompressedBytes; List<Metric> metrics = payload.getMetrics(); decompressedBytes = GZipUtil.decompress(payload.getBody()); break; case DEFLATE: decompressedBytes = inflateBytes(payload.getBody()); break; default:
public SparkplugBPayload createPayload() { return new SparkplugBPayload(timestamp, metrics, seq, uuid, body); } }
public void messageArrived(String topic, MqttMessage message) throws Exception { System.out.println("Message Arrived on topic " + topic); SparkplugBPayloadDecoder decoder = new SparkplugBPayloadDecoder(); SparkplugBPayload inboundPayload = decoder.buildFromByteArray(message.getPayload()); // Debug for (Metric metric : inboundPayload.getMetrics()) { System.out.println("Metric " + metric.getName() + "=" + metric.getValue()); } String[] splitTopic = topic.split("/"); if (splitTopic[0].equals(NAMESPACE) && splitTopic[1].equals(groupId) && splitTopic[2].equals("NCMD") && splitTopic[3].equals(edgeNode)) { for (Metric metric : inboundPayload.getMetrics()) { if ("Node Control/Rebirth".equals(metric.getName()) && ((Boolean)metric.getValue())) { publishBirth(); } else { System.out.println("Unknown Node Command NCMD: " + metric.getName()); } } } }
public void run() { try { outboundPayload.setTimestamp(new Date()); SparkplugBPayloadEncoder encoder = new SparkplugBPayloadEncoder(); client.publish(topic, encoder.getBytes(outboundPayload), 0, false); } catch (MqttPersistenceException e) { e.printStackTrace(); } catch (MqttException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } }
System.out.println("deviceMetrics: " + deviceMetrics.size()); SparkplugBPayload nodePayload = new SparkplugBPayload( new Date(), nodeMetrics, new SparkplugBPayloadEncoder().getBytes(nodePayload), 0, false); SparkplugBPayload devicePayload = new SparkplugBPayload( new Date(), deviceMetrics,
for (Metric metric : inboundPayload.getMetrics()) { System.out.println("Metric: " + metric.getName() + " :: " + metric.getValue()); for (Metric metric : inboundPayload.getMetrics()) { System.out.println("Metric: " + metric.getName() + " :: " + metric.getValue());
public void run() { try { outboundPayload.setTimestamp(new Date()); SparkplugBPayloadEncoder encoder = new SparkplugBPayloadEncoder(); client.publish(topic, encoder.getBytes(outboundPayload), 0, false); } catch (MqttPersistenceException e) { e.printStackTrace(); } catch (MqttException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } }
SparkplugBPayload payload = new SparkplugBPayload( new Date(), new ArrayList<Metric>(), null); payload.addMetric(new MetricBuilder("bdSeq", Int64, (long)bdSeq).createMetric()); payload.addMetric(new MetricBuilder("Node Control/Rebirth", Boolean, false) .createMetric()); payload.addMetric(new MetricBuilder("MyMetric", String, "My Value") .properties(propertySet) .createMetric());
System.out.println("Connected - publishing new data"); SparkplugBPayload payload = new SparkplugBPayload(new Date(), newComplexTemplateInstance(), getSeqNum(), newUUID(), null);
public void run() { try { outboundPayload.setTimestamp(new Date()); SparkplugBPayloadEncoder encoder = new SparkplugBPayloadEncoder(); client.publish(topic, encoder.getBytes(outboundPayload), 0, false); } catch (MqttPersistenceException e) { e.printStackTrace(); } catch (MqttException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } }
synchronized(seqLock) { SparkplugBPayload payload = new SparkplugBPayload( new Date(), newMetrics(true), null); payload.addMetric(new MetricBuilder("Device Control/Rebirth", Boolean, false) .createMetric()); payload.addMetric(new MetricBuilder("Inputs/0", Boolean, true).createMetric()); payload.addMetric(new MetricBuilder("Inputs/1", Int32, 0).createMetric()); payload.addMetric(new MetricBuilder("Inputs/2", Double, 1.23d).createMetric()); payload.addMetric(new MetricBuilder("Outputs/0", Boolean, true).createMetric()); payload.addMetric(new MetricBuilder("Outputs/1", Int32, 0).createMetric()); payload.addMetric(new MetricBuilder("Outputs/2", Double, 1.23d).createMetric()); payload.addMetric(new MetricBuilder("Properties/hw_version", String, HW_VERSION).createMetric()); payload.addMetric(new MetricBuilder("Properties/sw_version", String, SW_VERSION).createMetric()); payload.addMetric(new MetricBuilder("MyMetric", String, "My Value") .properties(propertySet) .createMetric());
System.out.println("Connected - publishing new data"); SparkplugBPayload payload = new SparkplugBPayload( new Date(), newMetrics(false),