Hello,
I have a smart-serial driver to connect to a device, get data and later resend it to another app via HTTP connection. The smart serial connection is closed/open by the device. I need to detect when the device is connected again in order to start the interrogation as soon as the connection is open. I'm trying to detect this situation via the information showed in Communication Info table but no info is showed neither for the smart-serial connection nor the http one. Connection State value is always Undefined and the stats figures are always 0.
I have tested the driver in DataMiner 9.6 and DataMiner 10.2 with same result. Is it necessary to enable anything or add something to the driver in order to start gathering this info in the table?
Is there any other way to detect when a smart serial device is online again to request its data as soon as the device is available?
Thanks in advance.
The driver can only be aware of the connection state when it is sending commands via command response pairs. The connection is set to responding when the driver is sending a command and received a matching response linked via pairs. If it does not receive a matching response, by default the driver resends the command a few times as retry, but if no response enters, the connection will be set as timeout.
If the driver is only receiving unsolicited responses, or is only sending commands without a linked response, it will not be able to detect a connection timeout.
The best workaround is to periodically send a command to the device that can act as a kind of heartbeat/keep-alive and use that to detect connection loss.
If you also want the element to show the timeout state, you can use the following method so set the state:
protocol.NotifyProtocol((int)NotifyType.NT_CHANGE_COMMUNICATION_STATE, (uint)state, connectionId);
Thanks Thomas.
In the driver there are also pairs of command/answer and the information in the table is still empty.
Let me explain how the device works: there are configuration commands that are sent in a command/response pair. Also there is a command that activate the spontaneus sent of data from the device. When the device is connected again I have to send this command in order the device starts to send the data by itself.
I have already implemented a heartbeat to detect the timeout and set the element state to Timeout. When the element is in Timeout the Connection State is still Undefined (it is always Undefined). I have make a workaround with a Correlation and as soon as the element state is Timeout, I increase the heartbeat polling to detect the new connection but sometimes the device is only online during few seconds and the data is missed. Is there any way to detect these reconnections?
As this question has been inactive for a long time, we will now close it. If you want further assistance, could you post a new question?