OBD-Python не может получить номер VIN
Я использую библиотеку OBD-Python, и когда я попытался получить номер VIN из своего автомобиля, даже следуя документации по пользовательским командам, я получил это сообщение:
[obd.obd] 'b'0902': VIN NUMBER 'не поддерживается Дата: 2018-07-09 14:48:30.428588 - VIN NUMBER: Нет.
def vin(messages):
""" decoder for RPM messages """
d = messages[0].data # only operate on a single message
d = d[2:] # chop off mode and PID bytes
v = bytes_to_int(d) / 4.0 # helper function for converting byte arrays to ints
return v * Unit.VIN # construct a Pint Quantity
c = OBDCommand("VIN", # name
"VIN NUMBER", # description
b"0902", # command
17, # number of return bytes to expect
vin, # decoding function
ECU.ENGINE, # (optional) ECU filter
True) # (optional) allow a "01" to be added for speed
o = obd.OBD()
o.supported_commands.add(c)
o.query(c)
print('Data: ' + str(datetime.datetime.now()) + ' -- VIN NUMBER: '+str(connection.query(c)))
Что я делаю не так?
2 ответа
Вы не делаете ничего плохого. Почти все команды, как определено в SAE J1979, являются необязательными - поставщики могут выбирать, реализовывать их или нет. В случае вашего транспортного средства, похоже, что продавец решил против этого.
Некоторые производители транспортных средств отвечают всеми 0xFF в байтах. Возможно, они делают это, чтобы помешать сторонним поставщикам инструментов сканирования OBD2, которые предлагают только ограниченное количество транспортных средств, на которых можно использовать этот инструмент, отмечая, что для увеличения этого числа требуется покупка дополнительных лицензий. Заполнение VIN всеми 0xFF означает, что этот трюк больше не работает. При этом их сервисные центры могут использовать сторонние инструменты сканирования OBD2 без необходимости покупать дополнительные лицензии VIN по мере увеличения парка автомобилей, которые они обслуживают. Просто мои мысли.