Как происходит общение в MJDM?

Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.

Модератор: immortal

Ответить
Аватара пользователя
SmoKE_xDDD
Сообщения: 10
Зарегистрирован: Ср апр 17, 2019 5:00 pm
Благодарил (а): 1 раз
Поблагодарили: 0

Как происходит общение в MJDM?

Сообщение SmoKE_xDDD » Ср апр 17, 2019 5:07 pm

Привет знатоки! Моя первая тема :)
Впереди ремонт и хочу обустроить его датчиками XIAOMI и наладить базовую автоматизацию: охрана, свет, музыка, голос.
Так как "ты же программист" не хочу использовать некрасивую тему в самом MJDM - пишу свою админку вида:
СпойлерПоказать
Безымянный.png
Безымянный.png (205.01 КБ) 419 просмотров
Управление с планшете в стене...
Насколько я понимаю у MJDM есть "API" по гет запросам - запуск сценариев, а собственно вопрос:
Возможно ли из MJDM отправлять статусы датчиков в мою "админку", например через file_get_contents(), или например настроить сценарий...
Собственно хочу получать например температуру с датчика XIAOMI...
Спасибо.
P.S. Еще ничего не купил, поэтому тестить не на чем...
Chainik
Сообщения: 833
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 99 раз
Поблагодарили: 239 раз

Re: Как происходит общение в MJDM?

Сообщение Chainik » Ср апр 17, 2019 5:19 pm

Конечно, запросы вида

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

file_get_contents("http://192.168.0.xxx.................................");
выполнять из МДМ можно.
Но их же еще надо потом "ловить" "с той стороны". Я хоть и не программист, но это понимаю.
Надеюсь, вы в курсе, как потом "поймать" там передаваемые данные.
Аватара пользователя
SmoKE_xDDD
Сообщения: 10
Зарегистрирован: Ср апр 17, 2019 5:00 pm
Благодарил (а): 1 раз
Поблагодарили: 0

Re: Как происходит общение в MJDM?

Сообщение SmoKE_xDDD » Ср апр 17, 2019 5:24 pm

Да конечно :)
Вопрос еще в том, что насколько я понял из видео и FAQ там редактор кода PHP встроен и уже занесены множество обьектов - где описани этих объектов найти?(
fandaymon
Сообщения: 688
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 26 раз
Поблагодарили: 298 раз

Re: Как происходит общение в MJDM?

Сообщение fandaymon » Ср апр 17, 2019 5:46 pm

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/
Но конечно, если есть навыки программирования то лучше использовать свой цикл и вебсокеты
Chainik
Сообщения: 833
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 99 раз
Поблагодарили: 239 раз

Re: Как происходит общение в MJDM?

Сообщение Chainik » Ср апр 17, 2019 5:47 pm

Предустановленные объекты в МДМ, конечно, есть. Но вам, как человеку опытному (программисту) я бы порекомендовал создать свои. Базовые понятия в МДМ -- это класс, объект, метод, свойство. Создаете новый класс, добавляете одно или несколько свойств (напр., температуру от вашего будущего датчика), пишите в метод код, которым будете получать данные с датчика и записывать в свойство. Создаете новый объект с любым понятным именем (типа "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.................................");
markovrv
Сообщения: 30
Зарегистрирован: Пт апр 28, 2017 9:10 pm
Благодарил (а): 18 раз
Поблагодарили: 12 раз

Re: Как происходит общение в MJDM?

Сообщение markovrv » Пт апр 19, 2019 11:26 am

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();

За это сообщение автора markovrv поблагодарил:
SmoKE_xDDD (Сб апр 27, 2019 6:47 pm)
Рейтинг: 1.37%
Ответить