Форум сайта python.su
Всем привет!
Помоги побороть ошибку.
Из ac.yaml берутся данные.
conditions:
air_conditioner_2:
id: “\x02”
reqs:
compr1_running:
req: “\x01\x11\x33\x00\x02”
Common_alarm:
req: “\x01\x03\xf2\x00\x02”
compr1_running проходит хорошо, а на Common_alarm выдает ошибку:
TypeError: The input CRC string should be a string. Given: u'\x02\x01\x03\xf2\x00\x02'
Часть, которая выдает ошибку
cond_addr = cfg
for req_type in sorted(cfg.iterkeys()):
if cfg.get('disable'):
continue
cmd = cond_addr+cfg
hex_result = moxa.send_command(ser, cmd, req_type)
Т.е. что-то с форматом.
Спасибо.
Офлайн
Так вам же говорит что нужен стринг а вы передаете юникод
оберните переменную в str(var_name)
Офлайн
Сделал.
Теперь стало так:
cmd = str(cond_addr+cfg)
UnicodeEncodeError: ‘ascii’ codec can't encode character u'\xf2' in position 3: ordinal not in range(128)
Офлайн
(cond_addr+cfg).encode('utf-8') # Или не utf-8
Офлайн
Переписал так:
req_tmp = cfg.encode('utf-8')
cmd = cond_addr+req_tmp
hex_result = moxa.send_command(ser, cmd, req_type)
Стала отправлять запросы, но вместо
\x01\x03\xf2\x00\x02
появляется
01 03 C3 B2 00 02
т.е. xf2 преобразует в xC3 и xB2
Откуда что берется…
Офлайн
Самое обидное, что другие запросы проходят нормально и не понятно чем этот отличается.
Офлайн
Вот такие метаморфозы с другими запросами:
\x01\x08\xA0\x00\x02
01 08 C2 A0 00 02
\x01\x03\xf2\x00\x02
01 03 C3 B2 00 02
\x01\x08\x9E\x00\x02
01 08 C2 9E 00 02
\x01\x03\xF5\x00\x02
01 03 C3 B5 00 02
При этом такие запросы проходят правильно:
\x01\x11\x33\x00\x02
\x03\x09\x50\x00\x02
\x03\x09\x54\x00\x02
Офлайн
сделайте перед
cmd = str(cond_addr+cfg) print(type(cond_addr)) print(type(cfg))
Офлайн
<type ‘str’>
<type ‘dict’>
И в правильных и не правильных ответах.
Офлайн
Оба <type ‘str’>
Первый раз неправильно написАл.
Офлайн