Does the web interface function correctly? It is based on the same websocket listening process and so it should exhibit the same behavior.

I've tested your code (copy-paste into a python file called wstest.py) on the latest UniPi opensource distribution (essentially just debian with kernel drivers, which only improve UART functionality as far as EVOK is concerned) and it functions as expected, with the following output:

Value: 0 Device: input Circuit: 1_01 Value: 0 Device: input Circuit: 1_02 Value: 0 Device: input Circuit: 1_03 Value: 0 Device: input Circuit: 1_04 Value: 0 Device: relay Circuit: 1_01 Value: 1 Device: relay Circuit: 1_02 Value: 1 Device: relay Circuit: 1_03 Value: 0 Device: relay Circuit: 1_04 Value: 0.00772160933422 Device: ai Circuit: 1_01 Value: 2.29423873804 Device: ao Circuit: 1_01 [{"counter_mode": "Enabled", "counter_modes": ["Enabled", "Disabled"], "glob_dev_id": 1, "dev": "input", "ds_modes": ["Simple", "Inverted", "Toggle"], "modes": ["Simple", "DirectSwitch"], "ds_mode": "Simple", "debounce": 50, "counter": 0, "value": 0, "mode": "DirectSwitch", "circuit": "1_01"}, {"counter_modes": ["Enabled", "Disabled"], "glob_dev_id": 1, "modes": ["Simple", "DirectSwitch"], "value": 0, "circuit": "1_02", "debounce": 50, "counter": 0, "counter_mode": "Enabled", "dev": "input", "mode": "Simple"}, {"counter_modes": ["Enabled", "Disabled"], "glob_dev_id": 1, "modes": ["Simple", "DirectSwitch"], "value": 0, "circuit": "1_03", "debounce": 50, "counter": 0, "counter_mode": "Enabled", "dev": "input", "mode": "Simple"}, {"counter_modes": ["Enabled", "Disabled"], "glob_dev_id": 1, "modes": ["Simple", "DirectSwitch"], "value": 0, "circuit": "1_04", "debounce": 50, "counter": 0, "counter_mode": "Enabled", "dev": "input", "mode": "Simple"}, {"glob_dev_id": 1, "modes": ["Simple", "PWM"], "value": 0, "circuit": "1_01", "pending": false, "relay_type": "digital", "dev": "relay", "mode": "Simple"}, {"glob_dev_id": 1, "modes": ["Simple", "PWM"], "value": 1, "circuit": "1_02", "pending": false, "relay_type": "digital", "dev": "relay", "mode": "Simple"}, {"glob_dev_id": 1, "modes": ["Simple", "PWM"], "value": 1, "circuit": "1_03", "pending": false, "relay_type": "digital", "dev": "relay", "mode": "Simple"}, {"glob_dev_id": 1, "modes": ["Simple", "PWM"], "value": 0, "circuit": "1_04", "pending": false, "relay_type": "digital", "dev": "relay", "mode": "Simple"}, {"glob_dev_id": 1, "unit": "V", "value": 0.007721609334224814, "circuit": "1_01", "range_modes": ["10.0"], "modes": ["Voltage", "Current"], "range": "10.0", "dev": "ai", "mode": "Voltage"}, {"modes": ["Voltage", "Current", "Resistance"], "value": 2.2942387380392786, "glob_dev_id": 1, "dev": "ao", "circuit": "1_01", "unit": "V", "mode": "Voltage"}] Value: 0 Device: wd Circuit: 1_01 [{"circuit": "1_01", "value": 0, "glob_dev_id": 1, "dev": "wd", "timeout": 6000, "was_wd_reset": 0, "nv_save": 0}] Value: 0 Device: wd Circuit: 1_01 [{"circuit": "1_01", "value": 0, "glob_dev_id": 1, "dev": "wd", "timeout": 6000, "was_wd_reset": 0, "nv_save": 0}] Value: 0 Device: wd Circuit: 1_01 [{"circuit": "1_01", "value": 0, "glob_dev_id": 1, "dev": "wd", "timeout": 6000, "was_wd_reset": 0, "nv_save": 0}] Value: 0.00511440622282 Device: ai Circuit: 1_01 Value: 0 Device: wd Circuit: 1_01 [{"glob_dev_id": 1, "unit": "V", "value": 0.005114406222816542, "circuit": "1_01", "range_modes": ["10.0"], "modes": ["Voltage", "Current"], "range": "10.0", "dev": "ai", "mode": "Voltage"}, {"circuit": "1_01", "value": 0, "glob_dev_id": 1, "dev": "wd", "timeout": 6000, "was_wd_reset": 0, "nv_save": 0}] Value: 0.00772160933422 Device: ai Circuit: 1_01 [{"glob_dev_id": 1, "unit": "V", "value": 0.007721609334224814, "circuit": "1_01", "range_modes": ["10.0"], "modes": ["Voltage", "Current"], "range": "10.0", "dev": "ai", "mode": "Voltage"}] Value: 0.00511440622282 Device: ai Circuit: 1_01 Value: 0 Device: wd Circuit: 1_01 [{"glob_dev_id": 1, "unit": "V", "value": 0.005114406222816542, "circuit": "1_01", "range_modes": ["10.0"], "modes": ["Voltage", "Current"], "range": "10.0", "dev": "ai", "mode": "Voltage"}, {"circuit": "1_01", "value": 0, "glob_dev_id": 1, "dev": "wd", "timeout": 6000, "was_wd_reset": 0, "nv_save": 0}]

It would be helpful if you could post the output of "print obj" and "print message", inserted after the first line of the on_message function, as well as which distribution of EVOK you are using and which version of python.

e: Added the output of the "all" which I've omitted at first.