Reading the weight from an Ohaus Defender 5000 scale with PHP

Defender 5000 scales can be equipped with a WiFi or wired Ethernet interface. The scale acts as a TCP server and your script establishes a connection as a TCP client. You can then use one of the supported commands to request the weight or simply wait for the scale to send the weight (e.g. when the operator presses the print button).

You can easily test this by using PuTTY in “raw” mode and connecting to the scale:

PuTTY raw tcp connection
The WiFi dongle uses port 6060 (wired Ethernet: port 9761), the IP address is assigned via DHCP by default.
Defender 5000 scale: weight in PuTTY
IP (immediate print) command used to request the weight and reply sent by the scale (N: net weight, G: gross weight, T: tare weight).

Using PHP to communicate with the scale

For demonstration purposes, I’ve adapted example #2 (simple TCP/IP client) from the official documentation:

<?php
error_reporting(E_ALL);

echo "TCP/IP Connection\n";

/* Ohaus Defender 5000 WLAN interface uses port 6060 by default, Ethernet interface uses port 9761 */
$service_port = 6060;

/* IP address of the scale, can be displayed/set in the menu */
$address = "192.168.0.195";

/* Create a TCP/IP socket. */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
} else {
    echo "OK.\n";
}

echo "Attempting to connect to '$address' on port '$service_port'...";
$result = socket_connect($socket, $address, $service_port);
if ($result === false) {
    echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
} else {
    echo "OK.\n";
}

$in = "IP\r\n"; //IP command (Immediate Print) - supported commands depend on the manufacturer, model and LFT settings
$out = '';

echo "Sending command...";
socket_write($socket, $in, strlen($in));
echo "OK.\n";

echo "Reading response:\n\n";
while ($out = socket_read($socket, 2048)) {
    echo $out;
}

echo "Closing socket...";
socket_close($socket);
echo "OK.\n\n";

It produced the following output:

Defender 5000 weight requested with PHP

You can modify the output template through the menu of the scale or by using the Ohaus Scale Mate software, e.g. to send just the net weight and date/time:

Ohaus Defender 5000 custom template

You’ll find a list of commands supported by the scale in the user manual. In the script, I used the IP (immediate print) command, which tells the scale to send the weight immediately (whether it is stable or not). This command is available on all newer Ohaus scales. One notable exception are legal-for-trade (LFT) models, which only support the P command (similar to pressing the print button) and in some cases the SP command (stable print, send weight as soon as it has stabilized). The Defender 5000 also supports many MT-SICS commands (which is the closest thing to a communication standard that the weighing industry currently has).

Please note that I’m not a PHP expert and that this is not a recommendation to use PHP. It is only supposed to be a very basic demonstration (as a potential customer asked me if it was possible to use PHP to communicate with the scale). Other programming languages such a C#, Java, JavaScript or Python may be more suitable. I’m frankly not even sure why the script works the way it does, as I would have expected it to fill the buffer (2048 bytes) before outputting any received data.


The header photo shows a Defender 5000 communication test case (a hard case with a built-in Defender 5000 indicator with all optional communication interfaces installed).

Leave a Reply

Your email address will not be published.

The maximum upload file size: 12 MB. You can upload: image, text.

This site uses Akismet to reduce spam. Learn how your comment data is processed.