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

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

  1. alp69

    alp69 Форумчанин

    Интересное предложение! Только как инициировать отправку смс, допустим, с того же мегафоновского роутера?
    Хотя это тоже сторонний сервис. Хочется чтобы все происходило в рамках опенхаба. Особенно с учетом того, что смс порой приходят с большой задержкой. Эх, добраться бы до компьютера поскорее...
     
  2. netmaster

    netmaster Гик

    Ну если Вы будете делать как планирую я (GSM USB свисток). То в linux у вас будет serial порт от этого девайса, ну а далее запись (может сам Опенхав (проверить надо), а может через скрипт ) в порт + AT команды и "он сказал поехали, и взмахнул рукой".

    А что мешает после посылки SMS, тыкнутся еще в Инет. Например: можно арендовать где-то хостинг и там что нибудь наколхозить.

    Ну не знаю, возможно Вам следует рассмотреть покупку провайдера... ;););) Тогда сервис точно будет вашим!
     
    alp69 нравится это.
  3. dimksum

    dimksum Нерд

    Посмотрите в сторону gnokii для usb модема. Сначала уведомления отправлял так, сейчас перешел на отправку sms через интернет
     
    netmaster нравится это.
  4. netmaster

    netmaster Гик

    Есть еще smstools, gammu и наверняка, что-то еще... Кстати, спасибо за мысль в нужном направлении.
     
  5. Sevic71

    Sevic71 Нерд

    Для передачи оповещений на Android eсть еще "проверенный на себе" вариант связки сервисов "pushing box" + "newtifry" (google подскажет детали). Гонял сообщения прямо с ESP8266 таким образом - форматированный http Get > pushing box, на нем уже настроены форварды куда надо, в частности в google tables для логгирования/статистики, и на newtifry если в сообщении есть тэг 'Alarm'. На телефоне был настроен text to speech, в итоге телефон просто произносил голосом текст сообщения. Работало, помню, надежно и очень быстро, латентность в пределах 20 секунд, или менее. Спящий режим пробивался 100%, но, кажется, я в настройках поднимал приоритет newtifry, что бы он в фоне не убивался. При наличии надежного интернета (самое слабое звено в этой цепи), этот комплект был ни чем не хуже СМС. Его тоже юзал в "доинтернетную" эпоху, кстати там тоже с надежностью не все так радужно. Вообще сейчас есть сервисы непосредственно Android push, думаю, надо взглянуть на них более пристально. Там даже newtifry будет не нужен и с фоном/сном проблем точно не будет.
     
    alp69 и ИгорьК нравится это.
  6. netmaster

    netmaster Гик

    Push оно конечно есть, но в GSM сетях голос более приоритетен чем дата. СМС можно получать и отправлять из таких мест, где мобильного интернета нет вообще. Ну, а для надежности можно сделать резервирование (я собсвенно так и сделал) через второго провайдера. Хотя надежность Push сильно хуже, чем просто СМС (обычная теория надежности).
    Выбор конечно за разработчиком, но я для себя построил СМС шлюз (работает более 9 месяцев). Push в планах есть тоже, но с самым низким приоритетом.
     
  7. Securbond

    Securbond Гуру

    Скажите, кто нибудь подключал ESP к удаленному брокеру ? Есть нюансы ?
    Почему то к локальному хорошо коннектится, а к удаленному не подключается.
    Попробовал перепрошить ESP. Не помогло.
    Дело точно не в сервере, рядом стоит Дуня с интернет шилдом, посылает данные исправно.
     
    Последнее редактирование: 19 мар 2016
  8. ИгорьК

    ИгорьК Гуру

    У меня сервер удаленный. На даче стоят конечные устройства а OpenHab и Mosquitto - дома.
    Все скрипты работают именно с удаленным сервером. Скрипты перед вами.
     
  9. Securbond

    Securbond Гуру

    Вот скрипт... может где то ошибка.. ?
    к WiFi подключён, проверял...
    Код (Javascript):
    Broker="xx.xxx.xx.xxx"
    port=1883
    myClient="EspClient"
    --name="ESPUART"
    --pass="password"
    sendmessage = false

    m = mqtt.Client( myClient, 200)
    m:lwt("test/device/esp01/", "By!", 0, 0)
    m:on("offline", function(con)
      print ("Mqtt Reconnecting.")
      tmr.stop(2)
      tmr.alarm(1, 120000, 1, function()
      print ("Try Reconnecting...")
      m:connect(Broker, port, 0, function(conn)
      print("Mqtt Connected to "..Broker)
      tmr.stop(1)
      tmr.start(2)
      end)
      end)
    end)

    uart.on("data","\n",  -- Функция обработки информаци из UART
      function(input)
      if wifi.sta.status() == 5 then
      print("Received from UART:", input) -- Закомментировать для рабочего варианта
      local topic -- Две локальные переменные для захвата информации
      local info
      -- Функция захвата. Захватываем только шаблоны типа "Цифры-двоеточие-цифры ( и необязательно)-точка-цифры"
      topic, info = string.match(input, "(%d+):(%d+%.?%d?%d?)")

      if topic ~= nil  then -- Только если прошел правильный захват. Иначе и topic и info будут nil
          if wifi.sta.status() == 5 and wifi.sta.getip() ~= nil and sendmessage == true then
           print("Publish Topic: "..topic.." and Info: "..info) -- Закомментировать для рабочего варианта
           m:publish("test/device/esp01/"..topic.."/state",info,0,0) -- Публикуем на брокер
          end
      end
      topic = nil -- Освобождаем и чистим память
      info = nil
      collectgarbage()
      end
      end, 0)
    m:on("message", function(conn, topic, data) -- Если пришли банные от брокера
      if (string.find(topic, "state")) == nil then -- И если это не подтверждение состояния, то есть в строке отсутствует "state"
      local top = string.gsub(topic, "test/device/esp01/","") -- Удаляем лишнюю часть информации
      print("To Arduino -> ") -- Закомментировать для рабочего варианта
      print(top..":"..data) -- Отправляем на Ардуино по UART
      end
      collectgarbage() -- Чистим память
    end)

    tmr.alarm(0, 1000, 1, function() -- Подписываемся на все топики, начинающиеся на "arduino/"
      if wifi.sta.status() == 5 and wifi.sta.getip() ~= nil then -- Если связь установлена
      tmr.stop(0) -- Останавливаем этот таймер, чтобы на повторять подписку
      m:connect(Broker, port, 0, function(conn)  -- Подписываемся
      print("connected") -- Закомментировать для рабочего варианта
      m:subscribe("test/device/esp01/#",0, function(conn)
      sendmessage = true

      end)
      end)
      end
    end)
     

    Вот что пишет в консоли
    Код (Javascript):
    SSL: true
        modules: adc,bit,dht,file,gpio,mqtt,net,node,ow,rtcmem,rtctime,spi,tmr,uart,wifi
    build     built on: 2016-03-19 18:22
    powered by Lua 5.1.4 on SDK 1.4.0
    *** You have got 30 sec to stop timer 0 ***
    *******    Execute: tmr.stop(5)     *******
    > Executing espUART.lua
    Mqtt Reconnecting.
    Try Reconnecting...
    Mqtt Reconnecting.
    Try Reconnecting...
    Mqtt Reconnecting.
    Try Reconnecting...
     
     
  10. Securbond

    Securbond Гуру

    И на улице то esp c чужой прошивкой исправно данные шлёт на тот же удаленный сервер...:confused:
     
  11. ИгорьК

    ИгорьК Гуру

    При заливке на модуль удалите все комментарии.
    И здесь тоже.
    Код завтра посмотрю. Сейчас планшет 7 дюймов. Может увижу может нет.
    Судя по логу, коннекта сразу нет, а программа пытается переконнектиться. Уже нужно править.
    Ну конечно нужно код править!
     
  12. alp69

    alp69 Форумчанин

    Брокер на статичном ip?
    У меня все работает. ESP находится в 200 км от брокера (от малины).
    На роутере пробросьте порт для доступа к малине и порт москита.
     
    Последнее редактирование: 20 мар 2016
  13. alp69

    alp69 Форумчанин

    По какому адресу коннектится? Локально - по внутреннему или внешнему ip.
    Удаленно - ТОЛЬКО по внешнему ip.
    У меня это выглядит broker=192.168.x.xxx (внутренний),
    а примерно так broker=xxxxxx.ddns.net.
     
    Последнее редактирование: 29 мар 2016
  14. Securbond

    Securbond Гуру

    Всё оказалось гораздо банальнее. На сервере стоял Москит версии 3.1 с которым Последние прошивки NodeMCU не работают. Поставил 3.1.1 и сразу все заработало. Как всегда спасибо Игорю Валентиновичу, Подсказал.
    Отсюда вывод - внимательно читайте инструкции))
    Кстати нашел русское описание API NodeMCU - https://github.com/nodemcu/nodemcu-firmware/wiki/nodemcu_api_ru
     
    Последнее редактирование: 20 мар 2016
  15. ИгорьК

    ИгорьК Гуру

    Нельзя. Очень старая версия. Только сюда: http://nodemcu.readthedocs.org/en/dev/
    За одно удивитесь количеству поддерживаемых решений.
     
    Securbond нравится это.
  16. Securbond

    Securbond Гуру

    С азами бы разобраться ))). Дуня с шилдом до сих пор подвисает... не могу причину найти. Уверен что мой косяк в скетче http://forum.amperka.ru/threads/ardino-w5100-mqtt-openhab.7749/
     
  17. ИгорьК

    ИгорьК Гуру

    Думаю, косяк в библиотеках.
    Что касается Вашего кода, то он вполне логичен:
    Код (C++):
    void callback(char* topic, byte* payload, unsigned int length) {
        payload[length] = '\0';

        if     (strTopic == "test/device/arduino01/rel1") {
            if (strPayload == "ON"){REL1 = 1;}
            else if (strPayload == "OFF"){REL1 = 0;}
        }
        else if (strTopic == "test/device/arduino01/rel2") {
            if (strPayload == "ON") {REL2 = 1;}
            else if (strPayload == "OFF") {REL2 = 0;}
        }
        else if (strTopic == "test/device/arduino01/kotel1/get") {
            char StrtUstav11[3];
            char tUstav11;
            tUstav11 = atoi((char*)payload);
            if (tUstav11 == 0 ) {
                tUstav11 = tUstav1;
                dtostrf(tUstav11, -2, 0, StrtUstav11);
                client.publish("test/device/arduino01/kotel1/get", StrtUstav11);
            }
        else tUstav1 = tUstav11;
        }
    }
     
  18. ИгорьК

    ИгорьК Гуру

    Внимательнее... :)
     
  19. dimksum

    dimksum Нерд

  20. Securbond

    Securbond Гуру

    Кто нибудь отправку в telegram настраивал ? 5 часов бьюсь, и ни как.