Использование MegaD в openHAB

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
Petros
Сообщения: 900
Зарегистрирован: 21 авг 2012, 22:09
Откуда: Москва

Использование MegaD в openHAB

Сообщение Petros » 25 сен 2015, 18:42

Частые вопросы об использовании MegaD в OpenHAB

как включить отладку:

Код: Выделить всё

karaf console:

log:set DEBUG org.openhab.binding.megad

отключить:

log:set ERROR org.openhab.binding.megad
Т.к. ветка данного форума не подразумевает подробные инструкции по настройке и использованию самого Openhab вопросы и ответы будут касаться работы именно с Мегадевайсом.
Но основные ссылки на ресурсы будут указаны.

1. Как установить OpenHAB
  • Все инструкции по скачиванию, установки и запуску тут
  • Общие настройки тут
  • Что такое Items тут
  • Что такое Sitemaps тут
  • Описание что такое правила(сценарии) тут
  • На этой странице можно узнать все возможные команды для работы с архивными данными
2. Как связать OpenHAB 1.XX и Мегадевайс
  • Для работы с Мегадевайсом был создан специальный плагин(binding)
  1. Скачать его можно по ссылке
  2. Плагин помещается в папку addons
    Снимок экрана 2016-05-08 в 2.28.51.png
    Снимок экрана 2016-05-08 в 2.28.51.png (107.17 КБ) 41594 просмотра
    в логах при этом должна появиться строчка

    Код: Выделить всё

    Jun 20 11:12:10 raspberrypi start.sh[540]: 2016-06-20 11:12:10.840 [INFO ] [.service.AbstractActiveService] - MegaDevice Refresh Service has been started
    Jun 20 11:12:10 raspberrypi start.sh[540]: 2016-06-20 11:12:10.874 [INFO ] [o.o.b.m.i.MegadeviceHttpServer] - Starting MegaHttpServer at 8585 port
  3. Номер порта можно изменить добавив в конец файла

    Код: Выделить всё

     {openhab_home}/configurations/openhab.cfg
    строки:

    Код: Выделить всё

    ################################ Megadevice Binding #######################################
    #
    # IP address of a Http port for megadevice defaut value is 8989
    megadevice:httpserverport=8989
    Тут мы изменили порт на 8989
3. Как настроить Мегадевайс
  • В настройках Мегадевайса указываем IP и порт из конфига OpenHAB сервера
    поле SRV. Порт указывается через двоеточие
    megad-conf4.gif
    megad-conf4.gif (7.13 КБ) 41594 просмотра
    пример поля SRV в Мегадевайсе:

    Код: Выделить всё

    192.168.0.14:8989
4. Как настроить порты Мегадевайса
  1. В случае, если порт выбран как вход (IN)
    megad-port-cfg4.gif
    megad-port-cfg4.gif (5.93 КБ) 41594 просмотра
    То мы должны выставить режим P&R или отметить галочку справа от списка режимов
    megad-port-in1.gif
    megad-port-in1.gif (7.25 КБ) 41594 просмотра
  2. Если выбран любой другой режим - ничего делать не нужно
5.Как проверить, что на сервер приходят команды в режиме (IN)
  • Скачать тестовый файл
    MegaTest.item.zip
    (230 байт) 1026 скачиваний
    и положить его в папку

    Код: Выделить всё

     {openhab_home}/configurations/items
    При нажатии на кнопку в логе должно появиться сообщение при нажатии(замыкании) и отпускании(размыкании)

    Код: Выделить всё

    22:29:18.683 [INFO ] [runtime.busevents             :26   ] - MegaTest state updated to ON
    22:29:18.683 [INFO ] [runtime.busevents             :26   ] - MegaTest state updated to OFF

