Кстати, теперь можно протестировать и android приложение, тут самая последняя версия. У меня на планшете заработало сразу, единственный момент, надо указывать не полный url, а вида http(s)://server:port/ , выбор sitemap происходит в самом приложении, а если он один, то и запускается сразу. К сожалению, работает на android только начиная с версии 4.0.3.
Переходим к теме. Для того чтобы заиметь график температуры ее надо сначала сохранить.
Изучаем документацию по Persistence (сохранение состояния) и rrd4j. Процитирую слова разработчика: "As said above, I would recommend rrd4j", тем не менее OpenHAB поддерживает больше число мест сохранения данных (db4o, sql и др.), которые могут работать одновременно. Для начала нам нужен org.openhab.persistence.rrd4j-1.3.1.jar в папке addons.
Конфигурация.
Для редактирования конфигурации советуют использовать openHAB Designer, так как там есть проверка и автодополнение синтаксиса. Основная идея файла конфигурации, сообщить OpenHAB, какие данные и когда сохранять. Для для того, чтобы определить "когда" сохранять данные используют слово "strategies" в файле конфигурации. Синтаксис:
Strategies { <strategyname1> : "<cronexpression1>" <strategyname2> : "<cronexpression2>" ... default = <strategynamex>, <strategynamey> }
Следующие "стратегии" предварительно сконфигурированы, их можно не описывать, но можно прописать в default:
- everyChange: сохранять состояние при его изменении
- everyUpdate: сохранят состояние при его обновлении, даже если значение не изменилось
- restoreOnStartup: если состояние не определено при запуске, последнее сохраненное значение будет загружено и элемент будет проинициализирован им. Это очень удобно для всех "виртуальных" устройств, которые не имеют связи с реальным железом. (например "Presence").
Структура описания элементов для сохранения.
Items { <itemlist1> [-> "<alias1>"] : [strategy = <strategy1>, <strategy2>, ...] <itemlist2> [-> "<alias2>"] : [strategy = <strategyX>, <strategyY>, ...] ... }
где <itemlist> разделенный запятыми список следующих опций:
- * - эта линия должна применяться для всех элементов в системе. Пример:
// persist all items once a day and on every change and restore them from the db at startup
* : strategy = everyChange, everyDay, restoreOnStartup - <itemName> - одиночный элемент (его имя). Это может быть группа, но в таком случае сохранится только значение группы, не значения элементов.
- <groupName>* - все члены группы будут сохранены, но не сама группа. если стратегия не предоставлена, используется стратегия по умолчанию, описанная в первой в используемой секции. Как опция, может быть предоставлен псевдоним, если сервис сохранения требует специального имени (например таблица в БД и т.п.).
Ну что же попробуем сохранить температуру. Создадим группу. Назовем ее PersistTemp. Добавляем в Items:
Group PersistTemp (All) /* Indoor Temperatures */ Number Temperature_Hall "Температура [%.1f °C]" <temperature> (Hall, PersistTemp) { onewire="28.1A821E040000#temperature" }
Пишем rrd4j.persist (не забудьте про addons/org.openhab.persistence.rrd4j-1.3.1.jar ):
// persistence strategies have a name and a definition and are referred to in the "Items" section Strategies { // for rrd charts, we need a cron strategy everyMinute : "0 * * * * ?" } Items { // let's only store temperature values in rrd PersistTemp* : strategy = everyMinute, restoreOnStartup }
Обратите внимание, что крон тут не стандартный и начинается с секунд - подробнее здесь. Если все ок, смотрим директорию openHAB/etc/rrd4j/ . Там лежат файлы с данными.
Данные мы сохранили, а что делать с ними дальше? Изучаем демо, там есть график температуры.
Меняем sitemap. Группа в sitemap по умолчанию синхронизируется с элементами в группе в Items (довольно не очевидно и не очень понятно вначале, тем более в документации об этом не написано вроде). Теперь у нас группа в sitemap Hall будет состоять из Item и Chart, поэтому будет перезаписана правилами sitemap. В примере в демо такие "вручную описанные" блоки имеют вид "Text label="Widget Overview" icon="chart" {}". Но я оставил группу - и так работает, добавляем (пояснение по параметрам ниже):
Group item=Hall label="Зал" icon="office" { Frame { Text item=Temperature_Hall Chart item=Temperature_Hall period=D refresh=10000 Chart item=Temperature_Hall period=W refresh=10000 } }
Заходим и не работает график. Копируем url изображения и переходим на него в новой вкладке. Ошибка 500 Probable fatal error:No fonts found.
# apt-get install ttf-bitstream-vera ttf-dejavu ttf-liberation ttf-linux-libertine xfonts-terminus ttf-inconsolata # /etc/init.d/openhab restart
Кстати, напоминаю, у меня OpenHAB и 1-wire сеть, которые работают на cubietruck.
Небольшая информация по графикам. Параметры, которые можно передавать:
w: ширина, опция, по умолчанию 480 пикселей
h: высота, опция, по умолчанию 240
period: время по оси X. Значения могут быть h,4h,8h,12h,D,3D,W,2W,M,2M,4M,Y - параметр опциональный, по умолчанию "D", то есть за последние 24 часа.
items: разделенные запятыми элементы (items).
или
groups: разделенные запятыми группы.
Привет! А как Вы устанавливаете время для графиков? У меня оно сдвинуто к Гринвичу :-(
ОтветитьУдалить1.5 года прошло, уже многое поменялось наверное. Я сейчас не использую openhab - негде.
УдалитьЯ думаю, если у вас сдвинуто время к Гринвичу, то вам надо где-то выставить часовой пояс. Я так понимаю, openhab берет его из java функции TimeZone.getDefault(), которая в свою очередь это значение из системы.
Приветствую!
УдалитьА сеть 1-wire тоже "забросили"?
пока да :(
УдалитьЕсли вопрос простой, то может и смогу чем-нибудь помочь.
А в системе все нормально со временем :-(
ОтветитьУдалитьпопробуйте сделать файл:
Удалитьtimetest.java
public class TimeTest
{
public static void main(String[] args)
{
System.out.println(java.util.TimeZone.getDefault());
}
}
Потом
$javac timetest.java
$java TimeTest
Все это от пользователя под которым запускается openHAB
Спасибо!
ОтветитьУдалить... но графики теперь не знаю почему, без моего участия ушли от гринвича и пришли ... на час вперед :-) Без того, чем Вы помогли.
Ладно, разберемся. Спасибо!!!
Вопрос решился вот как: устанавливаем временную зону как в Москве (я живу в ней), но не московскую.
ОтветитьУдалитьАаа, наверное это летнее (или зимнее) время, неплохо бы наверное систему обновить, чтобы была Москва +3 всегда.
Удалить