Search in sources :

Example 1 with VariableDataStructure

use of org.openmuc.jmbus.VariableDataStructure in project OpenMUC by isc-konstanz.

the class DriverConnection method setRecords.

private boolean setRecords(List<ChannelRecordContainer> containers, MBusConnection mBusConnection, long timestamp, List<DataRecord> dataRecords, String[] dibvibs) throws ConnectionException {
    boolean selectForReadoutSet = false;
    for (ChannelRecordContainer container : containers) {
        String channelAddress = container.getChannelAddress();
        if (channelAddress.startsWith("X")) {
            String[] dibAndVib = channelAddress.split(":");
            if (dibAndVib.length != 2) {
                container.setRecord(new Record(Flag.DRIVER_ERROR_CHANNEL_ADDRESS_SYNTAX_INVALID));
            }
            List<DataRecord> dataRecordsToSelectForReadout = new ArrayList<>(1);
            selectForReadoutSet = true;
            try {
                mBusConnection.selectForReadout(mBusAddress, dataRecordsToSelectForReadout);
                sleep(delay);
            } catch (SerialPortTimeoutException e) {
                container.setRecord(new Record(Flag.DRIVER_ERROR_TIMEOUT));
                continue;
            } catch (IOException e) {
                connectionInterface.close();
                throw new ConnectionException(e);
            }
            VariableDataStructure variableDataStructure2 = null;
            try {
                variableDataStructure2 = mBusConnection.read(mBusAddress);
            } catch (SerialPortTimeoutException e1) {
                container.setRecord(new Record(Flag.DRIVER_ERROR_TIMEOUT));
                continue;
            } catch (IOException e1) {
                connectionInterface.close();
                throw new ConnectionException(e1);
            }
            DataRecord dataRecord = variableDataStructure2.getDataRecords().get(0);
            setContainersRecord(timestamp, container, dataRecord);
            continue;
        }
        int j = 0;
        for (DataRecord dataRecord : dataRecords) {
            if (dibvibs[j++].equalsIgnoreCase(channelAddress)) {
                setContainersRecord(timestamp, container, dataRecord);
                break;
            }
        }
        if (container.getRecord() == null) {
            container.setRecord(new Record(Flag.DRIVER_ERROR_CHANNEL_WITH_THIS_ADDRESS_NOT_FOUND));
        }
    }
    return selectForReadoutSet;
}
Also used : ArrayList(java.util.ArrayList) IOException(java.io.IOException) ChannelRecordContainer(org.openmuc.framework.driver.spi.ChannelRecordContainer) SerialPortTimeoutException(org.openmuc.jrxtx.SerialPortTimeoutException) DataRecord(org.openmuc.jmbus.DataRecord) Record(org.openmuc.framework.data.Record) DataRecord(org.openmuc.jmbus.DataRecord) VariableDataStructure(org.openmuc.jmbus.VariableDataStructure) ConnectionException(org.openmuc.framework.driver.spi.ConnectionException)

Example 2 with VariableDataStructure

use of org.openmuc.jmbus.VariableDataStructure in project OpenMUC by isc-konstanz.

the class DriverConnectionTest method testReadThrowsIOException.

@Test
public void testReadThrowsIOException() throws Exception {
    MBusConnection con = mock(MBusConnection.class);
    VariableDataStructure vds = new VariableDataStructure(NZR_ANSWER, 6, NZR_ANSWER.length - 6, null, null);
    vds.decode();
    when(con.read(anyInt())).thenThrow(new IOException());
    ConnectionInterface serialIntervace = new ConnectionInterface(con, "/dev/ttyS100:5", delay, interfaces);
    serialIntervace.increaseConnectionCounter();
    String[] deviceAddressTokens = { "/dev/ttyS100", "5" };
    int address = Integer.parseInt(deviceAddressTokens[1]);
    DriverConnection driverCon = new DriverConnection(serialIntervace, address, null, delay);
    List<ChannelRecordContainer> records = Arrays.asList(newChannelRecordContainer("04:03"));
    driverCon.read(records, null, null);
    Flag actualFlag = records.get(0).getRecord().getFlag();
    assertEquals(Flag.DRIVER_ERROR_TIMEOUT, actualFlag);
}
Also used : MBusConnection(org.openmuc.jmbus.MBusConnection) ChannelRecordContainer(org.openmuc.framework.driver.spi.ChannelRecordContainer) IOException(java.io.IOException) VariableDataStructure(org.openmuc.jmbus.VariableDataStructure) Flag(org.openmuc.framework.data.Flag) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest) Test(org.junit.Test)

Example 3 with VariableDataStructure

use of org.openmuc.jmbus.VariableDataStructure in project OpenMUC by isc-konstanz.

the class DriverConnectionTest method testReadBcdDateLong.

