Hi Greig,
I ran your code also using ENTTEC DMX USB PRO and the Pro Manager App. I confirmed that it is working well to control a Tomshine Moving head. Here is the output with the fader at 0 for channel 1:
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 6
DMX Channel = 1, Pattern = 128
DMX Channel = 1, Pattern = 48
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 255
DMX Channel = 1, Pattern = 192
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 48
DMX Channel = 1, Pattern = 128
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 192
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 48
DMX Channel = 1, Pattern = 192
DMX Channel = 1, Pattern = 96
DMX Channel = 1, Pattern = 192
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 96
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 128
DMX Channel = 1, Pattern = 96
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 96
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 128
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 192
DMX Channel = 1, Pattern = 96
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 48
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 192
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 48
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 128
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 255
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 192
Here is the output with the fader at 127:
DMX Channel = 1, Pattern = 96
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 192
DMX Channel = 1, Pattern = 96
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 96
DMX Channel = 1, Pattern = 192
DMX Channel = 1, Pattern = 128
DMX Channel = 1, Pattern = 192
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 96
DMX Channel = 1, Pattern = 128
DMX Channel = 1, Pattern = 96
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 48
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 96
DMX Channel = 1, Pattern = 192
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 192
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 48
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 48
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 192
DMX Channel = 1, Pattern = 96
DMX Channel = 1, Pattern = 192
DMX Channel = 1, Pattern = 96
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 96
DMX Channel = 1, Pattern = 192
DMX Channel = 1, Pattern = 48
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 192
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 192
DMX Channel = 1, Pattern = 48
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 192
and with the fader at 255:
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 96
DMX Channel = 1, Pattern = 192
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 96
DMX Channel = 1, Pattern = 192
DMX Channel = 1, Pattern = 48
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 192
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 128
DMX Channel = 1, Pattern = 96
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 192
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 48
DMX Channel = 1, Pattern = 96
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 192
DMX Channel = 1, Pattern = 96
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 128
DMX Channel = 1, Pattern = 48
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 48
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 96
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 192
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 192
DMX Channel = 1, Pattern = 1
DMX Channel = 1, Pattern = 0
DMX Channel = 1, Pattern = 96
Not the same trouble of always returning 0, but not particularly useful values either. It would be nice for dmx.read(DmxChannel); to return the value that weI set the Ch1 fader to.