• PostgreSQL pg_dump pg_restore

    dump and restore postgresql database

    dump

    #!/bin/bash
    if [ ! "$USER" == "postgres" ] ; then
    	echo "user must be postgres"
    	exit 1
    fi
    PATH=$PATH:/srv/pgsql/bin
    touch /u04/export/in_progress
    for db in $(echo "select datname  from pg_database where datname <>'template0'" | psql --no-align --quiet --tuples-only ); do
    mkdir -p "/u04/export/$db"
    echo "dump database $db..."
    backup_file="/u04/export/$db/pg_dump__${db}__$(date +%Y-%m-%d__%H-%M-%S)"
    pg_dump $db -Fd  -f  $backup_file && pg_dump $db -Fp --schema-only -f  $backup_file/schema.sql
    if [[ $?==0 ]]; then
    	echo "export to $backup_file success"
    else
    	echo "export failed"
    fi
    done
    rm /u04/export/in_progress

    restore

    pg_restore -d test4 -Fd /u04/export/test4/pg_dump__test4__2025-08-21__11-43-18/
    pg_restore -d test4 -Fd -a /u04/export/test4/pg_dump__test4__2025-08-21__11-43-18/
    pg_restore -d test4 -Fd -t dt_fake_data -a /u04/export/test4/pg_dump__test4__2025-08-21__11-43-18/
  • access to hilink web interface from remote host

    hilink usb dongle on remote host

    remote host

    sysctl -w net.ipv4.ip_forward=1
    iptables -t nat -A PREROUTING --dst 10.10.10.22 -p tcp --dport 80 -j DNAT --to 192.168.8.1
    iptables -t nat -A POSTROUTING -o eth2  -j MASQUERADE

    local host

    sysctl -w net.ipv4.ip_forward=1
    sysctl -w net.ipv4.conf.all.route_localnet=1
    iptables -t nat -A OUTPUT  -d 192.168.8.1  -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.10.10.22
    iptables -t nat -A POSTROUTING -o tap0  -j MASQUERADE
  • apache rewrite without 301 redirect

    /etc/apache2/conf.d/domaincheck.conf

    AddDefaultCharset UTF-8
    Alias /domainchecker "/srv/www/htdocs/domainchecker"
    <Location "/domainchecker">
        DirectoryIndex index.php
        RewriteEngine On
        RewriteBase /
        RewriteCond %{REQUEST_FILENAME} -d
        RewriteRule ^(.+[^/])$ $1/ [L]
    </Location>
    
    <Directory "/srv/www/htdocs/domainchecker">
        DirectorySlash Off
        Options -Indexes +FollowSymLinks
        Require all granted
    </Directory>
  • modbus cli tcp, mbpoll and moodbus_cli

    sinotimer

    mbpoll phase A,B,C

    zei0mucu:~$ mbpoll -a 8 -t 3:float -B -0 -r0,2,4 172.16.100.101 -1 -q 
    -- Polling slave 8...
    [0]:    234.282
    [2]:    234.666
    [4]:    237.221

    mbpoll phase A

    zei0mucu:~$ mbpoll -a 8 -t 3:float -B -0 -r0 172.16.100.101 -1 -q 
    -- Polling slave 8...
    [0]:    235.587

    modbus_cli, voltage phase A,B,C

    zei0mucu:~$ modbus -S 172.16.100.101 -s 8 i@0/f
    236.30426025390625
    zei0mucu:~$ modbus -S 172.16.100.101 -s 8 i@2/f
    233.90081787109375
    zei0mucu:~$ modbus -S 172.16.100.101 -s 8 i@4/f
    237.7670135498047

    relay

    modbus_cli

    on relay 1

    zei0mucu:~$ modbus 127.0.0.1  -s 2  -v   c@0=1
    Parsed 0 registers definitions from 1 files
    → < 97 58 00 00 00 06 02 05 00 00 ff 00 >
    ← < 97 58 00 00 00 06 02 05 00 00 ff 00 > 12 bytes

    off relay 2

    zei0mucu:~$ modbus 127.0.0.1  -s 2  -v   c@1=0
    Parsed 0 registers definitions from 1 files
    → < fa 49 00 00 00 06 02 05 00 00 00 00 >
    ← < fa 49 00 00 00 06 02 05 00 00 00 00 > 12 bytes

    status

    zei0mucu:~$ modbus 127.0.0.1  -s 2  -v   c@0/8B
    Parsed 0 registers definitions from 1 files
    → < bd 43 00 00 00 06 02 01 00 00 00 08 >
    ← < bd 43 00 00 00 04 02 01 01 00 > 10 bytes
    ← [0, 0, 0, 0, 0, 0, 0, 0]
    0: 0 0x0

    mbpoll

    relay 1

    zei0mucu:~$ mbpoll -a 2  -t 0  -0 -r0 127.0.0.1 -q -- 1
    Written 1 references.

    relay 2

    zei0mucu:~$ mbpoll -a 2  -t 0  -0 -r1 127.0.0.1 -q -- 1
    Written 1 references.

    status

    zei0mucu:~$ mbpoll -a 2  -t 0  -0 -r0 127.0.0.1 -q  -1 -c8
    -- Polling slave 2...
    [0]:    1
    [1]:    1
    [2]:    0
    [3]:    0
    [4]:    0
    [5]:    0
    [6]:    0
    [7]:    0
  • Modbus-Rtu 2 Channel 7-24V Relay Module

    install modbus command line tool

    pip3 install modbus_cli

    setup udev rules for usb QinHeng Electronics CH340 serial converter

    #cat /etc/udev/rules.d/98-usb-serial.rules
    KERNEL=="ttyUSB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", OWNER="hass", GROUP="users", MODE="0660", SYMLINK+="rs485"

    relay control

    # 1
    # on 
    modbus   -b 9600   -s 2  -v   /dev/rs485  c@0=1
    # off
    modbus   -b 9600   -s 2  -v   /dev/rs485  c@0=0
    # status
    modbus -b 9600 -s 2  -v /dev/rs485  c@0/8B | egrep -o '\[.*\]' | tr -d '[,]' | cut -f1 -d' '
    # 2
    # on 
    modbus   -b 9600   -s 2  -v   /dev/rs485  c@1=1
    # off
    modbus   -b 9600   -s 2  -v   /dev/rs485  c@1=0
    # status
    modbus -b 9600 -s 2  -v /dev/rs485  c@0/8B | egrep -o '\[.*\]' | tr -d '[,]' | cut -f2 -d' '