From: Christian Weiske Date: Wed, 29 Nov 2023 21:24:20 +0000 (+0100) Subject: udevadm X-Git-Url: https://git.cweiske.de/usb-wde1-tools.git/commitdiff_plain/HEAD?hp=038e93dc9b251888e88e8bd577811a13559a3118 udevadm --- diff --git a/Makefile b/Makefile index 4cba154..b07409a 100644 --- a/Makefile +++ b/Makefile @@ -3,16 +3,19 @@ PLUGINS = /etc/munin/plugins install: lninstall lninstall: - ln -sf $(abspath init.d/usb-wde-log) /etc/init.d - insserv usb-wde-log + ln -sf $(abspath systemd/usb-wde1-log.service) /etc/systemd/system/ + systemctl daemon-reload + systemctl start usb-wde1-log + systemctl enable usb-wde1-log ln -sf $(abspath munin/usb-wde1_) $(PLUGINS)/usb-wde1_temperature ln -sf $(abspath munin/usb-wde1_) $(PLUGINS)/usb-wde1_humidity uninstall: - service usb-wde-log stop - insserv -r usb-wde-log - rm -f /etc/init.d/usb-wde-log + systemctl stop usb-wde1-log + systemctl disable usb-wde1-log + rm /etc/systemd/system/usb-wde1-log.service + systemctl daemon-reload rm -f $(PLUGINS)/usb-wde1_temperature rm -f $(PLUGINS)/usb-wde1_humidity diff --git a/README.rst b/README.rst index 87a7d4b..9467f8e 100644 --- a/README.rst +++ b/README.rst @@ -28,20 +28,29 @@ Setup $ cd munin && nohup ./usb-wde1-log-last.sh & - once. It backgrounds the logging process and logs into /tmp/usb-wde1-last. + once. It backgrounds the logging process and logs into ``/var/spool/usb-wde1/usb-wde1-last``. This process needs to be started whenever the machine is rebooted. + The ``systemd/`` directory contains a ``usb-wde1-log.service`` file you can copy to + ``/etc/systemd/system/``. After copying it, run:: + + $ systemctl daemon-reload + $ systemctl start usb-wde1-log + $ systemctl status usb-wde1-log + $ systemctl enable usb-wde1-log + 2. Link the munin plugin:: $ cd /etc/munin/plugins $ ln -s /usr/local/src/usb-wde1-tools/munin/usb-wde1_ usb-wde1_temperature $ ln -s /usr/local/src/usb-wde1-tools/munin/usb-wde1_ usb-wde1_humidity -3. Configure the plugins - Edit /etc/munin/plugin-conf.d/munin-node and add the following lines:: +3. Configure the plugins: + + Edit ``/etc/munin/plugin-conf.d/munin-node`` and add the following lines:: [usb-wde1_*] - env.logfile /tmp/usb-wde1-last + env.logfile /var/spool/usb-wde1/usb-wde1-last env.host_name House env.sensors 0 1 7 env.sensor0 Living room @@ -119,3 +128,32 @@ Install PHP and the PHP rrd extension (``pear install pecl/rrd``) to make it work. Run ``gen-html.php`` every 5 minutes. + + +Static USB device name +====================== +When you have multiple serial USB devices attached to the computer, +rebooting may lead to switched ttyUSB* numbers. + +A solution is to define a udev rule in ``/etc/udev/rules.d/99-usb-wde1.rules``:: + + SUBSYSTEM=="tty", ATTRS{serial}=="XQJ2EJEMADDFYBD3", SYMLINK+="usbwde1" + +You can find the serial number in ``dmesg`` output:: + + usb 1-3: new full-speed USB device number 2 using xhci_hcd + usb 1-3: New USB device found, idVendor=10c4, idProduct=ea60, bcdDevice= 1.00 + usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3 + usb 1-3: Product: ELV USB-WDE1 Wetterdatenempfänger + usb 1-3: Manufacturer: Silicon Labs + usb 1-3: SerialNumber: XQJ2EJEMADDFYBD3 + +After creating the file, activate it:: + + $ udevadm control --reload + $ udevadm trigger + +Now a file ``/dev/usbwde1`` exists. + +Modify ``munin/usb-wde1-log-last.sh`` to use the new device file instead +of ``ttyUSB0``. diff --git a/htmlreport/config.php.dist b/htmlreport/config.php.dist index 0720e33..92b3793 100644 --- a/htmlreport/config.php.dist +++ b/htmlreport/config.php.dist @@ -3,6 +3,8 @@ * path to the .rrd files. * {item} will be replaced with humidity/temperature, * {id} with the sensor number + * + * May be an array with the same keys as in $names. */ $filetemplate = '/var/lib/munin/home.cweiske.de/haus-usb_wde1_{item}-sensor{id}-g.rrd'; $outdir = '/tmp/'; diff --git a/munin/usb-wde1-log-last.sh b/munin/usb-wde1-log-last.sh index 9603dce..620dd0c 100755 --- a/munin/usb-wde1-log-last.sh +++ b/munin/usb-wde1-log-last.sh @@ -11,19 +11,25 @@ # # FIXME: send RESET or INIT and M2 +device=/dev/ttyUSB0 + +if [ ! -d /var/spool/usb-wde1 ]; then + mkdir /var/spool/usb-wde1 +fi + curdir="$(dirname "$0")" if [ "$1" = "--dummy-data" ]; then $curdir/../dummy-data-generator.php\ - | $curdir/log-single-line.sh /tmp/usb-wde1-last + | $curdir/log-single-line.sh /var/spool/usb-wde1/usb-wde1-last else - if [ ! -r /dev/ttyUSB0 ]; then - echo "Device /dev/ttyUSB0 is not readable" + if [ ! -r $device ]; then + echo "Device $device is not readable" exit 1 fi #socat breaks something that leads to # WRONG VAL, WRONG CMD and FullBuff->Reset # errors - socat /dev/ttyUSB0,b9600,min=1,time=1,brkint=0,icrnl=0,ixoff=1,imaxbel=0,opost=0,isig=0,icanon=0,iexten=0,echo=0,echoe=0,echok=0 STDOUT\ - | $curdir/log-single-line.sh /tmp/usb-wde1-last + socat $device,b9600,min=1,time=1,brkint=0,icrnl=0,ixoff=1,imaxbel=0,opost=0,isig=0,icanon=0,iexten=0,echo=0,echoe=0,echok=0 STDOUT\ + | $curdir/log-single-line.sh /var/spool/usb-wde1/usb-wde1-last fi diff --git a/munin/usb-wde1_ b/munin/usb-wde1_ index 6bae030..3c75c72 100755 --- a/munin/usb-wde1_ +++ b/munin/usb-wde1_ @@ -15,7 +15,7 @@ usb-wde1 - Munin plugin to report usb-wde1 temperature and humidity data =head2 EXAMPLE CONFIGURATION [usb-wde1_*] - env.logfile /tmp/usb-wde1-last + env.logfile /var/spool/usb-wde1/usb-wde1-last env.host_name House env.sensors 0 1 7 env.sensor0 Living room diff --git a/systemd/usb-wde1-log.service b/systemd/usb-wde1-log.service new file mode 100644 index 0000000..b069fdb --- /dev/null +++ b/systemd/usb-wde1-log.service @@ -0,0 +1,15 @@ +[Unit] +Description=USB-WDE1-Wetterdatenlogger +After=systemd-udev-settle.service + +[Service] +Type=simple +User=root +Group=root +WorkingDirectory=/usr/local/src/usb-wde1-tools/munin/ +ExecStart=/usr/local/src/usb-wde1-tools/munin/usb-wde1-log-last.sh +Restart=always +RestartSec=30 + +[Install] +WantedBy=multi-user.target