@Test
public void testReadBcdDateLong() throws Exception {
    MBusConnection con = mock(MBusConnection.class);
    VariableDataStructure vds = new VariableDataStructure(SIEMENS_UH50_ANSWER, 6, SIEMENS_UH50_ANSWER.length - 6, null, null);
    vds.decode();
    when(con.read(anyInt())).thenReturn(vds);
    ConnectionInterface serialIntervace = new ConnectionInterface(con, "/dev/ttyS100:5", delay, interfaces);
    serialIntervace.increaseConnectionCounter();
    String[] deviceAddressTokens = { "/dev/ttyS100", "5" };
    DriverConnection mBusConnection = new DriverConnection(serialIntervace, Integer.parseInt(deviceAddressTokens[1]), null, delay);
    List<ChannelRecordContainer> records = new LinkedList<>();
    records.add(newChannelRecordContainer("09:74"));
    records.add(newChannelRecordContainer("42:6c"));
    records.add(newChannelRecordContainer("8c01:14"));
    mBusConnection.read(records, null, null);
}
Also used : MBusConnection(org.openmuc.jmbus.MBusConnection) ChannelRecordContainer(org.openmuc.framework.driver.spi.ChannelRecordContainer) VariableDataStructure(org.openmuc.jmbus.VariableDataStructure) LinkedList(java.util.LinkedList) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest) Test(org.junit.Test)

Example 4 with VariableDataStructure

use of org.openmuc.jmbus.VariableDataStructure in project OpenMUC by isc-konstanz.

the class DriverConnectionTest method testReadThrowsTimeoutException.

@Test
public void testReadThrowsTimeoutException() throws Exception {
    MBusConnection con = mock(MBusConnection.class);
    VariableDataStructure vds = new VariableDataStructure(NZR_ANSWER, 6, NZR_ANSWER.length - 6, null, null);
    vds.decode();
    when(con.read(anyInt())).thenThrow(new SerialPortTimeoutException());
    ConnectionInterface serialIntervace = new ConnectionInterface(con, "/dev/ttyS100:5", delay, interfaces);
    serialIntervace.increaseConnectionCounter();
    String[] deviceAddressTokens = { "/dev/ttyS100", "5" };
    int address = Integer.parseInt(deviceAddressTokens[1]);
    DriverConnection driverCon = new DriverConnection(serialIntervace, address, null, delay);
    List<ChannelRecordContainer> records = Arrays.asList(newChannelRecordContainer("04:03"));
    driverCon.read(records, null, null);
    assertEquals(Flag.DRIVER_ERROR_TIMEOUT, records.get(0).getRecord().getFlag());
}
Also used : MBusConnection(org.openmuc.jmbus.MBusConnection) ChannelRecordContainer(org.openmuc.framework.driver.spi.ChannelRecordContainer) SerialPortTimeoutException(org.openmuc.jrxtx.SerialPortTimeoutException) VariableDataStructure(org.openmuc.jmbus.VariableDataStructure) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest) Test(org.junit.Test)

Example 5 with VariableDataStructure

use of org.openmuc.jmbus.VariableDataStructure in project OpenMUC by isc-konstanz.

the class DriverConnectionTest method testScanThrowsTimeoutException.

@Test(expected = ConnectionException.class)
public void testScanThrowsTimeoutException() throws Exception {
    MBusConnection con = mock(MBusConnection.class);
    VariableDataStructure vds = new VariableDataStructure(NZR_ANSWER, 6, NZR_ANSWER.length - 6, null, null);
    vds.decode();
    when(con.read(anyInt())).thenThrow(new SerialPortTimeoutException());
    ConnectionInterface serialIntervace = new ConnectionInterface(con, "/dev/ttyS100:5", delay, interfaces);
    serialIntervace.increaseConnectionCounter();
    String[] deviceAddressTokens = { "/dev/ttyS100", "5" };
    DriverConnection driverCon = new DriverConnection(serialIntervace, Integer.parseInt(deviceAddressTokens[1]), null, delay);
    driverCon.scanForChannels(null);
}
Also used : MBusConnection(org.openmuc.jmbus.MBusConnection) SerialPortTimeoutException(org.openmuc.jrxtx.SerialPortTimeoutException) VariableDataStructure(org.openmuc.jmbus.VariableDataStructure) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest) Test(org.junit.Test)

Aggregations

VariableDataStructure (org.openmuc.jmbus.VariableDataStructure)15 MBusConnection (org.openmuc.jmbus.MBusConnection)12 Test (org.junit.Test)8 PrepareForTest (org.powermock.core.classloader.annotations.PrepareForTest)8 IOException (java.io.IOException)7 ChannelRecordContainer (org.openmuc.framework.driver.spi.ChannelRecordContainer)5 SerialPortTimeoutException (org.openmuc.jrxtx.SerialPortTimeoutException)5 ConnectionException (org.openmuc.framework.driver.spi.ConnectionException)4 DataRecord (org.openmuc.jmbus.DataRecord)4 ArrayList (java.util.ArrayList)3 DriverDeviceScanListener (org.openmuc.framework.driver.spi.DriverDeviceScanListener)3 InterruptedIOException (java.io.InterruptedIOException)2 ChannelScanInfo (org.openmuc.framework.config.ChannelScanInfo)2 DeviceScanInfo (org.openmuc.framework.config.DeviceScanInfo)2 ScanInterruptedException (org.openmuc.framework.config.ScanInterruptedException)2 Record (org.openmuc.framework.data.Record)2 SecondaryAddress (org.openmuc.jmbus.SecondaryAddress)2 LinkedList (java.util.LinkedList)1 MBusDataRecord (net.solarnetwork.node.io.mbus.MBusDataRecord)1 MBusMessage (net.solarnetwork.node.io.mbus.MBusMessage)1