РЕКЛАМА НА ФОРУМХАУС Да, я приблизительно так же понимаю. Поэтому хотелось бы, чтоб кто-то из рускоязычных участников проекта принял участие здесь или где нибудь на специализированном форуме или в рамках какого-то блога. Что бы можно было напрямую задать вопросы, которые в документации не освещены либо упоминаются вскользь. Например, в каких случаях и к каким итемам правильно применять postupdate(), а когда sendcommand(). В примерах rules-ов на ВИКИ, пишут кто как. Крупными мазками все понятно, но в деталях в развивающейся системе часто не понять, где баг, а где "фича". P. S. В блогах сети и на Хабре было несколько статей, но они тянут в лучшем случае на пересказ, как их авторы домыслили исходный текст оригинальной доки.
Помогите! Не получается использовать отправку оповещений на телефон через my. openHAB Сервис my. openHAB у меня подключен, т. е. через интернет я могу смотреть openHAB и оповещения Online/Offline приходят В инструкции сказано что можно в Rules настроить произвольные оповещения: Однако когда я в rules указываю эту инструкцию, то в дизайнере получаю сообщение об ошибке:
Друзья..подскажите как правильно мне прописать настройку Получаю по modbus/tcp параметры температуры от ПЛК в формате WORD. как мне эти данные преобразовать чтобы они нормально отображались. тобишь куда прописать Tulica=Tulica_mem/10
Вы получаете два слова или 4 байта. Привести их к значению real можно при помощи rule. Вечером я Вам свой rule скину, там ни чего сложного. Зы. А почему вы получаете температуру в формате word? Если формат real то это два ворда.
@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 .. пока не получилось но полагаю это реально.
В 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
Еще возник вопрос. день поиска в инетах ничего не дал. Хочу передавать данные о температуре на https://narodmon.ru У них есть скрипт на bash Сам скрипт рабочий. Вот думаю как бы этому скрипту из openhab переменную передать. я так понял есть возможность запуска скрипта executeCommandLine("/tmp/narodmon.sh") но вот как добавить переменную чтобы запускался " /tmp/narodmon.sh 22.5"например непонятно может быть как то наоборот из bash скрипта получать данные из openhab
@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
У меня очередной вопрос есть устройство с 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 отправлять. вроде в инете рецепты есть, но у меня не получается ничего.
Коллеги, помогите подружить 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? Буду признателен за советы и примеры конфигураций. Рою интернет третьи сутки - пока безрезультатно.
Первое, на что обратить внимание Код: 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 Поэксперементируйте. Я поначалу как раз так же на этом долго тормозил
Проблема заключается в том, что при установке 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?