SDM120 - licznik energii elektrycznej

Dział poświęcony czujnikom/urządzeniom które obsługuje nettemp
jot
Posty: 926
Rejestracja: śr lut 03, 2016 8:50 pm

Re: SDM120 - licznik energii elektrycznej

Post autor: jot » pt lip 14, 2017 9:45 am

slawko pisze:
czw lip 13, 2017 10:30 pm
dlaczego po

Kod: Zaznacz cały

sdm120c -a 1 -b 2400 -PN -S 2 -z 1 -j 20 /dev/ttyUSB0
mam za każdym razem odczyty a po:

Kod: Zaznacz cały

sdm120c -a1 -b 2400 /dev/ttyUSB0
mam NOK
To proste. Bo używasz innych parametrów:
  • -PN - parzystość: brak
  • -S2 - bity stopu: 2
  • -j 20 - 2sek oczekiwania na odpowiedź
Prawdopodobnie to właśnie dlatego :-)

Awatar użytkownika
slawko
Posty: 260
Rejestracja: czw lis 26, 2015 10:59 pm
Lokalizacja: Bełchatów

Re: SDM120 - licznik energii elektrycznej

Post autor: slawko » pt lip 14, 2017 3:26 pm

jot pisze:
pt lip 14, 2017 9:45 am
To proste. Bo używasz innych parametrów:
  • -PN - parzystość: brak
  • -S2 - bity stopu: 2
  • -j 20 - 2sek oczekiwania na odpowiedź
Prawdopodobnie to właśnie dlatego :-)
Proste :-) zależy dla kogo, no dobra to co muszę zmienić aby NetTemp czytał dane z licznika?

jot
Posty: 926
Rejestracja: śr lut 03, 2016 8:50 pm

Re: SDM120 - licznik energii elektrycznej

Post autor: jot » pt lip 14, 2017 9:33 pm

slawko pisze:
pt lip 14, 2017 3:26 pm
Proste :-) zależy dla kogo, no dobra to co muszę zmienić aby NetTemp czytał dane z licznika?
No to pokombinuj trochę z parametrami i zmień skrypt wywołujący SDM, a wtedy pewne ruszy dobrze. Myślę, że zmiana opóźnienia powinna wystarczyć.

Awatar użytkownika
slawko
Posty: 260
Rejestracja: czw lis 26, 2015 10:59 pm
Lokalizacja: Bełchatów

Re: SDM120 - licznik energii elektrycznej

Post autor: slawko » pt lip 14, 2017 10:54 pm

Czyli kombinować z

Kod: Zaznacz cały

/var/www/nettemp/modules/sensors/rs485/sdm120
zawartość

Kod: Zaznacz cały

#! /bin/bash

dir=$( cd "$( dirname "$0" )" && cd ../../../ && pwd )
date=`date +%y%m%d-%H%M`

if pidof -o %PPID -x $(basename $0) > /dev/null; then
    echo $(basename $0) runnning
    echo "$date  $(basename $0) already running" >> $dir/log.txt
    exit
fi


