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

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
martiniman
Сообщения: 528
Зарегистрирован: 09 авг 2016, 15:09
Откуда: Сочи

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

Сообщение martiniman » 25 янв 2018, 23:02

У меня тоже inflixDB и Ubuntu

empenoso
Сообщения: 1039
Зарегистрирован: 11 ноя 2015, 08:03
Откуда: Пермь

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

Сообщение empenoso » 26 янв 2018, 11:55

Igor78 писал(а):
22 янв 2018, 16:06
Прописал дисплей через HTTP binding:

String TST_SSD1306_Text "TST SSD1306 Text [%s]" { http=">[*:GET:http://10.5.5.31/sec/?pt=7&text=%2$s]" }

Работает
Не очень понял, а с этой строкой как взаимодействовать?

Сделал вывод часов на экране:

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

rule "Time to SSD1306"
when
	Time cron "0 0/1 * * * ?" //каждую 1 минут
then
	var String Hour = String::format( "%1$tk", new Date() ) //https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html
	var String Minute = String::format( "%1$tM", new Date() )
	sendHttpGetRequest("http://192.168.88.60/sec/?pt=3&text=sssssssssssss")
	Thread::sleep(2000) //2000 миллисекунд в секундах
	sendHttpGetRequest("http://192.168.88.60/sec/?pt=3&text=" + Hour + "-" + Minute)
end

Igor78
Сообщения: 143
Зарегистрирован: 26 янв 2015, 14:44
Откуда: Москва

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

Сообщение Igor78 » 26 янв 2018, 12:31

empenoso писал(а):
26 янв 2018, 11:55
Igor78 писал(а):
22 янв 2018, 16:06
Прописал дисплей через HTTP binding:

String TST_SSD1306_Text "TST SSD1306 Text [%s]" { http=">[*:GET:http://10.5.5.31/sec/?pt=7&text=%2$s]" }

Работает
Не очень понял, а с этой строкой как взаимодействовать?

...
[/code]
xxx.rules:

...
sendCommand(TST_SSD1306_Text,"-25.3:") //на экране -25.3 градуса
sendCommand(TST_SSD1306_Text,"ssssss") //поле очищено
...
С уважением, Игорь

empenoso
Сообщения: 1039
Зарегистрирован: 11 ноя 2015, 08:03
Откуда: Пермь

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

Сообщение empenoso » 26 янв 2018, 15:31

Igor78 писал(а):
25 янв 2018, 18:12

String TST_SSD1306_SmallText "TST SSD1306 SmallText [%s]" { http=">[*:GET:http://10.5.5.31/bis/?pt=7&text=%2$s&col=0&row=0]" }

-пишет надпись в верхнем левом углу

Number TST_SSD1306_Clear_SmallText_From "tmp [%s]" { http=">[*:GET:http://10.5.5.31/bis/?pt=7&text=_______ ... %2$s&row=0]" }

-очищает верхнюю строку начиная с заданной позиции за раз очищает около 40% строки
Да, спасибо. Попеременно вывожу на экран время и температуру:
IMG_20180126_161910_.jpg
IMG_20180126_161910_.jpg (164.8 КБ) 2717 просмотров
IMG_20180126_162016_.jpg
IMG_20180126_162016_.jpg (161.29 КБ) 2717 просмотров

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

String  P3_SSD1306_Text             "Дисплей SSD1306 Text [%s]"         { http=">[*:GET:http://192.168.88.60/sec/?pt=3&text=%2$s]" }
String  P3_SSD1306_SmallText        "Дисплей SSD1306 SmallText [%s]"    { http=">[*:GET:http://192.168.88.60/sec/?pt=3&text=%2$s&col=30&row=0]" }

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

rule "Time to SSD1306"
when
	Time cron "0 0/1 * * * ?" //каждую 1 минут
