Кто-нибудь знает о почтовых весах USB, совместимых с Linux? - PullRequest
8 голосов
/ 23 апреля 2010

Я ищу почтовую шкалу, в которой уже есть поддержка linux (драйверы и т. Д.) Для системы доставки, над которой я работаю. Я планирую использовать Ubuntu 9.04, но я готов поменять дистрибутив для совместимости.

Кто-нибудь знает какие-нибудь весы, которые в настоящее время работают? Существует ли проект с открытым исходным кодом, работающий с драйверами масштабирования или аналогичными?

Спасибо!

Ответы [ 3 ]

9 голосов
/ 04 октября 2010

Я пользуюсь 5-фунтовой шкалой stamps.com. Вы можете получить его за 10 долларов, если зарегистрируетесь с ним, а затем отмените его.

Чтобы прочитать из него в Linux, получите этот скрипт: http://gist.github.com/503896

Отредактируйте файл скрипта, чтобы установить правильный путь к hidraw-устройству. Вы можете найти путь, запустив dmesg после того, как вы подключите весы. Вы увидите что-то вроде "/ dev / hidraw2".

После установки пути hidraw в скрипте, добавьте разрешение на выполнение и затем запустите его как root:

chmod + x usbscale.pl

sudo ./usbscale.pl

Поместите объект на весы, и он напечатает вес.

5 голосов
/ 13 октября 2011

Обновление:

Я создал более новую версию моего более раннего сценария, связанного с mattismyname. Он написан на C, и вы можете найти его на https://github.com/erjiang/usbscale

Чтобы использовать его, просто скачайте исходный код и запустите (внутри его каталога):

sudo aptitude install libusb-1.0-0-dev
make
./usbscale

Возможно, вам придется скопировать 50-usb-scales.rules в /etc/udev/rules.d (или запустить как root, хаха), если вы столкнетесь с ошибкой прав доступа.

0 голосов
/ 06 июня 2014

Значение экспоненты передается как целое число со знаком, а вес передается в порядке байтов с прямым порядком байтов. Другие ответы неправильно учитывают для этих факторов. См. Более полный пример здесь.

<?php
$binary = fread(fopen('/dev/hidraw3', 'r'), 7);
$data = (object) unpack('Creport/Cstatus/Cunit/cexponent/vweight', $binary);

if ($data->report == 0x03 && $data->status == 0x04) {
    $data->weight = $data->weight * pow(10, $data->exponent);
    if ($data->unit == 0x0B) {
        // convert ounces to grams
        $data->weight *= 28.349523125;
        // and unit to grams
        $data->unit = 0x02;
    }

    if ($data->unit == 0x02) {
        echo "{$data->weight} g\n";
    } else {
        echo "{$data->weight} in other unit\n";
    }
}
...