dev=$(sqlite3 -cmd ".timeout 2000" $dir/dbf/nettemp.db  "SELECT dev FROM usb WHERE device='RS485'"|sed 's/\/dev\///g')
if [[ "$dev" != "none" ]]; then
	echo USB selected
	skey=$(sqlite3 -cmd ".timeout 2000" $dir/dbf/nettemp.db "select server_key from settings WHERE id='1'")

	addr=$(sqlite3 -cmd ".timeout 2000" $dir/dbf/nettemp.db  "SELECT addr FROM rs485 WHERE dev='SDM120'")

	for i in $addr; do
		
		rs=a$i
		val=$(/usr/local/bin/sdm120c /dev/$dev -a $i -p |head -1|awk '{print $2}')
		php-cgi -f $dir/receiver.php key=$skey usb=$dev$rs device=usb value=$val type=watt

		val=$(/usr/local/bin/sdm120c /dev/$dev -a $i -v |head -1|awk '{print $2}' |sed 's/-//g')
		php-cgi -f $dir/receiver.php key=$skey usb=$dev$rs device=usb value=$val type=volt

		val=$(/usr/local/bin/sdm120c /dev/$dev -a $i -c |head -1|awk '{print $2}' |sed 's/-//g')
		php-cgi -f $dir/receiver.php key=$skey usb=$dev$rs device=usb value=$val type=amps

		all=$(/usr/local/bin/sdm120c /dev/$dev -a $i -i |head -1|awk '{print $4}')

		last=$(sqlite3 -cmd ".timeout 2000" $dir/dbf/nettemp.db "SELECT sum FROM sensors WHERE rom='usb_$(echo $dev$rs)_elec'")

		if [[ -n "$last" ]] && [[ "$last" != "0" ]]; then
   		val=$(echo $all - $last |bc |awk '{print $1/1000}')
    		echo "LAST $last"
    		echo "VAL $val"
    		echo "ALL $all"
    		php-cgi -f $dir/receiver.php key=$skey usb=$dev$rs device=usb value=$val type=elec current=$val
    		sqlite3 -cmd ".timeout 2000" $dir/dbf/nettemp.db "UPDATE sensors SET sum='$all' WHERE rom='usb_$(echo $dev$rs)_elec'"
		else
   		val=$all
   		php-cgi -f $dir/receiver.php key=$skey usb=$dev$rs device=usb value=0 type=elec
    		sqlite3 -cmd ".timeout 2000" $dir/dbf/nettemp.db "UPDATE sensors SET sum='$all' WHERE rom='usb_$(echo $dev$rs)_elec'"
		fi

	done

else
    echo RS485 OFF
fi
i po wykonaniu:

Kod: Zaznacz cały

[email protected]:/home/pi# bash -x /var/www/nettemp/modules/sensors/rs485/sdm120
+++ dirname /var/www/nettemp/modules/sensors/rs485/sdm120
++ cd /var/www/nettemp/modules/sensors/rs485
++ cd ../../../
++ pwd
+ dir=/var/www/nettemp
++ date +%y%m%d-%H%M
+ date=170714-2249
++ basename /var/www/nettemp/modules/sensors/rs485/sdm120
+ pidof -o %PPID -x sdm120
++ sqlite3 -cmd '.timeout 2000' /var/www/nettemp/dbf/nettemp.db 'SELECT dev FROM usb WHERE device='\''RS485'\'''
++ sed 's/\/dev\///g'
+ dev=ttyUSB0
+ [[ ttyUSB0 != \n\o\n\e ]]
+ echo USB selected
USB selected
++ sqlite3 -cmd '.timeout 2000' /var/www/nettemp/dbf/nettemp.db 'select value from nt_settings WHERE option='\''server_key'\'''
+ skey=xxxxx
++ sqlite3 -cmd '.timeout 2000' /var/www/nettemp/dbf/nettemp.db 'SELECT addr FROM rs485 WHERE dev='\''SDM120'\'''
+ addr=1
+ for i in '$addr'
+ rs=a1
++ /usr/local/bin/sdm120c /dev/ttyUSB0 -a 1 -p
++ head -1
++ awk '{print $2}'
+ val=
+ php-cgi -f /var/www/nettemp/receiver.php key=xxxxx usb=ttyUSB0a1 device=usb value= type=watt
usb_ttyUSB0a1_watt ok

++ /usr/local/bin/sdm120c /dev/ttyUSB0 -a 1 -v
++ head -1
++ sed s/-//g
++ awk '{print $2}'
+ val=
+ php-cgi -f /var/www/nettemp/receiver.php key=xxxxx usb=ttyUSB0a1 device=usb value= type=volt
usb_ttyUSB0a1_volt ok

