SmartLiving.ru

Обсуждение проекта
 
Текущее время: Сб мар 25, 2017 4:49 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 15 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Публикация топика в MQTT
СообщениеДобавлено: Пн мар 06, 2017 10:06 pm 
Не в сети

Зарегистрирован: Чт фев 02, 2017 8:41 pm
Сообщения: 23
Благодарил (а): 3 раз.
Поблагодарили: 1 раз.
Здравствуйте, коллеги!
Возможно, ответ очевиден, но я, перерыв форум, его не нашёл. Буду благодарен за помощь.
Подскажите, пожалуйста, фрагмент кода, который позволит опубликовать значение в топик сервера MQTT из PHP Majordomo.

Я пробовал:
1. $mqtt->publish("/topic", "test"); - не работает

2. require("phpMQTT.php");
$addr="localhost";
$port=1883;
$user="user";
$pass="password";

$mqtt1 = new phpMQTT($addr, $port, "MajorDoMo MQTT Client");
$mqtt1->connect(true, NULL, $user, $pass);
$mqtt1->publish("/topic", "test");
$mqtt1->close(); - тоже не работает


Что я делаю не так?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Публикация топика в MQTT
СообщениеДобавлено: Пн мар 06, 2017 10:11 pm 
Не в сети

Зарегистрирован: Вс янв 01, 2017 8:32 pm
Сообщения: 275
Откуда: Москва
Благодарил (а): 7 раз.
Поблагодарили: 36 раз.
Модуле MQTT создаете руками новый топик и привязываете его к какому-нибудь свойству, какого-нибудь объекта. Меняете свойство, оно публикуется в топик


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Публикация топика в MQTT
СообщениеДобавлено: Пн мар 06, 2017 10:19 pm 
Не в сети

Зарегистрирован: Чт фев 02, 2017 8:41 pm
Сообщения: 23
Благодарил (а): 3 раз.
Поблагодарили: 1 раз.
DimSun75 писал(а):
Модуле MQTT создаете руками новый топик и привязываете его к какому-нибудь свойству, какого-нибудь объекта. Меняете свойство, оно публикуется в топик


Спасибо. Правильно ли я понимаю, что произвольно из PHP кода это сделать нельзя?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Публикация топика в MQTT
СообщениеДобавлено: Пн мар 06, 2017 10:20 pm 
Не в сети

Зарегистрирован: Вс янв 01, 2017 8:32 pm
Сообщения: 275
Откуда: Москва
Благодарил (а): 7 раз.
Поблагодарили: 36 раз.
Mics78 писал(а):
DimSun75 писал(а):
Модуле MQTT создаете руками новый топик и привязываете его к какому-нибудь свойству, какого-нибудь объекта. Меняете свойство, оно публикуется в топик


Спасибо. Правильно ли я понимаю, что произвольно из PHP кода это сделать нельзя?


Можно, но зачем? Правильнее, когда все делается на уровне системы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Публикация топика в MQTT
СообщениеДобавлено: Пн мар 06, 2017 10:32 pm 
Не в сети

Зарегистрирован: Чт фев 02, 2017 8:41 pm
Сообщения: 23
Благодарил (а): 3 раз.
Поблагодарили: 1 раз.
Я пока совсем не знаю эту систему. На это нужно время.
А для отладки того, что я сейчас делаю, мне надо формировать сложное значение, публикуемое в топике. Как это сделать средствами majordomo я не знаю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Публикация топика в MQTT
СообщениеДобавлено: Пн мар 06, 2017 10:38 pm 
Не в сети

Зарегистрирован: Вс янв 01, 2017 8:32 pm
Сообщения: 275
Откуда: Москва
Благодарил (а): 7 раз.
Поблагодарили: 36 раз.
Mics78 писал(а):
Я пока совсем не знаю эту систему. На это нужно время.
А для отладки того, что я сейчас делаю, мне надо формировать сложное значение, публикуемое в топике. Как это сделать средствами majordomo я не знаю.


Создайте какой-нибудь класс, в него добавьте свойство. Создайте объект этого класса. Далее, как я писал привязываете это свойство к топику mqtt. Далее в скрипте просто setGlobal("Object.Property",$value); Проще некуда.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Публикация топика в MQTT
СообщениеДобавлено: Пн мар 06, 2017 10:44 pm 
Не в сети

Зарегистрирован: Чт фев 02, 2017 8:41 pm
Сообщения: 23
Благодарил (а): 3 раз.
Поблагодарили: 1 раз.
Спасибо. Попробую.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Публикация топика в MQTT
СообщениеДобавлено: Вт мар 07, 2017 6:12 am 
Не в сети
Аватара пользователя

