Search in sources :

Example 6 with LightValueDto

use of org.opensmartgridplatform.dto.valueobjects.LightValueDto in project open-smart-grid-platform by OSGP.

the class Iec61850SsldDeviceService method createListOfInternalIndicesToSwitch.

private List<LightValueDto> createListOfInternalIndicesToSwitch(final List<DeviceOutputSetting> deviceOutputSettings, final List<LightValueDto> lightValues) throws FunctionalException {
    final List<LightValueDto> relaysWithInternalIdToSwitch = new ArrayList<>();
    LOGGER.info("creating list of internal indices using device output settings and external indices from light values");
    for (final LightValueDto lightValue : lightValues) {
        if (lightValue == null) {
            break;
        }
        DeviceOutputSetting deviceOutputSettingForExternalId = null;
        for (final DeviceOutputSetting deviceOutputSetting : deviceOutputSettings) {
            if (deviceOutputSetting.getExternalId() == lightValue.getIndex()) {
                // You can only switch LIGHT relays that are used.
                this.checkRelay(deviceOutputSetting.getRelayType(), RelayType.LIGHT, deviceOutputSetting.getInternalId());
                deviceOutputSettingForExternalId = deviceOutputSetting;
            }
        }
        if (deviceOutputSettingForExternalId != null) {
            final LightValueDto relayWithInternalIdToSwitch = new LightValueDto(deviceOutputSettingForExternalId.getInternalId(), lightValue.isOn(), lightValue.getDimValue());
            relaysWithInternalIdToSwitch.add(relayWithInternalIdToSwitch);
        }
    }
    return relaysWithInternalIdToSwitch;
}
Also used : ArrayList(java.util.ArrayList) DeviceOutputSetting(org.opensmartgridplatform.core.db.api.iec61850.entities.DeviceOutputSetting) LightValueDto(org.opensmartgridplatform.dto.valueobjects.LightValueDto)

Example 7 with LightValueDto

use of org.opensmartgridplatform.dto.valueobjects.LightValueDto in project open-smart-grid-platform by OSGP.

the class Iec61850SsldDeviceService method createListOfInternalIndicesToSwitch.

private List<LightValueDto> createListOfInternalIndicesToSwitch(final List<DeviceOutputSetting> deviceOutputSettings, final boolean on) {
    LOGGER.info("creating list of internal indices using device output settings");
    final List<LightValueDto> relaysWithInternalIdToSwitch = new ArrayList<>();
    for (final DeviceOutputSetting deviceOutputSetting : deviceOutputSettings) {
        if (RelayType.LIGHT.equals(deviceOutputSetting.getRelayType())) {
            final LightValueDto relayWithInternalIdToSwitch = new LightValueDto(deviceOutputSetting.getInternalId(), on, null);
            relaysWithInternalIdToSwitch.add(relayWithInternalIdToSwitch);
        }
    }
    return relaysWithInternalIdToSwitch;
}
Also used : ArrayList(java.util.ArrayList) DeviceOutputSetting(org.opensmartgridplatform.core.db.api.iec61850.entities.DeviceOutputSetting) LightValueDto(org.opensmartgridplatform.dto.valueobjects.LightValueDto)

Example 8 with LightValueDto

use of org.opensmartgridplatform.dto.valueobjects.LightValueDto in project open-smart-grid-platform by OSGP.

the class Iec61850GetStatusCommand method getStatusFromDevice.

