diff options
| author | Loic Guegan <manzerbredes@mailbox.org> | 2022-09-09 13:16:42 +0200 |
|---|---|---|
| committer | Loic Guegan <manzerbredes@mailbox.org> | 2022-09-09 13:16:42 +0200 |
| commit | cfa677a0c678f742203aea601c6368768e5467da (patch) | |
| tree | be42cf52fc912a6ca78d334039d47cfb591e9e43 /esds/plugins | |
| parent | 57f020e09d738e283520e8cfc88b4cdd1aeaa551 (diff) | |
Debug synchronization + add return code
Diffstat (limited to 'esds/plugins')
| -rw-r--r-- | esds/plugins/node_plugin.py | 6 | ||||
| -rw-r--r-- | esds/plugins/power_states.py | 45 |
2 files changed, 27 insertions, 24 deletions
diff --git a/esds/plugins/node_plugin.py b/esds/plugins/node_plugin.py index 1b62d60..2e6c8e4 100644 --- a/esds/plugins/node_plugin.py +++ b/esds/plugins/node_plugin.py @@ -26,6 +26,12 @@ class NodePlugin: def on_communication_end(self,time,com_event): pass + + def on_turn_on(self): + pass + + def on_turn_off(self): + pass def log(self,msg): self.api.log(self.plugin_name+"(NP) "+msg) diff --git a/esds/plugins/power_states.py b/esds/plugins/power_states.py index e5a0e19..3c97c4f 100644 --- a/esds/plugins/power_states.py +++ b/esds/plugins/power_states.py @@ -110,10 +110,7 @@ class PowerStatesComms(NodePlugin): def __init__(self,api): super().__init__("PowerStatesComms",api) - self.energy_dynamic=0.0 # Store the dynamic part of the energy consumption self.power=dict() # Store the power states - self.tx_clock=0 # Dynamic clock (store the time at which a the last tx starts - self.idle_clock=api.read("clock") # Store the start time (to compute the idle part of the energy consumption) def on_communication_end(self,time,com_event): content=com_event[2] @@ -121,39 +118,39 @@ class PowerStatesComms(NodePlugin): duration=time-content[7] interface=content[2] mode= "tx" if content[0] == self.api.node_id else "rx" - self.energy_dynamic+=self.power[interface][mode]*duration + self.power[interface]["consumption_dynamic"]+=self.power[interface][mode]*duration + if self.api.node_id==0: + print("called with +{}J".format(self.power[interface][mode]*duration)) def set_power(self,interface,idle,tx,rx): self.power[interface]=dict() self.power[interface]["idle"]=idle self.power[interface]["rx"]=rx self.power[interface]["tx"]=tx + self.power[interface]["on_at"]=self.api.read("clock") + self.power[interface]["consumption_idle"]=0 + self.power[interface]["consumption_dynamic"]=0 - def get_idle(self): + def on_turn_on(self): + for interface in self.power.keys(): + self.power[interface]["on_at"]=self.api.read("clock") + + def on_turn_off(self): + self.sync_idle() + self.log("Consumes "+str(self.get_energy())) + + def sync_idle(self): clock=self.api.read("clock") - idle=0 for interface in self.power.keys(): - idle+=(clock-self.idle_clock)*self.power[interface]["idle"] - return idle - - def get_receive_queue_energy(self,interface): - """ - Not that call to on_receive_return may not have happened yet (or never). - Thus we should manually compute the energy consumption stored in each queues of the node. - """ - energy=0 - # For each interface we should check if there is received data that has not been consumed - for data in list(self.api["interfaces"][interface].queue): - start_at=float(data[1]) - end_at=float(data[2]) - energy+=(end_at-start_at)*self.power[interface]["rx"] - return energy + self.power[interface]["consumption_idle"]+=(clock-self.power[interface]["on_at"])*self.power[interface]["idle"] + self.power[interface]["on_at"]=clock def get_energy(self): - queue_energy=0 + self.sync_idle() + consumption=0 for interface in self.power.keys(): - queue_energy+=self.get_receive_queue_energy(interface) - return self.get_idle()+self.energy_dynamic+queue_energy + consumption+=self.power[interface]["consumption_idle"]+self.power[interface]["consumption_dynamic"] + return consumption def report_energy(self): self.log("Communications consumed "+str(round(self.get_energy(),2))+"J") |
