Arduino, ESP8266 Lua, Raspberry Pi 2 && OpenHab. Умный дом: азы управления.

Тема в разделе "Глядите, что я сделал", создана пользователем ИгорьК, 12 май 2015.

  1. ИгорьК

    ИгорьК Гуру

    Полезная вещь, вынесу в заголовок.
     
  2. ИгорьК

    ИгорьК Гуру

    Сделал оглавление темы. После оглавления - ссылки на полезные посты в ней и можно не в ней. Предлагайте ссылки. Наведем порядок вместе!
     
    alp69 нравится это.
  3. ИгорьК

    ИгорьК Гуру

    23. Получаем данные о температуре в своем регионе.
    Вопрос актуален для жителей многоквартирных домов, поскольку термометр за окном чаще всего показывает не уличную температуру, а температуру стены дома, если он в тени, или то, как его жарит солнце, если он на солнечной стороне.

    Будем считать, что вы уже (пере)установили OpenHab через apt-get.
    1. Устанавливаем тем же способом аддоны, (или вручную):
    Код (Bash):
    apt-cache search openhab | grep weather
    # выдаст нам список из двух аддонов
    apt-get install openhab-addon-action-weather
    apt-get install openhab-addon-binding-weather
    2. Идем по адресу http://openweathermap.org/ , регистрируемся, на странице http://openweathermap.org/price жмем на кнопку "Get API Key And Start" в левой колонке и получаем ключ API.

    3. Идем в GoogleMaps и находим на карте свою деревню. Правая кнопка мыши => Что здесь? => Небольшое окошко внизу с координатами => Щелчок по координатам - получаем такую картинку:
    55635576.jpg

    Запоминаем координаты: 55.873288, 37.771497.

    4. Идем в openhab.cfg, находим раздел:
    Код (Bash):
    ############################## Weather Binding ##############################
    #
    # The apikey for the different weather providers, at least one must be specified
    # Note: Hamweather requires two apikeys: client_id=apikey, client_secret=apikey2
    #weather:apikey.ForecastIo=
    #weather:apikey.OpenWeatherMap=
    #weather:apikey.WorldWeatherOnline=
    #weather:apikey.Wunderground=
    #weather:apikey.Hamweather=
    #weather:apikey2.Hamweather=

    # location configuration, you can specify multiple locations
    #weather:location.<locationId1>.name=
    #weather:location.<locationId1>.latitude=   (not required for Yahoo)
    #weather:location.<locationId1>.longitude=  (not required for Yahoo)
    #weather:location.<locationId1>.woeid=      (required for Yahoo)
    #weather:location.<locationId1>.provider=
    #weather:location.<locationId1>.language=
    #weather:location.<locationId1>.updateInterval=

    #weather:location.<locationId2>.name=
    #weather:location.<locationId2>.latitude=   (not required for Yahoo)
    #weather:location.<locationId2>.longitude=  (not required for Yahoo)
    #weather:location.<locationId2>.woeid=      (required for Yahoo)
    #weather:location.<locationId2>.provider=
    #weather:location.<locationId2>.language=
    #weather:location.<locationId2>.updateInterval=
    Делаем его таким:

    Код (C++):
    ############################## Weather Binding ##############################
    #
    # The apikey for the different weather providers, at least one must be specified
    # Note: Hamweather requires two apikeys: client_id=apikey, client_secret=apikey2
    #weather:apikey.ForecastIo=
    weather:apikey.OpenWeatherMap=Здесь Вставляем ваш API ключ!
    #weather:apikey.WorldWeatherOnline=
    #weather:apikey.Wunderground=
    #weather:apikey.Hamweather=
    #weather:apikey2.Hamweather=

    # location configuration, you can specify multiple locations
    weather:location.myResidence.name=myResidence
    weather:location.myResidence.latitude=  55.873288
    weather:location.myResidence.longitude= 37.771497
    weather:location.myResidence.provider=OpenWeatherMap
    weather:location.myResidence.language=en
    weather:location.myResidence.updateInterval= 10
    5. Создаем item
    Код (Java):
    Number GetTemperature  "Дом [%.2f °C]" <temperature>  {weather="locationId=myResidence, type=temperature, property=current"}
    6. Помещаем в sitemap:
    47784784.jpg

    Источник: https://github.com/openhab/openhab/wiki/Weather-Binding
    Здесь же примеры добычи влажности и других данных.
    Код (Java):
    Number GetMosHumi "Влажность за окном [%d %%]" <weather_humidity> {weather="locationId=myResidence, type=atmosphere, property=humidity"}
    Number GetMosWind "Ветер за окном [%.2f m/s]"  <wind>  {weather="locationId=myResidence, type=wind, property=speed"}
    А вот как будем пересчитывать миллибары с мм. ртутного столба:
    Код (Java):
    rule "mb to mm.Hg"
    when
        Item GetMosPress changed or
        Item GetMosPress received update
    then
     
        var mb = (GetMosPress.state as DecimalType).doubleValue
        var mmHg = mb * 0.75
        postUpdate(GetMosPressHg, mmHg  )
    end
    Где итем GetMosPress - получает давление с сервера по указанному выше алгоритму, а итем GetMosPressHg - отражает его уже приведенным к привычному нам виду. Выглядят они так:

    Код (Java):
    Number GetMosPress "Давление за окном [%d mb]" <weather_baraometric_pressure_hg>  {weather="locationId=myResidence, type=atmosphere, property=pressure"}
    Number GetMosPressHg "Давление за окном [%.1f mm.Hg]" <weather_baraometric_pressure_hg>
     
    Последнее редактирование: 31 мар 2016
    alp69 и kmaximv нравится это.
  4. ИгорьК

    ИгорьК Гуру

    24. http-binding && RegEx на примере погоды Яндекса.
    В предыдущем топике мы забирали погоду с забугорного сервиса, но, по моему наблюдению, он врет, потому как, явно, продался кому-то злобному! Вот Яндекс - это круто! Наш скромный вклад в импортозамещение:
    7799.jpg
    1. Установим http биндинг:
    Код (C++):
    apt-cache search openhab | grep http
    apt-get install openhab-addon-binding-http
    2. Идем по адресу: https://pogoda.yandex.ru/static/cities.xml и находим свой ближайший город. Запоминаем его id. Я живу рядом с id=27612

    3. Идем по адресу http://export.yandex.ru/weather-ng/forecasts/27612.xml и убеждаемся в правильности выбора. Там должно быть много-много разных буков.

    4. Организуем следующие итемы:
    Код (C++):
    Number    YandexTemp    "Температура [%.1f °C]"    <temperature>    { http="<[http://export.yandex.ru/weather-ng/forecasts/27612.xml:30000:REGEX(.*?<fact>.*?<temperature.*>(.*?)</temperature>.*?</fact>.*?)]" }
    Number    YandexHumi    "Влажность [%s %%]"    <weather_humidity>    { http="<[http://export.yandex.ru/weather-ng/forecasts/27612.xml:120000:REGEX(.*?<humidity>(.*?)</humidity>.*)]" }
    Number    YandexWind    "Ветер [%.1f м/с]"    <wind>                { http="<[http://export.yandex.ru/weather-ng/forecasts/27612.xml:120000:REGEX(.*?<wind_speed>(.*?)</wind_speed>.*)]" }
    Number    YandexPress   "Давление [%d mm.Hg]"    <weather_baraometric_pressure_hg>    { http="<[http://export.yandex.ru/weather-ng/forecasts/27612.xml:120000:REGEX(.*?<pressure units=\"torr\">(.*?)</pressure>.*)]" }
    String    YandexType    "За окном [%s]"    { http="<[http://export.yandex.ru/weather-ng/forecasts/27612.xml:30000:REGEX(.*?<weather_type_ua>(.*?)</weather_type_ua>.*)]" }
    5. Помещаем их в sitemap простейшим образом:
    Код (C++):
    Text item=YandexTemp
    Text item=YandexHumi
    Text item=YandexWind
    Text item=YandexPress
    Text item=YandexType
    Наша программа импортозамещения выполнена!

    Для лиц, искренне переданных Ардуино IDE, есть небольшое пояснение. RegEx - это такой стандарт выдергивать информацию из любой кучи путем создания шаблонов. В нашем случае, это следующее выражение в itemах REGEX(.*?<fact>.*?<temperature.*>(.*?)</temperature>.*</fact>.*)
    В частности, оно значит забрать любую информацию: (.*?)
    которая находится между <fact> и </fact>,
    причем как до так и после вышеуказанных значений может быть все что угодно: .*?
    а сама информация должна быть еще и между <temperature.*> и </temperature>.
    Чтобы в этом лучше разобраться, ИМХО, следует ознакомится с соответствующим разделом книги Вахтуров В. - JavaScript. Освой на примерах - 2007. Там все кратко и понятно описано.
     
    Последнее редактирование: 31 мар 2016
    Securbond, alp69 и kmaximv нравится это.
  5. Securbond

    Securbond Гуру

    Состояние за окном на украинском ))))
    Вот еще два итема для яндекса
    Код (Java):
    Number    YandexTempNight    "t° Ночью [%.1f °C]"     <temperature>    { http="<[http://export.yandex.ru/weather-ng/forecasts/27612.xml:30000:REGEX(.*?<temperature.*? type=\"night\">(.*?)</temperature>.*)]" }
    Number    YandexTempTom    "t° Завтра [%.1f °C]"     <temperature>    { http="<[http://export.yandex.ru/weather-ng/forecasts/27612.xml:30000:REGEX(.*?<temperature.*? type=\"tomorrow\">(.*?)</temperature>.*)]" }
     
    Температура ночью и на следующий день.
    image.jpeg
     
    Последнее редактирование: 31 мар 2016
  6. Securbond

    Securbond Гуру

    Доброго всем времени суток..
    Мучает один вопрос, может подскажут бывалые Опенхабоводы.
    Отслеживаю работу OpenHab в консоли и постоянно вижу следующее-
    warn.PNG
    То ли какой то addon то ли какой то процесс в OpenHab, пытается что то поиметь от моего роутера и не может. Вопрос: Как выяснить что за процесс и как его прибить, что бы не захламлял консоль ненужной инфой.
     
  7. Securbond

    Securbond Гуру

    Сам нашел, эту бяку выдавал аддон - sonos
     
    ИгорьК нравится это.
  8. ИгорьК

    ИгорьК Гуру

    Как искали?
     
  9. Securbond

    Securbond Гуру

    Можно и на ТЫ...
    Искал так... скопировал строку из консоли и загнал в гугл. Потом выбрал то что относиться к OpenHab и нашел в англоязычных каракулях знакомые слова addon и sonos. А так как я не стал в этот раз устанавливать всю пачку аддонов, а поставил лишь некоторые... то найти необходимый не составило труда.
    P/S: И спасибо за Оглавление на первой странице. Искать информацию сало ГОРАЗДО легче!
     
    alp69 и netmaster нравится это.
  10. netmaster

    netmaster Гик

    Ставить то что не нужно и тратит на себя ресурсы? Правильно сделали, что ставите только то, что вам необходимо.

    Вот поэтому и
    это плохо т.к. ты не знаешь, что насовали в эту сборку - "добрые дяди".
     
  11. kmaximv

    kmaximv Гик

    Вы хотите сказать что официальный дистрибутив для малины (2016-03-18-raspbian-jessie-lite) - это плохо? Тогда что посоветуете на нее ставить? Не самому же собирать...
     
  12. netmaster

    netmaster Гик

    Вы выдернуть из моего поста кусок и у него от этого изменился смысл.

    Есть такой термин - "продакшен система" - почитайте я думаю, Вам будет интересно. Там один из постулатов - на системе ничего не должно быть лишнего.
     
  13. Securbond

    Securbond Гуру

    Проводил ревизию своего Ядиска. Наткнулся на иконки. Думаю для OpenHab много что сгодится.
    Забираете кому нужно - https://yadi.sk/d/CgS_tmN6qgE4f
     
    ИгорьК нравится это.
  14. alp69

    alp69 Форумчанин

    Что-то я делаю не так...
    Код (C++):
    root@raspberrypi:~# apt-cache search openhab | grep http
    root@raspberrypi:~# apt-get install openhab-addon-binding-http
    Чтение списков пакетов… Готово
    Построение дерева зависимостей
    Чтение информации о состоянии… Готово
    E: Не удалось найти пакет openhab-addon-binding-http
     
    В папке opemhab/addons присутствует файл org.openhab.binding.http-1.8.0.jar
     
  15. ИгорьК

    ИгорьК Гуру

    Все сказанное относится к тем, кто установил OpenHab через apt-get.
    Вам надо просто кинуть файл в папку аддонов. А если он там есть - вообще ничего не надо.
     
    alp69 нравится это.
  16. alp69

    alp69 Форумчанин

    В openhab.cfg нужно править раздел http-биндинга?
     
  17. ИгорьК

    ИгорьК Гуру

    Попробуйте без этого. Не помню точно а сейчас на планшете.
     
  18. Securbond

    Securbond Гуру

    Пользуюсь этим аддоном, в конфиге ничего не правил.
     
  19. Dump

    Dump Нуб

    Доброго времени суток. Кто может подсказать. На данный момент, установлен Ubuntu 15.04 , на ней openhab 1.8.2 и habmin. Habmin видит openhab, ну т.е. написано, что openhab online. Дополнительно установлен аддон для работы с последовательным портом. Собственно вопрос в том, есть ли у openhab-а консоль , логи, где это можно найти ?
     
  20. Dump

    Dump Нуб

    Я просто никак не могу разобраться, как теперь сделать итем, который бы получал и обрабатывал данные с dht11 . Он подключён к arduino. Arduino по USB к orangepi. Через терминал данные на порту получаю