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

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

  1. SergeiL

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

    Это да... Согласен!
    Причем я, пока, нигде не видел зависимостей по качеству канала, от количества подключенных Wi-Fi устройств, не генерящих трафик.

    Например, есть несколько ESP сидящих на точке.
    Трафик у них – это отправка нескольких посылок раз в минуту.
    Есть смартфон, сидящий на этой же точке и загружающий тяжелую страницу.
    Вроде ESP не должны мешать, но есть ощущение, что при определенном кол-ве, ESP вносят сильное торможение. До подключения ESP «вроде» грузилось быстрее…

    Понятно, что правильно, все IoT девайсы вынести в отдельную сеть, но это типа – правильно.
    А как посчитать сеть, и влияние кол-ва устройств на загрузку точек???

    Искал в интернете, нет ни рекомендаций, ни объяснений, ни как правильно считать сеть…

    Пока у меня только восемь ESP в сети на три Wi-Fi точки (ESP выбирает точку с лучшим сигналом). Планировалось добавить еще семь, как минимум. Похоже нужно поднимать сеть под IoT ?.?
     
    Последнее редактирование: 4 май 2017
  2. kmaximv

    kmaximv Гик

    Тоже недавно задался этим вопросом. Раньше у меня стояли роутеры ASUS RT-56U и RT-65U. При более 10 клиентов на точку начинались непонятные зависания и тормоза, помогала перезагрузка. Пробовал разные прошивки, настройки, ничего не помогло.
    Месяца 2 назад решил перейти на UniFi AP-AC-Pro. Пока поставил одну точку, работает без сбоев. Буду брать еще две. Сейчас на ней 9 ESP модулей. Если будут проблемы при расширении, отпишусь.
    Выделение_015.png
     
    SergeiL и ИгорьК нравится это.
  3. alp69

    alp69 Форумчанин

    Как правило, в описании роутеров указывается максимальное количество клиентов. Так что при наличии в сети нескольких точек доступа, очевидно нужно ориентироваться на самую "слабую".
     
  4. SergeiL

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

    Да это понятно... Количество никогда не превышалось.
    Обычно, заявленное макс кол-во на обычную точку не меньше 16. И...
    Дома до десяти, и уже появляются какие то тормоза.
    На работе точки до 60 подключений, а при 25 уже люди жалуются на качество...

    Всегда не любил Wi-Fi.. Раньше, дома, я Wi-Fi оставлял только для телефонов.
    Все остальные устройства по возможности сидят на Ethernet 1GB.

    ESP как-то внушили доверие. Работают без пропаданий, и без потерь соединений.
    Но, как показалось…, другие устройства на этих же точках начали тормозить…
     
  5. Serg_

    Serg_ Нуб

    [QUOTE="SergeiL, …[/QUOTE]

    Попробуйте модули RCWL-0516. Я их везде сейчас по квартире буду ставить - работают отлично, можно под обои и плитку класть -)
     
  6. ИгорьК

    ИгорьК Оракул Модератор

    Я тут заглянул в свой RT-AC66U:
    wow.jpg
     
  7. dimksum

    dimksum Нерд

    Возможно ли динамически создавать итемы и размещать их в сайтмап? (есть база данных важных событий и в зависимости от даты количество этих событий разное. Было бы неплохо при нажатии на фрейм отображать события списком)
     
  8. ИгорьК

    ИгорьК Оракул Модератор

    56. Злодейства с init.lua
    В ESP-8266 существует файл init.lua, который запускается при старте модуля. Если его нет - автозапуск не происходит.
    Типовые задачки работы с ним -
    • написать его, если нет,
    • удалить, если он есть, но требуется предотвратить автозапуск.
    Предлагаю сниппет для ESPlorer, который решает три задачи:
    1. если обнаружен init.lua - переменовывает его в _init.lua и ресетит модуль, что предотвращает дальнейший автозапуск;
    2. если обнаружен _init.lua - переименовывает его в init.lua и рестит модуль, что вызывает автозапуск;
    3. если нет ни того ни другого - печатает на экран шаблон init.lua
    Попробуйте, может понравится.

    Как работать.

    У вас уже есть init.lua а нужно отлаживать программу: запитываете модуль, открываете порт и жмете на кнопку сниппета - автозапуск будет выключен, init.lua станет _init.lua

    Все отлажно - жмете кнопку сниппета - _init.lua переименовывается в init.lua и скрипты запускаются
    А если у вас еще нет init.lua - его шаблон - на экране. Копируете, создаете файл и загружаете в модуль. init.lua, в свою очередь, запускает на исполнение файл main.lua но вы можете изменить строку запуска как необходимо.
    Код (Lua):
    if file.exists("init.lua") then
         file.rename("init.lua","_init.lua")
         node.restart()
    elseif file.exists("_init.lua") then
         print("Really rename to init.lua? \n5 sec. delay!")
         tmr.create():alarm(6000, 0, function()
              file.rename("_init.lua","init.lua")
              node.restart()
         end)
    else
         print("No init files! Pattern now.")
         print('tmr.create():alarm(22000, 0, function()\n'..
             '\tif file.exists("main.lua") then\n'..
                 '\t\tdofile("main.lua")\n'..
             '\telse\n'..
                 '\t\tprint("No main.lua, Rename init.lua!")\n'..
                 '\t\t\tif file.exists("init.lua") then\n'..
                     '\t\t\tfile.rename("init.lua","_init.lua")\n'..
                     '\t\t\tnode.restart()\n'..
                 '\t\t\end\n'..
             '\tend\n'..
         'end)')
    end
    init.jpg

    Что касается шаблона init.lua. Он очень умный, (как, ...ь, дом, управляемый пультом дистанционного управения).

    init.lua настроен на запуск main.lua и проверяет наличие такого файла. Если его нет - init.lua самоликвидируется, чтобы не вводить систему в вечный ресет - он переименовывает сам себя в _init.lua и перезагружает модуль - автозапуск отменен.
     
    Последнее редактирование: 5 авг 2017
    alp69 нравится это.
  9. ИгорьК

    ИгорьК Оракул Модератор

    Закончил вариант устройства nooLite MTRF-64, который вставляется между пультом управления и силовым блоком. Работает устойчиво, но устройство, мне кажется, в целом неправильное.

    Для автоматизации квартиры, где под управлением 3-5 лампочек - самое то. Обеспечивает точное знание состояния силовых блоков.

    Если говорить о расширении - не годится.

    Вернусь к снифингу команд пультов => передаем в OpenHAB, а все сценарии, наоборот из OpenНab на силовые блоки.

    И подумаю что делать с управлением яркостью - раньше этот вопрос просто игнорировал.
     
    Последнее редактирование: 19 май 2017
  10. Estranged

    Estranged Нуб

    Здравствуйте, друзья. Никак не могу понять в чем дело:
    ОН2 на RPI3. Клиенты Ардуины и ЕСП. Понадобилось создать кнопку. В Итемах прописал Switch BUTTON "Кнопка" {mqtt=">[broker:kalitka/open:command:ON:1]"} В Сайтмэпс прописал ее как
    Switch item=BUTTON mappings=[ON="Открыть"] Проверил на Ардуино - работает. Перезагрузил Ардуино. И сразу же получил "1" из топика kalitka/open. Запустил MQTTfx, подписался на kalitka/open и опять сразу же получил "1". Кнопка при этом не нажималась. Удалил в ОН в Итемах упоминание о топике kalitka/open, но продолжаю получать "1", если в MQTTfx подписываюсь на этот топик. ОН перезагружал. Как это пофиксить?
     
  11. ИгорьК

    ИгорьК Оракул Модератор

    Было отправлено сообщение с высоким приоритетом доставки.
    С сотового не помогу - надо доки почитать как его уничтожить.
     
    Estranged нравится это.
  12. Estranged

    Estranged Нуб

    QoS 0 у этого сообщения, как и у всех других.
     
  13. ИгорьК

    ИгорьК Оракул Модератор

    Извиняюсь, не доставки а retained - сохранности.
    Как удалить - послать сообщение в топик без тела - payload. Вручную, через mqttfx или MqttSpy
     
    Estranged нравится это.
  14. ИгорьК

    ИгорьК Оракул Модератор

  15. Estranged

    Estranged Нуб

    Спасибо за помощь. Уже успел переустановить Москитто, проблема ушла. Осталось понять, почему сообщению установился флаг Retained.
     
  16. ИгорьК

    ИгорьК Оракул Модератор

    Надо искать в том месте, где возникает это сообщение: что публикует его на брокер - то и устанавливает флаг.
     
    Estranged нравится это.
  17. alp69

    alp69 Форумчанин

    Печаль. Накрылся LAN у RPi2. Пока не вскрывал, не до того. Тем не менее, кто что скажет по потенциальному диагнозу?
    P.S. Насколько я понимаю, sd-карта от RPi2 не подхватится RPi3 (есть в запасе)?
     
  18. ИгорьК

    ИгорьК Оракул Модератор

    Не подхватывается.
     
  19. ИгорьК

    ИгорьК Оракул Модератор

    Последняя, пятая заметка о MTRF-64+ESP-8266 от nooLite.
    Простая железка практически со всеми возможностям управления силовыми блоками.
    [​IMG]
    [​IMG]

    [​IMG]
     
    Последнее редактирование: 31 май 2017
    SergeiL нравится это.
  20. ИгорьК

    ИгорьК Оракул Модератор

    57. BME280 одна штука.
    Как пропустил это железо - ума не приложу:
    Код (Lua):
    pina = 3
    pinb = 4
    Broker="iot.eclipse.org"
    port=1883

    bme280.init(pina, pinb)

    m = mqtt.Client( "bme280200", 120, "bme280", "superpass")
    pu = false

    m:lwt("/myhome/bme280/lwt", "bme280", 0, 0)

    connectNow = function()
        local tm = tmr.create()
        tm:alarm(5000, 1, function() get() end)
       
        function get()
            if wifi.sta.status() == 5 and wifi.sta.getip() ~= nil then
                tmr.stop(tm)
                tmr.unregister(tm)
                print("Got WiFi!")
                m:connect(Broker, port, 0, function(conn)
                    print("Mqtt Connected to: " .. Broker)
                    pu = true
                end)
            else
                print("No WiFi!")
            end
        end
        get()
    end

    m:on("offline", function(con)
        pu = false
        print ("Mqtt Reconnecting.")
        connectNow()
    end)

    function publish_data()
        print("==========\t\t\tHeap at Start "..node.heap())
        local H = string.format("%.1f", (bme280.humi()/1000))
        local P, T = bme280.baro()
        P = string.format("%.1f", (P/1000*0.75))
        T = string.format("%.2f", T/100)

        print("Humidity = "..H.." %, \nPressure = "
        ..P.." mm.Hg"
        .."\nTemperatre = "..T.." C")
       
        if pu == true then
            m:publish("/myhome/bme280/temperature/status",T,0,0, function(conn)
                print("Temp "..T.." published!")
                tmr.alarm(3, 1000, 0, function(conn)
                    m:publish("/myhome/bme280/humi/status",H,0,0, function(conn)
                        print("Humi "..H.." published!")
                        tmr.alarm(4, 1000, 0, function(conn)
                            m:publish("/myhome/bme280/press/status",H,0,0, function(conn)
                                print("Pressure "..P.." published!")
                                print("==========\t\t\tHeap at Finish "..node.heap())
                            end)
                        end)
       
                    end)
                end)
            end)
            collectgarbage()
        end
    end
    function run_main_prog()
        print("Main  program")
        publish_data()
        tmr.create():alarm(30000, 1, function() publish_data() end)
    end

    local H = bme280.humi() or "Er"
    if H ~= "Er" then
        connectNow()
        run_main_prog()
    else
        print("\n\n\===========\t\t   Oshibka Soedinenija, Balbes!   ===========")
    end
     


    В прошивке заказать как минимум: bme280, file, gpio, mqtt, net, node, tmr, uart, wifi

    Snap222222.jpg
     
    Последнее редактирование: 7 июн 2017
    SergeiL нравится это.