Ejemplo n.º 1
0
 public ImporterForwardingInfo(Action <DateTime, ImporterForwardingInfo, RoamingNetwork_Id, RoamingNetwork_Id> OnChangedCallback,
                               IEnumerable <EVSEOperator> EVSEOperators,
                               ChargingStation_Id StationId       = null,
                               String StationName                 = "",
                               String StationServiceTag           = "",
                               Address StationAddress             = null,
                               GeoCoordinate StationGeoCoordinate = null,
                               IEnumerable <EVSE_Id> EVSEIds      = null,
                               String PhoneNumber                 = null,
                               Timestamped <ChargingStationAdminStatusType>?AdminStatus = null,
                               DateTime?Created     = null,
                               Boolean OutOfService = false,
                               EVSEOperator ForwardedToEVSEOperator = null)
 {
     this._OnForwardingChanged     = OnChangedCallback;
     this._EVSEOperators           = EVSEOperators;
     this._EVSEIds                 = EVSEIds != null ? new HashSet <EVSE_Id>(EVSEIds) : new HashSet <EVSE_Id>();
     this._StationId               = StationId != null ? StationId                     : ChargingStation_Id.Create(EVSEIds);
     this.StationName              = StationName;
     this.StationServiceTag        = StationServiceTag;
     this.StationAddress           = StationAddress;
     this.StationGeoCoordinate     = StationGeoCoordinate != null ? StationGeoCoordinate          : new GeoCoordinate(new Latitude(0), new Longitude(0));
     this._AdminStatus             = AdminStatus != null ? AdminStatus.Value             : new Timestamped <ChargingStationAdminStatusType>(ChargingStationAdminStatusType.Operational);
     this._PhoneNumber             = PhoneNumber;
     this._Created                 = Created != null ? Created.Value                 : DateTime.Now;
     this._OutOfService            = OutOfService;
     this._LastTimeSeen            = _Created;
     this._ForwardedToEVSEOperator = ForwardedToEVSEOperator;
 }
        /// <summary>
        /// Create a SetChargingStationAvailabilityStatus XML/SOAP request.
        /// </summary>
        /// <param name="PartnerId">The partner identification.</param>
        /// <param name="OperatorId">The operator identification.</param>
        /// <param name="ChargingStationId">The charging station identification.</param>
        /// <param name="StatusEventDate">The timestamp of the status change.</param>
        /// <param name="AvailabilityStatus">The charging station availability status.</param>
        /// <param name="TransactionId">An optional transaction identification.</param>
        /// <param name="AvailabilityStatusUntil">An optional timestamp until which the given availability status is valid.</param>
        /// <param name="AvailabilityStatusComment">An optional comment about the availability status.</param>
        ///
        /// <param name="HTTPRequest">The correlated HTTP request of this eMIP request.</param>
        /// <param name="Timestamp">The optional timestamp of the request.</param>
        /// <param name="CancellationToken">An optional token to cancel this request.</param>
        /// <param name="EventTrackingId">An optional event tracking identification for correlating this request with other events.</param>
        /// <param name="RequestTimeout">An optional timeout for this request.</param>
        public SetChargingStationAvailabilityStatusRequest(Partner_Id PartnerId,
                                                           Operator_Id OperatorId,
                                                           ChargingStation_Id ChargingStationId,
                                                           DateTime StatusEventDate,
                                                           ChargingStationAvailabilityStatusTypes AvailabilityStatus,
                                                           Transaction_Id?TransactionId     = null,
                                                           DateTime?AvailabilityStatusUntil = null,
                                                           String AvailabilityStatusComment = null,

                                                           HTTPRequest HTTPRequest             = null,
                                                           DateTime?Timestamp                  = null,
                                                           CancellationToken?CancellationToken = null,
                                                           EventTracking_Id EventTrackingId    = null,
                                                           TimeSpan?RequestTimeout             = null)

            : base(HTTPRequest,
                   PartnerId,
                   TransactionId,
                   Timestamp,
                   CancellationToken,
                   EventTrackingId,
                   RequestTimeout)

        {
            this.OperatorId                = OperatorId;
            this.ChargingStationId         = ChargingStationId;
            this.StatusEventDate           = StatusEventDate;
            this.AvailabilityStatus        = AvailabilityStatus;
            this.AvailabilityStatusUntil   = AvailabilityStatusUntil;
            this.AvailabilityStatusComment = AvailabilityStatusComment?.Trim();
        }
