Спасибо. Согласен, что правильнее делать так как задумано.
Файл есть, ошибок нет. Но не работает. Впрочем, вняв совету я получил тот результат, который хотел.
Сейчас вопрос встал несколько иначе. Я, для экспериментов, сейас использую 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 метода:
$data=json_decode($this->getProperty("status"));
$status=$data->state;
$this->setProperty("position", $status);
$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".
Подозреваю, что есть что-то, что я не учитываю. Подскажите, кто может.