arrow-left

All pages
gitbookPowered by GitBook
1 of 25

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Protobuf Contract

// import "nanopb.proto";

package oslp;

option java_package = "org.opensmartgridplatform.oslp";

message Message {
    optional RegisterDeviceRequest registerDeviceRequest = 1;
    optional RegisterDeviceResponse registerDeviceResponse = 2;
    optional StartSelfTestRequest startSelfTestRequest = 3;
    optional StartSelfTestResponse startSelfTestResponse = 4;
    optional StopSelfTestRequest stopSelfTestRequest = 5;
    optional StopSelfTestResponse stopSelfTestResponse = 6;
    optional UpdateFirmwareRequest updateFirmwareRequest = 7;
    optional UpdateFirmwareResponse updateFirmwareResponse = 8;
    optional SetLightRequest setLightRequest = 9;
    optional SetLightResponse setLightResponse = 10;
    optional GetStatusRequest getStatusRequest = 11;
    optional GetStatusResponse getStatusResponse = 12;
    optional ResumeScheduleRequest resumeScheduleRequest = 13;
    optional ResumeScheduleResponse resumeScheduleResponse = 14;
    optional SetEventNotificationsRequest setEventNotificationsRequest = 15;
    optional SetEventNotificationsResponse setEventNotificationsResponse = 16;
    optional EventNotificationRequest eventNotificationRequest = 17;
    optional EventNotificationResponse eventNotificationResponse = 18;
    optional GetFirmwareVersionRequest getFirmwareVersionRequest = 19;
    optional GetFirmwareVersionResponse getFirmwareVersionResponse = 20;
    optional SetScheduleRequest setScheduleRequest = 21;
    optional SetScheduleResponse setScheduleResponse = 22;
    optional SetConfigurationRequest setConfigurationRequest = 25;
    optional SetConfigurationResponse setConfigurationResponse = 26;
    optional GetPowerUsageHistoryRequest getPowerUsageHistoryRequest = 27;
    optional GetPowerUsageHistoryResponse getPowerUsageHistoryResponse = 28;
    optional GetActualPowerUsageRequest getActualPowerUsageRequest = 29;
    optional GetActualPowerUsageResponse getActualPowerUsageResponse = 30;
    optional SetRebootRequest setRebootRequest = 31;
    optional SetRebootResponse setRebootResponse = 32;
    optional SetTransitionRequest setTransitionRequest = 33;
    optional SetTransitionResponse setTransitionResponse = 34;
    optional GetConfigurationRequest getConfigurationRequest = 35;
    optional GetConfigurationResponse getConfigurationResponse = 36;
    optional ConfirmRegisterDeviceRequest confirmRegisterDeviceRequest = 37;
    optional ConfirmRegisterDeviceResponse confirmRegisterDeviceResponse =  38;
    optional UpdateDeviceSslCertificationRequest updateDeviceSslCertificationRequest = 39;
    optional UpdateDeviceSslCertificationResponse updateDeviceSslCertificationResponse = 40;
    optional SetDeviceVerificationKeyRequest setDeviceVerificationKeyRequest = 41;
    optional SetDeviceVerificationKeyResponse setDeviceVerificationKeyResponse = 42;
    optional SwitchFirmwareRequest switchFirmwareRequest = 43;
    optional SwitchFirmwareResponse switchFirmwareResponse = 44;
    optional SwitchConfigurationRequest switchConfigurationRequest = 45;
    optional SwitchConfigurationResponse switchConfigurationResponse = 46;
}

// ========= Device Installation
message RegisterDeviceRequest {
    required string deviceIdentification = 1; // [(nanopb).max_size = 41];
    required bytes ipAddress = 2; // [(nanopb).max_size = 4];
    required DeviceType deviceType = 3;
    required bool hasSchedule = 4;
    required uint32 randomDevice = 5; // 16 bits
}

message RegisterDeviceResponse {
    required Status status = 1;
    required string currentTime = 2; // [(nanopb).max_size = 15];// - Format YYYYMMDDhhmmss UTC.
    required uint32 randomDevice = 3;
    required uint32 randomPlatform = 4;
    optional LocationInfo locationInfo = 5; // Location information of device.
}

message StartSelfTestRequest {
    optional bool present = 1 [default = true];
}

message StartSelfTestResponse {
    required Status status = 1;
}

message StopSelfTestRequest {
    optional bool present = 1 [default = true];
}

message StopSelfTestResponse {
    required Status status = 1;
    required bytes selfTestResult = 2; // [(nanopb).max_size = 1];
}

// ========= Firmware Management
message GetFirmwareVersionRequest {
    optional bool present = 1 [default = true];
}

message GetFirmwareVersionResponse {
    required string firmwareVersion = 1; // [(nanopb).max_size = 7]; // RXX
}

message UpdateFirmwareRequest {
    required string firmwareDomain = 1; // [(nanopb).max_size = 100]; // Server-name without protocol like this example: localhost.
    required string firmwareUrl = 2; // [(nanopb).max_size = 255]; // Relative URL like this example: /firmware/PSLD/RXX.
}

message UpdateFirmwareResponse {
    required Status status = 1;
}

message SwitchFirmwareRequest {
    required string newFirmwareVersion = 1; // [(nanopb).max_size = 6]; // The version of the firmware which should be installed. 
}

message SwitchFirmwareResponse {
    required Status status = 1; // FIRMWARE_EVENTS_ACTIVATING Event will be sent, after the firmware change has completed.
}

// ========= Ad-Hoc & Status
message SetLightRequest {
    repeated LightValue values = 1; // [(nanopb).max_count = 6];
}

message SetLightResponse {
    required Status status = 1;
}

message GetStatusRequest {
    optional bool present = 1 [default = true];
}

message GetStatusResponse {
    required Status status = 1;
    repeated LightValue value = 2; // [(nanopb).max_count = 6];
    required LinkType preferredLinktype = 3;
    required LinkType actualLinktype = 4;
    required LightType lightType = 5;
    required uint32 eventNotificationMask = 6;         // Bitmask for max 32 events, using NotificationBit for bit positions.
    optional uint32 numberOfOutputs = 7;               // Hardware - The number of outputs of this device.
    optional uint32 dcOutputVoltageMaximum = 8;        // Hardware - DC output voltage MAXimum (in mV).
    optional uint32 dcOutputVoltageCurrent = 9;        // Hardware - DC output current voltage (in mV).
    optional uint32 maximumOutputPowerOnDcOutput = 10; // Hardware - Maximum output power on DC output (mW). 
    optional bytes serialNumber = 11; // [(nanopb).max_size = 18]; // Hardware - Serial number of this device.
    optional bytes macAddress = 12; // [(nanopb).max_size = 6]; // Hardware - MAC-address of this device.
    optional string hardwareId = 13; // [(nanopb).min_size = 10, (nanopd).max_size = 25] ; // Hardware - The hardware ID of this device.
    optional uint32 internalFlashMemSize = 14;         // Hardware - The internal flash memory size.
    optional uint32 externalFlashMemSize = 15;         // Hardware - The external flash memory size.
    optional uint32 lastInternalTestResultCode = 16;   // Hardware - The last internal test result code.
    optional uint32 startupCounter = 17;               // Hardware - The startup counter.
    optional string bootLoaderVersion = 18;            // Software - The boot loader version.
    optional string firmwareVersion = 19;              // Software - The firmware version.
    optional bytes currentConfigurationBackUsed = 20; // [(nanopb).max_size = 6]; // Software - The current configuration bank in use.
    optional string name = 21;                         // Device - The name of this device.
    optional string currentTime = 22;                  // Device - Not UTC, the time used in timing operations (adjusted "offset" + summer timing). YYYYMMDDhhmmss format.
    optional string currentIp = 23;                    // Device - The current IP address of this device.
}

message ResumeScheduleRequest {
    optional bytes index = 1; // [(nanopb).max_size = 1]; // Index number of connected light (DALI), none means all connected lights.
    required bool immediate = 2; // [default = true];     // Resume at next schedule item or direct.
}

message ResumeScheduleResponse {
    required Status status = 1;
}

message SetRebootRequest {
    optional bool present = 1 [default = true];
}

message SetRebootResponse {
    required Status status = 1;
}

message SetTransitionRequest {
    required TransitionType transitionType = 1; // Night-Day or Day-Night transition.
    optional string time = 2; // [(nanopb).max_size = 7]; // - Format hhmmss UTC.
}

message SetTransitionResponse {
    required Status status = 1;
}

message SetEventNotificationsRequest {
    required uint32 NotificationMask = 1; // Bitmask for max 32 events, using NotificationBit for bit positions.
}

message SetEventNotificationsResponse {
    required Status status = 1;
}

message EventNotificationRequest {
    repeated EventNotification notifications = 1; // [(nanopb).max_count = 6];
}

message EventNotificationResponse {
    required Status status = 1;
}

// ========= Scheduling
message SetScheduleRequest {
    repeated Schedule schedules = 1; // [(nanopb).max_count = 50];
    optional PageInfo pageInfo = 2;
    required RelayType scheduleType = 3; // RT_NOT_SET is NOT supported!
}

message SetScheduleResponse {
    required Status status = 1;
}

// ========= Configuration
message SetConfigurationRequest {
    optional LightType lightType = 1;
    optional DaliConfiguration daliConfiguration = 2;                                    // Contains specific configuration for DALI controllers.
    optional RelayConfiguration relayConfiguration = 3;                                  // Contains specific configuration for Relay.
    optional uint32 shortTermHistoryIntervalMinutes = 4;                                 // Deprecated, no longer supported by the platform.
    optional LinkType preferredLinkType = 5;
    optional MeterType meterType = 6;                                                    // Deprecated, no longer supported by the platform.
    optional uint32 longTermHistoryInterval = 7;                                         // Deprecated, no longer supported by the platform.
    optional LongTermIntervalType longTermHistoryIntervalType = 8;                       // Deprecated, no longer supported by the platform.
    optional uint32 timeSyncFrequency = 9 [default = 86400];                             // Time synch frequency (seconds).
    optional bytes deviceFixIpValue = 10; // [(nanopb).max_count = 4];                   // The fixed IP address of this device.
    optional bytes netMask = 11; // [(nanopb).max_count = 4];                            // Network mask for fixed IP address.
    optional bytes gateWay = 12; // [(nanopb).max_count = 4];                            // Gateway address for fixed IP address.
    optional bool isDhcpEnabled = 13 [default = true];                                   // Is DHCP enabled for this device?
//    optional bool isTlsEnabled = 14;                                                     // Defines if TLS is enabled.
//    optional uint32 oslpBindPortNumber = 15;                                             // The port used for TLS connections.
//    optional string commonNameString = 16 [default = 'TLS Test']; //[default = 'TLS Test',(nanopb).max_count = 25]; // The common name (CN) used when isTlsEnabled equals true.
    optional uint32 communicationTimeout = 14 [default = 20];                            // Communication Timeouts (seconds) (wait for answer, socket establish, or server response = comm watchdog for local mode).
    optional uint32 communicationNumberOfRetries = 15 [default = 3];                     // Communication number of retries.
    optional uint32 communicationPauseTimeBetweenConnectionTrials = 16 [default = 60];   // Time between communication attempts.
    optional bytes ospgIpAddress = 17; // [(nanopb).max_count = 4];                      // The IP address of the platform.
    optional uint32 osgpPortNumber = 18;                                                 // The port number of the platform.
    optional bool isTestButtonEnabled = 19 [default = true];                             // Is the test button enabled for this device?
    optional bool isAutomaticSummerTimingEnabled = 20 [default = true];                  // Is the automatic summer timing enabled for this device?
    optional sint32 astroGateSunRiseOffset = 21 [default = 0];                           // The calculated sunrise time modified by this value. Time is moved earlier (if offset is negative) or later (if offset is positive). In seconds.
    optional sint32 astroGateSunSetOffset = 22 [default = 0];                            // The calculated sunset time modified by this value. Time is moved earlier (if offset is negative) or later (if offset is positive). In seconds.
    repeated uint32 switchingDelay = 23; // [(nanopb).max_count = 4];                    // Switching delay (seconds), array of 4 values. Default 0, 0, 0, 0.
    repeated RelayMatrix relayLinking = 24;                                              // Relay linking is a software linking, to may link each relay with each other relay. It is a matrix. Example, if relay 1 is linked with relay 3, if relay 1 will be switched (by OSGP or local by internal scheduler), the relay 3 will switch automatically (on or off, as it set) without new command.
    optional bool relayRefreshing = 25 [default = true];                                 // Is relayRefreshing enabled for this device? Set minutely the nominal relay state and status according to active schedule after power outage and missed switching or anti manipulation.
    optional string summerTimeDetails = 26 [default = '0360100']; //[default = '0360100',(nanopb).max_count = 7]; // The time point for DST for Europe is not identical in every country. It should be added as parameters the weekday, month and time point for DST/summer and winter.
    optional string winterTimeDetails = 27 [default = '1060200']; //[default = '1060200',(nanopb).max_count = 7]; // The time point for DST for Europe is not identical in every country. It should be added as parameters the weekday, month and time point for DST/summer and winter.
}
// summerTimeDetails string, winterTimeDetails:
//MMWHHmi
//
//where: (note, north hemisphere summer begins at the end of march)
//MM: month
//W:  day of the week (0- Monday, 6- Sunday)
//HH: hour of the changing time
//mi: minutes of the changing time

message SetConfigurationResponse {
    required Status status = 1;
}

message GetConfigurationRequest {
    optional bool present = 1 [default = true];
}

message GetConfigurationResponse {
    required Status status = 1;
    optional LightType lightType = 2;
    optional DaliConfiguration daliConfiguration = 3;                                    // Contains specific configuration for DALI controllers.
    optional RelayConfiguration relayConfiguration = 4;                                  // Contains specific configuration for Relay.
    optional uint32 shortTermHistoryIntervalMinutes = 5;                                 // Deprecated, no longer supported by the platform.
    optional LinkType preferredLinkType = 6;
    optional MeterType meterType = 7;                                                    // Deprecated, no longer supported by the platform.
    optional uint32 longTermHistoryInterval = 8;                                         // Deprecated, no longer supported by the platform.
    optional LongTermIntervalType longTermHistoryIntervalType = 9;                       // Deprecated, no longer supported by the platform.
    optional uint32 timeSyncFrequency = 10 [default = 86400];                            // Time synch frequency (seconds).
    optional bytes deviceFixIpValue = 11; // [(nanopb).max_count = 4];                   // The fixed IP address of this device.
    optional bytes netMask = 12; // [(nanopb).max_count = 4];                            // Network mask for fixed IP address.
    optional bytes gateWay = 13; // [(nanopb).max_count = 4];                            // Gateway address for fixed IP address.
    optional bool isDhcpEnabled = 14 [default = true];                                   // Is DHCP enabled for this device?
//    optional bool isTlsEnabled = 15;                                                     // Defines if TLS is enabled.
//    optional uint32 oslpBindPortNumber = 16;                                             // The port used for TLS connections.
//    optional string commonNameString = 17 [default = 'TLS Test']; //[default = 'TLS Test',(nanopb).max_count = 25]; // The common name (CN) used when isTlsEnabled equals true.
    optional uint32 communicationTimeout = 15 [default = 20];                            // Communication Timeouts (seconds) (wait for answer, socket establish, or server response = comm watchdog for local mode).
    optional uint32 communicationNumberOfRetries = 16 [default = 3];                     // Communication number of retries.
    optional uint32 communicationPauseTimeBetweenConnectionTrials = 17 [default = 60];   // Time between communication attempts.
    optional bytes ospgIpAddress = 18; // [(nanopb).max_count = 4];                      // The IP address of the platform.
    optional uint32 osgpPortNumber = 19;                                                 // The port number of the platform.
    optional bool isTestButtonEnabled = 20 [default = true];                             // Is the test button enabled for this device?
    optional bool isAutomaticSummerTimingEnabled = 21 [default = true];                  // Is the automatic summer timing enabled for this device?
    optional sint32 astroGateSunRiseOffset = 22 [default = 0];                           // The calculated sunrise time modified by this value. Time is moved earlier (if offset is negative) or later (if offset is positive). In seconds.
    optional sint32 astroGateSunSetOffset = 23 [default = 0];                            // The calculated sunset time modified by this value. Time is moved earlier (if offset is negative) or later (if offset is positive). In seconds.
    repeated uint32 switchingDelay = 24; // [(nanopb).max_count = 4];                    // Switching delay (seconds), array of 4 values. Default 0, 0, 0, 0.
    repeated RelayMatrix relayLinking = 25;                                              // Relay linking is a software linking, to may link each relay with each other relay. It is a matrix. Example, if relay 1 is linked with relay 3, if relay 1 will be switched (by OSGP or local by internal scheduler), the relay 3 will switch automatically (on or off, as it set) without new command.
    optional bool relayRefreshing = 26 [default = true];                                 // Is relayRefreshing enabled for this device? Set minutely the nominal relay state and status according to active schedule after power outage and missed switching or anti manipulation.
    optional string summerTimeDetails = 27 [default = '0360100']; //[default = '0360100',(nanopb).max_count = 7]; // The time point for DST for Europe is not identical in every country. It should be added as parameters the weekday, month and time point for DST/summer and winter.
    optional string winterTimeDetails = 28 [default = '1060200']; //[default = '1060200',(nanopb).max_count = 7]; // The time point for DST for Europe is not identical in every country. It should be added as parameters the weekday, month and time point for DST/summer and winter.
}

message SwitchConfigurationRequest {
    required bytes newConfigurationSet = 1; // [(nanopb).max_count = 1]; // The index of the configuration set (0,1).
}

message SwitchConfigurationResponse {
    required Status status = 1; // FIRMWARE_EVENTS_CONFIGURATION_CHANGED Event will be sent, after the Configuration change.
}

message ConfirmRegisterDeviceRequest {
    required uint32 randomDevice = 1;
    required uint32 randomPlatform = 2;
}

message ConfirmRegisterDeviceResponse {
    required Status status = 1;
    required uint32 randomDevice = 2;
    required uint32 randomPlatform = 3;
    required uint32 sequenceWindow = 4;
}

// ========= Monitoring

// Deprecated, no longer supported by the platform.
message GetPowerUsageHistoryRequest {
    required TimePeriod timePeriod = 1;
    optional uint32 page = 2;
    required HistoryTermType termType = 3;
}

// Deprecated, no longer supported by the platform.
message GetPowerUsageHistoryResponse {
    required Status status = 1;
    repeated PowerUsageData powerUsageData = 2; // [(nanopb).max_count = 20]; 
    optional PageInfo pageInfo = 3;
}

// Deprecated, no longer supported by the platform.
message GetActualPowerUsageRequest {
    optional bool present = 1 [default = true];
}

// Deprecated, no longer supported by the platform.
message GetActualPowerUsageResponse {
    required Status status = 1;
    required PowerUsageData powerUsageData = 2;
}

// ========= Certificate Management
message UpdateDeviceSslCertificationRequest {
    required string certificateDomain = 1; // [(nanopb).max_size = 100]; // The domain name of the certificate Server.
    required string certificateUrl = 2; // [(nanopb).max_size = 255];    // The relative path of the certificate.
}

message UpdateDeviceSslCertificationResponse {
    required Status status = 1;
}

// ========= Key Management
message SetDeviceVerificationKeyRequest {
    required bytes certificateChunk = 1; // [(nanopb).max_size = 138]; // Verification key / public key of the platform to check the validity of an incoming message.
}

message SetDeviceVerificationKeyResponse {
    required Status status = 1;
}

// ========= Types
message LocationInfo {
    optional sint32 timeOffset = 1; // Correction in minutes with respect to UTC.
    optional sint32 latitude = 2;   // Divide by 1000000 to get float value.
    optional sint32 longitude = 3;  // Divide by 1000000 to get float value.
}

message LightValue {
    optional bytes index = 1; // [(nanopb).max_size = 1]; // Index number of connected light (DALI), none means all connected lights.
    required bool on = 2;
    optional bytes dimValue = 3; // [(nanopb).max_size = 1]; // 1 - 100 %
}

message EventNotification {
    required Event event = 1;
    optional bytes index = 2; // [(nanopb).max_size=1];
    optional string description = 3; // [(nanopb).max_size = 81];
    optional string timestamp = 4; // [(nanopb).max_size = 15]; // - Format YYYYMMDDhhmmss UTC, indicates the date and time of the event.
}

message Schedule {
    required Weekday weekday = 1;
    optional string startDay = 2; // [(nanopb).max_size = 9]; //- Format YYYYMMDD UTC, indicates the range of a schedule entry, from startDay.
    optional string endDay = 3; // [(nanopb).max_size = 9]; // - Format YYYYMMDD UTC, including endDay.
    required ActionTime actionTime = 4;
    optional string time = 5; // [(nanopb).max_size = 7]; // - Format hhmmss localtime set when actionTime = ABSOLUTETIME.
    optional Window window = 6;           // Window to wait for light sensor trigger.
    repeated LightValue value = 7; // [(nanopb).max_count = 6];
    optional TriggerType triggerType = 8; // React to setTransition or switch astronomical.
    optional uint32 minimumLightsOn = 9;  // Minimal time (in seconds) the lights should burn before deciding to switch the lights on.
    optional uint32 index = 10;           // Index of schedule entry in the schedule list.
    optional bool isEnabled = 11;         // Is this schedule entry enabled?
}

message Window {
    required uint32 minutesBefore = 1; // Minutes before sunset / sunrise.
    required uint32 minutesAfter = 2;  // Minutes after sunset / sunrise.
}

message DaliConfiguration {
    optional bytes numberOfLights = 1; // [(nanopb).max_size = 1]; // Number of lights connected to DALI controller.
    repeated IndexAddressMap addressMap = 2; // [(nanopb).max_count = 4];
}

message RelayConfiguration {
    repeated IndexAddressMap addressMap = 1; // [(nanopb).max_count = 6];
}

message RelayMatrix {
    required bytes masterRelayIndex = 1;  // [(nanopb).max_count = 1];
    required bool masterRelayOn = 2; // [(nanopb).max_count = 1];
    optional bytes indicesOfControlledRelaysOn = 3; // [(nanopb).max_count = 4];  // IndexNumber of output Relay to switch ON if Master Relay state changes as determined by masterRelayOn.
    optional bytes indicesOfControlledRelaysOff = 4; // [(nanopb).max_count = 4]; // IndexNumber of output Relay to switch OFF if Master Relay sate changes as determined by MasterRelayOff.
}

message IndexAddressMap {
    required bytes index = 1; // [(nanopb).max_size = 1];   // External index, for example 1.
    required bytes address = 2; // [(nanopb).max_size = 1]; // Internal address, for example 2.
    required RelayType relayType = 3;
}

message PageInfo {
    required uint32 currentPage = 1; // Pages start from 1.
    required uint32 pageSize = 2;
    required uint32 totalPages = 3;
}

// Deprecated, no longer supported by the platform.
message TimePeriod {
    required string startTime = 1; // [(nanopb).max_size = 15]; // - Format YYYYMMDDhhmmss UTC.
    required string endTime = 2; // [(nanopb).max_size = 15];   // - format YYYYMMDDhhmmss UTC.
}

// Deprecated, no longer supported by the platform.
message PowerUsageData {
    required string recordTime = 1; // [(nanopb).max_size = 15];    // Record time - format YYYYMMDDhhmmss UTC.
    required MeterType meterType = 2;                               // Meter type (P1, Pulse, Aux).
    required uint64 totalConsumedEnergy = 3;                        // Electricity delivered to client (Tariff I + Tarrif II) in 0,001 kWh.
    required uint32 actualConsumedPower = 4;                        // Actual Electricity power delivered in W.
    optional PsldData psldData = 5;
    optional SsldData ssldData = 6;
}

message PsldData {
    required uint32 totalLightingHours = 1; // Total lighting hours
}