6. Как соединить мегу и OpenHAB
  • Для этого требуется скачать openHAB Designer
  • Создать необходимые файлы:
    1. mega.items общий принцип:

      Код: Выделить всё

       {megadevice="пароль на мегу : айпишник меги : номер порта меги: интервал опроса"}
      интервал можно не задавать. Тогда опроса порта происходить не будет.
      пример:

      Код: Выделить всё

      Switch MegaTest         "Зал - бра над диваном [%s]"       {megadevice="sec:localhost:3:50"} 
      Список возможных вариантов item для данного биндига:
      1. Для получения значений АЦП используем Number
        Пример item:

        Код: Выделить всё

        Number ADCPort15 "Значение АЦП порт 15 мегадевайса 1: [%d]" {megadevice="sec:192.168.0.14:15"}
        
      2. Для получения температуры используем Number:

        Код: Выделить всё

        Number TempDHT "State: [%f]" {megadevice="sec:192.168.0.17:0,dht11,t:30"}
        т.е. после айпи адреса указываем через запятую порт, тип датчика и желаемый ответ

        t- температура
        h- влажность. (для 1w этого параметра нет)
        типы датчиков, выставляются аналогично меги
        dht11, dht22, 1w

        Также для dht11, dht22 есть параметр "r".

        Данные приходят не распарсенные в текстовом виде через "/" в любом случае, не зависимо от прошивки, далее можно самостоятельно получить нужное значение. Сделал это для того, чтобы можно было избежать проблемы двойного опроса датчика и как следствие 00.0 вместо корректного отображения температуры и влажности.

        Тип данных - String
        item:

        Код: Выделить всё

        String MegaTempHumParse         "Parse string [%s]"        {megadevice="sec:192.168.0.17:3,dht,r:30"}
      3. Чтобы получить температуру меги

        Код: Выделить всё

        Number MegaDeviceOneTemp "Mega 1 temperature" {megadevice="sec:192.168.0.17:tget:30"}
      4. С помощью параметра at, устройство сообщает на сервер о превышении порога температуры встроенного сенсора

        Пример item:

        Код: Выделить всё

        Number AlarmTempValue "Превышение температуры мегадевайса 1: [%d]" {megadevice="sec:192.168.0.14:at"}
      5. Диммер - Dimmer. Работает в процентах от 0 до 100.

        Код: Выделить всё

        Dimmer DimmedLight  "Dimmer [%d %%]"    {megadevice="sec:192.168.0.14:10"}
      6. Простейший выключатель:

        Код: Выделить всё

        Switch MegaDeviceButton_kitchen     "Kitchen button" {megadevice="sec:192.168.0.17:0"}
Продолжение следует...

[*]Сигнал старта меги:

Код: Выделить всё

Number Start    "Start flag: [%d]" { megadevice="sec:localhost:st" }

Для версии Openhab2

биндинг можно скачать по ссылке

Есть два варианта действий.

1)Через веб-интерфейс PaperUI
  1. Configuration > System > Item Linking
    проверяем, что simple mode выключен
    Save
  2. Inbox -> + -> MegaD Binding
    Bridge Megad incoming server adapter
    Указываем номер порта, на который будут поступать входящие сообщения
    OK
  3. Inbox -> + -> MegaD Binding
    MegaD Binding Thing - переименовываем как нам удобно, вместо случайных цифр можно дать осмысленное название
    Bridge Selection - > Bridge Megad incoming server adapter - megad:bridge:megadeviceincoming - выбираем наш бридж из предыдущего шага
    Configuration Parameters - адрес, порт, время опроса
    OK
  4. Configuration > Things
    выбираем наш только что созданный MegaD Binding Thing
    выбираем нужный канал данных
    создаем при необходимости item
2)Создавая файлы конфигурации

Где они находятся итд можно найти в описании выше, 1 версии

конфигурация полный список:
  1. .things:

    Код: Выделить всё

    Bridge megad:tcp:incoming "Мост для входящих на порту 8989" [port=8989]{
    
    	Bridge device device15 "Мега 10.15" [hostname="localhost", password="sec"]{  // сначала определяем мегу целиком. 
    	
    			Thing standard dianaHeat "Батареи у Дианы" [port="26", refresh="0"] //так теперь выглядят стандартные каналы
    			
    			Thing i2c secondFloorBraSFLamp1 "i2c" [port="9", refresh="30"]  // отдельный Thing для i2c устройств типа датчиков (поддерживаются почти все)
    			
    			Bridge extenderport port28 "Extender at port 28 mega 19" [port="28", int="27", refresh="30"]{ // расширители - тут указываем порты меги (обновление будет работать на все порты одновременно)
    				Thing extender ext1 "ext port 1" [extport="0"] 	// тут порт расширителя
    			}
    			
    		Bridge	1wirebus onewirebusbridge "OW bridge" [port="20", refresh="30"]{ // режим 1w-bus тут указываем порт и интервал опроса
    			Thing 1wireaddress owtemp "OW-temp" [address="85a56a070000"] // тут адрес датчика
    		}
    	}
    }
    
