Отлично. На конкретные вопросы есть конкретные ответы.
Вы создали объект с неким именем. У этого объекта есть свойства. Так?
Теперрь идём в "Панель управления -> Устройства -> MQTT" там, после экспериментов должна быть запись /H801/cmd. Справа кнопка редактирования. Идём туда. Открываются настройки этого топика. В поле "Связаный объект" выбираем Ваш объект (в моём примере LED_Line). В поле "Свойство" выбираем свойство, в котором у Вас команды устройству (в моём примере "cmd").
Сохраняемся. Идём в топик /H801/status. И привязываем этот же объект только свойство "status". Сохраняемся.
Если Вы не видите в топиках своего объекта, значит он не создан.
Получилось?
Идём дальше. Открываем "Панель управления -> Объекты" Перед Вами список классов, среди которых есть созданный Вами. Около него "+", нажимаем. Появляется Ваш объект. Кликаем по объекту, открывается окно настройки. Переходим в "Свойства". Обратите внимание, там 2 строки закладок, верхняя для класса, нижняя для объекта. Нам нужна нижняя, для объекта.
Кликаем на Поле ввода свойства, появляется возможность ввести значение. Вводим команду, нажимаем "Обновить".
Дальше происходит следующее: Команда сохраняется как значение свойства - автоматически (мы же связали свойство с нужным нам топиком) она там публикуется - ESPEasy читает команду из топика и выполняет её - после чего в топик /H801/status публикует ответ - Majordomo читает ответ из топика - поскольку этот топик у нас связан со свойством "status" нашего объекта этому свойству присваивается значение ответа.
Если Вы отрефрешите страницу свойств Вашего объекта Вы увидите ответ.
Это, так сказать, вручную.
Для автоматической работы Вам надо из PHP кода писать в нужное свойство. А для того, чтобы автоматически читать из какого-то свойства нужно в настройках этого свойства привязать его к методу. В классе, на странице "Свойства" есть такая настройка "Запускать метод при изменении (не обязательно):"
Как пример вот Вам пара моих методов, это всё отладочные наработки.
Этот метод привязан к изменению свойства "status". Его задача понять что туда прилетело. Если прилетел ответ на запрос статуса устройства - вызываем метод Parse_status, если получена информация о том, что ESPEasy перегрузилась запускаем метод Status_restore, если пришла информация,что теряли связь просто пишем в лог.
$status=$this->getProperty("status");
if($status[0] == "{"){
$this->callMethod('Parse_status');
} elseif ($status == "Rebooted"){
$this->callMethod('Status_restore');
} elseif ($status == "Connection Lost") {
// Просто выводим в лог. Все действия программируем на стороне ESPEasy
Debmes("Потеряли связь");
}
Этот метод разбирает полученный статус. Если это "первичный" ответ от ESPEasy он повторно запрашивает у нег статус, если ответ "вторичный" (на запрос метода) то прописывает полученное значение в соответствующее свойство.
$data=json_decode($this->getProperty("status"));
$log=$data->log;
if($log==""){
$this->setProperty($data->pin.'-mode', $data->mode);
$this->setProperty($data->pin.'-state', $data->state);
}
if (substr_count("$log", "Set to")){
$this->setProperty("cmd","status,gpio,$data->pin");
Debmes("Переключили");
}
if (substr_count("$log", "Set PWM")){
$this->setProperty("cmd","status,gpio,$data->pin");
Debmes("Мерцаем");
}
if (substr_count("$log", "Pulsed")){
$this->setProperty("cmd","status,gpio,$data->pin");
Debmes("Мигнули");
}
if (substr_count("$log", "tone")){
$this->setProperty("cmd","status,gpio,$data->pin");
Debmes("Попищали");
}
if (substr_count("$log", "rtttl")){
$this->setProperty("cmd","status,gpio,$data->pin");
Debmes("Поиграли музыку");
}
if (substr_count("$log", "Servo")){
$this->setProperty("cmd","status,gpio,$data->pin");
Debmes("Дёрнули серву");
}
Этот метод запускается после перезагрузки ESPEasy и восстанавливает значения портов, которые мне надо восстановить.
for ($i=1;$i<17;$i++){
if ($i!=6 && $i!=7 && $i!=8 && $i!=11){ // Отсекаем пины SPI
$mode=$this->getProperty("$i-mode");
$state=$this->getProperty("$i-state");
switch ($mode){
case "output":
$this->setProperty("cmd", "gpio,$i,$state");
Debmes("pin $i mode output");
break;
case "PWM":
$this->setProperty("cmd", "pwm,$i,$state");
Debmes("pin $i mode pwm");
break;
}
}
}
Методы рабочие, но незакончена логика. Это отладочный механизм.
Спрашивайте дальше. Чем смогу - помогу.