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

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

  1. ИгорьК

    ИгорьК Гуру

    А перегрузиться?
    установить gedit. :) Или через WinSCP редактировать :)
     
  2. ИгорьК

    ИгорьК Гуру

    Точно. Разрешает дистанционный вход. Все и не упомнишь. Делаешь то один раз.
     
  3. woow

    woow Гик

    пока толка не какого
    Client mosqsub/1244-raspberryp sending CONNECT
    Client mosqsub/1244-raspberryp received CONNACK
    Client mosqsub/1244-raspberryp sending SUBSCRIBE (Mid: 1, Topic: /myhome/#, QoS: 0)
    Client mosqsub/1244-raspberryp received SUBACK
    Subscribed (mid: 1): 0
    Client mosqsub/1244-raspberryp sending PINGREQ
    Client mosqsub/1244-raspberryp received PINGRESP
     
  4. kmaximv

    kmaximv Гик

    Если переименовать свой файл настроек *.sitemap в default.sitemap, то он будет открываться по умолчанию.
     
    chibis и ИгорьК нравится это.
  5. chibis

    chibis Нерд

    Спасибо. Заработало.
     
  6. chibis

    chibis Нерд

    Не знаю обсуждалось ли раньше или нет.
    У меня стоит windows 7 64 bit(x64) . Проблема возникла с запуском openHAB Designer
    Поставил как и требовалось последнюю версию Java x64. Не запускается openHAB Designer даже с танцем с бубном.
    Решение проблемы очень простое надо ставить Java x86(т.е для 32bit) и никаких проблем с запуском openHAB Designer.

    Скачать последнюю версию Java x86.
     
    ИгорьК нравится это.
  7. chibis

    chibis Нерд

    А как прописывать свои иконки?
    У меня нет папки /webapps/images/
    Самому создавать и картинки закидывать? А в коде как прописывать ?

    Сам спрашиваю и отвечаю. Нашел... путь /usr/share/openhab/webapps/images
     
    ИгорьК нравится это.
  8. chibis

    chibis Нерд

    Помогите составить код для датчика геркона.
    С ESP:
    Дверь открыта - /myesp/input5 1
    Дверь закрыта - /myesp/input5 0

    Хотелось бы вывести: Входная дверь........................................ Дверь открыта/закрыта
    Код (Text):
    Contact Vhod  "Входная дверь [MAP(en.map):%s]"  {mqtt="<[mosquitto:/myesp/input5:state:MAP(en.map)]"}
    en.map:
    Код (Text):

    0=Дверь закрыта
    1=Дверь открыта
    Код понятное дело не работает... Не могу сообразить как верно составить код...
     
    Последнее редактирование: 19 авг 2016
  9. woow

    woow Гик

    Я вижу сообщения от ESP, а на хабе что делаю сообщений нет, что-то наоборот.
    Тут что-то не так, что OpenHAB не получает сообщения от ESP?
    Код (Bash):

    ######### MQTT Transport #################
    mqtt:mybroker.url=tcp://localhost:1883
    #mqtt:mybroker.clientId=mybroker
    mqtt-eventbus:broker=mybroker
    mqtt-eventbus:statePublishTopic=/statePub/${item}
    mqtt-eventbus:commandPublishTopic=/commandPub/${item}
    mqtt-eventbus:stateSubscribeTopic=/stateSub/${item}
    mqtt-eventbus:commandSubscribeTopic=/commandSub/${item}

    ######## MPD Binding ###############
    #и тут не знаю чьи адреса должны быть
    mpd:TinyMPD.host=192.168.2.140
    mpd:TinyMPD.port=6600
    mpd:volumio.host=192.168.2.141
    mpd:volumio.port=6600
     
  10. Securbond

    Securbond Гуру

    У меня раскомментировано только 2 строчки
    mqtt:mosquitto.url=tcp://localhost:1883
    mqtt:mosquitto.clientId=ClientMalinka
    Остальное не использую.... И так работает
    Это из другой оперы..
     
  11. ИгорьК

    ИгорьК Гуру

    Пункт 6 - он как раз для Вашего случая.
     
  12. ИгорьК

    ИгорьК Гуру

    И откуда Вы все это выкапываете...
     
  13. woow

    woow Гик

    кто не там глубоко копает, не всегда золото находит :)
    Это конфиг "рабочего" проекта.
    перешёл в другую ветку форума потому что там был "готовый рабочий" проект, в вашем не как не удалось прошить ESP . ESPlorer, когда вкладываю ваши скечи, показывает ошибки, как их устранить не нашёл, а в том проекте есть готовый *.bin файл. Я и хотел для начала запустить что-то рабочее по минимуму а потом уже развивать под себя, оказалось не совсем так.
     
    Последнее редактирование: 20 авг 2016
  14. ИгорьК

    ИгорьК Гуру

    Не сомневаюсь. Вы то понимаете что там написано?

    Это действительно не так. Здесь надо не повторять, а думать и понимать что делаешь. Если не понимаешь - дальше не идти. Ни шагу.
     
    dimraz нравится это.
  15. chibis

    chibis Нерд

    Попробовал. Странно не заработало.
    И потом там же управление. А мне надо только статус выводить. Если 1 - открыто, 0 - закрыто без переключателя из веб морды.

    Пробовал просто для примера вывести показания текстом (ну как температурные датчики) Статус выводит ноль или единица т.е все упирается в правильное составление кода item.
    Сейчас уезжаю, вернусь домой может со свежими мозгами осенит, как написать код)

    Кстати вопрос в вдогонку. Как сделать, чтобы данные с температурных датчиков сохранялись? Вывести график за период? Можно ссылку на мануал? В отъезде буду изучать..
    Спасибо
     
  16. ИгорьК

    ИгорьК Гуру

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

    ИгорьК Гуру

    У Вас управление - датчик движения? А в чем разница между выключателем? И там и там или 0 или 1.
     
  18. chibis

    chibis Нерд

    У меня простой датчик геркона от сигнализации ИО 102-2

    [​IMG]

    С ESP в MQTT выводит:
    Код (Text):
     /myesp/input5 1 - Дверь открыта
    /myesp/input5 0 - Дверь закрыта
    Управлять мне им не нужно. Только вывести статус датчика в openHAB (статус: Дверь открыта/Дверь закрыта)
     
  19. ИгорьК

    ИгорьК Гуру

    Запустите пример тот что идет с опенхабом. Там много всяких окошек и дверей контролируется. Я сейчас ничем помочь не могу - планшет. Но просто повторите как там сделано.
     
  20. ИгорьК

    ИгорьК Гуру

    37. Отправляем в OpenHab много данных. Corutine. Шаблон.
    Передача информации в OpenHab по протоколу MQTT может стать головной болью, если мы отправляем ее с многих датчиков. В помощь заболевшим и себе лично - шаблон такой отправки.
    Суть явления.
    • Собираем информацию в таблицу, а затем
    • создаем в функции (чтобы по исполнению испарялось) две локальные функции - сопрограммы.
    • первая функция забирает пару из таблицы, вызывает функцию публикации и останавливается.
    • функция, что приняла информацию для отправки, - отправляет ее на брокер и на callback(е) возобновляет работу поставщика информации.

    А вот и код:
    Код (Lua):
    -- Works fine!!!
    local dat = { -- Это склад информации для отправки, наполняем как умеем
        t1 = 11,
        t2 = 22,
        t3 = 33,
        t4 = 44,
        t5 = 55,
        t6 = 66,
        t7 = 77,
        t8 = 88,
        t9 = 99,
        t10 = 100,
        t20 = 200,
        t30 = 300
    }
    --]]

    --
    Broker="ВАШ_БРОКЕР"
    port=ВАШ_ПОРТ
    mClnt="corut"
    pass="pass"
    publish = false

    m = mqtt.Client(mClnt, 180, mClnt, pass)
    m:lwt("/lwt", mClnt, 0, 0)

    function connecting()
        function getConnect()
           if wifi.sta.status() == 5 and wifi.sta.getip() ~= nil then
                 m:connect(Broker, port, 0, 0,
                    function(conn)
                        print("Connected.")
                        tmr.stop(6)
                         publish = true
                        m:subscribe(mClnt.."/#",0, function(conn)
                            print("Subscribed.")
                        end)
                end)
            end
        end
        getConnect()
        tmr.alarm(6, 90000, 1, function()
            getConnect()
        end)
    end

    m:on("offline", function(con)
        publish = false
        connecting()
    end)

    m:on("message", function(conn, topic, data)
        print(topic)
        print(data)
        collectgarbage()
    end)
    --]]

    --
    function now() -- Это та самая функция, что отправляет все на брокер
        local send = coroutine.create(function () -- создаем corutine
            for k,v in pairs(dat) do -- выбирает очередную пару из таблицы
                print('Send '..k..' and '..v)
                pub(k,v) -- отправляет на публикацию
                coroutine.yield() -- останавливается
            end
        end)

        function pub(topic, info) -- функция публикации
            if topic ~= nil and info ~= nil then
                print("Publish Topic: "..topic.." and Info: "..info)
                m:publish(mClnt.."/"..topic.."/state",info,0,0, function() -- публикуем на брокер
                    coroutine.resume(send) -- в случае успеха, возобновляем работу функции-поставщика данных
                end)
            end
        end
        coroutine.resume(send) -- Запускаем первую функцию в первый раз
    end

    connecting()
    -- Каждые 10 секунд отправляем на брокер
    -- ту дурную таблицу, что в начале скрипта
    tmr.alarm(0, 10000, tmr.ALARM_AUTO, function()
        print('Alarm!')
        a = nil -- Если мы раньше что-то публиковали, но оно не дошло и висит
                  -- несделанной задачей - уничтожаем
        if publish then -- если публикация разрешена
            local a = now() -- создаем локальную функцию
            a() -- и публикуем
        end
    end)
    --]]
    Но есть и второй вариант. Он компактнее в коде, хотя шут его знает так это или нет с точки зрения загрузки памяти в целом. Код требует установки модуля JSON.
    Тогда функция now() будет выглядеть так:
    Код (Lua):
    function now()
        function pub()
            local topic = "alldata"
            local info = cjson.encode(dat)
                print("Publish Topic: "..topic.." and Info: "..info)
                m:publish(mClnt.."/"..topic.."/state",info,0,0, function() end)
        end
        pub()
    end
    Однако на стороне OpenHab придется повозиться с расшифровкой. Я, честно говоря, не проверял как это работает, но, возможно, кому то это покажется интереснее.
    Идем дальше:...
     
    Последнее редактирование: 1 сен 2016