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

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

  1. ИгорьК

    ИгорьК Давно здесь

  2. МиШ

    МиШ Нуб

    Проблем в связке нету так как я с этого же модуля вывожу параметры температуры в openhab.
    Openhab2.jpg
    Openhab3.jpg
     
    Последнее редактирование: 21 сен 2018
  3. SergeiL

    SergeiL Гуру

    Вот если бы Вы проверили как я Вам написал:
    наверное увидели бы в чем проблема.

    Ваша ESP посылает 1 или 0.
    А OH ждет "ON" или "OFF"
     
  4. МиШ

    МиШ Нуб

    Mosquitto с паролем еще все это стоит на debian поэтому есть проблемки.
     
  5. МиШ

    МиШ Нуб

    ESPшка шлет логический уровень на порту.
     
  6. ИгорьК

    ИгорьК Давно здесь

    А нужно ON и OFF.
    Помнится, в ОН есть решение с названием transform и применением файлов с расширением map.

    Покурите сайт ОН по этим ключевым словам.
    А если хватит отваги - и в этой теме поищите решение, помнится оно здесь есть.
     
    Последнее редактирование: 21 сен 2018
  7. SergeiL

    SergeiL Гуру

    Код (Text):
    Switch office_panel "Panel" <heating> (grpOffice) {mqtt=">[mosquitto:office/switch1/command:command:ON:1],>[mosquitto:office/switch1/command:command:OFF:0],<[mosquitto:office/switch1/state:state:MAP(onoff.map)]"
    transform/onoff.map:

    0=OFF
    1=ON
     
  8. SergeiL

    SergeiL Гуру

    В связи с сегодняшним вопросом, на сайте community.openhab.org случайно наткнулся на очень интересный момент, который раньше не знал.
    Всегда удивляло, что при переключении выключателя в OH автоматически изменялся статус выключателя.

    Как выясняется это можно отключить.
    проверил разницу между этими двумя item ( autoupdate="false")
    Код (Text):
    Switch    Light_FF_Corridor2_Full            "Коридор 2 Полный"        (FF_Corridor1,Lights_R9)     { mqtt=">[mosquitto:/mh/r9/ESP_0C0503/P2:command:*:default],<[mosquitto:/mh/r9/ESP_0C0503/P21:state:default]"}
    Switch    Light_FF_Corridor2_Half            "Коридор 2 Ночной"        (FF_Corridor1,Lights_R9)     { mqtt=">[mosquitto:/mh/r9/ESP_0C0503/P1:command:*:default],<[mosquitto:/mh/r9/ESP_0C0503/P11:state:default]", autoupdate="false"}
     
    switch.png

    Устройство отключено от сети.
    Для первого айтема, при выключении выключателя статус изменился, хотя связи с ним не было.
    Для второго айтема состояние не изменилось.

    Но в ОН и в устройстве нужно делать два разных топика на управление устройством и получении его статуса.
    { mqtt=">[mosquitto:/mh/r9/ESP_0C0503/P1:command:*:default],<[mosquitto:/mh/r9/ESP_0C0503/P11:state:default]
    В принципе - это правильно!
     
    Egony нравится это.
  9. МиШ

    МиШ Нуб

    Благодарю. Все заработало после не которых правок и установки аддона Map Transformation. Иконки пока не удалось оптимальные подобрать. Openhab4.jpg
     
  10. SergeiL

    SergeiL Гуру

    Подправил прошивки на ESP-шках, теперь нормально работает отображение прохождения команды на устройство.

    В OH выключатель шлет команду по MQTT, статус в OH не меняется.
    ESP получает команду, переключает реле, отсылается новый статус по MQTT.
    ОН получает статус и сразу меняет его в выключателе, а если выключатель в другом состоянии, то и выключатель.

    В общем теперь видно, что сработало устройство, а не в OH переключился выключатель.

    С 2015-го использую OH и не знал про эту фишку, делал дополнительный айтемы с лампочкой, для ответственных выключателей. Полезно читать комьюнити!!! :)
     
    Egony и ИгорьК нравится это.
  11. svetozar161

    svetozar161 Нуб

    Здравствуйте. Подскажите пожалуйста такой момент по работе с mqtt, нигде про это не нашел. Дано: брокер москито на дом.сервере, датчик температуры, ардуина. Датчик публикует топик на брокере
    ардуина подписывается на датчик и получает в порту температуру.
    Я ее вижу и она динамически меняется. Задача создать простой термостат. Что нужно делать с данными в сериале ардуина? Я так понимаю это просто тупо строка? Ее нужно парсить, создавать float и дальше писать в цикл термостата? Если это верно, можно ли привести пример парсинга. Спасибо.
     
  12. SergeiL

    SergeiL Гуру

    Вчера в этой теме обсуждали как сделать оповещалку о подборе пароля, вопрос больше относится к OpenHAB и nginx, поэтому перейду сюда.

    В двух словах: доступ из интернета проброшен на WEB страницу OH через аутентификацию nginx.
    Все работает прекрасно, но хочется быть уверенным, что "кто-то" не нашел Вашу ВЕБ страницу (пускай она и на нестандартных портах) и не пытается подбирать пароли.
    Можно конечно периодически смотреть логи nginx, но как всегда про это забывается.

    В общем решил вчера тряхнуть стариной, вспомнить, и попробовать написать скрипт для автоматизации этого процесса.

    Задача: Проверять периодически файл ошибок /var/log/nginx/error.log, если в нем появляется новая строка включающая "/etc/nginx/.htpasswd" то считать эти строки.
    По завершению записывать в файл (определено в начале скрипта, у меня /opt/not/counter) номер строки, на которой остановился. В дальнейшем начинать проверять файл начиная с этой строки.
    Файл /var/log/nginx/error.log периодически закрывается, если количество строк в файле стало меньше последней запомненной строки - начинать сначала.
    Если количество новых, с последней проверки, строк с ошибкой пароля превышает установленное значение - посылаем уведомление через командную строку.

    У меня это Growl, каждый сможет поставить свое (хоть e-mail )

    Вызов скрипта запихиваем в cron, я поставил период проверки 1 час, порог более 3-х ошибок.
    Код (Bash):

    #!/bin/bash

    souce_file=/var/log/nginx/error.log
    counter_folder=/opt/not
    counter_file=/opt/not/counter
    dest_file=/opt/not/errors.log
    err_msg=/etc/nginx/.htpasswd

    let err_threshold=3

    if [[ -e  $souce_file ]] # если есть лог файл
    then
     
       if [[ !(-d  $counter_folder) ]]  # если не существует каталог
       then
         mkdir $counter_folder  # создадим каталог
       fi

       if [[ -e  $counter_file ]]  # проверим есть ли файл счетчика обработанных строк
       then
         let cnt_old="`cat $counter_file`"  
       else
         let cnt_old=0     # обнулим переменную
       fi

       let cnt_cur="`wc -l "$souce_file" | sed 's/[^0-9]//g'`"  # проверим сколько строк в лог файле

       echo "Numb prev = $cnt_old"          # выведем на экран загруженное значение строк
       echo "Numb cur  = $cnt_cur"          # выведем на текущее значение строк лог файла


       if [[ $cnt_cur -lt  $cnt_old ]]  # если сейчас строк меньше
       then
         echo "New log"            # считаем, что новый лог файл - работаем с 0
         let cnt_old=0
       else
         echo "Check log"          # файл старый, проверим его.
       fi

       let cnt_old+=1              # начем с новой непроверенной строки.

       sed -n $cnt_old',$p' "$souce_file" | grep "$err_msg" > "$dest_file"  # найдем все вхождения нужной фразы, начиная со следующей необработанной строки и эти строки отправим в файл назначения
       echo $cnt_cur > $counter_file            # запишем текущее количество в файле назначения

       let cnt_err="`wc -l "$dest_file" | sed 's/[^0-9]//g'`"      # проверим сколько строк в файле назначения

       echo "Numb New Error = $cnt_err"          #  выведем значение на экран для отладки

       if [[ $err_threshold  -lt  $cnt_err ]]          # Если значение больлше порогового
       then
         echo "More threshold ($cnt_err)"  # Выведем уведомление
         /usr/bin/python /opt/growl.py 192.168.1.93 "NGINX" "The maximum number of wrong password attempts ($cnt_err) exceeded"
       else
         echo "Less threshold"
       fi
    else
       echo "Error.log is absent"             # ошибка - нет лог файла.
    fi

     
    Вроде все корректно работает, лишние "echo" можно убрать, оставил для отладки.
    Блин, просидел с ним пол вечера, ничего уже не вспомнить, да и тогда когда, я с этим последний раз сталкивался, Bash-а еще не было.
     
    alp69, Egony и ИгорьК нравится это.