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.