Показать сообщение отдельно
  #1 (permalink)  
Старый 15.01.2019, 20:48
Новичок на форуме
Отправить личное сообщение для rw6miu Посмотреть профиль Найти все сообщения от rw6miu
 
Регистрация: 15.01.2019
Сообщений: 2

Попытка подружить Сервер ioBroker и контроллер MegaLight
Добрый день. Пытаюсь подключить контроллер управления освещением в систему умного дома на базе сервера ioBroker.

Вот протокол взаимодействия по HTTP
Получение состояния реле
HTTP-GET запрос вида
http://megalight/state?c=get&n=1
n - ID нужного реле (обязательный)
Ответ: text/plain в виде
1;255
где первое число - состояние (1 - вкл), второе - значение диммера

Установка состояния реле
HTTP-GET запрос вида
http://megalight/state?c=set&n=1&o=1&v=200&t=30000
http://megalight/state?c=set&n=1&i=10
n - ID нужного реле (обязательный)
o - состояние (1 - вкл, 0 - выкл)
v - значение диммера (0-255)
i - инкремент/декремент значения диммера (-255 по 255)
t - таймаут в миллисекундах
Ответ: пусто

Получение состояния кнопки
HTTP-GET запрос вида
http://megalight/state?c=button&n=1
n - ID нужной кнопки/выключателя (обязательный)
Ответ: text/plain в виде
1
состояние (1 - нажата, 0 - не нажата)

Я не силён пока в JavaScript но покопавшись в инете нашёл пару скриптов для управления через Get запросы.

Это первый вариант
createState('javascript.0.test', '');
var url = 'http://192.168.0.89';
var request = require('request');
var options = {
        	url: ''
        };
on({id: 'javascript.0.test', change: 'any'}, function (obj) {
    if(obj.newState.val === 0){
	options.url = url+'/state?c=set&n=7&o=1';
    } else {
    	options.url = url+'/state?c=set&n=7&o=0';
    }
    request(options, function (error, response, body) {
        log('Ответ' + body);
    });
});


Это второй вариант
createState('javascript.0.test', '');
on({id: 'javascript.0.test', change: 'any'}, function (obj) {
    if((obj.newState.from == 'web.0' || obj.newState.from == 'system.adapter.web.0' ) && obj.newState.val == '0'){
        request ('http://192.168.0.89/state?c=set&n=7&o=0');
    }
    if((obj.newState.from == 'web.0' || obj.newState.from == 'system.adapter.web.0' ) && obj.newState.val == '1'){
        request ('http://192.168.0.89/state?c=set&n=7&o=1');
    }
});


Оба прекрасно работают. И управляют включением и выключением реле. Но если я включаю свет с выключателя на стене то увы сервер не видит этого.
Чувствую что в эти скрипты надо что-то добавить, но вот что?
Контроллер сам при изменении состояния выходных портов отсылает Get запрос на сервер. Но вот как отследить этот запрос ума не приложу.

Последний раз редактировалось rw6miu, 22.01.2019 в 08:45.
Ответить с цитированием