RS485 / ModBus рдЗрдВрдЯрд░рдлрд╝реЗрд╕
SDM-220 рдХреЗ рд╕рд╛рде рдПрдХ рдЗрд▓реЗрдХреНрдЯреНрд░рд┐рдХ рдореАрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реЗ
рдкрд╣рд▓реЗ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рдмрд╛рдж рд╕реЗ рд▓рдЧрднрдЧ рдПрдХ рд╡рд░реНрд╖ рдмреАрдд рдЪреБрдХрд╛ рд╣реИ, рдлрд┐рд░ рдПрдХ
рджреВрд╕рд░рд╛ рд▓реЗрдЦ рдерд╛ рдХрд┐ рдЗрд╕рд╕реЗ рдбреЗрдЯрд╛ рдХреИрд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдЖрдВрдХрдбрд╝реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдпрд╣ рддреАрд╕рд░рд╛, рдЙрдореНрдореАрдж рд╕реЗ рдЖрдЦрд┐рд░реА рд╣реИред рд╡рд╣ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдХрд┐
рдУрдкрдирд╣реИрдм рдХреЗ рд╕рд╛рде рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдХреИрд╕реЗ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛
рдЬрд╛рдП ред рдкрд░рд┐рдгрд╛рдо рдЕрдВрдд рдореЗрдВ рдореЗрд░реЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рд╣реИред

