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

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

  1. alp69

    alp69 Форумчанин

    Вызов getConnect() перед tmr.alarm(6,90000,1,function(getConnect() все-таки по-моему лишнее. Она же запускается как при наличии связи, так и при отсутствии. И постоянно крутится. Так нужен ли он, таймер? Он же никогда не выполнит назначенную ему функцию. Может таймер с getConnect поставить под else при отсутствии связи? А вызов getConnect перед таймером вообще убрать?
     
    Последнее редактирование: 23 июн 2016
  2. alp69

    alp69 Форумчанин

    А я наконец-то нашел бистабильные реле. Код переписал, вылизываю. Надеюсь к концу июля протестировать и закончить устройство. А в августе смонтировать на объекте.
     
    Последнее редактирование: 23 июн 2016
  3. alp69

    alp69 Форумчанин

    Эх, компа под рукой нет... Заинтересовал Ваш шаблон.
     
  4. ИгорьК

    ИгорьК Гуру

    -- Нет wifi --
    Код (Lua):

    function connecting() -- (2) переход сюда
        publish = false -- (3) запрет на публикацию данных для других функций, здесь их нет
        function getConnect() -- (5) пошла функция
           if wifi.sta.status() == 5 and wifi.sta.getip() ~= nil then  --(6) проверяем условие, выходим, если нет wifi
                 m:connect(Broker, port, 0, 0,
                    function(conn)
                        tmr.stop(6)
                         publish = true
                        m:subscribe(myClient.."/#",0, function(conn)
                         end)
                end)
            end
        end
        getConnect() -- (4) вызов функции
        tmr.alarm(6, 90000, 1, function() -- (7) запускаем таймер
            getConnect() -- (8) вызываем (5), пока не появится wifi
        end)
    end

    m:on("offline", function(con)
        connecting()
    end)

    --[[
    Здесь ваш код!
    --]]

    connecting()  -- (1) этот вызов функции запускается первым
    ----------------------------------------------------------
    ----------------------------------------------------------
     
    -- Есть wifi --

    Код (Lua):

    function connecting() -- (2) переход сюда
        publish = false -- (3) запрет на публикацию данных для других функций, здесь их нет
        function getConnect() -- (5) пошла функция
           if wifi.sta.status() == 5 and wifi.sta.getip() ~= nil then  --(6) проверяем,  wifi есть
                 m:connect(Broker, port, 0, 0, -- (7) пошел вызов брокера, но это АСИНХРОННАЯ ФУНКЦИЯ
                    -- сразу управление передается наружу, а фнкция продолжает выполняться параллельно
                    function(conn) -- (9) Это CALLBACK функция, она вызывается только после успешного
                    -- соединения
                        tmr.stop(6) -- (10) Останавливаем таймер
                         publish = true -- (11) разрешаем публикации
                        m:subscribe(myClient.."/#",0, function(conn) -- (12) подписываемся на публикации сами
                         end)
                end)
            end
        end
        getConnect() -- (4) вызов функции
        tmr.alarm(6, 90000, 1, function() -- (8) запускаем таймер. На безуспешный поиск брокера уходит порядка 45-50 секунд
            -- поэтому чаще вызывать проверку не надо: каждые 90 секунд
            getConnect() -- (8.1) вызываем (5), пока не будет остановлен таймер
        end)
    end

    m:on("offline", function(con) -- (1(тоже номер один :-) )) Это callback функция и она работает сама по себе
        -- когда теряется связь с брокером, но первый раз сработает не раньше
        -- чем будет установлено первое соединение
        connecting()
    end)

    --[[
    Здесь ваш код!
    --]]

    connecting()  -- (1) этот вызов функции запускается первым
     
    Последнее редактирование: 24 июн 2016
  5. woow

    woow Гик

    Добрый день. Очень заинтриговал данный проект. Как с чего начать вроде инфы хватает. Имеется, от разных экспериментов, в наличии несколько ардуинок разного формата (micro, nano, uno, mega), датчиков разного назначения и малина RPi3. Внимание обратил на то что очень много внимания выделено и времени потрачено на связь. Использовалиcь и NRF24L01 и ESP8266. В планах по ка 3 без проводных датчика и приёмник т.э. 4 модуля связи. Посоветуйте какие покупать:
    1. nRF24L01
    2. nRF24L01-PA-LNA-ANT
    или с серии ESP8266 но тут их ещё больше разновидностей, они отличаются между собой во первых наружным исполнением, а как там духовном плане об этом совсем информации нет начиная с ESP-01 до ESP-15 (эти аж по 6$) они :
    3 . Антенна- с наружной, с вытравленной, с керамической, и вовсе без неё;
    4. Пины: шагом пинов от 1 до 2 мм (это конструктивные может быть неудобства);
    5. Количеством пинов и GPIO;
    6. с и без сертификации;
     
  6. ИгорьК

    ИгорьК Гуру

    Я не использую nRF вообще. Посмотрите мою же тему в разделе беспроводной связи об этих модулях. Они сильно проблемные.
    Что касается ESP, то самый распространенный ESP-1 - организация связи, работа с двумя цифровыми ногами.
    ESP-201 - удобные ноги.
    ESP-12 e - много памяти.
    Остальные приблизительно все одинаковые, ИМХО.
     
  7. alp69

    alp69 Форумчанин

    ... и ног.
     
  8. woow

    woow Гик

    спасибо, за ответ. Т.е. как бы всё ровно какой (учитывая объём использования) подключать ESP к телеку не собираюсь, количество ног и объём памяти, скорей всего и минимальный устроит, а вот без сертификацией нет проблем по разбросу частот и т.п.
     
  9. ИгорьК

    ИгорьК Гуру

    Чет не понял сути...
     
  10. woow

    woow Гик

    Я имел в виду, что в данном проекте хватает и памяти и ног минимального количества :) ( по крайней мере так думаю). Но у некоторых моделей есть пометка ESP-12 и ESP-12F FCC and CE approved, ESP-6,7,8 Not FCC approved. В описании других нет заметок по этому поводу. Может это как-то влиять на стабильность работы этих девайсов.
     
  11. ИгорьК

    ИгорьК Гуру

    Не сталкивался. У меня в работе 1, 201, и 3 модели. Проблем нет. Всего не менее 10 штук.
    ИМХО, очень стабильный модуль. Правда я его только на Lua программирую.
    На Ардуино IDE некоторые говорят о нестабильности но ... а говорит то кто - профессора?
     
    Последнее редактирование: 29 июн 2016
  12. alp69

    alp69 Форумчанин

    Из декларации производителя:
    Так что на лётных свойствах это вряд ли скажется.
     
  13. keeper

    keeper Нерд

    ребят подскажите как опенхабом принимать с одного слейва разные переменные coil и holdingregistr
    если в конфиге прописать

    Код (C++):
    modbus:poll=3000

    modbus:tcp.slave1.connection=192.168.0.19:502
    modbus:tcp.slave1.id=1
    modbus:tcp.slave1.start=0
    modbus:tcp.slave1.length=16
    modbus:tcp.slave1.type=holding
                                   
    то никаких проблем но добовление

    Код (C++):
    modbus:poll=3000

    modbus:tcp.slave1.connection=192.168.0.19:502
    modbus:tcp.slave1.id=1
    modbus:tcp.slave1.start=0
    modbus:tcp.slave1.length=16
    modbus:tcp.slave1.type=coil

     
    начинаются проблемы
     
  14. Benny_Ray

    Benny_Ray Нерд

    Добрый всем день!
    Ребята, кто нибудь прикручивал к OpenHAB голосовое управление? google или яндекс, или вообще хоть какую нибудь, интересен момент как настроить это все дело, т.е.
    1. настроить ожидание фразы
    2. настроить пересылку фразы гуглу или яндексу
    3. получение ответа
    4. использование его OpenHAB

    что смог найти почитал, но везде пишут что эта опция включена и работает по умолчанию, но чтото я не вижу где и как оно работает (((.
     
  15. Nerosis

    Nerosis Нуб

    Всем доброго времени!

    Я методом проб и ошибок таки завел openhab+mosquitto на raspberry 3.
    Завелось, работает, хорошо.
    В качестве тестовой железки взял по случаю Witty Cloud, как по мне так очень удобная железка для начинающего. есть сенсор света, есть rgb диод. На железку залита прошивка от wifi-iot, прошивка честно купленная.
    Создал в openhab тестовую конфигурацию, создал 3 кнопки для моргания диодом, по кнопке на каждый цвет.
    Все моргает, все переключается, все замечательно. Добился таки этого, можно сказать, потом и кровью...
    Но есть одно НО, которое не получается победить второй день... Если я включаю диод на самом модуле не по mqtt, а через браузер командой вида http://IP_ADRES/gpio?st=1&pin=12. mosquitto получает сообщение об изменении статуса, но в openhab состояние кнопки остается не изменным...
    Итем прописан так:
    Switch RED "Красный" { mqtt=">[mybroker:/ESP0018993A/output15:command:оn:1],>[mybroker:/ESP0018993A/output15:command:оff:0],<[mybroker:/ESP0018993A/output15:state:default]" }

    в openhab.cfg прописано только: mqtt:mybroker.url=tcp://localhost:1883

    Что я делаю не так?
    Заранее благодарен.
     
  16. ИгорьК

    ИгорьК Гуру

    Вам нужно взять MqttSpy и внимательно посмотреть, что же приходит из модуля.
    То что приходит, явно не совпадает вот с этим:
    Соответственно, следует поменять этот параметр. Как - будет видно из анализа информации. Заочно ответить невозможно.
    Хотя есть предположение. Оно заключается в том, что из модуля приходит информация типа "1" и "0", а ее надо преобразовать в ON и OFF.

    Не спешите с такими покупками - учитесь сами программировать. Это гибче получается.
     
  17. ИгорьК

    ИгорьК Гуру

    Если я прав - смотрите сюда.
     
  18. Nerosis

    Nerosis Нуб

    Безусловно параллельно учусь писать сам, но хотелось сначала посмотреть в живую, как это все работает.

    в /ESP0018993A/output15 падает 0 и 1 соответственно
    output15.png
     
  19. ИгорьК

    ИгорьК Гуру

    Код (Javascript):
    <[mybroker:/ESP0018993A/output15:state:MAP(switchMQTT.map)]"
    И файл switchMQTT.map кинуть как в посте написано.
     
    Последнее редактирование: 11 июл 2016
  20. Nerosis

    Nerosis Нуб

    Супер! то, что было необходимо!
    Заработало в таком виде <[mybroker:/ESP0018993A/output15:state:MAP(switchMQTT.map)] и соответственно файлик положил, как описано в посте
    Огромное спасибо!