Ejemplo n.º 3
0
        public void Test0()
        {
            var _rn = new RoamingNetwork(RoamingNetwork_Id.Parse("Test1"));
            var _op = _rn.CreateChargingStationOperator(ChargingStationOperator_Id.Parse("DE*822"));
            var _cp = _op.CreateChargingPool();

            _cp.StatusAggregationDelegate = report => {
                var max   = report.Max(v => v.Value);
                var max_n = report.Where(o => o.Value == max);
                return((ChargingPoolStatusTypes)max_n.OrderBy(o => o.Key).First().Key);
            };
            _cp.OnStatusChanged += async(ts, EventTrackingId, pool, os, ns) => { Console.WriteLine("New pool state: " + ns.Value); };

            var s1 = _cp.CreateChargingStation(ChargingStation_Id.Random(_op.Id));

            s1.StatusAggregationDelegate = report => {
                var max   = report.Max(v => v.Value);
                var max_n = report.Where(o => o.Value == max);
                return((ChargingStationStatusTypes)max_n.OrderBy(o => o.Key).First().Key);
            };
            s1.OnStatusChanged += async(ts, EventTrackingId, sta, os, ns) => { Console.WriteLine("New station #1 state: " + ns.Value); };

            var e1 = s1.CreateEVSE(EVSE_Id.Parse("DE*822*E1111*1"));
            var e2 = s1.CreateEVSE(EVSE_Id.Parse("DE*822*E1111*2"));
            var e3 = s1.CreateEVSE(EVSE_Id.Parse("DE*822*E1111*3"));
            var s2 = _cp.CreateChargingStation(ChargingStation_Id.Random(_op.Id));

            s2.StatusAggregationDelegate = report => {
                var max   = report.Max(v => v.Value);
                var max_n = report.Where(o => o.Value == max);
                return((ChargingStationStatusTypes)max_n.OrderBy(o => o.Key).First().Key);
            };
            s2.OnStatusChanged += async(ts, EventTrackingId, sta, os, ns) => { Console.WriteLine("New station #2 state: " + ns.Value); };

            var f1 = s2.CreateEVSE(EVSE_Id.Parse("DE*822*E2222*1"));
            var f2 = s2.CreateEVSE(EVSE_Id.Parse("DE*822*E2222*2"));
            var f3 = s2.CreateEVSE(EVSE_Id.Parse("DE*822*E2222*3"));


            e1.Status = EVSEStatusTypes.Available;
            e2.Status = EVSEStatusTypes.Available;
            e3.Status = EVSEStatusTypes.Available;

            f1.Status = EVSEStatusTypes.Available;
            f2.Status = EVSEStatusTypes.Available;
            f3.Status = EVSEStatusTypes.Available;

            e2.Status = EVSEStatusTypes.Charging;
            e3.Status = EVSEStatusTypes.Charging;
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Create a new virtual charging station.
        /// </summary>
        /// <param name="ChargingPool">A charging pool.</param>
        /// <param name="ChargingStationId">The charging station identification for the charging station to be created.</param>
        /// <param name="ChargingStationConfigurator">An optional delegate to configure the new (local) charging station.</param>
        /// <param name="VirtualChargingStationConfigurator">An optional delegate to configure the new virtual charging station.</param>
        /// <param name="OnSuccess">An optional delegate for reporting success.</param>
        /// <param name="OnError">An optional delegate for reporting an error.</param>
        public static ChargingStation CreateVirtualStation(this ChargingPool ChargingPool,
                                                           ChargingStation_Id ChargingStationId,
                                                           I18NString Description = null,
                                                           ChargingStationAdminStatusTypes InitialAdminStatus = ChargingStationAdminStatusTypes.Operational,
                                                           ChargingStationStatusTypes InitialStatus           = ChargingStationStatusTypes.Available,
                                                           String EllipticCurve = "P-256",
                                                           ECPrivateKeyParameters PrivateKey           = null,
                                                           PublicKeyCertificates PublicKeyCertificates = null,
                                                           TimeSpan?SelfCheckTimeSpan    = null,
                                                           UInt16 MaxAdminStatusListSize = VirtualChargingStation.DefaultMaxAdminStatusListSize,
                                                           UInt16 MaxStatusListSize      = VirtualChargingStation.DefaultMaxStatusListSize,
                                                           Action <ChargingStation> ChargingStationConfigurator = null,
                                                           Action <VirtualChargingStation> VirtualChargingStationConfigurator = null,
                                                           Action <ChargingStation> OnSuccess = null,
                                                           Action <ChargingPool, ChargingStation_Id> OnError = null)
        {
            #region Initial checks

            if (ChargingPool == null)
            {
                throw new ArgumentNullException(nameof(ChargingPool), "The given charging pool must not be null!");
            }

            #endregion

            return(ChargingPool.CreateChargingStation(ChargingStationId,
                                                      ChargingStationConfigurator,
                                                      newstation => {
                var virtualstation = new VirtualChargingStation(newstation.Id,
                                                                ChargingPool.RoamingNetwork,
                                                                Description,
                                                                InitialAdminStatus,
                                                                InitialStatus,
                                                                EllipticCurve,
                                                                PrivateKey,
                                                                PublicKeyCertificates,
                                                                SelfCheckTimeSpan,
                                                                MaxAdminStatusListSize,
                                                                MaxStatusListSize);

                VirtualChargingStationConfigurator?.Invoke(virtualstation);

                return virtualstation;
            },

                                                      OnSuccess: OnSuccess,
                                                      OnError:   OnError));
        }
Ejemplo n.º 5
0
        public WWCPImporter <T> LoadForwardingDataFromFile()
        {
            lock (ImporterRunLock)
            {
                var CurrentDirectory = Directory.GetCurrentDirectory();
                var ConfigFilename   = Directory.EnumerateFiles(CurrentDirectory).
                                       Select(file => file.Remove(0, CurrentDirectory.Length + 1)).
                                       Where(file => file.StartsWith(ForwardingFilenamePrefix, StringComparison.Ordinal)).
                                       OrderByDescending(file => file).
                                       FirstOrDefault();

                var InputFile = ConfigFilename.IsNotNullOrEmpty()
                                            ? ConfigFilename
                                            : ForwardingFilenamePrefix + ".json";

                if (File.Exists(InputFile))
                {
                    #region Try to read JSON from file...

                    JObject JSONConfig;

                    try
                    {
                        JSONConfig = JObject.Parse(File.ReadAllText(InputFile));
                    }
                    catch (Exception)
                    {
                        throw new ApplicationException("Could not read '" + InputFile + "'!");
                    }

                    #endregion

                    try
                    {
                        foreach (var CurrentRoamingNetwork in JSONConfig)
                        {
                            var CurrentRoamingNetworkId = RoamingNetwork_Id.Parse(CurrentRoamingNetwork.Key);

                            //var CurrentEVSEOperator      = ChargingStationOperators.FirstOrDefault(evseoperator => evseoperator.RoamingNetwork.Id == CurrentRoamingNetworkId);

                            //if (CurrentEVSEOperator == null)
                            //    throw new ApplicationException("Could not find any charging station operator for roaming network '" + CurrentRoamingNetworkId + "'!");

                            var CurrentRoamingNetworkJObject = CurrentRoamingNetwork.Value as JObject;

                            if (CurrentRoamingNetworkJObject != null)
                            {
                                foreach (var ChargingStationGroups in CurrentRoamingNetworkJObject)
                                {
                                    switch (ChargingStationGroups.Key.ToLower())
                                    {
                                        #region ValidChargingStations

                                    case "validchargingstations":

                                        (ChargingStationGroups.Value as JObject).GetEnumerator().
                                        ConsumeAll().
                                        OrderBy(KVP => KVP.Key).
                                        ForEach(StationConfig => {
                                            ChargingStation_Id ChargingStationId;

                                            if (ChargingStation_Id.TryParse(StationConfig.Key, out ChargingStationId))
                                            {
                                                var CurrentEVSEOperator = GetChargingStationOperators(ChargingStationId)?.
                                                                          FirstOrDefault(cso => cso != null &&
                                                                                         cso.RoamingNetwork.Id == CurrentRoamingNetworkId);

                                                if (CurrentEVSEOperator != null)
                                                {
                                                    JToken JSONToken2;
                                                    String PhoneNumber  = null;
                                                    var CurrentSettings = StationConfig.Value as JObject;

                                                    #region PhoneNumber

                                                    //if (CurrentSettings.TryGetValue("PhoneNumber", out JSONToken2))
                                                    //{
                                                    //    PhoneNumber = JSONToken2.Value<String>();
                                                    //}

                                                    #endregion

                                                    #region AdminStatus

                                                    var AdminStatus = ChargingStationAdminStatusTypes.Operational;

                                                    if (CurrentSettings.TryGetValue("Adminstatus", out JSONToken2) &&
                                                        !Enum.TryParse(JSONToken2.Value <String>(), true, out AdminStatus))
                                                    {
                                                        DebugX.Log("Invalid admin status '" + JSONToken2.Value <String>() + "' for charging station '" + ChargingStationId + "'!");
                                                    }

                                                    #endregion

                                                    #region Group

                                                    if (CurrentSettings.TryGetValue("Group", out JSONToken2))
                                                    {
                                                        var JV = JSONToken2 as JValue;
                                                        var JA = JSONToken2 as JArray;

                                                        var GroupList = JV != null
                                                                                    ? new String[] { JV.Value <String>() }
                                                                                    : JA != null
                                                                                        ? JA.AsEnumerable().Select(v => v.Value <String>())
                                                                                        : null;

                                                        if (GroupList != null)
                                                        {
                                                            foreach (var GroupId in GroupList)
                                                            {
                                                                CurrentEVSEOperator.
                                                                GetOrCreateChargingStationGroup(GroupId,
                                                                                                I18NString.Create(Languages.deu, GroupId)).
                                                                Add(ChargingStationId);
                                                            }
                                                        }
                                                    }

                                                    #endregion

                                                    if (!_AllForwardingInfos.ContainsKey(ChargingStationId))
                                                    {
                                                        _AllForwardingInfos.Add(ChargingStationId,
                                                                                new ImporterForwardingInfo(
                                                                                    OnChangedCallback:          SendOnForwardingChanged,
                                                                                    ChargingStationOperators:   GetChargingStationOperators(ChargingStationId),
                                                                                    StationId:                  ChargingStationId,
                                                                                    StationName:                "",
                                                                                    StationServiceTag:          "",
                                                                                    StationAddress:             null,        //new Address(),
                                                                                    StationGeoCoordinate:       null,
                                                                                    PhoneNumber:                PhoneNumber,
                                                                                    AdminStatus:                AdminStatus,
                                                                                    Created:                    DateTime.UtcNow,
                                                                                    OutOfService:               true,
                                                                                    ForwardedToOperator:        CurrentEVSEOperator)
                                                                                );
                                                    }
                                                }
                                            }
                                        });

                                        break;

                                        #endregion
                                    }
                                }
                            }
                        }
                    }

                    catch (Exception e)
                    {
                        DebugX.Log("LoadForwardingDataFromFile failed: " + e.Message);
                    }
                }

                else
                {
                    throw new ApplicationException("Config file '" + ForwardingFilenamePrefix + "' does not exist!");
                }


                OnLoadForwardingDataFromFileFinished?.Invoke(DateTime.UtcNow,
                                                             this,
                                                             InputFile,
                                                             (UInt64)_AllForwardingInfos.Count);
            }

            return(this);
        }
Ejemplo n.º 6
0
        public Boolean Get(ChargingStation_Id ChargingStationId, out ImporterForwardingInfo ImporterForwardingInfo)

        => _AllForwardingInfos.TryGetValue(ChargingStationId, out ImporterForwardingInfo);
Ejemplo n.º 7
0
 public ImporterForwardingInfo(Action <DateTime, ImporterForwardingInfo, RoamingNetwork_Id?, RoamingNetwork_Id?> OnChangedCallback,
                               IEnumerable <ChargingStationOperator> ChargingStationOperators,
                               ChargingStation_Id?StationId       = null,
                               String StationName                 = "",
                               String StationServiceTag           = "",
                               Address StationAddress             = null,
                               GeoCoordinate?StationGeoCoordinate = null,
                               IEnumerable <EVSE_Id> EVSEIds      = null,
                               String PhoneNumber                 = null,
                               Timestamped <ChargingStationAdminStatusTypes>?AdminStatus = null,
                               DateTime?Created     = null,
                               Boolean OutOfService = false,
                               ChargingStationOperator ForwardedToOperator = null)
 {
     this._OnForwardingChanged     = OnChangedCallback;
     this.ChargingStationOperators = ChargingStationOperators;
     this._EVSEIds             = EVSEIds != null ? new HashSet <EVSE_Id>(EVSEIds) : new HashSet <EVSE_Id>();
     this.StationId            = StationId.HasValue            ? StationId.Value               : ChargingStation_Id.Create(EVSEIds).Value;
     this.StationName          = StationName;
     this.StationServiceTag    = StationServiceTag;
     this.StationAddress       = StationAddress;
     this.StationGeoCoordinate = StationGeoCoordinate;
     this._AdminStatus         = AdminStatus != null ? AdminStatus.Value             : new Timestamped <ChargingStationAdminStatusTypes>(ChargingStationAdminStatusTypes.Operational);
     this.PhoneNumber          = PhoneNumber;
     this.Created      = Created != null ? Created.Value                 : DateTime.UtcNow;
     this.OutOfService = OutOfService;
     this.LastTimeSeen = this.Created;
     this._ForwardedToChargingStationOperator = ForwardedToOperator;
 }