NaName, код написан правильно. Засада крылась в другом. По совету longclaps "подслушал" и выяснил, что правильный запрос был '55 aa 04 00 64'. То есть никакой контрольной суммы считать не надо.
Видимо, у этих китайских источников питания несколько вариантов плат. Возможно, это сделано специально, чтобы не толкали б/у, а покупали только с их завода. Косвенно все это подтверждается тем, что это уже второй по счету лазер (меняли), а с первым не работала программа на Delphi с компакт-диска.
sim3x, в pyMongo - связь, естественно, только с питоном (не с PyQt). То есть для монго вместо QSqlTableModel придется использовать какой-нибудь QTableWidget, наполняя его полученными JSON-данными. В принципе, это не так уж и страшно (а в чем-то даже и проще), но код придется переписывать весьма значительно.
1. Менять модель должен пользователь;
2. У данных реляционная природа, но очень слабая. По факту вся необходимая "реляционность" обеспечивается средствами PyQt и python. Не используются внешние ключи и т.д. (база данных SQLite же).
Видимо, у этих китайских источников питания несколько вариантов плат. Возможно, это сделано специально, чтобы не толкали б/у, а покупали только с их завода. Косвенно все это подтверждается тем, что это уже второй по счету лазер (меняли), а с первым не работала программа на Delphi с компакт-диска.