-
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
-
get data from sinotimer meter
#!/usr/bin/python3 # -*- coding: utf-8 -*- import libscrc import serial import sys import struct def str_to_bytes(data): return [hex(ord(c)) for c in data] port=sys.argv[1] addr=sys.argv[2] def get_value(data,port,addr): crc16 = libscrc.modbus(data) crc16_str = '0x{:04x}'.format(crc16) data.append(int(crc16_str[2:][2:4],16)) data.append(int(crc16_str[2:][0:2],16)) ser = serial.Serial(port,9600,timeout=0.1,bytesize=8,stopbits=1,parity='N',writeTimeout=0) ser.write(data) line = ser.read(100) ret = (''.join('{:02x}'.format(ord(x)) for x in line)) val = struct.unpack('>f',line[3:7])[0] return "%.3f" % val ser.close() data = bytearray(b'\x00\x04\x00\x00\x00\x02') data[0]=int(addr) voltage = get_value(data,port,addr) data = bytearray(b'\x00\x04\x00\x08\x00\x02') data[0]=int(addr) current = get_value(data,port,addr) data = bytearray(b'\x00\x04\x00\x12\x00\x02') data[0]=int(addr) power = get_value(data,port,addr) data = bytearray(b'\x00\x04\x01\x00\x00\x02') data[0]=int(addr) power_total = get_value(data,port,addr) print("U="+voltage+" I="+current+" P="+power+" W="+power_total+"|U="+voltage+";; I="+current+";; P="+power+";; "+"W="+power_total+";; ")