Страница 1 из 1
Как происходит общение в MJDM?
Добавлено: Ср апр 17, 2019 5:07 pm
SmoKE_xDDD
Привет знатоки! Моя первая тема
Впереди ремонт и хочу обустроить его датчиками XIAOMI и наладить базовую автоматизацию: охрана, свет, музыка, голос.
Так как "ты же программист" не хочу использовать некрасивую тему в самом MJDM - пишу свою админку вида:
- Безымянный.png (205.01 КБ) 2847 просмотров
Управление с планшете в стене...
Насколько я понимаю у MJDM есть "API" по гет запросам - запуск сценариев, а собственно вопрос:
Возможно ли из MJDM отправлять статусы датчиков в мою "админку", например через file_get_contents(), или например настроить сценарий...
Собственно хочу получать например температуру с датчика XIAOMI...
Спасибо.
P.S. Еще ничего не купил, поэтому тестить не на чем...
Re: Как происходит общение в MJDM?
Добавлено: Ср апр 17, 2019 5:19 pm
Chainik
Конечно, запросы вида
Код: Выделить всё
file_get_contents("http://192.168.0.xxx.................................");
выполнять из МДМ можно.
Но их же еще надо потом "ловить" "с той стороны". Я хоть и не программист, но это понимаю.
Надеюсь, вы в курсе, как потом "поймать" там передаваемые данные.
Re: Как происходит общение в MJDM?
Добавлено: Ср апр 17, 2019 5:24 pm
SmoKE_xDDD
Да конечно
Вопрос еще в том, что насколько я понял из видео и FAQ там редактор кода PHP встроен и уже занесены множество обьектов - где описани этих объектов найти?(
Re: Как происходит общение в MJDM?
Добавлено: Ср апр 17, 2019 5:46 pm
fandaymon
SmoKE_xDDD писал(а): ↑Ср апр 17, 2019 5:07 pm
Насколько я понимаю у MJDM есть "API" по гет запросам - запуск сценариев, а собственно вопрос:
Возможно ли из MJDM отправлять статусы датчиков в мою "админку", например через file_get_contents(), или например настроить сценарий...
Собственно хочу получать например температуру с датчика XIAOMI...
Можно получать значение свойств объектов через API мажордомо.
https://kb.mjdm.ru/http-ssilki-dlya-raboti-s-majordomo/
Но конечно, если есть навыки программирования то лучше использовать свой цикл и вебсокеты
Re: Как происходит общение в MJDM?
Добавлено: Ср апр 17, 2019 5:47 pm
Chainik
Предустановленные объекты в МДМ, конечно, есть. Но вам, как человеку опытному (программисту) я бы порекомендовал создать свои. Базовые понятия в МДМ -- это класс, объект, метод, свойство. Создаете новый класс, добавляете одно или несколько свойств (напр., температуру от вашего будущего датчика), пишите в метод код, которым будете получать данные с датчика и записывать в свойство. Создаете новый объект с любым понятным именем (типа "TempSensor01").
Но на самом деле я бы начал с оборудования. Дело в том, что для работы с устройствами ксяоми в МДМ написан специальный модуль. Может быть он сам опрашивает устройства с нужной периодичностью (или сами устройства ему сообщают) и "распихивает" эту информацию по Объект.Свойствам.
Сам с ксяоми дела не имел, поэтому подробности подсказать не могу.
Почитать (если удастся что-нибудь найти) можно в базе знаний (
https://kb.mjdm.ru/?utm_source=smartliv ... mainmenukb).
Один из наиболее ценных ресурсов там -- встроенные в МДМ функции (
https://kb.mjdm.ru/vstroennie-v-majordomo-funkcii/).
Ну а в конце всей цепочки у вас будет пара строчек кода:
Код: Выделить всё
T = gg(Имя_вашего_объекта.Имя_свойства_со_значением_температуры);
//передача значения "на деревню дедушке"
file_get_contents("http://192.168.0.xxx.................................");
Re: Как происходит общение в MJDM?
Добавлено: Пт апр 19, 2019 11:26 am
markovrv
SmoKE_xDDD писал(а): ↑Ср апр 17, 2019 5:07 pm
Возможно ли из MJDM отправлять статусы датчиков в мою "админку", например через file_get_contents()
Вместо file_get_contents лучше использовать вебсокеты, они по умолчанию встроены в систему, а Ваша админка сможет их ловить с помощью простого javascript кода.
Код: Выделить всё
//Функции связи с websocket сервером
var serverUrl = "ws://<айпи адрес МДМ>:8001/majordomo";
var startedWebSockets = 0;
var wsTimer=0;
var scene_id = 6;// номер сцены с информерами датчиков
var elem_id = 0;
// процедура установки соединения
function startWebSockets() {
try {
if (window.MozWebSocket) wsSocket = new MozWebSocket(serverUrl);
else if (window.WebSocket) wsSocket = new WebSocket(serverUrl);
} catch (e) {
console.log('Failed connecting to '+serverUrl);
return false;
}
wsSocket.binaryType = 'blob';
wsSocket.onopen = function(msg) {
console.log('WS connected');
startedWebSockets=1;
clearTimeout(wsTimer);
$.publish('wsConnected');
var payload = new Object();
payload.action = 'Subscribe';
payload.data = new Object();
payload.data.TYPE='scenes';
payload.data.SCENE_ID=scene_id;
wsSocket.send(JSON.stringify(payload));
};
wsSocket.onmessage = function(msg) {
console.log('WS data: '+msg);
};
wsSocket.onclose = function(msg) {
//disconnected
startedWebSockets=0;
wsTimer=setTimeout('startWebSockets();', 5*1000);
$.publish('wsDisconnected', []);
console.log('WS disconnected');
return;
};
}
// вспомогательная jquery функция, переобозначает процедуры
(function($){var o = $({});
$.subscribe = function(){o.on.apply(o, arguments);};
$.unsubscribe = function(){o.off.apply(o, arguments);};
$.publish = function(){o.trigger.apply(o, arguments);};}
(jQuery));
// ЗАПУСК!!!
startWebSockets();