8088 is for Websockets. The iOS application connects to the Hub this way. You can connect an iPhone to your computer via USB, and do the command: rvictl -s to establish an interface that wireshark can use to caputre the iPhone traffic while using the app.
I did this last week to see how the app talks to the hub. And sure enough, it’s websockets. I was able to put together a simple script to send IR commands to the hub. The reason was my LED candles would turn on fine when blasting them in the iOS app (holding down the ON button). But not with HA component. I noticed the HA component would only send commands at a certain rate (green light on hub just flashed slowly). When holding down the buttons in the app, the green light on hub would flicker at a much faster rate. The difference was the iOS app sending multiple hold commands over and over. After doing this script, they would blast the candles just like the app and they would turn on.
EDIT: I had something wrong in the script I posted. My old script is still working. I will post that back in about an hour. Have to step out for a few.
EDIT:
Ok, this code still works for me now talking to Hub via Websockets.
#!/Library/Frameworks/Python.framework/Versions/3.7/bin/python3
# -*- coding: utf-8 -*-
from time import sleep
import websocket
from websocket import create_connection
# NOTE: 18322921 is an example of what your hubId might look like
# NOTE: 57216229 is the deviceId found in the harmony conf for the device you are controlling
# The code opens a websocket to the hub, and in the example here, sends a PRESS for PowerOn
# Next, just runs a loop to blast the HOLD action for PowerOn action (ensures the candles turn on)
# Finally, send the release command
#
# PowerOn was one of the listed commands from my harmony conf file
websocket.enableTrace(True)
ws = create_connection("ws://192.168.2.3:8088/?domain=svcs.myharmony.com&hubId=18322921")
max_holds = 10
count = 0
# Send the PowerOn button a 'press'
ws.send(r'{"hubId":"18322921","timeout":30,"hbus":' \
r'{"cmd":"vnd.logitech.harmony\/vnd.logitech.harmony.engine?holdAction",' \
r'"id":"1537395108","params":{"status":"press","timestamp":"0","verb":"render",' \
r'"action":"{\"command\":\"PowerOn\",\"type\":\"IRCommand\",\"deviceId\":\"57216229\"}"}}}')
sleep(.002)
# Send the PowerOn button a 'hold'
while count < max_holds:
ws.send(r'{"hubId":"18322921","timeout":30,"hbus":' \
r'{"cmd":"vnd.logitech.harmony\/vnd.logitech.harmony.engine?holdAction","id":"1022244803",' \
r'"params":{"status":"hold","timestamp":"201","verb":"render","action":' \
r'"{\"command\":\"PowerOn\",\"type\":\"IRCommand\",\"deviceId\":\"57216229\"}"}}}')
sleep(.002)
count += 1
# Send the PowerOn button a 'release'
ws.send(r'{"hubId":"18322921","timeout":30,"hbus":' \
r'{"cmd":"vnd.logitech.harmony\/vnd.logitech.harmony.engine?holdAction",' \
r'"id":"858970808","params":{"status":"release","timestamp":"659","verb":"render",' \
r'"action":"{\"command\":\"PowerOn\",\"type\":\"IRCommand\",\"deviceId\":\"57216229\"}"}}}')