{"id":193,"date":"2020-10-02T17:06:03","date_gmt":"2020-10-02T16:06:03","guid":{"rendered":"http:\/\/blog.uclm.es\/felixvillanueva\/?p=193"},"modified":"2020-10-02T17:06:03","modified_gmt":"2020-10-02T16:06:03","slug":"simulando-consumo-de-energia-en-ns3","status":"publish","type":"post","link":"https:\/\/blog.uclm.es\/felixvillanueva\/2020\/10\/02\/simulando-consumo-de-energia-en-ns3\/","title":{"rendered":"Simulando consumo de energ\u00eda en NS3"},"content":{"rendered":"<p>El consumo de energ\u00eda es un par\u00e1metro importante sobre todo en escenarios de nodos alimentados por bater\u00eda. Tener el perfil de consumo de un nodo no es tarea f\u00e1cil y menos estimar su tiempo de vida conforme a unos par\u00e1metros de transmisi\u00f3n, encendido, apagado, etc.<br \/>\nPor ello hacer simulaciones de energ\u00eda puede ser una buena pr\u00e1ctica para muchos proyectos.<\/p>\n<p>En NS3 se modela el consumo de energ\u00eda haciendo una abstracci\u00f3n de los elementos que existen en la realidad. En <a href=\"https:\/\/www.nsnam.org\/docs\/models\/html\/energy.html\">este enlace <\/a> puedes consultar la documentaci\u00f3n oficial.<\/p>\n<p>Los tres elementos principales son, las fuentes de energ\u00eda, el modelo de energ\u00eda de un dispositivo y un recolector de energ\u00eda.<\/p>\n<p>Una fuente de energ\u00eda (<i>Energy Source<\/i>) es, como su propio nombre indica, una bater\u00eda o elemento proveedor de energ\u00eda que se conecta a un dispositivo para suministrarle energ\u00eda de acuerdo a un modelo de energ\u00eda de ese dispositivo.<br \/>\nUn modelo de energ\u00eda de un dispositivo es un modelo de consumo de acuerdo a una serie de estados en los cuales un dispositivo puede estar. Por ejemplo, un dispositivo inal\u00e1mbrico puede estar dormido, enviando o recibiendo informaci\u00f3n y tendr\u00e1 un consumo distinto en funci\u00f3n de cada uno de esos tres estados estado. Por lo tanto, debemos conectar ese modelo de energ\u00eda con los estados del dispositivo.<\/p>\n<p>Finalmente el recolector de energ\u00eda sirve para modelar un dispositivo (e.g un panel solar) y el entorno (e.g. radiaci\u00f3n solar) para proveer energ\u00eda a una fuente de energ\u00eda de cara a su recarga.<\/p>\n<p>Cada uno de esos tres elementos se configuran mediante su correspondiente asistente (<i><a href=\"https:\/\/www.nsnam.org\/doxygen\/classns3_1_1_basic_energy_source_helper.html\">Energy source helper<\/a>, <i><a href=\"https:\/\/www.nsnam.org\/doxygen\/classns3_1_1_device_energy_model_helper.html\">Device Energy Model Helper<\/a><\/i> y <i><a href=\"https:\/\/www.nsnam.org\/doxygen\/classns3_1_1_energy_harvester_helper.html\">Energy Harvesting Helper<\/a><\/i>) que te ayuda a configurar los par\u00e1metros b\u00e1sicos mediante atributos.<\/i><\/p>\n<p>Los asistentes de modelos concretos heredan de esos asistentes con las particularidades de cada modelo\/tecnolog\u00eda. Por ejemplo, hay un asistente para configurar una bater\u00eda que hereda del <i>Energy source helper<\/i> y que a\u00f1ade los elementos espec\u00edficos que caracterizan a una bater\u00eda de ese tipo partiendo de los par\u00e1metros b\u00e1sicos del modelo:<\/p>\n<ul>\n<li>Energ\u00eda inicial(J)<\/li>\n<li>Voltage de partida (V)<\/li>\n<li>Tiempo de actualizaci\u00f3n del nivel de la bater\u00eda<\/li>\n<\/ul>\n<p>Por ejemplo, una bater\u00eda del tipo <a href=\"https:\/\/www.nsnam.org\/doxygen\/classns3_1_1_rv_battery_model.html\">RV<\/a> a\u00f1ade par\u00e1metros como los valores de voltage de corte, valores alfa, beta, etc.<br \/>\nExisten modelos de bater\u00eda de Litio Y rv.<\/p>\n<p>De igual forma, el modelo de consumo de energ\u00eda de un dispositivo se realiza asoci\u00e1ndolo a una tecnolog\u00eda concreta, modelando cada uno de los estados y su consumo en Amperios. El modelo mas estudiado y modelado es el <a href=\"https:\/\/www.nsnam.org\/doxygen\/classns3_1_1_wifi_radio_energy_model.html\">modelo wifi<\/a> que define el consumo para hasta 7 estados distintos.<br \/>\nPara los dispositivos con varias interfaces (e.g. pasarelas con varias interfaces inal\u00e1mbricas), una fuente de energ\u00eda puede estar conectado a varios modelos de consumo.<\/p>\n<p>Veamos el ejemplo b\u00e1sico que viene con la instalaci\u00f3n de ns3, ejecutamos el ejemplo energy-model-example y vemos la salida que nos proporciona:<\/p>\n<p><code>ns-allinone-3.31\/ns-3.31$ .\/waf --run energy-model-example<br \/>\nWaf: Entering directory `\/home\/felix\/tools\/ns-allinone-3.31\/ns-3.31\/build'<br \/>\nWaf: Leaving directory `\/home\/felix\/tools\/ns-allinone-3.31\/ns-3.31\/build'<br \/>\nBuild commands will be stored in build\/compile_commands.json<br \/>\n'build' finished successfully (2.409s)<br \/>\n+0.000000000s -1 Assign IP Addresses.<br \/>\n0.000574667s Current remaining energy = 0.0995293J<br \/>\n0.000574667s Total energy consumed by radio = 0.000470652J<br \/>\n0.000762667s Current remaining energy = 0.0993754J<br \/>\n0.000762667s Total energy consumed by radio = 0.000624624J<br \/>\n0.00287467s Current remaining energy = 0.0973922J<br \/>\n0.00287467s Total energy consumed by radio = 0.00260779J<br \/>\n--<br \/>\nReceived one packet! Socket: 10.1.1.1 port: 49153 at time = 0.00287467<br \/>\n--<br \/>\n0.106594s Total energy consumed by radio = 0.0875537J<br \/>\n0.106594s Current remaining energy = 0.0124463J<br \/>\nEnd of simulation (10s) Total energy consumed by radio = 0.0982333J<br \/>\nEnd of simulation (10s) Total energy consumed by radio = 0.0875537J<\/code><\/p>\n<p>en el archivo $\/ns-3.31\/examples\/energy\/energy-model-example.cc podemos ver ese ejemplo. Es un ejemplo muy b\u00e1sico wifi donde se configura, mediante asistentes, una fuente de energ\u00eda y se asocia a un modelo de consumo de wifi. Un aspecto a tener en cuenta es que si instalas el m\u00f3dulo de lorawan, tambi\u00e9n existe un ejemplo de energ\u00eda energy-model-example.cc por lo que waf puede ejecutar el ejemplo que se encuentre antes en el orden de b\u00fasqueda. Si quieres asegurarte ejecutar el ejemplo citado, pon la ruta completa <code> .\/waf --run examples\/energy\/energy-model-example <\/code><\/p>\n<p>Bien, expliquemos el ejemplo wifi, lo primero, creamos un asistente de fuentes de energ\u00eda y lo configuramos con una energ\u00eda inicial de 0.1 Julios.<br \/>\n<code><br \/>\nBasicEnergySourceHelper basicSourceHelper;<br \/>\nbasicSourceHelper.Set (\"BasicEnergySourceInitialEnergyJ\", DoubleValue (0.1));<br \/>\n<\/code><br \/>\nInstalamos esa fuente de energ\u00eda en todos los nodos de un contenedor previamente configurado (NodeContainer c) con los nodos wifi (2).<br \/>\n<code><br \/>\nEnergySourceContainer sources = basicSourceHelper.Install (c);<br \/>\n<\/code><br \/>\nA continuaci\u00f3n configuramos el modelo de consumo que queremos para dichos dispositivos:<br \/>\n<code><br \/>\nWifiRadioEnergyModelHelper radioEnergyHelper;<br \/>\nradioEnergyHelper.Set (\"TxCurrentA\", DoubleValue (0.0174));<br \/>\n<\/code><br \/>\nVemos que s\u00f3lo configuramos el consumo cuando se transmite dejando el resto de consumos por defecto.<br \/>\nFinalmente, con las fuentes de energ\u00eda y los modelos, creamos un contenedor asociando fuentes de energ\u00eda y modelos de consumo:<br \/>\n<code><br \/>\nDeviceEnergyModelContainer deviceModels = radioEnergyHelper.Install (devices, sources);<br \/>\n<\/code><br \/>\nEl resto de la configuraci\u00f3n es exactamente igual a cualquier otro ejemplo de ns3 relacionado con WiFi.<br \/>\nUn aspecto a destacar es c\u00f3mo se imprime la informaci\u00f3n de la energ\u00eda restante en la bater\u00eda. El mecanismo es algo diferente a lo visto en este tutorial y lo describiremos en detalle en otra entrada. B\u00e1sicamente se asocia una funci\u00f3n al cambio en el estado de la energ\u00eda remanente de forma que cuando cambia esa variable se llama a esa funci\u00f3n que imprime el valor.<\/p>\n<p>Este mecanismo lo describiremos en profundidad en otra entrada.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>El consumo de energ\u00eda es un par\u00e1metro importante sobre todo en escenarios de nodos alimentados por bater\u00eda. Tener el perfil de consumo de un nodo no es tarea f\u00e1cil y menos estimar su tiempo de vida conforme a unos par\u00e1metros &hellip; <a href=\"https:\/\/blog.uclm.es\/felixvillanueva\/2020\/10\/02\/simulando-consumo-de-energia-en-ns3\/\">Sigue leyendo <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":182,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,4,5,6],"tags":[18,23],"class_list":["post-193","post","type-post","status-publish","format-standard","hentry","category-ejemplos","category-ns3","category-simulacion","category-tutorial","tag-consumo","tag-energia"],"_links":{"self":[{"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/posts\/193","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/users\/182"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/comments?post=193"}],"version-history":[{"count":0,"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/posts\/193\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/media?parent=193"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/categories?post=193"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.uclm.es\/felixvillanueva\/wp-json\/wp\/v2\/tags?post=193"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}