Browse Source

Add a script to get scale data

Samuel W. Flint 2 years ago
parent
commit
f7a4b3c20f
1 changed files with 83 additions and 0 deletions
  1. 83 0
      usbscale

+ 83 - 0
usbscale

@@ -0,0 +1,83 @@
+#!/usr/bin/env perl
+#
+# Eric Jiang
+# http://notes.ericjiang.com/posts/54
+# This software is public domain.
+#
+# NOTE: This code is not maintained!
+# There is a newer version written in C:
+# https://github.com/erjiang/usbscale
+#
+use bytes;
+
+my $data;
+
+#prevents us from repeating messages
+my $waitingflag = 0;
+
+while (1) {
+
+    $data = `cat /dev/hidraw7 | head -c 7`;
+
+    my $report = ord(substr($data, 0, 1));
+    my $status = ord(substr($data, 1, 1));
+    my $unit   = ord(substr($data, 2, 1));
+    my $exp    = ord(substr($data, 3, 1));
+    my $lsb    = ord(substr($data, 4, 1));
+    my $msb    = ord(substr($data, 5, 1));
+    my $weight = ($msb * 256 + $lsb) / 10;
+    if($exp != 255 && $exp != 0) {
+        $weight ^= $exp;
+    }
+    #print "$report $status $unit $exp $weight\n";
+
+    if($report != 0x03) {
+      die "Error reading scale data!\n";
+    }
+
+    if($status == 0x01) {
+      die "Scale reports FAULT!\n";
+    } elsif ($status == 0x02 || $weight == 0) {
+        if($waitingflag != 0x02) {
+            print "Zero'd...\n";
+            $waitingflag = 0x02;
+        }
+    } elsif ($status == 0x03) {
+        if($waitingflag != 0x03) {
+            print "Weighing...\n";
+            $waitingflag = 0x03;
+        }
+    } elsif ($status == 0x04) {
+        my $unitName = "units";
+        if($unit == 11) {
+            $unitName = "ounces";
+        } elsif ($unit == 12) {
+            $unitName = "pounds";
+        }
+        print "$weight $unitName\n";
+        last;
+    } elsif ($status == 0x05) {
+        if($waitingflag != 0x05) {
+            print "Scale reports Under Zero...\n";
+            $waitingflag = 0x05;
+        }
+    } elsif ($status == 0x06) {
+        if($waitingflag != 0x06) {
+            print "Scale reports Over Weight!\n";
+            $waitingflag = 0x06;
+        }
+    } elsif ($status == 0x07) {
+        if($waitingflag != 0x07) {
+            print "Scale reports Calibration Needed!\n";
+            $waitingflag = 0x07;
+        }
+    } elsif ($status == 0x08) {
+        if($waitingflag != 0x08) {
+            print "Scale reports Re-zeroing Needed!\n";
+            $waitingflag = 0x08;
+        }
+    } else {
+        die "Unknown status code: $status\n";
+    }
+
+}