Research Article

Logical Sensor Network: An Abstraction of Sensor Data Processing over Multidomain Sensor Network

Listing 3

Source code for construction and update for logical sensor network in Java.
 public  class RainForecastNetwork extends LogicalSensorNetwork{
private  Source rain;
private  LowpassFilter lpf;
private  Average ave;
private  Direction dir;
public  RainForecastNetwork()  throws  Exception {
  super(“conf/rain_forecast.lsn”);
 }
 @Override
public  boolean  onInit() {
  rain = new  Source ; //Logical Sensors
  lpf = new  LowpassFilter ; //Lowpass Filters
  ave = new  Average ; //Average Aggregators
  dir = new  Direction(“Direction”, new  TimerTrigger(10000));
  //Instantiating Processor Nodes
  for(int  i=0; i<2; i++){
   rain[i] = manager.getNodes(“RainA” + (i+1));
   lpf[i] = new  LowpassFilter[rain[i].length];
   for(int  j=0; j<lpf[i].length; j++)
    lpf[i][j] = new  LowpassFilter(“LPF”+i+j, new
21      FlowTrigger());
22   ave[i] = new  Average(“Ave” + i, new  RendezvousTrigger());
23  }
24  //Connecting Processor Nodes
25  for(int  i=0; i<2; i++){
26   for(int j=0; j<rain[i].length; j++){
27    rain[i][j].setPushStream(“value”, lpf[i][j]);
28    lpf[i][j].setPushStream(“value”, ave[i]);
29   }
30   ave[i].setPullStream(“value”, dir);
31  }
32  dir.setPushStream(“value”, sink);
33  return  true;
34 }
35 @Override
36 public  boolean onUpdate() {
37  //Disconnect Processor Nodes
38  for(int  i=0; i<2; i++){
39   for(int j=0; j<lpf[i].length; j++){
40    lpf[i][j].removeStream(ave[i]);
41   }
42  }
43  //Get new binding and instantiate new LowpassFilters
44  for(int  i=0; i<2; i++){
45   rain[i] = manager.getNodes(“RainA” + (i+1));
46   lpf[i] = new  LowpassFilter[rain[i].length];
47   for(int  j=0; j<lpf[i].length; j++)
    lpf[i][j] = new  LowpassFilter(“LPF“+i+j, new
      FlowTrigger ;
  }
  //Connect new LowpassFilters to Averages
  for(int  i=0; i<2; i++){
   for(int j=0; j<rain[i].length; j++){
54    rain[i][j].setPushStream(“value”, lpf[i][j]);
55    lpf[i][j].setPushStream((“value”, ave[i]);
   }
57  }
58  return  true;
59 }
 }