I'm using a device driver that opens a raw socket to a local device to pull an event stream of sorts. The app developer is on vacation and I'm trying to help hunt down an issue where the driver is throwing an error any time there is no event for 30 seconds. There's nothing, from what I can tell, in the driver code that's doing this check, so I presume that the raw socket interface itself is. The documentation is pretty lackluster in the wiki, so hoping someone here might have some insight.
Here's the drive code for reference: https://raw.githubusercontent.com/dcaton/Hubitat/main/QolSysIQPanel/QolSysIQ-Panel.groovy
The message is from the Hubitat Interface. Documentation for rawSocket is at: Raw Socket Interface - Hubitat Documentation.
There should be a user message:
socketStatus(String message). If that method does not exist, then that is causing the error. socketStatus should handle the return message (ignore, log, or reopen the interface - whatever you want). But it is in that method that the error is likely being generated.
PS, the link to your code above does not work.
Fixed the link to the code.
I've read through the documentation and there's not much there (e.g. many of the available options for the connection aren't listed).
There is a socketStatus method which is where I'm getting the info from. So, like here, there was an event, then the stream was quiet for 30 seconds prompting the 'read timeout' and three seconds later another event occurred. I don't see anything in the driver code that would prompt a 30 second check, so I presumed it may be some function of the interface.
It does not check. The method is open for responses from the socket and is automatically sent when the status changes. Therefore, socketStatus is actuated from the rawSocket interface without poll.
Right, which is what I'm saying my assumption is. What it appears to me is that the interface itself has some logic that says "if no data for 30 seconds, log a read timeout" which is triggering the socketstatus function to throw the log entry.
What I'm asking is if there is any way to configure that 30 second period...say with an option in the interface (similar to the pingInterval timer).
No option, but you can mask the message by just marking it out of the code.