// Deprecated, no longer supported by the platform.
message SsldData {
    required uint32 actualCurrent1 = 1;             // Instantaneous current L1 in mA.
    required uint32 actualCurrent2 = 2;             // Instantaneous current L2 in mA.
    required uint32 actualCurrent3 = 3;             // Instantaneous current L3 in mA.
    required uint32 actualPower1 = 4;               // Instantaneous active power L1 in W.
    required uint32 actualPower2 = 5;               // Instantaneous active power L2 in W.
    required uint32 actualPower3 = 6;               // Instantaneous active power L3 in W.
    required uint32 averagePowerFactor1 = 7;        // Power factor L1 (in 1/2^32) in steps of 0.1, 10 equals a power factor of 1.
    required uint32 averagePowerFactor2 = 8;        // Power factor L2 (in 1/2^32) in steps of 0.1, 10 equals a power factor of 1.
    required uint32 averagePowerFactor3 = 9;        // Power factor L3 (in 1/2^32) in steps of 0.1, 10 equals a power factor of 1.
    repeated RelayData relayData = 10; // [(nanopb).max_count = 4]; // Measurement data per relay.
}

// Deprecated, no longer supported by the platform.
message RelayData {
    required bytes index = 1; // [(nanopb).max_size = 1]; // external index, for example 1
    required uint32 totalLightingMinutes = 2; // Total lighting minutes for lighting relay
}

// ========= Enumerations

// ========= Event Notification
enum NotificationBit {
    DIAG_EVENTS = 1;
    HARDWARE_FAILURE = 2;
    LIGHT_EVENTS = 4;      // For example LightValue changes.
    TARIFF_EVENTS = 8;     // For example Tariff changes.
    MONITOR_EVENTS = 16;   // For example monitor buffer is almost full.
    FIRMWARE_EVENTS = 32;  // For example firmware activation.
    COMM_EVENTS = 64;      // For example alternative channel.
    SECURITY_EVENTS = 128; // For example out of sequence.
}

//Events must map to their notification bit:
//EG: 0000-0999 =1
//    1000-1999 =2
//    2000-2999 =4
//    3000-3999 =8
//    4000-4999 =16
//    5000-5999 =32
//    6000-6999 =64
//    7000-7999 =128
// OR to check  2^((event num)/1000)=notification bit

enum Event {
    // 0 - 999 Diagnostics
    DIAG_EVENTS_GENERAL = 0;              // Multi-purpose event, see description of event notification for more information.
    DIAG_EVENTS_UNKNOWN_MESSAGE_TYPE = 1; // Message type unknown by device.

    // 1000 - 1999 Hardware Failures
    HARDWARE_FAILURE_RELAY = 1000;                // Index indicates relay (not supported yet).
    HARDWARE_FAILURE_FLASH_WRITE_ERROR = 1001;    // Error while writing to flash memory.
    HARDWARE_FAILURE_FLASH_MEMORY_CORRUPT = 1002; // Error while reading from flash memory, flash memory corrupt.
    HARDWARE_FAILURE_RTC_NOT_SET = 1003;          // Real Time Clock has not set.

    // 2000 - 2999 Light Events
    LIGHT_EVENTS_LIGHT_ON = 2000;               // Index indicates light.
    LIGHT_EVENTS_LIGHT_OFF = 2001;              // Index indicates light.
    LIGHT_FAILURE_DALI_COMMUNICATION = 2500;    // DALI communication failure.
    LIGHT_FAILURE_BALLAST = 2501;               // Ballast failure detected (DALI only).
    LIGHT_FAILURE_TARIFF_SWITCH_ATTEMPT = 2502; // Attempt to switch an end-point configured as tariff from OVL schedule or manual override (index indicates end-point).

    // 3000 - 3999 Tariff Events
    TARIFF_EVENTS_TARIFF_ON = 3000;  // Tariff switched on.
    TARIFF_EVENTS_TARIFF_OFF = 3001; // Tariff switched off.

    // 4000 - 4999
    MONITOR_EVENTS_LONG_BUFFER_FULL = 4000;  // Long term monitoring buffer overrun occurred.
    MONITOR_FAILURE_P1_COMMUNICATION = 4500; // P1 meter could not be read.
    MONITOR_SHORT_DETECTED = 4600;           // A short has been detected.
    MONITOR_SHORT_RESOLVED = 4601;           // A short has been resolved.
    MONITOR_DOOR_OPENED = 4700;              // Indicates that the enclose of the has been opened. 
    MONITOR_DOOR_CLOSED = 4701;              // Indicates that the enclosure of the device has been closed.
    MONITOR_EVENTS_TEST_RELAY_ON = 4702;     // Relay was switched on by self-test function.
    MONITOR_EVENTS_TEST_RELAY_OFF = 4703;    // Relay was switched off by self-test function.
    MONITOR_EVENTS_LOSS_OF_POWER = 4800;     // The device had a power outage.
    MONITOR_EVENTS_LOCAL_MODE = 4900;        // Device switched to local mode.
    MONITOR_EVENTS_REMOTE_MODE = 4901;       // Device switched to remote mode.

    // 5000 - 5999 Firmware Events
    FIRMWARE_EVENTS_ACTIVATING = 5000;            // Start activating new firmware, after downloading. Or indicates that the device has switched from one firmware bank to another.
    FIRMWARE_EVENTS_DOWNLOAD_NOTFOUND = 5501;     // Download of firmware failed, i.e. location incorrect.
    FIRMWARE_EVENTS_DOWNLOAD_FAILED = 5502;       // Download of firmware failed, image incorrect.
    FIRMWARE_EVENTS_CONFIGURATION_CHANGED = 5503; // Configuration changed from one bank to other (after request from platform).

    // 6000 – 6999
    COMM_EVENTS_ALTERNATIVE_CHANNEL = 6000; // Alternative channel selected for communication (description contains selected channel GPRS/CDMA/Ethernet).
    COMM_EVENTS_RECOVERED_CHANNEL = 6001;   // Communication has been recovered for this channel.

    // 7000 - 7999
    SECURITY_EVENTS_OUT_OF_SEQUENCE = 7000;          // Out of sequence occurred and sequence number is renegotiated.
    SECURITY_EVENTS_OSLP_VERIFICATION_FAILED = 7001; // OSLP message could not be verified.
    SECURITY_EVENTS_INVALID_CERTIFICATE = 7002;      // Invalid TLS certificate.
}

// ========= Enums
enum TriggerType {
    TT_NOT_SET = 0;
    LIGHT_TRIGGER = 1;
    ASTRONOMICAL = 2;
}

enum TransitionType {
    NIGHT_DAY = 0;
    DAY_NIGHT = 1;
}

enum Weekday {
    MONDAY = 1;
    TUESDAY = 2;
    WEDNESDAY = 3;
    THURSDAY = 4;
    FRIDAY = 5;
    SATURDAY = 6;
    SUNDAY = 7;
    WEEKDAY = 8;
    WEEKEND = 9;
    ABSOLUTEDAY = 10;
    ALL = 11;
}

enum ActionTime {
    ABSOLUTETIME = 1;
    SUNRISE = 2;
    SUNSET = 3;
}

enum DeviceType {
    PSLD = 0;
    SSLD = 1;
}

enum Status {
    OK = 0;
    FAILURE = 1;  // General failure.
    REJECTED = 2; // Request received in wrong state.
}

enum LightType {
    LT_NOT_SET = 0;
    RELAY = 1;
    ONE_TO_TEN_VOLT = 2;
    ONE_TO_TEN_VOLT_REVERSE = 3;
    DALI = 4;
}

enum RelayType {
    RT_NOT_SET = 0;
    LIGHT = 1;
    TARIFF = 2;
}

// Deprecated, no longer supported by the platform.
enum MeterType {
    MT_NOT_SET = 0;
    P1 = 1;
    PULSE = 2;
    AUX = 3;
}

enum LinkType {
    LINK_NOT_SET = 0;
    GPRS = 1;
    CDMA = 2;
    ETHERNET = 3;
}

// Deprecated, no longer supported by the platform.
enum LongTermIntervalType {
    LT_INT_NOT_SET = 0;
    DAYS = 1;
    MONTHS = 2;
}

// Deprecated, no longer supported by the platform.
enum HistoryTermType {
    Short = 0;
    Long = 1;
}

Protobuf Contract

OSLP v0.5.1

NOTE: OSLP v0.5.1 is deprecated.

Contract for

OSLP

hashtag
OSLP Documentation

hashtag
The Open Street Light Protocol

The OSLP is a lightweight message based protocol. OSLP uses

RegisterDevice

hashtag
Description

The device registration is a 2 step process. First RegisterDeviceRequest and RegisterDeviceResponse are exchanged between device and platform. Second are exchanged.

Request that notifies the platform a device which wants to register. During the registration the sequence number is reset to a random value the platform is notified if the device has a light schedule, the type of the device, the device identification, and the device communicates its IP address to the platform. Also a random number is determined by the device and this 'randomDevice' should be present in the response form the platform.

ConfirmRegisterDevice

hashtag
Description

Request which contains the 2 random numbers from RegisterDeviceRequest and RegisterDeviceResponse. The numbers should match with the previous request and response and this is checked by the platform.

Response which contains the sequenceWindow which is the maximum allowed difference between sequence numbers for future messages. Further the response contains the 2 random numbers from the ConfirmRegisterDeviceRequest. The numbers should match with the previous request and response and this is checked by the device.

OSLP v0.6.1

Contract for The contract specifies the messages which can be exchanged with an SSLD.

hashtag
Messages

These messages below are part of OSLP v0.6.1. Note that OSLP v0.6.1 is backwards compatible with OSLP v0.5.1. Therefore, v0.6.1 offers the same RegisterDeviceRequest as v0.5.1 for example.

SetConfiguration

hashtag
Description

Request to push configuration settings to a device.

Response communicates status.

EventNotification

hashtag
Description

Request sent from device to platform containing information about 1 to 6 events.

Response sent from platform to 'device-01' communicates status.