Зарегистрирован: Пн окт 28, 2013 8:14 am
Сообщения: 1533
Откуда: Екатеринбург
Благодарил (а): 68 раз.
Поблагодарили: 302 раз.
Mics78 писал(а):
Спасибо. Правильно ли я понимаю, что произвольно из PHP кода это сделать нельзя?

Конечно можно. Правильный вопрос - оно вам надо?))
Mics78 писал(а):
Я пробовал:
1. $mqtt->publish("/topic", "test"); - не работает

2. require("phpMQTT.php");
$addr="localhost";
$port=1883;
$user="user";
$pass="password";

$mqtt1 = new phpMQTT($addr, $port, "MajorDoMo MQTT Client");
$mqtt1->connect(true, NULL, $user, $pass);
$mqtt1->publish("/topic", "test");
$mqtt1->close(); - тоже не работает


Что я делаю не так?

Согласен с предыдущими ораторами, что правильнее на уровне системы, но всё же отвечу на вопрос =D
1) Просто команды publish в php не существует, она не заведется
2) Правильная попытка инициализировать mqtt, но скорее всего не правильный путь библиотеки phpMQTT.php (или файл вообще отсутствует)...по логам то смотрите, там скорее всего эта ошибка вываливается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Публикация топика в MQTT
СообщениеДобавлено: Ср мар 08, 2017 7:51 pm 
Не в сети

Зарегистрирован: Чт фев 02, 2017 8:41 pm
Сообщения: 23
Благодарил (а): 3 раз.
Поблагодарили: 1 раз.
Спасибо. Согласен, что правильнее делать так как задумано.
Файл есть, ошибок нет. Но не работает. Впрочем, вняв совету я получил тот результат, который хотел.

Сейчас вопрос встал несколько иначе. Я, для экспериментов, сейас использую ESP8266 с ESPEasy, MQTT и Majordomo. Потом железяка будет другой и софт на ней тоже другой, но это не важно.
ESPEasy принимает команды через MQTT в виде "gpio, порт, значение". Возвращает json вида: { "log": "GPIO 5 Set to 1", "plugin": 1, "pin": 5, "mode": "output", "state": 1 }. На каждую управляющую посылку на топик "/устройство/cmd" приходит ответ в топик "/устройство/status". Я хочу настроить управление ESP'шкой через MQTT от третьего устройства и с Majordomo переключателем. Так, чтобы при приходе внешней команды (от третьего устройства) переключатель на Majordomo принимал реальное значение.
Для этого я создал класс со свойствами "position" - это положение переключателя MAjordomo, "status" - принимаемый от MQTT ответ в топике "/устройство/status" и "set" - публикуемое в MQTT значение команды. Создал объект, связал с ним по свойствам топики "status" и "set". Создал переключатель связал по свойству "position".
Создал 2 метода:
[Показать] Скрытый текст: Receive_status
$data=json_decode($this->getProperty("status"));
$status=$data->state;
$this->setProperty("position", $status);



[Показать] Скрытый текст: Switch
$status=$this->getProperty("position");

if (!$status) {
$this->setProperty("set","gpio,5,0");
} else {
$this->setProperty("set","gpio,5,1");
}


Пререключатель связал с методом "Switch", свойство "status" с методом "Receive_status".
Всё работает в той конфигурации как я описал.
Логика работы следующая:
1. При приходе внешней команды, ESP отрабатывает её и публикует статус в json.
2. Запускается метод "Receive_status", который устанавливает значение положения переключателя ("position") в соответствии со статусом.
3. Переключатель принимает указанное значение.

4. При использовании переключателя в Majordomo, исполняется метод "switch". Который считывает текущее состояние "position" и передаёт в MQTT команду с инверсным состоянием.
5. Через MQTT в метод "Receive_status" приходит status и меняет свойство "position" и положение переключателя.

Вопрос в следующем:
В методе Switch, команды, с моей точки зрения, переставлены местами. По моему пониманию, при состоянии "position" "0", должна передаваться команда для перехода в состояние "1". Однако , создаётся ощущение, что, при переводе переключателя в другое положение, значение свойства "position" меняется до того как метод инициализируется. В результате при исходном значении "position" "0" (это я проверяю через X-Ray) выполняется условие для "1".
Подозреваю, что есть что-то, что я не учитываю. Подскажите, кто может.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Публикация топика в MQTT
СообщениеДобавлено: Ср мар 08, 2017 8:18 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пн окт 28, 2013 8:14 am
Сообщения: 1533
Откуда: Екатеринбург
Благодарил (а): 68 раз.
Поблагодарили: 302 раз.
Если вы привязываете выключатель в меню к статусу, и на основе него переключаете - логика такая, что в начале в БД передаётся статус выключателя, потом на основе него выполняется код привязанного метода...
Сначала мне тоже казалось что должно быть наоборот...потом вроде стало казаться логичным.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB