• 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' '
  • write data to influxdb with curl

    systemd unit file

    # /etc/systemd/system/influx-send.service
    [Unit]
    Description=send data to influx 
    After=syslog.target network.target
    [Service]
    Type=simple
    ExecStart=/usr/local/sys/influx/influx-send.sh
    [Install]
    WantedBy=multi-user.target

    shell script /usr/local/sys/influx/influx-send.sh

    #!/bin/bash
    while true; do
    find /var/spool/emeter -type f -exec sh -c "curl -o /dev/null -w \"%{http_code}\" --user 'username':'password' -sS -X POST http://192.168.110.16:8086/write?db=emeter -d @{} | grep -q  204 && rm  {}" \;
    sleep 60
    done

    sample data from /var/spool/emeter/*

    voltage,stand=diesel-new,phase=A value=218 1699828098942885595