v0.5.1
RegisterDeviceRequest (from device to platform) is a request that notifies the platform a device which wants to register. During the registration the sequence number is reset to a random value, the platform is notified if the device has a light schedule, the type of the device, the device identification, and the device communicates its IP address to the platform.
  • RegisterDeviceResponse (from platform to device) is a response which holds the time of the platform so the device can synchronize the time, contains location information for the device like GPS coordinates and Day Light Saving time information. The device will sent ConfirmRegisterDeviceRequest after receiving the RegisterDeviceResponse.

  • ConfirmRegisterDeviceRequest (from device to platform) is a request that notifies the platform that a device wants to perform the second step of the registration process.

  • ConfirmRegisterDeviceResponse (from platform to device) is a response which confirms the ConfirmRegisterDeviceRequest has been executed or rejected.

  • StartSelfTestRequest (from platform to device) is a request that notifies the device to switch all relays on.

  • StartSelfTestResponse (from device to platform) is a response which confirms the StartSelfTestRequest has been executed or rejected.

  • StopSelfTestRequest (from platform to device) is a request that notifies the device to switch all relays off.

  • StopSelfTestResponse (from device to platform) is a response which confirms the StopSelfTestRequest has been executed or rejected.

  • UpdateFirmwareRequest (from platform to device) is a request which notifies the device to download a new firmware version from a server using a URL.

  • UpdateFirmwareResponse (from device to platform) is a response which confirms the UpdateFirmwareRequest has been executed or rejects the UpdateFirmwareRequest. Please note there are several events which are sent from the device to the platform to inform the platform when the firmware has been downloaded and whether or not the firmware was successfully activated.

  • SetLightRequest (from platform to device) is a request that notifies the device to switch on or off one ore several light relays, optionally with a dim-value per relay.

  • SetLightResponse (from device to platform) is a response which confirms the SetLightRequest has been executed or rejected.

  • GetStatusRequest (from platform to device) is a request that requires the device to send the status of all relays, current network link and preferred network link, the type of configuration (PSLD vs SSLD), and the event notification mask which has been set.

  • GetStatusResponse (from device to platform) is a response which confirms the GetStatusRequest has been executed and returns the current status for all of the relays and other information or rejects the GetStatusRequest.

  • ResumeScheduleRequest (from platform to device) is a request that notifies the device to continue the current schedule after the current schedule was interrupted (for example by switching by hand using SetLightRequest). This request can operate on a single relay or on all relays and the resuming of the schedule can be immediate or at the next schedule-entry.

  • ResumeScheduleResponse (from device to platform) is a response which confirms the ResumeScheduleRequest has been executed or rejected.

  • SetEventNotificationsRequest (from platform to device) is a request that sets the event notification mask.

  • SetEventNotificationsResponse (from device to platform) is a response which confirms the SetEventNotifications request has been executed or rejected.

  • EventNotificationRequest (from device to platform) is a request that pushes an event notification from a device to the platform.

  • EventNotificationResponse (from platform to device) is a response which confirms the EventNotificationRequest has been executed or rejected.

  • GetFirmwareVersionRequest (from platform to device) is a request that requests the device to sent its current firmware version.

  • GetFirmwareVersionResponse (from device to platform) is a response that sends the current firmware version to the platform.

  • SetScheduleRequest (from platform to device) is a request that sends a light or tariff schedule to the device.

  • SetScheduleResponse (from device to platform) is a response which confirms the SetScheduleRequest has been executed or rejected.

  • SetConfigurationRequest (from platform to device) is a request that sends configuration settings to the device.

  • SetConfigurationResponse (from device to platform) is a response which confirms the SetConfigurationRequest has been executed or rejected.

  • GetConfigurationRequest (from platform to device) is a request that requests the device to send its current configuration settings.

  • GetConfigurationResponse (from device to platform) is a response which confirms the GetConfigurationRequest has been executed or rejected.

  • SetRebootRequest (from platform to device) is a request that notifies the device to reboot immediately.

  • SetRebootResponse (from device to platform) is a response which confirms the SetRebootRequest has been executed or rejected.

  • SetTransitionRequest (from platform to device) is a request that notifies the device to switch its light relays according to light measurement schedule-entries.

  • SetTransitionResponse (from device to platform) is a response which confirms the SetTransitionRequest has been executed or rejected.

  • UpdateDeviceSslCertification (from platform to device) is a request which commands a device to download a new certificate file from a server using a URL.

  • UpdateDeviceSslCertification (from platform to device) is a response which returns the result of the UpdateFirmwareRequest. Please note there are several events which are sent from the device to the platform to inform the platform whether or not the certificate file was successfully downloaded and activated.

  • SetDeviceVerificationKeyRequest (from platform to device) is a request which sends a new OSGP public key to the device.

  • SetDeviceVerificationKeyResponse (from platform to device) is a response which returns the result of the SetDeviceVerificationKeyRequest.

  • SwitchFirmwareRequest (from platform to device) is a request which commands the device to switch to the other firmware bank.

  • SwitchFirmwareResponse (from platform to device) is a response which returns the result of the SwitchFirmwareRequest.

  • SwitchConfigurationRequestarrow-up-right (from platform to device) is a request which commands the device to switch to the other configuration bank.

  • SwitchConfigurationResponsearrow-up-right (from platform to device) is a response which returns the result of the SwitchConfigurationRequest.

  • v0.6.1
    and is used for communication with SSLD devices (and device simulators). It is defined as a contract/interface. The interface defines datatypes and messages which use those data types. Google Protocol Buffers is used to generate the protocol implementations for Java (for the platform) and C/C++ (for the SSLD devices).

    Open street light protocol does not use ASN.1 but Google Protocol Buffers. The main reason for this is the lack of a good quality free ASN.1 compiler for Java or C. Google Protocol Buffers offers a fast and free compiler for Java and C which produces small message sizes.

    hashtag
    Protocol security

    • Public/private key pair

    • Signing of messages through Elliptic Curve DSA 256 bit

      ** Integrity of the message is ensured

      ** Sender identity is ensured

      ** No encryption, because content is not confidential

    • Replay attack prevention

    Special note on Java security provider:

    When both the DLMS and OSLP providers are deloyed within the same Java VM, the SunEC provider will not work properly. To workaround this issue, the SunPKCS11-NSS provider must be used for the OSLP protocol adapter. By default this provider is enabled on the development VM.

    hashtag
    OSLP v0.5.1 (Deprecated)

    The protobuf contract for OSLP v0.5.1. For v0.5.1 port number 12121 is used.

    hashtag
    OSLP v0.6.1

    The protobuf contract for OSLP v0.6.1. For v0.6.1 port number 12122 is used.

    hashtag
    OSLP Envelope

    The requests and responses are sent using an OSLP envelope. This structure contains the following fields: securityKey, sequenceNumber, deviceId and payloadMessage. The first 3 field are byte arrays, the payloadMessage is a protobuf type which is serializable.

    Google Protocol Buffersarrow-up-right
    Response which holds the time of the platform so the device can synchronize the time, contains location information for the device like GPS coordinates and Daylight Saving Time information. The device will sent ConfirmRegisterDeviceRequest after receiving the RegisterDeviceResponse. Also a random number is determined by the platform and this 'randomPlatform' should be present in the next request 'ConfirmRegisterDeviceRequest' by the device.

    hashtag
    Message definitions

    hashtag
    Datatypes

    hashtag
    Example

    OSLP RegisterDeviceRequest sent from 'device-01' to platform:

    OSLP RegisterDeviceResponse sent from platform to 'device-01':

    ConfirmRegisterDeviceRequest and ConfirmRegisterDeviceResponse messages
    registerDeviceRequest {
      deviceIdentification: "device-01"
      ipAddress: "#\000\000\001"
      deviceType: SSLD
      hasSchedule: false
      randomDevice: 13246
    }
    hashtag
    Message definitions

    hashtag
    Datatypes

    hashtag
    Example

    OSLP ConfirmRegisterDeviceRequest sent from 'device-01' to platform:

    OSLP ConfirmRegisterDeviceResponse sent from platform to 'device-01':

    message ConfirmRegisterDeviceRequest {
        required uint32 randomDevice = 1;
        required uint32 randomPlatform = 2;
    }
    
    message ConfirmRegisterDeviceResponse {
        required Status status = 1;
        required uint32 randomDevice = 2;
        required uint32 randomPlatform = 3;
        required uint32 sequenceWindow = 4;
    }
    hashtag
    Message definitions

    hashtag
    Datatypes

    hashtag
    Example

    Soap requests and responses sent to and from platform:

    OSLP SetConfigurationRequest sent to 'device-01':

    OSLP SetConfigurationResponse sent to platform:

    setConfigurationResponse {
      status: OK
    }
    hashtag
    Message definitions

    hashtag
    Datatypes

    hashtag
    Example

    OSLP request sent from 'device-01' to platform:

    OSLP response sent to 'device-01':

    message EventNotificationRequest {
        repeated EventNotification notifications = 1; // [(nanopb).max_count = 6];
    }
    
    message EventNotificationResponse {
        required Status status = 1;
    }
    // import "nanopb.proto";
    
    package oslp;
    
    option java_package = "org.opensmartgridplatform.oslp";
    
    message Message {
        optional RegisterDeviceRequest registerDeviceRequest = 1;
        optional RegisterDeviceResponse registerDeviceResponse = 2;
        optional StartSelfTestRequest startSelfTestRequest = 3;
        optional StartSelfTestResponse startSelfTestResponse = 4;
        optional StopSelfTestRequest stopSelfTestRequest = 5;
        optional StopSelfTestResponse stopSelfTestResponse = 6;
        optional UpdateFirmwareRequest updateFirmwareRequest = 7;
        optional UpdateFirmwareResponse updateFirmwareResponse = 8;
        optional SetLightRequest setLightRequest = 9;
        optional SetLightResponse setLightResponse = 10;
        optional GetStatusRequest getStatusRequest = 11;
        optional GetStatusResponse getStatusResponse = 12;
        optional ResumeScheduleRequest resumeScheduleRequest = 13;
        optional ResumeScheduleResponse resumeScheduleResponse = 14;
        optional SetEventNotificationsRequest setEventNotificationsRequest = 15;
        optional SetEventNotificationsResponse setEventNotificationsResponse = 16;
        optional EventNotificationRequest eventNotificationRequest = 17;
        optional EventNotificationResponse eventNotificationResponse = 18;
        optional GetFirmwareVersionRequest getFirmwareVersionRequest = 19;
        optional GetFirmwareVersionResponse getFirmwareVersionResponse = 20;
        optional SetScheduleRequest setScheduleRequest = 21;
        optional SetScheduleResponse setScheduleResponse = 22;
        optional SetConfigurationRequest setConfigurationRequest = 25;
        optional SetConfigurationResponse setConfigurationResponse = 26;
        optional GetPowerUsageHistoryRequest getPowerUsageHistoryRequest = 27;
        optional GetPowerUsageHistoryResponse getPowerUsageHistoryResponse = 28;
        optional GetActualPowerUsageRequest getActualPowerUsageRequest = 29;
        optional GetActualPowerUsageResponse getActualPowerUsageResponse = 30;
        optional SetRebootRequest setRebootRequest = 31;
        optional SetRebootResponse setRebootResponse = 32;
        optional SetTransitionRequest setTransitionRequest = 33;
        optional SetTransitionResponse setTransitionResponse = 34;
        optional GetConfigurationRequest getConfigurationRequest = 35;
        optional GetConfigurationResponse getConfigurationResponse = 36;
        optional ConfirmRegisterDeviceRequest confirmRegisterDeviceRequest = 37;
        optional ConfirmRegisterDeviceResponse confirmRegisterDeviceResponse =  38;
    }
    
    // ========= Device Installation
    message RegisterDeviceRequest {
        required string deviceIdentification = 1; // [(nanopb).max_size = 41];
        required bytes ipAddress = 2; // [(nanopb).max_size = 4];
        required DeviceType deviceType = 3;
        required bool hasSchedule = 4;
        required uint32 randomDevice = 5; // 16 bits
    }
    
    message RegisterDeviceResponse {
        required Status status = 1;
        required string currentTime = 2; // [(nanopb).max_size = 15];// - format YYYYMMDDhhmmss UTC
        required uint32 randomDevice = 3;
        required uint32 randomPlatform = 4;
        optional LocationInfo locationInfo = 5; // Location information of device
    }
    
    message StartSelfTestRequest {
        optional bool present = 1 [default = true];
    }
    
    message StartSelfTestResponse {
        required Status status = 1;
    }
    
    message StopSelfTestRequest {
        optional bool present = 1 [default = true];
    }
    
    message StopSelfTestResponse {
        required Status status = 1;
        required bytes selfTestResult = 2; // [(nanopb).max_size = 1];
    }
    
    // ========= Firmware Management
    message GetFirmwareVersionRequest {
        optional bool present = 1 [default = true];
    }
    
    message GetFirmwareVersionResponse {
        required string firmwareVersion = 1; // [(nanopb).max_size = 7]; // RXX
    }
    
    message UpdateFirmwareRequest {
        required string firmwareDomain = 1; // [(nanopb).max_size = 100]; // Servername
        required string firmwareUrl = 2; // [(nanopb).max_size = 255]; // /firmware/PSLD/RXX
    }
    
    message UpdateFirmwareResponse {
        required Status status = 1;
    }
    
    // ========= Ad-Hoc & Status
    message SetLightRequest {
        repeated LightValue values = 1; // [(nanopb).max_count = 6];
    }
    
    message SetLightResponse {
        required Status status = 1;
    }
    
    message GetStatusRequest {
        optional bool present = 1 [default = true];
    }
    
    message GetStatusResponse {
        required Status status = 1;
        repeated LightValue value = 2; // [(nanopb).max_count = 6];
        required LinkType preferredLinktype = 3;
        required LinkType actualLinktype = 4;
        required LightType lightType = 5;
        required uint32 eventNotificationMask = 6; // Bitmask for max 32 events, using NotificationBit for bit positions.
    }
    
    message ResumeScheduleRequest {
        optional bytes index = 1; // [(nanopb).max_size = 1]; // index number of connected light (DALI), none means all connected ligts.
        required bool immediate = 2; // [default = false]; // Resume at next schedule item or direct
    }
    
    message ResumeScheduleResponse {
        required Status status = 1;
    }
    
    message SetRebootRequest {
        optional bool present = 1 [default = true];
    }
    
    message SetRebootResponse {
        required Status status = 1;
    }
    
    message SetTransitionRequest {
        required TransitionType transitionType = 1; // Night-Day or Day-Night transition
        optional string time = 2; // [(nanopb).max_size = 7]; // - format hhmmss UTC
    }
    
    message SetTransitionResponse {
        required Status status = 1;
    }
    
    message SetEventNotificationsRequest {
        required uint32 NotificationMask = 1; // Bitmask for max 32 events, using NotificationBit for bit positions.
    }
    
    message SetEventNotificationsResponse {
        required Status status = 1;
    }
    
    message EventNotificationRequest {
        repeated EventNotification notifications = 1; // [(nanopb).max_count = 6];
    }
    
    message EventNotificationResponse {
        required Status status = 1;
    }
    
    // ========= Scheduling
    message SetScheduleRequest {
        repeated Schedule schedules = 1; // [(nanopb).max_count = 50];
        optional PageInfo pageInfo = 2;
        required RelayType scheduleType = 3; // RT_NOT_SET is NOT supported!
    }
    
    message SetScheduleResponse {
        required Status status = 1;
    }
    
    // ========= Configuration
    message SetConfigurationRequest {
        optional LightType lightType = 1;
        optional DaliConfiguration daliConfiguration = 2; // contains specific configuration for DALI controllers
        optional RelayConfiguration relayConfiguration = 3; // contains specific configuration for Relay
        optional uint32 shortTermHistoryIntervalMinutes = 4; 
        optional LinkType preferredLinkType = 5;
        optional MeterType meterType = 6;
        optional uint32 longTermHistoryInterval = 7; 
        optional LongTermIntervalType longTermHistoryIntervalType = 8; 
    }
    
    message SetConfigurationResponse {
        required Status status = 1;
    }
    
    message GetConfigurationRequest {
        optional bool present = 1 [default = true];
    }
    
    message GetConfigurationResponse {
        required Status status = 1;
        optional LightType lightType = 2;
        optional DaliConfiguration daliConfiguration = 3; // contains specific configuration for DALI controllers
        optional RelayConfiguration relayConfiguration = 4; // contains specific configuration for Relay
        optional uint32 shortTermHistoryIntervalMinutes = 5; 
        optional LinkType preferredLinkType = 6;
        optional MeterType meterType = 7;
        optional uint32 longTermHistoryInterval = 8; 
        optional LongTermIntervalType longTermHistoryIntervalType = 9; 
    }
    
    message ConfirmRegisterDeviceRequest {
        required uint32 randomDevice = 1;
        required uint32 randomPlatform = 2;
    }
    
    message ConfirmRegisterDeviceResponse {
        required Status status = 1;
        required uint32 randomDevice = 2;
        required uint32 randomPlatform = 3;
        required uint32 sequenceWindow = 4;
    }
    
    // ========= Monitoring
    message GetPowerUsageHistoryRequest {
        required TimePeriod timePeriod = 1;
        optional uint32 page = 2;
        required HistoryTermType termType = 3;
    }
    
    message GetPowerUsageHistoryResponse {
        required Status status = 1;
        repeated PowerUsageData powerUsageData = 2; // [(nanopb).max_count = 20]; 
        optional PageInfo pageInfo = 3;
    }
    
    message GetActualPowerUsageRequest {
        optional bool present = 1 [default = true];
    }
    
    message GetActualPowerUsageResponse {
        required Status status = 1;
        required PowerUsageData powerUsageData = 2;
    }
    
    // ========= Types
    message LocationInfo {
        optional sint32 timeOffset = 1; // correction in minutes with respect to UTC
        optional sint32 latitude = 2; // divide by 1000000 to get float value
        optional sint32 longitude = 3; // divide by 1000000 to get float value
    }
    
    message LightValue {
        optional bytes index = 1; // [(nanopb).max_size = 1]; // index number of connected light (DALI), none means all connected ligts.
        required bool on = 2;
        optional bytes dimValue = 3; // [(nanopb).max_size = 1]; // 1 - 100 %
    }
    
    message EventNotification {
        required Event event = 1;
        optional bytes index = 2; // [(nanopb).max_size=1];
        optional string description = 3; // [(nanopb).max_size = 81];
    }
    
    message Schedule {
        required Weekday weekday = 1;
        optional string startDay = 2; // [(nanopb).max_size = 9]; //- format YYYYMMDD UTC, indicates the range of a schedule entry, from startDay
        optional string endDay = 3; // [(nanopb).max_size = 9]; // - format YYYYMMDD UTC, including endDay
        required ActionTime actionTime = 4;
        optional string time = 5; // [(nanopb).max_size = 7]; // - format hhmmss localtime set when actionTime = ABSOLUTETIME
        optional Window window = 6; // window to wait for light sensor trigger
        repeated LightValue value = 7; // [(nanopb).max_count = 6];
        optional TriggerType triggerType = 8; // React to setTransition or switch astronomical
    }
    
    message Window {
        required uint32 minutesBefore = 1; // minutes before sunset / sunrise
        required uint32 minutesAfter = 2; // minutes after sunset / sunrise
    }
    
    message DaliConfiguration {
        optional bytes numberOfLights = 1; // [(nanopb).max_size = 1]; // number of lights connected to DALI controller
        repeated IndexAddressMap addressMap = 2; // [(nanopb).max_count = 4];
    }
    
    message RelayConfiguration {
        repeated IndexAddressMap addressMap = 1; // [(nanopb).max_count = 6];
    }
    
    message IndexAddressMap {
        required bytes index = 1; // [(nanopb).max_size = 1]; // external index, for example 1
        required bytes address = 2; // [(nanopb).max_size = 1]; // internal address, for example 2
        required RelayType relayType = 3;
    }
    
    message PageInfo {
        required uint32 currentPage = 1; // Pages start from 1
        required uint32 pageSize = 2;
        required uint32 totalPages = 3;
    }
    
    message TimePeriod {
        required string startTime = 1; // [(nanopb).max_size = 15];     // - format YYYYMMDDhhmmss UTC
        required string endTime = 2; // [(nanopb).max_size = 15];   // - format YYYYMMDDhhmmss UTC
    }
    
    message PowerUsageData {
        required string recordTime = 1; // [(nanopb).max_size = 15];    // Record time - format YYYYMMDDhhmmss UTC
        required MeterType meterType = 2;                               // Meter type (P1, Pulse, Aux)
        required uint64 totalConsumedEnergy = 3;                        // Electricity delivered to client (Tariff I + Tarrif II) in 0,001 kWh
        required uint32 actualConsumedPower = 4;                        // Actual Electricity power delivered in W
        optional PsldData psldData = 5;
        optional SsldData ssldData = 6;
    }
    
    message PsldData {
        required uint32 totalLightingHours = 1;     // Total lighting hours
    }
    
    message SsldData {
        required uint32 actualCurrent1 = 1;             // Instantaneous current L1 in mA
        required uint32 actualCurrent2 = 2;             // Instantaneous current L2 in mA
        required uint32 actualCurrent3 = 3;             // Instantaneous current L3 in mA
        required uint32 actualPower1 = 4;               // Instantaneous active power L1 in W
        required uint32 actualPower2 = 5;               // Instantaneous active power L2 in W
        required uint32 actualPower3 = 6;               // Instantaneous active power L3 in W
        required uint32 averagePowerFactor1 = 7;        // Power factor L1 (in 1/2^32) in steps of 0.1, 10 equals a power factor of 1
        required uint32 averagePowerFactor2 = 8;        // Power factor L2 (in 1/2^32) in steps of 0.1, 10 equals a power factor of 1
        required uint32 averagePowerFactor3 = 9;        // Power factor L3 (in 1/2^32) in steps of 0.1, 10 equals a power factor of 1
        repeated RelayData relayData = 10;   // [(nanopb).max_count = 4]; // Measurement data per relay 
    }
    
    message RelayData {
        required bytes index = 1; // [(nanopb).max_size = 1]; // external index, for example 1
        required uint32 totalLightingMinutes = 2;       // Total lighting minutes for lighting relay
    }
    
    // ========= Enumerations
    
    // ========= Event Notification
    enum NotificationBit {
        DIAG_EVENTS = 1;
        HARDWARE_FAILURE = 2;
        LIGHT_EVENTS = 4; // For example LightValue changes
        TARIFF_EVENTS = 8; // For example Tariff changes
        MONITOR_EVENTS = 16; // For example monitor buffer is almost full
        FIRMWARE_EVENTS = 32; // For example firmware activation
        COMM_EVENTS = 64; // For example alternative channel
        SECURITY_EVENTS = 128; // For example out of sequence
    }
    
    
    //Events must map to their notification bit:
    //EG: 0000-0999 =1
    //    1000-1999 =2
    //    2000-2999 =4
    //    3000-3999 =8
    //    4000-4999 =16
    //    5000-5999 =32
    //    6000-6999 =64
    //    7000-7999 =128
    // OR to check  2^((event num)/1000)=notification bit
    
    enum Event {
        // 0 - 999 Diagnostics
        DIAG_EVENTS_GENERAL = 0; 
    
        // 1000 - 1999 Hardware Failures
        HARDWARE_FAILURE_RELAY = 1000; // Index indicates relay (not supported yet) 
    
        // 2000 - 2999 Light Events
        LIGHT_EVENTS_LIGHT_ON = 2000; // Index indicates light
        LIGHT_EVENTS_LIGHT_OFF = 2001; // Index indicates light
        LIGHT_FAILURE_DALI_COMMUNICATION = 2500; // DALI communication failure
        LIGHT_FAILURE_BALLAST = 2501; // Ballast failure detected (DALI only)
        LIGHT_FAILURE_TARIFF_SWITCH_ATTEMPT = 2502; // Attempt to switch an endpoint configured as tariff from OVL schedule or manual override (index indicates endpoint) 
    
        // 3000 - 3999 Tariff Events
        TARIFF_EVENTS_TARIFF_ON = 3000; // Tariff switched on
        TARIFF_EVENTS_TARIFF_OFF = 3001; // Tariff switched off
    
        // 4000 - 4999
        MONITOR_EVENTS_LONG_BUFFER_FULL = 4000; // Long term monitoring buffer overrun occurred
        MONITOR_FAILURE_P1_COMMUNICATION = 4500; // P1 meter could not be read
        MONITOR_SHORT_DETECTED = 4600;
        MONITOR_SHORT_RESOLVED = 4601;
        MONITOR_DOOR_OPENED = 4700;
        MONITOR_DOOR_CLOSED = 4701;
    
        // 5000 - 5999 Firmware Events
        FIRMWARE_EVENTS_ACTIVATING = 5000; // Start activating new firmware, after downloading
        FIRMWARE_EVENTS_DOWNLOAD_NOTFOUND = 5501; // Download of firmware failed, i.e. location incorrect
        FIRMWARE_EVENTS_DOWNLOAD_FAILED = 5502; // Download of firmware failed, image incorrect 
    
        // 6000 – 6999
        COMM_EVENTS_ALTERNATIVE_CHANNEL = 6000; // Alternative channel selected for communication (description contains selected channel GPRS/CDMA/Ethernet)
        COMM_EVENTS_RECOVERED_CHANNEL = 6001; // Communication has been recovered for this channel
    
        // 7000 - 7999
        SECURITY_EVENTS_OUT_OF_SEQUENCE = 7000; // Out of sequence occurred and sequence number is renegotiated
    }
    
    // ========= Enums
    enum TriggerType {
        TT_NOT_SET = 0;
        LIGHT_TRIGGER = 1;
        ASTRONOMICAL = 2;
    }
    
    enum TransitionType {
        NIGHT_DAY = 0;
        DAY_NIGHT = 1;
    }
    
    enum Weekday {
        MONDAY = 1;
        TUESDAY = 2;
        WEDNESDAY = 3;
        THURSDAY = 4;
        FRIDAY = 5;
        SATURDAY = 6;
        SUNDAY = 7;
        WEEKDAY = 8;
        WEEKEND = 9;
        ABSOLUTEDAY = 10;
        ALL = 11;
    }
    
    enum ActionTime {
        ABSOLUTETIME = 1;
        SUNRISE = 2;
        SUNSET = 3;
    }
    
    enum DeviceType {
        PSLD = 0;
        SSLD = 1;
    }
    
    enum Status {
        OK = 0;
        FAILURE = 1; // general failure
        REJECTED = 2; // request received in wrong state
    }
    
    enum LightType {
        LT_NOT_SET = 0;
        RELAY = 1;
        ONE_TO_TEN_VOLT = 2;
        ONE_TO_TEN_VOLT_REVERSE = 3;
        DALI = 4;
    }
    
    enum RelayType {
        RT_NOT_SET = 0;
        LIGHT = 1;
        TARIFF = 2;
    }
    
    enum MeterType {
        MT_NOT_SET = 0;
        P1 = 1;
        PULSE = 2;
        AUX = 3;
    }
    
    enum LinkType {
        LINK_NOT_SET = 0;
        GPRS = 1;
        CDMA = 2;
        ETHERNET = 3;
    }
    
    enum LongTermIntervalType {
        LT_INT_NOT_SET = 0;
        DAYS = 1;
        MONTHS = 2;
    }
    
    enum HistoryTermType {
        Short = 0;
        Long = 1;
    }
    class OslpEnvelope {
        /**
         * Length of the security hash.
         * Length for ECDSA is 71 or 72 or 73 bytes.
         * Length for RSA is 128 bytes.
         */
        public static final int SECURITY_KEY_LENGTH = 128;
    
        /**
         * Length of the sequence number.
         */
        public static final int SEQUENCE_NUMBER_LENGTH = 2;
    
        /**
         * Length of the manufacturer id.
         */
        public static final int MANUFACTURER_ID_LENGTH = 2;
    
        /**
         * Length of the device id.
         */
        public static final int DEVICE_ID_LENGTH = 10;
    
        /**
         * Length of the length.
         */
        public static final int LENGTH_INDICATOR_LENGTH = 2;
    
        /**
         * Buffer for security key bytes.
         */
        public byte[] securityKey = new byte[SECURITY_KEY_LENGTH];
    
        /**
         * Buffer for sequence number bytes.
         */
        public byte[] sequenceNumber = new byte[SEQUENCE_NUMBER_LENGTH];
    
        /**
         * Buffer for deviceid bytes.
         */
        public byte[] deviceId = new byte[DEVICE_ID_LENGTH + MANUFACTURER_ID_LENGTH];
    
        /**
         * Buffer for OSLP payload.
         */
        public Message payloadMessage;
    }
    message RegisterDeviceRequest {
        required string deviceIdentification = 1; // [(nanopb).max_size = 41];
        required bytes ipAddress = 2; // [(nanopb).max_size = 4];
        required DeviceType deviceType = 3;
        required bool hasSchedule = 4;
        required uint32 randomDevice = 5; // 16 bits
    }
    
    message RegisterDeviceResponse {
        required Status status = 1;
        required string currentTime = 2; // [(nanopb).max_size = 15];// - format YYYYMMDDhhmmss UTC
        required uint32 randomDevice = 3;
        required uint32 randomPlatform = 4;
        optional LocationInfo locationInfo = 5; // Location information of device
    }
    enum DeviceType {
        PSLD = 0;
        SSLD = 1;
    }
    
    enum Status {
        OK = 0;
        FAILURE = 1; // general failure
        REJECTED = 2; // request received in wrong state
    }
    
    message LocationInfo {
        optional sint32 timeOffset = 1; // correction in minutes with respect to UTC
        optional sint32 latitude = 2; // divide by 1000000 to get float value
        optional sint32 longitude = 3; // divide by 1000000 to get float value
    }
    registerDeviceResponse {
      status: OK
      currentTime: "20160106135210"
      randomDevice: 13246
      randomPlatform: 44765
      locationInfo {
        timeOffset: 60
        latitude: 50889228
        longitude: 5974140
      }
    }
    enum Status {
        OK = 0;
        FAILURE = 1; // general failure
        REJECTED = 2; // request received in wrong state
    }
    confirmRegisterDeviceRequest {
      randomDevice: 13246
      randomPlatform: 44765
    }
    confirmRegisterDeviceResponse {
      status: OK
      randomDevice: 13246
      randomPlatform: 44765
      sequenceWindow: 6
    }
    message SetConfigurationRequest {
        optional LightType lightType = 1;
        optional DaliConfiguration daliConfiguration = 2;                                    // Contains specific configuration for DALI controllers.
        optional RelayConfiguration relayConfiguration = 3;                                  // Contains specific configuration for Relay.
        optional uint32 shortTermHistoryIntervalMinutes = 4; 
        optional LinkType preferredLinkType = 5;
        optional MeterType meterType = 6;
        optional uint32 longTermHistoryInterval = 7; 
        optional LongTermIntervalType longTermHistoryIntervalType = 8;
        optional uint32 timeSyncFrequency = 9 [default = 86400];                             // Time synch frequency (seconds).
        optional bytes deviceFixIpValue = 10; // [(nanopb).max_count = 4];                   // The fixed IP address of this device.
        optional bytes netMask = 11; // [(nanopb).max_count = 4];                            // Network mask for fixed IP address.
        optional bytes gateWay = 12; // [(nanopb).max_count = 4];                            // Gateway address for fixed IP address.
        optional bool isDhcpEnabled = 13 [default = true];                                   // Is DHCP enabled for this device?
        optional bool isTlsEnabled = 14;                                                     // Defines if TLS is enabled.
        optional uint32 oslpBindPortNumber = 15;                                             // The port used for TLS connections.
        optional string commonNameString = 16 [default = 'TLS Test']; //[default = 'TLS Test',(nanopb).max_count = 25]; // The common name (CN) used when isTlsEnabled equals true.
        optional uint32 communicationTimeout = 17 [default = 20];                            // Communication Timeouts (seconds) (wait for answer, socket establish, or server response = comm watchdog for local mode).
        optional uint32 communicationNumberOfRetries = 18 [default = 3];                     // Communication number of retries.
        optional uint32 communicationPauseTimeBetweenConnectionTrials = 19 [default = 60];   // Time between communication attempts.
        optional bytes ospgIpAddress = 20; // [(nanopb).max_count = 4];                      // The IP address of the platform.
        optional uint32 osgpPortNumber = 21;                                                 // The port number of the platform.
        optional bool isTestButtonEnabled = 22 [default = true];                             // Is the test button enabled for this device?
        optional bool isAutomaticSummerTimingEnabled = 23 [default = true];                  // Is the automatic summer timing enabled for this device?
        optional sint32 astroGateSunRiseOffset = 24 [default = 0];                           // The calculated sunrise time modified by this value. Time is moved earlier (if offset is negative) or later (if offset is positive). In seconds.
        optional sint32 astroGateSunSetOffset = 25 [default = 0];                            // The calculated sunset time modified by this value. Time is moved earlier (if offset is negative) or later (if offset is positive). In seconds.
        repeated uint32 switchingDelay = 26; // [(nanopb).max_count = 4];                    // Switching delay (seconds), array of 4 values. Default 0, 0, 0, 0.
        repeated RelayMatrix relayLinking = 27;                                              // Relay linking is a software linking, to may link each relay with each other relay. It is a matrix. Example, if relay 1 is linked with relay 3, if relay 1 will be switched (by OSGP or local by internal scheduler), the relay 3 will switch automatically (on or off, as it set) without new command.
        optional bool relayRefreshing = 28 [default = true];                                 // Is relayRefreshing enabled for this device? Set minutely the nominal relay state and status according to active schedule after power outage and missed switching or anti manipulation.
        optional string summerTimeDetails = 29 [default = '0360100']; //[default = '0360100',(nanopb).max_count = 7]; // The time point for DST for Europe is not identical in every country. It should be added as parameters the weekday, month and time point for DST/summer and winter.
        optional string winterTimeDetails = 30 [default = '1060200']; //[default = '1060200',(nanopb).max_count = 7]; // The time point for DST for Europe is not identical in every country. It should be added as parameters the weekday, month and time point for DST/summer and winter.
    }
    // summerTimeDetails string, winterTimeDetails:
    //MMWHHmi
    //
    //where: (note, north hemisphere summer begins at the end of march)
    //MM: month
    //W:  day of the week (0- Monday, 6- Sunday)
    //HH: hour of the changing time
    //mi: minutes of the changing time
    //
    //note: The current implemention is usable in Europe and several other countries in the world, but doesn't support all situations as describe at https://en.wikipedia.org/wiki/Daylight_saving_time_by_country. Some countries don't switch the time in the last week of the month, but in the first or second. This is currently not supported.
    
    message SetConfigurationResponse {
        required Status status = 1;
    }
    enum LightType {
        LT_NOT_SET = 0;
        RELAY = 1;
        ONE_TO_TEN_VOLT = 2;
        ONE_TO_TEN_VOLT_REVERSE = 3;
        DALI = 4;
    }
    
    message DaliConfiguration {
        optional bytes numberOfLights = 1; // [(nanopb).max_size = 1]; // number of lights connected to DALI controller
        repeated IndexAddressMap addressMap = 2; // [(nanopb).max_count = 4];
    }
    
    message RelayConfiguration {
        repeated IndexAddressMap addressMap = 1; // [(nanopb).max_count = 6];
    }
    
    message IndexAddressMap {
        required bytes index = 1; // [(nanopb).max_size = 1]; // external index, for example 1
        required bytes address = 2; // [(nanopb).max_size = 1]; // internal address, for example 2
        required RelayType relayType = 3;
    }
    
    enum RelayType {
        RT_NOT_SET = 0;
        LIGHT = 1;
        TARIFF = 2;
    }
    
    enum LinkType {
        LINK_NOT_SET = 0;
        GPRS = 1;
        CDMA = 2;
        ETHERNET = 3;
    }
    
    enum MeterType {
        MT_NOT_SET = 0;
        P1 = 1;
        PULSE = 2;
        AUX = 3;
    }
    
    enum LongTermIntervalType {
        LT_INT_NOT_SET = 0;
        DAYS = 1;
        MONTHS = 2;
    }
    
    message RelayMatrix {
        required bytes masterRelayIndex = 1;  // [(nanopb).max_count = 1];
        required bool masterRelayOn = 2; // [(nanopb).max_count = 1];
        optional bytes indicesOfControlledRelaysOn = 3; // [(nanopb).max_count = 4];  // IndexNumber of output Relay to switch ON if Master Relay state changes as determined by masterRelayOn.
        optional bytes indicesOfControlledRelaysOff = 4; // [(nanopb).max_count = 4]; // IndexNumber of output Relay to switch OFF if Master Relay sate changes as determined by MasterRelayOff.
    }
    
    enum Status {
        OK = 0;
        FAILURE = 1; // general failure
        REJECTED = 2; // request received in wrong state
    }
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:con="http://www.opensmartgridplatform.org/schemas/configurationmanagement/2014/10">
       <soapenv:Header>
          <com:OrganisationIdentification>LianderNetManagement</com:OrganisationIdentification>
          <com:UserName>Kevin</com:UserName>
          <com:ApplicationName>SoapUI</com:ApplicationName>
       </soapenv:Header>
       <soapenv:Body>
          <con:SetConfigurationRequest>
             <!--type: Identification-->
             <con:DeviceIdentification>device-01</con:DeviceIdentification>
             <!--Optional:-->
             <con:Configuration>
                <!--Optional:-->
                <!--type: LightType - enumeration: [RELAY,ONE_TO_TEN_VOLT,ONE_TO_TEN_VOLT_REVERSE,DALI]-->
                <con:LightType>RELAY</con:LightType>
                <!--Optional:-->
                <con:RelayConfiguration>
                   <!--0 to 6 repetitions:-->
                   <con:RelayMap>
                      <!--anonymous type-->
                      <con:Index>1</con:Index>
                      <!--anonymous type-->
                      <con:Address>1</con:Address>
                      <!--type: RelayType - enumeration: [LIGHT,TARIFF,TARIFF_REVERSED]-->
                      <con:RelayType>TARIFF</con:RelayType>
                   </con:RelayMap>
                   <con:RelayMap>
                      <!--anonymous type-->
                      <con:Index>2</con:Index>
                      <!--anonymous type-->
                      <con:Address>2</con:Address>
                      <!--type: RelayType - enumeration: [LIGHT,TARIFF,TARIFF_REVERSED]-->
                      <con:RelayType>LIGHT</con:RelayType>
                   </con:RelayMap>
                   <con:RelayMap>
                      <!--anonymous type-->
                      <con:Index>3</con:Index>
                      <!--anonymous type-->
                      <con:Address>3</con:Address>
                      <!--type: RelayType - enumeration: [LIGHT,TARIFF,TARIFF_REVERSED]-->
                      <con:RelayType>LIGHT</con:RelayType>
                   </con:RelayMap>
                   <con:RelayMap>
                      <!--anonymous type-->
                      <con:Index>4</con:Index>
                      <!--anonymous type-->
                      <con:Address>4</con:Address>
                      <!--type: RelayType - enumeration: [LIGHT,TARIFF,TARIFF_REVERSED]-->
                      <con:RelayType>LIGHT</con:RelayType>
                   </con:RelayMap>
                </con:RelayConfiguration>
                <!--Optional:-->
                <!--type: LinkType - enumeration: [GPRS,CDMA,ETHERNET]-->
                <con:PreferredLinkType>ETHERNET</con:PreferredLinkType>
    
                <con:TimeSyncFrequency>864000</con:TimeSyncFrequency>
                <con:DeviceFixedIp>
                   <con:IpAddress>192.168.0.110</con:IpAddress>
                   <con:NetMask>255.255.255.0</con:NetMask>
                   <con:GateWay>192.168.0.1</con:GateWay>
                </con:DeviceFixedIp>
                <con:DhcpEnabled>false</con:DhcpEnabled>
                <con:TlsEnabled>false</con:TlsEnabled>
                <con:TlsPortNumber>1234</con:TlsPortNumber>
                <con:CommonNameString>TLS Test</con:CommonNameString>
    
                <con:CommunicationTimeout>15</con:CommunicationTimeout>
                <con:CommunicationNumberOfRetries>2</con:CommunicationNumberOfRetries>
                <con:CommunicationPauseTimeBetweenConnectionTrials>120</con:CommunicationPauseTimeBetweenConnectionTrials>
                <con:OsgpIpAddress>192.168.100.42</con:OsgpIpAddress>
                <con:OsgpPortNumber>12122</con:OsgpPortNumber>
                <con:TestButtonEnabled>false</con:TestButtonEnabled>
                <con:AutomaticSummerTimingEnabled>false</con:AutomaticSummerTimingEnabled>
                <con:AstroGateSunRiseOffset>-15</con:AstroGateSunRiseOffset>
                <con:AstroGateSunSetOffset>15</con:AstroGateSunSetOffset>
    
                <!-- List of SwitchingDelay type, one delay per relay, max 4 entries -->
                <con:SwitchingDelays>100</con:SwitchingDelays>
                <con:SwitchingDelays>200</con:SwitchingDelays>
                <con:SwitchingDelays>300</con:SwitchingDelays>
                <con:SwitchingDelays>400</con:SwitchingDelays>
    
                <!-- List of RelayMatrix type -->
                <con:RelayLinking>
                    <con:MasterRelayIndex>1</con:MasterRelayIndex>
                    <con:MasterRelayOn>true</con:MasterRelayOn>
                    <!-- List of RelayMatrixIndex, max 4 entries containing a single index between 1 and 4 -->
                    <con:IndicesOfControlledRelaysOn>1</con:IndicesOfControlledRelaysOn>
                    <con:IndicesOfControlledRelaysOn>2</con:IndicesOfControlledRelaysOn>
                    <con:IndicesOfControlledRelaysOn>3</con:IndicesOfControlledRelaysOn>
                    <con:IndicesOfControlledRelaysOn>4</con:IndicesOfControlledRelaysOn>
                    <!-- List of RelayMatrixIndex, max 4 entries containing a single index between 1 and 4 -->
                    <con:IndicesOfControlledRelaysOff>1</con:IndicesOfControlledRelaysOff>
                    <con:IndicesOfControlledRelaysOff>2</con:IndicesOfControlledRelaysOff>
                    <con:IndicesOfControlledRelaysOff>3</con:IndicesOfControlledRelaysOff>
                    <con:IndicesOfControlledRelaysOff>4</con:IndicesOfControlledRelaysOff>
                </con:RelayLinking>
                <con:RelayLinking>
                    <con:MasterRelayIndex>2</con:MasterRelayIndex>
                    <con:MasterRelayOn>true</con:MasterRelayOn>
                    <!-- List of RelayMatrixIndex, max 4 entries containing a single index between 1 and 4 -->
                    <con:IndicesOfControlledRelaysOn>3</con:IndicesOfControlledRelaysOn>
                    <!-- List of RelayMatrixIndex, max 4 entries containing a single index between 1 and 4 -->
                    <con:IndicesOfControlledRelaysOff>3</con:IndicesOfControlledRelaysOff>
                </con:RelayLinking>
                <con:RelayRefreshing>true</con:RelayRefreshing>
                <con:SummerTimeDetails>2016-03-27T01:00:00.000+01:00</con:SummerTimeDetails>
                <con:WinterTimeDetails>2016-10-30T02:00:00.000+02:00</con:WinterTimeDetails>
    
             </con:Configuration>
             <!--Optional:-->
             <!--type: timestamp-->
             <!--<con:scheduled_time>2015-01-04T15:49:59Z</con:scheduled_time>-->
    
          </con:SetConfigurationRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns2:SetConfigurationAsyncResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/configurationmanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:AsyncResponse>
                <ns3:CorrelationUid>LianderNetManagement|||device-01|||20161007141853727</ns3:CorrelationUid>
                <ns3:DeviceId>device-01</ns3:DeviceId>
             </ns2:AsyncResponse>
          </ns2:SetConfigurationAsyncResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:con="http://www.opensmartgridplatform.org/schemas/configurationmanagement/2014/10">
       <soapenv:Header>
          <com:OrganisationIdentification>LianderNetManagement</com:OrganisationIdentification>
          <com:UserName>Kevin</com:UserName>
          <com:ApplicationName>SoapUI</com:ApplicationName>
       </soapenv:Header>
       <soapenv:Body>
          <con:SetConfigurationAsyncRequest>
             <con:AsyncRequest>
                <com:CorrelationUid>LianderNetManagement|||device-01|||20161007141521031</com:CorrelationUid>
                <com:DeviceId>device-01</com:DeviceId>
             </con:AsyncRequest>
          </con:SetConfigurationAsyncRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns2:SetConfigurationResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/configurationmanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:Result>OK</ns2:Result>
          </ns2:SetConfigurationResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    setConfigurationRequest {
      lightType: RELAY
      relayConfiguration {
        addressMap {
          index: "\001"
          address: "\001"
          relayType: TARIFF
        }
        addressMap {
          index: "\002"
          address: "\002"
          relayType: LIGHT
        }
        addressMap {
          index: "\003"
          address: "\003"
          relayType: LIGHT
        }
        addressMap {
          index: "\004"
          address: "\004"
          relayType: LIGHT
        }
      }
      shortTermHistoryIntervalMinutes: 15
      preferredLinkType: ETHERNET
      meterType: PULSE
      longTermHistoryInterval: 1
      longTermHistoryIntervalType: DAYS
      timeSyncFrequency: 864000
      deviceFixIpValue: "\300\250\000n"
      netMask: "\377\377\377\000"
      gateWay: "\300\250\000\001"
      isDhcpEnabled: false
      isTlsEnabled: false
      oslpBindPortNumber: 1234
      commonNameString: "TLS Test"
      communicationTimeout: 15
      communicationNumberOfRetries: 2
      communicationPauseTimeBetweenConnectionTrials: 120
      ospgIpAddress: "\300\250d*"
      osgpPortNumber: 12122
      isTestButtonEnabled: false
      isAutomaticSummerTimingEnabled: false
      astroGateSunRiseOffset: -15
      astroGateSunSetOffset: 15
      switchingDelay: 100
      switchingDelay: 200
      switchingDelay: 300
      switchingDelay: 400
      relayLinking {
        masterRelayIndex: "\001"
        masterRelayOn: true
        indicesOfControlledRelaysOn: "\001\002\003\004"
        indicesOfControlledRelaysOff: "\001\002\003\004"
      }
      relayLinking {
        masterRelayIndex: "\002"
        masterRelayOn: true
        indicesOfControlledRelaysOn: "\003"
        indicesOfControlledRelaysOff: "\003"
      }
      relayRefreshing: true
      summerTimeDetails: "0360100"
      winterTimeDetails: "1060200"
    }
    message EventNotification {
        required Event event = 1;
        optional bytes index = 2; // [(nanopb).max_size=1];
        optional string description = 3; // [(nanopb).max_size = 81];
        optional string timestamp = 4; // [(nanopb).max_size = 15]; // - Format YYYYMMDDhhmmss UTC, indicates the date and time of the event.
    }
    
    enum Status {
        OK = 0;
        FAILURE = 1; // general failure
        REJECTED = 2; // request received in wrong state
    }
    eventNotificationRequest {
      notifications {
        event: TARIFF_EVENTS_TARIFF_OFF
        index: "\001"
        description: "Tariff Off Example Event"
        timestamp: "20170404093500"
      }
    }
    eventNotificationResponse {
      status: OK
    }

    GetFirmwareVersion

    hashtag
    Description

    Request which notifies the device to send the current firmware version.

    Response containing the firmware version.

    hashtag
    Message definitions

    hashtag
    Datatypes

    hashtag
    Example

    Soap requests and responses sent to and from platform:

    OSLP GetFirmwareRequest message sent to 'device-01':

    OSLP GetFirmwareResponse message sent to platform:

    SetEventNotifications

    hashtag
    Description

    Request which contains the EventNotification mask.

    Response communicates status.

    hashtag
    Message definitions

    hashtag
    Data types

    hashtag
    Example

    Soap requests and responses sent to and from platform:

    OSLP SetEventNotificationsRequest sent to 'device-01' to set EventNotifications:

    OSLP SetEventNotificationsResponse sent to platform:

    GetConfiguration

    hashtag
    Description

    Request to fetch the current configuration of a device.

    Response communicates if the request was executed. If 'status = OK' then the optional fields will be partly populated. Note that DaliConfiguration is only present for devices with 'lightType = DALI', which are of device type PSLD. Note that RelayConfiguration is only present for devices with 'lightType = RELAY | ONE_TO_TEN_VOLT | ONE_TO_TEN_VOLT_REVERSE', which are of device type SSLD.

    hashtag
    Message definitions

    hashtag
    Datatypes

    hashtag
    Example

    Soap requests and responses sent to and from platform:

    OSLP GetConfigurationRequest message sent to 'device-01':

    OSLP GetConfigurationResponse message sent to platform:

    SetSchedule

    hashtag
    Description

    Request to set a light or tariff schedule on a device.

    Response communicates status.

    SetLight

    hashtag
    Description

    Request that notifies the device to switch on or off one or several light relays, optionally with a dim-value per relay. If optional value 'index' is omitted, all relays configured as light are switched. In that case, all light relays will switch using only 1 LightValue instance for 'values'. In case the value 'index' is included, multiple instances of LightValue can be used (up to 6), each indicating a particular relay. If optional value 'dimValue' is omitted, then default values of 0 and 100 will be assumed for either 'on = false' or 'on = true'.

    Response communicates status.

    ResumeSchedule

    hashtag
    Description

    Request that notifies the device to continue the current schedule after the current schedule was interrupted (for example by switching by hand using SetLightRequest). This request can operate on a single relay or on all relays and the resuming of the schedule can be immediate or at the next schedule-entry.

    Response which confirms the ResumeScheduleRequest has been executed or rejects the ResumeScheduleRequest.

    UpdateFirmware

    hashtag
    Description

    Request for a device to download and install new firmware. The request contains a URL defining the location of the new firmware image. The device should download the firmware from that location.

    Response communicates status.

    StartSelfTest

    hashtag
    Description

    Request that notifies the device to switch all light relays on.

    Response communicates status.

    StopSelfTest

    hashtag
    Description

    Request that notifies the device to switch all light relays off.

    Response communicates status and the result of the test.

    GetStatus

    hashtag
    Description

    Request that requires the device to send the status of all relays, current network link and preferred network link, the type of configuration (PSLD vs SSLD), and the event notification mask which has been set. Further, many optional values can be set by the device, like serial number, MAC address, memory sizes, current firmware version, current IP address, etc.

    Response which confirms the GetStatusRequest has been executed and returns the current status for all of the relays and other information or rejects the GetStatusRequest.

    UpdateDeviceSslCertification

    hashtag
    Description

    Request to download a new SSL certificate from the certificate server. The device will be given the domain name and URL where the certificate is located.

    hashtag

    SetTransition

    hashtag
    Description

    Request which informs a device of a daylight transiton: it has become dark (sunset) or light (sunrise). The device will switch the relays, which have schedule entries for transition messages. The optional 'time' value can be used to indicate a switch time. If the optional 'time' value is omitted the device should switch immediately. See for more information regarding switch schedules.

    Response communicates status.

    SetDeviceVerificationKey

    hashtag
    Description

    Request to switch to a new Platform public key used for verifying OSLP envelopes by the device. The base-64 encoded version of the key will be sent to the device, which is equivalent to the content of a PEM file (only the certificate chunk, not the headers).

    hashtag

    SetReboot

    hashtag
    Description

    Request which notifies the device to reboot immediately. After a reboot, the device will switch its relays according to its schedule. Any ad hoc changes to relays will be lost.

    Response communicates status.

    SwitchFirmware

    hashtag
    Description

    Request to switch from the current firmware version to the other firmware version, indicated by the argument newFirmwareVersion.

    hashtag

    SwitchConfiguration

    hashtag
    Description

    Request to switch from the current (active) configuration set to the other configuration set, indicated by the configuration set index.

    hashtag

    message GetFirmwareVersionRequest {
        optional bool present = 1 [default = true];
    }
    
    message GetFirmwareVersionResponse {
        required string firmwareVersion = 1; // [(nanopb).max_size = 7]; // RXX
    }
    message SetEventNotificationsRequest {
        required uint32 NotificationMask = 1; // Bitmask for max 32 events, using NotificationBit for bit positions.
    }
    
    message SetEventNotificationsResponse {
        required Status status = 1;
    }
    getConfigurationRequest {
    }
    hashtag
    Message definitions

    hashtag
    Data types

    hashtag
    Example

    Soap requests and responses sent to and from platform:

    OSLP SetLightRequest sent to 'device-01':

    OSLP SetLightResponse sent to platform:

    message SetLightRequest {
        repeated LightValue values = 1; // [(nanopb).max_count = 6];
    }
    
    message SetLightResponse {
        required Status status = 1;
    }
    hashtag
    Message definitions

    hashtag
    Data types

    hashtag
    Example

    Soap requests and responses sent to and from platform:

    OSLP ResumeScheduleRequest sent to 'device-01':

    OSLP ResumeScheduleResponse sent to platform:

    message ResumeScheduleRequest {
        optional bytes index = 1; // [(nanopb).max_size = 1]; // index number of connected light (DALI), none means all connected lights.
        required bool immediate = 2; // [default = false]; // Resume at next schedule item or direct
    }
    
    message ResumeScheduleResponse {
        required Status status = 1;
    }
    hashtag
    Message definitions

    hashtag
    Data types

    hashtag
    Example

    Soap requests and responses sent to and from platform:

    OSLP UpdateFirmwareRequest sent to 'device-01' to update firmware:

    OSLP UpdateFirmwareResponse sent to the platform:

    message UpdateFirmwareRequest {
        required string firmwareDomain = 1; // [(nanopb).max_size = 100]; // Servername
        required string firmwareUrl = 2; // [(nanopb).max_size = 255]; // /firmware/TSTMAN/TSTMOD/RXX
    }
    
    message UpdateFirmwareResponse {
        required Status status = 1;
    }
    hashtag
    Message definitions

    hashtag
    Data types

    hashtag
    Example

    Soap requests and responses sent to and from platform:

    OSLP StartSelfTestRequest message sent to 'device-01':

    OSLP StartSelfTestResponse message sent to platform:

    message StartSelfTestRequest {
        optional bool present = 1 [default = true];
    }
    
    message StartSelfTestResponse {
        required Status status = 1;
    }
    hashtag
    Message definitions

    hashtag
    Data types

    hashtag
    Example

    Soap requests and responses sent to and from platform:

    OSLP StopSelfTestRequest sent to 'device-01':

    OSLP StopSelfTestResponse sent to platform:

    message StopSelfTestRequest {
        optional bool present = 1 [default = true];
    }
    
    message StopSelfTestResponse {
        required Status status = 1;
        required bytes selfTestResult = 2; // [(nanopb).max_size = 1];
    }
    hashtag
    Message definitions

    hashtag
    Datatypes

    hashtag
    Example

    Soap requests and responses sent to and from platform:

    OSLP GetStatusRequest sent to 'device-01':

    OSLP GetStatusResponse sent to platform:

    getStatusRequest {
    }
    Message definitions

    hashtag
    Datatypes

    hashtag
    Example

    Soap requests and responses sent to and from platform:

    OSLP messages:

    message UpdateDeviceSslCertificationRequest {
        required string certificateDomain = 1; // [(nanopb).max_size = 100]; // The domain name of the certificate Server.
        required string certificateUrl = 2; // [(nanopb).max_size = 255];    // The relative path of the certificate.
    }
    
    message UpdateDeviceSslCertificationResponse {
        required Status status = 1;
    }
    hashtag
    Message definitions

    hashtag
    Data types

    hashtag
    Example

    Soap requests and responses sent to and from platform:

    OSLP SetTransitionRequest sent to 'device-01':

    OSLP SetTransitionResponse sent to platform:

    light schedule-entry
    message SetTransitionRequest {
        required TransitionType transitionType = 1; // Night-Day or Day-Night transition
        optional string time = 2; // [(nanopb).max_size = 7]; // - format hhmmss UTC
    }
    
    message SetTransitionResponse {
        required Status status = 1;
    }
    Message definitions

    hashtag
    Datatypes

    hashtag
    Example

    Soap requests and responses sent to and from platform:

    OSLP messages:

    message SetDeviceVerificationKeyRequest {
        required bytes certificateChunk = 1; // [(nanopb).max_size = 138]; // Verification key / public key of the platform to check the validity of an incoming message.
    }
    
    message SetDeviceVerificationKeyResponse {
        required Status status = 1;
    }
    hashtag
    Message definitions

    hashtag
    Data types

    hashtag
    Example

    Soap requests and responses sent to and from platform:

    OSLP SetRebootRequest message sent to 'device-01':

    OSLP SetRebootResponse sent to platform:

    message SetRebootRequest {
        optional bool present = 1 [default = true];
    }
    
    message SetRebootResponse {
        required Status status = 1;
    }
    Message definitions

    hashtag
    Datatypes

    hashtag
    Example

    Soap requests and responses sent to and from platform:

    OSLP messages:

    message SwitchFirmwareRequest {
        required string newFirmwareVersion = 1; // [(nanopb).max_size = 6]; // The version of the firmware which should be installed. 
    }
    
    message SwitchFirmwareResponse {
        required Status status = 1; // FIRMWARE_EVENTS_ACTIVATING Event will be sent, after the firmware change has completed.
    }
    Message definitions

    hashtag
    Datatypes

    hashtag
    Example

    Soap requests and responses sent to and from platform:

    OSLP messages:

    message SwitchConfigurationRequest {
        required bytes newConfigurationSet = 1; // [(nanopb).max_count = 1]; // The index of the configuration set (0,1).
    }
    
    message SwitchConfigurationResponse {
        required Status status = 1; // FIRMWARE_EVENTS_CONFIGURATION_CHANGED Event will be sent, after the Configuration change.
    }
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:fman="http://www.opensmartgridplatform.org/schemas/firmwaremanagement">
       <soapenv:Header>
          <com:OrganisationIdentification>LianderNetManagement</com:OrganisationIdentification>
          <com:UserName>KevinSmeets</com:UserName>
          <com:ApplicationName>SoapUI</com:ApplicationName>
       </soapenv:Header>
       <soapenv:Body>
          <fman:GetFirmwareVersionRequest xmlns:fman="http://www.opensmartgridplatform.org/schemas/common/firmwaremanagement/2014/10">
             <!--type: Identification-->
             <fman:DeviceIdentification>device-01</fman:DeviceIdentification>
          </fman:GetFirmwareVersionRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns2:GetFirmwareVersionAsyncResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/common/firmwaremanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:AsyncResponse>
                <ns3:CorrelationUid>LianderNetManagement|||device-01|||20160104150323405</ns3:CorrelationUid>
                <ns3:DeviceId>device-01</ns3:DeviceId>
             </ns2:AsyncResponse>
          </ns2:GetFirmwareVersionAsyncResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:fman="http://www.opensmartgridplatform.org/schemas/firmwaremanagement">
       <soapenv:Header>
          <com:OrganisationIdentification>LianderNetManagement</com:OrganisationIdentification>
          <com:UserName>liander gebruiker</com:UserName>
          <com:ApplicationName>WEB_NET_MANAGEMENT</com:ApplicationName>
       </soapenv:Header>
       <soapenv:Body>
          <fman:GetFirmwareVersionAsyncRequest xmlns:fman="http://www.opensmartgridplatform.org/schemas/common/firmwaremanagement/2014/10">
             <fman:AsyncRequest>
                <!--type: CorrelationUid-->
                <com:CorrelationUid>LianderNetManagement|||device-01|||20160104150323405</com:CorrelationUid>
                <!--type: Identification-->
                <com:DeviceId>device-01</com:DeviceId>
             </fman:AsyncRequest>
          </fman:GetFirmwareVersionAsyncRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns2:GetFirmwareVersionResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/common/firmwaremanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:Result>OK</ns2:Result>
             <ns2:FirmwareVersion>R01</ns2:FirmwareVersion>
          </ns2:GetFirmwareVersionResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    getFirmwareVersionRequest {
    }
    getFirmwareVersionResponse {
      firmwareVersion: "R01"
    }
    enum Status {
        OK = 0;
        FAILURE = 1; // general failure
        REJECTED = 2; // request received in wrong state
    }
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:dev="http://www.opensmartgridplatform.org/schemas/devicemanagement/2014/10">
       <soapenv:Header>
       <com:OrganisationIdentification>LianderNetManagement</com:OrganisationIdentification>
       <com:UserName>liander gebruiker</com:UserName>
       <com:ApplicationName>WEB_NET_MANAGEMENT</com:ApplicationName>
       </soapenv:Header>
       <soapenv:Body>
          <dev:SetEventNotificationsRequest>
             <!--type: Identification-->
             <dev:DeviceIdentification>device-01</dev:DeviceIdentification>
             <dev:EventNotifications>DIAG_EVENTS</dev:EventNotifications>
             <dev:EventNotifications>HARDWARE_FAILURE</dev:EventNotifications>
             <dev:EventNotifications>LIGHT_EVENTS</dev:EventNotifications>
             <dev:EventNotifications>TARIFF_EVENTS</dev:EventNotifications>
             <dev:EventNotifications>MONITOR_EVENTS</dev:EventNotifications>
             <dev:EventNotifications>FIRMWARE_EVENTS</dev:EventNotifications>
             <dev:EventNotifications>COMM_EVENTS</dev:EventNotifications>
             <dev:EventNotifications>SECURITY_EVENTS</dev:EventNotifications>
          </dev:SetEventNotificationsRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns2:SetEventNotificationsAsyncResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/devicemanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:AsyncResponse>
                <ns3:CorrelationUid>LianderNetManagement|||device-01|||20160104145052565</ns3:CorrelationUid>
                <ns3:DeviceId>device-01</ns3:DeviceId>
             </ns2:AsyncResponse>
          </ns2:SetEventNotificationsAsyncResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:dev="http://www.opensmartgridplatform.org/schemas/devicemanagement/2014/10">
       <soapenv:Header>
       <com:OrganisationIdentification>LianderNetManagement</com:OrganisationIdentification>
       <com:UserName>liander gebruiker</com:UserName>
       <com:ApplicationName>WEB_NET_MANAGEMENT</com:ApplicationName>
       </soapenv:Header>
       <soapenv:Body>
          <dev:SetEventNotificationsAsyncRequest>
             <dev:AsyncRequest>
                <!--type: CorrelationUid-->
                <com:CorrelationUid>LianderNetManagement|||device-01|||20160104145052565</com:CorrelationUid>
                <!--type: Identification-->
                <com:DeviceId>device-01</com:DeviceId>
             </dev:AsyncRequest>
          </dev:SetEventNotificationsAsyncRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns2:SetEventNotificationsResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/devicemanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:Result>OK</ns2:Result>
          </ns2:SetEventNotificationsResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    setEventNotificationsRequest {
      NotificationMask: 255
    }
    setEventNotificationsResponse {
      status: OK
    }
    message GetConfigurationRequest {
        optional bool present = 1 [default = true];
    }
    
    message GetConfigurationResponse {
        required Status status = 1;
        optional LightType lightType = 2;
        optional DaliConfiguration daliConfiguration = 3;                                    // Contains specific configuration for DALI controllers.
        optional RelayConfiguration relayConfiguration = 4;                                  // Contains specific configuration for Relay.
        optional uint32 shortTermHistoryIntervalMinutes = 5; 
        optional LinkType preferredLinkType = 6;
        optional MeterType meterType = 7;
        optional uint32 longTermHistoryInterval = 8; 
        optional LongTermIntervalType longTermHistoryIntervalType = 9;
        optional uint32 timeSyncFrequency = 10 [default = 86400];                            // Time synch frequency (seconds).
        optional bytes deviceFixIpValue = 11; // [(nanopb).max_count = 4];                   // The fixed IP address of this device.
        optional bytes netMask = 12; // [(nanopb).max_count = 4];                            // Network mask for fixed IP address.
        optional bytes gateWay = 13; // [(nanopb).max_count = 4];                            // Gateway address for fixed IP address.
        optional bool isDhcpEnabled = 14 [default = true];                                   // Is DHCP enabled for this device?
        optional bool isTlsEnabled = 15;                                                     // Defines if TLS is enabled.
        optional uint32 oslpBindPortNumber = 16;                                             // The port used for TLS connections.
        optional string commonNameString = 17 [default = 'TLS Test']; //[default = 'TLS Test',(nanopb).max_count = 25]; // The common name (CN) used when isTlsEnabled equals true.
        optional uint32 communicationTimeout = 18 [default = 20];                            // Communication Timeouts (seconds) (wait for answer, socket establish, or server response = comm watchdog for local mode).
        optional uint32 communicationNumberOfRetries = 19 [default = 3];                     // Communication number of retries.
        optional uint32 communicationPauseTimeBetweenConnectionTrials = 20 [default = 60];   // Time between communication attempts.
        optional bytes ospgIpAddress = 21; // [(nanopb).max_count = 4];                      // The IP address of the platform.
        optional uint32 osgpPortNumber = 22;                                                 // The port number of the platform.
        optional bool isTestButtonEnabled = 23 [default = true];                             // Is the test button enabled for this device?
        optional bool isAutomaticSummerTimingEnabled = 24 [default = true];                  // Is the automatic summer timing enabled for this device?
        optional sint32 astroGateSunRiseOffset = 25 [default = 0];                           // The calculated sunrise time modified by this value. Time is moved earlier (if offset is negative) or later (if offset is positive). In seconds.
        optional sint32 astroGateSunSetOffset = 26 [default = 0];                            // The calculated sunset time modified by this value. Time is moved earlier (if offset is negative) or later (if offset is positive). In seconds.
        repeated uint32 switchingDelay = 27; // [(nanopb).max_count = 4];                    // Switching delay (seconds), array of 4 values. Default 0, 0, 0, 0.
        repeated RelayMatrix relayLinking = 28;                                              // Relay linking is a software linking, to may link each relay with each other relay. It is a matrix. Example, if relay 1 is linked with relay 3, if relay 1 will be switched (by OSGP or local by internal scheduler), the relay 3 will switch automatically (on or off, as it set) without new command.
        optional bool relayRefreshing = 29 [default = true];                                 // Is relayRefreshing enabled for this device? Set minutely the nominal relay state and status according to active schedule after power outage and missed switching or anti manipulation.
        optional string summerTimeDetails = 30 [default = '0360100']; //[default = '0360100',(nanopb).max_count = 7]; // The time point for DST for Europe is not identical in every country. It should be added as parameters the weekday, month and time point for DST/summer and winter.
        optional string winterTimeDetails = 31 [default = '1060200']; //[default = '1060200',(nanopb).max_count = 7]; // The time point for DST for Europe is not identical in every country. It should be added as parameters the weekday, month and time point for DST/summer and winter.
    }
    enum Status {
        OK = 0;
        FAILURE = 1; // general failure
        REJECTED = 2; // request received in wrong state
    }
    
    enum LightType {
        LT_NOT_SET = 0;
        RELAY = 1;
        ONE_TO_TEN_VOLT = 2;
        ONE_TO_TEN_VOLT_REVERSE = 3;
        DALI = 4;
    }
    
    message DaliConfiguration {
        optional bytes numberOfLights = 1; // [(nanopb).max_size = 1]; // number of lights connected to DALI controller
        repeated IndexAddressMap addressMap = 2; // [(nanopb).max_count = 4];
    }
    
    message RelayConfiguration {
        repeated IndexAddressMap addressMap = 1; // [(nanopb).max_count = 6];
    }
    
    message IndexAddressMap {
        required bytes index = 1; // [(nanopb).max_size = 1]; // external index, for example 1
        required bytes address = 2; // [(nanopb).max_size = 1]; // internal address, for example 2
        required RelayType relayType = 3;
    }
    
    enum RelayType {
        RT_NOT_SET = 0;
        LIGHT = 1;
        TARIFF = 2;
    }
    
    enum LinkType {
        LINK_NOT_SET = 0;
        GPRS = 1;
        CDMA = 2;
        ETHERNET = 3;
    }
    
    enum MeterType {
        MT_NOT_SET = 0;
        P1 = 1;
        PULSE = 2;
        AUX = 3;
    }
    
    enum LongTermIntervalType {
        LT_INT_NOT_SET = 0;
        DAYS = 1;
        MONTHS = 2;
    }
    
    message RelayMatrix {
        required bytes masterRelayIndex = 1;  // [(nanopb).max_count = 1];
        required bool masterRelayOn = 2; // [(nanopb).max_count = 1];
        optional bytes indicesOfControlledRelaysOn = 3; // [(nanopb).max_count = 4];  // IndexNumber of output Relay to switch ON if Master Relay state changes as determined by masterRelayOn.
        optional bytes indicesOfControlledRelaysOff = 4; // [(nanopb).max_count = 4]; // IndexNumber of output Relay to switch OFF if Master Relay sate changes as determined by MasterRelayOff.
    }
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:con="http://www.opensmartgridplatform.org/schemas/configurationmanagement/2014/10">
       <soapenv:Header>
          <com:OrganisationIdentification>LianderNetManagement</com:OrganisationIdentification>
          <com:UserName>Kevin</com:UserName>
          <com:ApplicationName>SoapUI</com:ApplicationName>
       </soapenv:Header>
       <soapenv:Body>
          <con:GetConfigurationRequest>
             <con:DeviceIdentification>device-01</con:DeviceIdentification>
          </con:GetConfigurationRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns2:GetConfigurationAsyncResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/configurationmanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:AsyncResponse>
                <ns3:CorrelationUid>LianderNetManagement|||device-01|||20161007142028655</ns3:CorrelationUid>
                <ns3:DeviceId>device-01</ns3:DeviceId>
             </ns2:AsyncResponse>
          </ns2:GetConfigurationAsyncResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:con="http://www.opensmartgridplatform.org/schemas/configurationmanagement/2014/10">
       <soapenv:Header>
          <com:OrganisationIdentification>LianderNetManagement</com:OrganisationIdentification>
          <com:UserName>Kevin</com:UserName>
          <com:ApplicationName>SoapUI</com:ApplicationName>
       </soapenv:Header>
       <soapenv:Body>
          <con:GetConfigurationAsyncRequest>
             <con:AsyncRequest>
                <com:CorrelationUid>LianderNetManagement|||device-01|||20161007142028655</com:CorrelationUid>
                <com:DeviceId>device-01</com:DeviceId>
             </con:AsyncRequest>
          </con:GetConfigurationAsyncRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns2:GetConfigurationResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/configurationmanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:Result>OK</ns2:Result>
             <ns2:Configuration>
                <ns2:LightType>RELAY</ns2:LightType>
                <ns2:RelayConfiguration>
                   <ns2:RelayMap>
                      <ns2:Index>1</ns2:Index>
                      <ns2:Address>1</ns2:Address>
                      <ns2:RelayType>TARIFF</ns2:RelayType>
                   </ns2:RelayMap>
                   <ns2:RelayMap>
                      <ns2:Index>2</ns2:Index>
                      <ns2:Address>2</ns2:Address>
                      <ns2:RelayType>LIGHT</ns2:RelayType>
                   </ns2:RelayMap>
                   <ns2:RelayMap>
                      <ns2:Index>3</ns2:Index>
                      <ns2:Address>3</ns2:Address>
                      <ns2:RelayType>LIGHT</ns2:RelayType>
                   </ns2:RelayMap>
                   <ns2:RelayMap>
                      <ns2:Index>4</ns2:Index>
                      <ns2:Address>4</ns2:Address>
                      <ns2:RelayType>LIGHT</ns2:RelayType>
                   </ns2:RelayMap>
                </ns2:RelayConfiguration>
                <ns2:PreferredLinkType>ETHERNET</ns2:PreferredLinkType>
                <ns2:TimeSyncFrequency>86400</ns2:TimeSyncFrequency>
                <ns2:DeviceFixedIp>
                   <ns2:IpAddress>192.168.0.100</ns2:IpAddress>
                   <ns2:NetMask>255.255.255.0</ns2:NetMask>
                   <ns2:GateWay>192.168.0.1</ns2:GateWay>
                </ns2:DeviceFixedIp>
                <ns2:DhcpEnabled>false</ns2:DhcpEnabled>
                <ns2:TlsEnabled>true</ns2:TlsEnabled>
                <ns2:TlsPortNumber>1234</ns2:TlsPortNumber>
                <ns2:CommonNameString>TLS Test</ns2:CommonNameString>
                <ns2:CommunicationTimeout>30</ns2:CommunicationTimeout>
                <ns2:CommunicationNumberOfRetries>5</ns2:CommunicationNumberOfRetries>
                <ns2:CommunicationPauseTimeBetweenConnectionTrials>120</ns2:CommunicationPauseTimeBetweenConnectionTrials>
                <ns2:OsgpIpAddress>168.63.97.65</ns2:OsgpIpAddress>
                <ns2:OsgpPortNumber>12122</ns2:OsgpPortNumber>
                <ns2:TestButtonEnabled>false</ns2:TestButtonEnabled>
                <ns2:AutomaticSummerTimingEnabled>false</ns2:AutomaticSummerTimingEnabled>
                <ns2:AstroGateSunRiseOffset>-15</ns2:AstroGateSunRiseOffset>
                <ns2:AstroGateSunSetOffset>15</ns2:AstroGateSunSetOffset>
                <ns2:SwitchingDelays>1</ns2:SwitchingDelays>
                <ns2:SwitchingDelays>2</ns2:SwitchingDelays>
                <ns2:SwitchingDelays>3</ns2:SwitchingDelays>
                <ns2:SwitchingDelays>4</ns2:SwitchingDelays>
                <ns2:RelayLinking>
                   <ns2:MasterRelayIndex>2</ns2:MasterRelayIndex>
                   <ns2:MasterRelayOn>false</ns2:MasterRelayOn>
                   <ns2:IndicesOfControlledRelaysOn>3</ns2:IndicesOfControlledRelaysOn>
                   <ns2:IndicesOfControlledRelaysOn>4</ns2:IndicesOfControlledRelaysOn>
                   <ns2:IndicesOfControlledRelaysOff>3</ns2:IndicesOfControlledRelaysOff>
                   <ns2:IndicesOfControlledRelaysOff>4</ns2:IndicesOfControlledRelaysOff>
                </ns2:RelayLinking>
                <ns2:RelayRefreshing>false</ns2:RelayRefreshing>
                <ns2:SummerTimeDetails>2016-03-27T01:00:00.000+01:00</ns2:SummerTimeDetails>
                <ns2:WinterTimeDetails>2016-10-30T02:00:00.000+02:00</ns2:WinterTimeDetails>
             </ns2:Configuration>
          </ns2:GetConfigurationResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    getConfigurationResponse {
      status: OK
      lightType: RELAY
      relayConfiguration {
        addressMap {
          index: "\001"
          address: "\001"
          relayType: TARIFF
        }
        addressMap {
          index: "\002"
          address: "\002"
          relayType: LIGHT
        }
        addressMap {
          index: "\003"
          address: "\003"
          relayType: LIGHT
        }
        addressMap {
          index: "\004"
          address: "\004"
          relayType: LIGHT
        }
      }
      shortTermHistoryIntervalMinutes: 15
      preferredLinkType: ETHERNET
      meterType: MT_NOT_SET
      longTermHistoryInterval: 1
      longTermHistoryIntervalType: LT_INT_NOT_SET
      timeSyncFrequency: 86400
      deviceFixIpValue: "\300\250\000d"
      netMask: "\377\377\377\000"
      gateWay: "\300\250\000\001"
      isDhcpEnabled: false
      isTlsEnabled: true
      oslpBindPortNumber: 1234
      commonNameString: "TLS Test"
      communicationTimeout: 30
      communicationNumberOfRetries: 5
      communicationPauseTimeBetweenConnectionTrials: 120
      ospgIpAddress: "\250?aA"
      osgpPortNumber: 12122
      isTestButtonEnabled: false
      isAutomaticSummerTimingEnabled: false
      astroGateSunRiseOffset: -15
      astroGateSunSetOffset: 15
      switchingDelay: 1
      switchingDelay: 2
      switchingDelay: 3
      switchingDelay: 4
      relayLinking {
        masterRelayIndex: "\002"
        masterRelayOn: false
        indicesOfControlledRelaysOn: "\003\004"
        indicesOfControlledRelaysOff: "\003\004"
      }
      relayRefreshing: false
      summerTimeDetails: "0360100"
      winterTimeDetails: "1060200"
    }
    message LightValue {
        optional bytes index = 1; // [(nanopb).max_size = 1]; // index number of connected light (DALI), none means all connected ligts.
        required bool on = 2;
        optional bytes dimValue = 3; // [(nanopb).max_size = 1]; // 1 - 100 %
    }
    
    enum Status {
        OK = 0;
        FAILURE = 1; // general failure
        REJECTED = 2; // request received in wrong state
    }
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header>
          <OrganisationIdentification xmlns="http://www.opensmartgridplatform.org/schemas/common">LianderNetManagement</OrganisationIdentification>
          <ApplicationName xmlns="http://www.opensmartgridplatform.org/schemas/common">WEB_OWNER</ApplicationName>
          <UserName xmlns="http://www.opensmartgridplatform.org/schemas/common">liander gebruiker</UserName>
       </SOAP-ENV:Header>
       <SOAP-ENV:Body>
          <ns2:SetLightRequest xmlns:ns2="http://www.opensmartgridplatform.org/schemas/publiclighting/adhocmanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:DeviceIdentification>device-01</ns2:DeviceIdentification>
             <ns2:LightValue>
                <ns2:On>true</ns2:On>
             </ns2:LightValue>
          </ns2:SetLightRequest>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header />
       <SOAP-ENV:Body>
          <ns2:SetLightAsyncResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/publiclighting/adhocmanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:AsyncResponse>
                <ns3:CorrelationUid>LianderNetManagement|||device-01|||20160105121022551</ns3:CorrelationUid>
                <ns3:DeviceId>device-01</ns3:DeviceId>
             </ns2:AsyncResponse>
          </ns2:SetLightAsyncResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header>
          <OrganisationIdentification xmlns="http://www.opensmartgridplatform.org/schemas/common">LianderNetManagement</OrganisationIdentification>
          <ApplicationName xmlns="http://www.opensmartgridplatform.org/schemas/common">WEB_OWNER</ApplicationName>
          <UserName xmlns="http://www.opensmartgridplatform.org/schemas/common">liander gebruiker</UserName>
       </SOAP-ENV:Header>
       <SOAP-ENV:Body>
          <ns2:SetLightAsyncRequest xmlns:ns2="http://www.opensmartgridplatform.org/schemas/publiclighting/adhocmanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:AsyncRequest>
                <ns3:CorrelationUid>LianderNetManagement|||device-01|||20160105121022551</ns3:CorrelationUid>
                <ns3:DeviceId>device-01</ns3:DeviceId>
             </ns2:AsyncRequest>
          </ns2:SetLightAsyncRequest>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header />
       <SOAP-ENV:Body>
          <ns2:SetLightResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/publiclighting/adhocmanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:Result>OK</ns2:Result>
          </ns2:SetLightResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    setLightRequest {
      values {
        on: true
      }
    }
    setLightResponse {
      status: OK
    }
    enum Status {
        OK = 0;
        FAILURE = 1; // general failure
        REJECTED = 2; // request received in wrong state
    }
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="http://www.opensmartgridplatform.org/schemas/publiclighting/2014/10" xmlns:adh="http://www.opensmartgridplatform.org/schemas/publiclighting/adhocmanagement/2014/10">
       <soapenv:Header>
          <com:OrganisationIdentification>LianderNetManagement</com:OrganisationIdentification>
          <com:UserName>liander gebruiker</com:UserName>
          <com:ApplicationName>WEB_NET_MANAGEMENT</com:ApplicationName>
       </soapenv:Header>
       <soapenv:Body>
          <adh:ResumeScheduleRequest>
             <adh:DeviceIdentification>device-01</adh:DeviceIdentification>
             <!--Optional:-->
             <adh:Index>1</adh:Index>
             <adh:IsImmediate>1</adh:IsImmediate>
          </adh:ResumeScheduleRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns2:ResumeScheduleAsyncResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/publiclighting/adhocmanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:AsyncResponse>
                <ns3:CorrelationUid>LianderNetManagement|||device-01|||20160104152159539</ns3:CorrelationUid>
                <ns3:DeviceId>device-01</ns3:DeviceId>
             </ns2:AsyncResponse>
          </ns2:ResumeScheduleAsyncResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:adh="http://www.opensmartgridplatform.org/schemas/publiclighting/adhocmanagement/2014/10">
       <soapenv:Header>
          <com:OrganisationIdentification>LianderNetManagement</com:OrganisationIdentification>
          <com:UserName>liander gebruiker</com:UserName>
          <com:ApplicationName>WEB_NET_MANAGEMENT</com:ApplicationName>
       </soapenv:Header>
       <soapenv:Body>
          <adh:ResumeScheduleAsyncRequest>
             <adh:AsyncRequest>
                <com:CorrelationUid>LianderNetManagement|||device-01|||20160104152159539</com:CorrelationUid>
                <com:DeviceId>device-01</com:DeviceId>
             </adh:AsyncRequest>
          </adh:ResumeScheduleAsyncRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns2:ResumeScheduleResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/publiclighting/adhocmanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:Result>OK</ns2:Result>
          </ns2:ResumeScheduleResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    resumeScheduleRequest {
      index: "\001"
      immediate: true
    }
    resumeScheduleResponse {
      status: OK
    }
    enum Status {
        OK = 0;
        FAILURE = 1; // general failure
        REJECTED = 2; // request received in wrong state
    }
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:fir="http://www.opensmartgridplatform.org/schemas/firmwaremanagement/2014/10">
       <soapenv:Header>
           <com:OrganisationIdentification>LianderNetManagement</com:OrganisationIdentification>
           <com:UserName>liander gebruiker</com:UserName>
           <com:ApplicationName>WEB_NET_MANAGEMENT</com:ApplicationName>
       </soapenv:Header>
       <soapenv:Body>   
          <fir1:UpdateFirmwareRequest xmlns:fir1="http://www.opensmartgridplatform.org/schemas/common/firmwaremanagement/2014/10">
             <!--type: Identification-->
             <fir1:DeviceIdentification>device-01</fir1:DeviceIdentification>
             <!--anonymous type-->
             <fir1:FirmwareIdentification>TSTMAN/TSTMOD/SSLD-V17</fir1:FirmwareIdentification>         
          </fir1:UpdateFirmwareRequest>      
       </soapenv:Body>
    </soapenv:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>   
          <ns2:UpdateFirmwareAsyncResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/common/firmwaremanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:AsyncResponse>         
                <ns3:CorrelationUid>LianderNetManagement|||device-01|||20160104145959438</ns3:CorrelationUid>
                <ns3:DeviceId>device-01</ns3:DeviceId>            
             </ns2:AsyncResponse>         
          </ns2:UpdateFirmwareAsyncResponse>      
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:fir="http://www.opensmartgridplatform.org/schemas/firmwaremanagement">
       <soapenv:Header>
       <com:OrganisationIdentification>LianderNetManagement</com:OrganisationIdentification>
       <com:UserName>liander gebruiker</com:UserName>
       <com:ApplicationName>WEB_NET_MANAGEMENT</com:ApplicationName>
       </soapenv:Header>
       <soapenv:Body>
          <fir1:UpdateFirmwareAsyncRequest xmlns:fir1="http://www.opensmartgridplatform.org/schemas/common/firmwaremanagement/2014/10">
             <fir1:AsyncRequest>
                <!--type: CorrelationUid-->
                <com:CorrelationUid>LianderNetManagement|||device-01|||20160104145959438</com:CorrelationUid>
                <!--type: Identification-->
                <com:DeviceId>device-01</com:DeviceId>
             </fir1:AsyncRequest>
          </fir1:UpdateFirmwareAsyncRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns2:UpdateFirmwareResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/common/firmwaremanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:Result>OK</ns2:Result>
          </ns2:UpdateFirmwareResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    updateFirmwareRequest {
      firmwareDomain: "flexovltest.cloudapp.net"
      firmwareUrl: "/firmware/TSTMAN/TSTMOD/SSLD-V17.hex"
    }
    updateFirmwareResponse {
      status: OK
    }
    enum Status {
        OK = 0;
        FAILURE = 1; // general failure
        REJECTED = 2; // request received in wrong state
    }
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:dev="http://www.opensmartgridplatform.org/schemas/deviceinstallation/2014/10">
       <soapenv:Header>
       <com:OrganisationIdentification>LianderNetManagement</com:OrganisationIdentification>
       <com:UserName>liander gebruiker</com:UserName>
       <com:ApplicationName>WEB_NET_MANAGEMENT</com:ApplicationName>
       </soapenv:Header>
       <soapenv:Body>
          <dev:StartDeviceTestRequest>
             <dev:DeviceIdentification>device-01</dev:DeviceIdentification>
          </dev:StartDeviceTestRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns2:StartDeviceTestAsyncResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/deviceinstallation/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:AsyncResponse>
                <ns3:CorrelationUid>LianderNetManagement|||device-01|||20160104155530194</ns3:CorrelationUid>
                <ns3:DeviceId>device-01</ns3:DeviceId>
             </ns2:AsyncResponse>
          </ns2:StartDeviceTestAsyncResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:dev="http://www.opensmartgridplatform.org/schemas/deviceinstallation/2014/10">
       <soapenv:Header>
       <com:OrganisationIdentification>LianderNetManagement</com:OrganisationIdentification>
       <com:UserName>liander gebruiker</com:UserName>
       <com:ApplicationName>WEB_NET_MANAGEMENT</com:ApplicationName>
       </soapenv:Header>
       <soapenv:Body>
          <dev:StartDeviceTestAsyncRequest>
             <dev:AsyncRequest>
                <com:CorrelationUid>LianderNetManagement|||device-01|||20160104155530194</com:CorrelationUid>
                <com:DeviceId>device-01</com:DeviceId>
             </dev:AsyncRequest>
          </dev:StartDeviceTestAsyncRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns2:StartDeviceTestResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/deviceinstallation/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:Result>OK</ns2:Result>
          </ns2:StartDeviceTestResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    startSelfTestRequest {
    }
    startSelfTestResponse {
      status: OK
    }
    enum Status {
        OK = 0;
        FAILURE = 1; // general failure
        REJECTED = 2; // request received in wrong state
    }
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:dev="http://www.opensmartgridplatform.org/schemas/deviceinstallation/2014/10">
       <soapenv:Header>
       <com:OrganisationIdentification>LianderNetManagement</com:OrganisationIdentification>
       <com:UserName>liander gebruiker</com:UserName>
       <com:ApplicationName>WEB_NET_MANAGEMENT</com:ApplicationName>
       </soapenv:Header>
       <soapenv:Body>
          <dev:StopDeviceTestRequest>
             <dev:DeviceIdentification>device-01</dev:DeviceIdentification>
          </dev:StopDeviceTestRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns2:StopDeviceTestAsyncResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/deviceinstallation/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:AsyncResponse>
                <ns3:CorrelationUid>LianderNetManagement|||device-01|||20160104160800238</ns3:CorrelationUid>
                <ns3:DeviceId>device-01</ns3:DeviceId>
             </ns2:AsyncResponse>
          </ns2:StopDeviceTestAsyncResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:dev="http://www.opensmartgridplatform.org/schemas/deviceinstallation/2014/10">
       <soapenv:Header>
       <com:OrganisationIdentification>LianderNetManagement</com:OrganisationIdentification>
       <com:UserName>liander gebruiker</com:UserName>
       <com:ApplicationName>WEB_NET_MANAGEMENT</com:ApplicationName>
       </soapenv:Header>
       <soapenv:Body>
          <dev:StopDeviceTestAsyncRequest>
             <dev:AsyncRequest>
                <com:CorrelationUid>LianderNetManagement|||device-01|||20160104160800238</com:CorrelationUid>
                <com:DeviceId>device-01</com:DeviceId>
             </dev:AsyncRequest>
          </dev:StopDeviceTestAsyncRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns2:StopDeviceTestResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/deviceinstallation/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:Result>OK</ns2:Result>
          </ns2:StopDeviceTestResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    stopSelfTestRequest {
    }
    stopSelfTestResponse {
      status: OK
      selfTestResult: "\000"
    }
    message GetStatusRequest {
        optional bool present = 1 [default = true];
    }
    
    message GetStatusResponse {
        required Status status = 1;
        repeated LightValue value = 2; // [(nanopb).max_count = 6];
        required LinkType preferredLinktype = 3;
        required LinkType actualLinktype = 4;
        required LightType lightType = 5;
        required uint32 eventNotificationMask = 6;         // Bitmask for max 32 events, using NotificationBit for bit positions.
        optional uint32 numberOfOutputs = 7;               // Hardware - The number of outputs of this device.
        optional uint32 dcOutputVoltageMaximum = 8;        // Hardware - DC output voltage MAXimum (in mV).
        optional uint32 dcOutputVoltageCurrent = 9;        // Hardware - DC output current voltage (in mV).
        optional uint32 maximumOutputPowerOnDcOutput = 10; // Hardware - Maximum output power on DC output (mW). 
        optional bytes serialNumber = 11; // [(nanopb).max_size = 18]; // Hardware - Serial number of this device.
        optional bytes macAddress = 12; // [(nanopb).max_size = 6]; // Hardware - MAC-address of this device.
        optional string hardwareId = 13; // [(nanopb).min_size = 10, (nanopd).max_size = 25] ; // Hardware - The hardware ID of this device.
        optional uint32 internalFlashMemSize = 14;         // Hardware - The internal flash memory size.
        optional uint32 externalFlashMemSize = 15;         // Hardware - The external flash memory size.
        optional uint32 lastInternalTestResultCode = 16;   // Hardware - The last internal test result code.
        optional uint32 startupCounter = 17;               // Hardware - The startup counter.
        optional string bootLoaderVersion = 18;            // Software - The boot loader version.
        optional string firmwareVersion = 19;              // Software - The firmware version.
        optional bytes currentConfigurationBackUsed = 20; // [(nanopb).max_size = 6]; // Software - The current configuration bank in use.
        optional string name = 21;                         // Device - The name of this device.
        optional string currentTime = 22;                  // Device - Not UTC, the time used in timing operations (adjusted "offset" + summer timing). YYYYMMDDhhmmss format.
        optional string currentIp = 23;                    // Device - The current IP address of this device.
    }
    enum Status {
        OK = 0;
        FAILURE = 1; // general failure
        REJECTED = 2; // request received in wrong state
    }
    
    message LightValue {
        optional bytes index = 1; // [(nanopb).max_size = 1]; // index number of connected light (DALI), none means all connected ligts.
        required bool on = 2;
        optional bytes dimValue = 3; // [(nanopb).max_size = 1]; // 1 - 100 %
    }
    
    enum LinkType {
        LINK_NOT_SET = 0;
        GPRS = 1;
        CDMA = 2;
        ETHERNET = 3;
    }
    
    enum LightType {
        LT_NOT_SET = 0;
        RELAY = 1;
        ONE_TO_TEN_VOLT = 2;
        ONE_TO_TEN_VOLT_REVERSE = 3;
        DALI = 4;
    }
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header>
          <OrganisationIdentification xmlns="http://www.opensmartgridplatform.org/schemas/common">LianderNetManagement</OrganisationIdentification>
          <ApplicationName xmlns="http://www.opensmartgridplatform.org/schemas/common">SoapUI</ApplicationName>
          <UserName xmlns="http://www.opensmartgridplatform.org/schemas/common">Kevin</UserName>
       </SOAP-ENV:Header>
       <SOAP-ENV:Body>
          <ns2:GetStatusRequest xmlns:ns2="http://www.opensmartgridplatform.org/schemas/publiclighting/adhocmanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:DeviceIdentification>device-01</ns2:DeviceIdentification>
          </ns2:GetStatusRequest>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header />
       <SOAP-ENV:Body>
          <ns2:GetStatusAsyncResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/publiclighting/adhocmanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:AsyncResponse>
                <ns3:CorrelationUid>LianderNetManagement|||device-01|||20160106133844686</ns3:CorrelationUid>
                <ns3:DeviceId>device-01</ns3:DeviceId>
             </ns2:AsyncResponse>
          </ns2:GetStatusAsyncResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header>
          <OrganisationIdentification xmlns="http://www.opensmartgridplatform.org/schemas/common">LianderNetManagement</OrganisationIdentification>
          <ApplicationName xmlns="http://www.opensmartgridplatform.org/schemas/common">SoapUI</ApplicationName>
          <UserName xmlns="http://www.opensmartgridplatform.org/schemas/common">Kevin</UserName>
       </SOAP-ENV:Header>
       <SOAP-ENV:Body>
          <ns2:GetStatusAsyncRequest xmlns:ns2="http://www.opensmartgridplatform.org/schemas/publiclighting/adhocmanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:AsyncRequest>
                <ns3:CorrelationUid>LianderNetManagement|||device-01|||20160106133844686</ns3:CorrelationUid>
                <ns3:DeviceId>device-01</ns3:DeviceId>
             </ns2:AsyncRequest>
          </ns2:GetStatusAsyncRequest>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns3:GetStatusResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/deviceinstallation/2014/10">
             <ns3:Result>OK</ns3:Result>
             <ns3:DeviceStatus>
                <ns3:LightValues>
                   <ns3:Index>1</ns3:Index>
                   <ns3:On>false</ns3:On>
                </ns3:LightValues>
                <ns3:LightValues>
                   <ns3:Index>2</ns3:Index>
                   <ns3:On>false</ns3:On>
                </ns3:LightValues>
                <ns3:TariffValues>
                   <ns3:Index>3</ns3:Index>
                   <ns3:High>true</ns3:High>
                </ns3:TariffValues>
                <ns3:PreferredLinkType>ETHERNET</ns3:PreferredLinkType>
                <ns3:ActualLinkType>ETHERNET</ns3:ActualLinkType>
                <ns3:LightType>RELAY</ns3:LightType>
                <ns3:EventNotifications>DIAG_EVENTS</ns3:EventNotifications>
                <ns3:EventNotifications>HARDWARE_FAILURE</ns3:EventNotifications>
                <ns3:EventNotifications>LIGHT_EVENTS</ns3:EventNotifications>
                <ns3:EventNotifications>TARIFF_EVENTS</ns3:EventNotifications>
                <ns3:EventNotifications>MONITOR_EVENTS</ns3:EventNotifications>
                <ns3:EventNotifications>FIRMWARE_EVENTS</ns3:EventNotifications>
                <ns3:EventNotifications>COMM_EVENTS</ns3:EventNotifications>
                <ns3:EventNotifications>SECURITY_EVENTS</ns3:EventNotifications>
                <ns3:NumberOfOutputs>4</ns3:NumberOfOutputs>
                <ns3:DcOutputVoltageMaximum>24000</ns3:DcOutputVoltageMaximum>
                <ns3:DcOutputVoltageCurrent>0</ns3:DcOutputVoltageCurrent>
                <ns3:MaximumOutputPowerOnDcOutput>15000</ns3:MaximumOutputPowerOnDcOutput>
                <ns3:MacAddress>D8-80-39-46-17-4E</ns3:MacAddress>
                <ns3:HardwareId>SB10</ns3:HardwareId>
                <ns3:InternalFlashMemSize>1048576</ns3:InternalFlashMemSize>
                <ns3:ExternalFlashMemSize>8388608</ns3:ExternalFlashMemSize>
                <ns3:LastInternalTestResultCode>0</ns3:LastInternalTestResultCode>
                <ns3:StartupCounter>2</ns3:StartupCounter>
                <ns3:BootLoaderVersion>v1.0</ns3:BootLoaderVersion>
                <ns3:FirmwareVersion>W0311g</ns3:FirmwareVersion>
                <ns3:CurrentConfigurationBackUsed>0</ns3:CurrentConfigurationBackUsed>
                <ns3:Name>device-01</ns3:Name>
                <ns3:CurrentTime>20160313141247</ns3:CurrentTime>
                <ns3:CurrentIp>192.168.178.16</ns3:CurrentIp>
             </ns3:DeviceStatus>
          </ns3:GetStatusResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    getStatusResponse {
      status: OK
      value {
        index: "\001"
        on: false
      }
      value {
        index: "\002"
        on: false
      }
      value {
        index: "\003"
        on: false
      }
      value {
        index: "\004"
        on: false
      }
      preferredLinktype: ETHERNET
      actualLinktype: ETHERNET
      lightType: RELAY
      eventNotificationMask: 255
      numberOfOutputs: 4
      dcOutputVoltageMaximum: 24000
      dcOutputVoltageCurrent: 0
      maximumOutputPowerOnDcOutput: 15000
      serialNumber: "123456789123456789"
      macAddress: "\330\2009F\027N"
      hardwareId: "SB10                      "
      internalFlashMemSize: 1048576
      externalFlashMemSize: 8388608
      lastInternalTestResultCode: 0
      startupCounter: 2
      bootLoaderVersion: "v1.0"
      firmwareVersion: "W0311g"
      currentConfigurationBackUsed: "\000"
      name: "device-01"
      currentTime: "20160313141247"
      currentIp: "192.168.178.16"
    }
    enum Status {
        OK = 0;
        FAILURE = 1; // general failure
        REJECTED = 2; // request received in wrong state
    }
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:ns1="http://www.opensmartgridplatform.org/schemas/devicemanagement/2014/10">
       <soapenv:Header>
          <ns:ApplicationName>SoapUI</ns:ApplicationName>
          <ns:UserName>Kevin</ns:UserName>
          <ns:OrganisationIdentification>LianderNetManagement</ns:OrganisationIdentification>
       </soapenv:Header>
       <soapenv:Body>
          <ns1:UpdateDeviceSslCertificationRequest>
             <!--type: Identification-->
             <ns1:DeviceIdentification>device-01</ns1:DeviceIdentification>
             <ns1:Certification>
                <ns1:certificateDomain>cert-server</ns1:certificateDomain>
                <ns1:certificateUrl>/certs/new-cert.pem</ns1:certificateUrl>
             </ns1:Certification>
          </ns1:UpdateDeviceSslCertificationRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns2:UpdateDeviceSslCertificationAsyncResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/devicemanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:AsyncResponse>
                <ns3:CorrelationUid>LianderNetManagement|||device-01|||20160305115500062</ns3:CorrelationUid>
                <ns3:DeviceId>device-01</ns3:DeviceId>
             </ns2:AsyncResponse>
          </ns2:UpdateDeviceSslCertificationAsyncResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:ns1="http://www.opensmartgridplatform.org/schemas/devicemanagement/2014/10">
       <soapenv:Header>
          <ns:ApplicationName>SoapUI</ns:ApplicationName>
          <ns:UserName>Kevin</ns:UserName>
          <ns:OrganisationIdentification>LianderNetManagement</ns:OrganisationIdentification>
       </soapenv:Header>
       <soapenv:Body>
          <ns1:UpdateDeviceSslCertificationAsyncRequest>
             <ns1:AsyncRequest>
                <!--type: CorrelationUid-->
                <ns:CorrelationUid>LianderNetManagement|||device-01|||20160305115500062</ns:CorrelationUid>
                <!--type: Identification-->
                <ns:DeviceId>device-01</ns:DeviceId>
             </ns1:AsyncRequest>
          </ns1:UpdateDeviceSslCertificationAsyncRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns2:UpdateDeviceSslCertificationResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/devicemanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:Result>OK</ns2:Result>
          </ns2:UpdateDeviceSslCertificationResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    updateDeviceSslCertificationRequest {
      certificateDomain: "cert-server"
      certificateUrl: "/certs/new-cert.pem"
    }
    
    updateDeviceSslCertificationResponse {
      status: OK
    }
    enum TransitionType {
        NIGHT_DAY = 0;
        DAY_NIGHT = 1;
    }
    
    enum Status {
        OK = 0;
        FAILURE = 1; // general failure
        REJECTED = 2; // request received in wrong state
    }
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:adh="http://www.opensmartgridplatform.org/schemas/publiclighting/adhocmanagement/2014/10" xmlns:com="http://www.opensmartgridplatform.org/schemas/publiclighting/2014/10">
       <soapenv:Header>
          <com:OrganisationIdentification>LianderNetManagement</com:OrganisationIdentification>
          <com:UserName>liander gebruiker</com:UserName>
          <com:ApplicationName>SoapUI</com:ApplicationName>
       </soapenv:Header>
       <soapenv:Body>
          <adh:SetTransitionRequest>
             <adh:DeviceIdentification>device-01</adh:DeviceIdentification>
             <adh:TransitionType>NIGHT_DAY</adh:TransitionType>
             <!--Optional:-->
             <adh:Time>07:55:01</adh:Time>
          </adh:SetTransitionRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns2:SetTransitionAsyncResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/publiclighting/adhocmanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:AsyncResponse>
                <ns3:CorrelationUid>LianderNetManagement|||device-01|||20160106155501582</ns3:CorrelationUid>
                <ns3:DeviceId>device-01</ns3:DeviceId>
             </ns2:AsyncResponse>
          </ns2:SetTransitionAsyncResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:adh="http://www.opensmartgridplatform.org/schemas/publiclighting/adhocmanagement/2014/10">
       <soapenv:Header>
          <com:OrganisationIdentification>LianderNetManagement</com:OrganisationIdentification>
          <com:UserName>liander gebruiker</com:UserName>
          <com:ApplicationName>SoapUI</com:ApplicationName>
       </soapenv:Header>
       <soapenv:Body>
          <adh:SetTransitionAsyncRequest>
             <adh:AsyncRequest>
                <com:CorrelationUid>LianderNetManagement|||device-01|||20160106155501582</com:CorrelationUid>
                <com:DeviceId>device-01</com:DeviceId>
             </adh:AsyncRequest>
          </adh:SetTransitionAsyncRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns2:SetTransitionResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/publiclighting/adhocmanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:Result>OK</ns2:Result>
          </ns2:SetTransitionResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    setTransitionRequest {
      transitionType: NIGHT_DAY
      time: "075501"
    }
    setTransitionResponse {
      status: OK
    }
    enum Status {
        OK = 0;
        FAILURE = 1; // general failure
        REJECTED = 2; // request received in wrong state
    }
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:ns1="http://www.opensmartgridplatform.org/schemas/devicemanagement/2014/10">
       <soapenv:Header>
          <ns:ApplicationName>SoapUI</ns:ApplicationName>
          <ns:UserName>Kevin</ns:UserName>
          <ns:OrganisationIdentification>LianderNetManagement</ns:OrganisationIdentification>
       </soapenv:Header>
       <soapenv:Body>
          <ns1:SetDeviceVerificationKeyRequest>
             <!--type: Identification-->
             <ns1:DeviceIdentification>device-01</ns1:DeviceIdentification>
             <!--type: VerificationKey-->
             <ns1:VerificationKey>MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEow7CWR7EiNDRt1XQ/h1UrLE24zY3BkA582mfiywZ2h8tPkwleCBfcyLeZvS0T4NGz+zzO5CZphlD1TQtjL/ZXg==</ns1:VerificationKey>
          </ns1:SetDeviceVerificationKeyRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns2:SetDeviceVerificationKeyAsyncResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/devicemanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:AsyncResponse>
                <ns3:CorrelationUid>LianderNetManagement|||device-01|||20160305122132785</ns3:CorrelationUid>
                <ns3:DeviceId>device-01</ns3:DeviceId>
             </ns2:AsyncResponse>
          </ns2:SetDeviceVerificationKeyAsyncResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:ns1="http://www.opensmartgridplatform.org/schemas/devicemanagement/2014/10">
       <soapenv:Header>
          <ns:ApplicationName>SoapUI</ns:ApplicationName>
          <ns:UserName>Kevin</ns:UserName>
          <ns:OrganisationIdentification>LianderNetManagement</ns:OrganisationIdentification>
       </soapenv:Header>
       <soapenv:Body>
          <ns1:SetDeviceVerificationKeyAsyncRequest>
             <ns1:AsyncRequest>
                <!--type: CorrelationUid-->
                <ns:CorrelationUid>LianderNetManagement|||device-01|||20160305122132785</ns:CorrelationUid>
                <!--type: Identification-->
                <ns:DeviceId>device-01</ns:DeviceId>
             </ns1:AsyncRequest>
          </ns1:SetDeviceVerificationKeyAsyncRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns2:SetDeviceVerificationKeyResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/devicemanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:Result>OK</ns2:Result>
          </ns2:SetDeviceVerificationKeyResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    setDeviceVerificationKeyRequest {
      certificateChunk: "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEow7CWR7EiNDRt1XQ/h1UrLE24zY3BkA582mfiywZ2h8tPkwleCBfcyLeZvS0T4NGz+zzO5CZphlD1TQtjL/ZXg=="
    }
    
    setDeviceVerificationKeyResponse {
      status: OK
    }
    enum Status {
        OK = 0;
        FAILURE = 1; // general failure
        REJECTED = 2; // request received in wrong state
    }
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:ns1="http://www.opensmartgridplatform.org/schemas/adhocmanagement/2014/10" xmlns:com="http://www.opensmartgridplatform.org/schemas/common" xmlns:adh="http://www.opensmartgridplatform.org/schemas/adhocmanagement">
       <soapenv:Header>
           <com:OrganisationIdentification>LianderNetManagement</com:OrganisationIdentification>
           <com:UserName>liander gebruiker</com:UserName>
           <com:ApplicationName>WEB_NET_MANAGEMENT</com:ApplicationName>
       </soapenv:Header>
       <soapenv:Body>
          <ns1:SetRebootRequest>
             <!--type: Identification-->
             <ns1:DeviceIdentification>device-01</ns1:DeviceIdentification>
          </ns1:SetRebootRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns3:SetRebootAsyncResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/adhocmanagement/2014/10">
             <ns3:AsyncResponse>
                <ns2:CorrelationUid>LianderNetManagement|||device-01|||20160104153201024</ns2:CorrelationUid>
                <ns2:DeviceId>device-01</ns2:DeviceId>
             </ns3:AsyncResponse>
          </ns3:SetRebootAsyncResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:ns1="http://www.opensmartgridplatform.org/schemas/adhocmanagement/2014/10" xmlns:com="http://www.opensmartgridplatform.org/schemas/common" xmlns:adh="http://www.opensmartgridplatform.org/schemas/adhocmanagement">
       <soapenv:Header>
       <com:OrganisationIdentification>LianderNetManagement</com:OrganisationIdentification>
       <com:UserName>liander gebruiker</com:UserName>
       <com:ApplicationName>WEB_NET_MANAGEMENT</com:ApplicationName>
       </soapenv:Header>
       <soapenv:Body>
          <ns1:SetRebootAsyncRequest>
             <ns1:AsyncRequest>
                <!--type: CorrelationUid-->
                <ns:CorrelationUid>LianderNetManagement|||device-01|||20160104153201024</ns:CorrelationUid>
                <!--type: Identification-->
                <ns:DeviceId>device-01</ns:DeviceId>
             </ns1:AsyncRequest>
          </ns1:SetRebootAsyncRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns3:SetRebootResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/adhocmanagement/2014/10">
             <ns3:Result>OK</ns3:Result>
          </ns3:SetRebootResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    setRebootRequest {
    }
    setRebootResponse {
      status: OK
    }
    enum Status {
        OK = 0;
        FAILURE = 1; // general failure
        REJECTED = 2; // request received in wrong state
    }
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:ns1="http://www.opensmartgridplatform.org/schemas/common/firmwaremanagement/2014/10">
       <soapenv:Header>
          <ns:ApplicationName>SoapUI</ns:ApplicationName>
          <ns:UserName>Kevin</ns:UserName>
          <ns:OrganisationIdentification>LianderNetManagement</ns:OrganisationIdentification>
       </soapenv:Header>
       <soapenv:Body>
          <ns1:SwitchFirmwareRequest>
             <!--type: Identification-->
             <ns1:DeviceIdentification>device-01</ns1:DeviceIdentification>
             <!--type: string-->
             <ns1:Version>W0311g</ns1:Version>
          </ns1:SwitchFirmwareRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns2:SwitchFirmwareAsyncResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/common/firmwaremanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:AsyncResponse>
                <ns3:CorrelationUid>LianderNetManagement|||device-01|||20160313211917467</ns3:CorrelationUid>
                <ns3:DeviceId>device-01</ns3:DeviceId>
             </ns2:AsyncResponse>
          </ns2:SwitchFirmwareAsyncResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:ns1="http://www.opensmartgridplatform.org/schemas/common/firmwaremanagement/2014/10">
       <soapenv:Header>
          <ns:ApplicationName>SoapUI</ns:ApplicationName>
          <ns:UserName>Kevin</ns:UserName>
          <ns:OrganisationIdentification>LianderNetManagement</ns:OrganisationIdentification>
       </soapenv:Header>
       <soapenv:Body>
          <ns1:SwitchFirmwareAsyncRequest>
             <ns1:AsyncRequest>
                <!--type: CorrelationUid-->
                <ns:CorrelationUid>LianderNetManagement|||device-01|||20160313211917467</ns:CorrelationUid>
                <!--type: Identification-->
                <ns:DeviceId>device-01</ns:DeviceId>
             </ns1:AsyncRequest>
          </ns1:SwitchFirmwareAsyncRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns2:SwitchFirmwareResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/common/firmwaremanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:Result>OK</ns2:Result>
          </ns2:SwitchFirmwareResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    switchFirmwareRequest {
      newFirmwareVersion: "W0311g"
    }
    
    switchFirmwareResponse {
      status: OK
    }
    enum Status {
        OK = 0;
        FAILURE = 1; // general failure
        REJECTED = 2; // request received in wrong state
    }
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:ns1="http://www.opensmartgridplatform.org/schemas/configurationmanagement/2014/10">
       <soapenv:Header>
          <ns:ApplicationName>SoapUI</ns:ApplicationName>
          <ns:UserName>Kevin</ns:UserName>
          <ns:OrganisationIdentification>LianderNetManagement</ns:OrganisationIdentification>
       </soapenv:Header>
       <soapenv:Body>
          <ns1:SwitchConfigurationRequest>
             <!--type: Identification-->
             <ns1:DeviceIdentification>device-01</ns1:DeviceIdentification>
             <!--type: int, 0 or 1-->
             <ns1:ConfigurationBank>1</ns1:ConfigurationBank>
          </ns1:SwitchConfigurationRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns2:SwitchConfigurationAsyncResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/configurationmanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:AsyncResponse>
                <ns3:CorrelationUid>LianderNetManagement|||device-01|||20160313210830055</ns3:CorrelationUid>
                <ns3:DeviceId>device-01</ns3:DeviceId>
             </ns2:AsyncResponse>
          </ns2:SwitchConfigurationAsyncResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:ns1="http://www.opensmartgridplatform.org/schemas/configurationmanagement/2014/10">
       <soapenv:Header>
          <ns:ApplicationName>SoapUI</ns:ApplicationName>
          <ns:UserName>Kevin</ns:UserName>
          <ns:OrganisationIdentification>LianderNetManagement</ns:OrganisationIdentification>
       </soapenv:Header>
       <soapenv:Body>
          <ns1:SwitchConfigurationAsyncRequest>
             <ns1:AsyncRequest>
                <!--type: CorrelationUid-->
                <ns:CorrelationUid>LianderNetManagement|||device-01|||20160313210830055</ns:CorrelationUid>
                <!--type: Identification-->
                <ns:DeviceId>device-01</ns:DeviceId>
             </ns1:AsyncRequest>
          </ns1:SwitchConfigurationAsyncRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns2:SwitchConfigurationResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/configurationmanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:Result>OK</ns2:Result>
          </ns2:SwitchConfigurationResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    switchConfigurationRequest {
      newConfigurationSet: "1"
    }
    
    switchConfigurationResponse {
      status: OK
    }
    hashtag
    Message definitions

    hashtag
    Datatypes

    hashtag
    Examples

    hashtag
    Example 1: Light schedule based on light measurement

    Screenshot of this schedule in an OSGP client application.

    screenshot of schedule

    SOAP Request Message for Platform web service:

    SOAP Response Message:

    OSLP SetScheduleRequest sent to 'device-01' to set a Light Schedule (1 page in this case, therefore no pagingInfo needed):

    OSLP SetScheduleResponse from 'device-01':

    Description for this schedule:

    This schedule combines a 'morning/evening light' with an 'all night light'. Relay 1 and 2 will be switched on using a light measurement trigger. Relay 2 will be switched off at 23:00 using an absolute time. Relay 2 will be switched on at 07:00, but only when no light measurement trigger has been received yet. Relay 1 and 2 will be switched off using a light measurement trigger.

    The first schedule-entry:

    Definitions:

    • 'index: "\000"' means: all device relays configured as LIGHT relays (see SetConfigurationRequest message)

    • 'light measurement trigger' is defined as: a SetTransitionRequest message containing a TransitionType matching the schedule-entry's actionTime value (SUNRISE matches NIGHT_DAY and SUNSET matches DAY_NIGHT)

    Specifies: For all (weekday: ALL) 7 days of the week, when a light measurement trigger is received in the morning (actionTime: SUNRISE), then all device relays configured as LIGHT relays have to switch off (on: false).

    When and only when a SUNRISE transition is received via a light measurement trigger (LIGHT_TRIGGER) within a window of 15 minutesBefore and 15 minutesAfter the calculated astronomical time for sunrise, then the device shall switch for the received light measurement trigger.

    When no SUNRISE transition is received via a light measurement trigger (LIGHT_TRIGGER) within a window of 15 minutesBefore and 15 minutesAfter the calculated astronomical time for sunrise, then the device shall switch at the end of the window.

    The triggerType (LIGHT_TRIGGER) defines how a SUNRISE (actionTime) transition will be triggered.

    The second schedule-entry:

    Definitions:

    • 'index: "\000"' means: all device relays configured as LIGHT relays (see SetConfigurationRequest message)

    • 'light measurement trigger' is defined as: a SetTransitionRequest message containing a TransitionType matching the schedule-entry's actionTime value (SUNRISE matches NIGHT_DAY and SUNSET matches DAY_NIGHT)

    Specifies: For all (weekday: ALL) 7 days of the week, when a light measurement trigger is received in the morning (actionTime: SUNSET), then all device relays configured as LIGHT relays have to switch on (on: true).

    When and only when a SUNSET transition is received via a light measurement trigger (triggerType: LIGHT_TRIGGER) within a window of 15 minutesBefore and 15 minutesAfter the calculated astronomical time for sunset, then the device shall switch for the received light measurement trigger.

    When no SUNSET transition is received via a light measurement trigger (triggerType: LIGHT_TRIGGER) within a window of 15 minutesBefore and 15 minutesAfter the calculated astronomical time for sunrise, then the device shall switch at the end of the window.

    The triggerType (LIGHT_TRIGGER) defines how a SUNSET (actionTime) transition will be triggered.

    The third schedule-entry:

    Specifies: For all (weekday: ALL) 7 days of the week, when its 11 'o clock in the evening (actionTime: ABSOLUTETIME and time: "230000") then device relay 2 has to switch off (on: false).

    Since actionTime is ABSOLUTETIME, the triggerType value must be omitted from this schedule-entry.

    The fourth schedule-entry:

    For all (weekday: ALL) 7 days of the week, when its 7 'o clock in the morning (actionTime: ABSOLUTETIME and time: "070000") and there are no other schedule-entries that have caused the switching of device relay 2 within the window defined (minutesBefore: 150 and minutesAfter) then device relay 2 has to switch on (on: true).

    Since actionTime is ABSOLUTETIME, the triggerType value must be omitted from this schedule-entry.

    The last element of the SetScheduleRequest:

    specifies that this is a light schedule.

    SOAP Request to obtain response from 'device-01':

    SOAP Response containing response from 'device-01':

    hashtag
    Example 2: Light schedule based on absolute time and day

    SOAP messages:

    OSLP SetScheduleRequest sent to 'device-01' to set a Light Schedule:

    OSLP SetScheduleResponse sent to platform:

    Description for this schedule:

    This schedule has one entry which switches light relay 1 (index: "\001") off at January 1st 2016 at 7 'o clock in the morning. When 'weekday' is set to ABSOLUTEDAY, the date will be placed in 'startDay'.

    hashtag
    Example 3: Schedule using OSLP v0.6.1 specific properties

    SOAP messages:

    OSLP SetScheduleRequest sent to 'device-01':

    OSLP SetScheduleResponse from 'device-01':

    Description for this schedule:

    This schedule consists of 1 page, and uses 'minimumLightOn' to indicate a minimal burning time in seconds. Further it uses 'index' and 'isEnabled' variables for the Schedule struct, to indicate what index this schedule-entry has within the list of schedule-entries and whether or not the schedule-entry is enabled.

    Astronomical Offsets

    The SOAP request message may contain information about astronomical offsets (see the documentation about light schedules for more details about the offsets). When AstronomicalSunriseOffset and/or AstronomicalSunsetOffset are set, they will be configured on the device by updating the configuration setting the offsets as astroGateSunRiseOffset and astroGateSunSetOffset of the SetConfigurationRequest.

    hashtag
    Example 4: Tariff Schedule

    SOAP Request Message for Platform web service:

    SOAP Response Message:

    OSLP SetScheduleRequest sent to 'device-01' to set a Tariff Schedule (2 pages in this case):

    OSLP SetScheduleResponse from 'device-01' for page 1:

    OSLP SetScheduleResponse from 'device-01' for page 2:

    Description for this schedule:

    This schedule defines the tariff switching moments. For most weekdays of the year the tariff is high from 7 'o clock in the morning until 11 'o clock in the evening. During the night and weekend, the tariff is low. However for certain days, like Christmas Day, the tariff has to be low as well (Christmas Day may be a weekday).

    The first schedule-entry:

    specifies that for every work day of the week (weekday: WEEKDAY meaning from Monday until Friday) from 1st of January 2015 until 1st of February 2016 (startDay: "20150101" and endDay: "20160201") at 11 'o clock in the evening (actionTime: ABSOLUTETIME and time: "230000") the relay with index 3 (index: "\003") has to switch on (on: true). When a device is configured to have relay 3 as TARIFF relay, this means the tariff will be low. When a device is configured to have relay 3 as TARIFF_REVERSED, this means the tariff will be high.

    The second schedule-entry:

    specifies that for every work day of the week (weekday: WEEKDAY meaning from Monday until Friday) from 1st of January 2015 until 1st of February 2016 (startDay: "20150101" and endDay: "20160201") at 7 'o clock in the morning (actionTime: ABSOLUTETIME and time: "070000") the relay with index 3 (index: "\003") has to switch off (on: false). When a device is configured to have relay 3 as TARIFF relay, this means the tariff will be high. When a device is configured to have relay 3 as TARIFF_REVERSED, this means the tariff will be low.

    The third schedule-entry:

    specifies that for every work day of the week (weekday: WEEKDAY meaning from Monday until Friday) from 1st of January 2015 until 1st of January 2015 (startDay: "20150101" and endDay: "20150101") at 7 'o clock in the morning (actionTime: ABSOLUTETIME and time: "070000") the relay with index 3 (index: "\003") has to switch on (on: true). When a device is configured to have relay 3 as TARIFF relay, this means the tariff will be low. When a device is configured to have relay 3 as TARIFF_REVERSED, this means the tariff will be high. This schedule entry is needed to make sure that the tariff is low for a particular day of the year (New Year's Day).

    The fourth schedule-entry:

    specifies that for every work day of the week (weekday: WEEKDAY meaning from Monday until Friday) from 6st of April 2015 until 6st of April 2015 (startDay: "20150406" and endDay: "20150406") at 7 'o clock in the morning (actionTime: ABSOLUTETIME and time: "070000") the relay with index 3 (index: "\003") has to switch on (on: true). When a device is configured to have relay 3 as TARIFF relay, this means the tariff will be low. When a device is configured to have relay 3 as TARIFF_REVERSED, this means the tariff will be high. This schedule entry is needed to make sure that the tariff is low for a particular day of the year (Easter Monday).

    The fifth schedule-entry:

    specifies that for every work day of the week (weekday: WEEKDAY meaning from Monday until Friday) from 27st of April 2015 until 27st of April 2015 (startDay: "20150427" and endDay: "20150427") at 7 'o clock in the morning (actionTime: ABSOLUTETIME and time: "070000") the relay with index 3 (index: "\003") has to switch on (on: true). When a device is configured to have relay 3 as TARIFF relay, this means the tariff will be low. When a device is configured to have relay 3 as TARIFF_REVERSED, this means the tariff will be high. This schedule entry is needed to make sure that the tariff is low for a particular day of the year (Dutch Kings Day).

    The pagination info:

    specifies that this is the first page of a total of 2 pages. The pageSize is set by the platform and can be any value from 1 to 50.

    The last element of the SetScheduleRequest:

    specifies that this is a tariff schedule.

    The sixth schedule-entry (page 2):

    specifies that for every work day of the week (weekday: WEEKDAY meaning from Monday until Friday) from 14th of May 2015 until 14th of May 2015 (startDay: "20150514" and endDay: "20150514") at 7 'o clock in the morning (actionTime: ABSOLUTETIME and time: "070000") the relay with index 3 (index: "\003") has to switch on (on: true). When a device is configured to have relay 3 as TARIFF relay, this means the tariff will be low. When a device is configured to have relay 3 as TARIFF_REVERSED, this means the tariff will be high. This schedule entry is needed to make sure that the tariff is low for a particular day of the year (Ascension Day).

    The seventh schedule-entry (page 2):

    specifies that for every work day of the week (weekday: WEEKDAY meaning from Monday until Friday) from 25th of May 2015 until 25th of May 2015 (startDay: "20150525" and endDay: "20150525") at 7 'o clock in the morning (actionTime: ABSOLUTETIME and time: "070000") the relay with index 3 (index: "\003") has to switch on (on: true). When a device is configured to have relay 3 as TARIFF relay, this means the tariff will be low. When a device is configured to have relay 3 as TARIFF_REVERSED, this means the tariff will be high. This schedule entry is needed to make sure that the tariff is low for a particular day of the year (Whit Monday).

    The eighth schedule-entry (page 2):

    specifies that for every work day of the week (weekday: WEEKDAY meaning from Monday until Friday) from 25th of December 2015 until 25th of December 2015 (startDay: "20151225" and endDay: "20151225") at 7 'o clock in the morning (actionTime: ABSOLUTETIME and time: "070000") the relay with index 3 (index: "\003") has to switch on (on: true). When a device is configured to have relay 3 as TARIFF relay, this means the tariff will be low. When a device is configured to have relay 3 as TARIFF_REVERSED, this means the tariff will be high. This schedule entry is needed to make sure that the tariff is low for a particular day of the year (Christmas Day).

    The ninth schedule-entry (page 2):

    specifies that for every work day of the week (weekday: WEEKDAY meaning from Monday until Friday) from 1st of January 2016 until 1st of January 2016 (startDay: "20160101" and endDay: "20160101") at 7 'o clock in the morning (actionTime: ABSOLUTETIME and time: "070000") the relay with index 3 (index: "\003") has to switch on (on: true). When a device is configured to have relay 3 as TARIFF relay, this means the tariff will be low. When a device is configured to have relay 3 as TARIFF_REVERSED, this means the tariff will be high. This schedule entry is needed to make sure that the tariff is low for a particular day of the year (New Year's Day).

    The pagination info (page 2):

    specifies that this is the second page of a total of 2 pages. The pageSize is set by the platform and can be any value from 1 to 50.

    The last element of the SetScheduleRequest:

    specifies that this is a tariff schedule.

    SOAP Request to obtain response from 'device-01':

    SOAP Response containing response from 'device-01':

    message SetScheduleRequest {
        repeated Schedule schedules = 1; // [(nanopb).max_count = 50];
        optional PageInfo pageInfo = 2;
        required RelayType scheduleType = 3; // RT_NOT_SET is NOT supported!
    }
    
    message SetScheduleResponse {
        required Status status = 1;
    }
    message Schedule {
        required Weekday weekday = 1;
        optional string startDay = 2; // [(nanopb).max_size = 9]; //- Format YYYYMMDD UTC, indicates the range of a schedule entry, from startDay.
        optional string endDay = 3; // [(nanopb).max_size = 9]; // - Format YYYYMMDD UTC, including endDay.
        required ActionTime actionTime = 4;
        optional string time = 5; // [(nanopb).max_size = 7]; // - Format hhmmss localtime set when actionTime = ABSOLUTETIME.
        optional Window window = 6;           // Window to wait for light sensor trigger.
        repeated LightValue value = 7; // [(nanopb).max_count = 6];
        optional TriggerType triggerType = 8; // React to setTransition or switch astronomical.
        optional uint32 minimumLightsOn = 9;  // Minimal time (in seconds) the lights should burn before deciding to switch the lights on.
        optional uint32 index = 10;           // Index of schedule entry in the schedule list.
        optional bool isEnabled = 11;         // Is this schedule entry enabled?
    }
    
    enum Weekday {
        MONDAY = 1;
        TUESDAY = 2;
        WEDNESDAY = 3;
        THURSDAY = 4;
        FRIDAY = 5;
        SATURDAY = 6;
        SUNDAY = 7;
        WEEKDAY = 8;
        WEEKEND = 9;
        ABSOLUTEDAY = 10;
        ALL = 11;
    }
    
    enum ActionTime {
        ABSOLUTETIME = 1;
        SUNRISE = 2;
        SUNSET = 3;
    }
    
    message Window {
        required uint32 minutesBefore = 1; // minutes before sunset / sunrise
        required uint32 minutesAfter = 2; // minutes after sunset / sunrise
    }
    
    message LightValue {
        optional bytes index = 1; // [(nanopb).max_size = 1]; // index number of connected light (DALI), none means all connected ligts.
        required bool on = 2;
        optional bytes dimValue = 3; // [(nanopb).max_size = 1]; // 1 - 100 %
    }
    
    enum TriggerType {
        TT_NOT_SET = 0;
        LIGHT_TRIGGER = 1;
        ASTRONOMICAL = 2;
    }
    
    message PageInfo {
        required uint32 currentPage = 1; // Pages start from 1
        required uint32 pageSize = 2;
        required uint32 totalPages = 3;
    }
    
    enum RelayType {
        RT_NOT_SET = 0;
        LIGHT = 1;
        TARIFF = 2;
    }
    
    enum Status {
        OK = 0;
        FAILURE = 1; // general failure
        REJECTED = 2; // request received in wrong state
    }
    <soapenv:Envelope
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:com="http://www.opensmartgridplatform.org/schemas/publiclighting/2014/10"
    xmlns:sch="http://www.opensmartgridplatform.org/schemas/publiclighting/schedulemanagement/2014/10">
       <soapenv:Header>
         <com:OrganisationIdentification>LianderNetManagement</com:OrganisationIdentification>
         <com:UserName>Kevin</com:UserName>
         <com:ApplicationName>SoapUI</com:ApplicationName>
       </soapenv:Header>
       <soapenv:Body>
    
          <sch:SetScheduleRequest>
             <!--type: Identification-->
             <sch:DeviceIdentification>device-01</sch:DeviceIdentification>
             <!--1 to 50 repetitions:-->
             <sch:Schedules>
                <!--type: WeekDayType - enumeration: [MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY,WEEKDAY,WEEKEND,ABSOLUTEDAY,ALL]-->
                <sch:WeekDay>ALL</sch:WeekDay>
                <!--type: ActionTimeType - enumeration: [ABSOLUTETIME,SUNRISE,SUNSET]-->
                <sch:ActionTime>SUNRISE</sch:ActionTime>
                <!--Optional:-->
                <sch:TriggerWindow>
                   <!--type: long-->
                   <sch:minutesBefore>15</sch:minutesBefore>
                   <!--type: long-->
                   <sch:minutesAfter>15</sch:minutesAfter>
                </sch:TriggerWindow>
                <!--1 to 6 repetitions:-->
                <sch:LightValue>
                   <!--Optional:-->
                   <!--anonymous type-->
                   <sch:Index>0</sch:Index>
                   <!--type: boolean-->
                   <sch:On>false</sch:On>
                </sch:LightValue>
                <!--Optional:-->
                <!--type: TriggerType - enumeration: [LIGHT_TRIGGER,ASTRONOMICAL]-->
                <sch:TriggerType>LIGHT_TRIGGER</sch:TriggerType>
             </sch:Schedules>
    
             <sch:Schedules>
                <!--type: WeekDayType - enumeration: [MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY,WEEKDAY,WEEKEND,ABSOLUTEDAY,ALL]-->
                <sch:WeekDay>ALL</sch:WeekDay>
                <!--type: ActionTimeType - enumeration: [ABSOLUTETIME,SUNRISE,SUNSET]-->
                <sch:ActionTime>SUNSET</sch:ActionTime>
                <!--Optional:-->
                <sch:TriggerWindow>
                   <!--type: long-->
                   <sch:minutesBefore>15</sch:minutesBefore>
                   <!--type: long-->
                   <sch:minutesAfter>15</sch:minutesAfter>
                </sch:TriggerWindow>
                <!--1 to 6 repetitions:-->
                <sch:LightValue>
                   <!--Optional:-->
                   <!--anonymous type-->
                   <sch:Index>0</sch:Index>
                   <!--type: boolean-->
                   <sch:On>true</sch:On>
                </sch:LightValue>
                <!--Optional:-->
                <!--type: TriggerType - enumeration: [LIGHT_TRIGGER,ASTRONOMICAL]-->
                <sch:TriggerType>LIGHT_TRIGGER</sch:TriggerType>
             </sch:Schedules>
    
             <sch:Schedules>
                <!--type: WeekDayType - enumeration: [MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY,WEEKDAY,WEEKEND,ABSOLUTEDAY,ALL]-->
                <sch:WeekDay>ALL</sch:WeekDay>
                <!--type: ActionTimeType - enumeration: [ABSOLUTETIME,SUNRISE,SUNSET]-->
                <sch:ActionTime>ABSOLUTETIME</sch:ActionTime>
                <!--Optional:-->
                <!--type: string-->
                <sch:Time>23:00:00</sch:Time>
                <!--Optional:-->
                <sch:TriggerWindow>
                   <!--type: long-->
                   <sch:minutesBefore>30</sch:minutesBefore>
                   <!--type: long-->
                   <sch:minutesAfter>30</sch:minutesAfter>
                </sch:TriggerWindow>
                <!--1 to 6 repetitions:-->
                <sch:LightValue>
                   <!--Optional:-->
                   <!--anonymous type-->
                   <sch:Index>2</sch:Index>
                   <!--type: boolean-->
                   <sch:On>false</sch:On>
                </sch:LightValue>
             </sch:Schedules>
    
             <sch:Schedules>
                <!--type: WeekDayType - enumeration: [MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY,WEEKDAY,WEEKEND,ABSOLUTEDAY,ALL]-->
                <sch:WeekDay>ALL</sch:WeekDay>
                <!--type: ActionTimeType - enumeration: [ABSOLUTETIME,SUNRISE,SUNSET]-->
                <sch:ActionTime>ABSOLUTETIME</sch:ActionTime>
                <!--Optional:-->
                <!--type: string-->
                <sch:Time>07:00:00</sch:Time>
                <!--Optional:-->
                <sch:TriggerWindow>
                   <!--type: long-->
                   <sch:minutesBefore>150</sch:minutesBefore>
                   <!--type: long-->
                   <sch:minutesAfter>41</sch:minutesAfter>
                </sch:TriggerWindow>
                <!--1 to 6 repetitions:-->
                <sch:LightValue>
                   <!--Optional:-->
                   <!--anonymous type-->
                   <sch:Index>2</sch:Index>
                   <!--type: boolean-->
                   <sch:On>true</sch:On>
                   <!--Optional:-->
                   <!--anonymous type-->
                   <!--<sch:DimValue>100</sch:DimValue>-->
                </sch:LightValue>
             </sch:Schedules>
    
          </sch:SetScheduleRequest>
    
       </soapenv:Body>
    </soapenv:Envelope>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns3:SetScheduleAsyncResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/publiclighting/schedulemanagement/2014/10">
             <ns3:AsyncResponse>
                <ns2:CorrelationUid>LianderNetManagement|||device-01|||20151230104608559</ns2:CorrelationUid>
                <ns2:DeviceId>device-01</ns2:DeviceId>
             </ns3:AsyncResponse>
          </ns3:SetScheduleAsyncResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    setScheduleRequest {
      schedules {
        weekday: ALL
        actionTime: SUNRISE
        window {
          minutesBefore: 15
          minutesAfter: 15
        }
        value {
          index: "\000"
          on: false
        }
        triggerType: LIGHT_TRIGGER
      }
      schedules {
        weekday: ALL
        actionTime: SUNSET
        window {
          minutesBefore: 15
          minutesAfter: 15
        }
        value {
          index: "\000"
          on: true
        }
        triggerType: LIGHT_TRIGGER
      }
      schedules {
        weekday: ALL
        actionTime: ABSOLUTETIME
        time: "230000"
        window {
          minutesBefore: 30
          minutesAfter: 30
        }
        value {
          index: "\002"
          on: false
        }
      }
      schedules {
        weekday: ALL
        actionTime: ABSOLUTETIME
        time: "070000"
        window {
          minutesBefore: 150
          minutesAfter: 41
        }
        value {
          index: "\002"
          on: true
        }
      }
      scheduleType: LIGHT
    }
    setScheduleResponse {
      status: OK
    }
      schedules {
        weekday: ALL
        actionTime: SUNRISE
        window {
          minutesBefore: 15
          minutesAfter: 15
        }
        value {
          index: "\000"
          on: false
        }
        triggerType: LIGHT_TRIGGER
      }
      schedules {
        weekday: ALL
        actionTime: SUNSET
        window {
          minutesBefore: 15
          minutesAfter: 15
        }
        value {
          index: "\000"
          on: true
        }
        triggerType: LIGHT_TRIGGER
      }
      schedules {
        weekday: ALL
        actionTime: ABSOLUTETIME
        time: "230000"
        window {
          minutesBefore: 30
          minutesAfter: 30
        }
        value {
          index: "\002"
          on: false
        }
      }
      schedules {
        weekday: ALL
        actionTime: ABSOLUTETIME
        time: "070000"
        window {
          minutesBefore: 150
          minutesAfter: 41
        }
        value {
          index: "\002"
          on: true
        }
      }
      scheduleType: LIGHT
    <soapenv:Envelope
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:com="http://www.opensmartgridplatform.org/schemas/common/2014/10"
    xmlns:sch="http://www.opensmartgridplatform.org/schemas/publiclighting/schedulemanagement/2014/10">
       <soapenv:Header>
           <com:OrganisationIdentification>LianderNetManagement</com:OrganisationIdentification>
           <com:UserName>Kevin</com:UserName>
           <com:ApplicationName>SoapUI</com:ApplicationName>
       </soapenv:Header>
       <soapenv:Body>
          <sch:SetScheduleAsyncRequest>
             <sch:AsyncRequest>
                <com:CorrelationUid>LianderNetManagement|||device-01|||20151230104608559</com:CorrelationUid>
                <com:DeviceId>device-01</com:DeviceId>
             </sch:AsyncRequest>
          </sch:SetScheduleAsyncRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    `
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns3:SetScheduleResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/publiclighting/schedulemanagement/2014/10">
             <ns3:Result>OK</ns3:Result>
          </ns3:SetScheduleResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header>
          <OrganisationIdentification xmlns="http://www.opensmartgridplatform.org/schemas/common">LianderNetManagement</OrganisationIdentification>
          <ApplicationName xmlns="http://www.opensmartgridplatform.org/schemas/common">SoapUI</ApplicationName>
          <UserName xmlns="http://www.opensmartgridplatform.org/schemas/common">Kevin</UserName>
       </SOAP-ENV:Header>
       <SOAP-ENV:Body>
          <ns3:SetScheduleRequest xmlns:ns3="http://www.opensmartgridplatform.org/schemas/publiclighting/schedulemanagement/2014/10" xmlns:ns2="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns3:DeviceIdentification>device-01</ns3:DeviceIdentification>
             <ns3:Schedules>
                <ns3:WeekDay>ABSOLUTEDAY</ns3:WeekDay>
                <ns3:startDay>2016-01-01Z</ns3:startDay>
                <ns3:ActionTime>ABSOLUTETIME</ns3:ActionTime>
                <ns3:Time>07:00:00.000</ns3:Time>
                <ns3:LightValue>
                   <ns3:Index>1</ns3:Index>
                   <ns3:On>false</ns3:On>
                </ns3:LightValue>
             </ns3:Schedules>
          </ns3:SetScheduleRequest>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header />
       <SOAP-ENV:Body>
          <ns3:SetScheduleAsyncResponse xmlns:ns3="http://www.opensmartgridplatform.org/schemas/publiclighting/schedulemanagement/2014/10" xmlns:ns2="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns3:AsyncResponse>
                <ns2:CorrelationUid>LianderNetManagement|||device-01|||20160113131032759</ns2:CorrelationUid>
                <ns2:DeviceId>device-01</ns2:DeviceId>
             </ns3:AsyncResponse>
          </ns3:SetScheduleAsyncResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header>
          <OrganisationIdentification xmlns="http://www.opensmartgridplatform.org/schemas/common">LianderNetManagement</OrganisationIdentification>
          <ApplicationName xmlns="http://www.opensmartgridplatform.org/schemas/common">SoapUI</ApplicationName>
          <UserName xmlns="http://www.opensmartgridplatform.org/schemas/common">Kevin</UserName>
       </SOAP-ENV:Header>
       <SOAP-ENV:Body>
          <ns3:SetScheduleAsyncRequest xmlns:ns3="http://www.opensmartgridplatform.org/schemas/publiclighting/schedulemanagement/2014/10" xmlns:ns2="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns3:AsyncRequest>
                <ns2:CorrelationUid>LianderNetManagement|||device-01|||20160113131032759</ns2:CorrelationUid>
                <ns2:DeviceId>device-01</ns2:DeviceId>
             </ns3:AsyncRequest>
          </ns3:SetScheduleAsyncRequest>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header />
       <SOAP-ENV:Body>
          <ns3:SetScheduleResponse xmlns:ns3="http://www.opensmartgridplatform.org/schemas/publiclighting/schedulemanagement/2014/10" xmlns:ns2="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns3:Result>OK</ns3:Result>
          </ns3:SetScheduleResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    setScheduleRequest {
      schedules {
        weekday: ABSOLUTEDAY
        startDay: "20160101"
        actionTime: ABSOLUTETIME
        time: "070000"
        value {
          index: "\001"
          on: false
        }
      }
      scheduleType: LIGHT
    }
    setScheduleResponse {
      status: OK
    }
    <soapenv:Envelope
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:com="http://www.opensmartgridplatform.org/schemas/publiclighting/2014/10"
    xmlns:sch="http://www.opensmartgridplatform.org/schemas/publiclighting/schedulemanagement/2014/10">
       <soapenv:Header>
       <com:OrganisationIdentification>LianderNetManagement</com:OrganisationIdentification>
       <com:UserName>Kevin</com:UserName>
       <com:ApplicationName>SoapUI</com:ApplicationName>
       </soapenv:Header>
       <soapenv:Body>
          <sch:SetScheduleRequest>
             <!--type: Identification-->
             <sch:DeviceIdentification>device-01</sch:DeviceIdentification>
             <!--1 to 50 repetitions:-->
             <sch:Schedules>
                <!--type: WeekDayType - enumeration: [MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY,WEEKDAY,WEEKEND,ABSOLUTEDAY,ALL]-->
                <sch:WeekDay>ALL</sch:WeekDay>
                <!--type: ActionTimeType - enumeration: [ABSOLUTETIME,SUNRISE,SUNSET]-->
                <sch:ActionTime>SUNRISE</sch:ActionTime>
                <!--Optional:-->
                <sch:TriggerWindow>
                   <!--type: long-->
                   <sch:minutesBefore>15</sch:minutesBefore>
                   <!--type: long-->
                   <sch:minutesAfter>15</sch:minutesAfter>
                </sch:TriggerWindow>
                <!--1 to 6 repetitions:-->
                <sch:LightValue>
                   <!--Optional:-->
                   <!--anonymous type-->
                   <sch:Index>0</sch:Index>
                   <!--type: boolean-->
                   <sch:On>false</sch:On>
                </sch:LightValue>
                <!--Optional:-->
                <!--type: TriggerType - enumeration: [LIGHT_TRIGGER,ASTRONOMICAL]-->
                <sch:TriggerType>LIGHT_TRIGGER</sch:TriggerType>
                <!--Optional:-->
                <!--type: int, index of this schedule-entry-->
                <sch:Index>0</sch:Index>
                <!--Optional:-->
                <!--type: boolean-->
                <sch:IsEnabled>true</sch:IsEnabled>
                <!--Optional:-->
                <!--type: int, minimal burning time in seconds-->
                <!--<sch:minimumLightsOn>300</sch:minimumLightsOn>-->
             </sch:Schedules>
    
             <sch:Schedules>
                <!--type: WeekDayType - enumeration: [MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY,WEEKDAY,WEEKEND,ABSOLUTEDAY,ALL]-->
                <sch:WeekDay>ALL</sch:WeekDay>
                <!--type: ActionTimeType - enumeration: [ABSOLUTETIME,SUNRISE,SUNSET]-->
                <sch:ActionTime>SUNSET</sch:ActionTime>
                <!--Optional:-->
                <sch:TriggerWindow>
                   <!--type: long-->
                   <sch:minutesBefore>15</sch:minutesBefore>
                   <!--type: long-->
                   <sch:minutesAfter>15</sch:minutesAfter>
                </sch:TriggerWindow>
                <!--1 to 6 repetitions:-->
                <sch:LightValue>
                   <!--Optional:-->
                   <!--anonymous type-->
                   <sch:Index>0</sch:Index>
                   <!--type: boolean-->
                   <sch:On>true</sch:On>
                </sch:LightValue>
                <!--Optional:-->
                <!--type: TriggerType - enumeration: [LIGHT_TRIGGER,ASTRONOMICAL]-->
                <sch:TriggerType>LIGHT_TRIGGER</sch:TriggerType>
                <!--Optional:-->
                <!--type: int, index of this schedule-entry-->
                <sch:Index>1</sch:Index>
                <!--Optional:-->
                <!--type: boolean-->
                <sch:IsEnabled>true</sch:IsEnabled>
                <!--Optional:-->
                <!--type: int, minimal burning time in seconds-->
                <!--<sch:minimumLightsOn>300</sch:minimumLightsOn>-->
             </sch:Schedules>
    
             <sch:Schedules>
                <!--type: WeekDayType - enumeration: [MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY,WEEKDAY,WEEKEND,ABSOLUTEDAY,ALL]-->
                <sch:WeekDay>ALL</sch:WeekDay>
                <!--type: ActionTimeType - enumeration: [ABSOLUTETIME,SUNRISE,SUNSET]-->
                <sch:ActionTime>ABSOLUTETIME</sch:ActionTime>
                <!--Optional:-->
                <!--type: string-->
                <sch:Time>23:00:00</sch:Time>
                <!--Optional:-->
                <sch:TriggerWindow>
                   <!--type: long-->
                   <sch:minutesBefore>30</sch:minutesBefore>
                   <!--type: long-->
                   <sch:minutesAfter>30</sch:minutesAfter>
                </sch:TriggerWindow>
                <!--1 to 6 repetitions:-->
                <sch:LightValue>
                   <!--Optional:-->
                   <!--anonymous type-->
                   <sch:Index>1</sch:Index>
                   <!--type: boolean-->
                   <sch:On>false</sch:On>
                </sch:LightValue>
                <!--Optional:-->
                <!--type: int, index of this schedule-entry-->
                <sch:Index>2</sch:Index>
                <!--Optional:-->
                <!--type: boolean-->
                <sch:IsEnabled>true</sch:IsEnabled>
                <!--Optional:-->
                <!--type: int, minimal burning time in seconds-->
                <!--<sch:minimumLightsOn>300</sch:minimumLightsOn>-->
             </sch:Schedules>
    
             <sch:Schedules>
                <!--type: WeekDayType - enumeration: [MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY,WEEKDAY,WEEKEND,ABSOLUTEDAY,ALL]-->
                <sch:WeekDay>ALL</sch:WeekDay>
                <!--type: ActionTimeType - enumeration: [ABSOLUTETIME,SUNRISE,SUNSET]-->
                <sch:ActionTime>ABSOLUTETIME</sch:ActionTime>
                <!--Optional:-->
                <!--type: string-->
                <sch:Time>07:00:00</sch:Time>
                <!--Optional:-->
                <sch:TriggerWindow>
                   <!--type: long-->
                   <sch:minutesBefore>30</sch:minutesBefore>
                   <!--type: long-->
                   <sch:minutesAfter>30</sch:minutesAfter>
                </sch:TriggerWindow>
                <!--1 to 6 repetitions:-->
                <sch:LightValue>
                   <!--Optional:-->
                   <!--anonymous type-->
                   <sch:Index>1</sch:Index>
                   <!--type: boolean-->
                   <sch:On>true</sch:On>
                   <!--Optional:-->
                   <!--anonymous type-->
                   <!--<sch:DimValue>100</sch:DimValue>-->
                </sch:LightValue>
                <!--Optional:-->
                <!--type: int, index of this schedule-entry-->
                <sch:Index>3</sch:Index>
                <!--Optional:-->
                <!--type: boolean-->
                <sch:IsEnabled>true</sch:IsEnabled>
                <!--Optional:-->
                <!--type: int, minimal burning time in seconds-->
                <sch:minimumLightsOn>300</sch:minimumLightsOn>
             </sch:Schedules>
          </sch:SetScheduleRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns2:SetScheduleAsyncResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/publiclighting/schedulemanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:AsyncResponse>
                <ns3:CorrelationUid>LianderNetManagement|||device-01|||20160313162236547</ns3:CorrelationUid>
                <ns3:DeviceId>device-01</ns3:DeviceId>
             </ns2:AsyncResponse>
          </ns2:SetScheduleAsyncResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:ns1="http://www.opensmartgridplatform.org/schemas/publiclighting/schedulemanagement/2014/10">
       <soapenv:Header>
          <ns:ApplicationName>SoapUI</ns:ApplicationName>
          <ns:UserName>Kevin</ns:UserName>
          <ns:OrganisationIdentification>LianderNetManagement</ns:OrganisationIdentification>
       </soapenv:Header>
       <soapenv:Body>
          <ns1:SetScheduleAsyncRequest>
             <ns1:AsyncRequest>
                <ns:CorrelationUid>LianderNetManagement|||device-01|||20160313162236547</ns:CorrelationUid>
                <ns:DeviceId>device-01</ns:DeviceId>
             </ns1:AsyncRequest>
          </ns1:SetScheduleAsyncRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns2:SetScheduleResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/publiclighting/schedulemanagement/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/common/2014/10">
             <ns2:Result>OK</ns2:Result>
          </ns2:SetScheduleResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    setScheduleRequest {
      schedules {
        weekday: ALL
        actionTime: SUNRISE
        window {
          minutesBefore: 15
          minutesAfter: 15
        }
        value {
          index: "\000"
          on: false
        }
        triggerType: LIGHT_TRIGGER
        index: 0
        isEnabled: true
      }
      schedules {
        weekday: ALL
        actionTime: SUNSET
        window {
          minutesBefore: 15
          minutesAfter: 15
        }
        value {
          index: "\000"
          on: true
        }
        triggerType: LIGHT_TRIGGER
        index: 1
        isEnabled: true
      }
      schedules {
        weekday: ALL
        actionTime: ABSOLUTETIME
        time: "230000"
        window {
          minutesBefore: 30
          minutesAfter: 30
        }
        value {
          index: "\001"
          on: false
        }
        index: 2
        isEnabled: true
      }
      schedules {
        weekday: ALL
        actionTime: ABSOLUTETIME
        time: "070000"
        window {
          minutesBefore: 30
          minutesAfter: 30
        }
        value {
          index: "\001"
          on: true
        }
        minimumLightsOn: 300
        index: 3
        isEnabled: true
      }
      scheduleType: LIGHT
    }
    setScheduleResponse {
      status: OK
    }
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:sch="http://www.opensmartgridplatform.org/schemas/tariffswitching/schedulemanagement/2014/10">
       <soapenv:Header>
          <com:OrganisationIdentification>LianderNetManagement</com:OrganisationIdentification>
          <com:UserName>Kevin</com:UserName>
          <com:ApplicationName>SoapUI</com:ApplicationName>
       </soapenv:Header>
       <soapenv:Body>
          <sch:SetScheduleRequest>
             <sch:DeviceIdentification>device-01</sch:DeviceIdentification>
             <!--1 to 50 repetitions:-->
             <sch:Schedules>
                <sch:WeekDay>WEEKDAY</sch:WeekDay>
                <sch:StartDay>2015-01-01</sch:StartDay>
                <sch:EndDay>2016-02-01</sch:EndDay>
                <sch:Time>23:00:00</sch:Time>
                <!--1 to 6 repetitions:-->
                <sch:TariffValue>
                   <sch:Index>3</sch:Index>
                   <sch:High>0</sch:High>
                </sch:TariffValue>
             </sch:Schedules>
    
             <sch:Schedules>
                <sch:WeekDay>WEEKDAY</sch:WeekDay>
                <sch:StartDay>2015-01-01</sch:StartDay>
                <sch:EndDay>2016-02-01</sch:EndDay>
                <sch:Time>07:00:00</sch:Time>
                <!--1 to 6 repetitions:-->
                <sch:TariffValue>
                   <sch:Index>3</sch:Index>
                   <sch:High>1</sch:High>
                </sch:TariffValue>
             </sch:Schedules>
    
             <sch:Schedules>
                <sch:WeekDay>ABSOLUTEDAY</sch:WeekDay>
                <sch:StartDay>2015-01-01</sch:StartDay>
                <sch:EndDay>2015-01-01</sch:EndDay>
                <sch:Time>07:00:00</sch:Time>
                <!--1 to 6 repetitions:-->
                <sch:TariffValue>
                   <sch:Index>3</sch:Index>
                   <sch:High>0</sch:High>
                </sch:TariffValue>
             </sch:Schedules>
    
             <sch:Schedules>
                <sch:WeekDay>ABSOLUTEDAY</sch:WeekDay>
                <sch:StartDay>2015-04-06</sch:StartDay>
                <sch:EndDay>2015-04-06</sch:EndDay>
                <sch:Time>07:00:00</sch:Time>
                <!--1 to 6 repetitions:-->
                <sch:TariffValue>
                   <sch:Index>3</sch:Index>
                   <sch:High>0</sch:High>
                </sch:TariffValue>
             </sch:Schedules>
    
             <sch:Schedules>
                <sch:WeekDay>ABSOLUTEDAY</sch:WeekDay>
                <sch:StartDay>2015-04-27</sch:StartDay>
                <sch:EndDay>2015-04-27</sch:EndDay>
                <sch:Time>07:00:00</sch:Time>
                <!--1 to 6 repetitions:-->
                <sch:TariffValue>
                   <sch:Index>3</sch:Index>
                   <sch:High>0</sch:High>
                </sch:TariffValue>
             </sch:Schedules>
    
             <sch:Schedules>
                <sch:WeekDay>ABSOLUTEDAY</sch:WeekDay>
                <sch:StartDay>2015-05-14</sch:StartDay>
                <sch:EndDay>2015-05-14</sch:EndDay>
                <sch:Time>07:00:00</sch:Time>
                <!--1 to 6 repetitions:-->
                <sch:TariffValue>
                   <sch:Index>3</sch:Index>
                   <sch:High>0</sch:High>
                </sch:TariffValue>
             </sch:Schedules>
    
             <sch:Schedules>
                <sch:WeekDay>ABSOLUTEDAY</sch:WeekDay>
                <sch:StartDay>2015-05-25</sch:StartDay>
                <sch:EndDay>2015-05-25</sch:EndDay>
                <sch:Time>07:00:00</sch:Time>
                <!--1 to 6 repetitions:-->
                <sch:TariffValue>
                   <sch:Index>3</sch:Index>
                   <sch:High>0</sch:High>
                </sch:TariffValue>
             </sch:Schedules>
    
             <sch:Schedules>
                <sch:WeekDay>ABSOLUTEDAY</sch:WeekDay>
                <sch:StartDay>2015-12-25</sch:StartDay>
                <sch:EndDay>2015-12-25</sch:EndDay>
                <sch:Time>07:00:00</sch:Time>
                <!--1 to 6 repetitions:-->
                <sch:TariffValue>
                   <sch:Index>3</sch:Index>
                   <sch:High>0</sch:High>
                </sch:TariffValue>
             </sch:Schedules>
    
             <sch:Schedules>
                <sch:WeekDay>ABSOLUTEDAY</sch:WeekDay>
                <sch:StartDay>2015-12-26</sch:StartDay>
                <sch:EndDay>2015-12-26</sch:EndDay>
                <sch:Time>07:00:00</sch:Time>
                <!--1 to 6 repetitions:-->
                <sch:TariffValue>
                   <sch:Index>3</sch:Index>
                   <sch:High>0</sch:High>
                </sch:TariffValue>
             </sch:Schedules>
    
             <sch:Schedules>
                <sch:WeekDay>ABSOLUTEDAY</sch:WeekDay>
                <sch:StartDay>2016-01-01</sch:StartDay>
                <sch:EndDay>2016-01-01</sch:EndDay>
                <sch:Time>07:00:00</sch:Time>
                <!--1 to 6 repetitions:-->
                <sch:TariffValue>
                   <sch:Index>3</sch:Index>
                   <sch:High>0</sch:High>
                </sch:TariffValue>
             </sch:Schedules>
    
          </sch:SetScheduleRequest>
    
       </soapenv:Body>
    </soapenv:Envelope>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns3:SetScheduleAsyncResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/tariffswitching/schedulemanagement/2014/10">
             <ns3:AsyncResponse>
                <ns2:CorrelationUid>LianderNetManagement|||device-01|||20151230132054477</ns2:CorrelationUid>
                <ns2:DeviceId>device-01</ns2:DeviceId>
             </ns3:AsyncResponse>
          </ns3:SetScheduleAsyncResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    setScheduleRequest {
      schedules {
        weekday: WEEKDAY
        startDay: "20150101"
        endDay: "20160201"
        actionTime: ABSOLUTETIME
        time: "230000"
        value {
          index: "\003"
          on: true
        }
      }
      schedules {
        weekday: WEEKDAY
        startDay: "20150101"
        endDay: "20160201"
        actionTime: ABSOLUTETIME
        time: "070000"
        value {
          index: "\003"
          on: false
        }
      }
      schedules {
        weekday: ABSOLUTEDAY
        startDay: "20150101"
        endDay: "20150101"
        actionTime: ABSOLUTETIME
        time: "070000"
        value {
          index: "\003"
          on: true
        }
      }
      schedules {
        weekday: ABSOLUTEDAY
        startDay: "20150406"
        endDay: "20150406"
        actionTime: ABSOLUTETIME
        time: "070000"
        value {
          index: "\003"
          on: true
        }
      }
      schedules {
        weekday: ABSOLUTEDAY
        startDay: "20150427"
        endDay: "20150427"
        actionTime: ABSOLUTETIME
        time: "070000"
        value {
          index: "\003"
          on: true
        }
      }
      pageInfo {
        currentPage: 1
        pageSize: 5
        totalPages: 2
      }
      scheduleType: TARIFF
    }
    setScheduleResponse {
      status: OK
    }
    setScheduleRequest {
      schedules {
        weekday: ABSOLUTEDAY
        startDay: "20150514"
        endDay: "20150514"
        actionTime: ABSOLUTETIME
        time: "070000"
        value {
          index: "\003"
          on: true
        }
      }
      schedules {
        weekday: ABSOLUTEDAY
        startDay: "20150525"
        endDay: "20150525"
        actionTime: ABSOLUTETIME
        time: "070000"
        value {
          index: "\003"
          on: true
        }
      }
      schedules {
        weekday: ABSOLUTEDAY
        startDay: "20151225"
        endDay: "20151225"
        actionTime: ABSOLUTETIME
        time: "070000"
        value {
          index: "\003"
          on: true
        }
      }
      schedules {
        weekday: ABSOLUTEDAY
        startDay: "20151226"
        endDay: "20151226"
        actionTime: ABSOLUTETIME
        time: "070000"
        value {
          index: "\003"
          on: true
        }
      }
      schedules {
        weekday: ABSOLUTEDAY
        startDay: "20160101"
        endDay: "20160101"
        actionTime: ABSOLUTETIME
        time: "070000"
        value {
          index: "\003"
          on: true
        }
      }
      pageInfo {
        currentPage: 2
        pageSize: 5
        totalPages: 2
      }
      scheduleType: TARIFF
    }
    setScheduleResponse {
      status: OK
    }
      schedules {
        weekday: WEEKDAY
        startDay: "20150101"
        endDay: "20160201"
        actionTime: ABSOLUTETIME
        time: "230000"
        value {
          index: "\003"
          on: true
        }
      }
      schedules {
        weekday: WEEKDAY
        startDay: "20150101"
        endDay: "20160201"
        actionTime: ABSOLUTETIME
        time: "070000"
        value {
          index: "\003"
          on: false
        }
      }
      schedules {
        weekday: WEEKDAY
        startDay: "20150101"
        endDay: "20150101"
        actionTime: ABSOLUTETIME
        time: "070000"
        value {
          index: "\003"
          on: true
        }
      }
      schedules {
        weekday: WEEKDAY
        startDay: "20150406"
        endDay: "20150406"
        actionTime: ABSOLUTETIME
        time: "070000"
        value {
          index: "\003"
          on: true
        }
      }
      schedules {
        weekday: WEEKDAY
        startDay: "20150427"
        endDay: "20150427"
        actionTime: ABSOLUTETIME
        time: "070000"
        value {
          index: "\003"
          on: true
        }
      }
      pageInfo {
        currentPage: 1
        pageSize: 5
        totalPages: 2
      }
      scheduleType: TARIFF
        weekday: WEEKDAY
        startDay: "20150514"
        endDay: "20150514"
        actionTime: ABSOLUTETIME
        time: "070000"
        value {
          index: "\003"
          on: true
        }
      }
      schedules {
        weekday: WEEKDAY
        startDay: "20150525"
        endDay: "20150525"
        actionTime: ABSOLUTETIME
        time: "070000"
        value {
          index: "\003"
          on: true
        }
      }
      schedules {
        weekday: WEEKDAY
        startDay: "20151225"
        endDay: "20151225"
        actionTime: ABSOLUTETIME
        time: "070000"
        value {
          index: "\003"
          on: true
        }
      }
      schedules {
        weekday: WEEKDAY
        startDay: "20160101"
        endDay: "20160101"
        actionTime: ABSOLUTETIME
        time: "070000"
        value {
          index: "\003"
          on: true
        }
      pageInfo {
        currentPage: 2
        pageSize: 5
        totalPages: 2
      }
      scheduleType: TARIFF
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:sch="http://www.opensmartgridplatform.org/schemas/tariffswitching/schedulemanagement/2014/10">
       <soapenv:Header>
          <com:OrganisationIdentification>LianderNetManagement</com:OrganisationIdentification>
          <com:UserName>Kevin</com:UserName>
          <com:ApplicationName>SoapUI</com:ApplicationName>
       </soapenv:Header>
       <soapenv:Body>
          <sch:SetScheduleAsyncRequest>
             <sch:AsyncRequest>
                <com:CorrelationUid>LianderNetManagement|||device-01|||20151230132054477</com:CorrelationUid>
                <com:DeviceId>device-01</com:DeviceId>
             </sch:AsyncRequest>
          </sch:SetScheduleAsyncRequest>
       </soapenv:Body>
    </soapenv:Envelope>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
          <ns3:SetScheduleResponse xmlns:ns2="http://www.opensmartgridplatform.org/schemas/common/2014/10" xmlns:ns3="http://www.opensmartgridplatform.org/schemas/tariffswitching/schedulemanagement/2014/10">
             <ns3:Result>OK</ns3:Result>
          </ns3:SetScheduleResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>