glibersat / python-x10

python module to control X10 appliances
GNU General Public License v3.0
27 stars 18 forks source link

CM17A firecracker support fails/crashes #2

Open clach04 opened 7 years ago

clach04 commented 7 years ago

I tweaked/hacked the sample/demo in the tests demo to help with cross platform testing:

# https://github.com/glibersat/python-x10
from x10.controllers.cm17a import CM17a

serial_port_name = '/dev/ttyUSB'
serial_port_name = 'com11'

unit = 'A1'
unit = 'C6'

dev = CM17a(serial_port_name)
dev.open()

livinglamp = dev.actuator(unit)

livinglamp.on()

dev.close()

It fails with the following traceback:

abstract - 2016-07-09 12:37:29,289 DEBUG Writing 0xd5aa
Traceback (most recent call last):
  File "test_serial.py", line 19, in <module>
    livinglamp.on()
  File "C:\Users\clach04\py\x10\python-x10\x10\devices\actuators.py", line 22, in on
    self.x10ctrl.do(functions.ON, self.x10addr)
  File "C:\Users\clach04\py\x10\python-x10\x10\controllers\cm17a.py", line 114, in do
    self.write(self.DATA_HDR) # Send data header
  File "C:\Users\clach04\py\x10\python-x10\x10\controllers\abstract.py", line 111, in write
    self._handle.write(chr(aSequence))
ValueError: chr() arg not in range(256)

which is correct, chr() expects a single character, maybe this should be an aSequence.encode('latin1')?

This was with Windows and Python 2.7 but I don't think the platform/version have an impact.

As an FYI I've had success with the following firecracker (specific) modules under Linux and Windows:

glibersat commented 7 years ago

Hi @clach04,

First, thanks for you feedback. You're right, this chr doesn't make sense if used on a sequence. This code was added by a contributor but I couldn't get a chance to try it on a firecracker.

Maybe you can try either to:

  1. replace this call by looping over the sequence and transforming each byte with a chr()
  2. do the same as in the UsbX10Controller class (see https://github.com/glibersat/python-x10/blob/master/x10/controllers/abstract.py#L159)

If you need some assistance, feel free to ask, I'd be glad to have someone test this package against a real firecracker and confirm it's working.

Cheers,

Guillaume

clach04 commented 7 years ago

I was able to successfully use http://www.averdevelopment.com/python/x10.html and https://bitbucket.org/cdelker/python-x10-firecracker-interface/ for CM17A control. The later is more pythonic in method naming (pep8) and under source code control but the first one has more features (e.g. all on/off support) and can work under Python 3.

I'm not likely to get around to hacking on this further as things are working for me in https://github.com/clach04/x10_rest. I'm certainly happy for you to ping me if you want a tester,