.Items:

Код: Выделить всё



Number mansardGas "Gas [%.3f]"     {channel="megad:i2c:incoming:device15:secondFloorBraSFLamp1:gas"} //I2C

Number mansardback "Темп. воды в трубе мансарды [%.3f °C]"  <temperature> (Boiler, Temperature) 			    {channel="megad:1wireaddress:incoming:device15:onewirebusbridge:owtemp:1wtemp"} //1-w bridge
//extenders
Switch ext1 "ex1in" {channel="megad:extender:incoming:device15:port28:ext1:extin"}
Switch ext2 "ex1o" {channel="megad:extender:incoming:device15:port28:ext1:extout"}

Для того, чтобы проверить достаточно скопировать целиком все строки в нужные файлы
все параметры появятся в PaperUI -> control

Первое сообщение от tim06ka:
Доброго времени суток!
Приходилось ли кому-нибудь интегрировать мегу в опенхаб?
С управлением устройством из оперхаба я справился:

Код: Выделить всё

Switch LCab "Люстра" (GCabinet, Lights) { http=">[ON:GET:http://192.168.1.51/tac/?pt=9&cmd=9:1] >[OFF:GET:http://192.168.1.51/tac/?pt=9&cmd=9:0]" }
Проблема с получением событий от устройства в опенхабе.
Может у кого-нибудь есть наработки по данному вопросу?

Selecta
Сообщения: 33
Зарегистрирован: 26 сен 2015, 12:38

Re: Использование MegaD в openHAB

Сообщение Selecta » 26 сен 2015, 12:44

О, как раз пытаюсь прикрутить свежеполученную мегу к OpenHAB. А как ты делаешь диммер? Не могу сообразить команду.

Было бы вообще разумно думаю сделать binding под Мегадевайс для OpenHab. Пользователей у него всяко больше, чем у Majordomo, а при конкурентной цене девайса продажи на западе вполне могут хорошо идти.

tim06ka
Сообщения: 3
Зарегистрирован: 25 сен 2015, 18:38

Re: Использование MegaD в openHAB

Сообщение tim06ka » 26 сен 2015, 14:33

Ну наверное придется написать байдинг, правда это не совсем тривиално походу будет.
Я вчера зачекаутил openHAB, убил пол часа чтобы создать пустой проект байдинга. Еще пару часов пытался собрать сам OpenHAB, но пока ничего пока не вышло. Поэтому и спрашиваю в сообществе о наработках по данному вопросу, а то сначала лень, потом действие =).

vtec
Сообщения: 459
Зарегистрирован: 19 сен 2011, 09:28

Re: Использование MegaD в openHAB

Сообщение vtec » 26 сен 2015, 15:01

Может к нам, на iobroker? ;)


Selecta
Сообщения: 33
Зарегистрирован: 26 сен 2015, 12:38

Re: Использование MegaD в openHAB

Сообщение Selecta » 27 сен 2015, 12:34

применим ли этот скрипт под Windows?

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Использование MegaD в openHAB

Сообщение Andrey_B » 27 сен 2015, 13:50

Python тоже можно установить под Windows.
А вообще не пробовал. Можно попытаться привлечь автора скрипта, чтобы он рассказал, что и как.

Erinaceus
Сообщения: 3
Зарегистрирован: 21 апр 2015, 15:36

Re: Использование MegaD в openHAB

Сообщение Erinaceus » 27 сен 2015, 18:05

Всем привет.
Я автор этой разработки :)
Завтра попробую все развернуть под windows и написать howto.

Если в кратце, то:
1. Управление мегадевайсом (посыл команд) происходит через http биндинг. Именно так, как вы и сделали.
2. Скрипт мой слушает вызовы от меги и согласно конфига перенаправляет вызовы на оперхаб, тем самым добавляя ту самую обратную связь.

