sanmai / usb-scale-reader
Standard USB scale reader library
                                    Fund package maintenance!
                                                                            
                                                                                                                                        sanmai
                                                                                    
                                                                
Installs: 228
Dependents: 0
Suggesters: 0
Security: 0
Stars: 32
Watchers: 4
Forks: 10
Open Issues: 1
pkg:composer/sanmai/usb-scale-reader
Requires
- php: >=7.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.13
- phpunit/phpunit: ^6.5 || ^7.4 || ^9
This package is auto-updated.
Last update: 2025-10-06 16:04:56 UTC
README
This library lets you read weight from a standard USB scale using pure PHP.
Could be ported to other languages with ease, should they have unpack()
Tested with:
- Stamps.com Stainless Steel 5 lb. Digital Scale
- DYMO M25 25 lb Digital Postal Scale
See read_stupid.php or usbscale.c if you want to understand how it works at a glance.
Usage
composer require sanmai/usb-scale-reader
And then:
$reader = \USBScaleReader\Reader::fromDevice('/dev/scale'); $weightInGrams = $reader->getWeight(); var_dump($reader, $weightInGrams);
Sample output:
class USBScaleReader\Reader#2 (5) {
  public $report =>
  int(3)
  public $status =>
  int(4)
  public $unit =>
  int(2)
  public $exponent =>
  int(0)
  public $weight =>
  int(144)
}
int(144)
udev rules
Add to /etc/udev/rules.d/80-persistent-scale.rules:
KERNEL=="hidraw*", ATTRS{manufacturer}=="Maker Name", SYMLINK+="scale"
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0664", GROUP="plugdev"
Maker name is either Stamps.com or DYMO.
And then reconnect your scale.
For other makers see:
udevadm info -a -p  $(udevadm info -q path -n /dev/hidrawN)
These rules imply that you should be in plugdev for the scripts to work.
C version
There is also a simple reading program written in C.
To build it and run tests against PHP implementation:
cd example
make test
Usage is as simple as it can be:
./usbscale /dev/hidraw3
Outputs something like
70.87 g