then
	val Temp = String::format("%.0f", (P1_HTU21D_Temp.state as DecimalType).doubleValue )
	var String Hour = String::format( "%1$tk", new Date() ) //https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html
	var String Minute = String::format( "%1$tM", new Date() )

	sendCommand(P3_SSD1306_SmallText,"___________________") //очистка верней строки
	Thread::sleep(2000) //2000 миллисекунд в секундах	
	sendCommand(P3_SSD1306_Text,"ssssssss") //очистка основной строки
	Thread::sleep(2500) //2500 миллисекунд в секундах
	sendCommand(P3_SSD1306_SmallText, "Time") 
	sendCommand(P3_SSD1306_Text, Hour + "-" + Minute) 
	
	Thread::sleep(30000) //30000 миллисекунд в секундах

	sendCommand(P3_SSD1306_SmallText,"___________________") //очистка верней строки
	Thread::sleep(2000) //2000 миллисекунд в секундах	
	sendCommand(P3_SSD1306_Text,"ssssssss") //очистка основной строки
	Thread::sleep(2500) //2500 миллисекунд в секундах	
	sendCommand(P3_SSD1306_SmallText, "Outdoor") 
	sendCommand(P3_SSD1306_Text, "s"+Temp+":") 
end

empenoso
Сообщения: 1039
Зарегистрирован: 11 ноя 2015, 08:03
Откуда: Пермь

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

Сообщение empenoso » 26 янв 2018, 15:33

Русские буквы непонятно как только и температура парсится с запятой "-6,34", а экран в таком виде не воспринимает - запятую пропускает и получается "-634" на экране :? . И очистка верней строки как будто через раз не доходит до конца - последние символы остаются иногда.
Пока температуру обрезаю до целого значения.

Igor78
Сообщения: 143
Зарегистрирован: 26 янв 2015, 14:44
Откуда: Москва

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

Сообщение Igor78 » 26 янв 2018, 16:00

empenoso писал(а):
26 янв 2018, 15:33
...температура парсится с запятой "-6,34", а экран в таком виде не воспринимает - запятую пропускает и получается "-634" на экране :? . И очистка верней строки как будто через раз не доходит до конца - последние символы остаются иногда..
У меня выводится нормально:
LivoloSSD.jpg
LivoloSSD.jpg (370.45 КБ) 2706 просмотров
Вот часть кода, где температура из Item типа Number преобразовывается в строку для вывода:

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

//OUTSIDE_BME280_Temp - Item типа Number
var String s

s = (((OUTSIDE_BME280_Temp.state as DecimalType)*10).intValue/10.0).toString+":" //оставляем один знак после запятой и преобразуем в строку

//форматируем пробелами
if (s.length == 4)s="ss"+s
else if (s.length == 5)s="s"+s

sendCommand(TST_SSD1306_Text,s) //выводим строку на экран
Чтобы очистить всю мелкую строку я делаю так:

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

sendCommand(TST_SSD1306_Clear_SmallText_From,0)
sendCommand(TST_SSD1306_Clear_SmallText_From,40)
sendCommand(TST_SSD1306_Clear_SmallText_From,80)
Андрей, предложил другой способ https://www.ab-log.ru/forum/viewtopic.p ... 500#p31053
С уважением, Игорь

martiniman
Сообщения: 528
Зарегистрирован: 09 авг 2016, 15:09
Откуда: Сочи

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

Сообщение martiniman » 27 янв 2018, 18:36

В доках openHAB пишут что уже нужно использовать такую конструкцию: testItem.sendCommand(“test”)
Последний раз редактировалось martiniman 28 янв 2018, 00:47, всего редактировалось 1 раз.

empenoso
Сообщения: 1039
Зарегистрирован: 11 ноя 2015, 08:03
Откуда: Пермь

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

Сообщение empenoso » 27 янв 2018, 21:01

Пару дней уже работает все норм. Только вот задумался если дважды в минуту он обновляет картинку на экране это 2880 за сутки - надолго ли хватит экранчика?

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

rule "Time to SSD1306"
when
	Time cron "0 0/1 * * * ?" //каждую 1 минут
then
	var String Temp = (((P1_HTU21D_Temp.state as DecimalType)*10).intValue/10.0).toString+":" //оставляем один знак после запятой и преобразуем в строку
	//val Temp = String::format("%.0f", (P1_HTU21D_Temp.state as DecimalType).doubleValue )

	var String Hour = String::format( "%1$tk", new Date() ) //https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html
	var String Minute = String::format( "%1$tM", new Date() )

	sendHttpGetRequest("http://192.168.88.60/sec/?pt=3&disp_cmd=1&row=0")	//очистка верней строки
	//sendCommand(P3_SSD1306_SmallText,"___________________") 				//очистка верней строки
	Thread::sleep(2000) //2000 миллисекунд в секундах	
	sendCommand(P3_SSD1306_Text,"ssssssss") //очистка основной строки
	Thread::sleep(2500) //2500 миллисекунд в секундах
	sendCommand(P3_SSD1306_SmallText, "Time") 
	sendCommand(P3_SSD1306_Text, Hour + "-" + Minute) 
	
	Thread::sleep(30000) //30000 миллисекунд в секундах

	sendHttpGetRequest("http://192.168.88.60/sec/?pt=3&disp_cmd=1&row=0")	//очистка верней строки
	Thread::sleep(2000) //2000 миллисекунд в секундах	
	sendCommand(P3_SSD1306_Text,"ssssssss") //очистка основной строки
	Thread::sleep(2500) //2500 миллисекунд в секундах	
	sendCommand(P3_SSD1306_SmallText, "Outdoor") 
	sendCommand(P3_SSD1306_Text, "s"+Temp) 