Кстати, в мегадевайте есть одна отличная фича для входов: можно фиксировать момент смыкания и размыкания.
На этом принципе я сделал в своем скрипте возможность вызова различных сценариев в опенхабе в зависимости от "времени нажатия кнопки".
Я старался сделать очень наглядный конфиг, говорящий сам за себя. Но если возникнут вопросы, я с удовольствием на них тут отвечу.

P.S. За те пол года, в течение которых я пользуюсь Openhab и мегадевайсами я ни разу не пожалел об их выборе.
Во-первых, у меги конкурентная цена. Во-вторых, меги позволяют организовать полуавтономную схему. В третьих, опенхаб очень крут. Он может и не выглядит на миллион, зато к нему полным полно отличных бингдингов. В четвертых, в моем конкретном случае все это крутится на Raspberry Pi, не жужжит и не глючит.

tim06ka
Сообщения: 3
Зарегистрирован: 25 сен 2015, 18:38

Re: Использование MegaD в openHAB

Сообщение tim06ka » 27 сен 2015, 20:12

Класс! Все отлично работает, правда есть одна потенциальная проблемка - сервлет CMD из REST-байдинга который используется в скрипте для манипуляций и item перестает работать если
не выключать Secutiry в общих настройках openhab'a

Selecta
Сообщения: 33
Зарегистрирован: 26 сен 2015, 12:38

Re: Использование MegaD в openHAB

Сообщение Selecta » 27 сен 2015, 20:59

tim06ka писал(а):Класс! Все отлично работает, правда есть одна потенциальная проблемка - сервлет CMD из REST-байдинга который используется в скрипте для манипуляций и item перестает работать если не выключать Secutiry в общих настройках openhab'a
"папа, а ты с кем сейчас разговаривал?" )) Если можно - уточните пожалуйста, в чем именно потенциальная проблема и при каких условиях она может возникать.

Сразу есть вопрос по конфигу.

Код: Выделить всё

# interface and port to listen to.
listen 0.0.0.0:8081;

# openhab ip and port
openhab 127.0.0.1:8080;
OpenHab работает на localhost (192.168.0.104), две меги живут на 192.168.0.14 и 192.168.0.15

Что должно быть прописано в listen?

tim06ka
Сообщения: 3
Зарегистрирован: 25 сен 2015, 18:38

Re: Использование MegaD в openHAB

Сообщение tim06ka » 27 сен 2015, 22:28

Косяк мой, я только начал разбираться с openhab, неправильно настроил, вот и не работало. Приходится пихать в урл логин и пароль, тогда все ок, можно модифицировать скрипт примерно так:

Код: Выделить всё

process_url('http://%s:%s@%s/CMD?%s=%s' % (login, password, openhab, item, command))

Selecta
Сообщения: 33
Зарегистрирован: 26 сен 2015, 12:38

Re: Использование MegaD в openHAB

Сообщение Selecta » 29 сен 2015, 00:35

Нет ли инструкции под Windows? С первого раза запустить не получилось.

Petros
Сообщения: 900
Зарегистрирован: 21 авг 2012, 22:09
Откуда: Москва

Re: Использование MegaD в openHAB

Сообщение Petros » 01 окт 2015, 22:30

Всем привет!
Решил пильнуть Бинд для меги, пока работает только на вход, принимает входящие и опрашивает периодически настроенные порты меги.

попробуйте, вдруг понравится :)
делаю всё между основной работой, но довести до ума планирую серьезно!

https://github.com/Pshatsillo/openHABMegaDevice

Спасибо за внимание! :)

Selecta
Сообщения: 33
Зарегистрирован: 26 сен 2015, 12:38

Re: Использование MegaD в openHAB

Сообщение Selecta » 03 окт 2015, 13:55

Petros писал(а):Решил пильнуть Бинд для меги
А можно для совсем одаренных - как подключить этот бинд к установленному Openhab? Все bindings в репозитории в формате jar, по указанной вам ссылке я могу скачать zip (теоретически - тот же jar?), но его название отличается от принятого в именовании байндингов формата.