рддреЛ, рдХрд╛рдЙрдВрдЯрд░ рд╕реЗ рдЖрдВрдХрдбрд╝реЗ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХрд╛ рдкрд╣рд▓рд╛ рдкреНрд░рдпрд╛рд╕ рдмрд╛рд╣рд░реА рдХреНрд▓рд╛рдЙрдб рд╕реЗрд╡рд╛
рдерд┐рдВрдЧрд╕реНрдкреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рд╕реНрдерд╛рдиреАрдп рд╕рд░реНрд╡рд░ рдЬреЛ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдкреНрд░рджреВрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╣рдордиреЗ USB рд╕реНрдЯрд┐рдХ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд
рдЙрдмрдВрдЯреВ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдкрддрд▓реЗ рдХреНрд▓рд╛рдЗрдВрдЯ (рдорд┐рдиреА-рдХрдВрдкреНрдпреВрдЯрд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдпрд╣ рдкрд╣рд▓реА рдЧрд▓рддреА рдереА - 3 рдорд╣реАрдиреЗ рдмрд╛рдж рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ "рдорд░ рдЧрдпрд╛" (рдПрдХ рджреБрд░реНрдШрдЯрдирд╛, рдореБрдЭреЗ рд▓рдЧрд╛)ред рдХреЛрдИ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд╣реАрдВ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ 2 рдорд╣реАрдиреЗ (рдирд┐рдпрдорд┐рддрддрд╛) рдореЗрдВ рджреВрд╕рд░реА рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рдХреЛ рдорд╛рд░ рджрд┐рдпрд╛ред рддреАрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, 2.5 "рд╕реНрдХреНрд░реВ рдХреЗ рд╕рд╛рде рдПрдХ USB рдкреЙрдХреЗрдЯ рдХреЛ рдкрд╣рд▓реЗ рд╣реА рднрдВрдбрд╛рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдерд┐рдВрдЧрд╕реНрдкреАрдХ рд╕реЗрд╡рд╛ рд╕реНрд╡рдпрдВ рдХреБрдЫ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдбреЗрдЯрд╛ рд╣реЗрд░рдлреЗрд░ рдХреЗ рд╕рд╛рде рдкрд░реНрдпрд╛рдкреНрдд рд▓рдЪреАрд▓рд╛рдкрди рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдкреНрд░рддрд┐ рджрд┐рди рдбреЗрдЯрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддрд┐ рдШрдВрдЯреЗ рдбреЗрдЯрд╛ рдХреЗ рдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрджрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рдХреБрдЫ рдбреЗрдЯрд╛ рдкреИрдХреЗрдЯ рдирд╣реАрдВ рдЖрдпрд╛ рдпрд╛ рдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдХреБрдЫ рдбреЗрдЯрд╛ рднреЗрдЬрд╛, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реБрдИред рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рджрд┐рди рдХреЗ рд╕рдордп рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рджреЛ-рджрд░ рдХрд╛ рд▓реЗрдЦрд╛-рдЬреЛрдЦрд╛ рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛, рдЖрд╢рд╛рд╡рд╛рдж рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВрдиреЗ
рдУрдкрдирд╣реИрдм рд╕реАрдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдкрд╣рд▓рд╛ рдХрд╛рд░реНрдп: рдХрд╛рдЙрдВрдЯрд░ рд╕реЗ рдХрдЪреНрдЪрд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред
рдУрдкрдирд╣рд╛рдм рдХреА рд╕реНрдерд╛рдкрдирд╛
рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рд╣реА рд╡рд┐рд╕реНрддреГрдд рд╣реИред рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ
рдкреЗрдкрд░ рдпреВрдЖрдИ тЖТ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдкреИрдирд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ
рдореЛрдбрдмрд╕ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ -
рдмрд╛рдЗрдВрдбрд┐рдВрдЧ-рдореЛрдбрдмрд╕ 1 - 1.9.0 рд╕реНрдерд╛рдкрд┐рдд
рдХрд░рдирд╛ рд╣реЛрдЧрд╛рдореЙрдбреНрдпреВрд╕рд╕ рдмрд╕ рдХреЛ USB-RS485 рдПрдбреЙрдкреНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рджреВрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдПрдбреЗрдкреНрдЯрд░ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╣реИ рдФрд░ рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдУрдкрдирд╣реИрдм рдпреВрдЬрд░ рдПрдХреНрд╕реЗрд╕ рдЕрдзрд┐рдХрд╛рд░ рдЬреЛрдбрд╝реЗрдВ:
lsusb Bus 002 Device 002: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC ls /dev/ttyUSB* /dev/ttyUSB0 sudo adduser openhab dialout sudo adduser openhab tty
рдлрд┐рд░ рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ (рдпрд╣ рдУрдкрдирд╣реИрдм рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИ):
sudo vi /etc/default/openhab2 EXTRA_JAVA_OPTS="-Dgnu.io.rxtx.SerialPorts=/dev/ttyUSB0"
рдЗрди рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ
рд╕реЗрд╡рд╛рдУрдВ / modbus.cfg рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
sudo vi /etc/openhab2/services/modbus.cfg # poll=30000 # , . start - . connection (9600,8,n,1), . # - 0x00 serial.slave1.connection=/dev/ttyUSB0:9600:8:none:1:rtu:2000:1000:none:none serial.slave1.type=input serial.slave1.start=0 serial.slave1.length=2 serial.slave1.valuetype=float32 # - 0x06 serial.slave2.connection=/dev/ttyUSB0:9600:8:none:1:rtu:2000:1000:none:none serial.slave2.type=input serial.slave2.start=6 serial.slave2.length=2 serial.slave2.valuetype=float32 # - 0x0C serial.slave3.connection=/dev/ttyUSB0:9600:8:none:1:rtu:2000:1000:none:none serial.slave3.type=input serial.slave3.start=12 serial.slave3.length=2 serial.slave3.valuetype=float32 # ( ) - 0x156 serial.slave4.connection=/dev/ttyUSB0:9600:8:none:1:rtu:2000:1000:none:none serial.slave4.type=input serial.slave4.start=342 serial.slave4.length=2 serial.slave4.valuetype=float32
рдлрд┐рд░ рдЖрдкрдХреЛ
рдЖрдЗрдЯрдо / sdm220.items рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбреЗрдЯрд╛
рдЖрдЗрдЯрдо рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
sudo vi /etc/openhab2/items/sdm220.items # Group gSDM220 # , , energy - Number sdm220_voltage " [%.1f ]" <energy> (gSDM220) {modbus="slave1:0"} Number sdm220_current " [%.2f ]" <energy> (gSDM220) {modbus="slave2:0"} Number sdm220_actpower " [%.1f ]" <energy> (gSDM220) {modbus="slave3:0"} Number sdm220_actcounter " [%.1f *]" <energy> (gSDM220) {modbus="slave4:0"}
рдпрд╣ рдбреИрд╢рдмреЛрд░реНрдб рдкрд░ рд╡рд░реНрддрдорд╛рди рд░реАрдбрд┐рдВрдЧ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
рд╕рд╛рдЗрдЯрдореИрдк / default.sitemap рдлрд╝рд╛рдЗрд▓ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
sudo vi /etc/openhab2/sitemaps/default.sitemap sitemap default label="alk0v SmartHome (default sitemap)" { Frame label="" { Text item=sdm220_voltage Text item=sdm220_current Text item=sdm220_actpower Text item=sdm220_actcounter } }
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореАрдЯрд░ рд░реАрдбрд┐рдВрдЧ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:

рдХрд╛рд░реНрдп рджреЛ: HabPanel рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рдФрд░ рд░реАрдбрд┐рдВрдЧ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВ
рдУрдкрдирд╣реИрдм рдХрдИ рдХрдВрдЯреНрд░реЛрд▓ рдкреИрдирд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдмрд╛рд╣рд░реА рддреМрд░ рдкрд░, рдореБрдЭреЗ
рд╣рдмрдиреЗрд▓ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рдкрд╕рдВрдж рдерд╛ред
рдкреЗрдкрд░ рдпреВрдЖрдИ тЖТ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ
, рд╣рдмрдкреЗрд▓ -
рдЙрдИ-рд╣рдмреЗрд▓рди - 2.0.0 рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ ред
рдЧреНрд░рд╛рдлрд╝ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдХреЛ рдХрд╣реАрдВ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред OpenHab рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП
рджреГрдврд╝рддрд╛ рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдореИрдВ MySQL рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд╕рдореБрджрд╛рдп рдиреЗ рдЗрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА, рдЕрдВрдд рдореЗрдВ рдореБрдЭреЗ рдПрдХ
рдирд┐рд░реНрджреЗрд╢ рдорд┐рд▓рд╛ рдЬрд┐рд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд┐рдпрд╛ред
рдЗрд╕рд▓рд┐рдП, MySQL Persistence (рджреГрдврд╝рддрд╛-mysql - 1.9.0) рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред
MySQL рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
sudo apt-get install mysql-server sudo mysql -u root -p
рдЖрдзрд╛рд░ рд╕реЗрдЯ рдХрд░реЗрдВ:
CREATE DATABASE OpenHAB; CREATE USER 'openhab'@'localhost' IDENTIFIED BY 'YOURPASSWORD'; GRANT ALL PRIVILEGES ON OpenHAB.* TO 'openhab'@'localhost'; quit
рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдВ:
sudo service openhab2 stop sudo service openhab2 start
рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
/ mysql.cfg :
# the database url like 'jdbc:mysql://<host>:<port>/<database>' (without quotes) url=jdbc:mysql://localhost:3306/openhab # the database user user=openhab # the database password password=YOURPASSWORD
рджреГрдврд╝рддрд╛ / mysql.persist рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╕рднреА рдЖрдЗрдЯрдореЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
Strategies { // if no strategy is specified for an item entry below, the default list will be used everyMinute : "0 * * * * ?" every5Minutes : "0 */5 * * * ?" everyHour : "0 0 * * * ?" everyDay : "0 0 0 * * ?" default = everyChange } Items { // persist all items once a day and on every change and restore them from the db at startup * : strategy = default, restoreOnStartup }
рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рдЖрдЗрдЯрдо рддрд╛рд▓рд┐рдХрд╛ рдФрд░ рдЖрдЗрдЯрдо рддрд╛рд▓рд┐рдХрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред
mysql> use openhab; Database changed mysql> show tables; +
рдЕрдм рдЖрдк рд╣рдмрдиреЗрд▓ рдореЗрдВ рд╕реБрдВрджрд░рддрд╛ рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдбреИрд╢рдмреЛрд░реНрдб рдЬреЛрдбрд╝реЗрдВ, рдЗрд╕рдореЗрдВ рдирдП рд╡рд┐рдЬреЗрдЯ рдЬреЛрдбрд╝реЗрдВред рдорд╛рди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЧреНрд░рд╛рдлрд╝ -
рдЪрд╛рд░реНрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдбрдореА рд╡рд┐рдЬреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд╣рдЬ рд╣реИред рдореИрдВрдиреЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ Y рдкреИрдорд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЧреНрд░рд╛рдл рдкрд░ рдмрд┐рдЬрд▓реА рдФрд░ рд╡реЛрд▓реНрдЯреЗрдЬ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдШрдЯрд╛рдпрд╛ред
Mysql рдХреЛ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ:

рд╡реЛрд▓реНрдЯреЗрдЬ рдЕрдХреНрд╖ рдХреЗ рд▓рд┐рдП рдереНрд░реЗрд╕рд╣реЛрд▓реНрдб рд╕реЗрдЯ рдХрд░реЗрдВ:

рдЖрдЗрдЯрдо рдЬреЛрдбрд╝реЗрдВ, рд░рдВрдЧ рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрди рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ, рд╡реЛрд▓реНрдЯреЗрдЬ рдХреЗ рд▓рд┐рдП рдорд╛рдзреНрдпрдорд┐рдХ рдЕрдХреНрд╖ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ:

рд╣рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ :)

рддреАрд╕рд░рд╛ рдХрд╛рд░реНрдп: рдкреНрд░рддрд┐ рдШрдВрдЯрд╛ рдФрд░ рджреИрдирд┐рдХ рдЦрдкрдд рдмрд┐рдЬрд▓реА рдХреА рдкреИрдорд╛рдЗрд╢
рд╕рдордп рдХреЗ рд╕рд╛рде рд░рд╛рдЬреНрдп рдореЗрдВ рдмрджрд▓рд╛рд╡ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдШрдВрдЯреЗ, рджрд┐рди, рдорд╣реАрдиреЗ рдХреЗ рд▓рд┐рдП рдЦрдкрдд рдкрд░ рдЖрдВрдХрдбрд╝реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдпрд╣реА рд╣реИ, рдХрд╛рд░реНрдп рд╕рдордп-рд╕рдордп рдкрд░ рдХреБрдЫ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ OpenHab рдореЗрдВ рдирд┐рдпрдо рдЗрдВрдЬрди рдЖрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рд╣рдо
рдирд┐рдпрдореЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред
рдкрд╣рд▓реЗ рдЖрдкрдХреЛ
рдЖрдЗрдЯрдо / sdm220.items рдореЗрдВ рдирдП рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
Number sdm220_hourcounter (gSDM220) Number sdm220_daycounter (gSDM220)
рдлрд┐рд░
рдирд┐рдпрдо / рдПрдирд░реНрдЬреА рдмрдирд╛рдПрдБред
рдлрд╝рд╛рдЗрд▓ , рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЛ 2 рдирд┐рдпрдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдПрдХ рдХреЛ рдПрдХ рдШрдВрдЯреЗ рдореЗрдВ рдПрдХ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рджреВрд╕рд░рд╛ - рджрд┐рди рдореЗрдВ рдПрдХ рдмрд╛рд░ред
rule "Energy by hour" when Time cron "0 0 * * * ?" then // . var hour = sdm220_actcounter.state as DecimalType - sdm220_actcounter.historicState(now.minusHours(1), "mysql":).state as DecimalType // logInfo("TEST","sdm220_hourcounter = "+hour) // Item postUpdate(sdm220_hourcounter, hour) end rule "Energy by day" when Time cron "0 0 0 * * ?" then var day = sdm220_actcounter.state as DecimalType - sdm220_actcounter.historicState(now.minusDays(1), "mysql":).state as DecimalType postUpdate(sdm220_daycounter, day)
рдЖрдк рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП OpenHab рдХрдВрд╕реЛрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдорд╛рдирдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб: Openhab / habopenред рдЖрдк рдЗрд╕реЗ рдХрдорд╛рдВрдб рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
ssh -p 8101 openhab@localhost openhab> log:tail 19:22:00.012 [INFO ] [.eclipse.smarthome.model.script.TEST] - sdm220_hourcounter_day = 0.526123046875 19:22:00.014 [INFO ] [.eclipse.smarthome.model.script.TEST] - sdm220_daycounter = 10.861083984375 19:22:09.462 [INFO ] [marthome.event.ItemStateChangedEvent] - sdm220_current changed from 16.0433025360107421875 to 5.69449329376220703125 19:22:11.500 [INFO ] [marthome.event.ItemStateChangedEvent] - sdm220_actcounter changed from 2387.51904296875 to 2387.5458984375 19:22:13.532 [INFO ] [marthome.event.ItemStateChangedEvent] - sdm220_voltage changed from 192.7679595947265625 to 200.4195098876953125 19:22:15.568 [INFO ] [marthome.event.ItemStateChangedEvent] - sdm220_actpower changed from 2271.8486328125 to 1132.8717041015625 19:23:00.014 [INFO ] [.eclipse.smarthome.model.script.TEST] - sdm220_hourcounter_day = 0.515869140625 19:23:00.015 [INFO ] [.eclipse.smarthome.model.script.TEST] - sdm220_daycounter = 10.8769531250
рдпрд╛ рдЖрдк рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
tail -f /var/log/openhab2/openhab.log 2017-04-18 19:17:45.587 [INFO ] [el.core.internal.ModelRepositoryImpl] - Refreshing model 'energy.rules' 2017-04-18 19:18:00.259 [INFO ] [.eclipse.smarthome.model.script.TEST] - sdm220_hourcounter_day = 0.571044921875 2017-04-18 19:18:00.272 [INFO ] [.eclipse.smarthome.model.script.TEST] - sdm220_daycounter = 10.8330078125 2017-04-18 19:19:00.015 [INFO ] [.eclipse.smarthome.model.script.TEST] - sdm220_daycounter = 10.83789062500 2017-04-18 19:19:00.025 [INFO ] [.eclipse.smarthome.model.script.TEST] - sdm220_hourcounter_day = 0.557861328125 2017-04-18 19:20:00.013 [INFO ] [.eclipse.smarthome.model.script.TEST] - sdm220_hourcounter_day = 0.55517578125 2017-04-18 19:20:00.024 [INFO ] [.eclipse.smarthome.model.script.TEST] - sdm220_daycounter = 10.859130859375
рдореИрдВ рдореБрдЦреНрдп рдмрд┐рдЬрд▓реА рдореАрдЯрд░ рдХреЛ рджреЛ-рдЯреИрд░рд┐рдл рдореАрдЯрд░ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ, рдЬрд┐рд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ 23:00 рд╕реЗ 07:00 рддрдХ рдХреА рд╕реАрдорд╛ рдореЗрдВ рдЦрдкрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдмрд┐рдЬрд▓реА рдХрд╛ рднреБрдЧрддрд╛рди 0.5 рдХреЗ рдЧреБрдгрд╛рдВрдХ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкреНрд░рднрд╛рд╡ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рджреЛ-рдЯреИрд░рд┐рдл рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдЖрдЗрдЯрдо рдФрд░ рдирд┐рдпрдореЛрдВ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рд╢рд░реНрддреЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдФрд░ рджрд┐рди рдФрд░ рд░рд╛рдд рдХреА рд░реАрдбрд┐рдВрдЧ рдХреЛ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рдЬреЛрдбрд╝рд╛ред рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдм рдХреБрдЫ рд╕реБрдВрджрд░ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЪрд╛рд░реНрдЯ рдкрд░ рдЕрдирд╛рдбрд╝реА рд▓рдЧ рд░рд╣рд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдЪрд╛рд░реНрдЯ рдиреЗ рдЕрдВрддрд┐рдо рджреЛ рдорд╛рдиреЛрдВ рдХреЛ рдПрдХ рд╕реАрдзреА рд░реЗрдЦрд╛ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдерд╛:

рдЕрдкрдиреА рдЦреВрдмрд╕реВрд░рддреА рдХреЗ рдЕрд╣рд╕рд╛рд╕ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рдкрд░реЗрд╢рд╛рди рд╣реЛрдирд╛ рдкрдбрд╝рд╛ред
рддреЛ, рджреЛ-рдЯреИрд░рд┐рдл рд▓реЗрдЦрд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рдирд┐рдпрдо рд▓рд┐рдкрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
rule "Energy by hour" when Time cron "0 0 * * * ?" then var hour = sdm220_actcounter.state as DecimalType - sdm220_actcounter.historicState(now.minusHours(1), "mysql":).state as DecimalType // if(now.getHourOfDay > 7 && now.getHourOfDay < 23) { logInfo("TEST","sdm220_hourcounter_day = "+hour) postUpdate(sdm220_hourcounter_day, hour) } else { // // primary key timestamp, if(now.getHourOfDay==7) { postUpdate(sdm220_hourcounter_night, hour) Thread::sleep(1000) postUpdate(sdm220_hourcounter_night, 0) Thread::sleep(1000) postUpdate(sdm220_hourcounter_day, 0) Thread::sleep(1000) postUpdate(sdm220_hourcounter_day, hour) } else if(now.getHourOfDay==23) { postUpdate(sdm220_hourcounter_day, hour) Thread::sleep(1000) postUpdate(sdm220_hourcounter_day,0) Thread::sleep(1000) postUpdate(sdm220_hourcounter_night, 0) Thread::sleep(1000) postUpdate(sdm220_hourcounter_night, hour) } else { postUpdate(sdm220_hourcounter_night, hour) } } postUpdate(sdm220_hourcounter, hour) end rule "Energy by day" when Time cron "0 0 0 * * ?" then var day = sdm220_actcounter.state as DecimalType - sdm220_actcounter.historicState(now.minusDays(1), "mysql":).state as DecimalType //night counter, 00:00..07:00 + 23:00..00:00 var day2 = sdm220_actcounter.historicState(now.minusHours(17),"mysql":).state as DecimalType - sdm220_actcounter.historicState(now.minusDays(1), "mysql":).state as DecimalType + sdm220_actcounter.state as DecimalType - sdm220_actcounter.historicState(now.minusHours(1),"mysql":).state as DecimalType //day counter, 07:00..23:00 var day1 = sdm220_actcounter.historicState(now.minusHours(1),"mysql":).state as DecimalType - sdm220_actcounter.historicState(now.minusHours(17),"mysql":).state as DecimalType logInfo("TEST","sdm220_daycounter_day = "+day1) logInfo("TEST","sdm220_daycounter_night = "+day2) logInfo("TEST","sdm220_daycounter = "+day) postUpdate(sdm220_daycounter, day) postUpdate(sdm220_daycounter_day, day1) postUpdate(sdm220_daycounter_night, day2) end
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрд╡рд╢реНрдпрдХ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝реЗрдВ:
Number sdm220_hourcounter_day (gSDM220) Number sdm220_hourcounter_night (gSDM220) Number sdm220_daycounter_day (gSDM220) Number sdm220_daycounter_night (gSDM220)
рдЕрдм рдкреНрд░рддрд┐ рдШрдВрдЯрд╛ рдФрд░ рджреИрдирд┐рдХ рдкреНрд░рд╡рд╛рд╣ рдЪрд╛рд░реНрдЯ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рд╢рд╛рдпрдж рдпрд╣реА рд╕рдм рд╣реИред рджреИрдирд┐рдХ рдФрд░ рд░рд╛рдд рдХреЗ рдЯреИрд░рд┐рдл рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐ рдорд╛рд╣ рдмрд┐рдЬрд▓реА рдФрд░ рдзрди рдХреА рдЦрдкрдд рдХреА рдЧрдгрдирд╛ рдФрд░ рдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рднреЗрдЬрдиреЗ рдХреЗ рд╕рд╛рде рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдкреАрдврд╝реА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рднреА рдпреЛрдЬрдирд╛ рд╣реИред