end

martiniman
Сообщения: 528
Зарегистрирован: 09 авг 2016, 15:09
Откуда: Сочи

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

Сообщение martiniman » 27 янв 2018, 22:33

Я пару лет использую OLED 2.4 дюйма с припаяным к нему ESP8266 и прошивкой Макса wifi-iot.com, 2 шт, openHAB, тексты отправляю через MQTT.
Много чего на него выводит. Видео сниму.

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

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

Сообщение Andrey_B » 27 янв 2018, 22:54

empenoso писал(а):
27 янв 2018, 21:01
Только вот задумался если дважды в минуту он обновляет картинку на экране это 2880 за сутки - надолго ли хватит экранчика?
OLED бояться не обновлений картинки, а длительного свечения на максимальной яркости.
Я бы рекомендовал выставлять минимальную достаточную яркость.
У меня экран работает с мая этого года. Светится постоянно. 100% времени. Значение яркости - 80. Днем видно прекрасно. Можно было бы и меньше.
Какой-то заметной деградации пока не наблюдаю.
А вот отверстие в корпусе проделать у меня получилось лучше... ;)

martiniman
Сообщения: 528
Зарегистрирован: 09 авг 2016, 15:09
Откуда: Сочи

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

Сообщение martiniman » 28 янв 2018, 00:02

У меня повыгорали оледы, но не критично.
Я написал правило для openHAB, что-бы можно было добавлять любое кол-во дисплеев в группу и на всех будут отображаться сообщения от системы.
Страницы можно выбирать кнопкой.
Также выводятся алармы от системы, и на телевизор тоже выводится.

Вот видео:
https://www.dropbox.com/s/sbax0ak2ko79sk4/OLED.mp4?dl=0

Экраны такие https://www.ebay.com/itm/SPI-2-42-OLED- ... 1619452398.
А появились уже прям с ESP8266 https://www.ebay.com/itm/IoT-ESP8266-No ... Sw609Z4Y1R

5kull
Сообщения: 55
Зарегистрирован: 19 июл 2015, 17:35

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

Сообщение 5kull » 31 янв 2018, 02:55

Помогите советом, управление светом реализовано через двухконтурные импульсные реле (таким образом есть обратная связь при замкнутом реле)
Импульсы с контроллеров реализованы правилом
rule "Pulse1"
when
Item GF_Corridor_Light1 received command
then
Out01.sendCommand(ON) //включаем выход, спим 10мс, выключаем выход
Thread::sleep(10)
Out01.sendCommand(OFF)
Обратная связь обеспечивается правилом:
rule "feedback1"
when
Item In01 received update
then
if (In01.state == CLOSED) //замыкается выход меги (была нажата кнопка на стене) обновляем статус выключателя
GF_Corridor_Light1.postUpdate(ON)
else
GF_Corridor_Light1.postUpdate(OFF)

так же пробовал использовать правило, при котором при получении обратной связи выход выключается - не всегда вовремя срабатывало, что могло привести к выгоранию реле, при данной схеме все работает как часы, приступил к реализации кнопки "Выключить все" и тут начались проблемы, правило:
rule "Alloff"
when
Item AllOff received command OFF
then //при срабатывании кнопки, перебираем всю группу выключателей в позиции "ON" и шлем им команду "OFF"
gLight.members.filter(item|item.state == ON).forEach[item | sendCommand(item, OFF)]
end
в данном случае можно выключить до 7 выходов, при большем количестве начинается вакханалия, не все выходы срабатывают или остаются включенными.
Уверен это изза использования команды Thread::sleep, но думаю и есть проблемы с биндингом, потому как не вовремя срабатывают входы, что не дает мне использовать правило с выключением по обратной связи.