Erinaceus
Сообщения: 3
Зарегистрирован: 21 апр 2015, 15:36

Re: Использование MegaD в openHAB

Сообщение Erinaceus » 05 окт 2015, 23:23

О, биндинг, прикрасно!
Мой костыль можно выкидывать

Petros
Сообщения: 900
Зарегистрирован: 21 авг 2012, 22:09
Откуда: Москва

Re: Использование MegaD в openHAB

Сообщение Petros » 06 окт 2015, 01:32

Итак: по ссылке заходим, идем в папку plugins.
Скачиваем самую свежую версию плагина.
Если скачалась в архиве - распаковываем и кладем jar файл в папку addons в openhab
В дебаг режиме в консоли должна появиться строчка megadevice started
Название по сути значения не имеет.

Бинд теперь умеет отправлять команды тоже

UPD Появилась возможность выбора порта сервера

Petros
Сообщения: 900
Зарегистрирован: 21 авг 2012, 22:09
Откуда: Москва

Re: Использование MegaD в openHAB

Сообщение Petros » 16 окт 2015, 12:35

Всем привет!

Сделал обработку диммера.
Работает в процентах от 0 до 100.
Конвертация работает по принципу, предложенному Selecta - данные в процентах * 2.55 с округлением в бОльшую сторону, т.е 10 процентов - это 26

Пример item:

Dimmer DimmedLight "Dimmer [%d %%]" {megadevice="sec:192.168.0.14:10"}

Пример sitemap:

Slider item=DimmedLight


Сделал прием комманды http://[IP-адрес сервера]/[имя скрипта]?at=[значение температуры] в Number item
Пример:
item:
Number AlarmTempValue "Превышение температуры мегадевайса 1: [%d]" {megadevice="sec:192.168.0.14:at"}

Сделал периодический опрос температуры мегадевайса(http://192.168.0.14/sec/?tget=1). Получить можно следующим айтемом:

Number TempValue "Температура мегадевайса 1: [%d]" {megadevice="sec:192.168.0.14:t"}

По такому же принципу можно получить значение ацп при ПЕРИОДИЧЕСКОМ сканировании (каждую минуту)

Number ADCPort15 "Значение АЦП порт 15 мегадевайса 1: [%d]" {megadevice="sec:192.168.0.14:15"}

обработку "v" и "dir" не делал.

ВОПРОС:
Это кому-нибудь вообще интересно? Я АЦП не пользуюсь
Какие функции реализовать?

изменить периодичность опроса портов можно добавив в конфиг такие строки:

################################ Megadevice Binding #######################################
#
# IP address of a Http port for megadevice defaut value is 8989
# megadevice:httpserverport=8585
megadevice:refresh=3000

Selecta
Сообщения: 33
Зарегистрирован: 26 сен 2015, 12:38

Re: Использование MegaD в openHAB

Сообщение Selecta » 16 окт 2015, 18:43

Это кому-нибудь вообще интересно?
Конечно интересно! И замечательно, что есть человек, который не жалеет времени на нормальный binding для меги. У меня в системе будет работать весь зоопарк - Мегадевайсы 14-IN, 7IO-R и 7IO-SD, и вместе с ними Beckhoff BC9000. Поэтому чем полнее будет функционал binding'а для Меги - тем лучше. О своих экспериментах с подключением Beckhoff по Modbus отписался в параллельной теме.

Selecta
Сообщения: 33
Зарегистрирован: 26 сен 2015, 12:38

Re: Использование MegaD в openHAB

Сообщение Selecta » 16 окт 2015, 18:46

Какие функции реализовать?
Думаю, что оптимально было бы иметь функции для всего функционала мегадевайсов, описанного в технических данных. В частности, интересует работа с датчиками температуры-влажности DHT22, температурным DS18B20 и т.п. - в общем, все, что поддерживают входные порты Меги. Если диммеры и выходы уже работают - есть смысл заняться входами.

Petros
Сообщения: 900
Зарегистрирован: 21 авг 2012, 22:09
Откуда: Москва

Re: Использование MegaD в openHAB

Сообщение Petros » 16 окт 2015, 19:02

Понял, спасибо! :) Направление понятно, буду потихонечку реализовывать

Ответить