GitXplorerGitXplorer
l

usb-watchdog

public
6 stars
0 forks
1 issues

Commits

List of commits on branch main.
Verified
788847c6ad63125e4bf51a17a5620771560becc4

Update usb_watchdog.py

lleifliddy committed 2 years ago
Verified
09c0bd470edf5fe87b1f778f8310bc03be55f8e5

Update usb_watchdog.py

lleifliddy committed 2 years ago
Verified
4366cd55be745eefdd6ffb539b418c3bf83fcdf6

Update usb_watchdog.py

lleifliddy committed 2 years ago
Verified
4fec9469e484a0fcb585f0d089ef3e165328356d

Update README.md

lleifliddy committed 3 years ago
Unverified
0371019757c2e35b7b731467735e6af2e9036691

converted log and print statement to f-strings

lleifliddy committed 3 years ago
Verified
e191ac4f869aaee770a60f11e14a440f46850282

Update README.md

lleifliddy committed 3 years ago

README

The README file for this repository.

usb-watchdog

This project is largley based off of Progman2K's repo https://github.com/Progman2k/USB_Watchdog
and supports the following (HID) usb-watchdog device:

lsusb output:
ID 5131:2007 MSR MSR-101U Mini HID magnetic card reader

It's confusing as there seems to be many devices like this on the market using the same 5131:2007 id.

The main difference between this device and Progman2K's device and that this device doesn't have an integrated power button, also the command format is different.

This device accepts the following commands/messages which are comprised of two bytes:
ping: ['0x1e', '0x00']
restart: ['0xff', '0x55']

If the device doesn't receive a "ping" message within the timeout period, the relays will be triggered, which causes the connected system to reboot.

initial timeout: 120 seconds this is the inital timeout value placed on the device, which will change after the device receives its first ping message
normal timeout: 290 seconds after the device receives its first ping message, the timeout value changes from 120 seconds to (approx) 290 seconds

After a ping message is sent to the usb watchdog device, a read operation is performed to confirm that the device actually received the message.
If these values differ, an error message will be displayed showing what bytes were transferred and what bytes were received.

WARNING  Watchdog's TX and RX don't match
TX 0x1e00
RX 0x0eff

** errors like this should never happen, just know that the receipt of each transmitted ping message is being verfied.

python libraries
This script requires the pyusb and systemd-python python libraries
You can install them via your distro's package management tool or via pip3

fedora package install
dnf install python3-pyusb python3-systemd

pip package install
pip3 install pyusb systemd-python

command options
Should be pretty self-explanatory

./usb_watchdog.py --help
usage: usb_watchdog.py [-h] [-i INTERVAL] [-q] [-r] [-d] [-u USBVENDOR] [-p USBPRODUCT]

options:
  -h, --help            Show this help message and exit
  -i INTERVAL, --interval INTERVAL
                        Watchdog ping interval in seconds, should be under 230, default value: 10
  -q, --quiet           Silences all output
  -r, --restart         Restart system via the watchdog USB device
  -d, --debug           Output verbose debugging information
  --date                Output date/time with each logging entry
  --systemd             Use the systemd/journald logging mechanism
  -u USBVENDOR, --usbvendor USBVENDOR
                        usb vendor id, default value: 5131
  -p USBPRODUCT, --usbproduct USBPRODUCT
                        usb product id, default value: 2007

Each time the device successfully receives a ping message, the blue led on the device will blink.

setup the usb_watchdog service

git clone https://github.com/leifliddy/usb-watchdog.git
cd usb-watchdog

sudo cp usb_watchdog.py /usr/local/sbin/
sudo cp usb_watchdog.service /etc/systemd/system/
systemctl enable --now usb_watchdog.service

running journalctl -f will show you the ping intervals

Dec 24 06:31:01 black.example.com usb_watchdog[117201]: pinging!
Dec 24 06:31:11 black.example.com usb_watchdog[117201]: pinging!
Dec 24 06:31:21 black.example.com usb_watchdog[117201]: pinging!
Dec 24 06:31:31 black.example.com usb_watchdog[117201]: pinging!
Dec 24 06:31:41 black.example.com usb_watchdog[117201]: pinging!

Also, you can start the usb_watchdog service without needing the usb-watchdog device to be plugged in.
If/when the device is plugged in at a later time, the service will identify, connect, and start communicating with it.