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

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

  1. ИгорьК

    ИгорьК Гуру

    Большая работа! Здорово.
    Я бы не рискнул столько Опенхаба - установку можно MQTTSpy делать
    А вообще - суперполезно..
     
    alp69 нравится это.
  2. alp69

    alp69 Форумчанин

    Спасибо! Правда устройство по коду и железу примитивнейшее, но вот с алгоритмом работы и написанием rules провозился. Сначала тоже суммарный расход считал устройством. Но после прогона пришел к текущему варианту. Мне так удобнее. Субъективно.
     
    Последнее редактирование: 3 дек 2016
  3. dimm71

    dimm71 Нерд

    Кстати... возник вопрос следующий.
    Если в скрипте указаны русские буквы, например

    print("За период "..period_rate.." кВт")

    то при заливке в модуль через ESPlorer вылетает с ошибкой в строке/ах содержащие русские буквы

    Как с этим бороться, не заменяя русские буквы на латиницу?
     
    Последнее редактирование: 3 дек 2016
  4. alp69

    alp69 Форумчанин

    Меняйте кириллицу на латиницу.
    У меня все ровно работает.
     
  5. alp69

    alp69 Форумчанин

    Попробуйте писать в notepad++. В формате Utf-8 (без BOM). (?)
    А оттуда копипаст в есплорер.
    Хотя у меня даже при печати (наборе) в есплорере все в порядке.
     
    Последнее редактирование: 3 дек 2016
  6. dimm71

    dimm71 Нерд

    Работаю в Linux. Здесь по умолчанию UTF-8. Копирую прям из форума
     
  7. alp69

    alp69 Форумчанин

    А если сами кириллицу введете вместо скопированной?
     
  8. dimm71

    dimm71 Нерд

    ��оединение - вместо Соединение.
    Видимо это глюк работы ESPlorer в Linux
     
  9. alp69

    alp69 Форумчанин

    А если первый символ латиницей? Не С ("эс" по-русски), а C ("си" по-английски)?
     
  10. ИгорьК

    ИгорьК Гуру

    Наткнулся на прикольную фичу NodeМсu. Системное время в ней 31-битное, после наполнения этих 31 битов таймер слетает в ноль. А арифметика - 32-битная.
    Знатоки, последствия представляете? С учетом того, что время считается в микросекундах.
     
    Последнее редактирование: 3 дек 2016
  11. alp69

    alp69 Форумчанин

    Так там в описании таймера указано, что таймер имеет конечное значение. Или не в этом суть?

    P.S. Надеюсь, про то, что в Lua 1:7×7 не равно 1, известно форумчанам?
     
    Последнее редактирование: 3 дек 2016
  12. ИгорьК

    ИгорьК Гуру

    Конечно имеет, любой таймер как дотикает до конца таки слетает в ноль. Все таймеры везде так себя ведут. Но наш случай - особенный. Я уже столкнулся с его последствиями и тупил нипадецки. Только сегодня понял суть.
     
  13. alp69

    alp69 Форумчанин

    Поделитесь граблями?:D
     
  14. ИгорьК

    ИгорьК Гуру

    Как до компа доберусь. Это реально важно.
    А пока посмотрите внимательно как сделан дебонс на замыкание. Это следствие.
    А тот дебонс что я сделал в виде шаблона - ошибочный. Переделаю. Возможно этот таймер всегда так тикал, возможно это было реализовано в какой-то очередной SDK. В общем, сейчас с дебонсом и выражениями типа if time.now - last.time > some.time надо быть аккуратными.
     
    Последнее редактирование: 3 дек 2016
    alp69 нравится это.
  15. alp69

    alp69 Форумчанин

    Где-то на форуме видел пример использования модуля enduser setup от NodeMCU. Повторный поиск толком ничего не выдал.
    Предлагаю вниманию функцию дистанционной смены сети Wi-Fi. Будет полезно, когда модуль "уже не помню где лежит", а аутентификационные параметры в сети сменились. Или модуль переехал в другую сеть, а шить его не с руки. Модуль enduser setup должен быть в составе прошивки.
    Возможно будет полезно для вставки в шаблон загрузки.
    Код (Lua):
    function Change_wifi()
        wifi.setmode(wifi.STATIONAP) -- включаем точку доступа
        wifi.ap.config({ssid="ИМЯ_ТОЧКИ_ДОСТУПА", auth=wifi.OPEN}) -- вписать имя устройства
        enduser_setup.manual(true) -- включаем плюшку )))
        enduser_setup.start(function()
        print("Подключение к сети. Текущий IP-адрес:" .. wifi.sta.getip())
        end,
        function(err, str)
        print("enduser_setup: Err #" .. err .. ": " .. str)
        end
        )

    tmr.alarm(6,10000,1, function() -- мониторим наличие сети
        if (wifi.sta.status() == 5) and (wifi.sta.getip() ~= nil) then
            print("Есть Wi-Fi!")
            Start() -- что-то делаем если подключение появилось
            tmr.stop(6) -- тормозим таймер проверки wi-fi
            wifi.setmode(wifi.STATION) -- переводим модуль из режима точки доступа в режим клиента
            enduser_setup.stop() -- останавливаем модуль дистанционной настройки wi-fi
        else
            print("Нет Wi-Fi!")
        end
    end)
    end
    Правда работает не мгновенно. Приходится ждать, пока точка появится, пока страница сформируется... Но вполне рабочая штука. Проверил на себе :cool:

    P.S. Во вложении прошивка на 27 модулей. Создана в июне 2016. Для запуска модуля на ней не нужно с бубном танцевать.
     

    Вложения:

    ИгорьК нравится это.
  16. ИгорьК

    ИгорьК Гуру

    Вот что важно ESP-8266водам на Lua
    Там место для кода осталось? :)
    Я уже пару раз нарывался на безумный синий светодиод - справиться получалось.
     
  17. alp69

    alp69 Форумчанин

    Я работаю с ESP-12E. Вот сведения о счетчике электричества:
     
  18. dimm71

    dimm71 Нерд

    Здесь

    И во избежании "хулиганства" всё же лучше поставить пароль
    Код (C++):
     wifi.ap.config({ssid="MyPersonalSSID", pwd="***********"})-- указываем пароль
     
    вместо
    Код (C++):
    wifi.ap.config({ssid="MyPersonalSSID", auth=wifi.OPEN})
     
    Последнее редактирование: 4 дек 2016
    alp69 нравится это.
  19. alp69

    alp69 Форумчанин

    Точно! Помню же, что совсем недавно было. Почему поиском "enduser" в сообщениях не нашло? Странно.
    Ну да ладно.
    Вот только в init.lua это вставлять, на мой взгляд, не совсем хорошо. Это субъективно. Ну а объективно - после переназначения сети, режим точки доступа нужно выключать.
    Код (Lua):
    enduser_setup.stop() -- останавливаем модуль дистанционной настройки wi-fi
    wifi.setmode(wifi.STATION) -- переводим модуль из режима точки доступа в режим клиента
     
     
    Последнее редактирование: 4 дек 2016
  20. dimm71

    dimm71 Нерд

    Это в каком месте нужно вставлять?
    И как запустить AP в случае, если STATION отвалился?

    Из init.lua код перенес.
     
    Последнее редактирование: 4 дек 2016