public DeviceStatusDto getStatusFromDevice(final Iec61850Client iec61850Client, final DeviceConnection deviceConnection, final Ssld ssld) throws ProtocolAdapterException {
    final Function<DeviceStatusDto> function = new Function<DeviceStatusDto>() {

        @Override
        public DeviceStatusDto apply(final DeviceMessageLog deviceMessageLog) throws ProtocolAdapterException {
            // getting the light relay values
            final List<LightValueDto> lightValues = new ArrayList<>();
            for (final DeviceOutputSetting deviceOutputSetting : ssld.getOutputSettings()) {
                final LogicalNode logicalNode = LogicalNode.getSwitchComponentByIndex(deviceOutputSetting.getInternalId());
                final NodeContainer position = deviceConnection.getFcModelNode(LogicalDevice.LIGHTING, logicalNode, DataAttribute.POSITION, Fc.ST);
                iec61850Client.readNodeDataValues(deviceConnection.getConnection().getClientAssociation(), position.getFcmodelNode());
                final BdaBoolean state = position.getBoolean(SubDataAttribute.STATE);
                final boolean on = state.getValue();
                lightValues.add(new LightValueDto(deviceOutputSetting.getExternalId(), on, null));
                LOGGER.info(String.format("Got status of relay %d => %s", deviceOutputSetting.getInternalId(), on ? "on" : "off"));
                deviceMessageLog.addVariable(logicalNode, DataAttribute.POSITION, Fc.ST, SubDataAttribute.STATE, Boolean.toString(on));
            }
            final NodeContainer eventBuffer = deviceConnection.getFcModelNode(LogicalDevice.LIGHTING, LogicalNode.STREET_LIGHT_CONFIGURATION, DataAttribute.EVENT_BUFFER, Fc.CF);
            iec61850Client.readNodeDataValues(deviceConnection.getConnection().getClientAssociation(), eventBuffer.getFcmodelNode());
            final String filter = eventBuffer.getString(SubDataAttribute.EVENT_BUFFER_FILTER);
            LOGGER.info("Got EvnBuf.enbEvnType filter {}", filter);
            deviceMessageLog.addVariable(LogicalNode.STREET_LIGHT_CONFIGURATION, DataAttribute.EVENT_BUFFER, Fc.CF, SubDataAttribute.EVENT_BUFFER_FILTER, filter);
            final Set<EventNotificationTypeDto> notificationTypes = EventType.getNotificationTypesForFilter(filter);
            int eventNotificationsMask = 0;
            for (final EventNotificationTypeDto notificationType : notificationTypes) {
                eventNotificationsMask |= notificationType.getValue();
            }
            final NodeContainer softwareConfiguration = deviceConnection.getFcModelNode(LogicalDevice.LIGHTING, LogicalNode.STREET_LIGHT_CONFIGURATION, DataAttribute.SOFTWARE_CONFIGURATION, Fc.CF);
            iec61850Client.readNodeDataValues(deviceConnection.getConnection().getClientAssociation(), softwareConfiguration.getFcmodelNode());
            String lightTypeValue = softwareConfiguration.getString(SubDataAttribute.LIGHT_TYPE);
            // Fix for Kaifa bug KI-31
            if (lightTypeValue == null || lightTypeValue.isEmpty()) {
                lightTypeValue = "RELAY";
            }
            final LightTypeDto lightType = LightTypeDto.valueOf(lightTypeValue);
            deviceMessageLog.addVariable(LogicalNode.STREET_LIGHT_CONFIGURATION, DataAttribute.SOFTWARE_CONFIGURATION, Fc.CF, SubDataAttribute.LIGHT_TYPE, lightTypeValue);
            Iec61850GetStatusCommand.this.loggingService.logMessage(deviceMessageLog, deviceConnection.getDeviceIdentification(), deviceConnection.getOrganisationIdentification(), false);
            /*
             * The preferredLinkType and actualLinkType are hard-coded to
             * LinkTypeDto.ETHERNET, other link types do not apply to the
             * device type in use.
             */
            return new DeviceStatusDto(lightValues, LinkTypeDto.ETHERNET, LinkTypeDto.ETHERNET, lightType, eventNotificationsMask);
        }
    };
    return iec61850Client.sendCommandWithRetry(function, "GetStatus", deviceConnection.getDeviceIdentification());
}
Also used : LightTypeDto(org.opensmartgridplatform.dto.valueobjects.LightTypeDto) ArrayList(java.util.ArrayList) DeviceOutputSetting(org.opensmartgridplatform.core.db.api.iec61850.entities.DeviceOutputSetting) NodeContainer(org.opensmartgridplatform.adapter.protocol.iec61850.infra.networking.helper.NodeContainer) LogicalNode(org.opensmartgridplatform.adapter.protocol.iec61850.infra.networking.helper.LogicalNode) LightValueDto(org.opensmartgridplatform.dto.valueobjects.LightValueDto) Function(org.opensmartgridplatform.adapter.protocol.iec61850.infra.networking.helper.Function) DeviceMessageLog(org.opensmartgridplatform.adapter.protocol.iec61850.domain.valueobjects.DeviceMessageLog) DeviceStatusDto(org.opensmartgridplatform.dto.valueobjects.DeviceStatusDto) BdaBoolean(com.beanit.openiec61850.BdaBoolean) EventNotificationTypeDto(org.opensmartgridplatform.dto.valueobjects.EventNotificationTypeDto)

