2015-03-07 3 views
0

Я бхушан. Я новичок в программировании на питоне.Как использовать переменную вместо пакета ["source_addr_long"]

Я запрограммировал xbee в режиме API.

End Device1 -> Router1 -> Координатор.
End Device2 -> Router2 -> Координатор.

координатор должен выбрать либо маршрутизатор 1 или маршрутизатор 2, чтобы ответить

xbee1.tx(frame='0x1' 
      , dest_addr=packet["source_addr"] 
      , data='Hi' 
      , dest_addr_long=packet["source_addr_long"] 
     ) # It Works. 

Я хочу использовать либо адрес Роутер1 или Роутер2 вместо пакета [ «source_addr_long»]. решение должно быть принято во время выполнения.

Как я могу сохранить и получить адрес?

print source_addr_long1 

выход - \ x00 \ x13 \ xa2 \ x00 \ x40 \ XB5 \ XAD \ x6e

print b"".join(byte for byte in source_addr_long1) 

выход - \ x00 \ x13 \ xa2 \ x00 \ x40 \ XB5 \ XAD \ x6e

print b"".join(byte for byte in "\x00\x13\xa2\x00\x40\xb5\xad\x6e") 

выход - Non для печати код

destaddr = "\x00\x13\xa2\x00\x40\xb5\xad\x6e" 
xbee1.tx(frame='0x1' 
      , dest_addr=packet["source_addr"] 
      , data='Hi' 
      , dest_addr_long=destaddr 
     ) # It Work. 

Когда я использую строку он GIV es me error

xbee1.tx(frame='0x1' , 
      dest_addr=source_addr1 , 
      data='Hi' , 
      dest_addr_long=source_addr_long1 
     ) # Not Works 



    xbee1.tx(frame='0x1' , dest_addr=source_addr1 , data='Hi' , dest_addr_long=source_addr_long1) # Not Works 
    File "I:\Python27\lib\site-packages\xbee\base.py", line 418, in <lambda> 
return lambda **kwargs: self.send(name, **kwargs) 
    File "I:\Python27\lib\site-packages\xbee\base.py", line 386, in send 
self._write(self._build_command(cmd, **kwargs)) 
    File "I:\Python27\lib\site-packages\xbee\base.py", line 195, in _build_command 
% (field['name'], field['len'])) 
ValueError: The data provided for 'dest_addr_long' was not 8 bytes long 

ответ

0

И наконец, я получил ответ.

У меня был следующий сценарий.

source_addr = ['0x8f', '0x18'] 

    source_addr_long = ['0x00', '0x13', '0xa2', '0x00', '0x40', '0xb5', '0xad', '0x6e'] 


# Coordinator transmit packet to any router . 
# Decision can be taken at run time by coordinator. 
# One to many nodes transmission is thus possible. 

xbee1.tx(
    frame='0x1' 
, dest_addr=bytearray(int(x,16) for x in source_addr) 
, data='Hi' 
, dest_addr_long= bytearray(int(x,16) for x in source_addr_long) 

)

# It Works . 
# hex(19) => '0x13' 
# int('0x13',16) => 19 

# x = '0x13' 
# then int(x,16) will be 19