Example #1
0
        public IEnumerable <EVCharger> FindAll()
        {
            string           query      = "select capacity, idevc, power, state, charge, connected from evcharger";
            List <EVCharger> eVChargers = new List <EVCharger>();

            using (IDbConnection connection = ConnectionUtil_Pooling.GetConnection())
            {
                connection.Open();
                using (IDbCommand command = connection.CreateCommand())
                {
                    command.CommandText = query;
                    command.Prepare();

                    using (IDataReader reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            EVCharger evc = new EVCharger(reader.GetDouble(0), reader.GetString(1), reader.GetDouble(2),
                                                          (Enums.BatteryRezim)Enum.Parse(typeof(Enums.BatteryRezim), reader.GetString(3)), bool.Parse(reader.GetString(4)),
                                                          bool.Parse(reader.GetString(5)));

                            eVChargers.Add(evc);
                        }
                    }
                }
            }
            return(eVChargers);
        }
Example #2
0
        public void Save(EVCharger entity, IDbConnection connection)
        {
            String insertSql = "insert into evcharger (capacity,power,state,charge,connected,idevc) " +
                               "values (:c ,:p,:s, :charge,:connected, :idevc)";
            String updateSql = "update evcharger set capacity = :c, power = :p, state =:s," +
                               "charge =:charge, connected=:connected where idevc =:idevc";

            using (IDbCommand command = connection.CreateCommand())
            {
                command.CommandText = ExistsById(entity.Id, connection) ? updateSql : insertSql;
                ParameterUtil.AddParameter(command, "c", DbType.Double);
                ParameterUtil.AddParameter(command, "p", DbType.Double);
                ParameterUtil.AddParameter(command, "s", DbType.String);
                ParameterUtil.AddParameter(command, "charge", DbType.String);
                ParameterUtil.AddParameter(command, "connected", DbType.String);
                ParameterUtil.AddParameter(command, "idevc", DbType.String);
                ParameterUtil.SetParameterValue(command, "idevc", entity.Id);
                ParameterUtil.SetParameterValue(command, "connected", entity.Connected);
                ParameterUtil.SetParameterValue(command, "charge", entity.Charge);
                ParameterUtil.SetParameterValue(command, "s", entity.State);
                ParameterUtil.SetParameterValue(command, "p", entity.MaxPower);
                ParameterUtil.SetParameterValue(command, "c", entity.Capacity);
                command.ExecuteNonQuery();
            }
        }
Example #3
0
        public EVCharger FindById(string id)
        {
            string    query = "select capacity, idevc, power, state, charge, connected from evcharger where idevc = :idevc";
            EVCharger evc   = new EVCharger();

            using (IDbConnection connection = ConnectionUtil_Pooling.GetConnection())
            {
                connection.Open();
                using (IDbCommand command = connection.CreateCommand())
                {
                    command.CommandText = query;
                    ParameterUtil.AddParameter(command, "idevc", DbType.String);
                    command.Prepare();

                    ParameterUtil.SetParameterValue(command, "idevc", id);
                    using (IDataReader reader = command.ExecuteReader())
                    {
                        if (reader.Read())
                        {
                            evc = new EVCharger(reader.GetDouble(0), reader.GetString(1), reader.GetDouble(2), (Enums.BatteryRezim)Enum.Parse(typeof(Enums.BatteryRezim), reader.GetString(3)), bool.Parse(reader.GetString(4)),
                                                bool.Parse(reader.GetString(5)));
                        }
                    }
                }
            }

            return(evc);
        }
        public EVCharger GetEVCharger()
        {
            IEVChargers evc = new EVChargers();
            EVCharger   e   = evc.FindById("1");

            return(e);
        }
Example #5
0
 public void Save(EVCharger entity)
 {
     using (IDbConnection connection = ConnectionUtil_Pooling.GetConnection())
     {
         connection.Open();
         Save(entity, connection);
     }
 }
