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

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

  1. Securbond

    Securbond Гуру

    Спасибо топикстартеру. Домучил погодную станцию. Работает замечательно. Как нибудь сделаю тему со всеми файлами, 3Д моделью станции (будки для датчиков) и пояснениями что и куда. Что бы каждый мог повторить. Осталось развести плату и сделать корпус под модуль.
    Ну и пара фото
    IMG_4266.JPG IMG_4264.PNG image.jpg
     
    ИгорьК нравится это.
  2. obuhanoe

    obuhanoe Гик

    Добрый день.
    Очень заинтересовала тема, включая язык Lua.
    Но у меня нет Rasberry Pi, но есть мини компьютер с Win10, который брался как медиацентр к 4К телевизору.
    Можно ли все это развернуть на Windows (OpenHub и mosquitto)?

    Спасибо.
     
  3. rkit

    rkit Гуру

    Можно, почему нет. Находите порты любого софта на винду, читаете инструкцию, да устаналиваете.
     
  4. obuhanoe

    obuhanoe Гик

    Порты это OpenHub и mosquitto для windows?
     
  5. rkit

    rkit Гуру

    Да. И вообще чего угодно. Практически весь софт под linux есть и в винде.
     
    obuhanoe нравится это.
  6. obuhanoe

    obuhanoe Гик

    Спасибо, понял.
     
  7. obuhanoe

    obuhanoe Гик

    Добрый день.
    Решил все таки реализовывать на raspberry pi2 - установил RASPBIAN STRETCH WITH DESKTOP, начал устанавливать по инструкции от kmaximv - дошел до mosquitto и на пункте
    Код (Text):
    sudo apt-get install mosquitto
    получаю вот такую информацию (скриншот) и не пойму что необходимо сделать дальше?
    Обновить libsssl до версии больше 1.0.1, libwebsockets3 до больше 1.2 и libmosquitto1 ?
    Или проблема в отложенных битых пакетах (held)?
    Спасибо P_20170823_074356.jpg
     
  8. ИгорьК

    ИгорьК Гуру

  9. obuhanoe

    obuhanoe Гик

    Проверю вечером. Но в теме проблема как я понял, что между 2 терминалами нет связи.
    А я пока до терминалов еще и не добрался.
     
  10. obuhanoe

    obuhanoe Гик

    Не получилось разобраться - тема не помогла.
    Прошу помощи, что нужно сделать ? Если установить libwebsockets3 и libssl - то я не могу найти примеры в интернете.
    Спасибо.
     
  11. ИгорьК

    ИгорьК Гуру

    Понимаете, вот я лично устанавливал переустанавливал опенхаб с москитом раз семь точно, причем от первой до третьей малины - проблем не было.
    Поиск по форумам быстро тоже ничего не дал.
    Либо у вас дистрибутив битый, либо именно этот дистрибутив проблемный - попробуйте поискать предыдущий Jessie. Там 100% все устанавливается по инструкции.
     
  12. obuhanoe

    obuhanoe Гик

    Добрый день. А можете подсказать?
    Нашел только тут версию 8.9 она подойдет?
    https://www.debian.org/releases/jessie/debian-installer/
    полный набор CD
    Это он?
    Спасибо.
     
  13. ИгорьК

    ИгорьК Гуру

  14. obuhanoe

    obuhanoe Гик

  15. ИгорьК

    ИгорьК Гуру

    На заметку.
    Когда работаешь с прерываниями на GPIO - gpio.trig(), то после ресета, судя по всему, прерывания не сбрасываются.

    Поторный вызов программы после ресета приводит к зависаниям. В результате этого, модуль перезагружается сам по ватчдогу, после чего все работает до следующей перезагрузки.

    Как бороться. В скрипте перед назначением прерывания отменять его:

    Код (Lua):
    -- отменяем
    gpio.trig(buttonPin, gpio.INTR_DOWN)
    -- вновь назначаем
    gpio.trig(buttonPin, gpio.INTR_DOWN,function()...
    -- так работает и после ресета по любой причине
     
     
    Последнее редактирование: 25 авг 2017
    alp69 нравится это.
  16. Securbond

    Securbond Гуру

    На днях устанавливал OH на чистую 2ую малину. Проблем с москитом не возникло. Были проблемы с новой версией аддонов 1.10, откатился на старые 1.8.3, всё заработало.
     
  17. star003

    star003 Нерд

    Читая данный пост дошел до управления котлом на даче.
    OpenHab местами довольно не однозначен, например при инициализации элементов при загрузке совсем не хочет понимать тип данных Uninitialized , советуют заменить на Null , но то же не прокатило.

    Мой вариант обхода такой:

    Код (Text):

    rule "Init virtual Items"

    when

        System started  // Когда система (OpenHAB) стартует

    then

            if (startKotel.state.toString.equals("Uninitialized")) {
           
                //***запуск котла по умолчанию с 18 гр
                startKotel.sendCommand(18);
           
            }
       
            if (test.state.toString.equals("Uninitialized")) {
             
                //**остановка котла по умолчанию после 22 гр
                test.sendCommand(22);
           
            }
       
    end
     
    Немного колхоза , но работает. В целом было правильно на мой взгляд замечено в самом начале этой темы , что тяжесть принятия решения лучше возложить на саму железку , а не на хаб.

    Еще как следствие , того , что я написал оказалось - что состояние Switch для включения котла на самом деле имеет три значения вместо двух : ON,OFF,Uninitialized.

    Отправка телеметрии на ThingSpeak . Иногда удобно понимать , что творится.
    Код (Text):

    rule ThingSpeak

        when

            Item art_sensor_f3 changed or
            Item art_sensor_f2 changed or
            Item art_sensor_f1 changed
            //Item Kotel_Switched changed
            //Time cron "0 0/1 * * * ?"   // every 20Sec
       
        then
       
            if (Kotel_Switched.state.toString.equals("OFF")) {
           
                sendHttpGetRequest("http://api.thingspeak.com/update?key=XXX"
                                    +"&field1=" + art_sensor_f3.state.toString()
                                    +"&field2=" + art_sensor_hmd.state.toString()
                                    +"&field3=" + art_sensor_f2.state.toString()
                                    +"&field4=" + art_sensor_f1.state.toString()
                                    +"&field5=0");
                               
                //logInfo("kotel state....", Kotel_Switched.state.toString);                
           
            }
            else if (Kotel_Switched.state.toString.equals("ON")) {
           
                sendHttpGetRequest("http://api.thingspeak.com/update?key=XXX"
                                    +"&field1=" + art_sensor_f3.state.toString()
                                    +"&field2=" + art_sensor_hmd.state.toString()
                                    +"&field3=" + art_sensor_f2.state.toString()
                                    +"&field4=" + art_sensor_f1.state.toString()
                                    +"&field5=1");
                               
                //logInfo("kotel state....", Kotel_Switched.state.toString);                
           
              }
              else {
             
                  sendHttpGetRequest("http://api.thingspeak.com/update?key=XXX"
                                    +"&field1=" + art_sensor_f3.state.toString()
                                    +"&field2=" + art_sensor_hmd.state.toString()
                                    +"&field3=" + art_sensor_f2.state.toString()
                                    +"&field4=" + art_sensor_f1.state.toString()
                                    +"&field5=-1");
                               
                logInfo("kotel state....", Kotel_Switched.state.toString);        //Uninitialized        
             
              }

    end
     
    на отладку данного правила убил около дня , пока не понял про третье состояние выключателя. В логи ошибок не шло , но и до logInfo не доходило.
     
    Securbond и ИгорьК нравится это.
  18. ИгорьК

    ИгорьК Гуру

    Поправляйте код - вставляйте его через кнопочку "листочек с угловыми скобками" в меню.
    Великолепный пост. Спасибо.
     
  19. star003

    star003 Нерд

    Еще немного поделюсь опытом.

    Преобразование state в число для сравнения (актуально для элемента Setpoint):

    Код (Java):


    rule kotelOnOff

        when

            Time cron "0/10 * * * * ?"

        then
       
            if (test.state instanceof Number) {
                  var int B = (test.state as Number).intValue
             
                if(art_sensor_test.state > B) {
           
                    Kotel_Switched.sendCommand("OFF");
                    logInfo("SET kotel state....", "OFF");
           
                }
       
            }
       
            //startKotel
       
            if (startKotel.state instanceof Number) {
                  var int B1 = (startKotel.state as Number).intValue
             
                if(art_sensor_test.state < B1) {
           
                    Kotel_Switched.sendCommand("ON");
                    logInfo("SET kotel state....", "ONOFF");
           
                }
       
            }

    end
     
    именно конструкция: var int B = (test.state as Number).intValue - получим данные в переменную и после ее сравним со значением. Иногда тип может не совпадать - сделал проверку:
    if (startKotel.state instanceof Number) { ...

    test.state - Setpoint . Для типов с явным описанием - не требуется
    (Стянуто из буржуйского форума)
     
    Последнее редактирование: 31 авг 2017
    ИгорьК нравится это.
  20. ИгорьК

    ИгорьК Гуру

    Отличная работа! Никогда не хватало терпения разбираться с языком Xtend от Eclipe. Да и в целом так и не понимаю "где ему учат". Здорово!