summaryrefslogtreecommitdiff
path: root/src/ns3/nix/simulator/modules/energy.cc
blob: 56c38e52568c1d7a2c73958c1fb7a1ab4df8d63f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68

#include "modules.hpp"

DeviceEnergyModelContainer setupCellEnergy(Cell cell){
  NodeContainer nodes(cell.first.first,cell.first.second);
  NetDeviceContainer nodesNetDev(cell.second.first,cell.second.second);

  // Install energy source
  BasicEnergySourceHelper edgeBasicSourceHelper;
  edgeBasicSourceHelper.Set ("BasicEnergySourceInitialEnergyJ", DoubleValue (BASICENERGYSOURCEINITIALENERGYJ));
  edgeBasicSourceHelper.Set ("BasicEnergySupplyVoltageV", DoubleValue (BASICENERGYSUPPLYVOLTAGEV));
  EnergySourceContainer apEdgeNodesSources = edgeBasicSourceHelper.Install (cell.first.first);
  EnergySourceContainer wifiEdgeNodesSources = edgeBasicSourceHelper.Install (cell.first.second);

  // Install device energy model
  WifiRadioEnergyModelHelper radioEnergyHelper;
  radioEnergyHelper.Set ("TxCurrentA", DoubleValue (TXCURRENTA));
  radioEnergyHelper.Set ("RxCurrentA", DoubleValue (RXCURRENTA));
  radioEnergyHelper.Set ("IdleCurrentA", DoubleValue (IDLECURRENTA));
  DeviceEnergyModelContainer edgeApDeviceModels = radioEnergyHelper.Install (cell.second.first, apEdgeNodesSources);
  DeviceEnergyModelContainer edgeDeviceModels = radioEnergyHelper.Install (cell.second.second, wifiEdgeNodesSources);

  
  // Trace
  //  DeviceEnergyModelContainer::Iterator it=edgeDeviceModels.Begin();
  //int i=1; // Node 0 will be AP, other node will have negative id (cf following while)
           // This is usefull in logs, in fact ECOFEN nodes will have positive ID and WIFI energy nodes negative id
           // AP will have id 0 in ECOFEN and WIFI (in order to combine their energy value when parsing logs
  // while(it!=edgeDeviceModels.End()){
  //   (*it)->TraceConnect ("TotalEnergyConsumption", std::to_string(0-i),MakeCallback (&EnergyUpdated));
  //   it++;
  //   i++;
  // }
  // // AP will have id 0
  // (*edgeApDeviceModels.Begin())->TraceConnect ("TotalEnergyConsumption", std::to_string(0),MakeCallback (&EnergyUpdated));

 //   Ptr<BasicEnergySource> basicSourcePtr0 = DynamicCast<BasicEnergySource> (wifiEdgeNodesSources.Get (0));
  // //basicSourcePtr0->TraceConnectWithoutContext ("RemainingEnergy", MakeCallback (&RemainingEnergy));
  // //device energy model
  // Ptr<DeviceEnergyModel> basicRadioModelPtr0 =
  // basicSourcePtr0->FindDeviceEnergyModels ("ns3::WifiRadioEnergyModel").Get (0);
  // NS_ASSERT (basicRadioModelPtr0 != NULL);
  // basicRadioModelPtr0->TraceConnectWithoutContext ("TotalEnergyConsumption", MakeCallback (&TotalEnergy));
  return(DeviceEnergyModelContainer(edgeApDeviceModels,edgeDeviceModels));
}

void setupCloudEnergy(CloudInfos cloudInfos){
  NodeContainer cloudNodes=cloudInfos.first;
  
  // Install basic energy
  ns3::BasicNodeEnergyHelper basicNodeEnergy;
  basicNodeEnergy.Set("OnConso", ns3::DoubleValue (ONCONSO));
  basicNodeEnergy.Set("OffConso", ns3::DoubleValue (OFFCONSO));
  basicNodeEnergy.Install (cloudNodes);

  ns3::CompleteNetdeviceEnergyHelper completeNetdeviceEnergy;
  completeNetdeviceEnergy.Set ("OffConso", ns3::DoubleValue (OFFCONSO));
  completeNetdeviceEnergy.Set ("IdleConso", ns3::DoubleValue (IDLECONSO));
  completeNetdeviceEnergy.Set ("RecvByteEnergy", ns3::DoubleValue (RECVBYTEENERGY));
  completeNetdeviceEnergy.Set ("SentByteEnergy", ns3::DoubleValue (SENTBYTEENERGY));
  completeNetdeviceEnergy.Set ("RecvPktEnergy", ns3::DoubleValue (RECVPKTENERGY));
  completeNetdeviceEnergy.Set ("SentPktEnergy", ns3::DoubleValue (SENTPKTENERGY));
  completeNetdeviceEnergy.Install(cloudNodes);
  
  ns3::ConsumptionLogger conso;
  conso.NodeConso(ns3::Seconds (ECOFEN_LOG_EVERY), ns3::Seconds(SIM_TIME), cloudNodes);
}