1 2 3 4 5 6 7 8 9 10 10/10 10,00оценок: 5

OpenHAB - обмен опытом, совместное изучение и т. п

Тема в разделе "Умный дом", создана пользователем Anton66, 15.03.14.

  1. Чижик
    Регистрация:
    23.08.10
    Сообщения:
    84
    Благодарности:
    7

    Чижик

    Живу здесь

    Чижик

    Живу здесь

    Регистрация:
    23.08.10
    Сообщения:
    84
    Благодарности:
    7
    Адрес:
    Москва
    Да, я приблизительно так же понимаю. Поэтому хотелось бы, чтоб кто-то из рускоязычных участников проекта принял участие здесь или где нибудь на специализированном форуме или в рамках какого-то блога. Что бы можно было напрямую задать вопросы, которые в документации не освещены либо упоминаются вскользь.

    Например, в каких случаях и к каким итемам правильно применять postupdate(), а когда sendcommand().
    В примерах rules-ов на ВИКИ, пишут кто как.
    Крупными мазками все понятно, но в деталях в развивающейся системе часто не понять, где баг, а где "фича".

    P. S. В блогах сети и на Хабре было несколько статей, но они тянут в лучшем случае на пересказ, как их авторы домыслили исходный текст оригинальной доки.
     
  2. sly2k
    Регистрация:
    22.02.08
    Сообщения:
    529
    Благодарности:
    122

    sly2k

    Живу здесь

    sly2k

    Живу здесь

    Регистрация:
    22.02.08
    Сообщения:
    529
    Благодарности:
    122
    Адрес:
    деревня Мякинино
    Помогите! Не получается использовать отправку оповещений на телефон через my. openHAB
    Сервис my. openHAB у меня подключен, т. е. через интернет я могу смотреть openHAB и оповещения Online/Offline приходят
    В инструкции сказано что можно в Rules настроить произвольные оповещения:
    Однако когда я в rules указываю эту инструкцию, то в дизайнере получаю сообщение об ошибке:
     
  3. opyzhov
    Регистрация:
    03.10.11
    Сообщения:
    542
    Благодарности:
    140

    opyzhov

    Живу здесь

    opyzhov

    Живу здесь

    Регистрация:
    03.10.11
    Сообщения:
    542
    Благодарности:
    140
    Адрес:
    Санкт-Петербург
    Друзья..подскажите как правильно мне прописать настройку
    Получаю по modbus/tcp параметры температуры от ПЛК в формате WORD. как мне эти данные преобразовать чтобы они нормально отображались. тобишь куда прописать Tulica=Tulica_mem/10
     
  4. Smith2007
    Регистрация:
    27.05.12
    Сообщения:
    1.265
    Благодарности:
    746

    Smith2007

    Живу здесь

    Smith2007

    Живу здесь

    Регистрация:
    27.05.12
    Сообщения:
    1.265
    Благодарности:
    746
    Адрес:
    Россия
    Вы получаете два слова или 4 байта. Привести их к значению real можно при помощи rule. Вечером я Вам свой rule скину, там ни чего сложного.

    Зы. А почему вы получаете температуру в формате word? Если формат real то это два ворда.
     
  5. opyzhov
    Регистрация:
    03.10.11
    Сообщения:
    542
    Благодарности:
    140

    opyzhov

    Живу здесь

    opyzhov

    Живу здесь

    Регистрация:
    03.10.11
    Сообщения:
    542
    Благодарности:
    140
    Адрес:
    Санкт-Петербург
    @Smith2007,
    я получаю так:
    openHAB config file:
    modbus: tcp. slave1.connection=x.x.x.x:502
    modbus: tcp. slave1.id=1
    modbus: tcp. slave1.start=12288
    modbus: tcp. slave1.length=4
    modbus: tcp. slave1.type=holding

    *.items:
    Number Tulica "Температура улица [%.1f 0C]" <temperature> {modbus="slave1:0"}

    почему word. ситуация такая... у меня основная визуализация работает на IOS в программе http://www.myscadatechnologies.com
    напрямую визуализация <-> (modbus) ПЛК. и я никак не могу заставить ее принимать ни REAL не INT по modbus. в планах конечно буду разбираться с этим. но только INT все таки .. памяти на ПЛК жалко для REAL. openhab интересаня штука. я тут ее пытаюсь сдружить с Homekit (Siri) на IOS .. пока не получилось но полагаю это реально.
     
  6. Smith2007
    Регистрация:
    27.05.12
    Сообщения:
    1.265
    Благодарности:
    746

    Smith2007

    Живу здесь

    Smith2007

    Живу здесь

    Регистрация:
    27.05.12
    Сообщения:
    1.265
    Благодарности:
    746
    Адрес:
    Россия
    В modbus slave на контроллере я указал так же real и присваиваю ее значению температуры.

    openhab. cfg
    Код:
    modbus:tcp.slave2.connection=192.168.0.10:504
    modbus:tcp.slave2.id=1
    modbus:tcp.slave2.start=0
    modbus:tcp.slave2.length=17
    modbus:tcp.slave2.type=holding
    
    items
    Код:
    Number    Tgvs_1    { modbus="slave2:0" }
    Number    Tgvs_2    { modbus="slave2:1" }
    Number    Tgvs    "Т: ГВС [%.1f °C]"    <temperature>    (Heat_Engine,Group_Chart)   
    
    rules
    Код:
    import java.lang.Float
    import org.openhab.core.library.types.*
    import org.openhab.core.persistence.*
    import org.openhab.model.script.actions.*
    import java.util.Date
    import java.text.SimpleDateFormat
    
    rule "Tgvs" when
    System started or
    Item Tgvs_1 changed or
    Item Tgvs_2 changed
    then
    if ( Tgvs_1.state != Uninitialized && Tgvs_2.state != Uninitialized )
        {
        var n2 = (Tgvs_1.state as DecimalType).intValue
        var n1 = (Tgvs_2.state as DecimalType).intValue
        var temp = n1 * 256 * 256 + n2
        var result = Float::intBitsToFloat(temp)
        postUpdate( Tgvs, result)
        }
    end
    
     
  7. opyzhov
    Регистрация:
    03.10.11
    Сообщения:
    542
    Благодарности:
    140

    opyzhov

    Живу здесь

    opyzhov

    Живу здесь

    Регистрация:
    03.10.11
    Сообщения:
    542
    Благодарности:
    140
    Адрес:
    Санкт-Петербург
    @Smith2007, все получилось .. спасибо.
     
  8. opyzhov
    Регистрация:
    03.10.11
    Сообщения:
    542
    Благодарности:
    140

    opyzhov

    Живу здесь

    opyzhov

    Живу здесь

    Регистрация:
    03.10.11
    Сообщения:
    542
    Благодарности:
    140
    Адрес:
    Санкт-Петербург
    Еще возник вопрос. день поиска в инетах ничего не дал.
    Хочу передавать данные о температуре на https://narodmon.ru
    У них есть скрипт на bash Сам скрипт рабочий.
    Вот думаю как бы этому скрипту из openhab переменную передать.
    я так понял есть возможность запуска скрипта
    executeCommandLine("/tmp/narodmon.sh")
    но вот как добавить переменную чтобы запускался " /tmp/narodmon.sh 22.5"например непонятно
    может быть как то наоборот из bash скрипта получать данные из openhab
     
  9. Smith2007
    Регистрация:
    27.05.12
    Сообщения:
    1.265
    Благодарности:
    746

    Smith2007

    Живу здесь

    Smith2007

    Живу здесь

    Регистрация:
    27.05.12
    Сообщения:
    1.265
    Благодарности:
    746
    Адрес:
    Россия
    @opyzhov, формируйте строку вызова с нужным количеством параметров. В примере я в переменной cmd формирую. Только обратите внимание, что строка "/opt/openhab/cmd/protect.sh " заканчивается одним пробелом. Иначе сольется со значением.

    Код:
    // Отправка e-mail по сработке сигнализации
    rule "Protect" when
    Item PCode_0 changed from CLOSED to OPEN or
    Item PCode_1 changed from CLOSED to OPEN or
    Item PCode_2 changed from CLOSED to OPEN or
    Item PCode_3 changed from CLOSED to OPEN or
    Item PCode_4 changed from CLOSED to OPEN or
    Item PCode_5 changed from CLOSED to OPEN or
    Item PCode_6 changed from CLOSED to OPEN or
    Item PCode_7 changed from CLOSED to OPEN or
    Item PCode_8 changed from CLOSED to OPEN or
    Item PCode_9 changed from CLOSED to OPEN or
    Item PCode_10 changed from CLOSED to OPEN or
    Item PCode_11 changed from CLOSED to OPEN or
    Item PCode_12 changed from CLOSED to OPEN or
    Item PCode_13 changed from CLOSED to OPEN or
    Item Test_Protect changed from OFF to ON
    then
    var int PCode_id
    if (PCode_0.state == OPEN) {PCode_id = 0 }
    if (PCode_1.state == OPEN) {PCode_id = 1 }
    if (PCode_2.state == OPEN) {PCode_id = 2 }
    if (PCode_3.state == OPEN) {PCode_id = 3 }
    if (PCode_4.state == OPEN) {PCode_id = 4 }
    if (PCode_5.state == OPEN) {PCode_id = 5 }
    if (PCode_6.state == OPEN) {PCode_id = 6 }
    if (PCode_7.state == OPEN) {PCode_id = 7 }
    if (PCode_8.state == OPEN) {PCode_id = 8 }
    if (PCode_9.state == OPEN) {PCode_id = 9 }
    if (PCode_10.state == OPEN) {PCode_id = 10 }
    if (PCode_11.state == OPEN) {PCode_id = 11 }
    if (PCode_12.state == OPEN) {PCode_id = 12 }
    if (PCode_13.state == OPEN) {PCode_id = 13 }
    var String cmd = "/opt/openhab/cmd/protect.sh " + PCode_id
    executeCommandLine(cmd)
      Test_Protect.sendCommand(OFF)
      Test_Protect.postUpdate(OFF)
    end
    
    В скрипте protect. sh значение PCode_id будет первым параметром. Обратиться к нему можно как $1

    В Вашем случае вызов будет как
    var String cmd = "/tmp/narodmon.sh " + Item_Temperatura
     
  10. opyzhov
    Регистрация:
    03.10.11
    Сообщения:
    542
    Благодарности:
    140

    opyzhov

    Живу здесь

    opyzhov

    Живу здесь

    Регистрация:
    03.10.11
    Сообщения:
    542
    Благодарности:
    140
    Адрес:
    Санкт-Петербург
    У меня очередной вопрос :)

    есть устройство с GPS .. к нему обращение можно сделать по API
    я делаю (curl "http://api.name.......content=json")
    в ответ получаю строку типа
    (
    {"gps":{"eventId":60xxx,"latitude":59.xxxxxx,"longitude":30.xxxxxx,"eventTime":1443632038187}}
    )

    либо если
    content=xml
    (
    <?xml version="1.0" encoding="UTF-8"?><last>eventId="60xxx" eventTime="1443632038187" latitude="59.xxxxxx" longitude="30.xxxxxx"/></last>
    )
    как бы мне это перевести в переменные openhab. и параметры времени не очень понятны

    PS у кого нибудь есть опыт внедрения связки iPhone (owntracks) - openhab чтобы свои координаты в openhab отправлять. вроде в инете рецепты есть, но у меня не получается ничего.
     
    Последнее редактирование: 30.09.15
  11. Renat85
    Регистрация:
    04.07.13
    Сообщения:
    24
    Благодарности:
    2

    Renat85

    Участник

    Renat85

    Участник

    Регистрация:
    04.07.13
    Сообщения:
    24
    Благодарности:
    2
    Адрес:
    Москва
    Можете рассказать как настраивали?
     
  12. Felix3000
    Регистрация:
    30.09.15
    Сообщения:
    7
    Благодарности:
    0

    Felix3000

    Участник

    Felix3000

    Участник

    Регистрация:
    30.09.15
    Сообщения:
    7
    Благодарности:
    0
    Коллеги, помогите подружить Beckhoff с OpenHAB, пожалуйста. Второй день бьюсь, но пока как-то сложно.

    Сначала не мог настроить прием состояния переменных из PLC в OpenHAB. В конечном итоге сделал следующее и вроде заработало:

    openhab. cfg:
    Код:
    modbus:tcp.slave1.connection=192.168.0.108:502
    modbus:tcp.slave1.id=1
    modbus:tcp.slave1.start=0
    modbus:tcp.slave1.length=16
    modbus:tcp.slave1.type=holding
    demo. items:
    Код:
    Switch Beckhoff_Input0   (gModbus)   { modbus="slave1:0"}
    Switch Beckhoff_Input1   (gModbus)   { modbus="slave1:1"}
    В программе PLC:
    Код:
    VAR_GLOBAL (* DO NOT CHANGE THIS SHEET MANUALLY! *)
       PlcInVar_0   AT %QB128:   UINT;
       PlcInVar_1   AT %QB130:   UINT;
       PlcOutVar_0   AT %IB0:   UINT;
       PlcOutVar_1   AT %IB2:   UINT;
       Term_2_KL1104_1_Input   AT %IX0.0:   BOOL;
       Term_2_KL1104_2_Input   AT %IX0.1:   BOOL;
       Term_4_KL2408_1_Output   AT %QX0.0:   BOOL;
       Term_5_KL2408_2_Output   AT %QX1.1:   BOOL;
    END_VAR
    
    Term_4_KL2408_1_Output := Term_2_KL1104_2_Input;
    IF Term_2_KL1104_2_Input THEN PlcInVar_0 := 1; ELSE PlcInVar_0 := 0; END_IF
    IF Term_3_KL1104_1_Input  THEN PlcInVar_1 := 1; ELSE PlcInVar_1 := 0; END_IF
    IF PlcOutVar_0 > 0 THEN Term_5_KL2408_2_Output := TRUE; ELSE Term_5_KL2408_2_Output := FALSE; END_IF
    То есть я "вручную" слежу за состоянием входа Beckhoff и перекидываю состояние переменной, до которой получилось добраться по Modbus.

    При этом формально вроде работает - Switch'и в айтемах OpenHAB меняют состояние при нажатии на кнопки входов Beckhoff. Первая проблема в том, что меня не покидает ощущение некоторой неуклюжести - ну не может быть, чтобы так сложно приходилось читать состояние входа/выхода из PLC, наверняка же можно как-то напрямую увидеть состояние входа или выхода по ModBus без использования дополнительных переменных.

    Ну и вторая проблема, с которой не могу справиться - как научить OpenHab записывать в регистры Beckhoff. То есть куда-то я записать могу (Modbus Poll по команде "Write Single Register" по адресу 16384 сообщает "Response OK"), но не могу понять, как именно адресовать переменные Beckhoff из OpenHAB.

    Дополнительный сюрприз заключается в том, что "PlcOutVar_0 AT %IB0" меняет свое состояние вместе с "PlcInVar_0 AT %QB128", хотя я для этого ничего не делаю - похоже, они просто адресуют одну область памяти.

    В общем, налицо путаница с адресацией Modbus и вообще с пониманием логики этой интеграции. Прошу помощь зала!

    Вопросы:

    1. Как ПРАВИЛЬНО прописать openhab. cfg, чтобы я мог адресовать входы и выходы Beckhoff из OpenHAB? Нужно ли мне создать два разных слейва, один на чтение, второй на запись? Если нет - как правильно обратиться к слейву для чтения входа и для изменения выхода?

    2. Как ПРАВИЛЬНО читать состояние кнопок на цифровых входах Beckhoff из OpenHAB?

    3. Как ПРАВИЛЬНО поменять состояние цифрового выхода Beckhoff из OpenHAB?

    Буду признателен за советы и примеры конфигураций. Рою интернет третьи сутки - пока безрезультатно.
     
  13. Smith2007
    Регистрация:
    27.05.12
    Сообщения:
    1.265
    Благодарности:
    746

    Smith2007

    Живу здесь

    Smith2007

    Живу здесь

    Регистрация:
    27.05.12
    Сообщения:
    1.265
    Благодарности:
    746
    Адрес:
    Россия
    Первое, на что обратить внимание
    Код:
    modbus: tcp. slave1.connection=192.168.0.108:502
    modbus: tcp. slave1.id=1
    modbus: tcp. slave1.start=0
    modbus: tcp. slave1.length=16
    modbus: tcp. slave1.type=coil

    При holding Вы пытаетесь считать 17 регистров, каждый по 2 байта. А модбас слейве похоже столько нет. Coil читает побитно.
    Чтобы управлять логической переменной, нужно ее описать в слейве на контроллере и подключить к итему в опенхаб. Там вроде все просто.

    Попробуйте сначала так...
    Создайте слейв из двух байт. Затем считайте его значение в опенхаб используя тип coil понимая, что читаем побитно, затем как holding.
    При типе coil для чтения двух байт нужно мчитывать от 0 до 15, а при holding от 0 до 1
    Поэксперементируйте. Я поначалу как раз так же на этом долго тормозил
     
  14. Felix3000
    Регистрация:
    30.09.15
    Сообщения:
    7
    Благодарности:
    0

    Felix3000

    Участник

    Felix3000

    Участник

    Регистрация:
    30.09.15
    Сообщения:
    7
    Благодарности:
    0
    Проблема заключается в том, что при установке slave1.type = coil в логе OpenHAB есть только "ModbusSlave:Error Code = 2 - ModbusSlave error getting responce from slave", и соответственно ничего не читает, а когда ставлю holding - то читает хоть что-то. И добавление новых переменных в PLC эту проблему не решает - только что создал 16 разных BOOL на последовательных адресах с %QX128.0 до %QX129.7 - не помогло.

    Что характерно, программа Modbus Poll при попытке прочитать Coils тоже сообщает "Illegal address", а по команде "Read Holding Registers" исправно показывает UINT значения регистров, в которых ПОБИТНО меняются данные в зависимости от нажимания кнопок на входе PLC.

    Как бы так разобраться с адресацией регистров Modbus у Beckhoff?
     
  15. Smith2007
    Регистрация:
    27.05.12
    Сообщения:
    1.265
    Благодарности:
    746

    Smith2007

    Живу здесь

    Smith2007

    Живу здесь

    Регистрация:
    27.05.12
    Сообщения:
    1.265
    Благодарности:
    746
    Адрес:
    Россия
    Попробуйте перегрузить физически контроллер после перенастройки переменных слейва. И опенхаб рестрт.