Помогите решить проблему, плиз! У кого тоже импульсные реле, как решали проблему?
PS. По биндингу: заметил, что если прописывать thing через файл, и ставить refresh=0 при замыкании входа часто ничего не приходит, если настраивать через paper UI с refresh=0 дела куда лучше, но иногда ответ приходит с запозданием, что может быть слишком долго для бистабильного реле.
так же, если в items прописать канал биндинга, ничего не происходит, нужно все равно руками пробрасывать линки в paper UI

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

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

Сообщение Petros » 31 янв 2018, 10:05

Про биндинг такая история - заметил подобное, но проблема похоже в самом сервере, данные прилетают на входящий сервер, отрабатываются, но ничего не происходит. При этом на 2.1 таких проблем небыло. Отловить что даёт такой эффект у меня никак не получается....

Отправлено с моего Mi Note 2 через Tapatalk


Igor78
Сообщения: 143
Зарегистрирован: 26 янв 2015, 14:44
Откуда: Москва

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

Сообщение Igor78 » 01 фев 2018, 10:12

5kull писал(а):
31 янв 2018, 02:55
Помогите советом, управление светом реализовано через двухконтурные импульсные реле ...
postUpdate не приводит к срабатыванию триггера "received command", может в этом проблема?
С уважением, Игорь

5kull
Сообщения: 55
Зарегистрирован: 19 июл 2015, 17:35

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

Сообщение 5kull » 06 фев 2018, 19:32

postUpdate не приводит к срабатыванию триггера "received command"
А он и не должен, он просто меняет иконку, когда нажимается кнопка на стене
Проблему пока решил с помощью добавления пауз в правило

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

rule "Alloff"
when
Item AllOff received command OFF
then //при срабатывании кнопки, перебираем всю группу выключателей в позиции "ON" и шлем каждому команду "OFF" и ждем 100мсек
gLight.members.filter(item|item.state == ON).forEach[item | sendCommand(item, OFF) thread::sleep(100)] 
end
Иногда остаются пропущенные порты, и правило нужно запустить повторно, думаю это из-за биндинга, попробую добавить things не через файл а в paper UI, так же заметил что мега иногда зависает (не помогает даже кнопка reset) нужно выключать питание и снимать клемму с батареи, что слегка достает, а функция wdog выглядит теперь смешно)
Конечно можно опросить входы, и сформировать http команду с нужными портами и параметром р напрямую в мегу, но пока лень)

martiniman
Сообщения: 528
Зарегистрирован: 09 авг 2016, 15:09
Откуда: Сочи

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

Сообщение martiniman » 19 фев 2018, 14:10

5kull писал(а):
06 фев 2018, 19:32

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

gLight.members.filter(item|item.state == ON).forEach[item | sendCommand(item, OFF) thread::sleep(100)] 
Обязательно с большой буквы нужно:

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

 Thread::sleep(100)

martiniman
Сообщения: 528
Зарегистрирован: 09 авг 2016, 15:09
Откуда: Сочи

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

Сообщение martiniman » 19 фев 2018, 14:31

Petros писал(а):
25 сен 2015, 18:42
Частые вопросы об использовании MegaD в OpenHAB
Добрый день. Несколько вопросов по текущей версии, хочу попробовать ваш биндинг.
Есть ли поддержка автором биндига в настоящее время (на гитхабе последняя дата обновления более года назад) ?
Все ли возможности Меги поддерживает биндинг?
Почему в правилах используется сначала postUpdate и сразу sendCommand?
Спасибо.

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

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

Сообщение Petros » 19 фев 2018, 14:36

Версию 1.8 я не обновляю, по 2 версии предложений и жалоб пока нет. Что мне нужно коммитить туда? :) Про дисплей - решение найдено, поэтому я притормозил. Если актуально до сих пор - доделаю. Сложность только одна - у меня нет дисплея. Поэтому очень неудобно его тестировать

martiniman
Сообщения: 528
Зарегистрирован: 09 авг 2016, 15:09
Откуда: Сочи

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

Сообщение martiniman » 19 фев 2018, 14:43

О, а я прошел по ссылке в шапке, там ни слова о 2й версии...

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

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

Сообщение Petros » 19 фев 2018, 14:48

Спасибо :) да как-то времени не хватает обновить первый пост :( Каюсь, моя вина...

Ответить