Update temperature-sensor generation process
Define a fixed icon resource value
define 100 devices to be created by default
diff --git a/simulated-devices/temperatures-generator/src/main/java/org/eclipse/sensinact/gateway/simulated/temperature/generator/discovery/TemperaturesGeneratorDiscoveryPacketReader.java b/simulated-devices/temperatures-generator/src/main/java/org/eclipse/sensinact/gateway/simulated/temperature/generator/discovery/TemperaturesGeneratorDiscoveryPacketReader.java
index c7a1137..c49bfe1 100644
--- a/simulated-devices/temperatures-generator/src/main/java/org/eclipse/sensinact/gateway/simulated/temperature/generator/discovery/TemperaturesGeneratorDiscoveryPacketReader.java
+++ b/simulated-devices/temperatures-generator/src/main/java/org/eclipse/sensinact/gateway/simulated/temperature/generator/discovery/TemperaturesGeneratorDiscoveryPacketReader.java
@@ -14,7 +14,6 @@
import org.eclipse.sensinact.gateway.generic.packet.InvalidPacketException;
import org.eclipse.sensinact.gateway.simulated.temperature.generator.internal.TemperaturesGeneratorAbstractPacket;
import org.eclipse.sensinact.gateway.simulated.temperature.generator.internal.TemperaturesGeneratorAbstractPacketReader;
-import org.eclipse.sensinact.gateway.simulated.temperature.generator.reader.TemperaturesGeneratorPacket;
public class TemperaturesGeneratorDiscoveryPacketReader extends TemperaturesGeneratorAbstractPacketReader {
/**
diff --git a/simulated-devices/temperatures-generator/src/main/java/org/eclipse/sensinact/gateway/simulated/temperature/generator/osgi/Activator.java b/simulated-devices/temperatures-generator/src/main/java/org/eclipse/sensinact/gateway/simulated/temperature/generator/osgi/Activator.java
index 5601516..fc902ce 100644
--- a/simulated-devices/temperatures-generator/src/main/java/org/eclipse/sensinact/gateway/simulated/temperature/generator/osgi/Activator.java
+++ b/simulated-devices/temperatures-generator/src/main/java/org/eclipse/sensinact/gateway/simulated/temperature/generator/osgi/Activator.java
@@ -17,7 +17,6 @@
import org.eclipse.sensinact.gateway.generic.ExtModelConfiguration;
import org.eclipse.sensinact.gateway.generic.ExtModelConfigurationBuilder;
import org.eclipse.sensinact.gateway.generic.local.LocalProtocolStackEndpoint;
-import org.eclipse.sensinact.gateway.simulated.temperature.generator.internal.TemperaturesGeneratorAbstractPacket;
import org.eclipse.sensinact.gateway.simulated.temperature.generator.parser.DataParser;
import org.eclipse.sensinact.gateway.simulated.temperature.generator.reader.TemperaturesGeneratorPacket;
import org.eclipse.sensinact.gateway.simulated.temperature.generator.thread.TemperaturesGeneratorThreadManager;
@@ -26,7 +25,7 @@
import java.util.Collections;
public class Activator extends AbstractActivator<Mediator> {
- @Property(name = "org.eclipse.sensinact.simulated.generator.amount", defaultValue = "10")
+ @Property(name = "org.eclipse.sensinact.simulated.generator.amount", defaultValue = "100")
Integer DEVICES_NUMBER;
private LocalProtocolStackEndpoint<TemperaturesGeneratorPacket> connector;
private ExtModelConfiguration<TemperaturesGeneratorPacket> manager;
diff --git a/simulated-devices/temperatures-generator/src/main/java/org/eclipse/sensinact/gateway/simulated/temperature/generator/parser/DataParser.java b/simulated-devices/temperatures-generator/src/main/java/org/eclipse/sensinact/gateway/simulated/temperature/generator/parser/DataParser.java
index 953b9ec..295c791 100644
--- a/simulated-devices/temperatures-generator/src/main/java/org/eclipse/sensinact/gateway/simulated/temperature/generator/parser/DataParser.java
+++ b/simulated-devices/temperatures-generator/src/main/java/org/eclipse/sensinact/gateway/simulated/temperature/generator/parser/DataParser.java
@@ -10,17 +10,15 @@
*/
package org.eclipse.sensinact.gateway.simulated.temperature.generator.parser;
-import org.eclipse.sensinact.gateway.common.bundle.Mediator;
-
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
-import java.util.HashMap;
import java.util.HashSet;
-import java.util.Map;
import java.util.Random;
import java.util.Set;
+import org.eclipse.sensinact.gateway.common.bundle.Mediator;
+
/**
* The parser randomly chooses line in the data.csv file using the reservoir sampling algorithm
*/
@@ -32,43 +30,65 @@
}
public Set<DeviceInfo> createDeviceInfosSet(int number) {
- Map<String, Integer> map = new HashMap<String, Integer>();
+ found = new HashSet<String>();
Set<DeviceInfo> deviceInfoSet = new HashSet<DeviceInfo>();
try {
for (int i = 0; i < number; i++) {
- BufferedReader reader = new BufferedReader(new InputStreamReader(mediator.getContext().getBundle().getResource("data.csv").openStream()));
- DeviceInfo deviceInfo = choose(i, new BufferedReader(reader));
- if (!map.containsKey(deviceInfo.getServiceProviderId())) {
- map.put(deviceInfo.getServiceProviderId(), 0);
- }
- map.put(deviceInfo.getServiceProviderId(), map.get(deviceInfo.getServiceProviderId()) + 1);
+ DeviceInfo deviceInfo = null;
+ while(deviceInfo == null)
+ deviceInfo = choose(mediator, i);
deviceInfoSet.add(deviceInfo);
- reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
+ found.clear();
+ found = null;
return deviceInfoSet;
}
-
- private static DeviceInfo choose(int nb, BufferedReader reader) throws IOException {
+
+ private static BufferedReader buildReader(Mediator mediator) throws IOException {
+ return new BufferedReader(new InputStreamReader(mediator.getContext().getBundle().getResource("data.csv").openStream()));
+ }
+
+ private static Set<String> found;
+
+ private static DeviceInfo choose(Mediator mediator, int nb) throws IOException {
DeviceInfo result = null;
Random rand = new Random();
- Integer sleepTimeRandom = new Random().nextInt(60000) + 1000;
- String currentLine;
- int n = 0;
- while ((currentLine = reader.readLine()) != null) {
- n++;
+ BufferedReader reader = buildReader(mediator);
+ Integer sleepTimeRandom = new Random().nextInt(10000) + 1000;
+ String currentLine = null;
+ int n = nb;
+ while (true) {
+ currentLine = reader.readLine();
+ if(currentLine == null) {
+ reader.close();
+ reader = null;
+ reader = buildReader(mediator);
+ currentLine = reader.readLine();
+ n=nb;
+ }
+ if (n==0 || rand.nextInt(n) != 0) {
+ n++;
+ continue;
+ }
+ if(found.contains(String.valueOf(n-nb))) {
+ n++;
+ continue;
+ }
+ found.add(String.valueOf(n-nb));
String[] splittedLine = currentLine.split(",");
double[] temperatures = new double[12];
for (int i = 0; i < 12; i++) {
temperatures[i] = Double.parseDouble(splittedLine[i + 2]);
}
DeviceInfo deviceInfo = new DeviceInfo(String.valueOf(nb), splittedLine[1] + "," + splittedLine[2], temperatures, sleepTimeRandom);
- if (rand.nextInt(n) == 0) {
- result = deviceInfo;
- }
+ result = deviceInfo;
+ break;
}
+ reader.close();
+ reader = null;
return result;
}
}
diff --git a/simulated-devices/temperatures-generator/src/main/resources/temperature-resource.xml b/simulated-devices/temperatures-generator/src/main/resources/temperature-resource.xml
index 5693705..254bc3a 100644
--- a/simulated-devices/temperatures-generator/src/main/resources/temperature-resource.xml
+++ b/simulated-devices/temperatures-generator/src/main/resources/temperature-resource.xml
@@ -11,11 +11,26 @@
<resourceInfos xmlns="http://org.eclipse.sensinact/resource" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://org.eclipse.sensinact/resource ../../../../../platform/sensinact-generic/src/main/resources/sensinact-resource.xsd">
+ <resourceInfo xsi:type="resourceInfoProperty" name="ICON" target="admin">
+ <identifier xsi:type="stringContent">ICON</identifier>
+ <attributes>
+ <attribute name="value" type="String" modifiable="FIXED">
+ <value>weather-station</value>
+ </attribute>
+ </attributes>
+ </resourceInfo>
+ <resourceInfo xsi:type="resourceInfoProperty" name="LOCATION" target="admin">
+ <identifier xsi:type="stringContent">LOCATION</identifier>
+ <attributes>
+ <attribute name="value" type="String" modifiable="UPDATABLE">
+ </attribute>
+ </attributes>
+ </resourceInfo>
<resourceInfo xsi:type="resourceInfoSensor" name="TEMPERATURE" target="sensor">
<identifier xsi:type="stringContent">TEMPERATURE</identifier>
<attributes>
<attribute name="value" type="double"></attribute>
- <attribute name="floor" type="int" modifiable="MODIFIABLE" observed="true"></attribute>
+ <attribute name="floor" type="int" modifiable="MODIFIABLE"></attribute>
</attributes>
</resourceInfo>
</resourceInfos>
\ No newline at end of file