Example #6
0
 public void Delete(EVCharger entity)
 {
     throw new NotImplementedException();
 }
        public void SaveEVCharger(EVCharger evc)
        {
            IEVChargers evcs = new EVChargers();

            evcs.Save(evc);
        }
        static void Main(string[] args)
        {
            //Inicijalizacija:
            List <SolarPanel> solarPanels = new List <SolarPanel>();
            List <Battery>    batteries   = new List <Battery>();
            List <Consumer>   consumers   = new List <Consumer>();
            EVCharger         evc         = new EVCharger();
            Utility           utility     = new Utility();

            //Iniciajizacija Servera:
            ServiceHost host = new ServiceHost(typeof(SHESSolarPanel));

            host.Open();

            ServiceHost host2 = new ServiceHost(typeof(SHESBattery));

            host2.Open();

            ServiceHost host3 = new ServiceHost(typeof(SHESConsumer));

            host3.Open();

            ServiceHost host4 = new ServiceHost(typeof(SHESGUI));

            host4.Open();

            ServiceHost host5 = new ServiceHost(typeof(SHESEVCharger));

            host5.Open();

            //Otvaravnje kanala:
            ChannelFactory <IDBServices> kanalBaza = new ChannelFactory <IDBServices>("IDBServices");
            IDBServices proxyBaza = kanalBaza.CreateChannel();

            ChannelFactory <IBatterySHES> batteryChannel = new ChannelFactory <IBatterySHES>("IBatterySHES");
            IBatterySHES batteryProxy = batteryChannel.CreateChannel();

            ChannelFactory <IUtilitySHES> utilityChannel = new ChannelFactory <IUtilitySHES>("IUtilitySHES");
            IUtilitySHES utilityProxy = utilityChannel.CreateChannel();

            ChannelFactory <IEVChargerSHES> evchargerChannel = new ChannelFactory <IEVChargerSHES>("IEVChargerSHES");
            IEVChargerSHES evchargerProxy = evchargerChannel.CreateChannel();

            ChannelFactory <IConsumerSHES> consumerChannel = new ChannelFactory <IConsumerSHES>("IConsumerSHES");
            IConsumerSHES consumerProxy = consumerChannel.CreateChannel();

            ChannelFactory <ISolarPanelSHES> solarChannel = new ChannelFactory <ISolarPanelSHES>("ISolarPanelSHES");
            ISolarPanelSHES solarProxy = solarChannel.CreateChannel();

            //Vrednosti potrebne za pravilan rad aplikacije:
            double solarPanelsOutput         = 0;
            double consumerEnergyConsumption = 0;
            int    brojac = 0;
            //Racunanje pocetnog vremena
            DateTime centuryBegin = new DateTime(2020, 1, 1);
            DateTime currentDate  = DateTime.Now.Date;


            long     elapsedTicks      = currentDate.Ticks - centuryBegin.Ticks;
            TimeSpan elapsedSpan       = new TimeSpan(elapsedTicks);
            int      vreme             = (int)Math.Floor(elapsedSpan.TotalSeconds);
            bool     systemInitialized = false;
            double   cenaDana          = 0;

            while (true)
            {
                if (SHESGUI.startSystem)
                {
                    if (!systemInitialized)
                    {
                        if (SHESGUI.init)
                        {
                            int      brojPanela         = SHESGUI.brojPanelaBuffer;
                            double[] snagePanela        = SHESGUI.snagePanelaBuffer;
                            int      brojBaterija       = SHESGUI.brojBaterijaBuffer;
                            double[] snageBaterija      = SHESGUI.snageBaterijaBuffer;
                            double[] kapacitetiBaterija = SHESGUI.kapacitetiBaterijaBuffer;
                            double   snagaEVC           = SHESGUI.snagaEVCBuffer;
                            double   cenaUtility        = SHESGUI.cenaUtilityBuffer;
                            int      brojPotrosaca      = SHESGUI.brojPotrosacaBuffer;
                            double[] snagePotrosaca     = SHESGUI.snagePotrosacaBuffer;

                            //SolarPanels:
                            solarPanels = new List <SolarPanel>();
                            for (int i = 0; i < brojPanela; i++)
                            {
                                solarPanels.Add(new SolarPanel(i.ToString(), snagePanela[i]));
                            }
                            proxyBaza.SaveSolarPanels(solarPanels);

                            //Batteries:
                            batteries = new List <Battery>();
                            for (int i = 0; i < brojBaterija; i++)
                            {
                                batteries.Add(new Battery(kapacitetiBaterija[i], i.ToString(), snageBaterija[i], Enums.BatteryRezim.PUNJENJE));
                            }
                            proxyBaza.SaveBatteries(batteries, 0);

                            //Consumers:
                            consumers = new List <Consumer>();
                            for (int i = 0; i < brojPotrosaca; i++)
                            {
                                consumers.Add(new Consumer(snagePotrosaca[i], i.ToString(), Enums.ConsumerRezim.ON));
                            }
                            proxyBaza.SaveConsumers(consumers, 0);

                            //EVCharger;
                            evc = new EVCharger(0, "1", snagaEVC, BatteryRezim.PUNJENJE, false, false);
                            proxyBaza.SaveEVCharger(evc);

                            //Utility:
                            utility.Price = 0.139;
                            utility.Power = 0;
                            proxyBaza.SaveUtility(utility, 0);

                            batteryProxy.InitializeBatteries(batteries);
                            utilityProxy.initializeUtility(utility);
                            evchargerProxy.InitializeEVCharger(evc);
                            consumerProxy.InitializeConsumers(consumers);
                            double[] p = new double[solarPanels.Count];
                            int      j = 0;
                            foreach (SolarPanel sp in solarPanels)
                            {
                                p[j] = sp.MaxPower;
                                j++;
                            }
                            solarProxy.InitializeSolarPanels(solarPanels.Count(), p);
                            systemInitialized = true;
                        }
                        else
                        {
                            solarPanels   = proxyBaza.GetSolarPanels();
                            batteries     = proxyBaza.GetBatteries();
                            consumers     = proxyBaza.GetConsumers();
                            evc           = proxyBaza.GetEVCharger();
                            utility       = new Utility(proxyBaza.GetCurrentPrice());
                            utility.Power = 0;

                            batteryProxy.InitializeBatteries(batteries);
                            utilityProxy.initializeUtility(utility);
                            evchargerProxy.InitializeEVCharger(evc);
                            consumerProxy.InitializeConsumers(consumers);
                            double[] p = new double[solarPanels.Count];
                            int      j = 0;
                            foreach (SolarPanel sp in solarPanels)
                            {
                                p[j] = sp.MaxPower;
                                j++;
                            }
                            solarProxy.InitializeSolarPanels(solarPanels.Count(), p);
                            systemInitialized = true;
                        }
                    }
                    //Preuzimanje vrednosti iz baffera:
                    solarPanelsOutput = SHESSolarPanel.bufferPowerOutput;

                    consumerEnergyConsumption = SHESConsumer.energyConsumptioneBuffer;
                    consumers = SHESConsumer.consumers;

                    foreach (Battery b in batteries)
                    {
                        b.State    = SHESBattery.bufferRezimi[b.Id];
                        b.Capacity = SHESBattery.bufferCapacities[b.Id];
                    }

                    evc.Charge    = SHESEVCharger.rezimBuffer;
                    evc.Connected = SHESEVCharger.plugBuffer;

                    utility.Price = utilityProxy.getPrice();

                    double avgCena = 0.139;

                    //Algoritam:
                    double potrosnja = consumerEnergyConsumption;

                    potrosnja -= solarPanelsOutput;

                    if (evc.Connected && evc.Charge && evc.Capacity < 1)
                    {
                        potrosnja += evc.MaxPower;
                        evc.State  = Enums.BatteryRezim.PUNJENJE;
                        evchargerProxy.SendRegime(Enums.BatteryRezim.PUNJENJE);
                    }

                    if (brojac >= 36 && brojac <= 72)
                    {
                        foreach (Battery b in batteries)
                        {
                            if (b.Capacity < 1)
                            {
                                potrosnja += b.MaxPower;
                                b.State    = Enums.BatteryRezim.PUNJENJE;
                                batteryProxy.SendRegime(b.Id, Enums.BatteryRezim.PUNJENJE);
                            }
                        }
                        if (evc.Connected)
                        {
                            if (evc.Capacity < 1)
                            {
                                potrosnja += evc.MaxPower;
                                evc.State  = Enums.BatteryRezim.PUNJENJE;
                                evchargerProxy.SendRegime(Enums.BatteryRezim.PUNJENJE);
                            }
                        }
                    }
                    else if (brojac >= 168 && brojac <= 204)
                    {
                        foreach (Battery b in batteries)
                        {
                            if (b.Capacity > 0)
                            {
                                potrosnja -= b.MaxPower;
                                b.State    = Enums.BatteryRezim.PRAZNJENJE;
                                batteryProxy.SendRegime(b.Id, Enums.BatteryRezim.PRAZNJENJE);
                            }
                        }
                    }
                    else
                    {
                        if (utility.Price <= avgCena)
                        {
                            foreach (Battery b in batteries)
                            {
                                if (b.Capacity <= 1)
                                {
                                    potrosnja += b.MaxPower;
                                    b.State    = Enums.BatteryRezim.PUNJENJE;
                                    batteryProxy.SendRegime(b.Id, Enums.BatteryRezim.PUNJENJE);
                                }
                            }
                        }
                        else
                        {
                            foreach (Battery b in batteries)
                            {
                                if (b.Capacity > 0)
                                {
                                    potrosnja -= b.MaxPower;
                                    b.State    = Enums.BatteryRezim.PRAZNJENJE;
                                    batteryProxy.SendRegime(b.Id, Enums.BatteryRezim.PRAZNJENJE);
                                }
                            }
                        }
                    }
                    utilityProxy.sendRequestforEnergy(potrosnja);
                    utility.Power = potrosnja;

                    cenaDana += potrosnja * utility.Price / 12;

                    proxyBaza.SaveSolarPanelProduction(solarPanelsOutput, vreme);
                    proxyBaza.SaveConsumers(consumers, vreme);
                    proxyBaza.SaveBatteries(batteries, vreme);
                    proxyBaza.SaveUtility(utility, vreme);
                    proxyBaza.SaveEVCharger(evc);
                    if (!SHESGUI.dates.Contains(currentDate))
                    {
                        SHESGUI.dates.Add(currentDate);
                    }
                    if (brojac == 288)
                    {
                        proxyBaza.SaveTotalExpenditure(currentDate, (int)cenaDana);
                        brojac      = 0;
                        cenaDana    = 0;
                        currentDate = currentDate.AddDays(1);
                    }

                    brojac++;
                    vreme += 300;
                }
                Thread.Sleep(1000);
            }
        }