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(); }
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; }
/// <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)); }
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); }
public Boolean Get(ChargingStation_Id ChargingStationId, out ImporterForwardingInfo ImporterForwardingInfo) => _AllForwardingInfos.TryGetValue(ChargingStationId, out ImporterForwardingInfo);
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; }