/// <summary> /// Create a new virtual charging station. /// </summary> /// <param name="ChargingStation">A charging station.</param> /// <param name="EVSEId">The EVSE identification for the EVSE to be created.</param> /// <param name="EVSEConfigurator">An optional delegate to configure the new (local) EVSE.</param> /// <param name="VirtualEVSEConfigurator">An optional delegate to configure the new EVSE.</param> /// <param name="OnSuccess">An optional delegate for reporting success.</param> /// <param name="OnError">An optional delegate for reporting an error.</param> public static EVSE CreateVirtualEVSE(this ChargingStation ChargingStation, EVSE_Id EVSEId, I18NString Description = null, EVSEAdminStatusTypes InitialAdminStatus = EVSEAdminStatusTypes.Operational, EVSEStatusTypes InitialStatus = EVSEStatusTypes.Available, EnergyMeter_Id?EnergyMeterId = null, String EllipticCurve = "P-256", ECPrivateKeyParameters PrivateKey = null, PublicKeyCertificates PublicKeyCertificates = null, TimeSpan?SelfCheckTimeSpan = null, UInt16 MaxAdminStatusListSize = VirtualEVSE.DefaultMaxAdminStatusListSize, UInt16 MaxStatusListSize = VirtualEVSE.DefaultMaxStatusListSize, Action <EVSE> EVSEConfigurator = null, Action <VirtualEVSE> VirtualEVSEConfigurator = null, Action <EVSE> OnSuccess = null, Action <ChargingStation, EVSE_Id> OnError = null) { #region Initial checks if (ChargingStation == null) { throw new ArgumentNullException(nameof(ChargingStation), "The given charging station must not be null!"); } #endregion return(ChargingStation.CreateEVSE(EVSEId, EVSEConfigurator, newevse => { var virtualevse = new VirtualEVSE(newevse.Id, ChargingStation.RoamingNetwork, Description, InitialAdminStatus, InitialStatus, EnergyMeterId, EllipticCurve, PrivateKey, PublicKeyCertificates, SelfCheckTimeSpan, MaxAdminStatusListSize, MaxStatusListSize); VirtualEVSEConfigurator?.Invoke(virtualevse); return virtualevse; }, OnSuccess: OnSuccess, OnError: OnError)); }
/// <summary> /// Check if the given enumeration of EVSEs and their current status /// contains the given pair of EVSE identification and status. /// </summary> /// <param name="AdminStatus">An enumeration of EVSEs and their current status.</param> /// <param name="Id">An EVSE identification.</param> /// <param name="Status">An EVSE status.</param> public static Boolean Contains(this IEnumerable <EVSEAdminStatus> AdminStatus, EVSE_Id Id, EVSEAdminStatusTypes Status) { foreach (var adminstatus in AdminStatus) { if (adminstatus.Id == Id && adminstatus.Status == Status) { return(true); } } return(false); }
/// <summary> /// Convert a WWCP EVSE status into an eMIP EVSE availability status. /// </summary> /// <param name="EVSEAdminStatusType"></param> /// <returns></returns> public static EVSEAvailabilityStatusTypes ToEMIP(this EVSEAdminStatusTypes EVSEAdminStatusType) { switch (EVSEAdminStatusType) { case EVSEAdminStatusTypes.OutOfService: case EVSEAdminStatusTypes.Blocked: case EVSEAdminStatusTypes.InternalUse: return(EVSEAvailabilityStatusTypes.OutOfOrder); case EVSEAdminStatusTypes.Operational: return(EVSEAvailabilityStatusTypes.InService); case EVSEAdminStatusTypes.Planned: case EVSEAdminStatusTypes.InDeployment: return(EVSEAvailabilityStatusTypes.Future); case EVSEAdminStatusTypes.Deleted: return(EVSEAvailabilityStatusTypes.Deleted); default: return(EVSEAvailabilityStatusTypes.OutOfOrder); } }
/// <summary> /// Set the admin status. /// </summary> /// <param name="Timestamp">The timestamp when this change was detected.</param> /// <param name="NewAdminStatus">A new admin status.</param> public void SetAdminStatus(EVSEAdminStatusTypes NewAdminStatus, DateTime Timestamp) { _AdminStatusSchedule.Insert(NewAdminStatus, Timestamp); }
/// <summary> /// Set the admin status. /// </summary> /// <param name="NewAdminStatus">A new admin status.</param> public void SetAdminStatus(EVSEAdminStatusTypes NewAdminStatus) { _AdminStatusSchedule.Insert(NewAdminStatus); }