FloatSensorDevice.java 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. package de.tu_darmstadt.tk.SmartHomeNetworkSim.core.devices;
  2. import java.util.Random;
  3. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.SimulationManager;
  4. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.SmartDevice;
  5. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.scheduler.Schedulable;
  6. /**
  7. * A simple float sensor, which will generate float reading within the given bounds.
  8. *
  9. * @author Andreas T. Meyer-Berg
  10. */
  11. public class FloatSensorDevice extends SmartDevice implements FloatSensor, Schedulable {
  12. /**
  13. * Minimum value
  14. */
  15. private float min;
  16. /**
  17. * Maximum value
  18. */
  19. private float max;
  20. /**
  21. * Current value
  22. */
  23. private float val;
  24. /**
  25. * Previous value
  26. */
  27. private float oldVal;
  28. /**
  29. * Timestep it will be udpated again
  30. */
  31. long nextSimulationTime = 0;
  32. /**
  33. * Update interval
  34. */
  35. int updateInterval = 10000;
  36. /**
  37. * Name of the sensor reading
  38. */
  39. private String infoName;
  40. /**
  41. * Initialize the Sensor
  42. */
  43. public FloatSensorDevice() {
  44. super();
  45. init();
  46. }
  47. /**
  48. * Create a new Sensor with the given name
  49. * @param name
  50. */
  51. public FloatSensorDevice(String name) {
  52. super(name);
  53. init();
  54. }
  55. /**
  56. * Create a new Sensor with the given name and update interval
  57. * @param name
  58. * @param updateInterval
  59. */
  60. public FloatSensorDevice(String name, int updateInterval) {
  61. super(name);
  62. this.updateInterval = updateInterval;
  63. init();
  64. }
  65. public void init(){
  66. min = 10;
  67. max = 35;
  68. val = 22;
  69. oldVal = 22;
  70. infoName = "temperature";
  71. SimulationManager.scheduleEvent(this);
  72. }
  73. @Override
  74. public void setFSinfoName(String name) {
  75. this.infoName = name;
  76. }
  77. @Override
  78. public String getFSinfoName() {
  79. return infoName;
  80. }
  81. @Override
  82. public float getFSmax() {
  83. return max;
  84. }
  85. @Override
  86. public void setFSmax(float max) {
  87. this.max = max;
  88. }
  89. @Override
  90. public float getFSmin() {
  91. return min;
  92. }
  93. @Override
  94. public void setFSmin(float min) {
  95. this.min = min;
  96. }
  97. @Override
  98. public float getFSval() {
  99. return val;
  100. }
  101. @Override
  102. public void setFSval(float val) {
  103. this.oldVal = this.val;
  104. this.val = val;
  105. }
  106. @Override
  107. public void simulateTimeStep(long startTime, long duration) {
  108. }
  109. @Override
  110. public long getEventTime() {
  111. return nextSimulationTime;
  112. }
  113. @Override
  114. public void simulateEvent(long time) {
  115. updateData();
  116. //Update again in 10 seconds
  117. nextSimulationTime=time + updateInterval;
  118. SimulationManager.scheduleEvent(this);
  119. }
  120. protected void updateData() {
  121. float newVal = val + (val-oldVal)+new Random().nextFloat()/2.0f-0.25f;
  122. newVal = Math.max(Math.min(newVal, max),min);
  123. this.oldVal = val;
  124. val = newVal;
  125. }
  126. }