b->delete_handler(handler);
}
-static void logger(sp::BatteryPtr battery, sp::SolarPanelPtr solar_panel, sp::ChillerPtr chiller, sg4::Host* host1,
- sg4::Host* host2)
-{
- while (true) {
- XBT_INFO("SoC: %f Solar_Power: %f E_chiller: %f E_hosts_brown: %f E_hosts_green: %f",
- battery->get_state_of_charge(), solar_panel->get_power(), chiller->get_energy_consumed(),
- sg_host_get_consumed_energy(host1) + sg_host_get_consumed_energy(host2) - battery->get_energy_provided(),
- battery->get_energy_provided());
- simgrid::s4u::this_actor::sleep_for(100);
- }
-}
-
int main(int argc, char* argv[])
{
sg4::Engine e(&argc, argv);
chiller->add_host(myhost2);
solar_panel->on_this_power_change_cb(
[battery](sp::SolarPanel* s) { battery->set_load("Solar Panel", s->get_power() * -1); });
+
+ // These handlers connect/disconnect the solar panel and the hosts depending on the state of charge of the battery
battery->schedule_handler(0.8, sp::Battery::CHARGE, sp::Battery::Handler::PERSISTANT,
[battery]() { battery->set_load("Solar Panel", false); });
battery->schedule_handler(0.75, sp::Battery::DISCHARGE, sp::Battery::Handler::PERSISTANT,
battery->connect_host(myhost2);
});
+ /* Handlers create simulation events preventing the simulation from finishing
+ To avoid this behaviour this actor sleeps for 2 days and then delete all handlers
+ */
+ sg4::Actor::create("end_manager", myhost1, end_manager, battery);
+
+ // This actor updates the solar irradiance of the solar panel
sg4::Actor::create("irradiance_manager", myhost1, irradiance_manager, solar_panel)->daemonize();
+
+ // These actors start a job on a host for a specific duration
sg4::Actor::create("host_job_manager", myhost1, host_job_manager, 12 * 60 * 60, 4 * 60 * 60);
sg4::Actor::create("host_job_manager", myhost2, host_job_manager, 12 * 60 * 60, 4 * 60 * 60);
- sg4::Actor::create("end_manager", myhost1, end_manager, battery);
- // sg4::Actor::create("logger", myhost1, logger, battery, solar_panel, chiller, myhost1, myhost2)->daemonize();
e.run();
XBT_INFO("State of charge of the battery: %0.1f%%", battery->get_state_of_charge() * 100);