Example 9 with LightValueDto

use of org.opensmartgridplatform.dto.valueobjects.LightValueDto in project open-smart-grid-platform by OSGP.

the class OslpDeviceService method buildOslpRequestSetLight.

private void buildOslpRequestSetLight(final SetLightDeviceRequest deviceRequest) {
    final Oslp.SetLightRequest.Builder setLightRequestBuilder = Oslp.SetLightRequest.newBuilder();
    for (final LightValueDto lightValue : deviceRequest.getLightValuesContainer().getLightValues()) {
        setLightRequestBuilder.addValues(this.buildLightValue(lightValue));
    }
    this.buildAndSignEnvelope(deviceRequest, Oslp.Message.newBuilder().setSetLightRequest(setLightRequestBuilder.build()).build(), deviceRequest.getLightValuesContainer());
}
Also used : LightValueDto(org.opensmartgridplatform.dto.valueobjects.LightValueDto)

Aggregations

LightValueDto (org.opensmartgridplatform.dto.valueobjects.LightValueDto)9 DeviceOutputSetting (org.opensmartgridplatform.core.db.api.iec61850.entities.DeviceOutputSetting)5 ArrayList (java.util.ArrayList)4 NodeException (org.opensmartgridplatform.adapter.protocol.iec61850.exceptions.NodeException)3 ProtocolAdapterException (org.opensmartgridplatform.adapter.protocol.iec61850.exceptions.ProtocolAdapterException)3 DeviceStatusDto (org.opensmartgridplatform.dto.valueobjects.DeviceStatusDto)3 JMSException (javax.jms.JMSException)2 DeviceMessageLog (org.opensmartgridplatform.adapter.protocol.iec61850.domain.valueobjects.DeviceMessageLog)2 ConnectionFailureException (org.opensmartgridplatform.adapter.protocol.iec61850.exceptions.ConnectionFailureException)2 DeviceConnection (org.opensmartgridplatform.adapter.protocol.iec61850.infra.networking.helper.DeviceConnection)2 Function (org.opensmartgridplatform.adapter.protocol.iec61850.infra.networking.helper.Function)2 Iec61850SetLightCommand (org.opensmartgridplatform.adapter.protocol.iec61850.infra.networking.services.commands.Iec61850SetLightCommand)2 Ssld (org.opensmartgridplatform.core.db.api.iec61850.entities.Ssld)2 LightTypeDto (org.opensmartgridplatform.dto.valueobjects.LightTypeDto)2 FunctionalException (org.opensmartgridplatform.shared.exceptionhandling.FunctionalException)2 TechnicalException (org.opensmartgridplatform.shared.exceptionhandling.TechnicalException)2 BdaBoolean (com.beanit.openiec61850.BdaBoolean)1 HashMap (java.util.HashMap)1 List (java.util.List)1 DeviceMessageStatus (org.opensmartgridplatform.adapter.protocol.iec61850.device.DeviceMessageStatus)1