++ /usr/local/bin/sdm120c /dev/ttyUSB0 -a 1 -c
++ awk '{print $2}'
++ head -1
++ sed s/-//g
+ val=
+ php-cgi -f /var/www/nettemp/receiver.php key=xxxxx usb=ttyUSB0a1 device=usb value= type=amps
usb_ttyUSB0a1_amps ok

++ /usr/local/bin/sdm120c /dev/ttyUSB0 -a 1 -i
++ awk '{print $4}'
++ head -1
+ all=
+++ echo ttyUSB0a1
++ sqlite3 -cmd '.timeout 2000' /var/www/nettemp/dbf/nettemp.db 'SELECT sum FROM sensors WHERE rom='\''usb_ttyUSB0a1_elec'\'''
+ last=
+ [[ -n '' ]]
+ val=
+ php-cgi -f /var/www/nettemp/receiver.php key=xxxxx usb=ttyUSB0a1 device=usb value=0 type=elec
usb_ttyUSB0a1_elec ok

++ echo ttyUSB0a1
+ sqlite3 -cmd '.timeout 2000' /var/www/nettemp/dbf/nettemp.db 'UPDATE sensors SET sum='\'''\'' WHERE rom='\''usb_ttyUSB0a1_elec'\'''
[email protected]:/home/pi#

dobrze kombinuje, czy o ten skrypt chodzi?

jot
Posty: 926
Rejestracja: śr lut 03, 2016 8:50 pm

Re: SDM120 - licznik energii elektrycznej

Post autor: jot » ndz lip 16, 2017 8:24 am

Wygląda na to, że o ten skrypt chodzi.. Tylko dodanie 2s opóźnienia spowoduje, że całość będzie się wykonywać kilkanaście sekund dłużej.. Swoją drogą - nie da się od razu odpytać licznika o wszystkie parametry?

McGregor
Posty: 2
Rejestracja: pt wrz 29, 2017 9:36 pm

Re: SDM120 - licznik energii elektrycznej

Post autor: McGregor » pt wrz 29, 2017 9:56 pm

Witam serdecznie,
Zwracam się z uprzejmą prośbą o pomoc w jednym temacie - zmiany adresu licznika SDM120.

Posiadam 3xSDM120 które "wiszą" na jednym kablu, w szynie ModBUS, połączone w szeregu, w zamierzeniu każdy miał sprawdzać osobną fazę. Mój problem polega na tym, że w chwili gdy działają 3 liczniki - to nic nie działa ;) Oczywiście chodzi o to że nie działa odpytywanie o wartości. Po zgaszeniu 2óch z 3 liczników, w sensie odłączeniu ich od prądu odpytywanie działa. Logika podpowiada, że 3 urządzenia o tym samym adresie nie będą działać prawidłowo w szynie MB. Pytanie zatem do szanownych forumowiczów jak dokonać zmiany adresu licznika i czy da się zaprząc do tego programiku z github'a (https://github.com/gianfrdp/SDM120C) czy trzeba użyć czegoś innego.

Próbowałem chyba już wszystkich kombinacji, niestety bez skutecznie :( Dokumentacja do programu mówi aby skorzystać z opcji "-s" jednak nic nie chwyta:

Kod: Zaznacz cały

history | grep sdm120 | grep -- -s
  156  sdm120c /dev/ttyUSB0  -1 -b 2400 -P N -a 1 -s 3
  158  sdm120c /dev/ttyUSB0  -1 -b 2400 -P N -s 3
  159  sdm120c /dev/ttyUSB0  -b 2400 -P N -s 3
  160  sdm120c /dev/ttyUSB0  -b 2400 -P N -s 3 -d 1
  161  sdm120c /dev/ttyUSB0  -b 2400 -P N -s 3 -a 1
  162  sdm120c /dev/ttyUSB0  -b 2400 -P N -s 3 -a 3
  166  sdm120c /dev/ttyUSB0  -b 2400 -P N -s:3
  167  sdm120c /dev/ttyUSB0  -b 2400 -P N -s: 3
  168  sdm120c /dev/ttyUSB0  -b 2400 -P N -s 3
  171  sdm120c /dev/ttyUSB0  -b 2400 -P N -a 1 -S 1 -s 3
  172  sdm120c /dev/ttyUSB0  -b 2400 -P N -a 1 -S 1 -s 3 -d 1
  173  sdm120c /dev/ttyUSB0  -b 2400 -P N  -S 1 -s 3 -d 1
  174  sdm120c /dev/ttyUSB0  -s 3
  175  sdm120c /dev/ttyUSB0  -s 3 -b 2400
  176  sdm120c /dev/ttyUSB0  -s 3 -b 2400 -P N
  177  sdm120c /dev/ttyUSB0  -s 3 -b 2400 -P N -1
  185  sdm120c -a 1 -d 1 -b 2400 -P N -S 1 -1 /dev/ttyUSB0 -s 3
  186  sdm120c -a 1 -b 2400 -P N -S 1 -1 /dev/ttyUSB0 -s 3
  187  sdm120c -a 1 -b 2400 -P N -S 1 -1 /dev/ttyUSB0 -s "3"
  188  sdm120c -a 1 -b 2400 -P N -S 1 -1 /dev/ttyUSB0 -s '3'
  197  sdm120c -a 1 -b 2400 -P N -S 1 -1 /dev/ttyUSB0 -s
  198  sdm120c -a 1 -b 2400 -P N -S 1 -1 /dev/ttyUSB0 -s 3 -r 2400
  199  sdm120c -a 1 -b 2400 -P N -S 1 -1 /dev/ttyUSB0 -s 3 -r 2400 -N 0
  200  sdm120c -a 1 -b 2400 -P N -S 1  /dev/ttyUSB0 -s 3 -r 2400 -N 0
  201  sdm120c -a 1 -b 2400 -P N -S 1  /dev/ttyUSB0 -s 3
  202  sdm120c -a 1 -b 2400 -P N -S 1  /dev/ttyUSB0 -s 3 -r 2400
  203  sdm120c -a 1 -b 2400 -P N -S 1  /dev/ttyUSB0 -s 3 -r 2400 -N 0
  204  sdm120c -a 1 -b 2400 -P N -S 1  /dev/ttyUSB0 -s 3 -r 2400 -N 0 -d 1

McGregor
Posty: 2
Rejestracja: pt wrz 29, 2017 9:36 pm

Re: SDM120 - licznik energii elektrycznej

Post autor: McGregor » pn paź 09, 2017 9:36 pm

Witam,
Ponawiam prośbę o pomoc, ewentualnie prośba o informację czy ktoś z Kolegów zmieniał adres ModBUS w SDMie 120. Może jest jakiś inny sposób / oprogramowanie do którym można było by dokonać takiej zmiany?
Zakładam musi istnieć zmiana ich adresów, bo przecież puszczanie 3 par drutów (każdy do osobnego licznika) i podłączanie ich do osobnych konwerterów RS485/USB nie jest optymalnym rozwiązaniem.

Pozdrawaiam serdecznie

Awatar użytkownika
pimowo
Betatester
Posty: 4313
Rejestracja: czw lut 19, 2015 9:17 am
Lokalizacja: Wołów

Re: SDM120 - licznik energii elektrycznej

Post autor: pimowo » pn paź 09, 2017 9:51 pm

W dokumentacji licznika nic nie ma na ten temat? ;)
Mój NetTemp mieszka w Raspberry Pi 3B na szynie DIN

mureklop
Posty: 27
Rejestracja: wt kwie 12, 2016 11:27 am

Re: SDM120 - licznik energii elektrycznej

Post autor: mureklop » śr paź 11, 2017 4:26 pm

pimowo pisze:
pn paź 09, 2017 9:51 pm
W dokumentacji licznika nic nie ma na ten temat? ;)
ja do zmiany addresu w or-we504 uzywam tego https://github.com/PeWu/orno_modbus sprobuj

ODPOWIEDZ

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 5 gości