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

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

  1. 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 и ИгорьК нравится это.
  2. ИгорьК

    ИгорьК Победитель модулей

    Поправляйте код - вставляйте его через кнопочку "листочек с угловыми скобками" в меню.
    Великолепный пост. Спасибо.
     
  3. 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
    ИгорьК нравится это.
  4. ИгорьК

    ИгорьК Победитель модулей

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

    Oberon Нерд

    Очень извиняюсь, если уже где-то было, но я не нашел. А как в ОН ввести просто текст ? И как вывести очень длинную строку ? Забажалось мне СМС через ОН отправлять и принимать, а как текст сообщения ввести - не пойму. По сути надо ввести строку типа "8ххх ххх хххх Privet", дальше уже понятно как отправить. Шаблонами вводить не то, текст произвольный нужен, как и номер телефона.
     
  6. ИгорьК

    ИгорьК Победитель модулей

    Не встречал такого - набор текста в поле.
    Все что можно сделать, ИМХО, в правилах заранее заготовки с необходимым текстом и отправлять их по событиям.
     
  7. Oberon

    Oberon Нерд

    Сам спросил, сам отвечу. Может и криво, но зато работает. Решил через Webview
    opensms.png
    Подробности нужны ? Если есть другие предложения, с удовольствием выслушаю.
     
    ИгорьК нравится это.
  8. ИгорьК

    ИгорьК Победитель модулей

    Это нечто на php, внедренное в страничку и забираемое через http binding?
    Очень оригинально :)
     
  9. Oberon

    Oberon Нерд

    Нет там php, только html
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>Использование фрейма</title>
    </head>
    <body>
    8хххххххххх, пробел, сообщение латиницей
    <p><iframe name="area" style="display: none"></iframe></p>
    <form action="http://192.168.0.10:8080/basicui/CMD" target="area">
    <p><input placeholder="Введите текст" name="Sms" autofocus size="100">
    <p><input type="reset"/><input type="submit" value="Отправить"></p>
    </form>
    </body>
    </html>
    и текстовый итем с правилом для ардуинки
     
    Последнее редактирование: 2 сен 2017
    alp69 и ИгорьК нравится это.
  10. ИгорьК

    ИгорьК Победитель модулей

    Отличное решение!
     
  11. obuhanoe

    obuhanoe Гик

    ИгорьК, добрый день.
    Дошел до пункта:

    3.1. Mosquitto - скачал MqttSpy (0.5.4) - нужно поставить на Windows или Debian? Но пока не могу настроить программу - есть ли инструкции по настройке?
    И еще вопрос - openHAB Designer - какую версию ставить Windows или Debian?

    Спасибо.
     
  12. ИгорьК

    ИгорьК Победитель модулей

    Зачем 0.5.4 если 1.0.0 есть? https://github.com/eclipse/paho.mqtt-spy/wiki/Downloads

    Ставить на рабочий компьютер - там какая система стоит? Программа коннектится к MQTT брокеру и позволяет смотреть все что на него приходит.

    Настройка там простая.
    1. На первом окне тапните Сonnection - New Connection в новом окне - New и задайте адрес и порт сервера.
    upload_2017-9-5_16-15-19.png

    Сохраните и закройте - появится закладка вашего сервера:
    upload_2017-9-5_16-16-41.png

    Жмете ее:
    upload_2017-9-5_16-17-31.png

    Открываете верхнюю закладку и подписываетесь:

    upload_2017-9-5_16-19-0.png

    А если надо - отправляете в топик:
    upload_2017-9-5_16-21-28.png

    Ту что на рабочий компьютер станет.
     

    Вложения:

  13. obuhanoe

    obuhanoe Гик

    Нужен же mqtt-spy? Daemon не нужно устанавливать?
    Windows 8

    Получается так же ставлю на Windows 8.
     
  14. obuhanoe

    obuhanoe Гик

    Возник вопрос общего характера - если устройство (esp8266) работает в той же сети что и raspberry pi - все понятно. Но а если устройство в другой сети в другом городе, даче и т.д. - как устройство сможет передавать данные? Честно признаюсь пока всю тему не прочитал, если вопрос поднимался - тогда найду и ознакомлюсь.
    Спасибо.
     
  15. ИгорьК

    ИгорьК Победитель модулей

    Не поднимался. Вы проосто погуглите на тему протокола MQTT и все станет ясно.

    Если устройства в разных сетках, то у брокера должен быть общедоступный белый адрес.

    А уж как Вы этого добьетесь - разные способы.
    Либо публичный брокер - платный/бесплатный, либо вы дома выводите в Интернет свой брокер через постояный либо динамический IP.

    Если IP серый - только через публичный брокер.

    У меня дома динамический IP - использую https://dyn.com/dns/

    Можно работать через iot.eclipse.org - фриварный брокер. Через него идет туча информации, никто там вашу не обнаружит. Сделайте сложный топик и никому Вы там не будете нужны со своими данными.
     
  16. rkit

    rkit Гуру

    Объедините их в одну сеть, называемую интернет.
     
  17. ИгорьК

    ИгорьК Победитель модулей

    Существенное дополнение :) Коротко и ясно.
     
    Последнее редактирование: 6 сен 2017
  18. obuhanoe

    obuhanoe Гик

    У меня серый IP.
    У вас серый или белый IP?
     
  19. ИгорьК

    ИгорьК Победитель модулей

    Динамический.

    Белые бывают:
    1. постоянными и
    2. динамическими.

    То есть белый.

    Серый - когда сидишь за файрволом провайдера и никак из него не выбраться.
     
    Последнее редактирование: 6 сен 2017
  20. obuhanoe

    obuhanoe Гик

    Правильно ли я понял, что за белый IP (статический/динамический) нужно доплачивать провайдеру?
    И у меня только вариант с публичным брокером?