nkol2000
Сен. 1, 2016 08:05:29
Всем привет!
Помоги побороть ошибку.
Из 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)
Т.е. что-то с форматом.
Спасибо.
ZerG
Сен. 1, 2016 08:56:03
Так вам же говорит что нужен стринг а вы передаете юникод
оберните переменную в str(var_name)
nkol2000
Сен. 1, 2016 10:34:36
Сделал.
Теперь стало так:
cmd = str(cond_addr+cfg)
UnicodeEncodeError: ‘ascii’ codec can't encode character u'\xf2' in position 3: ordinal not in range(128)
Shaman
Сен. 1, 2016 11:00:54
(cond_addr+cfg).encode('utf-8') # Или не utf-8
nkol2000
Сен. 1, 2016 11:38:31
Переписал так:
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
Откуда что берется…
nkol2000
Сен. 1, 2016 11:39:15
Самое обидное, что другие запросы проходят нормально и не понятно чем этот отличается.
nkol2000
Сен. 1, 2016 11:57:34
Вот такие метаморфозы с другими запросами:
\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
ZerG
Сен. 1, 2016 12:02:22
сделайте перед
cmd = str(cond_addr+cfg)
print(type(cond_addr))
print(type(cfg))
Может вы хотите сложить строку и юникод?
nkol2000
Сен. 1, 2016 13:04:12
<type ‘str’>
<type ‘dict’>
И в правильных и не правильных ответах.
nkol2000
Сен. 1, 2016 13:05:55
Оба <type ‘str’>
Первый раз неправильно написАл.