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

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

  1. ИгорьК

    ИгорьК Гуру

    А я отказался от этой привычки уже год как. И сделал шаблон, где собрано в одно место три действа сразу, включая проверку wifi. Так код компактнее получился.
     
  2. Celtis

    Celtis Нуб

    Если не затруднит, ткните носом в Ваш шаблон, пожалуйста.
    Впервые сегодня сюда забрел, еще не освоился.
     
  3. ИгорьК

    ИгорьК Гуру

  4. Celtis

    Celtis Нуб

    Благодарю!
     
  5. dimm71

    dimm71 Нерд

    Возник ещё вопрос. Собрал сегодня некую тестовую поделку для включения лампочки. Запитал модуль ESP-01 от блока питания на 3,3В, на GPIO2 повесил твердотельную релюху OMRON ну и соответственно подключил лампочку. Так вот, при подключении провода от GPIO2 к релюхе, модуль не стартует - горит красный и синий светодиод. Стоит отключить провод идущий от GPIO2 к релюхи модуль стартует. После этого подключаю снова релюху (уже при загруженной ESPшке) и всё работает как надо. Может кто сталкивался с подобной проблемой? Или может есть какие то нюансы при подключении?
     
  6. ИгорьК

    ИгорьК Гуру

  7. dimm71

    dimm71 Нерд

    Спасибо. Понял. А есть у Вас фото того переходника сверху, не понял пока как такой соорудить.
     
  8. dimm71

    dimm71 Нерд

    На одном из форумов было предложено подключить по следующей схеме. И это заработало. Только нужно инвертировать кнопки в коде
    ESP8266 Extension chrod.png

    Сначала был подключен на реле минус, а GPIO2 на плюс - не заработало.
     
    Последнее редактирование: 21 ноя 2016
  9. dimm71

    dimm71 Нерд

    В общем ещё один прогресс... Теперь управлять ногами GPIO можно через веб интерфейс. В итоге железка теперь умеет:
    1. Настраивается соединение с WiFi сетью через веб интерфейс
    2. "Дергать" ногами так же через веб интерфейс. (код не мой взято отсюда http://cxem.net/arduino/arduino175.php)
    Чтобы не городить огород и сильно не разбираться в созданном я разнес управление по разным портам. На 80 порту - настраивается Интернет. На 8080 порту - дергаем ногами.
    init.lua
    Код (C++):
    wifi.setmode(wifi.STATIONAP)
    wifi.ap.config({ssid="MyPersonalSSID", pwd="*************"})
    enduser_setup.manual(true)
    enduser_setup.start(
      function()
        print("Connected to wifi as:" .. wifi.sta.getip())
      end,
      function(err, str)
        print("enduser_setup: Err #" .. err .. ": " .. str)
      end
    );

    led1 = 3
    led2 = 4
    gpio.mode(led1,gpio.OUTPUT)
    gpio.mode(led2,gpio.OUTPUT)
    restart=0;

    gpio.write(led1,gpio.LOW);
    gpio.write(led2,gpio.LOW);


    t=0
    tmr.alarm(0,1000, 1, function() t=t+1 if t>999 then t=0 end end)

    srv=net.createServer(net.TCP, 1000)
    srv:listen(8080,function(conn)
        conn:on("receive",function(client,request)

                local buf = "";
            local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP");
            if(method == nil)then
                _, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP");
            end
            local _GET = {}
            if (vars ~= nil)then
                for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do
                    _GET[k] = v
                end
            end

        conn:send('HTTP/1.1 200 OK\r\nConnection: keep-alive\r\nCache-Control: private, no-store\r\n\r\n\
      <!DOCTYPE HTML>\
      <html><body bgcolor="#6699ff"><h1>&nbsp;</h1>\
    <h1 style="text-align: center;">ESP8266 ESP-01</h1>\
    <p>&nbsp;</p>\
    <p align="center">Channel 1 (gpio0): &nbsp; <a href=\"?pin=ON1\"><button style=\"background: #B0CE3A; color: White; border-radius: 50px; font-size: 15px;\"> On</button></a>&nbsp;<a href=\"?pin=OFF1\">\
    <button style=\"background: #ff3300; color: White; border-radius: 50px; font-size: 15px;\"> Off</button></a></p>\
    <p align="center">Channel 2 (gpio2): &nbsp; <a href=\"?pin=ON2\"><button style=\"background: #B0CE3A; color: White; border-radius: 50px; font-size: 15px;\"> On</button></a>&nbsp;<a href=\"?pin=OFF2\">\
    <button style=\"background: #ff3300; color: White; border-radius: 50px; font-size: 15px;\"> Off</button></a></p>\
    <p align="center">Pole peremennoj:&nbsp;<input maxlength="4" name="v" size="4" style="background: #cccccc" type="text"value="'
    ..t..'"></p>\
    <p align="center">&nbsp;</p>\
    <p align="center">&nbsp;</p>\
    <hr>\
    <address style="text-align: center;">Gauss</address></body></html>'
    )

            local _on,_off = "",""
            if(_GET.pin == "ON1")then
                  gpio.write(led1,gpio.HIGH);
            elseif(_GET.pin == "OFF1")then
                  gpio.write(led1,gpio.LOW);
            elseif(_GET.pin == "ON2")then
                  gpio.write(led2,gpio.HIGH);
            elseif(_GET.pin == "OFF2")then
                  gpio.write(led2,gpio.LOW);
            end
           
     
                 
        conn:on("sent",function(conn) conn:close() end)
        collectgarbage();

       
        end)
       
    end)



    do
    FileToExecute="thermoHab.lua"
    l = file.list()
    for k,v in pairs(l) do
      if k == FileToExecute then
        print("*** You have got 20 sec to stop timer 0 ***")
        print("*******    Execute: tmr.stop(0)    *******")
        tmr.alarm(0, 20000, 0, function()
          print("Executing ".. FileToExecute)
          dofile(FileToExecute)
        end)
      end
    end
    end
    thermoHab.lua - то же
     
  10. alp69

    alp69 Форумчанин

    Setpoint только у меня криво работает или это фишка такая? Если ему принудительно не присвоить первоначальное значение, то он выводит прочерки и не реагирует на нажатия стрелок вверх-вниз. ОН 1.8.3 установлен через apt-get.
     
  11. ИгорьК

    ИгорьК Гуру

    Да. так. его надо инициализировать.
     
    alp69 нравится это.
  12. alp69

    alp69 Форумчанин

    Только заданием значения? Или есть команда инициализации?
     
  13. ИгорьК

    ИгорьК Гуру

    Правило: Когда старт если итем не инициализирован...
     
  14. SergeiL

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

    А ни кто не сделал резервный канал оповещения и управления OpenHAB через SMS?

    Тема, в этой ветке, поднималась, но про решения, информации я так и не нашел.

    К чему вопрос:
    Хочу на даче, часть функций (пока, мониторинг и управление температурой, часть оповещений) перенести с СМС сигнализации, на OpenHAB. Причина – не очень удобно контролировать и управлять по СМС, отсутствие графиков.

    Raspberry c OpenHAB дома обновил до третьего, второй планирую перенести на дачу, и включить в режиме бриджа по mqtt на домашний.

    Соответственно, на случай падения интернет канала, неплохо было бы иметь возможность получать уведомления по СМС (а не только Push, как сейчас) и хорошо было бы иметь возможность управления устройствами, подключенными к OpenHAB, через отправку с телефона СМС с командами на включение/выключение, установку температуры.

    Тему изучаю давно, идеи решений, в принципе, есть.
    Пока смотрю на два варианта:
    1) GSM модем в Raspberry + gnokii
    2) Отдельный контроллер с GSM модемом, связь с Raspberry по последовательному порту.

    Если кто-то уже сделал что то подобное, плиз, поделитесь своим опытом.
     
  15. alp69

    alp69 Форумчанин

    Так и делаю. Вопрос о том, чем инициализировать, а не как. Я это делаю, присваивая значение. Допустим, "0". Но есть ли в синтаксисе отдельная команда инициализации?
     
  16. ИгорьК

    ИгорьК Гуру

    Не встречал.
     
  17. ИгорьК

    ИгорьК Гуру

    ИМХО, (кое-кому известна моя позиия) каждое устройство должно работать самостоятельно, и лишь оповещать о своем состоянии в случае ЧП. Из этого следуют некоторые вещи.
    Глобально: значение поддержания канала связи в этом случае снижается.
    Связи (Интернет) может не быть по двум причинам:
    • зависло свое оборудование
    • провайдер балуется.
    С зависами своего оборудования я борюсь так: http://forum.amperka.ru/threads/esp8266-Автоматическая-перезагрузка-роутера-Бюджетный-вариант.4875/
    На мой взгляд, получается очень хорошо.
    С провайдером ничего не поделаешь. Но и бывает это нечасто. Хотя бывает.
    Если говорить о резервном канале оповещения, то он уже есть в виде сигнализации. О чем оповещает сигнализация? О проникновении, о дыме (но это уже поздно... :) ), о протечке, и о падении температуры.
    Так зачем нужен еще канал?
    P.S. Управление чем-то издалека через интетнет ли, через СМС - это не решение автоматизации, это электрификация ручного управления.
     
  18. dimm71

    dimm71 Нерд

    Пока не понял как правильно вставить несколько файлов в init.lua
    Код (C++):
    do
    FileToExecute="thermoHab.lua"
    l = file.list()
    for k,v in pairs(l) do
      if k == FileToExecute then
        print("*** You have got 20 sec to stop timer 0 ***")
        print("*******    Execute: tmr.stop(0)    *******")
        tmr.alarm(0, 20000, 0, function()
          print("Executing ".. FileToExecute)
          dofile(FileToExecute)
        end)
      end
    end
    end
    Как правильно вставить в код ещё несколько файлов для загрузки html.lua, wifi.lua и пр?
     
  19. ИгорьК

    ИгорьК Гуру

    Загрузки куда и для чего? Этот код не загружает файл, а начинает его исполнять "dofile(FileToExecute)". Вы хотите исполнять два файла, три - одновременно?

    Замечу, что я вряд ли объясню что-то лучше, чем: http://www.ozon.ru/context/detail/i...010000007502625833_&yclid=6968355119620688987
     
    alp69 нравится это.
  20. alp69

    alp69 Форумчанин

    dofile [имя файла]
    В Вашем листинге имя файла присваивается переменной:
    FileToExecute="thermoHab.lua"
    Далее он запускается однократно таймером tmr.alarm(0 - id таймера, 20000 - пуск через 20 сек., 0 - однократно...:
    dofile(FileToExecute)
    Ваши файлы Вы так же можете запустить из кода, содержащегося в файле thermoHab.lua таким же способом. По таймеру или нет - в зависимости от задачи.

    Вот только надо ли оно Вам? Делайте сниппеты и вставляйте в тело кода.