Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 1, 2016 08:05:29

nkol2000
Зарегистрирован: 2016-08-04
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка формата

Всем привет!

Помоги побороть ошибку.

Из 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)

Т.е. что-то с форматом.

Спасибо.

Офлайн

#2 Сен. 1, 2016 08:56:03

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Ошибка формата

Так вам же говорит что нужен стринг а вы передаете юникод
оберните переменную в str(var_name)



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Сен. 1, 2016 10:34:36

nkol2000
Зарегистрирован: 2016-08-04
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка формата

Сделал.
Теперь стало так:

cmd = str(cond_addr+cfg)
UnicodeEncodeError: ‘ascii’ codec can't encode character u'\xf2' in position 3: ordinal not in range(128)

Офлайн

#4 Сен. 1, 2016 11:00:54

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Ошибка формата

 (cond_addr+cfg).encode('utf-8')  # Или не utf-8

Офлайн

#5 Сен. 1, 2016 11:38:31

nkol2000
Зарегистрирован: 2016-08-04
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка формата

Переписал так:
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

Откуда что берется…

Офлайн

#6 Сен. 1, 2016 11:39:15

nkol2000
Зарегистрирован: 2016-08-04
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка формата

Самое обидное, что другие запросы проходят нормально и не понятно чем этот отличается.

Офлайн

#7 Сен. 1, 2016 11:57:34

nkol2000
Зарегистрирован: 2016-08-04
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка формата

Вот такие метаморфозы с другими запросами:

\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

Офлайн

#8 Сен. 1, 2016 12:02:22

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Ошибка формата

сделайте перед

 cmd = str(cond_addr+cfg)
print(type(cond_addr))
print(type(cfg))
Может вы хотите сложить строку и юникод?



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#9 Сен. 1, 2016 13:04:12

nkol2000
Зарегистрирован: 2016-08-04
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка формата


<type ‘str’>
<type ‘dict’>
И в правильных и не правильных ответах.

Офлайн

#10 Сен. 1, 2016 13:05:55

nkol2000
Зарегистрирован: 2016-08-04
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка формата

Оба <type ‘str’>
Первый раз неправильно написАл.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version