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

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

  1. МиШ

    МиШ Нуб

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

    ИгорьК Гуру

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

    Покурите сайт ОН по этим ключевым словам.
    А если хватит отваги - и в этой теме поищите решение, помнится оно здесь есть.
     
    Последнее редактирование: 21 сен 2018
  3. 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
     
  4. 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 нравится это.
  5. МиШ

    МиШ Нуб

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

    SergeiL Оракул Модератор

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

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

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

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

    svetozar161 Нерд

    Здравствуйте. Подскажите пожалуйста такой момент по работе с mqtt, нигде про это не нашел. Дано: брокер москито на дом.сервере, датчик температуры, ардуина. Датчик публикует топик на брокере
    ардуина подписывается на датчик и получает в порту температуру.
    Я ее вижу и она динамически меняется. Задача создать простой термостат. Что нужно делать с данными в сериале ардуина? Я так понимаю это просто тупо строка? Ее нужно парсить, создавать float и дальше писать в цикл термостата? Если это верно, можно ли привести пример парсинга. Спасибо.
     
  8. 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 и ИгорьК нравится это.
  9. Здравствуйте, господа.
    Для начала хотелось бы выразить благодарность всем, кто активно участвует в данной теме. Именно благодаря данной теме, многое получилось. Заныривал сюда, как в путеводитель.

    Однако, не все гладко. Появилась проблема, надеюсь, удастся найти решение:
    Были и есть работающие датчики температуры, влажности и давления. Вывод данных оформлен на OpenHab2. Сразу взялся за него, как за наиболее свежую версию. Передача данных идет по MQTT. Все работает больше полугода без сбоев. OH2 крутится на Малинке 3. Датчики висят на ESP8266. Попытался добавить новый датчик для одной из комнат. Скопировал Items от другого датчика, т.к. суть та же. Все файлы для OH2 подправил. Но, данные от датчика не приходят. Вернее так, данные идут, их я могу видеть в приложении для Chrome - MQTTLens, но отображения данных на странице OH2 нет. Однако, есть интересный момент. Если отправить малинку в Reboot, то после загрузки несколько первых данных успевают проскакивать. И потом обновление данных прекращается. Все это происходит только для вновь добавленного датчика. С остальными проблем нет-данные как шли, так и идут.
    Я уже MQTT сносил и ставил заново. Уже была проблема, что данные со всех датчиков не обновляются. Снес MQTT еще раз и снова установил. В итоге, со всех датчиков на странице OH2 данные есть, с нового данных нет. Но в вещаемом топике значения также обновляются.

    Куда копать?
     
  10. SergeiL

    SergeiL Оракул Модератор

    Проверить имя нового устройства в MQTT, оно должно быть уникальным, проверить, имя топиков.
    У меня много датчиков по mqtt сливают данные, проблем с количеством не было,
    Где то ошибка со скопированными данными.
    Как когда-то говорил мой начальник, хороший редактор, позволяющий копировать блоками - зло!
     
    Алексей В. нравится это.
  11. Подскажите с какой целью посылать уведомления? Чем не устраивает конфигурация error_log с syslog-ом? Отправляли бы в syslog на тот 192.168.1.93 что в скрипте, а там и анализировали.
     
  12. SergeiL

    SergeiL Оракул Модератор

    Мне кажется Вы не правильно понимаете о чем речь.
    Уведомления о появлении в файле строк о неправильном вводе пароля.
    Если появляется более 5 строк в час - есть повод задуматься :).
    Кто то вводит неправильный пароль.
     
    Последнее редактирование: 31 окт 2018
  13. Я точно не понимаю, зачем парсить лог nginx-а на малине, а не парсить его-же там куда должно отправляться уведомление.
    Поясню немножко, я использую различного рода оборудование, wifi-роутеры, модули esp8266, одноплатные компьютеры, объеденное в несколько сетей (по количеству wifi-роутеров). Есть в этом зоопарке один ПК с несколькими сетевыми интерфейсами, он работает в основном медиа сервером, чтоб не скучал логи со всех сетей на него заворачиваю.
    Если Вы используете wifi-роутер и в логах роутера видите, как кто-то пытается подобрать пароль к точке доступа.
    Логи отправлять на удаленный сервер по непонятным причинам не будете, а станете анализировать логи на роутере и отправлять уведомления?
     
    Последнее редактирование: 1 ноя 2018
  14. SergeiL

    SergeiL Оракул Модератор

    А что малина перегружена? Или это не ПК? Пускай парсит и уведомляет! :)
    Предложенный мной вариант прекрасно работает и меня полностью устраивает.
    Причем мне он кажется проще и надежней Вашей идеи, так как малина выполняет парсинг сама.
    Предложите свой варант, не на словах, как это может быть, а в коде - обсудим ;)
     
  15. Я понял, иными словами, просто это Вам так удобно.
    Несмотря на то, что логирование критических ошибок различными устройствами может выполняться на удаленном сервере, нет доверия к использованию системного лога, надежнее отправлять уведомления.
     
  16. SergeiL

    SergeiL Оракул Модератор

    А что такое удаленный сервер? Он обязательно должен быть?
    С адресом 192.168.1.93 - машинка на Атоме без вентиляторов с Win10 c Growl в том числе.
    А уведомление мгновенно приходит на телефон.
     
    Последнее редактирование: 1 ноя 2018
  17. Компьютер, не обязательно хардварный, может быть виртуальным, доступный из той сети, откуда предполагается отправлять логи. Для сбора логов с небольшого количества устройств, большой вычислительной мощности вообще не требуется.
    Возможно на телефоне (возможно смартфоне) установлено приложение для приема уведомлений. Для получения уведомлений использую обычную эл.почту. Отправляю малиной и приходит мгновенно :) Типа экономлю на лицензии Win10
     
  18. SergeiL

    SergeiL Оракул Модератор

    Не, почта - это то, что обрабатывается не в реальном времени. В день до 200 писем приходит, попробуй не пропусти, да и убраны на смартфоне звуковые уведомления о приходе почты. Почта и ночью приходит.

    Раньше жену сильно бесили уведомления в ночное время.

    Поэтому для уведомлений, используется специальное приложение на айфоне, Prowl, в которое сообщения с разных систем сыплются в реалтайме. Систем под контролем много, вот и автоматизируем уведомления о нештатных ситуациях по возможности.
    Сообщения уровня "Emergencies" пробивают режим не беспокоить, который стоит на ночные часы.

    Вот сейчас в отпуске, а сегодня днем пришло уведомление о превышении температуры в серверной в Московском офисе. Отказал кондиционер, а в офисе никто не в курсе. По телефону поднял людей, решили все быстро. ;)
     
  19. alp69

    alp69 Форумчанин

    Коллеги, помогите (подскажите как) обновить ОН с 1.8.3 до 1.9.
    В 1.8.3 нет pushsafer'a.
    Или подскажите какую строку в rules вписать, чтобы на известный токен/девайс уведомление через pushsafer отправить из ОН 1.8.3.
    Очень уж не хочется на ОН2 из-за этого переходить.
     
  20. Сейчас с малины отправил себе письмо, получил уведомление через 9 сек.
    Если крон у Вас на малине раз в час запускает скрипт, типа 3600 сек. курим и хотим после получить уведомление очень быстро.