Розумна хатинка – 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
        }
}

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