var key_id = dev['tractavt-301-003_128/key_number'];
получается тип number со значением 9656067675277343000 - последние цифры не совпадают.
Попытки сделать строку типа dev[...].toString или dev[...]+"" результат не улучшают.
Для разных ключей то 3 последние цифры зануляются, то две.
Похоже на окргуление , но у одного ключа отброшено (через float что-ли где-то конвертируется ?)
4321777056153896448 4321777056153896400 - тут две цифры
10314784504942266624 10314784504942266000 - тут отброшено, а не округлено
3025810019250769152 3025810019250769000
5982130486717159424 5982130486717159000
18302978955533733888 18302978955533734000
9656067675277342720 9656067675277343000
2666426404434275328 2666426404434275300 - тут две цифры
Я в javascript почти ни какой специалист, но выглядит багой.
Интересно. На всякий случай - прикрепите, пожалуйста, архив с диагностической информацией контроллера. Создание архива описано в документации.
Нужно чтобы увидеть версию пакетов.
Выглядит так, что внутри где-то через float преобразование происходит.
В Устройствах всё нормально так как там ответ от MQTT напрямую, а он наверняка строка.
А при доступе через dev[...] полученная из MQTT строка приводится к number и вот тут где-то в JS влезает промежуточный float (да, очередной прикол JS) и теряется точность.
Что-то мне говорит что это тогда не лечится нормально и единственный вход это сделать что бы dev[u64] возвращал String.
Совместимости это не сломает вроде - просто чуть позже вылезет потеря точности - в момент первого обращения к переменной как к числу.
А вот если продожить работать с переменной как со строкой то всё “починится”.
Второй вариант это конечно модифицировать мой скрипт который на это налетел и работать с u64 как с u32+u32, но это заметание проблемы под ковёр.