Hubitat allows for opening and maintaining a connection to a websocket endpoint from the hub. All code needs to be contained in a driver; there is no option to open a websocket connection from an app. Hubitat provides methods to connect and disconnect to the endpoint. In addition, it is required to create a method in the driver that accepts incoming messages (parse
) and another method that will be called with any status updates for the endpoint (webSocketStatus
).
void connect(String url)
void connect(String url, [options (name/value pairs)])
url
- The url to connect to.options
- Optional parameters to configure the web socket connection. Possible values:
byteInterface
- defaults to 'false'. If set to true, messages are handled as byte arrays and will be hex string encoded.pingInterval
- The number of seconds to send a ping message. Defaults to 30.headers
- A Map of key/value pairs to send as header values when connecting to the web socket server.// Connect with basic settings
interfaces.webSocket.connect("http://websocket.com")
// Connect with headers and adjusted pingInterval
interfaces.webSocket.connect("http://websocket.com", pingInterval: 45, headers: ["header1":"value1"])
void close()
// Close connection
interfaces.webSocket.close()
void sendMessage(String message)
message
- The message to send. If this connection is a byte interface, then this must be a hex encoded String.
// Send string message
interfaces.webSocket.sendMessage("My message")
These methods were available in earlier platform versions and may be removed in the future. New code should use the methods above.
void hubitat.helper.InterfaceUtils.webSocketConnect(DeviceWrapper device, String url)` `void hubitat.helper.InterfaceUtils.webSocketConnect(DeviceWrapper device, String url, [options (name/value pairs)])
device
- The current device that is calling the method.url
- The url to connect to.options
- Optional parameters to configure the web socket connection. Possible values:
byteInterface
- defaults to 'false'. If set to true, messages are handled as byte arrays and will be hex string encoded.pingInterval
- The number of seconds to send a ping message. Defaults to 30.headers
- A Map of key/value pairs to send as header values when connecting to the web socket server.// Connect with basic settings
hubitat.helper.InterfaceUtils.webSocketConnect(device, "http://websocket.com")
// Connect with headers and adjusted pingInterval
hubitat.helper.InterfaceUtils.webSocketConnect(device, "http://websocket.com", pingInterval: 45, headers: ["header1":"value1"])
void webSocketClose(DeviceWrapper device)
device
- The current device that is calling the method.
void sendWebSocketMessage(DeviceWrapper device, String message)
device
- The current device that is calling the method.message
- The message to send. If this connection is a byte interface, then this must be a hex encoded String.Methods with the following signatures must be provided in your code and will be called as described.
parse(String message)
- This method is called with any incoming messages from the web socket server. This is a standard method for drivers.webSocketStatus(String message)
- This method is called with any status messages from the web socket client connection (disconnections, errors during connect, etc)