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

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

  1. alp69

    alp69 Форумчанин

    Правильно сформулированный вопрос на 70-80% содержит в себе ответ на него.
     
  2. ИгорьК

    ИгорьК Гуру

    Все зависит от
    Это продвижение сайта такое креативное.
     
  3. ИгорьК

    ИгорьК Гуру

    Доделал:
    cellar10.jpg
    cellar11.jpg

    Код (Java):
    Group CellarN "Погреб" <pogreb>
    Group CellarNT "Температура" <pogreb> (CellarN)
    Group CellarNH "Влажность" <pogreb> (CellarN)

    String    cellarAll { mqtt="<[mosquitto:master433/state:state:default]" }
    String    cellarTIn    "Температура погреб [%s °C]"    <temperature> (CellarN, CellarNT)
    Number    cellarHIn    "Влажность погреб [%.1f %%]"    <weather_humidity> (CellarN, CellarNH )
    String    cellarTOut    "Температура на улице[%s °C]"    <temperature> (CellarN, CellarNT)
    String    cellarHOut    "Влажность на улице [%s %%]"    <weather_humidity> (CellarN, CellarNH )
    Switch    cellarFn        "Вентилятор"         (CellarN)
    String    cellarFanIcon  "Вентилятор [%s]" <fan> (CellarN)
    Switch    cellarWk        "Режим"             (CellarN) { mqtt=">[mosquitto:master433/command:command:on:MAP(cellar.map)],>[mosquitto:master433/command:command:off:MAP(cellar.map)]" }
    Switch    cellarFF        "Принудительно"        (CellarN) { mqtt=">[mosquitto:master433/command:command:on:MAP(cellarfaf.map)],>[mosquitto:master433/command:command:off:MAP(cellarfaf.map)]" }
    String    cellarTt        "Цель [%s °C]"    <temperature> (CellarN) { mqtt=">[mosquitto:master433/command:command:*:default]" }
    Number    cellarSetTg        "Целевая Температура %d"
    Код (Java):
    Group item=CellarN label="Погреб" {
        Text item=cellarTIn label="Температура в погребе [%s °C]" {
            Frame  {
                Chart item=cellarTIn period=D
                Chart item=CellarNT period=D
            }        
        }
        Text item=cellarHIn label="Влажность в погребе [%s %%]" {
            Frame  {
                Chart item=cellarHIn period=D
                Chart item=CellarNH period=D
            }        
        }
        Text item=cellarTOut label="Температура на улице [%s °C]" {
            Frame  {
                Chart item=cellarTOut period=D
                Chart item=CellarNT period=D
            }        
        }
        Text item=cellarHOut label="Влажность на улице [%s %%]" {
            Frame  {
                Chart item=cellarHOut period=D
                Chart item=CellarNH period=D
            }        
        }
        Text item=cellarFanIcon
        Switch item=cellarWk icon="yes_no"
        Switch item=cellarFF icon="yes_no"
        Setpoint item=cellarSetTg label="Цель [%d °C]" icon="target" minValue=0 maxValue=9 step=1
    }
    Код (Java):

    rule "Mqtt Cellar Decript"
      when
        Item cellarAll received update
      then
        var String json = (cellarAll.state as StringType).toString
        // {"unt":"cel","mod":"ON","fan":"OFF","faF":"OFF","tg":2,"tIn":11.1,"hIn":100.3,"tOt":12.8,"hOt":63.6}

        var String unit = transform("JSONPATH", "$.unt", json)
        if (unit == "cel") {
            //  var String lat  = transform("JSONPATH", "$.lat", json)

            var String tIn = transform("JSONPATH", "$.tIn", json)
            var String hIn = transform("JSONPATH", "$.hIn", json)
            var String tOt = transform("JSONPATH", "$.tOt", json)
            var String hOt = transform("JSONPATH", "$.hOt", json)
            var String fn = transform("JSONPATH", "$.fan", json)
            var String fnON = "Включен"
            var String fnOFF = "Выключен"
            var String wk = transform("JSONPATH", "$.mod", json)
            var String ff = transform("JSONPATH", "$.faF", json)
            var String tg = transform("JSONPATH", "$.tg", json)

     
            postUpdate(cellarWk,wk)

            postUpdate(cellarFn,fn)
            // postUpdate(cellarFanIcon,fn)

            if(fn == "ON") {
                postUpdate(cellarFanIcon,fnON)
            }
            if(fn == "OFF") {
                postUpdate(cellarFanIcon,fnOFF)
            }


            postUpdate(cellarFF,ff)
            postUpdate(cellarTt,tg)
            postUpdate(cellarTIn,tIn)
            postUpdate(cellarHIn,hIn)
            postUpdate(cellarTOut,tOt)
            postUpdate(cellarHOut,hOt)
            postUpdate(cellarSetTg,tg)
        }
    end

    rule "Set Cellar Targer Temperature"

    when
            Item cellarSetTg changed
    then
            if (timerSetCellarTg != null)
              timerSetCellarTg.cancel()
              timerSetCellarTg = createTimer(now.plusSeconds(2)) [|
              {
                var String setTg = '{"cel":1,"tg":'
                setTg = setTg + cellarSetTg.state.toString + '}'
                sendCommand(cellarTt, setTg)
                postUpdate(cellarTt, cellarSetTg.state.toString)
              }
            ]
    end

    Иконки:
     

    Вложения:

    • OpenHab.zip
      Размер файла:
      115,3 КБ
      Просмотров:
      389
    Последнее редактирование: 13 окт 2016
    chibis, alp69 и Securbond нравится это.
  4. alp69

    alp69 Форумчанин

    Прикольно выглядит на скриншоте "Дача 1...." . Сколько их у Вас? :D:D:D:D
    А вообще здорово! :)
     
    ИгорьК нравится это.
  5. ИгорьК

    ИгорьК Гуру

    Хотелось бы больше :)
    Но там просто отражается температура - видна первая цифра :)
    Температура один с чем то градус. А температура, которую измеряет это устройство - 3 градуса. Различие объясняется тем, что забор воздуха идет с веранды, что выходит на юг.
     
    alp69 нравится это.
  6. chibis

    chibis Нерд

    ИгорьК, не расскажите по подробнее. Как осуществляете удаленное питание ардуины, esp на даче? Какие блоки питания используете?
    Что-то как-то не очень мне нынешние блоки питания 5V/2А китайские оставлять без присмотра на 24/7

    Мой промежуточный скромный результат. Двигаюсь к исполнении своей цели
    [​IMG]
     
    Securbond и ИгорьК нравится это.
  7. ИгорьК

    ИгорьК Гуру

    Использую для 3 вольт http://www.chipdip.ru/product/scv0031-3.3v-0.6a/ вместе с продаваемыми 5-вольтовыми зарядками для сотовых телефонов. А для Ардуино - 12 вольтовые блоки питания для светодиодных лент разных размеров в зависимости от задач. В основном от Feron.
     
    chibis нравится это.
  8. chibis

    chibis Нерд

    Спасибо за ответ
    Какие-то конкретные марки и модели или какие попадутся?
     
  9. ИгорьК

    ИгорьК Гуру

    Какие попадутся. Но стараюсь не на рынке а у сотовых операторов.
     
    chibis нравится это.
  10. chibis

    chibis Нерд

    Подскажите, как сделать графики. Температуры, влажности, давления.
    Хотелось бы в идеале хранение данных за сутки, неделю, месяц. В идеале и еще хранение данных в БД для экспорта данных в эксель.
    Но для начала бы хотя бы разобраться с построением графиков на одном примере, например температуры.
    Честно очень запутался с этими правилами.

    На текший момент у меня так:
    items:
    Код (Text):

    Number  grtemp  "Температура [%.1f °C]"  <sun_clouds>  { mqtt="<[mosquitto:/GR/dsw1:state:default]" }
    Number  grbar  "Давление [%.2f мм]"  <barometer>  { mqtt="<[mosquitto:/GR/bmep:state:default]" }
    Number  grhum  "Влажность [%.1f %%]"  <weatherhum>  { mqtt="<[mosquitto:/GR/bmeh:state:default]" }
    sitemaps:

    Код (Text):
    Frame label="Дома"  {
      Text item=grtemp
      Text item=grbar
      Text item=grhum
      }
    Буду очень благодарен
     
  11. alp69

    alp69 Форумчанин

    Вставьте в sitemap элемент типа switch.
    Назначьте ему итем, ответственный за периоды отображения (в примере "climat_period").
    Вставьте в sitemap три (для данного примера) элемента типа chart.
    Назначьте им итем, ответственный за температуру (в примере имя итема "climat").
    Код (C++):
    {
    Switch item=climat_period mappings=[0="час", 1="день", 2="неделя"]                    
    Chart item=climat period=h visibility=[climat_period==0, climat_period==Uninitialized]                    
    Chart item=climat period=d visibility=[climat_period==1]                    
    Chart item=climat period=W visibility=[climat_period==2]                    
                        }        
     
    Последнее редактирование: 29 окт 2016
    chibis и ИгорьК нравится это.
  12. kmaximv

    kmaximv Гик

    Может кому пригодится, если используете rdd4j persistence, можно вывести график таким образом:
    Код (Text):
    http://192.168.2.144:8080/rrdchart.png?items=pzemCurrent_PzemFull,pzemPower_PzemFull&period=8h&w=1750&h=1000
    Прописываем IP своего OpenHab
    items= Подставляем свои итемы, по которым нужно нарисовать график
    period= Могут быть значения h,4h,8h,12h,D,3D,W,2W,M,2M,4M,Y
    w= Ширина графика
    h= Высота графика

    Вот что у меня получилось:
    Выделение_005.png
     
    chibis, alp69, big_alex и ещё 1-му нравится это.
  13. chibis

    chibis Нерд

    Разобрался спасибо.

    У меня не работало, как и говорил из-за правила. Добавил и все заработало. А можно как-то убрать частое обновления картинки графика в браузере? Параметр refresh увеличивал до 5-10 мин. Все ровно обновляется через считанные секунды
    Правило rrd4j.persist:
    Код (Text):
      grtemp : strategy = everyChange, everyMinute
      grbar : strategy = everyChange, everyMinute
      grhum : strategy = everyChange, everyMinute
    Вопрос знатокам. А кто-нибудь настраивал доступ из сети по домену в самой малине?
    У меня есть домен + статический IP.
    Да, понятно можно на роутере настроить доступ и он настроен по IP, но интересен доступ по домену самой малины
     

    Вложения:

    • rrdchart.png
      rrdchart.png
      Размер файла:
      59,3 КБ
      Просмотров:
      580
  14. alp69

    alp69 Форумчанин

    Пробрасываете на роутере 22 порт и подключаетесь по SSH. Получаете доступ к файловой системе и к консоли.
    А для доступа к OH пробросьте порт 8080 (в примере 12345):
    Код (C++):
    http://ваш_домен:12345/openhab.app?sitemap=ваш_сайтмэп#
     
    Последнее редактирование: 30 окт 2016
  15. chibis

    chibis Нерд

    Повторяю еще раз.
    Доступ по IPшнику давно сделан и пробросаны порты. И малина доступна по IP из интернета.
    Меня же интересует настройка доступа по домену.
    Допустим у меня есть домен test.ru. Какие настройки еще необходимо произвести, чтобы openhab отрывался при открытии домена?
     
  16. alp69

    alp69 Форумчанин

    У вас частота обновления через everyChange (при каждом изменении) привязана к частоте поступления данных от оконечного устройства. То есть как только поступают какие-то данные, происходит обновление.
    А также everyMinute (каждую минуту).
     
  17. alp69

    alp69 Форумчанин

    Так в примере я и написал Вам пример строки "http://ваш_домен....."
    Или Вас интересует как назначить доменное имя IP-адресу?
    Не совсем понятен вопрос.
     
  18. chibis

    chibis Нерд

    Не подскажите как правило прописать, чтобы обновление допустим было каждые 5 мин?

    Это как раз легко. В DNS редакторе домена прописывается IP и все.

    Не понятно, куда в openhab прописывать домен, чтобы openhab открывался в локальной сети без интернета, а также из интернета по домену.
     
  19. alp69

    alp69 Форумчанин

    1. В оконечном устройстве измените частоту публикации данных. Установите everyChange. Уберите everyMinute.
    2. В ОН ничего не надо прописывать. Заходите через интернет. При входе из локалки роутер сам перенаправит запрос по кратчайшему пути. Вместо ip указывайте доменное имя.
     
    chibis нравится это.
  20. chibis

    chibis Нерд

    alp69, понял. Буду пробовать

    Может кому-нибудь пригодится хотя конечно же в теме пост потеряется ..
    Отключали электроэнергию. Гугл лично мне ничего вразумительного не дал. Проверьте питание, проверьте флешку. Без деталей и подробностей.
    И малинка не запускалась. Подключил к экрану. Требовал ввести логин и пароль. Вбиваю данные - не заходит. При старте списке в проверок у пункта LSB что-то там, писал ошибку. Гугл на это ничего не говорит. С 3-4 раза запустилась. Обновил пакеты
    Код (Text):
    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get autoremove
    sudo reboot
    Ошибка при старте вроде пропала..
    Но SSH упорно не хотел работать. Не могу подключиться к малинке с другого компа. Честно уже смирился с тем, что придется все по новой ставить, но вроде решил проблему:
    Код (Text):
    sudo update-rc.d ssh defaults
    sudo update-rc.d ssh enable
     
    И SSH заработал..
     
    Последнее редактирование: 1 ноя 2016
    Securbond, alp69 и ИгорьК нравится это.