Использование MegaD в openHAB
-
- Сообщения: 528
- Зарегистрирован: 09 авг 2016, 15:09
- Откуда: Сочи
Re: Использование MegaD в openHAB
И про postUpdate и sendCommand поясните - непонятно зачем такой оборот, по идее же sendCommand меняет статус.
Re: Использование MegaD в openHAB
Нет, не меняет. Он только отправляет команду во вне
-
- Сообщения: 528
- Зарегистрирован: 09 авг 2016, 15:09
- Откуда: Сочи
Re: Использование MegaD в openHAB
Это особенность биндинга? Чего-то я растерялся, написал правило для проверки.
sendCommand - меняет state Айтема. Или я чего-то недопонял.
Код: Выделить всё
rule "rule name"
when
Item MegaTestString received update
then
if (MegaTestString.state=="CMD"){
MegaTestSwitch.sendCommand(ON)
Thread::sleep(100)
//тут state всегда становится равным присланной команде ON, даже если был OFF
logWarn (" ----> MegaTestSwitch", MegaTestSwitch.state.toString)
}
if (MegaTestString.state=="POST"){
MegaTestSwitch.postUpdate(OFF)
Thread::sleep(100)
//тут state всегда становится равным присланной команде (OFF)
logWarn (" ----> MegaTestSwitch", MegaTestSwitch.state.toString)
}
end
Re: Использование MegaD в openHAB
А в оболочке при этом?
-
- Сообщения: 528
- Зарегистрирован: 09 авг 2016, 15:09
- Откуда: Сочи
Re: Использование MegaD в openHAB
Сдаюсь нужно посмотреть. Возможно это атавизм 1.8 версии
Re: Использование MegaD в openHAB
Может кто знает как преобразовать спецсимвол двоеточие?
Отпавляю http=">[ON:GET:http://172.16.1.20/sec/?pt=9&cmd=9:1]
или POST пофиг
log:
Executing url 'http://172.16.1.20/sec/?pt=9&cmd=9' via method GET
Executing url 'http://172.16.1.20/sec/?pt=9&cmd=9' via method POST, with body content '1'
В OH1.8 всё работало. Как перешел на OH2 перестало.
Отпавляю http=">[ON:GET:http://172.16.1.20/sec/?pt=9&cmd=9:1]
или POST пофиг
log:
Executing url 'http://172.16.1.20/sec/?pt=9&cmd=9' via method GET
Executing url 'http://172.16.1.20/sec/?pt=9&cmd=9' via method POST, with body content '1'
В OH1.8 всё работало. Как перешел на OH2 перестало.
Re: Использование MegaD в openHAB
Может быть это поможет? https://meyerweb.com/eric/tools/dencoder/kiltman писал(а): ↑24 фев 2018, 01:06Может кто знает как преобразовать спецсимвол двоеточие?
Отпавляю http=">[ON:GET:http://172.16.1.20/sec/?pt=9&cmd=9:1]
или POST пофиг
log:
Executing url 'http://172.16.1.20/sec/?pt=9&cmd=9' via method GET
Executing url 'http://172.16.1.20/sec/?pt=9&cmd=9' via method POST, with body content '1'
В OH1.8 всё работало. Как перешел на OH2 перестало.
Код: Выделить всё
9%3A1
Re: Использование MegaD в openHAB
Настраиваю биндинг и слегка подзабыл - во второй версии опенхаба надо в addons.cfg что-то прописывать? Почему-то не биндинг не видит переключение портов когда из-под интерфейса меги переключаешь, хотя на меге все настроено и из-под опенхаба он переключает.
Код: Выделить всё
Bridge megad:bridge:shields [port=8989]
{
Thing device Bedroom_LampOnWall_Right [hostname="192.168.48.20", port="0", password="sec", refresh="0"]
Thing device Bedroom_LampOnWall_Left [hostname="192.168.48.20", port="1", password="sec", refresh="0"]
Thing device Bedroom_TV [hostname="192.168.48.20", port="2", password="sec", refresh="0"]
Thing device Bedroom_Curtains_Open [hostname="192.168.48.20", port="3", password="sec", refresh="0"]
Thing device Bedroom_Curtains_Close [hostname="192.168.48.20", port="4", password="sec", refresh="0"]
Thing device Loggia [hostname="192.168.48.20", port="5", password="sec", refresh="0"]
}
Код: Выделить всё
Switch Bedroom_LampOnWall_Right "Бра в спальне, справа [%s]" <light> (Lamp) {channel ="megad:device:shields:Bedroom_LampOnWall_Right:out"}
Switch Bedroom_LampOnWall_Left "Бра в спальне, слева [%s]" <light> (Lamp) {channel ="megad:device:shields:Bedroom_LampOnWall_Left:out"}
-
- Сообщения: 528
- Зарегистрирован: 09 авг 2016, 15:09
- Откуда: Сочи
Re: Использование MegaD в openHAB
Прошу ткнуть носом в как получить данные с BME280.
Это 1 Thing с 3мя channels?
Или это 3 Thing по одному Channel?
Не нашел про i2c param - что это?
Refresh у меня почему-то не меняется из PaperUI, вернее цифра то меняется, но по факту в логах время обновления не меняется.
Это 1 Thing с 3мя channels?
Или это 3 Thing по одному Channel?
Не нашел про i2c param - что это?
Refresh у меня почему-то не меняется из PaperUI, вернее цифра то меняется, но по факту в логах время обновления не меняется.
Re: Использование MegaD в openHAB
Можно разными способами, например даже так, но надо чтобы http биндинг был установлен:
Код: Выделить всё
Number Shield3_Top_P0_BMx280_Temp "Темп. на улице [%.2f °C]" <temperature> (Pipes) { http="<[http://192.168.48.30/sec/?pt=0&scl=1&i2c_dev=bmx280&i2c_par=1:60000:REGEX((.*?))]" }
Number Shield3_Top_P0_BMx280_Hum "Влажность на улице [%.2f %%]" <humidity> { http="<[http://192.168.48.30/sec/?pt=0&scl=1&i2c_dev=bmx280&i2c_par=2:60000:REGEX((.*?))]" }
Number Shield3_Top_P0_BMx280_Press "Атм. давление [%.2f мм рт. ст.]" <humidity> { http="<[http://192.168.48.30/sec/?pt=0&scl=1&i2c_dev=bmx280:60000:REGEX((.*?))]" }
-
- Сообщения: 528
- Зарегистрирован: 09 авг 2016, 15:09
- Откуда: Сочи
Re: Использование MegaD в openHAB
Спасибо, а как это же сделать через MegaD binding?
--
Разобрался, работает темп и давление, а третий параметр Влажность не читает:
Код: Выделить всё
Things:
Thing device mega1-p30 [hostname="192.168.1.11", password="sec", port="30", refresh="5", scl="31", i2c_dev="bmx280"]
Items:
Number Mega1_p30_t "BME280 temp" { channel = "megad:device:srv:mega1-p30:temp" }
Number Mega1_p30_h "BME280 hum" { channel = "megad:device:srv:mega1-p30:humidity" }
Number Mega1_p30_p "BME280 pressure" { channel = "megad:device:srv:mega1-p30:i2c" }
И еще вопрос - как отловить длительное нажатие кнопки через биндинг?
--
Как передать через биндинг команду
?Дополнительная команда "d" (default). Если сервер на факт срабатывания входа, возвращает 'd', то это дает сигнал устройству выполнить сценарий по умолчанию (Act). Эта команда дублиует поведение контроллера в случае установленного флажка Act, но в этом случае сам сервер определяет когда выполнять сценарий по умолчанию.
Re: Использование MegaD в openHAB
Никак не могу настроить - переключаю выход на меге - опенхаб не видит...empenoso писал(а): ↑24 фев 2018, 17:56Настраиваю биндинг и слегка подзабыл - во второй версии опенхаба надо в addons.cfg что-то прописывать? Почему-то не биндинг не видит переключение портов когда из-под интерфейса меги переключаешь, хотя на меге все настроено и из-под опенхаба он переключает.Код: Выделить всё
Bridge megad:bridge:shields [port=8989] { Thing device Bedroom_LampOnWall_Right [hostname="192.168.48.20", port="0", password="sec", refresh="0"] Thing device Bedroom_LampOnWall_Left [hostname="192.168.48.20", port="1", password="sec", refresh="0"] Thing device Bedroom_TV [hostname="192.168.48.20", port="2", password="sec", refresh="0"] Thing device Bedroom_Curtains_Open [hostname="192.168.48.20", port="3", password="sec", refresh="0"] Thing device Bedroom_Curtains_Close [hostname="192.168.48.20", port="4", password="sec", refresh="0"] Thing device Loggia [hostname="192.168.48.20", port="5", password="sec", refresh="0"] }
Код: Выделить всё
Switch Bedroom_LampOnWall_Right "Бра в спальне, справа [%s]" <light> (Lamp) {channel ="megad:device:shields:Bedroom_LampOnWall_Right:out"} Switch Bedroom_LampOnWall_Left "Бра в спальне, слева [%s]" <light> (Lamp) {channel ="megad:device:shields:Bedroom_LampOnWall_Left:out"}
Ошибок в логе вроде как нет:
Код: Выделить всё
2018-02-26 22:27:22.052 [DEBUG] [ing.megad.handler.MegaDBridgeHandler] - Polling job called
2018-02-26 22:27:22.055 [DEBUG] [ing.megad.handler.MegaDBridgeHandler] - MegaD Server open port 8090
2018-02-26 22:27:22.058 [hingStatusInfoChangedEvent] - 'megad:device:shields:Kitchen_Lamp' changed from OFFLINE (BRIDGE_OFFLINE) to OFFLINE
2018-02-26 22:27:22.059 [DEBUG] [b.binding.megad.handler.MegaDHandler] - Thing Handler for Kitchen_Lamp stop
2018-02-26 22:27:22.061 [DEBUG] [b.binding.megad.handler.MegaDHandler] - unregister
2018-02-26 22:27:22.061 [me.event.ThingUpdatedEvent] - Thing 'megad:bridge:shields' has been updated.
2018-02-26 22:27:22.064 [hingStatusInfoChangedEvent] - 'megad:device:shields:Kitchen_Lamp' changed from OFFLINE to ONLINE
2018-02-26 22:27:22.066 [DEBUG] [b.binding.megad.handler.MegaDHandler] - Thing Handler for Kitchen_Lamp started
2018-02-26 22:27:22.067 [DEBUG] [ing.megad.handler.MegaDBridgeHandler] - thingHandler for thing: '192.168.48.20.13'
2018-02-26 22:27:22.070 [hingStatusInfoChangedEvent] - 'megad:device:shields:Kitchen_Lamp' changed from ONLINE to OFFLINE
2018-02-26 22:27:22.071 [DEBUG] [ing.megad.handler.MegaDBridgeHandler] - register thingHandler for thing: org.openhab.binding.megad.handler.MegaDHandler@117eb2c
2018-02-26 22:27:22.074 [DEBUG] [b.binding.megad.handler.MegaDHandler] - refresh: 0
2018-02-26 22:27:22.075 [hingStatusInfoChangedEvent] - 'megad:device:shields:Kitchen_Lamp' changed from OFFLINE to ONLINE
Re: Использование MegaD в openHAB
Когда переключаете выход на Меге она ничего не шлет серверу. Состояние выходов можно получить/обновить используя параметр refresh в .things, у Вас стоит 0 т.е. никогда. refresh="10" - читаем состояние порта раз в 10 секempenoso писал(а): ↑26 фев 2018, 21:32Настраиваю биндинг и слегка подзабыл - во второй версии опенхаба надо в addons.cfg что-то прописывать? Почему-то не биндинг не видит переключение портов когда из-под интерфейса меги переключаешь, хотя на меге все настроено и из-под опенхаба он переключает.
...
Никак не могу настроить - переключаю выход на меге - опенхаб не видит...
..
С уважением, Игорь
Re: Использование MegaD в openHAB
Уважаемый Petros, спасибо Вам за ваш труд!
Проект MegaD-2561 развивается стремительно, и я прекрасно понимаю, что у Вас может просто не хватать времени реализовывать новые типы датчиков и модулей расширения, особенно если Вы сами с ними не работаете.
Основное преимущество MegaD-биндинга, на мой взгляд в том, что оно имеет свой HTTP сервер, позволяющий реагировать на события по портам типа IN, т.к. считывать состояния датчиков, отправлять ИК-команды, писать текст на дисплей, читать и изменять состояние OUT/PWM портов можно и при помощи "родного" HTTP-биндинга.
Так вот мое предложение в том, чтобы реализовать DummyIN-Item типа String, который просто хранил бы все что приходит на сервер после ?pt=XX, где XX-номер порта. На refresh можно просто сохранять ответ на запрос http://MEGA_IP/PAS/?pt=XX&cmd=get . В идеале, конечно, это чтобы можно было бы указывать строку запроса состояния порта (то, что после ?pt=XX&): cmd=get / cmd=list / scl=4&i2c_dev=ads1115&i2c_par=0
Возможный синтаксис былы таким:
В настоящее время это позволило бы работать с платами расширения ADS1115, PCA9685(опрос состояния портов), а также, и это самое главное, т.к. сейчас вообще не понятно как его привязать к OH, MCP23008/MCP23017(опрос состояния портов и реакция на события по портам типа IN).
Проект MegaD-2561 развивается стремительно, и я прекрасно понимаю, что у Вас может просто не хватать времени реализовывать новые типы датчиков и модулей расширения, особенно если Вы сами с ними не работаете.
Основное преимущество MegaD-биндинга, на мой взгляд в том, что оно имеет свой HTTP сервер, позволяющий реагировать на события по портам типа IN, т.к. считывать состояния датчиков, отправлять ИК-команды, писать текст на дисплей, читать и изменять состояние OUT/PWM портов можно и при помощи "родного" HTTP-биндинга.
Так вот мое предложение в том, чтобы реализовать DummyIN-Item типа String, который просто хранил бы все что приходит на сервер после ?pt=XX, где XX-номер порта. На refresh можно просто сохранять ответ на запрос http://MEGA_IP/PAS/?pt=XX&cmd=get . В идеале, конечно, это чтобы можно было бы указывать строку запроса состояния порта (то, что после ?pt=XX&): cmd=get / cmd=list / scl=4&i2c_dev=ads1115&i2c_par=0
Возможный синтаксис былы таким:
Код: Выделить всё
.things
Bridge megad:bridge:incomingserver [port=8585]
{
Thing device ADS1115_port [hostname="172.16.7.40", port="5", password="sec", request="scl=4&i2c_dev=ads1115&i2c_par=0", refresh="15"]
Thing device MCP23017_port [hostname="172.16.7.40", port="7", password="sec", request="cmd=get", refresh="15"]
}
.items
String ADS1115_asString "Значение портов ADS1115: [%s]" { channel = "megad:device:incomingserver:ADS1115_port:dummy_in" }
String MCP23017_asString "Значение портов MCP23017: [%s]" { channel = "megad:device:incomingserver:MCP23017_port:dummy_in" }
С уважением, Игорь
Re: Использование MegaD в openHAB
Спасибо, все получилось.
У диммера ведь еще есть состояние On|Off. А как его прописать в items - а то кнопка выключить/включить всё - не работает для этих элементов группы..
У диммера ведь еще есть состояние On|Off. А как его прописать в items - а то кнопка выключить/включить всё - не работает для этих элементов группы.
Dimmer Percentage value for dimmers OnOff, IncreaseDecrease, Percent
Код: Выделить всё
Dimmer Bedroom_Lamps "Лампы в спальне [%d %%]" <bedroom> (Lamp, Bedroom) {channel ="megad:device:shields:Bedroom_Lamps:dimmer"}
Re: Использование MegaD в openHAB
Написал правило для штор:
Еще одно адаптировал из инета (но оно больше до 2 версии заточено, потому что % закрытия сразу до конца отображает, а если стоп нажать - то правильный % уже только после нажатия на стоп):
Но думаю на обычный switch переделать с двумя кнопками - полностью открыто и закрыто - а то как-то не особо понятно как пользоваться выглядит. Тем более у опенхаб шторы только вверх/вниз нарисованы, а у меня ведь обычная штора - вправо/влево.
Код: Выделить всё
Rollershutter Bedroom_Curtains "Штора в спальне [%d %%]" <blinds> (Bedroom)
Код: Выделить всё
rule "Bedroom_Curtains UP"
when
Item Bedroom_Curtains received command UP //открыть
then
postUpdate(Bedroom_Curtains, 100)
publish("mosquitto","megad/20/cmd","4=1")
Thread::sleep(8500) //половина
postUpdate(Bedroom_Curtains, 50)
Thread::sleep(8500) //17000 миллисекунд в секундах
publish("mosquitto","megad/20/cmd","4=0")
postUpdate(Bedroom_Curtains, 0)
end
rule "Bedroom_Curtains DOWN"
when
Item Bedroom_Curtains received command DOWN //закрыть
then
postUpdate(Bedroom_Curtains, 0)
publish("mosquitto","megad/20/cmd","3=1")
Thread::sleep(8500) //половина
postUpdate(Bedroom_Curtains, 50)
Thread::sleep(8500) //17000 миллисекунд в секундах
publish("mosquitto","megad/20/cmd","3=0")
postUpdate(Bedroom_Curtains, 100)
end
rule "Bedroom_Curtains STOP"
when
Item Bedroom_Curtains received command STOP //стоп
then
publish("mosquitto","megad/20/cmd","3=0")
publish("mosquitto","megad/20/cmd","4=0")
end
Код: Выделить всё
//variables to store current state of Bedroom_Curtains https://github.com/openhab/openhab1-addons/wiki/Rollershutter-Bindings
var Number Bedroom_CurtainsOldState = 50
var Number Bedroom_CurtainsLastUp = 0
var Number Bedroom_CurtainsLastDown = 0
//URL to be called as HTPP GET. Up and Down start moving shutting either until completely moved or until Stop called.
var String Bedroom_CurtainsDownActionUrl = "http://192.168.48.20/sec/?pt=4&cmd=3:1"
var String Bedroom_CurtainsUpActionUrl = "http://192.168.48.20/sec/?pt=4&cmd=4:1"
var String Bedroom_CurtainsStopActionUrlDown = "http://192.168.48.20/sec/?pt=4&cmd=3:0"
var String Bedroom_CurtainsStopActionUrlUp = "http://192.168.48.20/sec/?pt=4&cmd=4:0"
//time in ms needed to completely open and close Bedroom_Curtains, respectively
var Number Bedroom_Curtains_FULL_UP_TIME = 17000
var Number Bedroom_Curtains_FULL_DOWN_TIME = 17000
rule "Bedroom_Curtains Save Old State Rule"
when
Item Bedroom_Curtains changed
then
Bedroom_CurtainsOldState = previousState as DecimalType
end
rule "Bedroom_Curtains Control Rule"
when
Item Bedroom_Curtains received command
then
if(receivedCommand !== null){
var Number upTime = now.millis - Bedroom_CurtainsLastUp
var Number downTime = now.millis - Bedroom_CurtainsLastDown
switch(receivedCommand.toString.upperCase) {
case "STOP" :{
var Number newState = -1
if(upTime < downTime && upTime < Bedroom_Curtains_FULL_UP_TIME) {
//last action was up and still going UP.
//0% is open!
var Number percentMoved = ((upTime) * 100 / Bedroom_Curtains_FULL_UP_TIME).intValue
newState = Bedroom_CurtainsOldState - percentMoved
logInfo("Bedroom_CurtainsOldState: " + Bedroom_CurtainsOldState + " UP: " + percentMoved + "% in " + upTime/1000 + "sec. Now: " + newState+ "%" )
} else if(upTime > downTime && downTime < Bedroom_Curtains_FULL_DOWN_TIME) {
//last action was down and still going DOWN.
//100% is closed!
var Number percentMoved = ((downTime) * 100 / Bedroom_Curtains_FULL_DOWN_TIME).intValue
newState = Bedroom_CurtainsOldState + percentMoved
logInfo("Bedroom_CurtainsOldState: " + Bedroom_CurtainsOldState + "% DOWN: " + percentMoved + "% in " + downTime/1000 + "sec. Now: " + newState+ "%" )
}
if(newState > 0 && newState < 100) {
postUpdate(Bedroom_Curtains, newState)
if(Bedroom_CurtainsStopActionUrlDown !== null){
sendHttpGetRequest(Bedroom_CurtainsStopActionUrlDown)
sendHttpGetRequest(Bedroom_CurtainsStopActionUrlUp)
}
}
}
case "UP" : {
if(upTime < Bedroom_Curtains_FULL_UP_TIME) {
//still going up. ignore.
} else {
Bedroom_CurtainsLastUp = now.millis
if(Bedroom_CurtainsUpActionUrl !== null){
sendHttpGetRequest(Bedroom_CurtainsUpActionUrl)
}
}
}
case "DOWN":{
if(downTime < Bedroom_Curtains_FULL_DOWN_TIME) {
//still going up. ignore.
} else {
Bedroom_CurtainsLastDown = now.millis
if(Bedroom_CurtainsDownActionUrl !== null){
sendHttpGetRequest(Bedroom_CurtainsDownActionUrl)
}
}
}
}
}
end
-
- Администратор
- Сообщения: 2188
- Зарегистрирован: 29 май 2015, 21:23
- Откуда: Екатеринбург, Нижний Тагил
Re: Использование MegaD в openHAB
Я в этой теме где-то выкладывал архив со своей конфигурацией ОпенХАБа, там были все мои иконки, в том числе и штор (и гардин) разной степени открытия. И вообще иконок я много подобрал-доделал, но под стиль версии 1.х.
Re: Использование MegaD в openHAB
Спасибо посмотрю.d.v.ermakov писал(а): ↑02 мар 2018, 11:55Я в этой теме где-то выкладывал архив со своей конфигурацией ОпенХАБа, там были все мои иконки, в том числе и штор (и гардин) разной степени открытия. И вообще иконок я много подобрал-доделал, но под стиль версии 1.х.
Re: Использование MegaD в openHAB
Написал правило для электрокранов на воду:
Все понятно из интерфейса и работает.
Код: Выделить всё
Switch Toilet_WaterLeak "Перекрытие воды [MAP(water.map):%s]" <faucet> (Service, Water_Sensor)
Код: Выделить всё
ON=перекрыта
OFF=течет
NULL=нет данных
-=нет данных
Код: Выделить всё
rule "Toilet_WaterLeak"
when
Item Toilet_WaterLeak received command
then
switch(receivedCommand) {
case OFF: { //открыть
sendHttpGetRequest("http://192.168.48.20/sec/?pt=8&cmd=8:0")
Thread::sleep(100)
sendHttpGetRequest("http://192.168.48.20/sec/?pt=9&cmd=9:0")
Thread::sleep(100)
sendHttpGetRequest("http://192.168.48.20/sec/?pt=8&cmd=8:1")
Thread::sleep(17000) //17000 миллисекунд в секундах
sendHttpGetRequest("http://192.168.48.20/sec/?pt=8&cmd=8:0")
}
case ON: { //закрыть
sendHttpGetRequest("http://192.168.48.20/sec/?pt=8&cmd=8:0")
Thread::sleep(100)
sendHttpGetRequest("http://192.168.48.20/sec/?pt=9&cmd=9:0")
Thread::sleep(100)
sendHttpGetRequest("http://192.168.48.20/sec/?pt=9&cmd=9:1")
Thread::sleep(17000) //17000 миллисекунд в секундах
sendHttpGetRequest("http://192.168.48.20/sec/?pt=9&cmd=9:0")
}
}
end