OpenHAB – моніторінг напруги у мережі

Вимоги

  • Openhab на ubuntu
  • Back-UPS XS 1100CI (можна використовувати будь-який інший, але в мене саме такий)

Підготовка

Встановлення Apcupsd

Інструкцію можна знайти наприклад за цим посиланням.

Як результат ми повинні мати змогу запустити команду apcaccess, результат виводу котрої ми й будемо використовувати

pi@openhab:/etc/openhab2 $ apcaccess
APC      : 001,036,0868
DATE     : 2017-07-15 12:12:51 +0300
HOSTNAME : openhab
VERSION  : 3.14.12 (29 March 2014) debian
UPSNAME  : openhab
CABLE    : USB Cable
DRIVER   : USB UPS Driver
UPSMODE  : Stand Alone
STARTTIME: 2017-07-15 11:02:42 +0300
MODEL    : Back-UPS XS 1100CI
STATUS   : ONLINE
LINEV    : 236.0 Volts
LOADPCT  : 1.0 Percent
BCHARGE  : 100.0 Percent
TIMELEFT : 269.3 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME  : 0 Seconds
SENSE    : Medium
LOTRANS  : 155.0 Volts
HITRANS  : 280.0 Volts
ALARMDEL : No alarm
BATTV    : 27.2 Volts
LASTXFER : No transfers since turnon
NUMXFERS : 0
TONBATT  : 0 Seconds
CUMONBATT: 0 Seconds
XOFFBATT : N/A
SELFTEST : NO
STATFLAG : 0x05000008
SERIALNO : XBXXXXX0XXXX
BATTDATE : 2015-03-17
NOMINV   : 230 Volts
NOMBATTV : 24.0 Volts
NOMPOWER : 660 Watts
FIRMWARE : 920.T4 .I USB FW:T4
END APC  : 2017-07-15 12:12:51 +0300

 

Підготовка OpenHAB

Відкриємо панель конфігурування OpenHAB та встановимо

RegEx Transformation

Конфігурування OpenHAB

things

Створимо файл /etc/openhab2/things/system.things

Thing exec:command:apc [command="/sbin/apcaccess -p LINEV", transform="REGEX((\\d+.\\d+).*)", interval=5, timeout=1, autorun=true]

items

Створимо файл /etc/openhab2/items/system.items

String SYSTEM_APC_VOLTAGE "[%s]" (SYSTEM) {channel="exec:command:apc:output"}
Number SYSTEM_APC_VOLTAGE_DOUBLE "Напруга [%.1fВ]" <energy> (SYSTEM)

Item SYSTEM_APC_VOLTAGE_DOUBLE треба через те, що exec повертає строку, а нам треба число. Створимо правило для перетворення строки до числа

rules

Створимо файл /etc/openhab2/rules/system.rules

rule "Convert System APC voltage"
when
  Item SYSTEM_APC_VOLTAGE changed
then
   SYSTEM_APC_VOLTAGE_DOUBLE.postUpdate(SYSTEM_APC_VOLTAGE.state.toString)
end

persist

Створимо конфігурацію для зберігання напруги до бази даних. Додамо строку

        SYSTEM_APC_VOLTAGE_DOUBLE : strategy = everyMinute

у файл /etc/openhab2/persistence/jdbc.persist

sitemap

Створимо графік для відображення історічних даних

Додамо строку

Chart label="Voltage" item=SYSTEM_APC_VOLTAGE_DOUBLE period=12h refresh=300

у файл /etc/openhab2/sitemaps/house.sitemap

Як результат маємо такий графік:

 

 

 

Розумна хатинка – OpenHAB, зберігання історії

У цієї статті мова піде про те, як зберігати історичні дані та потім строїти графіки. Це дає змогу потім ці дані аналізувати. Наприклад кондиціонер, обігрівач, нагрівач води витрачає більше електроенергії коли увімкнений постійно чи тільки коли треба. Та інше.

Для зберігання даних будемо використовувати базу даних H2.

Встановлення бази даних

Завантажимо архів та розпакуємо у теку наприклад /opt/h2v3

Створимо теку для бази даних: /opt/h2/db

Для запуску створемо скріпт  /opt/h2v3/bin/start.sh

#!/bin/sh
cd /opt/h2v3/bin/
java -cp ./h2-1.3.175.jar org.h2.tools.Server -web -webPort 8081 -webAllowOthers -tcp -tcpPort 8082 -tcpAllowOthers -baseDir /opt/h2/db

Для запуску бази діних під час старту системи створимо файл /etc/systemd/system/h2.service

[Unit]
Description=H2 database
After=h2.target
Before=openhab2.service

[Service]
ExecStart=/opt/h2v3/bin/start.sh

[Install]
WantedBy=default.target

Увімкнемо цей сервіс під час старту системи за допомогою команди

sudo systemctl enable h2.service

Конфігурування OpenHAB для зберігання даних

Встановимо JDBC Persistence H2 addon

 

Додаємо шлях до бази даних у файл /etc/openhab2/services.jdbc.cfg

url=jdbc:h2:tcp://localhost:8082/openhab-db

Створимо конфігурацію для зберігання усіх значеннью Для цього створимо файл /etc/openhab2/persistence/jdbc.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
        BATHROOM*, ROOM1* : strategy = everyChange, everyMinute, everyDay, restoreOnStartup
}

Все. OpenHAB повинен створити усі таблиці та почати записувати данні:

 

Оновимо конфігурацію сайту (додамо графік):

sitemap house label="Мій дім" {
        Frame label="Дата" {
                Text item=Date
        }

        Frame label="Ванна" {
                Switch item=BATHROOM_BOILER_1
                Text item=BATHROOM_BOILER1_CURRENT_1
                Text item=BATHROOM_BOILER1_CURRENT
        }

        Frame label="History" {
                Chart label="Current" item=BATHROOM_BOILER1_CURRENT_1 period=12h refresh=300
        }
}

У результаті отримаємо таку сторінку