ESP-8266 Lua: азы программирования NodeMCU.

Тема в разделе "ESP8266, ESP32", создана пользователем ИгорьК, 25 июл 2017.

  1. ИгорьК

    ИгорьК Давно здесь

    Установка температуры по расписанию.

    Код ниже хватает файл timeschd.lua из предыдущего поста и устанавливает температуру по расписанию (вы уже умеете ее на страничку выводить, а также устанавливать через web-морду?):

    Код (Lua):
    do
    -- День, час и минута "сейчас", позже мы их научимся добывать.
    -- Сейчас просто для тренировки.

    nd = 1
    nh = 0
    nm = 0
    -- Если мы не имеем таблицу "dat" - самое время ее создать
    if not dat then
        dat = {}
        -- И воткнуть туда поле "target" с целевой температурой 5 градусов
        dat.target = 5
    end

    local function chck()
    -- Если создан файл машинного распиания
    if file.open("timeschd.lua", "r") then
        -- время, температура и цель для установки
        local d,t,toset
        -- флаг нахождения записи
        local gotrecord = false
        -- функция устанавливает новую температуру, если отличается от старой
        local function  settg(t)
            if dat.target ~= t then
                dat.target = t
                print('Set temp '..dat.target)
            else
                print('Temp is eq! Not changed '..dat.target)
            end
        end

        -- Превращаем текущее время в минуты
        local timenow = nd*24*60+nh*60+nm
        -- Перебираем строки "машинного расписания"
        function analize()
            repeat
                -- читаем строку
                local line = (file.readline())
                -- есть строка!
                if line then
                -- Парсим на время и температуру
                d,t = string.match(line, "(%d+):(%d+%.*%d*)")
                -- В цифры, сукины дети!
                d = tonumber(d)
                t = tonumber(t)
                -- сравниваем с текущим временем
                if timenow >= d  then
                    -- нашли подходящую запись
                    gotrecord = true
                    toset = t
                end
                end
            -- Наконец, строки кончились!
            until line == nil
          -- Все! Закрыть файл
          file.close()
            -- Не нашли подходящую запись
            -- например, сейчас понедельник, но именно в понедельник
            -- ничего не меняется
            if not gotrecord then
                -- Установим последнюю запись из таблицы
                -- не зря же мы ее сортировали!!!
                toset = t
            end
        end
        analize()

      -- Обработать температуру
      settg(toset)
    end
    end
    -- Первый запуск анализа таблицы
    chck()
    -- И потом каждые 30 секунд проверяем время
    tmr.create():alarm(30000, 1, chck)
    end
    А вот как в ручном режиме можно менять день недели и наблюдать смену температуры(30-секундные промежутки запуска скрипта здесь укорочены):


    ... ну или вместо всего описанного выше воспользоваться модулем cron.
     
    Последнее редактирование: 19 ноя 2017 в 11:32
    alp69 нравится это.
  2. alp69

    alp69 Гик

    Вот в этом же все дело.
    Кто это будет делать после нас. Потомки смогут?:D
    В нашем возрасте пора думать о потомках...:rolleyes:
    Это я философствую по случаю ДР. :cool:
     
  3. ИгорьК

    ИгорьК Давно здесь

    Это какой там возраст... Но все равно, ПОЗДРАВЛЕНИЯ :)
    А дело продолжат внуки! Главное воспитать. :)
     
    alp69 нравится это.
  4. alp69

    alp69 Гик

    Спасибо :)